# Verification record — `tsclientlib-connect-spike` ## Result PASS. The PoC exit criterion (from `docs/architecture/proof-of-concept-plan.md` §2: "Rust can connect to a compatible server/test double") is met. ## Environment | Field | Value | |---|---| | Date | 2026-05-13 | | Host OS | Linux (x86_64) | | Rust toolchain | stable 1.95.0 (59807616e 2026-04-14) | | Build profile | release | | Target server | `cn.teamspeak.app` (resolved to 175.178.125.23) | | Network | direct outbound UDP/TCP from build host | ## Command ```bash cargo build --release ./target/release/tsclientlib-connect-spike \ --address cn.teamspeak.app \ --hold-secs 4 \ --nickname ChanoraPoC ``` Process exit code: `0`. ## What was observed - Identity generated locally (ephemeral, level-0). - UDP connection negotiated with the server. - `StreamItem::BookEvents` snapshot received → initial state ready. - `server.set_subscribed(true)` accepted → full channel tree streamed. - Server identity surfaced: - name: `Vigorous Pro` - platform: `Linux` - version: `3.13.7 [Build: 1655727713]` (TeamSpeak 3 server) - clients online: 5 - channels: 36 - Channel tree printed with multi-byte (CJK) channel and client names intact, validating UTF-8 end-to-end (cross-references SAD ADR-008 "UTF-8 at all boundaries"). - The PoC client appeared in `Default Channel` as `ChanoraPoC`. - Clean disconnect via `DisconnectOptions::new()`; no panics or hangs. ## Known non-blocking observations - `tsproto::packet_codec` emits `Out of order command packet` warnings during the initial state burst. These are upstream-level and informational; the snapshot still resolves correctly. Worth tracking when the `chanora_protocol` crate is written, but not a spike blocker. - The welcome banner uses TeamSpeak's `[URL...]`/`[cspacer0]` markup — this is server-provided text and per DEC-015 / ADR-008 must be preserved, not translated. The spike does not parse it. ## Scope honestly NOT validated by this spike - Audio capture/playback (separate PoC). - Persisted identity via secure storage (separate PoC). - Reconnect / network-loss recovery. - FFI to Flutter (separate PoC). - Behaviour against a non-TS3 / TS5 server. - Behaviour behind restrictive NAT or under packet loss. - Performance characteristics under sustained load.