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

Relationships

⊘ blocks #2769

#2768 gatorwalk-factory: swamp-extensions stages load the issue-lifecycle skill, which starts a second driver

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

Follow-up to #2734. The claim guard stops gatorwalk from taking an issue that issue-lifecycle drives. Nothing stops the reverse, and the lifecycle itself points the agent at the command that does it.

What happens

lifecycles/swamp-extensions.yaml lists skills: [issue-lifecycle] on triage (:62), plan (:249) and implement (:377). That skill's first instruction (.claude/skills/issue-lifecycle/SKILL.md:180-192) is to run swamp data get issue-<N> state-main and, if nothing comes back, run @swamp/issue-lifecycle ... start issue-<N>. Under gatorwalk there is never an issue-<N> instance, so an agent that follows the skill it was given runs start. The skill also triggers on its own for "triage issue" and "triage #", with or without the skills entry.

issue-lifecycle's start (extensions/models/issue_lifecycle.ts:914-1039) has no check for a gatorwalk claim. It writes state-main, posts triage_started, and auto-assigns. After that, both drivers post status moves and lifecycle entries to the same issue. refuseIssueLifecycle (extensions/models/swamp_club.ts:170-197) runs only as claim's beforeClaim (:276). publish does not check, so it goes on posting next to issue-lifecycle's entries.

Why it matters

The Lab issue is the audit trail. On the first dogfood issue, two interleaved histories and status moves would make the pilot unreadable, and the result could not be trusted for comparing the two drivers.

Fix direction

  1. Remove issue-lifecycle from the three skills lists. Point each systemPrompt at the files it needs directly, the way conformance-review already cites references/code-conformance-review.md. Decision for the implementer: list which parts of the skill's references each stage needs. The obvious one is the adversarial regression procedure in references/triage.md for triage. Do not cite any file that tells the agent to run an issue-lifecycle method.
  2. Have publish on the Lab adapter run the same issue-<N> check before it writes, and refuse with the same message. This catches an instance created after claim.
  3. Optional, and for Seth to decide: a reverse guard in issue-lifecycle's start that refuses an issue claimed in the gatorwalk ticket index. #2734 said not to change issue-lifecycle, so this would need an explicit decision.

Done when

  • No stage in swamp-extensions.yaml lists a skill that runs issue-lifecycle methods. A test in lifecycles_test.ts pins that.
  • The Lab adapter's publish refuses when an issue-<N> issue-lifecycle instance exists. This is tested against the Lab fake, including an instance created after claim.
  • swamp-extensions.md says how the two drivers are kept apart in both directions.
02Bog Flow
✓OPEN✓TRIAGED✓IN PROGRESS✓SHIPPED+ 1 MOREASSIGNED+ 8 MOREREVIEW+ 6 MOREPR_LINKED+ 2 MORESESSION_SUMMARIZED

Shipped

9/30/2026, 3:46:53 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
skunk-ape assigned skunk-ape9/30/2026, 2:52:35 PM
skunk-ape linked blocks #27699/30/2026, 3:58:42 PM
Editable. Press Enter to edit.

system commented 9/30/2026, 2:07:32 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.