cmux NEXT: Home's Search field keeps clear of the traffic lights after Cmd+B
Fixes #25593
Home can move under the window's traffic lights when Cmd+B hides the sidebar, a pane moves, or a hidden workspace reappears. Its header and compose button now recheck their position on those paths.
The merge preserves feat-cmux-next's Messages-style header: Search sits below the traffic lights and Unread sits beside them. A weak, window-owned registry refreshes Home views without a resize; hidden views wait until they reappear. Pane/window triggers use WindowControlsAvoiders.refresh(in:) in the design module. Tab strips share the obstacle intersection helper with their existing clearance behavior. The unused HomeSidebarSplitView.windowControlsMoved callback is removed.
Verification
Current head: 8def914b9c9009bdf8cf6c5432c207a3987a27be, merged with base d8a452229dbf66cdf4fca19cb0f5aed40303d00b.
- Swift syntax, full static pre-push gate and the push hook pass with no new violations.
- A fresh independent correctness subagent review passed on this exact head. It found and verified the repair of a vacuous test fixture: the WindowController test now requires overlap before its callback and clearance afterward.
- Current-head Debug app compile passes (job). Release compile at
-Ononeand the bundled cmux-tui check pass in recipe-2 fleet job5f223470aa0b430b408a316a; cleanup is confirmed. - Fast gates pass.
- Fleet step
51791dba1079898f5f938ebfcompiled the test targets and executed all three Home suites below: 9, 7 and 8 tests passed (24 total). The step's aggregate result is red because I also supplied a nonexistent fourth filter,TabStripWindowControlsTests, which ran zero tests. The shared obstacle helper is covered byHomeHeaderTrafficLightsTests; no tab-strip suite pass is claimed. - The preceding run at
1c20cdb8dc4eexposed a Swift compiler assertion on the inline#requirecallback invocation. This head binds the callback first, and the real WindowController regression now compiles and passes with its overlap precondition intact.
cmux-ci run --class light --script scripts/ci/package-test-lane.sh \
--ref 8def914b9c9009bdf8cf6c5432c207a3987a27be \
--arg=suite --arg=Packages/macOS/CmuxNext \
--arg=HomeHeaderTrafficLightsTests,HomeWindowControlsTests,HomeSearchGlassTests \
--env CMUX_CI_XCODE_APP=/Applications/Xcode_26.6.app
HomeHeaderTrafficLightsTests covers movement without resizing, the pane movement hook, hidden/unhidden workspaces, narrow header geometry, chat compose clearance and the shared obstacle calculation. Its WindowController regression drives the real onMainPaneMove callback after proving the stale Search field overlaps the lights.
Historical red/green for the original overlap: the same package-test-lane command with HomeHeaderTrafficLightsTests failed at test-only commit 3b87ff4e89d0b1a9634d9c647d17c81a7b8b11b9 (fleet step a753966c40bda1291c0fb915) and passed at 1438f2ac3b81db8e7dacd95f4dda16e873894200 (step 6c919d126e3534c80c2c2af1). Those historical runs do not verify this head.
Observed / Not run
Observed: current-head syntax, static gates, Debug and Release compiles, 24 executed Home tests and exact-head independent source review. The actual WindowController callback test passes. Base findings are documented with matching logs in this comment.
Blocked externally: the compile-status job timed out waiting for its automatic receipt despite the passing exact-head Release compile. GitHub's shared event webhook returns HTTP 503; its full delivery spool is hours behind. The manual compile receipt cannot populate that protected status. Autoland has not admitted this head.
Not run: Cmd+B in a running app on this head. The regression uses a real WindowController and ShellWindow, but invokes the movement callback rather than synthesizing the shortcut. No current-head tab-strip suite or app capture is claimed.
No capture: the earlier capture request fell back to Blacksmith macOS and remained queued when the wrapper timed out (run). No current-head capture is claimed.
Owners (PL-switch, PL-instant, FYI): window movement refreshes registered Home views. The tab strip change extracts its obstacle intersection without changing its result.
Changelog
- Fixed: Home's header and compose button keep clear of the window controls after the sidebar or pane moves.