Distributional afterstate ranker
Measures every legal column under aligned futures and trains one network to rank the resulting positions.
Value the board after your move has resolved but before luck deals the next thing; then you never need to give the evaluator the action, and you never split a value seven ways by what comes next.
On this page
- Successor-closed distributional afterstate values rank siblings as well as fair D4
- Search-guided self-play with every-sibling labels converts compute into long-horizon strength
- A leaf-affordable NNUE-class student trained on successor-closed exact D4 sibling values reproduces D4's within-root ordering at the d4q gate thresholds
- Pilot: action-complete H40 afterstate corpus and distributional ranker offline gate
- Pilot iteration 3: K=256-scenario corpus, fresh held-out origins, full training
- Pilot iteration 2: K=64-scenario action-complete H40 corpus with fresh held-out origins
- Offline gate: calibrated top-two near-tie override of fair D4 by the frozen afterstate model
- Stronger-teacher (D2 continuation) afterstate corpus: ranking gate and frozen override rule
- Pilot: action-complete H40 afterstate corpus and distributional ranker offline gate
- Pilot iteration 2: K=64-scenario action-complete H40 corpus with fresh held-out origins
- Pilot iteration 3: K=256-scenario corpus, fresh held-out origins, full training
- Offline gate: calibrated top-two near-tie override of fair D4 by the frozen afterstate model
- Full training of the K=256 afterstate model, then the frozen top-two override rule on fresh origins
The problem
A policy is graded on which column it picks, so a network that learns to pick has to be shown what each column would have led to. The learned evaluators before this one were shown only the column that was actually played, then asked at deployment to rank the six they had never seen: the sibling trap.
A second problem sits underneath. Grading a ranker needs a target ranking, and in a game this noisy the target is itself a measurement, and nobody had checked whether a simulated long-horizon outcome holds still enough to say which column was better.
Proposed solution
Take one position. The player has up to seven legal columns. Drop into each and let the cascade finish: seven resolved boards, the afterstates. Play 40 more moves from each with a fixed simple policy under a future pinned down in advance, record the score, and repeat with a different pinned future. Average, and you have an opinion about which column was better with luck held constant, because all seven lived through the same futures.
Two design choices carry the work. The label is a spread: the network predicts 16 quantiles of the outcome distribution, so it can tell "reliably decent" apart from "usually poor with a rare jackpot", and its 76.5% interval can be checked against how often it really contains the outcome. The loss is about order too, because a within-position ranking term sits alongside the quantile loss.
The information boundary runs between the two halves. The corpus builder is a teacher, since it chooses the hidden gray numbers and makes the same future happen seven times, which no player can do; the evaluator that would play reads the resolved public afterstate and nothing else, with seeds, hidden values, score, level and move number absent from the record format by construction.
How it works
- Harvest.
generate-corpus.cppplays fair depth-1 development games and records public positions: canonical board, visible next disc, drops until rise, legal columns. Folds split by origin game, so a held-out position's own game never trains the model. - Expand and pin. Every legal column is played out to its resolved afterstate, and each scenario index derives one random stream from the canonical public position alone, shared by every column there.
- Label, completely. From each afterstate a fixed public phase-greedy depth-1 policy plays up to 40 further moves in that stream; the label is the score obtained and the moves survived. The loop iterates over the legal-action list itself, so a missing sibling is impossible, and every run reports a completeness fraction that must be exactly 1.0. These teacher labels never reach the evaluator.
- Train.
train.pyfits a compact residual convolutional network in float32 with a 16-quantile loss and a within-position ranking loss; mixed precision was rejected in the source because it could flip near-tied orderings. - Grade.
label-d4.cppcomputes the exact fair depth-4 ordering of the same held-out positions, and model and search are scored against one target, the ordering implied by the averaged 40-move outcomes: how often the first choice is right, how often a pair is ordered correctly, and normalized regret, the share of the best-to-worst gap the chooser gives away. - Deploy, never reached. Conditional on passing, the plan was a one-ply chance-averaged greedy policy over legal afterstates with exact depth-4 as a fallback, over 32 paired games. No cohort was ever opened.
What happened
Three pilots ran in order and only the third could deliver a verdict. With 256
pinned futures per column the target held still, and the network ranked columns
worse than exact fair depth-4 on 2,523 fresh held-out positions, so the theory
was recorded as not supported as tested (valid run, scientific outcome fail,
pilot tier, RS-20260820T142500Z-8f4a2d17).
The first two pilots failed on the labels. With eight pinned futures per column, splitting them into two halves gave two rankings that mostly disagreed: 0.246 against the 0.5 the frozen protocol demanded. The spread of outcomes within one column was larger than the typical gap between columns, so there was no trustworthy target to grade anyone against, and the outcome recorded is inconclusive. Sixty-four futures lifted the agreement and still missed the floor.
A fourth experiment asked the narrow question: leave depth-4 in charge, look only
at positions where its own top two columns are almost tied, and let the model
swap to the second when its advantage survives a resampling test. The override
fired on 37.0% of eligible positions and improved on depth-4 in both halves of
the held-out data, and it failed its frozen gate, because the rule fixed in
advance required at least 0.01 of improvement in each half separately and the
second half delivered 0.0075 (RS-20260820T184500Z-63c0a8e2, valid run,
scientific outcome fail).
What we learned
The label has to be checked before the model is. Two pilots produced corpora, trained networks and a sheet of comparison numbers in which the model looked worse than depth-4, and all of it meant nothing, because the thing it was compared against was noise. Only the preregistered stability floor kept two false negatives out of the record. Any experiment that grades a policy against simulated outcomes should measure the reliability of those outcomes first.
Successor-closed data did what it claims: coverage was exactly complete in every run, and when the model lost it lost on ranking quality, on positions of the kind it was trained on, rather than on sibling extrapolation.
A conservative override is a live mechanism. It fired often, its uncertainty was calibrated, it improved on the reference in both halves of held-out data, and it lost on a frozen margin, which makes it the first preregistered held-out test in the record where a learned model's intervention beat the reference search at all. None of that is a claim about play: no complete game was played, and at pilot tier this says nothing about score, survival or the million-point mean. The open question is whether a model without the two recorded handicaps, a weak depth-1 continuation teacher and training stopped at 11 of 20 epochs, would clear the same unchanged bar.
Agent contextRecords and provenance
Theory TH-20260820-distributional-afterstate-ranker-7aba7fb3. Experiments
EX-20260820-afterstate-pilot-h40-29b8588a,
EX-20260820-afterstate-pilot-h40-k64-d7a9faf5,
EX-20260820-afterstate-pilot-h40-k256-65a05477 and
EX-20260820-d4-toptwo-override-gate-0bdb39a1. Results
RS-20260820T094500Z-5c1e9a04, RS-20260820T114500Z-2b7c9e31,
RS-20260820T142500Z-8f4a2d17 and RS-20260820T184500Z-63c0a8e2. Index row:
experiment index, "Afterstate learning". The
theory was registered with the conditions that would kill it, including the one
that turned out to matter most: if the labels themselves are too noisy to be
stable, the verdict is inconclusive rather than a rejection of the theory. Three
of the four falsification criteria are about ranking quality; the fourth is about
whether the corpus can be built successor-closed at all.
All four runs drew only on seed lease SL-20260820T083000Z-5da70000, and every
held-out block was read exactly once. Single machine profile
MACH-20260820T080056Z-376ada90, float32 on a shared-memory integrated GPU.
Agent contextFull results table
All figures are read from the machine-readable result records under
research/results/. They are pilot tier: offline ranking comparisons on
public-development data, with no complete games played by either side.
Iteration 1, 8 scenarios (RS-20260820T094500Z-5c1e9a04, valid run,
inconclusive). 11,379 roots, 616,048 sibling labels, action completeness 1.0;
2,470 held-out roots. Split-half Spearman 0.2457 against the frozen 0.50 floor.
Within-action scenario standard deviation 20,922 points against a median
between-action gap of 7,096; both are statistics of the teacher labels. Against
that noisy target the model trailed depth-4 (pooled top-1 0.247 vs 0.330,
pairwise 0.571 vs 0.637, regret 0.413 vs 0.337) and depth-4 beat depth-1 (0.330
vs 0.254), which matches the historical ordering of those searches. Quantile
interval coverage 0.631, outside its band.
Iteration 2, 64 scenarios (RS-20260820T114500Z-2b7c9e31, valid run,
inconclusive). Split-half Spearman 0.4462 on 2,750 fresh held-out roots.
Coverage 0.8069, inside the band. Model against depth-4: top-1 0.3422 vs 0.4331,
pairwise 0.6367 vs 0.6972, regret 0.3029 vs 0.2315; model against its own
depth-1 teacher, top-1 0.3422 vs 0.2985. Training stopped at epoch 15 of 20 on
the GPU budget.
Iteration 3, 256 scenarios (RS-20260820T142500Z-8f4a2d17, valid run, fail;
theory assessed not supported as tested). 24,270,592 rows over 14,009 roots,
completeness 1.0; 2,523 held-out roots of which 411 are "decisive", meaning a
best-to-worst spread above 20,000 points, a threshold fixed on earlier
training-role data. Stability 0.8181 decisive, 0.6379 unconditioned, both above
the floor. Coverage 0.8635. Model against depth-4, pooled: top-1 0.4245 vs
0.4986, pairwise 0.6851 vs 0.7366, regret 0.2408 vs 0.1784; on decisive roots the
gap narrows but persists, top-1 0.5255 vs 0.5839, regret 0.0820 vs 0.0643. Model
against the depth-1 teacher, top-1 0.4245 vs 0.3191. Every half-fold moved the
same direction. Compact 3.4M-parameter residual network, stopped at epoch 11 of
20.
Override gate (RS-20260820T184500Z-63c0a8e2, valid run, fail). 2,689 fresh
held-out roots; 1,030 eligible, a 38.3% near-tie rate at the frozen 500-point
depth-4 gap; the model may swap only when its advantage survives a resampling
test at 95% confidence, and the override fired on 37.0% of eligible roots against
a 5% minimum.
Mean normalized regret on eligible roots, override against unchanged depth-4:
half 1 0.2484 vs 0.2835 (+0.0351), half 2 0.2343 vs 0.2418 (+0.0075), pooled
0.2414 vs 0.2629 (+0.0214). On the 84 decisive eligible roots, 0.0880 vs 0.1306
(+0.0426). Whole-set regret 0.1850 vs 0.1932. Stability 0.8144, coverage 0.8606,
two gate runs byte-identical. Six of seven gate criteria passed; the one that
failed was the primary one.
Agent contextValidity, gates and limitations
Why "valid run", "outcome fail" and "positive signal" all fit the record at once. Valid run means the experiment did what it promised: the corpus was complete, the labels were stable, the self-tests passed before any label was inspected, the gate script produced byte-identical reports on two runs, and no seed outside the registered lease was read. A valid run whose candidate loses is a finished scientific contribution; an invalid run tells you nothing either way. Outcome fail means the threshold written down before the data existed was not met. The pooled improvement passes and the 0.0075 miss is small, and neither changes the verdict, because a threshold that may be reinterpreted after the data arrives stops being a threshold. The experiment's own failure action closes the door: no further override variants of this same checkpoint without new evidence. Positive signal means the failure was about the checkpoint rather than about the mechanism, and the recorded limitations name the likely bottleneck. A retry is allowed with a better-trained or better-taught model, under the same unchanged rule.
Recorded limitations that apply to every number above. The target is the 40-move outcome under a phase-greedy depth-1 continuation: a weak, fixed public teacher, and the same label family the model was trained on. Depth-4 is scored against that same target, but an offline ranking comparison cannot measure real gameplay interaction, which only a SCREEN tier could. Roots are harvested from fair depth-1 games, so the position distribution is depth-1's rather than the deployment policy's. Both trained models were stopped early by the GPU budget.
Agent contextScoring mode
No point total on this page is a complete-game score. The point figures are label statistics from the teacher's 40-move continuations, and every comparison between the model and a search is an offline ranking statistic on stored positions. Nothing here can be placed beside a policy's mean score.
RecordsTheories, experiments and results that reference this directory
Claim: A single action-free public-afterstate evaluator, trained only on successor-closed labels (every legal sibling at each root, aligned chance scenarios, a fixed public continuation policy), ranks the legal root actions of disjoint whole-origin games at least as accurately as fair D4, and therefore can serve as the value core of a direct 1-ply chance-averaged policy with exact D4 fallback.
This theory is currently not-supported-as-tested at the pilot (a small run to find bugs and project cost, not a strength claim) level.
Claim: A search-guided self-play loop — actors that run a fair public-information search at every visited position, record the value of every legal sibling column under aligned chance scenarios, and train a public board evaluator on those successor-closed labels, which then becomes the leaf of the next iteration's search — produces a frozen public student whose mean whole-game score on fresh paired development cohorts rises with the compute spent per iteration, and at sufficient scale exceeds fair D4's mean by a preregistered margin.
This theory is currently untested at the proposal (no games played) level.
Claim: A LeafNet-shaped student (approaches/lifetime-objective/learned-leaf/leaf_features.py features, EmbeddingBag(8902,64)->32, ~572k parameters, ~1.3 us per state) trained with a within-root listwise plus pairwise loss on the existing successor-closed exact D4 sibling-value labels (runs/RUN-20260821T085042Z-c5cf0e71/d4q-labels, 291,890 afterstates over 8,639 roots) reproduces fair D4's within-root ordering on whole-origin held-out roots at the frozen d4q thresholds: top-1 >= 0.60, pairwise >= 0.78, normalised regret <= 0.13, in each half-fold.
This theory is currently not-supported-as-tested at the pilot (a small run to find bugs and project cost, not a strength claim) level.
It compares distributional-afterstate-ranker against fair-d4 at the PILOT (a small run to find bugs and project cost, not a strength claim) level, using public-development data.
valid run outcome: inconclusive The run was valid and the outcome was inconclusive (pilot (a small run to find bugs and project cost, not a strength claim)). Read the result.
It compares distributional-afterstate-ranker against fair-d4 at the PILOT (a small run to find bugs and project cost, not a strength claim) level, using public-development data.
valid run outcome: fail The run was valid and the outcome was fail (pilot (a small run to find bugs and project cost, not a strength claim)). Read the result.
It compares distributional-afterstate-ranker against fair-d4 at the PILOT (a small run to find bugs and project cost, not a strength claim) level, using public-development data.
valid run outcome: inconclusive The run was valid and the outcome was inconclusive (pilot (a small run to find bugs and project cost, not a strength claim)). Read the result.
It compares d4-toptwo-override against fair-d4 at the PILOT (a small run to find bugs and project cost, not a strength claim) level, using public-development data.
valid run outcome: fail The run was valid and the outcome was fail (pilot (a small run to find bugs and project cost, not a strength claim)). Read the result.
It compares distributional-afterstate-ranker-d2 against fair-d4 at the CHECK (mechanics checks only, no games played) level, using public-development data.
valid run outcome: fail The run was valid and the outcome was fail (pilot (a small run to find bugs and project cost, not a strength claim)). Read the result.
It compares afterstate-d4q-student against fair-d4 at the CHECK (mechanics checks only, no games played) level, using public-development data.
valid run outcome: fail The run was valid and the outcome was fail (pilot (a small run to find bugs and project cost, not a strength claim)). Read the result.
It compares distributional-afterstate-ranker against fair-d4 at the CHECK (mechanics checks only, no games played) level, using public-development data.
valid run outcome: fail The run was valid and the outcome was fail (pilot (a small run to find bugs and project cost, not a strength claim)). Read the result.
It compares LeafNet h64/m32 listwise student on d4q labels against exact fair D4 ordering (d4q labels); exact D1 0.486 and D2 0.568 top-1 as calibration at the CHECK (mechanics checks only, no games played) level, using no-gameplay data.
valid run outcome: fail The run was valid and the outcome was fail (pilot (a small run to find bugs and project cost, not a strength claim)). Read the result.
The run was valid; the outcome was inconclusive, at the pilot (a small run to find bugs and project cost, not a strength claim) level. Of 7 preregistered checks, 2 passed and 5 failed.
The successor-closed corpus pipeline works exactly as designed (11,379 roots, 616,048 sibling labels, 100% action completeness, all CHECK tests pass), but the frozen label-stability floor failed: with K=8 aligned scenarios and an H40 phase-greedy-D1 continuation, the split-half Spearman correlation of within-root action rankings is 0.246, far below the 0.50 floor. Per the preregistered gate the outcome is inconclusive: the scenario-mean H40 outcome ranking is too noisy at K=8 to certify any model's ranking. Diagnosis: within-action scenario std is ~21k points while the median between-action gap is ~7.1k, so the target ranking is noise-dominated; noise math predicts K=64 (split-half 32v32) lifts stability to roughly 0.7. For the record, against this noisy target the model trailed fair D4 (top-1 0.247 vs 0.330 pooled; pairwise 0.571 vs 0.637), and D4 beat D1 (0.330 vs 0.254), consistent with the historical ranking of those searches. No gameplay tier was opened.
Technical recordLimitations recorded with the result
- Labels are H40 returns under a phase-greedy D1 continuation: a fixed, weak public teacher. Even a perfectly stable version of this target may not transfer to strong-play rankings.
- Roots are harvested from fair-D1 games, so the state distribution is D1's, not the deployment policy's.
- The model trailed D4 against the noisy target; with stability 0.246 it is impossible to say how much of that gap is real.
- The protocol text was authored before data access but the researchctl freeze hash was computed after the run; the frozen content did not change during the run.
- Single machine profile; FP32 training on the shared-memory iGPU.
The run was valid; the outcome was inconclusive, at the pilot (a small run to find bugs and project cost, not a strength claim) level. Of 7 preregistered checks, 3 passed and 4 failed.
K=64 improved label stability from 0.246 to 0.446 mean split-half Spearman on fresh held-out origins, but still below the frozen 0.5 floor, so the preregistered verdict is again inconclusive. Quantile calibration passed (0.807 coverage of the nominal 76.5% interval). Against the still-noisy target the model trailed fair D4 consistently in both half-folds (pooled top-1 0.342 vs 0.433; pairwise 0.637 vs 0.697; regret 0.303 vs 0.232) while beating its D1 continuation teacher (top-1 0.342 vs 0.299). Training stopped at epoch 15 of 20 on the GPU time budget with the ranking loss still decreasing. No gameplay tier was opened.
Technical recordLimitations recorded with the result
- Labels remain H40 returns under a phase-greedy D1 continuation (a weak fixed teacher).
- Model undertrained: 15 of 20 epochs at the GPU budget stop.
- Iteration-1 held-out roots were folded into training data here; the gate read only fresh origins 0x5da70100-0x5da7013f.
- Single machine profile; FP32 on the shared-memory iGPU.
The run was valid; the outcome was fail, at the pilot (a small run to find bugs and project cost, not a strength claim) level. Of 7 preregistered checks, 4 passed and 3 failed.
With K=256 aligned scenarios the label-stability floor passed decisively (decisive-root split-half Spearman 0.818, unconditioned 0.638, both >= 0.5), so for the first time in this line the ranking target is stable enough to certify a verdict. The verdict is a valid negative for the direct-play configuration: the distributional afterstate ranker trailed exact fair D4 on every preregistered comparison in both fresh held-out half-folds (pooled top-1 0.424 vs 0.499; pairwise 0.685 vs 0.737; regret 0.241 vs 0.178). On the 411 decisive roots (spread > 20k) the gap narrowed but persisted (top-1 0.526 vs 0.584; regret 0.082 vs 0.064). The model clearly beat its D1 continuation teacher (top-1 0.424 vs 0.319) and its quantile head is calibrated (0.864 coverage). Conclusion: a compact action-free afterstate network trained on successor-closed H40 D1-continuation labels is a viable, calibrated long-horizon evaluator, but it is NOT a viable direct replacement for 4-ply expectimax; any future use must be as a companion signal inside search, and the same ranking gate applies. No gameplay tier was opened.
Technical recordLimitations recorded with the result
- Labels are H40 returns under a phase-greedy D1 continuation (a weak fixed teacher); a stronger-teacher corpus was not tested and might shift the verdict.
- Model undertrained: 11 of 20 epochs at the 2h GPU budget stop; ranking loss was still decreasing.
- Compact 3.4M-parameter ResNet; capacity and input resolution (single afterstate, no root context) were not scaled.
- Roots are harvested from fair-D1 games; deployment-distribution roots were not represented.
- Single machine profile; FP32 on the shared-memory iGPU.
The run was valid; the outcome was fail, at the pilot (a small run to find bugs and project cost, not a strength claim) level. Of 7 preregistered checks, 6 passed and 1 failed.
The calibrated top-two near-tie override of fair D4 by the frozen iteration-3 afterstate model FAILED its frozen gate by a narrow margin, with genuinely positive signal. On 2,689 fresh held-out roots, 1,030 (38.3%) were near-tied at the frozen 500-point threshold and the override fired on 37.0% of those. On eligible roots the override reduced mean normalized regret versus unchanged D4 in both half-folds (half1 0.2484 vs 0.2835, +0.0351; half2 0.2343 vs 0.2418, +0.0075; pooled +0.0214), but the frozen criterion required at least +0.01 in EACH half-fold, and half2 fell short. On the 84 decisive eligible roots the improvement was larger (+0.0426: 0.0880 vs 0.1306). Label stability passed (decisive Spearman 0.814), model quantile calibration passed (0.861), the gate is deterministic (byte-identical repeated reports), and the corpus is successor-closed. Interpretation: the conservative-override MECHANISM works as designed (fires often, calibrated, positive in both halves) and this is the first preregistered held-out test in this repository where a learned model's intervention improved on fair D4 at all; the CHECKPOINT's ranking quality is the bottleneck, consistent with the model being undertrained (11 of 20 epochs) and trained on a weak D1-continuation teacher. Per the frozen failure action, no further override variants of this same checkpoint are opened; a retry requires new evidence such as a fully trained or stronger-teacher model under the same frozen rule.
Technical recordLimitations recorded with the result
- The evaluation target is the H40 phase-greedy-D1 continuation outcome - the same label family the model was trained to predict; D4 is compared against the same target, but the offline gate cannot measure real gameplay interaction, which only a SCREEN tier can.
- The model was undertrained (11 of 20 epochs) and used a weak D1-continuation teacher; both are documented as the likely bottleneck and motivate any retry.
- The near-tie threshold (500) and regret margin (0.01) were frozen choices; the half2 miss (0.0075) is close to the margin and the result should be read as a narrow failure, not as evidence of no effect.
- Single machine profile; FP32 on the shared-memory iGPU.
The run was valid; the outcome was fail, at the pilot (a small run to find bugs and project cost, not a strength claim) level. Of 6 preregistered checks, 5 passed and 1 failed.
Full training does not rescue the afterstate model; it overfits. The model was trained to 22 epochs on the 2M-row K=256 subsample (44M row-updates, 2x iteration 3, cosine schedule completed, ranking loss 0.584 vs iteration 3's 0.630). On the SAME held-out roots as iteration 3 (corpus-C, a labeled diagnostic reuse), the fully-trained model ranks WORSE than iteration 3's 11-epoch checkpoint (top-1 0.361 vs 0.424, pairwise 0.658 vs 0.685, regret 0.281 vs 0.241) - training loss improved while held-out ranking degraded, a textbook overfitting signature against the D1-continuation H40 labels. The frozen override gate on fresh corpus-E (2,867 roots, 1,106 near-tie eligible, 41% override rate) then FAILED: eligible-root regret half1 0.2289 vs D4 0.2517 (+0.0228) but half2 0.2778 vs 0.2481 (-0.0297, the override is actively harmful there), pooled +0.0018. Stability (0.824), calibration (0.800), determinism (byte-identical) all passed. Conclusion: the model's limitation is not training completeness but generalization to held-out roots under a weak D1 teacher; the direct-override use of this model family is closed per the frozen failure action.
Technical recordLimitations recorded with the result
- The diagnostic comparison to iteration 3 reuses corpus-C (iteration 3's held-out), a labeled diagnostic; the frozen override gate used fresh corpus-E.
- The model family evaluated is the compact 3.4M-param ResNet over D1-continuation H40 labels; the result does not bound a stronger-teacher or different-architecture variant.
- The iGPU is compute-bound for this model (~2-3k rows/s FP32); larger-scale training was not attempted within the overnight budget.
- Two killed training attempts (tooling: memory blowup, output buffering) preceded the recorded run; they produced no artifacts and are disclosed in the run record.
The run was valid; the outcome was fail, at the pilot (a small run to find bugs and project cost, not a strength claim) level. Of 5 preregistered checks, 2 passed and 3 failed.
Scale-out stage 1 fails its prerequisite: a compact action-free afterstate model cannot learn fair D4's within-root ordering even from successor-closed, exactly-labeled search values. Training labels were the pinned reference's own depth-3 values of every legal sibling's resolved afterstate under its own five-stratum quadrature (291,890 labeled afterstates over 8,639 training roots, completeness 1.0). On 3,030 fresh held-out roots the model's one-ply chance-averaged ordering agreed with exact fair D4 at top-1 0.375 (frozen threshold >= 0.60), pairwise 0.643 (>= 0.78), normalized regret 0.291 (<= 0.13), failing every criterion in both origin-hash half-folds. For scale, exact fair D1 agrees with D4 at 0.486 top-1 on the historical panel - the learned student is WORSE than the cheapest exact search. Combined with the repository's prior played-action distillation failures, this strengthens the conclusion to: the obstacle to learning D4's ranking is not sibling coverage but the representational capacity of a compact board evaluator for the 4-ply search-value function. The registered self-play loop's stage-1 prerequisite is not met at this model scale.
Technical recordLimitations recorded with the result
- The student is the compact 3.4M-param ResNet; a materially larger model was not tested (the iGPU's FP32 throughput bounds what is trainable overnight).
- Labels are the depth-3 value of afterstates (the value one ply below the D4 root), so the student approximates D4's search through its own horizon, not an oracle's.
- The gate measures agreement with D4's ordering, which is itself a strong-but-not-optimal reference; a student below D4's agreement could in principle still add value inside a different search, which this experiment does not test.
- Single machine profile; FP32 on the shared-memory iGPU.
The run was valid; the outcome was fail, at the pilot (a small run to find bugs and project cost, not a strength claim) level. Of 5 preregistered checks, 3 passed and 2 failed.
The stronger-teacher hypothesis fails as tested. A successor-closed corpus relabeled with a fair-D2 (five-sample) continuation teacher at K=64 (2.88M rows over 6,535 roots; partial at the generator's 4h default wall stop) trained a model that, on the fresh 0x5da70500 ranking gate against the fixed D1-continuation H40 target, reached top-1 0.3365 - far below fair D4's 0.5020, below the D1-teacher model's 0.4245 from iteration 3, and only at exact-D1's own 0.3339. The frozen criterion (top-1 >= 0.4616 on each half, i.e. closing half the iteration-3 gap to D4) failed by a wide margin in both halves (0.342, 0.331). The frozen override gate on fresh 0x5da70600 roots also failed (eligible-root regret: half1 -0.0089, half2 +0.0110, pooled +0.0012). IMPORTANT CONFOUND, disclosed: the D2-teacher model was evaluated against D1-continuation outcomes (frozen for comparability with iteration 3), so part of its regression may reflect the teacher/target mismatch rather than teacher quality alone. Read narrowly, the result says a stronger-teacher corpus did not produce a better ranker of the fixed public-continuation outcome, and the afterstate line's ranking deficit is robust to the teacher choice within the tested configurations.
Technical recordLimitations recorded with the result
- Teacher/target mismatch confound: the model was trained on D2-continuation outcomes but evaluated against D1-continuation outcomes (frozen for comparability with iteration 3). A matched D2-continuation target was not generated (cost); the regression may partly reflect the mismatch.
- The D2 corpus is partial (6,535 of 8,192 roots) at the generator's 4h default wall stop.
- The compact 3.4M-param architecture and the D1-harvested root distribution are unchanged from iteration 3.
- Single machine profile; FP32 on the shared-memory iGPU.
The run was valid; the outcome was fail, at the pilot (a small run to find bugs and project cost, not a strength claim) level. Of 5 preregistered checks, 2 passed and 3 failed.
The leaf-affordable NNUE-class student does not reproduce fair D4's within-root ordering from the existing successor-closed labels. Five initialisation seeds of the LeafNet h64/m32 student (571,905 parameters; features from learned-leaf/leaf_features.py) were trained for 30 epochs on the 6,551 training roots of runs/RUN-20260821T085042Z-c5cf0e71/d4q-labels with the preregistered listwise + gap-weighted pairwise + 0.1 MSE loss; the seed with the best calibration-fold top-1 (0xA52E02, 0.3281) was then read once on the 3,030-root held-out panel of that experiment. Held-out top-1 was 0.296 / 0.3011 in the two origin-seed half-folds (gate >= 0.60), pairwise 0.6266 / 0.6259 (>= 0.78), normalised regret 0.3354 / 0.3379 (<= 0.13): every criterion fails in both half-folds. The other four seeds lie between 0.2987 and 0.3135 pooled top-1, all below the 3.4M-parameter afterstate CNN of RS-20260821T104500Z-77d21e90 (0.375) and below exact D1 (0.486). The student is leaf-affordable as claimed (1.27 us per state through the existing d7leaf export and leaf-check), but at this size it holds less of D4's ordering than the CNN did. Per the preregistered failure action: no leaf-affordable NNUE-class student of this size reproduces D4's ordering from these labels; the self-play loop TH-20260821-...-299ed02f stays blocked in its leaf form and its redesign is routed to the larger-student question. Diagnostic tier: the held-out panel had already been read once by the d4q experiment, so this is a diagnostic read on existing data, not new evidence about fresh roots.
Technical recordLimitations recorded with the result
- Diagnostic-tier read: the 3,030-root held-out panel (d4q-labels-gate) was already opened once by EX-20260821-afterstate-d4q-stage1; no fresh roots were labelled. The result schema has no diagnostic tier, so it is recorded at the lowest tier (pilot); it is not development-tier evidence.
- The preregistration names only the d4q-labels file, which carries folds train and calibration but no held-out fold; the held-out panel and its origin-seed half-folds were taken from the same run's d4q-labels-gate/d4q-labels.tsv and corpus-gate/roots.tsv, exactly as d4q.py consumed them, which is the reading the protocol's 'train/validation/held-out origins are reused unchanged' clause intends.
- Epoch count was fixed at 30 by the protocol and the final-epoch model was used. Calibration-fold top-1 peaked at 0.352-0.359 between epochs 5 and 10 for every seed and then declined as the training listwise loss kept falling (overfitting); even the best epoch is far below the 0.60 gate, so early stopping would not change the verdict, but the reported held-out numbers are for the overfitted final epoch.
- Loss coefficients not fixed by the hypothesis text were set to 1.0 for the pairwise term (d4-q-clone used 0.35) and the prediction-side softmax temperature was 1 in standardised value units; only the listed configuration is rejected.
- CPU training with 8 torch threads; the EmbeddingBag backward is not bit-deterministic across thread counts, so a re-run reproduces the numbers only approximately.
- Inference cost is from leaf-check on the RUN-A51D-corpus mix-d3 states on a shared host; informational only.
Agent contextSource files, operational notes and how to reproduce
Directory: approaches/afterstate-learning/distributional-afterstate
Operational notes (build commands, gate commands, seed leases) are kept in approaches/afterstate-learning/distributional-afterstate/README.md, alongside the page above.