diff --git a/docs/fud-ledger.md b/docs/fud-ledger.md index feb1eb0d1..1c159cde2 100644 --- a/docs/fud-ledger.md +++ b/docs/fud-ledger.md @@ -2475,6 +2475,10 @@ Per tier: a home prover whose node drifted is never paid, whatever the card and Fix on branch numbering-fix from 52e96c94 (for 0.3.21, after f95178a1): (1) `chain_path` checks the first added block's selected parent against the tip record before anything is appended and hands the orphan records above the fork point to the reorg unwind (`continuity_removed`; the p1-5090 class can no longer happen); (2) a start-time self-check once per process, `first_discontinuity` from the restart pin upward against the DAG's selected parents, names the first break, unwinds the records above it and lets the follower re-walk (the inherited class); (3) `recordsContinuous` and `continuityBreak` on igneum_getProvingStatus and igneum_getExecStatus, null before the check, so a prover claims only on true. Gates: two unit tests known-failed first (the short removed list leaving an orphan; the break at 5 named, a continuous chain None), the exec suite, and the fleet's restart of p1-5090 and p2-3090-3 on the binary (the self-check line, the unwind, offset 0 against the hub after). The carrier cannot resolve a record by hash instead: the segment statement binds the chain block number through the EVM block number and prevrandao, so a drifted node's proof is a proof over the wrong number and the refusal is right; canonical numbering is the only cure. Until the restart on the fix, a drifted node's prover must not claim (the fleet's hub read flags the seven). One more fact from the fleet's 16:04Z hub-anchored pass: the 0.3.20 sweep's supervised restart on c4459193 (about 15:2xZ) cleared the offset on p2-3090-3 (46 → 0), p2-3090-1 (5 → 0) and p2-3090-2 (3 → 0) and kept it on p1-5090 (5), p2-4090-1b (6), p1-a5000 (2) and p2-3090-4 (4), with pool-1 newly at 2: a restart re-walks only what the ring or the resumed snapshot rebuilds, so a break inside that depth goes and a break below it stays, which is the depth the start-time self-check covers and the ring does not. On 96161037 the two kept copies without a break read "the 138388 records above the restart pin are continuous with the DAG (0.0 s)" at start (w-target, p12-vast); the live line on a drifted box (p1-5090, break #155958) is the fleet's n15-live run. +N15, the kept-datadir class (16:1xZ to 16:4xZ, 7 October 2026). pool-1 (c4459193) and p12-vast node2 (96161037 over a kept copy of pool-1) number the chain two high from 158278: both hold 0xbd679b13... at 158278 and 0xbf054b53... at 158279, the hub's 158278 is 0xcb6d83f2... (their 158280). The fleet's gRPC read on three DAGs (hub-1, pool-1, p12) agrees hash for hash: cb6d is a chain block with selected parent d9d68ada (the agreed 158277), blue score 246237; bd67 is cb6d's SIBLING with the same six parents and the same blue score (cb6d won the tie), bf05 bd67's child at 246240, both off-chain blues merged later. So the hub's exec numbering matches the DAG and the kept nodes' records are the drifted side: their live follower built on bd67 → bf05 when the tie went that way locally, the reorg to cb6d's lineage came with a `removed` list two short (the p1-5090 shape of class (a)), the two orphans stayed in the records and were persisted; the restart loaded that generation, and the start-time self-check of 96161037 walks only from the restart pin (165664) upward, 7,386 blocks above the break, so it read "continuous". The break sits in records every node of that lineage inherits with the datadir or the snapshot. On p2-4090-1b (offset 6 before, restarted on 96161037 at 16:30Z) the same live shape ended differently: its last records were orphans too (the hub reads both of its persisted tips, 167539 and 167409, as non-chain blocks), the generation was refused at start as "its tip is not on this node's selected chain" (a true negative), the restart pin could not anchor (below the pruning point), and the hub's snapshot cured it at 16:34Z. The walk-to-genesis failure every start logs ("cannot find header edc4fa84"; the chain facts partial) is the restart form on a node whose headers below the retention root are gone: expected, and why `restart_at` cannot run there. + +Per tier the same as above (a drifted home prover is never paid and nothing tells it), with the addition that a kept restart on 96161037 does not cure it and can carry it. Fix for 0.3.23, the node lane's: (1) the self-check walks from the tip DOWN to the DAG's floor (every record the DAG can answer for, not from the pin upward) and reports "checked down to block i" when the DAG stops answering instead of "continuous"; (2) a resumed state at or above the restart pin must hold the pin's hash at the pin's number, else the generation is refused for the break, not set aside; (3) a refused generation is examined for the lowest break and unwound there when the state allows, and a node without a snapshot peer anchors the rebuild on the pin (the selected-parent walk from the sink to the pin, then down from the pin as far as the DAG answers) instead of starting exec at genesis with bodies gone. Devnet 3 starts from empty datadirs (no inherited records); its late-joiner and restart gates on the 0.3.22 set read whether the live-time shape (class (a), fixed in 96161037's `chain_path`) still bites. + ## Status updates, 5 October 2026 (ledger sweep, night of 4 to 5 October) `docs/review/ledger-sweep-2026-10-05.md` holds the runs, the commands and the running table. Every Open, Proposed, Unmeasured or pending entry was read against its experiment line; the status lines above carry the evidence inline, marked "Sweep (5 October 2026)" where a note was added and "Was:" where the status changed. Items owned by the other two night branches (F23, F24, G12, X18, the flood memory growth; the base-fee floor, testnet parameters, G13, G14, public text) were left to them. diff --git a/docs/plans/counter-asic-3-node.md b/docs/plans/counter-asic-3-node.md index 62b9f2d73..de8b644a7 100644 --- a/docs/plans/counter-asic-3-node.md +++ b/docs/plans/counter-asic-3-node.md @@ -198,6 +198,25 @@ The staging (15:41Z on, at the shipper's sweep-end word), each step merged on re | Mixed-version, ten minutes beside the 5899f603 pair | 96161037 | 16:01:53 to 16:12:05 | PASS: one digest b0afb2ee on all five, 252 new and 352 old blocks accepted, 0 rejected, plain header version 2, counts equal at 316, 493 and 604 through both clean joins and the restart step, no panic in any log | | The fleet's set (the kept start with the ids gate, the wipe canary, the cases rerun, the 12 GB settled-claim line, N15's restarts of p1-5090 and p2-3090-3) | 96161037 | from 16:00 | (the fleet lane's lines) | +### 6.10 The 0.3.22 node line: Devnet 3 (opened 7 October 2026, 16:3xZ on main's clock change) + +the project lead's clock through main: Devnet 3 goes now, genesis by 18:30 BST. release-0.3.22-node on 96161037: bd710a36 the class v4 sub-version 3 re-pin (object byte 7; igneum-pow 017e7037, the audit-freeze-2026-10-07 tag, archived beside the fork as igneum-pow-amend; epoch-0 id a785001687d8688a must-equal, c120d796 / 1a423069 / a7886616 must-differ), aded4620 the era VDF merge (the era lane's f2ecf452, rebased on 96161037), fa7f854f the igneum-devnet-3 object, 21d8f454 test-only (object 7 = 1794 in the two signalling integration tests, sub-version 3's retried draw attempt, the eight era fields in the miner's pool test). The candidate is 21d8f454. + +The object: `--devnet --devnet-suffix=3`, network igneum-devnet-3, default P2P 26631 (a suffixed devnet takes ten above the previous; build-1's seed listens there), gRPC/JSON/EVM on the devnet defaults, data dir igneum-devnet-3, EVM chain id 4463 (the devnet's). Genesis 2026-10-07T00:00:00Z, bits 0x1d100000, payload "igneum-devnet-3 | 2026-10-07 | every upgrade on from block zero | coins here have no value | resets are announced", hash a6fa348e2a0fc6a5fa0ae3cb080160f5e2be865af71bac0068ca2fb8d1fcfd7b (computed on build-2 by `devnet3_genesis_hashes`, which names both constants in one run). Active from DAA 0: difficulty v2, proving v0 and v1 (8 blocks a segment, 600 DAA, 1,000 bps, the fresh rule), finality v3, program class v3 and v4 (byte 7 stamped from genesis under a one-day signal window), the latency ladder (rung 0, stepped by signal), calibrated v1 fees, the era VDF (era 15,552,000 DAA, lead 7,200, class group, T 108,000,000; the first cut about 180 days out; O-4.10 owed before it). At never, main's ruling: difficulty v3, the finality DAA-seconds rule, the fork gate, the peer directory, the signing bonus, the finality leave rule, the pool split, the consensus proof verify, the exec restart; each goes live by activation height after its own gate, no further reset. `NetworkId::params_compiled` (mainnet, testnet, devnet suffixes 3 to 99) refuses `--override-params-file`; the digest is read with no file: ab9af79f40cd9b5fbed2577406d6b32e103bd86a7dd26df2aabceb7b673ced23. + +| Gate | Candidate | Run (UTC) | Line | +|---|---|---|---| +| Build-1 release build (gate priority) | 21d8f454 | 16:43:15 to 16:45:19 | GREEN: igneumd sha256 b96b424c7b284501...fcca21d carries 21d8f45; igneum-miner c29f33bb...; artefact /srv/artefacts/0322-21d8f454/ | +| igneum-exec suite (build-2) | 21d8f454 | 16:45:31 | GREEN 36 of 36 | +| kaspa-consensus-core (build-2) | 21d8f454 | 16:44:40 and 16:48:25 | GREEN 151 of 151 (the parent's fast-time 60x file carries the era fields, d4162d9c) | +| kaspa-pow, igneum-pow feature (build-2) | 21d8f454 | 16:47:10 | GREEN 17 of 17, pairing id a785001687d8688a | +| kaspa-consensus whole incl. the two integration targets (build-2) | 21d8f454 | 16:47:54 | GREEN 120 + 1 + 1 at object 7 | +| igneum-miner (build-2) | 21d8f454 | 16:48:48 | GREEN 25 of 25 against the sub-version 3 packs (copied from the amend worktree into proto-cuda/packs-ca3-v4 beside the fork on both boxes; the sub-version 1 set kept as packs-ca3-v4-sub1) | +| Canary set from the artefact (build-1) | 21d8f454 | 16:45:53 to 16:47:11 | GREEN: empty-datadir start lines (object 7 / 1794, era VDF from DAA 0, ladder rung 0, fees v1, proving ids from the embedded keys), digest ab9af79f with no file, shutdown 571 ms after SIGTERM, override file refused exit 1 (the shared devnet still takes it, eada4bda), two empty nodes handshake with equal digests, a shared-devnet node rejected "Network mismatch - local: igneum-devnet-3, remote: igneum-devnet" | +| Fresh-genesis agreement on two boxes, the late joiner | 21d8f454 | fleet | (the fleet lane's lines) | + +Not in 0.3.22: the N15 kept-datadir class (ledger N15, third paragraph), 0.3.23. + ## 7. 0.3.17 node items after the 3.0 lane (Horizon queue, 6 October 2026, evening) Numbering (the shipper, 6 October 2026, 22:4xZ): this tree ships as 0.3.17. 0.3.16 became the corrective cut of 0.3.15's tree the same night (the Mac and PC 1 had taken early 0.3.15 builds), node f1ea7a38 unchanged. The branch keeps its name `ca3-v4-0316` and the commit messages their "0.3.16"; every "0.3.16" in the fork's code comments means this tree.