igneum/docs/plans/release-0.3.15.md
igneum-labs e976b344f3 Plan 0.3.15: publish 1 as run (deploy, update-nows, the hands, the seed with the glibc lesson)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 21:47:27 +00:00

24 KiB

Igneum Miner 0.3.15: class v4 signalling, generator-4 workers, miner-ui-4

Cut 6 October 2026, staged by the release engineer under the coordinator; the live cut waits for the Devnet 2 gate's PASS and the project lead's go. Worktree igneum-wt-ship0315 (branch release-0.3.15), node release-0.3.15-node 713ef876 in vendor/igneum-node-0315.

1. Why

  • The class v4 program (mx8+sh256x27, Counter ASIC 3.0) can now be signalled: the node reads program_class_v4_activation_daa and program_class_v4_signal_window_daa, flips the class at the first epoch whose 86,400-DAA window has 95 percent of blue blocks signalling, or at the floor. Both fields enter the consensus digest only once set, so this binary peers with 0.3.14 on today's file.
  • Every GPU worker is the generator-4 one, built from this tree: a worker from 0.3.14 refuses a generator-4 pack and stops dead at the flip (the rehearsal of 6 October showed it on 52 boxes).
  • The miner app's new Overview and Cards (miner-ui-4): the big-number hero, the chain scene, Ember Tune woven into every card row, the chain's own words with one grey explanation each.
  • Ember Tune tunes through the Power Helper: the helper acts only on commands after its start, heartbeats before any command, acknowledges by its own log line.
  • The Windows payload carries the Linux prover pair for WSL2 and refuses to build without it; every PC had run a stale host and exporter since 0.3.5.
  • An update never installs while a remote job is active, urgent or not; an asked install is spent by the check it asked for (PC 1, 17:52:54Z).
  • The exec layer names a stale exporter by path; the node says at start when the verifier host is older than proving v1 (igneum_getProvingStatus.verifierStale); a tip-0 snapshot pair is never resumed from, and a blocked follower asks a peer for its state within five minutes.
  • The devnet hand nodes run under launchd; the app's default devnet peers include the build box's hand nodes.

