Repository navigation
cmux-next sidebar: every row shows its pull request badge, not only with the session tree on - #23495
Conversation
…the session tree (red) 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
… with the session tree on The session tree feed now also runs for the badges (Debug toggle sidebar.pullRequestBadges, on by default) and publishes them apart from the tree, so a row shows its pull requests while nesting, guide lines and keycaps stay behind sidebar.sessionTree. Manual order is untouched. 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
|
Owned by chief-sidebar on cosmic-gray · session |
|
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 red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base 8c47a2e; does not block |
|
Review (claude-review-subagent): BLOCK at 6d8ca2b Read from a local worktree at the head; nothing built or run. Blocking
Checked, fine
Tests
|
…keeps its members' badges (review) 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
|
Review (claude-review-subagent): SHIP at c510bb2 I read the fixup commit (6d8ca2b..c510bb2) and re-checked the whole PR diff against merge-base ed547f0. Local git only; I did not build or run anything. Both earlier blockers are fixed
No other place draws rows without the badges. All row drawing goes through The new test
Nits (not blocking)
|
|
Bead |
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. |
…bar-pr-badges # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextAgentLanes/SidebarSessionTreeFeed.swift
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 (claude-review-subagent): SHIP at 5bcbcd0 Scope: only the conflict resolution in the second base merge (5bcbcd0) against #23531, read with local git (
Nits, not blocking: the |
|
Found 9 test failures on Blacksmith runners: Failures
|
|
|
|
|
|
Shipped in:
|
Conflicts with the Done fold (#23633), every row's PR badge (#23495) and machine marks (#22763): - Loose rows: the tree's rows (depth, chevron, roll-up) go through foldingDone, which leaves them as they are while the tree is on, so the Done fold and the tree compose. - SidebarSessionTree keeps base's pullRequests beside the folds; the list and observation read both `drawn` (the tree with folds) and `pullRequests`. - WorkspaceRowView adds base's machineMark and this branch's fold button and roll-up. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d2c-88e4-7fc2-b58e-9a55abdaced8&host=cosmic-gray
Every conflict takes the base side. The PR's own changes are dropped here and the status grouping is ported again in the commits after this one: - superseded and removed: the row status marks (WorkspaceStatusMarksView, WorkspaceRowStatusMarks, WorkspaceRowView+StatusMarks; replaced by the row status words of #23390 and the PR badges of #23495) and the agent-parent links and elbow (SidebarAgentLink*, SidebarElbowView, SidebarMapping+AgentLinks and their tests; replaced by the session tree of #21814 and #22778); - re-added on top: the status sections behind the Debug toggle. 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
…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
…achine marks patch in place Since Oct 21 every acpmux lane event (each agent step, a few a second per working agent) mapped every sidebar row that shows a chat again: each row's mapping read the whole AgentLaneStore.lanes dictionary (sidebar.laneStatus and sidebar.rowStatus on by default, #23390; the Now: line, #23474), and the pull request badge feed, on by default since #23495, re-ran its pass over every workspace, tab and lane on each event too. - AgentLaneStore keeps one observable cell per session: rows read lane(session) and are told about their own lanes only; the badge feed reads links(session) (folder, pull requests, spawnedBy, peer, chat), which a new step or state leaves alone. lanes stays for whole-store readers. - A pull request badge change patches the rows whose badge changed instead of laying the list out again (SidebarView render). - The hover card is not rebuilt (timeline read, refit) when only the hovered row's step changed: the card does not show it. - A row's machine mark image is drawn again only when the mark or its size changes (#22763 made a new NSImage on every configure). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…kspaceRow.pullRequest (off by default) (#23989) * cmux NEXT sidebar: pull request indicators on rows follow sidebar.workspaceRow.pullRequest (off by default) Leo 2026-10-21: "REMOVE THE DONE, REMOVE THE TIME BY DEFAULT, REMOVE PR INDICATORS BY DEFAULT". The read pull request badge (glyph + count, #23495) ignored the row element, so rows drew it with sidebar.workspaceRow.pullRequest off. Now every pull request mark on a workspace row (the hook text badge, the read badge with or without the session tree, an expanded row third line, workspaces-as-tabs rows) follows the element, off by default, and the badge reads ask GitHub nothing while no row shows them. The hover card keeps the pull request. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cmux NEXT sidebar: badge view tests render the design first; reads follow the resolved kinds (review) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…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>
…achine marks patch in place Since Oct 21 every acpmux lane event (each agent step, a few a second per working agent) mapped every sidebar row that shows a chat again: each row's mapping read the whole AgentLaneStore.lanes dictionary (sidebar.laneStatus and sidebar.rowStatus on by default, #23390; the Now: line, #23474), and the pull request badge feed, on by default since #23495, re-ran its pass over every workspace, tab and lane on each event too. - AgentLaneStore keeps one observable cell per session: rows read lane(session) and are told about their own lanes only; the badge feed reads links(session) (folder, pull requests, spawnedBy, peer, chat), which a new step or state leaves alone. lanes stays for whole-store readers. - A pull request badge change patches the rows whose badge changed instead of laying the list out again (SidebarView render). - The hover card is not rebuilt (timeline read, refit) when only the hovered row's step changed: the card does not show it. - A row's machine mark image is drawn again only when the mark or its size changes (#22763 made a new NSImage on every configure). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This is slice S3 of Leo's sidebar-organization ask (item A, the PR badge). It builds on #21814 (the session tree's pull request badges). The owner of #21836 cleared it: the only overlap is two small spots next to each other, and whichever PR lands second takes the conflict.
What changes
Every workspace row now carries its pull request badge: a glyph and a count, in the most urgent state's color, with the hover card. Before this, the badge only drew with
sidebar.sessionTreeon.sidebar.sessionTree, and manual order is untouched.SidebarSessionTreeFeedalso runs for the badges and publishes them apart from the tree state (SidebarSessionTree.pullRequests). The layout draws them whether or not the tree is on.ghnow runs for anyone with agent chats, not only people who turned the tree on. It uses the reader the chat header's chip already shares: two calls at a time, never prompting, at most once every five minutes per folder or URL, with one batched GraphQL read for URLs. A failed read, including a missing or logged-outgh, keeps the last answers and backs off by doubling, up to 80 minutes.sidebar.pullRequestBadges, on by default. Turning both it and the tree off stops the feed and itsgh pr viewchecks, as before.Tests
Tests/CmuxNextAppTests/SidebarPullRequestBadgeTests.swift(committed first) covers three things:No capture: a capture slot has no GitHub credentials, so no row there gets pull request data. The badge view and its drawing are unchanged from #21814, and the view-level tests above cover a drawn badge with the tree off.
Observed / Not run
scripts/cmux-next/prepush-gate.py: no new violations.compile-check --app: passed on 6d8ca2b.Changelog
Agent session: cosmic-gray
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Every sidebar row now shows its pull request badge even with the session tree off; previously the badge only drew when
sidebar.sessionTreewas enabled.SidebarSessionTree.pullRequests).sidebar.pullRequestBadges, is on by default; the tree's nesting, guide lines, and Command-number keycaps still requiresidebar.sessionTree.ghnow checks pull requests for anyone with agent chats, not only tree users: two concurrent calls, never prompting, at most once per five minutes per folder or URL, with backoff (doubling, up to 80 minutes) on failure.Written for commit 5bcbcd0. Summary will update on new commits.