cmux NEXT: session rail Changes card with the chat's pull requests
Summary
Claude desktop's session panel shows each PR the session opened under Changes. The cmux NEXT session rail (Debug Settings agent.sessionRail) had Environment, Context, Connectors and Outputs, but no Changes card.
Now the rail grows a Changes card when the chat opens its first pull request. The pull requests come from the chat's own gh pr create calls (sessionSummary.pullRequests, the same data the PR dock reads), so this works for any harness whose shell tool calls acpmux records. Rows run newest first and show:
- the title, then
repo #N; - how the checks stand (
Failing, or a green or amber dot with a screen-reader label) when the App has read them; MergedorClosedonce the chat merged or closed the PR. A merge is final. A close holds until the App reports the PR in a state it first read after the close (someone reopened it).
Five rows show and the rest sit behind Show more. A row is a link to the pull request.
The App only reads live status for the chat folder's pull request today (the header chip). That PR gets its checks here. A follow-up adds one batched read for the rest, with line counts (the row already draws them once the App sends additions/deletions). No per-row polling.
This builds next to #22166 (edited files in the chat menu's Changes and the summary's Outputs). It doesn't touch those files.
Testing
bun test test/session-rail.test.tsxon Huge Blue: the two Changes tests fail on the test commit (4888f6f8d5c); the reopen test fails on test commit 4b9c0ca15d9 before the read-time fix. All 8 pass on 39be7f2685e.chat-header-litandchat-header-tooltipsfail when the header suites run in one process, on base too (pass alone); not this PR.bun run checkpieces on Huge Blue: lint, format and the style checks are clean for the changed files. The reds that remain are on base f326e8ee: check:layers and type-scale (settings/styles.css), text-focus (PhoneTabView.swift), and tsc in environment-picker.test.tsx.- Localization: three new keys (
rail.checksFailing,rail.checksPassing,rail.checksPending) with all 21 agent-pane locales. Reusedheader.changes,prDock.more/lessandheader.prBadge.*.
Changelog
Added: The cmux NEXT session rail shows a Changes card with each pull request the chat opened and its checks.
Proof
The agent-pane.session-rail gallery entry has a new changes variant (six PRs, one merged, one failing, one behind Show more). Rendered from head 39be7f2685e in Playwright WebKit on a fleet Mac (macOS system font); a gallery story, not the running app.
๐ค Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Adds a Changes card to the cmux NEXT session rail that lists the pull requests the chat opened, newest first: title, repo #N, line counts, and checks status when the App has read them (Failing or a green/amber dot), plus Merged/Closed once the chat finishes those states. A close the chat ran holds until a later App read says otherwise (someone reopened it); after that the App's reads win, and the reopen survives hiding the rail or folding the card. Five rows show, the rest behind Show more; each row links to the pull request on GitHub.
- Pull requests come from the chat's own
gh pr createcalls (sessionSummary.pullRequests), so this works for any harness whose shell tool acpmux records. - The App only reads live status for the chat folder's pull request today (the header chip); a follow-up adds one batched read for the rest with line counts โ no per-row polling.
- Adds three localized strings (
rail.checksFailing,rail.checksPassing,rail.checksPending) across all 21 agent-pane locales, reusing existing keys where possible.