feat(poc/protocol): add tsclientlib connect spike

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.
This commit is contained in:
EdisonJwa
2026-05-14 12:25:48 +08:00
parent bdeab3b451
commit 02c11ead7e
5 changed files with 3812 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
[package]
name = "tsclientlib-connect-spike"
version = "0.1.0"
edition = "2021"
publish = false
description = "Chanora PoC: prove tsclientlib protocol feasibility by connecting to a TS3-compatible server and printing the channel tree."
# This is PoC code, not product code. See docs/architecture/proof-of-concept-plan.md §4.
[dependencies]
# tsclientlib is git-only (not on crates.io).
# Audio feature is disabled because this spike only proves the connect/state path;
# audio behaviour is covered by a separate PoC (audio-capture-playback-spike).
tsclientlib = { git = "https://github.com/ReSpeak/tsclientlib.git", default-features = false, features = ["default-tls"] }
anyhow = "1"
clap = { version = "4", features = ["derive"] }
futures = "0.3"
tokio = { version = "1", features = ["macros", "rt-multi-thread", "time", "signal"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }