# Igneum Miner 0.3.5: the merge, staged overnight (4 to 5 October 2026) Prepared by the integration agent while the owner slept. Nothing was deployed, published or merged to master. The app work sits on branch `release-0.3.5` (pushed to origin), worktree `/Users/joshm/Projects/igneum-wt-release`; the node work sits on the fork branch `release-0.3.5` (local only; the fork has no remote), worktree `vendor/igneum-node-release`. The morning cut is one command (section 4) after a fast-forward of master. ## 1. What is in ### 1a. The app repository (branch `release-0.3.5`) | Merged, in this order | Branch head | Merge commit | What it carries | Conflicts and how they were resolved | |---|---|---|---|---| | `origin/miner-eff` | b80d4c9 | fcadcc5 | hash-per-watt sweep in the app engine (`src/sweep.rs`, config, detect, server, state, UI), `relay/playbooks/sweep-5090.ps1`, `docs/plans/miner-eff.md` | none | | `origin/app-ui` | 80c99a8 | 112b496 | the log drawer rebuilt, every screen on one type scale, idle canvas and polling when hidden; `tools/ui-mock/` (a recorded-state mock server for UI work) | `ui/app.css`: both sides kept; `.power .pv` takes app-ui's `var(--t-sm)`, the sweep rules from miner-eff stay, `.pin` moved onto the scale (`var(--t-xs)`) | | `origin/miner-perf` | e9f8847 | 98726f0 | variant racing in `proto-cuda/nvrtc/worker.cpp` and `proto-metal/main.swift`, TUNING records in the engine, the manifest's `tuning` object (`manifest.rs`, `ota.rs`), `tools/tuning.mjs`, `relay/playbooks/race-5090.ps1`, `docs/design/miner-tuning.md`, `docs/plans/miner-perf.md`, bench-log entries | `state.rs`: both field blocks kept (sweep fields, race fields). `docs/bench-log.md`: both appended entries kept. `packaging/ota/publish-manifest.sh`: ONE implementation. Master's `--override` (b84644c: the object carries every height switch; `--verify-only`, `--tries`, the retrying byte-identical live check) is the base; miner-perf's `--tuning ` / `--no-tuning` added, plus its carry-over of `consensus.override` and `tuning` from the manifest already in the folder when neither is given. The duplicate `--override` case the auto-merge produced was removed | | `origin/build-job` | 4e94f27 | 7eb83ff | job kind `build` (`jobs.rs`, `jobrun.rs`, new `jobbuild.rs`): a PC builds the node and the app engine for Linux and Windows inside WSL2; `publish-jobs.sh add --kind build`, `packaging/windows/push-build-inputs.sh`, `tools/build-job.mjs`, `tools/relay.mjs` | `publish-jobs.sh`: master's `verify` command and `--tries` kept next to the build kind's arguments; the usage range widened to the merged header | | `origin/dev-fee` (merged twice: 6b4ec59, then its later tip) | 293fc0b | 49f95de, 1b287d4 | the miner software's dev fee on the app side: the `dev_fee` setting (default on, `--dev-fee 0` passed when off), `DevFeeState` and the UI line, `fee_total` across runs, `dev-fee block` events; the HiveOS package (`packaging/hive/`), `infra/cross/build-workers-linux.sh`, `tools/dev-fee/run.mjs`, `docs/design/miner-dev-fee.md`, ledger and site text | `config.rs`, `state.rs`, `engine.rs`: both sides kept (the sweep fields and `installed_at` from miner-eff next to `dev_fee` and `fee_total`; the engine's settings snapshot sets both and the `DevFeeState` line stays). The generated site pages were rebuilt afterwards (a91ff81). The second merge (161e48c, 293fc0b: the test-network measurement in the bench log, `run.mjs` waits for the nodes) conflicted only in `bench-log.md` and the generated pages: both entries kept, pages rebuilt | | `origin/miner-reliability` | 59d843f | f7d2af7 | the app watchdog per card and per node (`src/watchdog.rs`), WORKER FAULT and `mismatched=` read from the miner, the reliability test harness (`tools/reliability/`), the public GPU bench table (`site/miners.html` from `site/miner-bench.json`), bench-log and ledger entries | `engine.rs`: the sweep state (miner-eff) and the node watchdog kept together; the STATUS line goes through `watchdog::parse_status` and still feeds the sweep's rate sample. `main.rs`: both modules. `bench-log.md`: both entries. `site/build.mjs`: master's partial-injected pages kept, the `/miners` table added through the same `page()` with `active: 'miners'`; the Miners link added to `site/partials/nav.html`; `/miners` added to the sitemap; every generated page rebuilt (`node site/build.mjs`) | | `origin/master` (merged five times as it moved, 37 commits in all) | c40fd86 | cc71ed6, ce74626, 5672a28, 1c33898, and the last | the bug hunter's night: console parsers in `relay/lib/parse.mjs` with `node --test relay/test`, the identity-scrub fix 2996cca (CI green), publish-jobs and publish-manifest verify changes, autosync, `console_ota_memo`, bugs.md rows | none (the publish-manifest.sh and publish-jobs.sh reconciliations of this branch sit on top of master's verify changes; `--tuning` and `verify` both present on the tip) | | `origin/bugfix-collect-exit` | 35ccdc8 | e53d337 | a collect job whose command exits non-zero is failed with that code (`collect_done`, unit test); collect-pc1-board3 had reported done over exit 1 | none | | `origin/fud-consensus` (carries the redteam branch) | 0420c88 | 7abce72 | round-4 consensus items on the app side: `tools/finality-attacks/fud.mjs` and the red-team runners, harness s8 steady state and port/data-dir overrides, specs 02/03/08, ledger F23 F24 G12 X18 M30 M31 F25, `docs/review/redteam-2026-10-04.md`, result files | `docs/bench-log.md`: both appended entries kept. No app or site file changed | Master's fix 0d123b3 (OTA Windows helper: `CREATE_NO_WINDOW` only, no `DETACHED_PROCESS`) is the branch point and survived every merge: `grep -n 'creation_flags(0x0800_0000); // CREATE_NO_WINDOW' app/igneum-app/src/ota.rs` gives one line on the final tip (checked after each merge). Totals against origin/master: 107 files, 12,398 insertions, 387 deletions. Final tip: the last commit of this branch (the plan file follows the code; the last code merge is 7abce72, fud-consensus). ### 1b. The node fork (branch `release-0.3.5` in `vendor/igneum-node-release`) The shipping node is `finality-fixes` (6aa69a45: proving v0 plus finality v3, the fork 0.3.4 shipped from). The miner changes of the night live on fork branches based on `devnet-v4` (3bfe346f), which has neither proving nor finality v3, so a release branch was made from `finality-fixes` and the miner branches merged into it. Neither `finality-fixes` nor `devnet-v4` was touched. | Fork merge | Head | Merge commit | What it carries | Conflicts | |---|---|---|---|---| | `dev-fee` (local, created from the worktree change) | a2c7ba83 | 4d3c7482 | `igneum-miner --dev-fee ` (default 1: one template in 100 is requested with the dev payout address, deterministic by counter; 0 off), `dev-fee block` lines, `igneum-miner payouts` (the audit) | `igneum/miner/src/main.rs`: both kept, the `pub(crate)` visibility the proving modules need (finality-fixes) with the fee fields and parameters (`fee_extra_data`, `Template.dev_fee`, `template(.., fee)`, `submit(.., fee) -> bool`); `proving.rs`: vmine calls both with `fee = false` | | `miner-reliability` | 945153ab | 6ef230d5 | `igneum/miner/src/guard.rs` (fault guards as state machines: interval baseline per worker process, prepare rate limit, CPU re-check stop, restart back-off and exit 43), a dead worker's stdin no longer spins the fill loop, the worker line read waits one status interval | none | | `bugfix-build-info-worktree` (local, worktree `vendor/igneum-node-bughunt`) | a498d1bf | 2e75a238 | `build-info/build.rs`: a worktree's `.git` is a file; the walk had climbed into the vendoring repository and embedded ITS commit, which is why 0.3.4 reports `igneumd/2.1.0-73fc2fd` (Windows) and `-1b65132` (Mac), neither a fork commit. Now the HEAD file comes from the checkout's own git dir and the ref from the common dir | none | | `fud-consensus` (local, worktree `vendor/igneum-node-fud`, built on finality-fixes) | 977db931 | b2578ae7 | F23 chain-decided bans with the persisted finality state in layout 2 (a layout-1 blob is read and converted on start), F24 re-determination after reorgs (and un-determination when the new chain has not reached the index), G12/X18 env gate and the consensus params digest in the handshake with a devnet allowance for digest-less peers, M30 the PoW cache keyed by day (the live 270 MB per hour growth), M31 one coinbase payload limit on every network | none (auto-merged, including `igneum/miner/src/main.rs` and `proving.rs` next to the fee and guard changes; `consensus/src/processes/finality.rs` had no conflict with the base) | | `m20-pruning` (local, worktree `vendor/igneum-node-m20`, based on release-0.3.5 2e75a238) | d35b00cf | 20139145 | pruning proofs checked with the Igneum lottery hash and the chain seeds (ledger M20): `pruning_proof/validate.rs`, the IBD proof flow and the p2p proof messages carry the seeds | none | The first two touch the miner crate only; the third changes the commit every binary embeds; the fourth changes consensus (finality, pow, params, p2p handshake), so the consensus suites were rerun on it (3b). The finality v3 and proving text is in every igneumd built below (checked with `strings`), and the embedded commit is now the fork's (section 4a). ## 2. What is out, and why | Branch | State at 23:05 UTC | Why | |---|---|---| | `miner-latency` | not on origin (local app branch at e7225b7 = its base, no commits); fork side `vendor/igneum-node-latency` branch `miner-latency` at 0f88b6d6 (one commit over devnet-v4: template subscription, node-side prewarm) | nothing on origin to merge. If it lands before the cut: merge the app side the same way (section 3's checks), merge the fork branch into the fork's `release-0.3.5`, rebuild the miner for the three platforms (the scripts in section 4b take about 35 min for the three in parallel) | Everything else the task named is in. The poller (`git fetch` every 10 minutes from 21:34 UTC) caught `dev-fee` at 21:48; `miner-reliability` (59d843f) was merged at 22:24 as soon as it was reported on origin. ## 3. Test results, with the command Every build ran through the main checkout's lock, `/Users/joshm/Projects/igneum/tools/lock/with-lock.sh build`, at `nice -n 19` with `-j 4`. The app tests ran in `/Users/joshm/Projects/igneum-wt-release/app/igneum-app` (target directory cloned by APFS from the main checkout's). The rustup cargo (1.99.0) is the one on `~/.cargo/bin`; Homebrew's 1.69 cannot read the lock file. ### 3a. The app engine, after every merge | After merge | Tip | `cargo test -p igneum-app` | `cargo check --target x86_64-pc-windows-gnu -p igneum-app` | |---|---|---|---| | miner-eff | fcadcc5 | ok: 36 passed (lib) + 19 passed (bin), 0 failed, 21:27:31Z | ok, 21:28:18Z | | app-ui | 112b496 | ok: 36 + 19, 0 failed, 21:29:14Z | ok, 21:29:15Z | | miner-perf | 98726f0 | ok: 38 + 20, 0 failed, 21:31:46Z | ok, 21:31:50Z | | build-job | 7eb83ff | ok: 44 + 22, 0 failed, 21:33:07Z | ok, 21:33:12Z | | origin/master | cc71ed6 | ok: 44 + 22, 0 failed, 21:35:34Z | ok, 21:35:35Z | | dev-fee | 49f95de | ok: 44 + 22, 0 failed, 21:48:14Z | ok, 21:48:17Z | | miner-reliability | f7d2af7 | ok: 55 + 22, 0 failed, 22:25:32Z | ok, 22:25:36Z | | dev-fee second tip (no app source changed) | 1b287d4 | ok: 55 + 22, 0 failed, 23:17:28Z (tip bd57866 = 1b287d4 plus this file) | ok, 23:17:28Z | | master 2897e21 + bugfix-collect-exit | e53d337 | ok: 56 + 22, 0 failed (the collect_done test among them), 01:03:02Z | ok, 01:03:02Z | | fud-consensus (final tip; no app source changed) | 7abce72 | ok: 56 + 22, 0 failed, 02:20:01Z | ok, 02:20:01Z | ### 3b. The node fork Mac build and tests in `vendor/igneum-node-release` with `CARGO_TARGET_DIR=vendor/igneum-node/target-release` (APFS clone of `target-finality`, 91 s to clone): | Fork tip | Command | Result | |---|---|---| | 4d3c7482 (dev-fee merged) | `cargo build --release -j 4 -p kaspad -p igneum-miner --features kaspad/igneum-pow` | ok, 31 min 27 s (22:22:55Z) | | 4d3c7482 | `cargo test -p kaspa-consensus --features igneum-pow -- finality` | ok: 4 passed, 0 failed (88 filtered), 22:49:44Z | | 4d3c7482 | `cargo test -p kaspa-consensus --features igneum-pow -- difficulty` | ok: 15 passed, 0 failed, 22:49:50Z | | 4d3c7482 | `cargo test -p kaspa-pow` (the igneum-pow crate) | ok: 7 passed, 0 failed, 22:55:41Z | | 4d3c7482 | `cargo test -p igneum-miner` | ok: 5 passed, 0 failed (the dev-fee extra-data tests among them), 23:01:04Z | | 6ef230d5 (miner-reliability merged) | the same release build | ok, 11 min 50 s (23:29:22Z) | | 6ef230d5 | `cargo test -p igneum-miner` | ok: 12 passed, 0 failed (the guard tests added), 23:29:40Z | | 2e75a238 (build-info fix merged) | the same release build | ok, 9 min 39 s (01:12:42Z) | | 2e75a238 | `cargo test -p igneum-miner` | ok: 12 passed, 0 failed, 01:12:48Z | | b2578ae7 (fud-consensus merged) | the same release build | ok, 16 min 58 s (02:36:58Z); igneumd ffbc9b17..., igneum-miner 4190bded... (superseded by the final round) | | b2578ae7 | `cargo test -p kaspa-consensus --features igneum-pow -- finality` | ok: 8 passed, 0 failed (4 new tests with F23/F24), 02:41:04Z | | b2578ae7 | `cargo test -p kaspa-consensus --features igneum-pow -- difficulty` | ok: 15 passed, 0 failed, 02:41:06Z | | b2578ae7 | `cargo test -p kaspa-pow` | ok: 7 passed, 0 failed, 02:41:23Z | | b2578ae7 | `cargo test -p igneum-miner` | ok: 12 passed, 0 failed, 02:42:08Z | | b2578ae7 | 6-s scratch run on devnet params over an appdir the 0.3.4 build (6aa69a45) had written | header `igneumd/2.1.0-b2578ae7`; the digest line printed: `Consensus params digest: 9409dedac4bf9f0f20a54fb169b52a75a2903364909fe9ffd6fc5cdcd9d95d38 (exchanged in the p2p handshake; a peer with another digest is refused)`; the finality section line (rule v3 from checkpoint DAA never); clean start and clean stop over the appdir the 6aa69a45 build had written, no error line. The "state blob of layout 1 read and converted" line did NOT print because that appdir held no finality state blob (an 8-s run from genesis writes none); the conversion path is covered by the finality unit tests above, and the real proof is the first 0.3.5 node over a live 0.3.4 appdir (the Mac node 1 or the seed), which should log that line once | | 20139145 (m20-pruning merged; the final fork tip) | the same release build | ok, 26 min 27 s (03:09:38Z) | | 20139145 | finality / difficulty / kaspa-pow / igneum-miner suites | finality ok 8 passed (03:13:42Z); difficulty ok 15 passed (03:13:44Z); kaspa-pow ok 7 passed (03:13:59Z); igneum-miner ok 12 passed (03:14:34Z); 0 failed | | 20139145 | `cargo test -p kaspa-consensus --features igneum-pow -- pruning_proof` (M20's crate) | ok: 4 passed, 0 failed, 03:15:51Z | The consensus, difficulty and pow crates are untouched by the reliability merge (miner crate only) and by the build-info fix (a build script that only changes the embedded commit string), so their 4d3c7482 results stood until fud-consensus, which changed all three; every suite was rerun on the final tip 20139145. ### 3c. The other checks, on the files each merge changed | Check | Command | Result | |---|---|---| | Console parsers | `node --test relay/test/parse.test.mjs relay/test/auth.test.mjs` (the bug hunter's tests, as CI runs them) | 6 tests, 6 pass, 0 fail | | JavaScript parses | `node --check` on `tools/ui-mock/server.mjs`, `tools/tuning.mjs`, `tools/build-job.mjs`, `tools/relay.mjs`, `relay/api/console.mjs`, `tools/dev-fee/run.mjs`, `tools/reliability/*.mjs`, `site/build.mjs`, `app/igneum-app/ui/app.js` | all parse | | Shell parses | `bash -n` on `publish-manifest.sh`, `publish-jobs.sh`, `push-build-inputs.sh`, `infra/cross/build-workers-linux.sh`, `packaging/hive/*.sh` | ok | | PowerShell parse rule (no `$var:` inside double quotes; `${var}` instead) | a scanner over every tracked `.ps1` and the PowerShell strings in `ota.rs`, `jobrun.rs`, `jobbuild.rs` (scratch script `pscheck.py`; `tools/ci/windows/check-ps51.ps1` needs a PowerShell this Mac lacks) | 0 hits in `sweep-5090.ps1`, `race-5090.ps1`, `jobrun.rs`, `jobbuild.rs`; dev-fee and reliability changed no `.ps1`, `ota.rs` or `jobrun.rs`. The three hits in the tree are the unchanged baseline: two comments in `check-ps51.ps1` that quote the rule, and `ota.rs` line 1190, the Mac helper's bash (`$MODE:` in bash is plain text) | | `node site/build.mjs` | after dev-fee (site text) and after miner-reliability (the new `/miners` page) | built: bench, journey (40 entries), index, litepaper, live, evidence, 404, miners (6 rows); `miners.html` carries the nav with `aria-current` on Miners | | `publish-manifest.sh` after the reconciliation | four runs against a scratch `--dest` and `--base-url` with the real signing key: `--override` + `--tuning` given; nothing given (both carried over); `--no-tuning`; `--override '[1]'` (must fail) | the four manifests came out as intended; the bad override exits 1; `--verify-only --tries 1` still runs and fails on the unreachable base as it should | | `publish-jobs.sh add --kind build` | against a scratch folder, with the signer rebuilt from the branch (`cargo build --release --bin igneum-ota-sign`; the old signer refused the kind) | ok: one build job, signed, listed with its budget, targets and zip hash | | `tools/ship-app.mjs --check` and `--self-test` | on the merged tree | 0.3.4 in all 6 version files; all self-test checks passed | | `tools/ship-app.mjs 0.3.5 ... --dry-run` | from the release worktree with `--branch release-0.3.5` (before the fork rebuild) | preflight read everything and printed the plan | | Swift worker typechecks | `xcrun swiftc -typecheck proto-metal/main.swift` | 0 errors | | NVRTC worker | `clang++ -std=c++17 -fsyntax-only proto-cuda/nvrtc/worker.cpp` | not checkable on this Mac (`cuda.h` is not installed); the PC compiles the worker itself at first start | | Proto workers' Rust unit tests | none exist (`proto-cuda/nvrtc` is C++, `proto-metal` is Swift; `proto-vdf` untouched) | n/a | | Dev fee present in the built miners | `strings -n 8 \| grep -c dev-fee` | Mac, Linux and Windows miners: hits; the finality-fixes miner: 0. `finality_v3_activation_daa` present in every igneumd | ## 4. The morning cut ### 4a. The binaries (built overnight from fork 20139145; the morning command points at them) | Platform | Path | sha256 | Size | Build | |---|---|---|---|---| | Mac arm64 igneumd | `vendor/igneum-node/target-release/release/igneumd` | ac6b5c38933c934b3be4bbb3098e21cd013020e039e548f69e19a26fd6dd2ebe | 40,901,776 | release build, 4 jobs at nice 19 | | Mac arm64 igneum-miner | `vendor/igneum-node/target-release/release/igneum-miner` | aa57cefe68c837689c3b34c3a2cab2b7225f13231791fe2f59ecb06efa2c9dde | 8,249,776 | same | | Windows x86-64 igneumd.exe | `vendor/igneum-node/target-release-win/x86_64-pc-windows-gnu/release/igneumd.exe` | 32fd3403fdf10ac6807aea26903e9b95d0939af5f543096cbaea8ff0dd003d8f | 50,709,504 | `proto-cuda/windows-node/cross-build.sh`, 26 min 4 s (mingw, static libgcc; `libstdc++-6.dll` in the import set as in 0.3.4, the payload carries it), target directory cloned from `target-finality-win` | | Windows x86-64 igneum-miner.exe | `vendor/igneum-node/target-release-win/x86_64-pc-windows-gnu/release/igneum-miner.exe` | c16dfbef2717639e592a99e33ee3c516adc3c779f1a02e1756d58ba0c3db6a19 | 10,447,872 | same | | Linux x86-64 (glibc 2.36) igneumd | `infra/cross/out-release-0.3.5/igneumd` (from `vendor/igneum-node/target-release-linux`) | c98a23da34327ddd0dde98736545eaffb8361d9b2f6a8d176529ca8b040835ed | 47,386,152 | `infra/cross/build-linux.sh` with cargo-zigbuild, 1,573 s, target directory cloned from `target-finality-linux`; for the seed and the HiveOS package, not part of the app | | Linux x86-64 igneum-miner | `infra/cross/out-release-0.3.5/igneum-miner` | daf0e23ea6af525e3347e011e951d433352189c95c5df003a272ebb954b7d799 | 9,339,080 | same | Earlier rounds, superseded by the table above. Round 3 (fork 2e75a238, build-info fix): Windows igneumd.exe 5ea2957b545c222456bc906a541ef75eb158bce46b96aff9959b494b2c4784e4 / igneum-miner.exe 2417bea7d84eb5b852890f84e58e9025359d13c73be50f9c393563654d44c2a2; Linux igneumd bd613d953858f97bfccc291796ad3148b9e0c823cbcd8dfe85829c8aeb9156e0 / igneum-miner c7fb1806deeb97294a5645a5f1dd4f293c50e037218cecd9f7cc9d2465bcc1cd; Mac igneumd fad0ef913371346298b00362764c8517076aafcad5dbff82a6469ba67c86aa9b / igneum-miner 537cef5524c32b55ccf5fc985ff45a4f7e2016e7de1cf70195e9e0832669110c. Round 2 (fork 6ef230d5, before the build-info fix): Windows igneumd.exe 09c80e20744c12cc71691aa349496dc54e92714f11258e840292e51441d4dca0 / igneum-miner.exe 2417bea7d84eb5b852890f84e58e9025359d13c73be50f9c393563654d44c2a2; Linux igneumd f2c2065a6dfb39ec2ef5b5fc9c4a5326441529b2690f732ef1f1ff59fff8b623 / igneum-miner c7fb1806deeb97294a5645a5f1dd4f293c50e037218cecd9f7cc9d2465bcc1cd; Mac igneumd cd1a5210dadc72d1e9b129c7065ee2c7dec28a4657efd099168d523828c32335 / igneum-miner 537cef5524c32b55ccf5fc985ff45a4f7e2016e7de1cf70195e9e0832669110c. Round 1 (fork 4d3c7482, dev-fee only): Windows igneumd.exe e34685d291646bbfb8317920ec19587cc74e69a0fd48c19009a2f55aabd9e31e / igneum-miner.exe 84fa01b9bd95f13c9574e2a26308338fe3c29fff7ec1e696c33ec8173d2ba76e (31 min 13 s); Linux igneumd 695e20fc8053cbecd35f392cf09b6b6155c4789cdb2342549185427ea5aca451 / igneum-miner 9a8169272c87e1aa7ec7809fb5b6e3f55eab2ccb5fe0340ebf1442bf835f6df7 (1,947 s); Mac igneumd 743a56cf26370d5dfb22e4f7016e9bee57771078caead8c16fa6448ebf13e141 / igneum-miner 37d101a03754967b3f8bf3920c660ce0584358d6dc5fb5b3f58eaa06647fe3f1. ### 4b. The command From the MAIN checkout, on master. `release-0.3.5` contains origin/master as of c40fd86, so the merge is a fast-forward unless master moved again overnight (then merge origin/master into `release-0.3.5` first, rerun the two cargo commands of 3a, and fast-forward). ``` cd /Users/joshm/Projects/igneum gh auth switch --user igneum-labs git fetch origin && git checkout master && git pull --ff-only git merge --ff-only origin/release-0.3.5 node tools/ship-app.mjs --check # 0.3.4 in all 6 files node tools/ship-app.mjs 0.3.5 \ --node vendor/igneum-node-release \ --win-release vendor/igneum-node/target-release-win/x86_64-pc-windows-gnu/release \ --mac-release vendor/igneum-node/target-release/release \ --notes "Miner dev fee (1 in 100, off in Settings), fault guards and watchdog, efficiency sweep, kernel variant racing, log drawer, build jobs; Windows OTA helper launch fixed" ``` Why these values: | Item | Value | Checked | |---|---|---| | node fork worktree | `vendor/igneum-node-release`, branch `release-0.3.5`, commit 20139145 = `finality-fixes` 6aa69a45 + `dev-fee` + `miner-reliability` + `bugfix-build-info-worktree` + `fud-consensus` + `m20-pruning`; clean working tree | the ship script records the fork commit and branch in `~/.cache/igneum/ship/0.3.5.json` and in the console item | | Windows node exes | `target-release-win/x86_64-pc-windows-gnu/release/{igneumd,igneum-miner}.exe` (4a) | the fork worktree has no `target/` of its own (its builds live under `vendor/igneum-node/target-release*`), hence the two `--*-release` flags; the `inputs` step sees the new miner hash and pushes a fresh `payload-inputs.zip` (one deploy of the downloads folder, as 0.3.4 did at 20:07Z) | | Mac node binaries | `target-release/release/{igneumd,igneum-miner}` (4a) | `igneumd --version` = igneumd 2.1.0 (no commit in that line); the embedded commit (`igneumd/2.1.0-` in the daemon header and the user agent) is `igneumd/2.1.0-20139145` (the header of an 8-s run on a scratch appdir and private ports, 04:10 BST; the digest line `Consensus params digest: 9409dedac4bf...` printed; clean stop, 0 error lines); the full hash 20139145... is in every igneumd (`strings`), the old 73fc2fd/1b65132 in none; the Windows igneumd.exe also carries the digest text. The miners embed no build info (the build-info fix; 0.3.4 reported the vendoring repository's commits); `igneum-miner --help` lists `--dev-fee` | | downloads folder | `~/.config/igneum/dlsite-dir` = `/dlsite` of session cd75457f, linked to Vercel project prj_vxz8Hj... (`.vercel/project.json`); holds every DMG and installer from 0.1.0 to 0.3.4 and the live manifest | it is the real folder, 0.3.4 deployed from it; it lives in a session scratchpad, so move it somewhere permanent when there is a quiet moment | | consensus override and tuning | the live 0.3.4 manifest has no `consensus.override` and no `tuning`; `ship-app.mjs` passes neither flag; `publish-manifest.sh` carries both over from the folder's manifest when present (nothing to carry today) | to publish a height switch with 0.3.5, run `packaging/ota/publish-manifest.sh --version 0.3.5 --override '{...every switch...}' --deploy` after the cut, or pass `--activation-height N --deadline-note "..."` to the ship command (those two it forwards) | | prover in the DMG | `proving/igneum-prove/target/release/igneum-prove-host` and `-export` are absent in the release worktree; present or not in the main checkout decides | the DMG ships without the prover unless they are built first (the dry run notes it; 0.3.4 had the same note) | | GPU workers for Windows | `igneum-worker-cuda.exe` / `-opencl.exe` are not in the tree | the PC builds them itself (a note, not a problem) | | dev fee default | the app passes nothing when the setting is on (the miner's default is 1%) and `--dev-fee 0` when off; the devnet dev address is compiled into the miner (`docs/design/miner-dev-fee.md`) | the start line `dev fee 1% (1 block in 100) to 0x...` shows in the app's log and Settings after the update | Expected ship duration: the Windows CI run (about 10 to 15 min) and the DMG build under the lock (a few minutes with the engine target cloned; longer if the lock is busy) are the two waits. ## 5. The Windows machines (hand installs) and PC 2 Every Windows engine from 0.3.0 to 0.3.4 starts the update helper with `DETACHED_PROCESS`, so PowerShell exits before `ota-apply.ps1` runs and the update sits on "the installer is starting" (docs/bugs.md, 4 Oct 22:25 BST). 0.3.5 carries the fix, so the FIRST install of 0.3.5 on each Windows machine is by hand; every update after it goes over the air. | Machine | id | On | What to do | |---|---|---|---| | PC 1 | ae432dc7 | 0.3.3 | run `Igneum-Miner-Setup-0.3.5.exe` by hand (below) | | US laptop (Intel UHD, OpenCL) | 37ba0461 | 0.3.3 | the same, by its user; send the link | | PC 2 (the 0.3.4 canary) | 1ccfe586 | 0.3.4 | the same: 0.3.4's helper launch has the same flags, so its 0.3.5 update would also stall | The hand install: download `https://dl.igneum.network/dl//Igneum-Miner-Setup-0.3.5.exe` (the link the igneum.network download page carries once the cut is live) and run it. It is the per-user installer: no administrator prompt, the running app is closed and restarted by the installer, the data folder `%LOCALAPPDATA%\igneum` (chain, wallet, settings) is untouched. Check: Settings shows 0.3.5 and the console's Machines card shows the machine back with its hash rate. Without a keyboard at the machine: the remote `run` job path launched the helper fine on PC 2 (the dry run `run-ota-helper-dryrun-pc2` in bugs.md: it logged, checked the hash and refused the wrong one as designed), so a `publish-jobs.sh add --kind run --target ae432dc7,1ccfe586 --script --stop-miners --deploy` whose script downloads the installer, checks its sha256 against the manifest and runs it with `/VERYSILENT` would do the install from here. Untested with a right hash; the hand install is the known path. ## 6. State when this file was last written - App branch `release-0.3.5` at 1b287d4 plus this file, pushed. Fork branch `release-0.3.5` at 20139145 in `vendor/igneum-node-release` (local; the fork has no remote). - The release worktree carries a built `app/igneum-app/target` (debug tests, the Windows check, the release signer); the fork builds live in `vendor/igneum-node/target-release`, `target-release-linux`, `target-release-win` (clones; the `target-finality*` directories of 0.3.4 are untouched). After the cut: `git worktree remove ../igneum-wt-release`; keep `vendor/igneum-node-release` as the record of what 0.3.5's node was built from. - `miner-latency` never reached origin (section 2). - 23:30 UTC: six binaries from fork 6ef230d5. 01:13 UTC: six binaries from fork 2e75a238 (build-info fix). 02:42 UTC: fud-consensus built, all suites green. 03:16 UTC: fork 20139145 (fud-consensus and m20-pruning in) built for the three platforms, every suite green, header and digest confirmed in the scratch run: these are what the morning command ships (section 4a).