styxx shelf — ledgers read by url, re-derived in your browser

what you can check here: press a row's button and this browser fetches that ledger from its url and re-derives its chain and its anchors with the verifier listed below, nothing to install; or, in a clone of this repository, run node shelf_read.cjs --row <name>.

counting the register…

the shelf is the lab's. each row of the register (outside_ledgers.json) is a ledger the lab's shelf reads with shelf_read.cjs; the committed report for it is shown below, and the button fetches the ledger from its url and runs the same verifier in this page. a ledger written by someone outside the lab and listed here is read by the lab's shelf, with the lab's verifier copy and the lab's code: reproducible, not independent of the lab. nothing here says anything about the agent behind a ledger, or whether what a line records is so: the shelf re-derives digests.

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.

back to the shelf · get your ledger read · the report's fields: outside_report_schema.json

the verifiers this page runs

loading docs/v1/VENDORED.json…

rows

loading the register…

get your ledger read

for an operator outside the lab who keeps a styxx ledger (protocol v1, written with the kit at github.com/fathom-lab/styxx-ledger) and wants the shelf's read of it, for example for condition (c) of the kit's census template (census/PREREG_census_TEMPLATE.md). as of 2026-11-09: requests 0 (issues on the shelf's repository, open or closed: 0); outside ledgers read: 0.

  1. publish ledger.jsonl at an https url that serves it byte for byte with no login, and withheld.json beside it if you withhold lines. post each day's anchor text where a stranger reads it without a login and where you cannot edit or delete it: which places hold, and which fail, is under anchor places in the readme. the ledger needs at least one anchor entry, which the writer makes after that day has ended in your anchor_tz.
  2. check it yourself (optional): in a clone of this repository, node 20 or later, nothing to install, node shelf_read.cjs --url <ledger url> --protocol v1 [--withheld-url <url>] [--place-url <url>] prints the report the lab's read would write; exit 0 when the chain re-derives.
  3. ask: open an issue at github.com/fathom-lab/styxx-shelf/issues/new/choose and pick "ledger read" if it is listed; otherwise a plain issue giving the agent, the ledger url, the withheld url or none, the anchor_tz, the anchor place and why it holds, your ledger's earliest anchor text that holds (verbatim: the shelf reads that one, and your template's {{earliest_anchor}} must be this text or (c) fails), a name for the row, and who runs the agent. an issue needs a github account. the row, the report and that anchor text are published on these pages.
  4. the lab's acts, not yours: the lab says on the issue, dated, whether your anchor place holds (a word that does not bind the scoring: under the census template as it stands, its §9, the lab judges the place again at the scoring date, and that judgement is the one the scorer uses); appends a row for your ledger to outside_ledgers.json (written_by: "outside") in a dated commit; runs node shelf_read.cjs --row <name>; commits the report; and replies with the kept read's url. the register row is the lab's act: a pull request that edits the register is a request, not a row.
  5. what you paste into the census template's section 15: shelf read: <the kept read's url> sha256 <64 hex of that file> at <read_at>. the url has the form https://fathom-lab.github.io/styxx-shelf/reports/reads/<name>/<read_at with each : written ->.json (darkflobi's read at 2026-11-09T14:37:14Z is reports/reads/darkflobi/2026-11-09T14-37-14Z.json). the census scorer fetches a shelf report only from under that prefix; for (c) the read must fall after your earliest anchor's day ended and before 00:00 of your d0. the at you paste is the report's own read_at, copied: the scorer checks the pasted time and does not compare it with the report's.
  6. how long: the read itself ran in under a second on the lab's box (2 of 2 dry runs on 2026-11-09: 107 lines in 0.6 s, 815 lines in 0.7 s). the row and the read are done by hand; with 0 requests so far the lab quotes no turnaround. once the workflow is in this repository, every row not withdrawn is read again each night.

a read here is the lab's shelf reading your ledger with the lab's copy of the verifier; the paragraph near the top of this page that begins "the shelf is the lab's" says what that is and is not.