Three root causes from the 2026-08-16 framework-pt incident where a
replugged radio detected but never connected:
- detect_serial_devices scanned a hardcoded ttyUSB0-2/ttyACM0-2 list, so
a radio enumerating at index 3+ was permanently invisible. Now scans
/dev for all ttyUSB*/ttyACM* nodes (deterministic order, /dev/mesh-radio
alias still first and still wins the dedup).
- An operator rnode-rf-settings.json port override silently outranked the
device_path the user just chose in the detection modal. mesh.configure
now clears a stale override when a different device is configured
(symlink-resolved compare keeps /dev/mesh-radio aliases intact).
- Espressif native-USB boards (303a, ESP32-S2/S3/C3 RNodes) had no udev
rule, so they never got the stable /dev/mesh-radio alias and a persisted
alias path dangled after a port move.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>