Commit graph

2216 commits

Author SHA1 Message Date
igneum-labs
04fcb275f8 igneum-pool recheck: the pack's genesis day index installed with its dataset size before the first epoch (--genesis-day overrides). The same-work lane's class, 8 October 2026 22:10 UK: a standalone process holds the genesis day at 0, the cache growth rule doubled the cache fourteen times by day 20730, and every hash of the D1-pairing row disagreed with the reference while igneum-pow's own class v6 seam reproduced it exactly; the live miner installs both from the template, the reader now from the pack
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 21:18:53 +00:00
igneum-labs
04cf78f26b igneum-pool recheck: the pack's dataset size (program.json dataset.log2_words) installed before its epoch is built, the flag overriding; the same-work context's packs say 2^28 words and a reader at the genesis default hashes every nonce wrong
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 20:52:28 +00:00
igneum-labs
6961a9792b igneum-pool recheck: the same-work test's pool reader (review B F03, R02/R03; docs/plans/igneum-2.0-same-work-test.md). The pool's own share verifier (IgneumEngine::epoch_for + hash_bound, the path every live share takes; verify::check for a 64-nonce accepted-share sample a phase) over the P01 driver's job context (--job-context --phase, the driver's segments_for: phase 1 on day D, phase 3 on D+1, phase 2 split at the boundary nonce), the evidence in p01-vectors.py's shape (case, profile, pack, program_id, generator, class, device_line, manifest_sha, prehash, nonces, answered, agree, disagree, missing, the first ten disagreements with the pool and cpu hashes, first_missing, segments, boundary with switched, verdict) plus accepted_share_sample; an engine refusal (the class v5 or v6 state check, a class the vendored node cannot name) is the file's own verdict BLOCKED with the text, exit 2, never a crash; a file-backed day-state provider (--state <igsd1>) for the node1 stream. Self-test: known-pass 256 of 256, known-failed a flipped hash at nonce 1100 and a missing nonce at 1200 counted and named, the job-context form over three phases with phase 2 switched at nonce 24 with the boundary block, the BLOCKED verdict on a refusal; green on build-6 from the release-2.0.2 tree against node 7cfa422a
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 20:50:01 +00:00
igneum-labs
08ec79eee9 Merge reviewb-202 d488b76c into release-2.0.2 (the quit guard: api/quit completes within 45 s whatever the node does; PC 2's 21:24 class)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 20:39:53 +00:00
igneum-labs
d488b76c34 quit guard test: the unix-only child carries the console note the spawn check reads
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 20:37:36 +00:00
igneum-labs
c00e5dc42e 2.0.2: a quit that quits, whatever the node's state (the quit guard)
PC 2, 8 October 2026, 21:24 UK: api/quit on 2.0.1 left all four processes up 90 s later while the node sat in initial
sync. Now: a quit guard armed at the ask (the server's /api/quit and the engine's Cmd::Quit alike) ends the node and
the workers by the pids the state records, never by name, 45 s after the ask when the engine has not left by itself,
prints the exit line and leaves; the node's grace is 10 s then the kill; the last log upload waits 10 s at most; the
window reads the stage ("quitting: the node is being stopped") on the pill and the big button.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 20:35:10 +00:00
igneum-labs
b5531f46b5 Pool, the devnet-4 pair's class (8 October 2026): no job on an unsynced node's state. state_provider.rs reads igneum_getExecStatus beside the class v5 leaves and refuses a stream while the node reads synced false, blocked or re-executing (ExecStatus; a missing field is not synced, never a job on a guess), so the engine builds no epoch and the template feed issues no job on catch-up leaves (the pair: identical seeds, era and the freeze's generator on node, pool and member, every share wrong_hash because the node in class v5 catch-up answered igneum_getPowStateLeaves from its still-settling state); the STATUS line says 'node not synced (class v5 catch-up): no jobs' with the exec RPC named while it holds. Known-failed first: an_unsynced_node_hands_the_pool_no_state_and_no_job read red against the 8ff7a0f4 provider on build-6 (it served the leaves), green with the guard; the mock RPC answers igneum_getExecStatus and igneum_getPowStateLeaves. Gate from this tree against node 7cfa422a: 52 of 52 on build-6
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 20:23:07 +00:00
igneum-labs
1c9134617c Merge reviewb-202 ec35d31c into release-2.0.2 (the power-helper-task@protected right: an installed 2.0.1 PC takes the protected helper copy once, promptless with --win-engine)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 20:16:32 +00:00
igneum-labs
ec35d31c50 V6-06: the protected helper copy is a new right, so an installed PC takes it once
Rights are by id and a changed script re-asks nothing, so without this a 2.0.1 install would have kept its task on the
LOCALAPPDATA exe for ever. power-helper-task@protected is helper-takeable: an update by job takes it through the
running helper's reregister (the copy under the signed manifest's engine hash, no click); otherwise the next
interactive start asks once.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 20:14:25 +00:00
igneum-labs
b1eee29f6a Merge reviewb-202 295711ba into release-2.0.2 (V6-06: the elevated script and helper hardening; publish-manifest --win-engine writes platforms.windows.engine_sha256 for the Power Helper's protected copy)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 20:12:37 +00:00
igneum-labs
295711ba29 V6-06: the Power Helper runs a protected copy, refreshed only on the signed manifest's engine hash; elevated scripts inline; quit and remove through the sequence guard; the host asInvoker
The one elevated step copies igneum-app.exe and its runtime DLLs into %ProgramData%\Igneum\helper with inheritance cut
(Administrators and SYSTEM full, Users read and execute, owner Administrators) and registers the task against that copy;
the per-user install under LOCALAPPDATA is never what the scheduler runs elevated. The helper's reregister refreshes
the copy only when the signed update manifest names the installed exe's sha256 (platforms.windows.engine_sha256,
publish-manifest.sh --win-engine); anything else is refused with its reason in helper.log. rights.ps1 and
register-power-task.ps1 are no longer read from user-writable folders: every elevated script travels inline through
-EncodedCommand. quit and remove carry a sequence like every verb and pass the rising-sequence guard; a stale line
re-added to the file is skipped. The window host declares asInvoker. The prove host's lease is the lesser of the
grant and the free reading (the V6-07 sub-lane's 12 GB row).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 20:08:18 +00:00
igneum-labs
0dfb3b05d3 Pool on the 2.0.2 release branch: pool/ and docs/plans/pool.md from the pool line's tip pool-2.0 e063fdcd (pool-review-b 786e09cc: review B F12 durable payment intents, F13 admission bounds, INT-04 the verified ledger, INT-15 the challenge-bound authorize; merged by the pool seat on 8ff7a0f4 the class v5 day-state source via --exec-rpc and 8106ba27 the base unit from the node's network, the two fixes the devnet-4 pair needs; suite 51 of 51 on build-2 against successor-2.0.1 2b1a247a). The spec stays the hand-merged copy this branch carries. Rule 24's crate gate from this tree on build-6 against the pinned node 7cfa422a is the read-back below
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 20:03:01 +00:00
igneum-labs
552683e034 spec 09: the hand-merged copy, carried from release-2.0.1 ba50fff1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 20:01:11 +00:00
igneum-labs
5a6126a4c2 Merge reviewb-202 af5ade43 into release-2.0.2 (F14 public and lab products, the install-time update choice honoured, the lab channel and root, F04 words, F07 device modes and the prove host env, the no-peers watchdog words, the ten-minute check, the safe-moment fix, the job runner refusing kill-by-name)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 19:59:27 +00:00
igneum-labs
a70ea2d6c9 2.0.2: the version bump (rule 15, the release branch's first commit, six places and the README line)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 19:59:27 +00:00
igneum-labs
a93ba3dea0 Merge f03-manifest-201 7437a31a into release-2.0.1 (review B F03: the one release manifest packaging/release-manifest.json, release-manifest-check.sh, build-from-manifest.sh)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 19:57:24 +00:00
igneum-labs
7167f59a0e Pool on the release tree (the coordinator's ruling, 8 October 2026 20:5x UK: the pool crate's home): pool/ and docs/plans/pool.md, docs/spec/09-pool-protocol.md from pool-review-b 786e09cc. Review B F12 (payments as durable intents, never a duplicate or a lost obligation, finalised only under the chain's final lock), F13 (the frame bound while reading, the bounded outgoing queue, one membership per session, nonce and in-flight bounds, share and connection budgets), INT-04 (the verified ledger, never empty over a corrupt file), INT-15 (the challenge-bound authorize binding v2). Suite 51 of 51 on build-6 against successor-2.0.1 515ba674 and cargo check green against this tree's node pin 7cfa422a on pool-review-b; the same suite from this tree against 7cfa422a is the read-back below
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 19:54:57 +00:00
igneum-labs
af5ade4339 2.0.2: PRODUCT=public|lab packaging switch, the kill-by-name refusal, the prove host's lease, the ten-minute check, the synced apply bound
PRODUCT=public|lab (the founder's word at 20:21 UK): one variable in packaging/mac/packaged-config.sh that every packager
reads: Igneum-Miner.iss AppId, AppName, folder and file name (/DProduct from build-installer.ps1 -Product), make-payload.sh
and make-hive-package.sh names (payload folder, Hive CUSTOM_NAME and archive), build-dmg.sh bundle id, app and dmg names,
the channel (igneum-2.0-devnet stays the public string), the manifest name and the signing root; the packager writes
edition, channel and ota_root_hex into igneum-app.json and the engine names a mismatch on its update card.

The job runner refuses a run-script body that ends a process by name (Stop-Process -Name, taskkill /IM, Get-Process |
Stop-Process, pkill, killall): exit 77 with the matched line, in the signer and in the runner; a pid is the only way.

Every igneum-prove-host spawn carries IGNEUM_PROVE_DEVICE, IGNEUM_PROVE_WORKLOAD, IGNEUM_PROVE_MEM_FREE_MB,
IGNEUM_PROVE_MEM_BUDGET_MB and IGNEUM_PROVE_DEADLINE_S (the V6-07 contract); exit 78 reads "proving needs N GB free".

The manifest check runs every ten minutes. A staged update applies at once on a synced node with an idle miner and
within two minutes of the sync otherwise; Install now passes the finality guard; publish-manifest.sh --urgent.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 19:51:15 +00:00
igneum-labs
862e2e7586 F03 (Review B): the 2.0.1 release manifest, pinning node 7cfa422a, the class v5 freeze, the dataset policy, the acceptance rule, the host ABI, the miner app, the pool, the proof guests and vks, and the activation settings
packaging/release-manifest.json for release 2.0.1 on igneum-devnet-4, with tools/ci/release-manifest-check.sh (every component's own pin must equal it) and tools/ci/build-from-manifest.sh (every component built from it on a box). The shipper lands it on release-2.0.1 at the next cut; the manifest's miner_app sha then moves to that cut and the check reads it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 19:32:46 +00:00
igneum-labs
af4302002f The lab key travels with the build environment; the device coordinator's record line
infra/build-server/lib.sh: bs_repro_env forwards IGNEUM_LAB_PUBLIC_KEY to the box when the caller set it, so the lab
build (`--features lab`) compiles its root through tools/build-remote.sh without the key in the tree. The prover
logs `DEVICE event=free|not-free used_mib=<n> waited_s=<s> holder=prover` around the time-share gate: the line the
fleet lane's INT-11 rows read (the device free memory confirmed, not dispatch paused).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 19:20:16 +00:00
igneum-labs
414fafd57b v2.0.2: review B F14 (two builds), F07 (the per-device proving mode and its coordinator), F04 (recovery locks named) in the app
F14, the founder's ruling of 19:57 BST (docs/analysis/review-2026-10-08-b, the shipper's and the relay lane's names):
one tree, two builds, by the cargo feature `lab` (src/edition.rs). The public miner (the default) runs no remote
jobs: no signing root for them, no jobs url, the routes /api/jobs/* compiled out, the wake listener compiled out, the
Settings switch hidden, POST /api/jobs/allow refused with a line; its update choice is honoured: with automatic
updates off nothing installs until Install now, an urgent manifest included (manifest::safe_to_apply, the first
rule), and an unsupported version pauses mining with the reason on every card (update.hold_mining, the engine's
unsupported_hold); a manifest's consensus override is ignored (the node's rules come from the node; a compromised
update key activates nothing). The lab build (our fleet, `IGNEUM_LAB_PUBLIC_KEY=<hex> cargo build --features lab`)
verifies its OTA manifest, its interface bundles and its jobs feed against the lab root the relay lane generated
(never in the repo; the build fails without the variable), reads channel igneum-2.0-devnet-lab, names itself
"Igneum Miner Lab"; the public build reads igneum-2.0-devnet (the 2.0.0 and 2.0.1 manifests' "devnet" accepted
until the publisher renames it) and refuses a manifest of the other channel before staging. api/state carries
edition, product and channel; the IGNEUM-APP intake line carries channel= and edition=. The update choice is asked at
install: the welcome screen's "Update automatically" switch (on by default) and the Windows installer's task, which
writes install-choices.json for the engine's first start (config.rs).

F07: src/device.rs, the per-device coordinator. The mode per NVIDIA card from the measured rows (coexist-rows.md,
8 October 2026): simultaneous only on a tested configuration (24 GB and up, with 10% headroom over the measured
peaks), time-share where the compressed shard proof (7,532 MiB) fits alone, mining-only where no complete paid proof
fits; a lease table across the miner, the prover, an aggregation, a benchmark and the next-epoch preparation, where
pausing dispatch is not releasing memory (a lease ends only after the holder's process exits and nvidia-smi reads the
device under 1,024 MiB), and admission counts transfer, startup, proof, aggregation, rebuild and the payment deadline.
Wired: provedefault reads the modes (16 to 24 GB alternates, no longer "together"), state.proving.modes carries one
line per card for the Proving section, and the time-share prover waits up to 60 s for the card to read free after the
miner steps off before a shard, leaving the shard for another prover with the reading when it does not.

F04: the window's block inspector reads "finalised by a recovery lock" and the strip "recovery lock" with its why,
from igneum_getProvingStatus's lockKind and lockWhy once the node lane's field lands; the pause word stands until then.

Tests: edition.rs (the roots and channels per build), manifest.rs (off stays off, known-failed first), config.rs (the
installer's choice taken once), device.rs (the modes per row, the full cycle with no leaked reservation, the
simultaneous and mining-only rules, the deadline), provedefault.rs (the modes and the refusal), detect.rs parse; the
public crate 327 green on build-1; the once-tests for the window (F14, F07, F04); 133 UI tests green on build-2.
Captures in ~/Desktop/igneum-previews-2026-10-08/reviewb-202. The lab build's test run needs the key in the box's
build environment (tools/build-remote.sh does not forward it yet); the public build is the gate's.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 19:17:53 +00:00
igneum-labs
38351afda5 2.0.1: the node pin moves to release-2.0.0-node 7cfa422a (the miner base-unit fix, compiling; 777214af amended away)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 18:49:11 +00:00
igneum-labs
6c10f232b5 2.0.1: the node pin moves to release-2.0.0-node 777214af (every miner command installs the network's base unit before reading an amount; the over-u64 coinbase refusal that stalled the fleet; digest-preserving)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 18:45:31 +00:00
igneum-labs
1c22fc5de6 2.0.1: six dial targets across five boxes in the packaged peer list (build-1's seed and hand, the two fleet seeds, the two held hubs lp-4090-07 and lp-4090-02); 8 October 2026, 19:2x BST: every packaged target was down at once and every home miner lost its peers
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 18:40:28 +00:00
igneum-labs
972b1c1e4a v2.0.2: a node with no peers holds the worker; the watchdog names the node, never a worker fault
The founder's call at 19:25 BST on the mini (8 October 2026): with the node at 0 peers the worker idled for lack of
templates and the watchdog blamed the worker ("did not come back within 180 s of the miner restarting it (seed
mismatch...)"): the restart grace ran before the node's readiness was read. Now CardWatch::tick takes `no_peers`
(the engine reads state.node.peers == 0, once the node is past starting) and, whenever the node has no peers or the
miner's last word was a template timeout (templates_blocked), every clock holds, the restart grace included, the
verdict is None, and `held_by_node()` names the cause: "no block templates: the node has no peers" or "no block
templates: the node answers none for the window". The engine writes that cause onto the card's row while it holds,
and the waiting card of a node with no peers reads it too. The node line on Mine reads "Node: no peers, dialling the
seeds" and the words under it end "mining waits for block templates". F6 in the window audit doc (master).

Tests known-failed first: watchdog.rs (the founder's case: a worker restart on a node with no peers, the grace long
past, Action::None and the cause; the template-timeout window; the old grace rule with peers and templates), the
once-test (the node line, the cause in the watchdog, the engine reading it). The crate: 320 tests green on build-1;
130 UI tests green on build-2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 18:31:19 +00:00
igneum-labs
885f5f9cca 2.0.1: proving/igneum-prove/elf/prior from key-succession-pin 4c6d6d64 (node ef0f2ed8 embeds the prior pair's verifying keys by include_bytes from this tree; the release branch carries what builds it)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 18:23:33 +00:00
igneum-labs
c68bf66ceb 2.0.1: the node pin moves to release-2.0.0-node ef0f2ed8 (291ee6ae key-succession capability + the node's 2.0.1 version bump; digest-preserving)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 18:12:19 +00:00
igneum-labs
048b9fc82f 2.0.1: the DMG README's version line (the copy beside the six places)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 17:50:45 +00:00
igneum-labs
3c13a71cef Merge cards-201 d6337a86 into release-2.0.1 (the Cards tab back as its own page, the first-block card once per payout address, the four finality words on the window, one positioning line, the watchdog's real cause; the founder's calls of 8 October 2026)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 17:35:21 +00:00
igneum-labs
d6337a867b v2.0.1 window: the Cards tab back as its own page, the first-block card once per payout address, the four interface words, one positioning line, the watchdog's waiting words
The founder's calls of 18:1x BST, 8 October 2026 (through the shipper), recorded as F1 to F5 in the window audit doc.

F1. The Cards tab is back in the rail as its own page (View.PAGES: mine, cards, tune, earnings, settings); every card
row moved out of Mine into it: the state, the hash rate, the power, the temperature, the tune state (one line, the Tune
page's words, View.cardsRowWords), the enable switch, the 16 GB proving note on an NVIDIA card under 16 GB. Mine keeps
the headline rate and the chain status (the hero tiles, the chain scene, the node line, Activity).

F2. The first-block celebration shows once per payout address, ever: settings.json keeps first_block_shown[address]
= {hash, at} (config.rs FirstBlockMark), written when a window reports the card seen (POST /api/card/seen), so it
survives runs, updates and a reinstall that keeps the wallet; a new address shows it once again (the engine passes
the address's mark to Ladder::on_block_for, which raises the card whenever the address has none); an install that
showed it under the machine rule takes the mark for its current address once at start. Never on a dev-fee block: the
miner's "dev-fee block <hash>" line follows the fee block's ACCEPTED line, and Ladder::on_fee_block withdraws a first
card that block raised; the engine now counts fee blocks from that line (fee_session, fee_total) as well.

F3. The four interface words (docs/spec/finality-guarantees.md section 9) on the window: the block inspector reads
included or excluded or pending, executed as chain block N, proven, finalised (View.blockState); a block under the lock
is finalised even while the network's finality is paused (the pause is said after the block's own words and on the
status strip), and no block reads "not active" or "(reported)"; the scene's hover words say finalised and executed
(scene/live-dag.js 2.0.8, the copies synced).

F4. One positioning line: the hero keeps it; #s-positioning under Updates is gone.

F5. The watchdog's words when the node serves no epoch state stream: "waiting for the node's execution state for this
epoch: no program to load 300 s after starting", never "the worker did not load its program".

Tests known-failed first: once.test.mjs (the Cards page with the home page's contents, the inspector's words), the
view tests' page list, ladder.rs (the first card follows the address mark; a dev-fee line withdraws it; the 0.3.21
wrapper keeps the machine rule), watchdog.rs (the waiting words). The crate: 319 tests green on build-1; 129 UI tests
green on build-2. Captures: ~/Desktop/igneum-previews-2026-10-08/cards-201.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 17:27:36 +00:00
igneum-labs
40fb814060 2.0.1: the node pin moves to release-2.0.0-node 417c4a57 (9fc9f42a + the genesis-stream fix 5713d547 + the follower's tip lag; digest-preserving)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 17:21:19 +00:00
igneum-labs
8029b5b842 2.0.1: the node pin moves to release-2.0.0-node 9fc9f42a (the manifest block, finality rule v4 behind its switch, the four-state transaction RPC; node-only, no digest move; the paired cut is tomorrow morning's, the guest elf re-pin rides it)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 17:04:59 +00:00
igneum-labs
0dd5a8d7ee Merge resume-on-update-20 853eab97 into release-2.0.1 (the first start after an update clears a pause the previous version saved; the founder's rule of 8 October 2026: an update never leaves mining off)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 17:04:49 +00:00
igneum-labs
2b80e31861 2.0.1: the version bump (rule 15, the release branch's first commit, six places)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 17:04:49 +00:00
igneum-labs
853eab974a v2.0: an update never leaves mining off (the founder's rule, 8 October 2026, 18:0x BST: the Devnet 3 off jobs left both PCs paused through api/pause, and the 2.0.0 update would have started paused with a click owed after the install). On the first start after an update (ota::updated_from, right after the "up after the update from" read-back line) a saved pause is cleared, saved and said: "mining was paused under <from>; the update to <version> resumes it (an update never leaves mining off)"; an ordinary start keeps the pause the user or a job set. engine::resume_after_update is the rule; test known-failed first: engine::tests::the_first_start_after_an_update_never_leaves_mining_paused
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 17:00:42 +00:00
igneum-labs
245329c051 Rule 25 in the window: wei never a JavaScript Number; the Mac first-run copy says the build is unsigned tonight
The engine already sends every wei value as a decimal string (u128 on the Rust side), but the window turned three of them into a Number for the IGN figure (the proving paid line, the segment paid line, the wallet balance). A 2.0 block subsidy is 9.5e18 wei, past 2^53, so the IGN figure is now cut from the string (weiParts, ignText): whole units and the first four decimals, no wei value in a Number anywhere; only the IGN figure is a Number, for the pounds line and the thousands check. The 61 view tests hold.

The DMG README's step 2 says the build is unsigned tonight and gives the two-step (open once, then System Settings, Privacy and Security, Open Anyway); Developer ID signing and notarization follow with the Apple enrolment.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 16:30:29 +00:00
igneum-labs
410c2d2d84 Merge restart-kind-20 b86fcbe6 into release-2.0.0 (a remote app restart under the window host exits plainly and lets the host's ladder restart it, no helper race; headless starts the helper itself; PC 1 down for hours twice on the race; known-failed first)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 16:14:33 +00:00
igneum-labs
b86fcbe6b5 v2.0.0: a remote app restart under the window host is the host's ladder, never a helper racing it (PC 1, 6 October 2026 19:10Z and 8 October 2026 14:50Z: the restart kind quit the engine and left a hidden PowerShell to Start-Process igneum-app.exe --launch 8 s later, racing the host's own restart ladder for the single instance; it lost both times, "the relaunch helper did not bring it back", the app down for hours with the whole job queue behind it). Now the engine decides (engine::restart_plan): under the host it sets the quit source "remote job: app restart" (a plain EXIT, so the host restarts it in about 10 s; an update exit would end the host) and starts nothing; with no host (--boot, a headless start) it starts the relaunch helper itself and keeps running when the helper cannot start. The job runner's restart arm no longer spawns the helper. Test known-failed first: engine::tests::a_remote_app_restart_under_the_host_uses_the_hosts_ladder_and_no_helper
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 16:11:14 +00:00
igneum-labs
30823385dc 2.0.0: the Windows node-source pin moves to 4cdcc488 (node 2.0.0 on the Igneum 2.0 devnet: c04674fe plus the emission literal widened to 18 decimals; digest be5f4068; the 2.0.0 pin)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 16:10:00 +00:00
igneum-labs
1602298d08 2.0.0: the prove-instead line's test reads 16 GB with the rule (the one red on 1e76d2a4's crate gate)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:54:03 +00:00
igneum-labs
1e76d2a413 Merge net-20 e30d58c4 into release-2.0.0 (the network step renders: app.css's phase rule lists #screen-network, blank since 0.3.23 on every fresh install; the once-test reads every screen id against it; the step renders on every state)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:50:12 +00:00
igneum-labs
e30d58c455 The network step is shown: app.css never listed #screen-network, so step 3 of 4 was a blank page on a fresh install
Found by the net-20 capture: .screen is display:none and only the ids in app.css's phase rule display; screen-network
(the network step, 0.3.23) was never in that rule, so a fresh install reached step 3 of 4 as a blank page with no
Continue button, on every build from 0.3.23 to 0.3.26 (the forced ?screen=network capture read the same). The rule
lists it now. The once-test reads every screen id in index.html against the rule, known-failed first (five of six).
127 UI tests green on build-2; the step captured with its one card.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:47:41 +00:00
igneum-labs
0400205bf7 Merge prove-host-20 7e81180b into release-2.0.0 (a Windows node under the proof rule waits for its verifier host with the reason shown and sets it up itself: the WSL2 feature as the installer's one elevated right, the distro unelevated in the background, the probe on the engine's restart clock; known-failed first)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:47:25 +00:00
igneum-labs
93d8310384 2.0.0: the window's proving line moves to 16 GB with the engine (PROVE_MIN_GB 16, the one-at-a-time sentence; the view test known-failed first)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:45:25 +00:00
igneum-labs
b03eed628b Merge net-20 942e82bb into release-2.0.0 (one network card, the Igneum 2.0 devnet; the testnet card, the Devnet 3 and devnet v4 text gone from the window; the once-test refuses them)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:45:03 +00:00
igneum-labs
4c5c1bb562 2.0.0: mine and prove together need a 16 GB card (the rented-card rows of 8 October 2026: the miner 6.1 GiB resident, a compressed shard proof 7.5 GiB; a 12 GB card running both kills the prover), so under 16 GB the card alternates (prove instead of mining), the line says why, the test known-failed first; a stored Devnet 3 choice reads as the one devnet (the chain moved under every 0.3.26 install)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:45:03 +00:00
igneum-labs
e10f6b8e9f The network step renders on every state, not only on the click that opens it
The net-20 capture of the network step (?screen=network, the forced start the screenshots use) read empty: show('network')
renders the step only when a state is already held, and the first poll shows the forced screen before render() stores
the state; later polls render the dashboard pages only. render() now renders the step whenever the phase is network,
the same way it renders the cards step. 126 UI tests green on build-2; the step captured with its one card.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:44:16 +00:00
igneum-labs
7e81180b38 2.0.0: the node's proof verifier is set up with no hand on Windows (main's order, 8 October 2026: on the 2.0 devnet the proof rule is set from block zero and the daemon refuses to start on Windows when igneum-prove-host is absent; under plug, tune, play that refusal never reaches a user). The host is the payload's WSL2 Linux binary (wsl2\bin\igneum-prove-host with igneum-prove-export, run through the native igneum-prove-verify.exe wrapper); no native Windows host exists (SP1's prover is Linux-only), so the one-click path is the WSL feature, the distro and the file. Start order (src/engine.rs start_node, src/verifier.rs node_start_hold): on Windows the node is NOT spawned while the verifier resolves "off"; the reason goes to the node tile and /api/state (node.state "waiting", node.message "waiting for the proving host: <why> ... no hand needed ... the node starts by itself when it answers"), one event, then host_setup_step takes one step per held start from host_setup_plan: NeedsFeature (names the installer's rights step, never a prompt from the engine), InstallDistro (wsl --install -d Ubuntu-24.04 --no-launch in the background, unelevated, no first-run window), HostMissing (names the file), Probe; the start is retried by the engine's own restart clock every minute with a fresh probe, and trust (devnet only) still starts the node. Rights: a new id wsl2-feature taken in the installer's one elevated step (wsl --install --no-distribution --no-launch, idempotent through wsl --status, a reboot said in rights.log and never forced), so a 0.3.26 install asks once at the update. Tests known-failed first: verifier::tests::a_windows_node_without_its_verifier_is_held_with_the_reason_and_the_host_is_set_up (the hold, the plan, the command, the start order read from engine.rs), rights::tests::the_wsl2_feature_is_a_right_the_installer_takes_once. Owed to the gate box (PC 1, the detached job shape after the host-200 build): a clean Windows machine starts the node with the rule set and no hand step; the reboot after the feature is the one wait the gate must include
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:43:40 +00:00
igneum-labs
1e0aa9c1d7 2.0.0: the copy pass against docs/plans/igneum-2.0-reference.txt inside the window and the DMG README: the first-run eyebrow and the About line carry the positioning line (A GPU-secured network for Ethereum-compatible applications and verifiable computation), no devnet v4 or 0.x text, the demo samples read 2.0.0; the network cards stay the UI lane's
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:41:09 +00:00
igneum-labs
6112a969dd 2.0.0: the network move to the Igneum 2.0 devnet (igneum-devnet-4): the package's suffix 4 and its seeds (build-1's seed and hand, dn4-seed 64.119.209.250:21703, lp-4090-01 69.145.85.93:17873), the hive's node on --devnet-suffix (DEVNET_SUFFIX, default 4) with the same seeds, network_name reads igneum-devnet-4, the test network no longer offered, the chain label Igneum 2.0 devnet; the tests rewritten known-failed first
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:41:09 +00:00