From 28aefd1bdf69837309792f399c3e96181289aeb4 Mon Sep 17 00:00:00 2001 From: Schwifty Date: Sun, 22 Mar 2026 00:23:01 +0000 Subject: [PATCH] fix: broaden disconnect retry to cover all active provisioning phases Previously retry logic only caught disconnects during .authenticating and .writing states. Beacons can also drop during .discoveringServices (characteristic discovery) and .verifying (broadcast check), which would bypass retry and immediately hard-fail. Now all active provisioning phases get the same reconnect retry treatment with backoff delays. Co-Authored-By: Claude Opus 4.6 (1M context) --- PayfritBeacon/BeaconProvisioner.swift | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/PayfritBeacon/BeaconProvisioner.swift b/PayfritBeacon/BeaconProvisioner.swift index b0b50e9..7a2c1b9 100644 --- a/PayfritBeacon/BeaconProvisioner.swift +++ b/PayfritBeacon/BeaconProvisioner.swift @@ -1041,8 +1041,9 @@ extension BeaconProvisioner: CBCentralManagerDelegate { return } - // Unexpected disconnect during auth or writing — retry with full reconnect - if (state == .authenticating || state == .writing) && disconnectRetryCount < BeaconProvisioner.MAX_DISCONNECT_RETRIES { + // Unexpected disconnect during any active provisioning phase — retry with full reconnect + let isActivePhase = (state == .discoveringServices || state == .authenticating || state == .writing || state == .verifying) + if isActivePhase && disconnectRetryCount < BeaconProvisioner.MAX_DISCONNECT_RETRIES { disconnectRetryCount += 1 DebugLog.shared.log("BLE: Disconnect during \(state) — reconnecting (attempt \(disconnectRetryCount)/\(BeaconProvisioner.MAX_DISCONNECT_RETRIES))") progress = "Beacon disconnected, reconnecting (\(disconnectRetryCount)/\(BeaconProvisioner.MAX_DISCONNECT_RETRIES))..."