The changes an Elo test cannot judge

Register IDs, verdicts and the gate sequence come from the public data contract: register.json and methodik.json in the snapshot of 2026-09-05, published under /daten/. What each defect was, and what the differential gate compares, is taken from the project's own decision records and is cited here as qualitative reasoning, not as measurement; those records are not part of the public export. Fingerprints are compared for equality only and never reproduced, and source paths, function names and gate artefacts are paraphrased rather than named.

Four changes entered the engine on 3 September without playing a game. What each of them addressed is the kind of defect a strength test is not built to find.

On 3 September four changes entered the engine. None of them played a game, and none of them claims to have made the engine stronger. T-0058, T-0059, T-0060 and T-0061 all took the correctness path.

A separate entry counts how much of the register works this way. This one is about the four changes themselves, and about why the obvious test would have been the wrong one.

Where the correctness path sits

The published method lists eight gates a candidate can meet, in order: G0 Build, G1 Correctness, G2 Protocol, G3 Triage, G4 SPRT, G5 Confirmation, G6 Gauntlet, G7 Simplification (methodik.json). The sequential test begins at G4. Correctness is the second gate, and a candidate that passes on the correctness path never reaches G4.

The method describes that path in one sentence: a proof of correctness uses the independent differential gate (methodik.json).

What the gate actually compares

This matters more than it sounds, because the gate is narrower than “the two behave the same”.

It runs the candidate and its predecessor over a bound corpus of positions at a fixed node budget, and compares two outputs per position: the best move, and the last score reported — including what kind of value it is and whether it sits at a search bound. Anything else the two programs do differently is outside what the gate can see. It compares limited observable outputs, not whole search trees, not all reachable positions, and not strength.

The second half is the part that gives it teeth. The set of positions where the two differ, and the answers the candidate gives there, must match the manifest exactly — and the manifest is written before the run. A correction does not merely report what changed; it declares in advance what will change, and within what it can see the gate refuses anything else: fewer differences than declared fails, more fails, different ones fail. Outside that field of view it refuses nothing, because it sees nothing.

Each of the four entries records three fingerprints for its run: the runner, the corpus, and the manifest. All four name the same runner and the same corpus, which a reader can confirm without seeing either — the four candidates were put to the same questions by the same instrument.

The four defects

T-0059, listed as K1. The rule for insufficient material could declare a draw in positions that still had mating material — king, bishop and knight against king among them. The cause was in the counting: a draw condition meant for same-coloured bishops was allowed to apply even when knights were on the board. The correction counts knights and requires their absence before that condition applies.

This is the one whose manifest is not empty. Three positions were declared in advance as the places where the candidate would answer differently, and the run confirmed those three, with the expected move and score at each. The difference was the point.

T-0058, K3. An extreme input position could drive the static evaluation past the range the search reserves for mate scores. The search treats that range as meaning something specific, so a score landing inside it broke the contract — and the observed symptom was a search that stopped after the first depth instead of continuing. The correction bounds the side-relative value to the non-mate range. Manifest empty.

T-0060, K2. Reading a position from FEN Forsyth–Edwards Notation, a one-line text description of a chess position. could accept an en-passant square that did not fit the board: the check now tests the rank appropriate to the side to move, that the target square is empty, that the enemy pawn sits behind it, and that the pawn’s origin square is empty. Implausible entries are dropped. It is meant as input hygiene rather than a preference between moves. Manifest empty.

T-0061, K7. At the top of the integer range, the half-move and full-move counters could overflow on the next increment. Signed overflow is undefined behaviour — the program’s arithmetic stops meaning what the language says it means — and it was reproduced under a tool that detects exactly that. Counters now saturate: one already at the representable maximum stays there. Manifest empty.

The register lists these as K1, K2, K3 and K7. It does not say what K4 through K6 are, or whether they are outstanding, and this entry does not guess.

What an empty manifest records

Three of the four entries report no deviations at all. That is a statement about the checked outputs and nothing more: across the bound corpus, at the fixed budget, the candidate answered every position with the same best move and the same last score as its predecessor.

It is not a statement about why. The corpus is not part of the public export, so nothing there lets a reader establish whether the conditions these repairs concern occur in it. The obvious reading — that they do not, and that this is why nothing deviated — is a reading, and the published files do not settle it.

Why games are the wrong instrument here

The gate sequence makes the division explicit. Correctness is G1 and the sequential test is G4, and a candidate that passes on the correctness path never reaches the later gate. It is worth saying what that arrangement rests on.

A sequential test with these bounds is built to resolve a difference in the rate of winning between a candidate and its predecessor; the short stage separates no gain from a gain of five nElo Normalised Elo: the Elo difference divided by the spread of the game results, so that the SPRT bounds mean the same at different time controls. (methodik.json). That is what it measures. It does not measure the delimited correctness properties these four entries claim — an overflow at the top of the integer range, an evaluation past the range reserved for mate scores, a position accepted that contradicts itself, a draw rule that miscounts. Those are different properties, and how often any of them would arise in play, or what it would cost, is not something the export carries.

What such a test would in fact have reported for any of these four is not something the register answers, and this entry does not guess. The claim is narrower: the question a strength test asks is not the question these four changes raise.

Nor did the changes go untested for it. The decision records describe three of the four defects as reproduced deliberately, by aiming at the fault instead of sampling from play — a position that stopped the search after one depth, an overflow raised by a detector built for it, a self-contradictory position accepted by the reader. Those reproductions are what the changes rest on, and they are not part of the public export. The differential gate answers a narrower question afterwards: whether the best move or the last score changed anywhere in the bound corpus beyond what the manifest declared.

What a reader cannot check

One limit worth naming. The shared runner and corpus fingerprints let a reader confirm that the four runs used the same instrument on the same positions. The manifest fingerprint does not let a reader confirm that a manifest was empty — each run has its own manifest, so all four fingerprints differ, including the three that report no deviations. For emptiness, the entry’s own wording is the source — and the same holds for the manifest having been written before the run rather than after it. Both rest on the record, not on anything the export lets a reader recompute.

What this does not say

It does not say these changes were Elo Strength difference to the opponent, estimated from the games, with a 95-percent half-width where the oracle reported one. Never an absolute rating.-neutral, and it does not say they left play unchanged. Passing the correctness gate establishes neither. What it establishes is narrower: the outputs the gate checked are consistent with the delimited correction that was claimed. The entries carry no strength estimate at all, in either direction.

It does not say the gate proves equality. It compares two outputs per position over one corpus at one node budget. A change that alters play in positions the corpus does not contain would pass it unremarked.

It does not say the correctness path is a lighter standard. It is a different question with a different instrument, and it can fail — a candidate claiming to change nothing while producing deviations would have been rejected by the manifest comparison, not excused by it.

And it does not say these four cost nothing. They needed review, a build and a gate run. The register records no games for them and puts no figure on the rest.