Skip to main content
← Back to list
01Issue
FeatureShippedExtensionsPublic
Assigneesskunk-ape

Relationships

⊘ blocks #2818

#2803 gatorwalk-factory: the lifecycle holder reads its lifecycle from lifecycles/<name>.yaml

Opened by skunk-ape · 9/30/2026· Shipped 9/30/2026

Part of the gatorwalk-factory studio (gatorwalk-factory/ in swamp-extensions). Read gatorwalk-factory/README.md and DESIGN.md first. Design proposal (decisions recorded 2026-09-30): https://claude.ai/artifact/BNCKp7w3G3Q8VdmnCDDWHP. Prototype, with its source under source/ (read it with the Artifact tool): https://claude.ai/artifact/1wAxrpUqZ47FAjE4fU9idD. Both links are private to the maintainer.

Goal

One copy of each lifecycle, at lifecycles/<name>.yaml in the repo, where people look for it. Today a lifecycle lives in two places: pasted by hand under globalArguments in the holder's definition (models/@swamp/gatorwalk-factory/lifecycle/<holder>.yaml, as the driving skill instructs), and as a source file under gatorwalk-factory's lifecycles/. Nothing syncs them, and they drift from the first edit.

Decision

The holder's globalArguments become { lifecycle: <repo-relative path> } (option B in the proposal). There are no users before launch, so the inline form is removed rather than kept beside the path.

Scope

  • HolderArgumentsSchema becomes { lifecycle: string }. The path is resolved against ctx.repoDir. Refuse, with the path in the message: an absolute path, one that resolves outside the repo (after following symlinks), one not ending in .yaml/.yml, and one that does not exist.
  • validate, design_page and new_key read the file, and so do the work item's start and reset repin=true. Pinning is unchanged: start still pins the parsed lifecycle and its digest into the work item's data, and every later method reads that pinned copy, so editing the file never changes a running work item.
  • On a remote worker or a serve-hosted holder, where the repo file is absent, fail with a clear message: start the work item where the repo is. Remote holders are out of scope until needed.
  • New holder method init --from <starter> copies a bundled lifecycle (build-swamp-extension, swamp-extensions, ...) to the holder's path, and refuses to overwrite an existing file. The setup becomes: swamp model create @swamp/gatorwalk-factory/lifecycle team --global-arg lifecycle=lifecycles/team.yaml, then swamp model method run team init --from build-swamp-extension. How the starters ship is part of this issue: gatorwalk-factory has no manifest until go-live (no_manifest_test.ts), so resolve them relative to the model module in source mode.
  • Update the skill (references/driving.md, "Set up a lifecycle holder"), the README, integration/harness.ts, lifecycles_test.ts, the fakes, and DESIGN.md: a new section "Where a lifecycle lives" with the decision and why (one copy; start pins, so only start, validate, design_page and the studio read the file; remote holders later). The README's ${{ }} caveat changes too: swamp no longer evaluates the lifecycle's text.
  • Templates: assume #2767 has removed them; do not carry apply forward.

Acceptance

  • The integration suite creates a holder with --global-arg lifecycle=lifecycles/x.yaml, runs init --from, validate and design_page, and starts a work item on it.
  • Editing the file after start leaves the running work item on its pinned copy; reset repin=true adopts the new file.
  • A path outside the repo, a missing file, and a non-YAML path are each refused with the path named.

Blocks: saved scenarios, and the studio model type.

02Bog Flow
✓OPEN✓TRIAGED✓IN PROGRESS✓SHIPPED+ 1 MOREASSIGNED+ 7 MOREREVIEW+ 12 MOREPR_LINKED+ 2 MORESESSION_SUMMARIZED

Shipped

9/30/2026, 6:21:58 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
skunk-ape assigned skunk-ape9/30/2026, 4:01:13 PM
skunk-ape linked blocks #28189/30/2026, 4:49:51 PM
Editable. Press Enter to edit.

system commented 9/30/2026, 3:48:04 PM

Classified automatically when this issue was filed.

  • Source: Extensions

If you feel this classification is incorrect, add a ripple to tell us so.

Sign in to post a ripple.