Proof-of-concept proving the protocol-feasibility exit criterion from docs/architecture/proof-of-concept-plan.md §2: "Rust can connect to a compatible server/test double." The spike opens a tsclientlib connection, waits for the BookEvents state snapshot, subscribes to the server channel tree, prints server metadata and the channel tree with client names, and disconnects cleanly. Audio feature is disabled because audio is covered by a separate PoC. Verified on 2026-05-13 against cn.teamspeak.app (TeamSpeak 3 server 3.13.7); 36 channels and 5 online clients retrieved with full UTF-8 (CJK) preservation. See poc/tsclientlib-connect-spike/VERIFICATION.md for the captured run. Authority: PoC plan §2, SysRS-005, SysDes-011, SysDes-029. Not product code; not promoted into chanora_protocol.
2.1 KiB
2.1 KiB
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 §2 |
| Purpose | Prove protocol feasibility via tsclientlib |
| Exit criterion | "Rust can connect to a compatible server/test double" |
What it does
- Generates an ephemeral identity (or accepts one via
--identity). - Connects to a TeamSpeak-3-compatible server.
- Waits for the initial state snapshot (
StreamItem::BookEvents). - Subscribes to the server's channel tree.
- Prints server metadata + the channel tree with client names.
- Disconnects cleanly.
Run
Requires Rust stable (developed against 1.95). Network access required so
that cargo can fetch tsclientlib from GitHub on first build.
cargo run --release -- --address cn.teamspeak.app
Useful flags:
| Flag | Meaning |
|---|---|
-a, --address <host[:port]> |
Server (default cn.teamspeak.app) |
-n, --nickname <name> |
Nickname (default ChanoraPoC) |
--password <pw> |
Server password if required |
--identity <base64> |
Reuse an existing identity instead of generating one |
--hold-secs <n> |
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_protocoland does not expose typed DTOs. The intent of the spike is to validate the upstreamtsclientlibAPI 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.