From 5b7f766ea6f37669f8ae5b69fadb84ecbe0c8823 Mon Sep 17 00:00:00 2001 From: igneum-labs <337424239+igneum-labs@users.noreply.github.com> Date: Wed, 7 Oct 2026 19:27:03 +0000 Subject: [PATCH] adv-accept-3: report part-1 rows (verdicts 2,546 of 2,546 agree; steer 975 seeds), chunked lease drivers Co-Authored-By: Claude Fable 5.1 --- .../cryptanalysis/report-acceptance-rule-3.md | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/docs/analysis/cryptanalysis/report-acceptance-rule-3.md b/docs/analysis/cryptanalysis/report-acceptance-rule-3.md index 794f863d..0db0b54f 100644 --- a/docs/analysis/cryptanalysis/report-acceptance-rule-3.md +++ b/docs/analysis/cryptanalysis/report-acceptance-rule-3.md @@ -20,11 +20,11 @@ internal adversarial pass, not an independent review |---|---|---|---|---|---|---| | Q1 | Exhaustion: P(a seed exhausts 256 attempts), per-part rejection rates, attempt distribution | Cite row 90 (lane adv-accept, 16,337 seeds); add this lane's static per-part rates over 3,009,928 candidates of 10^6 seeds and the geometric fit | the reject-everything mirror of Q1b | P(exhaust) bounded with its count | per attempt: accept 0.323, reject 0.677 ((a') 0.568, (a) 0.079, (b) 0.022, dynamic parts about 0.009); histogram geometric (bin ratios 0.65 to 0.71); P(exhaust) = 0.677^256 = 4.6 x 10^-44; 0 of 16,337 seeds reached the cap | BOUND | | Q1b | The last-resort program: weak, constant, predictable | `last_resort_v4(candidate(b, 256))` through the library on 3,000 seeds, the REAL rule run on each | `adv3 exhaust-mirror`: a reject-everything loop must hit the cap and print the last resort | last resort characterised; no predictable or weak accepted program | mirror fired: cap 256 reached, program byte-identical to the library's, the real rule ACCEPTS it (distinct 128.000, saturated 0, bias max 55); seed 0's last resort has 0 lossy ops (or, mul, mulhi all xor), 3 mad kept; 3,000-seed sweep queued | RUNNING (sweep 95) | -| Q2 | Steering with the full rule: tries per quantile of each property | `adv3 steer`, the real draw per seed, min per-site ratio at 256 units plus static properties; 2 x 10^4 seeds queued | `--plant hot`: two `or` writers before a load's source must put the planted set in the lowest quantile | tabulated; no property reaches a 1.1x chip gain under 10^5 tries | plant: 45 of 48 planted rows at ratio 0.207 to 0.993 against a population minimum of 0.999 at 256 units (3 did not fire: the scan found no ALU writer to change); the real rule rejects every effective plant by (a') | RUNNING (sweeps 93, 96) | +| Q2 | Steering with the full rule: tries per quantile of each property | `adv3 steer`, the real draw per seed, min per-site ratio at 256 units plus static properties; 2 x 10^4 seeds queued | `--plant hot`: two `or` writers before a load's source must put the planted set in the lowest quantile | tabulated; no property reaches a 1.1x chip gain under 10^5 tries | plant: 45 of 48 planted rows at ratio 0.207 to 0.993 against a population minimum of 0.999 at 256 units (3 did not fire: the scan found no ALU writer to change); the real rule rejects every effective plant by (a'). First 975 seeds (part 1): min ratio 0.998, median 0.999; 18 of 18 chain re-draws equal; 0 last-resort programs; per-attempt rejects (a') 1,820, (a) 257, (b) 87, (c'') 26, (c) 19 of 3,184 candidates | RUNNING (sweeps 93, 96 chunked) | | Q2b | Static steering at 10^6 seeds | `adv3 static`: the first candidate passing (a), (b), (a') per seed, static properties, quantiles to 10^-6 | the plant of Q2 (the same property code) | the 10^-5 and 10^-6 quantiles of each property, priced | DONE: table in section 3; the best property at 1 in 10^6 tries is a shadow block with 38 multiplies of 256 (mean 74), worth about 2 to 3 percent of the f = 1 chip's energy per hash (approximate); the load critical path at 40 of 128 (median 72) is worth nothing at the memory activate ceiling | BOUND | | Q2c | Live hot set of the lowest-ratio steered seeds | f8 `warps` on the lowest-ratio seeds of Q2 | f8's own const-item plant | the worst steered seed's gain priced | not started; lane adv-accept's live rows on its five lowest of 4,600 price the selector at 1.002x | PENDING | | Q3 | Program id: collisions and derivation agreement | `adv3 ids` over 10^7 (seed, attempt) pairs; `adv3 idcheck` by three derivations | low-32 collision counts must match the birthday expectation; one attempt bit flipped must change the id | 0 collisions; the derivation that matches the packs named | 0 id collisions, 0 program-stream state collisions, 0 seed-word collisions over 10^7 pairs (control: 11,759 low-32 id collisions against 11,641 expected); FINDING: program.json's `program_id_derivation` string and spec 1.4.6 state a derivation WITHOUT the `"sub/" || 3_le16` suffix the code appends for generator 4; an implementation written from the text computes 30956569d8f3d8d7 for Devnet 3 where the pack carries fce15bf61030be57 | FINDING (interoperability, not consensus) | -| Q4 | Determinism traps | `adv3 margins`; a second interpretation of the rule (`adv3 verdicts`, 2,000 seeds, every attempt); a spec-1.4.6-only interpretation (400 seeds); the read list | `--variant floor97` must change at least one verdict | 0 disagreements between code and the faithful second interpretation; the spec-only disagreement rate measured; every divergence listed | margins: the f64 ratio compare of (c'') never disagrees with the integer rule `50 d >= 49 E` on any of the 2^20 + 1 values of d for any window (margins 0.32 to 0.44 counts); read list in section 6 (the spec text is behind the code on six points; the CLI `accept` command caps at 32 with no last resort) | RUNNING (sweeps 94, 97, 98) | +| Q4 | Determinism traps | `adv3 margins`; a second interpretation of the rule (`adv3 verdicts`, 2,000 seeds, every attempt); a spec-1.4.6-only interpretation (400 seeds); the read list | `--variant floor97` must change at least one verdict | 0 disagreements between code and the faithful second interpretation; the spec-only disagreement rate measured; every divergence listed | margins: the f64 ratio compare of (c'') never disagrees with the integer rule `50 d >= 49 E` on any of the 2^20 + 1 values of d for any window (margins 0.32 to 0.44 counts); second interpretation part 1: 2,546 of 2,546 attempt verdicts of 792 seeds agree with the code, part by part (the same 1,445 (a'), 204 (a), 70 (b), 20 (c''), 7 (c') saturated-source, 7 constant-bit, 1 distinct-sum rejections and 792 accepts), chosen attempt equal on every seed; read list in section 6 (the spec text is behind the code on six points; the CLI `accept` command caps at 32 with no last resort) | RUNNING (sweeps 94, 97, 98 chunked) | | Q5 | Era steering | `adv3 era-steer` over 400 era seeds: stride, interleave, epoch 0's min ratio | none needed (a listing) | noted | queued | RUNNING (sweep 99) | ## 1. Q1: exhaustion (row 90, owner adv-accept, cited; this lane's static rates added) @@ -85,6 +85,19 @@ Static steering buys no asymmetric gain: every property a seed grinder can move Sweeps 93 and 96 (`adv3 steer --from 0 --count 10000 --threads 88 --check-every 50` and `--from 10000`), box 2, queued 20:11 BST behind lane adv-cache-2's census under the sweep lock. Per seed: the real attempt loop and rule, the accepted attempt, the chain id, the minimum per-site distinct-index ratio at 256 units and its site, the (c) report, every rejection reason of the seed's earlier attempts, the static properties of section 3, and every 50th seed re-drawn through `Epoch::chain_program` for equality. Rows land in the log as they finish; the quantile table lands here from the first 10^4 seeds. +Part 1 (seeds 0 to 974, binary 928272e0, 88 threads, 20:13 to 20:22 BST before the kill, log logs/adv-accept-3/93-steer-s00-part1.tsv): + +| Quantity | Value | +|---|---| +| Accepted at attempt 0..11 | 307, 186, 160, 107, 52, 44, 43, 22, 15, 13, 13, 5 (max 11); last resort 0 | +| Rejections of the 3,184 candidates | (a') 1,820, (a) 257, (b) 87, (c'') 26, (c) constant bit 9, (c) saturated 9, (c) distinct sum 1 | +| Min per-site ratio at 256 units | min 0.998 (seeds 514, 522, 620, 703, 959), 1 percent quantile 0.999, median 0.999 | +| Chain re-draw equality (`Epoch::chain_program`, every 50th seed) | 18 of 18 equal | +| Saturated final values, max over the 975 | 76 (limit 163) | +| Seconds per seed at 88 threads under load 400 | median 4.9 | + +The dynamic parts reject 45 of 1,017 candidates that passed the static rule (4.4 percent), (c'') 26 of them: the 2^20 ratio pass is live in the population and is the one dynamic test that fires more than once in a hundred static passes. + Known-failed shape (`adv3 steer --from 900000 --count 48 --threads 48 --plant hot --check-every 1`, box 1, 20:07 to 20:08 BST, binary 35336b84, log logs/adv-accept-3/steer-plant.log): on each accepted program the two ALU instructions that last wrote the source register of one load were rewritten to `or` (the source then saturates toward all ones) and the ratio re-read. | Rows | Planted ratio at 256 units | Population ratio (the same 48 unplanted) | The real rule on the planted program | @@ -144,7 +157,7 @@ Spec 01 section 1.4.6 at 017e7037 describes (a), (b), (c), a 5.14 percent reject ### 6.4 The second interpretation (sweeps 94, 98) -`adv3 verdicts --variant faithful` re-implements (a) cyclic, (b), (a') to its fixpoint with the shared-operand idiom, (c), (c') and (c'') as a per-lane scalar interpreter with its own accumulators and an integer ratio compare, from the module table of accept.rs and the spec's instruction semantics (reusing the library's `splitmix32`, `dataset_elem` and `load_index` as primitives), and compares verdict by verdict with `accept::check` on every attempt of 2,000 seeds. `--variant floor97` (300 seeds) is the known-failed shape: the floor at 0.97 must change at least one verdict against the code, or the comparison is not reading the ratio. Numbers land here. +`adv3 verdicts --variant faithful` re-implements (a) cyclic, (b), (a') to its fixpoint with the shared-operand idiom, (c), (c') and (c'') as a per-lane scalar interpreter with its own accumulators and an integer ratio compare, from the module table of accept.rs and the spec's instruction semantics (reusing the library's `splitmix32`, `dataset_elem` and `load_index` as primitives), and compares verdict by verdict with `accept::check` on every attempt of 2,000 seeds. `--variant floor97` (300 seeds) is the known-failed shape: the floor at 0.97 must change at least one verdict against the code, or the comparison is not reading the ratio. Part 1 (seeds 0 to 791, binary 928272e0, 88 threads, 20:14 to 20:22 BST before the kill, log logs/adv-accept-3/94-verdicts-faithful-part1.tsv): 2,546 attempt verdicts, 2,546 agree; the first failing part named by the second interpretation equals the code's on every row ((a') 1,445, (a) 204, (b) 70, (c'') 20, (c') 7, constant bit 7, distinct sum 1, accept 792); the chosen attempt is the same on all 792 seeds. The known-failed variant (floor 0.97) runs as sweep 98. ## 7. Q5: era steering (sweep 99) @@ -156,7 +169,7 @@ Spent at 20:20 BST: about 0.15 box-hours (section header). Queued: sweeps 93 and ## 8b. Ledger: the 20:22 BST kill -Main's rule (relayed 20:2x BST): no sweep starts except through `/srv/builds/_bin/lease pool -- `; hand-started binaries are killed by their pid files now. Killed at 20:22 BST by pid file (process groups): sweep 94 on build-1 (verdicts faithful, 88 threads, running 8 min, pid group 1148339) and its four flock waiters (95, 97, 98, 99); sweep 93 on build-2 (steer, 88 threads, running 1 min, pid group 2114475) and waiter 96. Nothing lost: both logs were written row by row and are kept as data (logs/adv-accept-3/94-verdicts-faithful-part1.tsv, 93-steer-s00-part1.tsv); the sweeps resume through the lease on the seed ranges not yet covered. The sweep.lock flock is superseded; every queue file below now calls `lease pool 40 --owner adv-accept-3 -- ... --threads {cores}`. +Main's rule (relayed 20:2x BST): no sweep starts except through `/srv/builds/_bin/lease pool -- `; hand-started binaries are killed by their pid files now. Killed at 20:22 BST by pid file (process groups): sweep 94 on build-1 (verdicts faithful, 88 threads, running 8 min, pid group 1148339) and its four flock waiters (95, 97, 98, 99); sweep 93 on build-2 (steer, 88 threads, running 1 min, pid group 2114475) and waiter 96. Nothing lost: both logs were written row by row and are kept as data (logs/adv-accept-3/94-verdicts-faithful-part1.tsv, 93-steer-s00-part1.tsv); the sweeps resume through the lease on the seed ranges not yet covered. The sweep.lock flock is superseded. Pool rule of 20:2x BST (release builds and class v5 suites outrank every sweep; no adversarial lease competes with a waiter labelled v5 gate or v5 kit): at 20:26 BST the seven leases became two chunked drivers per box (`bin/chunks.sh`, `bin/seq.sh` under /srv/builds/_adv-accept-3/): every chunk (1,000 steer seeds, 200 verdict seeds, 500 last-resort seeds) is its own `lease pool 40 --min 16 --owner adv-accept-3` call with `--threads {cores}`, and the driver sleeps while any waiter in `lease status` carries one of those two labels. Box 2: steer s00 then s01. Box 1: verdicts faithful, floor97, spec, era-steer in sequence, and lastresort beside them. ## 9. Queue files (all on build-2 under /srv/builds/_adv/accept/queue/, claimed under claims/)