Skip to content

fix(agent-pane): show the whole todo list, as Claude's check/spinner card - #21623

Merged
teamleaderleo merged 25 commits into
feat-cmux-nextfrom
claude-polish/plan-card
Oct 20, 2026
Merged

teamleaderleo merged 25 commits into
feat-cmux-nextfrom
claude-polish/plan-card

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

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):
    • Red on 38e54ca, the test commit alone: the progress was a visible heading, the in-progress step didn't spin, and steps fell outside their row.
    • Green on c15a5af: 3 pass.
  • bun test test/transcript-plan-ended.test.ts, which shapes each ended path with turnView:
    • Red on 54c194f, the test commit alone: 4 fail, 1 pass (the running turn).
    • Green on 0cf4c2e: 5 pass.
  • 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 test on transcript-worked-fold, transcript-live-runs, transcript-long-chat-updates and transcript-range-content: 19 pass.
  • bun run typecheck passes. In bun run check, everything up to vp check passes. acpmux-protocol:check couldn'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.progress and plan.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


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


teamleaderleo and others added 2 commits October 18, 2026 05:35
Red on feat-cmux-next: the row takes the composer Plan toggle's 28px
height and clips the list, the progress is a visible heading, done steps
are struck through, the step in progress is bold and nothing spins.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The composer Plan toggle's rules matched the transcript's todo row, which
is also .acpmux-plan, so the row took the toggle's 28px height and its
paint containment cut the list to about one step. The toggle's rules now
name the button, as #20833 did.

The list itself draws as Claude desktop's card: a filled check is done, a
thin spinner runs and a dashed circle waits, with no visible heading,
strike-through or bold. A step left in progress stops spinning once its
turn ends. Screen readers still hear the progress and each state.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Oct 18, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot 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.

@coderabbitai

coderabbitai Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 77a089c8-fdf3-4db0-bf70-5eeb4762aab8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-2id63 created for this PR by the cmux coordinator.

@blacksmith-sh

This comment has been minimized.

@github-actions

github-actions Bot commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review ec3e2ff: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr21623 -f ref=claude-polish/plan-card -f platform=macos -f backend_mode=local

