CI / Build & Test (push) Has been cancelled
- Await restorePersistedTunnels in applySyncedState so applyingSync stays true for the full restore. Prevents saveState() during tunnel startup from pushing back to autopass and causing a feedback loop. - Debounce onRemoteUpdate (600ms) so bursts of autopass 'update' events trigger a single apply. - Skip apply when remote state matches current state (canonical fingerprint) to avoid redundant restarts and re-pushes. - Clear remoteUpdateDebounceTimer in cleanup().