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
- Remove
issue-lifecyclefrom the threeskillslists. Point eachsystemPromptat the files it needs directly, the wayconformance-reviewalready citesreferences/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 inreferences/triage.mdfortriage. Do not cite any file that tells the agent to run an issue-lifecycle method. - Have
publishon the Lab adapter run the sameissue-<N>check before it writes, and refuse with the same message. This catches an instance created afterclaim. - Optional, and for Seth to decide: a reverse guard in issue-lifecycle's
startthat 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.yamllists a skill that runs issue-lifecycle methods. A test inlifecycles_test.tspins that. - The Lab adapter's
publishrefuses when anissue-<N>issue-lifecycle instance exists. This is tested against the Lab fake, including an instance created afterclaim. swamp-extensions.mdsays how the two drivers are kept apart in both directions.
Shipped
Click a lifecycle step above to view its details.
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.