fix(chat): a waiting steer's action row takes no layout height, as a sent prompt's (#27580 regression)
Leo, 2026-11-02 00:28Z, on the prompt's action row: "those buttons should always just be there left aligned".
Regressed by #27580 (squash 044769ae). It lays a sent prompt's action row in the turn gap (absolute, no layout height) but left a waiting steer's row in flow, with model.ts userMetaHeight reserving 28px for it. So sending the steer took 28px out of its row. Near the scroll end every row then moved down 11px, which is why queued-user-footer.test.ts "360px, wrapping, dark/light" fails about 8 times in 10. A row dump at base shows it: the steer row is h296 before Send now and h268 after, and every row above it moves t+11.
Fix: under a bubble, the action row is absolute in both states (the same rule as a sent prompt), and the estimate reserves nothing. A waiting prompt of images alone draws no bubble, so its row stays in flow and keeps its estimate. This replaces #31478's position-only offset, which matched the row's place but not its height.
Test: queued-user-footer.test.ts 10 times at this head on cmux-ci; results in a comment.
Risk: small. One estimate term and one CSS selector for the prompt's action row.
Agent session: agent session
🤖 Generated with Claude Code
![View with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v3-3x.png)
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Fixes the #27580 regression where a waiting steer's action row kept 28px of layout height while a sent prompt's row was absolutely laid out, so sending a steer shifted every row down 11px near the scroll end and made queued-user-footer.test.ts flaky.
- The action row is now absolute, out of flow, under a bubble for both waiting steers and sent prompts, and the height estimate reserves nothing for it.
- A waiting prompt of images alone draws no bubble, so its row stays in flow and keeps its height estimate.