Releases: systeminit/swamp
swamp 20260305.174423.0-sha.791ef0b9
What's Changed
- fix: command/shell throws on non-zero exit codes (#615)
Summary
Fixes #614 — workflows reported "succeeded" even when shell commands failed (e.g., nvidia-smi: command not found).
Problem
command/shell captured exit codes as data but never threw on non-zero values. The workflow engine determines step success by whether the method throws, so every shell step was treated as successful regardless of the command's actual outcome.
Why this approach
The simplest correct fix is to make command/shell throw before writing any data when the exit code is non-zero:
- Throw before data writes — failed commands should not persist incorrect or misleading result data. If the command failed, there's nothing useful to store as a "result".
- No engine changes needed — the existing workflow engine try/catch chains already handle
stepRun.fail(),allowFailure, and error logging. Making the model throw is the standard convention for signaling failure. ignoreExitCodeopt-out — an optionalignoreExitCode: trueattribute is available for definitions where non-zero exits are expected and the caller wants data persisted regardless.
Changes
src/domain/models/command/shell/shell_model.ts— AddedignoreExitCode(optional boolean) toShellInputAttributesSchema. ThrowsErrorbeforewriteResource/createFileWriterwhen exit code is non-zero andignoreExitCodeis not set.src/domain/models/command/shell/shell_model_test.ts— Updated 4 tests to expectassertRejects, added 3 new tests (ignoreExitCode suppression, exit 0 normal return, no data on failure).integration/keeb_shell_model_test.ts— Updated failing-command test to expect CLI exit code 1.integration/workflow_new_architecture_test.ts— Fixed 15 model definitions that used invalid shell commands (bare strings like"Hello from model"instead of"echo 'Hello from model'"). These were silently failing before but passing because exit codes were swallowed.integration/input_override_validation_test.ts— Fixed CEL expression test input to be a valid shell command.- Skill docs (
SKILL.md,references/api.md,references/examples.md) — Added error handling guidance establishing the convention: check for failure first, throw before writing data, only persist data on success.
User impact
- Breaking change for workflows using
command/shellwith commands that exit non-zero. These workflows will now correctly report as failed instead of falsely succeeding. - Opt-out available: Add
ignoreExitCode: trueto any shell model definition that intentionally uses commands with non-zero exit codes. allowFailure: trueon workflow steps continues to work — the engine catches the exception and allows the workflow to proceed.
Test Plan
-
deno check— passes -
deno lint— passes -
deno fmt— passes -
deno run test— 2692 passed, 0 failed -
deno run compile— binary compiles
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260305.174423.0-sha.791ef0b9/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/v20260305.174423.0-sha.791ef0b9/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/v20260305.174423.0-sha.791ef0b9/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/v20260305.174423.0-sha.791ef0b9/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260305.173959.0-sha.791ef0b9
What's Changed
- fix: update AWS SDK and Azure deps to resolve vulnerabilities (#616)
Summary
- Update
@aws-sdk/client-cloudcontroland@aws-sdk/client-secrets-managerfrom 3.993.0 → 3.1002.0 - Update
@azure/identityfrom 4.8.0 → 4.13.0 and@azure/keyvault-secretsfrom 4.9.0 → 4.10.0
Vulnerabilities Fixed
- GHSA-fj3w-jwp8-x2g3 (Low severity):
fast-xml-parserstack overflow DoS via@aws-sdk/client-cloudcontrol→fast-xml-parser@5.3.6. Fixed infast-xml-parser@5.3.8+, pulled in by the AWS SDK update. - GHSA-869p-cjfg-cm3x (High severity):
jwsHMAC signature verification flaw via@azure/identity→@azure/msal-node→jsonwebtoken@9.0.2→jws@3.2.2. The Azure update resolvesjsonwebtokento 9.0.3 which depends onjws@^4.0.1(patched).
Test plan
-
deno checkpasses -
deno run test— all 2689 tests pass -
scripts/audit_deps.tsreports no known vulnerabilities after update
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260305.173959.0-sha.791ef0b9/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/v20260305.173959.0-sha.791ef0b9/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/v20260305.173959.0-sha.791ef0b9/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/v20260305.173959.0-sha.791ef0b9/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260305.154608.0-sha.745c2449
What's Changed
- fix: add rules preventing AI agents from generating UUIDs (#613)
Summary
- Added "CRITICAL: Creation Rules" sections to workflow, model, and vault skills explicitly prohibiting manual UUID generation (
uuidgen,crypto.randomUUID(), etc.) - Replaced all fake placeholder IDs (
abc-123,run-456,def-456,ghi-789,jkl-012,output-789,data-789, etc.) with valid UUIDs across all skill files and references - Removed duplicate "Never modify the
idfield" lines from Edit sections (now covered by the top-level rules)
Fixes #612
Test plan
-
deno fmtpasses -
deno lintpasses -
deno run testpasses (2689 tests, 0 failures) - Verified no fake IDs remain via grep sweep
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260305.154608.0-sha.745c2449/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/v20260305.154608.0-sha.745c2449/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/v20260305.154608.0-sha.745c2449/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/v20260305.154608.0-sha.745c2449/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260305.124013.0-sha.c6be936d
What's Changed
- fix: externalize all npm packages in extension bundler (#611)
Fixes #609
Summary
- Replace
--external npm:zod@4 --external npm:zodwith--external npm:*in the extension bundler so all npm packages are externalized - Update docs and skill references to reflect the new bundling behavior
Problem
When extensions import npm packages like @aws-sdk/client-s3 that transitively depend on tslib (a CJS module), deno bundle inlines the package and wraps the CJS code in a __toESM bridge. This bridge produces import_tslib.default === undefined, causing runtime destructuring failures:
Cannot destructure property '__extends' of 'import_tslib.default' as it is undefined.
Fix
Use --external npm:* to externalize all npm packages. They are left as npm: specifiers in the bundled output and resolved at runtime by Deno's native npm resolver, which handles CJS/ESM interop correctly.
Why --external npm:* and not --packages external
The original plan was to use --packages external, which is documented in deno bundle --help. However, testing on deno 2.6.8 showed it does not actually externalize npm packages — it silently inlines everything (510KB bundle for a file that only imports zod). The --external npm:* wildcard flag achieves the intended behavior and actually works.
Why JSR imports are unaffected
--external npm:* only targets npm packages. JSR (jsr:) and HTTPS imports are still bundled and inlined. This is correct because:
- JSR packages are native ESM — they don't have CJS interop issues
- JSR packages don't need instance sharing — unlike zod, there's no
instanceofconcern - They're self-contained — inlining them keeps bundles portable
What this means for extension bundles
| Import | Before | After |
|---|---|---|
npm:zod@4 |
Externalized | Externalized |
npm:@aws-sdk/client-s3@3 |
Inlined (broken CJS) | Externalized |
npm:yaml@2.7.1 |
Inlined | Externalized |
jsr:@std/path |
Inlined | Inlined |
https://deno.land/... |
Inlined | Inlined |
Local .ts imports |
Transpiled & inlined | Transpiled & inlined |
npm packages are cached by deno bundle during bundling and reused at runtime — no extra download step.
Test plan
-
deno check— type checking passes -
deno lint— linting passes -
deno fmt— formatting passes -
deno run test src/domain/models/bundle_test.ts— all 4 bundle tests pass -
deno run test— full suite (2689 tests) passes -
deno run compile— binary compiles successfully
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260305.124013.0-sha.c6be936d/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/v20260305.124013.0-sha.c6be936d/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/v20260305.124013.0-sha.c6be936d/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/v20260305.124013.0-sha.c6be936d/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260305.123455.0-sha.650b8ad0
What's Changed
- feat: accept both US and UK English for summarise command (#610)
Summary
- Adds
.alias("summarize")to thesummarisecommand so bothswamp summariseandswamp summarizework - Audited all CLI commands —
summariseis the only command using a -ise/-ize verb. All others use dialect-neutral verbs (init,create,delete,run,search,validate,evaluate,describe,edit,get,push,pull,list,update, etc.) - The only built-in model method (
executeoncommand/shell) is also dialect-neutral - Internal code and filenames remain unchanged — this is purely an input alias
Closes #608
Test Plan
- Verified
swamp summarize --helpresolves correctly - Verified
swamp summarise --helpstill works - All 2689 tests pass,
deno fmt,deno lint, anddeno checkclean
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260305.123455.0-sha.650b8ad0/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/v20260305.123455.0-sha.650b8ad0/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/v20260305.123455.0-sha.650b8ad0/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/v20260305.123455.0-sha.650b8ad0/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260305.011558.0-sha.b591ba6a
What's Changed
- fix: invalidate bundle cache when local dependencies change (#607)
Summary
Fixes #605.
When iterating on extensions, swamp serves stale bundled code because bundleWithCache only checks the entry point file's mtime against the cached bundle. If a locally imported dependency changes, the cache is incorrectly treated as fresh — the dependency change is invisible to the cache check.
The fix
Replace the single-file mtime check with a full dependency graph mtime check:
- Stat the cached bundle to get its mtime
- Use
resolveLocalImports()to walk the entry point's local import graph and collect all.tsdependencies - Stat every dependency and find the newest mtime
- Only use the cache if the bundle is newer than all dependencies
This is correct because resolveLocalImports already existed and is well-tested — it recursively follows relative import/export statements within a boundary directory, which is exactly the set of files that deno bundle would process.
Architecture boundary
resolveLocalImports previously lived in extensions/. Importing it directly into models/ would have introduced a new extensions <-> models mutual dependency, caught by the architecture boundary ratchet test. To avoid this, the function was moved to models/local_import_resolver.ts (a natural home alongside bundle.ts), with extensions/extension_import_resolver.ts re-exporting for backward compatibility. No new cross-context dependencies.
Future optimisation
The current approach re-resolves the import graph on every cache check by reading each dependency file to parse its imports. For small-to-moderate extensions this is negligible, but for large dependency trees with many files it adds I/O. A future optimisation would be to persist the resolved dependency list alongside the cached bundle (e.g. a .deps.json sidecar file), so cache checks only need stat calls rather than file reads + regex parsing. This would reduce the cache-hit path to N stat calls with no file reads. This isn't necessary today but is a clear path forward if profiling shows it matters.
Test plan
- New test: model loader invalidates cache when dependency file changes
- New test: vault loader invalidates cache when dependency file changes
- All 2689 existing tests pass
- Architecture boundary ratchet test passes (no new mutual dependencies)
-
deno check,deno lint,deno fmtall pass -
deno run compilesucceeds
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260305.011558.0-sha.b591ba6a/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/v20260305.011558.0-sha.b591ba6a/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/v20260305.011558.0-sha.b591ba6a/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/v20260305.011558.0-sha.b591ba6a/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260305.002807.0-sha.56e4175a
What's Changed
- fix: bundle missing skill files in repo init and upgrade (#606)
Summary
- Add
swamp-extension-model/references/publishing.mdandswamp-vault/references/user-defined-vaults.mdtoBUNDLED_SKILLS— these files existed on disk but were never copied duringswamp repo initorswamp repo upgrade - Add a formatting requirement callout to the publishing guide so agents know
swamp extension fmtis a hard gate before push
Test Plan
-
deno fmt --checkpasses -
deno lintpasses -
deno run testpasses (2674/2674) - Run
swamp repo initin a fresh directory and verify both files are present
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260305.002807.0-sha.56e4175a/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/v20260305.002807.0-sha.56e4175a/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/v20260305.002807.0-sha.56e4175a/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/v20260305.002807.0-sha.56e4175a/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260304.213352.0-sha.2bb8ca15
What's Changed
- feat: add swamp summarise command (#604)
Summary
Closes #460
Adds a new swamp summarise command that gives users a single, high-level overview of all repo activity over a configurable time window — method executions, workflow runs, and data produced. Previously, understanding what happened in a repo required running multiple siloed commands.
Usage
swamp summarise [--since <duration>] [-v] [--json]
--since: Time window (e.g.1h,1d,7d,1w). Defaults to7d.-v: Verbose mode — shows per-run detail beneath each group.--json: Full structured JSON output for scripting/integration.
Default output
Activity summary (last 7d)
Direct Model Method Executions (6 total: 6 succeeded)
Model: echo-test (command/shell)
execute ✓ 5
Model: list-files (command/shell)
execute ✓ 1
Workflow Runs (2 total: 2 succeeded)
test-pipeline ✓ 2
Data (4 items, 12 versions, 2 models)
Verbose output (-v)
Activity summary (last 7d)
Direct Model Method Executions (6 total: 6 succeeded)
Model: echo-test (command/shell)
execute ✓ 5
2026-03-04 19:26 succeeded 11ms workflow
2026-03-04 19:26 succeeded 12ms workflow
2026-03-04 19:25 succeeded 11ms manual
2026-03-04 19:25 succeeded 11ms manual
2026-03-04 19:25 succeeded 14ms manual
Model: list-files (command/shell)
execute ✓ 1
2026-03-04 19:25 succeeded 12ms manual
Workflow Runs (2 total: 2 succeeded)
test-pipeline ✓ 2
2026-03-04 19:26 succeeded
main > example (echo-test) succeeded 15ms
2026-03-04 19:26 succeeded
main > example (echo-test) succeeded 17ms
Data (4 items, 12 versions, 2 models)
command/shell 4 items, 12 versions
Design decisions
- Model-centric grouping: Method executions are grouped by model name (e.g.
echo-test), not by underlying type (command/shell.execute). Users think in terms of their models. UsesDefinitionRepositoryto resolve definition IDs to names. - Workflow step breakdown: Verbose mode shows job/step detail within each workflow run, including which model each step invoked and its duration. Uses
WorkflowRepositoryto map step names back to their task definitions. - Domain layer purity: A
DataRepositoryReaderinterface is defined in the domain layer to avoid importingUnifiedDataRepositoryfrom infrastructure (enforced by DDD ratchet tests). - Version-aware data counting:
totalVersionssums each item'sversionfield (version N = N versions exist), giving accurate data churn visibility. - Load-all-then-filter: Consistent with other commands; fine for local repo scale.
Test plan
-
deno checkpasses -
deno lintpasses -
deno fmtpasses -
deno run testpasses (2681 tests, 0 failures) -
deno run compilesucceeds - End-to-end tested with compiled binary: log, verbose, JSON, and empty window modes
- DDD layer ratchet tests pass (presentation→infra bumped 36→37 for logger consistency)
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260304.213352.0-sha.2bb8ca15/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/v20260304.213352.0-sha.2bb8ca15/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/v20260304.213352.0-sha.2bb8ca15/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/v20260304.213352.0-sha.2bb8ca15/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260304.212925.0-sha.65fba57a
What's Changed
- feat: allow all namespaces for local model and vault loading (#603)
Summary
- Remove reserved namespace blocking from local model and vault loaders
- All namespace combinations (
@swamp/*,@si/*,swamp/*,si/*,myorg/*) are now valid for local loading - Only validation remaining is the minimum 2-segment requirement (e.g.,
myorg/my-model)
Why
This is a follow-up to #600. That PR relaxed the @ prefix requirement but still blocked swamp/* and si/* without @ prefix locally, and blocked @swamp/*/@si/* for vaults. The model loader already allowed @swamp/* and @si/* for local development, but the vault loader didn't — and neither loader allowed bare swamp/* or si/*.
For local development, developers need to build and test extensions with any namespace. Reserved namespace enforcement should only happen at the extension push boundary, not during local loading.
What still blocks reserved namespaces
The extension push pipeline is unchanged and still blocks @swamp/*, @si/*, swamp/*, and si/* when publishing to the registry:
src/domain/extensions/extension_manifest.ts— manifest validationsrc/domain/extensions/extension_namespace_validator.ts— content namespace validationsrc/domain/extensions/extension_dependency_resolver.ts— dependency resolution
This separation allows developers to build and test extensions locally with any namespace while preventing unauthorized use of reserved namespaces in the public registry.
Changes
| File | Change |
|---|---|
src/domain/models/user_model_loader.ts |
Remove reserved namespace check from validateUserNamespace() — only segment count validation remains |
src/domain/vaults/user_vault_loader.ts |
Remove RESERVED_NAMESPACES constant and validateUserNamespace() method entirely |
src/domain/models/user_model_loader_test.ts |
Change swamp/* and si/* rejection tests to acceptance tests |
src/domain/vaults/user_vault_loader_test.ts |
Change @swamp/* rejection test to acceptance test; change swamp/* and si/* rejection tests to acceptance tests |
Test plan
-
deno check— type checking passes -
deno lint— clean -
deno fmt— clean -
deno run test— all 50 tests pass (41 model loader + 9 vault loader)
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260304.212925.0-sha.65fba57a/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/v20260304.212925.0-sha.65fba57a/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/v20260304.212925.0-sha.65fba57a/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/v20260304.212925.0-sha.65fba57a/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/swamp 20260304.202030.0-sha.3596ccf4
What's Changed
- feat: relax namespace validation for local models and vaults (#600)
Summary
- Remove the
@prefix requirement for user-defined extension model and vault types - Non-
@types likedigitalocean/app-platformare now valid (implicitly@swamp/digitalocean/app-platform) - Reserved namespaces (
swamp/*,si/*) remain blocked for non-@types @swamp/*and@si/*remain allowed for local development
Why
Swamp-managed extensions are moving from @swamp/aws/ec2 to just aws/ec2 — a missing @ namespace is implicitly treated as @swamp. This means user-defined extension models without the @ prefix should also be valid, but loading extensions/models/app_platform.ts with type: "digitalocean/app-platform" previously failed with "Model type must use '@' prefix".
This change is scoped to local model/vault loading only. Extension push validation (manifest, namespace validator) is deferred.
Changes
| File | Change |
|---|---|
src/domain/models/user_model_loader.ts |
Remove @ prefix check, add reserved namespace check for non-@ types |
src/domain/vaults/user_vault_loader.ts |
Make @ optional in type pattern, extend reserved namespace list |
src/domain/models/user_model_loader_test.ts |
Update 3 existing tests, add 2 new tests |
src/domain/vaults/user_vault_loader_test.ts |
Add 3 new tests for non-@ vault types |
.claude/skills/swamp-extension-model/SKILL.md |
Update type naming docs |
.claude/skills/swamp-extension-model/references/troubleshooting.md |
Replace @ prefix error section with reserved namespace guidance |
.claude/skills/swamp-vault/references/user-defined-vaults.md |
Update vault type format docs |
Test plan
-
deno check— type checking passes -
deno lint— clean -
deno fmt— clean -
deno run test— all 50 tests pass (41 model loader + 9 vault loader) -
deno run compile— binary compiles - Verified no UAT tests broken by this change
🤖 Generated with Claude Code
Installation
macOS (Apple Silicon):
curl -L https://github.com/systeminit/swamp/releases/download/v20260304.202030.0-sha.3596ccf4/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/v20260304.202030.0-sha.3596ccf4/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/v20260304.202030.0-sha.3596ccf4/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/v20260304.202030.0-sha.3596ccf4/swamp-linux-aarch64 -o swamp
chmod +x swamp && sudo mv swamp /usr/local/bin/