Repository navigation
feat(cmux-next): Group the sidebar by status (Labs) - #20851
teamleaderleo wants to merge 19 commits into
Conversation
…idebarStatusBucket) The status case of sidebar.groupBy and the bucket a workspace row sorts into, from its merged status. Not wired yet; Labs only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…on elbow labs.sidebarStatusGrouping and labs.sidebarStatusElbow (owner leo, off, expire 2026-10-28), regenerated with gen-settings-sources.py, and the SidebarSectionsPreferences.statusElbow field they will drive. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The flag is read in one place, where sidebar.groupBy is parsed: without it "status" reads as none, and statusElbow is on only with both labs.sidebarStatusGrouping and labs.sidebarStatusElbow. Group Projects By offers Status; sidebar.groupBy.status (Group by Status) sits next to None and Folder and is unavailable, naming the Labs toggle, until the flag is on. Strings in all 21 locales. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Needs you, Working, Done and No agent headers with counts; rows move as their merged status changes, except the active row, which keeps its bucket until another row is active. Needs you never folds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Settings schema, MDM manifest and docs from the fleet's export-settings-artifacts.sh, action surfaces from export-action-surfaces.sh (both at 74cb9c7), and the settings page strings from gen-strings.mjs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…computer Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…o leo/status-grouping-glyphs
… an elbow Behaviour tests for Group by Status's elbow children (Labs): the child row sits under its parent with the CLI connector, off is the plain status list, a row moves under a parent it gains, and the App maps a session's mux.parent tag to the parent workspace. Inert API surface only; the fix follows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Only rows the status layout marks get the marks view: one status glyph per bucket (the shared indicator, or a quiet glyph for Done and No agent at rest), a trailing warning on Needs you rows in the palette's attention or danger token, and this Mac, Cloud or another computer from the row's section. The row's own badges leave the state to the marks. Other modes draw their rows as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… leo/sidebar-status-grouping
…by Status, Labs) With SidebarGrouping.elbowsChildren on, a child agent session's row sits directly under its parent row, in the parent's bucket, drawn with the CLI connector in tertiary ink. The App maps each row's acpmux sessions and their mux.parent tag from the lane store; SidebarRows resolves parentWorkspace, and a new parent moves the row. Off, rows lay out and draw as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eo/sidebar-status-grouping
…leo/sidebar-status-grouping
… its own status 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 |
…bar-status-grouping
|
Found 7 test failures on Blacksmith runners: Failures
|
|
Probably yours: CI failed on
Matched log linesNot re-run automatically: Written by |
|
Agents: |
…ebug toggle, off) (#20905) * test: Group by Status behind Debug toggles (sections, live moves, marks, elbow children) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(cmux-next): group the sidebar by status behind a Debug toggle Ports #20851 off the Labs registry (Lawrence via Leo 10-15: no Labs; opt-in looks are Debug settings toggles, off by default). sidebar.groupByStatus lays rows under Needs you / Working / Done / No agent with counts, live moves and a held active row; sidebar.statusElbow nests child agent sessions with the CLI connector. Status marks on every row in that mode. No cmux.json key, Settings choice or action changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test: Group by Status review cases: asking child in a folded section, elbow off links nothing, patched child keeps its elbow Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: Group by Status review: asking trees under Needs you, no lane reads with the elbow off, patches keep the elbow, toggle-off forgets holds and folds Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * refactor(cmux-next): agent links live in CmuxNextAgentLanes so CmuxNextApp stays under its size cap Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(next): PR autofix at 9e95df5 - regenerated Packages/macOS/CmuxNext/ci-target-graph.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38714367151 * refactor(cmux-next): the row writer's link work lives in CmuxNextSidebar so CmuxNextApp does not grow Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(cmux-next sidebar): Group by Status sections follow the Priority view's states (red) Ported from #20905's SidebarStatusGroupingTests onto current feat-cmux-next: rows sit under the Priority view's states in its tier order and words, from the state the row already carries (agentChip, the working mark), in manual order inside each section; off by default the list is as before; the active row waits; Needs you never folds; turning the Debug toggle off forgets holds and folds; and one case runs acpmux lanes through SidebarLaneStatus to show the sections come from AgentPriorityRanking. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * feat(cmux-next sidebar): Group by Status behind a Debug toggle, from the Priority view's states (port of #20905) Debug toggle sidebar.groupByStatus, off by default (off, the list lays out exactly as before). On, every computer's rows sit under the Priority view's states in its tier order and words: Needs you, Done, Failed (failed or lost), CI failing, Working, Idle. No classifier of its own: SidebarStatusSection reads what the row feed already gives each row from AgentPriorityRanking through SidebarLaneStatus, its chip (SidebarWorkspace.agentChip) and, without one, its working mark (agentWorking). Inside each section rows keep their manual order. The active row keeps its section until another row is active; Needs you never folds; turning the toggle off forgets the held row and the folds (#20905 review). Grouped lists lock drag reorder, as Group by Folder does. Headers reuse the Priority view's localized words, so no new strings. Dropped from #20905 as superseded: the row status marks (#23390 row words, #23495 PR badges) and the agent-parent elbow (the session tree, #21814 and #22778). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * test(cmux-next sidebar): a workspace marked Done shows under its Priority state while grouped by status, not in the Done fold Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * refactor(cmux-next sidebar): Group by Folder's buckets move to SidebarLayout+Folder so SidebarLayout.swift does not grow The Group by Status hook added six lines to SidebarLayout.swift (over its 400-line cap); this moves the folder bucketing out, a net shrink against base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * test(cmux-next sidebar): a status section lists every row past sidebar.groupRowLimit, with no Show more row Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray * test(cmux-next sidebar): Group by Status tests name CmuxNextSidebar.SidebarSection (CmuxNextDaemon has one too) and type the row keys Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bd1-a2ac-74f1-85e7-0322693c12bd&host=cosmic-gray --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
Group by Status for the Projects list, behind Labs (Help > Labs…, off by default). Chrome-style groups stay the default. Turn on Group Sidebar by Status in Settings > Labs, then pick Group Projects By > Status (or run "Group by Status").
Stacked on #20452 (the Labs registry); it merges after that one.
What changes
cmux status set), so it works the same for Claude, Codex and every ACP harness.⎿, not an indent, inside the parent's section; its own status still shows on it. The link comes from each chat's acpmux session and itsmux.parenttag. Sessions from an older acpmux, or a peer's sessions, get no elbow.The two flags are read in one place (
SidebarSectionsSetting.parse): with Group Sidebar by Status off, a savedstatusreads as no grouping, and the elbow needs both flags.Design panel note: the judges' panel voted Chrome default 4-0 and status grouping as Labs 4-0, and dropped the elbow 0/4. The elbow is Leo's own ask, so it ships as its own Labs sub-option, off by default. Modeled on the session list in Claude Code desktop's 10-14 release (reference captures are in the private screenshots repo only).
Evidence
Each piece's behavior test failed before its fix and passed after, on the fleet (
run-swift-testing-suites.sh):SidebarStatusGroupingTests(sections, counts, live move, held active row)SidebarStatusGroupingLabsTests,SidebarGroupByStatusActionTests(flags, Settings choice, action)SidebarStatusGroupingTestsSidebarStatusElbowTests,SidebarAgentParentTestsOn the head (33a4247) every suite passed. The step was marked failed only by the fleet's same-tree skip guard on two daemon suites this PR doesn't touch (
AcpmuxBundleReplacedTests,AcpmuxOtherHomeDaemonTests).Not yet established:
SidebarInsertWhileDisplayAsleepTestsfailed on two macOS 26 display hosts at earlier heads of this branch; it skips on headless hosts. This PR doesn't touch row-removal motion, and a base run on a display host is in progress to tell whether it fails on base too. I'll update here.Pre-push checks pass on the head: crash ratchet, concurrency, god files (no type or file grew past its limit), system blue, generated settings sources.
Changelog
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Group the sidebar's Projects list by agent status behind
labs.sidebarStatusGrouping(Labs, off by default; Chrome-style folder groups remain the default). Rows sit under Needs you, Working, Done and No agent headers with counts, stay in list order inside each section, and move between sections as their merged status changes; the active row keeps its section until another row is selected. Needs you never folds. Rows in this mode gain a status glyph, a trailing warning on needs-you rows, and a glyph for where the session runs.Labs behavior
labs.sidebarStatusGrouping, a savedsidebar.groupBy: "status"reads as no grouping, and the Group by Status action points to the Labs toggle.labs.sidebarStatusElbow(Nest Child Agent Sessions, off by default), hangs a child agent session's row off its parent row with the⎿connector, in the parent's section; parent links come from each chat's acpmux session and itsmux.parenttag.Written for commit 2984b44. Summary will update on new commits.