Skip to main content
← Back to list
01Issue
BugShippedSwamp CLIPublic
Assigneesstack72

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-971 turns a DOMException TimeoutError into UserError("Request to <url> timed out. Is the server running?").
  • src/domain/extensions/extension_auto_resolver.ts:525 isNetworkError() checks for TypeError, DOMException TimeoutError, or a message that contains connect / timeout / network / dns / econnrefused. The wrapped UserError matches 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 calls output.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.

02Bog Flow
✓OPEN✓TRIAGED✓IN PROGRESS✓SHIPPED+ 1 MOREASSIGNED+ 5 MOREREVIEW+ 13 MOREPR_MERGED+ 2 MORESESSION_SUMMARIZED

Shipped

10/11/2026, 3:09:15 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
stack72 assigned stack7210/11/2026, 2:28:00 PM

Sign in to post a ripple.