Ledger close, part 3: the status-word rule (the current status is the first sentence of the last Status paragraph, the previous follows "Was:", the paragraph starts with one of the six statuses' words, never a date; export --check fails any other entry, known-failed first), tools/ledger/README.md and the ledger header carry it; the Counter ASIC lane's eighth hot set in AP-F8-1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
dc40f3fd76
commit
a9d53a44db
3 changed files with 32 additions and 3 deletions
|
|
@ -8,7 +8,7 @@ Every serious criticism or attack we expect against Igneum, written the way it w
|
|||
|
||||
The ledger exists because the only way a design survives public scrutiny is for every pick to have been answered in public before anyone else makes it. It is written against litepaper v0.1 and the design document as of 3 October 2026. Entries are never deleted. When the status of an entry changes, the old status stays in the history of this file.
|
||||
|
||||
Statuses used:
|
||||
Statuses used (the rule since 7 October 2026, night: an entry's current status is the first sentence of its last `Status:` paragraph, the previous one follows "Was:", and the paragraph starts with one of the six statuses' words, never with a date; `tools/ledger/export-public.mjs --check` fails any entry that does not, and `tools/ledger/README.md` carries the rule):
|
||||
|
||||
| Status | Meaning |
|
||||
|---|---|
|
||||
|
|
@ -2499,7 +2499,7 @@ F8's 64-seed gate on 017e7037 (the attack-pass lane, box 2, last seed 16:00:20 U
|
|||
|
||||
Owed (recorded, not run, by the founder's word): G2 (the CPU verifier on 1,024 hashes per card) on the amended stream; G3 (the Metal fuzz, edge, stats and determinism runs) on the amended stream; the hash-rate ladder re-measure on the M5 Max and the RTX 5090 (the amendment changes the base program's source draws, not the op mix or the load count, so the latency-bound rows of `docs/analysis/latency-shadow-2026-10-06.md` are expected to hold within their spread; unmeasured); AMD (the RX 9070 XT, PC 1); the 2019-class verifier core (O-1.14); F8's phase E (the 64-seed dynamic census) on the amended stream, which is the attack-pass lane's and the test of the per-op table. The row reads FIXED-AND-PASSED only after phase E passes against the amended class.
|
||||
|
||||
Status: Fixed in part, finding bounded, stated (7 October 2026, night, the Counter ASIC lane's words): class v4 sub-version 3 (igneum-pow 017e7037, the audit-freeze tag) is frozen with the dataflow rule, the shared-operand rule, the 0.98 ratio and the total draw; the in-house pass's F8 re-gate reads 60 of 64 seeds under 1.2x with the four-seed tail accepted by the coordinator as the window model's unattributed residue (no chip consequence); the pass then attributed the class by value (eight live hot sets at 1.54x to 2.24x in the lowest 30 of 29,032 accepted programs, each about 1 MB of items at 0.3 percent of reads, 1.002x to a chip); class v5 (1c420786, frozen 21:53 UK) carries the fix as rule (c'''), the per-site distinct-index floor at 0.995 on the state flag (its census refuses 2.435 percent of accepted programs; seven of seven live hot sets refused at 0.9821 to 0.9919; the eighth's ratio owed tonight), with a named residual (three mild shadow-block-written concentrations at 0.9992 to 0.9997, about 1.0004x, a value-level test in the next class); the record is `docs/plans/counter-asic-3-status.md` section 7c and the class v5 design's section 14.
|
||||
Status: Fixed in part, finding bounded, stated (7 October 2026, night, the Counter ASIC lane's words): class v4 sub-version 3 (igneum-pow 017e7037, the audit-freeze tag) is frozen with the dataflow rule, the shared-operand rule, the 0.98 ratio and the total draw; the in-house pass's F8 re-gate reads 60 of 64 seeds under 1.2x with the four-seed tail accepted by the coordinator as the window model's unattributed residue (no chip consequence); the pass then attributed the class by value (eight live hot sets at 1.54x to 2.24x in the lowest 30 of 29,032 accepted programs, each about 1 MB of items at 0.3 percent of reads, 1.002x to a chip); class v5 (1c420786, frozen 21:53 UK) carries the fix as rule (c'''), the per-site distinct-index floor at 0.995 on the state flag (its census refuses 2.435 percent of accepted programs; seven of seven live hot sets refused at 0.9821 to 0.9919; the eighth's ratio owed tonight), with a named residual (three mild shadow-block-written concentrations at 0.9992 to 0.9997, about 1.0004x, a value-level test in the next class); the record is `docs/plans/counter-asic-3-status.md` section 7c and the class v5 design's section 14. The eighth live hot set (seed 122960, id 4be7393ab6c84802, the deepest found: X_f +0.111 percent, 1.54x the window model, its hottest item at 475,616 reads from an all-ones source) reads minimum site 12 at 0.9824 at the acceptance's own 2^20 sample (live 0.9822), refused by class v5's (c''') floor at 0.995; so the floor refuses eight of eight live hot sets by X_f at or above f found in the tail of 88,051 accepted programs (minimum sites 0.9821 to 0.9919) against 0 hot sets in 20 random programs; what it misses stays the three mild shadow-block-written concentrations at 0.9992 to 0.9997 (Devnet 3's first program among them), about 1.0004x to a chip, the value-level test in the next class (22:41 BST; the logs under `docs/analysis/cryptanalysis/logs/adv-accept/` on branch adv-accept; the v5 design's section 14). The RTX 5080 grid's knee is not in tonight; X37 keeps the 5080's stock premium only.
|
||||
|
||||
## Genesis forward-compatibility entries (7 October 2026, mission item 8, branch `genesis-forward`)
|
||||
|
||||
|
|
|
|||
11
tools/ledger/README.md
Normal file
11
tools/ledger/README.md
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
# The criticism ledger's tools
|
||||
|
||||
`export-public.mjs` writes `docs/ledger-public.md` from `docs/fud-ledger.md` (one row per item; no commit ids, times of day, lane or agent names) and `--check` is the pre-push gate for it; `tools/ledger-page.mjs` renders the same file to `/ledger` at the site build.
|
||||
|
||||
## The status rule (7 October 2026, night)
|
||||
|
||||
- An entry's **current status is the first sentence of its last `Status:` paragraph**. The export, the page and the counts read that paragraph and nothing earlier in the entry.
|
||||
- The **previous status follows `Was:`** inside the same paragraph, so the history stays readable in one place.
|
||||
- A `Status:` paragraph **starts with one of the six statuses' words**: Open; Conceded; Fixed (also Rolled out, Rule fixed, Spec fixed, Rule implemented, Rule written, Written, Designed); Closed or Decided; Answered with evidence (also Measured, Simulation half); Answered by design. Never with a date, a lane's word or a verb outside them (Relabelled, Reopened, Corrected and Kept were the four the page could not place).
|
||||
- `export-public.mjs --check` fails any entry that breaks the third rule and names it; its self-test plants a date-led and a word-led status first (known-failed), then the clean fixture.
|
||||
- A "not yet stated" concession becomes "stated" only by writing the sentence into the public text it belongs to (the litepaper, the miner page's Before you start, the claims section) and naming the page in the status.
|
||||
|
|
@ -6,7 +6,8 @@
|
|||
// every tracked file.
|
||||
//
|
||||
// node tools/ledger/export-public.mjs # rewrite docs/ledger-public.md from docs/fud-ledger.md
|
||||
// node tools/ledger/export-public.mjs --check # exit 1 when docs/ledger-public.md differs from what the ledger generates (the gate)
|
||||
// node tools/ledger/export-public.mjs --check # exit 1 when docs/ledger-public.md differs from what the ledger generates, or when an entry's
|
||||
// # last Status paragraph starts with a date or a word outside the six statuses (the gate)
|
||||
// node tools/ledger/export-public.mjs --self-test # a fixture ledger with a commit id, a time, a lane name and a Fix line gives rows
|
||||
// # with none of them and the right fields; --check fails on a drifted output
|
||||
// Node 22, standard library only.
|
||||
|
|
@ -61,6 +62,16 @@ export function scrub(s) {
|
|||
.replace(/,\s*;/g, ';').replace(/\(\s*[;,]\s*/g, '(').replace(/\(\s*\)/g, '').replace(/,\s*\)/g, ')').replace(/\s+([,.;:)])/g, '$1').replace(/\s{2,}/g, ' ').trim();
|
||||
}
|
||||
const cell = (s, max) => { s = s.replace(/\|/g, '\\|'); return s.length > max ? s.slice(0, max - 1).replace(/\s+\S*$/, '') + '…' : s; };
|
||||
// The status-word rule (main, 7 October 2026, night, from the site audit's finding that an appended update can miss the public
|
||||
// row): an entry's current status is the FIRST SENTENCE of its last Status paragraph, the previous one follows "Was:", and the
|
||||
// paragraph must START with one of the six statuses' words (Open; Conceded; Fixed, Rolled out, Rule fixed, Spec fixed, Rule
|
||||
// implemented, Rule written, Written, Designed; Closed, Decided; Answered with evidence, Measured, Simulation half; Answered by
|
||||
// design), never with a date or a word outside them (Relabelled, Reopened, Corrected, Kept were the four the /ledger page could
|
||||
// not place on 7 October 2026). --check fails on any such entry and names it; the self-test plants both shapes first.
|
||||
export const STATUS_WORD = /^(open|conceded|fixed|rolled out|rule fixed|spec fixed|rule implemented|rule written|written|designed|closed|decided|answered with evidence|measured|simulation half|answered by design)\b/i;
|
||||
export function badStatuses(text) {
|
||||
return parseItems(text).map((it) => [it.id, field(it.body, 'Status:').replace(/^Status:\s*/, '')]).filter(([, st]) => !STATUS_WORD.test(st)).map(([id, st]) => `${id}: "${st.slice(0, 60)}"`);
|
||||
}
|
||||
export function rowOf(item) {
|
||||
const status = field(item.body, 'Status:').replace(/^Status:\s*/, '');
|
||||
let statusShort = status.split(/[(:]/)[0].replace(/[.,;\s]+$/, '').trim() || 'unstated';
|
||||
|
|
@ -114,6 +125,11 @@ function selfTest() {
|
|||
for (const bad of [/0e2d6b1c/, /fbb0082a/, /da1eb889/, /\d\d:\d\d/, /hash lane/, /attack-pass lane/, /main's/, /, night/, /fin-fixes/, /ledger-fixes-0311/]) if (bad.test(text)) fails.push(`scrub: ${bad} survived: ${text.match(bad)?.input?.slice(0, 0)}${(text.split('\n').find((l) => bad.test(l)) || '').slice(0, 160)}`);
|
||||
if (!/\| AP-F8-1 \| A load whose source was last written by `or` makes a hot set \| Fixed \|/.test(text)) fails.push('AP-F8-1 row missing or wrong');
|
||||
if (!/^3 items\. By status: /m.test(text)) fails.push('count line');
|
||||
// the status-word rule, known-failed first: a date-led and a word-led status both fail; the fixture's three pass
|
||||
const bad = `# ledger\n\n### Z1. A date-led status\n"x"\n\nStatus: 7 October 2026, morning: relabelled.\n\n### Z2. A word outside the six\n"y"\n\nStatus: Relabelled (7 October 2026): the range stands.\n\n### Z3. A fine one\n"z"\n\nStatus: Conceded, stated (7 October 2026). Was: Conceded.\n`;
|
||||
const b = badStatuses(bad);
|
||||
if (b.length !== 2 || !b[0].startsWith('Z1:') || !b[1].startsWith('Z2:')) fails.push(`status-word rule: known-failed shapes not caught: ${JSON.stringify(b)}`);
|
||||
if (badStatuses(fx).length) fails.push(`status-word rule: the fixture's statuses were refused: ${JSON.stringify(badStatuses(fx))}`);
|
||||
// --check: a drifted output fails, the generated one passes
|
||||
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'ledger-public-')); const o = path.join(dir, 'out.md');
|
||||
fs.writeFileSync(o, render(fx)); if (!check(fx, o)) fails.push('check: a fresh output was reported as drifted');
|
||||
|
|
@ -127,6 +143,8 @@ export function check(text, outFile) { return fs.existsSync(outFile) && fs.readF
|
|||
const arg = process.argv[2];
|
||||
if (arg === '--self-test') selfTest();
|
||||
else if (arg === '--check') {
|
||||
const bad = badStatuses(fs.readFileSync(LEDGER, 'utf8'));
|
||||
if (bad.length) { console.error(`ledger-public: ${bad.length} entr${bad.length === 1 ? 'y' : 'ies'} whose last Status paragraph does not start with one of the six statuses' words (the current status is its first sentence; the previous follows "Was:"): ${bad.join('; ')}`); process.exit(1); }
|
||||
const ok = check(fs.readFileSync(LEDGER, 'utf8'), OUT);
|
||||
console.log(ok ? `ledger-public: docs/ledger-public.md matches docs/fud-ledger.md (${parseItems(fs.readFileSync(LEDGER, 'utf8')).length} items)` : 'ledger-public: docs/ledger-public.md differs from what docs/fud-ledger.md generates; run node tools/ledger/export-public.mjs and commit');
|
||||
process.exit(ok ? 0 : 1);
|
||||
|
|
|
|||
Loading…
Reference in a new issue