wai: live provenance, C2PA 2.4 §19 for room tracks and takes, tied to the JWP receipts #381
Merged
dcharlot
merged 11 commits from 2026-10-21 07:14:09 -04:00
wai/c2pa-live into main 2026-10-21
Merge remote-tracking branch 'origin/main' into wai/c2pa-live
Some checks failed
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
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Has been cancelled
wai cross-architecture byte-equality / does this change touch it (pull_request) Has been cancelled
wai cross-architecture byte-equality / linux-aarch64 (pull_request) Has been cancelled
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Has been cancelled
wai cross-architecture byte-equality / macos-arm64 (reference) (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
jouleclaw fabrics / metal (macOS, Apple GPU) (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, every target (pull_request) Has been cancelled
jouleclaw fabrics / vulkan (linux, RTX 4050 + Vulkan loader) (pull_request) Has been cancelled
jouleclaw public surface must stay documented / Public-surface audit (jouleclaw-rs) (pull_request) Has been cancelled
# Conflicts: # wai/CHANGELOG.md
wai: live provenance §10.3 names the deriving edge's ingredient rule for a packager that derives
All checks were successful
wai-web wasm32 / does this change touch it (pull_request) Successful in 1m35s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 7m53s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 2m59s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 12m59s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m21s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 31s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 9m13s
wai-pack / wai-pack · linux (pull_request) Successful in 1m21s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 3m49s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m35s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 15s
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 29s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 18m48s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m32s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 4m18s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 12m19s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m28s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 17m57s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 18s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m22s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m50s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 25m35s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 8m40s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 15m15s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 20s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 45s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 5m35s
wai-pack / wai-pack · macos (pull_request) Successful in 1m5s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m5s
Re-segmenting a stream, or writing its objects into another layout or codec, makes a new stream that names the source segments' manifests as parentOf ingredients, as deriving-edge §6.1 has an edge name its inputs' stores; packaging the same objects into this profile's segment derives nothing. Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai: live provenance, the update manifest's ingredient states the parent's validation results
C2PA 2.4 §18.16.12.4.3 requires validationResults in a v3 ingredient with an activeManifest, and an independent validator refuses one without it; the writer records the success codes a valid parent gives and the verifier recomputes them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai: live provenance, derived manifest identifiers, dynamic packaging and repository receipts
C2PA 2.4 extends live video to dynamically packaged content and recommends deterministic signatures for streaming (§19.2.1, §13.2.1, naming ISO/IEC 23009-9); it adds the repository receipt assertion (§18.27). Every manifest identifier is now derived from the stream, a role and the segment's sequence number, so packagers that share a key write identical segments and packagers that do not chain across a failover. The initialization manifest may carry an update manifest with the parent as ingredient and a c2pa.repository-receipt whose proof is an RFC 9942 receipt of inclusion in an RFC 9162 log, verified against the repository's key. Three reasons: manifest_id_mismatch, update_manifest_invalid and repository_receipt_invalid; a failover vector, a registered vector and their negatives; c2pa_live_verify.py reads all of it from the text. The CI step, the registry entry and its export, SPEC §5, the CHANGELOG, the live-conformance README and capture-binding §11 come with it. Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai: a live provenance vector whose receipt alone names other objects
The group receipt of camera-vsi's second group is signed over its first chunk with one byte changed, so only the receipt's root disagrees with the segment: without §11.4 step 6's root check a verifier refuses it for another reason. Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai: c2pa_live_verify.py, the live provenance corpus's second implementation
Written from live-provenance.md and the texts it reads, with the standard library alone: deterministic CBOR, ISO BMFF and the BMFF hash, the JUMBF store, COSE_Sign1, X.509 DER with the profile and chain, session keys and segment-info maps, and the JWP group and object receipts, with Ed25519 and BLAKE3 from claim-conformance. It gives every vector the corpus's outcome, place and codes, reads §12's table, and requires every mutated copy of a good vector to be refused. Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai: live provenance certificates name an organization
A C2PA validator in use reports the signer by the subject's organization and fails the claim signature of a certificate without one, so every name of the corpus's certificates is an organization and a common name; the extension's profile says so. Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai: live provenance, C2PA 2.4 §19 for room tracks and takes, tied to the JWP receipts
The extension live-provenance.md registers wai.live.provenance: the per-segment C2PA Manifest Box method and the Verifiable Segment Info method, written as C2PA 2.4 §19 defines them for a CMAF track carried under draft-ietf-moq-cmsf-01, where a segment less its C2PA boxes is its MoQ group's objects, so the segment's hard binding and the group receipt's Merkle root commit to the same chunks. Session keys rotate in a segment's manifest and also sign the group receipts. wai-rs feature live_provenance writes and verifies it with no C2PA library: BMFF, JUMBF, COSE_Sign1 with EdDSA, the claim signer's X.509 chain, and the receipts through jwp_delivery. The corpus live-conformance/c2pa-live/ has five good streams and a negative for each of the thirty reasons. Co-Authored-By: Claude Opus 5.5 <[email protected]>