open-standards/wai/live-conformance/browser
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science c18ee6a7c8
Some checks failed
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (push) Successful in 50s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 36s
wai-app and Create / wai-app · does this change touch it (push) Successful in 34s
wai-fleet service / does this change touch it (push) Successful in 35s
wai-ledger service / does this change touch it (push) Successful in 36s
WAI Studio / does this change touch it (push) Successful in 31s
wai-fleet service / service · macos (push) Successful in 1m10s
wai-ledger service / service · macos (push) Successful in 1m46s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Successful in 5m23s
WAI Studio / Studio in Chromium and Firefox · macos (push) Successful in 7m36s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 12s
joule-code conformance gate / Build + round-trip C1-C4 vectors (push) Successful in 2m28s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Successful in 16m14s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Successful in 42s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Successful in 1m47s
wai-ledger service / service · linux (push) Successful in 3m34s
wai-fleet service / service · linux (push) Successful in 4m25s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 2m50s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 6m55s
WAI Studio / Studio in WebKit · linux (push) Successful in 16m42s
joule-code conformance gate / joule-moq-relay, every target (push) Successful in 3m41s
joule-code conformance gate / joule-moq-ingest, every target (push) Successful in 6m10s
The browser sink corpus run by a page in a browser through wai conform, its record signed and admitted
- joule-moq-web's web/binding/sink.html answers each call of live-conformance/browser with
  wai-live-web's wasm build and the page's own side table (web/room/binding.js), each answer one
  JSON text in RFC 8785 form; e2e/conform_sink.mjs drives it in a browser and is the HTTP adapter
  of wai conform sink --suite browser. With --wai it runs the runner itself, the record named for
  the page and the browser's version, and admits it with wai verify --conformant.
- Run on the build host in its installed browser (156.0.8078.80, headless): 110 of 110 cases,
  conformant, admitted. Planted (--plant: frames the page shows as refused answered verified):
  106 of 110, failing at frames/object_refused among four, and its record refused at admission
  rule 2.
- e2e/run.sh runs both as its conform step (joule-moq-web.yml), the planted record's refusal
  checked too.
- wai-breaking.yml: the relay's --version for the record drops the comma after the number.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-08 16:43:30 -05:00
..
int_motion.wai wai: the browser sink — routing, constraint sets in the page, energy beside powerEfficient, and the content binding a decoded frame carries 2026-10-21 14:48:03 -04:00
README.md The browser sink corpus run by a page in a browser through wai conform, its record signed and admitted 2026-11-08 16:43:30 -05:00
vectors.json wai: the energy order inside browser-sink's routing, gated on a sink-metered figure; no parallel budget 2026-10-26 08:31:35 -04:00

live-conformance/browser — the browser sink

The corpus of extensions/browser-sink.md §12: capability reports with the routing tables they give, constraint sets, energy entries, content bindings, a chain of signed group receipts whose objects bind, the states of frames on screen, and side-table sequences.

member of vectors.json what each case holds, and what a conforming implementation reaches
routes a capability report (§3); the outcome (routed, or refused with the reason), and for a routed report its table: for each object its route, reason, each leg's outcome, asked, tier and energy entry (§4, §6), member for member
constraints sets (or null: none) and declared params; the outcome of §5 (unconstrained, satisfied, unsatisfied, unevaluable) and its reason
bindings a value; the outcome of reading it (§7.1), its reason when refused, its canonical form and its tier when read
frame_tiers a route, the route's tier, whether the frame's format is null and whether the page altered it; the frame's tier (§7.2)
chain group receipts of jwp-receipts' legacy form under one key, the second linked to the first; each group's canonical bytes and link_hash; each object's envelope (hexadecimal, or the file int_motion.wai), its object receipt, whether it verifies, and the binding a page that decoded it on the wasm route writes, in canonical form
frames a binding (or null), the object's, chain's and provenance verdicts; the result of §10: state, reason, tier, digest, receipt
tables a pending bound and a sequence of operations (chunk, output, clone, transfer, close, reset, flush); the result of §9.2: each open frame's binding in canonical form or null, the refusals by operation index, and the count of entries struck by a bound, a reset or a flush

int_motion.wai is a WAI1 envelope of wai.video.int_motion. A page decodes it on the wasm route; each decoded frame's SHA-256, over RGB8, is stated by ../../wai-rs/tests/vectors/int_video/sha256.json (int_video), and the browser end-to-end scenario binding of joule-moq-web checks the frames it decodes against those digests.

wai_browser_sink_vectors verify and tests/browser_sink.rs check that both files regenerate byte for byte and that wai-rs reaches every outcome; the test also verifies the chain with jwp_delivery. ../browser_sink_verify.py is the second implementation, written from the extension's text, sharing no code with wai-rs, and run as python3 -I.

Another browser sink runs the corpus through wai conform sink --suite browser, which writes a signed record of the run (extensions/conformance-results.md). Each call of the families above but the chain is a case, named <family>/<name> (frame_tiers/<index>): the sink is given the call's inputs as {"call": <family>, …}, its answer withheld, and writes its answer, an object of the members the table gives that family's outcome, as one JSON text in RFC 8785 form and a line feed. The case passes when that has the SHA-256 of the answer the corpus states. The reference sink's answer to one call is wai_browser_sink_vectors answers <case.json>:

wai conform sink --suite browser --root wai --impl 'wai_browser_sink_vectors answers {case}'

A page runs it in a browser too: joule-moq-web's web/binding/sink.html answers each call with wai-live-web's wasm build and the page's own side table (web/room/binding.js), and e2e/conform_sink.mjs is the runner's HTTP adapter for it, the record named for the page and the browser's version:

node joule-code/joule-code-rs/crates/joule-moq-web/e2e/conform_sink.mjs --browser <browser> \
  --wai <wai> --wai-dir wai --out browser-page.wai-conform.json

Provenance. Generated here: wai_browser_sink_vectors gen writes both files from constants in wai-rs/src/browser_sink/corpus.rs. The signing key's seed is BLAKE3 of the corpus's fixed label and an index, every time is a constant, and Ed25519 signing is deterministic (RFC 8032), so the files are the same bytes on every machine. The capability reports, the user agents' answers and the energy measurements are constants chosen to exercise each rule; they describe no user agent or device and were measured by nothing. The envelopes wrap the WIV1 payload wai-rs/tests/vectors/int_video/int_video_bitstream.wiv1, whose provenance wai-rs/tests/vectors/README.md states.