### `wai.media.direction`: a director's storyboard, keyframes and sequence, bound to the video and checked

- **The extension** ([direction](extensions/direction.md)) registers the record
  `wai.media.direction`. A director, a person by an Ed25519 key, signs records at four levels of
  control, and each record states the levels it sets: a **storyboard** (`wai-storyboard`): the
  shots, each with its duration, its subjects by reference picture (one view per angle) and the
  framing it opens on, and optionally their order; **keyframes** (`wai-keyframes`): at stated
  frames of a shot, each subject's box on screen, actor relative, its size class, its screen
  position and its angle, and a camera window over the shot's plate, with `hold`, `linear` or
  `ease` interpolation between keys pinned in integers, and regions of frames held to a reference
  picture; and a **sequence** (`wai-sequence`): which shots, which frames of each, in which order,
  joined by cuts or dissolves.
- **The directed output** (`wai-directed`), signed by the tool that made the video, names the
  records and its directors, the layout of every frame of every shot as made (plate, camera
  window, each subject's view and box, the regions held), the timeline as made and the output's
  frames by digest.
- **Exact where the render is.** Under `replicate` the frames are the pinned integer render of
  the extension over layers that `wai.generate.spectral` regenerates or the verifier holds: the plate through
  the camera window by the nearest sample, each subject's view scaled to its box, the held regions,
  and an integer blend in a dissolve. Every frame recomputes, so the checks are exact: each cut on
  its directed frame (`cut_mismatch`), each duration (`duration_mismatch`) and the order
  (`order_mismatch`), each transition (`transition_mismatch`), each subject where its keyframes
  and their interpolation put it and its size, position and angle classes under the pinned
  framing measure (`framing_mismatch`), each held region (`region_mismatch`). Under `attest`, a
  float generator's frames, the same checks run on the tool's stated layout and the outcome is
  attested with the class of what stated it; a float generator's picture claimed exact is
  refused (`check_mismatch`).
- **Governance and authorship evidence.** Every element governs the output frames that show what
  it directed, and the directed output states them; a claim of frames an element does not govern
  is refused (`governance_mismatch`). An accepted case gives a per-frame map of who directed each
  frame at each level, beside what made its samples. Each element maps onto a `direct` step of the
  contribution record, with its frames, and onto a C2PA 2.4 `c2pa.edited` action whose changes are
  frame ranges (and the rects of a held region), one actions assertion per director; and, in an
  informative section, onto OpenTimelineIO's serialized schemas. WAI decides no legal question.
- **The corpus** ([`live-conformance/direction/`](live-conformance/direction/)), written by
  `wai_direction_vectors gen` from fixed seeds, holds a storyboard of three shots and two subjects,
  a cinematographer's keyframes (a camera easing across a plate, a push in from medium to close)
  with a held region of a drawn reference, and an editor's sequence that reorders, trims and
  dissolves, at 64 by 36 pixels so every frame recomputes; the storyboard fixing its own order; an
  order left to the tool; the same direction attested; and a control of one defect for each reason,
  among them a cut a frame early, a box a pixel off its track, a size class the box does not
  measure, a record signed by a non-party, a swapped order, a float plate claimed exact and a
  governance entry that claims every frame. Its second implementation,
  `live-conformance/direction_verify.py`, written from the text and sharing no code with `wai-rs`,
  runs the generator in its own arithmetic after checking it against its conformance vector,
  renders every frame and writes every statement itself, requires every mutated copy of the corpus
  to fail, and drops each of its own checks in turn and requires the corpus to catch the weakened
  verifier.

