Two key changes:
1. Remove frames 3-6 disable commands (was steps 16-23, 8 extra BLE writes).
We only configure Frame 1 (device info) and Frame 2 (iBeacon), then save.
Fewer writes = fewer chances for supervision timeout disconnects.
2. When FFE2 characteristic goes missing after a disconnect, do a full
disconnect → reconnect → re-discover services → re-auth → resume cycle
instead of trying to rediscover characteristics on the same (stale GATT)
connection. CoreBluetooth returns cached results on the same connection,
so FFE2 stays missing. Full reconnect forces a fresh GATT discovery.
Write sequence is now 16 steps (down from 24).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>