Drop7 Research
← Docs
docs/exploratory/finding-16-factored-reveal-sampling.md

Finding 16 — The two axes do not compound: the arms finding-09 left open

Status: exploratory, both arms complete at 64/64. Run validity valid, evidence tier development. Valid negative on the compounding question, and a saturation result on the reveal ladder. Updated 2026-08-21 after the depth-3 twelve-sample arm finished; the sections below carry the completed figures throughout. The earlier partial-arm numbers live in the superseded result record named below and should not be quoted. Namespace: approaches/lifetime-objective/reveal-sampling, run runs/RUN-A525-reveal/, build build/reveal-sampling/. Cohort: the fixed shared evaluation cohort 0xa51d10000xa51d103f, 64 games, 2,000-move cap, corrected 17,000-point Hardcore scoring. Already-read development data, permanently. Records: theory TH-20260821-factored-chance-depth-compounding-aca01725, experiment EX-20260821-reveal-sampling-unfinished-arms-470677b5, result RS-20260821T192140Z-189fe392, which supersedes the partial-arm record RS-20260821T181918Z-ea7076a3 (left unedited as committed history), runs RUN-20260821T035407Z-00483c6c and RUN-20260821T143541Z-2b35eaaf. Machine profile MACH-20260820T080056Z-376ada90.

Why this exists

finding-09 found and fixed a real defect: the fair search drew "which disc comes next" and "what the covered discs turn out to be" from the same sample counter, so with seven samples it saw seven of the 49 joint outcomes and those seven were perfectly correlated. Factoring the chance node into --disc-samples N × --reveal-samples M and raising M from one to six at depth 3 was worth +64,116 points [95% lower bound +7,475].

What the M parameter actually does inside a look-ahead, drawn:

Reveal sampling: averaging the hidden value a gray reveals Parameter diagram: what the reveal-sample count M does in the factored fair Drop7 search. Panel 1: the reveal event — during a cascade a hit lands on a covered gray; a solid gray needs 2 hits in one wave to reveal, a first hit only cracks it, and a cracked gray needs 1 more hit; when it reveals, the engine draws its value at reveal time. Panel 2: the chance node is factored into N disc strata times M reveal samples; M=1 continues the stratum with a single drawn value, M=6 averages six continuations drawn with common random numbers — the same draws reused for every sibling column. Panel 3: why this can change which column looks best — under M=1 one lucky draw can make the wrong column look best, while the six-draw average prices the reveal rather than the draw, and the ranking can flip. Measured, the M=6 reveal quadrature genuinely changes within-root move orderings (hover popovers, citing RS-20260823T225753Z-0fbd48c3). Sources: docs/exploratory/finding-16-factored-reveal-sampling.md, docs/exploratory/finding-09-reveal-sampling.md, research/results/RS-20260823T225753Z-0fbd48c3.json, approaches/lifetime-objective/fast-engine/fast-engine.hpp resolveCascadeFast. Panels are schematic; no board position is drawn. Measured numbers appear only inside hover popovers. Reveal sampling: averaging the hidden value a gray reveals a covered gray cracks during a cascade and its value is drawn at reveal time — M is how many of those draws the search averages the reveal event 3 ? 1 2 3 4 5 6 7 when it reveals, the value is drawn at reveal time — the search must average over it solid gray: 2 hits in one wave → reveal 1 hit cracks · cracked + 1 hit → reveal value drawn at reveal time (resolveCascadeFast) the factored chance node: N disc strata × M reveal samples one stratum shown: next disc = 4, column c — the cascade reveals a gray M = 1 ? v₁ one continuation estimate = s(v₁) M = 6 ? ? ? ? ? ? v₁ … v₆ six continuations = (1/6) · Σ s(vᵢ) CRN: the same draws v₁…v₆ are reused for every sibling column — columns are compared on identical luck, not on who drew well why this can change which column looks best M = 1 — one draw each looks best col 3 col 5 average the draws: the ranking can flip M = 6 — six-draw average looks best col 3 col 5 one lucky draw can make the wrong column look best; the six-draw average prices the reveal, not the draw. (bars illustrative) M = 1 prices a column on one draw of the hidden value; M = 6 on the average of six CRN-matched draws. chance node = N disc strata × M reveal samples (finding-09) · the reveal axis saturates at M ≈ 6 (finding-16) · value drawn at reveal time measured: the M = 6 quadrature genuinely changes within-root move orderings (RS-20260823T225753Z-0fbd48c3) The reveal event — engine ruleiEach cascade wave: poppers are marked, then covered cells countorthogonal neighbours in the pre-clear popping set. Solid gray:2 hits in one wave to reveal; 1 hit cracks it; cracked + 1 hitreveals. The revealed value is drawn at reveal time (audit-01 M2).source: fast-engine.hpp, resolveCascadeFast cover scan M = 1 — a single drawiM = 1 continues the stratum with one drawn reveal value. Finding-09found the unfactored search drew the next disc and the reveal fromthe same sample counter: with seven samples it saw 7 of the 49 joint(disc, reveal) atoms, perfectly correlated. Factoring into N × M andraising M is the fix. source: finding-09 / finding-16 M = 6 — six CRN drawsiM = 6 averages six reveal draws per disc stratum — 42 of the 49joint atoms (85.7%). At depth 3 this beat M = 1 by +64,116 points[95% lower bound +7,475] (finding-09). The axis saturates: M = 12(100% coverage) buys nothing measurable, −27,097 [−83,807, +31,209](finding-16). Read M = 6 as a local optimum, not “more is better”. Measured: orderings genuinely changeiRS-20260823T225753Z-0fbd48c3 (rung-2 guardrail, 6 CRN-matched roots,exact replay verified): the M = 1 search (fast-d3s7) vs the M = 6search (native D3 N7M6) — within-root move orderings (KM lifetime)agree at mean Kendall τ 0.370 (LB95 0.283, min 0.053), top-1 only4/6, worst at late-game roots: the M = 6 quadrature genuinely changeswhich column looks best. Why CRN mattersiCommon random numbers: the same drawn tapes are reused across allsibling columns, so columns are compared on identical luck — theranking reflects the position, not who happened to draw well. Therung-2 guardrail used CRN-matched roots with exact replay verified(RS-20260823T225753Z-0fbd48c3).
A covered gray disc has no value until the engine reveals it, so a search whose imagined cascade cracks one must guess the draw — M is how many guesses it averages, and averaging more can change which column looks best.
Source

