Faint line = each timed run's total. Dashed = average duration per version window; the badge is the within-window trend (▲ slower / ▼ faster). Windows use the version saved on each run.
UI-test pass rate over time
UI-test coverage (count) over time — growth / shrink
Coverage by test suite — pass rate per suite (aggregated)
pass fail skip(shown only when a run has UI-test data)
Unit tests (vitest) — count over time (coverage growth)
Unit tests — pass rate over time
Count = how many unit tests ran (coverage); rate = share passing. Points before vitest counts were recorded are estimated from per-version test-definition counts (anchored to the measured 3.0.0 total).
Backend tests (pytest) — count over time (coverage growth)
Backend tests — pass rate over time
Count = backend tests run; rate = share passing. Points before pytest counts were recorded are estimated per version from git.
Ruff (Python lint) issues over time — lower is better
ESLint suppressions (lint debt) over time — lower is better
Lint problems per run (eslint + ruff)
Fewer issues is better (▼ green = improving). Hollow points are estimated, backfilled per version from git (ruff run at each tag; suppressions from the eslint-suppressions.json total — the file was adopted at v2.4.1 with ~147 pre-existing problems). Per-run lint problems accrue from new runs.
Step duration trends — how each step's time moves across versions
One sparkline per step; the badge is first-vs-last change (▲ slower / ▼ faster).
Overall test distribution
Results by scope
pass fail skip
Step durations — average across runs (ms)
avg duration(per step, sourced from each run's `step_durations_ms`)