Parent design: meshtastic/design#120 (event session addendum forthcoming)
Goal
Let a connected client place a radio into an event channel profile without factory-resetting the radio, then restore the user's pre-event channels after the radio returns to standard firmware.
Current boundary
factory_reset_config removes /prefs and recreates all defaults, including owner/config/device state/channels. It is not acceptable for event setup. begin_edit_settings / commit_edit_settings can defer persistence while a client sends set_channel, but there is no explicit event profile, channel-only clear command, durable restore marker, or end-to-end verification contract.
Firmware scope
- Define a versioned, capability-gated event-session operation for a channels-only replacement profile. It must validate the complete replacement before committing it; no partial persisted channel table.
- Preserve identity keys, owner, BLE bonds, node database, module config, and LoRa configuration unless an explicit, separately reviewed profile section permits a LoRa change.
- Ensure the resulting profile always contains one valid primary channel and remains locally administrable.
- Expose an authoritative completion/readback state suitable for clients to verify after reconnect. State must include the applied event/profile ID and a content digest, but never expose channel PSKs in status messages.
- Do not have a firmware image silently erase channels just because it booted. The authenticated, connected client must request and confirm the session transition.
- Preserve normal OTA behavior; this feature must not make standard firmware updates destructive.
Security and recovery
- The firmware must treat a profile as untrusted input: validate counts, roles, primary channel, keys, and supported settings before mutation.
- No backup of private channel material belongs in firmware logs or metadata. Clients own encrypted snapshots and restore only after device identity verification.
- An interrupted transition must leave either the prior complete channel table or the complete event table, never a persisted mix.
Acceptance / verification
- Unit tests: valid replacement; invalid/no-primary rejection; all disabled rejection; interrupted/failed commit; profile readback; standard OTA leaves channels unchanged.
- Hardware verification: one ESP32 OTA path and one nRF52 DFU path, with reconnect/readback after event setup and after return to standard firmware.
- Document the wire contract and compatibility behavior for old clients/firmware.
Related: Meshtastic-Android#3911, meshtastic/design#36.
Parent design: meshtastic/design#120 (event session addendum forthcoming)
Goal
Let a connected client place a radio into an event channel profile without factory-resetting the radio, then restore the user's pre-event channels after the radio returns to standard firmware.
Current boundary
factory_reset_configremoves/prefsand recreates all defaults, including owner/config/device state/channels. It is not acceptable for event setup.begin_edit_settings/commit_edit_settingscan defer persistence while a client sendsset_channel, but there is no explicit event profile, channel-only clear command, durable restore marker, or end-to-end verification contract.Firmware scope
Security and recovery
Acceptance / verification
Related: Meshtastic-Android#3911, meshtastic/design#36.