packaging §8.11 registers the record `wai.delivery.marks` (`wai-pack-marks`): a lead's shots (the pieces that follow a cut of wai.pack.scenecut/1, as its stage index flags them), its chapters (titled spans, each beginning at the start of the piece its instant falls in), its break candidates (piece starts a cue began, a chapter begins at or a cut precedes, none inside a clip) and its clips (the run of whole pieces each moment of the policy covers). They are a pure function of the lead's stage index, the effective policy and the chapters a packager is given; the index is held to the policy by digest, so the cuts' thresholds are the policy's, and its moment bits must be §8.1's. A verifier holding the index and the policy derives them again and compares byte for byte (`marks-mismatch`); a policy whose threshold differs from the one the index was cut under is refused (`marks-policy`). They are written as one canonical JSON document, a WebVTT file using chapter title text, EXT-X-DATERANGE tags of three WAI classes after an EXT-X-PROGRAM-DATE-TIME, and DASH EventStreams of the scheme tag:transaction.science,2026:wai/marks, each read back to what it was written from; a reader refuses what its writer would not write (`marks-vtt`, `marks-hls`, `marks-dash`). Texts read: WebVTT CRD 2026-05-20, draft-pantos-hls-rfc8216bis-22 §4.2 and §4.4.5.1, and ISO/IEC 23009-1:2026's MPD schema (PeriodType, EventStreamType, EventType, example G9). The reference packager does not yet write marks into a package. sink-predicate §9 registers `wai.delivery.sink_reel` (`wai-sink-reel`): a source's signed reel predicate naming a programme's marks by digest, each reel a list of candidate clips with the tags a viewer must follow to want each, the regions each is shown in and its caps. A sink assembles each reel from its own location, exposures and interests (the tags its viewer follows, held on the device; unidirectional-delivery §2 names the class), takes in order the candidates its interests want, shown at its location, uncapped and fitting the reel, and presents them in the programme's order. Nothing about the viewer leaves the device; a reel predicate holding a member that would send something is refused `predicate_needs_report`. A candidate may want only tags its clip's record carries (`reel_clip_mismatch`); a sink's log naming a clip with no record in the marks is refused `reel_clip_unknown`, one presenting a clip its interests do not want `reel_not_wanted`. The references are wai-rs's `pack_marks` (feature `pack_marks`) and `sink_predicate::reel` (feature `sink_reel`). The corpora are pack-conformance/marks/ (33 derivations, 18 documents, 26 forms; the indexes of its two fixture cases hold the pieces scenecut/1 cuts the scene-cut corpus's frames into) and live-conformance/sink-reel/ (49 reel predicates, 22 evaluations, 17 logs). marks_verify.py and sink_reel_verify.py, their second implementations, agree on every case; marks_verify.py recomputes the fixtures' cuts from their frames under the policy's thresholds; they fail every mutated copy (11 of 11, 14 of 14) and catch every weakened verifier (24 of 24, 28 of 28). Twenty-three faults planted in the references each fail their tests: a threshold changed in the policy accepted, a fixture's cut moved, a forced piece counted as a shot, a cut inside a clip offered, a cue inside a clip passed over, a chapter begun off its piece, moment bits, the plan digest and a live window unchecked, a quoted title, an unescaped WebVTT title, the HLS reader not held to the writer, DASH events renumbered, a mismatched document verified; and for reels, a reel or a log naming a clip with no record, a sink without interests wanting every clip, the source's order presented, exposures not carried across reels, a report member read, the wrong signing domain, a want the clip's record does not carry, and a reel assembled outside its span. Co-Authored-By: Claude Opus 5.5 <[email protected]>
2 KiB
live-conformance/sink-reel — highlight reels assembled on the sink
The corpus of extensions/sink-predicate.md §9, in one file,
vectors.json.
Provenance. Generated here by wai_sink_reel_vectors gen (wai-rs, feature sink_reel), from
Ed25519 keys on seeds of one byte repeated 32 times and constant instants; the programme's marks are
derived by pack_marks from a stage index the generator writes. 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.
keys names every key by its role, as 64 lowercase hexadecimal digits: the source that signs the
reel predicates, other_source, and small_order, the identity point.
predicates(§9.1) are each a reel predicate'stext;outcomeisread, with itsdigest,source,marksandstate, orrefuseand itsreason.evaluations(§9.3) are each a reel predicate'stext, the programme'smarks(a document of packaging §8.11.3), a sink'sstate(itslocation, itsinterestsand itsexposures, eachnullwhen not kept, and itssources) and the instantnow;outcomeisevaluated, with each reel assembled (reel, itsclipsin the order presented,taken_msandrest_ms), orrefuseand itsreason.logs(§9.4) are each the same inputs, areeland thelogof clips presented;outcomeisconforms, orrefuseand itsreason.
Everything is synthetic: keys attest nothing, and the clips' tags name no team. Each case states the outcome it was written to have, declared in the generator and never copied from a verifier.
wai_sink_reel_vectors verify and tests/sink_reel.rs check that the file regenerates byte for
byte and that wai-rs reaches every stated outcome. ../sink_reel_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.