Probably yours: web / react-apps-check (1) failed: a Python test failed, FAIL: test_coverage_base_gap_warns_on_a_pr_changing_the_gallery_format (__main__.ScopedChecksTests.t.... CI was cancelled before it finished. This PR merged before its CI finished: fix forward on main.

CI stopped on ec3e2ff3ae (run 39499110125 attempt 1): 4 code, 1 unknown.

Job Verdict Why
web / react-apps-check (3) code a web test failed
web / react-apps-check (1) code a Python test failed
web / react-apps-check (2) code a web test failed
web / react-apps-check (4) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs categories.test.ts every page row has exactly one home: failed (job)
  • seen on other PRs editors.test.tsx editors > every schema row renders the editor for its kind: failed (job)
  • seen on other PRs new-tab-composer-still.test.ts chromium: the default page's composer stays put in a 900px window: failed (job)
  • seen on other PRs new-tab-composer-still.test.ts webkit: the default page's composer stays put in a 900px window: failed (job)
  • seen on other PRs new-tab-composer-still.test.ts chromium: the default page's composer stays put in a 560px window: failed (job)
  • seen on other PRs new-tab-composer-still.test.ts webkit: the default page's composer stays put in a 560px window: failed (job)
  • seen on other PRs settings-scroll.test.ts webkit > scrolling Appearance top to bottom: one scroller, no row removed or moved: failed (job)
  • seen on other PRs subtle-elevation.test.ts one subtle elevation scale > no drop shadow blurs except through the scale: failed (job)
  • seen on other PRs subtle-elevation.test.ts one subtle elevation scale > every drop shadow a surface casts resolves to the scale: failed (job)
  • seen on other PRs agent-pane-no-capsules.test.ts agent pane page > rounds its controls as small-radius rects, not capsules: failed (job)
  • ... 7 more in the job logs
Matched log lines
web / react-apps-check (3): (fail) every page row has exactly one home [1.01ms]
web / react-apps-check (1): FAIL: test_coverage_base_gap_warns_on_a_pr_changing_the_gallery_format (__main__.ScopedChecksTests.test_coverage_base_gap_warns_on_a_pr_changing_the_gallery_format)
web / react-apps-check (2): (fail) chromium: the default page's composer stays put in a 900px window [7291.60ms]
web / react-apps-check (4): (fail) agent pane page > rounds its controls as small-radius rects, not capsules [14.81ms]

Not re-run automatically: web / react-apps-check (3), web / react-apps-check (1), web / react-apps-check (2), web / react-apps-check (4), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on de3ed0e to compare; do not merge until green; see lane-rules
red: web / Web status; NEW: green on the base de3ed0e; do not merge until green; see lane-rules
red: web / react-apps-check; no finished base run on de3ed0e to compare; do not merge until green; see lane-rules
red: web / react-apps-check (1); no finished base run on de3ed0e to compare; do not merge until green; see lane-rules
red: web / react-apps-check (2); no finished base run on de3ed0e to compare; do not merge until green; see lane-rules
red: web / react-apps-check (3); no finished base run on de3ed0e to compare; do not merge until green; see lane-rules
red: web / react-apps-check (4); no finished base run on de3ed0e to compare; do not merge until green; see lane-rules

CI fast guards failed on d28d8f88e3 (https://github.com/manaflow-ai/cmux/actions/runs/39373671987). It does not block the merge; a red guard merged into main breaks it for every open PR.
The log named no failed step; see the run.

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally.

@github-actions

github-actions Bot commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

CI fast guards failed on 7384349d23 (https://github.com/manaflow-ai/cmux/actions/runs/39211403624). It does not block the merge; a red guard merged into main breaks it for every open PR.
The log named no failed step; see the run.

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally. This comment is updated in place on each push.

Four ways a turn ends still leave its plan row live: the last turn
without a summary, an earlier one with no other work, and a plan sent
after the answer or after the summary.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo and others added 2 commits October 18, 2026 06:44
A plan row in the last turn without a summary, in an earlier one with no
other work, or sent after the answer or the summary now ends with its
turn. An ended in-progress step is 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).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@blacksmith-sh

This comment has been minimized.

…lish/plan-card

# Conflicts:
#	webviews/src/agent-session/acpmux/styles.css
teamleaderleo and others added 3 commits October 19, 2026 05:16
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cators

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Oct 19, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot 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.

- vp fmt webviews/src/agent-session/acpmux/replyHref.ts
- vp fmt webviews/src/pages/markdown/README.md
- vp fmt webviews/src/pages/markdown/links.ts
- vp fmt webviews/test/markdown-cmux-app-links.test.ts

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39210635038
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review finding (low severity): webviews/src/agent-session/acpmux/conversation/turns.ts:341 maps endedPlan over rows after a turn summary even when the turn is live. If the agent starts a turn on its own after a summary, its running plan gets turnEnded: true and stops spinning while the agent still works (probe: [user, assistant, turnSummary, plan(in_progress)] with working: true gives turnEnded: true). Fix: turn.slice(end + 1).map(live ? (r) => r : endedPlan), plus that case in transcript-plan-ended.test.ts.

teamleaderleo and others added 2 commits October 18, 2026 23:52
…after its answer

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the arc by selector, not source order

settledWithoutSummary returned the rows from the answer on without endedPlan, so a plan
sent after the answer of a summary-less turn with folded work kept spinning. The spinner
rule now carries the Static condition itself, and the default-mode loops check asserts
the plan spinner is among the running loops.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@greptile-apps

greptile-apps Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge, with two previously reported, non-blocking spinner-state issues still open.

Findings

  1. P2 Active plan looks stopped ▶
  2. P2 Finished plans keep spinning ▶

Summary

Fixes the todo list being clipped by the composer’s Plan button styles and gives it a bordered card.

  • Agent-pane todo steps fit in a card with clear status marks.
  • A plan step left active stops spinning when its turn ends.

No new findings were accepted. Tests and browser captures were not run during this review.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  A[Plan update] --> B[Transcript row]
  B --> C{Turn ended?}
  C -->|No| D[Allow spinner]
  C -->|Yes| E[Set turnEnded]
  E --> F[Draw plain ring]
  D --> G[Apply motion preferences]
Loading

Reviews (9) · Last reviewed commit: "Merge branch 'feat-cmux-next' into claud..." · Reviewed by Greptile

shaped.push(...work.map((row) => ({ ...row, id: isEdit(row) ? `${row.id}${FOLDED}` : row.id, settled: true })));
}
shaped.push(...groups, ...renderRows(body, version));
shaped.push(...groups.map(endedPlan), ...renderRows(body, version));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Active plan looks stopped

When the agent starts another turn on its own, direct.ts keeps planRow across turn_result and turn_started. The next plan update reuses the row before the previous summary. groups.map(endedPlan) then sets turnEnded even while the agent is working, so the active step shows a still ring instead of spinning.

Start a new plan row at that turn boundary, and cover this sequence with an event-based test.

…st a budget red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@blacksmith-sh

blacksmith-sh Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Found 26 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpkz1sa5j0/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpxyqeebk7/summary-fail.json (live):/summary-fail.json (live): View Logs
src/pages/settings/categories.test.ts/categories.test View Logs
src/pages/settings/categories.test.ts/categories.test View Logs
test/agent-pane-history-paging.test.ts/agent-pane-history-paging.test View Logs
test/agent-pane-history-paging.test.ts/agent-pane-history-paging.test View Logs
test/agent-pane-no-capsules.test.ts/agent-pane-no-capsules.test View Logs
test/agent-pane-no-capsules.test.ts/agent-pane-no-capsules.test View Logs
test/chat-find.test.ts/chat-find.test View Logs
test/chat-find.test.ts/chat-find.test View Logs

...and 16 more test failures. View all on Blacksmith: run 39373671987, run 39373671601

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

Comment on lines +403 to +404
const endedPlan = (row: AcpmuxRow): AcpmuxRow =>
row.kind === "plan" && row.plan ? { ...row, turnEnded: true, version: row.version * 2 + 1 } : row;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Finished plans keep spinning

Opening a long, finished chat can load a plan update and summary without their earlier prompt. attach loads only the newest 400 events, capped at 128 KiB. turnViewFrom copies rows before the first prompt unchanged, so that plan never gets turnEnded and its unfinished step keeps spinning. Apply the ended-plan logic to these leading rows too, while preserving any genuinely running plan.

# Conflicts:
#	webviews/src/agent-session/acpmux/composerStates.css
#	webviews/src/agent-session/acpmux/model.ts
#	webviews/src/agent-session/acpmux/styles.css
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / defaults-snapshot is red on 14 of 15 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@cursor

cursor Bot commented Oct 20, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot 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.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

CI / web / react-apps-check (2) is red on 13 of 20 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

CI / web / react-apps-check (3) is red on 14 of 19 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

CI / web / react-apps-check (1) is red on 13 of 18 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

CI / web / react-apps-check (4) is red on 13 of 18 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

composerStates.css takes the base's no-shrink press (no press transform,
opacity or spring rule) and keeps this branch's :where(button).acpmux-plan
scoping and its note; static-status-loops lists both the running line's
dots and the todo list's spinner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo merged commit 2532e49 into feat-cmux-next Oct 20, 2026
@teamleaderleo
teamleaderleo deleted the claude-polish/plan-card branch October 20, 2026 21:17
teamleaderleo added a commit that referenced this pull request Oct 20, 2026
…22028)

