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.
58 lines
2.1 KiB
Markdown
58 lines
2.1 KiB
Markdown
# 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 <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_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`.
|