Agent chat: PR pills share the message action row

Merged
TE
7d ago
+2067-797

PR links now share the message action row as transparent #N repo pills. Each number is underlined and its whole pill opens the PR. Up to two links fit beside the actions; +N opens an instant glass popover outside transcript layout. Footerless replies attach links to their final content or existing block actions. The former composer row and its extra spacing are removed.

Lawrence: "pr should be pill instead / not take up so much vertical space"

Leo: "yeah wtf plus there's still so much of a vertical gap in things... where are the improvements? and wtf why does opening it push shit up so much? and why aren't you just underlinning the text and having the area be clickable without highlights? just put them to the right..."

Takes back #25633's inline expansion and #22731's full-width PR title-bar treatment. Preserves #24190's reference deduplication and glass, #25723's 16 px turn gaps, #25208's visible-changes selector, and the producer revision cache.

Gallery agent-pane.pr-dock contains two-link, one-link and tight-spacing alternatives. The selected design shows up to two links, reducing to one on narrow panes. Footerless paragraph, code, diagram, table, math, rule and footnote states are covered.

Risk: renderer prop integration and narrow-width layout. The optional artifactIdentity/artifactRevision props from artifact step B must coexist with these action props when integrated. The pill sizing ResizeObserver observes only the mounted pill and measurement spans; effect cleanup disconnects it on replacement or unmount.

Changelog

Fixed: PR links share the message action row and overflow opens without moving the transcript.

Validation at the current head

  • Head: 684aca12e1f67cf10a300e4e44e7c73cbbda2d64; merged base 51e238d4a2f20a2f3c0fd9fb6ff25bf08b8d3eef.
  • Fleet run 40956304969: prescribed web lint passed; 5 transcript regressions and 46 browser cases passed. Snapshot 26923583476b04c2eee05dd0d21a8367404da411 has the identical tree 11d77819f713878d6703fab66b4792c599c81425.
  • Exact-head static prepush gate passed with no new violations.
  • Fresh independent whole-diff review and hosted-check reconciliation are in progress.
  • The earlier repair attempt stopped at the design-token check before tests; the corrected baseline restores the unchanged comparison styles' base entries. It adds no allowance above base.
  • Action-row reference: Claude's message action row; private reference captures stay private.

The renderer now confirms PR host mounting rather than inferring it from parsed block count. Empty nested quotes keep the fallback; finished replies with their own action row place pills in that row. Existing gallery variant IDs and comparison treatments are retained alongside inline-pills, one-first, and tight.

Performance

MetricBeforeAfterDeltaHarness
Historical child-row reads per parent token5010-501transcript-pr-revision.test.tsx, paired fleet run 40889495686

Visual evidence

Real Linux/Chromium gallery captures from cmux-ci 677aa177a22087bc437e1861, using demo content only. These show the implementation and alternatives; final-head focused validation is linked above. No private reference images are published.

Selected, wideSelected, narrow with overflow open
Inline pills, wideInline pills with overflow, narrow
One-link alternativeTighter-spacing alternative
One-link alternativeTight-spacing alternative

Same-fixture comparison

The before run 40592784965 passed all three capture cases. It uses the unchanged pre-feature renderer at 355a79f83f9d3d4df15bc94a86116ea66b4839df, plus capture-only gallery/test files at 2ae7ea70cc15596e5fb5e1c26adb4fc741a2c2ea (tree e61a176fb041419a929e72de85a0eafedce335f0). The persisted inspector is closed through its setting; PR support is enabled. The invalid attempt that disabled PR support is excluded.

The after frames are from 40592216956, source 02d531dc57d5b345ed6c734ee9c7fe3e940b8315. Both use agent-pane.pr-dock#compact-count, the same demo PRs and 760×420 / 320×420 viewports. Production files are byte-identical between that after-capture head, reviewed implementation head d38957a9983f5f3f73f6a5cc0e44e9caefdc1420 and final fixture-repair head 0eae1baeed95adf02c5b2e7ddc06341b9352d9eb; only two browser test files changed. Unrelated base changes to the header and composer are not attributed to this PR.

Before, wideAfter, wide
Before: separate PR disclosure above composerAfter: inline PR pills in the message action row
Before, narrowAfter, narrow
Before: separate PR row, narrowAfter: inline pill and overflow count, narrow

All four files are original browser exports, verified byte-for-byte against the run logs. No private references or synthetic replacement images are used.

Size: One renderer contract spans Markdown/code/media tails and their fixtures. Splitting it would leave unsupported intermediate renderers. The base merge adds no feature scope.

Agent session: agent session