Relationships
#1185 extension pull fails permanently when a pinned exact-version dependency is removed from the registry
Opened by webframp · 7/16/2026
swamp extension pull fails permanently once a pinned exact-version dependency is removed from the registry, with no way for the depending extension's author to have caught it ahead of time.
Repro
mkdir /tmp/repro && cd /tmp/repro
swamp repo init .
swamp extension pull @webframp/aws/adoptResult:
{
"error": "Extension @swamp/aws/secretsmanager@2026.05.18.1 not found in the registry."
}@webframp/aws/adopt's manifest pins @swamp/aws/secretsmanager@2026.05.18.1 as an exact dependency. That version no longer resolves via swamp extension info "@swamp/aws/secretsmanager@2026.05.18.1" (also 404s), even though the package itself is very much alive at 2026.06.15.1 (current latestVersion). The two other exact pins in the same manifest — @swamp/aws/ec2@2026.04.03.2 and @swamp/aws/rds@2026.04.23.2, both far older than secretsmanager's current latest — still resolve fine, so this isn't "old versions get pruned on a schedule." Something specific happened to that one version.
This breaks not just adopt but everything that transitively depends on it — e.g. @webframp/aws/drift-state fails to pull with the exact same error, even though drift-state's own manifest has nothing to do with secretsmanager.
Why this is bad
- There's no way for an extension author to know a pinned dependency has gone stale until a user's
pullbreaks.swamp extension quality/push/fmtdon't appear to re-verify that declared dependency pins still resolve. - The error message doesn't say why the version is gone (deprecated? security pull? renamed?) or what to do about it — an author debugging this has to manually bisect registry versions to even find the current replacement.
- If versions of official
@swamp/*extensions can disappear out from under pinned dependents, that's a supply-chain stability issue for the whole ecosystem, not just this one package.
Suggested fixes (any of these would help)
- Never hard-delete a previously-published version of an extension. If a version must be pulled (security issue, bad publish), keep it resolvable for existing pins but flag it (e.g.
"deprecated": true, "reason": "...") rather than 404ing. - At minimum,
swamp extension quality/pushshould re-resolve every pinned dependency against the live registry and fail/warn if any no longer exist, so the break is caught by the author at publish time instead of by every downstream user at pull time. - The pull error should say why the version is unavailable when known (e.g. "deprecated on 2026-06-xx in favor of 2026.06.15.1") instead of a bare "not found."
Environment
- swamp
20260716.194319.0-sha.df9fc306 swamp auth whoami: webframp- Repro'd in a fresh, empty repo (
swamp repo init) with no other extensions installed, so this isn't a local-cache artifact.
Closed
No activity in this phase yet.