docs/plans/release-0.3.5.md: the overnight merge, tests, the morning cut and the Windows hand installs
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
7cd5f39b30
commit
a57e5af4cc
1 changed files with 139 additions and 0 deletions
139
docs/plans/release-0.3.5.md
Normal file
139
docs/plans/release-0.3.5.md
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
# 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` (3 commits after the branch point) | b7c3ebb | cc71ed6 | console: the parsed app-log tail is 400 KB, the last OTA state per machine is remembered (`console_ota_memo`); a bugs.md row | 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 tip: cc71ed6.
|
||||
|
||||
## 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 b7c3ebb, 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.5` at cc71ed6, pushed. The poller runs until 00:14 UTC; `dev-fee`, `miner-latency`,
|
||||
`miner-reliability` not 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`.
|
||||
Loading…
Reference in a new issue