open-standards/wai/live-conformance/signal-health/README.md
Transaction Science da8dce1844
Some checks failed
WAI operation catalogue / does this change touch it (push) Successful in 1m54s
wai-key-proxy / does this change touch it (push) Successful in 1m55s
wai-audit collector and player integration / does this change touch it (push) Successful in 1m57s
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 1m58s
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 1m59s
wai-fleet service / does this change touch it (push) Successful in 1m58s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 1m59s
wai-app and Create / wai-app · does this change touch it (push) Successful in 1m59s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Successful in 55s
wai-ledger service / does this change touch it (push) Successful in 1m7s
wai-sink-android native sink library / does this change touch it (push) Successful in 1m7s
wai-quantum for JavaScript / does this change touch it (push) Successful in 1m9s
wai-quantum studio and desktop / does this change touch it (push) Successful in 1m8s
WAI Studio / does this change touch it (push) Successful in 1m7s
wai-sink-swift native sink package / does this change touch it (push) Successful in 1m8s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 1m28s
wai-fleet service / service · macos (push) Successful in 42s
wai-ledger service / service · macos (push) Successful in 1m1s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 4m24s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Successful in 6m22s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (push) Has been cancelled
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Has been cancelled
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Has been cancelled
wai-audit collector and player integration / collector · linux (push) Has been cancelled
WAI operation catalogue / the catalogue and every door · linux (push) Has been cancelled
wai-fleet service / service · linux (push) Has been cancelled
wai-key-proxy / proxy · linux (push) Has been cancelled
wai-ledger service / service · linux (push) Has been cancelled
wai-quantum for JavaScript / javascript · linux (push) Has been cancelled
wai-quantum energy-landscape jobs / does this change touch it (push) Has been cancelled
wai-quantum energy-landscape jobs / reader, kernels, answers and the stated result · linux, release (push) Has been cancelled
wai-quantum energy-landscape jobs / the same bits · linux-arm64 (push) Has been cancelled
wai-quantum energy-landscape jobs / the same bits · macos (push) Has been cancelled
wai-quantum energy-landscape jobs / the module under wasm32-wasip2 (wasmtime) (push) Has been cancelled
wai-quantum energy-landscape jobs / native against WebAssembly, over many seeds (push) Has been cancelled
wai-quantum studio and desktop / studio · browser (push) Has been cancelled
wai-quantum studio and desktop / desktop app · linux (push) Has been cancelled
wai-quantum studio and desktop / desktop app · windows (push) Has been cancelled
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Has been cancelled
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Has been cancelled
WAI Studio / Studio in WebKit · linux (push) Has been cancelled
WAI Studio / Studio in Chromium and Firefox · macos (push) Has been cancelled
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Has been cancelled
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Has been cancelled
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 14s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 2m11s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 5m12s
wai: signal health — what a monitor measured on an input, signed, and the switch that acts on it
A channel's operator needs to know, per input, whether the picture went black or froze, the sound
went silent, captions or cues stopped, or the transport stream broke; and an input switch needs
that answer from a monitor it can hold to account.

extensions/signal-health.md registers `wai.live.signal_health`: a monitor's signed record (WSH1)
of one input over a window with up to six checks: black and freeze over the decoded luma, silence
in 10 ms blocks, caption and cue gaps, and the first-priority indicators of ETSI TR 101 290 V1.4.1
(sync lost with its five-and-two hysteresis, bad sync bytes, PAT_error_2, continuity, PMT_error_2,
PID_error). Each check states its thresholds, its integer values, the digest of the media it read
and its verdict. A verifier holds each verdict to its values and thresholds and each threshold to
the profile it expects with no media, and recomputes every value with it; an input switch carries
the first input whose latest record by a trusted monitor is fresh and states no fault.

The reference is the `signal_health` module of wai-rs; the corpus is live-conformance/signal-health/
(41 records, 26 checks against a profile and their media, 10 switches), its media written from
fixed seeds with each case's values declared and held by the generator, and signal_health_verify.py
is its second implementation: 77 cases agree, 14 of 14 mutated copies fail and 30 of 30 weakened
verifiers are caught. Twelve faults planted in the reference (the verdict rule, the freeze's held
frame, the duplicate allowance, the discontinuity indicator, the profile, trust, silence over one
channel, the PAT gap, the end of the window, the sync hysteresis, the media digest, freshness) each
fail its tests.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-08 14:48:46 -05:00

40 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# live-conformance/signal-health — what a monitor measured on an input
The corpus of [`extensions/signal-health.md`](../../extensions/signal-health.md) §9, in one
file, `vectors.json`.
**Provenance.** Generated here by `wai_signal_health_vectors gen` (`wai-rs`, feature
`signal_health`), from Ed25519 keys on fixed 32-byte seeds, constant instants, and media the
generator writes from a linear congruential generator with fixed seeds: luma planes of 16 × 8
and 8 × 8 samples, two channels of 16-bit samples at 800 Hz, caption and cue instants, and
transport streams of 40 packets at 30 080 bit/s (a packet every 50 ms) holding a program
association and a program map section with their CRCs and packets of two elementary streams;
no recording and no input from outside this repository.
`keys` names every key by its role, as 64 lowercase hexadecimal digits: two monitors a switch
trusts (`monitor_a`, `monitor_b`) and one it does not (`rogue`). `profile` gives the operator's
thresholds, per check by name; `switch` the switch's inputs in its order, the keys it trusts and
`max_age_ms`.
- `records` (§4, §6.1, §6.2) are each a record's `bytes` in hexadecimal, and its `outcome`:
`read`, with its `digest`, `input` and the names of its faulted checks (`faults`); or `refuse`
and its `reason`.
- `checks` (§6.3, §6.4) are each a `record`, the `profile` a verifier expects (or `null`) and the
`media` it holds: `frames` (each `at_ms`, `width`, `height` and `luma` in hexadecimal), `audio`
(`at_ms`, `rate`, `channels` and `samples`, the little-endian bytes in hexadecimal), `captions`
and `cues` (instants), and `transport` (`first_us`, `rate_bps` and `bytes` in hexadecimal),
each present only where held. `outcome.record` is `stands` or `reject reason=…`, and
`outcome.checks` gives each check of a record that stands, in its order: `recomputed`,
`not_held` or `reject reason=…`.
- `switches` (§7) are each the `records` a switch holds, the instant `at_ms` and the input it
carries (`current`); `outcome` gives each record's state, each input's state in the switch's
order and the input it `selected`.
Everything is synthetic: keys attest nothing, and the media is the generator's. Each media
case's values are declared in the generator, which requires the reference to measure them, and
each case states the outcome it was written to have, never copied from a verifier.
`wai_signal_health_vectors verify` and `tests/signal_health.rs` check that the file regenerates
byte for byte and that `wai-rs` reaches every stated outcome. `../signal_health_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.