- Cache invalidation: drop ~/.config/claude-usage-monitor/ble-address and remove
the dead MAC from bluez on connect failure, so swapping ESP boards no longer
pins the daemon to a stale factory MAC
- Scan robustness: pick first matching candidate (head -1), sanity-check cached
content for valid MAC format, handle multiple Claude Controllers in bluez
- 5s tick + 60s poll: inner loop wakes every 5s for fast disconnect detection
while keeping Anthropic API cadence at one minute
- Refresh-request channel: new GATT characteristic ...0004 NOTIFY, firmware
fires once in onSubscribe when has_received_data is false; daemon subscribes
via setsid'd dbus-monitor pipeline (process group cleanup avoids the
bash-wait-on-job hang we hit on disconnect)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>