Parent design: meshtastic/design#128
Web currently generates canonical Replace URLs but does not implement the shared Add/import contract:
- Add URLs retain LoRa configuration in the encoded ChannelSet.
- Import ignores
?add=true, can apply LoRa settings, and maps incoming channels onto replacement slots.
- There is no Add import mode that preserves the existing channel set and LoRa settings, no safe free-slot/conflict/capacity model, and no shared strict parser.
- Share and import use different terminology and confirmation models.
- Deep-link/share handling and explicit copy/system-share fallbacks are incomplete.
Scope:
- Create one tested parser/encoder for canonical and supported legacy ChannelSet URLs.
- Make Replace the default; make Add encode no LoRa configuration and lock add-only incoming links to Add.
- Implement a safe Import plan: Replace may replace selected slots/apply LoRa; Add uses only confirmed free slots, preserves existing settings, and reports conflicts/capacity before writes.
- Use that plan and vocabulary in both QR share and pasted/shared URL intake; add copy and Web Share API fallback where available.
- Keep the current event-driven reconnect behavior. Do not add a reboot prediction until firmware exposes authoritative accepted-operation status.
Acceptance criteria:
- Cross-client Replace/Add fixture URLs round-trip correctly.
- Tests cover malformed/foreign URLs, add-only payloads, duplicates, full capacity, selected channel counts, and no-reboot resync behavior.
- UI evidence covers Replace, Add, add-only, error/conflict, disconnected, and success states.
Parent design: meshtastic/design#128
Web currently generates canonical Replace URLs but does not implement the shared Add/import contract:
?add=true, can apply LoRa settings, and maps incoming channels onto replacement slots.Scope:
Acceptance criteria: