# live-conformance/sink-predicate — sink-evaluated predicates The corpus of [`extensions/sink-predicate.md`](../../extensions/sink-predicate.md) §7, in one file, `vectors.json`. **Provenance.** Generated here by `wai_sink_predicate_vectors gen` (`wai-rs`, feature `sink_predicate`), from Ed25519 keys on seeds of one byte repeated 32 times and constant instants; no input from outside this repository. Every region is an ISO 3166-1 user-assigned code (`XA`, `XB`, …) or a subdivision of one, and names no place; every creative digest is the SHA-256 of its ad's name. `keys` names every key by its role, as 64 lowercase hexadecimal digits: the `source` that signs the predicates, `other_source`, and `small_order`, the identity point. - `predicates` (§3.4, §3.5) are each a predicate's `text`; `outcome` is `read`, with its `digest`, `source`, `programme` and `state`, or `refuse` and its `reason`. - `evaluations` (§4) are each a predicate's `text` and a sink's `state`: its `location` (a region code or `null`), its `exposures` (each a `counter` and an instant `at`, or `null` for a sink that keeps none) and its `sources`; `outcome` is `evaluated`, with the `verdict`, the blackouts `applied`, the `alternate` and, for each slot filled, its `slot`, its `ads` and its `rest_ms`; or `refuse` and its `reason`. - `logs` (§5) are each a predicate's `text`, the sink's `state` before the slot, the `slot` and the `log` of ads it presented; `outcome` is `conforms`, or `refuse` and its `reason`. Everything is synthetic: keys attest nothing. Each case states the outcome it was written to have, declared in the generator and never copied from a verifier. `wai_sink_predicate_vectors verify` and `tests/sink_predicate.rs` check that the file regenerates byte for byte and that `wai-rs` reaches every stated outcome. `../sink_predicate_verify.py` is the second implementation, written from the extension's text, which also mutates copies of the corpus and drops each of its own checks in turn and requires each to be caught.