From #413.
Sev: high. Tier: client (use MemNetwork). Obvious?: yes.
Critical modules carrying full client wire-protocol handling have zero in-file tests.
Evidence:
$ rg '#\[(test|tokio::test)\]' -c \
crates/client/src/listeners.rs \
crates/client/src/joining.rs \
crates/client/src/persistence_actor.rs \
crates/client/src/connect.rs \
crates/client/src/voice.rs
0 0 0 0 0
$ wc -l crates/client/src/{listeners,joining,connect,persistence_actor}.rs
748 listeners.rs
465 joining.rs
409 connect.rs
280 persistence_actor.rs
listeners.rs 748 LOC. Gossip-event dispatch, join flow, network-connect lifecycle, persistence actor — all uncovered.
Fix: MemNetwork from crates/network/src/mem.rs exists for this. Per CLAUDE.md tier 3 ("Multi-peer sync semantics → Rust client crate test with MemNetwork"). Cover: listener event dispatch, join happy path + invite-mismatch, reconnect-and-recover.
Overlaps #343. Specific scope here.
From #413.
Sev: high. Tier: client (use
MemNetwork). Obvious?: yes.Critical modules carrying full client wire-protocol handling have zero in-file tests.
Evidence:
listeners.rs748 LOC. Gossip-event dispatch, join flow, network-connect lifecycle, persistence actor — all uncovered.Fix:
MemNetworkfromcrates/network/src/mem.rsexists for this. Per CLAUDE.md tier 3 ("Multi-peer sync semantics → Rust client crate test withMemNetwork"). Cover: listener event dispatch, join happy path + invite-mismatch, reconnect-and-recover.Overlaps #343. Specific scope here.