diagram-reveal-sampling.svg — source and reading guide

Parameter diagram for the reveal-sample count M, written for the research console. Hand-written, self-contained SVG. The panels are schematic: no board position is drawn, and the bar heights in panel 3 are illustrative. All measured numbers (the +64,116 M=6 result, the M=12 saturation interval, the rung-2 Kendall τ and top-1 agreement) appear only inside hover popovers, with their records cited — including RS-20260823T225753Z-0fbd48c3, cited again in the caption strip and below.

What it explains

What a reveal sample is, and why averaging several of them can change which column looks best:

  1. The reveal event. During a cascade, hits land on covered grays. A solid gray needs 2 hits in one wave-scan to reveal; a first hit only cracks it, and a cracked gray needs 1 more hit. When a gray reveals, the engine draws its value at reveal time — so a search that continues through a reveal must average over that draw.
  2. The factored chance node. Finding-09 factored the chance node into --disc-samples N × --reveal-samples M, after finding that the unfactored search drew the next disc and the reveal from the same sample counter (with seven samples it saw 7 of the 49 joint (disc, reveal) atoms, perfectly correlated). M = 1 continues each disc stratum with a single drawn reveal value; M = 6 averages six continuations drawn with common random numbers — the same six draws reused for every sibling column, so columns are compared on identical luck.
  3. Why the ranking can flip. Under M = 1, one lucky or unlucky draw is the whole estimate of a column's continuation, so the wrong column can look best. The six-draw average prices the reveal rather than the draw, and the ordering can change. This is measured, not hypothetical — see below.

