igneum/tools/ci/ledger-text-check.mjs
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

86 lines
6.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Ledger text check: every sentence docs/fud-ledger.md requires on a public page must appear on that page verbatim
// (docs/plans/site-ui-3.md step 6). The list below is the ledger's stated-sentence set as audited on 6 October 2026
// (docs/plans/site-ui-3-ticklist.md); a new ledger row that states a sentence adds a line here in the same commit.
// node tools/ci/ledger-text-check.mjs exit 1 listing every missing sentence
import { readFileSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
const site = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'site');
const REQUIRED = {
'index.html': [
// 7 Oct 2026, morning: the one-screen home page of 62bfaea is back on the owner's word (the scene, three facts, the
// downloads, one line to the ledger). The rows it no longer states (G4, C2, X8, X34) stand on the litepaper, listed below.
['E5', 'The one payment to the project is the Ember software\u2019s optional 1% dev fee', 'The one payment to the project is the Ember software\'s optional 1% dev fee'],
['X2', 'Public testnet: not yet open; the devnet build is here for people who want to look'],
['X7', 'hello@igneum.network'],
['X31', 'The public testnet is weeks away: three seed nodes and the public RPC are up, and it opens when the go checklist closes.'],
// 7 Oct 2026, 14:3x: the chip line of docs/plans/counter-asic-3-public-text-2026-10-07.md (the X9 label now lives on the litepaper)
['X35', 'class v4, now on the vote, brings that to 2.1x to 3.9x'],
],
'litepaper.html': [
['X3', 'Live rows arrive with the public testnet.'],
['G4', 'admin keys in consensus'],
['X8', 'No listing is arranged, promised or sought by the project'],
['X31', 'The public testnet is weeks away: three seed nodes and the public RPC are up, and it opens when the go checklist closes.'],
['C2', '2019 (approximate)'],
['X34', 'was withdrawn in mid-May 2026 before any unit shipped; RandomX 2.0 shipped on 25 March 2026'],
['X36', 'Bitmain opened Antminer X9 pre-orders on 26 December 2025 for July 2026 delivery, then withdrew the product in mid-May 2026 and refunded buyers before any unit shipped; none has been independently benchmarked.'],
['X35', 'class v4, now on the vote, brings that to 2.1x to 3.9x'],
['X35', '3.9x with the core Bitmain claimed for its Antminer X9 (k about 0.33), a product withdrawn before any unit shipped'],
['X36', 'the X9 figure claimed, never measured'],
['M34', 'The work that waits can grow.'],
['M2', 'computing items on the fly runs 4.8x slower than loading them'],
['M4', 'ProgPoW, as KAWPOW on Ravencoin since 2020'],
['M7', 'The hash is a lottery, not a general-purpose cryptographic hash'],
['M7', 'no analysis of the lottery properties exists yet'],
['M10', 'an RTX 5090 hashes at 95 GB/s of useful 4-byte loads against 1,638 GB/s of sequential writes'],
['M13', 'Macs mine too, at about a fifth of a flagship card'],
['M32', 'every drawn parameter is firmware'],
['M32', 'the defence against it is the latency-shadow work (class v4) and the price per joule, not the schedule'],
['F26', 'No coin is staked. The only thing at stake is 30 days of public work: a vote key’s weight is its blue blocks over the window, and equivocation strips it for 30 days', 'No coin is staked. The only thing at stake is 30 days of public work: a vote key\'s weight is its blue blocks over the window, and equivocation strips it for 30 days'],
['E19', 'external proving is a small second income at launch and the lottery pays the bills'],
['F1', 'In the chain’s first 30 days no checkpoint locks at all', 'In the chain\'s first 30 days no checkpoint locks at all'],
['F5', 'An attacker matching the honest network needs twenty days for a third and never reaches two thirds'],
['F10', 'Pools carry their hashers’ votes, so vote concentration equals pool concentration, and it is public', 'Pools carry their hashers\' votes, so vote concentration equals pool concentration, and it is public'],
['P3', 'the wrapping cost is a phase two measurement'],
['P4', 'The consensus proof that makes the checkpoint self-verifying is phase two'],
['P6', 'a supplier whose electricity cost is close to power and whose price is the subsidy it forgoes'],
['E20', 'the price a prover must charge is the subsidy it forgoes while it proves, which falls as one over network hash'],
['E21', 'default-on, switchable, 1 percent of the producer share'],
['G15', '60 percent of blue blocks over two weeks for a parameter genesis leaves open, 90 percent for an upgrade (new code), and 95 percent with a floor height for a class change'],
['P24', 'a block producer could claim shard pay with a false proof'],
['P25', 'unclaimed pool credit is today stranded in the escrow'],
['P7', 'Writing new code, including an emergency fix to the proof system, is the one thing that takes a person'],
['P10', 'settlement in IGN with a 10% burn follows'],
['P14', 'pays about 7,300 IGN a year'],
['E5', 'No fund, no foundation, no fee to the team'],
['E5', '1 block in 100 pays the project'],
['E6', 'The schedule is a bet, not a measurement'],
['G1', 'reviewers will be named and paid before gate 3'],
['G2', 'one founder with AI systems'],
['G3', 'there is no team page'],
['G4', 'no admin keys in consensus'],
['G6', 'Pools can be bypassed on transaction choice'],
['X34', 'About seven years without a shipped chip; the one announced, Bitmain'],
['C3', 'Chips arrived, as on Kaspa, whose hash was designed to welcome them'],
['C3', 'Kaspa has run in production since 2021 (approximate)'],
['C5', 'Inclusion is not confirmation on either chain'],
['C6', 'the combination is the risk the gates price'],
['C6', 'Dates slip. Gates do not.'],
['C8', 'Ergo, Ravencoin and Conflux still mine on GPUs at a fraction of the 2022 fleet (approximate)'],
['C10', 'Boundless provers post ZKC and Succinct provers stake PROVE (approximate'],
['C11', 'We know of no chain that combines them'],
['L2', 'Nearly a quarter of all supply is mined in the first year and half in the first two'],
['X1', 'The node, the miner and the wallet are in a private repository until the public testnet'],
['X7', 'hello@igneum.network'],
['X8', 'No listing is arranged, promised or sought by the project'],
],
};
const norm = s => s.replace(/\s+/g, ' ').replace(/&#39;|&apos;/g, '\'').replace(/&quot;/g, '"').replace(/&amp;/g, '&');
let missing = 0, n = 0;
for (const [page, rows] of Object.entries(REQUIRED)) {
const html = norm(readFileSync(join(site, page), 'utf8'));
for (const [row, ...variants] of rows) { n++; if (!variants.some(v => html.includes(norm(v)))) { missing++; console.error(`ledger text: ${page} lacks ${row}: "${variants[0]}"`); } }
}
console.log(`ledger text check: ${n} sentences, ${missing} missing`);
process.exit(missing ? 1 : 0);