5f567b4320
The Windows client sends a best-effort disconnect control message after the runtime loop exits. That message previously always said `client shutting down`, even when the loop ended because TAP I/O, relay event handling, or relay-route verification failed. Preserve the returned error, but include its chain in the disconnect message so the relay log records why the client left during manual MVP testing. Clean exits still report the original shutdown text. Test Plan: - cargo fmt --check - cargo test -p lanparty-client-win - cargo test --workspace - cargo clippy --workspace --all-targets -- -D warnings - git diff --check - git diff --cached --check Refs: MVP Windows client diagnostics