Error Listing — Design

Phase 1 core view: workspace-level error overview

Route & Placement

Route: /workspace/:id/error-dashboard
Sidebar: New entry under Monitor section — "Error Dashboard" with a bug/alert icon
Component: Standalone component WorkspaceErrorDashboardPageComponent
State: New NgRx feature slice errorDashboard (separate from existing errorLog)

Filter Bar

Filter Bar Layout
Container ▾
API, Function, Task, Middleware
Statement ▾
Filter by triggering statement
Status ▾
New, Ignored, Fixed

Text filter searches across error_code, error_msg, and statement_name. Container and Statement are dropdowns. Status filter added to your sketch — matches existing error log workflow.

Container Summary Cards

Summary Cards Row
+15
12,542
Task
+142
6,512
API
+12
513
Function
0
15
Middleware

Clickable — acts as a container type filter toggle. +N = 24h gain (red when > 0). Bottom number = total count. Highlighted card = active filter. Click again to deselect.

Error Table

Table Columns
past 24h error stack last seen first seen trend
input error
you can't write SQL go home
get /foo 2m ago 3d ago new
auth error
token expired
⚙ prune 5m ago 14d ago escalating
permission error
access denied to resource
... 1h ago 30d ago shrinking

Columns: 24h sparkline (from hourly_counts) · error code + message · stack context (statement or endpoint) · last seen (relative) · first seen (relative) · trend badge
Trend colors: new (first seen < 4h) · ongoing (steady) · escalating (a > 1.2) · shrinking (a < 0.8)
Sorting: P1 default = last_seen desc. P2 = smart sort by trend severity once backend regression coeff lands.
Pagination: 50 per page, matching existing patterns.
Click row → navigates to Error Detail page.

Data Flow (Phase 1)

API calls on page load:
1. GET /workspace/:id/error_signatures — paginated list with filters (existing endpoint, add container type filter)
2. GET /workspace/:id/error_signatures/stats — counts per container type (extend existing endpoint)

Frontend computation (P1):
• Trend classification from hourly_counts — linear regression on 24 hourly data points
• Sparkline rendering from same hourly_counts data

NgRx slice: New errorDashboard feature state — separate from per-object errorLog to avoid conflicts