Skip to content

docs: add node-server interface design ADR - #16

Open
Babissimo wants to merge 2 commits into
mainfrom
docs/node-server-interface-adr
Open

docs: add node-server interface design ADR#16
Babissimo wants to merge 2 commits into
mainfrom
docs/node-server-interface-adr

Conversation

@Babissimo

Copy link
Copy Markdown
Contributor

Adds the node ↔ server interface design decision record (dated 2026-07-21, revised 2026-07-23) to docs/decisions/.

The ADR covers how RETINA radar nodes communicate with the central server, phased:

  • Phase 1: live detections from up to ~50 nodes over HTTPS, with commands piggybacked on responses; the MQTT broker and bulk/archive plane are deferred with their designs retained and explicit return tripwires.
  • Three traffic planes (live, bulk/archive, control/identity) with independent failure modes.
  • Decisions D1–D15, measured parameters from the 2026-07-23 fleet probe, an ADS-B feeder-network prior-art survey, migration sketch, and open questions.

Status: Proposed (design agreed in discussion; implementation not started).

🤖 Generated with Claude Code

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Babissimo

Copy link
Copy Markdown
Contributor Author

Josh:
Okay having read the .md file I have only two real notes I wanna add: The blah2 raw IQ buffer durarion is not 1.5s but 1.5*cpi so thats 0.75s. Also saveIq writes at 16MB/s

Review against the blah2 source showed two figures wrong: the in-RAM IQ
buffer is 0.75 s, not 1.5 s (config's buffer: 1.5 is in units of CPIs,
sized cpi*buffer*fs at blah2.cpp:103), and saveIq writes 16 MB/s, not
8 MB/s (RspDuo.cpp:630 writes 4 int16 per sample instant: 2 channels
of I+Q).

The second has a knock-on the review surfaced: the 120 s ring buffer
estimate used the same wrong 2 B/sample assumption, so the real size is
~1.9 GB, not ~960 MB. That exceeds a 2 GB node's total RAM and, next to
blah2's 760 MB RSS, the 4 GB minority too, so raw IQ capture is now off
the table on all current hardware rather than merely tight; this
hardens the map-over-IQ working assumption (map advantage ~12x, not
~6x). No decision flips.

Also adds a section 6 item recording that downlink commands are
protected only by TLS terminating at Cloudflare's edge, with
server-signed commands as the upgrade if that seems thin once real
commands ship; later items renumbered.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
can be many nodes, so edge rules are tuned only for gross volumetric abuse. Ingest also
applies cheap plausibility gates (impossible delay, Doppler or position values, §10)
before frames reach the tracker.
- Payloads carry the existing `retina-custody` per-packet ECDSA signatures unchanged.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Does the server explicitly reject packets with unsigned/invalid signatures? How should this be handled?


Phase 1:

1. **Control-plane and ingest authentication.** Requests signed with the custody key, or a

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

What is the advantage of also using bearer tokens, alongside keys? Are there any tradeoffs?

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.

2 participants