Skip to content

cmux NEXT spaces: Move Space to This Window and Merge All Windows - #27327

Closed
teamleaderleo wants to merge 5 commits into
feat-cmux-nextfrom
spaces-bring-here
Closed

teamleaderleo wants to merge 5 commits into
feat-cmux-nextfrom
spaces-bring-here

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator

Leo (2026-10-29): "could u guys also now work on the per space pins and groups? rn anything u make in teh default space goes across to new ones... there's also other ergo wrt new windows being like new spaces, incognito spaces, etc... this could legit make our thing more useful than chrome by having windows be switchable in this way. think of the potential perf savings~"

This PR covers the windows part of that ask. Per-space pins and groups are not in it.

What changed

  • space.bringHere "Move Space to This Window": the reverse of Open Space in New Window. Every workspace of the space that another normal window holds (open or closed) moves into the acting window. That window then shows the space and selects the workspace the space last showed (the one a window showing the space had selected, else the one remembered for the space). If no other window holds any of the space's workspaces, it is a plain space switch. Workspaces only change owner, so terminals keep running and nothing restarts. A source window left with no workspace closes through the existing WindowRegistry.move / closeEmptied path. A source window that still holds other spaces' workspaces stays open. Moving an incognito space, or moving into an incognito window, is refused with the existing RefusalStrings.incognitoMismatch HUD. Surfaces: the palette, the space's right-click menu ("Move to This Window", next to Open in New Window), cmux space bring-here, and MCP (spaces-overhaul-DESIGN.md rule 7).
  • window.mergeAll "Merge All Windows": every other open normal window's workspaces move into the acting window, and each workspace keeps its space. The other windows close. The acting window stays on its space with the same selection. For spaces it never showed, it takes each merged window's last shown workspace, so switching there shows what that window showed. Incognito windows are left alone, and running it from an incognito window is refused. Surfaces: the Window menu (after New Incognito Window), the palette, cmux app merge-all-windows, and MCP. It has a context-menu exemption, as Close Other Windows does.
  • Titles are in ProfileActions.xcstrings and ActionCatalog.xcstrings (en and ja translated; the other locales are needs_review, as in neighbouring entries).
  • plans/cmux-next/action-surfaces.json and actions.md are left to the base autofix (regenerate-action-exports.sh).

Risk

  • Additive. No existing default, component or menu row is changed or removed.
  • The Window menu gains one row, so MainMenuPlacementTests now expects 10 Window rows instead of 9.
  • Both actions run one registry transition (transition { $0.move(...) }), the same path switchProfile adoption and Move to Window use. Incognito windows are filtered out of the sources before the move, so crossesIncognito never drops the batch.

