#2795 gatorwalk-factory: a lifecycle chooses its tracker, and status shows projection lag
Opened by skunk-ape · 9/30/2026· Shipped 10/1/2026
Part of the tracker-seam decision (https://claude.ai/artifact/TDidgyVjxKXU7JsNH1baNy). Needs #2794. Takes over part 2 of #2771 (making the lag visible).
Change
- Lifecycle level:
tracker: { kind: builtin | swamp-club | linear, prefix?: <PREFIX> }. Defaultbuiltin. - Stage level: rename the
projectionblock totracker(_lib/lifecycle_schema.ts:555-624, checks at about :1062-1190). Seth approved the rename. Nothing is published, so no upgrade path is needed; update every bundled lifecycle, example and test lifecycle. - The lifecycle holder binds a tracker instance by name beside the lifecycle.
startpins it into the run record next toexternalRefs.validatechecks that the instance's model type matchestracker.kind. statusreads the pinned tracker instance's cursor (cursor-<key>) as data, with no network call, and shows the journal version delivered against the journal's length, so a driver sees whenpublishis behind. The work item still never talks to a tracker. The driving skill's per-step loop uses it.
Done when
- A lifecycle naming
swamp-clubwith a holder bound to a Linear instance failsvalidatewith a clear message. statusshows "tracker behind by N events" after writes with nopublish, and nothing once published. Tested against the Lab fake.skill_test.tscovers the changed commands, and #2771's part 2 "Done when" holds.
Shipped
Click a lifecycle step above to view its details.
skunk-ape commented 9/30/2026, 7:09:39 PM
Hand-off from #2794 (PR https://git.swamp-club.com/swamp-club/swamp-extensions/pulls/391). #2794 added these as tracker-instance global arguments, and this issue moves them into the factory definition's tracker block:
- built-in tracker (@swamp/gatorwalk-factory/tracker): prefix (required, lowercase), statuses (list, default open, in_progress, shipped, closed; any direction), types (list, default bug, feature, security)
- Linear: teamId (the team create files in) and types (issue type to label name)
The built-in tracker's externalRefs key is builtin. Claimed keys now lead with the display id (external) or the prefix (built-in); a built-in ticket's first work item takes the ticket id.
skunk-ape commented 9/30/2026, 9:09:53 PM
From #2818 (authoring skill): two things for when the factory definition declares its tracker. (1) references/authoring.md, sections State 1 and The tracker, sets the tracker up as an adapter instance next to the factory and says the definition does not name it yet; once this lands, the interview's tracker answer should be written into the definition's tracker field, and those sections need updating. (2) The examples use the status key triaged for their first stages, but the built-in tracker's default statuses are open, in_progress, shipped, closed, so a starter copied as-is with the built-in tracker has stages whose status publish refuses. Authoring tells the agent to reconcile them by hand; with tracker config in the definition, validate could check that every stage status key is one of the tracker's statuses.
Sign in to post a ripple.