### `wai.live.message` and `wai.live.call`: conversations and calls on live rooms

- **The extension** ([live-messaging](extensions/live-messaging.md)): a conversation is an
  end-to-end encrypted room with a conversation statement, `WMC1`, the authority's. Its clock
  records membership rather than presence (§3.4): an offline member stays a member. Each member
  publishes a messages track, `[room, member, "messages"]`: each group one message, sealed as
  confidentiality seals a media track and signed into the member's receipt chain in the
  labelled form, receipt alias 5. The plaintext is a message record, `WMG1`, signed by its
  author: a text, a reply in a thread, a reaction, an edit or a retraction, each of the last four
  naming its target by the link hash of the target's group receipt. A verifier keeps an edited
  message's original and states its current text, and keeps a retracted message in verification,
  stated retracted, its body shown nowhere. Any member commits, the room service's log ordering
  the commits (§7.2, which replaces confidentiality §5.5's lowest-leaf rule in a conversation,
  since no member is removed for being offline), and the clock signs an epoch statement, `WME1`,
  after each GroupInfo or commit, naming the epoch's roster. Acknowledgements of delivery and
  reading, `WMA1`, are signed in the clear. A history store holds the log, ciphertext, receipts
  and signed records only, takes a message only from a member of the latest epoch sealed in that
  epoch, and serves each principal the entries of the epochs it was a member of (§9.3:
  `not_a_member` otherwise). A call is a room with a call descriptor, `WCT1`; the caller's
  invitations, `WCI1`, are held in each callee's inbox and checked before a device rings; every
  invitation ends with an answer, `WCA1`: accept, decline, cancel, or the clock's missed call at
  its deadline.
- **The reference** (`wai-rs`, feature `live_messaging`): every record, sealing and opening a
  message object (confidentiality §4, both suites), receipts, the conversation verifier a store
  uses for its checks, what a principal is owed, and the call verifier. `joule-moq-mls` gains a
  conversation's commit rule (`CommitRule::AnyMember`). `joule-moq-room` keeps a conversation
  (`[messaging]`) in a history store on disk that survives a restart, and calls (`[call]`) with
  per-principal inboxes and the clock's missed calls. `wai-live-web` gives a page the records and
  the verifier (`Messages`, `callCheck`); `joule-moq-web`'s `web/room/messages.html` is a member
  in a page and `web/room/call.html` a call's inbox and flow.
- **Conformance**: [`live-conformance/messaging/`](live-conformance/messaging/), written from
  fixed seeds by `wai_live_messaging_vectors gen`, every message sealed under its epoch's secret:
  conversations accepted and refused, one message refused for each reason a message can raise,
  history requests, calls and every record on its own. Its second implementation,
  `live_messaging_verify.py`, agrees with the reference on every vector. `joule-moq-room`'s
  `tests/messaging_room.rs` runs members through real MLS groups across a restart of the service
  and a removal, and `tests/call_room.rs` a call through a relay; the `messaging` and `call`
  scenarios of `joule-moq-web/e2e/` run them in a browser.