Facts used in the diagram

  • Engine rule (approaches/lifetime-objective/fast-engine/fast-engine.hpp, resolveCascadeFast, statement order per the reference cfpi::detail::resolveCascadeSampled): poppers are marked first, then every covered cell counts its orthogonal neighbours in the pre-clear popping set; hits_needed is 2 for a solid gray and 1 for a cracked one. The revealed value is drawn at reveal time (audit-01 M2).
  • docs/exploratory/finding-16-factored-reveal-sampling.md, quoting finding-09: factoring the chance node and raising M from 1 to 6 at depth 3 was worth +64,116 points [95% lower bound +7,475]. Joint (disc, reveal) coverage runs 14.3% (M=1) → 42.9% (M=3) → 85.7% (M=6) → 100% (M=12), and the axis saturates at M ≈ 6: M=12 buys nothing measurable (−27,097 [−83,807, +31,209]). Read M = 6 as a local optimum, not "more is better".
  • research/results/RS-20260823T225753Z-0fbd48c3.json (P-SOL-2 stage G0, rung-2 guardrail): on 6 CRN-matched roots with exact replay verified, the M = 1 search (fast-d3s7) and the M = 6 search (native D3 N7M6) agree on within-root move orderings (KM lifetime) at only mean Kendall τ 0.370 (LB95 0.283, min 0.053), top-1 4/6, worst at late-game roots. The record's own consequence: "the M=6 reveal quadrature genuinely changes within-root orderings, so an M=1 continuation corpus cannot carry D3 N7M6 label semantics." That is the direct evidence that M changes which column looks best.

Element-by-element

  • Panel 1 (the reveal event): a popping numbered disc hits a solid gray (danger arrow); the gray cracks (crack mark); a later hit reveals it, and the value fans out into the seven possible draws. Engine-rule footnotes below.
  • Panel 2 (the factored chance node): one disc stratum shown (next disc = 4, candidate column c, its cascade reveals a gray). M = 1: one dashed "?" draw v₁ → one continuation → estimate s(v₁). M = 6: six draws v₁…v₆ → six continuations → estimate (1/6)·Σ s(vᵢ). The CRN note states the identical-luck property.
  • Panel 3 (the ranking can flip): two illustrative bar pairs. Under M = 1 column 3's single draw scores above column 5's; under the M = 6 average column 5 scores above column 3. Bars are labelled illustrative; the measured ordering change is in the popover.
  • Caption strip: the one-sentence claim, the factoring/saturation pointers, and the RS-20260823T225753Z-0fbd48c3 citation.
  • Popovers: the engine cover rule; M = 1 and the finding-09 correlation defect; M = 6 with the +64,116 result and the M = 12 saturation interval; the rung-2 τ / top-1 measurement; why CRN matters.

Simplifications (stated explicitly)

  1. Panel 1 is a schematic flow, not a board position — no grid is drawn, so the engine's board-orientation convention does not apply. The crack-mark and cover-fill glyphs match diagram-two-hit-reveal.svg.
  2. The seven tiny discs represent the draw's support (uniform on 1–7 in this simulator — the 49 joint atoms of finding-09 are 7 disc values × 7 reveal values); the diagram does not assert where in the engine the distribution is defined beyond "drawn at reveal time".
  3. Panel 3's bars are illustrative. They show the mechanism (one draw vs an average), not measured scores; the measured ordering change is the rung-2 guardrail quoted in the popover.
  4. CRN is described by its property (same tapes across siblings, exact replay), matching how RS-20260823T225753Z-0fbd48c3 uses the term; the diagram does not specify the tape layout.

Sources

  • docs/exploratory/finding-16-factored-reveal-sampling.md — the factored chance node, the M ladder, saturation at M ≈ 6.
  • docs/exploratory/finding-09-reveal-sampling.md (quoted via finding-16) — the shared-counter defect and the +64,116 M=6 result.
  • research/results/RS-20260823T225753Z-0fbd48c3.json — the M=6 quadrature genuinely changes within-root orderings (mean τ 0.370, top-1 4/6, 6 CRN-matched roots, exact replay verified).
  • approaches/lifetime-objective/fast-engine/fast-engine.hppresolveCascadeFast cover scan; docs/exploratory/audit-01-engine-fidelity.md M2 for draw-at-reveal-time.
  • Companion diagram: diagram-chance-strata.svg (the N knob).

Conventions

