feat(gatorwalk-factory): publish assigns the ticket when work starts (swamp-club #2801) #407

Merged
seth merged 4 commits from cue/2801-gatorwalk-factory-publish into main 2026-10-01 12:33:30 +00:00
Owner

Fixes swamp-club #2801. Also carries #2886.

What

Assigning is now an optional tracker capability, assign, alongside history.

  • Which trackers have it. The built-in tracker has it, and its tickets now keep assignees (swamp usernames). The Lab has it too, built on its existing assign. Linear lacks it, and asking it to assign is refused.
  • Who is assigned. Each tracker model maps swamp's stored login to its own user (assignee). The built-in tracker takes the login's username, whichever server the login is for. The Lab takes it only when the login is for the Lab server the tracker writes to.
  • When publish assigns. On the work item's started event, after that event's own comment or entry and before any later one. The assign has its own delivery-ledger key (delivery-publish-assign-<work item>-<version>).
  • Best effort, never retried. Any failure is logged as a warning and recorded in the ledger as skipped, so later publishes don't retry it. Failures include no stored login, a login for another server, or a tracker error.
  • The assigned entry. When publish is writing lifecycle entries, issue-lifecycle's assigned entry follows the started event's entry. It is driven from the ledger record, so a re-run after a failed entry write posts it once, without assigning again.
  • Removed assignees. The summary names any assignees the tracker removed. On the Lab, those are assignees no longer on swamp-club's team.
  • The Lab's assign method stays, for assigning someone else by hand.

Decisions from the plan review:

  • There is no opt-in flag. A tracker that can assign does.
  • The assignee is the stored login, not the actor on the start event.
  • Linear stays unimplemented until its users can be mapped from swamp logins.

#2886: main's embedded studio build went stale when #2792 and #2807 crossed, which fails studio_assets_test on every branch. The last commit is the output of deno task build:studio, and only studio_assets.ts and studio_asset_app.ts change.

Tests

  • Core publish: order of writes, entry mode, a started event with no entry of its own, skip without retry, a failed entry posted by the re-run, a work item published before this change, a tracker without the capability, and naming removed assignees.
  • Conformance: the suite checks the assign capability on the built-in and Lab trackers, and that Linear refuses it.
  • Built-in tracker: assignees, including an old record without the field, plus a model-level publish test.
  • Done-when check: a test against the Lab fake, using the real swamp-club-swamp-extensions example, checks the issue's "Done when". It starts and publishes once, and gets triage_started then assigned, with no separate assign call.
  • Integration: the built-in tracker's end-to-end test expects the assigned entry when the machine running it has a stored login, and the original three entries when it doesn't.

Verified locally: verify-build and verify-reviews both passed, and the attestation is posted for the head commit.

🤖 Generated with Claude Code

Fixes swamp-club #2801. Also carries #2886. ## What Assigning is now an optional tracker capability, `assign`, alongside `history`. - **Which trackers have it.** The built-in tracker has it, and its tickets now keep assignees (swamp usernames). The Lab has it too, built on its existing assign. Linear lacks it, and asking it to assign is refused. - **Who is assigned.** Each tracker model maps swamp's stored login to its own user (`assignee`). The built-in tracker takes the login's username, whichever server the login is for. The Lab takes it only when the login is for the Lab server the tracker writes to. - **When `publish` assigns.** On the work item's `started` event, after that event's own comment or entry and before any later one. The assign has its own delivery-ledger key (`delivery-publish-assign-<work item>-<version>`). - **Best effort, never retried.** Any failure is logged as a warning and recorded in the ledger as skipped, so later publishes don't retry it. Failures include no stored login, a login for another server, or a tracker error. - **The `assigned` entry.** When `publish` is writing lifecycle entries, issue-lifecycle's `assigned` entry follows the `started` event's entry. It is driven from the ledger record, so a re-run after a failed entry write posts it once, without assigning again. - **Removed assignees.** The summary names any assignees the tracker removed. On the Lab, those are assignees no longer on swamp-club's team. - **The Lab's `assign` method stays**, for assigning someone else by hand. Decisions from the plan review: - There is no opt-in flag. A tracker that can assign does. - The assignee is the stored login, not the actor on the start event. - Linear stays unimplemented until its users can be mapped from swamp logins. #2886: main's embedded studio build went stale when #2792 and #2807 crossed, which fails `studio_assets_test` on every branch. The last commit is the output of `deno task build:studio`, and only `studio_assets.ts` and `studio_asset_app.ts` change. ## Tests - **Core `publish`:** order of writes, entry mode, a started event with no entry of its own, skip without retry, a failed entry posted by the re-run, a work item published before this change, a tracker without the capability, and naming removed assignees. - **Conformance:** the suite checks the assign capability on the built-in and Lab trackers, and that Linear refuses it. - **Built-in tracker:** assignees, including an old record without the field, plus a model-level `publish` test. - **Done-when check:** a test against the Lab fake, using the real `swamp-club-swamp-extensions` example, checks the issue's "Done when". It starts and publishes once, and gets `triage_started` then `assigned`, with no separate `assign` call. - **Integration:** the built-in tracker's end-to-end test expects the `assigned` entry when the machine running it has a stored login, and the original three entries when it doesn't. Verified locally: `verify-build` and `verify-reviews` both passed, and the attestation is posted for the head commit. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Assigning becomes an optional tracker capability, `assign`, beside
`history`: the built-in tracker (tickets gain swamp-username assignees) and
the Lab have it, Linear lacks it. Each tracker model maps swamp's stored
login to its user (`assignee`): the built-in tracker takes the login's
username, the Lab only when the login is for its server.

publish assigns on the work item's started event, after that event's own
write and before any later one, under its own ledger key. It is best effort
and never retried: any failure warns and is recorded as skipped. In entry
mode issue-lifecycle's `assigned` entry follows, driven from the assign's
ledger record so a re-run after a failed entry still writes it once. The
Lab adapter's `assign` method stays for assigning someone else.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The Lab drops assignees no longer on its team when it assigns; its assign
method says so, and publish's summary now does too. Rewrap two README and
DESIGN lines the previous commit left long.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
fix(gatorwalk-factory): rebuild the embedded studio page after #2792 and #2807 crossed (swamp-club #2886)
All checks were successful
CI / Review Integrity (pull_request) Successful in 43s
CI / Validate Attestation (pull_request) Successful in 49s
e40a823a8b
#2792 changed _lib/engine/graph.ts, which the studio page bundles, and #2807
built its assets before #2792 merged, so main's studio_assets_test fails.
Output of deno task build:studio; nothing else changes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into cue/2801-gatorwalk-factory-publish
All checks were successful
CI / Review Integrity (pull_request) Successful in 51s
CI / Validate Attestation (pull_request) Successful in 1m5s
27d0fd4e97
# Conflicts:
#	gatorwalk-factory/DESIGN.md
seth merged commit 2bc952135e into main 2026-10-01 12:33:30 +00:00
seth deleted branch cue/2801-gatorwalk-factory-publish 2026-10-01 12:33:31 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
swamp-club/swamp-extensions!407
No description provided.