Maintenance release on top of v1.0-build37 (WRAP layer). No changes
to the data path; WRAP behaviour and Settings UI are identical.
Stability:
- credpool: shortened 486 saturation cooldown 10 min → 3 min + wake
parked conns the moment the cooldown expires (was: parked conns
slept their full random 30s-3min back-off past the slot's actual
recovery moment). Cuts post-cascade 0-conn windows from ~14 min
to ~3-4 min. - bridge: GOMEMLIMIT=40 MB soft cap defends against iOS jetsam on
the NetworkExtension's ~50 MB hard memory budget. - watchdog: Condition 1 ("no DTLS RX for 2m+ → reconnect") now
requires meaningful user TX in the same window. Idle phone on
lock screen with only WG keepalives no longer triggers spurious
ForceReconnect every ~2 minutes.
Diagnostics added (always-on, low cost):
- 60s per-conn TX/RX byte counter dump (conn-stats lines)
- 60s memstats with phys_footprint via Mach task_info, plus
heap-alloc/heap-inuse/heap-idle/heap-released - 60s pathstats with os-default IP and in-sync vs stale per-conn
local IP buckets — catches silent iOS socket rebinds that don't
fire [PathMonitor] events
The WRAP toggle remains as in build 37 (default off). When on, the
server side must be running with matching -wrap and -wrap-key.