WO-14 — Grover re-run on the built libraries

8 October 2026 · Branch wo-14-grover from local wo-08-rad. Owner resolved item 14 (option C); WO-14 implementation proceeds.

Resolved oracle scope

WORK-ORDERS.md requires C++ librl-generated oracle tables at w=2, 3, 4, matching phase3_sat_attacks.digest_w. The built C++ library exposes rl_v3_128(Bytes) for the production 64-bit word width; its public API has no word-width parameter, and the step implementation uses four uint64_t words. The Python digest_w function is a separately width-scaled toy construction. Calling the production library at widths 2, 3, or 4 is therefore undefined by the current interface, and a separate C++ toy implementation would not be a test of librl as the work order currently states.

Owner decision 8 Oct 2026, item 14: keep the w=2, 3, 4 toy-width oracle Python-only and cross-check the built librl against the Python reference at w=64 only. PHASE3-RESULTS.md already contains section L, so section M is the next section. The owner set the Rad analysis at Z_base=41 and directed that Claude correct the WO-14 row in WORK-ORDERS.md; this build does not edit that file.

No dependencies were installed. GROVER-TEST-HANDOFF.md and the existing grover_rl_test.py were restored from the parked pre-worktree material. The remaining implementation and checks are recorded below as they are completed.

Implementation and validation

The script now leaves the w=2, 3, 4 truth-table checks Python-only and invokes the release rl_cli for the w=64 cross-check. It also runs separate Python table-oracle tests for a given Rad prefix and a zero-prefix toy stamp, and records the Z_base=41 / trigger-Z=48 query-cost estimates. Existing reversible circuit checks and the RL-only resource estimate remain in the same experiment. The obsolete nonexistent refracting_light_128.py provenance entry was removed; fingerprints now include the C++ API, implementation and CLI.

Build and test commands:

cmake --preset release                 PASS
cmake --build --preset release         PASS
ctest --preset release                 PASS, 16/16
cmake --preset sanitize                PASS
cmake --build --preset sanitize        PASS, no work required
ctest --preset sanitize                PASS, 16/16

Experiment command:

python3 -B grover_rl_test.py --seed 20261007 --input-qubits 12 --rl-cli build/release/rl_cli

Final run passed in 36.16 seconds and wrote phase3-runs/grover-20261008T160000599814Z.json. At w=64, C++ librl agreed with both Python references on all 4,133 messages (4,096 exhaustive 12-bit inputs plus 37 vectors, boundary/random, and commitment-stamp inputs), with zero mismatches. All 16 recorded 18-bit stamp inputs passed. Toy widths w=2, 3,4 each ran five equality targets plus a given-Rad-prefix and toy stamp oracle; all measured probability curves matched the exact Grover formula. The reversible circuit checks and full w=64 resource estimate also completed.

The cost estimate at Z_base=41 records BHT scale 13,003.99 queries; chosen 41-bit Rad-prefix Grover scale 1,482,910.40 and first-peak approximation 1,164,675.10; and 18-bit stamp Grover scale 512 and first-peak approximation 402.12. The next trigger tier Z=48 is included. These are black-box query estimates, not quantum measurements; the finite S=2^20 puzzle can have no pair. PHASE3-RESULTS.md section M contains the full interpretation and limitations.

During development, one assertion incorrectly required the first rounded Grover peak to be the global maximum across two periods. Per-iteration probabilities already matched the exact expression; integer-rounded later peaks may be marginally higher. The assertion now checks the first-peak index is in range while retaining formula validation on every point. The final run then passed. No changes were made to WORK-ORDERS.md; Claude is correcting its WO-14 row per owner direction. No push or merge was performed.