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 0xa51d1000–0xa51d103f,
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:
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:
- 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.
- 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. - 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 referencecfpi::detail::resolveCascadeSampled): poppers are marked first, then every covered cell counts its orthogonal neighbours in the pre-clear popping set;hits_neededis 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)
- 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. - 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".
- 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.
- 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.hpp—resolveCascadeFastcover scan;docs/exploratory/audit-01-engine-fidelity.mdM2 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.
| arm | depth | N | M | joint coverage | games | mean | median | moves | clears/mv | reveals/mv | occupied | work/move |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| d3 N=7 M=1 | 3 | 7 | 1 | 14.3% | 64 | 312,327 | 267,279 | 92.27 | 1.9849 | 1.1001 | 23.88 | 156,834 |
| d3 N=7 M=3 | 3 | 7 | 3 | 42.9% | 64 | 337,306 | 285,023 | 98.70 | 2.0033 | 1.1111 | 23.81 | 1,045,719 |
| d3 N=7 M=6 | 3 | 7 | 6 | 85.7% | 64 | 376,442 | 322,859 | 109.45 | 2.0447 | 1.1423 | 23.49 | 4,244,020 |
| d3 N=7 M=12 | 3 | 7 | 12 | 100% | 64 | 349,345 | 258,855 | 101.92 | 2.0231 | 1.1309 | 23.39 | 13,506,434 |
| d4 N=7 M=1 (comparator) | 4 | 7 | 1 | 14.3% | 64 | 398,498 | 344,630 | 114.66 | 2.0571 | 1.1549 | 23.15 | 4,956,614 |
| d4 N=7 M=2 (new) | 4 | 7 | 2 | 28.6% | 64 | 356,548 | 305,167 | 103.64 | 2.0306 | 1.1358 | 23.35 | 20,178,327 |
| d4 N=5 M=1 (frozen reference) | 4 | 5 | 1 | 14.3% | 64 | 297,327 | 260,415 | 87.16 | 1.9489 | 1.0697 | 24.29 | 1,296,034 |
Paired whole-game deltas, one-sided 95% percentile bootstrap over whole games,
20,000 resamples, seed 0xb0075eed:
| comparison | n | Δ score | 95% lower | 95% upper | Δ moves | W-T-L | work ratio |
|---|---|---|---|---|---|---|---|
| d4 M=2 − d4 M=1 | 64 | −41,950 | −100,137 | +17,541 | −11.02 | 28-0-36 | 4.07× |
| d4 M=2 − d4 N=5 M=1 | 64 | +59,221 | +9,134 | +111,812 | +16.48 | 37-0-27 | 15.57× |
| d4 M=2 − d3 M=6 | 64 | −19,894 | −76,456 | +36,846 | −5.81 | 37-0-27 | 4.75× |
| d3 M=6 − d4 M=1 | 64 | −22,056 | −89,867 | +46,009 | −5.20 | 30-0-34 | 0.86× |
| d3 M=3 − d3 M=1 | 64 | +24,980 | −23,451 | +73,442 | +6.44 | 32-0-32 | 6.67× |
| d3 M=6 − d3 M=1 | 64 | +64,116 | +7,475 | +121,776 | +17.19 | 36-0-28 | 27.06× |
| d3 M=12 − d3 M=6 | 64 | −27,097 | −83,807 | +31,209 | −7.53 | 28-0-36 | 3.18× |
| d3 M=12 − d3 M=1 | 64 | +37,019 | −25,076 | +102,426 | +9.66 | 30-0-34 | 86.1× |
| d3 M=12 − d4 M=1 | 64 | −49,153 | −125,029 | +27,828 | −12.73 | 22-0-42 | 2.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 0xa51d1000–0xa51d101f and
−72,818 on 0xa51d1020–0xa51d103f — 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 arm | joint coverage | mean score | moves | clears/mv | reveals/mv | occupied |
|---|---|---|---|---|---|---|
| N=7, M=1 | 14.3% | 312,327 | 92.27 | 1.9849 | 1.1001 | 23.88 |
| N=7, M=3 | 42.9% | 337,306 | 98.70 | 2.0033 | 1.1111 | 23.81 |
| N=7, M=6 | 85.7% | 376,442 | 109.45 | 2.0447 | 1.1423 | 23.49 |
| N=7, M=12 | 100.0% | 349,345 | 101.92 | 2.0231 | 1.1309 | 23.39 |
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.
| Series | joint (disc, reveal) coverage | mean score | Bounds | n | Source |
|---|---|---|---|---|---|
| depth 3, N=7 | 14.3 M=1 | 312,327 points | — | 64 | RS-20260821T192140Z-189fe392 metrics.jointCoverageByM.M1 / metrics.ladderD3N7.M1 |
| depth 3, N=7 | 42.9 M=3 | 337,306 points | — | 64 | RS-20260821T192140Z-189fe392 metrics.jointCoverageByM.M3 / metrics.ladderD3N7.M3 |
| depth 3, N=7 | 85.7 M=6 | 376,442 points | — | 64 | RS-20260821T192140Z-189fe392 metrics.jointCoverageByM.M6 / metrics.ladderD3N7.M6 |
| depth 3, N=7 | 100 M=12 (full joint coverage) | 349,345 points | — | 64 | RS-20260821T192140Z-189fe392 metrics.jointCoverageByM.M12 / metrics.ladderD3N7.M12 |
| depth 4, N=7 | 14.3 M=1 (fair D4 reference) | 398,498 points | — | 64 | RS-20260821T192140Z-189fe392 summary comparator mean; finding-15 section 8.3 |
| depth 4, N=7 | 28.6 M=2 | 356,548 points | — | 64 | RS-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:
- 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.
- 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
wallSecondsdiffering, and the pooled bound diagnostics match exactly (5,750 decisions, 0 below target depth, 0 work-limit events,maxDecisionWork85,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 = 1decision-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.
STANDARDtier, 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.shbefore 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.