Repository navigation
cmux NEXT: a lone chat's link opens only in the pane on the right, never first in the main pane - #32871
Conversation
…the layout has the dock (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-ed9226b71907d8aaa0b6
…ver first in the main pane A strip sync from outside the pane's observation (the dock's wait for the moved chat ending the OutboundTab hold, a tab item change) applied the store's tabs before the workspace applied the store's layout, so the link's tab showed and opened in the full-width main pane for that turn, before the layout moved the pane to the right. Every strip sync now applies the workspace layout first when the pane's tabs changed (StripAfterLayout), as the pane's own observation already did. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-ed9226b71907d8aaa0b6
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-ed9226b71907d8aaa0b6
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Shipped in:
|
|
Review (codex, router-review): SHIP at 3ff78da Reviewer: codex gpt-6.1-sol xhigh, fast tier. Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward. SHIP at 3ff78da No correctness defects found by inspection. Native tests couldn’t run here: Linux, no Swift toolchain.
Follow-ups:
|
…packages (tip arch red after 79b76ff) (#32928) * base red: move the App lines of #28068, #32722 and #32851 into their packages (tip arch red after 79b76ff) The tip arch ratchet counts CmuxNextApp +51 over the last green arch tip c5d7e8d. #32858 takes #32752's +27; #32871's +8 has its exception. This takes the other three culprits, each by a move of its own code path with no change in behavior: - #32851 (+1): the kind of a tab that opens beside a chat (browser, local terminal, or document for the Changes page) is RightColumnPlacement.Kind(opening:document:) in CmuxNextAgentPane. - #32722 (+5): a Cloud machine's workspace row (id, name, resource_id) is WorkspaceModel.cloudMachineWorkspaceRow in CmuxNextControl. - #28068 (+15): the half-created workspace close that its create path runs through (WorkspaceCreation.withTerminal and its logger) is EmptyWorkspaceRepair.withTerminal in CmuxNextWorkspaceRepair, next to populating(_:_:), which every caller already wraps it in. Same log subsystem and category. * cloud.machines: map workspace rows with a closure (no key path to a main-actor property) * cloud.machines workspace row: package access with package imports (the compile refused public over internal imports)
|
Fleet verification at head
Every suite row also says Review: |
leo-named-fix
Leo (2026-11-03): "and also the browser/tab opening animation still plays on the main pane before going". Earlier (2026-10-21): "the opening up a new link from a given main pane without any other splits it plays the opening animation on the main window...".
What was wrong
From a lone agent chat, a link's tab is made unselected in the chat's pane and kept out of its strip (
OutboundTab) while the chat docks left (MainPaneLayout.dockChat); the pane, holding the tab, then slides in from the right as the content handoff.PaneController.observeapplies the workspace layout before the strip, so a tab that moved away leaves the strip in the same turn its new pane shows. Two other strip paths did not:syncStripFromStore(called byOutboundTab.finishwhen dockChat's wait for the moved chat hears the store, which can come before the pane's own observation) andtabItemChanged(a loading page's title/favicon change). Either could list and select the new tab while the layout still had the pane full width as the main pane, so its open played there first, and only the layout apply after it moved the pane to the right.Fix
PaneController.layoutFirst(): when the record's tabs changed since the strip took them (stripIsStale), those two paths apply the workspace layout first (no-op when unchanged), then skip the strip apply if that apply tore the pane down. Nested calls fromWorkspaceContentController.apply->syncStaleStripsend at once (the tree is unchanged).plans/cmux-next/arch-exceptions/dock-chat-strip-order.json: app_lines +8 (the helper and its doc comment), with the review receipt.Prior art kept: #24577 (OutboundTab), #28127, #23969 / revert #24292 (the hold and its edge cases are untouched), the handoff motion (
ChatDockLinkSplitMotionTests).Risk
Normal. Touches when a strip sync applies the layout; the only new work is one
LayoutMapping.mapon a stale strip sync. No change to OutboundTab's hold rules or to the layout motion.Verification
Red/green:
swift test --filter DockChatStripOrderTests(commit a75a88e is the test alone; the fix follows). Fleet results posted as a comment below.Observed / Not run
Changelog
Agent session: agent session
🤖 Generated with Claude Code
Open in [code]smith · Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
A link opened from a lone agent chat now appears in the right pane only after the chat docks, instead of briefly opening in the full-width main pane.
Written for commit 3ff78da. Summary will update on new commits.