Goodbye

@Serializable
@SerialName(value = "goodbye")
data object Goodbye : AdmitMessage

Sent by a joiner to the host on a deliberate us.tractat.kuilt.session.Room.leave.

Distinguishes a graceful leave from a bare transport close: on receipt the host evicts the member immediately with us.tractat.kuilt.session.LeaveReason.Normal, rather than opening a reconnect window, and propagates a Farewell to all remaining members so they evict promptly too. Best-effort — a lost Goodbye degrades to the transport-close → reconnect-window path.