feat(cluster): RFC 010 c3 — transport trait, framed codec, TCP + loopback impls

The control-connection abstraction (RFC v2 §5): object-safe Transport/
Listener/Conn over opaque pre-resolved addresses (resolution stays the c9
seam), with FramedConn as the single shared byte->Frame codec feeding
Frame::decode's incremental contract. Nothing forecloses additional
per-peer connections for the jarred bulk plane; the membrane is not a
transport (D2).

TCP parks the calling actor via scheduler fd readiness (MSG_NOSIGNAL
writes, EINPROGRESS dial resolved through SO_ERROR). Loopback is the
shipped in-memory test transport: OS-thread-blocking condvar pipes with
TCP-shaped close semantics, per-instance address registry.

Conformance suite runs the same codec over both impls: roundtrips both
directions, framing across split writes, coalesced frames, peer-close
mid-frame as TruncatedByPeer (not EOF), clean close as Ok(None). Plus
impl-specific establishment/error cases and a 4 MiB cross-buffer TCP
frame under real backpressure.
This commit is contained in:
Claude
2026-08-14 14:31:39 +00:00
parent 3850f6099b
commit 39ab92871e
5 changed files with 1021 additions and 4 deletions
+4 -4
View File
@@ -1,8 +1,8 @@
//! RFC 010 — clustering (smarm⇄smarm, explicit remote boundary).
//!
//! c1: feature flag + optional deps only. The owned envelope (c2), transport
//! trait (c3), and everything above them land in later chunks. This module is
//! intentionally empty so the `cluster` feature's default-build invariance is
//! reviewable in isolation.
//! c1: feature flag + optional deps. c2: the owned envelope. c3: the
//! transport trait (control connection), framed codec, and the TCP +
//! loopback impls. Everything above them lands in later chunks.
pub mod envelope;
pub mod transport;