Skip to content

feat(site): lead the benchmarks page with a scoreboard and drawn ratios - #727

Merged
Exoridus merged 5 commits into
nextfrom
site/benchmarks-scoreboard
Sep 11, 2026
Merged

feat(site): lead the benchmarks page with a scoreboard and drawn ratios#727
Exoridus merged 5 commits into
nextfrom
site/benchmarks-scoreboard

Conversation

@Exoridus

@Exoridus Exoridus commented Sep 9, 2026

Copy link
Copy Markdown
Owner

The page opened with a paragraph of generated prose and then repeated every
comparison as a wide table whose mechanism column wrapped over several lines,
so the numbers were the hardest thing on it to find. It ran to about 10500 px
at 1440 px wide, and the practices it is published under sat above the results.

What changed

  • A scoreboard leads, one line per arm: a rendering backend against one
    opponent, or one physics arm, with that pair's outcomes as a strip and as
    counts. The split is per arm and never per backend - a backend line pooled two
    different opponents into one strip and showed a mix that belonged to neither.
    Nothing is summed across lines and no line is ranked against another.
  • One table per domain, columns are the pairs and rows are archetypes, so a
    single archetype reads across both backends and every opponent on one line.
    ExoJS gets a column of its own per backend instead of being repeated inside
    every cell.
  • The ratio is drawn: a bar on a log axis with the published factor beside
    it. The axis is scaled to the widest ratio in that table, up to two decades;
    a bar past that is drawn cut and keeps its exact factor.
  • Nothing is behind a toggle. The medians, the p95 of the same window and
    the range the pooled runs observed sit under every bar, on lines that never
    wrap.
  • Methodology, reproduction and fairness move below the tables, and the
    structural evidence, the omitted rows, the WebGL1 arms and the caveats become
    collapsed asides under them.

A comparison whose runs disagreed no longer prints a verdict placeholder and a
sentence about what each run concluded. It keeps its numbers and shows the ratio
band those runs spanned, drawn without a side. That band is the one figure the
page derives rather than reads, computed from the published extremes of both
arms, so a cell the measurement could not settle still says what was measured.
It is never a verdict: it has no side, and a band straddling 1.00 is the
statement that the runs could not separate the pair.

Unchanged: every number and verdict still comes from the signed profile, nothing
is aggregated into a score or an overall winner, losses are published like wins,
rows the harness left out are listed with their reasons, and the page still
renders with no profile at all. The harness and the profile JSONs are untouched.

Layout

DocsLayout gains a wide variant: the docs shell caps itself at 1260 px for
prose, which a table page has no use for. The benchmark hues become their own
tokens - the shared semantic palette is tuned for the dark surface and washes
out under a 6 px bar on the light one.

BenchMeasurement.astro is gone; the cell composes both arms now.

Validation

site/pnpm check-ts, pnpm gates typecheck, pnpm gates lint, pnpm gates sync, pnpm gates site, git diff --check, and the browser lane the pre-push
hook selected (site:build + example smoke, 24 passed). Checked in the dev
server at 1600 px and 760 px in both themes: no body overflow, no truncated
cell, page height about 3870 px.

https://claude.ai/code/session_01Y3YY9obdzhWK7nBPby2jK5

The page opened with a paragraph of generated prose and then repeated every
comparison as a wide table whose mechanism column wrapped over several lines,
so the numbers were the hardest thing on it to find. It ran to about 10500 px
at 1440 px wide, and the practices it is published under sat above the results.

Rearrange it around the figures. A scoreboard leads with one line per arm - a
rendering backend against one opponent, or one physics arm - showing how that
pair's comparisons came out as a strip and as counts; nothing is summed across
lines, because the arms answer different questions. Under it, one table per
domain whose columns are the pairs and whose rows are archetypes, so a single
archetype reads across both backends and every opponent on one line. The ratio
is drawn as a bar on a log axis with the published factor beside it, and the
medians, the p95 of the same window and the range the pooled runs observed sit
under it on lines that never wrap. Methodology, reproduction and fairness move
below the tables.

A comparison whose runs disagreed no longer prints a verdict placeholder and a
sentence about what each run concluded. It keeps its numbers and shows the
ratio band those runs spanned, drawn without a side - the one figure the page
derives rather than reads, from the published extremes of both arms, so a cell
the measurement could not settle still says what was measured.

The docs shell caps its width for prose, which a table page has no use for, so
DocsLayout gains a wide variant. The benchmark hues become their own tokens:
the shared semantic palette is tuned for the dark surface and washes out under
a 6 px bar on the light one.

Claude-Session: https://claude.ai/code/session_01Y3YY9obdzhWK7nBPby2jK5
@Exoridus
Exoridus enabled auto-merge (squash) September 9, 2026 01:29
@codecov

codecov Bot commented Sep 9, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 137 bytes (0.0%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
site-server-esm 14.3MB 137 bytes (0.0%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: site-server-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
_astro/ExoHeader.B8nrBBs4.js (New) 28.96kB 28.96kB 100.0% 🚀
_astro/ExoHeader.DESjr-0D.js (Deleted) -28.82kB 0 bytes -100.0% 🗑️

@Exoridus
Exoridus disabled auto-merge September 9, 2026 01:35
@Exoridus
Exoridus merged commit 17702fb into next Sep 11, 2026
22 checks passed
@Exoridus
Exoridus deleted the site/benchmarks-scoreboard branch September 11, 2026 14:00
Exoridus added a commit that referenced this pull request Sep 11, 2026
…y comparison against its clock (#728)

Splits the benchmark work that accumulated on the scoreboard branch
after #727 was cut.

## Workload catalog

Runs now resolve against a published workload catalog instead of
carrying their own ad-hoc scene descriptions. A result that names a
workload the catalog does not define is rejected rather than rendered as
a comparison, so a stale result file cannot quietly claim a scenario
that no longer exists.

## Clock qualification

A shared probe measures the page's clock resolution, and every
comparison carries the clock that timed it. Where the resolution cannot
back the difference between two arms, the page withholds the comparison
instead of printing a ratio the timer never resolved. The judgement is
per run, not per page.

## New rendering arms

- Tilemaps compared across ExoJS, Pixi and Phaser on real tilemap data.
- Particles compared across the three engines, both drawing and
simulating.
- A fully-moving sprite scene and a layered fill scene, so the archetype
set covers transform churn and overdraw separately.

## Site

The benchmarks split into a rendering view and a physics view, each led
by its results rather than by the tally. Figures print to three
significant digits, and the lead profile, ratio bars and absent-arm
figures render correctly again.

Claude-Session: https://claude.ai/code/session_01UWQw3PuiCFjTVJJBY4AHQG

---------

Co-authored-by: Exoridus <github@codexo.de>
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