igneum/docs/plans/miner-ui-4-copy.md
igneum-labs 4af9ab4d0a miner-ui-4: the chain's own words come back (shard, segment, checkpoint, aggregator, verifying), each explained once in grey; the rest of the sweep stands
Main's correction: the app uses the same words as the site, the litepaper and the ledger for the chain's own objects,
or users cannot match the app to the docs. Shard (not piece), segment (not run of blocks, 'runs of 8 blocks' as the
explanation), checkpoint and 'locked checkpoint' (not lock point), aggregator (not combiner), verifying (not checking
proofs). Card, app, Default · Balanced, the Ember Tune strip, the state words and the one-sentence rule stay. 37 UI
tests pass.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 18:59:59 +00:00

28 KiB
Raw Blame History

Igneum Miner UI 4: the copy sweep (6 October 2026, 20:0x UK)

the project lead, on the Cards screenshot: "'As the fleet' might need some work, check all UI copy for simplicity." Every string in index.html and app.js was read against the rules: no word a home miner would not use (fleet, lane, identities, prior, hill climb, sweep, DAA, epoch, vote key, digest, manifest, shard, segment, aggregator, verifier, worker, engine become plain words or carry one grey explanation), every state line one short sentence with the number first, labels are nouns and buttons are verbs, no colon where a sentence will do, no two-beat lines, one word for one thing (tune, card). Main's correction (20:0x UK): the chain's own objects keep the words of the site, the litepaper and the ledger, with a grey explanation where they first appear: shard (not piece), segment (not run of blocks), checkpoint and "locked checkpoint" (not lock point), aggregator (not combiner), verifying (not checking proofs); "network blocks (the DAA score)" stays. The rows below that renamed those words are superseded by this correction. the project lead's rulings folded in: the per-card inherit option is "Default · " in grey, updating when the shared goal changes; "Default" wherever a per-card setting follows the shared one (the cap's "Back to Default"); the Cards strip is titled "Ember Tune"; every goal option carries its meaning as a tooltip: Efficiency "most hashes per watt, a little rate traded", Balanced "a little rate for most of the saving", Maximum "most hashes, watts second", Default "the goal set for all cards". 150 strings changed.

The ten most visible

Where Old New
Cards, the per-card goal As the fleet Default · Balanced (grey, follows the shared goal)
Cards, the strip (no title) Ember Tune, with each goal's meaning on hover
Cards, the Ember line from a prior Tuned 2 min ago from the fleet prior Tuned 2 min ago from what other miners found
Cards, the details label Identities Miners on this card
Cards, the cap lines cap applied: 460 W / cap not applied: Windows needs the administrator prompt / Unpin Cap in force: 460 W / Cap not set yet. Windows needs the administrator prompt. / Back to Default
Cards, the row's state word held for a remote job / stopped after repeated faults paused for a job from the team / stopped after repeated errors
Overview, the big button switch a GPU on below first / no GPU this app can drive / worker starting switch a card on in Cards first / no card this app can use / card starting
Prove off: relay only / Every block is turned into a short proof. The chain hands pieces to your cards off, passing proofs along / Every block is turned into a short proof, in pieces called shards. Your cards prove shards and earn IGN for each one (shard, segment and aggregator keep their names, each explained once)
Node details DAA score / rules digest / next rule switch / last lock network blocks (the DAA score) / rules fingerprint / next rule change / last checkpoint (a point the miners agree can never be undone)
Settings Vote on finality checkpoints / Trust proof records without verifying them / Hill climb Vote on checkpoints / Trust proofs without checking them / Fine tuning

