open-standards/wai/moqt-conformance/README.md
Transaction Science 5d51591b6d
Some checks failed
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (push) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (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
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Has been cancelled
wai-audit collector and player integration / collector · linux (push) Has been cancelled
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (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-fleet service / service · macos (push) Has been cancelled
wai-key-proxy / proxy · linux (push) Has been cancelled
wai-ledger service / does this change touch it (push) Has been cancelled
wai-ledger service / service · linux (push) Has been cancelled
wai-ledger service / service · macos (push) Has been cancelled
wai-quantum for JavaScript / does this change touch it (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 / does this change touch it (push) Has been cancelled
wai-quantum studio and desktop / studio · browser (push) Has been cancelled
wai-quantum studio and desktop / desktop app · macos (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 / does this change touch it (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-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 / does this change touch it (push) Has been cancelled
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Has been cancelled
WAI Studio / does this change touch it (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 Chromium and Firefox · macos (push) Has been cancelled
WAI Studio / Studio in WebKit · linux (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Has been cancelled
wai-app and Create / wai-app · does this change touch it (push) Has been cancelled
wai-audit collector and player integration / does this change touch it (push) Has been cancelled
WAI operation catalogue / does this change touch it (push) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (push) Has been cancelled
wai-key-proxy / does this change touch it (push) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Has been cancelled
wai-fleet service / does this change touch it (push) Has been cancelled
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (push) Successful in 51s
joule-code conformance gate / Build + round-trip C1-C4 vectors (push) Has been cancelled
joule-code conformance gate / joule-moq-relay, every target (push) Has been cancelled
joule-code conformance gate / joule-moq-ingest, every target (push) Has been cancelled
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 18s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 1m44s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 6m32s
wai conform relay --suite moqt holds a relay to the MOQT interop cases, pq joins the verifier suites, and wai conformance gen writes a corpus by its generator
- relay, a kind of its own, with the suite moqt in the live area: the new corpus
  moqt-conformance/cases.json lists the eight interop test cases and wai-receipts, each with
  the drafts it is a test at, so a record names its corpus by digest. joule-moq-interop runs
  each case against the relay's moqt:// or https:// URL at --draft 22, 18 or 16, and its TAP
  version 14 is read as the cases: ok passes; not ok, TODO, no point, exit 127 or a timeout
  fails; a skip passes only at a draft the case lists no test for. The client is found as wai
  dev finds its daemons (WAI_MOQ_INTEROP_BIN, beside wai, PATH). The record's adapter is
  command, its impl the client's command line with the URL and draft, its files the client.
- joule-moq-interop closes every session's endpoint and waits it idle after each test: run a
  test a process, it exited before the CONNECTION_CLOSE left, the relay kept the dead
  publisher's namespace, and subscribe-before-announce and announce-subscribe failed against
  wai-relay at every draft. Now every case passes at 22, 18 and 16 over QUIC and at 22 over
  WebTransport.
- verifier pq: pq-conformance case by case, each case given as the corpus with it alone; its
  independent verifier pq_verify.py now has its verdicts file in its # independent: line.
- wai conformance gen --suite <corpus>[,...] [--verify] [--bin-dir <dir>] (conformance.generate,
  maintainer toolset): build.rs reads .github/wai-conformance/corpora/*.txt into the table of
  generators, and a corpus file whose dir: names no corpus, or whose bin: is no [[bin]] of
  wai-rs, fails the build. The files gain gen: where a tool's generator is not its gen mode
  (pin, staged-measure; oer: none). One cargo build serves every tool a run names.
- wai-breaking.yml runs the new tests with pq_signatures, pq_verify.py through wai conform beside
  the claim, JWP and signer verifiers, and the reference relay at each draft, every record
  admitted.

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

3.5 KiB

moqt-conformance — a relay held to the MOQT interop cases

The corpus of wai conform relay --suite moqt: the cases a MOQT relay is held to, each a test the interop client joule-moq-interop runs against the relay at one draft of the transport (22, 18 or 16). cases.json lists them, each named as the client names it, with what the relay must do for the case to pass and the drafts at which it is a test. A record of a run names the corpus by the digest of cases.json (extensions/conformance-results.md §2.1).

case the relay passes when
setup-only it completes the session's setup at the draft within 2 s
announce-only it accepts a PUBLISH_NAMESPACE within 2 s
publish-namespace-done after a published namespace is withdrawn, the session still answers a SUBSCRIBE within 2 s
subscribe-namespace-lifecycle a subscriber to a prefix is told of a namespace published under it and of its withdrawal, each within 2 s
subscribe-error a SUBSCRIBE to a track no one publishes is refused with REQUEST_ERROR within 2 s
rendezvous-timeout a SUBSCRIBE with a RENDEZVOUS_TIMEOUT of 500 ms to a track no one publishes is refused with REQUEST_ERROR TIMEOUT within 2 s (drafts 22 and 18; draft 16 has no such parameter)
announce-subscribe a SUBSCRIBE to a track of a published namespace reaches its publisher, and the subscriber receives its SUBSCRIBE_OK within 3 s
subscribe-before-announce a SUBSCRIBE sent before its namespace is published is answered within 3.5 s
wai-receipts a publisher's WAI track, its receipts track and its catalog reach a subscriber, every object verified against the publisher's signed receipts: the group receipt's signature, the object's inclusion, the object receipt carried as a property and on the receipts track, the WAI_RECEIPT property, the chain's links and the envelope

The first eight are the MOQT interop runner's test cases, written against draft-ietf-moq-transport-18; wai-receipts is WAI's.

Running

wai conform relay --suite moqt --impl moqt://127.0.0.1:4443/moq --tls-disable-verify
wai conform relay --suite moqt --impl https://relay.example/moq --draft 22

--impl is the relay's URL: moqt:// reaches it over QUIC with the draft's ALPN, https:// over WebTransport. --draft is the draft the client speaks (18 unless given), and the record names it in the client's command line. --tls-disable-verify is for a relay whose certificate is its own (wai-relay --dev). Each case is one run of the client, joule-moq-interop --relay <url> --draft <n> --test <case>, and its TAP (version 14) is the case's outcome: the case passes when its test point is ok. A point the client skips passes only at a draft the case lists no test for (the client skips rendezvous-timeout at draft 16); not ok, a TODO, no point of the case's name, a client that does not run the test or a run past --timeout (60 s a case) fails it. The record is conformant when every case passed.

The client is found as wai dev finds its daemons: WAI_MOQ_INTEROP_BIN, else beside wai, else on PATH. It builds from joule-code/joule-code-rs:

cargo build --release -p joule-moq-interop

The reference relay, wai-relay --dev (crate joule-moq-relay), passes every case at each draft.

Provenance. Written here, by hand, from the client's test cases (joule-moq-interop, src/main.rs), whose names and order wai-rs's tests hold cases.json to. No test vector: each case is run live against the relay.