AdmitMessage
Wire messages that implement the admit/identify handshake.
Framing: each AdmitMessage is CBOR-encoded and sent as a us.tractat.kuilt.core.Swatch payload. The receiver detects admit frames by a discriminator prefix tag (PREFIX_BYTE) that application frames must not start with — this avoids a separate channel or wrapper envelope.
Handshake flow:
Joiner → Host : Hello(identity)
Host → Joiner : Welcome(assignedId, identity)
Host → all others : Welcome(assignedId, identity) [roster broadcast]Content copied to clipboard
If the host rejects the joiner (e.g. already admitted with same dedupKey):
Host → Joiner : Reject(reason)Content copied to clipboard
The host-side runs this passively for incoming Hellos. The joiner sends Hello immediately upon transport connection and waits for Welcome or Reject.