7f4b22d5f4
The relay now sends a reliable PeerJoined control event to peers that were already present in the room after a new peer completes the hello/welcome handshake. Events are sent on one-frame unidirectional QUIC streams, reusing the existing control codec without keeping the room/session lock across I/O. Delivery is best-effort for this first lifecycle slice: a notification failure is logged, but the newly accepted peer remains joined. PeerLeft delivery and client-side event consumption remain separate follow-up work. Test Plan: - cargo fmt --check - cargo test -p lanparty-relay forwards_ethernet_datagrams_between_joined_peers \ -- --nocapture - cargo test -p lanparty-relay - cargo clippy -p lanparty-relay --all-targets -- -D warnings - cargo test --workspace - cargo clippy --workspace --all-targets -- -D warnings - git diff --check Refs: PLAN.md