wai: proof that an ad was presented — a player-signed presentation claim, and a spend that counts only presented impressions (E7) #398
Merged
dcharlot
merged 9 commits from 2026-10-21 22:28:49 -04:00
wai/ad-presentation into main 2026-10-21
Merge origin/main into wai/ad-presentation (access services)
Some checks failed
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 · 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
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
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Has been cancelled
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merge origin/main into wai/ad-presentation (room e2e window wait)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merge origin/main into wai/ad-presentation (settlement, contribution, shared lists)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merge origin/main into wai/ad-presentation (IETF draft, timing-test fix)
All checks were successful
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m0s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 32s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 10m19s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 1m44s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 18m58s
wai-pack / wai-pack · linux (pull_request) Successful in 1m34s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 3m8s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m59s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 1m7s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 4m41s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 2m24s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 3m22s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 1m39s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 5m20s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 31m57s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 4m14s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 15m9s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 1m48s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 10m17s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 2m55s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 8m44s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 50m59s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 9m8s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 14m52s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 19s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 1m20s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 6m59s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 3m20s
wai-pack / wai-pack · macos (pull_request) Successful in 1m17s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m54s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merge remote-tracking branch 'origin/main' into wai/ad-presentation
Some checks failed
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 1m43s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m18s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 26s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 10m2s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 2m5s
wai-pack / wai-pack · linux (pull_request) Successful in 1m25s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 19m14s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 3m2s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m49s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 5m34s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 16s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 13s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 29s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m52s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Failing after 14m39s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 4m47s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 11m17s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 53s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m30s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m27s
wai-quantum studio and desktop / desktop app · macos (pull_request) Has been cancelled
wai-pack / wai-pack · macos (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 / energy receipts · macos (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (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 / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
# Conflicts: # .github/workflows/wai-conformance.yml # wai/CHANGELOG.md # wai/REGISTRY.md # wai/SPEC.md # wai/live-conformance/README.md # wai/wai-rs/src/codecs/registry.rs
wai ad-presentation: name RFC 9578's vector by its place, not a count
Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai: register wai.live.ad_presentation; a reference producer in the browser client; CI
The registry lists the record and the WPC1 magic (the export regenerated), SPEC §5 describes the claim and the billing rule, and the CHANGELOG records them. joule-moq-web gains web/ads/presentation.js, a span recorder over a video element and the claim's writer and signer on WebCrypto's Ed25519, whose node tests turn observation sequences into the corpus's claims byte for byte; no page plays ads yet. wai-conformance runs the module's tests, the corpus test, ad_presentation_verify.py and the producer's tests; joule-moq-web's e2e script runs the producer's tests with the page's other unit tests. Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai: the ad-presentation extension, its corpus README and an independent verifier
extensions/ad-presentation.md defines the WPC1 claim, the session a session key names, the creative digest, the video and cross-media viewability rules as their texts state them, the quartile, the RFC 9577 token bound to one impression and verified as RFC 9578 §6.4 has it, the presentation fields of a WAP1 policy of version 2, and each claim's verdict; live-ads.md takes the version and the spend that counts. ad_presentation_verify.py is written from the text, verifies RFC 9578's own vector, gives every claim the corpus's verdict, and catches every mutated copy and every check dropped from itself. The corpus gains a signed claim that breaks a span rule. Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai-rs live_ads: presentation claims, and a spend that counts only presented impressions
A player's signed claim (WPC1) that it presented one impression of a live-ads break: the creative's objects it presented, spans of its media time with the fraction of pixels in view and audibility, the geometry they were measured over, a rendered-frame count, and an optional RFC 9577 token bound to the impression through its challenge and verified as RFC 9578 §6.4 does for type 0x0002. An ad policy of version 2 requires claims (and optionally an attestation and an audible run) under the video or cross-media viewability rule; the room verifier's spend-equivalence then counts only impressions whose claim verifies. The corpus live-conformance/presentation/ is generated from fixed seeds. Co-Authored-By: Claude Opus 5.5 <[email protected]>