Commit graph

2189 commits

Author SHA1 Message Date
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
igneum-labs
942e82bb9e Igneum 2.0: one network in the window, the Igneum 2.0 devnet; the testnet card and its note are gone
The founder's word of 8 October 2026 (16:2x BST): the testnet is scrapped and the devnet is one network, served as
"the Igneum 2.0 devnet" (the engine runs igneum-devnet-4 and serves the label as state.chain, the shipper's engine
commit on the same line). The network step (step 3 of 4) and the Settings Node card show one card, "Igneum 2.0 devnet
· igneum-devnet-4 · the chain may reset, coins have no value", the fresh-install default and the only choice; an
existing install keeps what it runs ("This machine runs the Igneum 2.0 devnet (igneum-devnet-4)."); an older network
name reads as the one network. The "igneum-testnet-1 opens when…" note, the testnet card, "Devnet 3" and "devnet v4"
leave index.html and app.js (the welcome eyebrow and the node facts default read "Igneum 2.0 devnet"). The mock's
recorded state carries the new chain label and network name.

Tests known-failed first on build-2 (once.test.mjs: one NETWORKS entry, one card, the words, no testnet or old label
in the window), then green; the 0.3.23 network tests follow (the Rust-source mirror keeps the network_switch name
and its test, and no longer pins the testnet_open signature or the manifest's testnet rule, which the engine commit
removes). 126 UI tests green.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:40:24 +00:00
igneum-labs
c4f7bbfd22 2.0.0: the version bump (rule 15; Igneum 2.0 on the founder's word of 8 October 2026: the version line restarts at v2.0.0 for the miner, the testnet scrapped, Devnet 3 the network; opened from release-0.3.26's final tip 5054d0ee; release-0.3.27 superseded)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 15:29:07 +00:00
igneum-labs
5054d0ee27 Merge app-ia-26 bf28cd23 into release-0.3.26 (the denominator lane's final 20-row tiers table; the public 0.3.26 app cut tip on main's word)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:48:35 +00:00
igneum-labs
bf28cd2357 tiers-table retake: the denominator lane's closed sweep (class-v6-floor-denominator 2a8572e4) replaces the 1a0a0e95 table
The 15:15 BST retake owed on tiers-table-26, taken on app-ia-26 where that branch now lives: app/igneum-app/tiers/
class-v5-tiers.json from the lane's closed sweep (20 rows, the 4060 Ti's class v5 stock row, the 3060 and 4070 rows
measured). The lane's .mjs and test are unchanged. The app crate (src/tiertable.rs embeds the file): 314 tests green on
build-1, the 5090's three rows and the knee at 1,300 MHz as before; the lane's table test and the UI tests green on
build-2; the Tune page's table scenario recaptured (~/Desktop/igneum-previews-2026-10-08/app-ia-26/tiers-table-retake).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:38:14 +00:00
igneum-labs
28b2f731ed Merge preview-26-2 ffe0b38b into release-0.3.26 (the public 0.3.26 app cut on main's word: app-ia-26 0ab19a4e whole, the four pages, tiers-table-26, earnings-26 and the earned windows, the preview mark engine-side and empty on this cut; the audit lane passed every item)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:37:30 +00:00
igneum-labs
ffe0b38b61 Merge app-ia-26 0ab19a4e into preview-26-2 (the four pages whole: Tune, Earnings on the engine's earned windows, Mine, Settings; the founder's preview 2)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:36:36 +00:00
igneum-labs
0ab19a4ebc app-ia-26 item 8: the audit-26 screens in docs/design/app-screens/0.3.26; the Settings page renders again; a render that throws says so
Item 8 (docs/design/app-audit-2026-10-08.md): tools/ui-mock/shots-audit-26.txt is the shot list (the four pages, dark
and light, the first minute, the table, the syncing node, a job holding the card, a still chain) and the fourteen
screens are in docs/design/app-screens/0.3.26, taken by tools/ui-mock/capture.sh on build-2 against the mock with
the engine's earned windows on every scenario.

Two faults found by the screens. (1) Since item 4 the Settings page had not rendered on the mock: renderProvingSection
called proveInsteadWords bare after the page-side alias left with the old card details, the poll's catch swallowed
the throw as an engine silence, and the Settings captures of items 4 and 6 showed the markup's defaults ("not set",
"Node starting"). It reads View.proveInsteadWords now; renderSettings also renders the Node card's line and facts
(they live on Settings since item 3). (2) The poll's catch now prints "render failed: <stack>" to the console, so a
throwing render is a visible bug and the capture scripts report it, never a silent default page. The not-answering
branch addresses the node line and the toggle by their present ids.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:33:55 +00:00
igneum-labs
86d4fd1fef app-ia-26 items 6 and 7: Settings in 4.4's order, Updates holds the Interface row, the copy and the units
The founder's audit (docs/design/app-audit-2026-10-08.md, 4.4, items 6 and 7). Settings reads, in this order: Wallet
(the address, Change address, Show my key, Open the wallet), Node (the network cards, one line of state, the facts
behind Details), Updates (the version and its update, "Install updates by itself", the Interface row "Interface 1.0.0,
built in" with one sentence of help and the built-in switch; the Interface card is gone, T-R21 and A19), Power
control, Electricity, Heat mode (the switch label is five words; the paragraph is the help, A20), Proving (the shard
card and the switches from the old Prove page), This machine, Logs, Advanced, The dev fee last. Item 7: no
text-transform on a unit label (.tot .k, A8); the key sheet reads "Settings can show it again"; the setup's card note
drops "The card row has a slider." (the slider is on Tune); no em dash anywhere in the window. The mock's ladder
carries the engine's earned windows on every scenario (the audit lane's ask: figures, not "reading", when the founder
looks), and tools/ui-mock/shots-audit-26.txt is the audit's shot list for item 8.

