feat(shell): card aligns to the message column + durable pending-approvals index (card UX round 2) - #931
Merged
Merged
Conversation
…ding-approvals index (card UX round 2) Sam's two flags on the live card: 1. Alignment — the card rendered flush with the row edge, 50px left of every bubble's text (measured 372 vs 422: the .v2-msg grid's 38px avatar column + 12px gap that system rows skip). v2-msg--card gives it the content-column inset, in lockstep with the grid, and the card fills the column. 2. Findability — the card IS a message and scrolls with history, but chat messages retire under the 30-day PG retention window while ApprovalAction rows never expire, so scroll-hunting for old pending cards is unreliable BY CONSTRUCTION. New GET /api/approvals/pending (pod-visibility read gate; deciding stays owner-only in /resolve) + an inspector Overview section listing flagged approvals with inline Approve/Decline for the owner, live-refreshing on the same messageCardUpdated event that patches chat. Tests: 3 route cases (member 200 + payload shape, non-viewer 403, bad podId 400) green locally; typecheck clean both tiers; frontend jest in CI. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XeUH4HVDsDHYPsHJthXjB8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sam's two flags on the live card, both structural:
Alignment — the card rendered flush with the row edge, 50px left of every bubble's text (measured: card at x=372, message text at x=422 — the
.v2-msggrid's 38px avatar column + 12px gap that system rows skip).v2-msg--cardgives it the content-column inset in lockstep with the grid; the card fills the column, so its box matches the bubbles' box exactly.Findability — "can it be counted as a message so old unapproved ones are scrollable?" It IS a message (persists, scrolls) — but that's not durable enough: chat messages retire under the 30-day PG retention window while
ApprovalActionrows never expire, so scroll-hunting is unreliable by construction. NewGET /api/approvals/pending(pod-visibility read gate; deciding stays owner-only in/resolve) + an inspector Overview section listing flagged approvals with inline Approve/Decline for the owner, refreshing on the samemessageCardUpdatedsocket event that patches chat. An approval stays findable and actionable forever, regardless of where its card scrolled — this is also the first brick of ADR-017's attention feed.Tests: 3 route cases green locally; typecheck clean both tiers; browser check post-deploy.
🤖 Generated with Claude Code
https://claude.ai/code/session_01XeUH4HVDsDHYPsHJthXjB8