feat(web): add <ErrorBanner> to unify error display across event log, transcript, and header #1168

Closed
opened 2026-05-14 22:05:20 +00:00 by claude-desktop · 1 comment
Collaborator

As a dashboard operator, I want error states rendered the same way in the event timeline, the planner transcript, and the task detail header, so that I immediately recognize an error regardless of which surface I'm looking at.

Acceptance criteria

Component

  • <ErrorBanner message={string} retryable={boolean} onRetry={() => void} /> in components/error-banner.tsx
  • Styling: red-tinted background, AlertCircle icon (matches StatusPill error state)
  • retryable={false}: retry button hidden
  • retryable={true}: "Retry" button visible, triggers onRetry callback
  • Error message text is user-selectable (copyable)

Adoption

  • event-log.tsx error event rows use <ErrorBanner retryable={false}>
  • planner/transcript.tsx stream error replaced with <ErrorBanner retryable={true} onRetry={...}>
  • task-detail.tsx header shows <ErrorBanner> when task.status === "failure" (currently shows nothing in header)

Quality

  • just qa passes

Out of scope

  • Automatic retry logic (component only surfaces the callback)
  • Error categorization (transient vs. permanent)
  • Error reporting / telemetry

References

  • agent-output-unification audit 2026-05-15
  • Inconsistency: "Error State Handling" (MEDIUM)
As a dashboard operator, I want error states rendered the same way in the event timeline, the planner transcript, and the task detail header, so that I immediately recognize an error regardless of which surface I'm looking at. ### Acceptance criteria #### Component - [ ] `<ErrorBanner message={string} retryable={boolean} onRetry={() => void} />` in `components/error-banner.tsx` - [ ] Styling: red-tinted background, `AlertCircle` icon (matches `StatusPill` error state) - [ ] `retryable={false}`: retry button hidden - [ ] `retryable={true}`: "Retry" button visible, triggers `onRetry` callback - [ ] Error message text is user-selectable (copyable) #### Adoption - [ ] `event-log.tsx` error event rows use `<ErrorBanner retryable={false}>` - [ ] `planner/transcript.tsx` stream error replaced with `<ErrorBanner retryable={true} onRetry={...}>` - [ ] `task-detail.tsx` header shows `<ErrorBanner>` when `task.status === "failure"` (currently shows nothing in header) #### Quality - [ ] `just qa` passes ### Out of scope - Automatic retry logic (component only surfaces the callback) - Error categorization (transient vs. permanent) - Error reporting / telemetry ### References - agent-output-unification audit 2026-05-15 - Inconsistency: "Error State Handling" (MEDIUM)
Collaborator

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

🤖 Auto-assigned to **dev** (heuristic: area:dashboard + body 1279 bytes (≤ 2 KB) — code role). Reply `/unassign` to reroute.
dev closed this issue 2026-05-15 07:13:05 +00:00
Sign in to join this conversation.
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/agent-hooks#1168
No description provided.