fix(agent-pane): flatten inbox deliveries in waiting messages

Merged
TE
4d ago
+1019-50

Leo, 2026-10-31:

WTF IS THIS F***ING RENDERING

Inbox notices in the waiting-message strip now render as one flat run of received-message rows. Each delivery shows its sender lane and its own first line; the harness preamble and (thread …) suffix stay out of the transcript. A delivery already present as its normal message is shown once, and the structured inbox_notice form follows the same path, so an inbox group cannot nest inside the waiting group.

The parser handles raw inbox text and structured inbox rows, preserving multiline deliveries and previews. The display path skips lane-notice batching for an inbox run, updates row height and Find data for the synthetic rows, and counts the visible senders. Tests cover the screenshot-shaped notice, duplicate delivery, wrapper stripping, structured inbox rows, no-preview threads, completed notices, and the no-nested-group invariant.

This follows #28751's inbox notice model and lands after #29800. Risk: normal, webview transcript rendering only.

Design spec: leo-workspace/design/chat-transcript.md — inbox deliveries use the received-message grammar, stay flat in the waiting strip, and never repeat the harness wrapper.

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

Inbox notices in the waiting-message strip now expand into one flat run of received-message rows, each showing its sender lane and its own first line. The harness preamble and (thread …) suffix no longer appear in the transcript or in the parsed notice body, and a delivery already present as its normal message is shown only once.

  • The notice wrapper's Send now/Dismiss controls survive dedupe on the first retained delivery, and structured inbox_notice rows follow the same flat path, so an inbox group cannot nest inside the waiting group.
  • A delivered multi-message notice keeps one quiet fold with flat children; projectInboxRows reuses the unchanged turn prefix on incremental updates and keys its projection caches by source row identity.
  • The gallery fixtures and play steps follow the flat delivery rows.
  • Dedup matches deliveries by prompt id or body.

Migration: none. This is a webview transcript rendering change only.