Breeze 2.1.1
Breeze 2.1.1 — the client half of the Breeze Core 3.0.2 reliability fix, plus the Android Auto surface from 2.1.0.
Fixed — the bug that locked users out
The app used to treat any 401 as "my credential is dead": it deleted the stored Ed25519 private key and demanded re-pairing. Re-pairing needs an admin to approve on the LAN, so a user who was away from home couldn't recover — and when the immediate re-enrolment also failed, the app fell through to onboarding having forgotten the server entirely ("the app has no servers any more").
The trigger didn't even have to be real: a phone whose clock had drifted past the server's 60 s window fails every signed request, which looked identical to a revoked credential.
Now:
- Transient failures are retried once, transparently. On a
clock_skewrejection the app learnsserver_time − device_timeand signs everything afterwards with server time — a drifted clock self-heals in one round-trip instead of costing you your pairing. - Re-pairing only happens when the server says the credential is genuinely finished, or after 3 unexplained
401s in a row (for servers too old to say). - On a kept-credential
401the app drops to its offline state instead of continuing to poll every 5 s. That hammering is what tripped the server's fail2ban and, behind NAT, banned everyone's shared address at once. - Diagnostics no longer probes the LAN-only admin endpoint
/api/auth/deviceswhen you're remote — a single 403 there could get your IP banned. It also reports your device clock offset, which would have identified this in one tap.
Also in the 2.1 line
- Android Auto: one AC per screen, one huge power button, big ▲/▼ to switch units. Needs Unknown sources in Android Auto's developer settings — see the README.
- Home-screen widget shows a bold ON / OFF / OFFLINE badge and goes colourful when running, colourless when off.
- Power is a big switch (faintly red off, faintly green on); the flap control is one pill split into vertical/horizontal halves.
Download Breeze-2.1.1.apk below.