Parent design: meshtastic/design#128
Current Apple behavior is partially compliant but has confirmed protocol/lifecycle gaps:
- Add-mode shares mark
?add=true but serialize a ChannelSet that still contains LoRa configuration. Add payloads must contain no LoRa configuration.
- Replace import treats every LoRa write as a reboot, swallows the following resync failure, and closes as success. Current firmware applies ordinary channel and LoRa changes live; an unconfirmed disconnect/error must remain recoverable.
- Add allocation derives radio indexes from the locally cached channel count. It must not overwrite an occupied radio slot when the local table is incomplete; only a freshly synchronized complete table may provide free-slot allocation.
- Share should use the same concise Replace/Add consequence explanation as import.
Acceptance criteria:
- Generated Add URLs decode to a ChannelSet without LoRa configuration; Replace URLs preserve it.
- Add imports preserve the node's channels and LoRa settings, do not silently overwrite, and clearly report unavailable/full/conflicting slots.
- Standard current-firmware QR imports neither claim a reboot nor hide a post-write resync failure.
- Share and import use the approved Replace/Add terms and explanations.
- Add focused parser, generation, import-lifecycle, and slot-allocation coverage; record hardware status in the PR.
Do not duplicate the host-compatibility work in #2116.
Parent design: meshtastic/design#128
Current Apple behavior is partially compliant but has confirmed protocol/lifecycle gaps:
?add=truebut serialize a ChannelSet that still contains LoRa configuration. Add payloads must contain no LoRa configuration.Acceptance criteria:
Do not duplicate the host-compatibility work in #2116.