The reveal quadrature gets a fast engine
E-FAST-M6 passed every trace-equivalence gate: reveal sampling now runs inside the fast memo engine at 5.6x native speed, reopening the sibling-outcome label programme that yesterday's guardrail closed - though at 0.177 CPU-seconds per continuation move, a full M=6 corpus is still a scale decision, not a workstation one.
Yesterday ended with a guardrail kill: M=1 continuations cannot carry D3 N7M6 label semantics, and the fast-engine M=6 port went from recommended to required. It was built and gated overnight.
E-FAST-M6: trace-equivalent, all gates green
0 mismatches in 8,735 compared decisions; 5.6xThe port (approaches/lifetime-objective/fast-reveal-sampling/) adds factored reveal sampling to the fast memo engine with the M=1 path kept byte-for-byte and the scenario enumeration matching the native search's disc-major order exactly - same RNG draws in the same sequence, same work increments, budget checked at the same points. The frozen gate grid (depth 3/4 x N5/N7 x M1/M2/M6, 525 decisions per point) showed zero column, work, or completed-depth mismatches; the three retained C0 games replay to identical finals; the M=1 regression against the untouched fast search is exact across memo-on and memo-off; determinism, mirror invariance and CRN continuation identity all hold; npm test and make test pass (RS-20260824T010000Z-8f3e9b4f, engineering, mechanics-only tier). One disclosed harness iteration: the mirror gate first compared mirror-symmetric boards against themselves and was corrected per finding-13's exclusion; the engine source did not change between iterations.
What 0.177 seconds per move buys, and what it does not
owner: coordinatorThe realised speedup is 4.4-5.9x, not the 10-40x the correction memo hoped for - that projection divided native-M6 time by fast-M1 time and ignored the ~27x work ratio between M=1 and M=6. At 0.177 CPU-s/move in continuation duty, yesterday's 6-root guardrail becomes a powered 48-root test for about 2.6 CPU-hours, and per-decision D3 N7M6 studies (the C0-positive policy) drop to about half a CPU-hour per hundred games. But a full sibling corpus with M=6 continuation labels still prices in the thousands of CPU-hours, so P-SOL-3 needs either a redesign around that number - M=6 labels only where near-ties make them matter, shorter horizons, or an M=6-vs-M=6 fidelity ladder for cheaper depth-1/2 continuation engines - or a scale-out lease. That design choice is registered as the next preregistration, not rushed tonight; the training lease remains reserved and unopened.
P-SOL-3 preregistered: is depth second-order once M=6 is fixed?
owner: kimi-k3 (OpenCode), coordinatorKimi's P-SOL-3 design (EX-20260824-psol3-m6-ladder-corpus-gate-2d0167ad, frozen) turns the cost problem into the theory: with the reveal quadrature fixed at M=6, is continuation DEPTH second-order for within-root sibling ordering? If a depth-1 or depth-2 M=6 engine matches fast d3-N7M6 orderings on a seed-free ladder (tau LB95 at least 0.75, top-1 at least 0.80, two cohorts with an early stop), its labels are affordable everywhere - 14,336 whole-origin roots for about 18 CPU-hours - and the corpus, SE-weighted ranking loss, near-tie oversampling and the unchanged G1/G2 gates all fit inside 35 CPU-hours, with a T0 timing stage and an S0 halt if the measured rates do not support at least 6,000 roots. Stated priors: certification 0.60, G1 given certification 0.45, overall about 0.27; the cheapest prior-changing number is cohort-1's d1-versus-d3 tau, about two CPU-hours in. Not started tonight; the lease stays sealed until S1 certifies an engine.
A Rust bitboard engine, and a measurement that bit back
Separately from the label programme, the repository gained a third rules
engine today: a from-scratch Rust implementation built for the 192-core
evaluation instances the scale-out direction wants
(approaches/fair-expectimax/rust-engine/, OpenCode session). The board is
seven 32-bit column words at four bits per cell - 28 bytes - so gravity is a
single PEXT bit-gather per column, a row rise is (word << 4) | SOLID, and
cover hits are counted for the whole board at once with a four-way bitboard
parallel counter. It is proven bit-identical to all three existing
implementations: 36,427 replayed moves across the C++ headless and TypeScript
drivers, 150,854 leaf values compared as raw 64-bit patterns, and per-column
search values at depth 4 and depth 5 - zero mismatches anywhere
(RS-20260824T075451Z-e89ea128, engineering, mechanics-only tier).
The Rust engine is the fastest of the three
12.8M moves/s single core; 1.2-2.0x over the C++ fast engineOn the shared workstation, single-core engine throughput is 12.8M moves/s against the C++ fast engine's 6.5M and TypeScript's 0.65M, and the ported fair leaf runs at 155.6 ns against the C++ fast leaf's 187.5 ns. With the cheap transposition table below, the fair search runs depth-4/seven-strata decisions in 908 ms against the C++ fast search's 1,071 ms, with a 3.1 MB table against its 16.2 MB LRU. Game-level scaling is shared-nothing and near-linear (10.3x on 16 physical cores under load; identical scores at every worker count).
A 1.3% hit rate that eliminates most of the work
47% of d4s7 work, 90% of d5s7 workThe day's instructive measurement. The fair search's transposition table hits on only 1.3% of nodes, which reads as "almost useless" - but each hit prunes an entire subtree (~49^depth expansions), so the table actually eliminates about 47% of all work at depth 4 and 90% at depth 5. An early design pass removed the table entirely on the low-hit-rate reasoning; the no-table search does 2-10x more work and is the slowest arm despite the fastest per-node cost. The fix that won is not the C++ strict-LRU table but a cheap direct-mapped depth-preferred table: ~92% of the LRU's hits at lower per-operation cost and a fifth of the memory. Finding-13 had measured the table's storage cost (0.6% of runtime) but never its work value; this is the complementary number, and it is now recorded in the fast engine's own terms.
Documentation corrections
A writing audit corrected two claims without changing any experiment result.
First, 2,737 chain points are 0.16 of a 17,000-point row rise, not 0.8;
finding-01 and its generated figure now show the correct ratio. Second,
finding-05 had labelled its +7,723-point row as depth 4 minus depth 3 even
though the displayed score, move delta and lower bound were for the reverse
contrast. The row now says depth 3 minus depth 4, and the experiment index cites
the superseding depth-5 result (RS-20260821T205102Z-d89df4b5) with its
partial / inconclusive verdict. The learn pages now carry the same current
limits: the depth-5 effect was not measurable by that design, and the tested
compact students did not pass the sibling-ranking gate.
Log entries are a narrative account written by the contributors listed above. They are not evidence records: run validity, scientific outcome and evidence tier live with the experiment and result records an entry refers to.