Tests known-failed first on build-2 (once.test.mjs: the eleven sections in order with T-R21, A19 and A20; T-A8 with the
em-dash grep), then green; 125 UI tests green.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:28:54 +00:00
igneum-labs
17dbebfa96 app-ia-26: the earned windows join the branch; the fallback never reads zero; the 24 h figure once, as the headline
earned-windows-26 65828fb2 (item 2) is merged in, so the Earnings page and the Mine IGN tile read the engine's sums
(state.ladder.earned) on the same build. On an engine before the windows the counts come from the ladder's own record
and never from an absent field read as zero: blocks_24h, else the block list filtered to the day; the day ring for
7 days; the lifetime count for all time (the audit lane read "no block yet" beside 8,054 lifetime blocks). The 24 h
column under the 24 h headline was a repeat of the audit's own making, amended at 15:2x BST: the row is 7 days and
All time, the headline is the 24 h figure with its blocks and shards. T-A1 asserts the fallback counts and the one
24 h figure on the page; 123 UI tests green on build-2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:25:11 +00:00
igneum-labs
b54c7389b8 Merge branch 'earned-windows-26' into app-ia-26 2026-10-08 14:23:54 +00:00
igneum-labs
b861ba0aea app-ia-26 item 3: Mine is what is happening now; four tiles, one node line, five activity lines
The founder's audit (docs/design/app-audit-2026-10-08.md, 4.1 and item 3). The hero is four numbers with a unit and
one sub-line each: MH/s ("2 of 2 cards mining", "paused", "waiting for the node", "resting · heat mode"), W ("drawn
now", hidden with no power reading), MH/W ("hashes per watt", its own tile, hidden with the watts), IGN ("last 24
hours" from the engine's earned window, "no block yet" before the first, "reading" on an engine before item 2). The
toggle reads Start mining or Stop mining with no sub-line (its reason sits in the title). The card rows stay as item 4
left them. The ladder strip, the money tile, the blocks tile, the stats line and the Open the log button are gone;
Activity is the last five events. The node is one line with a dot ("Node synced · 4 peers"; "Node syncing · 41,000 of
52,000 blocks · about 12 min left"; "Node restarting · <reason>"; "Node behind · last block 53 min ago"); a click
opens Settings > Node with the facts open. The node facts (the 13 rows, the rules fingerprint, the next rule change)
moved to Settings as a closed Details under the Node card (the Network card renamed), the same ids, one line of state
above them. The toggle's "switch a card on in Cards first" reads "switch a card on first".

Tests known-failed first on build-2 (once.test.mjs: T-R8's toggle half with T-A5, T-R9, T-R18 and T-R10; T-A14 with
T-R14; T-R13 with T-A15 and the stats half of T-R12), then green with the node-line fixtures in view.test.mjs
following; 123 UI tests green. Captures from the mock on build-2 in ~/Desktop/igneum-previews-2026-10-08/app-ia-26/
item3 (the live record, two cards, the first block, light, syncing, the Settings Node card).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:22:50 +00:00
igneum-labs
7d8b61a33e app-ia-26 item 5: Earnings reads the measured windows; one row each for Electricity, Payouts and Standing; the projection as one dim foot line
The founder's audit (docs/design/app-audit-2026-10-08.md, 4.3 and item 5): the headline is the last 24 hours from the
engine's earned sums (state.ladder.earned, earned-windows-26: what the chain paid at the time), then the three windows
(Last 24 hours, 7 days, All time; each IGN with blocks and shards, "estimated" on a back-filled all-time figure, "one
block not priced yet" while a reward is unread); an engine before the windows reads "reading" with the block counts.
Electricity is one row ("£4.18 a day" / "at 28p/kWh for 622 W"; "622 W" / "Set a price in Settings for the cost.";
"No power reading on Apple silicon."). Payouts is one line ("Pays 0xdd44…86E8", Copy, Open the wallet, "Your balance
is in the wallet. Change the address in Settings."). Standing is one row ("Rank 3 of 4 keys · signing 8 of 80 points",
the window in the sub) with the rungs behind a closed Details and no intro. The projection is one dim foot line
("About 71.68 IGN a day at 17.0 MH/s, 0.017% of the network.") that hides under a remote job, a pause, a still chain,
no card mining or an unread rate; under a job or a still chain the line carries the reason instead ("Projection
paused: <job> running since HH:MM.", "Network paused: no block on the chain for 15 min."), with no IGN figure, as the
coordinator ordered on earnings-26. The address card is Settings > Wallet now (first card, the same controls; Open
the wallet on both pages); the rail foot reads the machine's name and its uptime (View.railFoot), no address. Gone
from Earnings: the IGN a day headline, the run line, the Weight and Lifetime cells, the ladder intro, the first-hour
timeline, the address card.

Also in this commit, the audit lane's two readings of item 4: the Tune lock line names the cap from the slider's want
(power_default_w × pct), never the draw ("Locked at 1,950 MHz, cap 405 W."; the test asserts the same cap figure as
the cap sentence); the miners help glues its last two words (copy law 18) and .help wraps pretty.

Tests known-failed first on build-2 (once.test.mjs: T-A1 with T-A2, T-A3 with A17 and A18, T-R9 with T-R11, T-R18 and
A4, T-R19), then green with the superseded view tests removed (their truths live in the once-tests); 120 UI tests
green. Captures from the mock on build-2 in ~/Desktop/igneum-previews-2026-10-08/app-ia-26/item5 (a job holding the
card, a still chain, the live record, light, the Settings Wallet card).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:17:28 +00:00
igneum-labs
cf997e766e app-ia-26: the pill's rest word names heat mode; the three UI test files outside the gate line join it
The shipper read ui/heat-region.test.mjs red on 7e60442e: the item-1 pill said "Resting" where the heat lane's rule
wants "Resting · heat mode" (never a bare rest word on a resting card). The pill reads the rule's words again; the
once-test says why. heat-region.test.mjs, fold.test.mjs and ui-ota.test.mjs were not in the gate's UI line, which is
how the red passed the gate; they are in it now (both lines of tools/ci/pre-push.sh).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:13:26 +00:00
igneum-labs
468c0339fb The preview mark: state.preview from IGNEUM_PREVIEW at build time (the founder's internal builds, 8 October 2026), shown after the version on the About line and the footer; empty on a public cut, the version itself untouched (the update check and the DMG's engine check compare that)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:11:42 +00:00
igneum-labs
bd96e9198d Merge release-0.3.26 0fd93532 into preview-26-1 (the installer detach fix)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:11:12 +00:00
igneum-labs
3daf7304e7 Merge app-ia-26 7e60442e into preview-26-1 (item 4, the Tune page; the founder's preview 1)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:11:12 +00:00
igneum-labs
65828fb20e earned-windows-26: the engine's earned windows (24 hours, 7 days, all time) from what the chain paid at the time
The founder's audit (docs/design/app-audit-2026-10-08.md, item 2): the Earnings page reads measured sums, never
today's reward applied to old blocks. The ladder keeps one row per coinbase the node credited and per shard paid
(Ladder.earned_log: at, shard, wei as a decimal string), trimmed to 7 days plus an hour, and the all-time running
totals (earned_all_wei, earned_all_blocks, earned_all_shards). A block row is priced at the miner reward the chain
facts carry when the block lands (chainfacts::cached_reward_wei, the dashboard's 10 s cache) or on the first state read
that has the figure (price_blocks); a priced row never changes. A shard row carries the wei its record paid. The
dashboard reads state.ladder.earned = {h24, d7, all} each {wei, ign, blocks, shards, priced} plus `estimated`:
a record from before the rows is back-filled once (backfill_earned) from the lifetime count the engine persists at
the reward then read, with the kept shard records, and says estimated for all time; the windows never invent rows.

Tests (ladder.rs): three windows over a fixed record at two rewards (the ramp moved between them); a block at the
24 h edge counts once, on the far side; an unpriced block reads priced:false until the reward arrives and then takes
that reward and no later one; the log trims past 7 days while all time keeps the block; the back-fill runs once,
says estimated, and a fresh record with rows for every block is not estimated. The crate: 308 tests green on build-1.
Builds on earnings-26 66cc2041 (blocks_24h); the view reads the windows in app-ia-26 item 5.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:09:53 +00:00
igneum-labs
0fd93532b3 Merge install-detach-26 4d3aa6e4 into release-0.3.26 (the installer's detach step logs the OS error, copies through a .part name, runs the source in place when no copy can be made, and under a job refuses rather than installing in place; take 3b's class on PC 2; known-failed first)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:09:27 +00:00
igneum-labs
2b0380fe5d Merge remote-tracking branch 'box/release-0.3.26' into preview-26-1 2026-10-08 14:06:08 +00:00
igneum-labs
7e60442e22 app-ia-26 item 4: the Tune page; nothing about tuning anywhere else
The founder's audit (docs/design/app-audit-2026-10-08.md, 4.2 and item 4): Tune is the one place a card's driving is read
and set. The strip: the fleet's three tier buttons with the measured rate and watts and the saving against stock in
watts ("358 W under stock", never money, never "saves"), Tune all, ONE sentence ("Balanced on 2 cards. Measured 1 h ago,
next check 15 Oct." and its measuring, table, off, paused and class-flip forms), the switch "Measure cards by itself"
(today's s-sweep, moved from Settings), Fine tuning when the engine offers it, the heat line only while heat mode is on,
and one sentence with a button when NVIDIA cards are measure-only. Then one card per graphics card: the head (mark, name,
the live "127 MH/s · 372 W · 0.34 MH/W", one Tune, Retune or Stop button), the card's three tiers, one line
(View.tuneLine: "Locked at 1,950 MHz, cap 372 W. Knee at 1,100 MHz." or its unlocked, measuring, no-lever, re-measuring,
table and not-measured forms; MHz and watts only, one baseline), and a closed Details disclosure: the curve with a
two-sentence caption, the cap as one sentence beside the slider (View.capSentence: "Cap 405 W (90%). The card draws
372 W at the lock."), the miners stepper with one sentence, the telemetry line, the facts line, the driver note. The
driver offer stays on the card. The foot carries the knee rule once, in the markup. The card html is built in the View
block (View.tuneCardHtml) so the once-tests read it with no DOM.

Gone: the Tuned, Locked and Ember lines under a row, the fleet saving, the price figure, the rule constants, the goal
segments, the per-card IGN a day, the Settings Tuning card (its Power control switch is its own Settings card now, the
sentence with "at install"), the second power switch on the strip. The Mine row is the plain row of 4.1 item 5 (mark,
name, kind, state word, MH/s, W, °C, the switch; no chevron, no buttons, no money) and the card list is back on Mine.
The engine's choices (api/cards) read the switch from Mine and the cap and miners count from Tune.

Tests known-failed first on build-2 (11 red in once.test.mjs: T-R1, R2, R3, R4, R5, R6 with A10, R7, A7, A9, A11, R16
with R17), then green with the view-test fixtures following (the saving wording, the strip sentence, no fleetSaving,
priceFigure, TIER_RULE, LOCK_RULE or cardIgnDay exports). Captures from the mock on build-2 in
~/Desktop/igneum-previews-2026-10-08/app-ia-26/item4 (tiers, first minute, table, class flip, knob, details open; Mine
and Settings after the move).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:04:46 +00:00
igneum-labs
4d3aa6e497 0.3.26: the installer's detach step names its error and never installs in place under a job (PC 2, 0.3.25 take 3b, 8 October 2026, 14:54:54 BST: "could not copy <dist exe> to app\updates\Igneum-Miner-Setup-0.3.25.exe" with no reason, then the fallback installed in place under the job, the stop step quit the engine and the job's tree ended the installer 3 s in, nothing installed, the app down until a start-app). Igneum-Miner.iss: LastErrorWords (DLLGetLastError + SysErrorMessage) on every failed step; DetachSource makes the updates folder (logging a failure), copies through a .part name then renames (a half-written copy never carries the final name), and when no copy can be made schedules the SOURCE in place (a job's folder persists after the job); InitializeSetup under a job either starts the detached task or stops with "REFUSED: ... no detached start could be made (the lines above say why); nothing is installed and the app is left running", never an in-place install. installer-stop-check rule 6b: the OS error logged, no in-place fallback, the REFUSED line; self-test known-failed on take 3b's shape
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 14:03:46 +00:00
igneum-labs
2b320c3a27 app-ia-26 item 1: four pages (Mine, Tune, Earnings, Settings), the pill as a state word, Prove folded under Settings
The founder's audit of 8 October 2026 (docs/design/app-audit-2026-10-08.md, section 4.5 and item 1 of section 5): the
window has four pages, one job each. View.PAGES reads mine, tune, earnings, settings in that order with the titles and
subs of 4.5 ("what this machine is doing now", "how Ember drives each card", "what this machine earned", "set once,
left alone"); page('nonsense') falls to mine. The rail carries the four entries; the Prove entry is gone and its markup
(the switches, the tiers, the line, the details and the shard card) is the Proving section of Settings, rendered by
renderProvingSection from renderSettings (D1, confirmed by main). The pill is the state word only: Mining, Paused,
Resting, Syncing, Node down, Waiting, Job running, Tuning, Not mining; the rate lives on Mine. The page ids in the
markup, the css (#page-mine) and the mock's ?page= follow.

Tests known-failed first on build-2: ui/once.test.mjs (new, in the gate line) counts the static markup; T-R15 (four
pages, no page-prove, s-prove once and inside Settings, four rail entries, the subs, no renderProve, no overview id
left in the page code) and T-R8 (the pill words); the PAGES and pill fixtures in view.test.mjs follow. Captures from
the mock on build-2 (~/Desktop/igneum-previews-2026-10-08/app-ia-26/item1). Items 3 to 6 reshape each page in turn.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 13:53:17 +00:00
igneum-labs
670d3a4de2 Merge branch 'earnings-26' into app-ia-26
# Conflicts:
#	app/igneum-app/ui/view.test.mjs
#	tools/ui-mock/server.mjs
2026-10-08 13:45:10 +00:00
igneum-labs
17b30fe8dc 0.3.26: the Windows node-source pin moves to f8da7515 (c9ad753a plus the executor's cold-restart rule: a node holding the chain from genesis replays whatever the sink's age; nothing consensus, digest 2066aa57 unchanged; the 0.3.26 pin)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 13:43:05 +00:00
igneum-labs
66cc2041e8 earnings-26: the projection pauses with its reason, the earned line is the measured 24 hours, the dev fee moves to the bottom of Settings
The founder read PC 1's Earnings tab: "100k+ IGN/day" on one line and "0 blocks in 2 hours" on the next, both shown as
earnings while a job held the card and the chain stood still. Three truths on the tab now, each with a test:

1. When a job holds the card (jobs.active, or a card in state held) the projection line reads "Projection paused:
   <job name> running since <time>; the card is not mining" and carries no IGN a day figure.
2. When the chain has no block for ten minutes (node.tip_age_s at or over 600) the line reads "Network paused" with the
   last block's age; the projection resumes with the next block. A job's word wins when both hold.
3. The earned line is always the measured last 24 hours from the node's coinbase reads, labelled "earned", never the
   projection. The engine's ladder keeps the time of every credited block for a day (Ladder.block_times, trimmed on each
   read) and reports ladder.blocks_24h, since ladder.blocks keeps only the last 30 and a fast card finds more in a day;
   a record from before the field reads its block list once. The run count and the shards paid sit under it.

The dev fee leaves the Earnings tab entirely: no switch, no line, no words. It sits at the bottom of Settings as its own
small section (The dev fee, 1%): the site's wording from site/miner.html, what it funds in one line, no control. The
command-line arm (--dev-fee 0) is unchanged and the off state reads as off. Tests: Earnings renders no fee words; the
fee section is the last card on Settings and holds no control; the page code has no fee switch.

Mock scenarios earn-held (PC 1's shape, a floor-lane job holding the 5090 for two hours) and earn-still (no block for
15 min), both with 3 blocks earned in the last 24 hours. Known-failed first on release-0.3.25 (4758c914): the projection
read as earnings under a job, "blocks this run" stood where earned belongs, the fee switch sat on Earnings.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 13:40:33 +00:00
igneum-labs
9edfbe4bdb 0.3.26: the version bump (rule 15; a node-only release: the sink-age gate hotfix on the node line, the app crate unchanged from 0.3.25)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 13:33:51 +00:00
igneum-labs
4758c914a5 0.3.25: the Windows node-source pin moves to c9ad753a (6ccaf9e9 plus the miner's full fingerprint line; the node code, the object and the digest 2066aa57 unchanged; the 0.3.25 pin)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 12:47:42 +00:00