Skip to content

agent pane: one subagent row anatomy (one glyph, no type subtitle, quiet done) - #29276

Merged
teamleaderleo merged 15 commits into
feat-cmux-nextfrom
lane/subagent-row-anatomy
Oct 31, 2026
Merged

teamleaderleo merged 15 commits into
feat-cmux-nextfrom
lane/subagent-row-anatomy

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 31, 2026 •

Copy link
Copy Markdown
Collaborator

Rebased on #29608 and #29264. Leo's later words in #29608 ("the leading icons — just the stupid fork one", "why didn't you guys remove the icons nor the tokens") supersede two parts of this PR. A subagent line now leads with its harness mark or toned icon (the spinner while it runs) and never the fork. It shows no tokens or tool uses: the trailing meta holds only a workflow's agent counts and a state worth a word. Stop and the chevron keep #29264's tracks. The stills below predate both, so they still show the fork and the token meta. What this PR still adds: no agent-type subtitle (it moves to the tooltip), no Done or Running word (screen readers still get it), the meta before the time, and no card when nothing runs. Follow-up from review: #29616.

Leo's words

On the latest NEXT nightly: "why is this still so ass in latest nightly". Earlier: "eg a lot of these subtitles are bad".

The finished subagent line he showed had two leading glyphs (a chat bubble, then the fork, the fork touching the title), a "general-purpose" subtitle, its duration and "Done" in two columns far right, inside a bordered card for one finished line. The running line had the spinner and the fork, a "Bash" subtitle, and its tokens and tool uses on a second line.

What changed

