PartitionDetector
Detects when a peer has become unresponsive and emits PartitionEvents for the layer above to act on.
Implementations are per-link: one PartitionDetector monitors one peer across one us.tractat.kuilt.core.Seam. The leader composes multiple detectors (one per connected peer) — that composition is the leader's concern, not this interface's.
Calling contract for observedPeer: The runtime must call observedPeer for every frame that arrives from the monitored peer, including application frames. This resets the liveness timeout in the same way a pong frame does — heartbeat is a dead-man's switch, not a dedicated keepalive channel.
Backpressure hook (onBackpressure): The leader must call onBackpressure when the per-peer outbound buffer exceeds the configured ceiling. The detector reacts by emitting PartitionEvent.PeerUnresponsive with PartitionEvent.Reason.Backpressure.