Some checks failed
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 26s
joule-moq-http live HTTP egress / joule-moq-http · does this change touch it (push) Successful in 25s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 17s
wai-audit collector and player integration / does this change touch it (push) Successful in 22s
wai-ledger service / does this change touch it (push) Successful in 13s
wai-quantum for JavaScript / does this change touch it (push) Successful in 28s
wai-quantum studio and desktop / does this change touch it (push) Successful in 26s
wai-app and Create / wai-app · does this change touch it (push) Successful in 4m16s
wai-fleet service / does this change touch it (push) Successful in 4m4s
WAI operation catalogue / does this change touch it (push) Successful in 4m10s
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 4m30s
wai-sink-swift native sink package / does this change touch it (push) Successful in 4m21s
WAI Studio / does this change touch it (push) Successful in 4m36s
wai-sink-android native sink library / does this change touch it (push) Successful in 4m40s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Successful in 6m36s
joule-moq-http live HTTP egress / joule-moq-http, every target (push) Successful in 1m47s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Successful in 2m35s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 9s
joule-moq-room room service / joule-moq-room, every target (push) Failing after 5m51s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Successful in 5m33s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Successful in 39s
wai-quantum for JavaScript / javascript · linux (push) Successful in 2m40s
wai-audit collector and player integration / collector · linux (push) Successful in 3m38s
wai-ledger service / service · linux (push) Successful in 3m37s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Successful in 1m10s
wai-quantum studio and desktop / studio · browser (push) Successful in 4m34s
wai-fleet service / service · linux (push) Successful in 2m19s
wai-quantum studio and desktop / desktop app · linux (push) Successful in 8m21s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 1m41s
WAI operation catalogue / the catalogue and every door · linux (push) Successful in 14m48s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 6m7s
WAI Studio / Studio in WebKit · linux (push) Successful in 18m41s
wai-quantum studio and desktop / desktop app · windows (push) Successful in 10m39s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Successful in 56s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 2m7s
wai-ledger service / service · macos (push) Successful in 1m9s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 4m49s
wai-fleet service / service · macos (push) Successful in 38s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Successful in 8m2s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Successful in 15m45s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 7m1s
WAI Studio / Studio in Chromium and Firefox · macos (push) Successful in 10m29s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Successful in 16m4s
The two corpora landed with a list each of the checks no case exercised: 39 of the 71 of audience_scte224_verify.py, shown there by documents the script made itself, and 14 of the 61 of ad_signalling_verify.py. Both lists are empty now, and are gone from the scripts: a second implementation with any one check switched off no longer passes its corpus, and a check with no case fails the run. - live-conformance/audience-scte224/: 59 more documents and one more predicate, written by tests/audience_scte224.rs. Each limit has a document at it, which imports, and one past it (1,048,576 bytes, 64 elements deep, audiences 8 deep, 8,192 regions, 4,096 media points, 256 blackouts, six digits of a fraction, the first instant of 1970, the last instant a decision carries); a document near a limit is stated by its pieces (document_parts), so the file holds no megabyte of spaces. The rest are the single rules the first cases stated only together with another. - live-conformance/ad-signalling/: 17 more records and two more stitching cases, written by live_ads::signalling_corpus, and a key of another curve in the key set. Writing the cases found five places where the reference and the second implementation disagreed, each settled by the text: an attribute on a Region, an action:Content or an Alternate is scte224_not_carried (the reference said malformed and action_unmappable); a Remove that holds a policy's definition is scte224_malformed (the reference imported it; audience-decision §10.5 now states the reason); audiences nested past 8 are scte224_not_carried (the second implementation said malformed); a number's 15 significant digits are counted as written (live-ads §13.3 now says so; the reference read 123456789012345.0); a pod with no slots member is not carried (§13.2 now says so; the second implementation carried it). Left as found, not in either list: a creative's listing with a Group of no Object is refused by the second implementation (stitch_listing_malformed) and composed by the reference; the corpus states its creatives once for every case, so no case reaches it. Regenerated on the Framework (x86_64) and checked byte for byte on Thor (aarch64). Co-Authored-By: Claude <[email protected]>
30 lines
2 KiB
Markdown
30 lines
2 KiB
Markdown
# live-conformance/audience-scte224 — SCTE 224 documents as blackouts
|
||
|
||
The corpus of [`extensions/audience-decision.md`](../../extensions/audience-decision.md) §10.
|
||
`vectors.json` holds:
|
||
|
||
- `documents`: `Media` documents, each with the `programme` and `spans` it imports to (a span is
|
||
a decision's `start`, `end` and `blackouts`), or the one reason it is `refused`. Each refused
|
||
document is one edit from a document that imports. A limit (1,048,576 bytes, 64 elements
|
||
deep, audiences 8 deep, 8,192 regions, 4,096 media points, 256 blackouts) has a document at
|
||
it, which imports, and one past it. A document near a limit is stated by its pieces,
|
||
`document_parts`, written one after another: a string; `{"repeat": s, "times": n}`, the string
|
||
`n` times; or `{"counted": s, "times": n}`, the string once for each count from 0 to `n` − 1
|
||
with its `{n}` replaced by the count in three digits of base 36 (`0` to `9`, then `A` to `Z`).
|
||
- `decisions` and `predicates`: a signed audience decision or sink predicate (`text`), the name
|
||
of the `document` it is held to, the `location` of the session or the sink, and its outcome:
|
||
`consistent` with the verdict and the programme shown in place, or the reason it is `refused`.
|
||
- `keys`: the public keys, for a reader. Every key is from a fixed seed and attests nothing;
|
||
every region is a user-assigned code and names no place.
|
||
|
||
Written by `tests/audience_scte224.rs` (`WAI_AUDIENCE_SCTE224_WRITE=1 cargo test --features
|
||
sink_predicate --test audience_scte224`), which declares each outcome by hand and requires the
|
||
reference to reach it. The second implementation, written from the text:
|
||
|
||
```
|
||
python3 -I live-conformance/audience_scte224_verify.py live-conformance/audience-scte224
|
||
```
|
||
|
||
It imports every document with a reader of its own, writes the exported document again byte for
|
||
byte, holds each decision and predicate to its document, requires every changed copy of the
|
||
corpus to fail, and switches off each of its own checks in turn: the corpus catches every one.
|