Recipe
Storage today keeps a copy. We keep the recipe — and prove it still works.
We train neural networks under exact integer rules, so every training step is bit-for-bit reproducible across machines (measured on the A100 and on ARM and x86 CPUs), and we attach to every step a cryptographic receipt that anyone can verify in about a second. A model's checkpoints can then be replaced by its training document and its chain of receipts. Below is unedited terminal output from our running system, captured live on Thu Oct 15 00:37:05 UTC 2026.
A training run kept as a chain of receipts
GPT-2 (124M parameters) trained step by step on one NVIDIA A100. Every step produces a receipt — a succinct sum-check / GKR proof over the step's committed computation — that is checked on the GPU node, re-checked by two independent verifiers (Python and Rust), and linked to the previous step's state. 57 steps recorded with all four checks ACCEPTED (the runner's own state file).
Raw terminal output (verbatim)
# A GPT-2 (124M) training run kept as a chain of receipts: each step checked on the GPU node, by two verifiers, and linked azureuser@controller:~$ grep -c 'nodeC=ACCEPTED py=ACCEPTED rs=ACCEPTED chain=ACCEPTED' /tmp/c105/chain_runner.state; tail -4 /tmp/c105/chain_runner.state | cut -c1-118 57 2026-10-14T20:49:25Z a100x-145 step=55 nodeC=ACCEPTED py=ACCEPTED rs=ACCEPTED chain=ACCEPTED settle=HOLDS ktree=/home/ 2026-10-14T21:45:54Z a100x-146 step=56 nodeC=ACCEPTED py=ACCEPTED rs=ACCEPTED chain=ACCEPTED settle=HOLDS ktree=/home/ 2026-10-14T22:47:17Z a100x-147 step=57 nodeC=ACCEPTED py=ACCEPTED rs=ACCEPTED chain=ACCEPTED settle=HOLDS ktree=/home/ 2026-10-15T00:28:53Z a100x-148 step=58 nodeC=ACCEPTED py=ACCEPTED rs=ACCEPTED chain=ACCEPTED settle=HOLDS ktree=/home/ azureuser@controller:~$ date -u Thu Oct 15 00:37:03 UTC 2026
One 124M training step's receipt, verified in under a second
The Rust verifier checks a full 124M-parameter training step's receipt (587 proof sections, a 115 MB constraint layout) in 0.98 s on 4 threads. The statement names the exact rules text and the model state before and after the step by their hashes.
Raw terminal output (verbatim)
# A 124M-parameter GPT-2 training step's receipt verified by the Rust verifier
azureuser@controller:~$ /home/azureuser/recipe/rust/receipt-verify/target/release/receipt-verify /home/azureuser/BREV-A100/a100x-148/doc-artifact --threads 4 --tape --quiet; python3 -c "import json; s=json.load(open('/home/azureuser/BREV-A100/a100x-148/doc-artifact/manifest.json'))['statement']; print('step', s.get('step'), '| rules', s['rules4_sha256'][:16], '| params_before', s['params_before'][:16], '| params_after', s['params_after'][:16])"
verdict: ACCEPTED; verifier wall 0.984 s
loaded in 0.231 s; verified in 0.984 s (4 threads); 587 sections + reduction + opening; layout.bin 115 MB
step 58 | rules 6ef1981bb7a32dfc | params_before 9a2098bac25c11b5 | params_after 88e7782d61e88519
azureuser@controller:~$ date -u
Thu Oct 15 00:37:05 UTC 2026
Tamper-evident: a forged training step is refused
A step trained at twice the scheduled learning rate, presented under a statement that claims the schedule's rate, is REFUSED with the exact defect named; the honest step is ACCEPTED (our next verifier release, on our small d64 test model).
Raw terminal output (verbatim)
# Forgeries refused: a training step at 2x the scheduled learning rate (d64 test model) vs the honest step azureuser@controller:~$ /tmp/c105/x85/bin/receipt-verify-c39238d9 /tmp/c105/x85/m1/B/F3/art --threads 4 --quiet | head -3 | cut -c1-140; /tmp/c105/x85/bin/receipt-verify-c39238d9 /tmp/c105/x85/m1/B/H64/art --threads 4 --quiet REFUSE optimizer update: 28 defect(s), first: adamw/limb:c=2:l=2/c7/update-lo: the sgn coefficient is [6710], the statement's lr_q is 335 verdict: REFUSED; verifier wall 0.030 s loaded in 0.024 s; verified in 0.030 s (4 threads); 913 sections + reduction + opening; layout.bin 1 MB verdict: ACCEPTED; verifier wall 0.098 s loaded in 0.025 s; verified in 0.098 s (4 threads); 913 sections + reduction + opening; layout.bin 1 MB azureuser@controller:~$ date -u Thu Oct 15 00:37:05 UTC 2026
Hardware-exact: the A100 tensor core, reproduced bit for bit
Our emulator of the A100's bf16 tensor-core matrix multiply agrees with the card on 4,294,967,296 swept outputs plus 6,832,128 adversarial ones — 0 mismatches — run on the GPU and checked on the CPU.
Raw terminal output (verbatim)
# The A100's bf16 tensor core matches our bit-exact emulator: 4.29 billion outputs, 0 mismatches azureuser@controller:~$ tail -13 /home/azureuser/BREV-A100/tc-q1b/out/chain.log | cut -c1-150 TC-Q1B sweep twin vs numpy H1 (first batch, 524,288 outputs, all regimes): 0 disagreements TC-Q1B sweep: 4,294,967,296 outputs in 512 batches, 58.5 s: vs H1 0 mismatches; card -0 0; H0's -0 events 112 (vs H0 112 mismatches) bits H1 0 / 537,395,456 card -0 0 H0's -0 events 0 H0 0 typical H1 0 / 536,732,672 card -0 0 H0's -0 events 0 H0 0 spread H1 0 / 536,734,464 card -0 0 H0's -0 events 0 H0 0 tiny H1 0 / 536,681,472 card -0 0 H0's -0 events 0 H0 0 huge H1 0 / 536,631,552 card -0 0 H0's -0 events 0 H0 0 narrow H1 0 / 537,170,176 card -0 0 H0's -0 events 0 H0 0 zeros H1 0 / 536,658,688 card -0 0 H0's -0 events 112 H0 112 specials H1 0 / 536,962,816 card -0 0 H0's -0 events 0 H0 0 TC-Q1B RESULT: adversarial H1 0 / 6832128, card -0 0, H0 117037, FMA 2773239; reruns identical True; twin-vs-numpy H1 0 H0 0; sweep H1 0 / 4294967296, TC-Q1B VERDICT: YES (H1 = 0 mismatches everywhere, no -0 from the card) TC-Q1B DONE Wed Oct 14 22:51:00 UTC 2026 azureuser@controller:~$ date -u Thu Oct 15 00:37:05 UTC 2026
Bit-exact training: two independent implementations agree
Our integer training rules are written twice (numpy and torch). Run on the same data they produce byte-identical model states and byte-identical witnesses: 1,034 of 1,034 files identical.
Raw terminal output (verbatim)
# Bit-exact training: two independent implementations (numpy and torch) produce identical bits azureuser@controller:~$ grep -E '^TRAINED BITS|^TWINS|^witness identity: 1034' /tmp/c105/x85/m1_A.out | cut -c1-160 TRAINED BITS A96n vs A96x: EQUAL params_before 20dd1d78db7f649c, moments_before 24fbdd9df25d901d, params_after cff83ad5518c5a01, moments_after f9715bda72b0d885 TRAINED BITS A96t vs A96x: EQUAL params_before 20dd1d78db7f649c, moments_before 24fbdd9df25d901d, params_after cff83ad5518c5a01, moments_after f9715bda72b0d885 TRAINED BITS A64n vs A64x: EQUAL params_before 2e3a04f44530b1d3, moments_before c7488cc349808b92, params_after 063a19bbfd94676d, moments_after a16e663f021e5848 TWINS: the numpy and torch manifests are IDENTICAL (751,586 / 751,586 bytes) TRAINED BITS AND TWINS: HOLD witness identity: 1034 of 1034 files identical, 0 differ, 0 only in A, 0 only in B; A 1034 files 55,617,118 B, B 1034 files 55,617,118 B -> IDENTICAL azureuser@controller:~$ date -u Thu Oct 15 00:37:05 UTC 2026
Resurrection: a training step regenerated from its saved state
Re-executing step 57 from the saved state of step 56 reproduces the original run's 176.6 GB witness byte count and its 27.29 billion-lookup census exactly, with 0 mismatches — the basis of resurrection: a state is recovered by re-running the document's steps rather than by storing it.
Raw terminal output (verbatim)
# Resurrection: the trained state regenerated from the document, matched against the chain azureuser@controller:~$ grep -E 'doc A: exit' /home/azureuser/BREV-A100/x84lf3-s57/run.log | grep -oE 'wall_s=[0-9]+|witness_bytes=[0-9]+|mismatches=[0-9]+|census_lookups=[0-9]+' | tr '\n' ' '; echo; grep -E 'doc A: exit' /home/azureuser/BREV-A100/a100x-147/run.log | grep -oE 'wall_s=[0-9]+|witness_bytes=[0-9]+|mismatches=[0-9]+|census_lookups=[0-9]+' | tr '\n' ' '; echo wall_s=252 witness_bytes=176622499005 mismatches=0 census_lookups=27287690852 wall_s=264 witness_bytes=176622499005 mismatches=0 census_lookups=27287690852 azureuser@controller:~$ date -u Thu Oct 15 00:37:05 UTC 2026