Same as the other diagrams in this directory: viewBox="0 0 760 540", width="100%", theme-aware CSS variables with light fallbacks, the shared <style> block, fig-pt/fig-pop pure-SVG hover/focus popovers with tabindex="0", <title>/<desc> with sources, marker IDs namespaced rs-. 18.0 KB, under the 30 KB budget.

Source: web/content/figures/diagrams/diagram-reveal-sampling.source.md

It closed with two named open arms and one explicit question:

Still open: whether the two axes compound when used together. The arm that would answer it was killed by the runtime and never produced a game.

Those two arms are what this document reports. Both were relaunched by approaches/lifetime-objective/reveal-sampling/run-arms.sh as four sequential 16-game chunks over consecutive blocks of the shared cohort, precisely so that a runtime kill costs one chunk instead of an arm.

The answer: they substitute

Depth 4 with two reveal samples is not better than depth 4 with one. It is worse by a point estimate of 41,950 for 4.07× the logical work, and the 95% bootstrap lower bound is far below zero.

armdepthNMjoint coveragegamesmeanmedianmovesclears/mvreveals/mvoccupiedwork/move
d3 N=7 M=137114.3%64312,327267,27992.271.98491.100123.88156,834
d3 N=7 M=337342.9%64337,306285,02398.702.00331.111123.811,045,719
d3 N=7 M=637685.7%64376,442322,859109.452.04471.142323.494,244,020
d3 N=7 M=123712100%64349,345258,855101.922.02311.130923.3913,506,434
d4 N=7 M=1 (comparator)47114.3%64398,498344,630114.662.05711.154923.154,956,614
d4 N=7 M=2 (new)47228.6%64356,548305,167103.642.03061.135823.3520,178,327
d4 N=5 M=1 (frozen reference)45114.3%64297,327260,41587.161.94891.069724.291,296,034

Paired whole-game deltas, one-sided 95% percentile bootstrap over whole games, 20,000 resamples, seed 0xb0075eed:

comparisonnΔ score95% lower95% upperΔ movesW-T-Lwork ratio
d4 M=2 − d4 M=164−41,950−100,137+17,541−11.0228-0-364.07×
d4 M=2 − d4 N=5 M=164+59,221+9,134+111,812+16.4837-0-2715.57×
d4 M=2 − d3 M=664−19,894−76,456+36,846−5.8137-0-274.75×
d3 M=6 − d4 M=164−22,056−89,867+46,009−5.2030-0-340.86×
d3 M=3 − d3 M=164+24,980−23,451+73,442+6.4432-0-326.67×
d3 M=6 − d3 M=164+64,116+7,475+121,776+17.1936-0-2827.06×
d3 M=12 − d3 M=664−27,097−83,807+31,209−7.5328-0-363.18×
d3 M=12 − d3 M=164+37,019−25,076+102,426+9.6630-0-3486.1×
d3 M=12 − d4 M=164−49,153−125,029+27,828−12.7322-0-422.73×

Not one row in that table clears zero in the negative direction. Every negative result here is "buys nothing measurable", never "harms"; the upper bound column is what makes that readable at a glance.

Four things deserve to be read carefully.

1. The compounding hypothesis is rejected at the dose tested, and the dose matters. Two reveal samples raises joint (disc, reveal) coverage from 14.3% to 28.6%. That is a smaller step than the one that first cleared noise at depth 3 — six samples, 85.7% — and at depth 3 the intermediate 42.9% dose was itself not significant (+24,980 [−23,451]). The supported claim is: a doubling of reveal samples on top of the fourth ply buys nothing measurable and costs 4.07× the work. It is not "reveal sampling fails at depth 4"; the wide depth-4 arm that would test that was never affordable. What the arm does establish is that the four-ply search is not starved for what the extra samples supply — if it were, the first increment would have shown something, as the first increment did at depth 3 in the direction of the effect if not its significance.

2. The delta is negative but not significantly negative. The same estimator puts the one-sided 95% upper bound at +17,541. Read it as "buys nothing measurable", not as "harms". Had the two axes compounded even at a quarter of the +64,116 the same knob is worth at depth 3, 64 paired games would have had to show it. The sign is also stable across both cohort halves — −11,082 on seeds 0xa51d10000xa51d101f and −72,818 on 0xa51d10200xa51d103f — so this is not one half of the cohort carrying the result.