Every toast and event sentence lost its semicolon or colon joint for a full stop ("Mining stops. The node keeps running"). "Worker" (the engine's word for a card's mining process) became "card" wherever a user reads it; "engine" became "app"; "fleet prior" became "what other miners found". Shard, segment, checkpoint and aggregator stay (the chain's own words), each with a grey explanation where it first appears. The engine's own log strings are untouched: View.plainEvent maps them.

Every string changed

File Where Old New
index.html The chain scene canvas label The last two minutes of blocks: this machine's lane and the others, the selected chain as a lit path, checkpoints as bands The last two minutes of blocks: your row and the other miners, the main chain as a lit path, locks as bands
index.html Node details: DAA score row DAA score0blocks the whole network has made network blocks0blocks the whole network has made (the DAA score)
index.html Node details: votes row this machine signs a checkpoint every 30 s this machine signs a lock point every 30 s
index.html Node details: digest label
rules digest
rules fingerprint
index.html Node details: tips row open ends of the block DAG right now open ends of the chain right now
index.html Node details: blue score row blocks on the agreed main chain blocks on the agreed main chain (the blue score)
index.html Node details: next switch label
next rule switch
next rule change
index.html Prove: segments row whole segments this machine proved whole runs of blocks this machine proved
index.html Prove: shard program id label
shard program id
proof program id
index.html Prove: aggregator id label
aggregator id
combiner program id
index.html Prove: lead sentence Every block is turned into a short proof. The chain hands pieces to your cards; each piece proven pays IGN. Every block is turned into a short proof. Your cards prove pieces of it and earn IGN for each one.
index.html Settings: Ember Tune switch Tunes every card for hashes per watt: once after install, then every 7 days, and after a driver or program change. Tunes every card for the most hashes per watt. Once after install, then every 7 days, and after a driver or program change.
index.html Settings: Hill climb switch Hill climb Searches around the best point instead of walking the ladders. Fine tuning Searches around the best point instead of stepping down a ladder.
index.html Settings: vote switch Vote on finality checkpoints Signs a checkpoint every 30 s. Votes lock the chain; leave it on. Vote on lock points Signs a lock point every 30 s. Votes are what lock the chain. Leave it on.
index.html Settings: trust switch Trust proof records without verifying them Devnet only. Without a verifier the node includes records it never checked. Changing this restarts the Trust proofs without checking them Devnet only. The node includes proofs it never checked. Changing this restarts the node.
index.html Settings: remote jobs switch Signed jobs (a benchmark, a script, logs to collect) run here once and report back. Signed jobs from the team (a benchmark, a script, logs to collect) run here once and report back.
index.html Settings: Power control Off, NVIDIA cards are measured only. Off, NVIDIA cards are only measured.
index.html Earnings: dev fee switch Dev fee: 1 block in 100 pays the miner software's author Dev fee: 1 block in 100 pays the people who make this app
index.html Setup: address lead Paste an Ethereum-style address you control: 0x and 40 characters. Paste an address you control. It starts with 0x and has 40 characters after it.
index.html Setup: GPU note An integrated GPU is off by default: it is slow and shares the machine's memory. A built-in GPU starts off. It is slow and shares the machine's memory.
index.html Settings: price pence per kWh. Every £ figure uses it. pence per kWh. Every £ figure uses this.
index.html Settings: name help A label for you only. A name for you only.
index.html Prove: setup note About 20 minutes, once. Takes about 20 minutes, once.
index.html Cards: the strip title

Ember Tune

tunes every card for hashes per watt</di
index.html Cards: the shared goal options with their meanings <button class="seg-b" data-goal="balanced" role
index.html Settings: the shared goal options with their meanings <button class="seg-b" data-goal="balanced" role
app.js Cards: the per-card goal options '', 'As the fleet'], ['efficiency', 'Efficiency'], ['balanced', 'Balanced'], ['rate', 'Maximum'.map(function (o) { return '<button class="seg-b' + (g === o[0] ? ' on' [['', 'Default', 'the goal set for all cards'], ['efficiency', 'Efficiency', 'most hashes per watt, a little rate traded'], ['balanced', 'Balanced', 'a little rate for mo
app.js Cards: the fleet saving line ' over ' + n + ' tuned card' ' across ' + n + ' tuned card'
app.js Cards: the Ember line from a prior ' from the fleet prior' ' from what other miners found'
app.js Cards: the Ember line, measured sub 'Apple silicon sets its own clocks' 'Apple silicon sets its own power'
app.js Cards: the tune line, prior ' from the fleet prior, confirmed' ' from what other miners found, confirmed'
app.js Cards: the schedule, off 'Ember Tune is off. Tune and Tune all still work by hand.' 'Ember Tune is off. Tune and Tune all still work when you press them.'
app.js Cards: the floor note ' (the ladder’s floor)' ' (the lowest clock Ember will set)'
app.js Cards: identities label Identities

Miners on this card

app.js Cards: identities toast 'Identities set; that card’s worker restarts' 'Set. The card restarts'
app.js Cards: cap help, Ember may move it 'Ember Tune may move it.' 'Default: Ember may move it.'
app.js Cards: cap help, pinned 'Set by hand, so the tune leaves it. ' 'Set by hand, so Ember leaves it. '
app.js Cards: cap applied '
cap applied: ' + want + ' W'
'
Cap in force: ' + want + ' W'
app.js Cards: cap not applied '
cap not applied: Windows needs the administrator prompt
'
'
Cap not set yet. Windows needs the administrator prompt.
'
app.js Cards: chosen by the tune pin ' chosen by the tune' ' Ember’s choice'
app.js Cards: Apple cap help '

Apple silicon manages its own power; there is no cap to set.

'
'

Apple silicon manages its own power. There is no cap to set.

'
app.js Cards: facts line worker cd.worker ? 'worker ' + cd.worker : '' cd.worker ? 'runs on ' + cd.worker : ''
app.js Row word: held 'held for a remote job' 'paused for a job from the team'
app.js Row word: faulted 'stopped after repeated faults' 'stopped after repeated errors'
app.js Big button: held 'a remote job holds the cards; mining restarts when it ends' 'a job from the team is using the cards. Mining restarts when it ends'
app.js Hero sub: no GPU worker m.state === 'idle' ? 'no GPU worker' m.state === 'idle' ? 'no card mining'
app.js Hero sub: worker starting (n.synced ? 'worker starting' : 'waiting for the node') (n.synced ? 'card starting' : 'waiting for the node')
app.js Big button: worker starting sub: n && n.synced ? 'worker starting' : 'waiting for the node to sync' sub: n && n.synced ? 'card starting' : 'waiting for the node to sync'
app.js Big button: switch a GPU on 'switch a GPU on below first' 'switch a card on in Cards first'
app.js Big button: no GPU 'no GPU this app can drive' 'no card this app can use'
app.js Strip fallback: mining 'mining: a block this machine finds appears here' 'Mining. A block this machine finds appears here'
app.js Strip fallback: paused 'paused: no blocks while mining is stopped' 'Paused. No blocks while mining is stopped'
app.js Strip fallback: worker state.node.synced ? 'waiting for the worker' : 'waiting for the node to sync' state.node.synced ? 'waiting for the card' : 'waiting for the node to sync'
app.js Chain scene: the note 'The full chain view needs the next engine update; this is the last 10 minutes of your own blocks.' 'The full chain view needs the next update. This is the last 10 minutes of your own blocks.'
app.js Chain scene: the state word st === 'failed' ? 'your blocks' st === 'failed' ? 'your blocks only'
app.js Node: next program sub 'until the next hourly mining program' 'until the next hourly program'
app.js Node: next program unknown 'known once the node runs' 'known once the node is running'
app.js Node: finality note 'a point the miners agreed can never be undone; locks at 2/3 of the 30-day weight' 'a point the miners agreed can never be undone. It locks at two thirds of the last 30 days of mining'
app.js Node: finality none 'locks appear once the miner votes on checkpoints' 'locks appear once this machine votes'
app.js Node: switch line 'A switch is a planned rule change. The node applies it by itself when the chain reaches that height.' 'A rule change is planned ahead. The node applies it by itself when the chain reaches that height.'
app.js Node: switch line, all behind 'Every planned switch is behind this node. ' 'Every planned rule change is behind this node. '
app.js Node: switch line, at DAA sw.name + ' at DAA ' + withCommas(sw.daa) + ': ' + blocks sw.name + ' at block ' + withCommas(sw.daa) + ': ' + blocks
app.js Node: manifest switch line 'The update manifest announces a switch at DAA ' + withCommas(n.consensus_switch_daa) 'A rule change is announced at block ' + withCommas(n.consensus_switch_daa)
app.js Node: digest not printed 'not printed yet' 'not read yet'
app.js Prove: the words off 'Off. Switch it on and this machine proves the pieces the chain assigns to its keys.' 'Off. Switch it on and this machine proves the pieces it is given.'
app.js Prove: proving sub sub: pv.current || 'a shard' sub: pv.current || 'a piece'
app.js Prove: idle note 'On. Nothing is assigned to your keys right now; the next shard arrives within a minute.' 'On. Nothing to prove right now. The next piece arrives within a minute.'
app.js Prove: proving note 'A proof takes minutes on a CPU and seconds on a CUDA card.' 'A proof takes minutes on a CPU and seconds on an NVIDIA card.'
app.js Prove: tier, cannot prove yet ': cannot prove yet (the prover is CUDA only).' ': cannot prove yet (proving needs an NVIDIA card).'
app.js Prove: tier, proves while it mines ': proves while it mines (' + gb + ' GB; a full shard needs ' + SHARD_GB + ' GB).' ': proves while it mines (' + gb + ' GB; a full piece needs ' + SHARD_GB + ' GB).'
app.js Prove: tier, cannot prove a full shard ': cannot prove a full shard (' + gb + ' GB; a full shard needs ' + SHARD_GB + ' GB).' ': cannot prove a full piece (' + gb + ' GB; a full piece needs ' + SHARD_GB + ' GB).'
app.js Prove: toast on 'Proving on; the first piece arrives within a minute' 'Proving on. The first piece arrives within a minute'
app.js Prove: verifier words { command: 'verifying', trust: 'trusting (devnet only)', off: 'off: relay only', unknown: 'not read yet' } { command: 'checking proofs', trust: 'trusting without checking (devnet only)', off: 'off, passing proofs along', unknown: 'not read yet' }
app.js Prove: segments line 'whole segments this machine proved' 'whole runs of blocks this machine proved'
app.js Prove: segments held ', ' + pv.segments_held + ' held for the chain rule' ', ' + pv.segments_held + ' waiting for the chain'
app.js Prove: segments last (pv.segment_last_s ? ', the last in ' (pv.segment_last_s ? ', the last took '
app.js Earnings: dev fee off 'Dev fee off: every block pays your address' 'Dev fee off. Every block pays your address'
app.js Earnings: dev fee on 'Dev fee: 1 block in 100 pays the miner software’s author' 'Dev fee: 1 block in 100 pays the people who make this app'
app.js Earnings: dev fee line 'The protocol takes nothing; this is the miner software’s fee, the same way every GPU miner takes one' 'The network itself takes nothing. This is the app’s fee, the same way every mining app takes one'
app.js Earnings: dev fee line off 'The protocol takes nothing either.' 'The network itself takes nothing either.'
app.js Earnings: key help 'The key for this address was made on this machine and is stored in the app folder, readable by your user only. Keep a copy somewhere safe.' 'The key for this address was made on this machine and is stored in the app folder. Only your user can read it. Keep a copy somewhere safe.'
app.js Settings: jobs note off 'Off: nothing runs here until the switch above allows remote jobs.' 'Off. Nothing runs here until the switch above allows jobs from the team.'
app.js Settings: jobs note no address 'No jobs address in this build.' 'This build has no jobs address.'
app.js Settings: jobs note running 'Running ' + jobTitle(j) + ' (' + j.id + ').' 'Running: ' + jobTitle(j) + '.'
app.js Settings: update note current 'Up to date' + (u.checked_at ? ', checked ' + rel(state.now - u.checked_at) : '') + '.' 'Up to date' + (u.checked_at ? '. Checked ' + rel(state.now - u.checked_at) : '') + '.'
app.js Settings: update note never 'Not checked yet. The engine checks by itself every hour.' 'Not checked yet. The app checks by itself every hour.'
app.js Settings: update note rule change 'A rule switch comes at height ' + withCommas(u.activation_height) + '.' 'A rule change comes at block ' + withCommas(u.activation_height) + '.'
app.js Settings: price toast 'A price in pence per kWh, for example 28' 'Type a price in pence per kWh, for example 28'
app.js Settings: Ember toast 'Ember Tune on: once after install, then every 7 days' 'Ember Tune on. Once after install, then every 7 days'
app.js Settings: Power control on toast 'Power control on: Windows asks for administrator rights once' 'Power control on. Windows asks for administrator rights once'
app.js Settings: Power control off toast 'Power control off; nothing asks' 'Power control off. Nothing asks'
app.js Settings: trust on toast 'Trust mode on (devnet only); the node restarts' 'Trust mode on (devnet only). The node restarts'
app.js Settings: trust off toast 'Trust mode off; the node restarts' 'Trust mode off. The node restarts'
app.js Settings: applied toasts 'Applied; the miner restarts' 'Applied. Mining restarts'
app.js Cards: switch on toast 'Worker starting on that card' 'Starting that card'
app.js Cards: switch off toast 'Worker stopped on that card' 'That card is off'
app.js Cards: cap toast 'Power cap set; pinned until you unpin it' 'Power cap set. It stays until you choose Default again'
app.js Cards: sendCards default toast 'Applied; only the changed worker restarts' 'Applied. Only that card restarts'
app.js Cards: stop toast 'Tune stopped; the card is back where it was' 'Tune stopped. The card is back where it was'
app.js Cards: pin toast 'The tune chooses the cap again' 'Default: Ember chooses the cap again'
app.js Cards: retry toast 'Administrator prompt: allow it to set the cap' 'Allow the administrator prompt to set the cap'
app.js Cards: Tune all toast 'Tune queued for ' + n + ' cards, one at a time' 'Tune queued for ' + n + ' cards, one after another'
app.js Overview: toggle toast 'Mining stops; the node keeps running' 'Mining stops. The node keeps running'
app.js Address ask ' from the next block? The miner restarts.' ' from the next block? Mining restarts.'
app.js Trust ask on 'Include proof records the node never checked? Devnet only; the node restarts.' 'Include proofs the node never checked? Devnet only. The node restarts.'
app.js Trust ask off 'Verify proof records again? The node restarts.' 'Check proofs again? The node restarts.'
app.js Pill: engine away 'Engine not answering' 'App not answering'
app.js Node line: engine away 'the engine is not answering; the window reconnects by itself' 'the app is not answering. The window reconnects by itself'
app.js Button: engine away 'the engine is not answering' 'the app is not answering'
app.js Hero: engine away 'no answer from the engine' 'no answer from the app'
app.js Toast: engine did not answer 'The engine did not answer' 'The app did not answer'
app.js Settings: goal toast 'The goal needs the Ember Tune update' 'The goal needs the next Ember Tune update'
app.js Cards: card goal toast 'A per-card goal needs the Ember Tune update' 'A goal for one card needs the next Ember Tune update'
app.js Cards: card goal set toast 'This card follows the fleet goal' 'Default: this card follows the goal set for all cards'
app.js Activity: identity events m[1] + ': ' + m[2] + ' identit' + m[3] + '; its worker restarts' m[1] + ': ' + m[2] + ' miner' + (m[2] === '1' ? '' : 's') + ' on it. The card restarts'
app.js Activity: worker ready m[1] + ': worker ready' m[1] + ': ready'
app.js Activity: worker fault m[1] + ': worker fault; restarting it' m[1] + ': an error. Restarting it'
app.js Activity: worker stopped 'A worker stopped (code ' + m[2] + '); restarting in ' + m[3] + ' s' 'A card stopped (code ' + m[2] + '). Restarting in ' + m[3] + ' s'
app.js Activity: worker built 'Worker built' 'Mining program built'
app.js Activity: program variant m[1] + ': program variant chosen, ' + m[3] + ' MH/s' m[1] + ': fastest program chosen, ' + m[3] + ' MH/s'
app.js Activity: segment proven pieces 'Segment proven: ' + m[3] + ' pieces in ' + m[4] + ' s' 'Run of blocks proven: ' + m[3] + ' pieces in ' + m[4] + ' s'
app.js Activity: segment proven 'Segment proven in ' + m[3] + ' s' 'Run of blocks proven in ' + m[3] + ' s'
app.js Activity: segment paid 'Segment paid: ' + m[1] + ' IGN' 'Run of blocks paid: ' + m[1] + ' IGN'
app.js Activity: segment held 'Segment proven: ' + m[3] + ' pieces in ' + m[4] + ' s; its record waits for the chain rule' 'Run of blocks proven: ' + m[3] + ' pieces in ' + m[4] + ' s. Its record waits for the chain'
app.js Activity: segment accepted 'Segment record accepted' 'Run of blocks accepted'
app.js Activity: node external 'The team asked for a node restart; this node is not the app’s, so nothing was done' 'The team asked for a node restart. This node is not the app’s, so nothing was done'
app.js Activity: no peer 'No other node found after 90 s; still looking' 'No other node found after 90 s. Still looking'
app.js Activity: node stopped restarting 'The node stopped (code ' + m[1] + '); restarting' 'The node stopped (code ' + m[1] + '). Restarting'
app.js Activity: no reading 'No reading from the node for ' + m[1] + ' s; restarting it' 'No reading from the node for ' + m[1] + ' s. Restarting it'
app.js Activity: mining paused 'Mining paused; the node keeps running' 'Mining paused. The node keeps running'
app.js Activity: settings changed 'Settings changed (' + m[1] + '); mining restarts' 'Settings changed (' + m[1] + '). Mining restarts'
app.js Activity: tune best point m[1] + ': best point ' + m[2] + ' (' + m[3] + '); your cap stays pinned' m[1] + ': best point ' + m[2] + ' (' + m[3] + '). Your cap stays pinned'
app.js Activity: next program compiles m[1] + ': the next program compiles at the hour boundary instead' m[1] + ': the next program is built at the top of the hour instead'
app.js Activity: new program worker 'New hourly program; the worker restarts on it' 'New hourly program. The card restarts on it'
app.js Activity: pack 'Rebuilding the program pack' 'Rebuilding the mining programs'
app.js Activity: trust 'Devnet trust mode: proof records are not verified (Settings)' 'Devnet trust mode: proofs are not checked (Settings)'
app.js Activity: sweep caps 'A tune is setting the caps now; retry when it is done' 'A tune is setting the caps now. Retry when it is done'
app.js Activity: updates off engine 'Updates are off for this engine (a measurement run)' 'Updates are off for this copy (a measurement run)'
app.js Activity: power cap not applied 'Power cap not applied: the administrator prompt was refused (Retry on the card)' 'Power cap not set. The administrator prompt was refused (Retry on the card)'
app.js Activity: node too old 'This node is too old for the team’s rule settings; an app update carries the newer node' 'This node is too old for the team’s rule settings. An app update carries the newer node'
app.js Row word: unplugged 'unplugged; its worker stopped. The row goes in five minutes.' 'unplugged. Its row goes in five minutes.'
app.js Details: removed '

The card was unplugged; its worker stopped. The row goes in five minutes.

'
'

The card was unplugged. Its row goes in five minutes.

'
app.js Details: problem 'No worker can drive this card.' 'This app cannot use this card.'
app.js Setup: no cards 'No graphics card this app can drive was found.' 'No graphics card this app can use was found.'
app.js Overview: no cards 'No graphics card this app can drive was found. The node runs on its own.' 'No graphics card this app can use was found. The node runs on its own.'
app.js Pages: overview sub sub: 'the rate, what it costs, the chain as it grows' sub: 'your rate, what it costs, the chain as it grows'
app.js Pages: prove sub sub: 'turn blocks into proofs, paid in IGN' sub: 'prove blocks, earn IGN'
app.js Pages: earnings sub sub: 'what it made, where it goes' sub: 'what you made, where it goes'
app.js Goal names for the Default option var GOALS = { efficiency: 'the most hashes per watt', balanced: 'hashes per watt within 1% of the top rate', rate: 'the top rate, whatever the watts' }; var GOALS = { efficiency: 'the most hashes per watt', balanced: 'hashes per watt within 1% of the top rate', rate: 'the top rate, whatever the watts' }; var GOAL_NAME
app.js Export GOAL_NAMES GOALS: GOALS, goalWords: goalWords, GOALS: GOALS, GOAL_NAMES: GOAL_NAMES, goalWords: goalWords,