mirror of
https://github.com/l5yth/potato-mesh.git
synced 2026-10-31 03:51:58 +01:00
Answers the two questions left open on #888 after #893. INGESTOR_NODE_ID was required for PROTOCOL=reticulum because a passive announce listener has no handshake revealing "our" node id. The premise holds; the conclusion did not follow. The ingestor now owns an RNS identity, generated on first run and stored 0600 as potato_mesh_identity inside the app-owned RETICULUM_CONFIG_DIR, and derives its !xxxxxxxx through the same identity-hash mapping applied to every peer, so its own row is shaped like any other Reticulum row. A plain PROTOCOL=reticulum deployment brings up the heartbeat, and so the reticulum packets/hour scope, unaided; the variable still overrides, which also means no key is generated for a deployment that does not need one. The identity is local and never announced, so nothing new transmits. Persist-or-nothing is deliberate: an unstorable identity would be regenerated per start and each generation is a different node id, filing one orphan ingestor row per restart, so the provider reports no id and warns instead. An existing but unreadable key file is never overwritten. The startup warning #890 emitted for an unset INGESTOR_NODE_ID is removed. CONNECTION and RETICULUM_CONFIG_DIR/RETICULUM_INTERFACES are disjoint rather than in conflict: CONNECTION names one serial, TCP, or BLE endpoint and an RNS stack has no such thing, which is why connect() has always ignored it. What was wrong was the silence, since the image sets a serial default for every protocol. connect() now says once at info that the value is dropped and names the two variables that do apply. The image default stays: removing it would change how meshtastic and meshcore containers resolve their port, and a Reticulum follow-up is the wrong change to carry that. SPEC RN9/RN10, ACCEPTANCE RN-A9/RN-A10; CONTRACTS, README and .env.example reconciled. 100% line and branch coverage on the provider; pytest 1442 passed, rspec 1717 examples 0 failures.