Combines builds 60-64 since v1.0-build59. All work focuses on stability after
network-path changes (WiFi ↔ cellular handovers), with UX improvements alongside.
Highlights
• Faster recovery from WiFi/cellular handovers. When iOS kills sockets on a
path change, VK still holds the original TURN allocations for ~11 min
(their lifetime), so all five slots show 486 Allocation Quota Reached.
Bootstrap now waits on a slot-available signal instead of fixed 10-second
backoff and resumes the moment any slot's cooldown expires. In practice
this saves ~4 minutes of "0 connections" time per hard handover and puts
recovery within 2 seconds of the theoretical floor.
• Smarter saturation cooldown. Slots that VK is clearly still holding
(active conns or recently used) get the full 11-min cooldown matching
VK's allocation lifetime; slots that look like genuine ghost allocations
get the original 3-min. Prevents premature retry that would just burn
bootstrap budget on guaranteed 486 errors.
• Captured browser profile now in Full Backup. The browser_fp + device
fingerprint captured during your last manual captcha solve is included
in Settings → Backup & Restore export, and restored on import. New
"Reset Captured Browser Profile" destructive button if you want to
force a fresh capture.
• Logs UI no longer cries wolf on Clear. After tapping Clear the empty
log file shows a normal "log is empty — waiting for new activity"
state instead of the misleading "App Group container unavailable"
fallback banner. The fallback path now diagnoses precisely which of
five storage states triggered it.
• Path-change diagnostics. A pathstats snapshot now logs on every
PathMonitor satisfied/unsatisfied event, not only on the 60-second
ticker, capturing transient cellular states between ticks.
Internals
See commit 4ca3c61 for per-build technical detail (markSaturated active-now
classification, bootstrap-on-slotAvailableCh wait, VKProfileCache backup
round-trip, SharedLogger.inspectStorage, LogPathSnapshot bridge).