### Who served what a node holds, and on whose authority

- **Cache authority** ([extensions/cache-authority.md](extensions/cache-authority.md)), the record
  `wai.delivery.cache`: the role `cache/serve`, which a node's operator gives in its key log to the
  caches and peers it runs, and the class authority `cache-transmission`. Under the role a key signs
  its holdings records and its declarations, and is the upstream its receivers acknowledge. Neither
  lets it author, transform or sign a publisher's statement. A relying party places a server key by
  the heads it names, over the serving roles settlement already honours and `cache/serve`, in
  jwp-receipts' three levels: a revoked key is refused, a retired one past its `until` is refused,
  a head that lists the key with no serving role refuses it, a key no head lists is unconfirmed, and
  an unreadable head confirms nothing. A placement labels a server and never changes a verdict.
- **The `cache-transmission` claim** (jwp-receipts §2.4.18): a node's declaration that it sent, from
  what it held, objects of a group another key signed, over a multicast or unidirectional instance
  of its own, with a bitmap and a root under the publisher's tree, checked without the bytes, and
  its energy. It is refused when signed by the group's key or on a two-way instance. Receivers'
  reconciliations over a cache's instance now count, credited per instance and only for what the
  cache says it sent. A cache's instance never makes a group `transmitted`.
- **Held by a deadline**: of a population of receiver keys a relying party states for a region
  (rung-price §2's codes), fixed by its digest, how many held an object by a deadline (stated, or a
  timeliness entry's `by_ms`) on their own signed word, read as timeliness' held-at statements: an
  acknowledgement window's last microsecond, a counted reconciliation's time, or a holdings
  record's instant, each rounded up to the millisecond. Evidence earlier than the group's start is
  set aside (`held_before_group`). Parts from several peers complete an object together. The miss
  rate is in parts per million, rounded up, and is met or `miss_target_exceeded`. Each hit is
  credited to the publisher or the nodes its evidence names, and every unknown is a miss.
- **Timeliness lines from every kind of held-at statement**: cache-authority §9 derives timeliness
  §6.3's lines for an entry from acknowledgements and counted reconciliations as well as holdings
  records, so a key on time in one of them is a hit at that deadline in a tally of that object
  whose population holds the key. Timeliness §6's own verdict and statement still read holdings
  records alone.
- **Beside it**: takedown reads a cache-transmission claim as its signer's own word that it held
  what it sent; settlement §13 places a serving node by `cache/serve`; holdings §9 says which key a
  node signs with to be placed; and http-delivery §8.2's receipt-index check holds a
  `cache-transmission` claim to its group in both implementations, where before it accepted one
  unchecked.
- **The corpus** [`live-conformance/cache-authority/`](live-conformance/cache-authority/): claims,
  placements, verdicts, tallies and timeliness lines, with a control for every reason, every
  outcome of placing a key, an acknowledgement refused for each reason a tally reads, and each
  bound on both sides. `cache_authority_verify.py` is a second implementation, and
  `claim_verify.py cache-authority` reads every claim through steps 1–4. The takedown corpus holds a
  node's claim with its purge of what it sent made, missing, and not verifying, which
  `takedown_verify.py` reads too.
- **Breaking:** `api:rust:wai::claim_receipt::ClaimClass::CacheTransmission` and
  `api:rust:wai::claim_receipt::ClaimBody::CacheTransmission`: the class jwp-receipts §2.4.18
  registers, which an exhaustive match over either needs.
- **Breaking:** the reasons of the class, which an exhaustive match over `Reason` needs:
  `api:rust:wai::claim_receipt::Reason::CacheTransmissionNotTransmitted`,
  `api:rust:wai::claim_receipt::Reason::CacheTransmissionOnBidirectional`,
  `api:rust:wai::claim_receipt::Reason::CacheTransmissionBitmapMalformed`,
  `api:rust:wai::claim_receipt::Reason::CacheTransmissionSubjectMismatch`,
  `api:rust:wai::claim_receipt::Reason::CacheTransmissionByPublisher`,
  `api:rust:wai::claim_receipt::Reason::CacheTransmissionLeafCountMismatch`,
  `api:rust:wai::claim_receipt::Reason::CacheTransmissionObjectsNotHeld` and
  `api:rust:wai::claim_receipt::Reason::CacheTransmissionRootMismatch`.
- **Breaking:** `api:rust:wai::takedown::Case::cache_transmissions`: the cache-transmission claims
  a takedown case is given (takedown §8.1), which a struct literal of `Case` needs.
