Repository navigation
20.07 v0.3.0-dev
The framing shift behind this release: groups in 20.07 are ad hoc and short-lived (2-3 days
typical, 6 months an absolute ceiling), not standing chat rooms — which changes which problems
are worth solving.
Ephemeral group expiry: a group's lifetime (12h/48h-default/7d/30d/6mo, chosen at creation) is
baked directly into the shareable join code's binary format, not tracked per-phone, so every
member agrees on the exact same expiry moment. Every member's own app dismantles an expired group
on its own — key, messages, evidence, all of it.
Sender identity (Ed25519), additive to the existing group-key HMAC: every member gets a
per-(device, group) keypair, so devices can't be linked across groups. A signature rides alongside
the group HMAC on every frame, telling members apart instead of only confirming group membership.
Trust is pin-on-first-sight, not a certificate authority — full reasoning in docs/DECISIONS.md.
Security fixes: a hostile totalChunks value could force a large allocation on every relaying
device; the SOS auth tag only covered a message's first 255 bytes; a captured presence heartbeat
could be replayed indefinitely; a stale SOS could re-fire the alarm notification; unbounded WiFi
Direct socket reads. All five fixed with regression tests.
Efficiency/structure: catalog-sync filter now sizes itself to the actual catalog with an
MTU-aware fallback; a cross-peer GATT notification race fixed; hop-tracking reflects a genuinely
worsened route instead of freezing at its best-ever reading; WiFi Direct moved to its own package;
verbose inline comments extracted into docs/DECISIONS.md.
Bumps MeshFrameCodec.VERSION 1→2 and the DB schema to v6 (destructive migration, as with every
schema bump so far — existing groups will need to be recreated). 203 tests, up from 112,
detekt-clean; the R8-minified release build also verified to compile clean.
Not yet live-device-verified: the Ed25519 signing/pin-on-first-sight path and ephemeral-expiry
UI need a real 2-phone pass before being trusted the way the rest of the mesh core is — see
NEXT_STEPS.md. Still pre-1.0. This is a debug build (unsigned release build does not exist yet).