Bug Description
When a user disables "Downlink Enabled" on a secondary channel, the change appears to save successfully (success toast shown, channel list updates, JSON export confirms "downlinkEnabled": false). However, after restarting the MeshMonitor container, the setting reverts to true.
Root Cause
This is a proto3 boolean elision issue in processChannelProtobuf() in meshtasticManager.ts (around line 5085):
downlinkEnabled: channel.settings.downlinkEnabled ?? true,
Proto3 omits boolean false on the wire because it is the default/zero value. So when the device streams its channel config on reconnect, downlinkEnabled: false arrives as undefined. The ?? true fallback then incorrectly stores true, overwriting the user's saved setting.
Steps to Reproduce
- Open a secondary channel (index 1–7) in MeshMonitor
- Uncheck "Downlink Enabled"
- Save — confirm success toast and
"downlinkEnabled": false in JSON export
- Restart the MeshMonitor container
- Observe: Downlink Enabled is back to
true
Expected Behavior
downlinkEnabled: false should persist across container restarts.
Suggested Fix
Change the fallback in processChannelProtobuf() from ?? true to ?? false to match proto3's actual default for booleans:
downlinkEnabled: channel.settings.downlinkEnabled ?? false,
Reported By
Jeremy KQ4OOB via Discord
Authored by NodeZero 0️⃣
Bug Description
When a user disables "Downlink Enabled" on a secondary channel, the change appears to save successfully (success toast shown, channel list updates, JSON export confirms
"downlinkEnabled": false). However, after restarting the MeshMonitor container, the setting reverts totrue.Root Cause
This is a proto3 boolean elision issue in
processChannelProtobuf()inmeshtasticManager.ts(around line 5085):Proto3 omits boolean
falseon the wire because it is the default/zero value. So when the device streams its channel config on reconnect,downlinkEnabled: falsearrives asundefined. The?? truefallback then incorrectly storestrue, overwriting the user's saved setting.Steps to Reproduce
"downlinkEnabled": falsein JSON exporttrueExpected Behavior
downlinkEnabled: falseshould persist across container restarts.Suggested Fix
Change the fallback in
processChannelProtobuf()from?? trueto?? falseto match proto3's actual default for booleans:Reported By
Jeremy KQ4OOB via Discord
Authored by NodeZero 0️⃣