Address code review findings
- Remove PowerAssertion.end() to eliminate double-endActivity risk
- Fix hardcoded "15 minutes" in timeout error message to use actual value
- Use guard let self in NWPathNetworkMonitor closure
- Cap stabilization delay to remaining timeout budget
- Document intentional divergence between isTransientUploadError and isTransient