igneum/docs
igneum-labs 0cba49cfe0 Prover: the 5 October post-root assertion explained (stale build, empty-segment plan), fixture 58927, fixture test, source stamp
The fact: PC 2's exporter failed blocks 58,752 to 58,843 (and the task's 58,584 to 58,984) at
shard.rs:175, "shard 0 post-root from the witness", while three empty shards were later proven, verified and
paid. Every failing block is empty: one blue block, one reward, the pool credit, no transactions, no payouts
(igneum_exportSegments 0x0..0xe738 from the Mac node, fork 2b6d23ef). The proven block 59,507 has the same
shape and the same miner as the failing 58,927. So the difference is not block content.

The rule that differed: the planner's post-root of an empty segment. The exporter on PC 2 was a stale build
whose core predated commit d6d6153 (the assertion sits at line 175 there and at 179 since). That planner
returned root_at(end) for a segment with no transactions, which is the pre-root; the statement applied the
rewards and the pool credit, as the node does (vendor/igneum-node-036/igneum/exec/src/executor.rs,
execute_segment) and as spec 7.7 item 8 says. Left = the root after the rewards (the node's), right = the root
before them; PC 2's export log for 58,752 shows exactly that pair. Reproduced here: master's core with that one
rule put back fires the same assertion on 58,927 with left 0x7886b9cf (the node's root) and right 0xea9db302
(the pre-root). Master's core as it is reproduces 58,927 and 59,192 with the node's roots, the host's native
mode matches the fixture, and the SP1 executor runs shard 0 to post-root 0x7886b9cf.

So the prover core needs no rule change: the fix is commit d6d6153, which PC 2 received with the 10:49 and
10:52 UTC rebuilds (job-rebuild-prover-pc2-037 and 037b), after which its proofs were paid. What this commit
adds is the regression and the guard for the class:

- proving/fixtures/block-58927-empty-reward.json: the failing shape cut from the devnet (33 KB).
- proving/igneum-prove/export/tests/fixtures.rs: every fixture in proving/fixtures reproduces (block
  statement, plan, every shard statement from its witness, the chain of roots and links), and the empty
  segment's shard ends at the root after the rewards, never the pre-root. With the pre-d6d6153 rule put back
  the test fails. The test lives in the export crate so the core's manifest, part of the guest build, stays
  untouched.
- export/build.rs and host/build.rs stamp each binary with a hash of the native sources it was built from,
  printed on the first line of every run, so a stale build names itself in the log instead of in a line
  number (the stale-build class of 4 and 5 October).
- docs/bench-log.md: the row under the first paid proofs.

The guest is unchanged: built in one directory, this branch and master give byte-identical loadable segments
for the shard program and the aggregator, so no prover needs a rebuild for this commit. Noted on the way and
left open: the same sources built in three directories on this Mac gave two different guest ELFs, so the
program id is not yet a pure function of the sources on a native build.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 11:50:40 +00:00
..
analysis Merge origin/testnet-adopt (3be4501) into release-0.3.6: testnet identity, adopted fee table (spec 05 section 5.11 next to the security budget 5.10), G13 signed inputs; plan documents combined, site rebuilt 2026-10-05 08:32:40 +00:00
benchmarks benchmarks: the vmmap captures carry no local timezone stamp (identity check) 2026-10-05 10:31:44 +00:00
brand Brand: before/after Finder renders of the app and DMG volume icons (docs/brand) 2026-10-04 11:51:11 +00:00
commercial Provenance: credit every borrowed component, upstream merge procedure, prover customer brief 2026-10-03 20:02:16 +00:00
design release-0.3.6 plan: the fork results, miner-latency in after its three gates, the release dev-fee address 2026-10-05 08:21:00 +00:00
legal Add the IGNEUM trade mark clearance search (3 Oct 2026) 2026-10-03 19:00:08 +00:00
plans release-0.3.6 plan: every reachable machine on 0.3.7 with node state, the open items 2026-10-05 10:31:26 +00:00
spec Merge origin/testnet-adopt (3be4501) into release-0.3.6: testnet identity, adopted fee table (spec 05 section 5.11 next to the security budget 5.10), G13 signed inputs; plan documents combined, site rebuilt 2026-10-05 08:32:40 +00:00
testnet Merge origin/testnet-prep (28f6ccc) into testnet-adopt: testnet identity, fee floors and pgas table adopted 5 October 2026, G13 signed build inputs, release-0.3.6 plan 2026-10-05 07:44:22 +00:00
bench-log.md Prover: the 5 October post-root assertion explained (stale build, empty-segment plan), fixture 58927, fixture test, source stamp 2026-10-05 11:50:40 +00:00
bugs.md bugs.md: the stopped detector's second live firing (a plain quit) 2026-10-05 00:18:05 +00:00
evidence.md Bench log: shard proving on the RTX 5090 measured (10.9 s per shard, 2.2 s aggregation); evidence rows 15 and 16; journey line 2026-10-04 18:17:16 +00:00
fork-divergence.md Docs: devnet-v4 integration section (merge order, devnet v4 rules, compatibility, cut-over commands) and bench-log entry 2026-10-04 01:23:42 +00:00
fork-map.md Finality quorum: 2/3 of active weight and at least 56.7% of total, per simulation v2 2026-10-03 16:15:15 +00:00
fud-fixes.md FUD ledger sweep, round 4: M25 confirmed on a real-PoW test node (mismatched day length rejected with no reason named), fix row 127 2026-10-05 01:09:07 +00:00
fud-ledger.md Ledger: merge conflict markers removed, both sides kept 2026-10-05 07:25:45 +00:00
provenance.md Provenance: credit every borrowed component, upstream merge procedure, prover customer brief 2026-10-03 20:02:16 +00:00