3. The gain that is there comes from the disc samples, not the reveal samples. Against the frozen five-stratum reference, d4 M=2 is +59,221 [+9,134], 37-0-27. Every bit of that is the seven disc samples: on this cohort the paired depth-4 seven-stratum minus depth-4 five-stratum contrast, computed from finding-05's own retained arms, is +101,171 [+47,447], 41-0-23. Adding the reveal samples took 41,950 points back off.

4. The near-equal-work equivalence is the real finding. Depth 3 with six reveal samples spends 4,244,020 work per move and scores 376,442. Depth 4 with one reveal sample spends 4,956,614 and scores 398,498. Their paired delta is −22,056 [−89,867], 30-0-34 — indistinguishable. Two entirely different ways of spending about the same budget land in the same place. Then paying for both at once (d4 M=2, 20,178,327 work per move, 4.75× the d3 M=6 arm) buys −19,894 [−76,456] against the cheaper of them. The budget is what is binding, not which axis it is spent on.

The reveal axis saturates at M ≈ 6

finding-09's attribution was specific and falsifiable: strength tracks the fraction of the chance node's joint atoms that receive weight, and 14.3% → 42.9% → 85.7% ordered with score, moves, clears, reveals and (downward) occupancy in lockstep. The obvious test is the arm that takes coverage to 100%. It is now complete at 64 games, and the curve turns over one step before full coverage:

depth-3 armjoint coveragemean scoremovesclears/mvreveals/mvoccupied
N=7, M=114.3%312,32792.271.98491.100123.88
N=7, M=342.9%337,30698.702.00331.111123.81
N=7, M=685.7%376,442109.452.04471.142323.49
N=7, M=12100.0%349,345101.922.02311.130923.39
Reveal-sample ladder: mean score against joint (disc, reveal) coverage — saturation at M about 6 Reveal-sample ladder: mean score against joint (disc, reveal) coverage — saturation at M about 6. Cohort 0xa51d1000-0xa51d103f, n=64 per arm, corrected 17,000-point Hardcore scoring, all from RS-20260821T192140Z-189fe392 (valid, fail/not-supported-as-tested for the compounding theory). Coverage values are metrics.jointCoverageByM (0.143 / 0.286 / 0.429 / 0.857 / 1.0) expressed in percent. The M=6 to M=12 step is -27,097 with interval (-83,807, +31,209), W-T-L 28-0-36: saturation, not regression (metrics.pairedD3M12MinusD3M6). Score, moves, numbered clears and covered reveals all peak at M=6; only mean occupancy improves monotonically to 100% coverage (finding-16). The depth-4 series tested only M=1 and M=2 (28.6% coverage); the wide depth-4 arm was never affordable. The d4 M=1 comparator mean (398,498) is quoted in the record's summary and recorded in finding-15 section 8.3. Evidence tier: public-development. Sources: RS-20260821T192140Z-189fe392. Reveal-sample ladder: mean score against joint (disc, reveal) coverage —saturation at M about 6300,000320,000340,000360,000380,000400,00014.328.642.985.7100mean score (points)joint (disc, reveal) coverage (%)depth 3, N=7, joint (disc, reveal) coverage 14.3 | M=1 | mean score: 312,327 points | n = 64 games | source: RS-20260821T192140Z-189fe392 · | metrics.jointCoverageByM.M1 / metrics.ladderD3N7.M1depth 3, N=7, joint (disc, reveal) coverage 14.3M=1mean score: 312,327 pointsn = 64 gamessource: RS-20260821T192140Z-189fe392 ·metrics.jointCoverageByM.M1 / metrics.ladderD3N7.M1depth 3, N=7, joint (disc, reveal) coverage 42.9 | M=3 | mean score: 337,306 points | n = 64 games | source: RS-20260821T192140Z-189fe392 · | metrics.jointCoverageByM.M3 / metrics.ladderD3N7.M3depth 3, N=7, joint (disc, reveal) coverage 42.9M=3mean score: 337,306 pointsn = 64 gamessource: RS-20260821T192140Z-189fe392 ·metrics.jointCoverageByM.M3 / metrics.ladderD3N7.M3depth 3, N=7, joint (disc, reveal) coverage 85.7 | M=6 | mean score: 376,442 points | n = 64 games | source: RS-20260821T192140Z-189fe392 · | metrics.jointCoverageByM.M6 / metrics.ladderD3N7.M6depth 3, N=7, joint (disc, reveal) coverage 85.7M=6mean score: 376,442 pointsn = 64 gamessource: RS-20260821T192140Z-189fe392 ·metrics.jointCoverageByM.M6 / metrics.ladderD3N7.M6depth 3, N=7, joint (disc, reveal) coverage 100 | M=12 (full joint coverage) | mean score: 349,345 points | n = 64 games | source: RS-20260821T192140Z-189fe392 · | metrics.jointCoverageByM.M12 / metrics.ladderD3N7.M12depth 3, N=7, joint (disc, reveal) coverage 100M=12 (full joint coverage)mean score: 349,345 pointsn = 64 gamessource: RS-20260821T192140Z-189fe392 ·metrics.jointCoverageByM.M12 / metrics.ladderD3N7.M12depth 4, N=7, joint (disc, reveal) coverage 14.3 | M=1 (fair D4 reference) | mean score: 398,498 points | n = 64 games | source: RS-20260821T192140Z-189fe392 · summary comparator mean; | finding-15 section 8.3depth 4, N=7, joint (disc, reveal) coverage 14.3M=1 (fair D4 reference)mean score: 398,498 pointsn = 64 gamessource: RS-20260821T192140Z-189fe392 · summary comparator mean;finding-15 section 8.3depth 4, N=7, joint (disc, reveal) coverage 28.6 | M=2 | mean score: 356,548 points | n = 64 games | source: RS-20260821T192140Z-189fe392 · | metrics.jointCoverageByM.M2 / metrics.d4N7M2MeanScoredepth 4, N=7, joint (disc, reveal) coverage 28.6M=2mean score: 356,548 pointsn = 64 gamessource: RS-20260821T192140Z-189fe392 ·metrics.jointCoverageByM.M2 / metrics.d4N7M2MeanScoredepth 3, N=7depth 4, N=7
The table as a curve: mean score against joint (disc, reveal) coverage. The turnover one step before full coverage is the finding; the M=6 to M=12 step is saturation, not regression.
Source data

