fix(mesh): native E2E DM for archy↔archy text + software radio-reboot
- send_message now sends archy↔archy plain text as a native TEXT_MESSAGE_APP DM (firmware PKC-encrypts E2E), not wrapped in the binary typed envelope that silently broke archy↔archy LoRa delivery. Archy peers' Sent rows are marked encrypted so the E2E pill shows; rich typed msgs still use the typed-wire path. - Add a software radio-reboot to recover a wedged/RX-deaf radio without physical access (and for the Device-tab settings panel): driver reboot() via AdminMessage reboot_seconds=97 (verified vs meshtastic/protobufs), MeshCommand::RebootRadio, MeshService::reboot_radio, RPC mesh.reboot-radio. - Handoff doc: docs/SESSION-1.8.0-OTA-PROGRESS.md "RESUME HERE" — RF link is the proven blocker (radios not hearing each other); modem_preset mismatch is the prime suspect; on-device Meshtastic-app check + fix plan documented. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
b4531bb4fc
commit
fbfeeeb0f5
@@ -979,20 +979,34 @@ this match.
|
||||
- Reference: the existing `package-install-prune-check` dependency descriptor (dependencies.rs:208)
|
||||
is the seam to make data-driven.
|
||||
|
||||
## 10d. Mesh — Meshtastic MeshCore-parity (in the fleet binary; one open bug) (2026-06-26)
|
||||
## 10d. Mesh — Meshtastic MeshCore-parity (active blocker: stock 3ccc LoRa text) (2026-06-30)
|
||||
|
||||
**Status: shipped as commit `8fdb45e8` and now riding in the rolled fleet binary** (built into the
|
||||
#9 deploy from HEAD, sha `0060dcd6…`). The Meshtastic driver auto-provisions LoRa **region (EU_868)**
|
||||
and a shared **channel "archipelago"** via the official admin API (`set_config`=field34,
|
||||
`set_channel`=field33) — discovery, bidirectional RF, and **sending** are all verified on **.116 + .228**.
|
||||
Detail + history: [[project_meshtastic_parity]].
|
||||
**Current deployed canary:** `.116` is running commit `b4531bb4` with backend sha
|
||||
`4ab53e539d89679ef664401a9a57996267772fed02327abc2912c3e77543acbf` and frontend bundle
|
||||
`index-YOAeJF7w.js` / `Mesh-BSAo88jN.js`. `main` was pushed to `gitea-vps2`.
|
||||
|
||||
**Open work (slot after WS-F #9–11, before/with multinode):**
|
||||
- **RECEIVED-message surfacing bug** — the running driver does **not** surface received messages
|
||||
(`mesh.messages` stays `[]`) even though the radio physically receives them. An instrumentation
|
||||
build was in flight to locate where the inbound packet is dropped between the radio serial/BLE read
|
||||
and the `mesh.messages` store. This is the one blocker to closing MeshCore parity.
|
||||
- **.198 radio is bad** — won't persist config (needs a reflash) so it's not a usable mesh test node;
|
||||
use .116/.228 for mesh verification.
|
||||
- Definition of done: a message sent from a MeshCore/Meshtastic peer on channel "archipelago" appears
|
||||
in `mesh.messages` on the receiving archipelago node, end-to-end, on ≥2 LAN nodes.
|
||||
**What is fixed in this deployed canary:**
|
||||
- Public stock Meshtastic interop is intentional: slot 0 PRIMARY is the public default LongFast
|
||||
channel (`name=""`, default PSK); slot 1 SECONDARY is `archipelago`.
|
||||
- Outgoing Meshtastic messages to stock peer `3ccc` are recorded with real 2026 timestamps and
|
||||
`transport:"lora"` in RPC. The Mesh UI label maps `lora` to **LoRa**, not "Mesh".
|
||||
- Post-send message refresh now polls briefly so FIPS/Tor/LoRa pills do not require a manual browser
|
||||
refresh.
|
||||
- Off-grid mode now blocks the mesh-chat federation fallback path as well as the generic transport
|
||||
router: when enabled it forces LoRa-only sends and the UI banner reads
|
||||
`Tor/FIPS disabled - LoRa only`.
|
||||
- Empty mesh-chat placeholder opacity was reduced.
|
||||
|
||||
**Still broken / resume here:**
|
||||
- Stock Meshtastic peer `3ccc` -> `.116` LoRa text still does **not** surface in `mesh.messages`.
|
||||
- Live `.116` logs prove bytes arrive from 3ccc, but the custom Meshtastic protobuf parser rejects
|
||||
the packet before it becomes an inbound frame:
|
||||
`Meshtastic FromRadio.packet did not parse into a decoded MeshPacket len=73 head=0dcc3c3e43153ca5b5432a16df56cbed`.
|
||||
- 3ccc NodeInfo is discovered and PKC-capable:
|
||||
`Meshtastic peer is PKC-capable (NodeInfo public_key) node=1128152268 key_len=32`.
|
||||
- Other received packets are decoded and intentionally ignored as non-text (`portnum=3/4/5`), so
|
||||
the serial reader is alive; the remaining blocker is the exact `MeshPacket` shape for stock
|
||||
Meshtastic text.
|
||||
- Definition of done: a new text sent from stock Meshtastic `3ccc` appears in `.116`
|
||||
`mesh.messages` as an incoming LoRa message without a browser refresh, and `.116` -> `3ccc`
|
||||
visibly arrives in the Meshtastic app.
|
||||
|
||||
Reference in New Issue
Block a user