Every subagent, started-chat and command line in the running tray (subagents/AgentLine.tsx) now has one anatomy, after the subagent and task rows in Claude desktop and Claude Code:

  • One leading glyph. The spinner while it works, otherwise the fork (subagent), the chat (started chat) or the terminal (command), or the harness mark. The second kind glyph (carry of #27602: compact waiting messages and subagent tray grid #28113) is gone, and so is the glyph touching the title: the title sits the row's gap after the one glyph.
  • No agent-type subtitle. The kind (Explore, general-purpose) and what it does now move to the line's tooltip (Inspector: its hover card). Nothing is deleted.
  • One muted trailing meta, then the time, then the chevron. Tokens and tool uses sit muted right before the time, lined up with finished lines' times. Done and Running are no longer words on the line, since the glyph says them; screen readers still read them. Waiting, Failed, Stopped and Retrying keep their word in the meta. The 96px status column shrinks to the chevron.
  • No card when nothing runs. A tray holding only finished lines draws no fill or ring (data-settled). The card comes back as soon as something runs.
  • Sibling rows that broke the rule: the Inspector's and Session Info's Subagents lists lose the kind subtitle (it moves to the hover card or tooltip), and the subagent group's open list (cv-subagent__kind) does too.

Unchanged: what a line opens and its content, Stop, the running spinner and wave, the narrow tray's two-line layout (stats wrap under the title there), and the transcript's "Subagent finished" line. That line already has one glyph and no subtitle, and its trailing column belongs to #28860, which this PR doesn't touch.

Gallery: 3 variants

agent-pane.subagent-row-anatomy with experiment subagent-tray-row, across the done-one, running-stats and mixed fixtures:

  • trailing (shipped): stats muted before the time, on one line.
  • below: stats on a second line under the title (closest to the earlier look).
  • inline: stats and time right after the title, with no trailing column.

I picked trailing. It keeps every line to one row, lines the running line's time up with the finished lines' times, and matches the transcript's one row grammar (status, then duration, then chevron). inline reads well for one line but loses the shared time column across several. below doubles the row height for two numbers.

Before / after

Linux gallery (Chromium, 2x), synthetic fixtures agent-pane.subagent-row-anatomy, captured by subagent-tray-columns.test.ts; before is feat-cmux-next 7ad4616221fa's components on the same fixtures.

One finished subagent, nothing running

Before After
Light
Dark

Running subagent with tokens and tool uses, over a finished one

Before After
Light
Dark

Running, failed and finished (an Explore agent)

Before After
Light
Dark

I viewed the after images.

Tests

  • subagent-tray-columns.test.ts "row anatomy" (real Chromium, light and dark, three fixtures): one leading glyph; title at least --ds-space-2 after it; no general-purpose/Explore/Done/Running visible on the line; the meta ends before the time; a settled tray has no shadow and no fill; a long state word is cut inside its meta.
  • subagent-tray.test.tsx: one glyph (spinner while running, fork once ended), the name first in the text, the kind and the action in the tooltip, stats kept on the line, the screen-reader state word, settled vs not.
  • subagent-progress.test.tsx: the group list's rows no longer carry the kind.

cmux-ci (Blacksmith Linux, fast-checks) at 97a37b9 (the head minus a format-only commit): subagent-tray.test.tsx, subagent-progress.test.tsx, running-wave, session-info-subagent-marks, chat-inspector 77 pass 0 fail; subagent-tray-columns.test.ts 16 pass 0 fail (the existing narrow/short-dock/columns geometry plus the six new anatomy tests); bun run check green (design tokens, fmt, lint, types). run 41207645140.

Spec

leo-workspace design/chat-transcript.md "Subagent row anatomy" (teamleaderleo/leo-workspace#1912).

Performance

metric before after delta harness or run link
per-token work in tray lines none none 0 no new timers, observers, effects or state; one useState read of the experiment arm per tray mount, as the panel and motion arms already do

Risk: low to medium. Markup and CSS for the tray's lines and the Subagents lists. The narrow (two-line) tray's grid gains a column for the meta. Its geometry tests (subagent-tray-columns.test.ts) still run.

Changelog

Changed: running and finished subagent lines show one icon, the title, muted stats and time; the agent type moves to the tooltip, and a tray with nothing running draws no card.

Agent session: agent session

🤖 Generated with Claude Code

teamleaderleo and others added 2 commits October 31, 2026 09:47
One leading glyph (the spinner while it runs, the fork once it ended), the
title a gap after it, one muted trailing meta (stats, a state worth a word)
before the time, the chevron. No agent-type subtitle on the line (the
tooltip keeps it), no Done or Running word (screen readers keep it), and no
card around a tray with nothing running. Three gallery arms for where a
running line's stats sit; trailing meta ships.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The kind moves to the hover card and the tooltip, as on the tray line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@blacksmith-sh

blacksmith-sh Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

Found 3 test failures on Blacksmith runners:

Failures

Test View Logs
tab: tabGroup.addTab is not a top-level row/tab: tabGroup.addTab is not a top-level row View Logs
tab: tabGroup.create is not a top-level row/tab: tabGroup.create is not a top-level row View Logs
tab: tabGroup.removeTab is not a top-level row/
tab: tabGroup.removeTab is not a top-level row
View Logs

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

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 896d0c7: 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=pr29276 -f ref=lane/subagent-row-anatomy -f platform=macos -f backend_mode=local

Gallery before/after for 5bf6cd8: 16 states rendered, 10 images differ, 1182 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 41246553092 -R manaflow-ai/cmux -n gallery-advisory-29276-5bf6cd83efe87f6e261e92a1978303ca905687ba (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.background-activity/duration-columns Apple System Colors Light unchanged 0% own subagents.css
agent-pane.background-activity/duration-columns Apple System Colors unchanged 0% own subagents.css
agent-pane.background-activity/pinned-live-tail-light Apple System Colors Light unchanged 0% own subagents.css
agent-pane.background-activity/pinned-live-tail-light Apple System Colors unchanged 0% own subagents.css
agent-pane.background-activity/pinned-live-tail-dark Apple System Colors Light unchanged 0% own subagents.css
agent-pane.background-activity/pinned-live-tail-dark Apple System Colors unchanged 0% own subagents.css
agent-pane.background-activity/after-latest-message-light Apple System Colors Light unchanged 0% own subagents.css
agent-pane.background-activity/after-latest-message-light Apple System Colors unchanged 0% own subagents.css
agent-pane.background-activity/after-latest-message-dark Apple System Colors Light unchanged 0% own subagents.css
agent-pane.background-activity/after-latest-message-dark Apple System Colors unchanged 0% own subagents.css
agent-pane.background-activity/compact-pill-light Apple System Colors Light unchanged 0% own subagents.css
agent-pane.background-activity/compact-pill-light Apple System Colors unchanged 0% own subagents.css
agent-pane.background-activity/compact-pill-dark Apple System Colors Light unchanged 0% own subagents.css
agent-pane.background-activity/compact-pill-dark Apple System Colors unchanged 0% own subagents.css
agent-pane.background-activity/side-panel-light Apple System Colors Light unchanged 0% own subagents.css
agent-pane.background-activity/side-panel-light Apple System Colors unchanged 0% own subagents.css
agent-pane.chat-inspector/full Apple System Colors Light unchanged 0% own SubagentsSection.tsx
agent-pane.chat-inspector/full Apple System Colors unchanged 0% own SubagentsSection.tsx
agent-pane.chat-inspector/workflow-running Apple System Colors changed 0.0043% own SubagentsSection.tsx
agent-pane.chat-inspector/workflow-running Apple System Colors Light changed 0.0042% own SubagentsSection.tsx
agent-pane.chat-inspector/workflow-finished Apple System Colors Light unchanged 0% own SubagentsSection.tsx
agent-pane.chat-inspector/workflow-finished Apple System Colors unchanged 0% own SubagentsSection.tsx
agent-pane.chat-inspector/workflow-agent-row-compact Apple System Colors Light changed 0.0043% own SubagentsSection.tsx
agent-pane.chat-inspector/workflow-agent-row-compact Apple System Colors changed 0.0038% own SubagentsSection.tsx
agent-pane.chat-inspector/workflow-agent-row-detail Apple System Colors Light changed 0.0044% own SubagentsSection.tsx
agent-pane.chat-inspector/workflow-agent-row-detail Apple System Colors changed 0.0036% own SubagentsSection.tsx
agent-pane.chat-inspector/workflow-agent-row-grid Apple System Colors Light changed 0.005% own SubagentsSection.tsx
agent-pane.chat-inspector/workflow-agent-row-grid Apple System Colors changed 0.0041% own SubagentsSection.tsx
agent-pane.chat-inspector/workflow-agent-row-narrow Apple System Colors Light changed 0.0051% own SubagentsSection.tsx
agent-pane.chat-inspector/workflow-agent-row-narrow Apple System Colors changed 0.0039% own SubagentsSection.tsx
agent-pane.chat-inspector/reorder-dragging Apple System Colors Light unchanged 0% own SubagentsSection.tsx
agent-pane.chat-inspector/reorder-dragging Apple System Colors unchanged 0% own SubagentsSection.tsx

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Passes: CI passes on 5bf6cd83ef.

CI passes on 5bf6cd83ef (run 41246553374 attempt 1).

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.

web and size checks: green

Shipped in:

Without the kind glyph the kind prop drew the word; the one glyph is the fork.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo marked this pull request as ready for review October 31, 2026 15:40
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, next-review): SHIP at 000d80f

SHIP at 000d80f

Visual verdict: supplied after screenshots look correct; no repeated controls or off-screen layout.

  1. [P2][follow-up] The hidden state text is not exposed to screen readers. Tray buttons set aria-label at AgentLine.tsx:136, which overrides descendant content, so the .acpmux-agent-line__sr “Running”/“Done” text at line 179 is ignored. Include the state (and relevant time/details) in the accessible label or remove the overriding label.

Follow-ups:

  • [P2][follow-up] Preserve the quiet row’s state in the button’s accessible name.

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

cmux-bot approves 000d80f: an independent review passed this exact head (next-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 000d80f

Reviewer: codex gpt-6-astra high, fast tier.

Follow-ups: 2. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at 000d80f

Visual verdict: no images; Leo tries the build

  1. [P2] [follow-up] The new screen-reader-only state text is suppressed by the button’s explicit aria-label: AgentLine.tsx:136 overrides descendant content, so the Running/Done span added at AgentLine.tsx:179 is not announced for tray subagent rows. Include the state in the accessible label or reference it with aria-describedby.

Follow-ups:

  • [P2] [follow-up] Fix the quiet-state accessible name as described above.
  • [P2] [follow-up] No after screenshots were supplied for visual verification.

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, next-review): SHIP at 2f1f343

SHIP at 2f1f343

Visual verdict: supplied light/dark screenshots reviewed; no layout or control regressions found.

Follow-ups: none

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

cmux-bot approves 2f1f343: an independent review passed this exact head (next-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

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

Copy link
Copy Markdown
Collaborator Author

Heads-up from #29608: Leo, 2026-10-31, on the subagent row: "why didn't you guys remove the icons nor the tokens", then "the leading icons — just the stupid fork one". #29608 removes the fork glyph (kindIcon agent.fork) from tray lines and drops tokens and tool uses from the tray and transcript group rows (subagentProgress(..., { usage: false })). This PR makes the fork the one glyph and keeps tokens as trailing meta, so when you rebase, please keep the harness mark, drop the fork, and drop the tokens and tool uses.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 51d82ee

Reviewer: codex gpt-6-astra high, fast tier.

Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at 51d82ee

Visual verdict: Reviewed all 22 after images against their before renders. The compact, Claude-style tray rows look clearer; no visible layout regression in the supplied states.

  1. [P2] [follow-up] subagents.css:508: Stats take width before the title. The title retains flex: 1 (zero basis), while meta reserves its content width up to 50%. Just above the 400px narrow-layout cutoff, long stats leave only a few characters for the title; indentation can exhaust that space. Reserve usable title width and truncate stats first. Add coverage around 401–450px with long stats and nested agents.

All 13 changed TypeScript files parsed successfully. Tests could not run locally because Bun and webview dependencies are unavailable.

Follow-ups:

  • Preserve readable titles beside long stats near the narrow-layout breakpoint.

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
…ses on a row); keep no subtitle and the quiet state

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

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 896d0c7

Reviewer: codex gpt-6-astra high, fast tier.

Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at 896d0c7

Visual verdict: Reviewed all 22 after images against their before pairs. No new visible overflow or duplicated controls. PR-body tray screenshots predate the rebase.

  1. [P2] [follow-up] subagents.css:525: The separator breaks the single-line layout when workflow counts accompany Waiting, Failed, or Retrying. The state uses Tick, an inline grid whose text occupies cell 1 / 1; its new ::before becomes an automatically placed item in a second row. Move the separator outside Tick and cover a workflow with both counts and a visible status.

Tests could not run locally: Bun and dependencies are absent.

Follow-ups:

  • Fix the separator’s grid placement and test counts alongside a visible status.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 5bf6cd8

Reviewer: codex gpt-6-astra high, fast tier.

SHIP at 5bf6cd8

Visual verdict: Reviewed all 22 after images against their before images. No blocking visual regression; the simplified rows fit the compact Claude-style layout. PR-body stills predate the rebase.

No correctness findings. Tests weren’t rerun: Bun and dependencies are unavailable in this box.

Follow-ups: none

@teamleaderleo
teamleaderleo merged commit 3cf858d into feat-cmux-next Oct 31, 2026
173 of 174 checks passed
@teamleaderleo
teamleaderleo deleted the lane/subagent-row-anatomy branch October 31, 2026 23:06
teamleaderleo added a commit that referenced this pull request Oct 31, 2026
Base added the agent's kind to the Inspector's hover card (#29276); the
card that subscribes to live progress keeps it. The workflow test now checks
only that Stop's track and the chevron stay last, and
subagent-tray-trailing owns the column order.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
Base #29276 made a settled tray (nothing runs) draw no card. The stack's join
rules gave it a rim and squared the part under it, so the
subagent-row-anatomy#done-one scene threw. A settled tray now joins nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
Base #29276 made a settled tray (nothing runs) draw no card. The stack's join
rules gave it a rim and squared the part under it, so the
subagent-row-anatomy#done-one scene threw. A settled tray now joins nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
…ay row's menu (#28533)

* test(agent-pane): every bottom card shares the composer card's edges

Add agent-pane.bottom-stack-styles, the whole bottom stack with synthetic
data (nine background subagents, one chat waiting, two PRs, the composer),
and a geometry test: every card over the composer takes the composer card's
left and right x to 1px, the cards stand one --acpmux-stack-gap apart, and
a one-line "N PRs" row opens on the click to chips at the card's width.
Red on base: no PR row, no stack gap token.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): the bottom stack is one glass on the composer's edges, with its N PRs row back

Leo, 2026-10-30: "you guys fucking removed the # prs thing entirely instead
of just simply fucking doing it". cmux#26082 moved the PR pills into each
message's action row and dropped the dock's collapsed count. The count comes
back as one row in the bottom stack (summary/PullRequestStack.tsx): the PR
mark, "N PRs" and a disclosure on the tray header's columns, opening on the
click with no fade to one full-width chip per PR with the reply links' hover
card. The per-message pills stay.

Every card over the composer takes the composer card's two edges and stands
--acpmux-stack-gap over the next; the selected look is one glass stack (gap
0, squared joins, one hairline between parts). The gallery compares it with
separate cards 4px apart and a compact strip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): the N PRs count opens Changes; its disclosure opens the chips, each with ×

Keep the settled PR dock design (design/session-info.md, Leo 2026-10-26): the
count opens Session Info > Changes and counts what Changes counts; the
disclosure beside it opens the chips, and a chip's × hides that shortcut only,
in the dock's existing per-chat dismissal list. The disclosure's glyph centers
on the stack's trailing line, 22 from the card's right edge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* chore(design): map the bottom stack and the running tray to their specs

bottomStack.css and the PR stack join the composer surface (design/composer.md);
the running tray gets its own surface (design/running-tray.md).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* test(agent-pane): the N PRs row is a part of the stack; it rides up with the composer

agent-pane-dock-gutters lists the PR row among the stack's parts and checks its
gutter passes the wheel through as the tray's does; pr-dock-inline-layout lets
the dock and the PR row move up with a queued prompt that grows the form, their
own size unchanged. The styles gallery covers PullRequestStack.tsx only (a cover
names a component, not a sheet).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* test(agent-pane): every stacked row's chevron shares one x

The N PRs row's disclosure, the tray header's chevron and each tray line's
chevron must center within 1px of each other at 1100, 760 and 420px. Red at
7e9f7a6: the N PRs chevron sits about 25px right of the tray's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): the N PRs chevron ends on the tray's chevron column

--acpmux-stack-trail-end is the stack's one trailing chevron column, the
running tray's (row padding, Stop track, gap); the N PRs disclosure ends on it,
so the stacked rows' chevrons share one x. Once the tray moves its chevron past
Stop (#27930), this variable becomes the row padding alone, and the geometry
test fails until it does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* test(agent-pane): the folded N PRs count adds no row; × on hover only; no PRs without the composer

Leo, 2026-10-30: "BUT IF IT'S ONLY N PRS DON'T FUCKIGN TAKE THE ENTIRE ROW AND
FUCKING BLANK IT OUT". The edges test now holds the stack as tall with the
folded count as with no pull requests (with and without the tray), the count
to its content's width with its own highlight, the tray's chevrons to one x,
and the opened chips' × to their row's hover or focus (Tab reaches it, Delete
dismisses). agent-pane-pr-stack-gate reads App.tsx's syntax tree: the pull
requests live only inside the composer's element, so a handoff review or the
Sandboxed receipt shows none. The dock-gutter and inline-layout tests go back
to base: no row of the count stands in the stack.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): the N PRs count is a compact control in the quiet row, not a row

The folded count is one content-sized button beside the permission mode in the
composer's quiet row, a row already there, so it adds no row with or without
the tray; its pill lights only itself. It opens the chips on the click with no
fade, right over the composer at the card's width; a chip's × shows only on its
row's hover or focus, with no fade, and Delete or Backspace on a focused row
dismisses it. The count and the chips share one provider that is the composer
element's own `!reviewing` branch, so they cannot show without the composer.
The gallery compares the count on the tray's header line and over the
composer's left edge; the tray-line one falls back to the quiet row with no
tray.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): the opened pull requests skip the stack's rise-on-mount

