With wai.delivery.settlement on main, the reserved 'served' slot is filled: the upstream of an acknowledgement or declaration whose item lists name a covered object is a holder (role served), and the downstream of a hop's acknowledgement is one too (role received); a sink is never held to purge. Acknowledgements read under settlement §3.6 with their item lists recomputed (evidence_invalid otherwise), and count for the matched class too. The corpus gains two acknowledgements (a viewer's from a cache outside the stores, and that cache's from the relay), a case whose cache never purged (purge_missing) and one whose item list does not recompute; the Python verifier reads them with settlement_verify.py and gains two mutations and two droppable checks. Co-Authored-By: Claude Opus 5.5 <[email protected]>
2.7 KiB
live-conformance/takedown — takedown across every rendition and cache
The corpus of extensions/takedown.md §12, in one file,
vectors.json: a world the cases share, the cases, each a case of §8.1 and what a
verifier gives it, and the counts, each a counts record over named cases and what §9.2 gives
it.
The world holds the registry (the text of registry/takedown-clocks.json
as the repository publishes it), the service's policy, the derivation records, the origin
claims, all as JSON texts, the delivery receipts of the two groups, as JSON values, and the
acknowledgements (settlement §3), each its record and the items list of each of its
entries, in hexadecimal. A
case holds the members it sets (notices, takedown, matches and purges as texts, and
as_of as a time) and any member of the world it replaces; the case a verifier is given is the
world's members with the case's in their place.
Takedown equivalence. For each case, a conforming verifier reaches the outcome it states:
refuse: thereasonand its place,at(§8.2):["registry"],["policy"],["notice", i],["takedown"],["record", i],["claim", i],["match", i],["acknowledgement", i],["purge", i],["group", g],["exact", k],["closure", k]or["matched", k];accept,pending, ormissedwith itsreason: thefactsof §8.3, every member of them, each time as its value in seconds from 1970-01-01T00:00:00Z.
For each counts entry, a conforming verifier verifies its cases (by name, in order) at the
counts' as_of and gives accept with the rows it recomputes, or refuse with the reason
and at, ["counts"] or ["case", i, …]. A verifier that reaches another outcome, reason,
place, fact or row does not conform.
Provenance. wai_takedown_vectors gen writes vectors.json from records authored in code:
every key is SHA-256 of the corpus's label and an index, every envelope is SHA-256 output of a
label and is named only by its content hash, every time and text is a constant, and Ed25519
signing is deterministic, so the file is the same bytes on every machine. The registry is read
from the repository's file, not authored here. The derivation records and origin claims read
under their own extensions' rules and their signatures verify; their receipts, samples and
recomputation are not part of what a takedown verifier checks, and the corpus does not make them
consistent beyond that. The match method the corpus names,
wai-takedown:example-perceptual-hash, names no algorithm: the corpus exercises the records, not
a matcher.
python3 -I ../takedown_verify.py .