### Live rooms across relays: hop links, the evidence at every hop

- **A room across relays** ([live-rooms](extensions/live-rooms.md) §10.7): a room may be carried
  by several relays connected by hop links. Each relay holds the sessions that reach it to §10
  (rights, the seek power, a rated track's threshold); a hop link runs under its operator's token,
  never a principal's grant; a relay that forwards a FETCH or a fill of a track whose live edge it
  does not know learns it upstream and holds the request to §10.6 before forwarding; a hop link's
  threshold is 0, so a rated room is served at the relays its rated publishers reach; and no relay
  forwards a request back where it came from, to a relay it has passed through, or past a bound,
  the relays it passed carried on it in a Message Parameter negotiated by a Setup Option
  (`draft-ietf-moq-transport-22` §9.20). `relay_loop`, `relay_hops_exceeded` and `no_upstream`
  are a relay's reason phrases, like `seek_not_granted`, and no verifier's.
- **Receipts at every door** ([jwp-receipts](extensions/jwp-receipts.md) §4.1): a relay holds
  what another relay forwards it to its door as it holds a publisher's, and refuses an object
  that does not verify though the relay before it forwarded it.
- **One record per hop, chaining by track** ([live-metering](extensions/live-metering.md)
  §3.10): every relay signs its own record; a hop link is counted in both ends' track entries
  and in neither's subscriber sessions or ledger, so each subscriber is counted once and a
  grant's consumption is what the relays serving its sessions state; each relay's energy is its
  own figure, summed only within a class. §8 states what the reference relay counts. The record's
  layout, the receipt and the corpus do not change.
- **The floor and the inputs, once** ([co-performance](extensions/co-performance.md) §8): the
  relay a performer's or an author's session publishes to decides the floor and the inputs; a
  relay that receives them over a hop link forwards them as decided, in the order they arrive,
  and reads the statements of the events tracks it forwards. Neither `wai-rs` nor
  `co_performance_verify.py` changes: a verifier counts each input where the merged order meets
  it, wherever it was decided.
- **A DVR window across relays** ([live-recording](extensions/live-recording.md) §8.3):
  fetched through another relay as an upstream FETCH, the seek power held at the viewer's relay.
- **The reference relay** (`joule-moq-relay`): `[[upstream]]` links over native QUIC,
  WebTransport or the WebSocket binding, the relay-id path, failover, GOAWAY across hops, and
  `tests/cascade.rs` for each of the above.

