pub(super) fn disconnect(core: &mut ProtocolCore) -> Vec<Command>Expand description
ends the current user attempt on purpose
unlike on_ws_close, this is not a recovery path
it clears the saved connect context, runtime state and sticky replay state,
then closes the websocket and peer connection
any later recovery-timer delivery becomes a no-op because the caller
explicitly asked to stop