Skip to content

fix(chat): one-line activity rows sit 22 apart again (#27580 regression) - #31497

Merged
teamleaderleo merged 6 commits into
feat-cmux-nextfrom
lane/grid-basered-rowpitch
Nov 2, 2026
Merged

teamleaderleo merged 6 commits into
feat-cmux-nextfrom
lane/grid-basered-rowpitch

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, 2026-11-02, on a transcript where consecutive one-line tool rows ("Ran 3 commands, read a file", "Ran 3 commands", "Read HQ#5724 token design", the live row) sat about 48-52px apart top to top:

"well now there's sometimes too much spacing between tool calls"

Regressed by #27580 (squash 044769a): it drew every tool, notice, inbox and message line on the grid's 28 list row and put the 24 block gap between each one, both between transcript rows (transcriptGap) and inside a run (.cv-tools, .cv-tool-run, .cv-tool-group gap). The settled design is leo-workspace design/chat-transcript.md "One-line row pitch" (#29965; Leo, 2026-11-01: "doesn't make sense for these to be spaced differently"): every one-line row is the tool rows' 22px line, and consecutive ones are 22 apart top to top.

What changes:

  • --cv-tool-row-height is 22 again; received lines and disclosure lines use it.
  • Run stacks list their lines flush (gap 0); a note keeps the block gap above and below it (--cv-note-gap), so Transcript: more room around notes between tool calls #30400's room around a note holds.
  • transcriptGrid.ts: a step row (a tool run or an isLineRow line, MARK_STEP) after another step row takes no gap. The 24 block gap applies only between prose or a card and a run of one-line rows. Gaps never add.
  • model.ts estimates match: 22 lines, no in-run gaps, the note gap. rowEstimates.test.ts expects 22.

Tests (cmux-ci at this head, base reds from react-apps-check run 41362440478): agent-pane-step-rows, transcript-thought, incoming-message-disclosure-browser, agent-pane-suggested-tasks, agent-pane-working-counts red at base; results at head in a comment. transcript-row-pitch-browser, transcript-rhythm, transcript-interim-prose-gap, continuationSpacing stay green.

Not in this PR: #29124's centred status rows (STATUS_GAP, zeroed by #27580). They go in a follow-up so this one lands first.

Risk: transcript spacing only (CSS tokens, the layout's gap rule, the estimator).

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

Restores one-line activity rows (tool calls, notices, inbox, and message lines) to 22px apart top to top. PR #27580 regressed this by drawing each row on the 28px grid row with a 24px block gap between them, so consecutive rows sat about 50px apart.

  • Tool rows, received lines, and disclosure lines are 22px again; run stacks list their lines flush.
  • The running turn's live line joins a run below it flush; under its own prompt it still waits the block gap.
  • The block gap now applies only around a run of one-line rows, preserving the room around note rows.
  • transcriptGrid.ts and the height estimator match the new spacing; rowEstimates tests expect the 22px line, and transcript-rhythm asserts the live line sits flush under its run.
  • agent-pane-working-counts resolves var() token heights through a probe instead of parseFloat, which was NaN on the token chain.

Regression context

Leo, 2026-11-02, on a transcript where consecutive one-line tool rows sat about 48–52px apart top to top: "well now there's sometimes too much spacing between tool calls". The settled design (design/chat-transcript.md "One-line row pitch", #29965) is every one-line row on the tool rows' 22px line, consecutive ones 22px apart. Status rows (#29124) go in a follow-up; risk is transcript spacing only — CSS tokens, the layout's gap rule, and the estimator.

Written for commit 1d30d9a. Summary will update on new commits.

View guided diff Turn on auto-fix

#27580 drew every tool, notice, inbox and message line on the 28 list row and put the 24 block
gap between each one (between transcript rows and inside a run's .cv-tools, .cv-tool-run and
.cv-tool-group), so consecutive one-line rows sat about 50 apart top to top. Leo, 2026-11-02:
"well now there's sometimes too much spacing between tool calls". design/chat-transcript.md
"One-line row pitch" (#29965) has them flush, 22 apart.

- --cv-tool-row-height is 22 again; received lines and disclosure lines use it.
- Run stacks list their lines flush (gap 0); a note keeps the block gap around it (--cv-note-gap).
- transcriptGrid: a step row (a tool run or an isLineRow line, MARK_STEP) after another step row
  takes no gap; the block gap is only around a run of them. The estimator matches (22 lines, no
  in-run gaps, the note gap).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-ac5053f7854c8635a4d0
@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 1d30d9a: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr31497 -f ref=lane/grid-basered-rowpitch -f platform=macos -f backend_mode=local

Gallery before/after for 1d30d9a: 16 states rendered, 0 images differ, 2940 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 41377585244 -R manaflow-ai/cmux -n gallery-advisory-31497-1d30d9a67f1d3133a01a979a2d097060d431ac97 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.access-offer/turn-no-credits Apple System Colors Light unchanged 0% own conversation.css
agent-pane.access-offer/turn-no-credits Apple System Colors unchanged 0% own conversation.css
agent-pane.access-offer/turn-low-credits Apple System Colors Light unchanged 0% own conversation.css
agent-pane.access-offer/turn-low-credits Apple System Colors unchanged 0% own conversation.css
agent-pane.access-offer/turn-no-offer Apple System Colors Light unchanged 0% own conversation.css
agent-pane.access-offer/turn-no-offer Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/single Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/single Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/grouped Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/grouped Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/single-multiedit Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/single-multiedit Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/grouped-multiedit Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/grouped-multiedit Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/single-long Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/single-long Apple System Colors unchanged 0% own conversation.css
agent-pane.approval-edits/grouped-long Apple System Colors Light unchanged 0% own conversation.css
agent-pane.approval-edits/grouped-long Apple System Colors unchanged 0% own conversation.css
agent-pane.attachment-source/before Apple System Colors Light unchanged 0% own conversation.css
agent-pane.attachment-source/before Apple System Colors unchanged 0% own conversation.css
agent-pane.attachment-source/corner Apple System Colors Light unchanged 0% own conversation.css
agent-pane.attachment-source/corner Apple System Colors unchanged 0% own conversation.css
agent-pane.attachment-source/small Apple System Colors Light unchanged 0% own conversation.css
agent-pane.attachment-source/small Apple System Colors unchanged 0% own conversation.css
agent-pane.attachment-source/labelled Apple System Colors Light unchanged 0% own conversation.css
agent-pane.attachment-source/labelled Apple System Colors unchanged 0% own conversation.css
agent-pane.attachment-source/outside Apple System Colors Light unchanged 0% own conversation.css
agent-pane.attachment-source/outside Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/duration-columns Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/duration-columns Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/pinned-live-tail-light Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/pinned-live-tail-light Apple System Colors unchanged 0% own conversation.css

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Probably yours: session-info-surfaces.test.tsx fails here but not on main's latest full suite. Seen on other PRs too (likely flaky): TurnFooter.test.tsx, plainUserHeight.test.ts, plainUserHeight.test.ts and 4 more. This PR merged before its CI finished: fix forward on main.

CI failed on 1d30d9a67f (run 41377585317 attempt 1): 1 code, 2 unknown.

Job Verdict Why
web / react-apps-base-check (1) unknown no known signature; failed step: Run base reds and compare
web / react-apps-base-check (4) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs TurnFooter.test.tsx an empty footer adds no line and still fits its hover controls: failed (job)
  • seen on other PRs plainUserHeight.test.ts plain prompt estimates keep wrapping and collapse geometry at font 14: failed (job)
  • seen on other PRs plainUserHeight.test.ts plain prompt estimates keep wrapping and collapse geometry at font 20: failed (job)
  • seen on other PRs plainUserHeight.test.ts hyphen thematic breaks keep their original parser-backed height: failed (job)
  • seen on other PRs harnesses-page.test.tsx the page shows each harness's state on this Mac: failed (job)
  • seen on other PRs motion-scale.test.ts motion scale > no webview CSS, TS or TSX animates off the scale: failed (job)
  • new in this PR session-info-surfaces.test.tsx over the chat, a project click opens its Files tab and the panel steps aside, still open: failed (job)
  • seen on other PRs subsession-row-opens-chat.test.tsx the row family is regular weight in the received line's 26px and 2px margins: failed (job)
Matched log lines
web / react-apps-base-check (4): (fail) an empty footer adds no line and still fits its hover controls [1.81ms]

Not re-run automatically: web / react-apps-base-check (1), web / react-apps-base-check (4), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: web / Web status; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules
red: web / react-apps-base-check (1); NEW webview test reds: test/agent-pane-dock-gutters.test.ts > chromium > the gutter beside every part of the stack scrolls the transcript, and the part keeps the pointer; do not merge until green; see lane-rules
red: web / react-apps-base-check (4); it named no new red test (setup or base replay failed; see its log); do not merge until green; see lane-rules
red: web / react-apps-check; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules

Shipped in:

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 2, 2026
… its tokens

rowEstimates: another agent's message, a sent message and a task notice are one 22px line
(design/chat-transcript.md "One-line row pitch"). agent-pane-working-counts read --cv-meta-row
with parseFloat, which is NaN since the token is a var() chain; it resolves each token through a
probe's height.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-ac5053f7854c8635a4d0
@cursor

cursor Bot commented Nov 2, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@blacksmith-sh

blacksmith-sh Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Found 24 test failures on Blacksmith runners:

Failures

Test View Logs
main.DeveloperIdAppTests.test_download_prints_the_active_profile_only/
test_download_prints_the_active_profile_only
View Logs
src/agent-session/acpmux/conversation/TurnFooter.test.tsx/TurnFooter.test.tsx View Logs
src/agent-session/acpmux/conversation/TurnFooter.test.tsx/TurnFooter.test.tsx View Logs
src/agent-session/acpmux/plainUserHeight.test.ts/plainUserHeight.test View Logs
src/agent-session/acpmux/plainUserHeight.test.ts/plainUserHeight.test View Logs
stubs: /System/Library/Frameworks/Security.framework/Versions/A/Security has no stub/
Security has no stub
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_CFRetain']/
CoreFoundation, missing 1: ['_CFRetain']
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_log2']/
CoreFoundation, missing 1: ['_log2']
View Logs
test/harnesses-page.test.tsx/harnesses-page.test.tsx View Logs
test/harnesses-page.test.tsx/harnesses-page.test.tsx View Logs

...and 14 more test failures. View all on Blacksmith: run 41377585317, run 41377585247

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

…apart (#29965)

The running turn's live line (thinking/working, and the live run line) took the 24 block gap
under a run of step rows; it is one more line of the run, so it joins flush. Under its own prompt
it still waits a block gap (grid.md 5.5). continuationSpacing tests both. The reply-room comment
no longer says a note adds no room (review follow-up).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-ac5053f7854c8635a4d0
@teamleaderleo
teamleaderleo merged commit 7a9e1ab into feat-cmux-next Nov 2, 2026
157 of 174 checks passed
@teamleaderleo
teamleaderleo deleted the lane/grid-basered-rowpitch branch November 2, 2026 02:46
teamleaderleo added a commit that referenced this pull request Nov 2, 2026
#31497 brought step-pitch, run-to-step and step-to-prompt to their values,
so their test.failing rows (cmux#31614) turned red on base. Drop pending on
those three. The live line (25) and the waiting group (49) are not on the
22 pitch yet; their rows stay pending, now naming grid-system.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-81baa1463f6190d4c5dc
teamleaderleo added a commit that referenced this pull request Nov 2, 2026
…31686)

#31497 brought step-pitch, run-to-step and step-to-prompt to their values,
so their test.failing rows (cmux#31614) turned red on base. Drop pending on
those three. The live line (25) and the waiting group (49) are not on the
22 pitch yet; their rows stay pending, now naming grid-system.


Agent-Session: https://cmux.com/deeplink/agent?id=aid-81baa1463f6190d4c5dc

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Nov 2, 2026
… and line tokens (#31905)

The .cv-disclosure row lost its 2px outer margin in #27580 (a gap belongs to
its container) and its line height became var(--cv-tool-row-height) in
#31497; the test still expected 2px 0 and 26px. Assert the tokens instead.


Agent-Session: https://cmux.com/deeplink/agent?id=aid-ac5053f7854c8635a4d0

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Nov 2, 2026
transcript-spacing, composer-rest-gap, queued-user-footer and the live-line plays in
transcript.gallery.ts asserted the pre-grid rhythm: --cv-turn-gap overrides, a 16px turn gap
kept in each row's box, a waiting steer row flush with the bubble's right edge, and a live
line 14px clear of the run over it. The grid (#27580), the reply footer row (#31690), the
waiting steer row (#31683) and the flush live line (#31497) changed those by design; the
plays now read the same grid tokens.


Agent-Session: https://cmux.com/deeplink/agent?id=aid-ac5053f7854c8635a4d0

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 1d30d9a6 Deployed Nov 2, 2026 by teamleaderleo via cmux-tui tree preflight #98606
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant