base red: waiting steer's action row takes no layout height, like a sent prompt's

TE
5d ago
+16-17

Cause

queued-user-footer.test.ts "queued and sent bubble and footer keep their position at 360px, wrapping, dark/light" fails about 8 runs in 10 on feat-cmux-next.

Since #27580, a sent prompt's action row is laid in the turn gap and takes no layout height (absolutely positioned under the bubble). A waiting steer's row (Send now, X, Copy) stayed in flow: userMetaHeight in webviews/src/agent-session/acpmux/model.ts reserved metaRow() while steer == "waiting", and the CSS kept the row position: relative. #31478 matched only the waiting row's position to the sent one, not its height.

So Send now shrinks the prompt row by 28px (row dump at 360px, wrapping: steer h296 before, prompt h268 after). At 360px the content sits near the scroll end, so the shorter content clamps there and pulls every row down 11px, and the footer the test measures moves with it.

Fix

  • conversation.css: a waiting steer's action row under a bubble uses the same absolute placement as a sent prompt's (same top/right, no margin), so it takes no height and sits in the same place. The old position: relative rule now covers only a waiting steer of images alone, which has no bubble to hang the row from.
  • model.ts: userMetaHeight no longer reserves metaRow() for a waiting steer with text. The images-only case keeps its in-flow reservation, matching the CSS.

Nothing else changes: the 22px row pitch, transcriptGrid.ts gaps and the footer overhang are untouched.

Design

  • leo-workspace design/grid.md 5.5: "A message's hover action row (copy, speak, …, time) takes no layout height: it is laid in the gap under its message, its 16 glyphs' top 4 below the message's box in every case."
  • leo-workspace design/chat-transcript.md (queued personal prompt): "Send now and the withdrawal × occupy the same footer slot directly under the bubble's right edge. When the prompt is delivered, that slot switches to the normal time, Copy and Retry controls." Same slot now also means the same (zero) height.

Tests (fleet, at this head)

Runs pending; job ids follow.

Agent session: agent session

🤖 Generated with Claude Code


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


Summary by cubic

Fixes a flaky queued-user-footer test at 360px by making a waiting steer's action row take no layout height, like a sent prompt's.

Since #27580 a sent prompt's action row is absolutely positioned in the turn gap and takes no height, but a waiting steer's row stayed in flow. Send now then shrank the row by 28px; at narrow widths near the scroll end the transcript clamped, shifting every row and moving the footer the test measures.

Changes

  • A waiting steer's action row under a bubble is now absolutely positioned in the same place as a sent prompt's, and userMetaHeight no longer reserves it.
  • A waiting steer of images alone has no bubble, so its row stays in flow and keeps its reservation.