Repository navigation
carry of #28037: show Cloud machine transitions and failed changes - #28407
Conversation
…selves The cmux-next backend answers Pause, Resume and Kill at once and runs the provider call after, so a machine record reads pausing, starting or deleting meanwhile. The app mapped pausing to Paused (offering Resume), starting to provisioning and deleting to gone, read pauseReason where the wire sends pause_reason, and never read the record's error when the provider call failed. Now each in-between state is its own CloudMachine.Status with its own stage and sidebar header status (Pausing..., Resuming..., Deleting...), shown from the click and put back when the call fails; Pause and Resume wait while a change is on its way (Kill only while deleting); the list is read again every 3 s, at most 40 times, while a listed machine is changing; and the record's error shows on the machine header's tooltip. Sidebar-Look: Leo, 2026-10-29: "let's just get the cloud and its respective ui up to snuff" Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…28037-cloud-transitions
…28037-cloud-transitions # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextApp/Cloud/CloudService.swift # Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/SectionHeaderRowView.swift
Sidebar-Look: retain the current working spinner for in-progress machine transitions Agent-Session: https://cmux.com/deeplink/agent?id=aid-78d0322a04112d80addf
|
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)
Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by Default changesThis pull request changes 13 defaults at
Signed off on this commit by Merge receipt: merged as Regenerate the snapshot with Shipped in:
|
Sidebar-Look: no visual change Agent-Session: https://cmux.com/deeplink/agent?id=aid-78d0322a04112d80addf
|
Found 3 test failures on Blacksmith runners: Failures
|
|
Review (independent Codex gpt-6.1-sol, high, via the review router; full diff from merge base 1ec00c1 to this head): BLOCK at 672ee72. [P2] Packages/macOS/CmuxNext/Sources/CmuxNextApp/Cloud/CloudService.swift:624 - An accepted delete permanently disconnects the retained session. If the asynchronous provider deletion fails and the record returns to running, reconciliation and Retry cannot reconnect: |
…28037-cloud-transitions # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextApp/Cloud/CloudAppOps.swift # plans/cmux-next/sidebar-owner.md
|
Review (independent Codex gpt-6.1-sol, high, via the review router; full diff from merge base 73be4cc to this head): BLOCK at 4103800. [P2] Packages/macOS/CmuxNext/Sources/CmuxNextCloud/API/CloudMachineChanges.swift:20 - polling stops after 120 seconds or one failed refresh even while the backend transition can still be pending, leaving the UI and action gates stale - continue polling through the operation deadline with retry/backoff and recover after read failures. |
|
Review (independent Codex gpt-6.1-sol, high, via the review router; full diff from merge base 73be4cc to this head): BLOCK at 6413948. [P2] Packages/macOS/CmuxNext/Sources/CmuxNextApp/Cloud/CloudService.swift:637 - Codex access is revoked before deletion succeeds; a failed delete leaves the VM present but unregisters its broker target and may remove its credentials. Move revocation after successful deletion acknowledgement or restore the broker on failure. |
|
Review (codex gpt-6.1-sol high): SHIP at 2ed0215 Focused delta review of the latest feat-cmux-next merge. Transition files CloudStartChat+Machine, CloudMachineChanges, CloudMove, and CloudMachineSession are byte-identical to the reviewed head. CloudService changes are base networkAccess additions; CloudMachine shownName and CloudClassicPageOps naming serialization are unrelated and compatible with transition status mapping. CloudPageProvider account watcher is unrelated. arch-ratchet.json parses, retains #28407’s +264 allowance and base +3 allowance; diff check is clean. No integration blocker. Visual verdict: no new visual changes in this merge. |
…28037-cloud-transitions # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextApp/CloudCreationRows.swift # plans/cmux-next/arch-ratchet.json
|
Review (codex gpt-6.1-sol high): SHIP at 884d172 The exact delta removes the duplicate compatibility argument that caused the merge parse error and supplies the required updates: DaemonUpdateBoard() at all five affected CloudMachineChangeStateTests call sites. All production callers already pass machines.updates; the public DaemonUpdateBoard initializer is available. No code blocker found; diff check is clean. Visual verdict: no new visual changes in this merge. Infrastructure note: exact-head compile job a28ba395b7fd1154caf2abe2 failed immediately without diagnostics, so compilation is infrastructure-unverified rather than a code failure. |
…28037-cloud-transitions # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextApp/Handlers/CloudHandlers.swift
|
Review (codex gpt-6.1-sol high): SHIP at dc1bab6 Exact-head delta review: CloudHandlers.swift conflict is correctly resolved, retaining base bindSignInRecovery(into:cloud:), carry bindMove, and CloudMachineStage.gatePowerActions exactly once. CloudMachineStage imports and action gating remain correct, including existing target reasons and fallback behavior. Transition tests cover backend statuses, stage mapping, pending action gating, and bound actions. Diff check is clean; no blocking issue found. Visual verdict: no new visual changes in this merge. Compile remains unavailable due to the prior immediate infrastructure failure. |
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Carry of #28037, preserving its commits and authorship.
Leo: "let's just get the cloud and its respective ui up to snuff".
Cloud machines retain Pausing…, Resuming… and Deleting… until the operation settles, gate conflicting power actions, and show the server's failure reason. The carry merges current feat-cmux-next, preserves the API client's extracted create retries and current sidebar status rendering, and maps all three transition states to the existing working spinner.
Risk: contained sidebar status behavior and transition-only Cloud list refreshes. Reads continue until the server confirms a settled state; failures back off to a 30-second cap. Settled lists, service stop, policy disable, and account teardown cancel the loop. Pending mutations survive stale status/list reads; app-server decimal revisions identify superseding operations, and stale provider failures cannot roll back a newer operation. Broker credentials remain until confirmed destruction; list omissions retain failed cleanup.
The base merge retains the existing native lifecycle and fixes the Classic Cloud page's transition mapping. A reviewed, scoped architecture exception covers 264 native integration lines through 2026-11-07; mutation tracking and revision comparison reside in CmuxNextCloud. The large string-catalog diff preserves the original localized copy.
Observed / Not run
Independent gpt-6.1-sol review: SHIP at 7f3e4802dcc2fe330345e580d1a7faa497300309. Pre-push checks passed. Catalog structure, Swift localization defaults and feature-flag checks passed; the changed catalogs add no enforced localization errors against base. The workspace package-group mismatch is unchanged from base.
All 10 focused Cloud suites passed (120 tests) at 4c10632, as did Mac Release compilation for arm64 and x86_64. The bot then merged base into 7f3e480; the PR patch is identical, the independent review was carried to that exact head, and a fresh Linux app/Rust compile passed there. The three release-notary failures match the named tests and errors on a real base run; see comparison. Regression coverage includes optimistic Classic page status, app-server revision supersession, and stale provider rollback reads. Swift is unavailable locally; no local compile or runtime tests were run.
Before/after gallery from the original PR (stubbed status, real SidebarListView):


No capture: no new live images are attached for this repair batch. The DEBUG fixture now accepts transition statuses; earlier fleet transition captures were viewed privately. Failed-provider paths are covered by the Cloud transition tests.
Viewed after image: yes.
Visual verdict: The after gallery shows Pausing…, Resuming… and Deleting… using the existing compact status treatment and spinner, with no layout regression.
Agent session: agent session