Relationships
#1676 swamp access grant create installs an unrelated extension from the registry
Opened by skunk-ape · 8/16/2026· Shipped 8/17/2026
swamp access grant create installs an extension from the registry that the
repository never asked for. It is a network fetch plus 30 files written into
.swamp/pulled-extensions/, with no prompt and no mention in the command's
purpose. I hit it while probing grant conditions, noticed an unexplained
@swamp/gcp/migrationcenter in my working tree, and traced it back.
Reproduce
$ swamp extension list
@swamp/software-factory v2026.06.24.1
$ swamp access grant create --subject user:probe9 --allow run --on model:zzz-nonexistent
Installed @swamp/gcp/migrationcenter@2026.08.12.2 (13 models registered)
Completed create on grant-f2c1ff23 succeeded in 9ms
$ swamp extension list
@swamp/gcp/migrationcenter v2026.08.12.2 (pulled 2026-08-16T22:09:29.868Z)
@swamp/software-factory v2026.06.24.1It repeats: swamp extension rm @swamp/gcp/migrationcenter --yes, then any
swamp access grant create, and the extension is back.
What I ruled out
- Not other commands. With the extension removed,
swamp model list,swamp model type search gcp,swamp model method run <m> validate,swamp access grant list, andswamp access token listall leave it absent.swamp model create @swamp/software-factory <name>also leaves it absent, so this is not ordinary model creation. - Not repo config.
.swamp.yamlholds only swampVersion, initializedAt, repoId, tools, gitignoreManaged.swamp extension source listreports none. - Not a local reference. Nothing in the repository names
@swamp/gcp/migrationcenterexceptupstream_extensions.json, which is the record of the install itself. - Not another operator. The repo's command audit log shows one session for the
day and no
swamp extension pull|install|searchat any point.
Expected
swamp access grant create writes a grant. It does not reach the registry, and
it does not install extensions. If some code path genuinely needs an extension
installed, it should say which one and why, and ask first.
Why it matters
The install path runs unprompted from a command with no stated relationship to
extensions, which is a supply-chain surface: a local, unrelated operation
fetches and registers third-party model code. It also breaks sandboxed and
air-gapped use, where an unexpected egress attempt is a failure rather than a
convenience. And it dirties the working tree — upstream_extensions.json is
tracked, so the install shows up as an unexplained diff.
Possibly related
Once installed, the extension fails to load, and every later swamp access
command prints:
Error @swamp/gcp/migrationcenter already installed at
.../pulled-extensions/@swamp/gcp/migrationcenter but failed to load
Local edits may be preventing it from registeringThere are no local edits — the tree came straight from the install. Meanwhile
.swamp/_extension_catalog.db records all 13 of its bundle_types with
state = Indexed and an empty last_error, so the catalog and the loader
disagree about the same extension.
Environment
swamp 20260815.023608.0-sha.a648c130, macOS 25.6.0 (darwin arm64).
Shipped
Click a lifecycle step above to view its details.
stack72 commented 8/17/2026, 12:04:43 AM
Thanks @skunk-ape for reporting this! The fix has been merged and a release is on its way. We appreciate your contribution to swamp.
stack72 commented 8/17/2026, 12:13:05 AM
Great catch @skunk-ape — this was a supply-chain issue hiding in plain sight. Every swamp access grant create was silently fetching and installing an unrelated extension from the registry, with no prompt and no connection to what the command actually does. The root cause was a key mismatch in how we look up built-in model types: the lookup missed the built-in, fell through to a registry search, and installed the first thing that came back. The fix ensures built-in types are always resolved locally — no network call, no surprise installs. Shipped in #2164. Reports like this are really important to us. Keeping the supply chain solid is something we take seriously, and we can only do that when people take the time to dig in and document what they're seeing the way you did here. Thanks for flagging it.
skunk-ape commented 8/17/2026, 2:51:13 PM
Follow-up: the registry install this issue reported is gone, but the underlying path is still there. swamp access grant create continues to create a @swamp/grant model instance (the Completed create on grant-f2c1ff23 succeeded line in the repro above) rather than registering an authorization grant, so the grant never reaches grant list, access check, or the policy snapshot. Filed as #1682 — the sharp end is that a --deny grant created this way reports success and does not apply, which fails open.
Sign in to post a ripple.