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

Relationships

#2663 gatorwalk-factory: plugin contract and composition (GW-12)

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

Part of the gatorwalk-factory rebuild of @swamp/software-factory (gatorwalk-factory/ in swamp-extensions; GW-1..GW-9 shipped: #2576, #2584, #2588, #2598, #2611, #2619, #2599, #2633). Read gatorwalk-factory/README.md and DESIGN.md first. This is the head of the launch-template chain: GW-12 -> GW-13 starter plugins -> GW-15 launch templates -> GW-11 authoring skill.

A stage plugin is a stage or small group of stages with a declared contract, so teams start from working stages (plan, review-plan, implement, review, verify) instead of writing their own. GW-2 already defines the plugin document (PluginSchema: contract inputs, outputs, exits, parameters; transitions leave through exit:) and GW-9 analyses a plugin on its own (testdata/plugins/review-plan.yaml). Nothing yet lets a lifecycle use one.

Scope, from the rebuild plan:

  • Reference with parameters: a lifecycle stage that names a plugin, passes values checked against its parameters schema, and wires each contract exit to a stage of the lifecycle.
  • Eject: copy a plugin's stages into the lifecycle as ordinary stages, to edit freely.
  • Composition happens before anything runs: the composed lifecycle is what the holder's validate checks (schema plus GW-9 graph analysis, including plugin wiring: every exit wired, every contract input produced on every path that reaches the plugin), and what a work item pins at start, so the pinned digest covers the plugin's content and a run stays reproducible when a plugin changes.
  • How parameters reach a plugin's stages (bindings, prompts, gate configuration), and how a plugin is packaged and found: files shipped in an extension, a holder-like model instance, or something else. Decide, record the decision in DESIGN.md, and say why.

Watch for the defect family the rebuild exists to remove: composed stage, artifact and approval names must not be told apart by name-shaped conventions (prefixes) that one plugin instance could collide with or read across. If two uses of the same plugin appear in one lifecycle, their records must be separate by construction.

Tests: unit tests for composition and eject, GW-9 on composed lifecycles, and the real-engine suite (integration/) running a lifecycle that uses a plugin. Out of scope: the starter plugins themselves (GW-13), the Jev decision plugin (GW-14). Nothing is published.

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

Shipped

9/29/2026, 3:06:04 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
skunk-ape assigned skunk-ape9/29/2026, 2:05:34 AM
Editable. Press Enter to edit.

system commented 9/29/2026, 1:34:36 AM

Classified automatically when this issue was filed.

  • Source: Extensions

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

skunk-ape commented 9/29/2026, 2:20:03 AM

Scope narrowed with Seth during triage: GW-12 delivers eject only. A plugin lives in a new plugin holder model type, takes whole-value parameter placeholders, and is ejected into a lifecycle by an eject method on the lifecycle holder: it replaces a placeholder stage, wires each contract exit, maps contract inputs, and renames stages and products at the use site (no prefixes). The composed lifecycle is checked by the schema, GW-9 graph analysis and an explicit contract check, then saved and edited by the author as ordinary stages. Out of scope for now: referencing a plugin with parameters, pinning plugin content at start, and per-use identity in run records. The aim is a quick start from working defaults that teams are encouraged to customise.

Sign in to post a ripple.