Repository navigation
cmux NEXT sidebar: a slow group collapse save retries quietly, never a toast - #34405
Conversation
…a toast Collapse/Expand Workspace Group already showed the fold at once, but when the daemon's reply missed the 2 s control deadline, the fold was dropped, the sidebar resynced back and a 'did not apply ... timed out' toast showed. A timeout may still apply, so the save is now sent again in the background (Backoff, about 0.5/1/2/4 s), skipped once a later click replaced the fold; only a real refusal undoes the fold and reports. The loop lives in CmuxNextSidebar (SidebarRowEdits.saveFold), not the App target. Sidebar-Look: no visual change Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64
|
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)
red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base 26fd471; does not block Shipped in:
|
…old's public signature) Review (subagent) found the module's InternalImportsByDefault makes a plain import internal, which Swift 6 rejects for a type in a public signature. Sidebar-Look: no visual change Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64
|
Found 36 test failures on Blacksmith runners: Failures
...and 26 more test failures. View all on Blacksmith
|
|
Review (subagent claude-opus-5-5 medium, correctness): SHIP at ac75c91 |
|
Review (codex, router-review): SHIP at ac75c91 Reviewer: codex gpt-6-astra high, 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 ac75c91 Visual verdict: no images; Leo tries the build
Follow-ups:
|
…s quietly (#34630) * cmux NEXT: no daemon intent error reaches a toast; a slow placement is sent again quietly A timed-out or failed daemon intent showed its raw text as a notice: "Move did not apply: set-personal-workspace: timed out: workspace.place (no reply within 2.0 seconds)". Every notice for an ActionWorkFailure now goes through one policy (ActionWorkFailure.notice(title:)): a missed deadline or a lost connection shows nothing (the change is taken back and the rows re-read), a daemon refusal shows only "<change> did not apply.", and a reason in the person's words (a typed refusal, a disk-full reason) shows as before. The registry's reporters and the app's refusal sites use it (ActionRegistry.refuse(failure:)). A workspace placement whose reply missed its deadline is sent again quietly on #34405's fold policy (SidebarFoldPersist.resending) before the queue gives up and re-reads. Agent-Session: https://cmux.com/deeplink/agent?id=aid-cb01117327fc358e9ba1 Sidebar-Look: no visual change Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * CmuxNextSidebar: the fold save policy is nonisolated, so a placement's daemon connection can use it Sidebar-Look: no visual change Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-cb01117327fc358e9ba1 * cmux NEXT: a lost connection or a refusal with no title still says it did not apply Review (subagent) found #26406's rollback-with-error tests and the diff-open failure test rely on a not-connected failure showing a notice: a click is never silently undone. Only a missed deadline is silent now; a refusal or a lost connection shows "<change> did not apply." (or "That did not apply." with no title), never the daemon's text. Sidebar-Look: no visual change Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-cb01117327fc358e9ba1 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Swift logic follow-up (tip watcher swift-logic row, STATUS 13027 "SWIFT LOGIC CULPRITS"; lead order). This PR raised
plans/cmux-next/layer-ownership.md says Rust owns every state, list and rule and Swift is the platform shell. Please move the new logic of this PR in a follow-up: to Rust (the crate that owns the area; the owner lists in STATUS 12147-12165 name the target per area), or at least out of the app into its package. If a declaration above is platform code (AppKit, Core Animation, OS calls, strings, tokens, DEBUG tooling), reply here and the table gets a PLATFORM row with your reason instead. The swift-logic row is a report, not a gate: nothing blocks on this comment. |
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo, on a toast in the cmux NEXT sidebar: "the heck happened here?" The toast read:
"Collapse/Expand Workspace Group did not apply: update-personal-group: timed out: workspace_group.update (no reply within 2.0 seconds)".
What happened
Collapsing a group already showed the fold on the click (
SidebarRows.fold). But when the daemon's reply toworkspace_group.updatemissed the 2 s control deadline, the app treated the timeout as a failure: it dropped the fold, resynced the sidebar back to the old look and showed a "did not apply" toast, even though a timed-out command may still apply (ActionWorkFailure.mayHaveApplied). The daemon was slow to answer because the control channel was busy (idlepersonal.session.putchurn; #33318 removed the identical saves at the source).Fix
A fold is this window's look, so a slow save never undoes it or shows a notice:
SidebarRowEdits.saveFold(CmuxNextSidebar) holds the fold and sends the save; a reply that only missed its deadline is sent again in the background withBackoff(about 0.5, 1, 2, 4 s;SidebarFoldPersist), with no toast.SidebarRows.fold(App) shrinks to a call into it (App lines -6).Loop stop conditions: the retry task ends at the first reply, a refusal, a later click on the group, cancellation, or after 4 retries (at most about 7.5 s of waits).
Design spec: sidebar (plans/cmux-next/sidebar-owner.md); no visual change.
Changelog
Fixed: Collapsing or expanding a workspace group no longer shows a "did not apply ... timed out" notice or snaps back when the background service is slow to answer.
Tests
SidebarFoldPersistTests(new): a slow reply is sent again with no report and settles on the reply; a refusal reports once with no retry; a save that never answers gives up quietly after every retry; a later click stops the earlier fold's retries. Run withGroupHeaderClickTestsandSidebarHostGroupTestson the fleet (cmux-ci run --class light --script scripts/ci/package-test-lane.sh --arg=suite ...); result in a comment below.Observed / Not run
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
Fixes the cmux NEXT sidebar so collapsing or expanding a workspace group no longer shows a "did not apply ... timed out" notice or snaps back when the daemon is slow to answer.
The fold shows on the click; a save that misses the 2 s control deadline is retried quietly in the background (about 0.5, 1, 2, 4 s) with no toast. A later click on the same group stops earlier retries; after the last retry the hold is released quietly and the store's next echo shows what the daemon holds. Only a genuine refusal (not connected, a rejected command) still drops the fold and reports.
SidebarFoldPersistTestscover retries, refusal, silent give-up, and a later click stopping earlier retries.CmuxNextWakeupsis now imported publicly whereBackoffappears in public signatures, and the test target depends on it.Written for commit ac75c91. Summary will update on new commits.