removePeer
Remove peer from the live peers set, leaving state untouched — the membership drain a real peer-mesh performs when one link dies while others survive.
Refuses selfId, throwing IllegalArgumentException. Seam.peers holds selfId in every state, so removePeer(selfId) reaches the roster the constructor already refuses (#2536) — one transition later, and from a consumer's test body rather than its fixture. The inversion that guard exists to prevent fires exactly as it describes: a Woven seam with one live remote whose peers.value.size > 1 — the contract's sentinel for "at least one remote is connected" — reads false, so the seam reads alone. It also brings this helper into line with sendTo, which has refused selfId since #2428; without it the fake disagreed with itself on the same axis in two places, refusing to address self while accepting forgetting self (#2546).
Use tear for the collapse to { selfId }. Removing a peer the roster never held stays a silent no-op — the guard is on selfId, not on membership.