dashboard: status pill vocabulary — Planning · Executing · Waiting · Reviewing · Done · Error · Abandoned (with reason hover) #963

Closed
opened 2026-05-08 12:14:54 +00:00 by claude-desktop · 2 comments
Collaborator

User story

As an operator I want a single status vocabulary used everywhere a task / agent has a state — board card, drawer, monitor row, history list — that distinguishes "Waiting on permission" from "Executing" and surfaces the reason on hover, so I can triage stalls at a glance.

Context

Today stalled tasks all show "running" regardless of cause. Cursor 3, Devin, and the Claude Code Agent Monitor all separate "Waiting" from "Executing" — and operators uniformly cite this as the single biggest legibility win.

Acceptance criteria

  • TaskUiStatus type in @claude-hooks/shared: "planning" | "executing" | "waiting" | "reviewing" | "done" | "error" | "abandoned".
  • Server derives ui_status from existing task_history.status + the latest system event subtype + outstanding approval gates. New SSE events (e.g. cursor_status_* from #950, future approval-requested) feed in.
  • <StatusPill status reason> component: lucide icon + label + optional pulsing dot for executing. On hover, render reason ("Awaiting approval to write .env", "blocked on dependency #834", "compaction in progress").
  • Mounted on: planner board card, monitor row, drawer header, agent timeline header, history list, agent kanban.
  • Honour prefers-reduced-motion (no pulse).
  • Snapshot tests covering each status.

Out of scope

  • The approval gate itself (separate inline-approval ticket).
  • Filtering the board by status (filter-bar ticket).

Dependencies

  • Depends on #950system events for status transitions need to be surfaced before the UI can read ui_status.

References

## User story As an operator I want a single status vocabulary used everywhere a task / agent has a state — board card, drawer, monitor row, history list — that distinguishes "Waiting on permission" from "Executing" and surfaces the reason on hover, so I can triage stalls at a glance. ## Context Today stalled tasks all show "running" regardless of cause. Cursor 3, Devin, and the Claude Code Agent Monitor all separate "Waiting" from "Executing" — and operators uniformly cite this as the single biggest legibility win. ## Acceptance criteria - [ ] `TaskUiStatus` type in `@claude-hooks/shared`: `"planning" | "executing" | "waiting" | "reviewing" | "done" | "error" | "abandoned"`. - [ ] Server derives `ui_status` from existing `task_history.status` + the latest `system` event subtype + outstanding approval gates. New SSE events (e.g. `cursor_status_*` from #950, future `approval-requested`) feed in. - [ ] `<StatusPill status reason>` component: lucide icon + label + optional pulsing dot for `executing`. On hover, render `reason` ("Awaiting approval to write `.env`", "blocked on dependency #834", "compaction in progress"). - [ ] Mounted on: planner board card, monitor row, drawer header, agent timeline header, history list, agent kanban. - [ ] Honour `prefers-reduced-motion` (no pulse). - [ ] Snapshot tests covering each status. ## Out of scope - The approval gate itself (separate inline-approval ticket). - Filtering the board by status (filter-bar ticket). ## Dependencies - Depends on #950 — `system` events for status transitions need to be surfaced before the UI can read `ui_status`. ## References - Parent: #950 - Claude Code Agent Monitor "Waiting" column: https://github.com/hoangsonww/Claude-Code-Agent-Monitor
Collaborator

🤖 Auto-assigned to dev (heuristic: area:dashboard + body 1749 bytes (≤ 2 KB) — code role). Reply /unassign to reroute.

🤖 Auto-assigned to **dev** (heuristic: area:dashboard + body 1749 bytes (≤ 2 KB) — code role). Reply `/unassign` to reroute.
Collaborator

🧹 janitor: closing — PR#981 was merged with a Closes #963 keyword but this issue was not auto-closed.

🧹 janitor: closing — PR#981 was merged with a `Closes #963` keyword but this issue was not auto-closed.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
charles/claude-hooks#963
No description provided.