data,web: Reticulum finalization — radio metadata, chat tags, federation zeros - #900
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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