8f1ecb2a5e17067e62ad5b2cfe57abdbf7511597
Add #[cfg(test)] coverage for the join-link codec and gossip wire format: PeerSpeakTicket Display/FromStr round-trip and — the real gap — malformed-input rejection (empty / non-base64 / valid-base64-non-JSON all return NetError::InvalidTicket, never panic, since users paste untrusted text here); PeerState serde round-trip; and GossipMessage::Leave / Announce + GossipPayload round-trips. Tests-only; no production change. Implemented by Gemini (junior implementer), reviewed and verified by senior (cargo build + clippy --all-targets + cargo test all green). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>