Commit graph

68 commits

Author SHA1 Message Date
igneum-labs
7cf223fa2b Site, 7 October 2026 evening (the project lead's four asks through main, one landing): (1) the bar's nav to the right: the mark and the devnet pill on the left, Mine, Network, Learn and the controls right-aligned with the same gaps and sizes, each open panel anchored under its button (the script sets --panel-left) and a panel that would run past the container aligned to its button's right edge, the phone sheet unchanged; (2) no lateral scroll: tools/ci/scroll-width-check.mjs on the gate (scrollWidth equals clientWidth on every route at 390, 768, 1024, 1280 and 1440 in both themes; only a table, code or diagram scrolls inside its own overflow-x box; self-test with a 100vw plus 20 px fixture known-failed first); (3) LG-5, the launch text: the front page leads with the three wants (hardware that stays useful, income without a cliff, a fair supply) and the live network with finality is the second screen; the litepaper's regulatory note reads "Not legal advice." alone over its eight sentences from future.md 8.3 (the project lead: counsel not yet; the string "counsel is engaged" is in both forbidden-strings lists and gone from the research heading), the pay sentence stays; the journey's phase line reads Devnet 3 live, testnet next; (4) LG-1, /income: docs/analysis/income-tiers.md published as a page by tools/launch/income-page.mjs (checked on the gate against the document), listed under Learn, labels on every number, no price of IGN anywhere
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 19:12:04 +00:00
igneum-labs
dee74890a1 live-22: live.html rebuilt from the base with exact anchors (the first splice had swallowed the statements between the leaderboard and the block table)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:31:43 +00:00
igneum-labs
ca90ecafc2 live-22: the leaderboard render statement closed (a splice had left the old 'and N more' tail inside the new function, so /live's script did not parse and the scene never mounted; the parity gate caught it)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:30:16 +00:00
igneum-labs
b30552e12a /live: the shard sentence from the block's facts and the leaderboard's top ten (7 October 2026). scene/live-dag.js 2.0.6 (IgneumDag.shardWords, the one shard sentence; legend 2.0.5) synced into site/live-dag.js; the /live inspector prints it per shard and as the count line (a planned shard with no prover reads awaiting a prover with the block's age; an empty plan reads loading, excluded, not yet ordered or off the selected chain, never one fixed sentence); the weight leaderboard shows the top 10 by default with a toggle under the table (Show top 20, then Show all N with the live count, then back), the viewer's own key pinned as an extra row below the ten when it sits outside them, the table in a box of fixed height so the page below never jumps, the tag line unchanged (site/leaderboard.js carries the row logic, site/lib/leaderboard.test.mjs on the gate); tools/site-serve.mjs answers /api/live from IGNEUM_LIVE_FIXTURE for captures and tests off the database; the scene tests bind each half where it lives (site on master, app on the release branches)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 18:13:23 +00:00
igneum-labs
40ea28aea0 site-ui-5: /live's table-row click handler kept its opener (the Mark-my-key removal had taken the line that opened it; every inline script parses again)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:58:51 +00:00
igneum-labs
8e942cd0d5 site-ui-5: the phone menu is seen, the home fold hides the scene until the feed answers, /miner and /wallet show dark screenshots only, /live has no "you" (7 October 2026, 15:5x UK)
the project lead's three on the live site, plus the /live key's last item:
- Mobile nav (URGENT): the sheet was position:fixed inside the bar, and the bar's backdrop-filter is a containing block for
  fixed descendants, so top and bottom resolved against the 60 px bar and the sheet opened with zero height while
  aria-expanded said true. It is now absolute under the sticky bar, a viewport-tall box (100dvh minus the bar), display block
  over the package's grid rule. tools/site/sheet-test.mjs opens every page at 390 px, clicks the burger and asserts the first
  link is on screen and on top (elementFromPoint at its centre returns the link); --self-test forces a zero-height sheet first
  and must catch it; a gate line runs it where a browser exists (the box, CI) and says so where none does. On build-2: the
  zero-height sheet is caught, 23 pages pass.
- Home at 375: the renderer's "Waiting for observer data" was drawn on the fold's canvas under the lead. The fold now carries
  .pending until the feed is live or stale and keeps the canvas at opacity 0 meanwhile; the status pill is its own row under
  the buttons on phones. ?feed=off holds the pending state for a render; the overlap sweep (whose server answers /api with
  503) renders the pending state by construction and ran at 375, 390 and 1440 in both themes: 0 overlaps.
- /miner and /wallet: the light-theme screenshot variants are gone (dark only), captions unwrapped, "light and dark" dropped
  from the gallery line; one gallery of frames with one caption each.
- /live: "Your block" leaves the key, the "Your blocks" filter and tile and the Mark-my-key prompt leave the page (the site
  has no "you"); the stats row is three tiles; the key reads Included, Excluded, Selected chain, Proven, Locked checkpoint.
- Captures: ?motion=off (head partial) marks data-motion=off so every .reveal is drawn in a headless render; capture.sh passes it.
  tools/site/serve.mjs survives a refused api origin (502, never a crash).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:51:17 +00:00
igneum-labs
a195befe1f site-ui-5: /live's key row sits under the scene canvas (the project lead: "the key at the top under the animation, not on top of the animation"): the hint, the six key items and the window stepper are the first thing below the canvas, flush with its bottom edge; nothing above the canvas but its own time axis; the blue-score line and the inspector unchanged
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:40:44 +00:00
igneum-labs
aeb7c68257 site-ui-5: /live sizes its scene box through the renderer (2.0.4 autoHeight, 1ae09fb5); the padding constants leave the page. The home fold keeps its CSS height (a backdrop), so autoHeight stays off there by the renderer's own rule.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:06:56 +00:00
igneum-labs
83dd90bc05 site-ui-5, deploy 2: every remaining route in the apps' look, /live's scene box fits its lanes with the key at the top (7 October 2026, 15:0x UK)
- /live (the project lead: "make it more efficient, key at the top"): the key (Included, Excluded, Selected chain, Your block, Proven,
  Locked checkpoint), the "Click to inspect · Drag to explore" hint and the window stepper sit on one row above the scene
  (hint left, key centred, stepper right; on phones the key wraps and the stepper goes under it); the blue-score range stays
  as a small line under the canvas; the canvas height comes from the lane count (one lane per key in view plus the others
  lane, capped at the renderer's 7, 4 on phones: padT 58 + lanes x 46 (40 narrow) + padB 38, read from scene/live-dag.js
  2.0.3 layout(); a sizing hook was asked of the parity lane, which owns that file); the graph column no longer stretches to
  the inspector; the inspector keeps its rows with tighter spacing and Clear is a small button beside its title.
- Every other route carries the slim bar, the app's buttons, pills and cards from site.css section 10 with its content
  untouched: /app (OS marks on its platform line), /miner (the download tabs take the OS wells), /miners and the bench table
  (the vendor badge in front of every card name), /explorer, /block, /address (hash titles wrap), /journey, /bench, /evidence
  (status pills wrap in their cell), /litepaper, /ledger (status badges wrap at 390), /claims, /randomx, /provenance, /dev-fee,
  /faucet, /metamask, /404.
- Data tables fill their frame on desktop and scroll inside it on phones; no column squeezed to a sliver.
- The overlap lane's detector over all 23 pages at 390 and 1440, dark and light, on build-2: 0 overlaps.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:57:32 +00:00
igneum-labs
517320aad2 site-ui-5, deploy 1: the site in the apps' look (7 October 2026, 15:0x UK): one design layer on the app's tokens, the slim bar, the home fold on the shared scene, /download, OS and GPU marks
the project lead: "a site now what is on par with our current miner and wallet app look and feel with the new animation ... simple and
beautiful ... apple and windows icons everywhere needed, GPU brand icons ... easy access to all of our pages without a header
that is crazy".

- site.css section 10: the miner and wallet apps' treatments (app.css miner-ui-5, wallet-0.1.5) over the package: buttons
  (Plex Sans 600, radius 10), the status pill, graphite cards at 16 and rows at 12 on the hairline, the wallet lock screen's
  ember glow, the mark wells; the fourteen palette tokens stay in the scene-tokens block (scene/tokens.css); light and dark.
- Navigation: the seven-item header is gone. The slim bar carries the mark, a DEVNET pill with the live dot, Mine / Network /
  Learn (each opens a panel listing every route of its group with one line), the theme toggle and Download; on phones one
  button opens a full-screen sheet with the same groups. Keyboard: arrows between groups, Escape closes and returns focus,
  Tab walks a panel, the sheet is a dialog with its focus kept. The gate's header check is the new rule
  (tools/ci/site-nav-check.mjs: the bar, the three groups with their aria, 18 routes in the panels and the sheet with their
  descriptions, Download, the burger; self-test known-failed first).
- Home: one fold. The mark on the ember glow, one line, Download for Windows and Download for macOS with the OS glyphs and the
  stamped version (the visitor's platform first), "Linux and HiveOS" to /download, IgneumDag 2.0.3 painting underneath from
  /api/live through IgneumFeed (window 60, fps 60, poll false, no fork). Below: three lines on what a miner gets (E5 and X35
  verbatim), the live network in three tiles (hash rate, blocks a second, locked checkpoint; X2 and X31 verbatim), the
  community row (Discord, GitHub, Reddit), the footer (X7). The scene scripts are deferred; fonts preload with swap.
- /download: a new route. Windows, macOS, Linux and HiveOS cards with their marks, the stamped version, size and sha256, the
  HiveOS flight sheet, the three steps, the card picker with the vendor badge, the wallet for macOS; Windows wallet named as
  next with no file.
- Marks: brand/marks/vendor-marks.mjs (gpu-logos lane, a94dd192) copied byte for byte to site/lib/marks.mjs (the build and a
  gate line refuse drift); site/lib/os-marks.mjs adds Linux and HiveOS in the same treatment. The build stamps
  <span data-os> and <span data-gpu> and puts the vendor's mini badge in front of every table cell that names a card
  (/miner, /miners, the bench table), writes the --mark-* tokens into site.css between markers, and hands yourcard.js the
  badges as JSON for the card picker. The vendor well is scoped to [data-mark] so the ledger's and the journey's own
  .badge keep their look.
- The footer carries the four OS download chips; the nav's group wrappers are .nav-group (the wallet page owns .group).
- tools/site/serve.mjs and capture.sh: the site as Vercel serves it with /api passed to the live observer, captured on
  igneum-build-2 at 390 and 1440, dark and light (docs/plans/site-ui-5-shots, the home set in this commit). The overlap
  lane's detector ran over every page on build-2: 0 overlaps after the two fixes here (the explorer's hash titles wrap, the
  ledger's status badges wrap at 390).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:46:23 +00:00
igneum-labs
8c7d727e61 site-redesign: the package's look 1:1, header and footer included
The owner, 12:4x UK: "some things look different on the live site vs the one I sent you, match it 1:1". site/site.css is
now the package's design system as delivered (tokens, type, chrome, components, breakpoints) with self-hosted fonts, the
two text tokens for contrast on light surfaces, and a compatibility layer for the data pages' vocabulary. The header
and footer are the package's (status bar, logo with the ember stop, the six items, the Discover dropdown, the theme
toggle, the Download button, the burger and its sheet; the footer grid with the three icon links, Run, Read, Explore
and the legal line). The home, miner and wallet pages carry the package's markup on our content; the live page, the
explorer, the litepaper, the faucet, the MetaMask page and the generated pages take its values in their own blocks.
The theme is always set (stored, else the OS), so the package's light theme applies. Side-by-side sheets before and
after at 1440 px from tools/site-redesign/sheets.mjs; no sample data, no review chrome, the hero loop continuous.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 10:57:32 +00:00
igneum-labs
b952b18e0f site: the launch-pack text without an emission number (the three wants, the block sentence, the law section, the journey phases), the ladder on /miner, the weight leaderboard and "Who is mining" on /live
Main's split of 7 October 2026: everything in docs/plans/launch-pack.md section 4 that carries no emission number deploys now; /income and the income card's numbers wait on site-launch-pack for the genesis re-cut. On the redesign's pages and components. Home: the three wants are the first block under the hero in the package's three fcards ("Three things, in order."); the "Income with no cliff" card states the shape of the schedule without a number and points at /miner#card; the "fair supply" card's ramp line carries no percentage; one line under the grid to the litepaper's finality section. Litepaper: the block sentence under the three-streams table (C); "What the chain is, in law" at the end of Economics (D). Journey: phase 4 and phase 6 (E). /miner: the ladder between "What your card does here." and "One client. Three jobs.", seven rungs in the app lane's words with the devnet and mainnet thresholds. /live: the weight leaderboard from finality.weights (rank, key, blocks in window, presence, last block; weight, never hashrate) and a "Who is mining" panel counting what the observer reports; the card-by-card census waits for the app's public-profile switch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 10:39:01 +00:00
igneum-labs
95e5f60747 site-redesign: the full-site redesign on our content, 22 pages served
The package's design system, layouts and interactions on our tokens and self-hosted fonts (site/site.css section 10),
our facts, numbers, records and live services on every page. The home page: the GPU hero (site/hero-scene.js, continuous
while in view, labelled as drawn), the live DAG panel on scenes/feed.js and live-dag.js 2.0.2, three reasons, the
economics split, the download row with the OS marks, the ledger line. The miner page: the download layout, platform
tabs stamped from the live download index with sha256, the steps, the card table, the fee section (the one source of
/dev-fee), the FAQ. The wallet page in the package's wallet-hero layout, the window slot ready for the wallet redesign.
The secondary pages rendered by the build from one source each: /claims and /randomx from the litepaper's sections,
/dev-fee from the miner's fee section, /provenance from docs/provenance.md through the scrub, /journey from
journey.json; /benchmarks rewrites to /miners, /connect redirects to /metamask. The generated pages (bench, bench
table, ledger) restyled onto the page hero and the docs layout with a section filter. The footer's secondary links point
at the real pages. The copy pass on every served page (docs/plans/site-copy-pass.md). The package's data tests and the
hero loop test in the gate (tools/site-redesign). No sample data is served; the package's review chrome is not.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 10:30:18 +00:00
igneum-labs
687a7752f6 live: the Proven tile reads /api/live?window=600&summary=1 every 10 s, "of the last 10 minutes, every shard verified or paid" (the page edit the previous commit's script skipped)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 10:15:33 +00:00
igneum-labs
a8461a2848 site-ui-4: the header on every page (six items, Download, the burger with its open state and aria), OS marks on the download cards, the footer redesign (icon row GitHub, Discord, Reddit; Contact eyebrow; one baseline grid; the state word and the year), the chip-model text (prize sentence cut, the bounded hot-set row), live-dag.js 2.0.2 narrow options for phones, the nav build check, the word-bounded rig-name check
The owner's orders of 7 October 2026 (header, logos, footer, phone scene) and the Counter ASIC lane's public text (docs/plans/counter-asic-3-public-text-2026-10-07.md, b10c7ac2) with the disclosure prize held back until its publish word.
Header: the one-screen home no longer hides items; the sheet carries exactly Litepaper, Miner, App, Wallet, Live devnet, Ledger and Download; 44 px bar links, 48 px sheet rows, the burger turns into an X; tools/ci/site-nav-check.mjs runs after every build and in the gate.
Cards: the Windows four-pane, Apple and Tux marks from 80c5618, white on the ember card, the card's own text colour on the mono cards (so they flip with the theme).
Footer: the ledger page renders through tools/ledger-page.mjs and now underlines Ledger; the Reddit profile is the one the owner named.
Renderer: narrow, narrowBreak 720, narrowWindow 30, narrowLanes 4, narrowMinNode 11; hairlines off except the selected chain; checkpoint labels as the percent; fps 60 on the home and /live mounts. Measured in headless chromium at 390 with 4x CPU throttling: 50 to 56 frames a second (the cap is 60).
Evidence row 17 rewritten in the table's eight columns. The forbidden list gains "disclosure prize" and the word-bounded rig names.
Tested with Playwright at 390 and 768 in both themes with real taps on every public page and the 404: 48 rows, 0 problems; captures in docs/plans/site-ui-4-shots/chrome.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 09:59:42 +00:00
igneum-labs
06f1cd6e86 site-ui-4: live-dag.js 2.0.1, the real-data presentation options (lanes capped at 7 with the own key first, node size from the lane height with a floor, hairline merge edges within two lanes and the first parent only, the others lane smaller and dimmer, a glow and ring on proven blocks); 60 s default window; the demo-feed proof capture beside the live one
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 09:09:24 +00:00
igneum-labs
cf0d4238e5 site-ui-4: the your-blocks tile reads 0 in ash until a key is marked
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:59:58 +00:00
igneum-labs
a4fe3d8e08 site-ui-4: the EMBER 02 renderer on the home fold and /live, the proof inspector, the compact copies for the app (prototype, not deployed)
renderer pack EMBER 02 supplied by the project lead, 7 Oct 2026: src/live-dag.js
and src/proof-core.js adopted byte for byte (sha256 582f2e73... and
c2a094a6...), reviewed as third-party code (one same-origin fetch of
/api/live when poll is on, no eval, no CDN, no font download, tokens
read from :root in both themes, checkpoints placed only on an exact
blue score, proof never implies inclusion, a lock only when reported),
its tests/verify.py run on this Mac (73 of 73) and the module mounted
against the real observer feed (state live, only /api/live requested,
zero records promoted). Home: the pack's full mode in the one-screen
fold with the legend row and the newest block's caption, fed by the
page's own reader. /live: the pack in the graph slot, the four miner
stats (blocks in window, your blocks, proven, latest checkpoint), the
All blocks / Selected chain / Your blocks tabs, Pause and Follow, the
window stepper, the inspector column with IgneumProof's shard scene,
the proof shards list, inclusion, miner key, blue score, DAA, parents,
header time, checkpoint, finality, and the three-beat Motion, with
meaning block; the observatory's six tiles, identities, event stream,
block activity, light client and table stay. site.css gains --included
and --excluded. The standalone demo is the pack's standalone.html; the
10-second recording is from this branch's /live.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:59:46 +00:00
igneum-labs
4ce0c34827 site-ui-4: /live as the network observatory (prototype, not deployed)
The reference page's composition in our tokens and words, every number
from the observer: the header row (eyebrow, the title with its ember
full stop, one sentence, two buttons, the state word), six tiles in one
hairline row each with a definition, the block graph panel (our
live-dag.js in the graph slot, the block-count chip, selected chain
only, pause and follow, the inspector column with hash, lane, time, blue
score, DAA, chain, colour word, shards, checkpoint and lock state, the
drag-to-explore line, the zoom control, the legend row and the blue
score range), the three panels (block activity with per-minute bars,
mining identities with share bars and the reader's own key marked when
set, the event stream), the blocks table, our footer. live-dag.js gains
an onSelect hook on click (additive; the app's copy unchanged).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 08:30:23 +00:00
igneum-labs
7e44748295 site: the simple nav, the miner and app pages, the live devnet redrawn, one design system for every page (not deployed)
Nav sitewide: Litepaper, Miner, App, Wallet, Live devnet, Ledger and the
Download button; the rest in the sheet and the footer. /miner is the
product page for the installers: the shipped app in its frame, the card
picker with the live time to a block, the downloads with sizes, HiveOS,
the fee in full view, three real shots. /app is new: the Igneum Ember app
page by page (Overview, Cards with Ember, the chain drawn live by the
module the app ships, Earnings, Prove, Settings, phone width, what keeps
it mining), light and dark, every shot a real capture or a render from
the RTX 5090 Windows rig's live state with the hostname painted out.
/live is redrawn to show the system working: the step scene, six live
cells, finality in plain words, miner lanes, provers paid, recent blocks
landing, the light client in one line, the DAG below. site.css carries
the shared product components (frames, download list, lines, your-card
line, phone download bar); yourcard.js reads the network rate. The
ledger and wallet pages no longer overflow at 390 px.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 07:44:15 +00:00
igneum-labs
84b349e150 Home page redrawn: the scene is the page; a 56 px header, one statement, two buttons; three facts, the downloads, one line to the ledger
The owner, 6 October 2026, on the live home page: "too left and text heavy ... we want the home page to suck people in and let
the litepaper carry the weight; also minimise the header." The home page only; nothing else above the fold.

Header (this page only, a page-block override of the shared nav): the wordmark, Litepaper, Live devnet and Download the miner,
56 px, transparent over the hero; the phone sheet shows the same three.
Hero: one statement, eleven words ("A proof-of-work chain for graphics cards, whose miners prove the blocks."), two buttons,
then the step scene (site/live-steps.js on the shared feed) full bleed with its one caption line. Hero copy 17 words with the
buttons. At 1440 by 900 the hero ends at 849 px; at 390 by 844 at 699 px.
Below the fold: three facts, each one number and one sentence: the live hash rate with the vote keys of the last ten
minutes, the shards proven and paid on the chain (with the last ten minutes), and the chip model's one line with its link;
a note under them says the chain's state in the ledger's words (tonight: finality paused) and that the chip figures are a
cost model, not a measurement. Then the downloads row (three platforms) with the devnet and testnet notices and the dev-fee
sentence, then one line to the ledger and to what Igneum does not claim. The footer is unchanged.
Moved, nothing cut: the light-client card to /live (its verifier module with it); the testnet terms to the litepaper's For
miners section (with an id for the metamask page's link); "Live rows arrive with the public testnet, August 2027" to the
litepaper's proving section; "since 2019 (approximate)" onto the litepaper's RandomX date; the journey, economics, wallet,
build and RandomX sections were already in the litepaper (roadmap, economics, wallet, building, vs RandomX). The footer's
Journey link points at the litepaper's roadmap. tools/ci/ledger-text-check.mjs: the home page is checked for E5, X2 and
X7; G4, C2, X3 and X8 are checked on the litepaper (G4 and X8 were already there). The ledger's own "stated on" notes for
those four rows are owed an update by the ledger owner.
Polish lane Q5: the word "final" is drawn and captioned only while finality is active (site/live-steps.js), so nothing on
the page says final while finality is paused; the hero is under 40 words; the Open Graph card is the 1200 by 630 image.

Measured headless at 1440 and 390, dark and light: header 56 px with three items, no "final" anywhere, no horizontal
overflow, no console errors; the caption advanced on every capture. Captures: docs/plans/site-ui-3-shots/after/
home-{1440,390}-{dark,light}.jpg (full page) and home-{1440,390}-{dark,light}-fold.jpg (above the fold).
Checks: link check 912 links across 16 pages 0 broken, ledger text 50 of 50, contrast 32 pairs 0 under 4.5:1, orphan check
0 site headings, api tests 5 pass. The identity grep's one hit is docs/analysis/horizon/polish.md line 433 on master,
untouched here (the polish lane's own table of regex literals); it is main's to route.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 20:30:09 +00:00
igneum-labs
be6209557d Live page: miners as one compact strip, events as the last five lines
the project lead, 6 October 2026: the miners table and the events feed were too long for the story. The miners card is now a strip:
the count ("66 vote keys in 10 min"), the top five lanes by blocks with a bar each and the last-seen time, and "and N more"
with the bench table linked. The events card shows the last five, one line each, with the count of the rest in the note.
Two columns from 900 px. Measured headless: at 1440 both cards end at 1.9 screens (the scene fills the first); at 390 the
miners card ends at 2.5 screens and events at 2.95; no horizontal overflow, no console errors. Captures replaced in
docs/plans/site-ui-3-shots/after/live-1440-dark.jpg and live-390-dark.jpg.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 19:41:04 +00:00
igneum-labs
6bc408b9c1 Live DAG: the page's scroll passes through the scene; zoom only with ctrl or cmd, a pinch, or a click into the scene
the project lead, 6 October 2026: scrolling past the DAG zoomed it. The module's wheel listener took every vertical wheel. Now a plain wheel
or a trackpad's two-finger scroll is never captured: the handler returns before preventDefault unless ctrl or cmd is held or
the scene is engaged. A click into the scene engages it (the canvas takes an ember outline and a chip reads "scroll to zoom,
Esc to release"); Escape, a click outside the scene or the chip releases it. Pinch zoom is unchanged. Same module on / and
/live; both pages carry the chip and the note says how to zoom. opts.chip and opts.onEngage are new, optional; dag.engage(bool)
is exposed.

Proved headless on both pages: a plain wheel over the scene scrolled the page 300 px and left the window at 120 s; engaged, a
wheel zoomed the window from 120 to 138 s with the default prevented; the chip showed on click and hid on Escape; no console
errors. Link check 884 links 0 broken.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 19:41:04 +00:00
igneum-labs
b63be56016 Site UI 3: one design system, the live DAG module, the home page as one screen, the litepaper as a paper, every page on the shared tokens
site/site.css: the tokens of the miner app's third redesign in light and dark (a darker light-mode ember and molten for text
so every pair passes 4.5:1, checked by tools/ci/site-contrast-check.mjs), the type scale on Unbounded, Plex Sans and Plex
Mono, the nav with one primary, the footer with a System/Light/Dark control, cards, tiles, tables that scroll on a phone,
buttons, pills, notes, callouts, the state words, focus rings, reduced motion, print. Partials rebuilt; the head loads the
stylesheet and applies the stored theme before paint. Every page's own style block is reduced to its page rules.

site/live-dag.js: the shared DAG view for / and /live (docs/plans/site-ui-3.md section 6): blocks by header time and
miner lane, parent edges with the selected chain as one heavier path, blue lit, red dim, pending grey, proven filled,
checkpoint bands with their lock weight (locked solid, pending dashed), new blocks arriving with a glow, hover and tap
details in the ledger's words, wheel and pinch zoom of the window (30 to 300 s), a pause button, device-pixel sharpness,
a still frame under reduced motion; opts.mine marks the user's own blocks (the miner app embeds the same file),
opts.poll:false with dag.push(reply) lets a host feed it. Every pixel is a block the observer stored.

site/index.html: the one-screen story (what it is, the live scene with chain block, shards proven, last lock, vote keys and
hash rate as state words, three things a sceptic checks, the download, how it works, the wallet, the journey, economics),
every tick-list row kept, the chip model's numbers moved to the sceptic card, the testnet terms behind a chevron, the
scroll-reveal gone, the Open Graph set on the 1200 by 630 image, no horizontal overflow at 390.

site/litepaper.html: dark like the site with light on request, whole paper by default (the section mode kept, deep links
intact, print prints the paper), repository paths off the surface, the cover dated 6 October, the wallet at 0.1.4, the
roadmap's verifier figure aligned with the Mining section, the proof lag stated as measured (about 380 s against the 60 s
gate), the 0.3.6 plan dated with 0.3.14 stated, the two "tonight" placeholders said as not yet measured. Every ledger
sentence verbatim (tools/ci/ledger-text-check.mjs, 43 sentences).

site/live.html: the lane chart replaced by the module; "proven A/B in 10 min", "finality paused, last #N", "pending" for
"n/a"; the fee sentence true on both sides of DAA 210,000. site/metamask.html: its own canonical, the explorer linked, the
wallet's state said true. site/404.html: the page count and section count said true. site/build.mjs: the generated pages
on the system, each with its own eyebrow, the miners page's source notes as sentences. downloads.json refreshed from the
host (0.3.14). tools/ci/site-orphan-check.mjs: no site heading leaves one word alone at 390 px (log titles reported).

Checks: identity grep 0 hits, link check 854 links 0 broken, ledger text 43 of 43, contrast 32 pairs 0 under 4.5:1,
no horizontal overflow at 390 on 14 pages (the wallet page's timed table overflows by 5 px, for the wallet-ui-3 owner),
orphan check 0 site headings (the miner h1 at 96 characters is the site-miner agent's copy). After captures beside the
audit's: docs/plans/site-ui-3-shots/after/.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 19:27:47 +00:00
igneum-labs
870bc4ed33 Home live scene reads the chain, not the window: chain block, shards proven, last lock, live colours, a plain unavailable state
The "LIVE DEVNET" scene on the home page showed blocks 21, proven 0, locked 3 and grey nodes while the devnet stood past
chain block 140,000 with 2,090 shards paid and a checkpoint locking every 30 s. Four causes, all in site/index.html:
- "blocks" was the scene's own spawn counter, never the chain;
- "proven" counted blocks of the 90 s window whose shards were all paid, and proofs land a median 380 s behind the tip
  (median_proof_lag_s), so the window can never hold one;
- "locked" counted locked checkpoint blocks inside the same 90 s window (always about 3);
- the live path skipped the colour state machine, so every real block stayed grey, and a failed first fetch left the
  simulation running under a label that looked live, with no further polls.

Now: /api/live carries state.height (the chain block number, the same field /api/stats reports, one indexed subquery);
the scene's counters read chain block (state.height), shards proven (proving.paid_shards_total, the node's count of paid
shard records, with the 10-minute count and the median lag in the note) and last lock (finality.latest_locked_index);
live blocks take the observer's own words (pending, included, excluded, proven, locked checkpoint, final to its left),
refreshed on every poll, with a legend in those words; the hero tile shows the chain block instead of the node's
held-block count; polling never stops (2 s while fresh, 10 s while off) and the off state is labelled "simulated preview ·
live feed unavailable" or "observer offline, last update N ago" with a note that the counters count simulated blocks.
Also found while verifying: the scene advanced a fixed 16 ms per frame, so it ran at double speed on 120 Hz displays;
it now uses the real frame time, capped at 50 ms.

/live had the same window bug in its "proven 0/16" counter; it now reads the observer's 10-minute truth (chain blocks
with every shard paid, of the chain blocks planned in 10 min) with the lag and the chain total in its title.

Verified against the live API through tools/site-serve.mjs in the built-in browser and headless Chromium:
chain block 140,489, shards proven 2,130, last lock #6,784; the failed-fetch state shown by blocking /api/live.
Screenshots: docs/plans/site-ui-3-shots/item0/ (1440 and 390, live and failed). Checks: identity grep 0 hits,
link check 708 links 0 broken, site/api tests 14 pass, site build clean.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 18:14:05 +00:00
igneum-labs
180af0f785 Site truth, 6 October 2026: the ledger's stated sentences merged, the bounty struck, draft (a) on the chip line, the measured prover tiers, the ledger page, the evidence page generated from its source, the live scene reading the live state
Branch site-truth-2026-10-06 = master 9519a95 + merge of ledger-text (the 45 conceded sentences of the 5 October close) + cherry-picks 6141e01, 8c5b02f (the bounty strikes) and 1a238bc (review round 4 reddit) + this commit. The hero chip line follows the owner's pick of 16:25 UTC (draft (a) of docs/plans/counter-asic-3-status.md section 6 with the owner's last sentence). Every number carries its source beside it. No em dashes. Site build, identity-check.sh (0 hits over 224 files) and the private-string sweep of the built pages pass.

Changed sentences, before and after (lines are master's where the sentence existed):

site/index.html:343 hero
  before: A custom chip gains under 2x, and the model is public.
  after:  The strongest recompute chip we can price, holding the whole 256 MiB cache on-die, reaches under 1x per chip against an RTX 5090. A memory-controller chip that stores the whole dataset reaches 1.2x per chip and, in our model, 5x to 9x per joule; the Ethash chips of this class reached 2.1x to 4.8x. The lever against it, program work in the latency shadow, is measured and in its gates: it brings the chip to about 2x. The model is public: the numbers.
  before: An NVIDIA card with 24 GB or more proves every block and gets paid for it; AMD and Apple cards mine.
  after:  Every NVIDIA card from 8 GB proves and is paid for it; 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). AMD and Apple cards mine.
site/index.html:372  before: miners active  after: vote keys active in 10 min (a card runs several)
site/index.html:400 and the chain scene script  before: the "proven" and "locked" counters counted the simulation while the scene carried the live label  after: in live mode the counters read the observer (proven = blocks in the window every shard of which is verified, "not active" while the proving layer is off; locked = locked checkpoints in the window) and the simulated shard sparks stop
site/index.html:484  before: One click. The card mines; an NVIDIA card with 24 GB proves too.  after: One click. The card mines; every NVIDIA card from 8 GB proves, 12 GB and up mine and prove.
site/index.html:492 and site/miner.html:266  before: (the app is still labelled Igneum Miner until 0.3.6)  after: (the app window still says Igneum Miner at 0.3.13)
site/litepaper.html:301 abstract  before: A custom chip gains under 2x, and the model is public; the claim is tested by paid independent cryptanalysis and the public benchmark.  after: draft (a) as on the hero, then the sources (chip-model-v3.md section 5; the Ethash rows of asic-resistance-history.md; Counter ASIC 3.0 item 8), then "The model is public; the claim is tested by paid independent cryptanalysis and the public benchmark."
site/litepaper.html:396  before: About one a second  after: 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 (the live page's hour count, 2,325 blocks)
site/litepaper.html:400  before: version 0.3.5; 0.3.6 staged  after: version 0.3.13 (6 Oct 2026); the app window still says Igneum Miner
site/litepaper.html:412  added after "not on maths or bandwidth.": Measured: an RTX 5090 hashes at 95 GB/s of useful 4-byte loads against 1,638 GB/s of sequential writes (engineering log, the RTX 5090 entries).
site/litepaper.html:424  before: It claims the gain is small, the response takes a week, and both are measured.  after: It states the gain its own model finds, the response takes a week, and both are measured.
site/litepaper.html:440 (vs RandomX, Useful work)  before: NVIDIA cards with 24 GB or more prove every block and sell proofs to other chains; AMD and Apple cards mine, ...  after: 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); they sell proofs to other chains. AMD and Apple cards mine, ...
site/litepaper.html:452  before: Proving needs an NVIDIA card with 24 GB or more (32 GB until the fee switch of 6 October 2026; ...). AMD and Apple cards mine. A prover for them lands when a zkVM ships one.  after: Proving: every NVIDIA card from 8 GB proves; 12 GB and up mine and prove; 24 GB on the stock server. Measured on eleven rented cards ...: the RTX 3060 (12 GB) mines at 23.78 MH/s and proves the v1 shard beside its miner at an 8.9 GB peak in 37.5 s; the RTX 4060 (8 GB) proves it alone at 7.4 GB in 18.4 s; the RTX 4090 (24 GB) proves it on the stock SP1 server in 5.6 s at 17.4 GB. The patched server that fits the smaller cards is not yet in the shipped app. AMD and Apple cards mine. A prover for them lands when a zkVM ships one.
site/litepaper.html:454  before: The old 12 GB gate on the roadmap is withdrawn until a prover build with a smaller floor is measured.  after: ... was withdrawn on 5 October until a prover build with a smaller floor was measured; on 6 October a patched server proved the same shard at 7.4 to 8.0 GB alone on eleven rented cards from the RTX 3060 to the RTX 5090 (the real-card table), so the gate returns as measured and the patched server is not yet in the shipped app.
site/litepaper.html:562 (Hardware)  before: 24 GB proves full shards (measured on a 32 GB card's allocation; a 24 GB card has not run it yet) and 32 GB mines and proves on one card, measured 5 October 2026 on this prover build (a 12 GB card does not prove on it: the GPU prover's floor is 13.9 GB).  after: 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).
site/litepaper.html:645 (Governance, admin keys)  appended: On the devnet the activation heights and one execution-state restart (6 October 2026) reach every node through the signed update manifest, so on the devnet the release key acts as the operator; the sentence above holds for mainnet consensus only once that path is closed, and the public testnet terms will say which parameters still travel that way.
site/litepaper.html, Questions miners ask  added: the entry "Don't ASICs make a chain safer?" (three parts and a five-row table; the rental row cites the fleet's bench entry that lands tonight and the 50-miner wave row reads "measurement tonight")
site/litepaper.html:733 (What Igneum does not claim, the chip item)  before: ... approximate; the claim is under 2x, the margin is stated on the numbers page, and the next lever is named there. No hash has stayed free of chips forever; Igneum does not claim to. Monero's seven years without a public chip are precedent, not proof.  after: ... approximate. The same model, drawn out to the chip that stores the dataset (6 October 2026): draft (a) with its sources. No hash has stayed free of chips forever; Igneum does not claim to. Monero's seven years without a public chip are precedent, not proof, and a small prize: they say nothing about the price of a chip with the 256 MB cache on its die, and that price is a cost model, not a measurement.
site/litepaper.html, the four bounty sentences (301, 424, 684, 686): struck as on ca2-coord 6141e01 and 8c5b02f
site/litepaper.html, the 45 sentences of the 5 October close: as on ledger-text a795b02 (merged)
site/miner.html:7, 13, 21 (meta)  before: and an NVIDIA card with 24 GB proves.  after: and every NVIDIA card from 8 GB proves.
site/miner.html:252  before: Install. Start. The card mines. An NVIDIA card with 24 GB proves too.  after: Install. Start. The card mines. Every NVIDIA card from 8 GB proves; 12 GB and up mine and prove.
site/miner.html:308  before: ... and, on an NVIDIA card with 24 GB or more, the prover. AMD and Apple cards mine;  after: ... and, on an NVIDIA card, the prover: every NVIDIA card from 8 GB proves; 12 GB and up mine and prove; 24 GB on the stock server (eleven rented cards, ...); the patched server for the smaller cards is not yet in the shipped app. AMD and Apple cards mine;
site/evidence.html  before: hand-kept, "30 claims · 4 Oct 2026", row 21 "unwritten"  after: generated by site/build.mjs from docs/evidence.md (31 rows, the counts, the date), scrubbed as /bench is
docs/evidence.md row 17  before: The chip resistance target: a chip gains under 2x over a GPU  after: The chip resistance claim: the strongest recompute chip under 1x per chip against an RTX 5090; the stored-dataset chip 1.2x per chip and 5x to 9x per joule in the model (2.1x to 4.8x by the Ethash precedent); the latency-shadow lever, measured and in its gates, brings it to about 2x
docs/evidence.md  the card-lifetime row numbered 22 under "What moved on 5 October" becomes row 31 of the table; "Hetzner VMs" becomes "cloud VMs", "recommended to the project lead" becomes "recommended to the owner"
docs/fud-ledger.md, docs/fud-fixes.md  taken from fud-close c6b0bad (167 entries); two lines reworded for the identity check (the log key, the log intake)
site/ledger.html  new: every ledger entry with the critic's words, what was done, the status and the date, the count table on top (53 conceded, 54 fixed or built, 27 closed by rule or decided, 13 answered with evidence, 13 by design, 7 open); generated by tools/ledger-page.mjs
site/vercel.json  the /ledger redirect removed
site/partials/footer.html  "Ledger: every criticism" added under Read (so every page's footer changed)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 16:12:30 +00:00
igneum-labs
84d6d28253 Explorer pages: /explorer, /block/<hash|number>, /address/<addr>, the search router, a local preview server, CI
Fed by /api/explorer from the observer's tables. Latest blocks (hash, number, DAA, blue score, miner, txs, proof
records, time); a block's header, parents, children, mergeset, coinbase outputs, EVM transactions, shards, checkpoint
and certificate; an address's blocks, what they earned, vote keys and balance (eth_getBalance when EXPLORER_EVM_RPC is
set). Same tokens as live.html. vercel.json rewrites /block/:id and /address/:addr; the footer links the explorer; the
link checker skips template literals and resolves /api/<name> to its function. node tools/site-serve.mjs previews the
site with the functions in-process.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 19:35:40 +00:00
igneum-labs
8b4b1e500a Merge origin/master (974805b) into release-0.3.9: fud-a round 6, the entity imprint, the conflict-marker check; docs/bench-log.md both entries, the site taken from master and rebuilt (519 links, 0 broken) 2026-10-05 16:48:00 +00:00
igneum-labs
02b19ed761 Entity, contact route and repository date: Igneum Labs LTD imprint in the footer, litepaper and miner fee, hello@igneum.network as the flaw route, repository public at the public testnet
Footer partial: imprint line with the registered address and the mailbox; Report a flaw mails hello@igneum.network with the spec issues as the second route. Litepaper: Who are you names the entity that ships the software, the team is pseudonymous with no team page, the ledger and the benchmark source are public with the repository at the public testnet, the last paragraph gives the mailbox and the address. Miner: the dev fee goes to Igneum Labs LTD. Evidence (md and page): repository private until the public testnet. Trademark FILING.md: applicant Igneum Labs LTD at the DIFC address. Identity check: the ledger and fixes file join the export list; the forbidden list notes that the registered address is allowed. Site rebuilt (bench page and journey picked up the txgen log entry).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:41:38 +00:00
igneum-labs
3a96e7371c Merge fee-switch into release-0.3.9: the prover mirrors both fee tables and fees_v1_activation_daa (new pinned guest), the devnet runbook for H = 210,000
Conflicts: proving/igneum-prove/export/src/main.rs (the two use lines: master's ensure kept, fee-switch's FeeParams and FeeSchedule taken, SHARD_PROVING_GAS_BUDGET gone), docs/bench-log.md (both entries), docs/testnet/README.md (both sentences), site/index.html and site/journey.json (master's, then node site/build.mjs: 518 links, 0 broken).
2026-10-05 16:28:21 +00:00
igneum-labs
24aaa0e254 Prover mirrors the fee switch: both tables and fees_v1_activation_daa in the shard input, guest re-pinned, devnet runbook for H = 210,000
igneum-prove-core carries the node's fees.rs (PgasTable, FeeParams PROTOTYPE and CALIBRATED_V1,
FeeSchedule::at); the shard input and every fixture carry the schedule and the block's DAA score; the executor
reads the set at that score, raises the base fees to its floors and meters with its intrinsic, B_p and modexp
entry, as the node's execute_segment does. The 328-byte statement is unchanged: the node's native veto pins the
schedule (a new layout would be a consensus change for every node). Exporter: schedule and daaScore from the
dump (gen.mjs writes them), per-segment switch on replay, S_p from the set. Fixtures from one simnet chain across
the switch at DAA 800: fees-switch-prototype (block 51), fees-v1-shards2 (351), fees-v1-shards3 (355); 358
segments replayed, every state root the node's. Host tests on both sides. Guest re-pinned: shard
0x2b1a81cb..., aggregator 0x474678f3...; pinned-guests-check passes.

Node fork 2b6d23ef unchanged (igneum-exec tests 11 passed). Digest for the override with
fees_v1_activation_daa 210000: ab8847da538dead1dc10e046dfaadab3c1c35928e3748810c4e050d4a886087a.
Runbook docs/plans/fee-switch-devnet.md; infra/devnet/restart-hand-nodes.sh and restart-seed.sh take the
override object (the hand nodes and the seed run 20139145 today and must move to 2b6d23ef first). One line on
the live page, spec 5.11, the testnet README, the floor analysis, the bench log and the journey.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:24:35 +00:00
igneum-labs
a015f67eac Merge public-release: token-free public downloads, site buttons with live versions, HiveOS 0.3.8 package, the faucet (prepared)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

# Conflicts:
#	site/index.html
#	site/miner.html
#	site/wallet.html
2026-10-05 16:01:08 +00:00
igneum-labs
3551069c51 Public testnet launch, the public side: dl/public downloads path, site download buttons, HiveOS package, faucet
Downloads: packaging/ota/publish-public.sh publishes the current installers, the HiveOS package and the two signed
manifests into dl/public/ with no token in any URL, writes the four /public/ aliases as vercel.json rewrites and an
unsigned index for the site; publish-manifest.sh --public and ship-app.mjs --public run it on every release (dry run
and self-test cover it). Nothing removed from the token folders.

Site: the miner and wallet buttons link the public aliases and show the version and size from the index, read at
build time (site/downloads.json is the offline snapshot); TESTNET_OPEN in build.mjs drops the "Public testnet: not yet
open" line on the go; the HiveOS Flight Sheet install line on the miner page; /faucet page.

HiveOS: igneum-hive-0.3.8.tar.gz from the 0.3.8 node (2b6d23ef, PC build job) and the zig-built Linux workers.

Faucet: site/api/faucet.mjs (10 IGN per address and per IP per day, Neon table faucet_grants, EIP-1559 transfer signed
by site/lib/eth.mjs with no dependencies: keccak, RLP, secp256k1 with RFC 6979), FAUCET_KEY and FAUCET_RPC from the
Vercel env only; 15 unit tests with a fake database and node, run in CI.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 15:59:31 +00:00
igneum-labs
795d7c3b55 site: honest buttons and labels for the conceded ledger items (X1, X2, X7, X8, X10, E5, G4, C2); partials rebuilt into every page
Home: hero and job-card buttons say what exists; the dev fee named beside the emission split; 0 admin keys in consensus; the log's day-one note. Miner and wallet pages: downloads open at the public testnet, the devnet is private. Nav CTA is The miner; footer gets the issues route. Journey phase 6 drops listings.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 15:39:31 +00:00
igneum-labs
ed669e7024 Merge origin/master (63dff3e) into release-0.3.6: site pages, litepaper v0.2, the PCs build rule; the testnet-prep MetaMask page moves to /metamask (master's /wallet is the product page), the testnet terms card stays on the home page 2026-10-05 09:31:35 +00:00
igneum-labs
950ab3569f Merge live-pin: a tapped block's details stay pinned on the live page until the reader lets go
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:56:42 +00:00
igneum-labs
04b85b9cd7 site: live page pins a tapped block until the reader lets it go
A tap or click on a block or a shard cell now pins its details. The panel stays until a tap or click lands
anywhere else, Escape, the close control, or the block scrolls out of the strip (then a 200 ms fade, no snap).
Another block switches the pin. The pinned block carries a molten ring. The pinned panel sits at a fixed
spot at the top left of the strip, so new blocks never move it, and shows a PINNED label and a 32 px close
control for a thumb.

Hover is unchanged on pointer devices: another block shows its floating panel for as long as the pointer is on
it, then the panel returns to the pinned block. Hover never clears a pin.

Pointer events only: one pointer, down to up, under 10 px of travel counts as a tap, so a scroll on a phone
never pins, and a touch tap fires once (the canvas ignores click). A touch gets a wider hit radius than a
pointer; the hover radius is as before.

Verified with real mouse, touch and key input through CDP on the cached headless Chromium against the local
page fed by igneum.network/api/live: 20 of 20 checks at 1200 px and 375 px, no console errors.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:55:50 +00:00
igneum-labs
9ad376d0e1 site: /miner and /wallet pages, product summaries with real screenshots on the home page, the miner named Ember in one place
Pages
- site/miner.html (/miner): hero with the live dashboard, "Hash, prove, get paid", every feature in six groups with one
  line each (one click and GPU detection, one client with identities and the hourly swap table, signed updates at a safe
  moment, variant racing / fleet tuning / efficiency sweep / latency / remote signed jobs, watchdog and clock check with
  the recoveries table, the log and the bench table), "Why Igneum Ember stays ahead" (the six levers of 4 Oct 2026 with
  their measured state; the latency row labelled approximate, from the 0.3.6 plan), the dev fee section with the exact
  wording of docs/design/miner-dev-fee.md, Get the miner. Every number links to its /bench entry.
- site/wallet.html (/wallet): hero with the wallet window, the three finality states with the verified-final transaction,
  the four checks the wallet makes, features (create or import with Argon2id + XChaCha20-Poly1305, send with the fee
  shown, QR drawn locally, history with rewards, node source order, MetaMask export), the timed first run on a test
  network (5 Oct 2026, wallet-v1 log entry), Get the wallet.
- site/index.html: the miner and wallet sections become summaries, each with a framed screenshot, pills and a Read more
  link; #mine and #wallet anchors kept.
- site/partials/nav.html: Miner and Wallet entries, the CTA to /miner#get; the Miners entry goes (the bench page is
  linked from /miner, the footer and the Miner entry marks it current). The bar needs 941 px for eight items on one
  line, so the menu now applies up to 940 px (head.html) and labels never wrap.
- site/partials/footer.html: a Run column (the miner, the wallet, the GPU bench table, the dev fee).
- site/build.mjs: PRODUCT table, the one place the miner's name lives (full "Igneum Ember", name "Ember", app "Igneum
  Miner" for the bundle and window, caption for screenshots); every <span data-product> is stamped at build. miner.html
  and wallet.html registered; /miners marks the Miner nav entry; journey entries lose a leading comma left by a
  stripped bracket.

Visuals (site/img, WebP, 2x, under 101 KB each)
- miner-dashboard.webp: real screenshot of the miner app on this Mac (live devnet, Apple M5 Max), footer with the host
  name and the address cropped, the machine id removed before capture.
- wallet-home.webp and wallet-final.webp: real screenshots of Igneum Wallet v1 (release build from wallet-v1) on a
  private test network driven by tools/wallet-testnet/run.mjs; the throwaway addresses are replaced by example strings.
- Drawn in CSS: the device frames, the three finality states, the hash / prove / get paid steps, the dev-fee switch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 08:46:00 +00:00
igneum-labs
fc137257ed Merge origin/testnet-adopt (3be4501) into release-0.3.6: testnet identity, adopted fee table (spec 05 section 5.11 next to the security budget 5.10), G13 signed inputs; plan documents combined, site rebuilt 2026-10-05 08:32:40 +00:00
igneum-labs
eadb6c9352 site: Igneum Wallet on the home page (section, buttons, nav link on every page)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 07:54:01 +00:00
igneum-labs
fd07ef569f Merge origin/testnet-prep (28f6ccc) into testnet-adopt: testnet identity, fee floors and pgas table adopted 5 October 2026, G13 signed build inputs, release-0.3.6 plan
Owner's decision, 5 October 2026: the proposed testnet identity (docs/testnet/README.md) and the proposed fee floors
and prover-gas table (docs/analysis/base-fee-floor.md, spec 05 section 5.10) are adopted as proposed. The three
documents now say "adopted 5 October 2026" with the sign-off noted and the per-network rule written in: the testnet
and the mainnet carry calibrated v1 from genesis; the devnet and the simnet keep the prototype set until the
fees_v1_activation_daa height switch (fork branch release-0.3.6) moves them.

Conflicts (generated site files): index.html keeps the 0.3.5 dev-fee sentence and testnet-prep's testnet-terms card;
litepaper.html keeps the 0.3.5 two-paragraph dev-fee text and testnet-prep's MetaMask paragraph; journey.json keeps
the 0.3.5 feed (newest 40); sitemap.xml keeps /miners and /wallet. Site rebuilt with node site/build.mjs.

Also: infra/fast-time/override-60x.json carries fees_v1_activation_daa 0 (the fork's fast-time test wants every
override field); docs/plans/release-0.3.6.md (the inputs push must run from this tree before the workflow verifies
the signature; the devnet rollout of the fee floor as a height switch; the morning order).

Checks: node site/build.mjs; link-check 324 links 0 broken; check-workflow-shell 0 findings; test-inputs-signing.sh
16 of 16 with the signer built from this tree; bash -n on the four shell files; the PowerShell parse rule at the
0.3.5 baseline (3 hits, unchanged).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 07:44:22 +00:00
igneum-labs
7210fd4683 Public-testnet readiness: fee floors and pgas table analysis, testnet identity doc, G14 rewrite plan with dry run, G13 signed build inputs, testnet terms, MetaMask page
- docs/analysis/base-fee-floor.md: the base-fee floors (100 gwei per gas, 10,000 gwei per pgas), B_p 120,000 and
  S_p 30,000 pgas, the calibrated v1 pgas table (intrinsic 300, modexp 10 + 1 per 10 bytes) from the measured 44
  cycles per EVM gas and 9 cycles per pgas, with the arithmetic and a stated price assumption; spec 05 section 5.10.
  The parameters are implemented on the node fork branch testnet-params (vendor, not in this repository).
- docs/testnet/README.md: igneum-testnet-1 (chain id 4462, ports 268xx, frozen genesis 2026-10-05T00:00:00Z with
  its message and hash, mainnet finality window, every switch from genesis, no override file) and the reset policy.
  Every value proposed, for the morning sign-off.
- docs/plans/history-rewrite.md: G14, the exact git-filter-repo pass, the dry run on a throwaway mirror clone (0
  identity hits, 0 secrets, every stamp +0000, 312 commits), what breaks and the order for the morning.
- G13: app/igneum-app/src/inputs.rs and igneum-ota-sign sign-inputs / verify-inputs; push-inputs.sh signs
  payload-inputs.json with the OTA key and pins the node commit (packaging/windows/node-source.pin);
  windows.yml verifies the signature with the embedded key, the zip, every file and the pin before building and
  uploads the verified record; fetch-ci-artifacts.sh signs the update manifest only with --sign-manifest <run-id>
  after re-verifying that run's inputs. test-inputs-signing.sh (16 cases) and tools/ci/check-workflow-shell.mjs.
- site: testnet terms on the download section, wallet.html (wallet_addEthereumChain, chain ids 4462/4463, IGN, 18
  decimals), the litepaper's app paragraph (MetaMask and the coming Igneum Wallet, no hardware wallet) and the
  miner fee sentence (no protocol fee; optional 1% in the miner software, off with one flag). node site/build.mjs
  and the link check pass.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 22:54:56 +00:00
igneum-labs
cfb937b42d Merge origin/miner-reliability into release-0.3.5
Conflicts resolved keeping both: engine.rs carries the sweep state (miner-eff) and the node watchdog (reliability);
the STATUS line goes through watchdog::parse_status and still feeds the sweep's rate sample; main.rs declares both
modules; bench-log.md keeps both entries. site/build.mjs keeps master's partial-injected pages and adds the /miners
bench table through the same page() with active: 'miners'; the Miners link is in site/partials/nav.html; sitemap
gains /miners; every generated page rebuilt with node site/build.mjs.
2026-10-04 22:25:10 +00:00
igneum-labs
970a51b57a Site polish: one header and footer from partials on every page, litepaper section router fixed, self-hosted fonts, 404 page, live page idle cost
Header: site/partials/nav.html, head.html, footer.html, injected by site/build.mjs between markers in every page (the bench template too) with the active link marked; the master mark in its black square, the wordmark, Litepaper, Live devnet, Engineering log, Evidence, GitHub and the miner button, in that order everywhere; one menu script (closes on a link, a tap outside, Escape with focus back on the button, a resize past 900 px); a skip link; one focus ring and one reduced-motion rule.

Litepaper: the hash routed by a click delegate and popstate instead of the browser's fragment jump. Root cause of the tabs fault: show() scrolled to the top of the article, never to the section; in whole-paper mode the fragment jump landed on the section and the smooth scroll then dragged the reader back to the Abstract; in one-section mode a deep link scrolled while the section was still display:none and landed on the cover. Now: every section and all 29 subsection headings reachable by URL in both modes, scroll-margin from the measured bar height (nav, plus the contents row on a phone), focus moved to the heading, a re-aim after a late font batch, mode buttons stacked in the sidebar.

Pages: homepage headline capped at 9cqw so it is two lines at 390 and 1440 (was four with "fire." alone), journey inlined by the build (no fetch, no shift), dates as "4 Oct 2026"; live page legend no longer forces 420 px of width at 390, the hash-rate unit as small mono, idle redraw at 30/s with a 1.5x backing store (0.7 to 1.2% of one core idle in Chrome for Testing, taken under load), the proving line wraps on a phone; evidence sort headings are buttons, chips carry aria-pressed, a scroll hint under 1,140 px; bench contents in a sticky scroll box, og.png?v=3; 404.html; sitemap with /evidence; vercel.json caches fonts a year and images a day.

Fonts: eight latin woff2 files in site/fonts (139 KB for all, 118 KB a typical page), preloaded first-paint faces, fallback faces with size-adjust and ascent overrides from the font tables; every page lost its render-blocking fonts.googleapis.com stylesheet and the gstatic origin.

HTML per page before to after (gzip): / 17,265 to 21,810 B; /litepaper 20,556 to 24,957; /live 15,640 to 17,777; /evidence 18,899 to 22,493; /bench 94,723 to 98,289. Third-party requests before to after: 3 to 1 (jsdelivr, light client), 1 to 0, 3 to 0, 1 to 0, 1 to 0. Lighthouse before and after is queued under the measure lock (held by reliability runs since 19:16Z, load average 258) and recorded in docs/design/site-polish-2026-10-04.md when it runs.

Checks: node site/build.mjs, tools/ci/link-check.mjs (246 links, 0 broken), identity grep, and a Chrome for Testing run over every page at 390, 768 and 1440 (no overflow, no console errors, menu, router in both modes, deep links on reload, keyboard).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 20:57:20 +00:00
igneum-labs
a601321481 App engine: watchdog per card and per node, WORKER FAULT and mismatched= read from the miner; public GPU bench table and the reliability test harness
Review round 4 X21 and the project lead's levers 5 and 6 (4 October 2026 evening):
- src/watchdog.rs: CardWatch (no status line for 90 s, or hash rate 0 for 60 s while the node is synced: one
  restart, then the card is marked faulted with the reason in the UI and the log; the miner's own worker restarts
  suspend both rules until ready, so there are no double restarts; exit 43 counts as a watchdog restart) and
  NodeWatch (our node silent for 120 s is restarted in-process through the restart kind the remote jobs use, with a
  growing delay). State machines with no clock; 11 unit tests replay recorded STATUS and WORKER FAULT lines.
- engine.rs reads STATUS mismatched=, faults= and the WORKER FAULT lines onto the card (faults, mismatched, message);
  a faulted card is not restarted until the user changes its settings or resumes mining; other cards keep mining.
- site/miners.html (build.mjs, scrubbed like /bench, rows from site/miner-bench.json): card, generator version, best
  MH/s, MH per watt where measured, miner version, date, source, measured by the team or reported by the fleet. In the
  navigation beside the engineering log on every page and in the sitemap. One line says there is no other miner to
  compare with.
- tools/reliability: fake-worker.mjs (the serve protocol, misbehaving on command), run.mjs (miner guards on a private
  test network, ports 29950+) and app-run.mjs (the app watchdog end to end, ports 29960+).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 19:20:49 +00:00
igneum-labs
a164b1e972 Site: preview image URLs bumped to v3 so chat apps refetch the square mark
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 18:48:29 +00:00
igneum-labs
696f8d2330 Live page: the ?window=300 capture with a paid shard cell and its tooltip; header counts and the ingest keep-window follow the target scale (the 8 px/s floor was the adaptive scale's); counts right on the first poll; lock label backed; record rotation 80 blocks per tick
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 17:43:26 +00:00
igneum-labs
771e00c3e1 Live page: shards per block (proving v0), three strips on one time axis (blocks, finality bar, proving), observer proof feed, hero glint
Observer (tools/observer/observer.mjs): reads the execution layer's JSON-RPC of a node on the proving build
(IGNEUM_EVM_RPC, default the Mac app's node 26800): every chain block's shard plan as it joins the chain
(igneum_getShardPlan by blockHash, one live_proofs row per shard, planned), the proof records of the chain
blocks of the last 10 minutes polled in rotation (igneum_getProofRecords, four in flight, 40 blocks per tick
while active, 10 before activation): proving (in the pool), verified (SP1 proof verified, or carried and checked
by consensus), paid (a carrying segment paid it), with the prover's id8, the carrier, lag in DAA and the payout.
live_state.proving = {supported, active, activation_daa, tip_daa, verifier, pool, blocks_10m,
blocks_fully_proven_10m, shards_proven_10m, shards_paid_10m, median_proof_lag_s, provers_10m}. A node without
the RPCs gives supported false (rechecked every 5 min); an unreachable endpoint is retried every 20 s. Events:
proving (activation, first paid shard), prover_seen. Additive schema (live_proofs, live_state.proving).

API (site/api/live.mjs): proving, and per block shards: [{i, n, state, prover, lag, payout (IGN), pgas}] and
proven; ?window=N (30 to 300 s) for the page's diagnostic long view; LIVE_TABLE_PREFIX reads a test observer's
tables.

Live page (site/live.html), the design change of 4 Oct 2026: three thin strips sharing one time axis, newest at
the right. BLOCKS keeps the per-miner lanes, chain path, blue/red/pending colouring, arrival glow and tooltips;
the lock ring, dashed lock line and final band leave it. FINALITY is an 18 px bar: ember wash = final (up to the
newest locked checkpoint on screen), molten tick = locked checkpoint, faint = proposed, one label at the newest
lock ("locked #522, 12 s ago"); while finality is not active it reads "finality paused: N% of weight silent" and
nothing else (R4.6.3). PROVING shows one cell per shard under each chain block, outline (planned), molten
(proving), prover colour (verified), tick (paid), a dashed "proofs land N s behind the tip" line, or the one
honest line before activation ("Proving layer: not yet activated on this devnet; activation at DAA N" / "node
without proving"). Header stats: on screen, chain, identities, last lock, proven. Legend: one line per strip.
Hover and tap tooltips on blocks and cells (block, shard, prover, lag, payout). Lanes snap on resize (they used
to ease from a zero-height layout). Phone width, no horizontal scroll; draw 0.6 ms avg, 1 ms max with 110 blocks
on screen (playwright, 1280 px).

Hero (site/index.html): a faint second glint behind a real block once every shard of it is verified, only while
the proving layer is active; pace and sampling untouched.

Verified on the private 3-node proving network (tools/proving-v0/run.mjs --network-only, activation 60) with a
CPU prover loop signing as v0/v1/v2: records relayed, verified on node 0, carried and paid (block 155 by 405,
lag 259 DAA, 0.634 IGN); screenshots in docs/design/live-proving (devnet before activation at 1280 and 375 px,
test network active, the ?window=300 view with paid cells). The live devnet shows the "not yet activated;
activation not set" line once the observer runs this build.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 17:39:28 +00:00
igneum-labs
f14cf0ffbf Share images: the master mark replaces the ringed coin on every og image; og.png (was a 404) added; ?v=2 cache bust
make-icons.py make_social(): og-small.png (256 square, the compact card index/live/litepaper declare), og-square.png
(1024), og-coin.png and og.png (1200x630: mark left, IGNEUM wordmark, tagline, subline; same layout as before, no ring,
no glow). bench.html, evidence.html and build.mjs referenced /og.png, which did not exist; they now get the 1200x630 card
with width/height 1200x630 and twitter:card summary_large_image. Every og:image and twitter:image carries ?v=2 so
Slack, X and iMessage refetch. brand/profile: github-social-1280x640.png (repository social preview) and
vercel-avatar-512.png. bench.html edited by hand for the meta only (a build.mjs run would publish uncommitted log entries).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 17:39:05 +00:00
igneum-labs
344893ee11 Observer: decoupled ingest, lag metric, per-minute by header time, feed self-check, restart loop
After the 4 Oct 2026 stall (no block stored from 11:57 to 13:15 UTC, then 7,022
blocks in two minutes). Notifications only enqueue; a drain loop handles them
in bounded batches. Block flush, colour marking and certificate work each run
on their own timer and never wait on one another. Mergesets come from the
notification's verbose data (bounded cache); getBlock only on a miss, four at
a time. live_state gains observer_lag_s and queue_depth; the API serves them;
the page shows "observer N s behind" past 30 s instead of waiting for the
first block. blocks_per_minute and blocks_60s are bucketed by the block's own
timestamp and reseeded from the table on start, so a catch-up fills past
minutes instead of painting a spike. If no blockAdded arrives for 60 s while
the node's block_count advances, the observer resubscribes; after two failed
attempts it exits 2 and tools/observer/run.sh restarts it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:26:46 +00:00