* test(agent-pane): the todo list draws as a card with Claude's marks

Red on feat-cmux-next: the row takes the composer Plan toggle's 28px
height and clips the list, the progress is a visible heading, done steps
are struck through, the step in progress is bold and nothing spins.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(agent-pane): the todo list draws as Claude's quiet card, unclipped

The composer Plan toggle's rules matched the transcript's todo row, which
is also .acpmux-plan, so the row took the toggle's 28px height and its
paint containment cut the list to about one step. The toggle's rules now
name the button, as #20833 did.

The list itself draws as Claude desktop's card: a filled check is done, a
thin spinner runs and a dashed circle waits, with no visible heading,
strike-through or bold. A step left in progress stops spinning once its
turn ends. Screen readers still hear the progress and each state.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Test that every ended turn's plan stops spinning

Four ways a turn ends still leave its plan row live: the last turn
without a summary, an earlier one with no other work, and a plan sent
after the answer or after the summary.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(agent-pane): every ended turn's plan stops spinning; wrap long steps

A plan row in the last turn without a summary, in an earlier one with no
other work, or sent after the answer or the summary now ends with its
turn. An ended in-progress step is 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).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: test that Static stops the todo list spinner

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux NEXT: the todo list spinner holds still under Static status indicators

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 2e1857a

