LobbyTornException
Thrown by ElectionLobby.start on a mid-2PC peer-set collapse — the co-elector(s) needed to complete the freeze/ack round are gone. This covers both ways a fabric signals it: a transport tear (the underlying seam latches us.tractat.kuilt.core.SeamState.Torn, e.g. a 2-peer mesh whose only link dropped) and a membership drain (Seam.peers collapses to {self} while state stays Woven — the last member simply left the roster). Retryable, not fatal: the caller may re-run electLobby(...) to rejoin and re-elect. It exists so the collapse surfaces a terminal signal the caller can act on, rather than suspending start forever.
ElectionLobby.awaitRoom reports the same collapse as ElectionOutcome.Torn instead of throwing — a member has a second, non-collapse way to stop being a member (it gets promoted), and a sealed return makes the caller confront which one happened. See ElectionOutcome.
reason is the seam's own us.tractat.kuilt.core.CloseReason when it tore, or us.tractat.kuilt.core.CloseReason.Unreachable for a membership drain with no tear.