Eval — Interactive Dashboard
Single-file offline UI over eval/store.sqlite + eval/golden/. No backend, no build step. Chart.js loads from a CDN, but everything else works over file://.
How to invoke
make eval-dashboard # regenerate dashboard/data.js
make eval-dashboard OPEN=1 # also open in default browser
make eval-dashboard DASHBOARD_JUDGE=claude-haiku-4-5-20251001 # filter rows
Direct invocation:
python3 eval/export_dashboard.py --judge claude-haiku-4-5-20251001 --open
Behavior
- Pull rows from
eval/store.sqlite(latest-per-date wins). - Join each row with its corresponding
eval/golden/<date>.jsonbaseline. - Compute summary stats: composite min/max/median/mean, axis medians, drift z-score, gate-fail count, regression count.
- Serialize to
eval/dashboard/data.jsaswindow.EVAL_DATA = {...}. - Optionally launch the default browser pointing at
eval/dashboard/index.htmlviafile://.
Panels rendered
| Panel | Visualization |
|---|---|
| Stat cards | Composite median + mean, drift status, gate fails, regressions |
| Composite trend | Line chart with baseline overlay + dashed 3.0 gate threshold |
| Axis radar | 5-axis median across all cards |
| Composite histogram | Buckets < 2.5 → ≥ 4.5 |
| Per-card stacked bars | Each card's weighted axis contributions |
| Per-card table | Sortable, filterable (All / Below gate / Regressed / Composite ≥ 4), live search |
What to tell the user
After running, tell them the dashboard path (eval/dashboard/index.html) and how many cards / goldens loaded. If OPEN=1 was not passed, give them the open command for their platform (open on macOS, xdg-open on Linux, start on Windows). Mention the dashboard is regenerated from the store — they should re-run this after any make eval-backfill to refresh visualizations.