### When each object passes on a bearer with no return path, and when a receiver holds it

- **The carousel schedule** ([extensions/carousel.md](extensions/carousel.md)), the record
  `wai.bearer.carousel`: a publisher's signed plan, a jwp-receipts claim of class `schedule`
  (§2.4.16) beside the group receipt and the instance's transmission claim, naming for each object
  its forward error correction, RaptorQ (RFC 6330 with its erratum 5548) or Compact No-Code
  (RFC 5445), with that code's object transmission information, the repair symbols each pass
  adds, whether a later pass repeats its symbols or sends new ones, and the times and count of its
  passes. Each code's parameters are held to its bounds and the RFCs' division of an object into
  source blocks; an entry to its group, its object's content hash and, where the bytes are held,
  their length.
- **When an object is held.** For a loss bound in parts per million and an overhead of 0, 1 or 2,
  a verifier derives the pass after which a receiver whose losses stay within the bound holds
  each object, whatever symbols it loses: a RaptorQ block at K′ + h distinct symbols, the count
  RFC 6330 §5.8 states its decoding-failure bound at, and a symbol a repeating pass missed counted
  as missed again. It reports the octets each schedule sends and the bound on decoding failure,
  and checks a statement that an object or a group is held by an instant. Schedules that
  contradict each other, or whose instance is undeclared or two-way, are set aside.
- **The passes a receiver listens to**, from what it holds of each block and when it tunes in: the
  passes that add symbols it is certain to keep, when it holds the object, and how long its radio
  must be on.
- **Patents** (§11): the IETF IPR disclosures on RaptorQ (#2554 current) and Raptor (#1957
  current; #1176 the holder's general statement), each a licence within the holder's standard
  terms for a device that implements a wireless wide-area standard and a conditional non-assertion
  for one that implements none; no disclosure on Compact No-Code, which is the default a tool that
  writes schedules uses. The reference implementation encodes and decodes no symbol.
- **The corpus** [`live-conformance/carousel/`](live-conformance/carousel/): 33 verdicts, 50
  claims (every bound of the codes met and passed) and 16 plans. `carousel_verify.py` is a second
  implementation; `claim_verify.py carousel` reads every claim through steps 1–4; and
  `tests/carousel.rs` checks the table of K′ and Partition[] against an independent RFC 6330
  implementation for every block size, and decodes each RaptorQ object a case holds available
  from what a receiver within the bound holds.
- **Breaking:** `api:rust:wai::claim_receipt::ClaimClass::Schedule` and
  `api:rust:wai::claim_receipt::ClaimBody::Schedule`: the class jwp-receipts §2.4.16 registers, which an
  exhaustive match over either needs.
- **Breaking:** the eleven reasons of the class, which an exhaustive match over `Reason` needs:
  `api:rust:wai::claim_receipt::Reason::ScheduleNotScheduled`,
  `api:rust:wai::claim_receipt::Reason::ScheduleObjectsMalformed`,
  `api:rust:wai::claim_receipt::Reason::ScheduleOtiInvalid`,
  `api:rust:wai::claim_receipt::Reason::ScheduleSymbolsInvalid`,
  `api:rust:wai::claim_receipt::Reason::SchedulePassesInvalid`,
  `api:rust:wai::claim_receipt::Reason::ScheduleSubjectMismatch`,
  `api:rust:wai::claim_receipt::Reason::ScheduleSignerMismatch`,
  `api:rust:wai::claim_receipt::Reason::ScheduleLeafOutOfRange`,
  `api:rust:wai::claim_receipt::Reason::ScheduleBeforeGroup`,
  `api:rust:wai::claim_receipt::Reason::ScheduleContentMismatch` and
  `api:rust:wai::claim_receipt::Reason::ScheduleLengthMismatch`.

