Skip to content

share: rank ranges, pages per pair and cut outputs on the board card - #92

Open
davanstrien wants to merge 8 commits into
mainfrom
feat/board-rank-ranges
Open

davanstrien wants to merge 8 commits into
mainfrom
feat/board-rank-ranges

Conversation

@davanstrien

@davanstrien davanstrien commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

Why

The board card told readers that two models with overlapping 95% intervals are not clearly separated. On boards of three or more models that test is stricter than its 95% label: in simulations it called equally good models apart about 1% of the time. Testing the difference between two ratings directly, on the same resampled pages, separated 4 to 16 points more of the pairs that do differ. On a two-model board the two tests gave the same answer.

The card also did not say how many pages each pair rests on, or how often the judge read a cut output.

What this changes

Rank range (elo.py, share.py)

  • compute_elo keeps the bootstrap replicates long enough to test each pair's rating difference on the same resamples. Each ranked model gets a rank range: first rank = 1 + the number of models that test clearly above it, last rank = n − the number that test clearly below. Leaderboard.rank_range holds it.
  • "Clearly above" means the 95% percentile interval of the paired difference is above zero.
  • A model on fewer than 20 pages is not tested against any model, which can only widen the ranges. A board with fewer than two models on 20 pages has no rank ranges, and there are none from fewer than 100 resamples.
  • The range is widened, if needed, to include the model's rank in the table.
  • The published intervals do not change: the same resamples produce them, with the same index arithmetic.
  • The adaptive stopping rule and the 10-page minimum for a slice board are not changed.

