refactor(pane motion): delete motion.frameOwner.contentPolicy; containers always follow and a closing pane always keeps its ground (FRAME OWNER S3)

Merged
LA
1d ago
+67-156

Summary

FRAME OWNER REFACTOR stage S3, the switch deletion. Stacked on #35140 (S3d): its base is that branch, and it retargets to feat-cmux-next when S3d merges.

S3 landed with motion.frameOwner.contentPolicy default on (#34170, squash a08c406ba0f). Its gate passed: the refactor owner's films, typing GO, and the first FEAT DOGFOOD BUILD with S3, judged 10/10 (f1c3ebfd, feat cf86f55a1c7d, STATUS 11111). The rule for a stage: once its gate passes, the switch and the old path go. No behaviour change with the default on.

Frames: no content kind changes what it shows in any frame (the default-on path is the only path now).

Removed:

  • LayoutTunables.frameOwnerContentPolicy (Debug Settings motion.frameOwner.contentPolicy) and its entry in LayoutTunables.all.
  • LayoutViewContext.contentPolicyOverride and followsContentPolicy.
  • PaneMotionHold.containersFollow: a content area's hold always lets its containers (PaneMotionHoldFollowing: a terminal's host, a browser's chrome) follow it; other subviews keep their frames, as with S1.
  • PaneHostView heldAreaFollows: a key hold whose content has a held area always follows (heldArea != nil).
  • ScreenContentView.retireClosing: a springing close always keeps the closing host with its ground (still hidden on a canvas, as before).
  • Doc comments that named the switch.

Tests:

  • Deleted the OFF pins: PaneContentPolicyTests.aSwitchFlipMidSpringAppliesFromTheNextMotion, the false cases of CloseTeardownAfterLandingTests (2 tests) and of KeyboardResizeContentHoldTests.theProducerResizesOnceAndTheContainersFollowEveryFrame.
  • Every contentPolicyOverride = true pin is gone (the shared rig, the S3 and S3d suites), so they prove that the S3 path is the only path.
  • PaneContentPolicyBench runs the one path. Its doc keeps the off/on numbers (step 4b4b80b33807e84dbb37cbfc).
  • No new test: nothing changes with the default on.

schemas/defaults/cmux-next.json is not edited by hand: the base autofix regenerates it (as for S1's delete, #34195).

Area owner told (STATUS 11449): PL-ghostty (one doc line in TerminalHostView+PaneMotion.swift).

Testing

Fleet green at the head a348d0742f3: step 8fc27668f579aca2158ed0d9 (36 suites: the S3 and S3d suites, every key-resize and close suite, FrameOwnerS1HoldPathsTests, the browser pane-motion suites, TerminalSurfaceCommitSizeTests, TerminalFrameOwnerMainThreadTests): 35 of 36 suites passed; TerminalFrameOwnerMainThreadTests ran no test there (it runs only on a display worker), so it ran in the GUI proof step 967af4b14b58f699076fe1be (display worker cmux10s-Mac-mini): 6 of 6 suites passed (TerminalFrameOwnerMainThreadTests, PaneGroundCoversPaneTests, PaneContentPolicyTests, CloseTeardownAfterLandingTests, PaneCloseKeptHandleTests, PaneCloseCameraGroundTests).
Optimized release bench (PaneContentPolicyBench, PaneMotionWorkTests): step 05c8011ae44ea5f8a6c8d7ad: both passed. One path now, p50 / p95 / p99 / max: keys 0.133 / 0.145 / 0.152 / 0.283 ms, close 0.149 / 0.159 / 0.315 / 0.345 ms (aws-m4pro-7; the S3d head's switch-on numbers on aws-m4pro-9 were 0.119 / 0.130 / 0.134 / 0.154 and 0.135 / 0.143 / 0.180 / 0.187 ms: another host).

Changelog

none

Proof

No capture: no behaviour change (a switch and its off path deleted).

Observed / Not run

Observed: the fleet steps above.
Not run: films (no behaviour change with the default on, which the films already judged).