Chain-reveal leaf substrate
Adds seven reveal-construction terms (aligned double hit, chain-to-crack, entombed high, and their danger-gated forms) on top of the frozen fair leaf through a memoised, generated search whose zero-weight arm is gated bit-identical to the unchanged search.
When the search has to stop before the game ends, a hand-written formula guesses how good the board it stopped at is.
On this page
- C0: paired D3 N7M6 minus D4 s5 contrast from retained per-game records
- Seed-free corpus gate, then a paired 256-game SCREEN of fair D4 (seven strata, memo engine) with reveal-construction leaf terms against the unchanged leaf
- Successor SCREEN: paired 256-game test of the reveal-construction leaf terms (two doses and a chain-to-crack bundle) against the unchanged fair D4 at seven strata with the memo engine, after the corpus value gate failed
- Seed-free corpus gate, then a paired 256-game SCREEN of fair D4 (seven strata, memo engine) with reveal-construction leaf terms against the unchanged leaf
- Successor SCREEN: paired 256-game test of the reveal-construction leaf terms (two doses and a chain-to-crack bundle) against the unchanged fair D4 at seven strata with the memo engine, after the corpus value gate failed
- C0: paired D3 N7M6 minus D4 s5 contrast from retained per-game records
A place to bolt new scoring terms onto the frozen depth-4 board scorer without
touching it: the frozen sum is computed first, exactly as before, and each
extra term is added only when its weight is non-zero, so the all-zero arm is
the unchanged search and every other arm is a paired, measurable deviation.
The terms it carries are the reveal-construction terms of
EX-20260823-reveal-construction-screen-371fd638.
The seven terms
All are computed from the scratch the frozen extractor has just filled, read
only the board and the rise clock, and are mirror-invariant. r[x] is the
frozen leaf's per-disc readiness (union of addition and release, the quantity
behind cover exposure); rel[x] is the release readiness alone (the per-disc
summand of latent chain potential: the disc pops because run-mates leave).
aligned_double_hit— for each unhit gray, the best support-disjoint pair of orthogonal numbered neighbours scored byr[a]·r[b]: the joint readiness of a same-wave double hit, the cheapest reveal in the game.chain_to_crack_cracked— for each cracked gray, the noisy-OR ofrel[d]over numbered neighbours: a wave will deliver the one hit it needs.chain_to_crack_solid— as term 1 withrelin place ofr.entombed_high— for each numbered disc of value 3–7 whose column is taller than its value and whose row run is longer than its value,1 − r. 5–7. terms 1–3 multiplied bydanger_gate: 1 at maximum column height ≤ 4, 0.5 at height 5, 0 at height ≥ 6.
Support-disjoint rule (frozen; the full statement is the header comment
of extra-terms.hpp). A neighbour pair of a gray is skipped when (R1) the two
are on opposite sides — in one run through the gray — and either one's
readiness is release-dominated (release > addition), since its completion
then needs a run-mate to leave first, a different wave; or (R2) the two are on
adjacent sides and their completion paths share a cell, where a completion
path is the empty cells vertical completion would fill plus the union over all
minimal-cost horizontal windows (the windows the frozen leaf scans) of the
cells each would fill. The union over all minimal windows, not the first, is
what keeps the rule mirror-invariant.
What the substrate is
- Extra terms (
extra-terms.hpp):kExtraTermsnamed features computed from the board and the rise clock only, using the scratch the frozen extractor has just filled (heights, occupancy masks, numbered and covered bitboards, readiness arrays). The extractor's signature is(const Board&, int moves_remaining, const LeafScratch&)— no game state — so a read of score, level, move counter or next disc is unrepresentable, not merely forbidden by comment. Terms must be mirror-invariant. - Augmented leaf (
augmented-leaf.hpp): the one-entry board memo of Remembering the last board, keyed on (board, moves until rise), now also holding the extra features.augmentedFairLeafreproduces the memo leaf's frozen dot product in the frozen order, then addsw[i] * v[i]for each term whose weight is not exactly zero. Weights parse fromname=value,...;describe()writes the canonical string into artifacts. - Generated search (
build.sh):AugmentedFastSearchisfast-search.hppwith nine checked substitutions — namespace, class and constructor names, the leaf call, two accessors and two members. The build refuses to proceed unless the diff is exactly 19 lines, the expected strings are present, and the leaf call still sits directly below the search's++work_line, so logical work, completed depth and cache behaviour cannot change whatever the weights are. - Gates (
gate.cpp), all on the already-opened probe seeds0xa5278000–0xa52784ffand refusing any other seed: leaf bit identity at zero weights againstfastFairLeafon every board a real search visits (roots and every stratified successor, in the search's own feed order so memo hits are exercised); mirror invariance and memo/fresh agreement of the extra features on those same boards; column, work, node, cache-hit and completed-depth parity of the zero-weight search withFastSearchat depth 4 with five and seven strata; thread-count determinism; and, with a non-zero weight, at least one decision that differs from the frozen search (the hook is live), reflection consistency, metadata blindness, completed depth and legality; plus hand-built unit boards for the support-disjoint rule,entombed_highand the danger gate. - Paired runner (
run.cpp): repeatable--arm NAME[:name=value,...], every arm on the same ordered seeds, worst-case work bound by default, per-decision completed-depth and legality audit, memo hit rate per arm, and--shadow, which runs the unmodifiedFastSearchbeside each non-frozen arm at every root and countsdivergentDecisions— the coverage measure that says how often a weight actually changed a choice. Onedrop7-lifetime-cohort-v1file per arm (readable byfast-engine/analyze.py summaryandpaired) plus an index with the arms' weights (canonical and verbatim) and counts; all files are rewritten after every chunk of games so an interrupted run leaves a partial artifact markedcomplete: false. The runner refuses to start without--seed-lease, and writes that lease and--data-roleinto every file in place of the shared harness writer's fixed labels, so a cohort cannot be mislabelled by omission. - Pinned analysis (
compare.py): pairs two per-arm files by seed and reports the preregistered statistics — per-arm mean / median / Q25 / min / max, paired deltas, the one-sided 95% percentile bootstrap over whole games (20,000 resamples, the same seed as leaf-evolution'scompare.py, which it imports), the Student-t lower bound, W-T-L, the detection floor, halves in seed order, flow rates, occupancy, chain depth, and coverage from the arms index.--first Nrestricts to the first N games for the manual stop checks.screen.shis the successor screen's exact command line; the coordinator launches it.
The equivalence contract
At all-zero weights, augmentedFairLeaf returns the same 64-bit pattern as
fastFairLeaf; the search generated around it selects the same column with
the same work, nodes, cache hits and completed depth as the gated fast search.
The contract rests on the frozen sum being computed first and the extra
instructions never being emitted for a zero weight — not on the arithmetic
identity x + 0.0 * v == x. With a non-zero weight nothing about the search
changes except the leaf value, which is the whole point: any difference between
arms is attributable to the terms and their weights alone.
What happened
The seed-free corpus gate rejected the primary term as a predictor of remaining lifetime (partial correlation −0.044 beyond the frozen leaf) while finding that the depth-4 policy leaves 60% of live same-wave setups uncollected; an independent review written before that result argued the value criterion was the wrong kill for an action term, so a successor screen tested the term in play with the corpus result disclosed. On 256 fresh paired games at depth 4, seven strata, the +300 dose changed under 1% of decisions and was stopped at the 32-game rarity check; the +900 dose changed 2.08% of decisions and scored +3,204 points against the unchanged search (bootstrap lower bound −26,860, halves +48,762 / −42,354) with reveals per move flat at 1.152 versus 1.154. Both gates read fail; the term re-ranks one decision in fifty and those re-rankings add no reveal flow. The frozen arm of that run is the largest fresh-seed seven-stratum fair-D4 cohort on record: 386,545 points and 111.59 moves over 256 games.
Technical recordThe record
Theory TH-20260823-reveal-construction-leaf-e8f7c78d (assessed,
not-supported-as-tested, public-development). Experiments
EX-20260823-reveal-construction-screen-371fd638 (corpus gate, result
RS-20260823T110000Z-baecb816, valid + fail, mechanics-only) and
EX-20260823-reveal-construction-screen-v2-63d73b6a (screen, result
RS-20260823T131226Z-16564ed9, valid + fail, public-development). Runs
RUN-20260823T091530Z-cbe65468 (design, blind review, portfolio, CHECK gates,
corpus gate) and RUN-20260823T110735Z-ba69c025 (screen; stage-1 four-arm
partials under stopped-at-32/, stage-2 frozen + A900 complete). Lease
SL-20260823T110000Z-a52d0200, first 256 seeds read. Design
runs/RUN-20260823T091530Z-cbe65468/kimi-k3-theory-design.md, review
kimi-k3-prereg-review.md, portfolio kimi-k3-portfolio.md. The build guard's
expected diff count (19) and the probe-seed bound are stated in build.sh and
gate.cpp. reads: public describes the information class the extra terms
use; the signature admits only the board, the rise clock and the leaf scratch.
Sources
extra-terms.hpp— the seven frozen terms and the support-disjoint ruleaugmented-leaf.hpp— weights, memo and the augmented leafbuild.sh— generatesAugmentedFastSearchfromfast-search.hppwith a diff guardgate.cpp,run.cpp— CHECK gates and the multi-arm paired cohort runnercorpus-dump.cpp,corpus-gate.py— the seed-free corpus gatecompare.py,screen.sh— the pinned paired analysis and the screen command
RecordsTheories, experiments and results that reference this directory
Claim: The depth-3 factored-chance fair search with seven disc strata and six reveal samples (D3 N7M6, fair leaf, finding-16) beats the frozen fair depth-4 five-stratum search (D4 s5, N5 M1, finding-05) on the shared development cohort 0xa51d1000-0xa51d103f by a paired per-game score margin whose one-sided 95% whole-game bootstrap lower bound and Student-t lower bound are both above zero.
This theory is currently supported-as-tested at the public-development (a cohort for deciding what to try next, not confirmation) level.
Claim: Adding to the frozen fair-D4 leaf a term that prices the JOINT same-wave readiness of two support-disjoint numbered neighbours of a solid gray (the cheapest reveal in the game: two hits in one cascade, no cracked intermediate), optionally with a second gray-terminating release step (a chain whose release delivers a hit to a cover) and a danger gate that switches these construction terms off when max height exceeds 4, increases cover reveals per move and mean paired lifetime and score against the unchanged search on fresh development games at depth 4 / seven strata, by more than a 256-game paired cohort's detection floor.
This theory is currently not-supported-as-tested at the public-development (a cohort for deciding what to try next, not confirmation) level.
It compares D3 N7M6: factored-chance-fair-search, depth 3, discSamples 7, revealSamples 6, terminalUtility -1000000, maximumWork 51084852, 2000-move cap, corrected 17,000-point Hardcore scoring (finding-16 arm, RUN-20260821T035407Z-00483c6c) against D4 s5: parameterized-fair-search, depth 4, chanceSamples 5 (N5 M1), terminalUtility -1000000, maximumWork 3200000, 2000-move cap, corrected 17,000-point Hardcore scoring (finding-05 fresh-s5 arm, runs/RUN-A51D-s7confirm/fresh-s5.json; byte-identical games to runs/RUN-A52-LEAF/eval/s5-w000.json) at the CHECK (mechanics checks only, no games played) level, using previously-evaluated-development data.
valid run outcome: pass The run was valid and the outcome was pass (public-development (a cohort for deciding what to try next, not confirmation)). Read the result.
It compares fast-d4s7-memo-reveal-construction against fair-d4 at the SCREEN (a 32-game paired screen) level, using public-development data.
valid run outcome: fail The run was valid and the outcome was fail (mechanics-only (checks only, no games played)). Read the result.
It compares fast-d4s7-memo-reveal-construction against fair-d4 at the SCREEN (a 32-game paired screen) level, using public-development data.
valid run outcome: fail The run was valid and the outcome was fail (public-development (a cohort for deciding what to try next, not confirmation)). Read the result.
The run was valid; the outcome was fail, at the mechanics-only (checks only, no games played) level. Of 6 preregistered checks, 3 passed and 2 failed.
Seed-free corpus gate for the reveal-construction leaf terms, read once on the depth-4 non-explored subset of runs/RUN-A51D-corpus/all.states (62,831 rows, 768 games, whole-origin split, base held-out R^2 0.6483): the gating term aligned_double_hit FAILS the preregistered four-part gate. Held-out partial correlation with log1p remaining lifetime beyond the 18 leaf features, occupancy and rise clock is -0.0443 (threshold >= +0.05) and incremental R^2 +0.00047 (>= 0.005); prevalence 19.75% and the uncollected-setup rate 60.47% (56.51% excluding ambiguous-empty outcomes; 6,969 setups) pass. chain_to_crack_cracked (partial r -0.0325, R^2 +0.00026, prevalence 28.92%) and chain_to_crack_solid (partial r -0.0385, prevalence 1.77%, uncollected 62.85%) also fail; entombed_high on depth 4 alone reads partial r -0.0595, incremental R^2 +0.00125. Per the protocol the 256-game screen was NOT run and no leased seed was read. All CHECK gates passed at the final term source (0 bit, parity, mirror, determinism, metadata mismatches at d4s5 and d4s7; runs/RUN-20260823T091530Z-cbe65468/gates.log). The value-criterion part of the gate rejects these terms as lifetime predictors; the action-level statistic says the depth-4 (s5, epsilon 0.03) behaviour policy leaves 60% of live same-wave double-hit setups uncollected within two moves.
Technical recordLimitations recorded with the result
- Mechanics-only tier: no gameplay was run; this rejects the terms as held-out predictors of remaining lifetime beyond the frozen leaf on depth-4 corpus positions, not as action-changing leaf terms in play.
- The corpus behaviour policy is the reference depth-4 search at FIVE strata with epsilon 0.03 exploration, not the seven-stratum memo configuration the screen would have run; the uncollected-setup rate is therefore inflated by epsilon moves and by s5's coarser chance model (Kimi K3 review, written before the result was read: runs/RUN-20260823T091530Z-cbe65468/kimi-k3-prereg-review.md section 3).
- The same review argued, blind to the result, that a partial-correlation kill criterion is a value criterion and can reject a term whose purpose is to re-rank sibling actions at the horizon boundary; the preregistered gate is nonetheless applied as written. Any successor that drops the value criterion must disclose that this gate was read first.
- The uncollected-setup rate counts a reveal of a different gray as not collecting this setup; a high rate can mean the search had better lines.
- The formal freeze command ran after the corpus gate was read; the thresholds were fixed by file content 9.5 minutes before the read (experiment amendment).
- The implementer's support-disjoint rule R2 (skip adjacent-side pairs whose completion paths share a cell) excludes configurations where one dropped disc completes both runs in the same wave; the term as frozen is narrower than the design's prose.
The run was valid; the outcome was fail, at the public-development (a cohort for deciding what to try next, not confirmation) level. Of 6 preregistered checks, 2 passed and 4 failed.
Paired 256-game SCREEN on fresh seeds 0xa52d0200-0xa52d02ff, fair D4 at seven strata with the memo engine. The preregistered primary arm A300 (aligned_double_hit +300) and the bundle arm B changed the unchanged search's column in 0.69% and 0.70% of decisions at the 32-game rarity check, below the 1% rule, and were stopped as no-measurements (partials: A300 -4,298 on 39 games, B +18,213 on 36 games, both far inside their floors). The dose arm A900 (aligned_double_hit +900), read as primary per the gate text, completed 256 games: mean 389,749 vs 386,545, paired delta +3,204 points (one-sided 95% bootstrap lower bound -26,860; Student-t -27,863; detection floor 30,957; paired sd 301,098), moves 112.55 vs 111.59 (+0.97), W-T-L 99-53-104, Q25 +18,534 (non-regression met), halves +48,762 and -42,354 (opposite signs: fail), coverage 598/28,814 = 2.08% (measured, not rarity). Predeclared mechanism directions were absent: cover reveals per move 1.1520 vs 1.1536, numbered clears per move 2.0541 vs 2.0551, occupancy 23.32 vs 23.22. Gate: FAIL. The term re-ranks about one decision in fifty at +900 and those re-rankings add no reveal flow; the score delta is a non-measurement for effects under about 31,000 points, but the flat flow statistics, whose paired noise is far smaller, reject the mechanism itself. The frozen arm is also the largest fresh-seed fair-D4 seven-stratum cohort on record: 386,545 points, 111.59 moves, 2.0551 clears and 1.1536 reveals per move over 256 never-read games, consistent with the 64-game 398,498 reference.
Technical recordLimitations recorded with the result
- A score null inside a 30,957-point floor is a non-measurement for effects below that size; the rejection rests on the flat flow statistics and the opposite-sign halves, not on the score delta.
- The preregistered primary dose (+300) could not be measured: it changed under 1% of decisions and was stopped by the rarity rule; the +900 dose was read as primary under the gate's own clause and is therefore a pass-or-fail at a dose chosen after a rarity null.
- The runner has no per-arm stop; the operator killed the four-arm run after the 32-game check and relaunched frozen + A900 on the same seeds (deterministic; the frozen arm reproduces stage-1 games exactly). Stage-1 partials are retained under stopped-at-32/.
- The corpus value gate for this term failed before this screen (RS-20260823T110000Z-baecb816) and was disclosed in the protocol; this result is the in-play test that the blind review asked for.
- Single cohort, public-development tier; not independently replicated.
- The frozen-arm fresh baseline is a by-product and has not been registered as a benchmark manifest.
The run was valid; the outcome was pass, at the public-development (a cohort for deciding what to try next, not confirmation) level. Of 2 preregistered checks, 2 passed and 0 failed.
C0 reanalysis (K2 program section 8 row 0): the paired per-game bound behind the +79,115 head start is now printed, and it clears zero. On the 64 shared seeds 0xa51d1000-0xa51d103f, depth 3 with seven disc strata and six reveal samples (fair leaf, finding-16) scores 376,442 against fair depth 4 at five strata's 297,327 (finding-05): paired +79,115, one-sided 95% percentile bootstrap lower bound +29,033 (upper +129,722; 20,000 resamples, seed 0xb0071eaf), Student-t lower bound +27,548, W-T-L 35-0-29, halves +88,138 / +70,092, Q25 +34,872 (227,224 vs 192,352), median 322,859 vs 260,415, median paired delta +32,926, moves +22.30 (LB +8.67), paired sd 247,113, detection floor 50,813, at 3.27x the logical work per move (4,244,020 vs 1,296,034). Both gate bounds are positive, so the experiment passes and the theory is supported-as-tested at public-development tier. READ THE CAVEATS: the means and their difference were published before this gate was written, so this is a bound attached to a known sign on already-read development data, not a discovery; it is not promotable above this tier on this cohort. The delta is heavy-tailed: the five largest paired gains (seeds 0xa51d1012 +747,416, 0xa51d1020 +684,129, 0xa51d1008 +643,799, 0xa51d1001 +643,344, 0xa51d1033 +558,163) carry 64.7% of the summed delta, the sixteen largest carry 134% (the remaining 48 games net negative), and the worst loss is -332,950 (0xa51d103c); the minimum leave-one-out mean is still +68,507, so no single game is load-bearing, but against a detection floor of 50,813 the mean sits 1.56 floors above zero and the bootstrap lower bound only 0.57 floors above it. The flow statistics move with the score: numbered clears per move 2.0447 vs 1.9489, cover reveals per move 1.1423 vs 1.0697 (paired clears +53.9 per game, LB +21.1; reveals +31.8, LB +12.6), mean occupancy 23.49 vs 24.29. SECONDARY, not gated: against fair depth 4 at seven strata (398,498) the same arm is -22,056 with bounds (-92,005, +45,490), t lower bound -92,330, W-T-L 30-0-34, halves -27,121 / -16,991, Q25 +14,360, moves -5.20, at 0.86x the work; this reproduces finding-16's -22,056 point estimate exactly and its bootstrap lower bound to within 2,138 (finding-16 printed -89,867 from its own resampler; this run's pinned seed gives -92,005), and remains a wash. So the head start the K2 fallback route (c) stands on is real against D4 s5 but the same arm does not separate from D4 s7, which is the stronger comparator and the one the program's end state must beat on the strength-cost frontier.
Technical recordLimitations recorded with the result
- Bound computation on already-read development data whose means and sign were published (finding-16, finding-05) before the gate was written; diagnostic, not promotable above public-development on this cohort. A fresh-development replication under a new protocol is required before the +79k is used as anything but a planning prior.
- The two arms were played in different runs (RUN-20260821T035407Z-00483c6c for D3 N7M6; the finding-05 fresh-s5 arm) by different binaries (factored-chance-fair-search vs parameterized-fair-search); the seed lists, move cap, terminal utility and scoring are identical but the pairing is across builds, not within one runner invocation. Engine parity between these families was established separately (finding-09/16 checks; finding-15 engine control), not re-run here.
- Heavy tail: five games carry 64.7% of the summed delta; the bootstrap lower bound sits 0.57 detection floors above zero. 64 games cannot resolve anything below about 50,800.
- The arm does not separate from D4 s7 (-22,056, bounds -92,005 to +45,490), so 'beats D4 s5' does not transfer to 'beats the current best fair comparator'.
- The wrapper pinned at freeze failed to import (module-name collision) and was amended before any output existed; the amendment changed no statistic. The first pinned wrapper hash is retained in expectedArtifacts and the amended hash in amendments.
Agent contextSource files, operational notes and how to reproduce
Directory: approaches/lifetime-objective/chain-reveal-leaf