Site UI 3: the audit (every page, every state, every link, every number), the tick list and the design

docs/plans/site-ui-3-audit.md: the project lead's ask of 6 October 2026 ("run the website and all pages and litepaper through the same
apple lens as the miner app", "leave no stone unturned") against the miner-ui-3 standard. Method, screen by screen with the
10-point scale (home 6, litepaper 5, live 6, miner 5, wallet 6, miners 5, explorer 7, block and address 6, faucet 7,
metamask 6, 404 6, bench 5, evidence 6, ledger 5), links and downloads (914 attributes followed, four installers hashed
against the host), the live elements' loading, failed and stale states, contrast of every token pair in both themes,
keyboard focus, phone width, the litepaper's print, the top ten findings, and appendix B listing the stones turned.

docs/plans/site-ui-3-ticklist.md (appendix A): 502 rows across 17 inventories, every claim, number, date, link and
feature with its source and today's verdict (MATCH, STALE, UNSOURCED, APPROX), the ledger's stated sentences and their
presence, the thirteen "does not claim" sentences verbatim, the scrub rules.

docs/plans/site-ui-3.md: the design: one stylesheet (tokens light and dark, type on Unbounded, Plex Sans and Plex Mono,
the card and table rules, state words, nav, footer), the home page as one screen, the litepaper as a readable paper
with a sticky section nav and the whole paper by default, per-page notes, and the live DAG module brief (the project lead's "can this
look more advanced and cool?").

docs/plans/site-ui-3-shots/before/ and before-states/: every page at 1440 and 390, dark and light, the failed-fetch and
stale-observer captures, the litepaper print PDFs, the focus captures; headless Chromium (Playwright's build, never
Chrome.app), one browser at a time, niced.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
igneum-labs 2026-10-06 19:13:49 +00:00
parent 447f6e7dce
commit 4e727402ce
87 changed files with 1196 additions and 0 deletions

View file

@ -0,0 +1,364 @@
# Site UI 3 audit: the website and litepaper through the miner app's lens
6 October 2026, 19:00 to 21:00 UK. Branch `site-ui-3`. the project lead's ask: "run the website and all pages and litepaper through the
same apple lens as the miner app", and "leave no stone unturned". The standard is `docs/plans/miner-ui-3-audit.md` and
`docs/plans/miner-ui-3.md` (branch `miner-ui-3`). The design that answers this audit is `docs/plans/site-ui-3.md`.
## 1. Method
| Input | How |
|---|---|
| Every page in `site/` | 15 pages: index, litepaper, live, miners, miner, wallet, bench, evidence, ledger, explorer, block, address, faucet, metamask, 404 |
| Screenshots | headless Chromium (Playwright's cached build, never Chrome.app) against `tools/site-serve.mjs` on a private port, reading the live API; full page at 1440 and 390, dark and light: `docs/plans/site-ui-3-shots/before/` |
| Live states | the same pages with `/api/*` blocked (failed fetch) and with the observer's reply rewritten stale (`state.stale: true`, 70 min old): `before-states/*-fail.jpg`, `*-stale.jpg`; the loading state read from each page's JS |
| Print | `/litepaper` printed to A4 in both themes: `before-states/litepaper-1440-{dark,light}.pdf` |
| Keyboard | Tab pressed 2, 3 and 8 times on the home page, the focused element and its outline recorded: `before-states/index-*-focus*.png` |
| Contrast | every text token on every surface token, both themes, computed (WCAG relative luminance) |
| Links | every href and src (914 attributes, 210 unique) followed; anchors against ids; externals with curl |
| Downloads | every installer fetched from dl.igneum.network and hashed against the host manifest and the page |
| Numbers | every number and dated claim traced to the bench log, the ledger, the spec, the analysis docs or the live API |
| Rating | the miner-ui-3 scale: "10 = nothing to change. The three questions per screen: what does it say in jargon, which number has no unit or no meaning, which 0 or blank has no reason word." |
The pane in the desktop app was used to confirm the item 0 fix live (counters and legend) but its screenshots come back
black under a 1440 emulation, so every image here is from the headless run.
## 2. Screen by screen
Rating: 10 = nothing to change. The three questions per screen: what does it say in jargon, which number has no unit or
no meaning, which 0 or blank has no reason word. Screenshots: `docs/plans/site-ui-3-shots/before/<page>-<width>-<theme>.jpg`.
### Home, 6
Good: the hero says what it is in a sentence, the four facts are tiles with units, the light-client card verifies a real
certificate in the tab, the download buttons carry version and size, the economics bar reads at a glance.
| Problem | Where |
|---|---|
| The lead paragraph runs 100 words and carries the chip model's numbers (5x to 9x per joule, about 2x), a model figure the plan says to word before any public push | hero, line 345 |
| Eight sections before the download; the one primary action ("See the miner") scrolls to the middle of the page | hero CTA |
| Two ember primaries on screen at once in the hero (the nav's "The miner" and "See the miner") plus every stat number in ember | hero, stats |
| Every section below the fold is invisible until scrolled (`.reveal` at opacity 0); a print, a screenshot, a slow scroller or a reader with JavaScript off gets blank sections | 37 `.reveal` elements |
| The live scene showed window counts as chain facts, grey nodes, and a simulation under a live-looking label when the fetch failed (fixed in item 0) | chain scene |
| The journey log's default eight entries are engineering shorthand with scrub artefacts ("the 12-node the cloud provider network", "00:4xZ", CLI flags, ledger ids) | journey |
| "vote keys active in 10 min (a card runs several)", "BLS aggregate, version 1", "final · cp 5", "igneum-proving-pool-v0" on the surface | strip, hero card, wallet, economics |
| The mine heading is 91 characters | section 6 |
| Horizontal overflow at 390 (395 px) | phone |
| No light mode | whole page |
Apple would: one screen that says what it is, shows the chain alive, offers the download, and lets the sceptic check three things; everything else one link away.
### Litepaper, 5
Good: a real table of contents with a sticky rail, numbered sections, "what we do not claim" as its own section, every
other-chain claim labelled approximate, the pager at the foot of each section.
| Problem | Where |
|---|---|
| Light by default while every other page is dark; its own token set (ground, surface, quiet, tint) | :root |
| Accents as text (ember, molten) fail 4.5:1 in light mode everywhere they appear: eyebrows, links, the tile numbers | section 6 of this audit |
| File paths inline in the abstract and limits (`docs/analysis/chip-model-v3.md`, `asic-resistance-history.md`, `prover-tiers-real-cards.md`, which does not exist) | abstract, randomx, proving, limits |
| 92 sentences over 30 words; the longest 152 words (Ember status) and 136 (proving measurements) | mining, proving, ember |
| "One section at a time" is the default, so the print is one section and a search of the page finds one section | contents |
| The cover says updated 5 October; the body cites 6 October nine times | cover |
| Placeholders on the public page: "the entry lands tonight", "measurement tonight" | questions miners ask |
| Numbers in prose, not tables: the proving measurements, the swap figures, the prover tiers | proving, ember |
| Roadmap says the proof lag is "not yet measured on the live chain" while the API reports a median lag of 387 s | roadmap |
| Tint callouts (`--tint`) against the app's no-tint rule | callouts |
Apple would: dark like the rest, a readable 68-character measure, every measured number in a table with its date and
source, the limits section set as callouts, the whole paper on one page with a sticky section nav, printable.
### Live, 6
Good: the status tiles say what they measure and over what window, the lane scene is real data with a legend in the
ledger's words, the miners table and the events feed are honest, "observer offline" is said in words.
| Problem | Where |
|---|---|
| "DEVNET V0" eyebrow (the chain is v4) | eyebrow |
| The fee sentence pins DAA 210,000 and the chain passes it tonight | intro |
| "proven 0/16" counted the on-screen window (fixed in item 0) | strip stats |
| Hash rate "n/a" when the estimate is missing; "n/a" in the proof lag panel | tiles, canvas panel |
| "DAA", "pgas", "gwei", "observer", "api unreachable" on the surface with no gloss | intro, tiles, notes |
| The scene is a lane chart with coloured squares, not a DAG; the selected chain is a spline through the squares | canvas |
| 2,000 px of miners table on one screen with every engine cell "not reported" | miners |
| Eight tiles before the scene; the scene is the page's job | layout |
Apple would: the DAG first, the eight numbers under it as one row, the tables folded.
### Miner, 5
Good: every feature is one line with its measurement and a link to the log entry, the fee section shows the fee and
the off switch, the recoveries table has units.
| Problem | Where |
|---|---|
| The h1 is 96 characters and wraps to seven lines at 1440 | hero |
| 8,947 px tall; the download sits at 7,700 px | whole page |
| Buttons say v0.3.13, the Flight Sheet URL is 404 and its sha256 is the hash of a dead file (L2) | get |
| "every NVIDIA card from 8 GB proves" cites a file that is not in the repository and contradicts /evidence row 16 | hero, features |
| "Six levers" has no document; the "3 minutes / 30% in 10 minutes" update rules have no source | levers, updates |
| "until 0.3.6", "Ships in 0.3.6" at 0.3.13 | caption, lever 4 |
| Command lines and env strings as body text (`--dev-fee 0`, `DEV_FEE=1 IDENTITIES=8 WORKER=auto VOTE=1`) outside a code block | fee, hive |
| Three ember primaries on one screen (nav, "Downloads", band) | hero, band |
Apple would: install, start, the card mines, download here; every feature behind a chevron with its number; the fee
as one sentence and a switch. (The copy and images are being redone by the site-miner agent today; this page is
styled through the shared CSS only.)
### Wallet, 6
Good: the three states are three cards with a word each, the timed first run is a table with units, the checks before
"final" are four numbered sentences.
| Problem | Where |
|---|---|
| "Your coins. Final means final." and "The miner pays this wallet." are aphorisms; "No confirmation counts, no trusting the node" is an antithesis | hero, band, lead |
| Every timed number has no row in the log or the repository ("The log entry ships with the wallet") against "every number has a row" | first run |
| 5,880 px tall; download at 4,800 px | whole page |
| The two screenshots are the same size as the text column and carry an example address | hero, transaction |
| Horizontal overflow at 390 | phone |
(The content is being redone by the wallet-ui-3 agent today; styled through the shared CSS only.)
### Miners (bench table), 5
Good: six measured rows with date and version, prototype rows say so, "no tune reports yet" says why.
| Problem | Where |
|---|---|
| "3 entries, newest at the bottom" is the bench template's eyebrow on a page with three sections | eyebrow |
| "MH per watt: not measured" on every row while the 5090's watts are in the ledger (E17) and eleven rented cards were measured today | table |
| "Rows: 6. Source file: site/miner-bench.json", "tools/tuning.mjs --priors --site" on the page | notes |
| Two 40-word sentences | priors |
Apple would: the table, the rate per watt where measured, "not measured" with the reason once.
### Explorer, 7
Good: eight tiles with units and a sub-line each, a real table of real blocks, a legend in the ledger's words, the public
API card, the error sentences are words.
| Problem | Where |
|---|---|
| "n/a" in the height, difficulty and hash-rate tiles and the Txs and Proof-records cells when a field is missing | tiles, table |
| "DAA" in two tiles and two notes with no gloss anywhere on the page | tiles, notes |
| "Older blocks" stops the 5 s refresh for good after the first click, silently | button |
| "cached 10 s" (the explorer endpoint is 5 s); "under check" names a field today's /api/supply does not carry | API card, note |
| "observer" six times as a word for the reader | intro, notes |
Apple would: the same page with the state words and the glosses.
### Block and address, 6
Good: every header field, the mergeset, the coinbase outputs and the proof records as labelled rows; a block that is a
checkpoint shows its weight; the error sentences name what a hash or an address is.
| Problem | Where |
|---|---|
| "n/a" in twelve places (miner, vote key, difficulty, subsidy, selected parent, parent levels, balance, last block, subsidy and tx cells) | both pages |
| The address balance reads "n/a" for every address with the sentence "no EVM RPC configured on this deployment (EXPLORER_EVM_RPC)", an environment variable on a public page | address |
| The default balance sub-line is the raw RPC method name `eth_getBalance` | address |
| A never-seen address returns zeros with no sentence saying it has never mined | address |
| "E(DAA) of spec 2.5", "pgas", "needs an EVM RPC", "the proving feed" | block |
| The only way back is the eyebrow link | both |
Apple would: "balance not shown on this deployment" once, "this address has not mined in the last day", the spec words
behind a tooltip.
### Faucet, 7
Good: one job, one form, one button, the four rules as numbered sentences, the status words are sentences.
| Problem | Where |
|---|---|
| "not yet open" notice and a form the reader can still submit, which answers "The faucet is not open yet" | form |
| "No account, no sign-in" (antithesis); "Mainnet starts from an empty genesis" stated as fact for a plan | intro, rules |
### MetaMask, 6
Good: two cards, the numbers a wallet needs, a button with five state sentences, the by-hand steps.
| Problem | Where |
|---|---|
| Canonical and share URL point at /wallet (L4) | head |
| "Explorer: none yet" while /explorer is live; "until the Igneum Wallet ships, MetaMask is the wallet" while 0.1.4 ships; "The Igneum Miner app" | devnet card, app section |
| Not in the nav; reachable from the footer and the faucet only | nav |
### 404, 6
Good: short, three links, noindex.
| Problem | Where |
|---|---|
| "These four pages are everything the site has" (fifteen pages); "in 17 sections" (nineteen) | copy |
| "Nothing is mined here." is an aphorism | h1 |
| No miner, wallet, explorer or ledger card; no canonical, OG or manifest | links, head |
### Engineering log (bench), 5
Good: every measurement in one place, 83 entries with a contents rail, the scrub keeps machine names out.
| Problem | Where |
|---|---|
| 189,472 px tall at 1440 (190 screens), 311,114 at 390: Chromium needs minutes to lay it out, and a phone reader scrolls for an hour | whole page |
| Headings carry commit hashes and internal names (by design of the generator) and run past 150 characters in the sticky contents | contents |
| The eyebrow "83 entries, newest at the bottom" is right here and wrong on the two pages that reuse the template | eyebrow |
| One plain-text GitHub Actions URL 404s to the public (L9) | entry 346 |
Apple would: the log as a list of entries, each collapsed to its heading and date, opened on demand; a search box.
### Evidence, 6
Good: 31 rows with five labels, the label counts as tiles, a sort on every column, "none yet" said in every verification cell.
| Problem | Where |
|---|---|
| The page shows designed 6 where the source table says 5 (row 17 carries two labels and the build buckets the first) | tiles |
| Two scrub artefacts in the rows ("the Apple M5 Max M5 Max", "a an RTX 5090 on Windows with an RTX 5090") | rows 1, 30 |
| The "What moved on 4 and 5 October" tables of the source are not rendered anywhere | body |
| 23,031 px tall; the table scrolls sideways under 1,140 px with a one-line warning | table |
| Three file paths on the surface | notes |
### Ledger, 5
Good: 167 criticisms with their status and the answer as first written, a search, the counts as chips, nothing deleted.
| Problem | Where |
|---|---|
| 53,522 px tall at 1440, 113,082 at 390, with a 712 px horizontal overflow at 390 (a long id or path in a card) | whole page |
| 40 section headings with duplicate ids; the section links land on the first | sections |
| 165 "Evidence:" lines and the "Decision owner:" lines are dropped against the renderer's "nothing is dropped" | cards |
| The page's counts differ from the source's count table by 3, 2 and 2 | chips |
| `~/.config/igneum`, "pid 33114", `--rpclisten=0.0.0.0:26610`, "PC 2" fifteen times and "the Mac" nineteen times on a public page; the renderer skips the forbidden-strings hard stop | cards |
| "Nothing deleted, nothing softened." (antithesis) | meta |
Apple would: the ledger as a filterable list with one card open at a time, the scrub applied, the ids unique.
## 3. The tick list: nothing lost
Appendix A carries every claim, number, date, link and feature per page, with its source and whether the source still
says the same today. The build keeps every row; a row that moves gets its new place written beside it.
## 4. Links, downloads, icons, 404
Every internal anchor resolves (268 fragment links, 0 missing ids). Every local asset exists. Every external link answers
200 except one plain-text GitHub Actions URL in the bench log (private repository, 404 to the public). All four downloads
hash-match the host manifest. The live 404 body is byte-identical to `site/404.html`.
| # | Finding | Where | Consequence |
|---|---|---|---|
| L1 | `site/downloads.json` is two releases stale (miner 0.3.9 and 0.3.10, written 5 Oct 21:52Z); the host serves 0.3.14 | `site/downloads.json`; `site/build.mjs` 266 to 313 | any build whose 8 s fetch of the host manifest fails stamps dead versions, dead URLs and wrong hashes on every download button |
| L2 | `miner.html` carries v0.3.13 on all four buttons, a Flight Sheet URL that is 404 (`igneum-hive-0.3.13.tar.gz`) and the sha256 of that dead file | `site/miner.html` 462 to 471 | a HiveOS miner copying the repo page's URL gets nothing; the live deploy shows 0.3.14 because the build fetched the manifest, so only a failed fetch exposes it |
| L3 | the host publishes no checksum file beside any download; only the Hive button shows a hash; Windows, Mac and Wallet show none | dl.igneum.network; `index.html` 513 to 514, `wallet.html` 371 | a sceptic cannot verify three of four downloads from the page |
| L4 | `metamask.html` canonical and og:url point at `/wallet` while the sitemap lists `/metamask` | `site/metamask.html` 8, 14; `sitemap.xml` 10 | search folds the page into /wallet |
| L5 | sitemap omits /ledger, /explorer and /faucet; lastmod dates predate the 6 Oct changes | `site/sitemap.xml` | the three pages are found only by crawl |
| L6 | two Open Graph sets: seven pages send a 256 px square (`og-small.png`, `summary` card), seven send 1200 by 630 (`og.png`); `og-coin.png` duplicates `og.png` byte for byte; `og-square.png` is referenced nowhere | `site/partials/head.html`, page heads | a shared link shows a small square for the home page and the litepaper, the two pages most shared |
| L7 | icon links differ by page: address, block, explorer, faucet carry no SVG icon and no 192 or 512 link; ledger lacks 512; 404 lacks canonical, OG, manifest and favicon-32 | page heads | install and tab icons vary by page |
| L8 | `/404` answers 200 as a clean URL | Vercel `cleanUrls` | harmless, noindex |
| L9 | the bench log prints a GitHub Actions URL as text that 404s to the public | `site/bench.html` 346 | a reader following it hits a wall |
## 5. Live elements and their states
| Page | Element | Fresh | Loading | Failed fetch | Stale observer | Empty |
|---|---|---|---|---|---|---|
| index | hero strip, chain scene, light-client card | item 0: chain block, shards proven, last lock | "connecting to the devnet observer" (item 0) | "simulated preview · live feed unavailable" with a note (item 0); before item 0 the simulation ran under a live-looking label | "observer offline, last update N ago" (item 0) | not reached: the scene always has the window |
| live | the lane scene, finality strip, proving strip, events, miners table, blocks per minute | reads /api/live every 2 s | counters at 0, "n/a" in proven until the first reply (item 0 made it "pending") | after 3 failures: "api unreachable" in the status tile and "api unreachable, scene frozen" on the canvas; tiles keep their last numbers | "OFFLINE", "last update N ago", the scene frozen with "observer offline" | no empty words: an empty window draws nothing; the tables say "No blocks in the last 10 minutes." and "No events yet." |
| miners | the bench table | static | static | no change (static page) | no change | "No tune reports yet. The first rows appear once five machines with the same card model have reported." |
| explorer | tiles, latest blocks | /api/stats, /api/supply, /api/explorer | "Loading." in the table, tile values at their defaults | tiles keep defaults, the table shows the fetch error text or "The API did not answer." | "OFFLINE", "last update N ago", "observer offline, last known" over the table | "No blocks in the last 24 hours." |
| block, address | the detail pages | /api/explorer | h1 "Block" / the address, cells empty | "The API did not answer: <message>" | no stale word: the detail is the stored block | "Not found." / zeros with no "never seen" sentence |
| faucet | the form | /api/faucet on submit | the form | "The faucet did not answer. Try again in a minute." | not applicable | the not-open notice |
| wallet, miner | download buttons, product names | build-time stamps | static | no change | no change | not applicable |
Rule for the design: every live element names its state in words with the reason (section 2.5 of the design); no counter
shows `n/a`, `--` or a bare `0`.
## 6. Contrast
Computed for every text token on every surface token. Dark passes everywhere (lowest: ember text on the litepaper's
`--surface-2`, 4.79:1). Light fails for both accent colours as text:
| Theme | Text | On | Ratio | Body 4.5:1 |
|---|---|---|---|---|
| light (site tokens) | ember #D9430F | page #F4F1EC | 3.92 | fail |
| light (site tokens) | ember #D9430F | card #FFFFFF | 4.41 | fail |
| light (site tokens) | molten #B9741C | page #F4F1EC | 3.34 | fail |
| light (site tokens) | quiet #6E6B65 | surface-2 #ECE8E0 | 4.35 | fail |
| light (app tokens) | ember #E04A14 | page #F4F1EC | 3.61 | fail |
| light (app tokens) | molten #B8731F | page #F4F1EC | 3.38 | fail |
| light, proposed | ember-text #B8390C | page, card, row | 5.14, 5.79, 4.74 | pass |
| light, proposed | molten-text #8F5810 | page, card, row | 5.22, 5.88, 4.81 | pass |
Today the litepaper (light by default) sets eyebrows, links and figures in ember and molten at body sizes: every one of
them is under 4.5:1. The design splits the accents into a fill token and a text token (design 2.1).
## 7. Keyboard and focus
Focus is visible: a 2 px ember outline at 3 px offset on every link and button (`site/partials/head.html` 23), confirmed at
Tab 2, 3 and 8 in both themes and at 390 px. The skip link appears on the first Tab. The burger menu at 390 is reachable.
What is missing: the canvas scenes have no keyboard alternative and no text summary for a screen reader beyond the
counters; the litepaper's section pills are buttons without `aria-pressed`; the theme has no control at all on 14 of 15
pages (the litepaper offers one).
## 8. Phone width
| Page | 390 px | Finding |
|---|---|---|
| index | horizontal overflow, page 395 px wide | the livestrip's `nowrap` tiles and the hero grid |
| wallet | horizontal overflow, page 395 px wide | same class |
| ledger | horizontal overflow, page 712 px wide | a long id or path in a card without `overflow-wrap` |
| the other twelve pages | no overflow | |
## 9. Print
`/litepaper` printed to A4: three pages in dark mode (the page colours print as set), the nav and footer print, and only
the open section prints because the paper opens in "one section at a time" mode. A reader who prints the litepaper gets
the abstract and the footer. The design adds a print stylesheet and prints the whole paper (design 4).
## 10. Top ten findings
Ranked by reach (who sees it) and by what it costs a reader.
| # | Finding | Consequence per reader |
|---|---|---|
| 1 | The home live scene showed window counts as chain facts and grey blocks (fixed in item 0, commit 84a6de2) | every visitor read a dead chain; fixed before this audit shipped |
| 2 | Fifteen pages carry fifteen stylesheets with three token sets (home, litepaper, chrome) and no light mode on fourteen of them; the litepaper is light by default, the rest dark | a reader crossing from the paper to the home page changes world; a light-mode user gets dark pages everywhere but one |
| 3 | Light-mode accents fail body contrast everywhere they are used as text | the litepaper's links, eyebrows and figures are hard to read in light mode |
| 4 | Scroll-reveal hides every section below the fold until it scrolls into view (`.reveal` at opacity 0) | a slow scroller, a print, a screenshot or a reader with JavaScript off gets blank sections |
| 5 | The print of the litepaper is one section, dark, with nav and footer | the paper cannot be printed |
| 6 | The repo's download snapshot and the miner page are stale against the host (L1, L2) | a failed manifest fetch ships dead links and a wrong hash |
| 7 | Developer text on user surfaces: the litepaper's abstract cites `docs/analysis/chip-model-v3.md` and other repo paths inline; DAA numbers appear without the word for them | a reader who is not in the repo sees file paths |
| 8 | Horizontal overflow at 390 on index and wallet | the phone page scrolls sideways |
| 9 | Three of four downloads show no hash and the host publishes no checksum file (L3) | a sceptic cannot verify the installer |
| 10 | Two Open Graph sets, a wrong canonical on /metamask, three pages missing from the sitemap (L4 to L6) | shared links and search see a smaller, inconsistent site |
Also found and fixed in item 0 without a row: the scene's fixed 16 ms frame step (double speed on 120 Hz displays), and
polling that stopped for good after one failed fetch.
## Appendix A. The tick list per page
`docs/plans/site-ui-3-ticklist.md`: 502 rows (home 88, litepaper 151, nav 11, footer 24, live 22, miners 19, miner 66,
wallet 29, bench 5, evidence 12, ledger 8, explorer 23, block 11, address 9, faucet 8, metamask 9, 404 7), each with its
source and today's verdict (MATCH, STALE, UNSOURCED, APPROX), the ledger's stated sentences with their presence on each
page, the nine "what we do not claim" sentences and the four "what Ember does not claim" sentences verbatim, and the
scrub rules. The build keeps every row; the design's per-page notes (section 5 of `site-ui-3.md`) say where a row moved.
## Appendix B. The stones
| # | Stone | Turned | Where |
|---|---|---|---|
| 1 | every page in site/, including API-backed ones and 404 | yes, 15 pages | section 2, `before/` |
| 2 | every state of every live element: loading, empty, failed fetch, stale | yes: failed and stale captured for 10 pages; loading and empty read from each page's JS | section 5, `before-states/` |
| 3 | every link followed, internal and external | yes: 914 attributes, 210 unique, 268 anchors, every external with curl | section 4 |
| 4 | every number traced to its source and checked against the live API or the bench log today | yes, appendix A | appendix A |
| 5 | both themes | yes, dark and light for every page | `before/` |
| 6 | 1440 and 390 | yes | `before/` |
| 7 | keyboard focus | yes, Tab 2, 3, 8, both themes, both widths | section 7, `before-states/*focus*` |
| 8 | contrast | yes, every token pair, both themes | section 6 |
| 9 | the litepaper's every section and footnote | yes, appendix A (L rows) | appendix A |
| 10 | the downloads' hashes against the host | yes, four files fetched and hashed | section 4 |
| 11 | the Open Graph and favicon set | yes, every meta and icon, sizes measured with sips | section 4, L6 and L7 |
| 12 | the 404 page | yes, live body byte-identical, `/404` answers 200 | section 4, L8 |
| 13 | print of the litepaper | yes, both themes, A4 | section 9 |
| 14 | the live API itself against the page | yes, item 0 (height, paid shards, lock index, lag) | commit 84a6de2 |

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 830 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 830 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

View file

@ -0,0 +1,617 @@
# Site UI 3 audit, appendix A: the tick list
Every visible claim, number, date, link and feature per page, in reading order, with its source and today's verdict.
Read 6 October 2026 at 18:16 UTC (API: height 140,681; 0.983 blocks/s; 2.66 GH/s; 71 vote keys in 10 min; last lock
6,795; proving active since DAA 84,100; 2,149 shards paid; median proof lag 387.5 s; verifier Off on the observer's node).
Verdicts: MATCH (source says the same today), STALE (source moved on), UNSOURCED (no source in the repository or the
API), APPROX (labelled approximate on the page or in the source). The build keeps every row; a row that moves gets its
new place written in the design's per-page notes. Rows marked "generated" mirror a markdown document and are kept by
keeping the generator.
Row counts: home 88, litepaper 151, nav 11, footer 24, live 22, miners 19, miner 66, wallet 29, bench 5 hand-written,
evidence 12 hand-written, ledger 8 hand-written, explorer 23, block 11, address 9, faucet 8, metamask 9, 404 7. Total 502.
## Home page (site/index.html)
| id | section | text | kind | source and verdict |
|---|---|---|---|---|
| I-1 | nav | Litepaper, Live devnet, Engineering log, Miner, Wallet, Evidence, GitHub, "The miner" | links | all 200 |
| I-2 | hero | "GPUs are back · for good" | claim | |
| I-3 | hero | "Mined by GPUs. Proven by fire." | tagline | ledger row 820 allows it |
| I-4 | hero | "A new mining program every hour, compiled on the card" | claim | bench-log 4 Oct swap entry, MATCH |
| I-5 | hero | "strongest chip reaches 5x to 9x per joule against an RTX 5090" | number | docs/plans/morning-2026-10-06.md 35-40, evidence row 17; APPROX (model); the plan's line 55 says pick a wording before any public push |
| I-6 | hero | "about 2x once the lever now in its gates ships" | number | morning table row reads 2.7x; counter-asic-3-status.md not in tree; UNSOURCED here |
| I-7 | hero | "the numbers" to /bench#counter-asic-2-0-the-numbers | link | anchor exists |
| I-8 | hero | "Every NVIDIA card from 8 GB proves and is paid for it; 12 GB and up mine and prove; AMD and Apple cards mine" | claim | morning 107 (patched server ships in 0.3.14); litepaper 452 says not in the shipped app; live verifier Off; STALE wording (present tense) |
| I-9 | hero | "No premine, no stake, no foundation" | claim | spec 02, 05; MATCH |
| I-10 | hero | "See the miner" (#mine), "Read the litepaper" | links | |
| I-11 | hero card | "This tab · light client", badge PREVIEW / LIVE | feature, state | /verify/verify.js |
| I-12 | hero card | "Browser checks Igneum. A checkpoint certificate, verified in this tab. Voter list from the node." | claim | /api/checkpoint 200 |
| I-13 | hero card | BLOCK PROOF "not yet" (title: first off-chain GPU proof 4 Oct 2026) | state, date | bench-log 578; MATCH |
| I-14 | hero card | CHECKPOINT "checking" then the index | state | live |
| I-15 | hero card | PROOF SYSTEM "BLS aggregate, version 1" | claim | verify/core.js |
| I-16 | hero card | VERIFIED IN THIS TAB "checking" then the result | feature | |
| I-17 | live strip | vote keys in 10 min, blocks/s, hash rate, chain block (item 0) | feature | /api/live state |
| I-18 | stats | "1 / s blocks, rising to 10" | number | /api/live 0.983/s; MATCH |
| I-19 | stats | "~60 s to a proof at launch, the target" | number | roadmap gate 3; live lag 387 s not stated |
| I-20 | stats | "First GPU proof of a block: 1.4 s on an RTX 5090, 4 Oct 2026" | number, date | bench-log 590; MATCH |
| I-21 | stats | "0 premine" | number | MATCH |
| I-22 | stats | "4B IGN hard cap, ever" | number | spec 02 118; /api/supply; MATCH |
| I-23 | stats | "100% of emission to miners and provers; the protocol carries no fee" | number | spec 05 61; /api/stats split; MATCH |
| I-24 | prove | "Watch the chain prove itself" | heading | |
| I-25 | prove | "Blocks every second, proven in shards, locked every 30 seconds" | number | checkpointInterval 30; MATCH |
| I-26 | prove | "First live lock 4 Oct 2026: checkpoint 242, 77.4% of all weight, two hours after genesis" | number, date | bench-log 713; MATCH |
| I-27 | prove | chain scene with chain block, shards proven, last lock (item 0) | feature | /api/live |
| I-28 | prove | legends (simulated, live) | feature | |
| I-29 | prove | viz note "One node is read every 2 s ..." | feature | |
| I-30 | prove | "This hour's program", countdown, "64 instructions x 8 iterations", "seed from a locked checkpoint, through a 10 minute delay" | feature, numbers | spec 00 31; bench-log 150; MATCH |
| I-31 | prove | "A new program every hour. Last hour's chip is already obsolete." | claim | aphorism, copy law |
| I-32 | prove | "First live swap 4 Oct 2026: Apple, NVIDIA and AMD kept hashing through it, 0 rejected blocks." | number, date | bench-log 634, 644; MATCH |
| I-33 | prove | feed rows batch proof, state proof, fault proof "at testnet"; "IGN burned from jobs" "phase two" | state words | |
| I-34 | prove | "Jobs are paid on the customer's chain at launch; settlement in IGN with a 10% burn follows the proof bridge in phase two" | number | spec 05 47-48; evidence row 24; MATCH; ledger P10 sentence |
| I-35 | prove | "Live rows arrive with the public testnet, August 2027" | date | roadmap; ledger X3 sentence |
| I-36 | prove | "Read more in the litepaper" /litepaper#proving | link | exists |
| I-37 | randomx | "Monero's idea, finished for GPUs" | heading | ledger overclaim 68 asks "Monero's technique, applied to GPUs"; not applied |
| I-38 | randomx | "kept chips off Monero since 2019 (approximate)" | date | asic history row 16; ledger C2 sentence; MATCH |
| I-39 | randomx | table CPUs/GPUs; every hash/every hour; "2 GB, fixed" / "2 GB, growing (proposed schedule, fixed at the testnet genesis: 2 GB, doubling at years 4, 12 and 28)"; any CPU | numbers | evidence row 31 (schedule 4, 12, 28, 60, recommended); APPROX |
| I-40 | randomx | "The program keeps changing on a schedule fixed at genesis. Nobody touches it." | claim | aphorism |
| I-41 | randomx | /litepaper#randomx; "Built on the shoulders: Kaspa's GHOSTDAG and node, Monero's RandomX idea, Chia's class-group VDF, Ethereum's EVM, Succinct's SP1, BLS12-381 and Bitcoin's address format"; /litepaper#shoulders | claim, links | exist |
| I-42 | build | "One chain, three jobs" | heading | |
| I-43 | build | "Any 4 GB card at launch, 8 GB from about year 4 ... doubling at years 4, 12 and 28, approximate. 80% of each block to its finder." | numbers | spec 02 123; evidence row 31; MATCH, APPROX |
| I-44 | build | "The same card proves shards and sells proofs to other chains."; #prove | claim, link | |
| I-45 | build | "Ethereum bytecode, with the differences documented ... 20% of priority fees to the contracts that ran, stated at the fee levels that exist."; /litepaper#builders-ask | number, link | spec 05 25; MATCH; ledger overclaim 35 wording |
| I-46 | build | /litepaper#building | link | exists |
| I-47 | mine | "One click. The card mines; every NVIDIA card from 8 GB proves, 12 GB and up mine and prove." | heading | 91 characters; see I-8 |
| I-48 | mine | "Igneum Ember finds your GPU, makes a wallet for you and runs the node, the miner and the prover as one app." | claim | |
| I-49 | mine | screenshot; "Igneum Ember (the app is still labelled Igneum Miner until 0.3.6) on an Apple M5 Max, live devnet, 5 Oct 2026." | number, date | litepaper 400 says 0.3.13 still says Igneum Miner; STALE |
| I-50 | mine | "NVIDIA, AMD, Apple silicon. Found by itself. One worker per card, several identities each." | claim | |
| I-51 | mine | "Compiled ahead and swapped in 0.01 ms on the live devnet, 0 rejected blocks." | number | bench-log 644; MATCH |
| I-52 | mine | "Signed updates at a safe moment ... The old version comes back if the new one fails to start." | claim | |
| I-53 | mine | "Kernel variants raced every hour, hash per watt swept, every number in the bench table." | claim | sweep not yet run on a card (litepaper 612); overclaim |
| I-54 | mine | Windows "v0.3.14 · 45.4 MB" | link, number | host 0.3.14, 45,416,619 bytes; MATCH live; downloads.json snapshot 0.3.10 STALE |
| I-55 | mine | macOS "v0.3.14 · 41.9 MB" | link, number | host MATCH; snapshot STALE |
| I-56 | mine | "Linux · HiveOS" /miner#get | link | exists |
| I-57 | mine | "Devnet: coins have no value and the chain may be reset." | claim | |
| I-58 | mine | "Public testnet: not yet open; the devnet build is here for people who want to look." | state | ledger X2 sentence |
| I-59 | mine | /miner; "optional 1% dev fee, like other GPU miners, off with one flag. Download only from this domain. Nobody from Igneum will ask for your seed." | number, claim | bench-log dev fee entry; MATCH |
| I-60 | terms | "What you agree to when you run the testnet miner" | heading | 48 characters |
| I-61 | terms | "No value ... no airdrop, no points scheme ... Mainnet starts from an empty genesis." | claim | |
| I-62 | terms | "Every reset is announced at least seven days ahead on this page and in the app ... The devnet that runs today resets without notice." | number | testnet-go.md 75, PLACEHOLDER text; APPROX |
| I-63 | terms | "What the app sends home ... a service Igneum runs on Vercel ... Never your seed phrase ... Nothing is sold or shared." | claim | |
| I-64 | terms | /metamask; "optional 1% fee ... no fee to anyone" | link, number | |
| I-65 | wallet | "Your coins, your wallet"; "Igneum Wallet holds the key the miner makes for you and verifies finality itself. MetaMask works too." | claim | |
| I-66 | wallet | states "pending", "in a block", "final · cp 5" | feature | "cp 5" is an abbreviation |
| I-67 | wallet | "24 words, three typed back, a password. Argon2id and XChaCha20-Poly1305. Nothing leaves." | claim | app/igneum-wallet not in this tree; UNSOURCED here |
| I-68 | wallet | "Rewards in one history ... QR drawn locally"; "Reads your own node ... Nobody else sees your balance." | claims | |
| I-69 | wallet | /wallet, /wallet#metamask | links | exist |
| I-70 | wallet | "macOS first, Windows next. Public testnet first." | state | |
| I-71 | wallet | screenshot; "Igneum Wallet on a private test network, 5 Oct 2026. The address is an example." | date | |
| I-72 | journey | "Where Igneum is right now"; label from JSON "updated 6 Oct 2026" | state | |
| I-73 | journey | "Thirteen months, four public gates, each a measurement published pass or fail." | number | litepaper roadmap; MATCH |
| I-74 | journey | six phases with dates and gates (JSON) | dates, numbers | phase 2 gate text differs from the litepaper's gate 2; three phases active at once |
| I-75 | journey | "Day one was 3 October 2026" | date | bench-log 213 |
| I-76 | journey | log of 40 entries, 8 shown, "Show all 40 entries" | feature | bench-log headings; MATCH; the eight default entries carry raw shorthand and scrub artefacts |
| I-77 | journey | /litepaper#roadmap | link | exists |
| I-78 | economics | "Every coin, mined"; "Hard cap of 4 billion IGN, halving every two years for ever." | number | spec 02 121; MATCH |
| I-79 | economics | bar "80% miners", "20% provers", "0% anyone else in the protocol" | numbers | MATCH |
| I-80 | economics | tiles "0 premine", "0 stake, anywhere", "0 admin keys in consensus", "90% of blocks must signal to upgrade" | numbers | spec 00 61, 05 83; ledger G4 tile; MATCH |
| I-81 | economics | "Base fee burned. The one payment to the project is the Ember software's optional 1% dev fee ... coinbase's 20% output is burned under the tag igneum-proving-pool-v0 ... separate escrow ... same 20%." | numbers | ledger E5 sentence verbatim; evidence rows 20, 21; MATCH |
| I-82 | economics | /litepaper#economics | link | exists |
| I-83 | band | "Read what Igneum does not claim." "Proof lag, chip economics, the market size, and the one rule external review will try hardest to break." | claim, link | |
| I-84 | footer | tagline | claim | |
| I-85 to I-88 | footer | the 24 footer rows (see Footer below) | links, claims | |
Ledger sentences required on the home page: E5 (yes, verbatim), G4 tile (yes), C2 hero chip sentence (no: hero now carries the model figures), C2 RandomX "since 2019 (approximate)" (yes), X2 notice (yes; the version differs from the ledger's v0.3.9 note), X3 (yes), X7 footer routes (yes), X8 phase 6 (yes), L2 "Half of all IGN" absent (yes), overclaim 68 (not applied), overclaim 57 "approximate" on card lifetime (yes).
## Litepaper (site/litepaper.html)
| id | section | text | kind | source and verdict |
|---|---|---|---|---|
| L-1 | cover | "Litepaper · version 0.2" | number | |
| L-2 | cover | tagline; "protected from specialised chips by a program that changes every hour" | claim | |
| L-3 | cover | "Published 3 October 2026 · updated 5 October 2026" | date | body cites 6 October in nine places; STALE |
| L-4 | cover | "Coin IGN · cap 4,000,000,000" | number | MATCH |
| L-5 | cover | "Status devnet live, pre-testnet" | state | |
| L-6 | cover | "Method one founder with AI systems · external review before gate 3" | claim | ledger G2 sentence |
| L-7 | cover | "This is not an offer to sell anything" | claim | |
| L-8 | contents | 19 sections; "One section at a time" / "Whole paper" (localStorage); "Latin igneum: fiery. A cupel ..." | feature | the single-section mode breaks print |
| L-9 | abstract | "NVIDIA cards also prove every block with zero-knowledge proofs and sell proving to other chains" | claim | |
| L-10 | abstract | "strongest recompute chip ... 256 MiB cache on-die, reaches under 1x per chip" | number | chip-model-v3.md 69, 82; MATCH (model) |
| L-11 | abstract | "memory-controller chip ... 1.2x per chip and, in our model, 5x to 9x per joule" | number | morning 39-40; APPROX; not in the file the page cites |
| L-12 | abstract | "Ethash chips of this class reached 2.1x to 4.8x" | number | asic history row 3; MATCH |
| L-13 | abstract | "brings the chip to about 2x" | number | plan table says 2.7x; UNSOURCED here |
| L-14 | abstract | sources: chip-model-v3.md section 5, 6 October 2026; asic history (Phoenix 2020, X4 2021, E9 2022); Counter ASIC 3.0 item 8 (5.6x to 2.1x, 0.2%, gates G1 to G6) | numbers, dates | chip-model-v3 has sections 1 to 4, dated 5 Oct; counter-asic-3 table has items 1 to 7; citation wrong, UNSOURCED |
| L-15 | abstract | "tested by paid independent cryptanalysis and the public benchmark" | claim | |
| L-16 | abstract | "included in about one second, proven within about a minute at launch, and locked by miners within about two" | numbers | spec 03; MATCH as design |
| L-17 | abstract | "no premine, no pre-sale, no treasury taken from emission, no stake anywhere in consensus, and no dependence on any other chain" | claim | MATCH |
| L-18 | abstract | "a chip for the whole program space is a GPU without the graphics parts" | claim | |
| L-19 | abstract | "Writing new code, including an emergency fix to the proof system, is the one thing that takes a person, and it activates only on miner signalling" | claim | ledger P7 sentence |
| L-20 | abstract | tiles 1/s, ~60 s, 0, 100% | numbers | MATCH (target); live lag not stated |
| L-21 | precedents | "We know of no chain that combines them ... corrected when shown wrong." | claim | ledger C11 sentence |
| L-22 | precedents | column "State, 5 Oct 2026" | date | |
| L-23 | precedents | RandomX since 2019; "ProgPoW, as KAWPOW on Ravencoin since 2020 (approximate)"; "Measured: hourly swaps on Apple, NVIDIA and AMD cards on the live devnet, 4 October 2026" | dates, state | ledger M4 sentence; bench-log 634; MATCH |
| L-24 | precedents | Primecoin 2013, Aleo (approximate); "Implemented: proving v0 on the live devnet since 5 October 2026. The job market ... Designed" | state, date | activation_daa 84,100; MATCH |
| L-25 | precedents | Conflux since 2020 (approximate); "Implemented in part ... aggregated block proof ... Designed" | state | |
| L-26 | precedents | Decred, Horizen, Kaspa (approximate); "Vote weight is 30 days of blocks per key"; "rule v2 live, first lock 4 October 2026. External review is owed at gate 3" | number, date | bench-log 713; MATCH |
| L-27 | precedents | "Kaspa's fair launch."; Zcash, Decred (approximate); "optional 1% dev fee ... off with one flag"; "80/20 coinbase on the devnet" | numbers | ledger C3; /api/stats split; MATCH |
| L-28 | precedents | sync committee (approximate); "The consensus proof that makes the checkpoint self-verifying is phase two"; "The home page's card verifies a devnet certificate in the browser today" | state | ledger P4 sentence |
| L-29 | precedents | "Claims about other chains are from memory until cited ... marked approximate" | claim | |
| L-30 | precedents | pull quote "GPU mining lost its largest home in 2022 ..." | claim | |
| L-31 | problem | "Ethereum left proof of work in 2022"; "Chips arrived, as on Kaspa, whose hash was designed to welcome them"; "Ergo, Ravencoin and Conflux ... fraction of the 2022 fleet (approximate)" | claims | ledger C3, C8 sentences; MATCH |
| L-32 | problem | "those proofs come from a few private GPU clusters" | claim | |
| L-33 | problem | "Ethereum Classic, Bitcoin Gold and Vertcoin were all hit this way" | claim | asic history rows 6, 7 |
| L-34 | problem | "a supplier whose marginal cost is close to power"; "earned over a month of public mining, not rented for an hour" | claims | ledger P6 sentence |
| L-35 | glance | five-layer figure (program hourly; one block a second; included in about a second; Solidity unchanged; shards within about a minute, paid from gas; checkpoint every 30 s, 30-day history; "Fresh rented hashrate has no vote") | numbers | spec 03; MATCH as design |
| L-36 | glance | "Live on the devnet, 5 October 2026"; "run since 3 October 2026 on several machines, cards from all three GPU vendors" | dates | devnet v0 3 Oct, live v4 chain 4 Oct; APPROX |
| L-37 | glance | Mining lottery row, "4 Oct 2026, first live swap" | date | MATCH |
| L-38 | glance | Blocks row "About one a second with the full fleet; 0.65 a second over the hour to 16:00 UTC on 6 Oct 2026 with one PC off (2,325 blocks)" | numbers | not in docs; API now 0.98/s; UNSOURCED and STALE |
| L-39 | glance | Difficulty "Rule v2, a 600-second reference window, switched on by height; DAA 33,000, 4 Oct 2026" | numbers | spec 02 58; bench-log 1041; MATCH |
| L-40 | glance | Finality row: 30 s, two thirds, checkpoint 242, 77.4%, 17 vote keys | numbers | MATCH |
| L-41 | glance | Proving row: v0 active, DAA 84,100, 5 Oct 2026 | number, date | MATCH |
| L-42 | glance | Ember "version 0.3.13 (6 Oct 2026); the app window still says Igneum Miner" | number, date | release-0.3.13.md; MATCH; contradicts I-49 |
| L-43 | glance | Wallet "Igneum Wallet 0.1.1 on macOS, 5 Oct 2026" | number | downloads.json 0.1.4; STALE |
| L-44 | glance | Measured line: three log entries; "the 0.3.6 release plan"; "evidence table, row 7" | claim | |
| L-45 | glance | "0.3.6 ships the verifier with the app"; "two outside laptops. Nothing here has been reproduced by anyone outside the project yet" | claims | verifier Off on the observer's node today; STALE; laptops bench-log 905, 1061 MATCH |
| L-46 | mining | "Every GPU chain that promised ASIC resistance shipped a fixed algorithm" | claim | |
| L-47 | mining | "seed from a locked checkpoint one epoch back ... ten-minute verifiable delay"; "32 lanes of a warp"; "multi-gigabyte dataset that changes daily" | numbers | bench-log 150; spec 01; MATCH |
| L-48 | mining | "Measured: an RTX 5090 hashes at 95 GB/s of useful 4-byte loads against 1,638 GB/s of sequential writes" | number | bench-log 80; ledger M10 sentence; MATCH |
| L-49 | mining | "memory footprint and instruction count are fixed and only the maths sequence is random" | claim | |
| L-50 | mining | "checks a hash on an ordinary CPU in under ten milliseconds by simulating one warp" | number | spec 01 gate |
| L-51 | mining | "Measured: 0.61 ms per warp ... class v2 and 2.1 ms for class v3 (mixer x8, 5 October 2026, load average 5.5, worst cold unit 2.15 ms), 3.4x; the 10 ms gate leaves 4.8x; a 2019-class laptop core is not yet measured" | numbers | spec 01 399 (v2 0.631); chip-model-v3 26 gives 2.79 ms at load 5.6; APPROX, two measurements disagree; ledger M9 quotes the older 0.41 to 0.58 |
| L-52 | mining | "The hash is a lottery, not a general-purpose cryptographic hash ... Open: no analysis of the lottery properties exists yet." | claim, state | ledger M7 sentences |
| L-53 | mining | clock table: 128 dataset addresses per nonce; hour; day; six months from a genesis reserve; "Ethereum's growing dataset ran Bitmain's E3 out of memory in 2020, approximate" | numbers | spec 01 1.4; asic history row 3; MATCH, APPROX |
| L-54 | mining | "Three ideas ... A 90% miner signal turns one on. No fork." | number | spec 05 81; MATCH |
| L-55 | mining | "No hash has stayed free of chips forever. Igneum does not claim to."; "the response takes a week"; /bench#counter-asic-2-0-the-numbers; "Monero ... since 2019 with no chip publicly shipped, approximate; that is precedent, not proof" | claims, link | ledger C2 (wording "Monero is precedent, not proof" differs) |
| L-56 | mining | "anyone could publish a new generator and miners would switch it on by signalling" | claim | |
| L-57 | randomx | "RandomX has kept chips off Monero since 2019" | date | asic row 16 |
| L-58 | randomx | "Bit-exact on Apple, NVIDIA and AMD, measured" | claim | evidence row 19; MATCH |
| L-59 | randomx | "Per hour, compiled to native GPU code. Per hash, the 128 dataset addresses change" | numbers | MATCH |
| L-60 | randomx | "About 2 GB, the same size since 2019, approximate" / "2 GB, growing ... doubling at years 4, 12 and 28; a 4 GB card mines about four years, an 8 GB card about twelve, approximate" | numbers | evidence row 31; APPROX |
| L-61 | randomx | "256 MB cache on a CPU (512 MB from year 4), one warp under 10 ms. Measured 2.1 ms (3.4x class v2's 0.61 ms); a 2019-class core not yet" | numbers | spec 01 210; see L-51 |
| L-62 | randomx | "unchanged for seven years" / "Nobody touches it"; "Closed by a verifiable delay" | claims | |
| L-63 | randomx | "Every NVIDIA card from 8 GB proves; 12 GB and up mine and prove; 24 GB on the stock server (eleven rented cards, RTX 3060 to RTX 5090, 6 October 2026, docs/analysis/prover-tiers-real-cards.md)" | numbers, path | file missing in worktree; UNSOURCED; path on a user surface |
| L-64 | randomx | "No chip publicly shipped in seven years, approximate" / "public now (github.com/igneum-network/spec). The node, the miner and the wallet are in a private repository until the public testnet" | claim, link | ledger X1 sentence; MATCH |
| L-65 | randomx | "192 of 192 across two programs"; "228 million ... 45 million"; "prototype figures, not mining rates" | numbers | bench-log 74-100; MATCH |
| L-66 | randomx | "111x faster ... The 256 MB cache construction replaced it on 3 October 2026 ... computing items on the fly runs 4.8x slower than loading them"; "Open: the same shortcut ratio on NVIDIA and on a discrete AMD card" | numbers, state | bench-log 115, 138; ledger M2 sentence; MATCH |
| L-67 | randomx | "Inside the 5090's 96 MB cache the same program ran nearly six times faster" | number | ledger M1 (5.8x); MATCH |
| L-68 | randomx | "On 4 October 2026 ... a Mac at 26.7 million, an RTX 5090 at 123 million, an integrated AMD chip at 2.7 million, every hash doing 128 distinct reads" | numbers | bench-log 644; MATCH |
| L-69 | proving | "a phone checks it in milliseconds; the wrapping cost is a phase two measurement" | claim | ledger P3 sentence |
| L-70 | proving | "one BLS aggregate signature over 16 keys and 21 header hashes, 139 to 155 ms cold and 58 to 68 ms warm in a phone-sized tab on a laptop core (5 October 2026). No phone has been measured, and no wrapped block proof exists yet" | numbers | ledger P3 328; MATCH |
| L-71 | proving | "assigned by lot to eight provers for ten seconds, then open to anyone; there is no bond"; "within about a minute at launch"; native-execution check (spec section 7); "the way Kaspa skips conflicting spends" | numbers, state | spec 07; ledger P13; MATCH |
| L-72 | proving | "Measured on eleven rented cards ... RTX 3060 (12 GB) 23.78 MH/s ... 8.9 GB peak in 37.5 s; RTX 4060 (8 GB) 7.4 GB in 18.4 s; RTX 4090 (24 GB) 5.6 s at 17.4 GB. The patched server ... is not yet in the shipped app" | numbers, path | file missing; none of the seven numbers in bench-log; UNSOURCED |
| L-73 | proving | "Measured on 5 October 2026 (RTX 5090, SP1 6.8.1, 30,000 proving gas, about 4.7 million prover cycles): one full shard proves in 4.3 seconds and needs 20.4 GB; floor 13.9 GB; 32 GB today (30.1 GB) and 24 GB once the adopted shard size is live (22.2 GB beside the miner, 13.2 seconds a shard)" | numbers | bench-log 1994; proving-v1.md; evidence row 16; MATCH (4.2 vs 4.3 rounding) |
| L-74 | proving | "old 12 GB gate withdrawn on 5 October; on 6 October a patched server proved the same shard at 7.4 to 8.0 GB alone on eleven rented cards" | numbers | morning 107 only; UNSOURCED (file missing) |
| L-75 | proving | "4 October 2026: RTX 5090 proved a small two-transaction block in 1.4 seconds (2.7 compressed), verified in 0.22 and 0.038 seconds; a laptop CPU proved a three-shard block end to end in 19 minutes" | numbers | bench-log 590; evidence row 15; MATCH |
| L-76 | proving | "6.75 million prover gas ... 60.8 million cycles: core proof 8.3 s, compressed 10.9 s, verified in 0.040 s; a four-shard block 44.5 s" | numbers | bench-log 857; MATCH |
| L-77 | proving | "Since 5 October 2026 shards are assigned and proven on the live devnet"; "the gate stands open"; "hash-based ... versioned interface" | state | MATCH |
| L-78 | proving | "The job market is permissionless and is Designed, not yet built"; "10% of each fee burned ... phase two"; "Boundless provers post ZKC and Succinct provers stake PROVE (approximate)"; "We know of no other proof-of-work chain selling proofs to other chains" | state, claims | spec 05 48; ledger C10 sentence; MATCH |
| L-79 | finality | GHOSTDAG, Kaspa since 2021 (approximate), rusty-kaspa; four and ten (approximate); one second vs Ethereum's twelve; two minutes vs thirteen (approximate); "Inclusion is not confirmation on either chain"; "paid at that rate, red or blue" | numbers | ledger C3, C5 sentences; node 2.1.0; MATCH |
| L-80 | finality | "Every 30 seconds of chain a checkpoint forms"; "at least 100 blocks in the last 30 days"; "two thirds of all the mining weight"; "In the chain's first 30 days no checkpoint locks at all (Implemented, the first-month gate, measured 4 and 5 October 2026)"; "12-hour finality depth"; "window two hours, first lock two hours after genesis at 77.4% from 17 vote keys (4 October 2026)" | numbers, dates | spec 03; spec 02 16; /api/live weightWindow 7200; ledger F1 sentence; MATCH |
| L-81 | finality | pull "The word sustained is the whole defence ... The right to lock history is earned." | claim | |
| L-82 | finality | "ten days ... a third ... twenty to hold two thirds. An attacker matching the honest network needs twenty days for a third and never reaches two thirds"; "same limit Bitcoin lives with, with a month's warning"; "Pools carry their hashers' votes, so vote concentration equals pool concentration, and it is public" | numbers | spec 03 25; ledger F5, F10 sentences; MATCH (model) |
| L-83 | finality | "finality pauses ... up to 30 days"; "reported as absent within two hours"; "forked more than 12 hours of median time back"; "Kaspa's one-hour merge depth"; "strips the key of its vote for 30 days" | numbers | spec 03 Q1; MATCH |
| L-84 | finality | "No stake. No coin-holder class votes ... No anchoring into Bitcoin or any other chain." | claim | CLAUDE.md decisions; MATCH |
| L-85 | building | "Anything that runs on Ethereum runs on Igneum unchanged ... a different chain id"; "one-second inclusion, finality in about two minutes" | claim | ledger overclaim 35 asks the bytecode wording; not applied |
| L-86 | building | three things no other EVM chain offers: proving primitive; light clients (consensus proof phase two); rollups settle here | claims | ledger C11 sentence |
| L-87 | building | "The first apps, a DEX and a lending market, ship at genesis"; "No bridge is official" | claim | |
| L-88 | building | "Not for speed ... Three things no L2 can offer. Keep your Ethereum deployment." | claim | copy law |
| L-89 | building | "base fee that rises with the backlog, published at the phase 4 job market" | claim | |
| L-90 | building | "20% of every priority fee ... per call frame"; "a million 100,000-gas calls a day at a 1 gwei tip pays about 7,300 IGN a year, 1 gwei as a billionth of an IGN (the base unit is Open)" | numbers | ledger P14 sentence; MATCH |
| L-91 | building | "a proof Ethereum verifies for about 250,000 gas. Igneum reads Ethereum's finality trustlessly from launch. Ethereum reads Igneum trustlessly in phase two" | number | no source; UNSOURCED |
| L-92 | building | "No stablecoin and no official bridge at genesis. Grants come from founders' mined coins"; "miner lock in about two minutes" | claims | |
| L-93 | economics | "part of every payment on Igneum is burned"; "10% burn ... phase two" | number | ledger P10 sentence |
| L-94 | economics | "Hard cap of 4 billion ... 1 billion a year, halves every two years for ever. Nearly a quarter in the first year and half in the first two. Ramps 10% to 100% over 30 days" | numbers | spec 02 118-122; /api/supply; ledger L2 sentence; MATCH |
| L-95 | economics | chart "Half of the 4 billion cap is mined in the first two years"; bars 1000 ... 31; caption "3,938M IGN in the first 12 years" | numbers | /api/supply year 12 = 3,900.5M with the ramp; ledger overclaim 76 on the caption; STALE/APPROX |
| L-96 | economics | 80% miner; 20% pool "unspendable script tagged igneum-proving-pool-v0, burned (Implemented, proving v0, since 5 October 2026). Open: the single coinbase payout that replaces the burn"; 0% treasury | numbers, state | evidence rows 20, 21; MATCH |
| L-97 | economics | base fee burned (Ethereum's rule); 80/20; 90/10 | numbers | spec 05; MATCH |
| L-98 | economics | routes 1 to 6; route 6 "1 block template in 100 ... off with one flag; Implemented, measured 4 October 2026"; rows 4, 5 Designed | numbers | bench-log dev fee; MATCH |
| L-99 | economics | "Sources: specification sections 2.5 and 5.1 to 5.4" | claim | |
| L-100 | economics | "no tail emission. The schedule is a bet, not a measurement"; Kaspa's reduction (approximate); "about 3,000 consumer cards"; "300 W card at 124 MH/s on USD 0.12 per kWh"; "under one fifth of the block subsidy over any 90-day window after year 5" | numbers | security-budget.md 54-61; ledger E6 sentence; MATCH |
| L-101 | economics | USD 0.005 to year 7, USD 500,000; USD 0.02 to year 11; USD 0.10 none in 14 years, USD 1,250,000 | numbers | security-budget.md 101; MATCH |
| L-102 | economics | "No fund, no foundation, no fee to the team"; the full list; "1 block in 100 pays the project" | claim | ledger E5 sentences; MATCH |
| L-103 | miners | streams table; "No, but the market is small today and is upside, not a promise" | claims | |
| L-104 | miners | "4 October 2026, three machines at 275 million hashes a second, a second of hashing paid about 4.9x a second of proving; at 10,000 cards ... about 930x, approximate" | numbers | ledger X14 arithmetic; bench-log 790; APPROX |
| L-105 | miners | "half a gigabyte a year"; 4 GB four years, 8 GB twelve, approximate; the 8 GB proves sentence (path); "Macs mine too, at about a fifth of a flagship card: Measured, 26.7 against 123 million, 4 October 2026"; "no CPU mining lane ... botnets" | numbers | ledger M13 sentence MATCH; path row UNSOURCED |
| L-106 | miners | "switches the card to proving for a few seconds"; "1% dev fee ... by a counter, not a random draw, exactly 1 in 100"; "--dev-fee 0" | numbers | MATCH |
| L-107 | miners | "Implemented, Ember 0.3.9 (5 October 2026): chain label reads devnet v4 ... NVIDIA capped at 80% of default power limit ... not yet measured on a card; no earnings in IGN or any currency; no hardware-wallet path. Roadmap, Designed"; "browser mining has meant malware since Coinhive" | claims | release-0.3.9.md; MATCH |
| L-108 | miners | "Launch date and miner software published a month ahead. Pools live on testnet. HiveOS support on day one. The founders mine from genesis ... disclosed addresses"; "first 30 days ... 12-hour depth" | claims | ledger F1 second sentence |
| L-109 | ember | "runs the node, mines the hourly program, proves shards and keeps your key, on Windows, macOS and Linux"; "since 4 October 2026"; "six levers set on 4 October 2026" | dates | "six levers" has no document; UNSOURCED |
| L-110 | ember | features: one click; CUDA/OpenCL/Metal; key shown once; proving switch; "8 on a large card and 2 on a small one"; manifest hourly, 3 minutes, one minute of the hour, rollback; signed remote jobs; watchdog 90 s / 60 s; dashboard token | claims, numbers | h-config.sh 11; bench-log 1214; MATCH; "3 minutes" UNSOURCED |
| L-111 | ember | Source: app/igneum-app/src, packaging/hive; "Design, not yet measured on a real card: the watchdog rules and the fault guards ... fake worker only (4 October 2026)" | state | paths on a user surface |
| L-112 | ember | lever 1: "up to 17 variants ... 2 s"; "Shipped in the Metal and CUDA workers"; "+17.3% ... +21.2%, Apple M5 Max, 14 variants, ratios only. The RTX 5090 race is built and not yet run" | numbers | bench-log 1122, 1130 (14 variants); "up to 17" UNSOURCED |
| L-113 | ember | lever 2: "Shipped. The fleet is small, so no table yet" | state | |
| L-114 | ember | lever 3: "100% to 50% in 10% steps, 60 s"; "AMD and Apple: not supported"; "The first sweep on a card is pending. The RTX 5090 drew 290 W at p95 under a 460 W cap" | numbers | miner-eff.md, ember-tune.md; MATCH |
| L-115 | ember | lever 4: "Target under 50 ms"; "In 0.3.6"; "p50 46 to 52 ms, p90 118 to 130 ms, 3-node fast-time network, CPU miners, 0 rejected" | numbers | release-0.3.6.md; MATCH; "In 0.3.6" STALE |
| L-116 | ember | lever 5: swap 0.01 / 0.00 ms; fake-worker guards trip 0.0 s, back in 2.0 s, silent worker restarted at 60 s | numbers | bench-log 644, 1199; MATCH |
| L-117 | ember | lever 6: "Live"; /miners | state, link | |
| L-118 | ember | "Levers 2 and 3 are shipped code with no fleet measurement yet" | state | |
| L-119 | ember | "1% software dev fee ... exactly 1 in 100"; "--dev-fee 0", "DEV_FEE=0"; "9 fee blocks in 785, 0 from the control" | numbers | bench-log 1226, 1252; MATCH |
| L-120 | ember | "What Ember does not claim": the race gain on NVIDIA; a measured sweep; HiveOS on a rig; a signed binary (four sentences, kept verbatim) | claims | kept |
| L-121 | wallet | "desktop wallet, macOS first ... checks finality with the node's own code" | claim | |
| L-122 | wallet | 24 words on the Ethereum path; XChaCha20-Poly1305, Argon2id (64 MiB, 3 passes); fee shown; local QR; history; BLS verified itself; MetaMask export; own node; signed OTA with rollback; "Touch ID and Windows Hello: In progress, not live. Windows build: next" | claims, numbers | app/igneum-wallet not in tree; UNSOURCED here |
| L-123 | wallet | "Igneum Wallet 0.1.1, 5 October 2026 (app/igneum-wallet). Verified: the over-the-air path end to end on one Mac. Not yet run: the Windows path, the rollback paths, a Developer ID signature" | number, date | downloads 0.1.4; STALE; path on a user surface |
| L-124 | governance | "top three vote keys held 34.5% of 8,090 blocks on 4 October 2026, measured" | number | difficulty-2026-10-04-oscillation.md; bench-log 790; MATCH |
| L-125 | governance | "at least three months ahead and activates only when 90% of blocks signal"; "60% of hashrate over two weeks" | numbers | spec 05 56, 81-83; MATCH |
| L-126 | governance | "Stratum v2 job declaration from day one ... Designed: spec section 9"; "no admin keys in consensus ... Designed, open item O-5.4. On the devnet the activation heights and one execution-state restart (6 October 2026) reach every node through the signed update manifest, so the release key acts as the operator"; "A second independent node client is the first priority after launch" | claims, date | ledger G4, G6 sentences; morning 103; MATCH |
| L-127 | roadmap | "Thirteen months ... four public gates"; "the combination is the risk the gates price" | number | ledger C6 sentence |
| L-128 | roadmap | six phases; phase 2 "So far: an RTX 5090 proves a shard in 10.9 s compressed; a CPU verifies a warp in 0.41 to 0.58 ms. A mid-range card has not been measured", gate "under 20 s ... 10 ms"; phase 3 "Live now: 1 block a second, difficulty v2, finality v2 locks, proving v0, Ember on every machine. Not yet measured on the live chain: the proof lag behind the tip", gate "proofs under 60 s behind the tip"; phase 5 gate "1,000 independent miners run 30 days"; phase 6 "No listing is arranged, promised or sought by the project" | dates, numbers | 0.41 to 0.58 is the retired v1 figure (spec 01 399): STALE; proof lag is measured (387 s): STALE; ledger X8 sentence present |
| L-129 | roadmap | "Dates slip. Gates do not. Phase two decides everything." | claim | ledger C6 sentence |
| L-130 | roadmap | "What ships next: Ember 0.3.6"; "none is on the fleet yet" | state, date | fleet on 0.3.13; STALE |
| L-131 | roadmap | items: verifier; Windows prover host (20-minute setup); tile shows verifier state; p50 46 to 52 ms; instant jobs "3 to 6 s expected, not yet measured"; testnet parameters adopted 5 October 2026 | numbers | release-0.3.6.md; STALE as "next" |
| L-132 | roadmap | "Source: the 0.3.6 release plan ... instant-jobs latency is an estimate" | claim | |
| L-133 | miners ask | "Kaspa was GPU-mined too, and IceRiver shipped a chip within two years."; "The benchmark tool ships in January 2027"; "more than 2x" | date, number | ledger M1; MATCH |
| L-134 | miners ask | "A renter with 60% of the network holds 0.0% of the vote on day one (the finality simulator, table B); a third on day 20 and never two thirds"; "median 1,018 ms behind the checkpoint"; "deepest honest reorganisation measured was 2, 3 and 7 blocks against a determination depth of 20 (ledger F7, round 2)"; "p50 343 ms and p99 666 ms (12-node cloud network, 4 October 2026)" | numbers | ledger F8; bench-log 433, 936 MATCH; "2, 3 and 7" not in the ledger: UNSOURCED |
| L-135 | miners ask | "IceRiver KS0 July 2023, 17 to 20 months; under 100 PH/s to over 700 PH/s (row 23, approximate)"; "Bitcoin's hash from two manufacturers (approximate)"; "85% of the hashrate vanished at the April 2018 fork ... over 85% again four months after the next fork (row 16)" | numbers | asic history rows 23, 16; MATCH |
| L-136 | miners ask | ETC (January 2019, August 2020), BTG (May 2018, January 2020), Vertcoin (October to December 2018, December 2019) (rows 6, 7; ETC approximate); Verge 2018 (approximate); "first 30 days ... 12-hour depth" | dates | asic history; MATCH |
| L-137 | miners ask | "Rented NVIDIA hash, 6 October 2026: 2 GH/s for USD 13 an hour; the entry lands tonight" | number | placeholder; morning 107 says USD 9 for the 11-card phase; UNSOURCED |
| L-138 | miners ask | "The devnet's hash the same afternoon: 282 MH/s; /api/stats, 6 October 2026, 16:40 UTC; 181 MH/s an hour earlier" | numbers | API now 2.66 GH/s; UNSOURCED and STALE |
| L-139 | miners ask | "0.0% (ledger M12)"; "1,018 ms median"; "A 50-miner wave against the devnet: measurement tonight" | numbers | placeholder cell; UNSOURCED |
| L-140 | miners ask | "The specification is public; reviewers will be named and paid before gate 3" | claim | ledger G1 sentence |
| L-141 | miners ask | "One founder, pseudonymous, working with AI systems ... the commit history says so"; DIFC address; "ledger is published with the repository at the public testnet"; "No cryptographer is hired yet"; "there is no team page" | claims | ledger G2, G3 sentences; /ledger is already published (the sentence is STALE) |
| L-142 | miners ask | "benchmark January 2027. Pools and the public testnet are August 2027"; #ember | dates, link | MATCH |
| L-143 | miners ask | "marginal cost close to power ... an edge over data-centre provers and nothing more" | claim | ledger P6 |
| L-144 | builders ask | "Proof of work, in 2027?"; "executes in about a second. A miner lock arrives in about two minutes" | numbers | MATCH as design |
| L-145 | builders ask | "The project will ask Circle for native USDC during the public testnet"; "DEX seeded at launch by the founders' own mined coins and by miners" | claims | |
| L-146 | builders ask | "20% of the priority fee ... small and stated as such above"; "wallet's Apps tab and the explorer from day one"; "Point Hardhat or Foundry ... The afternoon is the hard part." | claims | ledger overclaim 42 asks to delete the last sentence; not applied |
| L-147 | shoulders | "decided on 3 October 2026"; rusty-kaspa (ISC) v2.1.0; RandomX (BSD); ProgPoW/KAWPOW (approximate); LWMA; chiavdf (Apache 2.0); revm (MIT); SP1 (MIT or Apache 2.0); blst (Apache 2.0); bech32/CashAddr; BLAKE2b, BLAKE3, SHA-256, Keccak, ChaCha, SplitMix64, FNV-1a | claims | node_version 2.1.0; MATCH |
| L-148 | shoulders | "docs/provenance.md ... published at the public testnet. Licences stated from memory are marked approximate" | claim, path | path on a user surface |
| L-149 | limits | nine "does not claim" items (verbatim list below); numbers 100 to 200 GPUs; 0.92x with 3x allowance; under 1x; 1.2x; 5x to 9x; 2.1x to 4.8x; about 2x; 5.6x to 2.1x; 4.8x slower (3 October 2026); 12-hour depth; ten and twenty days; partition both sides (4 October 2026); up to 30 days | numbers | ledger P2 (100 to 200, approximate); chip-model-v3 69; evidence row 10; MATCH, APPROX |
| L-150 | limits | "subject to the gates"; "Nothing in it is an offer to sell anything"; mailto; spec issues; DIFC address | links | ledger X7 |
| L-151 | footer, pager | footer (24 rows) and the previous/next pager | links, feature | |
"What Igneum does not claim" (kept verbatim in the build, every word):
1. "A proof in seconds. Not at launch. Proving a full block today needs a cluster of 100 to 200 consumer GPUs, approximate, so Igneum launches with proofs within about a minute and tightens as hardware improves. Users still see their transaction land in one second."
2. "A chip is impossible. No. A chip is a bad bet, because the target moves before it ships." (then the model paragraph, ending "and that price is a cost model, not a measurement.")
3. "A guaranteed income floor. No. External proving is a small market today. Igneum's miners' marginal cost in it is close to power, which is an edge and nothing more."
4. "A memory-hard prototype on every vendor. Not yet. The 256 MB cache closed the shortcut on Apple silicon (computing items runs 4.8x slower than loading them, measured 3 October 2026). The same ratio on NVIDIA and on a discrete AMD card is Open."
5. "Finality in the first month. No. No checkpoint locks until the 30-day window has 30 days of history. The first month of mainnet is proof of work with a 12-hour depth, and the text above says so wherever a day count appears."
6. "A cryptography team. Not yet. One founder working with AI systems wrote the design and the code; external reviewers are named and paid before gate 3, and every security claim here is a design claim until then."
7. "Finality that no amount of hardware can break. No. A miner holding a third of the last 30 days of blocks can split finality during a network partition, and two thirds can lock a bad checkpoint for a double-spend bounded by the 12-hour finality depth. ..." (ends "(measured on a test network, 4 October 2026).")
8. "Finality that never pauses. No. A lock needs two thirds of all 30-day mining weight. Whenever less than two thirds of that weight is connected and signing, finality pauses until it returns or ages out of the window, up to 30 days. The chain keeps running on proof of work and the node reports the pause."
9. "A finished protocol. The sustained-mining finality rule is the newest piece and the one that external review will try hardest to break. The specification, the review and the benchmarks are published as they happen."
"What Ember does not claim" (kept verbatim): the race gain on NVIDIA ("Unknown until the RTX 5090 job runs ..."); a measured sweep ("has not yet run on a card"); HiveOS on a rig ("self-tested with stub binaries ..."); a signed binary ("Releases are signed by the project's release key ... the first install asks you to allow the app").
Ledger sentences on the litepaper: present verbatim for M2, M4, M7, M10 (the Measured sentence), M13, F1, F5, F10, P3, P4, P6, P7, P10, P14, E5, E6, G1, G2, G3, G4, G6, C3, C5, C6, C8, C10, C11, L2, X1, X7, X8. Differ or absent: M9 (page now says 0.61 and 2.1 ms; the ledger's 0.41 to 0.58 survives only in the roadmap), P1 (the "Target: 12 GB card proves one shard in about 20 seconds" sentence is gone; the page says the gate was withdrawn), C2 second half ("that is precedent, not proof" for "Monero is precedent, not proof"). Overclaims not yet applied: 35, 42, 51, 68, 74, 76. The ledger's own count table lists 32 rows as "not yet stated" that the page carries: the ledger's table is stale, not the page.
## Nav (site/partials/nav.html)
| id | text | kind | note |
|---|---|---|---|
| P-nav-1 | "Skip to content" | feature | #main on every page |
| P-nav-2 | IGNEUM mark | link | / |
| P-nav-3 | Menu button | feature | under 941 px; closes on link, outside tap, Escape, resize |
| P-nav-4 to 9 | Litepaper, Live devnet, Engineering log, Miner, Wallet, Evidence | links | data-nav marks the current page; Live devnet also current on /explorer, /block, /address; Miner also on /miners |
| P-nav-10 | GitHub | link | spec repo, 200 |
| P-nav-11 | "The miner" CTA | link | /miner |
No nav entry for /explorer, /ledger, /faucet, /miners, /metamask (footer only).
## Footer (site/partials/footer.html)
| id | text | kind | note |
|---|---|---|---|
| P-foot-1 | tagline | claim | |
| P-foot-2 to 8 | Read: Litepaper, What Igneum does not claim (/litepaper#limits), Igneum vs RandomX (#randomx), Built on the shoulders (#shoulders), Engineering log, Evidence, Ledger: every criticism | links | anchors exist |
| P-foot-9 to 13 | Run: The miner, The wallet, GPU bench table (/miners), The dev fee (/miner#fee), Testnet faucet | links | |
| P-foot-14 to 21 | Follow: Live devnet, Explorer, Journey (/#journey), Add Igneum to MetaMask (/wallet, no anchor), GitHub spec and vectors, Miner downloads: public testnet (/miner#get; label contradicts the not-open notice), Report a flaw mailto, spec issues | links | |
| P-foot-22 | "Igneum Labs LTD · Unit IH-00-01-01-OF-01, Level 01, Innovation One, Dubai International Financial Centre · hello@igneum.network" | claim | fud-ledger.md 154; MATCH |
| P-foot-23 | "© 2026 Igneum. Nothing on this page is an offer to sell anything." | claim | |
| P-foot-24 | "igneum.network" | text | |
## Live (site/live.html)
| id | text | kind | element, API field, states, verdict |
|---|---|---|---|
| P-live-1 | "read from a node every two seconds" | claim | poll 2,000 ms; MATCH |
| P-live-2 | "devnet v0" eyebrow | state | live chain is v4 since 4 Oct; STALE |
| P-live-3 | "Live devnet" | h1 | |
| P-live-4 | "A node is read every two seconds. Every block below is real ... A checkpoint locks when the finality rule's quorum signs it. Once the proving layer is activated, every chain block's shards show as they are planned, proven and paid." | claim | |
| P-live-5 | "Fees: the devnet meters with its prototype table until DAA score 210,000; from there the adopted table applies (300 pgas per transaction, 30,000-pgas shards, floors of 100 gwei per gas and 10,000 gwei per pgas) and the provers' program carries both." | number | fee-switch-devnet.md 3-4, 40, 52; MATCH, turns stale the moment DAA 210,000 passes (tonight) |
| P-live-6 | Status cell | API | #st-status OFFLINE/LIVE; #st-age "no observer update yet", "observer updated N ago", "observer N s behind, N queued", "api unreachable" after 3 failures |
| P-live-7 | Network | API | state.network or "igneum-devnet"; "node <version>" |
| P-live-8 | Blocks / s over 60 s | API | blocks_per_second_60s |
| P-live-9 | Blue score, blocks | API | blue_score, block_count |
| P-live-10 | Difficulty | API | difficulty |
| P-live-11 | Hash rate | API | hashes_per_second_estimate; "n/a" when null |
| P-live-12 | Identities "vote keys active in 10 min, a card runs several" | API | miners_10m; h-config.sh 11; MATCH |
| P-live-13 | Peers, mempool | API | peers, mempool |
| P-live-14 | strip stats: on screen, chain, identities, last lock, proven | API | c-locked "none", "#N, N ago", "none yet", "n/a"; c-proven "pending", "A/B in 10 min" (item 0), "not active", "no proving layer" |
| P-live-15 | DAG canvas | feature | hover, tap pins, Escape, ?window=30..300, ?perf=1; canvas words listed in the audit's state table |
| P-live-16 | legend blocks: chain, included paid, pending, excluded, just arrived, selected chain, one lane per miner | feature | |
| P-live-17 | legend finality: final, locked, proposed, "reads paused whenever under two thirds of the weight is signing" | claim | spec floor; MATCH |
| P-live-18 | legend proving: planned, proving, verified, paid, where proofs land | feature | |
| P-live-19 | Miners table (last 10 min): Miner, Blocks, Share, Last seen, Engine | API | d.miners; empty "No blocks in the last 10 minutes."; "not reported" |
| P-live-20 | "The short id is the first 8 hex characters of the vote key hash ... the devnet miner writes nothing yet." | claim | api/explorer.mjs 21; MATCH |
| P-live-21 | Events newest first | API | d.events; empty "No events yet." |
| P-live-22 | Blocks per minute chart and note | API | blocks_per_minute; "no data yet" |
## Miners (site/miners.html, generated by build.mjs from miner-bench.json and miner-priors.json)
| id | text | kind | verdict |
|---|---|---|---|
| P-miners-1 | "3 entries, newest at the bottom" | number | the bench template's words; wrong for this page |
| P-miners-2 | "GPU bench table" | h1 | |
| P-miners-3 | note "Measured hash rates per card ..." | claim | |
| P-miners-4 | contents: The table, How a row gets here, Fleet tuning priors | feature | |
| P-miners-5 | "Integrated GPUs are not listed. Prototype rows say so in the miner column." | claim | |
| P-miners-6 | Apple M5 Max v1 45.2 MH/s, 2026-10-03 | number | evidence row 3; MATCH |
| P-miners-7 | Apple M5 Max v2 26.7, 2026-10-04 | number | bench-log 642; MATCH |
| P-miners-8 | Apple silicon laptop v2 24.3, 21.0 average over 7 min, 33 blocks | number | bench-log 911; MATCH |
| P-miners-9 | RTX 5090 v1 229, 2026-10-03 | number | evidence row 3; MATCH |
| P-miners-10 | RTX 5090 v1 185.3 | number | bench-log 98; MATCH |
| P-miners-11 | RTX 5090 v2 124.2, 2026-10-04 | number | evidence rows 4, 30; MATCH |
| P-miners-12 | "MH per watt: not measured" on all rows | state | ledger E17 has the 5090 at 326.6 W (0.40 Mhash/J); eleven rented cards with watts on gpu-fleet; STALE |
| P-miners-13 | "The app reads it on NVIDIA cards through the driver." | claim | |
| P-miners-14 | "There is no other Igneum miner to compare with yet" | claim | |
| P-miners-15 | "Rows: 6. Source file: site/miner-bench.json in the repository." | dev text | |
| P-miners-16 | priors: "within 1% of its top rate", "A model needs 5 reports" | number | ember-tune.md; miner-priors.json; MATCH |
| P-miners-17 | "No tune reports yet. The first rows appear once five machines with the same card model have reported." | empty state | |
| P-miners-18 | "Rows: 0. Source file: site/miner-priors.json, written from the fleet records by tools/tuning.mjs --priors --site." | dev text | |
| P-miners-19 | "Generated from the repository at build time. Times are UTC. Machine names are model names." | claim | |
## Miner (site/miner.html; copy owned by the site-miner agent today)
| id | text | kind | verdict |
|---|---|---|---|
| P-miner-1 | meta "every NVIDIA card from 8 GB proves ... a visible 1% software fee" | claim | see P-miner-12 |
| P-miner-2 | "Igneum Ember · one click" | eyebrow | |
| P-miner-3 | h1 "Install. Start. The card mines. Every NVIDIA card from 8 GB proves; 12 GB and up mine and prove." | claim | 96 characters |
| P-miner-4 | lead: finds your GPU, makes a wallet, compiles the next program while the current one mines | claim | |
| P-miner-5, 6 | "Downloads: public testnet" #get; "Every feature" #features | links | |
| P-miner-7 | Windows, macOS, Linux, HiveOS, "NVIDIA · AMD · Apple silicon" | claim | |
| P-miner-8 | screenshot caption "the app is still labelled Igneum Miner until 0.3.6 ... 5 Oct 2026" | date | STALE (0.3.13 still says Igneum Miner) |
| P-miner-9 | "Hash, prove, get paid": 80% of each block to the finder; PROVE; GET PAID | claim, number | /api/stats split; MATCH |
| P-miner-10 | "Every feature, one line each"; "Each number links to its engineering log entry." | claim | not true for P-miner-12, 27, 45 |
| P-miner-11 | "Five steps: drag to Applications, open, Get started, Make me an address, Start mining." | claim | bench-log 908 (Open Anyway step); APPROX |
| P-miner-12 | "every NVIDIA card from 8 GB proves; 12 GB and up mine and prove; 24 GB on the stock server (eleven rented cards, 6 October 2026, docs/analysis/prover-tiers-real-cards.md); the patched server is not yet in the shipped app." | claim, path | file missing; no bench-log entry; contradicts /evidence row 16; UNSOURCED |
| P-miner-13 | "Finds your GPU by itself ... NVIDIA through the driver, AMD and Intel through OpenCL, Apple silicon through Metal" | claim | |
| P-miner-14 to 17 | wallet made for you; earnings in IGN; three OSes; HiveOS package "Hive itself is untested" | claims | |
| P-miner-18 | "First outside machine ... 33 accepted blocks in 7 minutes, 0 rejected, 21.0 MH/s average" (log, 4 Oct) | number | bench-log 911; MATCH |
| P-miner-19 | "First card on the app ... 117 to 119 MH/s, 34 accepted blocks in the first minute" | number | bench-log 781; MATCH |
| P-miner-20 | h3 "Hashing and proving, switched by the client" | heading | 43 characters |
| P-miner-21 | "assigned, proving, submitted, paid" | claim | |
| P-miner-22 | "8 suits a big card, 2 a small one, 1 an integrated GPU" | number | h-config.sh 11 (8 from 8 GB else 2); "1" APPROX |
| P-miner-23 | "Hourly program, no pause" | claim | |
| P-miner-24 | swap table 4 Oct 2026: M5 Max 82 ms, 0.01 ms, 26.7/26.7, 0; RTX 5090 1,285 ms, 0.00 ms, 121.8/123.4, 0; AMD integrated no restart, 2.74/2.74, 0; "epoch boundary at DAA 3,600" | numbers | bench-log 636, 642-644; MATCH |
| P-miner-25 | h3 "Signed, over the air, at a safe moment" | heading | 38 characters |
| P-miner-26 | "Signed over the air ... Ed25519" | claim | |
| P-miner-27 | "Installed at a safe moment: node synced, no hourly boundary within 3 minutes, no worker starting ... never while the network lost over 30% of its identities in 10 minutes." | number | UNSOURCED |
| P-miner-28 | "Mining continues through an update ... fails to start twice, the previous one comes back" | claim | |
| P-miner-29 | "Urgent ... within 1,800 blocks or below the minimum supported" | number | difficulty-v2-rollout-devnet.md 42; MATCH |
| P-miner-30 | "The fleet tunes itself. Nothing here changes the hash." | claim | |
| P-miner-31 | "Variant racing every hour ... 2 seconds" | number | bench-log 1103; MATCH |
| P-miner-32 | "256-thread groups ran 17.3% and 21.2% faster ... The NVIDIA race has not yet run on a GPU." | number | bench-log 1130; MATCH |
| P-miner-33 | "Fleet tuning manifest" | claim | |
| P-miner-34 | "Ember Tune ... 60 seconds a step ... within 1% ... the first measured tune is owed." | number | ember-tune.md 42 (75 s per step); APPROX |
| P-miner-35 | "Latency work ... In progress, no number published yet." | claim | |
| P-miner-36 | "Remote signed jobs, opt in ... Our own fleet only" | claim | |
| P-miner-37 | h3 "Watchdog, restart, clock" | heading | |
| P-miner-38 | "Watchdog per card: no status line for 90 seconds, or a hash rate of 0 for 60 seconds" | number | bench-log 1214-1219; MATCH |
| P-miner-39 | "Watchdog per node: 120 seconds ... silent node to mining again in 160.0 s" | number | MATCH |
| P-miner-40 | "Restart in order" | claim | |
| P-miner-41 | "A clock 60 seconds slow kept a node silently dead for 12 minutes ... over 5 s a warning, over 10 s Start is blocked" | number | bench-log 780; evidence row 30 says 62 s; APPROX |
| P-miner-42 | recoveries table 4 Oct 2026: 91.0 s, 75.4 s to faulted, 101.4 s, 160.0 s; "a fake worker, no real GPU" | number | bench-log 1214-1219 (101.4 is a sum); MATCH |
| P-miner-43 | "The log and the bench table. Every number on this page has a row." | claim | not true, see above |
| P-miner-44 | Engineering log /bench; GPU bench table /miners; "Your rows, from your machine ... once a minute under a per-install id" | link, claim | |
| P-miner-45 | "Why Igneum Ember stays ahead. Six levers, set on 4 October 2026." | number, date | no document lists six; UNSOURCED |
| P-miner-46 | lever 1: "five to ten kernel variants ... two seconds each ... +17.3% ... +21.2%" | number | bench-log 1101 (no count); APPROX |
| P-miner-47 | lever 2: "Shipped. The fleet is still small, so no fleet table yet" /miners#priors | state, link | |
| P-miner-48 | lever 3: NVIDIA and AMD built, measured only on Apple | claim | |
| P-miner-49 | lever 4: "within 50 ms ... Approximate, from the 0.3.6 release plan: p50 46 to 52 ms, 5 Oct 2026. Ships in 0.3.6." | number | release-0.3.6.md 73; "Ships in 0.3.6" STALE |
| P-miner-50 | lever 5: swap 0.01 / 0.00 ms, 0 rejected | number | MATCH |
| P-miner-51 | lever 6: "Live at /miners" | link | |
| P-miner-52 | "The dev fee is the software's 1% ... The protocol carries no fee." #fee | claim | |
| P-miner-53 | "The fee, in full view; no dev fund, no fee to any team, foundation or fund" | claim | |
| P-miner-54 | "1% dev fee ... one block template in 100 ... Igneum Labs LTD ... a template counter, never a random draw" | number | MATCH |
| P-miner-55 | off table: Settings switch, --dev-fee 0, DEV_FEE=0 | feature | |
| P-miner-56 | "Measured on a test network, 4 Oct 2026: 9 fee blocks in 785 (1.146%); the control paid none" | number | bench-log 1226, 1252; MATCH |
| P-miner-57 | switch mock "Dev fee 1% (1 block in 100)" | feature | |
| P-miner-58 | start lines; "igneum-miner payouts lists blocks per payout address" | dev text | |
| P-miner-59 | "Get the miner. Download only from this domain. Nobody from Igneum will ask for your seed." | claim | |
| P-miner-60 | "Public testnet: not yet open; the devnet build is here for people who want to look." | state | ledger X2 |
| P-miner-61 | "Devnet: coins have no value and the chain may be reset." | claim | |
| P-miner-62 | Windows, macOS, Linux, HiveOS buttons "v0.3.13 · 45.4 / 41.9 / 24.6 / 24.6 MB" | number | host 0.3.14; STALE (repo copy) |
| P-miner-63 | Hive Flight Sheet: URL igneum-hive-0.3.13.tar.gz (404), miner igneum, wallet 0x<40 hex>.%WORKER_NAME%, pool grpc://<your node>:26610 or local, extra DEV_FEE=1 IDENTITIES=8 WORKER=auto VOTE=1, sha256 65ea4260... | number, dev text | URL 404, hash of a dead file; port 26610 fork-divergence.md 17 MATCH |
| P-miner-64 | "the faucet sends 10 IGN per address per day. Any 4 GB card at launch. The dataset starts at 2 GB and grows (2 GB, doubling at years 4, 12 and 28), so a 4 GB card mines for about four years, approximate." | number | api/faucet.mjs 8-9; evidence row 31; MATCH, APPROX |
| P-miner-65 | "Read more in the litepaper" /litepaper#miners | link | exists |
| P-miner-66 | band "Every number here has a row." + Engineering log, Bench table | claim, link | |
## Wallet (site/wallet.html; content owned by the wallet-ui-3 agent today)
| id | text | kind | verdict |
|---|---|---|---|
| P-wallet-1 | meta "24 words sealed ... MetaMask export. Reads your own node when the miner is installed." | claim | |
| P-wallet-2 | "Igneum Wallet · desktop" | eyebrow | |
| P-wallet-3 | h1 "Your coins. Final means final." | heading | aphorism; 30 characters |
| P-wallet-4 | lead "verifies every finality certificate itself with the node's own code. No confirmation counts, no trusting the node." | claim | antithesis |
| P-wallet-5 | "Download: public testnet" #get; "How final works" #finality | links | |
| P-wallet-6 | "macOS first", "Windows next", "MetaMask export" | state | |
| P-wallet-7 | screenshot "Igneum Wallet on a private test network, 5 Oct 2026. The address is an example." | date | |
| P-wallet-8 | "Three states, checked here": pending; "Chain block 8"; "final · cp 5 ... 30-second checkpoint ... aggregate BLS signature, two thirds of all weight" | claim, number | explorer.md 43; evidence row 10; MATCH |
| P-wallet-9 | second screenshot "1.5 IGN, final under checkpoint 5, certificate verified by the wallet" | number | |
| P-wallet-10 | four checks before "final" | claim | |
| P-wallet-11 | "The same steps the browser verifier on the home page runs ... The node's own 'locked' field is never read." | claim | |
| P-wallet-12 | "Every feature, one line each. Version 1, built on the miner's bones" | claim | |
| P-wallet-13 | h3 "Create or import, sealed on your disk" | heading | 37 characters |
| P-wallet-14 | "Create: 24 words ... 256 bits ... three typed back" | number | UNSOURCED in repo (wallet source elsewhere) |
| P-wallet-15 | "Import ... the miner's own payout key file" | claim | |
| P-wallet-16 | "Argon2id (64 MiB, 3 passes) ... XChaCha20-Poly1305 ... one file in your user folder" | number | UNSOURCED in repo |
| P-wallet-17 | "BIP-39 and BIP-44 at the Ethereum path" | claim | |
| P-wallet-18 | "Signing happens in the engine, in Rust." | claim | |
| P-wallet-19 | Balance; Send (EIP-1559, zero address and over-balance refused); Receive QR (SVG); History with rewards; Finality per transaction; Lock | claims | |
| P-wallet-20 | "Reads the miner's node first": 1 miner app's node, 2 public RPC, 3 bundled node; "Updates, signed ... Ed25519 ... checked an hour apart" | claim | evidence row 23; MATCH |
| P-wallet-21 | MetaMask: Add to MetaMask, Export the key, "Desktop first: macOS now, as a disk image. The Windows host is written and untested. No browser extension and no phone app yet." | claim, state | |
| P-wallet-22 | "The first run, timed. A private test network, 5 Oct 2026 ... The log entry ships with the wallet." | date, claim | |
| P-wallet-23 | table: 0.3 s; 0.4 to 0.5 s "word 1 is not right"; 3.5 s "10.14 IGN at block 4"; 4.5 s; 4.6 s "gas 25,380; base fee 1 gwei; tip 1 gwei; fee at most 0.00007614 IGN"; 5.6 s chain block 8; about 170 s index 5; 175.2 s "1 of 1 voters, 100% of total weight"; 175 s | numbers | not in docs or /bench; UNSOURCED in repo |
| P-wallet-24 | "Send to final: 170.6 s ... On the live devnet checkpoints lock every 30 seconds once the weight window is full. 13 unit tests cover ..." | number | UNSOURCED in repo |
| P-wallet-25, 26 | "Get the wallet. Download only from this domain ..."; the two notices | claim, state | |
| P-wallet-27 | macOS "v0.1.4 · 19.6 MB"; Windows "next" disabled; MetaMask #metamask | number, feature | host 0.1.4, 19,607,181 bytes; MATCH |
| P-wallet-28 | "reads this machine's node when the miner is installed" /miner; "Read more in the litepaper" /litepaper#miners | link | |
| P-wallet-29 | band "The miner pays this wallet." + The miner | claim, link | aphorism |
## Bench (site/bench.html, generated from docs/bench-log.md through site/scrub.mjs)
| id | text | kind | verdict |
|---|---|---|---|
| P-bench-1 | "83 entries, newest at the bottom" | number | 83 h2 in markdown, 83 on the page; MATCH |
| P-bench-2 | h1 "Engineering log" | heading | the markdown's own h1 is rendered and hidden by CSS |
| P-bench-3 | note "Every measurement the project has made, newest at the bottom, written by the people and agents who ran it, with the commands and hardware. Prototype numbers are not mining numbers and say so." | claim | |
| P-bench-4 | contents, 83 links | feature | TOC text keeps raw backticks; some headings over 150 characters |
| P-bench-5 | "Generated from the repository at build time. Times are UTC. Machine names are model names." | claim | |
Heading comparison: every difference is a scrub rename ("Mac" to "Apple M5 Max" 9 times, "Windows PC" to "an RTX 5090 on Windows", "Hetzner" to "the cloud provider"); 18 h3 both sides; the newest 6 Oct entry is present. Rendered headings keep commit hashes and internal names (6c75dad, b970dda, revm, viem, SP1, PC 1, PC 2, DAA 33,000) by design of the generator.
## Evidence (site/evidence.html, rows generated from docs/evidence.md)
| id | text | kind | verdict |
|---|---|---|---|
| P-evid-1 | meta "Nothing has been reproduced or reviewed yet." | claim | |
| P-evid-2 | "31 claims · 5 labels · 6 Oct 2026" | number, date | 31 rows; the date is the build date and says so |
| P-evid-3 | h1 "Evidence" | heading | |
| P-evid-4 | the five label definitions; "Nothing on this chain has been reproduced externally or reviewed independently; every row says so"; "The 12-node cloud network of 4 October 2026 is the project's own" | claim | 70-word sentence |
| P-evid-5 | tiles designed 6, implemented 3, tested by the team 22, reproduced externally 0, reviewed independently 0; "None yet. The repository is private until the public testnet"; funding plan | number | evidence.md's own count table says 5 designed and sums to 30; the page buckets row 17 as designed |
| P-evid-6 | filter chips 31, 6, 3, 22, 0, 0 | feature | |
| P-evid-7 | "The table is wider than this screen. Scroll it sideways." | feature | under 1,140 px |
| P-evid-8 | columns #, Claim, Status, Version or commit, Reproducible test, Result date machine, Independent verification; sortable | feature | |
| P-evid-9 | 31 rows | generated | every row ends "none yet"; scrub artefacts "the Apple M5 Max M5 Max" (row 1), "a an RTX 5090 on Windows with an RTX 5090" (row 30) |
| P-evid-10 | note "Click a column heading to sort ... igneum-pow is the Rust crate at version 0.2.0 ... Source of every number: the engineering log. The source of this page is docs/evidence.md" | claim, path | |
| P-evid-11 | "What would move a row" table; "Funding for review is docs/plans/funding.md" | claim, path | mirrors evidence.md 94-101 |
| P-evid-12 | "Statuses are honest as of 6 October 2026, the day this page was generated from docs/evidence.md" | date, path | |
Markdown headings not rendered: "What moved on 4 October 2026", "What moved on 5 October 2026" (two tables not shown anywhere on the site).
## Ledger (site/ledger.html, generated by tools/ledger-page.mjs from docs/fud-ledger.md)
| id | text | kind | verdict |
|---|---|---|---|
| P-ledger-1 | meta "167 entries. Nothing deleted, nothing softened." | number, claim | antithesis |
| P-ledger-2 | "Ledger · 167 entries · regenerated from the repository" | number | 167 ids both sides; MATCH |
| P-ledger-3 | h1 "Every criticism, answered or conceded" | heading | 37 characters |
| P-ledger-4 | intro: "167 entries since 3 October 2026 ... The founder mined through the GPU years. Ethereum's move to proof of stake in September 2022 ended that income ... one person building, with AI systems doing the engineering ... This ledger is the application form" + mailto | claim | |
| P-ledger-5 | counts Open 7, Conceded 53, Fixed or built 54, Closed by rule or decided 27, Answered with evidence 13, Answered by design 13, All 167; section links | number, feature | md table (17:30 UTC): Fixed 57, Conceded 53, Answered 28, Decided 29, Open 7; the page buckets on the status's first word |
| P-ledger-6 | search "Search the ledger", "N of 167 shown" | feature | |
| P-ledger-7 | 167 cards: id, title, date, quote, status, "The answer as first written" | generated | the renderer drops 165 "Evidence:" lines and the "Decision owner:" lines; 40 section h2 with duplicate ids (anchors land on the first) |
| P-ledger-8 | "Source: docs/fud-ledger.md in the repository, rendered by tools/ledger-page.mjs ... hello@igneum.network or an issue on the specification repository." | path, link | |
Left on the public page by the ledger's own scrub list: "PC 2" 15 times, "the Mac" 19 times, `~/.config/igneum` 5 times, "pid 33114", `--rpclisten=0.0.0.0:26610`. The ledger renderer skips the forbidden-strings hard stop.
## Explorer (site/explorer.html)
| id | text | kind | element, states, verdict |
|---|---|---|---|
| P-expl-1 | "devnet, last 24 hours" | claim | api/explorer.mjs 87 keeps one day; MATCH |
| P-expl-2 | h1 "Explorer" | heading | |
| P-expl-3 | "Every block the devnet made in the last day, read from a node by the observer. Paste a block hash, a transaction hash, a chain block number or an address." | claim | |
| P-expl-4 | search form, placeholder | feature | |
| P-expl-5 | #msg | state | "Not a block hash, a transaction hash, a chain block number or an address." / "Looking." / API error or "Not found." / "The API did not answer." |
| P-expl-6 | Status | API | OFFLINE/LIVE; "no observer update yet", "last update N ago", "<network>, node <version>" |
| P-expl-7 | Height; "chain block number, N blocks in the DAG" | API | height or "n/a" |
| P-expl-8 | DAA score; blue score | API | |
| P-expl-9 | Difficulty; "target 1 s per block" or "N s per block over 60 s" | API | "n/a" when null |
| P-expl-10 | Hash rate | API | "n/a" when null |
| P-expl-11 | Block reward IGN; split | API | |
| P-expl-12 | Circulating; "of 4,000,000,000 by the rule" | API | MATCH |
| P-expl-13 | Next halving; ramp | API | |
| P-expl-14 | "Latest blocks", "newest first, every 5 s" or "observer offline, last known" | API | setInterval 5,000; MATCH |
| P-expl-15 | table Block, Number, DAA, Blue score, Miner, Txs, Proof records, Time | API | "Loading."; empty "No blocks in the last 24 hours."; "off chain"; "n/a"; "★" locked |
| P-expl-16 | legend chain block, blue merged and paid, red excluded, pending, ★ locked checkpoint | feature | |
| P-expl-17 | note "Number is the chain block number, the same number the EVM reports ... Miner is the payout address the coinbase names. Proof records is how many shard proofs the block carries for earlier blocks." | claim | |
| P-expl-18 | "Older blocks" | feature | loads 50 more; the 5 s refresh stops for good after the first click |
| P-expl-19 | "Public API, JSON, cached 10 s" | claim | stats and supply 10 s, explorer 5 s; APPROX |
| P-expl-20 | /api/stats field list | link | MATCH |
| P-expl-21 | /api/supply "circulating, cap, halving table, 30-day ramp, the observer's coinbase check" | link | no `check` field in today's payload; UNSOURCED today |
| P-expl-22 | /api/explorer?blocks=20 and its parameters | link | MATCH |
| P-expl-23 | note "Reward and supply come from the emission rule (section 2.5) ... the observer checks the chain's coinbase sums against it every hour and the result is in /api/supply under check." | claim | see P-expl-21 |
Bad query: empty or unrecognised text shows the "Not a block hash ..." sentence; an address redirects to /address/<value> unchecked; a hash or number asks the API and shows its 404 text; network failure "The API did not answer."
## Block (site/block.html)
| id | text | kind | verdict |
|---|---|---|---|
| P-block-1 | noindex; "Explorer · block" | link | |
| P-block-2 | h1 "Block" then the hash, or "Chain block N" | API | |
| P-block-3 | chips: chain block or colour; "checkpoint N, <state>"; "N proof records"; "N transactions" | API | |
| P-block-4 | #msg API error, "Not found.", "The API did not answer: <message>" | state | |
| P-block-5 | summary: Number or "none, not a chain block"; Time; DAA; Blue score; Miner or "n/a"; Coinbase address; Vote key id and hash ("n/a"); Engine; Difficulty or "n/a"; "Declared subsidy N IGN E(DAA) of spec 2.5, paid when a later chain block merges this one" or "n/a"; "Coinbase paid N IGN"; Merged by "itself" / link / "not yet"; Selected parent or "n/a" | API | /api/stats source; MATCH |
| P-block-6 | header: Hash, Version, Bits, Nonce, Blue work, merkle roots, UTXO commitment, Pruning point, Parent levels | API | raw header fields, an explorer's job |
| P-block-7 | Parents "N at level 0" or "Genesis has no parents."; Children "seen within 10 min" or "No child seen yet." | API | |
| P-block-8 | Mergeset or "Empty."; note on red blocks | claim | |
| P-block-9 | Transactions "N EVM, 1 coinbase"; coinbase outputs "proving pool (burns on the UTXO side, credited on the EVM side)"; "N proof records, a key reveal, certificate N"; tx table ("needs an EVM RPC"); "No EVM transactions in this block." | API | |
| P-block-10 | Proof records: "N shards planned for this chain block" / "not a chain block"; "carries N proof records for earlier chain blocks (274 bytes each, in the coinbase extra data)"; shard table; "No shard plan recorded (the proving feed was not reading this block)." | API, number | spec 07 112; MATCH |
| P-block-11 | Finality: "checkpoint N" / "carries a certificate" / "not a checkpoint"; State, Signed weight "N of N (X% of all weight, X% of active)", Votes, Locked; "Verify: /api/checkpoint serves the newest certificate"; "Checkpoints are every 30 blue score; a lock needs two thirds of all 30-day weight." | API, claim | explorer.md 43; MATCH |
Bad query: /block with no id asks ?block=block, the API answers 400 "A block hash is 64 hex characters."; unknown hash: 404 "No block with that hash in the last 24 hours. The explorer keeps one day; older blocks live in the node."; unknown number: "No chain block numbered N in the last 24 hours."
## Address (site/address.html)
| id | text | kind | verdict |
|---|---|---|---|
| P-addr-1 | noindex; "Explorer · address"; h1 the address | API | |
| P-addr-2 | chips "EVM payout address" / "coinbase address"; "mining now" | API | |
| P-addr-3 | #msg | state | |
| P-addr-4 | Balance "n/a" then IGN or "n/a"; sub-line default "eth_getBalance", then source or reason ("no EVM RPC configured on this deployment (EXPLORER_EVM_RPC)") | API | today every address shows "n/a" and the env-var sentence |
| P-addr-5 | "Blocks, 24 h"; "N in 10 min, N blue, N red, N on the chain" | API | |
| P-addr-6 | "Earned, 24 h" IGN; "80% of each blue block's subsidy" | API, claim | MATCH |
| P-addr-7 | "Last block" "n/a" then relative or "none in 24 h"; "first in the window N ago" | API | |
| P-addr-8 | identity: EVM address or "none seen"; coinbase address; vote keys or "none"; earned; note "A miner names its EVM payout address in every coinbase (the IGNA tag) ... a card runs several." | API, claim | |
| P-addr-9 | "Blocks mined, newest 50 of the last 24 hours"; table; "off chain"; "n/a"; empty "No blocks from this address in the last 24 hours." | API | |
Bad query: /address with no address sends ?address=address, the API answers 400 "An address is 0x plus 40 hex characters, or an igneum bech32 address."; an unseen well-formed address returns zeros with no distinct "never seen" sentence.
## Faucet (site/faucet.html)
| id | text | kind | verdict |
|---|---|---|---|
| P-fauc-1 | title "Igneum testnet faucet. 10 IGN a day for testing"; meta | number | api/faucet.mjs 8-9; MATCH |
| P-fauc-2 | "Testnet faucet"; h1 "10 IGN a day, for testing." | number | |
| P-fauc-3 | "Paste an address. The faucet sends 10 testnet IGN and shows the transaction hash. Once per address per day, once per connection per day. No account, no sign-in." | claim | |
| P-fauc-4 | "Public testnet: not yet open. The faucet is prepared on the devnet and answers 'not open yet' until the testnet starts." | state | API text "The faucet is not open yet. It opens with the public testnet."; APPROX |
| P-fauc-5 | "Ask for 10 IGN. An Ethereum-style address: 0x and 40 hex characters." | claim | |
| P-fauc-6 | form; "Send 10 IGN"; #status words: "That is not an address ...", "Sending…", "Sent 10 IGN. Transaction <hash>. It is in a block within a few seconds.", API error or "The faucet answered N.", "The faucet did not answer. Try again in a minute." | feature | |
| P-fauc-7 | rules 01 to 04: no value, "Mainnet starts from an empty genesis"; 10 IGN per address per day, resets 24 h after the last grant; resets at a consensus change; stored: address, IP, tx hash, time, 24 hours | claim, number | faucet.mjs 73, 77, 78; MATCH; "Mainnet starts from an empty genesis" APPROX (plan) |
| P-fauc-8 | "Chain id 4462 (testnet), 4463 (devnet)"; MetaMask /metamask; Get the miner /miner#get | number, link | spec 07 20; MATCH |
## MetaMask (site/metamask.html; canonical set to /wallet)
| id | text | kind | verdict |
|---|---|---|---|
| P-mm-1 | "Wallets · chain id · RPC"; h1 "Add Igneum to MetaMask" | heading | |
| P-mm-2 | note: EVM, chain id, RPC, symbol IGN, 18 decimals, wallet_addEthereumChain; "Nobody from Igneum will ask for your seed." | claim | |
| P-mm-3 | Testnet card: Igneum Testnet; 4462 (0x116e); rpc.testnet.igneum.network (published with the testnet); IGN; 18; button disabled; "switches on when the public RPC is live" | number, state | spec 07 20; MATCH as placeholder |
| P-mm-4 | Devnet card: Igneum Devnet (local node); 4463 (0x116f); http://127.0.0.1:26790; "Explorer: none yet" | number, state | bench-log 284 port MATCH; "none yet" STALE (/explorer is live) |
| P-mm-5 | button states: no wallet found; waiting; added; cancelled; refused | feature | |
| P-mm-6 | "Add it by hand", four steps | claim | |
| P-mm-7 | "For builders" code block; EIP-155, EIP-1559, legacy; eth_gasPrice, eth_estimateGas; /litepaper#builders-ask | claim, link | exists |
| P-mm-8 | "The app and the Igneum Wallet": "The Igneum Miner app makes an address ... An Igneum Wallet ... is in the roadmap; until it ships, MetaMask is the wallet." | claim | STALE (wallet 0.1.4 ships; the app is Ember) |
| P-mm-9 | "10 IGN per address per day. Chain ids 4461 (mainnet), 4462 (testnet), 4463 (devnet) fixed in the node. The testnet RPC URL above is a placeholder" | number, claim | spec 07 20, 60; MATCH |
## 404 (site/404.html)
| id | text | kind | verdict |
|---|---|---|---|
| P-404-1 | title "Page not found. Igneum"; noindex | | |
| P-404-2 | "404"; h1 "Nothing is mined here." | heading | aphorism |
| P-404-3 | "That address is not on igneum.network. It may have moved, or the link had a typo. These four pages are everything the site has." | claim | STALE: fifteen pages |
| P-404-4 | "Litepaper: How the chain works, in 17 sections" | number | 19 sections; STALE |
| P-404-5 to 7 | Live devnet; Engineering log; Evidence | links | no miner, wallet, explorer or ledger card |
## Scrub rules (site/scrub.mjs, site/forbidden-strings.txt), applied to bench, miners and the evidence rows
| rule | what changes | why |
|---|---|---|
| scrub 12-17 | PC and Windows PC wording becomes RTX 5090 wording | machine names become model names |
| 18-20 | the Mac becomes Apple M5 Max | same |
| 21-22 | the project lead becomes the maintainers | identity |
| 23 | " Not deployed to Vercel tonight." removed | host name |
| 25-27 | private IPs and DESKTOP- hostnames become placeholders | private addresses |
| 28-30 | igneum-seed-N, Hetzner, hcloud become generic words | provider names |
| 31-33 | server paths and dl.igneum.network become placeholders | server paths |
| 34-35 | intake ids removed | upload identifiers |
| 36-39 | home paths become ~ and %USERPROFILE% | user names |
| 41-43 | docs/fud-ledger.md becomes "the break ledger (kept by the maintainers, not yet published)"; CLAUDE.md becomes "the design document" | the ledger is now published at /ledger: this rewrite is STALE |
| 45-50 | BST times to UTC | the log is written in UTC+1 |
| forbidden-strings 1-25 | build fails on any survivor (hostnames, private IPs, BST, home paths, intake, Tailscale, the project lead, Hetzner, seed names, server paths, dl host, CLAUDE.md, hcloud) | hard stop |
Side effects today: "the Apple M5 Max M5 Max" (evidence row 1), "a an RTX 5090 on Windows with an RTX 5090" (evidence row 30), "the 12-node the cloud provider network" (journey log). The ledger page uses its own list and skips the hard stop.

215
docs/plans/site-ui-3.md Normal file
View file

@ -0,0 +1,215 @@
# Site UI 3: the website and litepaper through the miner app's lens
6 October 2026. Branch `site-ui-3`. The audit is `docs/plans/site-ui-3-audit.md`; this is the design the build follows.
The standard is the miner app's third redesign (`docs/plans/miner-ui-3.md` on branch `miner-ui-3`): one job per screen,
one primary control, hierarchy by type not boxes, no developer text on a user surface, no n/a cells, plain state words with
reasons, light and dark, phone width, nothing lost.
## 1. What changes and what does not
| Stays | Changes |
|---|---|
| Every claim, number, date, link and feature in the audit's tick list (appendix A of the audit) | Fifteen pages each carrying their own `<style>` become one shared stylesheet, `site/site.css`, plus a short per-page block |
| The ledger's statuses and stated sentences, verbatim (`docs/fud-ledger.md`) | Copy edited to the copy law where it is not a ledger sentence or a measured figure |
| The live pages read `/api/live`, `/api/stats`, `/api/supply`, `/api/explorer` | The two canvas scenes (home, live) become one module, `site/live-dag.js`, a real DAG view |
| The nav's pages and the footer's links | Nav and footer rebuilt once in `site/partials/`, same links, one visual system |
| Dark by default | Light mode on every page (today only the litepaper has one, and it is light by default: inverted against the rest of the site) |
## 2. The design system (`site/site.css`)
One file, loaded by every page from the head partial. Tokens first, then type, then the six components every page shares
(nav, footer, card, tile, table, button), then the state words. Page blocks stay under 60 lines each.
### 2.1 Colour tokens
The app's set (`app/igneum-app/ui/app.css` on `miner-ui-3`, lines 19-33), with two site additions for text accents in
light mode, because the app's light ember and molten fail 4.5:1 as body text (measured in the audit, section 6).
| Token | Dark | Light | Use |
|---|---|---|---|
| `--obsidian` | #0C0C0E | #F4F1EC | page |
| `--graphite` | #16161A | #FFFFFF | card |
| `--row` | #111114 | #FAF8F5 | row, table stripe, code |
| `--line` | #2A2A30 | #E2DED8 | every hairline |
| `--line-2` | #3A3A42 | #CFCAC2 | hover, open, input borders |
| `--ember` | #F2541B | #D0420D | the one primary fill per page, the live dot, the lock ring (white text on it: 4.7:1) |
| `--ember-hi` | #FF6A2B | #E04A14 | primary hover |
| `--ember-text` | #F2541B | #B8390C | ember as text and as a link (5.1:1 on the light page) |
| `--molten` | #FFB35C | #B8731F | the proving fill, the active pill |
| `--molten-text` | #FFB35C | #8F5810 | molten as text (5.2:1 on the light page) |
| `--bone` | #F4F1EC | #16161A | ink |
| `--ink-2` | #C9C7C2 | #3C3C42 | body on cards |
| `--ash` | #9A9A9E | #6B6B70 | labels, notes, units |
| `--ember-ink` | #0C0C0E | #FFFFFF | text on an ember fill |
| `--ok` | #FFB35C | #B8731F | a verified tick |
| `--scrim` | rgba(12,12,14,.72) | rgba(244,241,236,.72) | menu scrim |
| `--top-bg` | rgba(12,12,14,.86) | rgba(244,241,236,.88) | sticky nav |
| `--shadow` | rgba(0,0,0,.6) | rgba(0,0,0,.18) | the one shadow, on the menu sheet and the hero frame |
Theme: `prefers-color-scheme` plus `html[data-theme]`, and a System / Light / Dark control in the footer, stored in
`localStorage` under `igneum-theme`. Every page gets `color-scheme` set so form controls and scrollbars follow.
No filled tint field anywhere except `::selection` (the app's rule, `miner-ui-3.md` 302-306); the litepaper's `--tint`
callouts become a row surface with a 1 px ember hairline on the left.
### 2.2 Type
Three faces, each with one job (the app's rule, `miner-ui-3.md` 170).
| Face | Job on the site |
|---|---|
| Unbounded 700 and 900 | the wordmark, page titles, section titles, hero numbers, the one primary button |
| IBM Plex Sans 400, 500, 600 | every sentence |
| IBM Plex Mono 400, 500 | eyebrows, units, labels, hashes, addresses, counters, code |
Scale (px; the web scale sits two steps above the app's because the reading distance is longer):
| Token | Size | Line | Use |
|---|---|---|---|
| `--t-xs` | 11 | 1.4 | mono units under a number |
| `--t-sm` | 12 | 1.4 | eyebrows (0.16em tracking, uppercase), table heads, footer imprint |
| `--t-base` | 15 | 1.55 | table cells, captions, notes |
| `--t-md` | 17 | 1.6 | body |
| `--t-lg` | 19 | 1.5 | lead paragraphs |
| `--t-h3` | 20 | 1.25 | card titles (Unbounded 700) |
| `--t-h2` | clamp(26, 3.2vw, 36) | 1.1 | section titles (Unbounded 700) |
| `--t-h1` | clamp(32, 5vw, 56) | 1.05 | page titles (Unbounded 900, -0.01em) |
| `--t-hero` | clamp(40, 7vw, 76) | 0.98 | the home headline only (Unbounded 900, -0.02em) |
| `--t-num` | clamp(26, 3vw, 40) | 1 | hero and tile numbers (Unbounded 700, tabular) |
Headings use `text-wrap: balance`; paragraphs `text-wrap: pretty`. Headings are written under 28 characters where they
can be, and the build's orphan check (section 6) fails a heading that leaves one word on its own line at 390 px.
### 2.3 Space, radius, shadow
| Token | Value |
|---|---|
| `--s-1` to `--s-6` | 4, 8, 12, 16, 24, 32 |
| `--gutter` | 32, 24 under 1000 px, 16 under 720 px |
| `--sec` | 96 between sections, 64 under 720 px |
| `--max` | 1120 px |
| `--r-card` | 16 |
| `--r-row` | 12 |
| `--r-btn` | 10 |
| `--r-pill` | 999 |
| shadow | none on cards; `0 30px 80px var(--shadow)` on the menu sheet and the one hero frame |
Every surface has a 1 px `--line` border and no shadow. Hierarchy comes from type and space, not from stacked boxes:
a page is a column of sections, each with an eyebrow, a title, one paragraph and then its content; cards are used only
where a thing has edges (a live scene, a download, a table that scrolls).
### 2.4 Components
| Component | Rule |
|---|---|
| Nav | sticky, 64 px, `--top-bg` blur; wordmark left; the pages as text links; one primary button (Download) on the right; under 900 px a burger that opens a sheet listing the same links, the primary button last, the theme control at the bottom |
| Footer | four columns at 1120, two at 720, one under 500; same links as today; the imprint line and the theme control; no claims in the footer |
| Card | `--graphite`, 1 px line, `--r-card`, padding `--s-5`; a card title is Unbounded 20 |
| Tile | a number (`--t-num`) over a mono label; four across, two under 700 px; never a bare 0: a tile with no reading shows the state word in place of the number |
| Table | full width, 15 px; th mono 12 uppercase ash, left aligned; td border-top 1 px line; numbers right aligned, tabular; on phones the table scrolls inside its card with a fade at the right edge, the first column sticky |
| Button | primary: ember fill, ember-ink, Unbounded 700 15, 44 px tall; secondary: 1 px line, bone text; under 720 px the primary is full width |
| Pill | `--r-pill`, mono 12, a dot: molten for live, ash for off, ember for failed |
| Note | ash 15 px paragraph under a scene or table, saying where a number comes from |
| Callout | row surface, 1 px ember hairline on the left, body text (replaces the litepaper's tint boxes) |
| Code | `--row`, mono 14, no shadow |
### 2.5 State words
A live element is always in exactly one state and says it in words, with the reason (the app's rule, `miner-ui-3.md` 39).
| State | Words on the page | Dot |
|---|---|---|
| fresh | `live devnet` | molten |
| connecting | `connecting to the devnet observer` | ash |
| stale | `observer offline, last update N min ago` | ash |
| failed | `live feed unavailable` | ember |
| not active | `proving not active` or `finality paused` with the reason the API gives | ash |
| empty | one sentence with the reason: `No blocks in the last 90 seconds. The observer is reading a node that has fallen behind.` | ash |
Block and proof words are the ledger's: `pending`, `included`, `excluded`, `proven`, `locked`. A counter without a reading
shows `pending` (a value the API has not reported yet) and never `n/a`, `--` or `0`.
### 2.6 Focus and motion
Every focusable element has the 2 px ember outline at 3 px offset (today's rule, kept). Skip link kept. `prefers-reduced-motion`
stops every canvas animation and shows a still frame with the same counters. Scroll-reveal animations are removed:
content is visible on load (the audit found revealed sections invisible to a screenshot and to a slow scroller).
## 3. The home page: one screen tells the story
Reading order on a 1440 screen, each block one viewport or less; on a phone the same order, stacked.
| # | Block | Job | Primary action |
|---|---|---|---|
| 1 | Headline and lead | what Igneum is in two sentences; the three facts as tiles (1 block/s, 0 premine, 4 B cap) | Download the miner |
| 2 | Live scene | the chain proving itself: the live-dag module with chain block, shards proven, last lock; the state word | none (the scene links to /live) |
| 3 | Three proofs a sceptic checks | the light client in this tab (checkpoint verified here), the ASIC model with its numbers, the ledger of what we do not claim | each links out |
| 4 | Download | the three installers with version and size, the hash verification line | Download |
| 5 | How it works | the hourly program, mining versus proving, finality, in three short cards | Read the litepaper |
| 6 | Journey | the phases and the log, as today, collapsed to the current phase with a "show all" | none |
Every sentence of today's hero lead survives, split across blocks 1, 3 and 5 so no paragraph runs past 60 words. The
"Mined by GPUs. Proven by fire." line is the tagline the ledger allows (row 820); it stays as the headline.
## 4. The litepaper: a readable long-form document
| Rule | Detail |
|---|---|
| Measure | 68 ch body, 17 px, 1.6 |
| Section nav | sticky left rail at 1120+ listing every section, the current one marked; a top "contents" dropdown under 1000 px |
| Numbers | every measured figure in a table with its source column (bench-log date, or "approximate") |
| "What we do not claim" | every such sentence kept verbatim, set as the callout component so it is seen, not hidden in a tint box |
| Footnotes | kept, as a numbered list at the end with return links |
| Theme | dark by default like the rest of the site, light on request; the paper's light default goes |
| Print | a print stylesheet: no nav, no rail, black on white, tables unbroken, links shown with their URL |
## 5. Per-page notes
| Page | One job | Primary action | What moved | States |
|---|---|---|---|---|
| Home | say what Igneum is, show it alive, offer the download | Download the miner | the chip numbers to the sceptic card; the testnet terms behind a chevron; the simulation gone, the DAG module in | connecting, live, stale, failed in words; counters read the chain |
| Litepaper | read the paper | none (reading) | whole paper by default, the section mode kept; dark like the site; file paths off the surface; stale facts dated or corrected | print prints the whole paper |
| Live | watch the chain | Pause | the lane chart replaced by the DAG module; the tiles kept; "n/a" to "pending" | connecting, live, stale, failed; "proven A/B in 10 min" |
| Miners | the bench table | none | the eyebrow says what the page counts; the source-file notes become sentences | "not measured" with its reason |
| Miner | install, start, download | Download (the site-miner agent's copy; styled only) | shared chrome and tokens | the devnet and testnet notices |
| Wallet | what the wallet does, download | Download (the wallet-ui-3 agent's content; styled only) | shared chrome and tokens | |
| Explorer, block, address | find a block, read it | Search | shared chrome and tokens; "n/a" stays for the build after this one (owned by the explorer agent) | the fetch words as today |
| Faucet | ask for 10 IGN | Send 10 IGN | shared chrome | the five status sentences |
| MetaMask | add the network | Add to MetaMask | its own canonical; the explorer link; the wallet's state said true | the five button sentences |
| 404 | find the way back | the four links | the page count said true; nineteen sections | |
| Bench, evidence, ledger | read the records | none | the generated template on site.css; each page's own eyebrow | |
## 6. The live DAG module (`site/live-dag.js`)
the project lead's brief, 6 October 2026, on /live's scene: "can this look more advanced and cool?" One module, shared by /live
and the home page, reading `/api/live` only.
| Element | Rule |
|---|---|
| Layout | blocks placed by DAA score on x and by miner lane on y; lanes are the miners of the window, most blocks first; a phone shows the top lanes and folds the rest into one "others" lane, same blocks, same counts |
| Edges | parent edges drawn; the selected-parent edge heavier; merge-set edges thin |
| Colour | blue blocks lit, red blocks dim, pending grey; the selected chain as a continuous glowing path |
| Checkpoints | vertical bands at each checkpoint's blue score with its lock weight (`fraction_total`); a locked band is solid, a pending one dashed |
| Proofs | a second layer: a block fills when its segment record is paid (`shards[].state` paid); the proof lag is shown as the gap between the band of the proven block and the carrier |
| Time | the x axis scrolls at chain speed; new blocks arrive from the right with a brief glow; pause button; wheel and pinch zoom on time, 30 s to 300 s (`?window=`) |
| Details | hover and tap: hash, miner lane, blue score, DAA, parents, proof state, in the ledger's words |
| Render | one canvas at device-pixel-ratio, batched paths, 60 fps on a laptop (measured in the build), `prefers-reduced-motion` still frame |
| Truth | no invented blocks; the legend's words are the ledger's: pending, included, excluded, proven, locked; the counters read the chain (item 0's fix), never the window |
| Look | obsidian and ember, thin mono labels, restrained glow, no toy |
The home page embeds the module with `compact: true` (fewer lanes, no axis labels, the three counters) and the live
page with the full view and the finality and proving strips as today.
## 7. The build
| Step | What |
|---|---|
| 1 | `site/site.css` with the tokens, type, components and states; the head partial loads it; every page's `<style>` reduced to its page block |
| 2 | nav and footer partials rebuilt; the theme control |
| 3 | home page rewritten to section 3; live-dag.js; /live on the module |
| 4 | litepaper to section 4 |
| 5 | every other page to its per-page note |
| 6 | checks: identity grep, link check, forbidden strings, the ledger-text check (new, `tools/ci/ledger-text-check.mjs`: every stated sentence the ledger marks for the site must appear verbatim on the page it names), the orphan check (new, headless at 390 px), contrast check (new, token pairs 4.5:1) |
| 7 | screenshots after, beside the audit's before |
Pages owned by other agents today: `site/miner.html` copy and `site/img/miner-*.webp` (site-miner), `site/wallet.html`
content (wallet-ui-3). They are styled through `site.css` only; their bodies are not edited here.