Releases: systeminit/swamp
swamp 20260409.150846.0-sha.2f0b632b
What's Changed
- fix: make CatalogStore required on FileSystemUnifiedDataRepository (#1157)
Summary
- Make
CatalogStorea required constructor parameter onFileSystemUnifiedDataRepository, turning missing-catalog bugs into compile errors - Fix the root cause of swamp-club#39:
executeModelMethodinWorkflowExecutionServicecreated a data repo without catalog write-through, sodata.latest()returned null for data written by workflow steps - Add
createCatalogStore()factory helper to centralize catalog construction - Make
queryDatarequired onModelMethodRunDepsandcatalogStorerequired onWorkflowRunDeps - Remove redundant
?.optional chaining oncatalogStoreacross CLI/serve code - Update
design/data-query.mdto reflect required semantics
Test Plan
-
deno checkpasses (type system enforces catalog presence at all 120+ call sites) -
deno lintclean -
deno fmtclean - All 4280 tests pass
- Reproduced bug scenario in scratch repo: workflow with write step →
data.latest()read step now succeeds (previously failed withNo such key: attributes)
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.150846.0-sha.2f0b632b/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.150846.0-sha.2f0b632b/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.150846.0-sha.2f0b632b/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.150846.0-sha.2f0b632b/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260409.150542.0-sha.c66cf3c3
What's Changed
- docs: add concurrency guidance and lock contention warnings to skills (#1156)
Summary
- Adds a design checkpoint to the swamp-model skill's Workflow Example that prompts users to consider concurrency before creating a model — asking whether methods will run concurrently or be long-running, and guiding them to the factory pattern
- Updates the factory pattern description to call out both data reuse AND concurrency as motivations (separate instances = separate locks)
- Adds a lock contention warning to the workflow data-chaining reference, clarifying that steps on the same model serialize on the per-model lock despite being in the same job
Addresses swamp.club/lab#43 — users hitting model locks during long-running operations because they didn't know to split concerns into separate model instances.
Test plan
-
deno fmt --checkpasses -
deno lintpasses -
deno run testpasses (4280 tests) - Verify skill triggers the design checkpoint when a user asks to create a model with multiple methods
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.150542.0-sha.c66cf3c3/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.150542.0-sha.c66cf3c3/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.150542.0-sha.c66cf3c3/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.150542.0-sha.c66cf3c3/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260409.145735.0-sha.0ec80580
What's Changed
- fix: use >= for bundle cache mtime comparison to handle equal timestamps (#1155)
Summary
- Changed bundle cache mtime comparison from strict
>to>=in all 5 user extension loaders (models, reports, datastores, vaults, drivers) - When source and bundle files share the same mtime (e.g. written in the same second during a pre-commit hook), the cached bundle is now correctly used instead of triggering a rebundle that may fail
- Added unit test verifying cached bundle is served when source and bundle have equal mtimes
Closes systeminit/swamp-club#38
Test Plan
- New unit test:
bundleWithCache uses cache when source and bundle have equal mtimes— sets source and bundle to identical mtime viaDeno.utime, verifies cache is used without rebundling - All 51 existing
user_model_loader_test.tstests pass - Verified fix against manual reproduction in
/tmp/swamp-repro-issue-38— with equal mtimes the compiled binary now logsUsing cached bundleinstead of rebundling -
deno check,deno lint,deno fmtall pass
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.145735.0-sha.0ec80580/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.145735.0-sha.0ec80580/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.145735.0-sha.0ec80580/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.145735.0-sha.0ec80580/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260409.133827.0-sha.0283af0a
What's Changed
- fix: add application-level retry for SQLite init under concurrent access (#1154)
Summary
- Adds exponential backoff retry (up to 5 attempts) around
PRAGMA journal_mode=WALand schema creation in bothCatalogStoreandExtensionCatalogStore - Fixes "database is locked" crashes when multiple
swamp workflow runprocesses start concurrently and race to initialize the same SQLite database - The existing
busy_timeout=5000pragma doesn't reliably cover the journal mode switch in Deno'snode:sqlite, so application-level retry fills the gap
Test Plan
- Existing
CatalogStore: constructor retries under write lock contentiontest passes - Full test suite passes (4249 tests)
-
deno check,deno lint,deno fmtall clean - UAT adversarial test
swamp workflow run concurrently produces distinct data versionsshould now pass
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.133827.0-sha.0283af0a/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.133827.0-sha.0283af0a/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.133827.0-sha.0283af0a/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.133827.0-sha.0283af0a/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260409.133339.0-sha.fe91dbed
What's Changed
- feat: add post-PR lifecycle phases and ship method (#1153)
Summary
- Adds two new phases (
pr_failed,releasing) betweenpr_openanddonefor visibility into CI failures and release builds - Adds three new methods:
pr_merged(pr_open → releasing),pr_failed(pr_open → pr_failed),ship(releasing → done) - Adds
pr-cooldowncheck enforcing a 3-minute wait afterlink_prbefore checking PR status, giving CI time to run - Enables recovery from
pr_failedvialink_pr(re-link) orimplement(major rework) - Adds skill guidance requiring human confirmation before opening PRs
Test Plan
-
deno check— type checking passes -
deno lint— no lint errors -
deno fmt— all files formatted -
deno run test— all 4260 tests pass (26 in lifecycle + schema tests) -
deno run compile— binary compiles successfully - Manual: create an issue-lifecycle instance, walk through
link_pr → pr_merged → shipflow - Manual: verify
pr_failed → link_prrecovery loop works
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.133339.0-sha.fe91dbed/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.133339.0-sha.fe91dbed/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.133339.0-sha.fe91dbed/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.133339.0-sha.fe91dbed/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260409.132650.0-sha.4f579e9f
What's Changed
- feat: add vault migrate command (#1150)
Summary
- Add
swamp vault migrate <vault-name> --to-type <type>command that migrates a vault's backend in-place, preserving the vault name so all existing vault reference expressions keep working - Extract provider instantiation into shared
vault_provider_factory.tsused by bothVaultServiceand the migrate operation - Support
--dry-runpreview,--configfor backend-specific settings, and per-secret progress output in both log and JSON modes
Fixes swamp-club#37
Test Plan
- Unit tests for
createVaultProviderfactory (built-in types, unsupported type error, case insensitivity) - Unit tests for
vaultMigrategenerator (secret copying, config swap, vault-not-found error, unknown-type error, empty vault, delete failure tolerance) - Unit tests for
vaultMigratePreview(preview data, not-found, same-type rejection, unknown-type rejection) - Existing
VaultServicetests still pass afterregisterVault()refactor -
deno check— no type errors -
deno lint— clean -
deno fmt— formatted - Full test suite — 4249 tests pass
-
deno run compile— binary compiles
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.132650.0-sha.4f579e9f/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.132650.0-sha.4f579e9f/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.132650.0-sha.4f579e9f/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.132650.0-sha.4f579e9f/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260409.123129.0-sha.60154152
What's Changed
- fix: improve issue-lifecycle skill resumption and close-out guidance (#1152)
Summary
Fixes #42. Three documentation improvements to the issue-lifecycle skill:
- Fix resume command: Replace
swamp model get(returns model definition) withswamp data get issue-<N> state-main --json(returns current phase), and add a phase-to-action reference table - Add in-flight guard: New "Before You Start" section in
references/triage.mdchecks if the issue is already past triage before allowingstart— prevents agents from accidentally resetting progress - Add close-out workflow: New "Closing Out a Shipped Issue" section documents how to mark a shipped issue as done (
link_pr→complete) - Add
startsafety warning: Blockquote in triage.md clarifying thatstartunconditionally resets phase totriaging
Test Plan
-
deno fmt --checkpasses -
deno lintpasses -
deno run testpasses (4236 tests) - SKILL.md stays under 500 lines (168 lines)
- Verified phase-to-action table matches
TRANSITIONSinextensions/models/_lib/schemas.ts
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.123129.0-sha.60154152/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.123129.0-sha.60154152/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.123129.0-sha.60154152/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.123129.0-sha.60154152/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260409.110035.0-sha.fea283d4
What's Changed
- feat: validate step inputs against method/workflow required arguments (#1151)
Summary
swamp workflow validatenow checks that each step'sinputs:block provides all required arguments for the target method or workflow- For
model_methodtasks: resolves model type, looks up method's Zod argument schema, reports missing required fields - For
workflowtasks: looks up nested workflow's JSON Schema inputs, reports missing required inputs - Dynamic CEL references (
${{ }}) in model/workflow names are gracefully skipped - Models/workflows not found produce pass-with-skip (not hard failure)
- Updates swamp-workflow skill docs with new validation checks
- Fixes vary integration test to provide required
runinput
Closes #40
Test Plan
- 27 unit tests for
DefaultWorkflowValidationService(13 new for step input validation covering both task types) - 4 libswamp validate integration tests (updated for async)
- Full test suite passes (4249 tests)
- Manual verification with compiled binary against a scratch repo:
Missing required input (run omitted from command/shell model)
$ swamp workflow validate bad-workflow --repo-dir /tmp/swamp-repro-issue-40
Validating: bad-workflow
✓ Schema validation
✓ Unique job names
✓ Unique step names in job 'deploy'
✓ Valid job dependency references
✓ Valid step dependency references in job 'deploy'
✓ No cyclic job dependencies
✓ No cyclic step dependencies in job 'deploy'
✗ Step inputs for 'deploy-step' in job 'deploy' (my-deployer.execute)
→ Missing required inputs: run
Summary: 7/8 validations passed
Result: FAILED
All required inputs present
$ swamp workflow validate good-workflow --repo-dir /tmp/swamp-repro-issue-40
Validating: good-workflow
✓ Schema validation
✓ Unique job names
✓ Unique step names in job 'deploy'
✓ Valid job dependency references
✓ Valid step dependency references in job 'deploy'
✓ No cyclic job dependencies
✓ No cyclic step dependencies in job 'deploy'
✓ Step inputs for 'deploy-step' in job 'deploy' (my-deployer.execute)
Summary: 8/8 validations passed
Result: PASSED
Nonexistent method on model
$ swamp workflow validate bad-method-workflow --repo-dir /tmp/swamp-repro-issue-40
Validating: bad-method-workflow
✓ Schema validation
✓ Unique job names
✓ Unique step names in job 'job1'
✓ Valid job dependency references
✓ Valid step dependency references in job 'job1'
✓ No cyclic job dependencies
✓ No cyclic step dependencies in job 'job1'
✗ Step inputs for 'step1' in job 'job1' (my-deployer.nonexistent_method)
→ Method 'nonexistent_method' not found on model type 'command/shell'
Summary: 7/8 validations passed
Result: FAILED
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.110035.0-sha.fea283d4/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.110035.0-sha.fea283d4/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.110035.0-sha.fea283d4/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.110035.0-sha.fea283d4/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260409.105220.0-sha.85b004cb
What's Changed
- feat: enable parallel test execution for faster CI (#1149)
Summary
- Add
--parallelflag to thedeno testtask so test modules run concurrently across available CPU cores - Each module runs in its own subprocess with full process isolation (separate globalThis, env vars, memory)
- No test changes needed — temp dirs already use
Deno.makeTempDir(), ports use dynamic allocation
Expected impact
CI runs on ubuntu-latest (4 cores), so expect ~3-4x speedup on the test step. Local runs on machines with more cores will see even more improvement.
Test plan
- CI passes — this PR is the test. Compare test step duration against recent main builds
- If any flaky failures appear, investigate filesystem race conditions in integration tests
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.105220.0-sha.85b004cb/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.105220.0-sha.85b004cb/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.105220.0-sha.85b004cb/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.105220.0-sha.85b004cb/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260409.030033.0-sha.07dae003
What's Changed
- fix: wire DataQueryService to workflow execution paths (#1148)
Summary
data.latest(),findByTag(),findBySpec(), andquery()inModelResolverwere changed from sync filesystem reads to asyncDataQueryServicequeries in #1145, butDataQueryServicewas never wired in the workflow execution paths- This caused all four functions to silently return null/empty in workflows, breaking CEL expressions like
data.latest(...).attributes.stdout - Pass
CatalogStorethrough the deps chain (matching the existingRepositoryContextpattern) soWorkflowExecutionServicecreates its ownDataQueryServiceand wires it toModelResolver - Also pass
CatalogStoretoFileSystemUnifiedDataRepositoryfor write-through, matchingrepository_factory.ts - Bumps architecture ratchet from 12 → 13 for the legitimate
data <-> workflowsmutual dependency
Test Plan
-
deno checkpasses -
deno lintpasses -
deno fmtpasses - Full test suite passes (4236 tests, 0 failures)
- Architecture boundary ratchet test passes at 13
- Fixes UAT failures in
vary_dimensions_test.ts:swamp workflow run CEL data.latest reads correct varied data per environmentswamp workflow run reads varied data written by another workflow
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.030033.0-sha.07dae003/swamp-darwin-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/macOS (Intel):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.030033.0-sha.07dae003/swamp-darwin-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (x86_64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.030033.0-sha.07dae003/swamp-linux-x86_64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/Linux (aarch64):
curl -L https://github.com/systeminit/swamp/releases/download/v20260409.030033.0-sha.07dae003/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/