live-ads §14.3 requires every Group of a listing to have an Object. The reference held the programme's listing to that and composed a creative's listing with an empty Group; the second implementation refused it. The text decides for the refusal and now says where: stitch_listing_malformed at the placement whose fill names the creative, after stitch_creative_unknown and before stitch_fill_exceeds_span; a listing no fill names is not read. live_ads::stitch::compose follows it. A stitching case of live-conformance/ad-signalling/ may state creatives' listings of its own (creatives, null for the corpus's). Two cases hold the rule from both sides, and the second implementation's check is its own (creative_group_has_object), so the corpus catches a verifier without it apart from the programme's: 63 of 63. Co-Authored-By: Claude Fable 5.2 <[email protected]>
2.6 KiB
live-conformance/ad-signalling — ad creative signalling and content stitching over MoQ
The corpus of 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.mdwith, 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;nullfor the corpus's), a recipe and the composed track it gives, or a composed track's listing and where it is refused; andwritten, the session origins and device bindings a stitcher's edge and its players write for the room of sessions of../ad-traffic/, with what the invalid-traffic rules decide from them.catalog.json: a catalog that declares an ad creative timeline (moq-streaming-format §4.7), held bywai/ietf/catalog_check.py --strict.draft-vectors/: the test vectors and the test key set ofdraft-riedl-moq-ad-creative-signaling-01, copied unchanged from the draft's source repository (github.com/riedlse/draft-riedl-moq-ad-creative-signaling, commit443f90b2). They are Contributions to the IETF Standards Process, under the IETF Trust's Legal Provisions (BCP 78).vectors.jsonnames 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.