erasure evidence, verified in your browser
obsel answers one question about a right-to-erasure request: which of the assets the subject's data reached has anybody actually accounted for? It walks the lineage DataHub records, holds every reachable asset at UNPROVEN, and lifts one only when a signed attestation covers it. It holds no warehouse credentials and reads no warehouse data, so it cannot establish absence itself and never claims to.
The bundle below is real, captured from a live run against a real DataHub on 2026-08-10. It is checked when this page loads and again every time you press a button, by the same script you can run yourself with Node and nothing else:
node scripts/verify-erasure-evidence.mjs examples/erasure-evidence/bundle.json
repository attestation.ts erasure.ts the verifier this page runs
A bundle is what GET /api/erasure/<id>/evidence returns: the signed
envelopes as they were signed, the attestor key registry, the challenges obsel issued, the
lineage as DataHub recorded it, and obsel's own answer. The subject's identifiers are
replaced by salted digests before a bundle leaves the server.
what was edited
| field | |
|---|---|
| before | |
| after | |
| expected refusal |
Each button edits one field of a copy of the bundle and re-runs the same verification. The edit is shown next to the result, before and after, so you can hold the outcome against the change. The original is never modified.
Re-runs verification over the unedited bundle.
If you are running obsel, the same check accepts the bundle your server returns. The file stays in your browser; this page makes no network request after loading.
The signature check, the challenge and key rules, and the coverage computation on this page
are attestation.ts, erasure.ts and
verify-bundle.mjs from the repository, bundled unchanged. One thing is
substituted: the Ed25519 and SHA-256 arithmetic, which the server takes from
node:crypto and this page takes from @noble/ed25519 and @noble/hashes, because
the browser's own crypto API is asynchronous and the verifier is deliberately not. A test in
the repository holds the two arithmetics to the same answers over the same bundles, tampered
and not, and nothing else here is stood in for: verify-bundle.mjs touches no
filesystem, so the build has no Node built-in left to replace.
What this page cannot establish: that the data is gone. An attestation is a signed claim by a named attestor, not a measurement obsel took. The page shows who said what, over which version, under which key, and what nobody has said anything about.