Commit graph

2153 commits

Author SHA1 Message Date
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
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
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
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
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
igneum-labs
9d6b2e3997 0.3.25: the Windows node-source pin moves to 6ccaf9e9 (d5b68fae plus rule 19's build-time fingerprint against the freeze and the ceiling re-cut to 90,000; the 0.3.25 pin)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 12:42:41 +00:00
igneum-labs
83491824e0 Ember Tune tiers from the team's table (tiers-table-26, 8 October 2026, main's order: the denominator lane's measured table wires the three tiers before a card's own search runs; the founder's definition unchanged: Ember tunes the card once, three tabs, a tap flips the card to the measured point at once, a class flip re-runs the sweep and re-keys the tabs). app/igneum-app/tiers/class-v5-tiers.json, .mjs and .test.mjs are the lane's files at 7ab204b6 (30 card classes, 5 measured; the lane fills every rentable class by 15:15 BST and the file is taken again then). src/tiertable.rs embeds the table, matches a card by the lane's rule (the longest match string in the name wins, "5070 Ti" over "5070") and gives the three rows in the apply shape with table: true and the class's label (measured or estimated); a class with no lever gives its stock row only; an AMD row's core offset becomes the absolute clock the knob sends once the card's stock clock is known (clock_from_offset). hotplug.rs: apply_pref restores the card's own measured rows when the pref kept them (CardPref.tiers, new, written at the search's end), else the table seeds the tabs; settle_new seeds a card with no pref. state.rs: tiers_table on the card. engine.rs: the search's end clears the table flag and keeps the measured rows in the pref; /api/tune/tier applies a table row as it applies a measured one (an AMD table row through its offset). The window (ui/app.js View.tierSet kind "table"): the buttons carry the table's rate, watts, MH/W and the saving with the word table, the panel says "From the team's table, measured on this card class" or "estimated for this card class" and that Ember measures this card 2 min into steady mining, the lock words read the row in force, the strip's count reads "0 of 2 cards measured, 2 from the team's table", the sentence names the table before the first tune; a row's note is the button's title. Tests known-failed first on build-2 (the UI read a table row as a measured one with no word: expected 'table', actual 'ready'), then green; tiertable.rs tests: the shipped table parses and covers the brief's cards, the longest match, the 5090's three rows with the knee at 1,300 MHz in the apply shape, a no-lever card's one row, an AMD offset converting only once the stock clock is known; the lane's table test joins the gate's app test line. The H100 tier's --sm-sparse auto is the worker's own self-tune from the tuning file the manifest carries (class-v6-floor-sm, proto-cuda/nvrtc/worker.cpp reads sm_sparse per card); the app passes that file through unchanged, so the tier applies the lock and cap and the worker takes the SM shape on its own.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 12:30:52 +00:00
igneum-labs
56593787c3 Merge ember-tiers-25 0a4cc603 into tiers-table-26 (the hash lane's priors by architecture)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 12:22:03 +00:00
igneum-labs
3d4f9bd2e6 0.3.25: the Windows node-source pin moves to d5b68fae (5f316c21 plus the transaction admission height during a re-walk; nothing consensus, digest 1b37cb9d unchanged; the 0.3.25 pin)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 12:14:49 +00:00
igneum-labs
0da8e65fce 0.3.25: the Windows node-source pin moves to 5f316c21 (42ce0f07 plus the chain-id answer: eth_chainId and net_version return the id the pool admits at; nothing consensus, digest 1b37cb9d unchanged)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 11:59:14 +00:00
igneum-labs
3d080d75e1 0.3.25: the Metal worker from class-v5 79799452 (proto-metal/main.swift and packbench.swift: the generator-5 path, packClassOf v5, servePackDataset reading leaves.bin as buffer 3); the DMG's igneum-bench built from f2267bb6's tree refused epoch 19 at prepare (generator 5 not run), the cause of the Mac side of the Devnet 3 stall at the class v5 floor; the igneum-pow pairing f2267bb6 unchanged (the worker host is the kit's, the hash object the freeze's)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 11:54:52 +00:00
igneum-labs
f055fba78f 0.3.25: the Windows node-source pin moves to 42ce0f07 (e0644958 plus the ring self-check, the snapshot digest stamp, the vetoed-node status and the proof map's window; nothing consensus, digest 1b37cb9d unchanged; the 0.3.25 pin candidate)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 11:40:26 +00:00
igneum-labs
8604e89b13 Merge amd-clock-25 aa2b8652 into release-0.3.25 (the RX 9070 XT's measured efficient point in the tuner's ceiling table: 149 W at 18.96 MH/s, clock offset -500 and power limit -30, 24 percent under stock; the grid playbook finds the rebuilt exe by itself; the kit input unchanged)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 11:26:23 +00:00
igneum-labs
aa2b865295 0.3.25 AMD knob: the RX 9070 XT's measured efficient point, 149 W, in the tuner's ceiling table (the first grid on the knob, PC 1, 8 October 2026, 12:10 BST, run-ca3-pc1-amd-grid-9070-20261008-b, 24 of 24 rows ok, the app's own hash_now, the card reset at the end). The rate is flat at 18.93 to 18.98 MH/s over the whole ladder: the knob moves watts only, so the knee never comes and the stop rule reaches the floor; the efficient point is both floors (clock offset -500, about 2,920 MHz where ADLX clamps; power limit -30): 149.3 W at 18.96 MH/s, 0.127 MH/W, 24 percent under stock's 195.8 W at the same rate. The clock offset alone takes 196 to 159 W; the power limit alone does nothing until -30 (184 W). Test: efficient_watts reads 149
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 11:23:54 +00:00
igneum-labs
0a4cc603f4 Ember search priors by architecture (the sweep lane's nine capped-against-uncapped pairs, 8 October 2026): a power cap holds the rate until the SM clock falls under about 1,800 MHz on Ampere and 2,400 on Ada, the measured lock knees on Blackwell; the power ladder starts one rung above the prior's cubed-clock rung and the clock ladders start near the prior, the stock row and the measured knee unchanged; known-failed first (no prior keeps the full ladder)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 10:45:32 +00:00
igneum-labs
3a15e3b0d0 ca3-pc1-amd-grid.ps1 finds the rebuilt telemetry exe by itself: the newest igneum-gpu-telemetry*.exe under the data root's jobs folders (a fetch job's landing place) whose --tune prints a tune line, before the installed exe (the kit's old tool has no --tune, so the first grid stopped at no_tune_line); IGNEUM_GRID_TOOL still overrides
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 10:27:53 +00:00
igneum-labs
b36b7200be fast-time: override-60x.json taken whole from ca3-v4-node (81 keys: master's 75 plus base_unit_decimals, pool_split_activation_daa, program_class_v5_activation_daa, proving_base_fee_ceiling_multiple, proving_fee_ceiling_activation_daa, subsidy_per_block_activation_daa; no shared value differs), the file the 0.3.25 node line's test fast_time_60x_file_is_the_devnet_at_60x reads key by key; a single added field moved the red to the next key (8 October 2026, 11:2x UK)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 10:24:26 +00:00
igneum-labs
d9b1c22d54 fast-time: base_unit_decimals 8 in override-60x.json, the field the node line's test fast_time_60x_file_is_the_devnet_at_60x demands (0e4ec18a's change, added by hand after its cherry-pick conflicted; the 0.3.25 pre-pin matrix read core RED on every box without it, 8 October 2026, 11:1x UK)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 10:16:33 +00:00
igneum-labs
9c77b36be8 Merge tiers-class-25 dc7df7bd into release-0.3.25 (the tiers at the class flip, both halves: the engine's class key ember-tiers-25 2d188892 and the display; tiers measured under one program class never apply under another, the search re-arms within ten minutes, the knee note over 2 percent)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 10:13:51 +00:00
igneum-labs
30b5c85564 ota::return_tests: the installer's clear step is read in either shape (the one-line form, or install-detach-25's block within the next lines); the literal one-line assert went red on 8779c80e
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 10:13:50 +00:00
igneum-labs
dc7df7bd9a Merge ember-tiers-25 2d188892 into tiers-class-25 (the class-flip engine half: tiers_class, tiers_remeasure_at, knee_loss_pct, the stale refusal, the re-armed search; on release-0.3.25 87d8862d, before the install-detach merge whose .iss reshaping reds ota::return_tests on 8779c80e)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 10:10:30 +00:00
igneum-labs
2d18889284 tiers tests: the json test's fn line, dropped by the stale-test insertion
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 10:06:15 +00:00
igneum-labs
7e08d5663a Ember Tune tiers: the class flip (tiers_class, tiers_remeasure_at, knee_loss_pct): tiers measured under one program class read stale under another, the apply and /api/tune/tier refuse with the re-measuring line, the scheduler re-arms the search on the class change and says why once, the search's end stores the set under the new class with the knee loss against the old; the tier and the class survive a restart; known-failed first (v4 tiers under v5 read stale)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 10:04:58 +00:00
igneum-labs
8779c80eb2 Merge install-detach-25 05aa562d into release-0.3.25 (an installer started under the app's job runner re-launches itself as a one-shot scheduled task outside the job's process tree, so the engine's kill_tree on quit cannot end it between PrepareToInstall and the copy; the 0.3.24 take 2 class on PC 2; known-failed first)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 10:04:21 +00:00
igneum-labs
05aa562da9 installer-stop-check rule 6: the /Create pattern matches the installer's own line (the schtasks command is built in a variable); self-test green on the tree, known-failed on the shape without the detach
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 10:01:25 +00:00
igneum-labs
bdc9a49425 0.3.25: an installer started by the app's job runner detaches itself from the job's process tree (PC 2, 0.3.24 take 2, 8 October 2026, 09:24Z: the stop step ended the host and quit the engine, the engine's job runner ended the job's whole process tree on its way out (src/jobrun.rs kill_tree, taskkill /T) and the installer, the job script's child, died between PrepareToInstall and the copy: every exe still 0.3.21, install-running.flag left behind, no ssDone, no DeinitializeSetup). Igneum-Miner.iss: under a job (IGNEUM_JOB_ID set, no /IGDETACHED=1) InitializeSetup copies the installer to <localappdata>\igneum\app\updates\, registers and runs a one-shot scheduled task (a child of the Task Scheduler, outside the tree) with the same switches plus /IGDETACHED=1 and /LOG=install-<v>-detached.log, and exits before any marker or stop step; the detached run installs and deletes its task at ssDone; if the detached start fails it installs in place and says so in the log. The job's proof is the --version wait and the detached log, not this process's exit code (1). installer-stop-check rule 6 reads the path, the order (InitializeSetup first) and Inno's declare-before-use (RemoveDetachTask above CurStepChanged); self-test known-failed on 87d8862d's installer
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 10:00:44 +00:00
igneum-labs
87d8862d53 0.3.25: host.sha256 in the gate's line shape (the sha alone, the note as a comment line above it; the one-line form was not read by host-gate.py)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:53:33 +00:00
igneum-labs
6f444d14cd Ember Tune tiers: the class flip on the table (tiers-class-25, 0.3.25; the Counter ASIC coordinator's order of 10:4x BST, 8 October 2026, after the sweep found a power-capped A4000 reading class v5 17 percent under v4). The card's stored tiers carry the class they were measured under (tiers_class) and the card runs program_class; when they differ the engine re-runs the search within ten minutes (tiers_remeasure_at). The table then reads "re-measuring for class v5" on every button with the start minute ("Re-measuring for class v5, started 12:54; the class v4 points are out of date", or "queued (within ten minutes of the crossing)") and never the v4 watts as current; the tier in force stays marked; the strip's sentence names the crossing and the cards re-measuring; the fleet buttons read the re-measure when nothing else is measured; a flipped card counts as not measured. The knee note under the table when the measured loss at the same lock (knee_loss_pct) is over 2 percent: "The knee is being re-found under class v5: 5.2% less rate at the same lock than under class v4."; 2 or under, nothing. View.classFlip, minuteOf, kneeNote; the rows re-render on the four fields. Mock scenario tiers-flip. Test known-failed first on build-2 (the v4 tiers stayed on the buttons after the flip on 290d4e1d), then 74 green. Reads the hash lane's class-flip fields in the proposed shape (tiers_class, program_class, tiers_remeasure_at, knee_loss_pct).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:50:43 +00:00
igneum-labs
69d15f3f5f 0.3.25: the Windows node-source pin moves to e0644958 (7bd2940f plus proving_fee_ceiling_activation_daa 82,800 in the Devnet 3 object; digest 1b37cb9d; the 0.3.25 pin candidate)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:49:18 +00:00
igneum-labs
b5b69ad5e4 0.3.25: the Windows host sha256 bc8d4f79 (Igneum Miner.exe from kit c68aea33 on PC 1, MSVC, 10:37 BST)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:40:27 +00:00
igneum-labs
c68aea339c 0.3.25: the Windows node-source pin moves to 7bd2940f (c6629572 plus the proof-pool reannounce, nothing consensus; digest cc902690 unchanged)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:31:06 +00:00
igneum-labs
58c80eb751 0.3.25: the Windows node-source pin moves to c6629572 (the 0.3.25 node line: keygen and the fee ceiling switch coded; Devnet 3 digest cc902690 unchanged)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:26:06 +00:00
igneum-labs
0e99664283 Merge tiers-25 290d4e1d into release-0.3.25 (the three-tier Ember Tune, both halves: the tier buttons with rate, watts and the daily saving on the Cards strip, the Settings card and each panel; sweep on at Balanced from install)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:22:50 +00:00
igneum-labs
bf3eefb3c3 Merge amd-clock-25 2ab55388 into release-0.3.25 (the integrated Radeon's dash-only tune line reads not available; the 9070 XT's real line gives the knob)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:20:30 +00:00
igneum-labs
62a666853f 0.3.24 installer: drop the unused Age: TDateTime var that stops ISCC (the install-close-23 9b4a4324 fix, which release-0.3.24 had merged before)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 857925b9e9)
2026-10-08 09:18:37 +00:00
igneum-labs
290d4e1d03 Merge ember-tiers-25 04e5b25a into tiers-25 (the engine half: tiers[], tier, tier_note, tier_at, settings.tune_tier, POST /api/tune/tier, sweep on at balanced from install)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:14:20 +00:00
igneum-labs
596c4f3827 Ember Tune: the three tiers, the UI half (tiers-25, 0.3.25; main's order of 8 October 2026 after the project lead's word that the settings must give a miner everything they need; the project lead's definition: Ember tunes a card once and the tiers are rows of that search, efficiency = the best MH/W row, balanced = the best MH/W row within 1% of the top rate and the default from install, max = the top-rate row). The Cards strip and the Settings Tuning card carry three tier buttons from View.fleetTiers: the name, the fleet's rate and watts at that tier, the saving against stock in watts and money a day ("Balanced / 202.9 MH/s · 622 W / saves 188 W, £1.26 a day"), the one in force marked; under them the one sentence (View.tierSentence: on at Balanced before the first tune, "Balanced on 2 cards, tuned 1 h ago · next check 15 Oct", off with the tiers still one tap, measuring, no lever), the electricity figure (View.priceFigure: the set price, else 0.25 in the currency in force named as the default) with the measured count, and the rule ("Ember never locks below the knee by itself. Going lower is your choice."). Each card's panel carries its own three tiers with rate, watts, MH/W and saving (View.tierSet), the lock in words ("locked at 1950 MHz, 372 W; stock 450 W"), the note for a card not yet measured or measuring, and a card with no lever shows one tier, "Stock", with its numbers and the reason; a tap applies the known row at once through POST api/tune/tier (fleet or one card; an engine before the route falls back to the goal route and says the tiers need the 0.3.25 engine). The per-card tier is wired, the "needs the next update" text is gone. Reads the hash lane's fields (ember-tiers-25: tiers[], tier, tier_note, tier_at, settings.tune_tier). Tests known-failed first on build-2 (V.tierSet, fleetTiers, tierSentence not functions), then 73 green; mock scenarios tiers, tiers-first, tiers-mac; ?tune=tuned carries the tiers; captures on build-2.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:14:19 +00:00
igneum-labs
ddb13210f0 Merge ember-tiers-25 04e5b25a into release-0.3.25 (the three-tier Ember Tune, the engine half: the tier fields and the apply Cmd)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:14:10 +00:00
igneum-labs
ef45ab926d Merge amd-clock-25 922da9b7 into release-0.3.25 (the AMD core-clock and power-cap knob through ADLX manual tuning in the telemetry tool; the 9070 XT grid playbook)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:13:59 +00:00
igneum-labs
533944897a 0.3.25: version strings first (rule 15; the six places), the tree after 0.3.24's cut: the AMD core-clock and power-cap knob, the hash text fixes, the Intel rotate-fold kit, the three-tier Ember Tune, keygen and the fee ceiling on the node line
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:13:58 +00:00
igneum-labs
2ab55388e7 0.3.25 AMD knob: a tune line with no ranges is "not available (no tuning interface)", from PC 1's read-back of igneum-gpu-telemetry 1d8e055d (8 October 2026, 09:07Z): the integrated Radeon answers gmax - gmax_range - - plimit - plimit_range - - factory 0 ok, every field a dash (-1 after the parser), which amd_knob read as an offset knob with a one-MHz ladder and a 99 percent power range (known-failed first). The RX 9070 XT's line (gmax 0 gmax_range -500 1000 plimit 0 plimit_range -30 10 factory 1 ok) and its sample (gclk_mhz 3292 under load, plimit_pct 100, gmax_mhz 0) are the test's second half: the knob reads stock 3,292 MHz, the ladder 3192 down to 2792, the power range 70 to 110 percent, the apply sending offsets. Tests: ember::tests::the_amd_knob_reports_not_available_with_its_reason_and_sets_nothing (the integrated line added), engine::tests::pc1s_two_tune_lines_give_one_refusal_and_one_knob
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:13:22 +00:00