- egress.rs: the I/O-plane inversion point, function-not-trait at the
three factories; Egress is the one trait (the per-association
returned object)
- dial: TargetHandle (boxed halves, +Sync per the ChannelPlan bound),
DialFn over the typed TargetAddr (the POCs' JSON stand-in retired),
SocksDialError with the five-variant RFC-faithful mapping
- egress: Egress (send payload-only; next_reply returns inner bytes;
the readiness contract — Pending when nothing is ready — documented
on the trait), EgressFactory, EgressError, the egress_factory
sync-lift constructor
- accept: BindAccept (the accept future owns its resources end-to-end;
the quiet wait's drop IS the client-gone teardown), BindTargetHandle
(ownership structural; the composed keep-alive owner rides inside
the halves provider-side), BindAcceptFactory, the two-stage error
pair (factory → reply#1; accept-stage → reply#2)
- no substrate type named anywhere in the module; ownership rides the
handle structurally (no _ bindings)
- 9 new tests: the four error→reply-code tables (all variants,
byte-compared), the sync-lift Ok/Err paths, the closure compile
shapes, the Send/Sync/Unpin assertions; lib.rs re-exports the
surface
Verified: cargo test (113 green), --all-features green, clippy -D
warnings clean (native + wasm32), fmt clean, cargo doc zero warnings,
wasm32 check clean.