111 cases across 17 classes, drawn from a real deletion event (2026-06-19) and its aftermath. Every case carries subject-explicit ratified axes โ validity / presence (sparse: removed | never_landed | no marker) / edges โ an axis_subject naming what each axis value is about, a reason object where not_disclosed and unknown are first-class, and machine-readable expected blocks so an implementation can pass or fail. Validity is never derived from identifier survival.
| recorded validity | n | observed | agreement |
|---|---|---|---|
| verified_tombstone | 62 | 410 ร 62 | 100% |
| verified_registered | 18 | 200 ร 18 | 100% |
| verified_erased_registration | 12 | 404 ร 7, 410 ร 5 | split โ the finding, preserved |
| fragment_candidate | 3 | 404 ร 3 | 100% |
| registry_resolution_divergence | 8 | DataCite GET state: findable (UTC-stamped) vs DOI 410 | 8/8 diverged |
cases.json: run python3 verify_offline.py (no network). Live re-probing is optional (reprobe_live.py), emits dated observation reports, and never mutates expected results. The fixture is frozen by manifest.json (SHA-256 per file + source commit).The dataset is CC0 1.0: the license covers selection, annotation, arrangement, and original text; it does not โ and cannot โ relicense third-party identifiers or their metadata, which are public-resolution artifacts recorded here as observed. The fixture records observed resolution state, not a judgment on any host's policy.