ca3a8b6298
The deep dive (constellation-docs research/tsnet-deafness-deep-dive.md) established the embedded node goes deaf because a zombie home-DERP connection is only detected by the 120 s read deadline and the Rebind/ ReSTUN repair machinery runs solely on netmon events an embedding never receives. TailscaleRecoverPaths() runs SetNetworkUp + Rebind + ReSTUN on the running node (3 s DERP probe bound; holds the node lock because Conn.Rebind has no closed-conn fence upstream, unlike the LocalClient paths), and the Swift layer now feeds real NWPathMonitor transitions into netmon exactly as the official Apple client does, so the repair machinery finally runs on network changes. The TailscalePingPeer docs no longer claim a disco ping re-registers DERP: it is a detector, not a cure. Opt-in debugNetLogging start flag (envknob; compiled out of GOOS=ios by upstream, effective on desktop/Android bench builds). Go suite 29/29 under -race, Dart 13/13, both xcframework slices export the new symbols. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>