open-standards/wai/live-conformance/channels/README.md
Transaction Science 01053b3874 wai: register wai.video.lineup, its magic WLU1, and the CI step
The record in the registry's table, with its wire identifiers (WLU1,
wai-channel-feed, urn:wai:guide:, wai-asset-id, wai-now-next) and the export
regenerated; SPEC §5's paragraph and the CHANGELOG entry. The lineup's magic
is WLU1: WCL1 is live-recording's link record, which the registry's test of
wire identifiers caught. The conformance workflow runs the module's tests,
tests/channel_lineup.rs, the corpus tool's verify and channel_lineup_verify.py,
and builds the feature alone; the catalogue workflow fires on the corpus,
which tests/cli_ops.rs reads. Studio's generated actions follow the catalogue.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 17:23:18 -04:00

3.5 KiB

live-conformance/channels — channel lineup and guide

The corpus of extensions/channel-lineup.md §11: a sample linear channel as operators exchange it, imported into its wai.video.channel receipt and its WLU1 lineup, its guides, and what a verifier states of each. Every file but this one is written from fixed seeds by wai_channel_lineup_vectors gen (feature channel_lineup), and wai_channel_lineup_vectors verify <dir> and tests/channel_lineup.rs require them byte for byte. The second implementation is ../channel_lineup_verify.py, run as python3 -I channel_lineup_verify.py channels.

The sample channel, sample-1, is two hours on 2026-10-29 from 18:00 UTC, four programmes of three content owners, with four ad breaks:

file what
sample.xmltv.xml the schedule: XMLTV, with a document type declaration, a second channel's programme beside it, and times in three zone forms
sample-a.mrss.xml, sample-b.mrss.xml two owners' Media RSS catalogues: content, durations, titles, categories, thumbnails, ratings and country restrictions, one item under media:group, one item no programme names
sample.m3u8 the channel's Media Playlist: SCTE-35 date ranges with real splice_insert() and time_signal() sections and their CRC, an out/in pair split across two tags of one ID, one duration from END-DATE, and a date range that is not a break
sample.json the same channel in the JSON form
art-*.svg the artwork the icons and thumbnails name
sample.channel.json the receipt the sample yields, its first hour the window
sample.guide.xml, sample.part.guide.xml XMLTV guides of the whole schedule and of a range
sample.now-next.json, sample.before.now-next.json, sample.after.now-next.json now/next documents inside a break, before the schedule and after it
media_rss_loop.channel.json the receipt of one owner's items alone, back to back
aired-misreported.channel.json a receipt, signed, whose program-as-run its window does not give
vectors.json the operator's key, and every vector

vectors.json holds:

  • operator: the key that signs every receipt and lineup, and its seed (a published seed: a test key that attests nothing);
  • imports: each with its inputs (§4.1: the files it reads, owners, id_system, xmltv_channel, start_ms, the artwork set by file name, the window, signer_id and parent_receipt_hash), its edits, and its outcome: {"refused": reason}, or the receipt's file and identity, the lineup's bytes and digest in hexadecimal, and the cues (each break's id, its start and its live-events cue payload in hexadecimal);
  • verifications: each with its receipt file, its lineup bytes in hexadecimal, its guide file or null, its edits, and its facts, what §8.3 states: verdict, part, receipt, lineup, guide (format, from_ms, to_ms, at_ms, and its programmes, each start_ms, stop_ms, asset_id and aired), and entry.

An edit is applied to a copy of the file it names before the vector is run: {"file", "find", "replace"} replaces the one occurrence of find (an edit whose find does not occur exactly once is a broken vector); with "repeat": n it keeps find and writes replace n times after it; and {"file", "pad"} appends that many space bytes. Each control is the sample with one such change, or with one input changed.