Merged last, as asked. Conflicts, all adjacent additions, both sides kept: - joule-moq-room: Cargo.toml's wai features (live_world, remote_desktop and live_messaging); lib.rs's modules (messaging, msgstore, remote), Config's remote, messaging and call, Service's remote, messaging and calls, the epoch through remote::epoch with the conversation and calls opened beside it, and settings()'s refusals (#482's world room, #493's conversation and call); the README's world, conversation and call sections. - joule-moq-web: app.js asks a remote room's grant as #489 does and takes a given grant as #493 does (a remote page's fallback to viewer only when it asked); run.sh runs room.e2e.mjs (now with --remote) and messaging.e2e.mjs, each its own --only scenarios; the usage names every scenario. - workflows: joule-moq-room.yml's and joule-moq-web.yml's accounts; wai-conformance.yml's WAI_FEATURES gains live_messaging (#477's union) and the first step's test build names live_messaging beside the train's targets. - wai-live-web's wai features (stream_termination, live_world, live_messaging), wai-rs lib.rs's modules, registry.rs's capability list, REGISTRY.md's rows; CHANGELOG, #493's entry on top. - capabilities.json and v2.ttl regenerated (registry export, then --check). Co-Authored-By: Claude Opus 5.5 <[email protected]>
130 lines
12 KiB
Markdown
130 lines
12 KiB
Markdown
# live-conformance — the `wai.live` family
|
|
|
|
Conformance corpora of the live and interactive extensions, one directory per extension,
|
|
and the independent verifier of each, beside it.
|
|
|
|
| directory | extension | generator | verifier |
|
|
|---|---|---|---|
|
|
| [`events/`](events/) | [live-events](../extensions/live-events.md) (`wai.live.events`) | `wai_live_events_vectors gen` | `live_events_verify.py` |
|
|
| [`rooms/`](rooms/) | [live-rooms](../extensions/live-rooms.md) (`wai.live.room`) | `wai_live_room_vectors gen` | `live_rooms_verify.py` |
|
|
| [`takes/`](takes/) | [capture-binding](../extensions/capture-binding.md) (`wai.capture.take`) | `wai_capture_take_vectors gen` | `capture_take_verify.py` |
|
|
| [`compose/`](compose/) | [live-compose](../extensions/live-compose.md) (`wai.live.compose`) | `wai_live_compose_vectors gen` | `live_compose_verify.py` |
|
|
| [`recordings/`](recordings/) | [live-recording](../extensions/live-recording.md) (`wai.live.recording`) | `wai_live_record_vectors gen` | `live_record_verify.py` |
|
|
| [`captions/`](captions/) | [timed-text](../extensions/timed-text.md) (`wai.text.timed`) | `wai_timed_text_vectors gen` | `timed_text_verify.py` |
|
|
| [`metering/`](metering/) | [live-metering](../extensions/live-metering.md) (`wai.live.metering`) | `wai_live_metering_vectors gen` | `live_metering_verify.py` |
|
|
| [`steering/`](steering/) | [energy-steering](../extensions/energy-steering.md) (`wai.live.steering`) | `wai_energy_steering_vectors gen` | `energy_steering_verify.py` |
|
|
| [`moderation/`](moderation/) | [live-moderation](../extensions/live-moderation.md) (`wai.live.moderation`) | `wai_live_moderation_vectors gen` | `live_moderation_verify.py` |
|
|
| [`ads/`](ads/) | [live-ads](../extensions/live-ads.md) (`wai.live.ads`) | `wai_live_ads_vectors gen` | `live_ads_verify.py` |
|
|
| [`e2ee/`](e2ee/) | [confidentiality](../extensions/confidentiality.md) (`wai.live.e2ee`) | `joule_moq_e2ee_vectors gen` (joule-moq-mls) | `e2ee_verify.py` |
|
|
| [`messaging/`](messaging/) | [live-messaging](../extensions/live-messaging.md) (`wai.live.message`, `wai.live.call`) | `wai_live_messaging_vectors gen` | `live_messaging_verify.py` |
|
|
| [`watermark/`](watermark/) | [forensic-watermark](../extensions/forensic-watermark.md) (`wai.live.watermark`) | `wai_live_watermark_vectors gen` | `live_watermark_verify.py` |
|
|
| [`c2pa-live/`](c2pa-live/) | [live-provenance](../extensions/live-provenance.md) (`wai.live.provenance`) | `wai_live_provenance_vectors gen` | `c2pa_live_verify.py` |
|
|
| [`synthesis/`](synthesis/) | [synthesis](../extensions/synthesis.md) (`wai.media.synthesis`) | `wai_synthesis_vectors gen` | `synthesis_verify.py` |
|
|
| [`usage/`](usage/) | [ai-usage](../extensions/ai-usage.md) (`wai.ai.usage`) | `wai_ai_usage_vectors gen` | `ai_usage_verify.py` |
|
|
| [`contribution/`](contribution/) | [contribution](../extensions/contribution.md) (`wai.media.contribution`) | `wai_contribution_vectors gen` | `contribution_verify.py` |
|
|
| [`settlement/`](settlement/) | [settlement](../extensions/settlement.md) (`wai.delivery.settlement`) | `wai_settlement_vectors gen` | `settlement_verify.py` |
|
|
| [`audit/`](audit/) | [stream-audit](../extensions/stream-audit.md) (`wai.delivery.audit`) | `wai_stream_audit_vectors gen` | `stream_audit_verify.py` |
|
|
| [`native-sink/`](native-sink/) | [native-sink](../extensions/native-sink.md) (a native host's sink: verification, stream-audit's records, ending) | `wai_native_sink_vectors gen` | `native_sink_verify.py` |
|
|
| [`browser/`](browser/) | [browser-sink](../extensions/browser-sink.md) (routing, constraint sets, energy entries, `contentBinding`) | `wai_browser_sink_vectors gen` | `browser_sink_verify.py` |
|
|
| [`takedown/`](takedown/) | [takedown](../extensions/takedown.md) (`wai.media.takedown`) | `wai_takedown_vectors gen` | `takedown_verify.py` |
|
|
| [`coperformance/`](coperformance/) | [co-performance](../extensions/co-performance.md) (`wai.live.coperformance`) | `wai_co_performance_vectors gen` | `co_performance_verify.py` |
|
|
| [`influence/`](influence/) | [influence](../extensions/influence.md) (`wai.media.influence`) | `wai_influence_vectors gen` | `influence_verify.py` |
|
|
| [`direction/`](direction/) | [direction](../extensions/direction.md) (`wai.media.direction`) | `wai_direction_vectors gen` | `direction_verify.py` |
|
|
| [`bearers/`](bearers/) | [bearer-receipts](../extensions/bearer-receipts.md) (`wai.bearer.receipts`) | `wai_bearer_vectors gen` | `bearer_verify.py` |
|
|
| [`access/`](access/) | [access-services](../extensions/access-services.md) (`wai.access.services`) | `wai_access_services_vectors gen` | `access_services_verify.py` |
|
|
| [`presentation/`](presentation/) | [ad-presentation](../extensions/ad-presentation.md) (`wai.live.ad_presentation`) | `wai_ad_presentation_vectors gen` | `ad_presentation_verify.py` |
|
|
| [`age/`](age/) | [age-assurance](../extensions/age-assurance.md) (`wai.age.assurance`) | `wai_age_assurance_vectors gen` | `age_assurance_verify.py` |
|
|
| [`exploration/`](exploration/) | [exploration](../extensions/exploration.md) (`wai.media.exploration`) | `wai_exploration_vectors gen` | `exploration_verify.py` |
|
|
| [`cowatch/`](cowatch/) | [co-watch](../extensions/co-watch.md) (`wai.live.cowatch`) | `wai_co_watch_vectors gen` | `co_watch_verify.py` |
|
|
| [`worlds/`](worlds/) | [live-worlds](../extensions/live-worlds.md) (`wai.live.world`) | `wai_live_world_vectors gen` | `live_worlds_verify.py` |
|
|
| [`synthesis-mark/`](synthesis-mark/) | [synthesis](../extensions/synthesis.md) §7.4 to §7.8 (the watermark scheme `wai-mark:tent64`) | `wai_synthesis_mark_vectors gen` | `synthesis_mark_verify.py` |
|
|
| [`upscale/`](upscale/) | [exact-upscale](../extensions/exact-upscale.md) (`wai.media.upscale`) | `wai_upscale_vectors gen` | `upscale_verify.py` |
|
|
| [`dred/`](dred/) | [opus-dred](../extensions/opus-dred.md) (`wai.audio.opus.dred.int`) | `wai_dred_vectors gen` (with the draft's weights file, `dred/fetch.sh`) | `dred_verify.py` |
|
|
| [`aggregate/`](aggregate/) | [telemetry-aggregation](../extensions/telemetry-aggregation.md) (`wai.telemetry.aggregate`) | `wai_telemetry_aggregate_vectors gen` | `telemetry_aggregate_verify.py` |
|
|
| [`tonemap/`](tonemap/) | [exact-tonemap](../extensions/exact-tonemap.md) (`wai.media.tonemap`, `wai.meta.gainmap`, `wai.meta.st2094_50`) | `wai_tonemap_vectors gen` | `tonemap_verify.py` |
|
|
| [`robustness/`](robustness/) | [robustness-evidence](../extensions/robustness-evidence.md) (`wai.media.robustness`) | `wai_robustness_vectors gen` | `robustness_verify.py` |
|
|
| [`splat/`](splat/) | [splat-exact](../extensions/splat-exact.md) (`wai.splat.exact`) | `wai_splat_exact_vectors gen` | `splat_exact_verify.py` |
|
|
| [`loc/`](loc/) | [loc-carriage](../extensions/loc-carriage.md) (WAI envelopes on LOC objects) | `loc_vectors gen` (a joule-moq example) | `loc_verify.py` |
|
|
| [`avatar-face/`](avatar-face/) | [avatars](../extensions/avatars.md) §6 to §13 (`wai.avatar.face`) | `wai_avatar_face_vectors gen` | `avatar_face_verify.py` |
|
|
| [`termination/`](termination/) | [stream-termination](../extensions/stream-termination.md) (`wai.live.termination`) and [capability-constraints](../extensions/capability-constraints.md) §4 (the display match) | `wai_stream_termination_vectors gen` | `stream_termination_verify.py` |
|
|
| [`keys/`](keys/) | [key-release](../extensions/key-release.md) (the proxy form of `wai.video.keys`) | `wai_key_release_vectors gen` | `key_release_verify.py` |
|
|
| [`links/`](links/) | [live-contribution](../extensions/live-contribution.md) (`wai.live.contribution`) | `joule-moq-ingest-link-vectors --out` (joule-moq-ingest) | `live_contribution_verify.py` |
|
|
| [`remote/`](remote/) | [remote-desktop](../extensions/remote-desktop.md) (`wai.live.remote`) | `wai_remote_desktop_vectors gen` | `remote_desktop_verify.py` |
|
|
|
|
**Provenance.** Generated here: each directory's corpus is written by its row's generator
|
|
(`gen`, in `wai/wai-rs`), from records authored in code and from fixed seeds, and each
|
|
directory's README says how. `c2pa-live/` cuts its media from the packaging corpus's AV1
|
|
floor; `contribution/` and `influence/` generate their pictures with `wai.generate.spectral`
|
|
and the model file of that capability's conformance vector (`influence/` also with a second
|
|
model file written from it); `takedown/` carries the registry of clocks the repository
|
|
publishes, `registry/takedown-clocks.json`, as written there; and `upscale/` reads two priors
|
|
that `tools/wai_int_sr_train.py` trained on pictures it generates (`upscale/README.md`).
|
|
`tonemap/` renders generated HDR scenes to its stills with the reference's own encoder, and
|
|
tone-maps the frames of the `int_video` clip of the integer video corpus.
|
|
`robustness/` generates its pictures with the dead-leaves generator of `synthesis_mark` and
|
|
with `wai.generate.spectral`, and measures the synthesis corpus's measurement sets, whose
|
|
samples it does not hold.
|
|
`splat/` carries the learned cloud of `wai-rs/tests/vectors/int_splat/` beside scenes
|
|
authored as attribute bytes.
|
|
`joule_moq_e2ee_vectors gen` (in
|
|
`joule-code/joule-code-rs/crates/joule-moq-mls`) writes `e2ee/vectors.json` from fixed seeds,
|
|
and `e2ee/` also holds the test vectors RFC 9605 and `draft-ietf-moq-secure-objects-01`
|
|
publish, as printed (`e2ee/README.md`), and `aggregate/vdaf-22/` the Prio3 test vectors of
|
|
`draft-irtf-cfrg-vdaf-22`, as published at the commit that draft names (`aggregate/README.md`).
|
|
`dred/` names the weights file of draft-ietf-mlcodec-opus-dred-07 by its SHA-256 and holds no
|
|
copy: its generator and its verifier read the file the draft names, which `dred/fetch.sh`
|
|
fetches and checks. One recorded record: `metering/relay-record.wmh` and its ledger, which the
|
|
reference relay signed in its test. `avatar-face/` reads a generator, two identity priors and
|
|
their keypoint tracks that `tools/wai_avatar_face_train.py` wrote from faces it generates
|
|
(`avatar-face/README.md`).
|
|
|
|
Each verifier is written from its extension's text, shares no code with the reference
|
|
(`wai-rs`, or for `e2ee/`, `joule-moq` and `joule-moq-mls`, and for `links/`,
|
|
`joule-moq-ingest`), and is run by
|
|
`.github/workflows/wai-conformance.yml` beside the reference's own check:
|
|
|
|
```
|
|
python3 live_events_verify.py events
|
|
python3 live_rooms_verify.py rooms
|
|
python3 capture_take_verify.py takes
|
|
python3 live_compose_verify.py compose
|
|
python3 live_record_verify.py recordings
|
|
python3 timed_text_verify.py captions
|
|
python3 access_services_verify.py access
|
|
python3 live_metering_verify.py metering
|
|
python3 energy_steering_verify.py steering
|
|
python3 live_moderation_verify.py moderation
|
|
python3 live_ads_verify.py ads
|
|
python3 ad_presentation_verify.py presentation
|
|
python3 e2ee_verify.py e2ee
|
|
python3 live_messaging_verify.py messaging
|
|
python3 live_watermark_verify.py watermark
|
|
python3 c2pa_live_verify.py c2pa-live
|
|
python3 synthesis_verify.py synthesis
|
|
python3 synthesis_mark_verify.py synthesis-mark
|
|
python3 upscale_verify.py upscale
|
|
python3 avatar_face_verify.py avatar-face
|
|
python3 ai_usage_verify.py usage
|
|
python3 contribution_verify.py contribution
|
|
python3 settlement_verify.py settlement
|
|
python3 stream_audit_verify.py audit
|
|
python3 native_sink_verify.py native-sink
|
|
python3 browser_sink_verify.py browser
|
|
python3 takedown_verify.py takedown
|
|
python3 co_performance_verify.py coperformance
|
|
python3 age_assurance_verify.py age
|
|
python3 influence_verify.py influence
|
|
python3 direction_verify.py direction
|
|
python3 exploration_verify.py exploration
|
|
python3 co_watch_verify.py cowatch
|
|
python3 dred_verify.py dred <weights-file>
|
|
python3 telemetry_aggregate_verify.py aggregate
|
|
python3 tonemap_verify.py tonemap
|
|
python3 robustness_verify.py robustness
|
|
python3 splat_exact_verify.py splat
|
|
python3 stream_termination_verify.py termination
|
|
python3 key_release_verify.py keys
|
|
python3 live_contribution_verify.py links
|
|
python3 remote_desktop_verify.py remote
|
|
python3 live_worlds_verify.py worlds
|
|
```
|