- vp fmt webviews/src/agent-session/acpmux/replyHref.ts
- vp fmt webviews/src/pages/markdown/README.md
- vp fmt webviews/src/pages/markdown/links.ts
- vp fmt webviews/test/markdown-cmux-app-links.test.ts

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39210635038

* test(agent-pane): an earlier turn without a summary ends a plan sent after its answer

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* agent pane: an earlier turn's late plan stops spinning; Static stops the arc by selector, not source order

settledWithoutSummary returned the rows from the answer on without endedPlan, so a plan
sent after the answer of a summary-less turn with folded work kept spinning. The spinner
rule now carries the Static condition itself, and the default-mode loops check asserts
the plan spinner is among the running loops.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Agent pane: tests for the activity line under the todo list (red)

With agent.sessionStatus on, a running turn with a todo list shows one line
under the list naming the running call (a command as itself, an edit by file
name) or the todo in progress, and the turn's time, in the Working for
status's place. Red: turns.ts has no activity line yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Agent pane: activity line under the todo list (agent.sessionStatus)

With the Debug Settings toggle agent.sessionStatus on, a running turn with a
todo list draws the list under its work and one line under it naming what the
agent is doing now, with the turn's time ticking from the prompt
(••• Edit ProductGrid.module.css 26s). The running tool call reads as its row
names it (a command as itself, an edit by file name), else the todo in
progress. The line takes the Working for status's place and goes away while
the answer streams. Toggle off draws as before. The line's dots stop under
static status indicators and Reduce Motion.

Recut of #20833 (activity line only; the todo card is #21623).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: a live turn's plan after the summary keeps spinning (fails)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(agent-pane): a live turn's plan after the summary keeps spinning

Review finding: rows after a turn summary were marked turnEnded even
while the turn was live, so a plan the agent started on its own stopped
spinning.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
teamleaderleo added a commit that referenced this pull request Oct 20, 2026
…nto recut/cx-ncc.102-activity-line

turns.ts keeps the base's QUESTION_RECORD and isRunning imports and adds
editedPaths to the toolPaths import; static-status-loops lists both the
running line's dots and the activity line's dots.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Oct 20, 2026
Keeps this branch's activity line additions next to #21623's squash
(PlanList gallery note, .cv-activity styles, static-status-loops fixture).
App.tsx reads useSessionStatus once: the base's recap card read it a
second time in the same component, which no longer compiled. The
toggle-off test waits for the running status line, since the base's
line now names the running call instead of saying Working for.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant