mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-09-10 02:25:56 +00:00
9137f86355
Transport-level failures from httpClient.Do (connection refused/reset, DNS, TLS, timeouts) were wrapped as plain errors, so they fell through userFriendlyActivationError's LicenseServerError branch to the generic contact-support fallback instead of the retryable temporarily-unavailable message. Users behind flaky networks got a dead-end message, and the 2026-08-01 rc.6 paid-runtime gate failure was misdiagnosed the same way. Classify Do failures at the client layer as a retryable LicenseServerError (code license_server_unreachable, StatusCode 0 so revocation/suspension/ migration status gates never match) with the cause reachable via Unwrap so the status poller's context.Canceled check keeps working. The cloud-paid transport boundary contract now names this classification. Tests pin the classification, the cancellation chain, and the end-to-end user-facing retryable message.