Skip to content

Agent chat: every disclosure chevron sits right after its label, pointing down, the ChatGPT way - #32867

Merged
teamleaderleo merged 4 commits into
feat-cmux-nextfrom
lane/chevrons-after-label
Nov 3, 2026
Merged

teamleaderleo merged 4 commits into
feat-cmux-nextfrom
lane/chevrons-after-label

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, 2026-11-03: "this how chatgpt does their chevrons", next to ChatGPT's "Worked for 11s ⌄" and our "Background update" row, whose chevron was parked at the transcript's far right edge.

Every disclosure chevron in the agent chat transcript now sits right after its label's words, the way ChatGPT draws it. It is small and muted (a 12px glyph whose ink starts 5px after the last visible word), points down while closed and up while open, and is never right-aligned at the row's edge. A label cut with an ellipsis keeps the chevron right after the visible words: the chevron is the label's sibling and never shrinks, the label does. An opened group's inner steps still show theirs only on hover (2026-11-01), now after their labels. A row's status or duration ("Delivered", "2m 28s") moves after the chevron, to the line's end.

Rows changed:

  • tool rows, tool groups and their inner steps, Worked for, and thought rows (one glyph size and gap; down/up instead of right/down)
  • activity rows: "Scheduled check", "Background update" and other background-turn lines (TranscriptActivityRow)
  • received messages (IncomingMessageCard through DisclosureRow), the "Received N messages" and "N messages from M sessions" heads (MessageGroupHead)
  • message lines (AgentMessageRow, SentMessageLine): the chevron comes before the hover Copy, and the delivery word ends the line
  • finished-subagent lines (SubagentDoneLine): the mark follows the words (it opens a chat, so it still points right)

Everything is scoped under .acpmux-row, so Home's run ledger and the composer don't change.