Cohort 0xa51d1000-0xa51d103f, n=64 per arm, corrected 17,000-point Hardcore scoring, all from RS-20260821T192140Z-189fe392 (valid, fail/not-supported-as-tested for the compounding theory). Coverage values are metrics.jointCoverageByM (0.143 / 0.286 / 0.429 / 0.857 / 1.0) expressed in percent. The M=6 to M=12 step is -27,097 with interval (-83,807, +31,209), W-T-L 28-0-36: saturation, not regression (metrics.pairedD3M12MinusD3M6). Score, moves, numbered clears and covered reveals all peak at M=6; only mean occupancy improves monotonically to 100% coverage (finding-16). The depth-4 series tested only M=1 and M=2 (28.6% coverage); the wide depth-4 arm was never affordable. The d4 M=1 comparator mean (398,498) is quoted in the record's summary and recorded in finding-15 section 8.3. Evidence tier: public-development.

Seriesjoint (disc, reveal) coveragemean scoreBoundsnSource
depth 3, N=714.3 M=1312,327 points64RS-20260821T192140Z-189fe392 metrics.jointCoverageByM.M1 / metrics.ladderD3N7.M1
depth 3, N=742.9 M=3337,306 points64RS-20260821T192140Z-189fe392 metrics.jointCoverageByM.M3 / metrics.ladderD3N7.M3
depth 3, N=785.7 M=6376,442 points64RS-20260821T192140Z-189fe392 metrics.jointCoverageByM.M6 / metrics.ladderD3N7.M6
depth 3, N=7100 M=12 (full joint coverage)349,345 points64RS-20260821T192140Z-189fe392 metrics.jointCoverageByM.M12 / metrics.ladderD3N7.M12
depth 4, N=714.3 M=1 (fair D4 reference)398,498 points64RS-20260821T192140Z-189fe392 summary comparator mean; finding-15 section 8.3
depth 4, N=728.6 M=2356,548 points64RS-20260821T192140Z-189fe392 metrics.jointCoverageByM.M2 / metrics.d4N7M2MeanScore

