wai.live.cowatch: watching together in a room — controls at a room-clock instant, signed presentation statements and measured skew (CW) #432

Closed
dcharlot wants to merge 0 commits from wai/co-watch into main
Owner

What this is

wai.live.cowatch (CW): people in different places watching one programme together in a room, with shared control and the sync measured.

  • Extension text wai/extensions/co-watch.md: the co-watch policy WXP1 (the source: a WAI package by its receipt, an object sequence by a digest of its objects' content hashes and durations, or a room's recording by its manifest; and every bound below), controls WXC1 (play, pause, seek, rate) effective at a room-clock instant at least the policy's lead and at most its horizon after their sending, the pinned order of application (instant, then sending t, then digest; the later-sent prevails at one instant, the other stated overridden), the controlled position, player-signed presentation statements WXS1, the room clock's skew statements WXK1 per window (each viewer's and each pair's 50th percentile, the policy's percentile and the greatest error, with a verdict against the bound; a viewer with a due slot of no statement is unknown, never in sync), completeness of a window's statements, the pinned catch-up rule, where each rule is enforced, verification, a reasons table (§12) and security considerations. No consent requirement for the room's mechanics; a lawful basis points to the lawful-basis claim class (jwp-receipts §2.4.6).
  • wai-rs module co_watch (feature co_watch), its corpus generator wai_co_watch_vectors, and tests/co_watch.rs.
  • Corpus wai/live-conformance/cowatch/ (vectors.json and a README with its Provenance. line), generated from fixed seeds: a watch party (a conflict at one instant, a late joiner, every window in sync), a room whose second policy starts another source, a room with a viewer out of sync, one unknown, one that leaves and a window stated in two statements, a gap (skew statements unchecked), refused vectors for every reason of §12 (among them a control from a party without the power, a control effective in the past, a statement signed by another key, one lifted from another viewer's chain, a skew statement that does not recompute, and a missing viewer reported in sync), and catch-up cases.
  • Independent verifier wai/live-conformance/co_watch_verify.py (python3 -I), written from the text, sharing no code with wai-rs; it verifies each room with live_rooms_verify.py, recomputes every control's order, the timeline, every sample, percentile and verdict, requires every mutated copy of the corpus to fail, drops each of its own checks in turn and requires the corpus to catch the weakened verifier; and with --room verifies a room a deployment kept.
  • Room service joule-moq-room: watch rooms ([room] watch_source): the policy, the source served, a viewer admitted by a proof of its grant's key over a service challenge for the request it makes (live-rooms §10.5.3; public_prefix names the front's prefix in the target), the co-watch log carrying only what a verifier would accept, the clock's skew statements each window and a viewer's leave once silent; unit and loopback-relay tests.
  • Room page joule-moq-web/web/room/: cowatch.js (the rules as pure functions, tested against the corpus under Node, and the player) and a co-watch mode in app.js/index.html: shared controls and a sync indicator (the page's own offset and the room's verdicts).
  • e2e scenario cowatch in e2e/room.e2e.mjs: three viewers in the host's installed browser under the browser-automation package (domcontentloaded), one plays, one pauses, one seeks, a viewer joins late, the measured skew within the bound, and the room read back and verified by co_watch_verify.py.
  • Registry: wai.live.cowatch in REGISTRY.md, the four magics in the wire table, the export regenerated; SPEC §5 paragraph; CHANGELOG; the live-conformance README row (with its generator column) and command; a CI step in wai-conformance.yml (paths include the extension and the page module); joule-moq-web.yml and joule-moq-room.yml updated.

Design decisions

  • Controls are meta statements, not control events. live-events §4.9 fixes the control command set; a new command would be refused by every current verifier. This is the same reason the co-performance statements ride in meta.
  • Who may control: the direct power, or the grant attribute watch_control (a bit per action). No new power bit: live-rooms §3.4 refuses any power above bit 4.
  • Conflict rule: controls apply in ascending (at, sending t, event digest). At one instant the one sent later prevails for what it sets (playing, position or rate); controls that set different things at one instant all apply (a seek and a play together go to the position and play).
  • held in the skew statement pins which of each viewer's events the clock had when it signed (seq < held), so a statement that arrives later never changes what an earlier skew statement said, and a verifier recomputes it exactly whatever order the events arrived in. Recomputation is done after every record is read, since a viewer's samples can follow the skew statement in the merged order.
  • Settling: samples within settle_ms of a join, a control's instant or a source's start fill their slot but are not counted toward the percentiles: the bound is about keeping together, not the moment of a change.
  • In sync is a stated bound at a stated percentile (nearest rank); missing statements make a viewer unknown; a window's statements must together list every viewer of it (skew_incomplete), and a statement lists at most eight, so the clock's meta payload stays within the room key's 1024-byte policy bound.
  • Presentation statements carry their own signature under the player's key (as ad-presentation's claims do) besides their event's, so a viewer can show its statements to a third party without the rest of the room. The player's key is its principal's.
  • Catch-up rule: within the tolerance, the controlled rate; up to the seek threshold, the rate nudged toward the room, held within the policy's limits; past it, a seek; while paused or ended, a seek past the tolerance or a hold. Pinned and stateless, so a test reproduces it; Rust, Python and the page's JavaScript give every corpus case one correction.
  • The service carries, it does not re-sign. Controls and statements are the viewers' own signed events; the service checks each as a verifier would (chain, signature, grant policy and rate, co-watch §5 and §7.2) and carries it in a log (as the confidentiality rooms' MLS log is carried), and the clock signs presence and skew. A page enters the co-watch log before subscribing to the clock's events track, which a room of viewers alone has no other record on yet.
  • The page fetches the source whole and checks its content hash before presenting it (an object sequence of one object in this revision).

