Repository navigation
Agent chat: every disclosure chevron sits right after its label, pointing down, the ChatGPT way - #32867
Conversation
…, 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
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for Unclear: CI stopped on
Not re-run automatically: Written by red: web / Web status; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules Shipped in:
|
|
Owned by an agent session · session |
|
Review (subagent claude-opus-5-5 medium): SHIP at d3e886c |
…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
…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
…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>
…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>
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:
TranscriptActivityRow)IncomingMessageCardthroughDisclosureRow), the "Received N messages" and "N messages from M sessions" heads (MessageGroupHead)AgentMessageRow,SentMessageLine): the chevron comes before the hover Copy, and the delivery word ends the lineSubagentDoneLine): 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-labelhas 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 overagent-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'Existing tests updated to the new rule:
webviews/test/incoming-message-disclosure-browser.test.ts: "a delivered message and a waiting one draw the same line". It asserted both received lines' chevrons end on one x; it now asserts each chevron sits within 8px after its preview, and still that hover doesn't move it.webviews/src/agent-session/acpmux/conversation/RowGrammar.test.tsx: "the trailing column and chevron use the shared flex row contract" becomes "the chevron follows the words and the trailing column ends the line". It also read the first.cv-tool {block, which since Transcript: a running tool row shimmers its words, not a spinner at the far edge ("doesn't claude desktop have the thinking shimmer go across stuff") #32805 holds only shimmer tokens.Observed / Not run
Observed, on the fleet at head d3e886c (
cmux-ci test --setup playwright):bun run checkpasses, 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
Agent session: agent session
🤖 Generated with Claude Code
Open in [code]smith · Need help on this PR? Tag
@codesmith-botwith 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
.acpmux-row, so Home's run ledger and the composer are unchanged.Tests
transcript-chevron-after-label.test.tschecks 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.tsandRowGrammar.test.tsxupdated to the new chevron-after-words rule.Written for commit d3e886c. Summary will update on new commits.