refactor(tabs): delete motion.frameOwner.tabStrip; the strip always follows its pane in a key resize (FRAME OWNER S1)

Merged
LA
2d ago
+221-287

Summary

FRAME OWNER REFACTOR stage S1, the switch deletion. S1 (#33874, squash 4f9f9599cf47) landed behind the Debug switch motion.frameOwner.tabStrip, default on, after its OFF/ON films (GREEN), typing-load-l6 (PASS), the GUI proof and the off/on bench. The rule for a stage: when its films pass and the first FEAT DOGFOOD BUILD with it passes its gate, the switch and the old path go. Gate: JUDGED 78d37f8b (feat 441ea22515e0, contains 4f9f9599cf47): 10/10 P0 journeys pass, failing: none (STATUS 10029).

This PR changes no behavior with the default on.

Removed:

  • DesignTunables.frameOwnerTabStrip (Debug Settings motion.frameOwner.tabStrip) and its entry in frameOwnerTunables. The film fixture motion.frameOwner.tabOutline stays (DEBUG and bench builds) while the refactor's films run.
  • PaneHostView: a key-resize hold always takes the content's PaneMotionHolding area. The whole-view hold in contentFrame(in:) stays: content with no such area, a browser in its band and a chat whose tools share the tab row still use it (S5/S6 own that exception).
  • TabStripView.layout: a viewport change always lays the tabs out at once (relayout(animated: false, keepsClosing: true)); the branch that started a TabStripMove for a width change while a close was in flight is gone.
  • The stale comment that named "the strip's move start" as a reader (that reader went before the S1 merge).

Tests:

  • Deleted the OFF pins: PaneContentAreaHoldTests.withTheSwitchOffTheWholePaneContentHolds and the false case of KeyboardResizeOneGridReportTests.aCloseDuringASecondPressSendsEachTerminalOnlyItsFinalGrid (one case now: the area hold).
  • TabStripFollowsPaneTickTests.withFrameOwnerSwitch is gone. Its callers (TabStripFollowsPaneTickTests, PaneContentAreaHoldTests, PaneTabRowHoldLatchTests) run with no switch setup, so they prove the S1 path is the only path.
  • TabStripFollowsPaneTickBench keeps an on-only run (keyResizeFrameTime); the off/on numbers stay in its doc (step 321ba04adf2ae8d6f0a0ddd9).
  • No new test: nothing changes with the default on.

schemas/defaults/cmux-next.json is not edited by hand: the base autofix regenerates it. The defaults guard flags the removed default; it needs the review receipt on the head.

Coordination: #34170 (S3, frame-owner-s3b) reads the switch through LayoutViewContext.followsTabStrip. Whoever lands second deletes that reader (STATUS 9978, 10046).

Testing

Green at the head 868c541c0aa994933f4de38ddd7a3fe6d22ede5a:
cmux-ci run --class light --script scripts/ci/package-test-lane.sh --arg=suite --arg=Packages/macOS/CmuxNext --arg=TabStripFollowsPaneTickTests,PaneContentAreaHoldTests,PaneTabRowHoldLatchTests,KeyboardResizeOneGridReportTests,PaneHeldContentLandingTests,KeyboardResizeContentHoldTests,KeyboardResizeHoldLifetimeTests,TabSelectionKeepsTabWidthsTests --env CMUX_CI_XCODE_APP=/Applications/Xcode_26.6.app --ref 868c541c0aa994933f4de38ddd7a3fe6d22ede5a

  • step 55b80b6b1e8222f606085382 (aws-m4pro-1): 8 of 8 suites passed.
  • GUI step at the head (--display --label gui-session-v1, display worker cmux8s-Mac-mini): step fab9fb840fd77a302adfebd4 passed 7 of 7 (TabStripFollowsPaneTickTests, PaneContentAreaHoldTests, TabCloseWidthChangeTests, KeyboardResizeContentHoldTests, KeyboardResizeHoldLifetimeTests, KeyboardResizeOneGridReportTests, PaneTabRowHoldLatchTests).

Review: Codex (gpt-6.1-sol, no tools, code pack): Review (codex): SHIP at 868c541c0aa994933f4de38ddd7a3fe6d22ede5a (comment 6613899619). Non-green checks are base findings (comment 6614627945).

Observed / Not run

  • Observed: the fleet steps above; scripts/cmux-next/check-motion.sh: ok; prepush-gate.py: no new violations, no architecture count rises.
  • Not run: no new film. The deleted path is the OFF path, which the default never runs; the films and the P0 gate ran the ON path, which this PR keeps unchanged.

Changelog

none

Proof

No capture: no visual change (the switch and its default-off path go; the default-on path is unchanged).