Tests

  • New GatherWindowsTests (.closesItsWindows):
    • Bring-here closes the window it emptied and keeps the space's last shown workspace selected.
    • Only that space's workspaces move, and a source window that keeps other spaces stays open.
    • Incognito space or window is refused and nothing changes.
    • Merge-all keeps each workspace's space, closes the merged windows and leaves the incognito window alone.
  • SpaceSurfacesTests names space.bringHere and checks it is in the space menu.
  • Focused fleet Mac run (package-test-lane.sh suite GatherWindowsTests, SpaceSurfacesTests, MainMenuPlacementTests, ActionSurfaceParityTests, ShowWorkspaceOtherRoomTests, IncognitoSpaceTests): all 6 suites passed (ActionSurfaceParityTests: 2 export-freshness tests skipped as usual). cmux-ci step 0ca0e2da7b669522ed80b23f, at 62fed54: this head (69b56f9) with test(next): BrowserEntryRetirementTests compiles again (base red from #27166) #27301 merged in, on a CI-only branch. At this head alone, CmuxNextAppTests does not compile because of the base red from fix(next): retire browser pages before chrome teardown #27166 (BrowserEntryRetirementTests.swift:43:57, "returning main actor-isolated ... as a 'sending' result"; step c559ae7de547b95c91d859b5). This PR does not touch that file, and test(next): BrowserEntryRetirementTests compiles again (base red from #27166) #27301 fixes it.

No capture: the only visible change is new rows in the Window menu, the space's right-click menu and the command palette, and the main window is unchanged. A fleet capture (steps-6d58e8bbea at 59c45ae: open the palette, type "merge all", then "to this window") keeps one still of the main window, and the palette panel and menus draw in their own windows outside it, so the still shows nothing new. SpaceSurfacesTests and MainMenuPlacementTests pin the new rows instead.

Performance

No perf numbers: the word "perf" here is Leo's quote ("think of the potential perf savings"). This PR adds two window actions and changes no hot path, timer or observer; it measures nothing.

Agent session: agent session

🤖 Generated with Claude Code

Leo 2026-10-29: "there's also other ergo wrt new windows being like new
spaces ... this could legit make our thing more useful than chrome by
having windows be switchable in this way".

- space.bringHere "Move Space to This Window" (palette, the space's
  right-click menu after Open in New Window, cmux space bring-here, MCP):
  every workspace of the space another normal window holds moves into
  this window, which shows the space with the workspace it last showed;
  a window left with none closes (WindowRegistry.move). Refused for an
  incognito space or window.
- window.mergeAll "Merge All Windows" (Window menu, palette, cmux app
  merge-all-windows, MCP): every other open normal window's workspaces
  move here, each keeping its space; those windows close; incognito
  windows are left alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-a6ff86326d44fa86c638
@cursor

cursor Bot commented Oct 29, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 4f27413: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr27327 -f ref=spaces-bring-here -f platform=macos -f backend_mode=local

red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on 0ce3c31 to compare; do not merge until green; see lane-rules

@teamleaderleo

teamleaderleo commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Default changes

This pull request changes 5 defaults at 36e595d698c0 (what everyone gets without configuring anything):

  • tunable-source.CmuxNextActions/ActionSurfaceCatalog+Menus.swift:layoutPlacements: "087aba83afdc9cea1daf878ab7433f5e25c39f4d73a9decef89e8f89feddf9d3" -> "da5024a3c17acf9ede3281f1ce7a6b8a06b5364292f94cf6dfacffddec6a01af"
  • tunable-source.CmuxNextActions/Catalog/SpaceMenuLabels.swift:bringHere: (none) -> "ea049e589ff08f82de59248e676cfe573dae4dbf884d3069e1d0a96c6c85db28"
  • tunable-source.CmuxNextApp/Handlers/RoomHandlers.swift:bind: "af4e8c3897c0daf31dd3e700c2e7494ed5af8a9d9115b0a8fe8fe8a96e9cdcd5" -> "c431958c6656780e7234bdc99c830a66df647ae5cd907581cf6fe10d38028a32"
  • tunable-source.CmuxNextApp/Handlers/WorkspaceSetVerbs.swift:bind: "e6313469de7e4319c7bf699c377a5dbf1735f928002d7fdfbba9fd3543b3795a" -> "e5d9201bbbf19a20b1caab05228aa69cf30a864c0254eddc50098600509383ab"
  • tunable-source.CmuxNextApp/MainMenu.swift:compactActionIDs: "0d85ad8a7a5d2ed06c73a03da9ef6e6f8b28acb3a7eb85ce556a30b8a356435e" -> "73b640987050077767f5063b6eeba83e458b04e04f580b890000fff1d767c27b"

Signed off on this commit by review (codex gpt-6-astra high fast, independent review host).

Regenerate the snapshot with python3 scripts/ci/defaults_guard.py snapshot.

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 29, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-5h4lh4 created for this PR by the cmux coordinator.

@blacksmith-sh

blacksmith-sh Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Found 7 test failures on Blacksmith runners:

Failures

Test View Logs
--from must install a complete prebuilt tree/
--from must install a complete prebuilt tree
View Logs
/tmp/tmp81yumw1b/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpq6fsx0sl/summary-missing.json (live):/summary-missing.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, next-review): SHIP at 69b56f9

No blocking findings.

cmux-bot[bot]
cmux-bot Bot previously approved these changes Oct 29, 2026

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves 69b56f9: an independent review passed this exact head (next-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

@cursor

cursor Bot commented Oct 29, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@cmux-bot
cmux-bot Bot dismissed their stale review October 29, 2026 22:46

A newer verdict blocks 59c45ae (no independent SHIP at the head).

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex-review-box/gpt-6-astra high, lane-place): BLOCK at 59c45ae

