Three mappings, each with a reference module, a corpus and a second implementation written from its text. None changes a byte of a decision, a cue, a policy, a receipt or a claim, and nothing is wired into a relay, a room service or a player. - SCTE 224 import (audience-decision §10, new; audience_decision::scte224). A Media document whose policies are applied by time, over audiences stated in region codes and with the blackout action, imports to the blackouts in force over each span of its programme; spans are written back as a document that imports to them; a decision or a sink predicate is held to its document, so a verifier recomputes the decision. What does not carry exactly refuses the document with its own reason: an audience of postal codes or one that excludes, another action, a signal-matched media point, an eligibility window, a priority, an open-ended policy, an unresolved reference. Read: the schema of ANSI/SCTE 224 2021 (scte_224_20211011.xsd) and a public encoding practice (BP-EPG-BLK v1.0 draft); the standard's own text was refused to an unattended fetch and was not read, and §10.1 lists what that leaves unbound (decision D10). - Ad creative signalling (draft-riedl-moq-ad-creative-signaling-01; live-ads §13, new; live_ads::creative). A session's fill of a break as the draft's record on an MSF event timeline, signed by the decider as a detached JWS over the record's RFC 8785 form; records read as untrusted input and held to the room's schedule and receipts. The draft's own vectors are in the corpus and its signed record verifies with its test key. The catalog member wai_ads (moq-streaming-format §4.7) is registered and held by catalog_check.py --strict, with ten planted faults. - Content stitching (draft-englishm-moq-content-stitching-00; live-ads §14, new; live_ads::stitch). The composed track is a function of the programme's listing, the schedule and the receipts, changing ingredient at Group boundaries alone, and a verifier recomputes it; a break is stitched at a break candidate of a package's marks where marks are given. The stitcher is the edge of ad-presentation §14.3 and writes the session origin (WSO1); the player writes the device binding (WDB1); the invalid-traffic rules decide from those records in the corpus (decision D11). Planted faults, each refused with its own reason by the reference and by the second implementations: a policy with an unmappable audience (scte224_audience_unmappable); a creative signal for a break that does not exist (creative_break_unknown); 31 more documents, 15 more room cases, 13 stitch cases and 23 record cases. Corpora: wai/live-conformance/audience-scte224/ (audience_scte224_verify.py) and wai/live-conformance/ad-signalling/ (ad_signalling_verify.py); wai conform --independent runs both. Each second implementation prints the checks of its own that the corpus holds no case for (39 and 14). Co-Authored-By: Claude <[email protected]>
17 KiB
live-conformance — the wai.live family
Conformance corpora of the live and interactive extensions, one directory per extension, and the independent verifier of each, beside it.
| directory | extension | generator | verifier |
|---|---|---|---|
events/ |
live-events (wai.live.events) |
wai_live_events_vectors gen |
live_events_verify.py |
rooms/ |
live-rooms (wai.live.room) |
wai_live_room_vectors gen |
live_rooms_verify.py |
takes/ |
capture-binding (wai.capture.take) |
wai_capture_take_vectors gen |
capture_take_verify.py |
compose/ |
live-compose (wai.live.compose) |
wai_live_compose_vectors gen |
live_compose_verify.py |
compose-ad-track/ |
live-compose §5.10 (wai.live.compose: per-session ad tracks, WAT1) |
wai_compose_ad_track_vectors gen |
compose_ad_track_verify.py |
recordings/ |
live-recording (wai.live.recording) |
wai_live_record_vectors gen |
live_record_verify.py |
captions/ |
timed-text (wai.text.timed) |
wai_timed_text_vectors gen |
timed_text_verify.py |
metering/ |
live-metering (wai.live.metering) |
wai_live_metering_vectors gen |
live_metering_verify.py |
steering/ |
energy-steering (wai.live.steering) |
wai_energy_steering_vectors gen |
energy_steering_verify.py |
moderation/ |
live-moderation (wai.live.moderation) |
wai_live_moderation_vectors gen |
live_moderation_verify.py |
ads/ |
live-ads (wai.live.ads) |
wai_live_ads_vectors gen |
live_ads_verify.py |
e2ee/ |
confidentiality (wai.live.e2ee) |
joule_moq_e2ee_vectors gen (joule-moq-mls) |
e2ee_verify.py |
messaging/ |
live-messaging (wai.live.message, wai.live.call) |
wai_live_messaging_vectors gen |
live_messaging_verify.py |
watermark/ |
forensic-watermark (wai.live.watermark) |
wai_live_watermark_vectors gen |
live_watermark_verify.py |
c2pa-live/ |
live-provenance (wai.live.provenance) |
wai_live_provenance_vectors gen |
c2pa_live_verify.py |
c2pa-envelope/ |
c2pa-binding (wai.asset.c2pa) |
wai_c2pa_envelope_vectors gen |
c2pa_live_verify.py |
c2pa-identity/ |
c2pa-binding §4.8 to §4.10, §6.4 (soft bindings, the ISCC soft binding and identifier, identity assertions, trust lists) | wai_c2pa_identity_vectors gen |
c2pa_live_verify.py |
c2pa-sdk-identity/ |
c2pa-binding §4.11 (identity assertions in manifests a C2PA SDK signed) | wai_c2pa_sdk_identity_vectors gen wrote it once; its files are pinned by digest, not regenerated |
c2pa_sdk_identity_verify.py |
iscc/ |
iscc (ISO 24138 codes) | wai_iscc_vectors gen, beside the public vectors it replays |
iscc_verify.py |
synthesis/ |
synthesis (wai.media.synthesis) |
wai_synthesis_vectors gen |
synthesis_verify.py |
usage/ |
ai-usage (wai.ai.usage) |
wai_ai_usage_vectors gen |
ai_usage_verify.py |
contribution/ |
contribution (wai.media.contribution) |
wai_contribution_vectors gen |
contribution_verify.py |
settlement/ |
settlement (wai.delivery.settlement) |
wai_settlement_vectors gen |
settlement_verify.py |
audit/ |
stream-audit (wai.delivery.audit) |
wai_stream_audit_vectors gen |
stream_audit_verify.py |
native-sink/ |
native-sink (a native host's sink: verification, stream-audit's records, ending) | wai_native_sink_vectors gen |
native_sink_verify.py |
browser/ |
browser-sink (routing, constraint sets, energy entries, contentBinding) |
wai_browser_sink_vectors gen |
browser_sink_verify.py |
browser-floor/ |
browser-sink §14.9 (a graphics component's text floor, read and presented) | wai_browser_floor_vectors gen |
browser_floor_verify.py |
takedown/ |
takedown (wai.media.takedown) |
wai_takedown_vectors gen |
takedown_verify.py |
coperformance/ |
co-performance (wai.live.coperformance) |
wai_co_performance_vectors gen |
co_performance_verify.py |
influence/ |
influence (wai.media.influence) |
wai_influence_vectors gen |
influence_verify.py |
direction/ |
direction (wai.media.direction) |
wai_direction_vectors gen |
direction_verify.py |
bearers/ |
bearer-receipts (wai.bearer.receipts) |
wai_bearer_vectors gen |
bearer_verify.py |
compact-return/ |
bearer-receipts §13 (the compact return profile) | wai_compact_return_vectors gen |
compact_return_verify.py |
carousel/ |
carousel (wai.bearer.carousel) |
wai_carousel_vectors gen |
carousel_verify.py |
audience-scte224/ |
audience-decision §10 (SCTE 224 documents as blackouts) | tests/audience_scte224.rs, with WAI_AUDIENCE_SCTE224_WRITE=1 |
audience_scte224_verify.py |
ad-signalling/ |
live-ads §13 (ad creative signalling on a MoQ event timeline) and §14 (content stitching over MoQ) | tests/ad_signalling.rs, with WAI_AD_SIGNALLING_WRITE=1 |
ad_signalling_verify.py |
carousel-moq-fec/ |
carousel §8.3 (the MoQ FEC catalog binding) and bearer-receipts §9.7 (multicast endpoints) | tests/carousel_moq_fec.rs, with WAI_CAROUSEL_MOQ_FEC_WRITE=1 |
carousel_moq_fec_verify.py |
holdings/ |
holdings (wai.delivery.holdings) |
wai_holdings_vectors gen |
holdings_verify.py |
peer-delivery/ |
peer-delivery (the exchange; no capability) | wai_peer_delivery_vectors gen |
peer_delivery_verify.py |
http-egress/ |
live-http-egress (an egress's trace; no capability) | wai_live_egress_vectors gen |
http_egress_verify.py |
signal-health/ |
signal-health (wai.live.signal_health) |
wai_signal_health_vectors gen |
signal_health_verify.py |
timeliness/ |
timeliness (wai.delivery.timeliness) |
wai_timeliness_vectors gen |
timeliness_verify.py |
prices/ |
rung-price (wai.delivery.rung_price) |
wai_rung_price_vectors gen |
rung_price_verify.py |
cache-authority/ |
cache-authority (wai.delivery.cache) |
wai_cache_authority_vectors gen |
cache_authority_verify.py |
audience/ |
audience-decision (wai.video.audience, wai.delivery.territory) |
wai_audience_decision_vectors gen |
audience_decision_verify.py |
sink-predicate/ |
sink-predicate (wai.delivery.sink_predicate) |
wai_sink_predicate_vectors gen |
sink_predicate_verify.py |
sink-reel/ |
sink-predicate §9 (wai.delivery.sink_reel) |
wai_sink_reel_vectors gen |
sink_reel_verify.py |
machine-coding/ |
task-fidelity §5 (the split-computation claim), machine-descriptors, format-probes §19 |
wai_machine_coding_vectors gen |
machine_coding_verify.py |
impressions/ |
impression-aggregates (wai.delivery.impressions) |
wai_impression_aggregate_vectors gen |
impression_aggregate_verify.py |
access/ |
access-services (wai.access.services) |
wai_access_services_vectors gen |
access_services_verify.py |
presentation/ |
ad-presentation (wai.live.ad_presentation) |
wai_ad_presentation_vectors gen |
ad_presentation_verify.py |
age/ |
age-assurance (wai.age.assurance) |
wai_age_assurance_vectors gen |
age_assurance_verify.py |
exploration/ |
exploration (wai.media.exploration) |
wai_exploration_vectors gen |
exploration_verify.py |
cowatch/ |
co-watch (wai.live.cowatch) |
wai_co_watch_vectors gen |
co_watch_verify.py |
worlds/ |
live-worlds (wai.live.world) |
wai_live_world_vectors gen |
live_worlds_verify.py |
synthesis-mark/ |
synthesis §7.4 to §7.8 (the watermark scheme wai-mark:tent64) |
wai_synthesis_mark_vectors gen |
synthesis_mark_verify.py |
upscale/ |
exact-upscale (wai.media.upscale) |
wai_upscale_vectors gen |
upscale_verify.py |
models/ |
model-governance (wai.sink.models) |
wai_model_policy_vectors gen |
model_policy_verify.py |
prior-carriage/ |
prior-carriage §15 and http-delivery §8.7 (where a parameter set is fetched) | wai_prior_carriage_vectors gen |
prior_carriage_verify.py |
dred/ |
opus-dred (wai.audio.opus.dred.int) |
wai_dred_vectors gen (with the draft's weights file, dred/fetch.sh) |
dred_verify.py |
aggregate/ |
telemetry-aggregation (wai.telemetry.aggregate) |
wai_telemetry_aggregate_vectors gen |
telemetry_aggregate_verify.py |
tonemap/ |
exact-tonemap (wai.media.tonemap, wai.meta.gainmap, wai.meta.st2094_50) |
wai_tonemap_vectors gen |
tonemap_verify.py |
robustness/ |
robustness-evidence (wai.media.robustness) |
wai_robustness_vectors gen |
robustness_verify.py |
detection/ |
detection (wai.media.detection) |
wai_detection_vectors gen |
detection_verify.py |
splat/ |
splat-exact (wai.splat.exact) |
wai_splat_exact_vectors gen |
splat_exact_verify.py |
loc/ |
loc-carriage (WAI envelopes on LOC objects) | loc_vectors gen (a joule-moq example) |
loc_verify.py |
avatar-face/ |
avatars §6 to §13 (wai.avatar.face) |
wai_avatar_face_vectors gen |
avatar_face_verify.py |
termination/ |
stream-termination (wai.live.termination) and capability-constraints §4 (the display match) |
wai_stream_termination_vectors gen |
stream_termination_verify.py |
keys/ |
key-release (the proxy form of wai.video.keys) |
wai_key_release_vectors gen |
key_release_verify.py |
links/ |
live-contribution (wai.live.contribution) |
joule-moq-ingest-link-vectors --out (joule-moq-ingest) |
live_contribution_verify.py |
remote/ |
remote-desktop (wai.live.remote) |
wai_remote_desktop_vectors gen |
remote_desktop_verify.py |
Provenance. Generated here: each directory's corpus is written by its row's generator
(gen, in wai/wai-rs), from records authored in code and from fixed seeds, and each
directory's README says how. c2pa-live/ cuts its media from the packaging corpus's AV1
floor; c2pa-envelope/ carries pictures its generator draws, and c2pa-identity/ pictures it
draws and marks with wai-mark:tent64, with the robustness record the harness measures over them
and trust lists of its own test anchors in the C2PA Trust List's form; iscc/ holds, beside
pictures its generator draws, public.json, the ISCC public test vectors as transcribed and
pinned by digest (iscc/README.md); detection/ measures its stand-in detector over pictures it
draws; contribution/ and
influence/ generate their pictures with wai.generate.spectral
and the model file of that capability's conformance vector (influence/ also with a second
model file written from it); takedown/ carries the registry of clocks the repository
publishes, registry/takedown-clocks.json, as written there; and upscale/ reads two priors
that tools/wai_int_sr_train.py trained on pictures it generates (upscale/README.md).
tonemap/ renders generated HDR scenes to its stills with the reference's own encoder, and
tone-maps the frames of the int_video clip of the integer video corpus.
robustness/ generates its pictures with the dead-leaves generator of synthesis_mark and
with wai.generate.spectral, and measures the synthesis corpus's measurement sets, whose
samples it does not hold.
splat/ carries the learned cloud of wai-rs/tests/vectors/int_splat/ beside scenes
authored as attribute bytes.
joule_moq_e2ee_vectors gen (in
joule-code/joule-code-rs/crates/joule-moq-mls) writes e2ee/vectors.json from fixed seeds,
and e2ee/ also holds the test vectors RFC 9605 and draft-ietf-moq-secure-objects-01
publish, as printed (e2ee/README.md), and aggregate/vdaf-22/ the Prio3 test vectors of
draft-irtf-cfrg-vdaf-22, as published at the commit that draft names (aggregate/README.md).
dred/ names the weights file of draft-ietf-mlcodec-opus-dred-07 by its SHA-256 and holds no
copy: its generator and its verifier read the file the draft names, which dred/fetch.sh
fetches and checks. One recorded record: metering/relay-record.wmh and its ledger, which the
reference relay signed in its test. avatar-face/ reads a generator, two identity priors and
their keypoint tracks that tools/wai_avatar_face_train.py wrote from faces it generates
(avatar-face/README.md).
Each verifier is written from its extension's text, shares no code with the reference
(wai-rs, or for e2ee/, joule-moq and joule-moq-mls, and for links/,
joule-moq-ingest), and is run by
.github/workflows/wai-conformance.yml beside the reference's own check:
python3 live_events_verify.py events
python3 live_rooms_verify.py rooms
python3 capture_take_verify.py takes
python3 live_compose_verify.py compose
python3 live_record_verify.py recordings
python3 timed_text_verify.py captions
python3 access_services_verify.py access
python3 live_metering_verify.py metering
python3 energy_steering_verify.py steering
python3 live_moderation_verify.py moderation
python3 live_ads_verify.py ads
python3 ad_presentation_verify.py presentation
python3 e2ee_verify.py e2ee
python3 live_messaging_verify.py messaging
python3 live_watermark_verify.py watermark
python3 c2pa_live_verify.py c2pa-live
python3 c2pa_live_verify.py c2pa-envelope
python3 c2pa_live_verify.py c2pa-identity
python3 iscc_verify.py iscc
python3 synthesis_verify.py synthesis
python3 synthesis_mark_verify.py synthesis-mark
python3 upscale_verify.py upscale
python3 model_policy_verify.py models
python3 avatar_face_verify.py avatar-face
python3 ai_usage_verify.py usage
python3 contribution_verify.py contribution
python3 settlement_verify.py settlement
python3 stream_audit_verify.py audit
python3 native_sink_verify.py native-sink
python3 browser_sink_verify.py browser
python3 browser_floor_verify.py browser-floor
python3 takedown_verify.py takedown
python3 co_performance_verify.py coperformance
python3 age_assurance_verify.py age
python3 influence_verify.py influence
python3 direction_verify.py direction
python3 exploration_verify.py exploration
python3 co_watch_verify.py cowatch
python3 dred_verify.py dred <weights-file>
python3 telemetry_aggregate_verify.py aggregate
python3 tonemap_verify.py tonemap
python3 robustness_verify.py robustness
python3 detection_verify.py detection
python3 splat_exact_verify.py splat
python3 stream_termination_verify.py termination
python3 key_release_verify.py keys
python3 live_contribution_verify.py links
python3 remote_desktop_verify.py remote
python3 live_worlds_verify.py worlds