igneum/docs/plans/finality-v3-devnet-publish.md
igneum-labs 7eed16a29a Pre-public scrub, the text pass (7 October 2026, 19:5x UK): no founder name, personal login, earlier business or personal address in any tracked text file, and a gate check that keeps it so
The sweep (main's item 1): 199 tracked text files, 783 lines. The founder's full name, first name and possessive become "the founder" (sentence starts capitalised); the lowercase operating-system user name in WSL paths and commands becomes <user>; the second owner login becomes "the second owner login"; the three earlier businesses and the two other brands become "the other business", "the earlier entity", "the earlier business" and "another brand"; the Chrome profile rule names the igneum.network profile, not the profile's label. The standing commit login igneum-labs is not a founder term here: the fresh-repository step renames it in the history (docs/plans/history-rewrite.md, tools/repo/fresh-repo.sh).

The patterns never appear in plain text in the tree (a plaintext list would be the hit): tools/ci/founder-strings.b64 (perl regex, tab, a sample per row) is read by tools/ci/founder-strings-check.sh (every tracked text file, perl, known-failed first: the self-test plants each row's sample in a fixture and the hit must name the file), by tools/community/discord-hooks.mjs (the guard's founder and business rows; the test takes its fixtures from the samples) and by tools/repo/fresh-repo.sh (the business names of the rewrite rules). site/forbidden-strings.txt carries the same patterns as b64: lines, decoded case-insensitive by site/scrub.mjs and tools/ci/launch-gates-check.mjs (whose fixture now plants an encoded made-up name). The check runs in the gate's tree checks on every merge.

Not in this commit, by main's word: the 105 commit messages and 40 personal-identity commits that need the history rewrite (listed, not run), and the secrets found by gitleaks over the history (reported with owners).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:39:50 +00:00

7 KiB

Finality rule v3 on the devnet: the publish, 5 October 2026

The founder, 17:5xZ: "deploy n3 now". Published by the 0.3.9 release engineer with the fee-switch mechanism (release-0.3.9.md section 10), from the runbook finality-v3-rollout-devnet.md sections 3 and 4, right after every node carried the fee-switch digest ab8847da.... No new binary: the switch has been in every node since 0.3.4 (the a24ab01a Mac, Windows and Linux builds all carry finality_v3_activation_daa, checked with strings).

N3 and the digest

N3 = 135,200: DAA 120,755 at 17:57:17Z (the observer's getBlockDagInfo) + 14,400 = 135,155, the next round hundred. At the publish (17:59:14Z, DAA about 120,800) N3 - DAA = 14,400, over the 10,800 the rule asks. The switch keys on the checkpoint's DAA score; at 0.965 blocks/s the sink crosses N3 about 22:05Z on 5 October and the first v3 checkpoint follows about a minute later.

The object: {"difficulty_v2_activation_daa":33000,"proving_v0_activation_daa":84100,"fees_v1_activation_daa":210000,"finality_v3_activation_daa":135200}.

Read on a scratch a24ab01a node (17:57:47Z, 22 s, ports 60995/60996):

Calibrated v1 fees from the override file: chain blocks metered with the adopted table, budgets and floors from DAA score 210000
Finality rule v3 from the override file: active from checkpoint DAA score 135200
Consensus params digest: 1f4b44255fcd2ea8f75664ed47200f409186ddd2292960c9e2cf95bbbdc11505
Finality v2 (igneum-devnet): interval 30 depth 20 window 7200 DAA dust 5 presence 20 aggregators 8 ban 7200 fold 3; rule v3 (frozen table, certificate fold) from checkpoint DAA 135200

The order, with times

Step When What
The observer 17:58:13Z (pid 47854) infra/devnet/restart-hand-nodes.sh '<object>' (the 0.3.9 branch's version: IGNEUMD_COMMIT a24ab01a, grep -c): Finality rule v3 ... 135200, digest 1f4b4425...
Node 1 17:58:25Z (pid 48121, caffeinate 48123) the same script, the same lines
The seed 17:58:43Z (MainPID 119557) infra/devnet/restart-seed.sh '<object>' (the a24ab01a cross-build 7e26e374...): Finality rule v3 ... 135200, digest 1f4b4425..., igneumd/2.1.0-a24ab01a
The token folder and dl/public/ 17:59:14Z packaging/ota/publish-manifest.sh --version 0.3.9 --override '<object>' --activation-height 135200 --deadline-note "finality v3" --notes "Finality rule v3 from checkpoint DAA score 135200 (frozen table, certificate fold); calibrated v1 fees from DAA score 210000; 0.3.9 unchanged" --public --deploy: entries carried over, signed (8f186e37...), live token manifest verified at try 1; the public folder verified at try 12 (igneum-downloads.json reached the edge last, as at 17:39Z)
The OLD folder 18:01:53Z publish-old-folder.sh with the same object, note and height; deployed; version 0.3.9, byte-identical, signature OK
update-now-finality-135200 to every app 18:02:13Z (apps woken, stamp 51a21533) the apps re-read the manifest, write the object to override.json, restart their node at a safe moment

The live manifests at 18:02:55Z (token and public): 0.3.9, published 2026-10-05T17:59:14Z, consensus {activation_height 135200, deadline_note "finality v3", override {difficulty_v2_activation_daa 33000, fees_v1_activation_daa 210000, finality_v3_activation_daa 135200, proving_v0_activation_daa 84100}}.

The app nodes

Node update-now-finality-135200 ran Node restarted with the object Lines (the digest job digest-pcs-135200, 150 s after its wake)
Mac d937c69d 18:02:57Z none needed: the app has had NO node of its own since its hourly engine restart at 17:45:16Z. That engine found node 1 answering on 127.0.0.1:26610 (a node already answers on 127.0.0.1:26610; using it (it is not stopped by this app), 17:45:16Z) and runs as an external-node app since; its card's DAA and peers are node 1's. The app wrote override.json = the object at 18:02:58Z and logged the node restarts with it at a safe moment, which never comes for an external node (engine.rs 2050: !self.node_external); the restart job restart-node-mac-135200 (18:10:47Z) answered the node is external; nothing done (18:11:11Z). Node 1 itself restarted with the object at 17:58:25Z node 1's lines, below
PC 2 1ccfe586 18:04:55Z 18:04:5xZ (node-20261005-165651-r3.log) at 18:04:57Z already Refusing peer 192.168.68.67 (PC 1): ... local 1f4b44255fcd2ea8f75664ed47200f409186ddd2292960c9e2cf95bbbdc11505 remote ab8847da...; override.json = the object
PC 1 ae432dc7 18:06:26Z 18:06:28Z (node-20261005-172631-r3.log) Finality rule v3 from the override file: active from checkpoint DAA score 135200, Consensus params digest: 1f4b4425..., igneumd/2.1.0-a24ab01a; override.json = the object (PC 1 was not busy after all: the HiveOS job had ended, so no queueing was needed)

The split: the three hand-run nodes on 1f4b4425 from 17:58:13Z, the miners (PC 1, PC 2) on ab8847da until 18:04:57Z and 18:06:28Z; the observer's DAA crept 120,755 -> 120,835 between 17:57Z and 18:03Z (only node 1's own blocks on that side), then 121,486 at 18:09:54Z once PC 2 had joined it: 6 min 44 s until the first miner, 8 min 15 s until both.

The sweep: every live node on 1f4b44255fcd2ea8f75664ed47200f409186ddd2292960c9e2cf95bbbdc11505

Node Carried N3 from Read from
The observer 17:58:13Z /tmp/igneum-devnet/observer-v4.out
Node 1 (also what the Mac app reports since 17:45Z) 17:58:25Z /tmp/igneum-devnet/node1.out
The seed 17:58:43Z the journal, through restart-seed.sh
PC 2 app node 1ccfe586 18:04:57Z node-20261005-165651-r3.log through digest-pcs-135200
PC 1 app node ae432dc7 18:06:28Z node-20261005-172631-r3.log through digest-pcs-135200
The Mac app's own node none since 17:45:16Z (above); its last own node, started 17:42:15Z for the fee switch, died with the engine at 17:45Z node-20261005-165710-r2.log ends there

Not reached: PC 37ba0461 (0.3.7, silent since 13:52Z) and Sam's Mac (0.3.5, silent since 09:43Z); each takes 0.3.9 and the object on its next check and is refused by every peer from its next restart until then.

Open from this publish: the Mac app without a node of its own means the Mac no longer verifies proof records (node 1 reports verifier off; PC 2's node verifies and includes its own); the app's port 26610 clashing with node 1's is the cause and is for the owner to decide (stop node 1, or move it). The Mac's miner at 0.0 MH/s is paused on the founder's instruction and left alone.

The first v3 checkpoint (pending)

The sink crosses N3 = 135,200 about 22:05Z on 5 October (DAA 122,035 at 18:18Z, 0.965 blocks/s); the first v3 checkpoint follows about a minute later. The read, on two nodes: grep -E 'LOCKED|CONFLICTING|held by the frozen table|folded' /tmp/igneum-devnet/node1.out | tail and the same on /tmp/igneum-devnet/observer-v4.out (expected from the runbook: every LOCKED line from the first v3 checkpoint ends with ..% of the table frozen at lock <j>, "certificate ... folded" within 3 s, 0 CONFLICTING).