Agent chat: the PR dock's chips open inline, never over the chat

TE
9d ago
+144-36

The compact PR dock's expanded chips could cover the card above it. They now wrap inline above the count, so the composer stack reserves their height and the transcript stays clear. Opening is immediate. The count still opens Session Info > Changes; chips keep their hover cards and dismissal, and Escape collapses them and returns focus to the disclosure. Dismissing shortcuts leaves the count intact.

Leo's request:

"Oh my God, this is terrible. What is this? Why did you do it like this? Don't do it like this."

Gallery: agent-pane.pr-dock has three expanded variants, each beside a synthetic received-message card ending in Show more:

  • inline-above-show-more — selected default. Full-width wrapping preserves labels and keeps the count next to the composer.
  • inline-beside-show-more — compact, but cuts labels much sooner in narrow panes.
  • inline-below-show-more — clears the card, but moves the count farther from the composer.

Reference: cmux-design-references apps/claude/live/composer-demo-ready.png, matching its quiet composer-adjacent controls. Before/after evidence uses only synthetic gallery content.

Before and after: synthetic gallery

Three inline variants at 320px

Observed / Not run

  • Regression committed before the fix: 755fd1417347527b112aeb2100f1d827762819e8, production code at base 93e1e23124cb6e0a13d2af632682e910b2c4a593. CMUX_BROWSER_TESTS=1 bun test test/pr-dock-inline-layout.test.ts --test-name-pattern 'above, 760px' fails because a chip intersects Show more and lies outside the dock.
  • Fixed: the same focused command passes on 273a0cd07a6efec47944210cbf1e7a0e43965f41; all six geometry/Escape cases pass in Chromium (three layouts, 760px and 320px); gallery screenshots visually inspected.
  • Existing agent-pane-pr-dock, pr-dock-stale-state, changes-pull-request, chat-header-pull-request-merge, chat-header-pull-request-status, transcript-pull-requests tests pass. chat-header-pull-request fails after other DOM files share header state, then passes in its own process.
  • bun run check, scripts/web-lint.sh, check:fixed-waits, check:layers, check:design-tokens, changed-file vp lint and vp fmt --check, full tsc --noEmit -p ., and the prepush gate pass. All tests use the lane's dedicated TMPDIR.
  • Primary and independent correctness/visual reviews: no findings on 273a0cd07a6efec47944210cbf1e7a0e43965f41.
  • Native macOS/WebKit not run; this changes webview layout only.

Risk: expanded chips take transcript space, especially at narrow widths. An outside click leaves the inline disclosure open; its toggle and Escape close it. No new animation.

Changelog

Fixed: expanded PR shortcuts above the composer no longer cover the chat.

Agent session: agent session