docs(tci): define _tci._tcp.local mDNS discovery schema (#2502)#2613
Conversation
Locks in the service type and TXT record contract for LAN peripheral discovery — model / class / tci-version / txtvers, with a closed set of device classes that AetherSDR will route to settings sub-panels. The Qt-side mDNS browse implementation lands separately; this PR is just the schema so peripheral authors (aether_pad, ShackSwitch, future rotators / amps / tuners) can advertise against a stable contract without waiting on the browser code. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
Docs-only contract definition — reviewed against the codebase. Looks good.
Verified the referenced anchors match the tree:
src/core/TciServer.h,src/core/TciProtocol.cppexistsrc/models/AntennaGeniusModel.cppwith UDP discovery on port 9007 is accurate- TCI server port 50001 and
RadioSetupDialogPeripherals tab references are accurate
The scope decisions are sensible:
- Naming the service
_tci._tcp.localrather than_aethersdr._tcpso any TCI client (SDConsole, ExpertSDR) can interoperate — good call. - Closed
classset + openx-*namespace +txtversfor breaking changes is a clean versioning story. - Coexistence section explicitly preserves the existing AG UDP path, which avoids a regression for an existing peripheral.
- MUST-NOT-crash-on-malformed-entry clause is the right thing to call out in the contract rather than waiting for the implementation PR to discover it.
One small thing for the implementation PR (not blocking this docs PR): the dedup rule says "mDNS taking precedence for display name" when the same peripheral appears on both paths — worth making sure the implementation also picks a stable identity key (likely model + resolved IP+port) so the entry doesn't flicker between names if mDNS arrives after the UDP broadcast.
Thanks for the careful write-up — the rationale-per-decision style makes this easy to follow when the browser implementation lands.
ten9876
left a comment
There was a problem hiding this comment.
Approved. Well-scoped contract document — inverts the discovery responsibility correctly (peripheral advertises, AetherSDR browses), all referenced file paths verified, TXT schema follows RFC 6763 conventions, coexistence with existing AG UDP path on 9007 is preserved.
Summary
Fixes #2502
What was changed
docs(tci): define _tci._tcp.local mDNS discovery schema (#2502)
Files modified
docs/tci-discovery.mdGenerated by AetherClaude (automated agent for AetherSDR)