Skip to content

feat(ui): score matrix cells over one case set, fold old configurations, and lay score cards on a tray - #33

Merged
nekomeowww merged 3 commits into
mainfrom
nekomeowww/feat/matrix-case-sets
Oct 20, 2026
Merged

nekomeowww merged 3 commits into
mainfrom
nekomeowww/feat/matrix-case-sets

Conversation

@nekomeowww

Copy link
Copy Markdown
Contributor

Why

Reading AIRI tts-speech-formula in the 0.8 viewer still misled:

  • The home cards showed the best exact score of any run, so a 3-case smoke run at 100% hid the newest full run at 94%.
  • A matrix run counted as full when it settled every case it planned. A 5-case smoke run replaced a 67-case result (apple-speech · official: 0.0% ↓65.7), and deltas compared runs over different cases. One entry (en) also ran a second 120-case set (mb-*), so "largest run = dataset" is wrong too.
  • Columns from configurations the project moved away from (an asr axis dropped, a judge axis added) sat beside current ones as asr — · judge —.
  • In a scored eval every case passes, so the case bar was all green next to a 50% score.
  • The sequential ramp was a fixed navy, foreign to the orange theme.

What changes

Matrix

  • CaseNode.identity: a case's identity across runs, resolved like vieval report compare (benchmark.case.id, then vieval.case.id, then the case name).
  • Coverage compares runs by case sets. The headline is the newest run that settled every case it planned, over cases no other run covers a strict superset of. Other settled runs are other: kept in the history as rings, never the headline or a baseline. MatrixCell.caseCount is the headline's case count.
  • MatrixCell.superseded: a newer run ran the same entry and run row with other eval values. Columns with only superseded cells fold behind "Show N older configurations"; shown ones are dimmed.
  • Axes every column shares move above the table; columns name only the axes they have and differ in.
  • Scored cells (no failed case) show ScoreBar (from latest.caseScores) instead of the case-state bar, without a passed badge. Cells show their case count.

Cards and color

  • Home: project cards show the newest run's exact score (— without one).
  • ScoreCard is a white panel on a gray tray (anatomy of airi's IconStatusItem), matrix values on the tray; compact for matrix cells.
  • --seq-* follows the theme hue, light to mid tone (92% → 58% OKLCH lightness), staying in sRGB so a deep orange never clips to red.

Known limits

  • Superseded is decided per entry × run row; a run-axis change (a new run axis) still leaves the old row in place.
  • Runs without benchmark.case.id / vieval.case.id fall back to the case name, which only aligns when names are stable.

Testing

  • pnpm typecheck, pnpm lint (only existing warnings outside this change), pnpm exec vitest run packages/ui (187 passed).
  • New tests in src/server/compare.test.ts: settled runs over some cases are other; a second case set under one entry; superseded cells.
  • Checked in the viewer against the AIRI tts-speech-formula reports, light and dark.

🤖 Generated with Claude Code

…ns, and lay score cards on a tray

- Matrix coverage compares runs by their cases (`CaseNode.identity`: the
  `benchmark.case.id` metric, else `vieval.case.id`, else the case name).
  A settled run over other cases (smoke or limited run, another case set
  under the same entry) is `other`: kept in the history, never the
  headline or a baseline.
- Cells of a configuration newer runs moved away from are `superseded`;
  their columns fold behind "Show N older configurations".
- Scored cells show how the scores spread (`ScoreBar`) instead of an
  all-green case bar; shared axes move above the table, and columns name
  only the axes they differ in.
- Project cards show the newest run's score instead of the best of all
  runs.
- ScoreCard is a white panel on a gray tray, with the matrix values on
  the tray; the sequential ramp follows the theme hue.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Approval required for deploying to Cloudflare Workers (Preview) for docs.

Name Link
Waiting for approval For maintainers, approve here

nekomeowww and others added 2 commits October 20, 2026 17:52
The concurrency tests waited ~300 ms (waitForExpectation) or 200 ms for
the first case to start, less than loading the config and transpiling
the eval files takes on a busy CI runner. Wait with vi.waitFor and a
shared 3 s timeout instead; it still returns as soon as the expectation
holds.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The previous commit attached RUN_STATE_WAIT to runVievalCli in the
concurrency-cases-from-inputs test instead of to a waitFor, which broke
the typecheck.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@nekomeowww
nekomeowww merged commit dd17321 into main Oct 20, 2026
5 checks passed
@nekomeowww
nekomeowww deleted the nekomeowww/feat/matrix-case-sets branch October 20, 2026 10:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant