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.

red ledger · the mutation ledger of the reader

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.

re-deriving the red chain in this browser…

the seals

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.

the misses: counted-by-design forms

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.

the exclusions: excluded-by-design forms

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 open question: forms behind the lab's OFF flags, and the disclosed blind spots

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 anchor

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.

the lines

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.

the bytes

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
the raw lines

what this is not

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)