Transcript: status rows on the 22 pitch under a status row; lighter session chips
Leo, 2026-11-03, on two captures of a running Claude chat: "this is pretty bad spacing and formatting" / "i thought we made this stuff smaller".
Spec: leo-workspace design/transcript-spacing.md rules 3 and 4 and "Row kinds" (the new "Status rows at a running turn's bottom" section lands alongside this), and design/chat-transcript.md "Session link chip".
What changed
- The live line sits flush under a status row.
model.tsisLiveStepjoined the running turn's live line to the run only when the row above it was a step row. Under a status row ("Subagent finished", a compaction, a scheduled check), the live line took the footer's 32 slot a block gap away, which put "Thinking" 51 from the row above it and 51 from "1 message from 1 session" below it. Regressed by #31745, which brought in the live-step join for step rows only. It now joins under status rows too. - Session chips are lighter. On received and "Sent to" lines, the chip was 22 tall at the 13 control size with an 18% hairline ring, standing 6 over its glyphs. It is now the row's own words at the row's size,
1em + 4tall (18 at 14px), 4 at the sides, a 4 radius, an 8% wash, and no ring at rest. The ring comes back on hover. That look came from #30051. - Gallery
agent-pane.transcript-spacing-table: new variantsworking-bottomandreply-received(the pick) reproduce the two captures.reply-received-before(the replaced 22 bordered chip) andreply-received-underline(Claude Code desktop's underlined name, refclaude/live/transcript-peer-session-message) are the other two versions. The underline reads as prose rather than as a link to another chat, so the light wash shipped. - The
all-kindsfixture's scheduled check now hashasRows. Since #32798, a quiet background turn with nothing to open draws no line, which leftreceived-to-statusandstatus-to-runwith nothing to measure.
Measured (Chromium, light and dark; TRANSCRIPT_STATUS_ROWS, SESSION_CHIP in transcriptSpacing.ts)
| gap / size | before | after |
|---|---|---|
| folded run to "Subagent finished" | 22 | 22 |
| "Subagent finished" to "Thinking" | 51 | 22 |
| "Thinking" to "1 message from 1 session" | 51 | 22 |
| earlier footer to received line | 51 | 51 |
| received line to "Sent to" | 21.5 | 22 |
| "Sent to" to "Thinking" | 22 | 22 |
| session chip over its glyphs | 6 | under 3 |
| chip font vs row font | -1 | 0 |
Observed / Not run
- Red at 78eba1a96a2 (test only, on base): 14 failures in
transcript-spacing-kinds.test.ts(subagent-to-live, live-to-waiting, the chip size, and the two all-kinds rows #32798 left unmeasurable). - Green at cf3ccc616e3: 220 pass, 0 fail across 14 files (kinds, session-chip, spacing-table, system-rows, row-alignment, icon-column, received-line, inbox icon column, agent-pane spacing, steady tone, transcript-rhythm, continuationSpacing, TranscriptActivityRow, working-counts). At that commit,
bun run checkwas red only on check:fixed-waits and check:design-tokens. The head commit fixes both, andscripts/web-lint.shandprepush-gate.pypass at the head. A final-head rerun is in flight. - Not run: a DEV build.
Risk: low. The live-line change affects only a below live line under a status row. The chip change is one CSS rule.
Changelog
- Agent chat: the live "Thinking" line sits on the 22px row pitch under "Subagent finished" and other status rows, and session names on received and sent lines are drawn at the row's size with a lighter chip.
Agent session: agent session
🤖 Generated with Claude Code
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Fixes transcript spacing at the bottom of a running turn so status rows and the live line sit flush on the 22px row pitch, and makes session chips on received and sent lines lighter so they read as the row's own words.
- The live "Thinking" line under a status row ("Subagent finished", a compaction, a scheduled check) now joins the run instead of taking the footer's 32px slot, which had left 51px gaps to the rows above and below it.
- Session chips are now the row's own text at the row's size (
1em + 4pxtall, 18px at 14px), with a light 8% wash, a 4px radius, and no ring at rest; the ring returns on hover. Previously they were 22px bordered chips at the control size. - Adds
working-bottomandreply-receivedgallery variants reproducing the reported captures, withreply-received-beforeandreply-received-underlinefor comparison. - Adds measurements for the status rows and chip size, and fixes the
all-kindsfixture so its scheduled check draws a line to measure.