Skip to main content

Swamp Adoption

@webframp/swamp-adoptionv2026.09.15.1· 1d agoMODELS
01README

Guides new users through mapping their domain onto swamp primitives. Conducts structured discovery interviews, produces versioned extension designs, and generates implementation scaffolds.

Uses swamp to teach swamp — the adoption journey itself is modeled as typed, versioned state.

02Release Notes

2026.09.15.1

Changed: Bump zod 4.4.3 → 4.6.5

2026.08.28.1

Changed: Normalized the extension license to Apache-2.0 and corrected the copyright holder to "Sean Escriva". Extensions that previously shipped an MIT LICENSE.md are now Apache-2.0, consistent with the repository root and every other extension. No code or behavioral changes.

Upgrade note: License text only. No API, schema, or runtime behavior changed.

2026.08.26.3

Fixed: Restored inline npm:zod@4.4.3 import specifiers so the registry quality scorer can resolve dependencies and score the extension. An earlier release used a bare "zod" import-map specifier, which published but scored as unscored.

Changed: Retained explicit compilerOptions.strict in deno.json. No behavioral or schema changes.

03Models1
@webframp/swamp-adoptionv2026.09.15.1swamp-adoption/mod.ts
fn discover()
Conduct a structured discovery interview to map the user's domain landscape. Guide the conversation through these phases: 0. SKILL CHECK Ask: "Do you already have a skill (SKILL.md or similar agent instructions) you're trying to convert into a swamp extension, rather than starting from a blank domain?" If yes, stop here and run the 'import_skill' method instead — it seeds both the landscape and extensionDesign directly from the skill's content, and skips the systems interview be
fn design(system?: string)
Design a swamp extension based on the discovered landscape. Guide the conversation through these phases: 1. SCOPE CONFIRMATION Read the landscape resource. Present suggestedFirstExtension and reasoning. Ask: "Does this match your priority? If not, which system should we tackle first?" If a 'system' argument is provided, use that as the target. 2. METHOD DISCOVERY For the target system, review its interactions from the landscape. Map each verb to a method name (e.g., "read certi
ArgumentTypeDescription
system?stringTarget system name from landscape (uses suggestedFirstExtension if omitted)
fn import_skill(sourceSkill?: string)
Convert an existing skill (a SKILL.md file or similar agent instructions) into an extension design, and seed a landscape stub so 'next' has something to rank against. This is the alternate entry point reached from discover's phase 0 skill-check question — it replaces the systems interview, not the design step. Guide the conversation through these phases: 1. LOCATE THE SKILL Ask: "What skill are you converting? Give me its name or file path (e.g., .claude/skills/<name>/SKILL.md or skills/
ArgumentTypeDescription
sourceSkill?stringName or path of the skill being converted (e.g., .claude/skills/foo/SKILL.md)
fn scaffold(outputFormat: enum)
Generate implementation files from an extension design. Reads the extensionDesign resource and produces: - manifest.yaml with proper CalVer version, labels, platforms - deno.json with standard task configuration - extensions/models/<name>/mod.ts with Zod schemas, resource definitions, method stubs - extensions/models/<name>/mod_test.ts with structure and argument validation tests The scaffold provides a working starting point that passes deno check and deno lint. Each generated file includes T
ArgumentTypeDescription
outputFormatenumWhether to write files as a resource or print to stdout
fn next()
Suggest the next extension to build based on landscape analysis and the current design. Reads the landscape and the current extensionDesign resource. Filters out the system covered by the current design, then ranks remaining systems by: 1. Pain level (blocking > significant > minor > none) 2. Uses the highest pain across all interactions per system Logs advisory output with the recommendation and reasoning. Does not write any resource — purely advisory.

Resources

landscape(infinite)— Discovered system landscape from the user's domain interviews
extensionDesign(infinite)— Versioned extension design produced from landscape analysis
scaffold(24h)— Generated file scaffold for an extension design
04Previous Versions14
2026.08.28.1

2026.08.28.1

Changed: Normalized the extension license to Apache-2.0 and corrected the copyright holder to "Sean Escriva". Extensions that previously shipped an MIT LICENSE.md are now Apache-2.0, consistent with the repository root and every other extension. No code or behavioral changes.

Upgrade note: License text only. No API, schema, or runtime behavior changed.

2026.08.26.3

Fixed: Restored inline npm:zod@4.4.3 import specifiers so the registry quality scorer can resolve dependencies and score the extension. An earlier release used a bare "zod" import-map specifier, which published but scored as unscored.

Changed: Retained explicit compilerOptions.strict in deno.json. No behavioral or schema changes.

2026.08.26.3

2026.08.26.3

Fixed: Restored inline npm:zod@4.4.3 import specifiers so the registry quality scorer can resolve dependencies and score the extension. An earlier release used a bare "zod" import-map specifier, which published but scored as unscored.

Changed: Retained explicit compilerOptions.strict in deno.json. No behavioral or schema changes.

2026.08.26.1

2026.08.26.1

Fixed: Added missing description field to upgrade entry for version 2026.08.24.2. The omission caused swamp extension pull to fail with a catalog validation error ("upgrades.N.description: Invalid input: expected string, received undefined").

2026.08.24.3

2026.08.24.3

Added: Output metadata attributes for observability.

  • durationMs: Method execution duration in milliseconds.
  • collectedBy: Extension name that produced the data.
  • fetchedAt: ISO 8601 timestamp when data was fetched (added to resources that previously lacked it).
2026.08.24.2

2026.08.24.2

Added Troubleshooting section documenting design system requirement, scaffold prerequisite, import_skill partial-write handling, and array global arg CLI syntax.

2026.08.21.2

2026.08.21.2

Changed: design and import_skill no longer silently substitute a placeholder name when a required identifier is missing. Previously, running design with no system argument and no prior discover landscape wrote an extension design named unknown-system with no indication anything was wrong; running import_skill with no sourceSkill did the same with unknown-skill. Both methods now throw a descriptive error telling you what to provide (system, or run discover first; sourceSkill, a name or path) instead of producing a resource that looks legitimate but points at nothing.

Upgrade note: No schema changes. If you were relying on the unknown-system/unknown-skill fallback behavior, pass the argument explicitly going forward.

2026.08.21.1

Changed: Added .describe() to previously undocumented fields on the InteractionSchema, SystemSchema, DataFlowSchema, and LandscapeSchema resource schemas (e.g. verb, direction, frequency, pain, type, from, to, manual, suggestedFirstExtension). No behavioral change.

2026.08.01.1

Added: New import_skill method. If you already have a skill (SKILL.md or similar agent instructions) that you're trying to formalize into a swamp extension, this method converts it directly — seeding both landscape and extensionDesign from the skill's structure instead of running a full systems interview. scaffold and next work unchanged from either path.

Changed: discover's interview now opens with a phase 0 question asking whether you have an existing skill to convert. Answering yes routes to import_skill and skips the systems interview; answering no continues as before. Existing discover behavior for users starting from scratch is unchanged.

Fixed: scaffold no longer splices the extension design's name field into generated files unescaped. A design name containing a newline or a double quote (reachable via design's free-text system argument, and now also via import_skill's skill-path-derived name) could break out of the quoted name: line in the generated manifest.yaml and inject arbitrary YAML, or break the generated mod.ts/mod_test.ts string literals. The name is now sanitized the same way the description field already was.

Upgrade note: No globalArguments changes — this is an additive method only. Existing adoption model instances upgrade with a no-op transform.

2026.08.21.1

2026.08.21.1

Changed: Added .describe() to previously undocumented fields on the InteractionSchema, SystemSchema, DataFlowSchema, and LandscapeSchema resource schemas (e.g. verb, direction, frequency, pain, type, from, to, manual, suggestedFirstExtension). No behavioral change.

2026.08.01.1

Added: New import_skill method. If you already have a skill (SKILL.md or similar agent instructions) that you're trying to formalize into a swamp extension, this method converts it directly — seeding both landscape and extensionDesign from the skill's structure instead of running a full systems interview. scaffold and next work unchanged from either path.

Changed: discover's interview now opens with a phase 0 question asking whether you have an existing skill to convert. Answering yes routes to import_skill and skips the systems interview; answering no continues as before. Existing discover behavior for users starting from scratch is unchanged.

Fixed: scaffold no longer splices the extension design's name field into generated files unescaped. A design name containing a newline or a double quote (reachable via design's free-text system argument, and now also via import_skill's skill-path-derived name) could break out of the quoted name: line in the generated manifest.yaml and inject arbitrary YAML, or break the generated mod.ts/mod_test.ts string literals. The name is now sanitized the same way the description field already was.

Upgrade note: No globalArguments changes — this is an additive method only. Existing adoption model instances upgrade with a no-op transform.

2026.08.01.1

2026.08.01.1

Added: New import_skill method. If you already have a skill (SKILL.md or similar agent instructions) that you're trying to formalize into a swamp extension, this method converts it directly — seeding both landscape and extensionDesign from the skill's structure instead of running a full systems interview. scaffold and next work unchanged from either path.

Changed: discover's interview now opens with a phase 0 question asking whether you have an existing skill to convert. Answering yes routes to import_skill and skips the systems interview; answering no continues as before. Existing discover behavior for users starting from scratch is unchanged.

Fixed: scaffold no longer splices the extension design's name field into generated files unescaped. A design name containing a newline or a double quote (reachable via design's free-text system argument, and now also via import_skill's skill-path-derived name) could break out of the quoted name: line in the generated manifest.yaml and inject arbitrary YAML, or break the generated mod.ts/mod_test.ts string literals. The name is now sanitized the same way the description field already was.

Upgrade note: No globalArguments changes — this is an additive method only. Existing adoption model instances upgrade with a no-op transform.

Modified 1 models

2026.07.26.1

2026.07.26.1

Changed: Extensions scaffolded by this model now pin @systeminit/swamp-testing at 0.20260604.20, the current release, instead of 0.20260504.10. The old pin was hard-coded in the generated deno.json, so every extension created through the adoption workflow started life on a test library that was three releases behind and inconsistent with the rest of the repo.

Upgrade note: Nothing to do for extensions already scaffolded — they keep the pin they were created with. Update their deno.json and regenerate deno.lock with deno install if you want them on the current version.

2026.07.18.2

2026.07.18.2

Added: An upgrades array entry (no-op) to mod.ts for proper typeVersion tracking on existing instances. No schema or behavior changes.

2026.07.18.1

Changed: Added @module-level JSDoc documentation to mod.ts. No runtime behavior change.

2026.07.18.1

2026.07.18.1

Changed: Added @module-level JSDoc documentation to mod.ts. No runtime behavior change.

2026.06.23.1
2026.06.15.1
2026.06.05.1
05Stats
A
100 / 100
Downloads
8
Archive size
23.9 KB
  • Has README or module doc2/2earned
  • README has a code example1/1earned
  • README is substantive1/1earned
  • Most symbols documented1/1earned
  • No slow types (deprecated)1/1earned
  • Dependencies pass trust audit2/2earned
  • Has description1/1earned
  • Platform support declared (or universal)2/2earned
  • License declared1/1earned
  • Verified public repository2/2earned
06Platforms
07Labels