The rule that turns the stack's ui-enter off for the chips came before the
ui-enter rule with the same specificity, so the chips still rose and faded in
on the click. It now comes after it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* test(agent-pane): the opened-chips still has the pointer on its first row

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): focus goes to the prompt after the last PR row; the expanded gallery state settles

Router review at 3106205: after the last PR row was dismissed, focus went to the
count, which is disabled with nothing left to open, so keyboard focus was lost.
It now goes on to the composer's prompt; the edges test dismisses the last row
with Delete and checks the active element is the prompt, never the body.

gallery-health's agent-pane.bottom-stack-styles#expanded timed out: its play
waited for every animation in the dock to end, and a running line's spinner
never ends. The play now waits only for motion that ends.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): no control repeats on every opened PR row; a row's own menu dismisses it

The opened chips drew a × on every row (shown on hover or focus), which repeats a control on
every row. A row is now its link alone; right-click (or Shift-F10) opens its menu with
"Dismiss pull request #N", and Delete or Backspace on a focused row still dismisses it.
The edges test asserts no row carries a control at rest, hovered or focused, Tab goes row to
row, and the menu's Dismiss removes the row and moves focus to the next one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* test(agent-pane): open a PR row's menu from the keyboard (the hover card from the earlier hover sat over the row)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): the N PRs count and its rows keep the arrow cursor

