Carry #29613: every sent message is its own card

Merged
TE
5d ago
+244-818

Carries #29613 at its exact reviewed head 434d859b7ddfb0ade7877af1b21eb1381b5f1013 because its original lane claim remains unavailable.

Leo, 2026-10-31:

this +11 is really bad you guys should just render them all separately

im referring to you sending f***ing mesages

Every message an agent sends (SendMessage, a shell acpmux send or batch, the acpmux MCP batch, a sub-session send_message) now draws as its own sent-message card, in order. Consecutive sends are no longer summed up under one "Messaged N agents" / "Messaged X N times" line whose card started closed once all went.

What changed:

  • toolGroups.ts: drops the messages group (withMessageGroups); each send stays its own message / send / subsession entry.
  • Removes the group's row and its gallery looks (MessageGroupRow.tsx/.css/.test.tsx, MessageGroup.gallery.ts, messageGroupLook.ts), its three strings, and their references (TurnRows, turns.ts ownRow, App theme hook, popup hover-reveal check, pane strings list).
  • Tests: toolGroups, acpmuxSendBatch and SentMessageLine tests now assert one entry per send, in order. The batch-send gallery drops the group looks.

Nothing else is removed: the sent-message card itself (recipient chip, chevron, status, Copy) is unchanged.

Takes back #27864: intentionally removes the collapsed message-group UI so every sent message renders separately, as Leo requested.
Takes back #29244: intentionally removes the obsolete MessageGroupRow styles because the group row is deleted by this change.

Also in this PR, Leo 2026-10-31, on a sent row over an inbox row:

WHY IS THIS ONCE AGAIN F***ING MISALIGNED

YOU GUYS CANNOT F***ING MISALIGN THINGS

Every transcript meta row (tool row, sent message, received message, inbox notice, background task, sub-session card) now uses one icon column (--cv-row-icon, at the row's left edge) and one icon-to-text gap (--cv-row-icon-gap). The received/inbox line and the DisclosureRow toggle drop their own start insets (8px and 4px), which pushed their icons and words right of the tool rows'. New browser test webviews/test/transcript-meta-columns-browser.test.ts renders one of each kind with the production components and holds every icon left and every label's first glyph within 0.5px, in light and dark. Red on the old CSS (received/inbox icon at 32 vs 24, sub-session at 28), green with the fix.

Tests (cmux-ci, Linux): conversation + subagents suites, transcript glyph and meta-column browser tests, lane-notice, tool-group and checkmark alignment, popup hover-reveal check: 756 pass, 0 fail.

Risk: low, webview-only; a long run of sends now takes more vertical room.

Design spec: transcript rule "sent messages are never collapsed into +N or a summary line" (leo-workspace design/transcript.md follow-up).

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

Every message an agent sends now draws as its own sent-message card in order, replacing the "Messaged N agents" / "Messaged X N times" group line that summed consecutive sends. All transcript meta rows also share one icon and text column, so received, inbox, and sent rows no longer misalign. Risk is low and webview-only; a long run of sends now takes more vertical room.

Removed message groups

  • Drops the messages group from toolGroups and the MessageGroupRow component, its three look variants, and its three localized strings.
  • SendMessage, shell acpmux send or batch, MCP batch, and sub-session send_message each stay their own message / send / subsession entry in order.
  • The sent-message card itself — recipient chip, chevron, status, Copy — is unchanged.

Aligned meta columns

  • Every meta row (tool, sent, received, inbox notice, background task, sub-session) starts its icon at the row's left edge via --cv-row-icon, with its words one --cv-row-icon-gap after it.
  • Received/inbox lines and the disclosure toggle drop their own 8px and 4px start insets.
  • A new browser test renders one of each row kind and pins every icon and first glyph within 0.5px, in light and dark.