fix(agent-pane): show the whole todo list, as Claude's check/spinner card
Summary
On feat-cmux-next the agent's todo list is cut to about one step. The composer's Plan toggle is styled through .acpmux-plan, and the transcript's todo row has the same class (acpmux-row acpmux-${kind}). So the row takes the toggle's 28px height, and its paint containment clips everything below. The toggle's rules now use :where(button).acpmux-plan, which keeps a class's specificity. This is the base fix from #20833.
The list also now draws as Claude desktop's todo card (row 1 of #21604, ref apps/claude/live/transcript-task-list-in-progress.png in cmux-design-references). It's a quiet bordered card: a filled check is done, a thin spinner runs and a dashed circle waits. The "n of m done" heading, strike-through and bold are gone. A step the agent leaves in progress stops spinning once its turn ends (turnEnded, set in turns.ts). Screen readers still hear the progress and each step's state.
After review: every way a turn ends now marks its plan ended. That covers the last turn without a summary, an earlier one with no other work, and a plan sent after the answer or after the summary. An ended in-progress step draws as a plain ring, not a frozen arc. Long step text wraps under its first line, with the mark beside that line. The row height estimate matches the card (40 + 24 per step).
#20833 draws the same card, but only behind the agent.sessionStatus Debug toggle, and it's been conflicting since 10-15. This PR lands the card for everyone. #20833's activity line and toggle are left for that PR or a follow-up.
Testing
CMUX_BROWSER_TESTS=1 bun test test/agent-pane-plan.test.ts(real Chromium against a stand-in acpmux):bun test test/transcript-plan-ended.test.ts, which shapes each ended path withturnView:- The browser test above couldn't rerun on 0cf4c2e. Host load was ~350, and its dev server stayed cold past the 100s warm-up (
warmDevServer: / still cold after 100000 ms). The new CSS (wrap, ended ring) has no browser run yet, and the screenshots are from c15a5af. bun teston transcript-worked-fold, transcript-live-runs, transcript-long-chat-updates and transcript-range-content: 19 pass.bun run typecheckpasses. Inbun run check, everything up tovp checkpasses.acpmux-protocol:checkcouldn't run in my sparse checkout because the protocol IR file is missing. This PR doesn't touch the protocol.- No app build. The change is webview CSS and TSX, and the screenshots come from the gallery stage (
agent-pane.plan-list) in headless Chromium. - Localization: no new strings. The progress line reuses
plan.progressandplan.progress.one.
Changelog
Fixed: The agent's todo list shows every step as a card with check, spinner and dashed-circle marks, instead of being cut to one line
Proof
Gallery agent-pane.plan-list, dark, normal width.
| Before (running) | After (running) |
|---|---|
![]() | ![]() |
| After (finished turn) | After (running, light) |
|---|---|
![]() | ![]() |
Checklist
- Behavior changes have added or updated tests, or Testing says why not
- UI, settings, menu, schema, help-text or user-facing docs change: localization audited, and the result is stated above
- Reviewed with a subagent before merge (cmux-review), and all bot and human review comments resolved
š¤ Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need.



