Chain-reveal leaf substrate
completedevidence: repository-verifiedpublic informationAdds 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.
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.
The 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