Checks

check command result
wai-rs unit tests cargo test --locked --no-default-features --features co_watch --lib co_watch:: 7 passed
wai-rs corpus test cargo test --locked --no-default-features --features co_watch --test co_watch (regenerates byte for byte, every case its outcome, §12 = Reason::ALL) 3 passed
registry cargo test --locked --lib codecs::registry; --test cli_registry; wai registry export --check 14 passed; 6 passed; up to date
clippy, wai-rs cargo clippy --locked --no-default-features --features co_watch --all-targets, notes in co_watch* 0
independent verifier python3 -I wai/live-conformance/co_watch_verify.py wai/live-conformance/cowatch PASS: every room and catch-up case agrees with wai-rs, every reason of §12 refuses a vector, 16 mutated copies all fail, 19 checks dropped one at a time all caught
page module node --test web/room/cowatch.test.mjs 7 passed (catch-up cases, controlled position, controls and presentation statements byte for byte)
room service cargo test --locked --all-targets (joule-moq-room) 6 unit + 3 integration passed, among them the watch room against a relay on loopback
clippy, room service cargo clippy --locked --all-targets one note, src/epoch.rs if let Ok(_) in an existing test (on main already); none in the new code
cowatch e2e e2e/run.sh --only cowatch --runs 3 on the build host, the installed browser 3 of 3 runs, 33 of 33 checks; last windows p95 14–31 ms against the 250 ms bound
whole e2e e2e/run.sh (compose, webtransport, websocket, goaway, dvr, service, e2ee, cowatch) 1 of 1 runs, 169 of 169 checks
lock files cargo metadata --locked --offline in wai-rs, wai-live-web, joule-code-rs and joule-moq-room all hold; no lock file changed
repo checks check-tests-in-ci.py, check-workflow-concurrency.sh, check-spec-refs.py, check-wai-section-refs.py, check-no-vanity-metrics.sh, test-public-text-checks.sh, check-comparative-prose.sh, check-orphan-sources.py all exit 0
public names check-public-names.sh over wai/ and over every changed file; commit messages and this body against the same patterns clean, but one line of .github/workflows/joule-moq-web.yml (the runner's browser path, BROWSER_BIN), which is on main as it is and outside the script's own scope

Falsifications (each committed first, then broken, then restored; git diff --quiet after each)

  • The reference's lead check dropped (co_watch.rs, control_not_ahead): cargo test --features co_watch --test co_watch exit 101 (control_in_the_past: outcome differs).
  • The room service's control power dropped (watch.rs, may_control): its unit test exit 101 (left: Ok(()) right: Err("control_not_permitted")).
  • The page's catch-up nudge reversed (cowatch.js): node --test cowatch.test.mjs exit 1 (the catch-up cases and the byte-for-byte statements fail).
  • The page's order of application without the sending t: node --test cowatch.test.mjs exit 1 (the controlled position differs at the conflict).
  • Each page stating its position 400 ms ahead (cowatch.js): the cowatch e2e exit 1: the clock's last window states all three out_of_sync (p95 378–383 ms), and no page shows the room in sync.
  • The independent verifier's own checks: its self-test drops each of 19 checks in turn (policy rules, link, sources, attribute, control power, lead, horizon, range, who presents, wrong key, the statement's signature, ahead, source, who states skew, bound, listed viewers and held, recomputation, completeness, settling) and the corpus catches every one; and 16 mutated copies of the corpus (stated percentiles, verdicts, pairs, errors, settling, timeline, a source's start, a statement's own signature byte, a viewer's chain withheld, a source object's duration, a refusal's reason and place, a catch-up correction and nudge) all fail.

Not done

  • Deploy: nothing deployed. The live room must be redeployed as one unit after this lands (the room service binary, the page's web/room/ files including cowatch.js, and a room configuration with watch_source, watch_duration_ms and public_prefix = "/room-api" for a watch room); the page and the service must change together, since a watch room's page enters the co-watch log before it subscribes to the clock. The production front's request_body max_size 4KB on /room-api/* holds a page's post (at most four statements, about 3 KiB).
  • The page plays an object sequence of one object; a sequence of several, a WAI package and a room recording as sources are specified and verified, but not played by the page.
  • In a watch room the page sends no caption or chat (its events there are its co-watch statements alone, in one chain).
  • A viewer that loses its connection and comes back re-enters with a fresh proof; a viewer silent past four seconds is recorded leaving (reason 4). A page backgrounded long enough for its timers to stop will be recorded leaving and re-enter on its next post.
  • If co-performance (#410) lands first, joule-moq-room/src/epoch.rs will need a merge (both add settings and grant attributes there).

🤖 Generated with Claude Code


Closed: Landed in #451 (live room train D, merged as 1a465f23 with all 50 checks green).

## What this is `wai.live.cowatch` (CW): people in different places watching one programme together in a room, with shared control and the sync measured. - **Extension text** `wai/extensions/co-watch.md`: the co-watch policy `WXP1` (the source: a WAI package by its receipt, an object sequence by a digest of its objects' content hashes and durations, or a room's recording by its manifest; and every bound below), controls `WXC1` (`play`, `pause`, `seek`, `rate`) effective at a room-clock instant at least the policy's lead and at most its horizon after their sending, the pinned order of application (instant, then sending `t`, then digest; the later-sent prevails at one instant, the other stated overridden), the controlled position, player-signed presentation statements `WXS1`, the room clock's skew statements `WXK1` per window (each viewer's and each pair's 50th percentile, the policy's percentile and the greatest error, with a verdict against the bound; a viewer with a due slot of no statement is `unknown`, never in sync), completeness of a window's statements, the pinned catch-up rule, where each rule is enforced, verification, a reasons table (§12) and security considerations. No consent requirement for the room's mechanics; a lawful basis points to the `lawful-basis` claim class (jwp-receipts §2.4.6). - **wai-rs** module `co_watch` (feature `co_watch`), its corpus generator `wai_co_watch_vectors`, and `tests/co_watch.rs`. - **Corpus** `wai/live-conformance/cowatch/` (`vectors.json` and a README with its **Provenance.** line), generated from fixed seeds: a watch party (a conflict at one instant, a late joiner, every window in sync), a room whose second policy starts another source, a room with a viewer out of sync, one unknown, one that leaves and a window stated in two statements, a gap (skew statements unchecked), refused vectors for every reason of §12 (among them a control from a party without the power, a control effective in the past, a statement signed by another key, one lifted from another viewer's chain, a skew statement that does not recompute, and a missing viewer reported in sync), and catch-up cases. - **Independent verifier** `wai/live-conformance/co_watch_verify.py` (`python3 -I`), written from the text, sharing no code with wai-rs; it verifies each room with `live_rooms_verify.py`, recomputes every control's order, the timeline, every sample, percentile and verdict, requires every mutated copy of the corpus to fail, drops each of its own checks in turn and requires the corpus to catch the weakened verifier; and with `--room` verifies a room a deployment kept. - **Room service** `joule-moq-room`: watch rooms (`[room] watch_source`): the policy, the source served, a viewer admitted by a proof of its grant's key over a service challenge for the request it makes (live-rooms §10.5.3; `public_prefix` names the front's prefix in the target), the co-watch log carrying only what a verifier would accept, the clock's skew statements each window and a viewer's leave once silent; unit and loopback-relay tests. - **Room page** `joule-moq-web/web/room/`: `cowatch.js` (the rules as pure functions, tested against the corpus under Node, and the player) and a co-watch mode in `app.js`/`index.html`: shared controls and a sync indicator (the page's own offset and the room's verdicts). - **e2e** scenario `cowatch` in `e2e/room.e2e.mjs`: three viewers in the host's installed browser under the browser-automation package (`domcontentloaded`), one plays, one pauses, one seeks, a viewer joins late, the measured skew within the bound, and the room read back and verified by `co_watch_verify.py`. - **Registry**: `wai.live.cowatch` in `REGISTRY.md`, the four magics in the wire table, the export regenerated; SPEC §5 paragraph; CHANGELOG; the live-conformance README row (with its generator column) and command; a CI step in `wai-conformance.yml` (paths include the extension and the page module); `joule-moq-web.yml` and `joule-moq-room.yml` updated. ## Design decisions - **Controls are `meta` statements, not `control` events.** live-events §4.9 fixes the `control` command set; a new command would be refused by every current verifier. This is the same reason the co-performance statements ride in `meta`. - **Who may control: the direct power, or the grant attribute `watch_control` (a bit per action).** No new power bit: live-rooms §3.4 refuses any power above bit 4. - **Conflict rule:** controls apply in ascending (`at`, sending `t`, event digest). At one instant the one sent later prevails for what it sets (playing, position or rate); controls that set different things at one instant all apply (a seek and a play together go to the position and play). - **`held` in the skew statement** pins which of each viewer's events the clock had when it signed (`seq < held`), so a statement that arrives later never changes what an earlier skew statement said, and a verifier recomputes it exactly whatever order the events arrived in. Recomputation is done after every record is read, since a viewer's samples can follow the skew statement in the merged order. - **Settling:** samples within `settle_ms` of a join, a control's instant or a source's start fill their slot but are not counted toward the percentiles: the bound is about keeping together, not the moment of a change. - **In sync** is a stated bound at a stated percentile (nearest rank); missing statements make a viewer `unknown`; a window's statements must together list every viewer of it (`skew_incomplete`), and a statement lists at most eight, so the clock's `meta` payload stays within the room key's 1024-byte policy bound. - **Presentation statements carry their own signature** under the player's key (as ad-presentation's claims do) besides their event's, so a viewer can show its statements to a third party without the rest of the room. The player's key is its principal's. - **Catch-up rule:** within the tolerance, the controlled rate; up to the seek threshold, the rate nudged toward the room, held within the policy's limits; past it, a seek; while paused or ended, a seek past the tolerance or a hold. Pinned and stateless, so a test reproduces it; Rust, Python and the page's JavaScript give every corpus case one correction. - **The service carries, it does not re-sign.** Controls and statements are the viewers' own signed events; the service checks each as a verifier would (chain, signature, grant policy and rate, co-watch §5 and §7.2) and carries it in a log (as the confidentiality rooms' MLS log is carried), and the clock signs presence and skew. A page enters the co-watch log before subscribing to the clock's events track, which a room of viewers alone has no other record on yet. - **The page fetches the source whole and checks its content hash** before presenting it (an object sequence of one object in this revision). ## Checks | check | command | result | |---|---|---| | wai-rs unit tests | `cargo test --locked --no-default-features --features co_watch --lib co_watch::` | 7 passed | | wai-rs corpus test | `cargo test --locked --no-default-features --features co_watch --test co_watch` (regenerates byte for byte, every case its outcome, §12 = `Reason::ALL`) | 3 passed | | registry | `cargo test --locked --lib codecs::registry`; `--test cli_registry`; `wai registry export --check` | 14 passed; 6 passed; up to date | | clippy, wai-rs | `cargo clippy --locked --no-default-features --features co_watch --all-targets`, notes in `co_watch*` | 0 | | independent verifier | `python3 -I wai/live-conformance/co_watch_verify.py wai/live-conformance/cowatch` | PASS: every room and catch-up case agrees with wai-rs, every reason of §12 refuses a vector, 16 mutated copies all fail, 19 checks dropped one at a time all caught | | page module | `node --test web/room/cowatch.test.mjs` | 7 passed (catch-up cases, controlled position, controls and presentation statements byte for byte) | | room service | `cargo test --locked --all-targets` (joule-moq-room) | 6 unit + 3 integration passed, among them the watch room against a relay on loopback | | clippy, room service | `cargo clippy --locked --all-targets` | one note, `src/epoch.rs` `if let Ok(_)` in an existing test (on main already); none in the new code | | cowatch e2e | `e2e/run.sh --only cowatch --runs 3` on the build host, the installed browser | 3 of 3 runs, 33 of 33 checks; last windows p95 14–31 ms against the 250 ms bound | | whole e2e | `e2e/run.sh` (compose, webtransport, websocket, goaway, dvr, service, e2ee, cowatch) | 1 of 1 runs, 169 of 169 checks | | lock files | `cargo metadata --locked --offline` in wai-rs, wai-live-web, joule-code-rs and joule-moq-room | all hold; no lock file changed | | repo checks | `check-tests-in-ci.py`, `check-workflow-concurrency.sh`, `check-spec-refs.py`, `check-wai-section-refs.py`, `check-no-vanity-metrics.sh`, `test-public-text-checks.sh`, `check-comparative-prose.sh`, `check-orphan-sources.py` | all exit 0 | | public names | `check-public-names.sh` over `wai/` and over every changed file; commit messages and this body against the same patterns | clean, but one line of `.github/workflows/joule-moq-web.yml` (the runner's browser path, `BROWSER_BIN`), which is on main as it is and outside the script's own scope | ## Falsifications (each committed first, then broken, then restored; `git diff --quiet` after each) - **The reference's lead check dropped** (`co_watch.rs`, `control_not_ahead`): `cargo test --features co_watch --test co_watch` exit 101 (`control_in_the_past: outcome differs`). - **The room service's control power dropped** (`watch.rs`, `may_control`): its unit test exit 101 (`left: Ok(()) right: Err("control_not_permitted")`). - **The page's catch-up nudge reversed** (`cowatch.js`): `node --test cowatch.test.mjs` exit 1 (the catch-up cases and the byte-for-byte statements fail). - **The page's order of application without the sending `t`**: `node --test cowatch.test.mjs` exit 1 (the controlled position differs at the conflict). - **Each page stating its position 400 ms ahead** (`cowatch.js`): the cowatch e2e exit 1: the clock's last window states all three `out_of_sync` (p95 378–383 ms), and no page shows the room in sync. - **The independent verifier's own checks**: its self-test drops each of 19 checks in turn (policy rules, link, sources, attribute, control power, lead, horizon, range, who presents, wrong key, the statement's signature, ahead, source, who states skew, bound, listed viewers and `held`, recomputation, completeness, settling) and the corpus catches every one; and 16 mutated copies of the corpus (stated percentiles, verdicts, pairs, errors, settling, timeline, a source's start, a statement's own signature byte, a viewer's chain withheld, a source object's duration, a refusal's reason and place, a catch-up correction and nudge) all fail. ## Not done - **Deploy**: nothing deployed. **The live room must be redeployed as one unit after this lands** (the room service binary, the page's `web/room/` files including `cowatch.js`, and a room configuration with `watch_source`, `watch_duration_ms` and `public_prefix = "/room-api"` for a watch room); the page and the service must change together, since a watch room's page enters the co-watch log before it subscribes to the clock. The production front's `request_body max_size 4KB` on `/room-api/*` holds a page's post (at most four statements, about 3 KiB). - The page plays an object sequence of one object; a sequence of several, a WAI package and a room recording as sources are specified and verified, but not played by the page. - In a watch room the page sends no caption or chat (its events there are its co-watch statements alone, in one chain). - A viewer that loses its connection and comes back re-enters with a fresh proof; a viewer silent past four seconds is recorded leaving (reason 4). A page backgrounded long enough for its timers to stop will be recorded leaving and re-enter on its next post. - If co-performance (#410) lands first, `joule-moq-room/src/epoch.rs` will need a merge (both add settings and grant attributes there). 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- **Closed:** Landed in #451 (live room train D, merged as 1a465f23 with all 50 checks green).
The extension text (wai/extensions/co-watch.md), the co_watch module of wai-rs behind its own
feature, and the corpus live-conformance/cowatch/ written by wai_co_watch_vectors from fixed
seeds: three accepted rooms, a gap, and refused vectors covering every reason of §12.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
It verifies each room with live_rooms_verify.py, recomputes the controlled position, samples,
percentiles and verdicts from §5 to §9, requires every mutated copy of the corpus to fail and
catches each of its own checks dropped. Standard library only, run isolated.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The room service serves a watch room's source, admits a viewer by a proof of its grant's key
over the service's challenge, carries its controls and presentation statements in a log when
co-watch §5 and §7.2 accept them, signs each window's skew statements and a viewer's leave
when it falls silent. web/room/cowatch.js holds the rules the page applies (the policy, the
controlled position, the catch-up rule, statements written byte for byte) and the player;
its tests run them against live-conformance/cowatch/.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The page fetches a watch room's source and checks it by its content hash, enters the room's
co-watch log by a proof of its key, applies each control at its instant, keeps the source at
the controlled position by the catch-up rule, states what it presents and shows the room's
sync. e2e scenario cowatch: three viewers, a play, a pause, a seek, a late joiner, the clock's
skew statements in sync within the bound, and the room verified by co_watch_verify.py. The room
service's test drives a watch room against a relay on loopback.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
co-watch: reflow two paragraphs of §8
Some checks failed
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Has been cancelled
WAI energy receipts / does this change touch it (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI conformance / does this change touch it (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Has been cancelled
joule-code conformance gate / joule-moq-relay, every target (pull_request) Has been cancelled
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Has been cancelled
15561bbdda
Co-Authored-By: Claude Opus 5.5 <[email protected]>
dcharlot closed this pull request 2026-10-25 03:55:42 -04:00
Some checks failed
wai-web wasm32 / does this change touch it (pull_request) Has been cancelled
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Has been cancelled
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Has been cancelled
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Has been cancelled
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Has been cancelled
wai-quantum studio and desktop / does this change touch it (pull_request) Has been cancelled
wai-quantum studio and desktop / studio · browser (pull_request) Has been cancelled
wai-quantum studio and desktop / desktop app · macos (pull_request) Has been cancelled
wai-pack / wai-pack · does this change touch it (pull_request) Has been cancelled
wai-pack / wai-pack · linux (pull_request) Has been cancelled
wai-pack / wai-pack · linux-arm64 (pull_request) Has been cancelled
wai-pack / wai-pack · macos (pull_request) Has been cancelled
wai-pack / wai-pack · independent verifier (Python) (pull_request) Has been cancelled
wai-pack / wai-pack · the floor through a media prober (pull_request) Has been cancelled
wai-pack / wai-pack · dependency licences (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Has been cancelled
WAI energy receipts / does this change touch it (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI conformance / does this change touch it (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Has been cancelled
joule-code conformance gate / joule-moq-relay, every target (pull_request) Has been cancelled
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Has been cancelled

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Transaction-Science/open-standards!432
No description provided.