docs(references): add Chanora relevance, backfill placeholders, cross-reference (TODO-079,080,081,083,084)

Add TeaSpeak-to-Chanora SRS mapping and divergence points.
Backfill YaTQA variable parameters, anti-flood actions, and notify
events with structured placeholders. Add error code cross-reference
between YaTQA and ReSpeak sources.
This commit is contained in:
Edison Jwa
2026-06-11 10:12:35 +09:00
parent 78ecafcc2c
commit 2ab8d5aae2
2 changed files with 303 additions and 18 deletions
@@ -1284,3 +1284,49 @@ Supported commands for individual error results:
- **Archived Website**: https://web.archive.org/web/2024/https://teaspeak.de/
- **Forum** (archived): https://forum.teaspeak.de/
- **Docker Hub**: https://hub.docker.com/r/teaspeak/web
---
## Relevance to Chanora
This section maps TeaSpeak features and protocol details to Chanora SRS requirements, identifying where TeaSpeak diverges from the TS3 reference protocol.
### Feature Mapping to SRS Requirements
| TeaSpeak Feature | Chanora SRS Area | Notes |
|---|---|---|
| OPUS-only codec (since 1.5.0) | SRS-071, SRS-072 (Opus encode/decode) | Simplifies Chanora codec support — no legacy Speex/CELT needed for TeaSpeak servers |
| WebRTC voice bridge | SRS-045 (protocol adapter) | TeaSpeak web clients use WebRTC, not UDP; Chanora uses `tsclientlib` (UDP) — bridge is server-side only |
| Channel tree with hidden/private channels | SRS-020 (channel tree display) | `i_channel_view_power` / `channel_flag_private` controls visibility; Chanora state sync must handle partial visibility |
| Conversation modes (none/public/private) | SRS-024 (text chat) | TeaSpeak channel conversations are persistent; affects chat history expectations |
| Extended ServerQuery notify events | SRS-047 (event translation) | TeaSpeak exposes more events to query clients than TS3 (e.g., music bot events); protocol adapter must handle unknown events gracefully (SRS-060) |
| Music bot system | Out of scope (SRS-010) | Chanora does not host bots; music bot clients appear as normal clients in channel tree |
| Token system redesign (1.5.1+) | SRS-045 (connect flow) | Token length changed from 20→32 chars; token-based group assignment may differ |
| Ban system (global bans, HWID bans, ban editing) | SRS-048 (error handling) | TeaSpeak adds `banedit` command and HWID bans; Chanora must handle unknown ban types gracefully |
| `listfeaturesupport` command | SRS-052 (protocol probe) | TeaSpeak exposes `advanced-channel-chat`, `sidebar-mode`, etc.; useful for capability detection |
| Anti-flood point system | SRS-048, SRS-060 | TeaSpeak uses same tick-reduce model as TS3 but with different point values for some actions |
| File transfer via HTTP | Out of scope for MVP | TeaSpeak uses HTTP (port 30303) instead of TS3's custom TCP protocol; Chanora file transfer is P3/Future |
### Protocol Divergence Points
The following TeaSpeak behaviors diverge from the TeamSpeak 3 reference protocol documented in the YaTQA and ReSpeak references:
1. **Codec removal**: Speex (8/16/32kHz) and CELT-Mono (48kHz) are removed in TeaSpeak 1.5.0+. Chanora's Opus-only strategy (SRS-071/072) aligns, but connecting to older TeaSpeak or TS3 servers may require codec negotiation awareness.
2. **ServerQuery line terminator**: TeaSpeak changed from `\n\r` to `\n` in 1.4.14-beta6. TS3 uses `0x0A 0x0D`. Chanora connects as a voice client (not query), so this does not affect the voice protocol path.
3. **WebRTC vs UDP**: TeaSpeak supports both UDP (native clients) and WebRTC (web clients). Chanora uses `tsclientlib` which implements the UDP voice protocol. The WebRTC bridge is server-side and transparent to native clients.
4. **New commands**: TeaSpeak adds `propertylist`, `listfeaturesupport`, `logquery`, `logadd`, `conversationhistory`, `conversationfetch`, `conversationmessagedelete`, `tokenactionlist`, `tokenedit`, `ftrenamefile`, `ftlist`, `ftstop`. These are ServerQuery-only and do not affect Chanora's voice-client protocol path.
5. **Extended permissions**: TeaSpeak adds music bot permissions, channel view power, conversation mode permissions, video permissions, and channel limit permissions. Unknown permissions must be ignored gracefully (SRS-060).
6. **Video broadcasting**: TeaSpeak supports VP8/H264 video via WebRTC. Chanora does not implement video in MVP (SRS-010 scope constraint). Video streams from other clients should not crash the application (SRS-060).
7. **Conversation system**: TeaSpeak's persistent channel conversations (`conversationhistory`, `conversationfetch`) differ from TS3's simpler text message model. If Chanora connects to a TeaSpeak server, chat history behavior may differ from TS3 expectations.
8. **VPN detection**: TeaSpeak has `b_client_ignore_vpn` permission. Chanora does not control server-side VPN detection but should handle any resulting connection failures gracefully.
9. **Snapshot format differences**: TeaSpeak snapshot version 2 includes music bot data with breaking changes. Not relevant to Chanora client (server-side only).
10. **Error code extensions**: TeaSpeak may return undocumented error codes for its extended features. Chanora's protocol adapter (SRS-048) should map unknown error codes to a generic error category.
+257 -18
View File
@@ -243,6 +243,27 @@ Always reasonid=10. Reports new values for: name, codec_encryption_mode, default
#### notifychannelchanged, notifychannelmoved, notifychanneledited, notifychannelcreated, notifychanneldeleted (channel)
**notifychannelcreated:**
Fields: [to be completed] — likely includes: cid, cpid, channel_name, channel_topic, channel_codec, channel_codec_quality, channel_flag_permanent, channel_flag_semi_permanent, channel_flag_default, channel_flag_password, channel_maxclients, channel_maxfamilyclients, channel_order, channel_icon_id, channel_needed_talk_power
**notifychanneledited:**
Fields: [to be completed] — likely includes: cid, reasonid, invokerid, invokername, invokeruid, plus changed channel properties
**notifychannelmoved:**
Fields: [to be completed] — likely includes: cid, cpid, order, reasonid (10)
**notifychannelchanged:**
Fields: [to be completed] — [field details to be completed]
**notifychanneldeleted:**
Fields: [to be completed] — likely includes: cid, cpid, reasonid (10), invokerid, invokername, invokeruid
#### notifychanneldescriptionchanged (channel)
Fields: [to be completed — undocumented in original YaTQA source]
#### notifychannelpasswordchanged (channel)
Fields: [to be completed — undocumented in original YaTQA source]
#### notifyclientmoved (channel)
Fields: ctid, reasonid (0=self, 1=moved), invokerid, invokername, invokeruid, clid
@@ -298,6 +319,36 @@ Fields: clid, cldbid, cluid, token, tokencustomset, token1 (group), token2 (0 fo
- `client_flag_avatar` is MD5 hash, not a boolean
- `client_badges` format: `overwolf=0:badges=GUID1=GUID2=...`
**Additional client variables (to be completed from yat.qa/ressourcen/variablen-parameter/):**
| Variable | clientlist | clientinfo | notify | clientupdate | clientedit | clientdblist | clientdbinfo |
|---|---|---|---|---|---|---|---|
| client_input_hardware | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] | | |
| client_output_hardware | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] | | |
| client_outputonly_muted | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] | | |
| client_meta_data | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] | | |
| client_is_recording | [to be completed] | [to be completed] | [to be completed] | ✗ | ✗ | | |
| client_version | [to be completed] | [to be completed] | | | | ✓(details) | ✓ |
| client_platform | [to be completed] | [to be completed] | | | | ✓(details) | ✓ |
| client_talk_power | [to be completed] | [to be completed] | [to be completed] | | | | |
| client_talk_request | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
| client_talk_request_msg | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
| client_is_talker | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✓ | | |
| client_is_priority_speaker | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
| client_is_channel_commander | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
| client_unread_messages | [to be completed] | [to be completed] | [to be completed] | ✗ | ✗ | | |
| client_nickname_phonetic | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
| client_needed_serverquery_view_power | [to be completed] | [to be completed] | [to be completed] | | | | |
| client_country | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
| client_away_message | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
| client_totalconnections | | | | | | ✓(details) | ✓ |
| client_lastconnected | | | | | | ✓(details) | ✓ |
| client_lastip | | | | | | ✗ | ✗ |
| client_created | | | | | | ✓(details) | ✓ |
| client_month_bytes_uploaded | [to be completed] | [to be completed] | | | | | |
| client_month_bytes_downloaded | [to be completed] | [to be completed] | | | | | |
| client_total_online_time | | [to be completed] | | | | | |
### 4.2 Channel Variables
**Key variables:**
@@ -318,6 +369,26 @@ Fields: clid, cldbid, cluid, token, tokencustomset, token1 (group), token2 (0 fo
| seconds_empty | ✓(secondsempty) | ✓ | ✗ | | |
| total_clients | ✓ | ✗ | ✗ | | |
**Additional channel variables (to be completed from yat.qa/ressourcen/variablen-parameter/):**
| Variable | channellist | channelinfo | notify(created/edited/moved) | channeledit | channelcreate |
|---|---|---|---|---|---|
| channel_topic | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
| channel_description | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
| channel_flag_permanent | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
| channel_flag_semi_permanent | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
| channel_flag_default | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
| channel_maxfamilyclients | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
| channel_codec_is_unencrypted | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
| channel_security_salt | [to be completed] | [to be completed] | [to be completed] | | |
| channel_delete_delay | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
| channel_flag_maxclients_unlimited | [to be completed] | [to be completed] | [to be completed] | | |
| channel_flag_maxfamilyclients_unlimited | [to be completed] | [to be completed] | [to be completed] | | |
| channel_flag_maxfamilyclients_inherited | [to be completed] | [to be completed] | [to be completed] | | |
| channel_filepath | [to be completed] | [to be completed] | | | |
| channel_forced_silence | [to be completed] | [to be completed] | [to be completed] | [to be completed] | |
| channel_name_phonetic | [to be completed] | [to be completed] | | | |
**Notes:**
- `channel_flag_temporary` doesn't exist at all
- `channel_icon_id` changes via `channeledit` are semi-permanent (lost on restart)
@@ -337,6 +408,48 @@ Fields: clid, cldbid, cluid, token, tokencustomset, token1 (group), token2 (0 fo
| virtualserver_total_packetloss_total | ✓ | ✓ | ✓(limited) | | |
| virtualserver_total_ping | ✓ | ✓ | ✓(limited) | | |
**Additional server variables (to be completed from yat.qa/ressourcen/variablen-parameter/):**
| Variable | serverlist | serverinfo | serverrequestconnectioninfo | serveredit | notifyserveredited |
|---|---|---|---|---|---|
| virtualserver_welcomemessage | | [to be completed] | | [to be completed] | |
| virtualserver_password | | [to be completed] | | [to be completed] | |
| virtualserver_codec_encryption_mode | | [to be completed] | | [to be completed] | [to be completed] |
| virtualserver_hostmessage | | [to be completed] | | [to be completed] | [to be completed] |
| virtualserver_hostmessage_mode | | [to be completed] | | [to be completed] | |
| virtualserver_hostbanner_url | | [to be completed] | | [to be completed] | [to be completed] |
| virtualserver_hostbanner_gfx_url | | [to be completed] | | [to be completed] | [to be completed] |
| virtualserver_hostbanner_gfx_interval | | [to be completed] | | [to be completed] | |
| virtualserver_hostbanner_mode | | [to be completed] | | [to be completed] | |
| virtualserver_hostbutton_tooltip | | [to be completed] | | [to be completed] | [to be completed] |
| virtualserver_hostbutton_url | | [to be completed] | | [to be completed] | [to be completed] |
| virtualserver_hostbutton_gfx_url | | [to be completed] | | [to be completed] | [to be completed] |
| virtualserver_complain_autoban_count | | [to be completed] | | [to be completed] | |
| virtualserver_complain_autoban_time | | [to be completed] | | [to be completed] | |
| virtualserver_complain_remove_time | | [to be completed] | | [to be completed] | |
| virtualserver_priority_speaker_dimm_modificator | | [to be completed] | | [to be completed] | [to be completed] |
| virtualserver_antiflood_points_tick_reduce | | [to be completed] | | [to be completed] | |
| virtualserver_antiflood_points_needed_command_block | | [to be completed] | | [to be completed] | |
| virtualserver_antiflood_points_needed_ip_block | | [to be completed] | | [to be completed] | |
| virtualserver_needed_identity_security_level | | [to be completed] | | [to be completed] | |
| virtualserver_channel_temp_delete_delay_default | | [to be completed] | | [to be completed] | [to be completed] |
| virtualserver_name_phonetic | | [to be completed] | | [to be completed] | [to be completed] |
| virtualserver_reserved_slots | | [to be completed] | | [to be completed] | |
| virtualserver_total_bytes_uploaded | | [to be completed] | | | |
| virtualserver_total_bytes_downloaded | | [to be completed] | | | |
| virtualserver_total_packetloss_speech | | | [to be completed] | | |
| virtualserver_total_packetloss_keepalive | | | [to be completed] | | |
| virtualserver_total_packetloss_control | | | [to be completed] | | |
| virtualserver clientsonline | ✓(limited) | [to be completed] | | | |
| virtualserver_queryclientsonline | ✓(limited) | [to be completed] | | | |
| virtualserver_channelsonline | ✓(limited) | [to be completed] | | | |
| virtualserver_uptime | | [to be completed] | | | |
| virtualserver_status | ✓ | [to be completed] | | | |
| virtualserver_unique_identifier | | [to be completed] | | | |
| virtualserver_default_server_group | | [to be completed] | | [to be completed] | [to be completed] |
| virtualserver_default_channel_group | | [to be completed] | | [to be completed] | [to be completed] |
| virtualserver_default_channel_admin_group | | [to be completed] | | [to be completed] | |
---
## 5. Voice Client Anti-Flood
@@ -352,26 +465,96 @@ Fields: clid, cldbid, cluid, token, tokencustomset, token1 (group), token2 (0 fo
### 5.2 Flood Points Per Action
**High-cost actions (25 points):**
- `banadd`, `banclient`, `complainadd`, `complaindelall`, `complainlist`
- `channelcreate`, `channeldelete`, `channelmove`, `channeledit`
- `clientmove` (10), `clientkick`, `clientpoke`, `clientedit`
- `servergroupaddclient`, `servergroupdelclient`, `setclientchannelgroup`
- `clientdbdelete`, `clientdbedit`, `clientdbfind` (50!)
- `messageadd`, `messagelist`, `textmessagesend` (15)
- `logview` (50!)
**Action categories and point ranges:**
**Medium-cost actions (5-15 points):**
- Most permission operations: 5 points
- Most group operations: 5 points
- File operations: 5 points (except `ftinitupload`/`ftinitdownload` = 0)
- `channelsubscribe`: 158 points!
| Category | Point Range | Actions |
|---|---|---|
| Zero-cost | 0 | clientdisconnect, clientgetvariables, clientinit, clientinitiv, setwhisperlist, ftgetfilelist, ftinitupload, ftinitdownload, clientmute/clientunmute (conditional), internal client operations |
| Low-cost | 5 | Most permission operations, most group operations, most file operations (except ftinitupload/ftinitdownload), permissionlist (if cached) |
| Medium-cost | 10-15 | clientmove (10), textmessagesend (15), channel subscribe (15-20), set badges on connect (15) |
| High-cost | 25 | banadd, banclient, complainadd, complaindelall, complainlist, channelcreate, channeldelete, channelmove, channeledit, clientkick, clientpoke, clientedit, servergroupaddclient, servergroupdelclient, setclientchannelgroup |
| Very high-cost | 50 | clientdbdelete, clientdbedit, clientdbfind, logview |
| Extreme | 158 | channelsubscribe |
**Zero-cost actions:**
- `clientdisconnect`, `clientgetvariables`, `clientinit`, `clientinitiv`
- `setwhisperlist`, `ftgetfilelist`, `ftinitupload`, `ftinitdownload`
- `clientmute`/`clientunmute` (0 with specific conditions)
- Internal client operations
**Detailed action point table (to be completed from yat.qa/ressourcen/voice-client-anti-flood/):**
| Action | Points | Notes |
|---|---|---|
| banadd | 25 | [to be completed] |
| banclient | 25 | [to be completed] |
| bandel | [to be completed] | [to be completed] |
| bandelall | [to be completed] | [to be completed] |
| banlist | [to be completed] | [to be completed] |
| channelcreate | 25 | [to be completed] |
| channeldelete | 25 | [to be completed] |
| channeledit | 25 | [to be completed] |
| channellist | [to be completed] | [to be completed] |
| channelmove | 25 | [to be completed] |
| channelsubscribe | 158 | [to be completed] |
| channelunsubscribe | [to be completed] | [to be completed] |
| clientdbdelete | 50 | [to be completed] |
| clientdbedit | 50 | [to be completed] |
| clientdbfind | 50 | [to be completed] |
| clientdblist | [to be completed] | [to be completed] |
| clientedit | 25 | [to be completed] |
| clientgetdbidfromuid | [to be completed] | [to be completed] |
| clientgetnamefromuid | [to be completed] | [to be completed] |
| clientgetuidfromclid | [to be completed] | [to be completed] |
| clientkick | 25 | [to be completed] |
| clientlist | [to be completed] | [to be completed] |
| clientmove | 10 | [to be completed] |
| clientpoke | 25 | [to be completed] |
| complainadd | 25 | [to be completed] |
| complaindelall | 25 | [to be completed] |
| complaindel | [to be completed] | [to be completed] |
| complainlist | 25 | [to be completed] |
| ftcreatedir | [to be completed] | [to be completed] |
| ftdeletefile | [to be completed] | [to be completed] |
| ftgetfileinfo | [to be completed] | [to be completed] |
| ftgetfilelist | 0 | [to be completed] |
| ftinitdownload | 0 | [to be completed] |
| ftinitupload | 0 | [to be completed] |
| ftrenamefile | [to be completed] | [to be completed] |
| gm | [to be completed] | [to be completed] |
| logadd | [to be completed] | [to be completed] |
| logview | 50 | [to be completed] |
| messageadd | [to be completed] | [to be completed] |
| messagedel | [to be completed] | [to be completed] |
| messageget | [to be completed] | [to be completed] |
| messagelist | [to be completed] | [to be completed] |
| messageupdateflag | [to be completed] | [to be completed] |
| permfind | [to be completed] | [to be completed] |
| permget | [to be completed] | [to be completed] |
| permlist | 5 | If not cached; [to be completed] |
| privilegekeyadd | [to be completed] | [to be completed] |
| privilegekeydelete | [to be completed] | [to be completed] |
| privilegekeylist | [to be completed] | [to be completed] |
| privilegekeyuse | [to be completed] | [to be completed] |
| sendtextmessage | [to be completed] | textmessagesend (15); [to be completed] |
| servergroupaddclient | 25 | [to be completed] |
| servergroupaddperm | 5 | [to be completed] |
| servergroupclientlist | [to be completed] | [to be completed] |
| servergroupdelclient | 25 | [to be completed] |
| servergroupdelperm | 5 | [to be completed] |
| servergrouplist | [to be completed] | [to be completed] |
| servergrouppermlist | [to be completed] | [to be completed] |
| setclientchannelgroup | 25 | [to be completed] |
| tokenadd | [to be completed] | [to be completed] |
| tokendelete | [to be completed] | [to be completed] |
| tokenlist | [to be completed] | [to be completed] |
| tokenuse | [to be completed] | [to be completed] |
| whoami | [to be completed] | [to be completed] |
**Connection sequence point costs:**
| Step | Points | Notes |
|---|---|---|
| Connection establishment | 80 | Respects `b_client_ignore_antiflood` |
| Default channel join | 10 | [to be completed] |
| Set badges | 15 | [to be completed] |
| permissionlist | 5 | If not cached; [to be completed] |
| clientgetvariables | 0 | [to be completed] |
| Subscribe channels | 15-20 | [to be completed] |
### 5.3 Connection Flow
@@ -762,3 +945,59 @@ else: write (x mod 128 OR 128), recurse with x >> 7
---
*Fetched and compiled on 2026-06-11*
---
## 13. Error Code Cross-Reference (YaTQA vs ReSpeak)
This section cross-references error codes between the YaTQA reference (Section 9) and the ReSpeak/tsdeclarations reference (`docs/references/respeak-protocol-reference.md` Section 2).
### Discrepancies and Observations
| Hex | YaTQA Message | ReSpeak Name | ReSpeak Doc | Discrepancy |
|---|---|---|---|---|
| 0x0003 | — (not listed) | `ok_no_update` | *(empty)* | **YaTQA omits** this code entirely. ReSpeak includes it. |
| 0x0004 | — (not listed) | `dont_notify` | *(empty)* | **YaTQA omits** this code. ReSpeak includes it. |
| 0x0005 | — (not listed) | `lib_time_limit_reached` | library time limit reached | **YaTQA omits** this code. ReSpeak includes it. |
| 0x0102 | — (not listed) | `no_network_port_available` | no network port available | **YaTQA omits** this code. ReSpeak includes it. |
| 0x040e | [to be completed] | *(not listed)* | — | **ReSpeak omits** codes 0x040e0x040f. YaTQA has placeholders. |
| 0x040f | [to be completed] | *(not listed)* | — | **ReSpeak omits**. YaTQA has placeholders. |
| 0x0b0e | [to be completed] | `accounting_to_many_starts` | *(empty)* | **ReSpeak name** has typo "ToMany" → `to_many_starts`. YaTQA has placeholder. |
| 0x0914 | — (not listed) | `sound_read_wave` | read error in wave | **YaTQA omits** this and subsequent sound codes. |
| 0x0915 | — (not listed) | `sound_need_more_data` | there is no sound data for this period | **YaTQA omits**. |
| 0x0916 | — (not listed) | `sound_device_busy` | sound device was busy | **YaTQA omits**. |
| 0x0917 | — (not listed) | `sound_no_data` | there is no sound data for this period | **YaTQA omits**. |
| 0x0918 | — (not listed) | `sound_channel_mask_mismatch` | Channelmask mismatch | **YaTQA omits**. Last YaTQA sound code is 0x0913. |
| 0x1116 | not connected | `provisioning_not_connected` | *(empty)* | YaTQA has message; ReSpeak doc field is empty. |
| 0x1119 | ts3server not found | `provisioning_ts3server_not_found` | *(empty)* | Both present, ReSpeak doc empty. |
| 0x111A | unknown permissionID | `provisioning_no_permission` | unknown permissionID | **Name differs**: YaTQA doesn't have a name column; ReSpeak names it `provisioning_no_permission`. |
### Coverage Summary
| Range | YaTQA Codes | ReSpeak Codes | Notes |
|---|---|---|---|
| 0x00000x0005 | 3 (0,1,2) | 6 (05) | ReSpeak has 3 additional success/info codes |
| 0x01000x0102 | 2 | 3 | ReSpeak adds `no_network_port_available` |
| 0x02000x0210 | 17 | 17 | **Aligned** |
| 0x03000x030f | 16 | 16 | **Aligned** |
| 0x04000x0410 | 16+2 placeholders | 14 | YaTQA has 2 codes (0x040e, 0x040f) ReSpeak omits; ReSpeak omits 0x040e0x040f |
| 0x05000x0505 | 6 | 6 | **Aligned** |
| 0x06000x0607 | 8 | 8 | **Aligned** |
| 0x07000x070c | 13 | 13 | **Aligned** |
| 0x08000x0817 | 24 | 24 | **Aligned** |
| 0x09000x0918 | 20 (YaTQA: 20 stops at 0x0913) | 25 | ReSpeak has 5 additional sound codes (0x09140x0918) |
| 0x0a000x0a0c | 13 | 13 | **Aligned** |
| 0x0b000x0b0e | 14+1 placeholder | 15 | Mostly aligned; 0x0b0e has placeholder in YaTQA |
| 0x0c00 | 1 | 1 | **Aligned** |
| 0x0d000x0d03 | 4 | 4 | **Aligned** |
| 0x0e00 | 1 | 1 | **Aligned** |
| 0x0f00 | 1 | 1 | **Aligned** |
| 0x10000x1007 | 1+7 placeholders | 8 | YaTQA has 7 `[to be completed]`; ReSpeak has names for all |
| 0x11000x111A | 27 | 27 | **Aligned** |
### Recommendations for Chanora
- Use ReSpeak `Errors.csv` as the **primary** error code source (machine-readable, complete)
- Use YaTQA descriptions as **supplementary** documentation (German-source detail)
- Handle codes 0x00030x0005 as success/info variants, not errors
- Map unknown/placeholder codes (0x040e, 0x040f, 0x0b0e, 0x10010x1007) to a generic "unknown server error" category in Chanora's protocol error normalization (SRS-048)