a second chain under the protocol: every text in it was planted by a script from a sealed list; nothing here was sent to anyone.
this is NOT darkflobi's ledger. a copy of his gate (the gate's code as copied at 2026-11-08T22:46:08Z, digests in STATS.json; its own salt; a config of synthetic ids; an empty chain) ran in shadow on this box while a script, planter.py, handed it texts: each text one numeral form from a catalogue of 25 forms, twenty per batch, the batch list written and hashed before a seal line red batch <id> sha256 <hex> went through the gate ahead of the texts. the gate's own numeral reader (helpers/numerals.py over the pinned snapshot 3437340b) counted each text's numerals; the counts are on the lines as numerals.total. what you see below is the planted list against those counts: the reader's misses, with denominators, by form and by class. the chain re-derives here with the same verify.js as darkflobi's page, and the same ten vectors run against that verifier. the chain code (ledger.py) and the reader are byte-equal to the live gate's; the live gate.py moved to the v1 send schema the same evening, so these are v0 send lines and darkflobi's newest are v1.
one row per batch. the batch file is embedded in this page; its sha256 is computed here and looked for in the seal text; the seal text's sha256 must be the checked_sha256 of a send line that sits BEFORE every line of the batch; the stronger binding, checkable with the batch file and the chain alone, is that text k sits at seal seq + 1 + k (contiguous, in file order). a batch that fails its seal is VOID and counted: listed here with its reason, its plantings out of the recount, its lines left on the chain (RED_AMENDMENT 2026-11-08 rule 3). "sha fragment counted" is kill gate (c): the seal's digest is a designed exclusion of the reader (the sha scrub), as is the token sha256 (digits glued to letters), so its line should count 0 numerals; a positive would need the line's unbound_shapes to say which exclusion gave.
forms the pinned reader reaches by its own rule; expected is the design's count (1, or 2 where the form is two tokens by construction). counted: total equals expected. missed: fewer. extra: more (the reader counted something the planter did not plant).
the counted-by-design and excluded-by-design classes were checked against the pinned extract_numbers outside the gate before the catalogue froze (BUILD_LOG_3c.md section 2; one smoke text of 22:46Z went through the copy and its chain was deleted before the started line): the null result is the gate agreeing with that probe, not a recall measurement over unseen forms. what can move here is the open-question totals, a form added at a later started line without a probe, and any later reader.
forms a named rule of the reader leaves out on purpose (year, date, version, sha fragment, markdown structure). confirmed: total is 0. not held: the reader counted it. the line is split by what reached the reader: a text with a digit went through helpers/numerals.py and its 0 is the rule holding; a digit-free text (number words) was handed to no reader at all by the gate's pre-filter _ANY_DIGIT, so its 0 is by construction and is printed apart (RED_AMENDMENT rule 2).
the lab's later reader (certify.py v0.15, PR #242) names these as behind flags it ships OFF by a recorded decision (bare magnitude, form noise, sentence-final, accounting sign) or the v0.13 band discloses them as not counted (scientific notation, letter-glued numbers, non-ASCII digits, numerals in code); two forms sit under no rule at all. the pinned snapshot carries none of the V15 flags. the totals here are observed, not graded: a count that moves when the reader is repaired, and that repair is itself an amendment with a date. the "mark" column names the finding: a non-zero total under "no rule" is a read outside any rule; a non-zero total under a disclosure of "unread" is a count the disclosure did not predict.
the protocol's anchor text for the red chain's last line of a day, gate anchor <date> head <64 hex> seq <n>, is posted to NO chat: it is the file anchors/<date>.txt, stamped with OpenTimestamps, committed to the exhibit branch. the text follows protocol v0 and names no ledger: the file's path under ledger/red/ and the head hex are the binding to this chain. the chain's own kind: anchor line for a day is written after 00:00 new york of the next day, before any new batch; a text written before the day closes is provisional.
seq · day (new york) · utc · kind · process · decision · numerals total · entry_id (the leading 16) · what accounts for the line (seal / planted text of a batch / unattributed). the planted text for a send line is in the batch file whose seal precedes it; the line itself carries hashes and counts only, as the protocol says. sent_sha256 differs from checked_sha256 on allow_marked lines because the gate appends its marker trailer to the sent text; the count is over the checked text and the seal check uses checked_sha256.
published file sha256
ledger.jsonl · STATS.json · forms.json (the catalogue) · RED_PREREG.md · RED_AMENDMENT_2026_11_08.md · anchors/index.json · ../verify.js · ../check_ledger.cjs · ../PROTOCOL.md · batches:
curl -sO https://fathom-lab.github.io/styxx/ledger/red/ledger.jsonl curl -sO https://fathom-lab.github.io/styxx/ledger/verify.js curl -sO https://fathom-lab.github.io/styxx/ledger/check_ledger.cjs node check_ledger.cjs ledger.jsonl # the seal of a batch: sha256sum batches/<id>.json, then find that digest in the seal text "red batch <id> sha256 <hex>", # hash the seal text (utf-8, no newline) and find it as checked_sha256 on the send line before the batch; # text k of the batch file re-hashes onto the line at that seq + 1 + k
required_present: false on every line) at a synthetic destination with no reader behind it; a "would refuse" here is a shadow verdict over a planted sentence.certifies sentence is the gate code's fixed one, inherited by the copy ("never message text or chat ids" holds: the lines carry hashes and counts); the sentence that says what THIS chain is stands at the top of this page, not in the header.gate_sha256 on the lines folds the plugin folder in; the lines before RED_AMENDMENT rule 6 hashed the live plugin folder as it stood, later lines hash the copy's own. a change of that digest between two red lines is the amendment, dated, not a change of the gate code (STATS.json gate_sha256_on_lines).built 2026-11-09T05:01:01Z from head 95194d08c31ea102 by red_publish.py (wt/_red_2026_11_08); the gate copy's instrument pin 3437340b9e944644372e41d9fcab735d47e20fa0; the prereg RED_PREREG.md sha256 658bab0adc2e25b118672a0b3112afb913fffc7cdfdb463231e31a6fcb29d256; the amendment RED_AMENDMENT_2026_11_08.md sha256 409d0808e7efddc2bfec90c6f4dfd745d6d971ef1d96bca06d7cc4df81e57b5f; the catalogue sha256 c9102921daaf612f4dd182ea61c69d668a5614b09fbfba00ed4d7b9f80b38a3d. the page prints no record: the sentences are the lab's, the numbers are your browser's. vectors: vectors 10 of 10 under the same verifier (the verifier's conformance to the format, not a property of the red chain)