Skip to content

docs(tci): define _tci._tcp.local mDNS discovery schema (#2502)#2613

Merged
aethersdr-agent[bot] merged 1 commit into
mainfrom
aetherclaude/issue-2502
May 13, 2026
Merged

docs(tci): define _tci._tcp.local mDNS discovery schema (#2502)#2613
aethersdr-agent[bot] merged 1 commit into
mainfrom
aetherclaude/issue-2502

Conversation

@aethersdr-agent

Copy link
Copy Markdown
Contributor

Summary

Fixes #2502

What was changed

docs(tci): define _tci._tcp.local mDNS discovery schema (#2502)

Files modified

  • docs/tci-discovery.md
 docs/tci-discovery.md | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 171 insertions(+)

Generated by AetherClaude (automated agent for AetherSDR)

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>

@aethersdr-agent aethersdr-agent Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Docs-only contract definition — reviewed against the codebase. Looks good.

Verified the referenced anchors match the tree:

  • src/core/TciServer.h, src/core/TciProtocol.cpp exist
  • src/models/AntennaGeniusModel.cpp with UDP discovery on port 9007 is accurate
  • TCI server port 50001 and RadioSetupDialog Peripherals tab references are accurate

The scope decisions are sensible:

  • Naming the service _tci._tcp.local rather than _aethersdr._tcp so any TCI client (SDConsole, ExpertSDR) can interoperate — good call.
  • Closed class set + open x-* namespace + txtvers for 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 ten9876 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@aethersdr-agent aethersdr-agent Bot merged commit 51e9eee into main May 13, 2026
3 checks passed
@aethersdr-agent aethersdr-agent Bot deleted the aetherclaude/issue-2502 branch May 13, 2026 13:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Proposal: mDNS-based discovery for LAN peripherals (follow-up to #2456)

1 participant