add a2ui message rendering #5838
Merged
Claude / Claude Code Review
completed
May 19, 2026 in 28m 47s
Code review found 3 potential issues
Found 3 candidates, confirmed 3. See review comments for details.
Details
| Severity | Count |
|---|---|
| 🔴 Important | 0 |
| 🟡 Nit | 2 |
| 🟣 Pre-existing | 0 |
| Severity | File:Line | Issue |
|---|---|---|
| 🟡 Nit | packages/app/ui/components/ChatMessage/StaticChatMessage.tsx:110-119 |
A2UI button in DM thread view posts as thread reply, not top-level message |
| 🟡 Nit | packages/app/ui/components/PostContent/BlockRenderer.tsx:702 |
a2ui null renderer leaves empty padded wrapper in non-chat consumers |
Annotations
Check warning on line 119 in packages/app/ui/components/ChatMessage/StaticChatMessage.tsx
claude / Claude Code Review
A2UI button in DM thread view posts as thread reply, not top-level message
When a user opens the thread view of an A2UI card in a DM and taps a button, `handleA2UIAction` passes `replyToPostId: null` to express "send at channel root", but the surrounding `DraftInputContextProvider` is the thread composer (PostScreenView.tsx:798) whose `sendFromThreadComposer` (PostScreenView.tsx:735) unconditionally overrides `draft.replyToPostId = parentPost.id`. The action text lands as a thread reply instead of a top-level DM message, so a bot listening to channel-root events never
Check warning on line 702 in packages/app/ui/components/PostContent/BlockRenderer.tsx
claude / Claude Code Review
a2ui null renderer leaves empty padded wrapper in non-chat consumers
After the `restrict a2ui rendering paths` commit registered `a2ui: () => null` as the default renderer at BlockRenderer.tsx:702, the wrapping `BlockWrapper` still renders unconditionally with its default `padding: '$l'` — leaving a visible ~32px empty padded box wherever an a2ui-bearing post surfaces outside chat. ChatReferenceContent (ContentReference.tsx:215) is the most realistic trigger: quote-referencing a DM message with an a2ui blob into a group channel renders the empty wrapper inside th
Loading