### `wai.live.coperformance`: intents, turns and audience co-creation in rooms

- **The extension** ([co-performance](extensions/co-performance.md)) registers the record
  `wai.live.coperformance`. The room authority signs a co-performance policy, `WPP1`, chained
  by the instant it takes effect; every other statement is a `meta` payload of
  [live-events](extensions/live-events.md), signed by its author in its chain, and the
  descriptor's and the grant's layouts are unchanged.
- **Intents.** A participant announces, ahead of the instant it plays and for a horizon the
  policy bounds, the material it means to play: an object by the digest of its payload, notes,
  a text line, or a camera move (`WPI1`). A verifier finds what played (the object nearest the
  planned instant on the announced track, or the author's chat or caption) and compares it
  under a pinned rule: digests equal, notes with their pitches equal and their onsets and
  durations within the policy's tolerance, text equal byte for byte, a camera's pan and tilt
  within the angle tolerance and its zoom equal. Each intent is kept, diverged or missed, and
  a room key's fidelity statement (`WPF1`) states per participant how many of each, which the
  verifier recomputes as of the statement's instant (`fidelity_mismatch`).
- **Turns.** A turn schedule (`WPT1`) gives the floor in turns of microseconds or of bars at a
  stated tempo, its holders taking turns in order, solo or as call-and-response pairs, and a
  handover (`WPH1`) passes a turn from an instant. The schedule states its mode: under refuse
  the relay does not forward an object published out of turn (`turn_violated`); under mark the
  relay forwards it and the room clock signs a mark (`WPM1`, `turn_unmarked`). A grant's
  `latency_budget_ms` bounds how late a participant's object may arrive, and a late object is
  marked before any mix (`late_unflagged`); a mark the room's records do not support is
  `mark_unfounded`.
- **Audience co-creation.** A grant's `audience_input` attribute is the audience-input power
  and its limit per window; a member's input (`WPA1`) is a prompt, a sketch or a movement sample
  by digest, or a vote, sent to a window (`WPW1`) that states its rule and its close. Once the
  window closes, the clock commits to the eligible inputs (`WPK1`): the inputs sent before the
  close and not restricted by a moderator's decision. A selection (`WPS1`) recomputes from the
  commitment under a plurality vote, the top inputs by reactions, or a draw from a seed the
  window committed to before any input; a pick sent after the close is `input_late`, and one
  the rule does not give `selection_mismatch`. Every pick carries a credit: the member who sent
  it, as an author of material, or the voters of an option together, as directors; each maps
  onto a party and a step of a contribution record, a slot this revision names and writes
  nothing into.
- **Reference and corpus.** `wai-rs` feature `co_performance` (`src/co_performance.rs`).
  `live-conformance/coperformance/vectors.json`, written from fixed seeds by
  `wai_co_performance_vectors`: a jam room in which a person and an AI participant trade
  four-bar phrases, an audience room with a window of each rule, the audience room with a gap,
  and a refused room for each reason of §10. Checked by `tests/co_performance.rs` and by
  `live-conformance/co_performance_verify.py`, a second implementation that shares no code with
  `wai-rs` and that drops each of its own checks in turn to show the corpus catches it.

