### Reader limits for the extension formats' durations

A score, haptic signal, audio scene, splat4d clip or film declares its length in its
contract, and rendering it allocates in proportion. Nothing bounded the declaration
(found while fuzzing: a score's `mixdown` allocated `duration` samples outright).

- **The limits** (each extension's §2.1, `wai::limits`), shared with SPEC §2:
  - score and haptics: `duration × channels` at most 2²⁷ samples;
  - audio scene: `duration` at most 2²⁶, so its stereo floor is at most 2²⁷;
  - splat4d (`n_frames`), film (`frames`) and a reel's shots together: at most 2²⁰
    frames.

  A reader may refuse past a limit (`duration_too_long`), when it reads the contract.
- **Film tick arithmetic.** `start_tick + f × ticks_per_frame` wrapped in release
  builds and panicked in debug ones. A reader now refuses a schedule whose last tick
  passes 2⁶⁴ − 1, and `frame_tick` saturates rather than wraps.
- **Tests.** `tests/extension_duration_limits.rs` rewrites a committed vector of each
  format to sit exactly at its limit (it reads) and one past it (refused by name), and
  checks the film schedule at and past 2⁶⁴ − 1. The old readers fail all three tests,
  and every committed corpus verifies unchanged.

