B5 — Planner board: card-face indicators (scan in 1s) #413
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks#413
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
As an operator,
I want the card face to show stage, agent, PR state, round, stall age, and design-review status,
so that I can read board health at a glance without opening each card.
Card face today shows title + status (
running/queued/in_review/idle_assigned/unassigned) + agent. Operators flip into the issue detail to find PR state, round, and stall age. This story consolidates those signals onto the card face and adds a density toggle.Acceptance criteria
Card face layout
triage/spec/impl/review/merged) — 14 px, semantic colour fromtokens.css.draftgrey /openaccent /mergedsuccess /nonehidden); links to the PR URL on click. Pill usesrounded-pillperapps/web/CLAUDE.md.@dev,@reviewer-2); empty slot when unassigned.2h,3d);text-warningonce past the per-stage threshold fromdocs/label-routing.md,text-errorpast 2× threshold (matches B8).R3) when round > 1, anchored next to the stage icon.✓accept /✗reject) when present, between the agent avatar and the stall age.Density toggle
Density: [compact | default | detailed], persisted inlocalStorage(keyboard.density).compact— single line: stage icon + title + stall age. No agent, no PR, no badges.default— full layout above.detailed— adds last-event line ("queued 2h ago") under the agent row.Backend — extend
GET /boardresponse per cardpr_state: "draft" | "open" | "merged" | "none"(derive from existing PR-state derivation inapps/server/src/domain/views/...).round: number(default 0).stalled_for_ms: number(already known server-side frompipeline_stageevents; surface it).stage: "triage" | "spec" | "impl" | "review" | "merged"if not already on the card response.last_event_label: string | nullfor the detailed density mode (e.g."queued","running on @dev").Tests
board-card.test.tsx: renders all six face elements atdefaultdensity given a fully-populated card.board-card.test.tsx:compactdensity renders only stage / title / stall age.board-card.test.tsx: warning + error stall colour at threshold + 2× threshold./boardresponse includes the new fields with realistic values.Out of scope
References
docs/specs/board-rework.md§5 B5 + §6.docs/label-routing.md.bg-triage,text-warning,rounded-pill, etc.):apps/web/src/styles/tokens.css+apps/web/CLAUDE.md.apps/server/src/domain/views/forpr_stateorpull.state.Dependencies
Suggested first commit
feat(board): card-face indicators — stage / PR / agent / round / stall + density toggle