# tsclientlib Connect Spike Chanora proof-of-concept. **Not product code.** | Field | Value | |---|---| | PoC name | `tsclientlib-connect-spike` | | PoC plan | [`docs/architecture/proof-of-concept-plan.md`](../../docs/architecture/proof-of-concept-plan.md) §2 | | Purpose | Prove protocol feasibility via `tsclientlib` | | Exit criterion | "Rust can connect to a compatible server/test double" | ## What it does 1. Generates an ephemeral identity (or accepts one via `--identity`). 2. Connects to a TeamSpeak-3-compatible server. 3. Waits for the initial state snapshot (`StreamItem::BookEvents`). 4. Subscribes to the server's channel tree. 5. Prints server metadata + the channel tree with client names. 6. Disconnects cleanly. ## Run Requires Rust stable (developed against 1.95). Network access required so that `cargo` can fetch `tsclientlib` from GitHub on first build. ```bash cargo run --release -- --address cn.teamspeak.app ``` Useful flags: | Flag | Meaning | |---|---| | `-a, --address ` | Server (default `cn.teamspeak.app`) | | `-n, --nickname ` | Nickname (default `ChanoraPoC`) | | `--password ` | Server password if required | | `--identity ` | Reuse an existing identity instead of generating one | | `--hold-secs ` | Seconds to hold the connection before disconnect (default 3) | | `-v` / `-vv` / `-vvv` | Increase tsclientlib log verbosity | ## Scope boundaries This spike is intentionally narrow: - No audio capture or playback (covered by `audio-capture-playback-spike`). - No FFI surface (covered by `flutter-rust-bridge-hello`). - No persistent identity (covered by `secure-storage-spike`). - No diagnostic redaction policy (covered by `diagnostics-redaction-spike`). - No Chanora architecture layering — does **not** live inside `chanora_protocol` and does not expose typed DTOs. The intent of the spike is to validate the upstream `tsclientlib` API surface before the product crate is written, per the PoC plan. ## Verification log See `VERIFICATION.md` in this directory for the most recent run captured against `cn.teamspeak.app`.