| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .. | ||
| README.md | ||
| vectors.json | ||
live-conformance/termination — stream termination and the display match
The corpus of extensions/stream-termination.md §8
and of the display match of
extensions/capability-constraints.md §4:
display declarations against ladders, and stream logs a sink signed (WSL1 records), each with
the outcome a verifier gives it.
Equivalence. For each match, a conforming implementation given the declaration, the
ladder and the rendition reaches the exceedances of that rendition, its match, the
ladder's admissible renditions and its least (capability-constraints §4.2). For each log, a
conforming verifier given its records (hexadecimal, in order) reaches the outcome stated
(stream-termination §6.3):
refuse: thereasonandat, the index of the record refused;accept:record_countandsegments;media(videooraudio);terminated, the reason of the terminate record ornullfor an open log, andmedia_end, its media time; thetotals(by role and class: figures and joules) andunmeteredcounts (by role) of the segment receipts; the rolesabsentfrom every segment receipt; for video,panel(the segments within the declaration in effect, and those served undernone_within),unseen_usandunwatched(the segments made after the sink's grace had run out while the stream was unseen, with their totals and unmetered counts);nullfor each of those three for audio.
A verifier that reaches another outcome, reason, index or fact does not conform.
Provenance. Generated here: wai_stream_termination_vectors gen writes vectors.json
from records written in code, from fixed seeds: each key is SHA-256 of the corpus's fixed
label and an index, each stream and segment digest SHA-256 of another fixed label and a name,
every time is a constant (from 2026-10-16T00:00:00Z), and Ed25519 signing is deterministic
(RFC 8032), so the file is the same bytes on every machine. The panels, ladders, timings and
joule figures are synthetic, chosen to exercise the rules, and were measured by nothing: the
corpus claims nothing about the energy any device spends or any termination saves. The
generator asserts that each log reaches the outcome it was written to have before it writes it.
Layout
One file, vectors.json:
sink_keys: the public keys the logs are signed with (informative): the video sink's, a stranger's (sink_changed), and the audio sink's.matches: within; each exceedance alone (resolution, refresh, bit depth, an HLG rendition on an SDR panel) and every one together; both orientations; a refresh rate of 59.94 under a panel declared at 60; a PQ rendition on an HDR panel; a panel smaller than every rendition, its least admissible and the other not; the least by frame rate, by range and in a tie.logs: accepted, a video stream terminated as hidden after its grace with a segment counted unwatched; as occluded and as display off; as idle after interactions; as autoplayed with no interaction; stopped by the viewer, its sink decode under two classes; an audio stream that goes on while hidden; an open log; a panel smaller than every rendition; display records that change the declaration down and back up; a hidden document observed hidden twice; an HDR panel. Refused, each reason of §7 and the codes it reuses (truncated,malformed,unknown_version,bad_key,bad_signature,energy_invalid), each a control of one defect.
Regenerate and verify
cd wai/wai-rs
cargo run --no-default-features --features stream_termination --bin wai_stream_termination_vectors -- gen ../live-conformance/termination
cargo run --no-default-features --features stream_termination --bin wai_stream_termination_vectors -- verify ../live-conformance/termination
cargo test --no-default-features --features stream_termination --test stream_termination
cd ..
python3 -I live-conformance/stream_termination_verify.py live-conformance/termination
python3 -I live-conformance/stream_termination_verify.py --log <log.json> # one log a sink signed