What's Changed
🏗️ Features
- Style GeoJSON overlays from simplestyle-spec (fill/stroke) by @garthvh in #6088
- feat(discovery): Mesh Beacon client with iOS 014-mesh-beacons parity by @jamesarich in #6097
- feat(messaging): translate chat messages in-place with on-device ML Kit (google flavor only) by @thebentern in #6103
- feat(database): unify device database across transports by @jamesarich in #6096
- feat: compute EPA NowCast AQI from PM2.5 history by @jamesarich in #6102
- Add secure key backup/restore/delete for security config by @jamesarich in #6105
- feat(messaging): @mention with deep-link to node detail (#6098) by @jamesarich in #6108
- feat(node): label power channels and fix pressure axis scale by @jamesarich in #6111
- Show outgoing message status text by @RCGV1 in #6121
🖥️ Desktop
- fix(geofence): restrict crossing alerts to creator, add per-geofence opt-in by @jamesarich in #6117
🛠️ Fixes
- fix(ci): rename skip_author to ignore_usernames in .coderabbit.yaml by @jamesarich in #6069
- fix(qr): Apply channel replacements reliably by @jeremiah-k in #6072
- fix(logs): Allow access to DebugPanel Logs while disconnected by @jamesarich in #6074
- fix: harden against adversarial mesh-fuzz findings (crash, GC-thrash, unbounded growth, OOM) by @jamesarich in #6093
- fix: remove satellite-count chip from node-list metrics row by @jamesarich in #6100
- fix: derive phone-UI units from OS locale, not radio display config by @jamesarich in #6101
- fix(ui): align AdaptiveTwoPane split to the adaptive directive breakpoint by @jamesarich in #6112
- fix(settings): Apply manual channel writes in order by @jeremiah-k in #6077
- fix(settings): Generate fresh PSK for named manual channels by @jeremiah-k in #6076
- fix(discovery): let default-channel users start a scan by @jamesarich in #6120
New Contributors
Full Changelog: v2.8.0-closed.5...v2.8.0-internal.17