Greenfield — zero dashboards/metrics today and no charting dependency.
Scope:
issue.created_at/completed_at/updated_at + issue_event (activity log) already exist, enough for cycle time/throughput. Missing: a state-transition history with timestamps for proper per-status lead time — add if not derivable from issue_event.package.json yet) + dashboard routes.Reporting reads from the mirror; respects RBAC (who can see workspace analytics).
Verified — partially delivered, keeping open.
Shipped & live: a DORA dashboard — deployment frequency, lead time for changes, change-failure-rate (bug/regression-within-7d proxy), time-to-restore — at /analytics (sidebar-linked), backed by lib/sql/analytics.ts getDora and AnalyticsCharts (recharts).
Remaining (→ child issue): the core issue-delivery metrics — throughput, cycle/lead time per status, churn, status aging, burndown — plus the state-transition-history decision (issue_event kind='status' exists but there's no dedicated history table for accurate per-status timing). Set to In Progress.
Closing the epic — fully delivered. DORA dashboard shipped earlier, and the issue-delivery analytics (throughput, cycle time, status aging, churn, sprint burndown) landed under PAR-212 (Done). No remaining scope.
DORA dashboard shipped to develop (tesks-ui
73287eb) — members-only Analytics page (recharts):lib/sql/analytics(parameterised aggregate SQL over release/issue/issue_event/labels),AnalyticsChartsclient component, sidebar nav link, recharts dep. typecheck + vitest + next build green; no Java backend change (reads the mirror).Possible follow-ups (not in this vertical): throughput + created→completed cycle-time distribution + churn; per-team/per-workspace rollups (these also feed the billing-reporting in PAR-193); and a real incident/hotfix entity to make CFR + MTTR exact rather than proxied.