Mesh ingest: nodes/+/mesh -> mesh_messages, mesh alert sink, mesh as correlator source #192

Open
opened 2026-09-27 23:41:36 -04:00 by logan · 1 comment
Owner

Owner request 2026-09-27: server half of Meshtastic/MeshCore on edge nodes, for the same three uses. Node side: see the linked node-26 issue.

Design

  • mqtt_handler.py: subscribe nodes/+/mesh and write to a new mesh_messages Firestore collection (node_id, channel, from, text/position, rx_ts, rssi/snr). Add it to models.py and to the Firestore rules (org-scoped, like calls).
  • (a) Backup link: accept a heartbeat relayed over the mesh as a liveness signal, so a node with a dead uplink shows degraded (mesh) instead of offline. Mark the origin as via=mesh.
  • (b) Alerts out: in alerter.py, add a mesh sink next to Discord. Send mesh_send to the nodes covering the incident area, with a short text (type + street + time), name-suppressed, per-org opt-in, rate-limited.
  • (c) Data source: feed mesh text into the correlator as a new source type. Treat it as untrusted user content: prompt-injection risk into the Gemini/LLM correlator prompts, so it must be delimited/quoted, never instructions. Mesh positions could pin incidents on the map, but low-trust, and never override a dispatched address.

Open questions

  • (b) broadcasts public-safety info on RF. Needs a ciso ruling before shipping.
  • (c) is the only one that touches correlation; review with drb-correlation-review.
  • GOALS.md is customers-first with owner time <5h/week; this is not on the path to Gate B. Treat it as backlog unless a customer asks for it.
Owner request 2026-09-27: server half of Meshtastic/MeshCore on edge nodes, for the same three uses. Node side: see the linked node-26 issue. ## Design - `mqtt_handler.py`: subscribe `nodes/+/mesh` and write to a new `mesh_messages` Firestore collection (node_id, channel, from, text/position, rx_ts, rssi/snr). Add it to `models.py` and to the Firestore rules (org-scoped, like `calls`). - **(a) Backup link:** accept a heartbeat relayed over the mesh as a liveness signal, so a node with a dead uplink shows `degraded (mesh)` instead of `offline`. Mark the origin as `via=mesh`. - **(b) Alerts out:** in `alerter.py`, add a mesh sink next to Discord. Send `mesh_send` to the nodes covering the incident area, with a short text (type + street + time), name-suppressed, per-org opt-in, rate-limited. - **(c) Data source:** feed mesh text into the correlator as a new source type. Treat it as **untrusted user content**: prompt-injection risk into the Gemini/LLM correlator prompts, so it must be delimited/quoted, never instructions. Mesh positions could pin incidents on the map, but low-trust, and never override a dispatched address. ## Open questions - (b) broadcasts public-safety info on RF. Needs a `ciso` ruling before shipping. - (c) is the only one that touches correlation; review with `drb-correlation-review`. - GOALS.md is customers-first with owner time <5h/week; this is not on the path to Gate B. Treat it as backlog unless a customer asks for it.
Author
Owner

Node half: logan/node-26#13

Node half: logan/node-26#13
logan added the area/mqttarea/sdr-radio
priority
p3
type
feature
labels 2026-10-05 02:04:59 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: logan/server-26#192