Transcript: status rows on the 22 pitch under a status row; lighter session chips

Merged
TE
3d ago
+433-32

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.ts isLiveStep joined 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 + 4 tall (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 variants working-bottom and reply-received (the pick) reproduce the two captures. reply-received-before (the replaced 22 bordered chip) and reply-received-underline (Claude Code desktop's underlined name, ref claude/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-kinds fixture's scheduled check now has hasRows. Since #32798, a quiet background turn with nothing to open draws no line, which left received-to-status and status-to-run with nothing to measure.

Measured (Chromium, light and dark; TRANSCRIPT_STATUS_ROWS, SESSION_CHIP in transcriptSpacing.ts)

gap / sizebeforeafter
folded run to "Subagent finished"2222
"Subagent finished" to "Thinking"5122
"Thinking" to "1 message from 1 session"5122
earlier footer to received line5151
received line to "Sent to"21.522
"Sent to" to "Thinking"2222
session chip over its glyphs6under 3
chip font vs row font-10

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 check was red only on check:fixed-waits and check:design-tokens. The head commit fixes both, and scripts/web-lint.sh and prepush-gate.py pass 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
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 + 4px tall, 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-bottom and reply-received gallery variants reproducing the reported captures, with reply-received-before and reply-received-underline for comparison.
  • Adds measurements for the status rows and chip size, and fixes the all-kinds fixture so its scheduled check draws a line to measure.