joule-moq-ingest: WHIP into a room's MoQ tracks and WHEP out of them, receipts signed at the first hop; live-ingest maps E-RTMP v2 and SRT (L6a) #325

Merged
dcharlot merged 57 commits from joule-moq/ingest into main 2026-10-19 05:55:10 -04:00

2026-10-18

Transaction Science
Merge joule-moq/harden (#327, now with main and metering) into joule-moq/ingest
Some checks failed
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m12s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 18m23s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 18s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 2m49s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 11s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 28s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m31s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 3m59s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Failing after 7m21s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 15m53s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 17m23s
standards workspaces build + test / macOS energy backends (pull_request) Failing after 3m28s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Successful in 1h3m59s
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Successful in 1h5m54s
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Successful in 1h7m50s
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Successful in 12m11s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 18s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 5m13s
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Successful in 12m30s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 1m44s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m51s
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Successful in 11m3s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 44s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 2m6s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 23m45s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 32s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 1m12s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 6m44s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 9m9s
wai-pack / wai-pack · macos (pull_request) Successful in 1m49s
SPEC §5 keeps live-metering's paragraph and then live-ingest's; joule-code's CHANGELOG keeps
both entries, the gateway's first.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 19:22:19 -04:00
Transaction Science
live-ingest: the proof of possession at admission (§3.1, §3.2 step 7, §3.4), the _receipts names, its bounds and reasons
All checks were successful
wai-quantum OpenCL member / member · OpenCL GPU (macos) (pull_request) Has been skipped
wai-quantum OpenCL member / member · OpenCL absent (linux) (pull_request) Has been skipped
wai-quantum on every processor / emulated · s390x-unknown-linux-gnu (pull_request) Successful in 3m52s
wai-quantum-qpu / does this change touch it (pull_request) Successful in 10s
wai-quantum-qpu / clients against their contracts (linux) (pull_request) Has been skipped
wai-quantum service / does this change touch it (pull_request) Successful in 10s
wai-quantum matrix-extension member / does this change touch it (pull_request) Successful in 9s
wai-quantum service / service · linux (pull_request) Has been skipped
wai-quantum service / service · macos (pull_request) Has been skipped
wai-quantum matrix-extension member / member · matrix extension, emulated (aarch64 Linux) (pull_request) Has been skipped
wai-quantum matrix-extension member / member · matrix extension absent (macos) (pull_request) Has been skipped
wai-quantum portable tensor program / does this change touch it (pull_request) Successful in 8s
wai-quantum portable tensor program / tensor program · CPU, mutants, GPU builds (pull_request) Has been skipped
wai-quantum portable tensor program / tensor program · GPUs (jetson-hub) (pull_request) Has been skipped
wai-quantum portable tensor program / tensor program · integrated GPU (framework-128gb) (pull_request) Has been skipped
wai-quantum portable tensor program / tensor program · Metal and the arm64 CPU (macos) (pull_request) Has been skipped
wai-quantum tensor-engine member / does this change touch it (pull_request) Successful in 9s
wai-quantum CPU vector units / does this change touch it (pull_request) Successful in 7s
wai-quantum tensor-engine member / member · tensor engine, the kernel toolchain's simulator (linux) (pull_request) Has been skipped
wai-quantum tensor-engine member / member · tensor engine absent (linux-arm64) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit, rvv 1024-bit (riscv64, emulated) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit, sve 128-bit (aarch64, emulated) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit, rvv 128-bit (riscv64, emulated) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit, sve 2048-bit (aarch64, emulated) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit, avx2 (x86_64 silicon) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit, sve 512-bit (aarch64, emulated) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector units, avx2 and avx512 (framework-128gb silicon) (pull_request) Has been skipped
wai-quantum CPU vector units / member · vector unit absent (macos) (pull_request) Has been skipped
wai-quantum on every processor / emulated · sparc64-unknown-linux-gnu (pull_request) Successful in 6m4s
wai-quantum on every processor / emulated · i686-unknown-linux-gnu (pull_request) Successful in 3m59s
The gateway's README and both CHANGELOGs say the same.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 19:17:04 -04:00
Transaction Science
joule-moq-ingest: the HTTP proof step on its own, its corpus vectors, and the tests on proofs
check_http_proof is authorize()'s proof step as a function (live-rooms §10.5.3, §10.5.4).
room_corpus runs the corpus's six HTTP proofs through it with the gateway's own reading of
each grant, and presents each accepted proof again as a replay. auth_and_ice presents
grants with proofs through the Auth helper, and shows the session's PATCH and DELETE
refusing a grant presented alone.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 19:14:04 -04:00
Transaction Science
wai registry export: WJR1 and the metering records together
Some checks failed
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Has been cancelled
WAI HTTP delivery / cache rules · controls and labelled caches (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-code conformance gate / joule-moq-relay, every target (pull_request) Has been cancelled
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 19:05:26 -04:00
Transaction Science
Merge origin/main into joule-moq/harden: metering (#317) beside proof of possession
The relay's session setup now proves every room grant (live-rooms §10.5) and then opens
the session's tally on the room's metered grant (live-metering). REGISTRY lists WJR1,
WMH1 and WMR1; the CHANGELOG keeps both entries; capabilities.json is regenerated.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 19:04:55 -04:00
Transaction Science
WIP joule-moq-ingest: proof of possession at the gateway (unbuilt; tests incomplete)
Gateway: a challenge store (issued per endpoint or session, consumed, kept for
replay detection), joule_moq::grant_proof::check_proof on every request that
carries a grant (POST, and PATCH, DELETE, GET and HEAD on session URLs, GET and
HEAD on endpoints when a grant is carried), a fresh WAI-Room-Challenge on every
response to such a request, the two fields in CORS, admission's single-use check
only on a request that opens a session. Receipts tracks renamed *_receipts.

Tests: an Auth helper that proves possession; whip_publish, whep_play and codecs
moved onto it. auth_and_ice.rs is still the pre-proof version and does not build
against the new helpers; room_corpus does not yet run the corpus's proofs.
Not built, not tested, not pushed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 16:23:14 -04:00
Transaction Science
Merge origin/joule-moq/harden into joule-moq/ingest
#327 (proof of possession, the receipts' binary form, room track names), with #324
and main beneath it. The workspace keeps both new members; the changelog keeps
every entry.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 16:17:57 -04:00
Transaction Science
Merge origin/main into joule-moq/harden
Some checks failed
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Has been cancelled
WAI HTTP delivery / cache rules · controls and labelled caches (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-code conformance gate / joule-moq-relay, every target (pull_request) Has been cancelled
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 16:11:25 -04:00
Transaction Science
live-rooms §10.5.3: cite RFC 9449's resource-server nonce (§9), and RFC 9725 without sections
Some checks failed
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
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 HTTP delivery / WAI HTTP · does this change touch it (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Has been cancelled
WAI HTTP delivery / cache rules · controls and labelled caches (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-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-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
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 16:09:24 -04:00
Transaction Science
joule-moq-web: a live video group released after a later one is dropped, and a decoder closed by an error is made again
Under load (e2e --runs 4, host load near 100) one run's page met a VP9 decoding
error and never decoded that track again: WebCodecs closes a codec that errs, and
the page went on handing frames to the closed decoder. Each group rides a stream of
its own and waits for its receipts, so a group can be released after a later one;
decoded then it corrupts the decoder's references. The page now drops such a group
(counted as late_dropped), and makes a decoder again after an error, the video
waiting for its next key frame (decoder_restarts).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 16:03:21 -04:00
Transaction Science
2026-10-18 15:55:45 -04:00
Transaction Science
2026-10-18 15:49:50 -04:00
Transaction Science
joule-code: Cargo.lock for joule-moq's sha2
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 15:43:17 -04:00
Transaction Science
WIP: proof of possession in joule-moq, the relay, its client and the browser client
joule-moq: grant_proof (the WRP1 record, check_proof, the SETUP options and helpers,
grant_digest_and_principal, base64url) and a strict Ed25519 check shared with the
receipts. The relay sends its SETUP first with a fresh GRANT_CHALLENGE, checks every
grant its rules mark proof against the client's GRANT_PROOF before serving any
request, and closes a session that presents one without a proof that passes with
UNAUTHORIZED; the transports give it the target the client addressed. Its test client
presents grants with proofs; tests/grant_proof.rs. The web client presents its grant
with a proof signed in wasm, the per-participant secret gone.

Not yet built or run.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 15:40:46 -04:00
Transaction Science
live-rooms §10.5: proof of possession of the grant's key, one record for MOQT and HTTP
A grant is public, so no binding takes it as a bearer credential. §10.5 requires a
WRP1 proof record beside every grant: the grant's digest, the principal's key, the
verifier's fresh challenge and a context (a verb and the //authority/path the client
addressed), signed by the principal. Over MOQT the relay's SETUP carries the
challenge (GRANT_CHALLENGE, 0x3A47), sent at once, and the client's SETUP the grant
as its AUTHORIZATION TOKEN and the proof (GRANT_PROOF, 0x3A49); a SETUP whose grant
has no proof that passes is closed UNAUTHORIZED. Over HTTP (WHIP, WHEP) the grant is
the Bearer token, the proof the WAI-Room-Proof header, and the challenge comes in
WAI-Room-Challenge on a 401 and on each accepted response, single-use. §10.5.4 gives
the seven checks and their reasons (pop_missing to pop_wrong_context, in §11); the
CAT mapping and the security text say so.

wai-rs: Proof (sign, read), check_proof, grant_digest_and_principal, base64url;
the rooms corpus gains 17 proofs (MOQT and HTTP, good, replayed, wrong key, forged,
another session's challenge, another grant, another endpoint or method, a missing
proof and unreadable records). live_rooms_verify.py checks them from the text.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 14:52:35 -04:00
Transaction Science
live-rooms §6, §10.2: a publisher's catalog track and each media track's receipts track, named and scoped
§6.1 names a media track's receipts track (its namespace, its name followed by
_receipts) and a publisher's catalog track (the room and owner fields, Track Name
catalog), every byte still in a-z, 0-9 and _; §6.2 ties the catalog's wai_receipts_track
to it. §10.2 adds the scopes: the publisher's and each slot's catalog track, and for a
subscriber every catalog and each layer's receipts track. wai-rs (RECEIPTS_SUFFIX,
CATALOG_TRACK, receipts_track_name, catalog_namespace, moqt_scopes) and
live_rooms_verify.py agree.

The browser client and the relay use those names: the receipts tracks are 0_receipts,
and joule-moq-relay's receipts_track_suffix defaults to _receipts.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 14:47:24 -04:00
Transaction Science
2026-10-18 14:45:36 -04:00
Transaction Science
Receipts in WAI's binary form (jwp-receipts §2.7) on the receipts track, replacing JSON
jwp-receipts §2.7 defines a binary form for group and object receipts and for a
group's receipts together (magic WJR1): a group is its canonical bytes (§3 step 3),
its link hash computed over them as received; an object is its members in fixed
widths, its leaf_version 1 or 2 followed by its class. Reading yields the JSON
form's members, and every rule of §3 applies to them unchanged. §2.7.4 says what
does not read (malformed, at its §3 step); §5.12 the vectors.

moq-streaming-format §4.1: a receipts-track object carries that form.

wai-rs: jwp_delivery::binary (reader and writer, through from_json), and 20
binary vectors in jwp-conformance; jwp_verify.py reads and writes them from the
text. joule-moq: GroupReceipt/ObjectReceipt to_binary/from_binary, read_receipts,
ReceiptBundle::to_payload/from_payload in the binary form (and read, with the link
hash over the bytes received); the JWP_OBJECT_RECEIPT property carries an object
receipt standing alone. The JSON payload is not read. joule-moq-web's verifier
measures each receipts object, and the same receipts in the JSON form.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 14:43:44 -04:00
Transaction Science
Merge origin/main into joule-moq/ingest
Some checks failed
wai-pack / wai-pack · linux (pull_request) Successful in 1m24s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m16s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 15m17s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 6m42s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 12m21s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 18s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 39s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 1m45s
wai-pack / wai-pack · macos (pull_request) Successful in 1m0s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 21s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 2m40s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 11s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 25s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 50s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 2m7s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 13m16s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 13m20s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Successful in 45m53s
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Successful in 10m36s
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Successful in 49m13s
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Successful in 50m20s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 23s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 5m23s
wai-pack / wai-pack · linux-arm64 (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 HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been cancelled
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 14:33:09 -04:00
Transaction Science
2026-10-18 14:31:50 -04:00
Transaction Science
ReceiptChains: a null parent below a join's anchor is the chain's start, held as history
A late joiner whose live receipts anchored its chain, then fetched the track from
group 0, had group 0 refused as chain_break although group 1 links to it. Below a
join's anchor the gap has no lower end, and a group with a null parent there is the
chain's true start (jwp-receipts §3 step 3, Joining): it is now parent_not_held, held
as history, and admitted when the group above it links back to it. A null parent
outside such a gap is still a second chain head, and a fork still chain_break.

The same rule in joule-moq's ReceiptChains, wai-rs's and jwp_verify.py, the
spec text of §3 step 3 and §5.9, and two corpus vectors
(chain_join_fetch_from_group_0, chain_join_second_start_after_the_fill).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 14:30:38 -04:00
Transaction Science
joule-moq-ingest: README, the CI job on linux-arm64, the changelog
The gate's workspace step leaves the gateway to a job of its own, as it leaves the
relay; its paths include wai/live-conformance/rooms/, which the room reader's corpus
test reads.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 14:30:27 -04:00
Transaction Science
wai: live-ingest, WHIP and WHEP onto a room's tracks; E-RTMP v2 multitrack and SRT mapped
The extension binds the contribution and playback protocols of standard encoders
and players to the tracks of a room: admission by a room grant as the bearer
token, the tracks and the signed catalog, one frame as one envelope in its
capability's framing, keyframe and fixed-window groups, the live manifest member,
the RTP-to-room-clock mapping and its bound, first-hop receipts, WHEP egress and
what it verifies, the bounds, ICE, the refusals, and how an ingest relates to a
take and to metering. E-RTMP v2 and SRT are mappings only in this revision.

SPEC names it beside the live records; the changelog records it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 14:28:32 -04:00
Transaction Science
joule-moq-ingest: clippy's notes; tests that hold under load
Audio groups are checked by their span on the room clock rather than counted, and
the WHEP test closes its last audio group as it closes its last video group, so
neither depends on how the host schedules the sender.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 14:21:25 -04:00
Transaction Science
2026-10-18 14:19:09 -04:00
Transaction Science
joule-moq-ingest: the catalog signed on its own receipts track; the end-to-end tests pass
A relay with a door on the room's namespace refuses an object of any track whose
receipts never come, the catalog among them. The gateway now signs the catalog as
it signs the media, on catalog/receipts, and a WHEP session reads the catalog only
once its receipt verifies under a trusted first hop.

One b=AS line per section: some WebRTC stacks read one bandwidth line only.

The end-to-end tests (WHIP to a relay subscriber, WHEP playback, refusals, trickle
ICE and an ICE restart) and the rooms corpus test pass on the build host.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 14:17:14 -04:00
Transaction Science
joule-moq-web e2e: the browser's executable comes from BROWSER_BIN alone
Some checks failed
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Successful in 2m3s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 6s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 15s
joule-code conformance gate / joule-moq-relay, every target (pull_request) Successful in 1m4s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 1m29s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 5m51s
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Has been cancelled
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 14:12:28 -04:00
Transaction Science
joule-moq-ingest: the WHIP and WHEP gateway
- room: WAI live-rooms descriptors and grants, read and checked from the
  extension's text, as the gateway admits a bearer token.
- frame: one frame, one WAI1 envelope, in the payload framing of
  wai.video.avc, wai.video.vp8, wai.video.vp9, wai.video.av1 and
  wai.audio.opus.packet, with a live member: the room-clock time, the RTP
  timestamp and, on a group's first object, the grant reference.
- package: video groups at keyframes, audio groups of a fixed duration, the
  RTP-to-room-clock mapping and its bound, and each group's receipts signed
  as the first hop and chained.
- relay: the tracks published at the relay (PUBLISH), one subgroup stream a
  group, PUBLISH_DONE once every stream is acknowledged.
- whip / whep: the sessions on str0m; WHEP verifies every object's receipt
  before it forwards it, and drops and counts what fails.
- gateway: the HTTP resources (RFC 9725; draft-ietf-wish-whep-05), bearer
  tokens, 401 / 403 per RFC 6750, ETag and If-Match, the bounds.
- record: each session's signed record, the seam for live metering's
  per-hop record.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 14:05:28 -04:00
Transaction Science
joule-moq-web, wai-live-web: clippy's notes
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 14:04:26 -04:00
Transaction Science
joule-moq-web: receipts a subscription did not deliver are fetched; the e2e package lock
An object whose receipts-track object reached the relay just before the receipts
subscription did never gets it live; after a second its group of the receipts track is
fetched (moq-streaming-format §4.1). e2e/package-lock.json pins the automation package
by integrity (playwright 1.60.0 and playwright-core, Apache-2.0; fsevents, MIT, optional,
its install script never run: npm ci --ignore-scripts).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 13:53:25 -04:00
Transaction Science
wai: regenerate the registry export for wai.video.vp8 and wai.audio.opus.packet
`wai registry export` output: registry/capabilities.json, vocab/v2.ttl,
vocab/v2.shapes.ttl and the generated table in REGISTRY.md gain the two rows.
No hand edits.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 13:52:30 -04:00
Transaction Science
wai: register wai.video.vp8 and wai.audio.opus.packet for live ingest of WebRTC media
SPEC §5 *Broadcast and streaming codecs* registers two sink-supplied payload
capabilities, 2026-10-18, no edition named:

- wai.video.vp8 (RFC 6386): VP8 frames in the IVF frame container, FourCC
  VP80, the framing wai.video.vp9 uses. Royalty-free, as VP9. Replicate class
  StandardUnclassified: RFC 6386's decoder-conformance text was not read, so
  the registry promises no byte identity.
- wai.audio.opus.packet (RFC 6716): one Opus packet (§3), TOC byte first, no
  container, the per-packet form a live track carries. No pre-skip or output
  gain (those are Ogg Opus's, RFC 7845 §5.1); wai.audio.opus stays the stored
  stream. Royalty-free; StandardTolerance as wai.audio.opus (RFC 6716 §6).

Both are standalone, Lossy, outside the floor and the recommended set, and
neither is an LCEVC base. The class functions, the registry table, the
classical list, the glossary links and the registry tests list both; SPEC §7's
class table, the research registry (footnote 15) and the changelog record
them. The generated exports follow in the next commit.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 13:52:30 -04:00
Transaction Science
2026-10-18 13:49:20 -04:00
Transaction Science
2026-10-18 13:48:56 -04:00
Transaction Science
2026-10-18 13:44:46 -04:00
Transaction Science
joule-moq-web: the browser client, its test pages and its end-to-end harness
web/moq: the WebSocket binding's capsules, WebTransport and the binding behind one
transport interface (WebTransport first, offering moqt-22 and the relay's certificate
hash; the binding as the fallback, or forced), a MOQT session (SETUP with the token,
requests, every data stream read concurrently, GOAWAY), and the payload framings a WAI
track carries. web/room: the room client (WebCodecs publishing with receipts, verified
subscriptions, a late joiner's FETCH, the composed canvas and the mixed AudioWorklet,
the events timeline and captions with their origin, the move after GOAWAY). web/compose:
the composition corpus in the page. e2e: the relay on loopback from a test
configuration, real Chrome through Playwright with a fake camera and microphone, each
browser under memguard.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 13:44:37 -04:00
Transaction Science
joule-moq-ingest: the crate, its pinned dependencies and the lockfile
str0m 0.24.1 with its pure-Rust crypto backend for WebRTC, hyper 1.11.1 for the
WHIP and WHEP resources. Every new crate in the lock is MIT, Apache-2.0 or ISC.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 13:40:24 -04:00
Transaction Science
wai-live-web: Cargo.lock
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 13:37:11 -04:00
Transaction Science
wai-live-web: WAI's live records for a page, from wai-rs built for wasm32
The live-compose layout function and mixer, the WCD1 descriptor and the composition of
a room at an instant (its lifecycle replayed, its participant set, its tiles and
voices), in the JSON view live-conformance/compose states its cases in; WEV1 events
signed and read with their payloads (captions with their origin) and the MSF timeline
binding; what a page reads of a room descriptor and its grants; a Room that holds the
records a page receives, chain by chain, and verifies and composes from them; and the
WAI1 envelope packed and read. The same functions build natively: a helper binary makes
a test room (descriptor, grants, composition descriptor, relay token rules) and computes
on the host the composition a page computes in the browser.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 13:31:12 -04:00
Transaction Science
joule-code: Cargo.lock for joule-moq-web
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 13:26:35 -04:00
Transaction Science
joule-moq-web: the draft-22 codec and receipts for a browser, over joule-moq without its runtime
A wasm-bindgen surface, byte-oriented: the client's SETUP, every request and answer a
client sends from a JSON description, framed control messages and data streams read as
their bytes arrive, subgroup streams written object by object, a publisher's signer
(each group one object, signed into a group receipt chained to the one before, written
as the receipts-track object and the media object with its WAI_RECEIPT property) and a
subscriber's verifier (receipts admitted to the joined chain under the publisher's key,
each object verified against the receipt of its position, or accounted for by
inclusion). Native tests hold the pure-Rust half.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 13:24:59 -04:00
Transaction Science
joule-moq: the async surface behind a default feature, runtime; without it the codec, carriage and receipts build for wasm32
The endpoint traits, the in-memory mock and the QUIC transport stay where they were,
under the default feature runtime (quic implies it). Turned off, the crate is the
draft-22 codec, the carriage of objects and receipts, the receipt builder and
verifiers and the session's setup rules, with no tokio and no native dependency, so a
browser crate can build the same code for wasm32-unknown-unknown. Additive: every
dependent that takes the default features builds what it built before.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 13:20:25 -04:00