Verifier explainer
Compass
This page explains how to verify the public receipt chain. It is not an in-browser recompute instrument, and it is not a measured uptime surface.
What this page is not
- A live verdict. Nothing here fetches the feed, hashes a receipt, or paints sealed-or-broken.
- A measured uptime surface. A 200 on this URL is not evidence the chain has been green for a week.
- The in-browser constellation that used to occupy this path. That prototype is retired; the check lives in the feed, the spec, and the register.
Where to check
These are the public surfaces. None of them ask for a key.
The published feed. It carries the genesis tag, every entry, the algorithms, and the head a stranger actually receives.
The open specification for steadywrk.receipt-chain/v1. Enough to implement a verifier without our source.
The public register. It prints the live head beside the command that recomputes it, and it pins no hash into the page.
What an outsider can check today, and what cannot be checked yet. The second list is the feature, not a footnote.
What a verifier recomputes
The algorithm is imported from the same module the live endpoint serves. This page does not restate it in different words.
- leaf
- receipt_hash = SHA256(canonical_json(receipt)) — canonical_json sorts object keys, no whitespace (equivalently: jq -cS)
- link
- chain_n = SHA256(chain_{n-1} | n | ts | receipt_hash), with chain_0 = SHA256(genesis_tag) and ts = receipt.completed (empty string when null)
- order
- links are sorted by (ts, phase, receipt_hash) ascending — a total, machine-independent order, so the same receipt set always yields the same head
- implementation
- packages/ledger (genesisChain, computeChain) — the same chain functions the foresight seal ledger uses
The published command
Source: scripts/verify-sijill.mjs. Pass a URL or a saved copy of the feed as the single argument to check something other than production.
node scripts/verify-sijill.mjs