ReachabilityGate
A connectivity gate the retry path can wait on. Implemented by NetworkMonitor (via NetworkMonitor.asReachabilityGate), but kept abstract so NetworkClient doesn't depend on any concrete connectivity source and can be tested without one.