Design spec: leo-workspace design/chat-transcript.md, rule "Always put a disclosure chevron right after its label's words" (teamleaderleo/leo-workspace#2611). It replaces the "chevron in column 4, every chevron on one x" line from #28860. References used (private): chatgpt/live/transcript-disclosure-chevron-chatgpt, cmux/live/transcript-background-update-row-far-right-chevron, cmux/live/transcript-tool-summary-row-chevron-alignment, claude/live/transcript-received-message-expanded.

Gallery: agent-pane.transcript-chevron-after-label has four variants of glyph size and gap: chatgpt (12px, 5px, selected and the default), tight (10px, 3px), spaced (12px, 8px) and large (14px, 5px), at 420, 760 and 900 widths.

Test

New: webviews/test/transcript-chevron-after-label.test.ts (Chromium). It runs over agent-pane.transcript-system-rows#leo-capture, agent-pane.received-messages (collapsed, level-1, level-2), agent-pane.transcript-spacing-table (shipped, peer-lines) and the new entry, at 760px and 420px. Every laid-out transcript chevron, hover-only ones included, must start within 8px after the last visible words before it on its line, and those words may not be a trailing status or duration. Every chevron's glyph must be wider than tall, so it points down or up and never right.

Command: cmux-ci test --setup playwright -- bash -c 'cd webviews && bun test test/transcript-chevron-after-label.test.ts'

  • Base (feat-cmux-next plus the test commit only): 24 fail, 12 pass. Received lines and sent lines sat at the row's edge (gaps of 100 to 380px), "Scheduled check" was 570px past its words, and every chevron pointed right.
  • Head: pass.

Existing tests updated to the new rule:

Observed / Not run

Observed, on the fleet at head d3e886c (cmux-ci test --setup playwright): bun run check passes, and 215 of 215 tests pass across 20 files. Those files are the new test, agent-pane-transcript-chevron-column, incoming-message-disclosure-browser, transcript-system-rows, received-messages-columns-browser, browser/transcript-rhythm, transcript-row-pitch-browser, transcript-meta-columns-browser, subagent-list-chevron-column, agent-pane-background-tasks, agent-pane-background-turns, agent-message-card, subsession-row-opens-chat, lane-notice-card, inbox-sender-mark, received-messages-fold, incoming-minimal-collapse, queue-agent-message, subagent-tray and RowGrammar. I looked at the scene stills from that run: chevrons follow the words, and the cut received line keeps its chevron after the ellipsis at 420px.

Not run: the full webview suite (CI runs it), a native app build (no Swift changes) and a DEV build.

Follow-ups: #32822 (an opened lead thought step's chevron still floats at its row's end; the test skips that one case), #32847 (a cut received line's hover actions cover its chevron), #32848 (the ChevronColumn and RowGrammar gallery notes still describe the old column).

Overlap: #32798 (Background update rows without a chevron) also changes TranscriptActivityRow.tsx. Whichever lands second rebases.

Changelog

  • Changed: Disclosure chevrons in the agent chat sit right after their label and point down, as in ChatGPT, instead of at the row's far edge.

Agent session: agent session

🤖 Generated with Claude Code


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


Summary by cubic

Moves every disclosure chevron in the agent chat transcript to sit right after its label's words, pointing down while closed and up while open, the way ChatGPT draws them. Chevrons previously sat at the row's far right edge and pointed right.

Rows changed

  • Tool rows, tool groups and inner steps, "Worked for", thought rows, and activity rows ("Scheduled check", "Background update") get the chevron right after the words.
  • Received messages, their group heads, message lines, and finished-subagent lines follow the same rule.
  • Status and duration ("Delivered", "2m 28s") move to the line's end; finished-subagent lines still point right since they open a chat.
  • Scoped under .acpmux-row, so Home's run ledger and the composer are unchanged.

Tests

  • New Chromium test transcript-chevron-after-label.test.ts checks every laid-out chevron starts within 8px of its words and points down or up, across gallery scenes at 760px and 420px.
  • incoming-message-disclosure-browser.test.ts and RowGrammar.test.tsx updated to the new chevron-after-words rule.

Written for commit d3e886c. Summary will update on new commits.

View guided diff Turn on auto-fix

teamleaderleo and others added 4 commits November 3, 2026 02:11
…, pointing down

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-81baa1463f6190d4c5dc
… pointing down, the ChatGPT way

Leo, 2026-11-03: "this how chatgpt does their chevrons". A transcript row's chevron
points down while closed and up while open, a 12px glyph whose ink starts 5px after
the last visible word. Activity rows (Scheduled check, Background update), received
messages, message lines and group heads put it right after their words; status and
duration move to the line's end. Gallery: agent-pane.transcript-chevron-after-label.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-81baa1463f6190d4c5dc
…after their words too

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-81baa1463f6190d4c5dc
… status; RowGrammar reads the new order

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-81baa1463f6190d4c5dc
@teamleaderleo teamleaderleo added risk:low Risk tier (docs/ci/risk-tiers.md) leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel labels Nov 3, 2026
@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

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

Review d3e886c: 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=pr32867 -f ref=lane/chevrons-after-label -f platform=macos -f backend_mode=local

Gallery before/after for d3e886c: the capture produced no images (run).

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards. CI was cancelled before it finished. This PR merged before its CI finished: fix forward on main.

CI stopped on d3e886cdc7 (run 41565708637 attempt 1): 1 unknown.

Job Verdict Why
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Not re-run automatically: web / react-apps-check is not a machine failure.

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: web / Web status; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules
red: web / react-apps-check; a job it gathers ended without a verdict (web / react-apps-check (5): cancelled); do not merge until green; see lane-rules

Shipped in:

@github-actions github-actions Bot added risk:normal Risk tier (docs/ci/risk-tiers.md) and removed risk:low Risk tier (docs/ci/risk-tiers.md) labels Nov 3, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at d3e886c
Visual verdict: code-only, no images opened. Every rule is scoped under .acpmux-row, so Home's run ledger and the composer don't change.
What was checked: the specificity and order for every row kind (tool and step rows, Worked for, thought, activity, sent and agent-message lines, received, disclosure, subagent-done). The whole line still toggles, inner steps keep their hover-only chevron, and the test's trail flag closes a vacuous pass.
Follow-ups: #32822, #32847, #32848, plus one more issue for narrow panes and the subagent chevron's size (filed next).

@teamleaderleo
teamleaderleo merged commit cd8e520 into feat-cmux-next Nov 3, 2026
272 of 299 checks passed
@teamleaderleo
teamleaderleo deleted the lane/chevrons-after-label branch November 3, 2026 02:33
teamleaderleo added a commit that referenced this pull request Nov 3, 2026
…vron

Line 137 of message-preview-browser.test.ts clicked the sent row's
toggle button while the row was open ("click: Timeout 5000ms exceeded",
"element is not visible"; runs 41568146239 and 41568701123). Since
#32867 (cd8e520) a transcript message line's toggle is flex 0 1 auto,
and open it holds an empty preview, so it has no width. The whole line
still toggles (headerToggleClick), so the test closes it from the
chevron, which the person sees and clicks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-2f629b93d5a20c58e6f8
teamleaderleo added a commit that referenced this pull request Nov 3, 2026
…n right after it

Leo, 2026-11-03: "this is pretty bad spacing and formatting" / "i thought we
made this stuff smaller". The chip on "Subagent finished: [name]" was capped
at 40% of its sentence (AgentTag.css, #29754), and #32867 left the duration's
trail before the chevron, so its auto margin parked the chevron at the row's
far edge. The chip now takes the row's room and is cut with an ellipsis at its
edge; the duration follows the chevron at the line's end.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-81baa1463f6190d4c5dc
teamleaderleo added a commit that referenced this pull request Nov 3, 2026
…ht after it (#33083)

* test(transcript): a finished subagent's chip takes the row, its chevron right after it

Gallery entry agent-pane.subagent-done (long title, short title, narrow pane,
a 60% cap and the base's look) and a Chromium test that measures the chip
against the old 40% cap and the chevron against the chip. Red on base.

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

* fix(transcript): a finished subagent's chip takes the row, its chevron right after it

Leo, 2026-11-03: "this is pretty bad spacing and formatting" / "i thought we
made this stuff smaller". The chip on "Subagent finished: [name]" was capped
at 40% of its sentence (AgentTag.css, #29754), and #32867 left the duration's
trail before the chevron, so its auto margin parked the chevron at the row's
far edge. The chip now takes the row's room and is cut with an ellipsis at its
edge; the duration follows the chevron at the line's end.

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

* fix(transcript): a failed subagent's error is cut before its chip

Review: with the chip free to shrink, a long error (a bare text node, which
could not shrink) squeezed the name to an empty pill. The reason and error
after the name are now their own box, cut first. Drops a trail order rule
that changed nothing, uses a name long enough to be cut under any font, and
adds a failed-with-long-error gallery variant and test.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
cmux-bot Bot added a commit that referenced this pull request Nov 3, 2026
…vron (#32940)

Line 137 of message-preview-browser.test.ts clicked the sent row's
toggle button while the row was open ("click: Timeout 5000ms exceeded",
"element is not visible"; runs 41568146239 and 41568701123). Since
#32867 (cd8e520) a transcript message line's toggle is flex 0 1 auto,
and open it holds an empty preview, so it has no width. The whole line
still toggles (headerToggleClick), so the test closes it from the
chevron, which the person sees and clicks.


Agent-Session: https://cmux.com/deeplink/agent?id=aid-2f629b93d5a20c58e6f8

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 — d3e886cd Deployed Nov 3, 2026 by teamleaderleo via cmux-tui tree preflight #103508
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant