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

Relationships

⊘ blocks #2818

#2805 gatorwalk-factory: saved scenarios next to a lifecycle, run by validate

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

A lifecycle can be tested before anyone runs work on it. Saved scenarios sit next to the lifecycle, and validate runs them in-process on the real engine, so CI and any author catch a lifecycle change that breaks a known path. For now, in-process on committingStore(memoryStore()) is good enough; revisit with data.

Format

lifecycles/<name>.scenarios/<scenario>.yaml, where <name> is the lifecycle file's basename. One engine call per step:

scenario: plan-churn
lifecycle: swamp-extensions
description: The fifth plan revision hits the cycle limit; a person grants one more pass.
externalRefs: { swamp-club: "2801" }
steps:
  - record: { evidence: classification }
    payload: { type: feature, confidence: high, reasoning: A new list method }
  - move: feature
  - move: revise
    manual: true
    expect: { refused: "cycle override for 'plan'" }
  - wait: 3600
    note: The run sits at the cycle limit until someone looks
  - override: { stage: plan, note: one more pass }
  - approve: abandon-confirmation
  - move: abandon
  - expect: { stage: abandoned }
  • Verbs: record (artifact or evidence, with payload), approve, decline, move (manual: true is a person's go), override (a cycle override), wait (seconds on the simulated clock), and a bare expect: { stage }.
  • expect: { refused: "<text>" }: the step must be refused, and its reason must contain the text (an empty string means any refusal). This pins gate messages.
  • Clock: one second per engine reading plus each wait. Actors: records and automatic moves are an agent; approvals, overrides and manual moves are a person.

Scope

  • _lib/scenario.ts: a zod schema for the file, and the runner. Start from the prototype's source/src/sim.ts, which already passes both swamp-extensions scenarios on the real engine. The runner must stay free of Deno APIs, because the studio runs it in the browser. It returns one frame per step: the committed run, readiness from evaluateTransitions, computeMetrics, and the outcome.
  • validate runs every scenario of the holder's lifecycle and reports each unexpected step with its file and step index. Any unexpected step fails validate.
  • Convert the pure walks in lifecycles_test.ts into scenario files that the test runs. The prototype's source/scenarios/swamp-extensions.bug-to-done.yaml is the "a bug walks triage to done" test, transcribed. Keep in code only the assertions that inspect CEL results.
  • Document the format in the README and DESIGN.md ("Saved scenarios"), and in the skill: the agent writes scenario files (decided 2026-09-30), so the skill says where they go, the verbs, and to run validate after writing one.

Acceptance

  • validate on swamp-extensions runs its scenarios and passes; breaking a gate message makes it fail and name the step.
  • Unit tests cover each verb, expect both ways, and a malformed file.

Needs: #2803. Blocks: Simulate mode.

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

Shipped

9/30/2026, 7:11:52 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
skunk-ape assigned skunk-ape9/30/2026, 6:32:48 PM
skunk-ape linked blocks #28189/30/2026, 4:49:52 PM
Editable. Press Enter to edit.

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

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/30/2026, 4:04:46 PM

Re-scoped. Seth decided on 2026-09-30 that the studio views and simulates but never edits: "Edits should come from the agent... I just don't think we should go down the road of having users create or edit by hand." The agent writes lifecycles and scenarios as files, and the local page reloads them. This issue already fit that. One line was added: the skill now documents the scenario format too, because the agent is the one that writes scenario files.

Sign in to post a ripple.