After an APK reinstall (or an OS low-memory kill that START_STICKY didn't recover promptly), the VpnService dies but `filter_enabled` stays true. isVpnEffectivelyOn then reports vpn:true (from the flag) → tamperLock:true → lockedIn:true → the green "protection active" card with no toggles, while in reality nothing is filtering. New native reconcileVpn(): if `filter_enabled` && !RebreakVpnService.isRunning && VpnService.prepare()==null → startVpnService(). Wired into _layout.tsx enforceProtection() (runs on launch / foreground / 15s poll), called before reading combined state. No-op on iOS/web. If the VPN consent was revoked, isVpnEffectivelyOn already clears the flag, so that case self-resolves too. Net behavior: while `filter_enabled` is true (user hasn't exited via the cooldown), the app keeps the VPN alive. Exiting still goes through the cooldown → forceDisable → filter_enabled=false → reconcile leaves it off. DiGA-compliant. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Description
Self-hosted mirror of rebreak monorepo
Languages
TypeScript
68%
Vue
7.9%
Swift
7.7%
Shell
4.2%
JavaScript
3.1%
Other
8.9%