### `wai.video.stitched_presentation`: player-signed presentation of ads another party stitched, and the signed pod-input record

- **The claim** ([stitched-presentation](extensions/stitched-presentation.md) §5): `WSC1`, a
  player's signed claim that it presented one ad written into an HLS or DASH stream, in its
  segments or as an interstitial. It names the ad by the marker the stream carries for it (§3):
  an `EXT-X-DATERANGE` tag's `ID` and `START-DATE` and the ad identity an attribute of it
  carries; an interstitial date range's `ID` and `START-DATE` and the index of the asset the
  player was served, whose `URI` is the ad identity; or a DASH event's Period, scheme, value and
  `id`, with the ad identity an attribute of it carries. It states the SHA-256 of the manifest
  it read the marker from, and carries ad-presentation's spans, viewability rules, quartile and
  attestation under a session key made for one playback session, with a redemption context of
  its own.
- **The pod-input record** (§4): `WSI1`, signed by the stitcher or by a proxy in front of the ad
  server for each decision: the digest of the response (a VAST document, read; a VMAP document,
  bound; or a form-1 `wai.video.ssai` receipt, by its identity), the ads chosen with their
  markers, ad identities, identities in the response (`AdServingId` or the `Ad`'s `id`),
  universal creative identifiers, creative digests, durations and prices per presented
  impression (from the response's CPM `Pricing`, checked; a winning bid, its document bound by
  digest; or stated by the signer), the avail, the session it was decided for or none for a
  break every viewer is shown, the measurement terms of ad-presentation §8, and the frame.
- **Composited frames** (§6): a record's frame is the full picture, a squeeze or a double box;
  the ad's region is live-compose §5.9's, the claim states the region's share of the picture,
  and a player measures the fraction of the region in view. One presentation is one claim per
  signing player.
- **Verification** (§7): each record is checked against its response; each claim against its
  record (the session it was decided for, or a shared break) and the manifest's bytes, which
  must carry the marker with that ad identity; then each ad's presentations (one own claim a
  session), the quartiles they reached, and the spend that counts, by currency and never summed
  across currencies. An ad whose segments were fetched ahead of its break and never presented
  has no claim and counts nothing; a form-1 receipt's stated quartiles and billable spend are
  stated beside the presented ones.
- **A form-1 receipt's JSON carriage** (§4.5, `SsaiReceipt::to_json` and `from_json` in
  `src/wai_video_ssai.rs`), so a verifier can be given one; its signed bytes and identity are
  unchanged.
- **The reference** is the `stitched_presentation` module of `wai-rs` (feature
  `stitched_presentation`, no new dependency), with readers of HLS attribute lists, asset lists
  and an XML subset of its own. `wai_stitched_presentation` writes and checks the corpus,
  verifies a bundle, signs a pod-input record from a draft, and serves `POST /v1/verify` on a
  loopback address. `live-conformance/stitched/`, written from fixed seeds: stitched HLS with
  per-ad date ranges and a prefetched ad never presented, an interstitial with attested
  presentations and a winning bid's price, a squeeze on a DASH channel, a double box in another
  currency, and a stitcher's form-1 receipt whose beacons counted a prefetch; a control of each
  record and claim check. Its second implementation is
  `live-conformance/stitched_presentation_verify.py`. The browser client's reference producer,
  `joule-moq-web/web/ads/stitched.js`, reads the markers from the corpus's manifests, measures
  an ad's region, and writes and signs the corpus's claims byte for byte.

