bootReconnectDecision
Decides what an unattended reconnect should do, given the persisted device and the current permission.
The permission check exists because the failure it prevents is completely silent. Kable reports a missing Bluetooth permission as UnmetRequirementException, which the transport classifies as transient — correctly, since a revoked permission can come back — and the transient path drops the message. With maxFailures = Int.MAX_VALUE there is no give-up path to escalate to, so the service would retry forever, log a warning nobody reads, and show a foreground notification saying only "Disconnected". No user is present at boot to notice, and nothing tells them afterwards.
Only BLE is gated. A TCP or USB device needs no Bluetooth permission, and refusing to start for those would break reconnection for users who have deliberately never granted it.
Pure and platform-agnostic so the decision is unit-testable without a BroadcastReceiver or a permission grant.