extension source rm leaves stale @local/. rows in catalog, blocking later pulls of registry types
extension push drops binaries: field from re-emitted archive manifest.yaml
macOS launchd autoupdate (club.swamp.autoupdate) silently fails — binary stays stale
Clicking @hivemq/honeycomb extension card on /extensions shows 'Something went wrong'
Docs: Update model-definitions.md and workflows.md for direct type execution
Docs: document binaries manifest field in extension-manifest.md
Add an official @swamp/ssh extension for general-purpose SSH (brownfield-friendly)
Accept and display binaries field from extension push metadata
Direct type execution: collapse model create + method run into one command
Per-method telemetry events for workflow runs
Workflow run liveness: orphaned 'running' records when originating CLI process dies mid-run
Provide a CLI-shape primer for AI agents to reduce rediscovery overhead
quality rubric: don't penalize extensions whose upstream constrains them to a single platform
Extension update rejects multiple .ts files extending the same target type within one local extension (regression)
swamp extension push deadlocks when invoked from inside a swamp workflow step
Collective-scoped auth keys + OIDC federation for CI publishing
forEach self.* in modelIdOrName not resolved in runtime execution path
Award leaderboard points for referrals and collective invites
Add agent harness detection and AiTool to telemetry
Workflow-level runtime expressions (env.*, vault.*) not resolved in driverConfig — docker driver receives literal ${{ ... }} strings
Implement W5: Per-fingerprint import URLs + subprocess test harness (extension catalog rearchitecture)
swamp config set crashes with YAML serialization error
datastore compact: VACUUM fails in compiled binary (SQLITE_LIMIT_ATTACHED=0)
Repo-level version gating: minSwampVersion high-water mark for team consistency
Docs: document self.* expressions in modelIdOrName during forEach
Docs: How-to guide for background autoupdating
Manifest version bumps silently ignored for existing local extension aggregates
materialiseExtensions misclassifies pulled rows when manifest name collides with a pulled extension
Local extension edits don't reliably trigger rebundle
Missing unique indexes on user.email and user.username allow duplicate users
Resolve self.* expressions in modelIdOrName during forEach expansion
discord-bot double-sends sign_up notifications
Discord bot sends duplicate signup notifications
Add 'swamp workflow list' as alias for 'swamp workflow search'
Add 'swamp auth status' as alias for 'swamp auth whoami'
Extension bundle cache does not invalidate on source edits
extension pull fails on @local/[email protected] phantom-claim collision when local repo has its own extension
Lab search by numeric issue ID returns no results
W3 sourceToRow writes empty source_mtime — should carry filesystem mtime through Source entity
Warm-start rebundleAndUpdateCatalog should respect terminal RowStates set by reconcile
Implement W4: KindAdapter + unified loader (extension catalog rearchitecture)
Docs: add vault read-secret command to reference manual
Extension layer garbage collection: prune catalog rows + evict orphaned bundles
Docs: document workflow concurrency limits in reference manual
Locally-sourced extension: source_mtime updates without regenerating stale bundle
Extension push: allow shipping executable host helpers (bin/mudroom blocker)
Vault expressions silently deliver __SWAMP_VSEC__ sentinels under the docker driver
First-class shell-shim support for extensions, with registry-level visibility
Local extension model bundles don't rebuild when source changes (no rebuild CLI; manual cache delete breaks the runner)
Configurable concurrency limits for workflow fan-out (forEach, parallel jobs/steps)
feat(security): redact sensitive method arg values from audit log
docs: document swamp datastore compact and GC WAL behaviour
UAT: swamp datastore compact reclaims WAL and catalog space
Plan v4 step 9 literal test untestable under current catalog PK semantics
Cross-process concurrency stress for W2 lifecycle services
UAT additions for W2 lifecycle services (Install/Remove/Upgrade)
Implement W3: ReconcileFromDisk + freshness-as-aggregate-query (extension catalog rearchitecture)
doctor extensions repair: clean catalog-only orphans
Extensions should be able to ship Claude Code skills
Pre-existing TOCTOU windows in YAML repo walkers (findAll directory level + findById)
`swamp datastore setup` migration is not resumable / leaves the repo in a partial state on failure
Built-in models must honor AbortSignal so --timeout works in practice
Reader-lock or lock-free read path for data list/get/search/query
data search: surface jobTag alongside workflowTag and stepTag (follow-up to #237)
global-arg silently strips unknown keys; should reject via strict Zod schema
redmine extension: adopt state machine patterns from @magistr for agent-driven workflows
performance degrades significantly with large SQLite catalog
summarise: timeout/hang on repos with many workflow runs
extension quality/fmt fail on pulled extensions (path mismatch)
vault: add read-secret CLI command for agent-driven secret retrieval
data query: stepName and jobName fields always empty in CEL results
Extension ecosystem: shared utility library, version sync tooling, and HTTP resilience patterns
Agentic CLI improvements: --json stdout isolation, array inputs, and --repo-dir consistency
data delete fails with "Directory not empty (os error 39)" when concurrent writes are active
Extract LockfileRepository (W2 prequel for swamp-club#231)
Extend DatastoreSyncService.markDirty() with optional relPath argument
Implement W2: Lifecycle services own the catalog write (extension catalog rearchitecture)
data·delete logger double-quotes the data name in log output
DDD: refactor data services to depend on domain-side ports instead of infrastructure types
Detect AWS CredentialsProviderError in @swamp/aws-sm-vault and prepend SSO-expiration hint
Opt-in background autoupdate for the swamp binary (configurable cadence + risk tolerance)
Detect AWS CredentialsProviderError in summarizeSyncError and prepend SSO-expiration hint
S3 datastore hydrate has no fallback for buckets without .datastore-index.json
S3 datastore stale-lock retry loop never evicts orphan locks left by swamp processes that panic at shutdown
Implement W1b: Repository and RowState (extension catalog rearchitecture)
Redundant push after pullChanged: localMtime clobbered by pullIndex(forceRemote)
Docs: update datastore-configuration manual after #220 setup-hydration fix lands
workflow run search returns empty after S3 datastore setup, despite run YAMLs in datastore
CLI crashes with exit 134 (Rust panic in tls_wrap.rs) after successful command output
S3 datastore global lock enters infinite stale-lock loop after interrupted workflow
swamp-extension-model skill: include description field in upgrades quickref
swamp-extension-model skill: include field in upgrades quickref
Adversarial UAT test: missing cached bundle with intact catalog should self-recover
Port importBundleByPath ENOENT fallback to datastore/driver/vault/report loaders
`swamp datastore setup` (filesystem→S3 migration) panics in deno Node TLS layer mid-migration
swamp model type describe fails with 'No such file' instead of rebundling when bundle is missing
Implement W1: Repository and RowState (extension catalog rearchitecture)
feat: swamp extension verify — opaque extension-lifecycle verification primitive
Schema-invalid extensions loop in rebundle path: catalog row never updates after first failed validation
swamp model type search is slow (~8s) and re-bundles all extensions on every call
Per-extension layout migration drops Claude skill from @magistr/good-planning
swamp extension outdated crashes on empty repo (Stream ended...)
Docs: extension install/pull/update sync-to-manifest behaviour
Add process-level install lock around installExtension
Docs: extension commands reference
swamp extension install/pull does not prune source files dropped between versions, causing catalog to re-index orphans
Catalog retains stale source-file entries when extension version drops a file; no native prune/repair
Document and surface a native cache-refresh path so agents stop doing cache surgery
swamp should warn when installed extensions are outdated
Catalog retains stale source-file entries when extension version drops a file; no native prune/repair
Document and surface a native cache-refresh path so agents stop doing cache surgery
swamp should warn when installed extensions are outdated
Skill/prompt guidance: prefer the bundled deno when no system deno is on PATH
Vault backend backed by GitHub Actions Secrets (read via gh token)
Re-enable Windows tests as deno compile for Windows lands
swamp-club extension card no longer exposes @ns/slug as contiguous text
Docs: multi-tool repo support
swamp vault: vendor-specific annotations (e.g. 1Password notesPlain, tags, custom fields)
swamp model method run: --foreach to fan out across instances
swamp workflow validate: actionable error messages and template scaffolds
swamp CLI cold-start latency (~5–7 s per invocation) compounds in workflows that shell out
Workflow tasks should support ephemeral model instances (modelType + globalArgs) so workflows are zero-prereq
CEL expression evaluator throws 'Unhandled node type: string'
cli: agents need to add ripples (comments) to issues via the CLI
quality: models and additionalFiles paths resolve relative to different directories
quality: has-readme/has-license miss additionalFiles in subdirectories
Add swamp data delete command to remove a data artifact by model and name
add `swamp doctor extensions` subcommand for on-demand extension load diagnostics
AI agent skipped adversarial review step before smoke testing extension code
Better Auth rejects requests on hostnames not in hardcoded trustedOrigins (signup/signin broken on non-canonical hosts)
Local extension models in extensions/models are not discovered in fresh repo tutorial flow
ticket 1138 not clear - can we still use github?
Drag Windows into the Swamp
Add `swamp extension test` command to run built-in extension tests with coverage
swamp repo init --tool kiro does not create .kiro/settings/cli.json
Support multi-agent repo initialization (multiple --tool targets)
CLI dumps 300-line Cliffy Command object on unknown flags / subcommands
Docs: repository-configuration.md missing defaultDriver / defaultDriverConfig
Server-side parse query params on /lab/all so refresh preserves multi-filter URLs
fast-path sidecar TOCTOU: post-op HEAD can record generation from a concurrent writer's push, masking their data on next sync
Scorer should honour files/deno.json imports so bare specifiers resolve
@swamp/gcs-datastore: same minutes-slow zero-diff sync cliff as lab/164; mirror fingerprint fast path
cleanup for repoDriver
swamp datastore sync is minutes-slow at 4k-file scale even with zero-diff; outer 300s timeout fires
swamp-extension-publish skill: add quality rubric check before push
New @swamp extension: extension quality rubric checker for CI
swamp-extension-quality and swamp-extension-publish skills don't guide zod import map resolution for scorer
swamp repo upgrade deletes extension model source files
Add repo-level `defaultDriver` to `.swamp.yaml`
User report extensions registered lazily are silently skipped during method execution
swamp extension install: datastore push hangs ~8.5m then crashes with Deno TLS panic (tls_wrap.rs:1918 unwrap on None)
Add a preflight diagnostic for AI-tool audit integrations (so upstream CLI changes stop breaking us silently)
audit record --from-hook silently drops input from kiro-cli postToolUse hooks
codegen pipelines don't detect _lib/*.ts changes so manifest CalVer never bumps
Link to namespace extensions listing from profile pages
Trailing slash on /extensions/@<namespace>/ returns 404
No way to browse all extensions belonging to a collective by URL
DatastoreProvider.resolveCachePath declared optional but silently required at runtime
Accept-invite link returns HTML instead of JSON, breaking collective join
additionalFiles flatten to basenames on push and lack a runtime access API, creating a source-vs-pulled layout mismatch
Extension search returns inflated results for quoted phrase queries
Docs: document jsr:/https: imports and non-local pinning convention in user-facing manual
First-class jsr: specifier support in extension bundler
Cross-extension code sharing via manifest exports field
Extension models: document/resolve implicit-any in execute parameters when imported by test files
extension yank: allow unyank and version-specific yanks
extension source add does not discover brand new types — only overrides already-pulled types
Add light mode to swamp.club and swamp open UI
Add 'swamp open' command to open the swamp.club web UI
Add light mode to swamp.club website
Datastore sync surfaces opaque errors from extensions verbatim — no status code or body preview
@swamp/s3-datastore: first-attempt 403 masked as "UnknownError" from AWS SDK deserializer
Extension auto-resolve reports "already_installed" for truncated pulled-extension trees
Email delivery for mention notifications
Auto-update WARN is silent in --json mode (logger suppresses non-fatal)
open.ts web UI uses force:true pullExtension, same data-loss family as #126
Port bundle_freshness (content-fingerprint cache invalidation) to reports / drivers / datastores / vaults loaders
Mentions and notifications system for issues
Datastore auto-update in resolve_datastore.ts uses force:true, risking silent overwrite of local edits
Per-repo user-extension bundle cache doesn't invalidate on source changes
Adding methods to in-body `methods:{}` on `export const model` doesn't re-register
User extensions silently dropped when base type not yet registered at scan time
Footer floats when page content is shorter than viewport
workflow validate can silently overwrite local edits to pulled extensions via force-pull in auto-resolver
Extension pull should namespace files by extension to prevent filename collisions
Update CLAUDE.md co-author instructions to use swamp-club issue author lookup
Add swamp issue get CLI command to fetch issue details
swamp-club API: include issue author in GET /api/v1/lab/issues/{number} response
Install command curl-pipe-sh overflows the component on swamp.club homepage
'Assigned to me' overlaps 'Privacy policy' on short viewports
Collapsible left rail and repositionable right rail in Lab
Usernames aren't linked to their profile pages
Filter lab issues by author (opened by user)
Add skills extension type for bundling agent/human guidance documents
Remove traffic lights in column 2 of /lab
Multi-select combo filtering on /lab
data gc skips version-count GC when no lifetime-expired data exists
Content filter should identify the flagged word or phrase
Bog flow: text rendering and layout issues
Flow modal: text rendering issues
Normalize text sizing across issue list and detail views
Description 'Show more' button appears even when text fits
Inline editing: click-to-edit fields instead of pencil icons
Persist lab filter selection in localStorage
Update how-to guide with swamp-extension-publish skill
Fix incorrect favicon in Google search results
Missing section on user profile page for wendy
Extension skills missing repository initialization and publishing prerequisites
Vault CEL expressions replaced with VaultSecretBag sentinels after model type upgrade
Audit: modelRegistry.get() without ensureTypeLoaded() in YAML repository save() paths
Cross-model expression validator fails on lazy-loaded types — modelRegistry.get() bypasses ensureTypeLoaded
forEach.in with data.latest() throws misleading 'got: object' error for unresolved Promise
issue-lifecycle models should support --assignee for swamp.club issues
Driver capability registry: declare richer execution capabilities at driver design time
Consolidate MethodReportContext construction — manual and workflow report paths build contexts divergently
Workflow-level workspace for docker driver: stateful multi-step workflows
"OG Swamper" badge inconsistent
Workflow-scope user extension reports don't execute: getAll() excludes lazy-loaded reports
Improve skill trigger routing accuracy across models
Add GitHub Copilot IDE support
Phase 1: /feed — judge-gated content stream
Add reactions and Giphy integration to comments
Architecture violation: search route imports directly from lib/infrastructure
Introduce domain events to formalize the telemetry-to-consumer pipeline
Refactor: move telemetry track() calls from route handlers to application services
Reindex path feeds error events to consumer, bypassing filtering
Custom swamp-themed avatar generator with daily rerolls
Profile content links with scoring for community contributions
Score extension pull events for extension authors
Score daily sign-in events with streak multiplier
Score sign_up events in the telemetry pipeline
Score extension publish events in the telemetry pipeline
Add 'award' telemetry event type for arbitrary score grants
Bug: authenticated pulls always shows 0 on profile page
Decouple identity_map from main app: username renames via event, not shared DB
Optimise MongoDB Search Queries
Transactional emails on login with google/similar
Add rate limiting to send-verification-email endpoint
Add authentication or rate limiting to check-verified endpoint
swamp data query for morning-message in hello-world tutorial returns nothing.
Document vault migrate command in reference docs
Locks on long running actions
issue-lifecycle skill: improve resumption and close-out guidance
deprovision: firewall deletion fails with resource_in_use immediately after server delete
swamp workflow validate should check step inputs against method's required arguments
data.latest() returns null when new data written while _catalog.db is already marked populated
Bundle cache fallback silently skipped when source and bundle have equal mtimes
Add vault migrate command to move secrets between vaults
Consolidate method execution paths — workflow steps and manual runs build MethodContext divergently
CatalogStore constructor runs createSchema before migrateIfNeeded; v1→v2 upgrade fails on existing repos
discord-bot poller double-processes events with >1 replica
datastore sync: clean up zombie _catalog.db* entries from remote index and S3 bucket
datastore sync --push runs pushChanged() twice per invocation (coordinator dedup)
datastore sync --push fails on _catalog.db-wal: catalog SQLite DB lives inside the S3 sync cache
.swamp/datastore-bundles/ leaks into deno lint and deno fmt scans
deno run audit task missing --allow-env flag
Error when submitting a new issue manually
Green text on issue details is a lot
evals/promptfoo: bump hono and @hono/node-server to clear 6 dependabot alerts
issue-lifecycle: COMMENTED PR review can overwrite a prior decisive state in fetchPrReviews
Add agent-constraints/ for issue-lifecycle skill
@swamp/aws/ec2: auto-generated models lack list, tag, and factory-compatible update methods
@swamp/digitalocean/space-key stores secret in plaintext - should mark as sensitive
Add Azure provider pipeline to codegen
feat: Namespace.so execution driver for remote workload execution
Add macOS Keychain vault type
Add uniform bucket-level IAM support to @swamp/gcp/storage
Expand DataRecord with first-class provenance fields; remove all hidden scoping from data access
feat: Private extensions
Workflow execution repeats #1091: cross-model CEL expression validation fails for unresolved types
context.readModelData returns different results depending on invocation context (manual vs workflow)
Handle sensitive fields gracefully when no vault is configured
Vault reads for model global arguments are cached at workflow start, making in-workflow token refresh ineffective
feat: approval gates for workflow steps and jobs
Install script: curl fails TLS verification for swamp.club (certificate chain)
Extension Patches: contribution workflow for community extensions
Feature: swamp issue for extensions — bug reports, security disclosures, and author notifications
Support 'swamp <app> run' as containerized entrypoint for easy onboarding
Persistent runner / server mode to eliminate per-invocation CLI startup overhead
feat: add support for Nix via a flake
#200 Document and surface a native cache-refresh path so agents stop doing cache surgery
Opened by bixu · 5/1/2026
Problem
When an extension behaves unexpectedly after swamp extension pull --force, it is not obvious how to force swamp to actually pick up the new bundle. In a recent debugging session I (an LLM agent) ended up doing destructive cache surgery — rm -rf .swamp/bundles && rm -f .swamp/_extension_catalog.db* — to get swamp to load a freshly-pulled bundle, because pulling alone (even with --force) did not invalidate the catalog and the model kept executing the old code path. That is the wrong instinct for an agent: it bypasses swamp's invariants and risks breaking other state.
The correct command turned out to be swamp extension update <name>. Once I used it, the new bundle loaded immediately and cleanly. But there was nothing in the --help output, error messages, or logs that pointed me there. The visible options after pull not seeming to take effect were:
swamp extension pull --force(insufficient — catalog still resolved old bundle)- delete files under
.swamp/manually (worked but is invasive and undocumented)
Why this matters for agents
Coding agents make decisions from --help output and error messages. When the natural-looking command (pull) doesn't fully refresh the runtime, and the actual fix (update) isn't surfaced anywhere near the symptom, agents will reach for rm -rf long before they discover the right subcommand. That's both unsafe and embarrassing.
Proposed fixes (any subset would help)
- Make
swamp extension pull --forceinvalidate the resolution catalog so the nextswamp model method runpicks up the new bundle without an additional command. Ifpullcannot do this for some reason, document the constraint inline. - In
swamp extension pulloutput, mentionswamp extension updateas the recommended path for refreshing an already-installed extension to a newer version. - Add a one-line hint when a model resolves to a stale bundle — e.g., when the in-flight bundle hash doesn't match the latest pulled extension's hash, log "hint: run
swamp extension update <name>to refresh". - Document this in the
swamp-troubleshootingskill (and any agent-facing docs): "if a freshly-pulled extension doesn't seem to take effect, useswamp extension update, not file deletion."
Concrete repro
swamp extension pull '@hivemq/harvester/kubeconfig' --force— claimed to extract new filesswamp model method run <model> fetch— still ran the old code path- After file-system surgery (
rm -rf .swamp/bundles .swamp/_extension_catalog.db*+ re-pull), new code loaded - Later discovered
swamp extension updatedoes the same cleanly
Closed
No activity in this phase yet.
stack72 commented 5/6/2026, 11:06:41 PM
Closing — verified fixed on current main.
Empirical reproduction across three variants (pull --force, update, pull without --force) all produce identical clean catalog transitions: 106 rows move from 2026.04.23.3 → 2026.05.02.1, zero stale rows remain, method execution uses new code.
Root fix: W2 (#231 / PR #1295) introduced InstallExtensionService. Phase 8 (install_extension_service.ts:168-182) detects existing aggregates at a different version and atomically tombstones them via saveAll([tombstoneAll(vOld), vNew]) in a single SQLite transaction. Both pull --force and update converge on this path.
The dangerous behavior (stale catalog requiring rm -rf surgery) is structurally impossible after W2. Reported swamp version was 20260206.200442.0 — predates W2.
The original UX proposals (mention update in pull output, stale-bundle hint, troubleshooting docs) were workarounds for the underlying bug and aren't needed now that the bug is gone.
bixu commented 5/8/2026, 12:12:09 PM
Nice!
Sign in to post a ripple.