14 KiB
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
work sits on branch release-0.3.5 (pushed to origin), worktree /Users/joshm/Projects/igneum-wt-release. The
morning cut is one command (section 4) after a fast-forward of master.
1. What is in
| 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 <file> / --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/master (4 commits after the branch point, merged twice as they landed) |
c257444 |
cc71ed6, ce74626 |
console: the parsed app-log tail is 400 KB, the last OTA state per machine is remembered (console_ota_memo); two bugs.md rows |
none |
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 (1175) on the final tip.
Totals against origin/master: 35 files, 5,212 insertions, 274 deletions. Final code tip: cc71ed6 (ce74626 adds only master's bugs.md edit).
2. What is out, and why
| Branch | State at 21:35 UTC | Why it is out |
|---|---|---|
dev-fee |
not on origin (the local branch dev-fee at 33c430d has no commit beyond its base) |
nothing to merge yet. The fork side exists as an UNCOMMITTED change in vendor/igneum-node-devfee (branch dev-fee at 3bfe346f = the devnet-v4 head): igneum/miner/src/main.rs, 274 insertions, the --dev-fee <percent> flag (one template in 100 to the dev payout address, default 1, 0 off). That fork branch does NOT contain proving v0 (8c0cff15) or finality v3 (6aa69a45), so a dev-fee miner for 0.3.5 would need the commit, a rebase onto finality-fixes, and a rebuild for Mac and Windows before the cut (section 4, "if dev-fee lands") |
miner-latency |
not on origin (local branch at e7225b7 = its base, no commits) |
nothing to merge yet. Fork side: vendor/igneum-node-latency branch miner-latency at 0f88b6d6 (one commit over devnet-v4: template subscription, node-side prewarm), no proving or finality v3 |
miner-reliability |
not on origin (local branch at f39e240, one commit: watchdog per card and node, src/watchdog.rs, the public GPU bench table, tools/reliability/, site pages) |
nothing on origin to merge. Fork side: vendor/igneum-node-reliability at 945153ab (three commits over devnet-v4: fault guards as state machines, dead-worker stdin, silent-worker status), no proving or finality v3. When it lands it touches site/ (then node site/build.mjs is part of its check) |
The poller (git fetch every 10 minutes, 21:34 to 00:14 UTC) found none of the three on origin; see section 6
for the state when this file was last updated. A branch that appears later is merged the same way (section 5) and
this file is updated.
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, 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.
| 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 (final tip) | cc71ed6 |
ok: 44 + 22, 0 failed, 21:35:34Z | ok, 21:35:35Z |
Other checks, all on the files each merge changed:
| Check | Command | Result |
|---|---|---|
| JavaScript parses | node --check on tools/ui-mock/server.mjs, tools/tuning.mjs, tools/build-job.mjs, tools/relay.mjs, relay/api/console.mjs, and app/igneum-app/ui/app.js |
all parse |
| Shell parses | bash -n packaging/ota/publish-manifest.sh packaging/ota/publish-jobs.sh packaging/windows/push-build-inputs.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. The three hits in the tree are the unchanged baseline: two comments in check-ps51.ps1 that quote the rule, and ota.rs:1190, which is the Mac helper's bash ($MODE: in bash is plain text) |
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 from the folder's manifest); --no-tuning (override kept, tuning dropped); --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 |
one preflight problem only ("behind origin/master", fixed by the final merge); inputs already live for fork 6aa69a45; the plan prints every step |
| 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 and the file includes it before any stub could); the PC compiles the worker itself at first start, as the ship script notes |
| Proto workers' Rust unit tests | none exist (proto-cuda/nvrtc is C++, proto-metal is Swift; proto-vdf is untouched by these branches) |
n/a |
node site/build.mjs |
no merged branch changed site/ |
not needed |
4. The morning cut
From the MAIN checkout, on master. release-0.3.5 contains origin/master as of c257444, 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 above, 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-finality \
--win-release vendor/igneum-node/target-finality-win/x86_64-pc-windows-gnu/release \
--mac-release vendor/igneum-node/target-finality/release \
--notes "Efficiency sweep, kernel variant racing, log drawer, build jobs; Windows OTA helper launch fixed"
Why these paths:
| Item | Value | Checked |
|---|---|---|
| node fork worktree | vendor/igneum-node-finality, branch finality-fixes, commit 6aa69a45: proving v0 (8c0cff15) plus finality v3, 41 commits over the fork's master; clean working tree |
this is the fork 0.3.4 shipped from (~/.cache/igneum/ship/0.3.4.json: forkCommit 6aa69a45) |
| Windows node exes | vendor/igneum-node/target-finality-win/x86_64-pc-windows-gnu/release/{igneumd,igneum-miner}.exe |
sha256 cc1d1001... and f1f9a7d9..., byte-identical to what the live payload-inputs.json carries for fork 6aa69a45 (built 20:07Z), so the inputs step reports "already" and no push happens |
| Mac node binaries | vendor/igneum-node/target-finality/release/{igneumd,igneum-miner} |
igneumd fe982a1d..., the hash docs/plans/finality-v3-rollout-devnet.md section 2 names; the finality worktree itself has no target/ (its builds live under vendor/igneum-node/target-finality*), which is why the two --*-release flags are needed |
| downloads folder | ~/.config/igneum/dlsite-dir = <scratchpad>/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 | the live 0.3.4 manifest has no consensus.override and no tuning; ship-app.mjs passes neither flag; publish-manifest.sh now 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 |
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) |
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.
If dev-fee lands before the cut and the fee is wanted in 0.3.5's miner: commit the fork change in
vendor/igneum-node-devfee, rebase that branch onto finality-fixes (6aa69a45), build igneum-miner for Mac
(cargo build --release in a target directory cloned from target-finality) and Windows
(proto-cuda/windows-node/cross-build.sh into a clone of target-finality-win), then point --node at that
worktree and the two --*-release flags at those directories. igneumd is unchanged by dev-fee. The inputs step
then pushes a new payload (the Windows miner hash changes). Without this, 0.3.5 ships the finality-fixes miner,
which has no --dev-fee flag; an app engine that passes the flag would need the miner to accept it, so merge the
app side only together with the fork side.
5. The two Windows machines (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/<token>/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 <ps1> --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 written
- 21:35 UTC:
release-0.3.5atcc71ed6, pushed. 21:40 UTC: master'sc257444(bugs.md only) merged asce74626, pushed. The poller runs until 00:14 UTC;dev-fee,miner-latency,miner-reliabilitynot on origin. - The release worktree carries a built
app/igneum-app/target(debug tests, the Windows check, the release signer). It can be removed after the cut:git worktree remove ../igneum-wt-release.