2. The order (two publishes, the worker rule)

  1. Publish 1 (binaries, the live THIRTEEN-field object unchanged, digest b18ed271): the fleet's miners by script, PC 1, PC 2 and the Mac by update-now, the hands and the seed last. No window: a 0.3.15 node on the thirteen-field file peers with 0.3.14 (measured: same digest).
  2. Publish 2 (the SIXTEEN-field object: the thirteen plus exec_restart_state_root, program_class_v4_activation_daa = the floor at publish DAA + 14,400 rounded up to the epoch (at least 10,800 ahead), program_class_v4_signal_window_daa = 86,400): only when every NODE reports 0.3.15 AND every WORKER is the 0.3.15 one. A 0.3.14 node exits at parse on this file ("unknown field program_class_v4_activation_daa"); a 0.3.14 worker stops at the flip. Miners first, the hands and the seed last. The digest moves once, read from the 0.3.15 node on the exact file at the publish (2c1162e2 at floor 226,800; 1dddfa55 at 219,600; another floor moves it).
  3. The hands move from the Mac to igneum-build-1 on the "0.3.15 live" line (the build-server agent's move-hand.sh, observer first, one hand down at a time).

3. Digests (0.3.15 Mac binary, no suffix, no peers)

Object Digest
the live thirteen-field file b18ed271f75dd46406d230f4156c37472127415a4c32c558bac662f6f840e61c (equal to 0.3.14)
fourteen fields (the exec pin 0xed27bb2d...) 23e7693634a9b8b3c0643f16c8a01e4cf057985c7e0e0e044f70bc919a3c0fef
sixteen fields, floor 219,600, window 86,400 1dddfa5574d5536109a5ae68dc415b55e954bd11208608440845e19670505871 (the node lane's pinned test value)
sixteen fields, floor 226,800 (DAA 209,458 at 19:47Z) 2c1162e2ccf34531bf3af131d21c36e857e3e99e265969e4b094bd7421a1d74e
the 0.3.14 binary on the sixteen-field file refused at parse, exits

4. Builds

Piece Where Commit sha256 Size
Linux igneumd (fleet, seed) igneum-build-1, glibc 2.39 713ef876 06211d55b8cce1c19b31b218f5b61f42389a5ceaf68e0d27781b2e10e33b3f2a 49,719,776
Linux igneumd (HiveOS, glibc 2.36) Mac zigbuild 713ef876 1e51bfb6401e2d86022eeaddf03750a72d6eb200fa879b7c58fb5c3afbf38a50 48,434,344
Linux igneum-miner (HiveOS) Mac zigbuild 713ef876 c5b489105d933b01e4dceff8dc31e2db8e9aa53de06dddafc6eb12ee85b8f7a6 9,998,576
Windows igneumd.exe igneum-build-1 cross 713ef876 d08be1a72082880e91dceb0f34e4337663c9494ccc62eb108d7c3a274801e928 51,846,656
Windows igneum-miner.exe igneum-build-1 cross 713ef876 e251bd2b3146830ae8c22627b6b37eba3428d1ba64fbcbd938aa0a36c7916fe3 11,129,344
Mac igneumd Mac 713ef876 7f0948d95996eb00f8f574dcaabc25b3ad8a407e08eac3b85055fd15abd0139f 41,819,824
igneum-worker-cuda.exe (generator 4) Mac mingw 563485b tree 14b6637e1d1c9e83311f2cf4e8ca76fb5ff8e42336b5e09b2b89165da55ea00e 1,537,024
igneum-worker-opencl.exe (generator 4) Mac mingw 563485b tree 0cbb65f0cadaa560037175d81d829ad7d50fcbdcf8a510d382681468f32f7ce8 479,232
igneum-gpu-telemetry.exe Mac mingw 563485b tree f7d924a7ba9ccd6f66fd7eee99f04835f52903456c4789f2c599e88fb02e2d37 387,584
hive igneum-worker-cuda (generator 4) Mac zig 563485b tree 97e036e23f4ace669b68b85980701ffe4e32017cdfbf28603bf992802a8b9828 6,756,480
hive igneum-worker-opencl (generator 4) Mac zig 563485b tree ef9fbd03e7ce14d1b2b9b85964397b244dc153edee0607d71f26dbc640a4c5e6 307,328
igneum-prove-host (Linux, cuda, WSL2) igneum-build-1 master e1b5bc9 71bc2438856bb141f6cad3d18489f708568144fad5a06a002fbadefb9ce256f9 73,161,528
igneum-prove-export (Linux, WSL2) igneum-build-1 master e1b5bc9 263bf4cef70af4a13a45b2e79b8dbab373282ea4c571f624d02ddb5791935361 3,609,360
Igneum-Miner-0.3.15.dmg (miner-ui-4 872f1c9) Mac af36aaa 90bdf8c8de965961e6b365ee8664bce3efe7873f45f7bc27793b692804fe42f5 41,961,932
igneum-hive-0.3.15.tar.gz Mac 1715e58ea1d4a1ed1b733881de51b8754ca975f0359b3b29ecb49061d02124c7 24,713,232

Rebuilt on the node lane's version-gate commit 17c60367 (the signal stamp and read gated on publish 2's object), 20:0xZ: Linux igneumd 0f1c0ddec8e81256... 49,720,288, igneum-miner ebc392fc4be5f873... 9,979,224 (box); Windows igneumd.exe f764d2080b9b12bde6163abf0252fb8cf195d72fbb0e77e180eb6ee8f5d91a35 51,854,336, igneum-miner.exe 4cf260160722787df29e569dcb66f3743f4c493a7a97dab530e0db990bd5599e 11,129,344 (cross); Mac igneumd 7966152f027c65a66f2573f7e05e78c781be44bd8c52884d7ed9af6d4e2c9d22 41,819,904. Digests unchanged (b18ed271 / 23e76936 / 1dddfa55 at 219,600). Suite: kaspa-consensus 97 + the recorded flake alone, igneum-exec 20, igneum-miner 18, kaspa-pow 15, p2p-flows 33. Superseded by the combined commit (version gate + the sync-panic fix) when it lands; the DMG, the hive package and the inputs rebuild on that one.

Final node 7961c5f1 (17c60367 the version gate + 7961c5f1 the pruned-node sync fix), built 20:10Z to 20:15Z with master's reproducibility exports: Linux igneumd 6615571ced35f694fa016e9b36439b29d83cd6e7c1df49fc11a9d4bd0236cba6 49,719,840, igneum-miner 3976c1b270761218298105dd256123381894c6ec7b380a43c4a702e486fe7bf4 9,979,992 (box); Windows igneumd.exe 30b14d174eb5615989e2117425c59a8e59d64e89a7298cab2b3fda15c778534e 51,894,272, igneum-miner.exe 16e9991f27e67995b416e0860f732f354f4d8b2982f46a8268bf91512778aaa1 11,130,368 (cross); Mac igneumd c0a29bcadd782c65770c1d3942a85629158b4178605c2ae3c68ca33e39cd18e2 41,803,088, igneum-miner 414720ed...; HiveOS igneum-hive-0.3.15.tar.gz 79aa96fb12d34948d568af6a2785ee6fff090f216e8df318cfc328d71181e886 (glibc 2.36 node from this commit); Igneum-Miner-0.3.15.dmg ab925203c4e0615f4de9c75f284590366f942ed848505e4338524ad48a315436 41,940,411 (miner-ui-4 872f1c9); Igneum-Wallet-0.1.5.dmg bf37a4ec1b682de86032b24ed2f271149e794177e80880f74dffed54d9a8da71 20,132,824. Digests b18ed271 / 23e76936 / 1dddfa55 at 219,600. Suite: kaspa-consensus 99 pass 0 fail, consensus-core 111, igneum-exec 20, igneum-miner 18, kaspa-pow 15, p2p-flows 33. Inputs pushed 20:13:40Z (node_source_commit 7961c5f1); windows.yml run 37525228879 on c25a3ca (after the Windows-path rename).

Final node f1ea7a38 (the five fix commits: 791ff22c, 713ef876, 17c60367, 7961c5f1, f1ea7a38 = the header-version rule on the receive side gated like the stamp), rebuilt 20:42Z to 20:46Z: Linux igneumd 7f0bde70cf2e72a3a9479ba6421f2b37162c3dd4391bf413717c99e6f168668d 49,711,008, igneum-miner 3976c1b2... (box); Mac igneumd and igneum-miner in the log; Igneum-Miner-0.3.15.dmg 041099c2a77f3f7ff145c9a88afc0160e6f5e2951bda0ae46882fbc0259370f5 41,936,114; igneum-hive-0.3.15.tar.gz b710ac596c31d811...; Igneum-Wallet-0.1.5.dmg daf259f272934f0c1a8155ef68762c344164ae8a77c8d0621d0fceed0fb163fa 20,122,390. Digests unchanged (b18ed271 / 23e76936 / 1dddfa55 at 219,600). Node lane's box line: kaspa-consensus 99/0, consensus-core 111 + 7. The compat gate with a POISONED peer (node-compat.mjs --poisoned, 20:42:55 to 20:45:42Z): PASS, the new node refused the poisoned blocks 12 times with 0.3.14's exact line and relayed nothing, the old hub's chain holds no 1026 block, 180/180/180/180/180 on every clean node, the new node mined 72 accepted blocks. Windows cross on f1ea7a38: igneumd.exe 181e10fd4b1ad0c259122d45abac018082a054c3836431f6802f0532a8ee1a43 51,894,272 (carries f1ea7a38), igneum-miner.exe 16e9991f... unchanged; inputs pushed 20:59:15Z; windows.yml run 37530680431 on 24132fb. Two earlier dispatches (37529276665, 37529597068) were cancelled: master's tools/cross-remote.sh had its defaults line swallowed by a trailing comment since the slots merge, so a default cross-build died under bash 3.2 ("CARGO_ARGS: unbound variable", then "OUT") and the chain silently kept 7961c5f1's exes while the inputs said f1ea7a38 (fixed on master 36e4ee7 with tools/ci/defaults-line-check.sh; merged here). Rule for me: an artefact's commit string is read before it is pushed anywhere (the inputs step now prints it; the installer check too). The Mac igneumd on f1ea7a38: 85ac04df27b342f5cd225762a940400bb6142401f33b41fc7ea8ea462508ded1 41,819,648. Suite on the box on f1ea7a38: kaspa-consensus 99/0, consensus-core 111 + 7, igneum-exec 20, igneum-miner 18, kaspa-pow 15, p2p-flows 33.

Final Windows on f1ea7a38 (windows.yml run 37530680431 on 24132fb, 18 of 18 steps, 21:07Z): Igneum-Miner-Setup-0.3.15.exe 99ec575ccbeef2e0fd1ff5c4ce1646905cb5e88efe31f71eb3058337641b3ec7 62,652,179; igneum-windows-app.zip a379bc446d55b8d659d72e7fd403749cb9d6d751dd9a39a8be2672cbfd1c7ecd 90,511,038 (its igneumd.exe 181e10fd carries f1ea7a38; wsl2/bin/SHA256SUMS names the prover pair 71bc2438 / 263bf4ce). Final manifest 0.3.15: mac 041099c2 + windows 99ec575c, the thirteen-field object, signed and verified locally; the site index Mac/Windows/HiveOS at 0.3.15 (hive b710ac59). Deploy on the retry's PASS.

Earlier Windows (windows.yml run 37525228879 on c25a3ca, 18 of 18 steps, 20:24:00Z; superseded): Igneum-Miner-Setup-0.3.15.exe 9db842fce524b2a45978f0de6060923ed67144204131724d517b9e1a063695c9 62,663,008; igneum-windows-app.zip 65d463c305d23128896e33c10cca9c6dc6ccac12ba829ed1890d3d4a2acd9240 90,518,322 (the Linux prover pair inside: wsl2/bin/igneum-prove-host 73,161,528 with SHA256SUMS). Manifest 0.3.15: mac ab925203 + windows 9db842fc, the thirteen-field object, signed and verified locally (the deploy on main's line).

Installer, zip and manifest rows above (tools/ship-app.mjs 0.3.15 ... --until manifest).

5. Gate

Line Result
node suite on igneum-build-1 (713ef876, six crates, --no-fail-fast) kaspa-consensus 97 + the recorded flake ban_is_decided... 1/1 alone, consensus-core 111 + 7, igneum-exec 20, kaspa-pow 15, igneum-miner 18, p2p-flows 33
app crate tests (release-0.3.15) 162 + 28 + 8; UI 37
worker smoke, Mac (Metal, serve mode, epoch-2 v4 pack 24304f0788ea9408) 1,024 of 1,024, sha256 7bf77506... equal to igneum-pow's derivation (19:16Z)
worker smoke, Linux (the hive package's igneum-worker-cuda 97e036e2 on the fleet's p1-4090, RTX 4090) 1,024 of 1,024, sha256 7bf77506... equal to the Mac's; done g2 in 2.44 s, self-test PASS (19:2xZ; rechecked from this tree)
worker smoke, Windows (the kit's igneum-worker-cuda.exe 14b6637e on PC 2's RTX 5090, job v4-smoke-1ccfe586) 1,024 of 1,024, sha256 7bf77506... equal to the Mac's; done g2 in 2.71 s (19:24:25Z)
Devnet 2: P1 rehearsal PASS (19:33Z): the flip by signal on 52 nodes, three epochs' ids, zero rejected on 16 nodes, the stale box refused both ways, blocks on v4, the floor crossed with v4 in force
Devnet 2: 0.3.15 canary (run 4, 19:41Z: p2-3090-1, p2-4090-3, p1-3080, p1-a5000 on 713ef876, the thirteen-field file) FAIL. The handshake peers (digest b18ed271) but the node writes block version 1026 (the class v4 signal bit) from its first block with no window and no floor set; every 0.3.14 node answers "wrong block version: got 1026 but expected 2" and disconnects (the hub: 45 disconnects since 19:41Z, 146 today); p2-3090-1 fell behind and could not re-sync (peers 0); the siblings lost every block they mined. Rolled back to 0.3.14.

6. Incidents of the day that shaped this cut

  • 17:52:54Z, PC 1: 0.3.14 installed under a measurement job; cause install_asked from a two-hour-old update-now, which counts as urgent (section 1, the updater rule).
  • 18:2x UK: the desktop app crashed and both hand nodes (nohup children of agent shells) died for about 70 minutes; now LaunchAgents (infra/devnet/hands-launchd.sh).
  • 18:3xZ: every PC ran a stale igneum-prove-host and igneum-prove-export (the payload never carried the Linux pair); placed by job tonight (zigbuild pair 75166ad8 / 24d34cb9), required in the payload from 0.3.15.
  • 18:58Z: restart --what app jobs to both PCs quit the apps and the relaunch helper did not bring them back (the engine exits under the stale window host); retired until fixed with a watcher. Recovery through the relay agent on PC 2; PC 1's agent was down.
  • 17:47Z onward: the pre-push hook's site build wrote 0.3.14's download rows into five worktrees; fixed on master (SITE_DOWNLOADS_REFRESH, tools/ci/no-foreign-tree-writes.sh).
  • 18:5xZ: the P1 rehearsal's flip stopped every GPU miner on the 0.3.14 worker (generator-4 refusal); hence section 2's worker rule.

6a. The evening's two blocks on the ship itself

  • 19:24Z onward: every GitHub-hosted Actions job dies at start ("recent account payments have failed or your spending limit needs to be increased"); the Windows installer and payload zip are made only by windows.yml on windows-latest, so the Windows side waits for the org's Billing & plans. The Mac DMG, the HiveOS package and the Linux binaries do not depend on it.
  • 19:30Z: tools/ship-app.mjs's commit step pushed the release tree's HEAD to origin/master although the run had --branch release-0.3.15 (the step pushes master by design); master carries the 0.3.15 tree from 272e30a. Row: the tool honours --branch for the push, and the after-rollout merge is thereby already done.
  • The inputs step compared the state's short fork commit with the manifest's full one (!==): two needless re-pushes and a false failure; fixed (a prefix match, the manifest read bypasses the CDN cache).
  • --until <step> added to the ship tool: a cut is staged (built, signed, verified locally) with nothing deployed.

6c. The canary's FAIL and the gate line that was missing

The digest readings were on a throwaway node with no peers; the node lane's compat harness peered a new and an old node on the thirteen-field file but neither mined; the rehearsal ran the signalling binary on every node. None of the three put a BLOCK from a new node in front of an old node. The line every node cut needs from here: a mining new node beside an old node on the live file, the old node accepting the new node's blocks, plus a fresh join of a clean new node against an old peer. Proposed for CLAUDE.md's Devnet 2 rules (main's call).

The fix (node lane): the signal stamp and the signal read gated on publish 2's object (both v4 fields set); a template on the thirteen-field file has header version 2, on the sixteen-field file 1026; the digest tests unchanged; the harness with the new node mining. Then the node rebuilds (Linux, Windows cross, Mac), the digests are re-read, the canary runs again. The app tree needs nothing.

6d. The second canary FAIL (20:36Z): the receive side

On 7961c5f1 (the stamp gated), two boxes with clean datadirs got "wrong block version: got 1026 but expected 2" from both hands within three minutes: a version-1026 block from the poisoned boxes' branch reached them via relay through pool-1 (a 7961c5f1 node poisoned by p1-a5000), the new node ACCEPTED and RELAYED it, the 0.3.14 nodes rejected the relay and disconnected the sender. One poisoned peer poisons every new node it touches. The fix (node lane): the header-version RULE gated like the stamp (window or floor absent: version 2 only, 1026 rejected with 0.3.14's line, no relay; publish 2's object: both accepted); unit tests both ways; the compat harness with a poisoned peer. The retry form adds the poisoned peer relaying into the new node. Fleet: pool-1 and the three retry boxes held on 6615571c for the next cut; the 0.3.14 poisoned boxes (p1-3080, p2-3090-1, p1-a5000) wiped and fresh-joined from the hub.

Lesson for every node cut: the compat gate needs the receive side as well as the mining side: a peer feeding the new node the headers the rule must refuse, with the old node watching the new node's relays.

6e. Publish 1 as run (21:39Z to 21:47Z, 22:39 to 22:47 UK)

  • 21:40Z deploy: the public folder verified file by file (200 with the local sizes); the live manifest 0.3.15 with mac 041099c2 and windows 99ec575c, the thirteen-field object (13 fields, exec_restart_number 27276), digest b18ed271.
  • 21:41:33Z update-now to PC 1 (ae432dc7), PC 2 (1ccfe586) and the Mac (d937c69d). PC 2 took it at 21:42:26Z ("updated to Igneum Miner 0.3.15 from 0.3.14", node igneumd 2.1.0-f1ea7a38); the Mac and PC 1 show app 0.3.15 on the console within the minute.
  • 21:42Z the hands (announced), through hands-launchd.sh on the Mac igneumd 85ac04df: observer pid 60931 and node 1 pid 61387, both igneumd/2.1.0-f1ea7a38, digest b18ed271, each resumed from its own exec snapshot (node 1 at tip 147,215), eth_blockNumber 147,233 on 26790 and 26791 a minute later.
  • 21:43Z the seed: the box's Linux igneumd 7f0bde70 (glibc 2.39) does not run on the seed (Debian 12, glibc 2.36: "version GLIBC_2.38 not found", 14 restarts in a loop, about three minutes down); re-run at 21:46Z on the zigbuild igneumd ede4a61ac9ab0993c644f82d61077c34fce11d7f8ffc642e8052887b978deeb3 (48,421,224, glibc 2.34 max, carries f1ea7a38): active, exec resumed from its own snapshot at tip 147,247. Rule: the seed and every Debian 12 host take the zigbuild (glibc 2.36) binary, the fleet (Ubuntu 24.04) takes the box's; restart-seed.sh now has to refuse a binary whose GLIBC need exceeds the host's (row).
  • The fleet's standing boxes: by the fleet agent's script on 7f0bde70 (table owed).

6b. Publish 1 as staged (the downloads folder, local until the line)

  • Manifest 0.3.15, Mac row only (Igneum-Miner-0.3.15.dmg 90bdf8c8, 41,961,932), the thirteen-field object, signed; a Windows box reads "no file for this platform" and waits. Site rows: Mac 0.3.15, HiveOS 0.3.15 (1715e58e), Windows carried on 0.3.14 (publish-public.sh keeps a platform's previous file when the manifest lacks it: packaging/ota/aliases.py), wallet 0.1.4.
  • Sequence (scratchpad r0315/publish1.sh): deploy the folder; update-now to the Mac (d937c69d, miner paused per the project lead); the fleet's standing boxes by the fleet agent's script (06211d55, generator-4 workers); the hands on the Mac binary 7f0948d9 through hands-launchd.sh (announced); the seed on 06211d55; every version and digest line read back. The Windows row joins through ship-app.mjs --from ci when GitHub's billing block lifts. The Discord card waits for the full set.
  • Trigger: the fleet's canary PASS (run 4: three of four boxes met every criterion at 19:49Z; p2-3090-1's re-sync is the open verdict) or main's call at 20:00Z.

7. Owed

  • Publish 2 after every node and every worker reports 0.3.15; the hands' move; the first locked checkpoint after the flip.
  • Pool-v0 fork commits (48c8163b, b8070476) for 0.3.16 (b8070476 conflicts with the 0.3.15 miner).
  • Ember 995530b (card.tune_floor) for 0.3.16.
  • The prover thread drops its cached tool paths when a stale binary is named (0.3.16).
  • The relaunch helper fixed with a watcher, or restart --what app stays retired.
  • Env-only defaults for the eight scripts that name the shared checkout by absolute path.
  • 0.3.16 node tree (ca3-v4-0316): 8e2f5cbe (the unwrap class), 0760b844 (the seven-window signalling rule, gate PASSED four cases), b2e21447 (finality cause fields), eec34ac3 (igneum_getRecentBlocks), 325f8b98 (difficulty rule v3 behind difficulty_v3_activation_daa at u64::MAX, digest unchanged until set). Pre-existing breakage to fix in that cut: cargo check -p kaspa-testing-integration --tests fails on the fork (the Header initialiser lacks vote_key_hash; the KaspadPayloadOps match is non-exhaustive on the finality ops), broken since the finality fields landed; the box suite then compiles EVERY test crate (cargo test --no-run --workspace or the crate list widened) so a test crate cannot rot silently again.
  • 0.3.16 node tree, proving agent: exec-sync-0313 da2d17ec (on 2e5d3d30) = consensus proof verification in-process (sp1-sdk 6.8.1 linked, 169 crates; three override fields in the digest once set: proving_consensus_verify_daa, proving_shard_program_id 0x2b1a81cb..., proving_aggregator_id 0x474678f3...; p2p payload 78 IgneumRequestProofRecords; a node with other embedded keys exits 3 at start); never by default, a digest move when switched, miners first. App side exec-app-0314 c00e608 (the proving-dir cap, forged.mjs harness 8/8, ledger P21 round 4 and its export-disk row labelled X31, which the site lane already used on master (X31 the testnet date, X32, X33): renumber the proving row X34 at the merge and rerun the ledger-text check). The fork's proof fixture is untracked at igneum/exec/testdata/ (the test skips without it): a build row.
  • Wallet 0.1.5 (Igneum-Wallet-0.1.5.dmg bf37a4ec, node 7961c5f1, wallet-ui-3 ab8dfdc): the gate and the publish straight after "0.3.15 live" (the wallet in the wild bundles a 5 October igneumd at protocol 12, the hub's 172 "level is 0" rejects); not held.
  • A standalone igneum-miner does not recover its template subscription after a node restart (fleet, 20:24Z): ledger row, fix = resubscribe on reconnect (0.3.16, the miner's owner); the fleet's restart script restarts the miner with the node until then.
  • 0.3.16 node tree: the finality lane's LEAVE item (finality-pause-node 766e70ca on the box mirror /srv/igneum-node.git, one commit on 4c6b129d, rebases onto the 0.3.15 node with only params.rs overlapping; docs on origin finality-pause 27f82ec) is a digest move (the devnet digest becomes 63703f5b..., protocol 17) gated by finality_leave_activation_daa (never on devnet until the 95 percent signal); its Devnet 2 gate is tools/finality-attacks/leave.mjs both ways with the new binaries, before it merges.
  • With the after-rollout merge: the relay security fixes X23 to X28 (28c028b, on fud-close and the ledger-* branches only; the intake key gets 403 on console writes while master lacks them).
  • DONE 20:3xZ: packaging/ota/publish-manifest.sh refuses an --activation-height at or below the live DAA (the observer's executedTipDaa; IGNEUM_MANIFEST_ALLOW_PAST_HEIGHT=1 for a replay; --self-test-height), the engine half with the Ember agent for 0.3.16.
  • 0.3.16's app merge, as the lanes handed it: app/igneum-app/ui/ whole from miner-ui-4 e31acab (the UI pinned to the 0.3.16 engine fields); src/live.rs, ui/app.js, the /api/live route and packaging/ota/publish-manifest.sh from ember-tune b726ce4 (pinned to the node lane's ca3-v4-0316 b2e21447 finality-pause fields and eec34ac3 igneum_getRecentBlocks, reading the absent-field path on an older node; the node source in the site's row shape, the finality-paused state, the activation-height guard with --self-test-height; 652f6fc's guard is dropped at that merge), not miner-ui-4's 0.3.15 files; Ember's 995530b and aa73005 fields (watts_total, pounds_per_day, balance_wei, price null with the manifest rule, tune_floor, the finality pause rule fd03f35).
  • The publish side owes a way to set the manifest's top-level "urgent": true for an emergency rollout through a finality pause (fd03f35 reads it; igneum-ota-sign passes the document through): a publish-manifest.sh flag.
  • The gate line for every node cut from here (main writes it into CLAUDE.md): a mining new node beside an old node on the live file for ten minutes, the old node's reject count read before and after, and one new node restarted mid-window re-syncing from an old peer.