Card (share.py)

  • A "Rank range" column, and a paragraph that says how to read it and what it does not say. Each sentence is a definition, something that always follows from it (a range of one rank means the model tested clearly apart from every other ranked model; an untested model can only widen a range), or a measurement named as one ("in simulations, 4 to 7 in 100 pairs of equally good models tested apart by chance").
  • "Pages per pair": the smallest and largest number of pages a pair was compared on, the reasons a pair is not compared on a page, and the number of pairs never compared with each other. For results from a version that did not record --min-chars, the card says that the rules for leaving a pair out are not recorded.
  • Cut outputs: per model, the number of pages where the judge's copy of its output was cut at the text cap. For rows stored without the truncation flags the card says the count is not recorded.
  • The link to the judge prompts uses the version that judged, when the metadata records it (judge: fix the display order of each comparison per page and pair #91).

New columns: rank_low, rank_high, truncated_pages in overall.jsonl; rank_low, rank_high in slices.jsonl. New board.json keys: pair_pages_min, pair_pages_max, pairs_never_compared, judged_with_version.

What the rank range does and does not say

Two reviewers simulated it independently (Bradley-Terry data with and without page effects; 3, 9 and 20 models; 10 to 300 pages; 300 to 400 boards per cell). Their numbers agree within 1.5 points.

Property Result
A model's true rank is outside its range at most 1.7% of models at 30 pages, at most 0.6% at 100 or more
Equally good pair called apart (each test is set to 5%) 6.3–7.4% at 20 pages, 5.7–6.9% at 30, 4.8–5.9% at 300; 4.3–4.7% on two-model boards; 8.4–9.9% at 10 pages, which is why the gate is 20
Unequal pairs separated (boards of 3 or more models) the paired test is 4 to 16 points above "intervals do not overlap" in every cell
Wrong-direction calls at most 0.8% of pairs

Limits:

  • A range wider than one rank does not always show which models it is apart from. Two models with overlapping ranges can be clearly apart. The card says so.
  • Two ranges that do not overlap do not prove that the pair is apart. "Clearly above" is not transitive: reviewers built boards where A is clearly above C and D, C and D are clearly above B, and A against B fails its own test. It did not occur in 18,894 non-overlapping pairs on 4,200 random boards. The card makes no claim either way.
  • Each pair is tested on its own. In simulations, on a board of 9 equally good models, more than half of the boards had at least one pair that tested apart by chance. The card gives the per-pair rate.

Tests

  • 59 new test cases; full suite 1112 passed; ruff, ty and rumdl pass.
  • Rank range: clear separation, an unseparated pair, pairing (the same data with unpaired resamples does not separate), the level, exact twins, the 20-page gate on both models of a pair, a board where no pair can be tested, the replicate floor, the fitted-rank clamp alone and together with the gate, the non-transitive board, and "a range of one rank means apart from every other model" on random boards.
  • Card: rows compared with compute_elo(...).rank_range, rendered cells, slice boards (including one too small for any pair), failed models, pages per pair in both storage orders, pairs never compared, cut outputs known and not recorded, the --min-chars wording for each case, the version filter, a test that compares the rank-range paragraph word for word, and a test that keeps the withdrawn sentences off the card.
  • Reviewers ran 37 mutants in round 2 and 37 in round 3; the survivors of each round now have tests.

Review before this PR

Four rounds, each by Codex and by an independent agent. No round found a defect in the computation after round 1; rounds 2 to 4 were about sentences.

  • Round 1 (first commit): the card's first wording misread a range as a list of unseparated models; the refactor changed the percentile arithmetic at non-default levels; rows without truncation flags showed as zero cut pages; the test was too eager on few pages; the tests passed with an unpaired implementation.
  • Round 2: the reading rule "ranges that do not overlap are clearly apart" is false in rare cases; the card gave the wrong reason for the paired test; a 12-page slice showed a full range in every row; "each pair" was false with pairs never compared.
  • Round 3: four more sentences were true for typical boards and false for some board. The paragraph was rewritten to hold only definitions, what follows from them, and measurements named as such.
  • Round 4: both reviewers judged the paragraph sentence by sentence. Codex found all ten true, with "ranked models" to be said where a FAILED model is in the table. The agent found nine true and one false on a two-model board ("two ranges do not decide a pair"), now reworded. It confirmed 0 failures of "a range of one rank means apart from every other ranked model" in 1,772 one-rank ranges, and 0 narrowed ranges in 92,963 comparisons for "can only widen". The remaining points were drift in docstrings, the CHANGELOG and the agent skill, all applied.

The changes after round 4 are wording only. The rank-range paragraph is one constant, and a test compares it word for word.

Not in this PR

  • _check_value accepts an allow-listed string in a numeric column. This is an existing pattern in the privacy check, not new here.
  • A published list of the pairwise results (which would let a reader see which pairs are apart).

🤖 Generated with Claude Code

davanstrien and others added 8 commits November 10, 2026 15:09
The card told readers that two models with overlapping 95% intervals are
not clearly separated. That test is too strict: both ratings come from
the same resampled pages and move together, so the difference between
two ratings varies less than the two intervals suggest.

compute_elo now keeps the bootstrap replicates long enough to test each
pair's rating difference, and gives every model the best and worst rank
it could hold (Leaderboard.rank_range). The intervals are unchanged: the
same resamples produce them.

The card and the board files also give:
- the smallest and largest number of pages a pair was compared on, and
  why a pair is not compared on a page;
- per model, the number of pages where its output was longer than the
  judge's text cap;
- the link to the judge prompts at the version that judged, when the
  results metadata records it.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Card and method:
- The card defines a rank range by the number of models clearly above
  and below. It no longer says that a range names the models a model is
  not separated from, or that it is the better guide for a pair. It
  gives the reading rule (ranges that do not overlap: clearly apart;
  ranges that overlap: no statement) and says that about 1 pair in 20
  of equally good models is called apart by chance.
- A model needs 20 pages to be called apart from another (the paired
  percentile test is anti-conservative below that), and there are no
  rank ranges from fewer than 100 resamples.
- The percentile index arithmetic is the same as before the bootstrap
  was split, so intervals at every level are unchanged.

Card facts:
- Cut-output counts are "not recorded" for rows stored without the
  truncation flags, where a count of zero would be false.
  load_existing_comparisons keeps None for those rows.
- The pages-per-pair line follows --min-chars (with 0, two empty outputs
  are compared) and counts the pairs that were never compared.
- The judge-time version in the prompt link must be three plain ASCII
  numbers.

Tests for pairing, level, exact twins, the fitted-rank clamp, the page
gate, pair normalisation, and rows compared with compute_elo.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
- The card no longer says that two models whose ranges do not overlap
  are clearly apart. A reviewer built resamples where A is clearly above
  C and D, C and D are clearly above B, and the pair A and B still fails
  its own test. The card states what is always true: a range of one rank
  means the model is clearly apart from every other model, and a wider
  range does not decide a pair. That construction is a regression test.
- The card, CHANGELOG and docstring say that a range always includes the
  model's own rank, and call 5% the level of each test, not the rate of
  chance separations (which is higher on few pages).
- Pages per pair: with pairs that were never compared, the counts are
  for "each pair that was compared". When the results do not record
  --min-chars, the card says so and does not state that short pairs
  were left out.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
…view

- The reason two models with overlapping intervals can be clearly apart
  is that the difference between two ratings varies less than their two
  intervals added together. Ratings on one board do not, in general,
  move together: after centring their mean correlation is -1/(n-1).
- A board with fewer than two models on 20 pages has no rank ranges. A
  full range in every row of a 12-page slice read as a result.
- Each model under the page gate adds one rank to every other range.
- Pages per pair: with pairs never compared, the counts are for the
  pairs that were compared. A judge call with no valid answer is a
  fourth reason for a missing comparison.
- The cut-output note says that the cap applies to the flattened text
  in the default mode.
- The agent skill keeps the rule for judge output (overlapping intervals
  are not a difference) and points to the rank ranges for a stronger
  test.
- Tests pin the 20-page gate on both models of a pair, the 95% level,
  the replicate floor and the one-page pair.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Three review rounds each found a sentence in the card's rank-range
paragraph that is true for typical boards and false for some board. The
paragraph now holds statements of three kinds only:

- definitions (how a range is counted, and that it is widened to include
  the model's own rank);
- what always follows (a range of one rank means the model tested
  clearly apart from every other model; an untested model can only widen
  a range);
- measurements, named as such (in simulations, 5 to 7 in 100 pairs of
  equally good models tested apart by chance on 20 pages or more).

Withdrawn: "at least 1 pair in 20" (identical models never test apart),
"varies less than their two intervals added together" (not for every
set of resamples), "each such model adds one rank" (not after the range
is widened to the fitted rank), and the note that the text cap applies
after HTML is flattened (older results do not record the text mode).
A test keeps these sentences off the card.

Also: "1 page", and "N pairs of models had no direct comparison".

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016isSPrQfEr21vMuVwsfJxz
… third review

- Results that do not record --min-chars come from a version that also
  left pairs out by other rules (an error message was judged as text; a
  pair with one empty output was skipped). For those the card says that
  the rules are not recorded, and names none.
- The rate of chance separations on the card is "4 to 7 in 100 pairs, in
  simulations": boards of two models gave 4.3 to 4.7.
- README and the agent skill say what a rank range is without claiming
  that it decides a pair.
- "1 character"; no "each" when the page counts differ.
- Tests: the page gate printed on the card is 20; no invented number
  when the text cap is not recorded.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016isSPrQfEr21vMuVwsfJxz
From the fourth review. No change to the computation.

- Card: "pairs of ranked models" and "every other ranked model" (a
  FAILED model is in the table and is not tested). Two models with no
  direct comparison get their ratings, not their order, from comparisons
  with other models: equal ratings are ordered by name. A pair is left
  out when one output is an error marker such as [OCR ERROR], not for
  any text that reads like an error. When --min-chars is not recorded
  the card says so without stating how old the results are.
- Docstrings: a wider range does not say how many models tested apart
  once it is widened to the fitted rank; two models are never called
  apart when their ratings are equal in every replicate (the same
  output is not enough: the judge can treat it differently against a
  third model); the example of two ranges that do not decide a pair
  needs four models.
- CHANGELOG and docstring no longer infer that a large board is likely
  to hold a pair that tests apart by chance.
- README and the agent skill: a board can show a rank range for each
  ranked model; fewer pages do not always mean failed outputs.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016isSPrQfEr21vMuVwsfJxz
…y a test

From the second reviewer of the fourth round. No change to the
computation.

- "Two ranges do not decide a pair" was false on a two-model board,
  where ranges 1 and 2 decide the only pair, and wherever one of the two
  ranges is one rank. The card says that two ranges that are both wider
  than one rank do not always decide a pair.
- The pages-per-pair line says "ranked models": a FAILED model is in the
  table and was compared on no page.
- The cut-output note speaks of the judge's copy of an output. In the
  default text mode HTML is flattened before the cap, so an output
  longer than the cap can reach the judge whole.
- The rank-range paragraph is one constant, and a test compares it word
  for word: mutants that changed a number or dropped a "not" survived
  the substring checks.
- Docstrings and CHANGELOG: "rank range", not "the best and worst rank a
  model could hold"; the two rules agree on a two-model board.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016isSPrQfEr21vMuVwsfJxz

This branch has not been deployed

No deployments
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