PURE invariant: the lifecycle timestamps must agree with Status.
Status
Connected
ConnectedAt
Disconnected
Failed
DisconnectedAt
PURE invariant: the lifecycle timestamps must agree with
Status.Connected⇒ConnectedAtis set (media is flowing; the timestamp anchors duration metrics).Disconnected/Failed) ⇒DisconnectedAtis set. Returns all violations (empty array = valid). Earlier non-terminal states (Pending/Scheduled/ Connecting/Disconnecting) impose no timestamp requirement.