Repository navigation
feat(ui): lay out large matrices as compact grids with baselines and averages - #41
Merged
Merged
Conversation
…averages The matrix tab put one card per cell in a single wide row of columns, so a 3 x 2 x 2 x 3 sweep needed three screens of horizontal scrolling and every card repeated the same metadata. - Lay the axes out to fill one screen width (rows may run long), with one header level per column axis and frozen headers and row labels. - Switch between cards and compact cells automatically by grid size and screen; the reader can pin either. Compact cells open a detail card on hover: configuration, full card, every score, 95% interval, baseline comparison, and repeats. - Average repeat axes (seed, repeat, ...) by default, or any axis on demand. - Compare every cell to a baseline chosen per axis; differences are colored around 0 and faded when within noise. - Show row and column means as margin bars, and sort rows best first. - Mark completion with a ring measured against the entry's usual case count, so a one-case rerun reads as 1 of 60 instead of 100%. - Show each value's mean beside the baseline and average menus. - Align card bars across a grid row with CSS subgrid on the home and compare pages, and full-height cells in the matrix card view. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Approval required for deploying to Cloudflare Workers (Preview) for docs.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The Matrix tab put one card per cell, with the row axis that has the most values down the side and every other axis across the top. A 3 model × 2 method × 2 view × 3 window sweep became 3 rows × 12 columns, about 3,200 px wide: three screens of horizontal scrolling, and the row labels scrolled away. Every card repeated the same date, case count, and "completed 100.0%". Column labels repeated
method decide · view lookahead3 ·across every column.It also hid a misleading cell: one cell's newest run re-ran a single case, so it showed 100.0% beside cells of 60 cases.
Result
Comparison:
43922ab(main) →2f37778(head ofnekomeowww/feat/matrix-compact). One commit.Layout: the axes fill one screen width, and rows may run long. Each column axis gets its own header level, and outer values span their inner ones. The header and row labels stay frozen. The 3 × 2 × 2 × 3 sweep is now 6 × 6, and it fits without scrolling.
Two cell views, picked automatically:
The reader can pin either one; the pick is remembered. Hovering a compact cell opens a detail card with:
Average: repeat axes (
seed,repeat,trial, …) are pooled into one cell by default. The reader can average any other axis too. The menu shows a dot per value on a shared scale, and the gap between the highest and lowest value. So the reader sees what averaging would hide before picking it.Baseline: the reader can pick a value for any number of axes (
method = text, optionallyview = online, …). Each cell then shows its difference from the cell that has those values and its own values on the other axes. Differences are colored around 0 (score hue up, teal down), and faded when they are within noise. The menu shows each value's mean.Margins and sorting: row and column means appear as margin bars, square at the baseline end. "Best first" sorts outer groups, then rows, by their mean.
Completion ring:
CountsBarstate colors and shows how many cases have a result out of the entry's usual case count. So the one-case rerun reads as 1 of 60, not 100 %.Aligned bars: the bars of the project and compare cards line up across a grid row. A new
subgridoption onScoreCardmakes each card span two rows of its parent grid, panel and tray. Matrix cards fill their table row.No hairlines: groups are set apart by space and tinted header bands, not 1px borders.
How it works
client/src/matrixGrid.ts• varying vs shared axes (
matrixAxes)• the layout choice (
chooseLayout): among the splits that fit, the one nearest 1.2 rows per column, narrower on ties• building the grid with averaged pools (
buildGrid)• cell progress against the typical case count
• standard errors from the case scores
• per-axis baselines (
compareToBaseline)• row sorting
• per-value means (
axisMeans)MatrixView.vueMatrixTableper entry.MatrixTable.vueMatrixHeatCell.vue/MatrixCellDetail.vueHoverCard+AnimatedContent+floating).MatrixCellCard.vueCompletionRing.vue/MarginBar.vueScoreCard.vue/HeadlineScore.vuecornerslot,hideCompletion, andsubgrid.The significance test treats two cells as independent samples (z test on standard errors). Cells of one entry usually ran the same cases, where a paired test would be much tighter. That needs case identities, which
GET /api/matrixdoes not send. This is marked with aNOTICEindiffers.CLI changes
No CLI changes.
Report file and viewer API changes
No report file or viewer API changes. Only
packages/ui/clientchanged. The server,@vieval/ui/contract, and the report files are untouched. No new dependencies.Validation
At
2f37778:pnpm typecheckpasses.pnpm lintshows only the two warnings already onmain.vitest.client.config.ts, browser mode), including 14 newmatrixGridtests. The one-case-rerun regression test carries aROOT CAUSEnote.vitest.server.config.ts).reply-parent-llm):windowFollow-up
GET /api/matrixtens of MB), and send paired statistics keyed by case id.caseCount: 1).🤖 Generated with Claude Code