v0.2.0 — BLE supervisor and watchdog
Fixed
-
BLE render loop no longer silently wedges. Under certain conditions the inner render loop could stop making progress (panic in the child task, non-cancellable btleplug call, or some other stall) and no outer observer would notice — the display would freeze for many minutes with no warning in the logs even though hook events kept flowing.
A new `ble_supervisor` now wraps the render loop. It tracks `last_hook_event_at` (bumped on every webhook event) and `last_gif_sent_at` (bumped per successful send, reset per reconnection cycle). Every 5s it checks: if events have arrived but no GIF was sent in the last 20s, it first sets `force_ble_reconnect` to let the loop break cooperatively; if the loop is still wedged 5s later, it calls `JoinHandle::abort()` and respawns. The supervisor also respawns on normal exit and panic.
Worst-case recovery from a silent wedge is now ~30–45s instead of never.
Added
- Tamagotchi sprite theme (theme 11).