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
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
igneum-labs
04e5b25a5d
tiers test: 123.05 formats as 123.0 (the binary value sits under the half)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:12:20 +00:00
igneum-labs
087eb65d58
Ember Tune tiers (engine half, 0.3.25): the three measured rows of the card's own search as card-state fields (tiers, tier, tier_note, tier_at; efficiency = best MH/W outright, balanced = best MH/W within 1 percent of the top rate, max = the top-rate row, source measured or stock, nothing interpolated), the fleet tier setting (balanced from install, sweep on), Cmd::TuneTier and POST /api/tune/tier through the cap and lock path with no re-search, an automatic tune lands on the tier's row, the first-run strip line, a no-lever card's one stock tier with its reason; tests on the 5090 and 5080 curves of 7 to 8 October
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 09:11:20 +00:00
igneum-labs
922da9b789
0.3.25: relay/playbooks/ca3-pc1-amd-grid.ps1, the RX 9070 XT's first measured grid on the AMD knob by job, under the installed app (0.3.20 to 0.3.24 have no AMD knob in the engine), driving the rebuilt igneum-gpu-telemetry.exe directly: the tune line names the card's ordinal and ranges, each point sets the max-clock offset then the power-limit offset (refusals are rows marked refused), holds 75 s with the first half settling, reads the app's own hash_now for the card and the tool's watts and clock in force, prints RESULT GRID row lines, resets the card at the end and names the best point against stock. One card at a time, the NVIDIA cards untouched, never quits, pauses or resumes the app and never starts its tune
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 08:53:27 +00:00
igneum-labs
f0c12e22a6
0.3.24: packaging/windows/host.sha256 takes PC 1's MSVC 0.3.24 window host 0e241c94 (the kit at 736d8e98)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 08:53:20 +00:00
igneum-labs
00960323b2
0.3.25: the AMD core-clock and power-cap knob for Ember Tune (main's order of 8 October 2026: PC 1's RX 9070 XT measured 18.9 MH/s at 202 W and stopped, "no knob on AMD"; the card is latency-bound on the whole class v4 ladder, so a core-clock cap is the lever as on NVIDIA). Two findings behind the stop: the app's AMD lever (--tune, --set-gmax, --set-plimit, --reset in igneum-gpu-telemetry: ADLX IADLXManualGraphicsTuning2 and IADLXManualPowerTuning on Windows, pp_od_clk_voltage and hwmon power1_cap on Linux) was built on 5 October ( 8c27350f) and never left branch opencl-rdna4-telemetry, so the kit's exe answers no tune line and every AMD tune fell to "measure only"; and the 9070 XT's max clock is an OFFSET range (gmax 0, gmax_range -500 1000), which the engine read as "no clock knob". Now: proto-opencl/gpu-telemetry.c takes 8c27350f's tool whole (a superset of the shipped one); src/ember.rs amd_knob turns the tune line and the card's stock clock under load into the knob (clock ladder stock down to stock + gmax_min, power ladder on the percent scale 100 + plimit range; absolute-MHz drivers pass through), amd_limits, amd_gmax_arg (the apply sends the offset), and "not available (<reason>)" with nothing set for no AMD device, a tune line that read an error, Linux (root under /sys, a later cut), or a stock clock not yet known; Plan::full takes a narrow range (the floor above the 45 percent rung) as the fine ladder alone in 100 MHz steps, so the 9070 XT runs 2870, 2770, 2670, 2570, 2470 under a 2,970 MHz stock, the stop rule at the knee or a faulted row, lock_result and the lock_* fields as on NVIDIA. ADLX manual tuning needs no elevation (PC 1, 5 October 2026, an unelevated job), so the no-prompt rule holds with no Power Helper verb; nothing of the engine runs elevated. engine.rs carries the whole tune line in TuneProbe.amd_tune and the card's amd_stock_mhz and amd_gmax_offset. Tests known-failed first: the_amd_knob_reports_not_available_with_its_reason_and_sets_nothing, the_9070_xt_gets_a_power_ladder_and_a_clock_ladder_from_its_stock_clock, the_9070_xt_ladder_locks_at_the_knee (a declared ladder in the card's shape, not a measurement). Owed: the kit's igneum-gpu-telemetry.exe rebuilt from this source (MSVC on a PC or build-1, the ADLX SDK at vendor/adlx beside the tree), then the first measured grid on PC 1 by job when the hash lane's queue is clear
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 08:42:15 +00:00
igneum-labs
736d8e98d2
Merge knob-24 b9f66eff into release-0.3.24 (the core-clock knob's display: the lock against the unlocked row on the card row, the Ember panel's lock line and the knee, the rule sentence)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 08:38:14 +00:00
igneum-labs
674c4023a9
0.3.24: the Windows node-source pin moves to 5b673577 (the v5 floor cut from the 10:45 BST minute: DAA 68,400, epoch 19)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-08 08:35:17 +00:00