built to fetch each row's published ledger, re-derive its chain with the shelf's own pinned copy of the verifier, run the row's conformance vectors, check every anchor the row's index lists against the chain and its opentimestamps proof against the bitcoin block header as two explorers return it, count the days with no anchor, and compare the bytes with the previous night's fetch, every night, as a github action. as of 2026-11-09 no report here came from that action: the workflow is not in this repository yet (the operator adds it), and every report so far is a local run from the lab's box — 1 of 1 nightly report says "not the action (a local run)", and the 8 reads by url kept under reports/reads/ were run by hand. each report is dated; this page is written by shelf.mjs from the reports on disk and loads nothing.
written 2026-11-09T20:16:06Z · 1 nightly row · 2 rows read by url · schedule 07:00 utc · explorers https://blockstream.info/api, https://mempool.space/api
| row | fetched at / where | ledger sha256 | lines | head | chain re-derives | vectors | anchors verified | gaps | append-only | verifier drift | lines after last attested head | exit |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| darkflobi | 2026-11-08T21:27:15Z not the action (a local run) |
ab9d4fc95e4fb668 | 729 | 0e5a698dece0bb33 | yes | 10 of 10 | 14 of 14 | 1 of 15 days (2026-11-06) | yes | no | 5 of 729 | 0 |
git clone https://github.com/fathom-lab/styxx-shelf && cd styxx-shelf && npm ci && node shelf.mjs --row darkflobi --out ./docs
node 20+. compare your docs/reports/<row>/<date>.json with the one here: the sha256 of every fetched file, the head, the per-anchor merkle roots and the block headers should agree when the url served the same bytes. each row's "rerun" line below carries the --date and --through of the recorded run.
run 2026-11-08T21:27:15Z → 2026-11-08T21:27:21Z on not the action (a local run), shelf 0.1.0, node v24.13.0, date 2026-11-08. full record: reports/darkflobi/2026-11-08.json (latest).
no check failed
(0 anchors pending, 1 of 15 days with no anchor, 5 lines after the last bitcoin-attested head)
re-derives: 729 published lines (730 file lines), head 0e5a698dece0bb33764c5202a03745a140a6ef66dba7bbcbc3896842795e152f, kinds {"started":22,"send":344,"delivered":349,"anchor":14}, withheld 5 (bridged 5), the ledger's own anchor lines in chain 14 of 14, pinned by a posted head 692 of 729 lines, not pinned because of a withheld line 32, after the last posted head 5.
the row's SNAPSHOTS.jsonl last line names the fetched ledger's sha256.
10 of 10 answered as the row's vectors file says (pinned runner, pinned verifier).
ok identity ok rewrite-one-field ok rewrite-prev ok drop-a-line ok drop-a-line-withheld ok drop-a-line-withheld-wrong-digest ok cr-byte ok duplicate-key ok truncate-last-line ok flip-and-rechain 10 of 10 vectors answered as the file says
no: the row's published verify.js and check_ledger.cjs hash to the pinned copies.
| file | published sha256 | pinned sha256 | same |
|---|---|---|---|
| verify.js | 6bb1b6c4642d6251153d0a3bc6a30ac3fee9c6529cc0540291dbb38f983eba46 | 6bb1b6c4642d6251153d0a3bc6a30ac3fee9c6529cc0540291dbb38f983eba46 | yes |
| check_ledger.cjs | 85c76195a194b5901bcf3f99f0aee19584925f9a1b44ae385b2057b0649e6503 | 85c76195a194b5901bcf3f99f0aee19584925f9a1b44ae385b2057b0649e6503 | yes |
"verified" means: the fetched text hashes to what the index says, the proof is over those bytes, the text's head and seq are in the fetched chain, and every bitcoin attestation's merkle path ends at the block header that 2 of 2 explorers return (https://blockstream.info/api, https://mempool.space/api). "pending" means the proof holds calendar promises only; the shelf does not ask the calendars for a row's proof, and a proof pending for more than 7 days after its anchor date is a failed check. "explorer unreachable" is an explorer that did not answer, not a header that disagreed; both leave the anchor not verified.
| date | seq | text sha256 | ots sha256 | in chain | block(s) | status |
|---|---|---|---|---|---|---|
| 2026-10-24 | 57 | yes | yes | yes | 974530 x4 | bitcoin: block 974530, header from 2 of 2 explorers agree (attestedTime 2026-11-04T13:24:55Z); 4 attestations in block 974530 x4 |
| 2026-10-25 | 116 | yes | yes | yes | 974530 x4 | bitcoin: block 974530, header from 2 of 2 explorers agree (attestedTime 2026-11-04T13:24:55Z); 4 attestations in block 974530 x4 |
| 2026-10-26 | 145 | yes | yes | yes | 974530 x4 | bitcoin: block 974530, header from 2 of 2 explorers agree (attestedTime 2026-11-04T13:24:55Z); 4 attestations in block 974530 x4 |
| 2026-10-27 | 166 | yes | yes | yes | 974530 x4 | bitcoin: block 974530, header from 2 of 2 explorers agree (attestedTime 2026-11-04T13:24:55Z); 4 attestations in block 974530 x4 |
| 2026-10-28 | 173 | yes | yes | yes | 974530 x4 | bitcoin: block 974530, header from 2 of 2 explorers agree (attestedTime 2026-11-04T13:24:55Z); 4 attestations in block 974530 x4 |
| 2026-10-29 | 184 | yes | yes | yes | 974530 x4 | bitcoin: block 974530, header from 2 of 2 explorers agree (attestedTime 2026-11-04T13:24:55Z); 4 attestations in block 974530 x4 |
| 2026-10-30 | 199 | yes | yes | yes | 974530 x4 | bitcoin: block 974530, header from 2 of 2 explorers agree (attestedTime 2026-11-04T13:24:55Z); 4 attestations in block 974530 x4 |
| 2026-10-31 | 240 | yes | yes | yes | 974530 x4 | bitcoin: block 974530, header from 2 of 2 explorers agree (attestedTime 2026-11-04T13:24:55Z); 4 attestations in block 974530 x4 |
| 2026-11-01 | 243 | yes | yes | yes | 974530 x4 | bitcoin: block 974530, header from 2 of 2 explorers agree (attestedTime 2026-11-04T13:24:55Z); 4 attestations in block 974530 x4 |
| 2026-11-02 | 316 | yes | yes | yes | 974530 x4 | bitcoin: block 974530, header from 2 of 2 explorers agree (attestedTime 2026-11-04T13:24:55Z); 4 attestations in block 974530 x4 |
| 2026-11-03 | 336 | yes | yes | yes | 974530 x4 | bitcoin: block 974530, header from 2 of 2 explorers agree (attestedTime 2026-11-04T13:24:55Z); 4 attestations in block 974530 x4 |
| 2026-11-04 | 664 | yes | yes | yes | 974635 x2, 974643, 974654 | bitcoin: block 974635, header from 2 of 2 explorers agree (attestedTime 2026-11-05T07:19:14Z); 4 attestations in blocks 974635 x2, 974643, 974654 |
| 2026-11-05 | 704 | yes | yes | yes | 974768, 974770, 974799, 974808 | bitcoin: block 974768, header from 2 of 2 explorers agree (attestedTime 2026-11-06T06:12:20Z); 4 attestations in blocks 974768, 974770, 974799, 974808 |
| 2026-11-07 | 729 | yes | yes | yes | 975028, 975030, 975060, 975074 | bitcoin: block 975028, header from 2 of 2 explorers agree (attestedTime 2026-11-08T05:45:00Z); 4 attestations in blocks 975028, 975030, 975060, 975074 |
index against the ledger's own anchor lines: 14 of 14 ledger anchor lines are in the index, 14 of 14 index entries have a ledger anchor line.
window 2026-10-24 .. 2026-11-07 (America/New_York; the end is the day before the run day in America/New_York (2026-11-08)): no anchor for 2026-11-06. a gap is a day with neither an index entry nor a ledger anchor line; printed, not failed.
extends the previous fetch (2026-11-08: 1233153 bytes, 729 lines) by +0 bytes, +0 lines
no anchor's text, proof or block changed since the previous fetch (14 compared).
lines after the last bitcoin-attested head: 5 of 729 (anchor 2026-11-07 pins seq 729, block 975028, by explorers). those lines are pinned by nothing outside the lab tonight.
the previous fetch is history/darkflobi/latest.json, a record in this repository (see "what this is not").
--stamp-self not passed: the shelf's own report is not stamped and earlier stamps are not upgraded on this run
| file | http | date header | bytes | sha256 |
|---|---|---|---|---|
| ledger.jsonl | 200 | Sun, 08 Nov 2026 21:27:15 GMT | 1233153 | ab9d4fc95e4fb66837a3acff29a156df14a1a93241e429691d3a1a007e5e04c2 |
| withheld.json | 200 | Sun, 08 Nov 2026 21:27:15 GMT | 1777 | 096e3123c16e10bfcf8853ba82c6bc1bd75bdb935c34674d9ceba829b6c60f59 |
| verify.js | 200 | Sun, 08 Nov 2026 21:27:16 GMT | 13872 | 6bb1b6c4642d6251153d0a3bc6a30ac3fee9c6529cc0540291dbb38f983eba46 |
| check_ledger.cjs | 200 | Sun, 08 Nov 2026 21:27:16 GMT | 4122 | 85c76195a194b5901bcf3f99f0aee19584925f9a1b44ae385b2057b0649e6503 |
| vectors/vectors.json | 200 | Sun, 08 Nov 2026 21:27:16 GMT | 5725 | be43667f1662e822fd31d5941e6166fdd7ce145de72b6dfea9b32bbb4ae69d4b |
| vectors/base.jsonl | 200 | Sun, 08 Nov 2026 21:27:16 GMT | 194204 | 8029fce0bed73a52067d2e7e3552555d45c81d837187a93b6dd20d48ad8861f1 |
| anchors/index.json | 200 | Sun, 08 Nov 2026 21:27:16 GMT | 13573 | e36bd72935d6bba08c710483c0fcd6769c77511ea70fac7cfc3713f82a4258a8 |
| SNAPSHOTS.jsonl | 200 | Sun, 08 Nov 2026 21:27:16 GMT | 5673 | 3b0afeb58d11107f9e14f4289a08c6d0774a5d19fedacd8f48c0997c3e9b7c19 |
| STATS.json | 200 | Sun, 08 Nov 2026 21:27:16 GMT | 5719 | d3c783a23715e8b82030c164016dae615b6ae5ec130ebd6ab5b51c0a8b1fefca |
plus 28 anchor files (in the json record).
git clone https://github.com/fathom-lab/styxx-shelf && cd styxx-shelf && npm ci && node shelf.mjs --row darkflobi --out ./docs --date 2026-11-08 --through 2026-11-07
by hand, inside the clone: 39 commands (every curl and every node line) are listed under commands in the json record. the rerun carries --date and --through so the gap window is the recorded one.
who wrote each ledger is the row's written_by. no row names a ledger written outside the lab: the 2 of 2 rows written by the lab (darkflobi, red) show the shelf reading the lab's own ledgers by url, not an outside one. since styxx-ledger f29ae3d (2026-11-09) the census scorer reads condition (c) from the shelf: it fetches the report a section 15 shelf read line names, only from under https://fathom-lab.github.io/styxx-shelf/reports/reads/ (since 94e4181; a report on any other host fails (c) unfetched), and checks it against the registration and the chain. (c) holds for an outside window only after the shelf has read that ledger and its report is kept here.
the register outside_ledgers.json lists the ledgers the shelf reads with shelf_read.cjs, one url each, protocol v0 or v1. the shelf is the lab's: a ledger listed here, whoever wrote it, is read by the lab's shelf, with the lab's copy of the verifier and the lab's code, and the reports below are the lab's. a report says whether the bytes at the url re-derive and where the earliest anchor that holds was looked for; it says nothing about the agent behind a ledger, or whether a line records what happened. rows are appended by the lab in a dated commit and never edited; a row taken off gets withdrawn_at and stays. a v1 row for an outside operator's ledger is added when that operator has published one and asks: how to ask, what the lab does and the url to paste are under get your ledger read; the places an anchor may be posted, under anchor places in the readme.
| row | protocol | ledger url | anchor place | committed report (kept copy, its sha256) | bytes / sha256 | lines | head | re-derives | anchors holding | earliest anchor that holds | in your browser |
|---|---|---|---|---|---|---|---|---|---|---|---|
| darkflobi written by the lab |
v0 | https://fathom-lab.github.io/styxx/ledger/ledger.jsonl | the lab's exhibit copy of each day's anchor text (anchors/<date>.txt); the telegram post itself needs an account to read, so the shelf reads the lab's copy, not the posthttps://fathom-lab.github.io/styxx/ledger/anchors/{date}.txt |
2026-11-09T14:37:14Z reports/reads/darkflobi/2026-11-09T14-37-14Z.json sha256 10de3b63321243d7c8afb1c9f5704a5cf76e67b821bb5024d3b57a778254e17f shelf 59c182ac5fbafc6bdcadb3101289b1c1f41b9010 |
1341750 20f6d62058a3c195 |
787 | 3f9fe35a1b276ed3 | yes | 15 of 15 | 2026-10-24 seq 57 text sha256 1d187807253d257f place: found (http 200) |
re-derive now in your browser |
| red written by the lab |
v0 | https://fathom-lab.github.io/styxx/ledger/red/ledger.jsonl | the ledger's own page on the lab's github pages site; the lab can edit it, so it is not a place outside the labhttps://fathom-lab.github.io/styxx/ledger/red/ |
2026-11-09T14:37:15Z reports/reads/red/2026-11-09T14-37-15Z.json sha256 a10642f03863b4ca976bba4cdc21907f6b4efa8872ba5cb9d6b3c6450f6422b7 shelf 59c182ac5fbafc6bdcadb3101289b1c1f41b9010 (uncommitted changes present) |
274193 c999b33fc2a4d409 |
107 | 95194d08c31ea102 | yes | 1 of 1 | 2026-11-08 seq 106 text sha256 f03ab11d15f7f794 place: found (http 200) |
re-derive now in your browser |
how old each read is: darkflobi: read 2026-11-09T14:37:14Z, 5 h 38 min before this page was written, 787 lines; the nightly row darkflobi read the same url at 2026-11-08T21:27:15Z and counted 729 lines, 17 h 9 min before this read (+58 lines from the earlier count to the later: the ledger grows, so the two counts are two times, not two answers). red: read 2026-11-09T14:37:15Z, 5 h 38 min before this page was written, 107 lines; read from a shelf checkout with uncommitted changes (its shelf_commit says so).
every read here so far was written when the lab ran node shelf_read.cjs --row <name> by hand on its box; the workflow written for this repository runs it for every register row each night once the operator adds it (not in this repository as of 2026-11-09). every read is kept at reports/reads/<row>/<read_at with each : written ->.json and never rewritten; reports/<row>.json is the latest and is replaced by the next read. the census template's section 15 line (shelf read: <url> sha256 <64 hex> at <read_at>) names the kept copy. the report's fields: outside_report_schema.json. the browser page fetches the ledger from its url and runs the same code (shelf_core.js and the verifiers below); it can read a host that allows a cross-origin read (github pages hosts do).
v1 rows run the kit's verifier as copied from styxx-ledger commit 838a003 (838a003fa4f65d8efdb185c88a951f74ac2366c9, https://github.com/fathom-lab/styxx-ledger), 5 files, none changed (v1/VENDORED.json):
| file | kit path | sha256 |
|---|---|---|
| verify.js | js/lib/verify.js | 72b2d988d5bce1a2c0332928c283ec1c0509f6b58a31f5d9d5b1e65a06d2fa32 |
| chain.js | js/lib/chain.js | 9f2abfd11597458553f0387a67004b3dd2c138de5819068d9f9ad5c805c2b516 |
| jcs.js | js/lib/jcs.js | abeddd50d3f09ad8f222c1d7bf3ebe0f64b1c458c3df25d4cad5b8f8c1a6fabb |
| day.js | js/lib/day.js | c4e19c8bba96b6f8e122caba33835c6d3188ec2d39ea1c0c8500ce63e9aa3deb |
| LICENSE | LICENSE | 562ab2caa6477ecc385d6b85e5e18798dbe5b35ac1d302674173a9827d83b2a9 |
v0 rows run the shelf's pinned tools/verify.js (sha256 6bb1b6c4642d6251153d0a3bc6a30ac3fee9c6529cc0540291dbb38f983eba46), served to the browser as v0/verify.js.