open-standards/wai/film-conformance/README.md
Transaction Science 633c143b20 wai: film reel — wai.film.reel, cuts over one world
The editor's layer over wai.film.linear: a WREL embeds one sealed world + a
sequence of shots (each its own camera track + frame schedule) played back to
back. Cutting wide→close, or one beat from two angles, is film grammar — a
reel carries it as a few kilobytes of camera keys, the world shared across
every shot. Conformance is reel-equivalence: film-equivalence extended over
cuts, per-frame BLAKE3(world_state_hash(tick) || shot camera pose).

Shots MAY revisit earlier world ticks (a cut back in time from a new angle),
so the world is sampled at the sorted/de-duplicated union of all frame ticks
— convergence still holds because the world's replay-equivalence is
order-independent. Reuses the film machinery (extracted shared camera
interpolation + pose bytes) + the FilmReceipt profile (identity = reel_hash);
wai_meter grows a .wrel branch. Registered + tiered Lossless; corpus vector
`coverage` (the character beat cut three ways, incl. a cut back in time) joins
film-conformance/ with a kind-tagged manifest, verified by wai_film_vectors on
the four-platform matrix. SPEC §5 row + extensions/linear-film.md §7. 76 lib
tests, clippy clean.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-17 02:38:59 -04:00

2.1 KiB

Linear-Film Conformance Corpus

Vectors for the linear-film extension (wai.film.linear). The criterion is film-equivalence: given the same film, a conforming sink MUST compute the identical per-frame identity — BLAKE3(world state hash at the frame's tick || the interpolated camera pose) — hence the identical per-frame hashes and the identical Merkle root over them, on every machine, no tolerance parameter.

A film composes two things already proven elsewhere: the embedded world's replay-equivalence (every sink agrees on the state hash at every tick — the world-conformance/ corpus) and the wai.det.fixed64 camera track (interpolated trig-free, like the splat/skeletal tracks). The render — the actual pixels — is the sink's presentation, not the verified quantity.

Layout

  • vectors/<name>.wflm — the WFLM container: a film contract, an embedded sealed wai.world.replay (WWLD), and a camera track.
  • expected_hashes.json — per film: frames, start_tick, ticks_per_frame, film_hash (identity), and frames_root (the Merkle root over the per-frame reconstruction hashes — the conformance quantity).

Vectors (each a complete film/reel in ~1 KB — the world plus the camera(s)):

  • dolly — one subject drifting; the camera dollies from behind to the side.
  • twoshot — two subjects moving apart; the camera holds, then pushes in (a two-leg move).
  • rise — a subject climbing; the camera cranes up and tilts (a quaternion lerp), starting at a non-zero tick.
  • character — the embedded world is a skeletal humanoid (the avatars sim) waving; film composes with avatar.
  • coverage (.wrel, a reel) — the character beat cut three ways: a wide establishing shot, a low push-in, then a cut back in time to a high angle on the same moment. kind: "reel" in the manifest, checked against reel_hash + frames_root.

Running

cd ../wai-rs
cargo run --features film --bin wai_film_vectors -- verify ../film-conformance
cargo run --features film --bin wai_film_vectors -- gen    ../film-conformance   # regenerate

Pass = film-hash + frames-root + frame-count equality, on every machine.