# live-conformance/ad-signalling — ad creative signalling and content stitching over MoQ The corpus of [`extensions/live-ads.md`](../../extensions/live-ads.md) §13 and §14. - `vectors.json`: `jwks`, the key set every record is checked against, whose last key is of another curve and is passed over; `records`, records read on their own, each with what it is and whether its signature verifies, or the reason it does not read; `objects`, two Objects of records; `room`, a room in the form of [`../presentation/README.md`](../presentation/README.md) with, for each case, the records given for one session and the break and receipt each binds to, or the record refused and why; `stitch`, a programme's listing, the creatives' listings and, for each case, the listings it states in their place (`programme`, `creatives`; `null` for the corpus's), a recipe and the composed track it gives, or a composed track's listing and where it is refused; and `written`, the session origins and device bindings a stitcher's edge and its players write for the room of sessions of [`../ad-traffic/`](../ad-traffic/), with what the invalid-traffic rules decide from them. - `catalog.json`: a catalog that declares an ad creative timeline ([moq-streaming-format](../../extensions/moq-streaming-format.md) §4.7), held by `wai/ietf/catalog_check.py --strict`. - `draft-vectors/`: the test vectors and the test key set of `draft-riedl-moq-ad-creative-signaling-01`, copied unchanged from the draft's source repository (github.com/riedlse/draft-riedl-moq-ad-creative-signaling, commit `443f90b2`). They are Contributions to the IETF Standards Process, under the IETF Trust's Legal Provisions (BCP 78). `vectors.json` names each by its file and states what a reader of §13 makes of it. Written by `tests/ad_signalling.rs` (`WAI_AD_SIGNALLING_WRITE=1 cargo test --features live_ads --test ad_signalling`), whose generator declares each outcome by hand and requires the reference to reach it. The second implementation, written from the text: ``` python3 -I live-conformance/ad_signalling_verify.py live-conformance/ad-signalling ``` It reads, canonicalises and verifies every record itself, verifies the room with the live-ads and ad-presentation second implementations, binds, composes and compares by §13.6, §14.3 and §14.4, rebuilds every origin and binding, judges the sessions with the ad-traffic second implementation, requires every changed copy of the corpus to fail, and switches off each of its own checks in turn: the corpus catches every one, the limits (65,536 bytes, 16 deep, 15 significant digits, 64 slots) from both sides.