wai: channel lineup and guide — a linear channel's feeds imported, signed (wai.video.lineup), and its guide checkable #540

Merged
dcharlot merged 15 commits from wai/fast-channel-guide into main 2026-10-30 02:17:33 -04:00

2026-10-30

Transaction Science
Merge remote-tracking branch 'origin/main' into wai/fast-channel-guide
All checks were successful
WAI examples / WAI examples · portable · linux (pull_request) Successful in 10m6s
wai-fleet service / service · macos (pull_request) Successful in 45s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 11m12s
wai-ledger service / service · macos (pull_request) Successful in 53s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 9m8s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m2s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 6m2s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 6m3s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 15m52s
wai-pack / wai-pack · macos (pull_request) Successful in 2m22s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 18m2s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 12m35s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 4m43s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 9m47s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 14m43s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 5m19s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 11m10s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 5m45s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 13m44s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m54s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (pull_request) Successful in 20m9s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 22m9s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 35s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m29s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 2m32s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 7m19s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 6m54s
WAI Studio / Studio in WebKit · linux (pull_request) Successful in 23m35s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 16m43s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h0m32s
2026-10-30 00:55:45 -04:00

2026-10-29

Transaction Science
Merge remote-tracking branch 'origin/main' into wai/fast-channel-guide
Some checks failed
WAI energy receipts / energy receipts · macos (pull_request) Successful in 6m19s
wai-pack / wai-pack · linux (pull_request) Successful in 4m22s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (pull_request) Successful in 2m11s
wai-quantum for JavaScript / javascript · linux (pull_request) Successful in 3m0s
wai-pack / wai-pack · macos (pull_request) Successful in 3m14s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 9m46s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 8m1s
WAI energy receipts / energy receipts · linux (pull_request) Failing after 10m22s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 5m26s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 6m8s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 13m24s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m59s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 24s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 4m37s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 19m12s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 5m13s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m34s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 6m49s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 10m16s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 21m3s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 2m25s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 23m35s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 7m2s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (pull_request) Successful in 18m27s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 10m47s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 9m39s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 24m44s
WAI Studio / Studio in WebKit · linux (pull_request) Successful in 26m29s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 41m42s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 58m53s
2026-10-29 23:27:35 -04:00
Transaction Science
wai channel: no dead code or unused import in a build without channel_lineup
Some checks failed
WAI Studio / the catalogue's actions, the unit tests and the core · linux (pull_request) Successful in 2m5s
WAI energy receipts / energy receipts · linux (pull_request) Failing after 9m24s
wai-pack / wai-pack · linux (pull_request) Successful in 3m18s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 9m35s
wai-fleet service / service · macos (pull_request) Successful in 48s
wai-ledger service / service · macos (pull_request) Successful in 1m4s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 6m0s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 13m3s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 6m5s
wai-pack / wai-pack · macos (pull_request) Successful in 2m24s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 17m54s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 4m24s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m59s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 10m48s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 14m45s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (pull_request) Successful in 2m11s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m6s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 23m55s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 21s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 5m12s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 14m42s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m24s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 16m53s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 11m36s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 2m26s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 5m42s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 6m45s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 7m41s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 11m31s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h1m23s
done() is called only by the feature's operations, as io_fail and the other
helpers are, and EXIT_FAILED and json! only by them: the helper takes the
same allow as its neighbours, and the two imports come in with the feature,
as in the opportunity report's door.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 22:22:04 -04:00
Transaction Science
Merge remote-tracking branch 'origin/main' into wai/fast-channel-guide
# Conflicts:
#	.github/workflows/wai-conformance.yml
#	wai/wai-rs/src/catalogue.rs
#	wai/wai-studio/src/actions.generated.js
2026-10-29 22:20:18 -04:00
Transaction Science
wai: channel-lineup, spans written in words
Some checks failed
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 6m18s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 10m27s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 10m39s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m11s
wai-fleet service / service · macos (pull_request) Successful in 41s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 6m23s
wai-ledger service / service · macos (pull_request) Successful in 1m4s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 16m5s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 18m37s
WAI energy receipts / energy receipts · linux (pull_request) Failing after 18m35s
wai-pack / wai-pack · macos (pull_request) Successful in 3m36s
WAI Studio / Studio in WebKit · linux (pull_request) Successful in 11m3s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (pull_request) Successful in 16m15s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 11m51s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 4m35s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 13m42s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 8m10s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 10m36s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 19m32s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m35s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 9m21s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 6m5s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 24m8s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 27s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m25s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 11m22s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 2m28s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 10m56s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 7m22s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h2m25s
The section-reference check pairs a bare [ with the next link, and §5 now links to
revenue-share, so an interval written [a, b) before it read as a link's text. Each
span is written from its start to its end instead; the meaning is unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 19:58:39 -04:00
Transaction Science
wai: one JSON carriage for the channel receipt, revenue-share §4.1's
channel_lineup's own receipt_to_json and receipt_from_json are gone: the import
writes a receipt with ChannelReceipt::to_json and a verification reads one with
ChannelReceipt::from_json, the one JSON form of a channel receipt. channel-lineup
§5 keeps its number and is now a normative reference to revenue-share §4.1 (the
carriage), §4.2 (leaves, root, signed bytes, identity) and §4.3 (rules 1 to 5, the
signature rule 6). channel_lineup_verify.py reads receipts with
revenue_share_verify.py's read_run, run_payload, run_identity and run_verifies,
and no longer takes anything from live_ads_verify.py.

Before the pair was removed, a test (not kept) ran both readers and both writers
over every corpus receipt: the three receipt files, the two receipts verification
vectors edit, and the sample sealed with each energy class: 9 receipts, 8 read and
1 refused by both, every reading, every JSON value and every file identical. After
it, the corpus regenerates byte for byte.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 19:49:28 -04:00
Transaction Science
Merge origin/main (#539, the revenue share) into wai/fast-channel-guide
Both sides kept in CHANGELOG, SPEC §5, catalogue.rs, dx/mod.rs, tests/cli_ops.rs and the
two workflows; WAI_FEATURES, the test build list and the features-alone list hold both
revenue_share and channel_lineup. The generated files (ops.json, the registry export,
vocab/v2.ttl, REGISTRY.md's table, Studio's actions) are regenerated from the merged
sources, not merged as text. wai_video_channel.rs is main's: signing_payload stays private
and this branch calls its public payload(). The channel lineup's --dry-run sample writes
its own key file, as the revenue share's writes operator.key in the same directory.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 19:42:42 -04:00
Transaction Science
wai: the corpus's SCTE-35 sections, five bytes of pts_adjustment
Some checks failed
wai-pack / wai-pack · macos (pull_request) Successful in 4m18s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 1m7s
wai-quantum docs, course and locales / the course and the command line's languages · linux (pull_request) Successful in 5m2s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 4m26s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 12m22s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 12m53s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 8m14s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 10m35s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 13m37s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m25s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m57s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 12m12s
WAI conformance / cargo-class corpora · macos (pull_request) Failing after 15m22s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 15m0s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m2s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 6m7s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 13m26s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 17s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 19m6s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 5m43s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m33s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 7m49s
WAI Studio / Studio in WebKit · linux (pull_request) Successful in 11m10s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (pull_request) Successful in 16m14s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 11m0s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 2m52s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 11m38s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 7m31s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 25m3s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h7m0s
The generator wrote four bytes where splice_info_section() has five (the
encryption bits and the 33-bit pts_adjustment), so splice_command_type fell on
byte 12 and every cue took the hashed cue_id: the splice_event_id path of §4.8
was never reached, and both implementations agreed on the wrong bytes. A
falsification that broke that path showed it. The sections now have the layout
of SCTE 35-1 §9.6, and a unit test reads §14.2's splice_insert() and §14.1's
time_signal() samples: 0x4800008F, and the break id's hash.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 17:35:12 -04:00
Transaction Science
wai: a control for each rule of channel-lineup §6.5
The one lineup control moved a programme's start, which rule 4 refuses as well
as rule 3, so it did not show that rule 3 holds on its own. Four signed lineups
now each break one rule alone: another schedule root, a programme that begins
inside an entry, a programme of two assets, an asset no programme airs. The
second implementation drops each rule as a check of its own, and the corpus
catches each.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 17:31:14 -04:00
Transaction Science
wai-rs: channel_lineup, clippy's notes
Type names for the import's intermediate forms, the date fields of an instant
as one array, and a plain to_string. No change of behaviour.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 17:28:59 -04:00
Transaction Science
wai: register wai.video.lineup, its magic WLU1, and the CI step
The record in the registry's table, with its wire identifiers (WLU1,
wai-channel-feed, urn:wai:guide:, wai-asset-id, wai-now-next) and the export
regenerated; SPEC §5's paragraph and the CHANGELOG entry. The lineup's magic
is WLU1: WCL1 is live-recording's link record, which the registry's test of
wire identifiers caught. The conformance workflow runs the module's tests,
tests/channel_lineup.rs, the corpus tool's verify and channel_lineup_verify.py,
and builds the feature alone; the catalogue workflow fires on the corpus,
which tests/cli_ops.rs reads. Studio's generated actions follow the catalogue.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 17:23:18 -04:00
Transaction Science
wai: channel_lineup_verify.py, the corpus's second implementation
Written from extensions/channel-lineup.md alone; shares no code with wai-rs.
It reimports every vector's feeds and requires its outcome (the refusal, or
the receipt, the lineup and the cues, signatures verified), recomputes every
verification's facts, mutates copies of the corpus and requires each to fail,
and drops each of its checks in turn and requires the corpus to catch it. The
corpus gains three controls that only such a weakened verifier showed were
missing: the count bound, a boundary off a whole second, and two breaks that
overlap; and an edit form that repeats its text.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 17:19:36 -04:00
Transaction Science
wai: the operations channel.import, channel.guide and channel.verify
In the catalogue (and its export), with the agent rules: --json, --dry-run on
the two that write, --yes before a file is replaced, and a refusal's reason as
the error's code with exit 1. quickstart, the shipped wai's build, holds
channel_lineup. tests/cli_ops.rs gains the two writes' dry-run samples.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 17:12:37 -04:00
Transaction Science
wai-rs: channel_lineup, the import, the lineup and the guide, with its corpus
The feature channel_lineup (video_channel, stitched_presentation; no new
dependency): the import of §4, the lineup record WCL1, the receipt's JSON
carriage, the XMLTV and now/next guides and the verification of §8. The corpus
live-conformance/channels/ is written from fixed seeds by
wai_channel_lineup_vectors; tests/channel_lineup.rs requires it byte for byte,
every vector's outcome, §10's table, and the worked example of §9 run as the
text writes it. ChannelReceipt's signing payload becomes visible to the crate;
its bytes do not change.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 17:12:37 -04:00
Transaction Science
wai: channel lineup and guide, the text (extensions/channel-lineup.md)
The import of a linear channel's feeds (XMLTV, Media RSS, a JSON form, a Media
Playlist's SCTE-35 date ranges) into a wai.video.channel receipt and a signed
lineup (WCL1); the receipt's JSON carriage, its signed bytes unchanged; the
guide, XMLTV or now/next, rendered from both and verified by recomputation;
the operations channel.import, channel.guide and channel.verify; the reasons.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 17:12:37 -04:00