lastseen.dev publishes a daily hash chain over every dated component observation. It lets anyone prove a given observation existed on a given day and was never altered after the fact. This page shows today's chain head and how to re-derive it yourself.
The serialization is frozen (spec version 1.0, HASHCHAIN-SPEC.md). To reproduce any block:
D (each population's dated rows).{population}|{primary_id}|{observation_date}|{detail_sha256}
where detail_sha256 = SHA-256 of the canonical JSON (sorted keys,
separators (",",":"), NULL → "") of every OTHER column of that row.\n (UTF-8, no
trailing newline) → slice_bytes; slice_sha256 = SHA-256(slice_bytes).block = SHA-256(prev_block_hex + ":" + D + ":" + slice_sha256_hex), genesis
prev = "0"*64, walking dates in ascending order. The last block is the head above.Seal policy. Each day's slice is sealed the following day, once complete — the
current, still-accumulating day is never sealed. (This is why the head's latest block date is
yesterday, not today.) An empty day is not a block — a coverage gap is
interval-censored, never a zero slice. The reference implementation
(p6/mcp_chain_build.py --verify) does exactly this re-derivation and must reproduce the
published head bit-for-bit.
Any read endpoint accepts ?as_of=YYYY-MM-DD and answers with the observation's
real date, its source, and a censoring status — never a nearest-value guess. A date before
coverage returns not-observed-at-date; a carried-forward value is marked
interval-censored.