Relationships
#3243 Extension auto-resolution reports a registry timeout as "no extension publishes this type"
Opened by stack72 · 10/11/2026· Shipped 10/11/2026
What happened
When the extension registry times out during auto-resolution, swamp reports that the type doesn't exist instead of reporting a network problem:
Resolving @swamp/s3-datastore not found locally, searching registry...
Error auto-resolution failed for type @swamp/s3-datastore: no extension publishes this type
Install manually with: swamp extension pull <extension-name>
Error: Datastore type "@swamp/s3-datastore" is not registered. Install it with: swamp extension pull @swamp/s3-datastore@swamp/s3-datastore exists, and other jobs in the same run installed it. Seen in Datastore UAT run swamp-club/swamp-uat#38145399759 (s3 shard 4/4, ~14:05 UTC on 2026-10-11). In the same second, a GCS shard got an accurate Request to https://swamp-club.com timed out. Is the server running? from a later step.
Cause
src/infrastructure/http/extension_api_client.ts:968-971turns aDOMExceptionTimeoutErrorintoUserError("Request to <url> timed out. Is the server running?").src/domain/extensions/extension_auto_resolver.ts:525isNetworkError()checks forTypeError,DOMExceptionTimeoutError, or a message that containsconnect/timeout/network/dns/econnrefused. The wrappedUserErrormatches none of these. In particular, "timed out" doesn't contain "timeout".- So
doResolve()(extension_auto_resolver.ts:378-383) falls into the else branch and callsoutput.notFound(). The real error appears only at debug level.
Rate-limit errors (rateLimitError) and other HTTP failures from checkResponse() (such as 5xx) take the same path and are also reported as "no extension publishes this type".
Expected
A registry timeout, connection failure, 5xx or rate limit during auto-resolution should go through output.networkError() (or a dedicated output) with the real message. "No extension publishes this type" should only appear when the lookup really came back empty (404 on every direct candidate and an empty search).
Suggested fix
Don't match on message text. Have the API client throw a typed error, such as a RegistryUnavailableError for timeouts, connection failures and 5xx, and the existing rate-limit error. isNetworkError (or doResolve) can then check the type. Add a unit test where getExtension rejects with the client's timeout error and assert that networkError is called and notFound is not.
Impact
Users on a flaky connection, and CI, are told a real extension doesn't exist and are sent to swamp extension pull. That's the wrong fix and hides the registry outage. In UAT it makes infrastructure flakes look like missing-extension regressions.
Shipped
Click a lifecycle step above to view its details.
Sign in to post a ripple.