check-default-cursor (Leo, 2026-10-30: "change all pointers back to
cursor-default") flagged the two cursor: pointer rules this branch added.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): a settled tray stays cardless in the one-glass stack

Base #29276 made a settled tray (nothing runs) draw no card. The stack's join
rules gave it a rim and squared the part under it, so the
subagent-row-anatomy#done-one scene threw. A settled tray now joins nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): a tray line's Stop moves into its context menu

#28533's review [P1][blocking]: a Stop button on every running tray line is a
control repeated down the rows. Each running subagent and registry command now
stops from its line's context menu (right-click, or Shift-F10 / the menu key on
the focused line), through the shared ui/ContextMenu (the app's native menu).
The item keeps the old button's states: off while the request is out, "Couldn't
stop X" and retryable when refused; a command's says "Stop only this command".
The line stays lit while its menu is open. Lines with nothing to stop get no menu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): the PR stack reads ChangesSection from session-info after the base rename

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* test(agent-pane): a tray line that can stop keeps its focused node when it no longer can

Red at this commit: the line's ContextMenu host is dropped when nothing can be stopped, so React
remounts the focused row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): a tray line keeps its context menu host when nothing can stop

A line that ends, or whose command's process id arrives, was rendered without its ContextMenu
wrapper, so React remounted the row and dropped its keyboard focus. The host now always wraps the
line, with no items when nothing can stop; ui/ContextMenu keeps the default right-click and opens
nothing for an empty list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* test(agent-pane): a subagent stopped, ended and resumed can be stopped again

