Repository navigation
cmux NEXT Cloud: terminals and VM-port browser tabs come back working - #25668
austinywang wants to merge 31 commits into
Conversation
… the replay's grid (#25595, red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#25595) - Cloud link: --lanes auto, so keystrokes get their own WebSocket apart from terminal output and forwarded browser bytes (was --lanes single). - Terminal re-attach: the replay's grid counts as announced, so the claim after it waits for no echo the daemon never sends (held resizes ~0.5 s). - Machine list: a failed read retries on a capped backoff (10 timed tries), so a launch offline or during an API outage brings the machines back. - Remote localhost: pages that got 'not connected' load again when their machine connects again (proxy remembers stranded addresses per listener). - Cloud proxy tabs: the route refetches itself when it is gone (link replaced, 407) and a tab restored after a relaunch gets its machine's route again instead of staying blank; a kept tab on a web page loads it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
) - A blocked or failed browser configuration stays blank: AppServices no longer turns ProxiedBrowserTabs' or remote localhost's nil into the unproxied base (a kept tab could load this Mac's localhost). - A route refetch never starts a paused machine (only a listed, linked, running machine is asked) and refetches are spaced by a capped backoff until a request goes through; the answer must name the same machine. - A restored tab gets its lazy store before the machine list loads. - Stranded reload covers Cloud proxy stores too, and a reconnect clears the route's spacing first; StrandedPageReload holds the service weakly. - The list retry budget resets when the account's machines are dropped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
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)
Passes: CI passes on CI passes on Written by web and size checks: green Default changesNo defaults change at |
|
Bead |
|
Correctness review (independent subagent) of 41e6c74 and the commits before it; findings fixed in 6b626c7
Checked and found fine: the terminal echo fix, |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lated helpers (macOS 14 target) (#25595) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Swift 6.2 sending check) (#25595) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
|
Review (correctness subagent) of ce29114..41e6c74, with resolutions (fixed in 6b626c7):
Fleet run at 985413c (step 73f8dd0d075daca0415b2ee2, aws-m4pro-2, Xcode 26.6), all passed: Tagged build |
#25595) A click resumes a paused app-link machine: its daemon connects while its record still reads paused until the next list. The refetch gate refused, so the reload after the reconnect showed 'not connected' again. A connected daemon now counts as running. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Re-review (independent subagent) of 41e6c74..985413c: the four earlier findings are verified fixed. New HIGH finding: when a click resumed a paused app-link machine, the daemon connected but the machine record still read paused. The refetch gate refused, so the stranded page's reload showed "not connected" again. Fixed in 56d5d6b: a connected daemon now counts as running ( LOW, accepted: a route lost while the daemon stays connected recovers on the page's next request after the backoff spacing, or on a manual reload. My own check: read the diff at 56d5d6b. No file over 400 lines grew. Fleet suites are green at this head (step a3462e24e37be34a597f5183), and the red was observed on e5019c1.
Review (claude-subagent): SHIP at 56d5d6b |
|
Re-review (independent subagent, correctness first) of 41e6c74..56d5d6b at head 56d5d6b: SHIP. It checked that each finding from the first review is fixed: no Two low items, not blocking:
Evidence at this head: suites green (step a5af5726a855981c7a6ee9b6), app compile check passed (f57d4eef4ddcafa5e8279eff), tagged build published (ec9b81ab492c1e2ff45853a9). Red: TerminalReattachEchoTests fails at e5019c1 (step 3c41a35ead0a058cc917fd65). |
|
CI classification at 56d5d6b (run 40421329534, attempt 1). None of the reds come from this diff; attempt 2 is queued for the same SHA.
|
|
Review (independent correctness subagent): SHIP at 56d5d6b Findings and resolutions: #25668 (comment). CI classification for this head: #25668 (comment). |
|
Base finding, not this PR's red: |
…-terminals-browsers
…BrowserTabOpen (#25595) The app-size guardrail on feat-cmux-next refuses new App files. CloudListRetry moves to CmuxNextCloud (paced by Backoff with its own bounded count, as RetryPacer lives in CmuxNextDaemon) with listIsCurrent; the route refetch folds into BrowserTabOpen.swift. No behavior change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bugbot needs on-demand usage enabledBugbot 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. |
|
Check classification for reviewed head
These guard paths are outside the PR diff. The fresh exact-head SHIP review is posted, and |
austinywang
left a comment
There was a problem hiding this comment.
Review (independent correctness subagent, carried over a clean base merge): SHIP at 36caa14
36caa14 only merges feat-cmux-next 8b3fa55 into the head that got SHIP above, d203887. git diff 397ab560253 d203887ebf2 and git diff 8b3fa55ef585 36caa149f9c are identical apart from index and hunk-header lines. The one file both sides touch is CloudService.swift, where the base adds the session's onPaneNotReady/paneNotReadyText wiring in a hunk this PR does not change. The fleet app compile red at d203887 was the base build skew in CmuxNextDesign/Glass.swift (keepsActiveLook), fixed on the base by a582ddf and now merged in.
Bugbot needs on-demand usage enabledBugbot 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. |
|
Review (pr25668_review): SHIP at 3652640 Independent correctness-first review of the full 21-file diff against merged base This is a fresh source review of the exact pushed head. The main agent ran its static prepush gate successfully and exact-head fleet app compile |
|
Current head Fresh exact-head independent review is posted. The defaults guard now passes. Exact-head fleet app compile passed (step The release-notary guard also fails on the base: the repository classifier confirms run 41165259243 at Release recipe-v2 app compile also passed on this exact head (step |
|
Found 1 test failure on Blacksmith runners: Failure
|
|
Review (pr25668_review): SHIP at adaeb28 Independent correctness-first review of the full 21-file diff against merged base The reviewer performed source inspection only. The main agent verified exact-head fleet Debug app compile |
|
Check classification for current head
|
|
Check classification at head
|
|
Removed |
|
Ready for review at Done
Remaining reds: none come from this PR
|
Bugbot needs on-demand usage enabledBugbot 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. |
|
For awareness: this PR has a SHIP review at its head, but GitHub reports it as conflicting with |
TerminalAttachMachine: feat-cmux-next's #29228 landed the same pending-attach grid fix; keep its code and this branch's doc comment. RemoteLocalhostService: keep both the stranded-page reload API and the chat-machine tab binding added on the base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Fixes #25595
Cloud terminals and VM-port browser tabs recover after a link drop or a relaunch. Terminal input uses a separate link lane from bulk output and browser traffic, and terminal reattachment no longer waits for an echo that the daemon does not send.
What changed
--lanes autofor the Cloud link, retaining the transport's single-link fallback.CmuxNextRemoteLocalhostService, preserving limits, refusal codes, hashing and page-origin authorization while reducing app-layer code.App-link proxy routing remains opt-in with
CMUX_NEXT_CLOUD_LINK=app.No capture: no visible UI change. This changes link arguments, attachment bookkeeping, retries and routing; a still image does not demonstrate recovery.
Defaults chosen
auto: the transport binds lanes to one link when parallel links are unavailable.Tests
The focused regression command is
scripts/ci/package-test-lane.sh suite Packages/macOS/CmuxNext CloudBrowserRefetchGateTests, run throughcmux-ci run --class lightwith Xcode 26.6. Test-only commit51bccc95bf368559b264dff9b985587bee9bff63failed for a stale running record with a disconnected daemon (fleet step662a03f5779f567f9b32b362: four parameter cases, one behavioral failure). Repairc1803e2cb76d93c87a68fd226f02c44456203f37requires the connection; the same regression and ten related Cloud/terminal suites passed atb69a7dddee72f01c0d7452c2ce31a44dc79b4788(stepfb7653d89227a00b41cd66b6). Both connected-daemon cases remain allowed even when the cached record says paused.Observed / Not run
adaeb284f15c9e39805ec168fa3dea53cd415e1b, including merged base9b6c218145c02320c5edb61a8b92cbb0911a2d66. The PR's own 21-file diff is unchanged, andgit show --remerge-diffis empty.96b3afb97acc7f9efe2faf52(58 s), Release recipe-v2 app compileffbac7dfb75b5e01be698f3f(120 s; unrelated Rust check omitted), and fresh independent correctness-first review.0b855de498. The workflow and those tests are outside this PR's diff.2b1a5e4f9f3b046cf51278bf(exit 0, completed 2026-10-31 05:47 UTC). Each filter actually executed Swift Testing cases, covering terminal reattachment, Cloud link lanes/reconnection, machine-list retry, browser route/refetch/restore, idle pause, session start and browser-open security.e5019c1a7991dfailedTerminalReattachEchoTests.theReplaysGridCountsSoAClaimOfThatSizeWaitsForNoEchowithechoesDue == [120x40]andannouncedSize == nil; affected suites passed at8a1e4ee0b7392588656dfbfa13c0c1b8ce99b41d(step102c386d9a1caef97d42dc43).AppServices.configureBrowserand theStrandedPageReloadobservation loop have not been exercised end to end. No current-head tagged dogfood build has been produced; this pass used fleet compile and focused test jobs.Changelog
Need help on this PR? Tag
@codesmith-botwith what you need.