Correctness fixes from the origin/master...HEAD review:
- Capture the color picker's target (tab vs group) when the
picker opens, fixing an MRC use-after-free of
_tabGroupIDForColorPicker and a stale panel silently
retargeting a group.
- Keep a group's last member in its group on a no-move drop
(its own gid-carrying slot now reports the group), and fire
didDrop only when position or membership actually changes.
- Skip chip cells in the overflow menu (a chip became a blank
item selecting a nil tab), lastVisibleTab,
numberOfVisibleTabs, and the accessibility tab lists.
- Honor fit-to-content widths when a group exists instead of
snapping every tab to uniform widths.
- Gate the scrollable-bar trailing clip outset on chips being
present so groupless bars keep the exact viewport clip.
- Enforce pinned-prefix and group-contiguity invariants
through one canonical order (iTermTabGroupOrdering) used by
applyTabOrder: and the reorder repair: pinning a tab is no
longer undone, group drops clamp to the pinned zone, and a
wrapped Move Tab Left/Right clamps instead of no-opping.
- Stop cloning group identity across windows: a single member
moved or dropped elsewhere ungroups (only whole-group chip
drags and tear-offs carry the group).
- Report an honest create-tab API status when tab_index is
refused or clamped.
- Fix the duplicate join slot at a group's trailing edge and
the NSNotFound drop anchor snapping a dropped group to the
front of the bar.
- Push group membership to cells by tab view item, not by
position; mid-drag the dragged tab's cell is absent, which
shifted every later tab's group id (a one-tab group vanished
into its neighbor while dragging).
- Use the live mouse location in the tab bar's drag handlers;
AppKit's throttled draggingLocation interleaves stale points
and flapped the drop target.
Drop feedback while dragging into another window's bar:
- Run the drag animation timer in the tracking run-loop mode;
it starved during a live drag and slots never opened.
- Distribute drop slots on entry keyed on drag participation
so a stale placeholder cannot suppress setup.
- Shrink a full (stretch-to-fit) bar's tabs from snapshotted
base widths so the slot carves a visible gap.
- Auto-scroll a scrollable bar, both directions, to reveal
the targeted slot.
- Size the slot to the dragged unit's on-drop extent in the
destination, not its size in the source bar.
- Keep the group outline around the dragged member's own slot
so it shrinks with the slot instead of snapping down.
Policy: dragging a one-tab group's last tab out dissolves the
group; in-place drops and chip drags keep it.
Architecture and cleanup: drop context now flows through
tabView:didDropTabViewItem:inTabBar:joiningGroupWithID:
(droppedInsideGroupID side channel removed); one shared run
enumerator feeds both styles' group decorations; deleted the
dead PSMTabGroupChipView instance side, unused drag helpers,
and an uncalled getter; consolidated the duplicated luma math
in NSColor+PSM; cached chip text measurements; batched the
membership push to one normalize per update; resolved
terminalForTabBar: via the delegate; gated expensive RLog
dumps; added always-on drag telemetry (animTick, calc,
dragScroll) for field debugging; release notes.
New tests: PSMTabGroupEnumeratorTests,
PSMTabGroupDropResolutionTests, iTermTabGroupOrderingTests,
plus live drag coverage in PSMTabGroupDragTests (timer mode,
slot sizing, squeeze, auto-scroll, stale-slot entry).