Relationships
#2476 swamp serve does not register webhook schemes from pulled extensions; boot fails with misleading 'already installed but failed to load'
Opened by magistr · 9/24/2026· Shipped 9/24/2026
Summary
swamp serve does not register a webhook extension (Lab #2204 webhook kind) when it comes from a pulled package. It only finds webhook schemes under the repo's local extensions/webhooks/. If a serve.yaml route uses a scheme that only a pulled package provides, serve fails at boot. The error it prints blames the package's model, which is misleading.
Reproduce (clean repo)
swamp repo init
swamp extension trust add magistr
# @magistr/telegram-send 2026.09.24.1 ships a model AND a webhook:
# manifest: webhooks: [extensions/webhooks/telegram_webhook.ts]
# webhook export type: "@magistr/telegram-webhook"
swamp extension pull @magistr/telegram-send@2026.09.24.1
cat > .swamp/serve.yaml <<'Y'
webhooks:
- route: /hooks/telegram
workflow: telegram-callback
secret: dummysecret
scheme: "@magistr/telegram-webhook"
Y
swamp serve --port 9199 --host 127.0.0.1 --auth-mode noneThe pull extracts the webhook correctly:
.swamp/pulled-extensions/@magistr/telegram-send/webhooks/extensions/webhooks/telegram_webhook.ts
.swamp/webhook-bundles/ddf3350d/extensions/webhooks/telegram_webhook.jsActual
Resolving @magistr/telegram-webhook not found locally, searching registry...
Error @magistr/telegram-send already installed at .../.swamp/pulled-extensions/@magistr/telegram-send but failed to load
Local edits may be preventing it from registering — inspect the source and fix errors.
To reset: swamp extension pull "@magistr/telegram-send" --force
Error: Webhook /hooks/telegram uses scheme '@magistr/telegram-webhook', but no webhook extension of that type is installed. Install it with 'swamp extension pull @magistr/telegram-webhook'.serve exits. swamp model type describe @magistr/telegram/send works in the same repo, so the package's model loads fine. The "failed to load / local edits" message is wrong. --force re-pulling does not help.
Copying the same telegram_webhook.ts into the repo's local extensions/webhooks/ makes serve boot and register the route (Webhook registered: "/hooks/telegram" ... (scheme: "@magistr/telegram-webhook")).
Expected
- Webhook extensions from pulled packages register at serve boot, the same way pulled models do.
- If a scheme really is missing, the error names the missing webhook scheme. It should not claim the package "failed to load" or suggest a destructive
--forcere-pull (compare #1638).
Impact
- A published package cannot ship a serve webhook scheme. Every consumer has to vendor the file into their repo.
- In our deployment, a binary upgrade triggered the auto-resolver, which pulled a registry package next to the in-repo copies. serve then crash-looped at boot, because any unresolved webhook scheme is fatal. During the crash loop serve also re-pulled the package by itself on each restart.
- Related: after moving an in-repo model out,
.swamp/_extension_catalog.dbkept mapping the type to the missing local file (readfile '/workspace/extensions/models/telegram_send.ts') until the catalog was rebuilt.
Versions
Reproduced on 20260917.032111.0 (macOS) and 20260923.231117.0 (Linux container). First seen after an upgrade to 20260924.073627.0.
Shipped
Click a lifecycle step above to view its details.
skunk-ape commented 9/24/2026, 9:49:15 PM
Thanks @magistr for reporting this! We shipped: Stop auto-resolution from blaming local edits when an installed extension simply does not provide the requested type (typically an older version), and stop serve from suggesting a pull of the webhook scheme name. The intact inspection gains installedVersion and loadFailures (path-prefix match on the canonical pulled root); the resolver emits a new installedWithoutType event with a hedged upgrade hint (swamp extension update) when the registry has a newer version, keeping the existing local-edits/--force message only when the extension's sources actually failed to load or failure state is unknown.. The fix has been merged and a release is on its way. We appreciate your contribution to swamp.
Sign in to post a ripple.