Runs T-0224 to T-0236: a bundle of 6 changes passes
Listen to this post27 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
This post covers 10 changes to Coherent's search in oracle runs dated 28 October to 6 November 2026 that have not yet had a post. T-0236, a bundle of 6 changes, passed both stages; since 6 November at 22:29 UTC it has been on the main branch as Coherent 0.2.26. 8 changes were rejected. T-0225, an edge case, played the long stage to its game cap and ended without a verdict. In total the oracle played 290,862 games for these runs; their stages took 77.6 hours together.
Three entries in the same period are not covered here: T-0228 and T-0232 each had a post of their own, and T-0230 is the anchor of epoch 13, without games. The numbers come from the oracle register, export of 2026-11-07, and from the public run pages. Every stage was recalculated from the raw counts.
How the oracle decides
The new version plays its predecessor in pairs: 2 games with the same opening and colours reversed. A pair gives it 0, 0.5, 1, 1.5 or 2 points; the register counts how often each of these 5 classes occurred, the pentanomial Games are played in pairs with swapped colours; the five counts are the pairs scoring 0, ½, 1, 1½ and 2 points.. Dividing each pair's points by 2, μ and σ are the mean and standard deviation of these pair shares.
- 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: relates the mean score excess of a colour-swapped pair to the spread of the pair results.
= (μ − 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: time control
8+0.08, i.e.8seconds per game plus0.08seconds per move. A sequential test (SPRT Sequential probability ratio test. Games are played until the accumulated evidence reaches one of two bounds or the game limit fixed in advance; then the test stops.) between H0,0nElo, and H1,+5nElo, withα = β = 0.05. The run passes as soon as 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. reachesln 19 = 2.944and is rejected as soon as it falls to−2.944. Cap:96,000games. - Long stage: time control
40+0.4and a different opening book. Same hypotheses withα = 0.05andβ = 0.25; boundsln 15 = 2.708andln(0.25/0.95) = −1.335. Cap:36,000games. - Both stages: a change is adopted only if it passes both. If a stage reaches its cap between the bounds, it ends without a verdict.
These are the rules of the gain path. In the register their parameters are the same in epoch 12 and epoch 13; T-0224 to T-0229 ran in epoch 12, T-0231 to T-0236 in epoch 13. The predecessor was Coherent 0.2.24 for T-0224 to T-0227 and Coherent 0.2.25 from T-0229 on. T-0225 ran on the path for edge cases: it asks whether a correction costs 5 nElo, with H0 at −5 and H1 at 0 nElo and otherwise the same error rates, bounds and caps.
The oracle computes the LLR exactly, following the "normalized" model of the program fastchess. An approximation is enough for understanding:
LLR ≈ N · (nElo − m) / 12,071, with N pairs, m the midpoint of the two hypotheses and 12,071 ≈ (800/ln 10)² / 10.
On the gain path m = 2.5, for the edge case m = −2.5. For all 14 stages in this post the approximation differs from the exact LLR by less than 0.006. Example with the estimate of the long stage of T-0236, rounded to three decimal places: 10,330 · (5.690 − 2.5) / 12,071 ≈ +2.73. Solved for nElo, a stage stops as soon as its estimate lies 2.944 · 12,071 / N above or below the midpoint, in the long stage 2.708 · 12,071 / N above or 1.335 · 12,071 / N below. If a stage stops at a bound, its estimate therefore lies almost exactly on one of these curves; a stage that stops at the game cap can lie between them.
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 by itself mean that the change does harm. A test that stops at a bound can give biased estimates; an early stop tends to exaggerate the distance from the midpoint. The intervals below are therefore nominal.
The runs at a glance
| Run | Where it acts | Stage | Games | Elo | nElo | LLR | Duration | Verdict |
|---|---|---|---|---|---|---|---|---|
T-0224 | reverse futility pruning | short | 33,452 | +2.31 ± 1.85 | +4.64 ± 3.72 | +2.96 | 4 h 11 min | passed |
T-0224 | reverse futility pruning | long | 20,376 | +0.44 ± 2.30 | +0.92 ± 4.77 | −1.34 | 13 h 05 min | rejected |
T-0225 | pruning per move | short | 27,798 | +0.02 ± 1.71 | +0.06 ± 4.08 | +2.95 | 3 h 29 min | passed |
T-0225 | pruning per move | long | 36,000 | −0.68 ± 1.47 | −1.65 ± 3.59 | +1.26 | 23 h 08 min | at the game cap, no verdict |
T-0226 | null-move probe | short | 8,950 | −2.76 ± 3.60 | −5.51 ± 7.20 | −2.97 | 1 h 07 min | rejected |
T-0227 | table, exclusion search | short | 8,338 | +5.50 ± 3.71 | +11.07 ± 7.46 | +2.95 | 1 h 03 min | passed |
T-0227 | table, exclusion search | long | 2,482 | −5.18 ± 6.69 | −10.59 ± 13.67 | −1.34 | 1 h 36 min | rejected |
T-0229 | learning from the evaluation | short | 16,576 | −0.88 ± 2.60 | −1.79 ± 5.29 | −2.94 | 2 h 04 min | rejected |
T-0231 | ProbCut | short | 74,520 | +0.76 ± 1.23 | +1.55 ± 2.49 | −2.94 | 9 h 19 min | rejected |
T-0233 | bundle of 5 | short | 5,546 | −5.14 ± 4.52 | −10.39 ± 9.14 | −2.96 | 41 min | rejected |
T-0234 | move ordering | short | 6,140 | −4.53 ± 4.33 | −9.09 ± 8.69 | −2.94 | 46 min | rejected |
T-0235 | singular extension | short | 4,888 | −6.04 ± 4.84 | −12.16 ± 9.74 | −2.96 | 37 min | rejected |
T-0236 | bundle of 6 | short | 25,136 | +2.63 ± 2.11 | +5.34 ± 4.30 | +2.96 | 3 h 08 min | passed |
T-0236 | bundle of 6 | long | 20,660 | +2.76 ± 2.30 | +5.69 ± 4.74 | +2.73 | 13 h 13 min | passed |
Elo and nElo with the nominal 95 % half-width, each against the predecessor. Durations as on the run pages, rounded down to the minute.
Both stages of T-0236 lie wholly above zero; T-0233, T-0234 and T-0235 lie wholly below it. Estimate with nominal 95 % half-width: T-0224 short 4.64, T-0224 long 0.92, T-0225 short 0.06, T-0225 long -1.65, T-0226 -5.51, T-0227 short 11.07, T-0227 long -10.59, T-0229 -1.79, T-0231 1.55, T-0233 -10.39, T-0234 -9.09, T-0235 -12.16, T-0236 short 5.34, T-0236 long 5.69.
Where the changes act
The search tries moves in a tree. At the root is the position on the board; in every iteration the root moves are searched in turn, each time 1 ply deeper, until time runs out. The picture shows the main search in simplified form. Depending on the node, steps are skipped or the search returns earlier; at a remaining depth of zero or below the quiescence search takes over. The two bundles act at several steps at once.
Point by point
T-0224: a smaller discount for the opponent's self-inflicted damage
What was tested. Outside the principal variation, check and the exclusion search, reverse futility pruning ends a node at remaining depth up to 8 if the evaluation minus a margin still reaches beta; guards against mate values stay. The margin is 54 per ply of depth, less a discount if the evaluation is rising, and so far less a fixed 26 if the opponent harmed himself with his last move: his static evaluation before the move and ours now, both from the respective mover's view, add up to more than zero. The margin never goes below zero. Without an earlier evaluation the discount is zero. The change made this discount at most as large as the damage: min(26, sum) instead of 26. Small damage now brings only a small discount.
Why rejected. The short stage passed: +4.64 nElo after 33,452 games, LLR +2.96; its interval from +0.91 to +8.36 lies wholly above zero. The long stage rejected after 20,376 games at +0.92 nElo, LLR −1.34, just past its bound of −1.335; its interval runs from −3.85 to +5.69. The two intervals overlap. The long stage has a nominal type II error of β = 0.25: by design it rejects a change with a true +5 nElo in about a quarter of cases.
T-0225: the edge case of a capture into a dead draw
What was tested. An edge case is a correction that is right but is expected to be small in Elo; it must show that it does not cost 5 nElo. The post "The first edge case: mate with bishop and knight" describes the first one. Here it was about captures after which neither side has enough material left to mate. Such a position is an immediate draw. In the pruning per move, however, the capture futility near the horizon and the exchange threshold for captures could discard such a capture as hopeless. If alpha was below zero, the node could then report a value below alpha although the capture would have led to a draw. The change exempted such captures from both cuts, in nodes on the principal variation and outside it. It checked only captures with a piece on the target square, and only if at most 2 pawns, rooks or queens stood on the board; it then played the capture on a copy of the board and tested the remaining material. The quiescence search stayed unchanged.
Why no verdict. The short stage passed at +0.06 nElo after 27,798 games, LLR +2.95; its interval from −4.02 to +4.14 lies wholly above −5. The long stage played all 36,000 games and stood at −1.65 nElo and LLR +1.26 at the cap, between its bounds of −1.335 and +2.708. With the approximation: 18,000 · (−1.654 + 2.5) / 12,071 ≈ +1.26. The LLR is positive although the estimate is negative, because the midpoint of this test lies at −2.5 nElo. The interval from −5.24 to +1.93 includes both hypotheses. The stage counts neither as passed nor as failed; the correction was not adopted.
T-0226: the null-move probe asks the network about passing
What was tested. The null-move probe lets the side to move pass; if even then the position holds above beta, the node may be cut. So far it was allowed if, among other things, the evaluation and the corrected static evaluation reached beta. The change added a condition: the corrected static evaluation minus the value of the right to move had to reach beta as well. It estimated this value as the sum of two evaluations: the uncorrected evaluation of the position for the side to move, and the evaluation of the same position with the opponent to move, from his view. Both scale the network output by material and are clamped; for the latter a new function swaps the two halves of the network's feature sums.
Why rejected. 8,950 games: −5.51 nElo, LLR −2.97. The interval runs from −12.70 to +1.69.
T-0227: store exclusion searches in the table
What was tested. For the singular extension the search checks whether the table move is much better than all others. To do so it searches the node again without this move, the exclusion search. So far its result was not stored in the table. The change stored it under a key of its own, derived from the position and salted with the excluded move and two node properties. A later exclusion search of the same position with exactly the same depth returned the stored value at once if its bound fitted. The ordinary table entry continued to supply evaluation and move ordering.
Why rejected. The short stage passed early: +11.07 nElo after 8,338 games, LLR +2.95; its interval from +3.61 to +18.52 lies wholly above zero. The long stage rejected after 2,482 games at −10.59 nElo, LLR −1.34; its interval runs from −24.26 to +3.08. The two intervals do not overlap: the upper limit of the long stage lies 0.53 nElo below the lower limit of the short stage. The stages use different time controls and opening books and can measure different effects; both also stopped early. The cause of the difference cannot be determined from these results. The rule decides: a run must pass both stages.
T-0229: the pawn-structure history learns from the evaluation
What was tested. At nodes outside check and the exclusion search, the search compares the static evaluation with that of the node before. If the move in between was quiet and the earlier evaluation is known, its history value learns from this change: the more the move improved the evaluation for its side, the larger the bonus, up to a limit. So far this went only into the ordinary history of quiet moves. The change wrote the same bonus also into the pawn-structure history, a table of moves by piece and target square under the pawn structure in which they were played, as long as this table is used, which it is by default.
Why rejected. 16,576 games: −1.79 nElo, LLR −2.94. The interval runs from −7.08 to +3.50. The same change returned word for word as part of the bundle T-0236.
T-0231: ProbCut skips captures with a poor history
What was tested. ProbCut tests tactical moves with a shallow search against a threshold that lies a fixed margin above beta; if one reaches it, the node is cut. The change skipped every candidate whose capture history lay below the value with which these tables start in a new game, −167. That applied to captures, en passant and promotions, the table move included, before the exchange check.
Why rejected. The stage with the most games in this series: 74,520 games in 9 h 19 min, +1.55 nElo, LLR −2.94. The interval runs from −0.95 to +4.04. A positive estimate can lead to rejection: it lay below the midpoint of 2.5 nElo, and with enough games that is decisive.
T-0233: a bundle of 5 changes
What was tested. 5 changes in one commit:
- Escape term: for quiet moves of knights, bishops, rooks and queens, move ordering gives a bonus for leaving a square attacked by a cheaper enemy piece and a penalty for entering one. It now ignores attacks by enemy pieces that are pinned to their king, outside their pin line, unless the move breaks the pin.
- Exchange checks with legal recaptures: if a capture fails a negative exchange threshold, the calculation is repeated with the cheapest legal recapturing piece at each step. That applies outside check, to captures without promotion, in ProbCut, in the pruning per move and in the quiescence search at its exchange threshold of
−40; sequences in which a pawn could promote stay rejected. - Null move with attacked pieces: the probe is only allowed if the evaluation lies above beta by a margin derived from piece values when an own piece is attacked by a cheaper enemy piece:
400for a queen attacked by a rook or a cheaper piece,230for a bishop and220for a knight attacked by a pawn,170for a rook attacked by a pawn or minor piece, otherwise0. The margin is a rule of thumb, not a verified gain for the opponent. - Killers and countermove: with a history value of at least
−3,000they are exempt from the exchange threshold for quiet moves. - Multi-cut: if the exclusion search, without the table move, already reaches beta while the table value lay below beta, a node outside the principal variation returns this value at once, unless it is a mate value.
The same null-move condition had already been measured on its own as T-0200 and was rejected there.
Why rejected. 5,546 games in 41 min: −10.39 nElo, LLR −2.96. The interval from −19.53 to −1.25 lies wholly below zero.
T-0234: order captures by the full exchange balance
What was tested. So far captures were ordered by 8 times the sum of the captured piece's value and the promotion gain, plus a share of the capture history. The change replaced this material term with 8 times the exchange balance on the target square: both sides recapture with the cheapest piece and may stop at any time. That favours a won piece over a mere exchange of the same victim; the capture history can still change the order. The split into good and bad captures stayed unchanged.
Why rejected. 6,140 games in 46 min: −9.09 nElo, LLR −2.94. The interval from −17.78 to −0.40 lies wholly below zero.
T-0235: no positive singular extension on the shallowest table entry
What was tested. From remaining depth 5 the search may extend the table move if its entry is a lower bound at most 3 plies shallower than the node and the exclusion search stays below a threshold: by 1 ply; outside the principal variation and within existing limits further below by 2, for a quiet table move by 3. The change blocked these positive extensions from depth 7 if the entry was exactly 3 plies shallower, the shallowest permitted. The exclusion search, the multi-cut, the negative extension and the extension for checks stayed. A new tuning constant holds the depth 7.
Why rejected. The shortest run of this series: 4,888 games in 37 min, −12.16 nElo, LLR −2.96. The interval from −21.90 to −2.42 lies wholly below zero.
T-0236: a bundle of 6 changes passes
What was tested. 6 changes in one commit:
- Learning from the evaluation: the change of
T-0229, word for word. - Root order: after each iteration the root moves except the best are re-sorted by the nodes they cost. Now this sorting by nodes happens only once the iteration is deeper than the root entry the table held at the start of the search. Moving the best move to the front and sorting the quiet moves by their success stay.
- Table depth: an entry with sufficient depth whose bound does not allow a cut loses
1ply of its stored depth. That applies outside the principal variation and the exclusion search, from remaining depth6. - Penalty before a tactical best move: if the best move is a capture or promotion, quiet killers and the countermove that were searched in the node without becoming the best move now also receive the decreasing penalty.
- King moves in check: at nodes where a cutoff is expected, quiet king moves in check are exempt from history pruning.
- Cap on reductions: if a reduced search of a quiet move rose above alpha and the search at exactly its normal depth then stayed at or below alpha, later quiet siblings are reduced by at most
R − 1plies, whereRwas this move's reduction. That applies only outside the principal variation and the exclusion search, at nodes where no cutoff is expected, without check and without a checking move, and without mate values.
The result. The short stage passed after 25,136 games: +5.34 nElo, LLR +2.96, interval from +1.05 to +9.64. The long stage passed after 20,660 games: +5.69 nElo, LLR +2.73, just past its bound of +2.708, interval from +0.95 to +10.43. Both intervals lie wholly above zero. On 6 November at 22:29 UTC the pipeline brought the change to the main branch; the engine there is exactly that of the candidate, version 0.2.26.
What the result does not show:
- Shares: the bundle was measured as a whole. How much each of the
6changes contributes was not measured; one of them was rejected on its own asT-0229. - Size: both stages stopped at their upper bound; such a stop tends to overestimate the effect. The intervals are nominal.
- Opponents: the test compares with the predecessor only. It says nothing directly about strength against other engines.
The balance
1of10changes was adopted: the bundleT-0236, now Coherent0.2.26.8were rejected:6in the short stage,T-0224andT-0227in the long stage after passing the short one.T-0225ended at the cap of the long stage without a verdict.- The nominal intervals of
T-0233,T-0234andT-0235lie wholly below zero: by these measurements these changes weakened the engine. All3stopped after fewer than6,200games, where an early stop can exaggerate the distance. - Wholly above zero lie the short stages of
T-0224,T-0227andT-0236and the long stage ofT-0236.
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 the rejected candidates was adopted as a whole; the change tested on its own as T-0229 was later adopted as part of T-0236.
How this was checked
- Sources: oracle register, export of
2026-11-07, the10entries; the public run pages, retrieved on2026-11-07; the code changes of the10candidates against their base and their authors' descriptions; the event log of the pipeline; the main branch. - Recalculation: games, Elo, nElo, half-widths, LLR, bounds and verdict of every stage were recalculated from the pentanomial and match the register. The LLR was computed twice, with a solver of our own and with the calculation of the project control. Predecessors, the bases of the candidates, durations, verdicts on the run pages, the identity of the main branch with
T-0236and the repeated changes in the bundles were checked by script. - Independent review: an agent of another model family checked text, table, graphics and diagram against the sources and recalculated the numbers.
- Not checked: whether the changes implement what their authors describe, beyond reading the diffs.