Spec: web/content/figures/reveal-ladder-saturation.json · 1 source record

Say this as saturation, not as regression. The M=6 → M=12 step is −27,097 with an interval of (−83,807, +31,209) and 28-0-36: it does not clear zero in either direction. The data are consistent with the curve being flat from M = 6 onward, and are not consistent with it continuing to climb at the rate M = 1 → 6 showed. The strongest defensible statement is that the reveal axis is exhausted by M ≈ 6, and filling the last of the joint grid buys at most +31k and plausibly nothing — for 3.18× the work.

Score, moves, numbered clears and covered reveals all peak at M = 6. Only mean occupancy improves monotonically across all four points (23.88 → 23.81 → 23.49 → 23.39), which makes it the one quantity that tracks coverage the whole way — an odd survivor, and not enough on its own to rescue the coverage story.

What this does and does not do to finding-09

finding-09's headline result stands: M = 6 beats M = 1 by +64,116 with a lower bound of +7,475, and that is its own paired test on its own 64 games, untouched by anything here. Two of its supporting arguments are weakened:

  1. The dose-response is no longer monotone. §5 read the ordering of five quantities across three settings as corroboration that the effect was mechanical rather than noise. Add the fourth point and four of those five quantities reverse. The endpoint test still carries the result; the monotone-ladder argument no longer adds to it.
  2. The joint-coverage attribution fails at its own best-case endpoint. §2 predicted strength should track the (disc, reveal) joint column. It does over M ∈ {1, 3, 6} and then stops exactly at 100%, which is where that mechanism predicts the maximum.

The practical revision: §5 should be read as "M = 6 is a local optimum", not "more M is better". finding-09's own Continuation §16 works through the three readings that remain consistent with the data — redundant last atoms, variance reduction rather than coverage as such, or 64 games simply being unable to resolve steps this size — and this experiment does not separate them. That analysis is not repeated here; read it there.

It is also consistent with finding-09's own caveat that the reveal-by-reveal joint barely moves with M (14.3% → 26.2%): once the disc-by-reveal correlation is broken, the remaining correlation is one this knob cannot reach.

What was checked before any of this was believed

  • Pooling validity — the control every cohort in this family rests on. Each arm is four 16-game chunks over consecutive seed blocks, because the artifact is only serialized when a whole cohort finishes and the previous attempt at d4 (7,2) was killed after an hour with nothing written. Whole games are the statistical unit and each game is a deterministic function of its seed and the policy, so a pooled 64-game cohort should be the same object as a single 64-game run. That was checked rather than assumed: depth 3 (N=5, M=1) run as four 16-game chunks at 1 thread reproduces the existing single 64-game 12-thread artifact field-for-field — 0 mismatches, summed logical work 312,966,881 on both sides, with only per-game wallSeconds differing, and the pooled bound diagnostics match exactly (5,750 decisions, 0 below target depth, 0 work-limit events, maxDecisionWork 85,085). Because the two sides used 1 and 12 threads, this is simultaneously a worker-count independence check. Details in finding-09's Continuation §12.
  • Pooling determinism. Two independent poolings of the same four chunks — the completing agent's and this session's — produce byte-identical artifacts for both arms.
  • Work bounds never bound. d4 N=7 M=2: 6,633 decisions, 0 below target depth, 0 work-limit events, minimum completed depth 4, busiest decision at 44% of its declared bound. d3 N=7 M=12: 6,523 decisions, 0 below target depth, 0 work-limit events, minimum completed depth 3, busiest at 47%. An arm that silently completed a shallower depth would be void, not negative — that is the failure mode this check exists for, and it did not happen.
  • 0 censored games and 0 score-decomposition identity failures in every arm.
  • The M = 1 decision-identity gates from finding-09 still hold: the factored search reproduces the frozen reference over 50 moves and the single-knob parameterized search's column and logical work over 30 moves, 0 mismatches.

