Skip to content

data,web: Reticulum finalization — radio metadata, chat tags, federation zeros - #900

Merged
l5yth merged 2 commits into
mainfrom
l5y-protocol-reticulum-finalization
Aug 31, 2026
Merged

l5yth merged 2 commits into
mainfrom
l5y-protocol-reticulum-finalization

Conversation

@l5yth

@l5yth l5yth commented Aug 30, 2026 •

Copy link
Copy Markdown
Owner

Closes the last places where Reticulum was structurally emptier than its two siblings: it reported no frequency and no preset, so the nodes table, the heartbeat and the chat/log tags all rendered blanks for it.

Radio metadata (RL1/RL2) is read from the first RNodeInterface in the shared RNS config -- the only source available, since get_interface_stats carries no radio parameters and a shared-instance client sees only its local-client interface. Only frequency/bandwidth/spreadingfactor/codingrate are read; the same file holds rpc_key, which is never read or logged. Frequencies are stored as floored integer MHz: the columns are INTEGER and the field orients a reader in a band (433 vs 868) rather than stating an exact frequency, exactly as MeshCore's 869.525 is stored as 869. RETICULUM_FREQ/RETICULUM_PRESET override, and accept a unit suffix. A preset whose BW/SF/CR matches a Meshtastic preset shows that name -- radio settings, not interoperability -- else SF/BW/CR, reusing the formatter interfaces/radio.py already had. The table is deliberately partial: eight of fourteen firmware presets, because a row whose parameters cannot b verified is worse than the fallback.

The values ride on each node record (RL3), scoped to records that arrived over the RNode interface -- an RNS stack routinely carries IP interfaces alongside it, and stamping a TCP-heard peer with the operator's radio would publish, and federate, a claim about that peer that is untrue. The web upsert already rea both keys; only the sender was missing.

Federation node counts (RL4) distinguish absent from zero for all three protocols: dash, muted zero, or tile and count. Supersedes the earlier rule that dashed a Reticulum zero, and the RD8/RD-A8 text describing it.

Destination identifiers link to their identity page and land on the row they name (RL5); the route resolved these already but nothing emitted the link, and the fragment needed re-targeting after the table's awaited fetches.

Also from the field: Reticulum rows now match every other row's height (the global button rule outranked the controls' own), the nodes table uses one dash glyph (td.num is monospace, so the same em dash rendered two ways), and destination sub-rows colour their role like the row above them.

Closes #888

@codecov

codecov Bot commented Aug 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

@l5yth
l5yth merged commit 39e5d01 into main Aug 31, 2026
15 checks passed
@l5yth
l5yth deleted the l5y-protocol-reticulum-finalization branch August 31, 2026 10:01
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.

Reticulum protocol support: passive RNS announce ingestor and web rendering

1 participant