producer: the UDP ASSOCIATE datagram stage — the select!-driven relay (ADR-003)
- serve_udp_associate: sentinel reply (127.0.0.1:0 — the handle-swap
surface) then the datagram stage; missing egress refuses
RFC-faithfully (CommandNotSupported, ADR-008); egress-factory
failure maps to reply#1's code
- run_datagram_stage: select! over channel reads ∥ egress replies
(the concurrent full-duplex shape), typed StageExit diagnostics
(EOF = the clean exit; undecodable frames fail loud; the egress
readiness contract tolerated as spurious wakeups)
- wire: frame_inner — the reply-path half of framing-once (identical
wire to frame(), pinned); egress inner bytes never re-prefixed
- tests: the readiness-contract test (instant-Ok(None) egress does
not starve the stage), empty-payload datagram legal (never EOF),
undecodable-frame loud fail, EOF teardown + fresh associate, the
egress drop witness (stage owns it), missing-egress refusal +
CONNECT guard — in-process (duplex) and over channels (harness);
the three-command regression guard drives all commands serving
Verified: cargo test 174/174; clippy --all-targets -D warnings;
fmt --check; wasm check + clippy (wasm32-unknown-unknown); doc.