6.11.6 Triage inbox UI — queue + detail + actions (paginated)
Estimate: 65m · Depends on: 6.11.1, 6.11.5
Build the admin triage inbox per the 6.11.1 design, over the 6.11.3 queue read + the 6.11.5 actions service. A paginated/infinite queue list (kind icon, title, submitter [member avatar, or avatar + a "Public" chip for a signed-in non-member], age, snippet) + a detail pane (full body, comments, attachments, attribution) + the action bar wiring Accept, Promote (the backlog / sprint / epic / story parent + position picker), Decline, Mark duplicate / Merge (the canonical-item picker), and Snooze (the time picker). It uses ONLY shipped components/ui/* primitives + --el-* / [data-display-style] tokens (no Tier-0 --color-*, no raw spacing/radius), renders the empty state ("No items to triage"), and is paginated (finding #57). The promote/merge pickers reuse the existing item-picker / parent-picker primitives.
Watch the Radix-portal-in-dialog gotcha if the promote/merge picker is a popover rendered inside a modal (gate the portal on not-in-dialog).
Acceptance criteria
- The inbox renders the queue (paginated/infinite, newest-first), the detail pane, and every action from 6.11.1, matching the design asset.
- Accept / promote / decline / merge / snooze call the 6.11.5 service and reflect the result (the item leaves the queue on a terminal action); the promote picker offers backlog / sprint / epic / story + position.
- Only
--el-*+[data-display-style]tokens + shippedcomponents/ui/*; the empty + loading + error states render; AA contrast holds for the "Public" chip + the destructive Decline. - A promoted item disappears from the queue and (verified in 6.11.9) appears in the tree.
Context refs
- 6.11.1 (design asset — required), 6.11.5 (the actions service), 6.11.3 (the queue read).
motir-core/components/ui/*+app/globals.csstoken layers; the existing item-picker / parent-picker primitives.motir-core/CLAUDE.md§ colour + shape tokens; the portal-popover-in-Radix-Dialog gotcha note.