Skip to content

Transcript: more room around notes between tool calls - #30400

Merged
teamleaderleo merged 6 commits into
feat-cmux-nextfrom
interim-prose-padding
Nov 1, 2026
Merged

teamleaderleo merged 6 commits into
feat-cmux-nextfrom
interim-prose-padding

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, 2026-11-01: "the thoughts in between tool calls probably want a bit more padding"

What changed

A short interim note the agent writes between two runs of calls is folded into the run as a quiet line (turns.ts mergeShortNotes, drawn as .cv-tool-note in TurnRows.tsx). It had 3px to the tool rows around it, so in an opened run it sat tight against "List …" above and "Ran 2 commands" below.

  • .cv-tool-note now has --cv-note-gap above and below it: the 12px plain status gap (--cv-status-gap-plain, the transcript's inner gap in design/grid.md 5.5). That is the room a longer reply between two runs already has (cmux#29124), so a note and a reply between tool rows read the same.
  • model.ts activityStepHeight estimates a note as its 20px line plus the gap on both sides, so estimated heights match drawn ones.
  • Unchanged: the gaps between consecutive tool rows, the status rows between replies (12/12 from Agent pane: status, tool and message rows and the action row line up with the prose #29124), the icon column, subagent rows, prompts and final replies, colours and type.

Design: leo-workspace design/chat-transcript.md (rows between replies, grouped steps); the spec gets a "Notes between tool rows" entry in a follow-up leo-workspace PR.

Gallery

agent-pane.interim-prose-gap: a running turn's opened run (a command, a note, "Ran 2 commands" opened, a note, a command). Variants: shipped (12px), tight (before, 3px), snug (8px, the message gap), roomy (16px, the turn gap). I picked 12 because it is the same room a longer reply between two runs has, so the two kinds of interim prose stay consistent; 8 is barely more than the rows' own leading, and 16 is the turn gap, which would make a note read like a turn boundary inside one run.

Verification

cd webviews && CMUX_BROWSER_TESTS=1 bun test test/transcript-interim-prose-gap.test.ts (Chromium, light and dark), on the build fleet through cmux-ci test:

  • Red at the test commit 65867b8: each note had 3px above and below it (note -> Ran 2 commands: 3px, not 12px, and so on).
  • Green at the fix: 12px on all four sides of the two notes, and every other gap in the run matches the tight variant.

Also on the fleet at the fix: rowEstimates.test.ts (21 pass), transcript-row-alignment.test.ts (2 pass, light and dark), and bun run check:pieces (lint, format, type check) clean.

Observed / Not run

  • Observed: the fleet runs above.
  • Not run: no native build or Mac capture; this is a webview CSS and estimate change.

Changelog

  • Changed: Short notes between tool calls in the agent transcript have more room above and below them.

🤖 Generated with Claude Code

Agent session: agent session


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


Summary by cubic

Short notes the agent writes between tool calls in the transcript now have 12px of room above and below them, matching the spacing a longer reply between two runs already has, instead of 3px.

  • Updates the note's CSS margin to use the plain status gap (--cv-note-gap, 12px) and adds gallery variants comparing 3, 8, 12, and 16px.
  • Updates activityStepHeight in model.ts to estimate a note as its 20px line plus the gap on both sides.
  • Adds a browser test measuring the gaps around notes in light and dark themes.

Written for commit 161b964. Summary will update on new commits.

View guided diff Turn on auto-fix

teamleaderleo and others added 3 commits October 31, 2026 22:40
…d below

Leo, 2026-11-01: "the thoughts in between tool calls probably want a bit more padding"

A short interim note folded into a run of calls (turns.ts mergeShortNotes)
had 3px to the tool rows around it. It now has --cv-note-gap, the 12px
plain status gap a longer reply between two runs has; model.ts estimates
the note with the same numbers. Gallery variants compare 3, 8, 12 and 16px.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-92fa78a91e29868c5eaa
@teamleaderleo teamleaderleo added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 1, 2026
@cursor

cursor Bot commented Nov 1, 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.

@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 161b964: 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=pr30400 -f ref=interim-prose-padding -f platform=macos -f backend_mode=local

Gallery before/after for 161b964: 16 states rendered, 0 images differ, 2882 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 41328087289 -R manaflow-ai/cmux -n gallery-advisory-30400-161b9647a11dbe781959b775cd440d5a63a62438 (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.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
agent-pane.background-activity/pinned-live-tail-dark Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/pinned-live-tail-dark Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/after-latest-message-light Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/after-latest-message-light Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/after-latest-message-dark Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/after-latest-message-dark Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/compact-pill-light Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/compact-pill-light Apple System Colors unchanged 0% own conversation.css
agent-pane.background-activity/compact-pill-dark Apple System Colors Light unchanged 0% own conversation.css
agent-pane.background-activity/compact-pill-dark Apple System Colors unchanged 0% own conversation.css

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

Passes: CI passes on 161b9647a1.

CI passes on 161b9647a1 (run 41328087366 attempt 1).

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: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base ffcf61c; does not block

Shipped in:

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/41330433296 at e0fa06f failed: cmux-next crash ends the app.
Those jobs last passed at 45b916e. This pull request is one of 5 merged since: #31133, #30400, #31145, #31066, #31069.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 4 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="webviews/src/agent-session/acpmux/model.ts">

<violation number="1" location="webviews/src/agent-session/acpmux/model.ts:977">
P2: This estimate assumes every short note is one line, but `mergeShortNotes` accepts up to 160 characters and `.cv-tool-note` wraps them. Compute the wrapped line count from the transcript width, including explicit line breaks, before adding the two 12px gaps; otherwise later virtual rows are initially placed too high and can jump when measured.</violation>
</file>

Reply with feedback, questions, or to request a fix.

View guided diff | Turn on auto-fix | Re-trigger cubic

function activityStepHeight(item: AcpmuxActivity): number {
const tool = item.tool;
if (!tool) return 26;
if (!tool) return item.kind === "note" ? NOTE_LINE + 2 * NOTE_GAP : 26;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: This estimate assumes every short note is one line, but mergeShortNotes accepts up to 160 characters and .cv-tool-note wraps them. Compute the wrapped line count from the transcript width, including explicit line breaks, before adding the two 12px gaps; otherwise later virtual rows are initially placed too high and can jump when measured.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/model.ts, line 977:

<comment>This estimate assumes every short note is one line, but `mergeShortNotes` accepts up to 160 characters and `.cv-tool-note` wraps them. Compute the wrapped line count from the transcript width, including explicit line breaks, before adding the two 12px gaps; otherwise later virtual rows are initially placed too high and can jump when measured.</comment>

<file context>
@@ -968,9 +968,13 @@ const TOOL_RUN_BOTTOM = 4;
 function activityStepHeight(item: AcpmuxActivity): number {
   const tool = item.tool;
-  if (!tool) return 26;
+  if (!tool) return item.kind === "note" ? NOTE_LINE + 2 * NOTE_GAP : 26;
   const mcp = mcpCall(tool);
   if (mcp) {
</file context>

@blacksmith-sh

blacksmith-sh Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Found 6 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp0a3mkopf/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpk4t8fzyt/summary-missing.json (live):/summary-missing.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (independent Codex gpt-6.1-sol, high, via the review router; full diff from merge base 559ab05 to this head): SHIP at c041f57.

No P1/P2 findings.

@cmux-bot
cmux-bot Bot temporarily deployed to ci-routing-agent November 1, 2026 12:36 Inactive
@cmux-bot
cmux-bot Bot temporarily deployed to ci-routing-agent November 1, 2026 12:37 Inactive
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (next-review patch-id; carried): SHIP at f1f3a6e

The independent SHIP at c041f57 carries to this head: the PR's own change (git diff $(git merge-base feat-cmux-next HEAD) HEAD) has the same git patch-id --verbatim (af13986da1e9fd01) at both heads, and no merge between them was resolved by hand. Nothing new to review. A newer BLOCK, or any change to the PR's own diff, ends the carry.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at f1f3a6e

Reviewer: codex gpt-6.1-sol xhigh, fast tier.

Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at f1f3a6e

Visual verdict: Inspected all 16 supplied before/after pairs; they are identical. None show the changed note spacing.

No correctness bugs found. Tests could not run locally because Bun and dependencies are unavailable.

  1. [P2] [follow-up] webviews/src/agent-session/acpmux/conversation/InterimProseGap.gallery.ts:48 — Supply light/dark captures of the note-spacing state. The provided screenshots cover unrelated states, leaving the intended visual change unverified.

Follow-ups:

  • Add light/dark interim-prose-gap captures comparing shipped and tight spacing.

…se-padding

# Conflicts:
#	webviews/src/agent-session/acpmux/model.ts

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves f1f3a6e: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

…t step draws on the live line

#29938 draws a running turn's latest step on its own live line, outside
.cv-tool-run, so the fixture's last command left the run and the second
note had no row below it. One more call keeps it between two run rows.
transcript-interim-prose-gap.test.ts: red after the base merge (3 of 4
note gaps found), green with this (4 of 4 at 12px, light and dark).

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

cursor Bot commented Nov 1, 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.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 161b964

Reviewer: codex gpt-6-astra high, fast tier.

Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at 161b964
Visual verdict: no images; Leo tries the build

  1. [P2] [follow-up] model.ts:1042 assumes every note is one 20px line, but .cv-tool-note wraps and notes can be up to 160 characters. In a narrow pane, wrapped notes are underestimated, causing virtualized transcript rows to shift when mounted. Estimate wrapped lines or add narrow-width coverage.

Follow-ups:

  • [P2] Update note height estimation for wrapped notes.

@teamleaderleo
teamleaderleo merged commit 0f16e43 into feat-cmux-next Nov 1, 2026
186 of 189 checks passed
@teamleaderleo
teamleaderleo deleted the interim-prose-padding branch November 1, 2026 17:09
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
, #31228, repo picker) into transcript rhythm

Conflict resolution keeps the grid values:
- --cv-reply-room and --cv-note-gap are 0 on the grid, because the stack's block gap is the room under a reply and around a note.
- chromeHeight keeps the grid's zero-height reply chrome.
- The inbox group head uses toolRowHeight() with base's foldsThreads.
- Both sides' trailing CSS is kept, so the repo picker stays.
- The design token baseline is regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
Review BLOCK at 5cedb24: #30400 estimates a note as its 20 line plus 12 above and
below, but on the grid .cv-tool-note has no margin (the run's block gap is the
room), so each note was overestimated by 24. NOTE_GAP is 0, matching
--cv-note-gap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
Base's transcript-interim-prose-gap (#30400) holds a 12px note gap. On the grid
a run stacks rows and notes with the 24 block gap, which gives a note more
room than base's 12 and the same room as between any two blocks. The test now
reads the grid token.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
* Add shared layout grid tokens and validate their CSS and Swift copies

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

* test(webviews): measure gallery grid lines from runtime tokens

Add warning-level surface scenes, baseline/cap-height text measurements, named optical offsets, and recoverable per-line JSON evidence. Missing mounts and unknown selector coverage fail. Browser measurements and full checks are delegated to the parent fleet run; scoped lint, formatting, browser lane discovery, gallery IDs, and TypeScript syntax checked locally.

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

* Add transcript rhythm tokens and role-based grid measurement selectors

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

* Keep selector fallback valid when the marked surface is the target itself

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

* test(webviews): align grid scenes with shared surface roles

Use stable surface IDs across variants and ink-only role hints with selector fallbacks. Add existing plus, mode, project and tray scenes plus a 31-row expanded subagent fixture. Retain transcript action coverage and leave toolgroup/rhythm implementation to its owner. Scoped lint/format and gallery entry discovery passed; browser measurement remains delegated to parent fleet integration.

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

* Identify repeated grid scenes by their measured root

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

* Add shared transcript between-turn gap token

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

* Run layout grid validation in NEXT checks and scale the base unit

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

* Run layout grid drift check in the webviews warning branch

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

* Keep sidebar trailing marks fixed across densities

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

* test(chat): reproduce transcript column and block rhythm drift

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

* Add canonical composer foot gap token and measure against it

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

* fix(chat): centralize virtual transcript block rhythm and columns

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

* Measure visible placeholder ink and emit each grid scene baseline

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

* test(webviews): correct card grid fixture selectors

Read card fixture JSX: command permission body is its scope line; inline summary omits popover fold and close controls; glance inspector sections have distinct body labels and only Context/Connectors supply header icons. Scope absence diagnostics by fixture/section without changing coverageFailure assertions. Scoped format/lint, gallery discovery, and diff checks passed. Browser validation remains with parent fleet run.

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

* test(chat): cover turn boundaries, opened cards and count geometry

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

* Set composer foot gap token to four points

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

* test(chat): rhythm hover scene and cards fixture covers

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

* fix(chat): gap precedence, waiting indicator, foot gap, count spacing and trailing chevrons

One gap per adjacent pair, most specific first (waiting rule, composer,
turn, block). The waiting indicator takes the block gap on both sides; the
composer gap is the block gap after a message so its action row fits.
The quiet row sits var(--grid-gap-foot) under the composer box. Count
summaries part verb and count with one space and tabular figures. The
user action row is positioned again inside .cv-user__body.

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

* fix(chat): the last turn footer keeps the block gap to the composer

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

* fix(chat): received message chevron ends on col-right like every tool row

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

* test(chat): rhythm and estimate checks on base's received, steps and status rows

Base now leads a received message with its sender, reads a count summary
whole, draws no per-reply action row and centres status rows with its own
gaps. The rhythm test measures those rows where base draws them; the
estimate tests expect the grid's 28 rows with no status room.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(chat): carets sit inline after their label (#28018), not on col-right

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(chat): a disclosure caret stays inline after its words (#28018)

Review BLOCK at e0c3d9b: the rotor margin-inline-start auto pushed a
sub-session caret to the line end. The rhythm test now checks each caret
sits at most one grid gap after its words.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(chat): transcript gaps scale with Interface Size in the virtual placement

Review BLOCK at 18cf6d8: the CSS grid tokens multiply by
--cmux-interface-scale, but layoutConversation and placeRows placed the
gaps unscaled, so at 125% the footer action row laid in a 24 gap overlapped
the next row. The gaps (and the tail gap) now take the same factor, read
once per pass; kept rows reuse their gaps only at the same scale. The
rhythm test adds a 1.25x case.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(chat): measured placement reads the live Interface Size, kept rows only at their own

Review BLOCK at 1691838: placeRows copied a kept prefix placed at another
scale and stamped the estimate's scale. It now reads gridScale() itself,
keeps a prefix only at the same scale, and a unit test covers 100% to
125% with kept rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(chat): hold transcript-spacing to the grid action row (28 control laid in the gap)

Base #30297 measured a 24px meta row 4px under the bubble. design/grid.md lays a
message's action row in the gap with 28 controls and no layout height, so the
test now measures that.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(chat): row estimates scale grid lengths with the Interface Size

Review BLOCK at b1de39a: gaps scaled with --cmux-interface-scale but the
estimates still used raw grid metrics (action row 28, tool row, page edge),
so at 125% rows drawn 35 were estimated 28. layoutConversation now sets the
scale once per pass and those lengths multiply by it; the page edge reads
gridScale(). A unit test covers 100% to 125%.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(chat): scale the remaining grid-derived estimates (bubble, block and list gaps)

Review BLOCK at 5d643f0: the Markdown block gap, tool-run gaps between
activity items, and the prompt bubble's padding and sides were still raw grid
lengths, and listHeight left out the inner gap .cv-list now draws between
items. All of them multiply by the per-pass Interface Size now, and the
unit test also covers a two-call run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(chat): folded run estimates include the block gap between children

Review BLOCK at 84dc1b7: foldedRunSteps and foldedGroupHeight summed child
heights without the --grid-gap-block that .cv-tools, .cv-tool-run and
.cv-tool-group draw between them, so an expanded or partly folded run was
estimated one 24 gap short per adjacent child. Both add (n - 1) block gaps at
the per-pass Interface Size.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(chat): folded run lines are stacked with the block gap

The tool stacks (.cv-tools, .cv-tool-run, .cv-tool-group) draw --grid-gap-block
between their lines, which 66ddd56 now estimates. The unit test counted lines
with no gap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(chat): one-line notes and activity lines estimate one grid row; notice lines span the row

After the base merge:
- A legacy activity line keeps the footer slot's one line. Base #30561 measured it as text.
- Session-start and standalone notes estimate one 28 grid row instead of 37. Review at 66ddd56.
- Restore #29965's .acpmux-row--line .cv-tools rule, so a notice's tool line keeps the icon and text columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(chat): centre the footer in the turn gap on the action control token itself

Review at 45df014: the turn-gap footer rule read --cv-meta-row. On this branch
that is var(--grid-transcript-action-control) (28), but base's value is 24,
so naming the 28 control directly takes the ambiguity away. The value does
not change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(chat): a note's estimate takes the grid's zero note gap

Review BLOCK at 5cedb24: #30400 estimates a note as its 20 line plus 12 above and
below, but on the grid .cv-tool-note has no margin (the run's block gap is the
room), so each note was overestimated by 24. NOTE_GAP is 0, matching
--cv-note-gap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(chat): a note between tool rows has the run's block gap on the grid

Base's transcript-interim-prose-gap (#30400) holds a 12px note gap. On the grid
a run stacks rows and notes with the 24 block gap, which gives a note more
room than base's 12 and the same room as between any two blocks. The test now
reads the grid token.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

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

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 161b9647 Deployed Nov 1, 2026 by teamleaderleo via cmux-tui tree preflight #96905
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