BLOCK

  1. [P2] WindowManager+Gather.swift:27 — space.bringHere changes the destination’s space and selected workspace even for CLI/MCP calls without --focus. The action is not marked focuses, and neither this branch nor the switchProfile fallback checks ActionRunScope.viewChangeAllowed(). Automation therefore unexpectedly replaces the user’s current view. Gate the profile switch and preferred selection on that permission, including the no-move fallback.

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 29, 2026
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 29, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high fast, independent review host): BLOCK at 59c45ae

  • P1 — Generated action exports are stale. The new space.bringHere and window.mergeAll descriptors in ProfileActionCatalog.swift:45-50 and WindowActionCatalog.swift:49-53 are not reflected in plans/cmux-next/action-surfaces.json or the generated catalog block in plans/cmux-next/actions.md. check-action-surfaces.sh enables freshness checks, so exportIsFresh, reportIsFresh, and countsByDomainMatchInventory will fail for this PR.

VERDICT: BLOCK

…nd window.mergeAll

Generated on the fleet by scripts/cmux-next/regenerate-action-exports.sh at
59c45ae; the only change is the two new actions and their counts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-89c8bbec072d313a51cd
@cursor

cursor Bot commented Oct 30, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

…g-here

# Conflicts:
#	plans/cmux-next/actions.md
…without focus permission

A CLI or MCP run without view-change permission still moves the space's
workspaces, but the window keeps its space and selection, as New Space
does (RoomHandlers.startNewSpace).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-89c8bbec072d313a51cd
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high fast, independent review host): SHIP at 36e595d

No actionable correctness findings in the supplied diff at 36e595d698c0.

Static review only; builds and tests were not run.

VERDICT: SHIP

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Carried onto #28049 with its commits and authorship, plus a fix for its own cmux-next checks red (action-wait and app-size guardrails). Its review is running there. This PR's branch can't be updated by the drain lane, so the work continues there.

cmux-bot Bot added a commit that referenced this pull request Oct 31, 2026
…rries #27327) (#28049)

* cmux NEXT spaces: Move Space to This Window and Merge All Windows

Leo 2026-10-29: "there's also other ergo wrt new windows being like new
spaces ... this could legit make our thing more useful than chrome by
having windows be switchable in this way".

- space.bringHere "Move Space to This Window" (palette, the space's
  right-click menu after Open in New Window, cmux space bring-here, MCP):
  every workspace of the space another normal window holds moves into
  this window, which shows the space with the workspace it last showed;
  a window left with none closes (WindowRegistry.move). Refused for an
  incognito space or window.
- window.mergeAll "Merge All Windows" (Window menu, palette, cmux app
  merge-all-windows, MCP): every other open normal window's workspaces
  move here, each keeping its space; those windows close; incognito
  windows are left alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-a6ff86326d44fa86c638

* cmux NEXT spaces: regenerate the action exports for space.bringHere and window.mergeAll

Generated on the fleet by scripts/cmux-next/regenerate-action-exports.sh at
59c45ae; the only change is the two new actions and their counts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-89c8bbec072d313a51cd

* cmux NEXT spaces: Move Space to This Window keeps the view for a run without focus permission

A CLI or MCP run without view-change permission still moves the space's
workspaces, but the window keeps its space and selection, as New Space
does (RoomHandlers.startNewSpace).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-89c8bbec072d313a51cd

* fix(cmux-next spaces): Merge All Windows is a typed effect; the gather code joins WindowManager+Profiles

