obsel

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

the evidence bundle

the bundle, verbatim

      

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.

tamper with it

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.

verify a bundle of your own

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.

what runs where

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.