Red at this commit: the tray keeps the line's taken Stop as "stopping" after the run ends, so the
resumed run's Stop stays off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* fix(agent-pane): a taken Stop lasts one run; a resumed subagent can stop again

The tray kept a line's Stop as "stopping" after its run ended, so a subagent that ended and resumed
while the tray stayed mounted had its Stop off for good. When the tray's lines change, a Stop whose
line no longer can stop (it ended, or left) is dropped. One stopKey names a line's Stop for both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* test(agent-pane): the short-dock Stop check gives the list a whole narrow line

9e2dc28 moved the tray line's Stop into its context menu, so the short-dock test now measures the
running line's button instead of the Stop button. A narrow line is two rows (56px at scale 1: its
time and state wrap under its name), but the test grew the dock by two header heights, of which
the squeezed composer took back ~31px, leaving the list a one-row (27px) viewport. The old 22px
Stop fit in it; the whole line cannot, so scrollIntoViewIfNeeded could not bring it inside the
list and its center (the right-click point) sat over View all. The tray layout is unchanged from
before 9e2dc28; the test now grows the dock until the list holds the whole running line and
asserts that before measuring.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

* Bottom stack: drop the "N PRs" control, keep the glass

The coordinator's ruling relays Leo: "remove the things", so the removal in
#29614 stands. This takes the compact "N PRs" count, its chip list
(summary/PullRequestStack.tsx), the prDock.count/countOne/label strings,
their CSS, gallery variants and tests out of this PR. What stays is the
glass that joins the running tray and the composer, plus Stop in a tray
row's right-click menu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: cmux-bot[bot] <348531757+cmux-bot[bot]@users.noreply.github.com>

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 5bf6cd83 Deployed Oct 31, 2026 by teamleaderleo via wait for same-key tree publisher #91726
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant