Skip to content

carry of #28175: cmux: add first-class space CLI commands - #28722

Merged
teamleaderleo merged 23 commits into
feat-cmux-nextfrom
lane/carry-28175-space-cli
Nov 1, 2026
Merged

teamleaderleo merged 23 commits into
feat-cmux-nextfrom
lane/carry-28175-space-cli

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 31, 2026 •

Copy link
Copy Markdown
Collaborator

Carry of #28175 (its owner's session is gone). It keeps that PR's six commits with their authorship, merges feat-cmux-next in, and fixes the two findings of the review that blocked it at edcac1e.

Leo, 2026-10-30, as quoted on #28175: "oh also spaces warrant good commnds too" / "good intuitive stuff".

Summary

What #28175 adds: first-class cmux space verbs.

  • cmux space list reads the daemon's room listing.
  • cmux space new <name>, switch <name>, rename <old> <new>, close <name>, move workspace <workspace> <space> and move tab <tab> <space> run the app's catalog actions. The CLI and MCP go through the same registry.
  • A new catalog action tab.moveToSpace (cmux tab move-to-space, palette and MCP app_tab_move_to_space) is the tab twin of Move Workspace to Space.
  • cmux space --help and the root help list the scope (English and Japanese).

Fixed in this carry:

  • P1, Move Tab to Space moved every sibling tab. The old code pinned the tab's whole workspace to the space. Now only the tab moves (Packages/macOS/CmuxNext/Sources/CmuxNextApp/Handlers/TabHandlers+More.swift, moveToSpace, lines 63-79):
    • A tab alone in its workspace takes that workspace with it: a pin in the home session, as Move Workspace to Space does.
    • A tab with siblings moves to a new workspace through TabMoves.toNewWorkspace, the path Move Tab to New Workspace uses. That new workspace is then pinned to the space, and the siblings stay where they were.
    • Home's own tab is refused. So is a workspace already pinned to that space.
    • The action is .waiting(.daemonEcho), since a space pin has no store intent.
  • P2, cmux space rename --name Office targeted a space named --name. The positional forms now match only the words before the first option, the same way the generic <noun> <verb> route reads them. Options after the positional words reach the action. Flag forms fall through to the catalog route unchanged. The space forms moved to cmux-tui/crates/cmux-tui/src/cli/app/space.rs.
  • tab.moveToSpace had no tab-menu placement and no exemption. It is now exempt from the tab right-click menu as pointerMenuTrim: that menu's Move folder already has Move Tab to Workspace…, and a list of spaces there would bloat it. It stays in the palette, CLI and MCP.
  • Generated exports listing the new action are updated by hand to match what the generators write: plans/cmux-next/action-surfaces.json; the plans/cmux-next/actions.md counts (1282 actions, palette 1229, CLI verbs 757, MCP 675, tab 106, pointerMenuTrim 15); and web/data/next-docs/*.generated.json, written by bun web/scripts/export-next-docs.ts. The PR autofix regenerates the action exports on the fleet if anything differs.
  • plans/cmux-next/arch-ratchet.json: one app_lines exception for this handler's lines. The handler needs App-only types (TabMoves, WindowProfiles, AppServices, AppActionContext), so it can't live in a package. The reviewer judged this justified.

Testing

  • Red test first: space_flags_are_not_positional_names and space_positional_forms_keep_trailing_options in cmux-tui/crates/cmux-tui/src/cli/app/tests.rs. Commit 9c09857 adds them before the fix.
  • Rust, through cmux-ci on this PR at 32b3929 (run 41161031549): cargo test -p cmux-tui cli:: exits 0. With the P2 fix reverted, space_flags_are_not_positional_names and space_positional_forms_keep_trailing_options fail.
  • The original cmux: add first-class space CLI commands #28175 test space_mutations_use_the_catalog_actions_and_name_targets was red at its own head: run_action leaves out args when an action takes none. The tests now read a missing args as {}.
  • Swift: the fleet test-compile of this PR passed (run 41156732209 at e8d51c7; the commit after it changes only Rust tests).

Observed / Not run

  • Observed: scripts/cmux-next/check-state-roots.sh ok; scripts/cmux-next/check-no-godfiles.sh --only rust ok; prepush-gate.py passes with the ratchet exception.
  • Not run: a tagged build with a live cmux space move tab across two spaces. Only the reviewer's read and the compile cover the Swift handler.

Changelog

Added: cmux space list|new|switch|rename|close|move commands and a Move Tab to Space action

Proof

No capture: CLI verbs and a palette/CLI-only action; no right-click menu or other native UI changes.

Supersedes #28175.

Agent session: agent session

🤖 Generated with Claude Code

teamleaderleo and others added 15 commits October 30, 2026 08:24
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-68ba07270dde07b96ff4
cmux space rename --name Office and the other flag forms must keep the
generic catalog route instead of targeting a space named after the flag;
options after a positional form must reach the action.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-68ba07270dde07b96ff4
…ds (green)

cmux space rename --name Office targeted a space named --name. The
positional forms now match only the words before the first option, as the
generic <noun> <verb> route reads them, and pass the options after them to
the action. The space forms move to cli/app/space.rs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-68ba07270dde07b96ff4
tab.moveToSpace pinned the tab's whole workspace to the space, taking
every sibling tab along. A tab alone in its workspace still takes the
workspace (a pin, as Move Workspace to Space does); a tab with siblings
moves into a new workspace (TabMoves.toNewWorkspace, the path Move Tab to
New Workspace uses) that is pinned to the space. Home's own tab is refused
as for Move Tab to New Workspace, and a workspace already pinned to the
space is refused as Move Workspace to Space refuses it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-68ba07270dde07b96ff4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-68ba07270dde07b96ff4
tab.moveToSpace had neither a tab-menu placement nor an exemption, so the
surface parity check had no decision for it. The tab menu's Move folder keeps
Move Tab to Workspace…; this one is palette, CLI and MCP only
(pointerMenuTrim). action-surfaces.json, actions.md counts and the web
next-docs references (bun web/scripts/export-next-docs.ts) list it.

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

Home's own tab is refused whether or not it is alone (a lone Home tab
could pin Home into another space). The action changes nothing locally
before the pin answers, so it is a .waiting(.daemonEcho) effect, not
.applied. The flag-form tests use real catalog names (space delete,
space switch).

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

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high fast, direct codex exec): SHIP at e8d51c7

Three rounds, all against merge base fc2a87b:

  • Round 1 at f2e5eb3: BLOCK. (1) Home's own tab was refused only when it had siblings, so a lone Home tab could be pinned into another space. (2) The handler returned .applied with no synchronous local change. It confirmed that cmux: add first-class space CLI commands #28175's P1 (sibling tabs moved too) and P2 (space rename --name Office became target room:--name) were fixed, that the generated export counts were consistent, and that an app_lines exception for the handler was justified.
  • Round 2 at 75ee0af: SHIP. The Home refusal now applies whatever the sibling count; the handler is .waiting(.daemonEcho) with an action-wait-allow reason (a space pin has no store intent); the flag-form tests use real catalog names (space delete, space switch).
  • Round 3 at e8d51c7 (delta: the app_lines +24 exception in plans/cmux-next/arch-ratchet.json): SHIP. The fields are valid, 24 equals the CmuxNextApp numstat, and the rest of the JSON is unchanged.

Non-blocking: if the pin fails after a tab with siblings has moved, the new workspace stays unpinned (the failure is reported).

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

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

Review b8d0db6: 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=pr28722 -f ref=lane/carry-28175-space-cli -f platform=macos -f backend_mode=local

Not verified: macOS jobs did not run: compile and app tests were skipped on e3866e6ff6; ci-status is green without them.

CI passes on e3866e6ff6 (run 41275108075 attempt 1).
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped (the macos job needs both to succeed). Re-run CI once they pass, before merging.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

web and size checks: green

Default changes

This pull request changes 2 defaults at e3866e6ff68d (what everyone gets without configuring anything):

  • tunable-source.CmuxNextApp/Handlers/TabHandlers+More.swift:bindLayoutMoves: "ac6d3ac3eec80daef13f588b2586859681f641e7515a571903355f1d373276d5" -> "73a704fb3fd0a0ecc93ff294dc85ddb8c12c53ec494be140c9ccc237263cd53e"
  • tunable-source.CmuxNextApp/Handlers/TabHandlers+More.swift:moveToSpace: (none) -> "f2dbb75c2362906395506dc18099985511d7be40a2a35bf468840b7a3019c8ac"

Needs a review. It passes with an independent review receipt on this commit: a comment or review whose first line is Review (<reviewer>): SHIP at e3866e6ff68dcfdc51d70994c114446d3b36c225, from a member, not a self-review (the newest verdict naming the head decides; a later BLOCK beats an earlier SHIP), or with an approving review on this commit from @lawrencecchen or @austinywang (the call owners in .github/defaults-call-owners.json, never the author). A receipt posted as a review re-runs this check; after a plain comment, re-run it. The needs a call label alone does not pass, and a new push needs a new receipt.

Merge receipt: merged as 63eba6b259c2 with these defaults changed, WITHOUT a SHIP receipt or an approving call owner review on its head.

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

Shipped in:

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

blacksmith-sh Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

Found 10 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpl3c17r5q/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpqxeb3zjr/summary-fail.json (live):/summary-fail.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
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
test_cmux_next_follows_the_committed_target_graph (main.FocusedTestMap.test_cmux_ne
xt_follows_the_committed_target_graph)/
test_cmux_next_follows_the_committed_target_graph (main.FocusedTestMap.test_cmux_ne
xt_follows_the_committed_target_graph)
View Logs
test_every_part_of_bun_run_check_runs_in_the_warn_branch (main.WebviewsWarnSplitCov
ersCheck.test_every_part_of_bun_run_check_runs_in_the_warn_branch)/
test_every_part_of_bun_run_check_runs_in_the_warn_branch (main.WebviewsWarnSplitCov
ersCheck.test_every_part_of_bun_run_check_runs_in_the_warn_branch)
View Logs
test_runtime_added_app_capabilities_are_runtime_only (main.StaticCapabilityRuntimeO
nlyTests.test_runtime_added_app_capabilities_are_runtime_only)/
test_runtime_added_app_capabilities_are_runtime_only (main.StaticCapabilityRuntimeO
nlyTests.test_runtime_added_app_capabilities_are_runtime_only)
View Logs

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

run_action leaves args out when an action takes none, so space switch's
expected {} never matched (the original #28175 test was red at its head for
this). Both space tests now read a missing args as {}.

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

cursor Bot commented Oct 31, 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.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high fast, direct codex exec): SHIP at 32b3929

Round 4, a delta review of 32b3929 (test-only). run_action leaves out args when an action takes none, so the space tests now read a missing args as {}. Non-empty expectations stay strict, and the target and trailing-option asserts are unchanged, so the P2 coverage holds. Rounds 1-3 are in the receipt above.

Rust (cmux-ci on this PR at 32b3929, run 41161031549):

  • cargo test -p cmux-tui cli:: at the head: exit 0.
  • With the P2 fix (88e0dc1) reverted, cli::app::tests::space_flags_are_not_positional_names and space_positional_forms_keep_trailing_options FAIL. space_mutations_use_the_catalog_actions_and_name_targets and space_catalog_actions_keep_their_generic_cli_routes pass.

Reds at this head, compared with base by test name:

  • clippy (changed cmux-tui packages) / Rust panic ratchet: cmux-tui-core indexing_slicing 856 > 853 and string_slice 57 > 52, plus cmux-chats-mirror allows that have no reason. This PR changes neither crate. Unrelated carry of #28107: expose openSettings through CLI and MCP #28724 is red with the same counts at the same lines, so it is a base red.
  • release-notary: SigningHooksInStepWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check fails the same way, with the same f612f5a8… not in SIGNING_HOOKS, on base fc2a87b (job 124395573608). Also a base red.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

One more base red appeared after the body edit re-ran checks: cmux-next checks / Tier routing. In tests/test_cmux_next_base_tier.py, RouteStep.test_a_feat_cmux_next_push_defers_the_base_tier, test_a_push_whose_scheme_compile_is_the_dev_landing_build_keeps_it and test_coalescing_off_or_another_branch_runs_the_base_tier_on_the_push raise the same CalledProcessError on base tip c917912 (job 124418215436). This PR does not touch CI routing.

@cubic-dev-ai cubic-dev-ai 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.

4 issues found across 19 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="cmux-tui/crates/cmux-tui/src/cli.rs">

<violation number="1" location="cmux-tui/crates/cmux-tui/src/cli.rs:147">
P2: Adding `space` to the cross-platform public scopes leaves non-Unix `cmux-tui space --help` on the generic root-help fallback. Add a `"space" => Cow::Borrowed(scope_help::SPACE_HELP)` arm to `scope_help_for` so the newly advertised scope has consistent help on every target.</violation>
</file>

<file name="Packages/macOS/CmuxNext/Sources/CmuxNextApp/Handlers/TabHandlers+More.swift">

<violation number="1" location="Packages/macOS/CmuxNext/Sources/CmuxNextApp/Handlers/TabHandlers+More.swift:76">
P2: When the source workspace has siblings, this action commits the tab move before pinning the new workspace. If `pinWorkspace` fails, the action reports an error but leaves the tab stranded in an unpinned workspace instead of preserving the requested move-to-space outcome; add rollback or make the move and pin failure-safe.</violation>
</file>

<file name="Packages/macOS/CmuxNext/Sources/CmuxNextActions/LayoutActions.xcstrings">

<violation number="1" location="Packages/macOS/CmuxNext/Sources/CmuxNextActions/LayoutActions.xcstrings:11987">
P2: This new “Space” action reuses the existing “Workspace” translations in every locale except English and Japanese, so localized users will see the wrong destination concept. Add translations matching the app’s existing `Space` terminology, such as those used by `action.browser.link.openInNewSpace`.</violation>
</file>

<file name="cmux-tui/crates/cmux-tui/src/cli/app/space.rs">

<violation number="1" location="cmux-tui/crates/cmux-tui/src/cli/app/space.rs:20">
P2: `cmux space new --name Office` falls through to the nonexistent generic `space new` action, so the flag form cannot create a named space. Add a no-positional `new` arm that routes to `space.new` and lets its optional `name` argument pass through.</violation>
</file>

Reply with feedback, questions, or to request a fix.

View guided diff | Turn on auto-fix | Re-trigger cubic

"attention",
"agent",
"room",
"space",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: Adding space to the cross-platform public scopes leaves non-Unix cmux-tui space --help on the generic root-help fallback. Add a "space" => Cow::Borrowed(scope_help::SPACE_HELP) arm to scope_help_for so the newly advertised scope has consistent help on every target.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At cmux-tui/crates/cmux-tui/src/cli.rs, line 147:

<comment>Adding `space` to the cross-platform public scopes leaves non-Unix `cmux-tui space --help` on the generic root-help fallback. Add a `"space" => Cow::Borrowed(scope_help::SPACE_HELP)` arm to `scope_help_for` so the newly advertised scope has consistent help on every target.</comment>

<file context>
@@ -144,6 +144,7 @@ const PUBLIC_SCOPES: &[&str] = &[
     "attention",
     "agent",
     "room",
+    "space",
     "closed",
     "git",
</file context>

// action-wait-allow: a space pin has no store intent (Move Workspace to Space sends it the same way), so nothing local stands in.
return .waiting(.daemonEcho) {
var key: WorkspaceKey? = WorkspaceKey(rawValue: qualified.key)
if !alone { key = await TabMoves.toNewWorkspace(tab, services: services) }

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: When the source workspace has siblings, this action commits the tab move before pinning the new workspace. If pinWorkspace fails, the action reports an error but leaves the tab stranded in an unpinned workspace instead of preserving the requested move-to-space outcome; add rollback or make the move and pin failure-safe.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At Packages/macOS/CmuxNext/Sources/CmuxNextApp/Handlers/TabHandlers+More.swift, line 76:

<comment>When the source workspace has siblings, this action commits the tab move before pinning the new workspace. If `pinWorkspace` fails, the action reports an error but leaves the tab stranded in an unpinned workspace instead of preserving the requested move-to-space outcome; add rollback or make the move and pin failure-safe.</comment>

<file context>
@@ -51,10 +51,34 @@ extension TabHandlers {
+        // action-wait-allow: a space pin has no store intent (Move Workspace to Space sends it the same way), so nothing local stands in.
+        return .waiting(.daemonEcho) {
+            var key: WorkspaceKey? = WorkspaceKey(rawValue: qualified.key)
+            if !alone { key = await TabMoves.toNewWorkspace(tab, services: services) }
+            guard let key else { return "move-tab-to-new-workspace failed (see the app log)" }
+            return await home.failure("pin-workspace") { try await $0.pinWorkspace(session: session, key: key, to: room) }
</file context>

"ar": {
"stringUnit": {
"state": "needs_review",
"value": "نقل علامة التبويب إلى مساحة عمل…"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: This new “Space” action reuses the existing “Workspace” translations in every locale except English and Japanese, so localized users will see the wrong destination concept. Add translations matching the app’s existing Space terminology, such as those used by action.browser.link.openInNewSpace.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At Packages/macOS/CmuxNext/Sources/CmuxNextActions/LayoutActions.xcstrings, line 11987:

<comment>This new “Space” action reuses the existing “Workspace” translations in every locale except English and Japanese, so localized users will see the wrong destination concept. Add translations matching the app’s existing `Space` terminology, such as those used by `action.browser.link.openInNewSpace`.</comment>

<file context>
@@ -11965,7 +11965,138 @@
+        "ar": {
+          "stringUnit": {
+            "state": "needs_review",
+            "value": "نقل علامة التبويب إلى مساحة عمل…"
+          }
+        },
</file context>

let words = words.iter().map(String::as_str).collect::<Vec<_>>();
let room = |name: &str| format!("room:{name}");
let (action, mut args, route) = match words.as_slice() {
["new", name] => ("space.new", vec!["--name".into(), (*name).into()], ActionName::Any),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: cmux space new --name Office falls through to the nonexistent generic space new action, so the flag form cannot create a named space. Add a no-positional new arm that routes to space.new and lets its optional name argument pass through.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At cmux-tui/crates/cmux-tui/src/cli/app/space.rs, line 20:

<comment>`cmux space new --name Office` falls through to the nonexistent generic `space new` action, so the flag form cannot create a named space. Add a no-positional `new` arm that routes to `space.new` and lets its optional `name` argument pass through.</comment>

<file context>
@@ -0,0 +1,50 @@
+    let words = words.iter().map(String::as_str).collect::<Vec<_>>();
+    let room = |name: &str| format!("room:{name}");
+    let (action, mut args, route) = match words.as_slice() {
+        ["new", name] => ("space.new", vec!["--name".into(), (*name).into()], ActionName::Any),
+        ["switch", name] => ("space switch", vec!["--target".into(), room(name)], ActionName::Cli),
+        ["rename", old, new] => (
</file context>

actions.md counts: base's 1311 plus this PR's tab.moveToSpace.

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

Base keys RoomMembership.pins by session then key now; pins[qualified] no
longer compiles (review BLOCK at 7d3f53a). Same read as Move Workspace
to Space.

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

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 27ce64c

Reviewer: codex gpt-6.1-sol xhigh, fast tier.

Follow-ups: 2. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at 27ce64c

Visual verdict: no images; Leo tries the build

  1. [P2][follow-up] TabHandlers+More.swift:76 — The sibling-tab path creates an unclaimed workspace but never calls windows.claim/placeMoved. Reconciliation can therefore attach it to the most-recent open window instead of the tab’s source window, especially for a background-window or CLI-targeted tab.

  2. [P2][follow-up] TabHandlers+More.swift:78 — If the subsequent home-session pin fails, the tab move has already succeeded and there is no rollback, leaving the tab in an extra unpinned workspace while the action reports failure.

Follow-ups:

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, router-review): BLOCK at 7d3f53a

BLOCK at 7d3f53a

Visual verdict: no images; Leo tries the build

  1. [P1] [blocking] The new handler does not compile. TabHandlers+More.swift:70 indexes pins[qualified], but qualified is a RoomMembership.Workspace and pins is now [String: [String: ProfileID]]. Replace this with membership(... )?.pinned(qualified), matching the existing workspace-move handler. The earlier reported compile does not validate this merged head.

Static review completed; Rust and Swift toolchains were unavailable in the box.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 08e4513

Reviewer: codex gpt-6-astra high, fast tier.

SHIP at 08e4513

Visual verdict: no images; Leo tries the build

Follow-ups: none

Generated next-docs counts: base's regenerated counts plus tab.moveToSpace.

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

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at b8d0db6

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 b8d0db6

Visual verdict: no images; Leo tries the build

  1. [P1] [follow-up] Preserve the tab’s source machine when resolving its workspace — TabHandlers+More.swift:68. Forked machines can retain identical workspace keys. Although the tab is resolved correctly, services.workspace(id:) and WindowProfiles.qualified search by key across machines, preferring local. If the local counterpart has one tab, this action pins that local workspace and leaves the targeted remote tab untouched. Otherwise, it pins the remote tab’s new workspace under the wrong session. Resolve the workspace and session through the daemon owning tab.

Export consistency checks passed. Rust and Swift tests could not run because their toolchains are absent.

Follow-ups:

Picks up the trusted glaeda runner hook (#30154) the signing guard test reads.

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

cursor Bot commented Nov 1, 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.

This branch had an error being deployed

1 failed and 2 inactive deployments
artifacts — e3866e6f Deployed Nov 1, 2026 by teamleaderleo via publish the Windows daemon to R2 #93774
sentry-dsyms — e3866e6f Deployed Nov 1, 2026 by teamleaderleo via upload cmux-tui dSYMs to Sentry #93774
ci-routing-agent — e3866e6f Deployed Nov 1, 2026 by teamleaderleo via cmux-tui tree preflight #93774
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