Limitations

  • Supersession. An earlier result record assessed this experiment while the M=12 arm held 32 of 64 games, and reported that arm at 356,890 with a −4,495 delta against M=6. The completed 64-game figures are 349,345 and −27,097: same direction, about six times the magnitude, still inside noise. That record was already committed and is left byte-unchanged as history; quote RS-20260821T192140Z-189fe392, not its predecessor.
  • The depth-4 arm tested two reveal samples, not six. See point 1 above.
  • No adjacent step in the depth-3 M ladder is individually significant, so the whole M ≥ 3 region is consistent with a single plateau. The M=1 → M=6 endpoint test is what carries finding-09's positive result.
  • 64 paired games, score standard deviation 55–73% of the mean (the M=12 arm's is 254,059 on a mean of 349,345). Effects below roughly 60,000 points are invisible here.
  • Already-read development cohort. STANDARD tier, diagnostic only. Never a freeze gate, never confirmation evidence, and a fresh-block replication is owed before anything here is promoted.
  • The new arms auto-size their transposition cache from their branching factor (960,695 and 346,921 entries) while the recorded comparators declare 60,000. Capacity cannot change play — proven three ways in finding-15 §3 — but work per move is not comparable across capacities and each figure must be read with its capacity.
  • Not a timing-grade measurement: shared machine, one-minute load 12–63 throughout, and chunk 1 of the depth-4 arm ran at 8 threads rather than 12 after a deliberate load back-off. Scores, moves and logical work are deterministic and unaffected.
  • All artifacts live under runs/, which is gitignored. The content manifests under the run directories named in the result record are the durable reference.
  • The experiment record was written after the runs. The arms and their launch protocol were fixed in prose in finding-09 and in run-arms.sh before either produced a game, but this is retroactive registration and the experiment record's amendment says so.
  • Nothing here approaches the target. The best arm on this cohort still sustains 2.06 clears and 1.15 reveals per move against the 2.400 and 1.400 that indefinite survival requires, and every game ended.

What this changes

  • finding-09's headline stands and its interpretation gets sharper. "Depth and chance quality are exchangeable" was the cautious reading; the depth-4 arm now says they are exchangeable and not additive, which is a stronger and more useful statement. Together with finding-15 — where a fifth ply buys nothing at either stratum count — the picture is a budget frontier with a flat top near the fair-D4 operating point, reachable from either direction and not extended by pushing either axis further.
  • The reveal axis has a measured stopping point, M ≈ 6, and two of finding-09's supporting arguments — the monotone dose-response and the joint-coverage attribution — do not survive the fourth ladder point. Its headline does. See the saturation section above and finding-09's own Continuation §16 and §18.
  • The next experiment is not a wider chance node and not a deeper search. Both axes are measured and both are flat. The two mechanisms named in finding-15 §5 — the terminal utility's missing death-depth shaping, and the leaf's lack of calibration to lifetime — are one constant and one function, and they are what the flat top would look like if the objective, rather than the estimate of it, were the binding constraint.

Reproduce

./approaches/lifetime-objective/reveal-sampling/build.sh

# The arms (chunked, detached, load-aware).  Already run; this is the protocol.
./approaches/lifetime-objective/reveal-sampling/run-arms.sh arm1   # d4 N=7 M=2
./approaches/lifetime-objective/reveal-sampling/run-arms.sh arm2   # d3 N=7 M=12

# Everything in this document, idempotent and read-only apart from re-pooling:
./approaches/lifetime-objective/reveal-sampling/finish.sh

finish.sh re-pools whatever chunks exist, runs the pooling-validity control, and prints the cohort rows with their bound diagnostics and every paired delta with one-sided 95% bounds on both sides. It routes each arm by completeness rather than by hand: a full 64-game cohort joins the paired table, while an arm still in flight is compared on shared seeds only through stats.py partial, which prints its paired n on every row. A partial arm therefore cannot be misread as a 64-game result — which is exactly the mistake the superseded record above had to be written around.

For a walkthrough with board animations, start at how the game works and the concepts primer; every term is defined in the glossary.