igneum/tools/ci/ledger-text-check.mjs
igneum-labs 5db7932177 Public text: the era draw and the reserve are schedule changes, not chip defences; the FPGA ceiling is unmeasured; the stake sentence; the proving arithmetic (Horizon lanes 2 and 7)
From the Horizon lane analyses of 6 October 2026 (docs/analysis/horizon/algorithm.md sections 5.1, 5.4 and 8;
docs/analysis/horizon/frontier.md sections 3.11, 4.1 and item I13; both land with the lane's own commit).
(1) Wherever the litepaper or the home page implied that the hourly program, the era draw or the instruction reserve
defeat a chip by surprise (the hero SVG line, the home hourly-program note, the Mining section's three ideas, the
"Every six months" row, the "A chip is impossible" item), the text now says what holds: they are automatic schedule
changes against fixed datapaths and against human forks; a chip wired for one program is useless; against the chip
that stores the dataset every drawn parameter is firmware and everything it needs is public at genesis, so the defence
is the latency-shadow work (class v4) and the price per joule. Ledger M32.
(2) docs/analysis/chip-model-v3.md section 5.3: the HBM activate-bound ceiling (8 per 12 ns, 10.7 G reads/s a stack)
is marked UNMEASURED beside the JEDEC HBM2 figure (tFAW 28 ns, 4 activates: 2.3 G), and the public FPGA line carries
only the measured row (Shuhai, FCCM 2020: 2.4 G reads/s, 0.30x to 0.39x of the RTX 5090 per watt) until an AWS F2
hour measures the ceiling. Ledger M33.
(3) The finality section's "What is not here" paragraph and the glance table's Finality row carry, verbatim: "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." Ledger F26.
(4) "For miners", under the three-streams table: all of Ethereum L1's proving is about USD 36 a day at the September
2026 tracker cost (a secondary source) against about USD 13,700 a day of year-1 emission at USD 0.005 per IGN (the
price an input, not a forecast), so external proving is a small second income at launch and the lottery pays the
bills. Ledger E19.
docs/fud-ledger.md gains the four rows (Conceded, stated, 6 October 2026); site/ledger.html regenerated (171 entries);
tools/ci/ledger-text-check.mjs carries the five new stated sentences (48 sentences, 0 missing).

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

70 lines
5 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': [
['E5', 'The one payment to the project is the Ember software’s optional 1% dev fee', 'The one payment to the project is the Ember software\'s optional 1% dev fee'],
['G4', 'admin keys in consensus'],
['C2', 'since 2019 (approximate)'],
['M32', 'a chip wired for one program is useless'],
['X2', 'Public testnet: not yet open; the devnet build is here for people who want to look'],
['X3', 'Live rows arrive with the public testnet, August 2027'],
['X7', 'hello@igneum.network'],
['X8', 'No listing is arranged, promised or sought by the project'],
],
'litepaper.html': [
['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 marginal cost is close to power'],
['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'],
['C2', 'precedent, not proof'],
['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);