The pre-push gate (and cmux-next checks' 'Pushed commits add no
violations') refused #27327 for two guardrails it added: an untyped
registry.bind for window.mergeAll (action-wait) and a new CmuxNextApp
file (app-size). window.mergeAll now binds with the throwing
bindEffect(requires:effect:), which refuses a thrown ActionFailure the
same way and returns .done; WindowManager+Gather's extension moves
unchanged into WindowManager+Profiles (a space move is a profile
operation), which the app-size rule only warns about.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-f050dc5d5c747badec51

* Test: Move Space to This Window leaves unresolved workspaces in their window

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window: leave unresolved workspaces in their window

A workspace no session reports yet shows in every space, so bringing any
space here moved it too and could close its window. Move only workspaces
whose space is known.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Regenerate cmux-next action and defaults exports

From the cmux-next-generated-patch artifact of run 41139330932.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: a workspace being created in a window that Move Space or Merge All closes follows the move

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window, Merge All Windows: claims follow the move

A workspace being created in a source window the move closed kept its
claim on that window, so reconcile reopened it when the workspace
arrived. Retarget those claims (and drop the closed window's pending
frame) to the acting window.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: a pending sidebar placement follows Move Space and Merge All too

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window, Merge All Windows: pending sidebar placements follow the move

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: a create queued before Move Space or Merge All lands in the acting window

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window, Merge All Windows: a create queued before the move lands in the acting window

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: Move Space and Merge All refuse to close a window still creating a workspace

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window, Merge All Windows: refuse to close a window still creating a workspace

The earlier retargeting covered claims and placements but not queued
lane creates or provisional rows. Refuse the move instead while a window
it would close has a create in flight (claim, placement, lane, row);
nothing changes and the user retries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: a window's own Home stays with its window, and local browser tabs move with their pane

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window, Merge All Windows: a window's own Home stays with its window; local browser tabs move with their pane

Merge All moved each window's Home next to this window's Home, where
closeSurplus closed it with the terminals beside it. Window Homes now
stay in their window, which Merge All closes (kept as a closed window,
terminals running, as Close Other Windows). Session-local browser tabs
of moved panes move to the receiving window's state.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: carrying local browser tabs leaves other windows' panes alone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window, Merge All Windows: carry local browser tabs from each workspace's own window only

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: a window incognito only by its space is no gather source

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window, Merge All Windows: a window on an incognito space is no source

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test fixture: use daemon handle types for screens, panes and surfaces

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: carried browser tabs never mix into a colliding pane id

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Local browser tabs: a carried pane never mixes into a colliding pane id

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: a pane-id collision in the receiving window refuses the move and loses no tabs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window, Merge All Windows: refuse when a moved pane's id collides with this window's browser tabs

Session-local browser tabs are keyed by pane id, which older daemons can
repeat across machines. Refuse the move before anything changes instead
of mixing or dropping tabs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: a window keeping its own browser tabs is not gathered

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window, Merge All Windows: refuse instead of carrying window-kept browser tabs

Window-kept browser tabs (daemons without frontend browser tabs) are
keyed by pane id, which can repeat across machines, and die with their
window. Carrying them kept turning up mixing and loss cases; refuse a
move that takes a workspace out of such a window instead. Nothing moves
or closes, and no tab is lost.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: no gather into a window that keeps its own browser tabs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window, Merge All Windows: refuse a move into a window keeping its own browser tabs too

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: no-op gathers ignore window-kept tabs; an unregistered target gathers nothing

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window, Merge All Windows: no-op gathers ignore window-kept tabs; refuse an unregistered target

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: Merge All leaves unresolved workspaces in their window; incognito-source test counts every member

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Merge All Windows: move only workspaces a session reports; an unresolved one (a Home not mirrored yet) stays in its window

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: a closed window's selection is not the space's last shown workspace

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space to This Window: only an open window's selection counts as the space's last shown

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: Move Space's fallback switch leaves another window's Home

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space: the fallback switch leaves other windows' Homes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: a source window still creating a workspace gives nothing up

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space: refuse taking workspaces from a window still creating one

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space, Merge All: a window's claim protecting its own unreported workspace is no create

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Test: Move Space and Merge All leave the store's Home in its window

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

* Move Space, Merge All: the store's Home stays in its window as a window's Home does

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-710a4a518c009a6ad126

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: ci <ci@example.invalid>
Co-authored-by: cmux-bot[bot] <348531757+cmux-bot[bot]@users.noreply.github.com>

This branch was previously deployed

3 inactive (2 outdated) deployments
ci-routing-agent — 36e595d6 Deployed Oct 30, 2026 by teamleaderleo via wait for same-key tree publisher #79983
artifacts — 4f274131 Deployed Oct 30, 2026 by teamleaderleo via publish tree-addressed cmux-tui #79771
sentry-dsyms — 4f274131 Deployed Oct 30, 2026 by teamleaderleo via upload cmux-tui dSYMs to Sentry #79771
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant