What's Changed
- Header: globe opens channel sheet; deterministic crowding cascade by @jackjackbits in #1400
- Fix press-and-hold mic dying instantly in private chats by @jackjackbits in #1405
- Live push-to-talk voice for DMs (streams while you talk, voice note as fallback) by @jackjackbits in #1403
- Public-mesh push-to-talk: signed live voice bursts in the mesh channel by @jackjackbits in #1406
- Heal peer-ID rotation: rebind link on verified announce, retire ghost peer by @jackjackbits in #1401
- Fix received DM images stuck as grey box: stamp incoming media delivered, reveal tap as Button by @jackjackbits in #1402
- Require signed sender for broadcast file transfers (#1406 follow-up) by @jackjackbits in #1407
- Dead-code cleanup: remove 277 unused declarations + 13 orphaned l10n keys; add Periphery CI by @jackjackbits in #1410
- Empty-mesh liveliness: nearby conversations, echoes, wave, dead drops, radar by @jackjackbits in #1409
- Geo notes latency: EOSE scoped to reached relays + connecting state with auto-retry by @jackjackbits in #1411
- Isolate tests from the developer's real login keychain by @jackjackbits in #1413
- Mesh bridging: stitch nearby mesh islands over the internet, courier drops, unified settings by @jackjackbits in #1412
- Give the macOS app a proper icon matching iOS by @jackjackbits in #1414
- DMs to unreachable peers use store-and-forward instead of failing instantly by @jackjackbits in #1415
- Bump version to 1.7.0 by @jackjackbits in #1416
- Remove write-only variable left by #1415 by @jackjackbits in #1417
Full Changelog: v1.6.0...v1.7.0