Relationships
#3290 stagecraft: open the set of trackers to any bound adapter (#3274 step 2)
Opened by skunk-ape · 10/12/2026
Part of swamp-club #3274 (let users build their own tracker as a separate extension). Design settled with Seth on 2026-10-12: Route B. stagecraft and a tracker share no code. A tracker extension implements primitive methods with fixed inputs and one result record each. stagecraft ships the publish and claim logic as workflows whose own steps hold the ledger, cursor and ticket index, and whose tracker steps call the bound tracker instance by name. Tested on a remote worker under swamp serve (see #3274): this works where runModel does not. A JSR package was ruled out.
This step (2 of 3)
Open the set of trackers. Depends on step 1.
- Definitions: tracker.kind stays the field name but accepts any lowercase tracker name, which is also the externalRefs key. schemaVersion 3, with an identity upgrade step so an older stagecraft refuses with the needs-a-newer message. The step adds factory and work-item upgrades entries and v3 fixtures. #3196 does not block this: the factory schema already upgrades before validate checks it.
- Run records: the pinned tracker binding's kind widens from the enum to the name pattern. RUN_SCHEMA_VERSION stays 1, and nothing stored is rewritten.
- Binding: validate and start bind through the adapter's describe result (tracker name, contract version, capabilities), read as data. The fixed type map stays as a shortcut for the built-in, Linear and Lab types, whose names are reserved. The externalRefs fit check is reworked, since it can no longer list tracker names.
- The rest: the skill's command checks (#2711) check tracker commands against the primitive contract. The studio is checked for any closed list of tracker kinds (stay out of studio_server.ts). Manifest bump.
Closed
No activity in this phase yet.
skunk-ape commented 10/12/2026, 2:47:32 PM
Closed unworked: Seth chose to land all of this on #3274, one slice at a time, instead of as separate issues. The slices are now (1) an invisible refactor of publish and claim into plan, apply and commit over the primitive contract; (2) the whole external-tracker feature in one release; (3) the example extension and the guide.
Sign in to post a ripple.