What's Changed
🏗️ Features
- feat(export): add hop start and relay node columns to CSV export by @jamesarich in #5822
- feat(mqtt): add phone-local MQTT proxy cutoff control by @jamesarich in #5823
- feat(node): show our node shortname chip on the Nodes tab by @jamesarich in #5820
- feat(settings): add remote "Set time" admin action by @jamesarich in #5821
- feat(network): on-device capture-replay transport + ingestion fuzzing/hardening by @jamesarich in #5846
- perf(node): add stable keys and contentType to telemetry chart lists by @jamesarich in #5869
- feat(connections): list only BLE devices visible via scan by @jamesarich in #5877
- feat(ui): use modem-preset-relative SNR thresholds for signal quality by @jamesarich in #5903
- feat(firmware): link OTAFIX bootloader from slow-DFU success screen by @jamesarich in #5917
- feat(node): add GPX export to position log screen by @jamesarich in #5919
- feat: offline-first event firmware metadata (JSON schema + bundled asset) by @jamesarich in #5920
- feat(firmware): drive event firmware branding from bundled metadata by @jamesarich in #5929
- feat(lora): consume region→preset compatibility map + TINY presets (protobufs #951) by @jamesarich in #5834
- feat(lockdown): firmware lockdown mode (provision / unlock / lock-now) by @jamesarich in #5939
- feat(lora): gate region→preset map + TINY presets on firmware capability by @jamesarich in #5941
🛠️ Fixes
- fix(mqtt): make the MQTT client-id unique per connection by @jamesarich in #5755
- fix(ble): Harden BLE connection lifecycle by @jeremiah-k in #5795
- fix(build): isolate ML Kit GenAI to the Google flavor (fix F-Droid rb-check) by @jamesarich in #5824
- fix(notifications): open node detail when tapping 'New Node Seen' notification by @LesterCheng in #5752
- fix(appfunctions): keep AppSearch document-factory constructors under R8 full mode by @jamesarich in #5829
- fix(service): resolve selected-device startup race by @jeremiah-k in #5828
- fix(database): defer FTS backfill on cold start and enforce single-connection pool by @jeremiah-k in #5841
- fix(ble): retrigger connection when bonding is interrupted by @jamesarich in #5849
- fix(desktop): terminate process on exit; quit on close when no tray by @jamesarich in #5858
- fix(settings): crash opening Position radio-config screen by @jamesarich in #5862
- fix(settings): gate Traffic Management config at firmware v2.8.0 by @jamesarich in #5864
- fix(network): retry transient connection/IO failures to api.meshtastic.org by @jamesarich in #5870
- fix(ui): recognize VPN and all networks for network scan availability by @jeremiah-k in #5882
- fix(data): separate refresh timeouts from Room persistence by @jeremiah-k in #5881
- fix(service): recover stalled WiFi/TCP handshakes by cycling active transport by @jeremiah-k in #5856
- fix(ui): prevent duplicate LazyColumn keys in node metrics logs by @jamesarich in #5890
- fix(network): preserve TCP reconnect backoff on short sessions by @jeremiah-k in #5893
- fix(connections): coordinate BLE and TCP scan lifecycle by @jeremiah-k in #5887
- fix(ui): show Wi-Fi unavailable banner only during active network scan by @jeremiah-k in #5892
- fix(network): migrate to mqtt-client 0.4.0 (IP-literal TLS fix) by @jamesarich in #5895
- fix(ble): require fresh advertisement for auto-reconnect by @jeremiah-k in #5912
- fix(firmware): harden ESP32 OTA + nRF DFU update paths (hardware-validated) by @jamesarich in #5915
- fix(firmware): batch of P3 OTA/DFU cleanups from the #5915 audit by @jamesarich in #5916
- fix(firmware): render chirpy mascot via painterResource in update dialog by @jamesarich in #5925
- fix(usb): Add serial presence recovery for USB replug by @jeremiah-k in #5923
- fix(data): Persist TAK module config by @jeremiah-k in #5933
- fix(usb): Suppress expected serial close warnings by @jeremiah-k in #5932
New Contributors
- @LesterCheng made their first contribution in #5752
Full Changelog: v2.7.14...v2.8.0-internal.6