Repository navigation
cx-v9k2f: acpmux decides each session's lane (working, input, idle since, failed with why, lost) - #20362
Conversation
Working since its turn started, input, idle since its last turn ended, failed with the error text (a restart's outcome_unknown included), lost; peer sessions too. Red: summaries have no lane yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lane = {state, since, error}, decided once next to indicator from the
summary's own fields, for local and peer sessions (re-decided when a peer
goes unreachable): working since its turn started, input, idle since its
last turn ended, failed with that turn's error text, lost. A restart's
outcome_unknown now records lastTurn, so that session reads failed with why,
not idle. The restart test moves to its own file (hub_integration.rs was at
its size cap).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Waiting reads inputSince (when the session began waiting), so a draft save, a later record or a second ask no longer moves it. A session lost mid-turn is lost since it went, without the previous turn's error. outcome_unknown records lastTurn before its record goes out, as every turn end does, and lastTurn keeps detail. An idle session with turns but no lastTurn falls back to updatedAt. The schema documents lane and inputSince; the restart test module sits in order. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- cargo clippy --fix cmux-tui/crates/acpmux/src/hub/turns.rs - cargo clippy --fix cmux-tui/crates/acpmux/src/hub/views.rs Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38495693983
…cursors/lanes-state
…cursors/lanes-state
…cx-v9k2f) Adding `detail` wrapped the key list and grew hub/turns.rs to 1064 lines, which the god-file check refuses (1062 on base, over the 1000 limit). The list becomes views::LAST_TURN_KEYS, so turns.rs stays at 1062. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…erves (cx-4bd8m) Austin's cmux NEXT registry grew to 10.7 GB in 8.5 h under a build without journal maintenance (auto_vacuum off, 4.47M journal rows). The maintenance worker's first step converts such a registry with PRAGMA auto_vacuum= INCREMENTAL; VACUUM; while it holds the registry: on that file every client of the owner would read "not connected" for minutes after the next update. Convert only while live data is at most 64 MiB. Above it the conversion is deferred (one diagnostic per owner); sealing still runs and deletes archived rows, and SQLite reuses their pages, so the file stops growing once sealing keeps up. It does not shrink: sealed segments stay in the registry, so giving the free pages back needs a compaction that does not hold the registry (follow-up bead). Debug-only overrides for the interval and the bound keep the behavior test small. Red/green: legacy_registry_maintenance. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…20534) * test: a local merge commit reuses the fetched same-tree acpmux (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: a local merge commit reuses the fetched same-tree acpmux reload.sh on a developer Mac stopped with "no cached acpmux" for any commit no workflow published (a local integration of feat-cmux-next and PRs), even though the tree fetch had just put that tree's checksum-verified acpmux in place. build-acpmux.sh now seeds its commit cache from it when it has every requested architecture. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 7be0d24 - regenerated schemas/defaults/cmux-next.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38542356066 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
* webviews: test that every popup draws one hairline edge Red: --acpmux-popup-elevation stacks a composer-edge hairline on the one already in --ui-popup-shadow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * webviews: popups draw one hairline, not two --acpmux-popup-elevation stacked a 0.5px composer-edge hairline on the hairline already in --ui-popup-shadow. It now is the shared popup shadow, so every menu and popover has one edge. Increase Contrast colors that one edge in the popup's ink, which the composer-edge hairline did before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 1cc6616 - vp fmt webviews/src/agent-session/acpmux/modelPickerLayout.ts Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38520503432 * webviews: test that popups draw no border over the hairline and clear it under borders none Red: the pages' .ui-popup and the chat find bar draw a border over the --ui-popup-shadow hairline, and appearance.borders none leaves the hairline drawn. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * webviews: one rim on page popups and the find bar; borders none clears it The pages' .ui-popup drew a 1px border over the --ui-popup-shadow hairline; it now draws no border. The chat find bar keeps its border (its focus cue) and casts --ui-popup-drop, the shadow without the hairline. appearance.borders none sets --ui-popup-edge transparent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * webviews: format modelPickerLayout.ts (base fmt red) Keeps cmux-autofix's vp fmt of the base file, which the base merge replaced with the unformatted copy; react-apps-check fails on it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * webviews: the Channels palette draws one rim; test follows the summary card Red after the base merge: the new Channels palette (.lg-palette, ledger.css) drew a 1px border over the --ui-popup-shadow hairline, and the summary popover became .acpmux-summary-card. The palette now draws no border. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 54dd59d - regenerated schemas/defaults/cmux-next.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38543983469 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
…(clears the concurrency red) (#20485) * fix: clear two feat-cmux-next check reds tree-publish-v2's stub uploader takes --conflict-exit-code, which the tree publisher now passes (af8b68e). PaneAnimationsSetting carries the namespace-type justification its ratcheted sibling settings have. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: keep PaneAnimationsSetting internal to CmuxNextSettings Nothing outside the module uses it, so it needs no namespace-type allow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at c2bdb98 - regenerated schemas/defaults/cmux-next.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38530638157 * fix: name the owner of ControlWorkspaceInfoCache's publish hop check-concurrency flags the unowned Task d0a62be added; it is a one-shot main-actor hop that holds the cache weakly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 7cf07e3 - regenerated schemas/defaults/cmux-next.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38544346314 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
…hover card (#20483) * test: a notified compact row stays one line; its text reads in the hover card Leo 2026-10-14: "why is it even 2 lines in the first place?" Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: compact sidebar rows are one line by default; the notification text moves to the hover card sidebar.workspaceRow.notification is now off by default (Leo 2026-10-14). #19862 turned it on for classic parity; the setting stays as an opt-in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore: regenerate the settings schema hash for the notification default Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore: regenerate the settings schema hash on the merged base Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore: take base's settings exports after the base merge (regenerated next) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore: regenerate the settings exports on the merged base Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore: refresh the defaults snapshot on the merged base Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: the hover card template lists the notification fact; comments say where the text shows Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by |
Keeps base's now-playing follower beside the lanes What's New settings in SidebarBridge+Cards. The lanes item's click moves to WhatsNewPage.activateClientItem (the client-only item hub), so SidebarBridge stays within its 1000-line type limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base (#20362) adds each session's lane and `inputSince` and derives `indicator` and `lane` with `views::decide`. The typed SessionSummary gains `inputSince`, `lane` ({state, since, error}) and `lastTurn.detail`, and session_summary calls `decide` on the serialized summary. Spec and generated TS are regenerated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bead: cx-v9k2f (part 1 of 2; the app's lanes view follows in a second PR)
Problem
Leo, 2026-10-13: about 25 lanes sat idle for hours unnoticed, some dead on out-of-credit errors. acpmux decides each session's status dot (
indicator), but nothing says how long a session has been in that state or why a turn failed. A daemon restart mid-turn also wrote a failedturn_resultwithout recording it as the last turn, so that session read as idle.Change
_acpmux/watch,session_changed,_acpmux/sessions) carrieslane = {state, since, error}. acpmux decides it once next toindicator, from the summary's own fields:workingsince its turn started;inputwhile a permission or question waits;idlesince its last turn ended, or since it was created;failedwith the last turn'serrorText;lostwhen the agent process is gone without an answer.views::decidereplaces the three separateindicatorwrites).outcome_unknownpaths (a daemon restart, or a host that never got the prompt) now callrecord_last_turn. Those sessions readfailedwith the reason.restart_marks_unknown_outcomemoves totests/hub_integration/restart.rs, becausehub_integration.rswas at its 1500-line cap.lastTurnkey list isviews::LAST_TURN_KEYS, sohub/turns.rs(over the god-file limit on base) does not grow.Verification
--filter lanes:::test result: FAILED. 0 passed; 5 failedon Linux and on macOS. Every lane test panicked because summaries had nolane.--filter lanes::and--filter restart_marks_unknown_outcome:lint (linux),test (linux)andmacOS lint and testspass.release-path dogfood artifacts / build aarch64-apple-darwinfailed; the other run built the same SHA. That job is not part of this change.lint (linux)andtest (linux)pass.crash_ratchet.py: ok.Changelog
none
🤖 Generated with Claude Code