open-standards/wai/live-conformance/browser-floor/README.md
Transaction Science bf7c9fcfee
All checks were successful
WAI operation catalogue / does this change touch it (push) Successful in 17s
wai-fleet service / does this change touch it (push) Successful in 16s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 25s
wai-app and Create / wai-app · does this change touch it (push) Successful in 23s
wai-ledger service / does this change touch it (push) Successful in 19s
wai-sink-swift native sink package / does this change touch it (push) Successful in 22s
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 53s
WAI Studio / does this change touch it (push) Successful in 18s
wai-quantum for JavaScript / does this change touch it (push) Successful in 54s
wai-audit collector and player integration / does this change touch it (push) Successful in 57s
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 1m7s
wai-key-proxy / does this change touch it (push) Successful in 57s
wai-quantum studio and desktop / does this change touch it (push) Successful in 55s
wai-sink-android native sink library / does this change touch it (push) Successful in 55s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Successful in 2m46s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Successful in 5m2s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Successful in 5m5s
joule-moq-room room service / joule-moq-room, every target (push) Successful in 6m41s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 16s
wai-quantum energy-landscape jobs / does this change touch it (push) Successful in 15s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Successful in 1m2s
wai-fleet service / service · linux (push) Successful in 3m16s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Successful in 1m14s
wai-ledger service / service · linux (push) Successful in 4m28s
wai-audit collector and player integration / collector · linux (push) Successful in 5m1s
WAI operation catalogue / the catalogue and every door · linux (push) Successful in 8m15s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 1m28s
wai-quantum studio and desktop / studio · browser (push) Successful in 5m18s
wai-key-proxy / proxy · linux (push) Successful in 3m1s
wai-quantum studio and desktop / desktop app · windows (push) Successful in 10m1s
wai-quantum for JavaScript / javascript · linux (push) Successful in 7m14s
wai-quantum energy-landscape jobs / the same bits · linux-arm64 (push) Successful in 12m23s
wai-fleet service / service · macos (push) Successful in 38s
wai-quantum energy-landscape jobs / native against WebAssembly, over many seeds (push) Successful in 7m35s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 9m15s
wai-quantum energy-landscape jobs / reader, kernels, answers and the stated result · linux, release (push) Successful in 9m29s
wai-quantum studio and desktop / desktop app · linux (push) Successful in 12m24s
WAI Studio / Studio in WebKit · linux (push) Successful in 20m25s
wai-ledger service / service · macos (push) Successful in 1m28s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Successful in 7m54s
wai-quantum energy-landscape jobs / the module under wasm32-wasip2 (wasmtime) (push) Successful in 20m38s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Successful in 15m54s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 2m9s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Successful in 49s
WAI Studio / Studio in Chromium and Firefox · macos (push) Successful in 10m34s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 4m34s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Successful in 15m59s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 6m42s
wai-quantum energy-landscape jobs / the same bits · macos (push) Successful in 7m0s
The browser sink presents a graphics component's text floor, with captions as graphics-vector §6.4 has them
browser-sink §14.9: where a device has no decoder of wai.graphics.vector, a composing
page presents each graphics piece's floor (graphics-vector §6.3), the piece's transcript
as wai.text.zstd, as text: the blocks active at the clock's tick, in block order, each
with its language, direction and writing mode. A piece presents its overlay or its
floor, never both.

Before presenting, the page holds the floor object to its piece: its derived_from names
the piece's base (floor_base), its payload is the raw frame and no other Zstandard
frame (floor_frame), its target states the transcript's length and a timebase
(floor_target), and its content is a transcript in graphics-vector §5.4's one encoding
(floor_transcript).

A caption or a subtitle block is never presented from the floor (caption_track): the
text component of its language carries it, and the text layer presents it or not as the
viewer set it. A forced_narrative block is presented from the floor unless the text
layer shows a cue of its language with its string at that millisecond (forced_in_cue),
so the words are on the page once. The text layer presents one text component of a
package, or none.

wai-rs browser_sink::floor is the reference (read, present), which wai-web's compose
bundle calls as TextFloor. Corpus live-conformance/browser-floor/ (49 floors, 25
presentations), written by wai_browser_floor_vectors and regenerating byte for byte on
x86_64 and aarch64; tests/browser_floor.rs also reads the floors wai-pack wrote for
pack-conformance/multi/multi-captions-01, and wai-web's compose::floor_tests holds them
to wai-vector's transcripts. browser_floor_verify.py, the second implementation,
refuses 72 mutated floors each with its defect's reason, fails 23 mutated copies of the
corpus, and each of its 32 checks, dropped, is caught. compose/run.mjs gains case 10.

Not here: a base that is routed and then refused when loaded still refuses the package,
and the overlay path does not yet leave out caption items (graphics-vector §5.7).

Co-Authored-By: Claude <[email protected]>
2026-11-10 22:36:11 -05:00

22 lines
2 KiB
Markdown

# live-conformance/browser-floor — a graphics component's text floor in a page
The corpus of [`extensions/browser-sink.md`](../../extensions/browser-sink.md) §14.9: floor
objects of a graphics component ([graphics-vector](../../extensions/graphics-vector.md) §6.3),
each read or refused, and what a page presents from a floor at a tick beside the cues its text
layer presents.
| member of `vectors.json` | what each case holds, and what a conforming implementation reaches |
|---|---|
| `floors` | a floor object's `manifest` and `payload` (hexadecimal), and `base`, the content hash of its piece's base entry; the `outcome` (`read`, or `refused` with the `reason`), and for a floor that reads its `tb` and its `transcript`, the payload's content |
| `presentations` | the `floor` read (a case of `floors`, by name), a media `tick`, and the `cues` of the text component the page's text layer presents (none where it presents none), each with its `lang`, its `start` and `end` in milliseconds and its `text`; the `result`: `ms`, the tick's millisecond; `presented`, the blocks the page presents as text, in block order, each a node object with `announce`; and `withheld`, each block active at the tick that the floor does not present, with why |
Every transcript is written by the generator, and every base is named by a constant: no case
describes a programme. Each refused floor is a control of one defect in the floor `programme`.
`wai_browser_floor_vectors verify` and `tests/browser_floor.rs` check that `vectors.json`
regenerates byte for byte and that `wai-rs` reaches every outcome; the test also reads the floor
objects of [`pack-conformance/multi/multi-captions-01`](../../pack-conformance/multi/multi-captions-01/),
which `wai-pack` wrote. `../browser_floor_verify.py` is the second implementation, written from
the extension's text, sharing no code with `wai-rs`, and run as `python3 -I`: it recomputes every
case, requires every mutated copy of the corpus to fail, and drops each of its own checks in turn
and requires the corpus to catch it.