Runs T-0203 to T-0214: 11 changes, none adopted
Listen to this post24 min
Created by AI from the text of this post and read by the synthetic voice “Sulafat”; not a word-for-word version, and it may contain errors.
Loading…
Created by AI from the text of this post and read by the synthetic voice “Sulafat”; not a word-for-word version, and it may contain errors.Position and speed stay in this browser and are sent nowhere.
The recording could not be played. Open the audio file
On 24 and 25 October 2026 the oracle wrote runs T-0203 to T-0214 into its register. T-0205 was interrupted; its change went into the oracle again as T-0206. The other 11 runs each tested one change to the engine's search against the same predecessor, Coherent 0.2.24, and none was adopted: 10 failed the short stage, and T-0213 passed it and failed the long stage. In total the oracle played 292,132 games for them; the short stages alone took 36.6 hours.
This post was written at the operator's request. It explains, point by point, what each change did and why the oracle rejected it. The numbers come from the oracle register, export of 2026-10-25. Every stage was recalculated from the raw counts, and 2 independent reviewers recalculated the mathematics as well.
How the oracle decides
The new version plays the predecessor in pairs: 2 games with the same opening and colours swapped. A pair gives it 0, 0.5, 1, 1.5 or 2 points. The register counts how often each of these 5 classes occurred; this is the pentanomial Games are played in pairs with swapped colours; the five counts are the pairs scoring 0, ½, 1, 1½ and 2 points.. Divide each pair's points by 2; μ and σ are the mean and standard deviation of these pair scores.
- 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.
= −400 · log10(1/μ − 1), the familiar scale. - 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.
= (μ − 0.5)/σ · 800/(√2 · ln 10). This is the effect in units of the pair spread; it determines how many games a test needs. - Short stage: a sequential test (SPRT Sequential probability ratio test. Games are played until the accumulated evidence reaches one of two bounds; then the test stops.) between H0,
0nElo, and H1,+5nElo, withα = β = 0.05. After every pair the log-likelihood ratio LLR Log-likelihood ratio, the running evidence of an SPRT. It starts at 0; a stage passes at the upper bound and fails at the lower one. is updated. The run passes as soon as it reachesln 19 = 2.944and is rejected as soon as it falls to−2.944. It ends after at most96,000games; without a decision by then it counts as undecided and does not pass. - Long stage: a holdout stage with its own conditions, which are not published. It tests the same hypotheses with
α = 0.05andβ = 0.25; its bounds areln 15 = 2.708andln(0.25/0.95) = −1.335. A run passes only if it passes both stages.
The oracle computes the LLR exactly, following the “normalized” model of the fastchess program. For understanding, an approximation is enough; computed with the unrounded nElo, it differs from the register by less than 0.01 for all 12 stages in this post:
LLR ≈ N · (nElo − 2.5) / 12,071, with N pairs and 12,071 ≈ (800/ln 10)² / 10.
2.5 nElo is the midpoint between H0 and H1. A simple rule follows: the short stage rejects as soon as the estimate lies 71,086 / games below 2.5 nElo. After 10,000 games that means below −4.61 nElo, after 50,000 games below +1.08 nElo. The closer the estimate is to the midpoint, the longer the run takes.
The figure shows each completed stage where it stopped: just past the bound. Rejected means: the likelihood ratio of “0 nElo” to “+5 nElo” has reached 19 to 1, in the long stage 3.8 to 1. It does not mean that the change does harm. A test that stops at a bound gives biased estimates; an early stop exaggerates the distance from the midpoint. The intervals below are therefore nominal.
The runs at a glance
| Run | Where it acts | Games | Elo | nElo | LLR | Hours | Verdict |
|---|---|---|---|---|---|---|---|
T-0203 | late move reductions | 26,224 | −0.11 ± 2.08 | −0.21 ± 4.21 | −2.95 | 3.3 | rejected |
T-0204 | table cutoff | 73,526 | +0.75 ± 1.24 | +1.53 ± 2.51 | −2.97 | 9.2 | rejected |
T-0205 | late move reductions | – | – | – | – | – | interrupted |
T-0206 | late move reductions | 9,440 | −2.54 ± 3.52 | −5.05 ± 7.01 | −2.95 | 1.2 | rejected |
T-0207 | learning at node end | 11,130 | −1.94 ± 3.18 | −3.92 ± 6.45 | −2.96 | 1.4 | rejected |
T-0208 | learning at node end | 27,502 | −0.05 ± 2.03 | −0.10 ± 4.11 | −2.96 | 3.5 | rejected |
T-0209 | pruning per move | 20,120 | −0.52 ± 2.37 | −1.05 ± 4.80 | −2.96 | 2.5 | rejected |
T-0210 | learning at node end | 57,582 | +0.62 ± 1.40 | +1.26 ± 2.84 | −2.96 | 7.5 | rejected |
T-0211 | null-move probe | 8,930 | −2.72 ± 3.54 | −5.54 ± 7.21 | −2.97 | 1.1 | rejected |
T-0212 | move ordering | 3,008 | −10.51 ± 6.14 | −21.29 ± 12.42 | −2.96 | 0.4 | rejected |
T-0213 | root iteration, short stage | 47,622 | +1.66 ± 1.30 | +4.01 ± 3.12 | +2.97 | 6.0 | passed |
T-0213 | root iteration, long stage | 3,064 | −3.29 ± 4.93 | −8.20 ± 12.30 | −1.36 | – | rejected |
T-0214 | iterative deepening | 3,984 | −7.59 ± 5.31 | −15.41 ± 10.79 | −2.95 | 0.5 | rejected |
Elo and nElo with the nominal 95 % half-width, each against Coherent 0.2.24. Hours: measuring time of the short stage.
No interval reaches +5 nElo, except the short stage of T-0213; two lie wholly below zero. Estimate with nominal 95 % half-width: T-0203 -0.21, T-0204 1.53, T-0206 -5.05, T-0207 -3.92, T-0208 -0.1, T-0209 -1.05, T-0210 1.26, T-0211 -5.54, T-0212 -21.29, T-0213 short 4.01, T-0213 long -8.2, T-0214 -15.41.
Where the changes act
The search tries out moves in a tree. At the root is the position on the board. Iterative deepening searches it first 1 ply deep, then 2, then 3, until time runs out. In every node of the tree the same steps run: look up the table, probe a null move, order the moves, prune or reduce per move, learn at the end. The 11 changes are spread over all of these steps.
Point by point
T-0203: reduce shuttle moves more
What was tested. Late move reductions search moves that come late in the order at a shallower depth first. The change reduced a move by one more ply if it puts the piece that the same side moved 2 plies earlier back on that move's origin square, quietly and without check. The history that the search otherwise uses to judge moves knows only the piece and destination square of the earlier move, so it cannot tell this shuttling from a manoeuvre to the same square. The size of 1 ply was the author's choice, not tuned.
Why it was rejected. After 26,224 games the estimate was −0.21 nElo, 2.7 nElo below the midpoint and right at the bound for that number of games; the LLR fell to −2.95. The interval runs from −4.42 to +3.99: no gain and no loss shown, +5 ruled out.
T-0204: double-check the table cutoff at the stored move
What was tested. If the search finds a deep enough table entry with a score of at least beta, it ends the node at once. The change first checked the child's entry after the stored move. If the child had a lower-bound or exact entry at least as deep as the current search depth minus 1, and it said that the move stays below beta from the parent's point of view, the cutoff was skipped and the node was searched normally. This applied outside the principal variation and the exclusion search, an auxiliary search that excludes one move, for non-mate scores and a legal stored move. The author had named the risk: the check costs work, and another move can still reach beta.
Why it was rejected. The longest run: 73,526 games in 9.2 hours. The estimate of +1.53 nElo was positive but below the midpoint, and after that many games the bound lay there: LLR −2.97. The interval from −0.99 to +4.04 does not rule out a small gain, but it does rule out +5. The short stage is not built for small gains: a change with a true +1.5 nElo would pass it, in the Brownian approximation without a game limit, only about 24 % of the time.
T-0205: interrupted
On 24 October the oracle's machine was switched off and on again during this run. The register lists T-0205 as interrupted, with no stage results and no verdict. The same change was then measured as T-0206.
T-0206: late move reductions at principal-variation nodes from the second move
What was tested. The principal variation is the line of moves the search currently considers best. At its nodes, the first and also the second legal move used to be exempt from late move reductions; at all other nodes only the first. The change removed the exemption for the second move; the reduction itself was computed as before. 1 condition changed in the code.
Why it was rejected. The estimate was well below zero, so 9,440 games in 1.2 hours were enough: −5.05 nElo, LLR −2.95. The interval runs from −12.06 to +1.96.
T-0207: no ordering lessons from draw results
What was tested. At the end of a node the search learns from the best move, among other things history values, that is bonuses for it and maluses for the moves searched before it, plus killer moves and the countermove. These values later order the moves in other positions. The change skipped this learning, and also the learning for the preceding move, when the node's result was exactly a draw. The author's idea: draw results that depend on the path to the position should influence move ordering elsewhere less. As a risk the author named that useful defensive moves would then learn nothing either.
Why it was rejected. 11,130 games: −3.92 nElo, LLR −2.96. The interval runs from −10.38 to +2.53.
T-0208: history bonus weighted by how often a rank is reached
What was tested. Outside the principal variation, the history bonus for a best move used to grow with the number of legal moves the node had reached so far, up to 8, including moves pruned without search; at principal-variation nodes there was no such allowance. The change replaced it with a counted factor: at nodes outside the principal variation, the search counts how often it actually searches the first, second and so on up to the ninth move. The more rarely nodes search as many moves as this one, the larger the bonus, at most 4 times and capped by the existing upper limits; at other nodes the factor stays 1. Maluses, killers and the countermove stayed the same.
Why it was rejected. 27,502 games: −0.10 nElo, LLR −2.96. The interval runs from −4.21 to +4.00.
T-0209: history pruning removed
What was tested. At small remaining depth the engine did not search quiet moves at all whose history value lay below a negative threshold that falls further with depth. Checks and threatening moves were exempt. The change removed this pruning together with its 2 tuning parameters; all other pruning stayed. Moves that had been dropped only because of their poor history were now searched. The author had named the counter-risk: the extra search can crowd out better work in the same time.
Why it was rejected. 20,120 games: −1.05 nElo, LLR −2.96. The interval runs from −5.85 to +3.75.
T-0210: no evaluation correction from draw results
What was tested. At the end of a node the search also learns a correction to its static evaluation. The entries are keyed by pawns, pieces and moves, not by the path to the position. Draw scores from repetition and the fifty-move rule do depend on the path, though; so the score of one path could shift the correction for other paths. The change skipped this learning when the result was exactly a draw. The author had named the limit: the filter also hits genuine drawn positions such as a fortress, where the draw score would be the right information.
Why it was rejected. As with T-0204, the estimate was positive but below the midpoint: +1.26 nElo after 57,582 games in 7.5 hours, LLR −2.96. The interval runs from −1.58 to +4.10.
T-0211: null-move probe also on a lower bound from the table
What was tested. In the null-move probe the search passes a move and continues at a shallower depth. If the result still reaches at least beta, the node is cut, at great depth only after a verification search. Until now the static evaluation also had to be at least beta. The change also allowed the probe when only a lower bound from the table reached beta and the static evaluation lay below it, provided at least 2 plies remained after the reduction. With the current values this concerned nodes from depth 9. As risks the author named over-optimistic shallow table values, zugzwang and the cost of unsuccessful probes.
Why it was rejected. 8,930 games in 1.1 hours: −5.54 nElo, LLR −2.97. The interval runs from −12.75 to +1.66.
T-0212: quiet moves in a round-robin over origin squares
What was tested. Move ordering ranks the quiet moves by a score. The change reordered the rear part at nodes outside the principal variation and not in check: in each round, the best remaining move from each origin square, then the next round. The aim was that moves of different pieces come up earlier, before late moves are pruned. The front part of the list, with killers, the countermove, escapes and checks, stayed unchanged. The author had named the counter-risk: several moves of the same piece can be the better ones.
Why it was rejected. The shortest run: 3,008 games in 23 minutes, −21.29 nElo, LLR −2.96. Here the whole nominal interval lies below zero, from −33.70 to −8.87. After so early a stop the magnitude is more likely exaggerated.
T-0213: keep the null-window score when the re-search is aborted
What was tested. At the root the search first checks every later move with a null window: is it better than the best so far? If the probe says yes, the move is searched again with a full window to find its score. If time ran out during that re-search, only fully searched results used to count, and the move was ignored even though the probe had already placed it above the best so far. The change took it as the best move of the iteration in this case, with the probe's score as a lower bound. It required a complete probe at full depth; it did not use the aborted score or the incomplete line.
Why it was rejected. The short stage passed: +4.01 nElo after 47,622 games in 6.0 hours, LLR +2.97. Its interval from +0.89 to +7.13 lies wholly above zero. The long stage rejected after 3,064 games: −8.20 nElo, LLR −1.36, just below its bound of −1.335. Its interval runs from −20.50 to +4.10 and overlaps that of the short stage. The long stage has a nominal type II error of β = 0.25: by design it rejects even a change with a true +5 nElo in about a quarter of cases. In return it needs fewer games on average. These games do not say which measurement is closer to the truth. The rule decides: a run must pass both stages.
T-0214: start deeper when the game follows the prediction
What was tested. Iterative deepening starts every search at depth 1. The change remembered, after each search, the first 2 moves of the principal variation it reported: its own move and the expected reply. If the game followed exactly this prediction and the table held an exact entry for the new position with a legal move and a depth of at least 4 but below the search's maximum depth, the next search started directly at that depth, with a search window around the stored score. The skipped shallow iterations were not replaced.
Why it was rejected. 3,984 games in 31 minutes: −15.41 nElo, LLR −2.95. As with T-0212, the whole nominal interval lies below zero, from −26.20 to −4.63.
The balance
- None of the
11changes showed a gain the oracle could accept. In all11rejected stages the upper end of the nominal interval lies below+5nElo, the gain the tests ask about; the highest is+4.10. 2changes weakened the engine according to the nominal interval:T-0212andT-0214. For the other8rejected short stages and the long stage ofT-0213the interval includes zero.- Most of the measuring time went to changes whose estimate lay near the midpoint:
T-0204andT-0210together took16.7of the36.6hours of the short stages,46%.
A rejection does not prove that an idea is worthless. It says that this implementation did not show a gain of +5 nElo against this predecessor. None of these changes went into the engine.
How this was checked
- Sources: oracle register, export of
2026-10-25, entriesT-0203toT-0214; the code changes of the11candidates with their authors' descriptions; the run pages on this website; forT-0205, the project's incident log of24October. - Recalculation: games, Elo, nElo, half-widths, LLR and verdict of every stage were recalculated from the pentanomial and agree with the register. The LLR was computed twice, by the project's agents with an exact solver of their own and with the project control's calculation, which reproduces fastchess; the two agree to
4decimal places. - Independent review:
2agents from2different model families recalculated every stage separately, with their own code, from the pentanomial, each with a different solution method for the LLR, and checked every mathematical statement, the descriptions against the diffs and the agreement of the two language versions. Neither found a wrong number; their notes on imprecise wording have been worked in. - Not checked: whether the changes implement in code what their authors describe, beyond reading the diffs.