@ikon85/agent-workflow-kit 0.34.0 → 0.34.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,6 +11,41 @@ A discipline for hard bugs. Skip phases only when explicitly justified.
11
11
 
12
12
  When exploring the codebase, read `CONTEXT.md` (if it exists) to get a clear mental model of the relevant modules, and check ADRs in the area you're touching.
13
13
 
14
+ ## Phase 0 — Claim the tracked issue
15
+
16
+ Applies only when the bug arrives as a tracked issue. A bug reported in chat has
17
+ nothing to claim; go straight to Phase 1.
18
+
19
+ <!-- issue-claim:start -->
20
+ **Claim the issue before you build.** A worktree, branch, or PR check only sees
21
+ this machine, and only once someone has pushed — the claim on the issue itself
22
+ is the only signal a second session, a second machine, or a cloud agent can
23
+ read.
24
+
25
+ 1. **Check first.** Read the issue's assignee and its claim comments. An
26
+ `<!-- agent-claim: ... -->` marker you did not plant, or an assignee that is
27
+ not you, is a **foreign claim**: **STOP**, report the claimed branch and
28
+ worktree, and ask the user how to proceed. Take the issue over only on their
29
+ word, and never delete a foreign claim. A claim whose branch and worktree no
30
+ longer exist is stale — say that and let the user decide; do not assume it is
31
+ dead.
32
+ 2. **Plant your claim, before the first edit.** Assign the issue to yourself
33
+ where the tracker supports it, and post the claim marker as a comment:
34
+ `<!-- agent-claim: branch=<branch>; worktree=<absolute-path>; date=<YYYY-MM-DD> -->`
35
+ Branch and worktree are the payload — without them a colliding session sees
36
+ the collision but cannot find the work in progress.
37
+ 3. **Release.** A PR that references the issue **supersedes** the claim, so
38
+ landing needs no extra step. If you abandon or hand back the work, remove
39
+ your own claim (unassign plus a one-line `claim released` comment) before you
40
+ stop.
41
+
42
+ The concrete commands are your tracker's — `docs/agents/issue-tracker.md`,
43
+ §Pickup claim. If that layer documents no claim convention, fall back to the two
44
+ generic operations above: self-assign, plus the marker comment.
45
+ <!-- issue-claim:end -->
46
+
47
+ Building the Phase-1 loop is already work: claim before it, not after.
48
+
14
49
  ## Phase 1 — Build a feedback loop
15
50
 
16
51
  **This is the skill.** Everything else is mechanical. If you have a **tight** pass/fail signal for the bug — one that goes red on _this_ bug — you will find the cause; bisection, hypothesis-testing, and instrumentation all just consume it. If you don't have one, no amount of staring at code will save you.
@@ -6,6 +6,39 @@ disable-model-invocation: true
6
6
 
7
7
  Implement the work described by the user in the PRD or issues.
8
8
 
9
+ ## Pickup — claim the issue first
10
+
11
+ Applies whenever the work comes from a tracked issue. Work handed over as plain
12
+ text or a local plan has nothing to claim; skip this section then.
13
+
14
+ <!-- issue-claim:start -->
15
+ **Claim the issue before you build.** A worktree, branch, or PR check only sees
16
+ this machine, and only once someone has pushed — the claim on the issue itself
17
+ is the only signal a second session, a second machine, or a cloud agent can
18
+ read.
19
+
20
+ 1. **Check first.** Read the issue's assignee and its claim comments. An
21
+ `<!-- agent-claim: ... -->` marker you did not plant, or an assignee that is
22
+ not you, is a **foreign claim**: **STOP**, report the claimed branch and
23
+ worktree, and ask the user how to proceed. Take the issue over only on their
24
+ word, and never delete a foreign claim. A claim whose branch and worktree no
25
+ longer exist is stale — say that and let the user decide; do not assume it is
26
+ dead.
27
+ 2. **Plant your claim, before the first edit.** Assign the issue to yourself
28
+ where the tracker supports it, and post the claim marker as a comment:
29
+ `<!-- agent-claim: branch=<branch>; worktree=<absolute-path>; date=<YYYY-MM-DD> -->`
30
+ Branch and worktree are the payload — without them a colliding session sees
31
+ the collision but cannot find the work in progress.
32
+ 3. **Release.** A PR that references the issue **supersedes** the claim, so
33
+ landing needs no extra step. If you abandon or hand back the work, remove
34
+ your own claim (unassign plus a one-line `claim released` comment) before you
35
+ stop.
36
+
37
+ The concrete commands are your tracker's — `docs/agents/issue-tracker.md`,
38
+ §Pickup claim. If that layer documents no claim convention, fall back to the two
39
+ generic operations above: self-assign, plus the marker comment.
40
+ <!-- issue-claim:end -->
41
+
9
42
  Use /tdd where possible, at pre-agreed seams.
10
43
 
11
44
  Run typechecking regularly, single test files regularly, and the full test suite once at the end.
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  name: kit-release
3
- description: "Prepare a verified release PR for agent-workflow-kit, delegate landing to wrapup, then monitor the trusted post-merge publishing flow through npm/GitHub parity."
3
+ description: "Prepare and integrate a verified agent-workflow-kit release, then record separately confirmed publication intent with an annotated version tag and monitor npm/GitHub parity."
4
4
  ---
5
5
 
6
6
  # Kit Release
7
7
 
8
8
  Prepare a release deterministically. This skill owns the shipped-delta decision,
9
- metadata preparation, and verification. It does not implement commit, push, PR,
10
- merge, registry publishing, tags, or release creation.
9
+ metadata preparation, verification, and the separate post-merge publication
10
+ gate. It delegates commit, branch push, PR, merge, and cleanup to wrapup. It
11
+ never publishes to a registry or creates a GitHub release directly.
11
12
 
12
13
  ## Workflow
13
14
 
@@ -22,11 +23,20 @@ merge, registry publishing, tags, or release creation.
22
23
  recommend Major, additions recommend Minor, and changed content recommends
23
24
  Patch.
24
25
 
25
- 2. Ask the user to confirm exactly one target Semver. Do not change release
26
- metadata before confirmation. A recommendation is advice; the confirmed
27
- target is authority.
26
+ 2. Resolve authority for exactly one target Semver:
28
27
 
29
- 3. Prepare that exact version:
28
+ - Normally, ask the user to confirm the target before changing release
29
+ metadata. A recommendation is advice; the confirmed target is authority.
30
+ - When the caller carries an **explicit AFK end-to-end mandate** whose scope
31
+ includes release preparation, accept the deterministic recommendation as
32
+ the target for **reversible metadata preparation** and record that choice.
33
+ Do not turn a narrower build-only or single-action request into this
34
+ authority.
35
+
36
+ Both routes authorize one prepared target only. Neither authorizes
37
+ publication.
38
+
39
+ 3. Prepare that authorized exact version:
30
40
 
31
41
  ```sh
32
42
  npm run release:prepare -- --version <confirmed-version>
@@ -42,7 +52,21 @@ merge, registry publishing, tags, or release creation.
42
52
  `scripts/wrapup-land.py` exclusively own commit, push, PR creation, merge,
43
53
  and cleanup. Do not reproduce those operations here.
44
54
 
45
- 5. After merge, monitor the `release.yml` workflow and inspect its externally
55
+ 5. After merge, report the exact integrated version and commit as
56
+ `awaiting-tag`. Merging integrates the prepared release; it cannot start
57
+ publication. Creating and pushing the annotated `v<version>` tag requires a
58
+ **separate explicit confirmation** to publish that exact version. The
59
+ earlier Semver confirmation or AFK preparation mandate authorized metadata
60
+ preparation, not publication.
61
+
62
+ 6. After that confirmation, verify that the package version on current
63
+ `origin/main` is exactly `<version>`. Create a matching annotated
64
+ `v<version>` tag on that commit and push only that tag. A lightweight tag,
65
+ mismatching version, or commit outside canonical `main` is invalid release
66
+ intent. Never infer a tag target, move an existing tag, or tag an unmerged
67
+ commit.
68
+
69
+ 7. Monitor the tag-triggered `release.yml` workflow and inspect its externally
46
70
  reconstructable state:
47
71
 
48
72
  ```sh
@@ -56,6 +80,17 @@ merge, registry publishing, tags, or release creation.
56
80
  release asset have identical version, manifest hash, and tarball integrity.
57
81
  The release is complete only at `released`.
58
82
 
83
+ Manual dispatch is recovery only. It requires the explicit existing
84
+ annotated tag and runs the same idempotent reconciler:
85
+
86
+ ```sh
87
+ gh workflow run release.yml -f tag=v<version>
88
+ ```
89
+
90
+ Use it only after reconstructing the release state for that tag. Never use
91
+ dispatch as the normal publication route or substitute a new version for a
92
+ partial release.
93
+
59
94
  The registry identity is **`@ikon85/agent-workflow-kit`**. The unscoped
60
95
  `agent-workflow-kit` package is owned by another publisher and must never be
61
96
  queried, published, or treated as this repository's release.
@@ -62,6 +62,16 @@ node scripts/readiness.mjs check --skill orchestrate-wave --json
62
62
  change — current gate, last green milestone, next step, visible blocker/risk. A
63
63
  still-running tool session is stated as such; never wait silently for the final
64
64
  result.
65
+ - **Authorization scope is sticky and gates are local.** A single-Wave mandate
66
+ authorizes only that Wave. A later explicit whole-Program mandate authorizes all
67
+ planned Waves in that Program and overrides a default per-Wave authorization
68
+ sentence in the Program-PRD; record that scope once and **Do not re-ask at each
69
+ Wave boundary**. A manual or irreversible gate pauses only the gated action:
70
+ continue every dependency-safe reversible or read-only step inside the
71
+ authorized scope, including preparation for later Waves. A persistent goal
72
+ must not be marked `blocked` while meaningful authorized safe work remains
73
+ anywhere in that scope. None of this carries authorization into the gated
74
+ irreversible action itself.
65
75
  - **Degrade by subtraction, never by improvisation.** The defined failure paths:
66
76
  - **Slice stays red after escalation** (2-strikes rule, see Routing): pull the
67
77
  slice — do not merge it (or revert its merge), pull every dependent that
@@ -180,6 +190,14 @@ Before each slice, bind **(a) inline vs delegate** and **(b) tier + effort** und
180
190
  Standing rules. Tiny mechanical work may stay inline.
181
191
  For Path A/B, create one worktree per agent from wave HEAD, using `§Setup` or
182
192
  `git worktree add <path> -b feat/<anchor>-<slug>`.
193
+ - **Claim each slice issue at builder launch — the wave claim is not a slice
194
+ claim.** It guards the anchor on this machine only; the slice issue is the
195
+ grabbable unit a second machine or cloud agent sees. Before dispatch, skip and
196
+ report any slice already carrying a foreign claim (assignee or
197
+ `<!-- agent-claim: ... -->` comment this run did not plant) — never overwrite
198
+ one. Otherwise assign it to yourself and post
199
+ `<!-- agent-claim: branch=<slice-branch>; worktree=<builder-worktree>; date=<YYYY-MM-DD> -->`
200
+ so the claim names the WIP. Commands: `docs/agents/issue-tracker.md`, §Pickup claim.
183
201
  - **Build the prompt from [`references/builder-contract.md`](references/builder-contract.md)**
184
202
  — fill the slots with the slice's VERBATIM What+AC, plan decision, recon
185
203
  file:line map and consume-only lines; never paraphrase (paraphrase drift has
@@ -190,7 +208,8 @@ For Path A/B, create one worktree per agent from wave HEAD, using `§Setup` or
190
208
 
191
209
  **Done when:** every dispatched slice reported back with commit SHA + green
192
210
  package tests + green fast gate (`§Builder Commands`) — or a STOP item you resolved
193
- (answered / re-dispatched) before integration.
211
+ (answered / re-dispatched) before integration · every dispatched slice issue
212
+ carries this run's claim, every foreign-claimed slice skipped and reported.
194
213
 
195
214
  ## Phase 3 — Serial integration
196
215
 
@@ -302,6 +321,9 @@ written · merge order documented.
302
321
  `wave-active/<anchor>`, call `releaseWaveClaim` with this run's owner after
303
322
  success or abort; its owner check, not a broad `wave-active/*` pattern,
304
323
  authorizes cleanup, and a foreign marker is left untouched.
324
+ - **Release this run's slice claims.** A landed slice's PR supersedes its claim;
325
+ for a pulled or abandoned slice remove the claim this run planted (unassign +
326
+ `claim released` comment) so it stays grabbable. Foreign ones stay untouched.
305
327
  - **Before removing any slice worktree, read its `ANNAHMEN.md`** (an assumptions
306
328
  log, gitignored at worktree-root) and propagate each build-time assumption marker
307
329
  to the sibling issue it carries. A hand-driven multi-PR / migration landing does
@@ -331,7 +353,8 @@ written · merge order documented.
331
353
  - Leave slice worktrees for the user to inspect, or note they're
332
354
  post-merge-removable.
333
355
 
334
- **Done when:** no orphan process · this run's claim removed · ANNAHMEN propagated ·
356
+ **Done when:** no orphan process · this run's wave claim removed · this run's
357
+ unlanded slice claims released · ANNAHMEN propagated ·
335
358
  anchor reconciled + leaf closes verified · anchor closure decided and documented ·
336
359
  Program-PRD propagation completed or explicitly skipped · final report lists
337
360
  landed/pulled slices as **X of Y**.
@@ -23,6 +23,17 @@ Create a GitHub issue.
23
23
 
24
24
  Run `gh issue view <number> --comments`.
25
25
 
26
+ ## Pickup claim
27
+
28
+ Used by `/implement`, `/diagnose`, and `/orchestrate-wave`: the visible claim
29
+ that keeps a second session, machine, or cloud agent off an issue already being
30
+ built. The marker carries the WIP location, the assignee makes the claim visible
31
+ in list views.
32
+
33
+ - **Check** (before any edit): `gh issue view <n> --json assignees,comments --jq '{assignees: [.assignees[].login], claims: [.comments[].body | select(contains("<!-- agent-claim:"))]}'` — a foreign assignee or a marker this session did not plant is a foreign claim: stop and report it, never overwrite or delete it.
34
+ - **Claim**: `gh issue edit <n> --add-assignee @me`, then post the marker as a comment — `gh issue comment <n> --body '<!-- agent-claim: branch=<branch>; worktree=<absolute-path>; date=<YYYY-MM-DD> -->'`.
35
+ - **Release**: a PR referencing the issue supersedes the claim — no extra step when the work lands. On abandon: `gh issue edit <n> --remove-assignee @me` plus `gh issue comment <n> --body "claim released"`.
36
+
26
37
  ## Wayfinding operations
27
38
 
28
39
  Used by `/wayfinder`. The **map** is a single issue with **child** issues as tickets.
@@ -22,6 +22,17 @@ Create a GitLab issue.
22
22
 
23
23
  Run `glab issue view <number> --comments`.
24
24
 
25
+ ## Pickup claim
26
+
27
+ Used by `/implement`, `/diagnose`, and `/orchestrate-wave`: the visible claim
28
+ that keeps a second session, machine, or cloud agent off an issue already being
29
+ built. The marker carries the WIP location, the assignee makes the claim visible
30
+ in list views.
31
+
32
+ - **Check** (before any edit): `glab issue view <n> --comments` (or `-F json`) — a foreign assignee, or an `<!-- agent-claim: ... -->` note this session did not plant, is a foreign claim: stop and report it, never overwrite or delete it.
33
+ - **Claim**: `glab issue update <n> --assignee @me`, then post the marker as a note — `glab issue note <n> --message '<!-- agent-claim: branch=<branch>; worktree=<absolute-path>; date=<YYYY-MM-DD> -->'`.
34
+ - **Release**: a merge request referencing the issue supersedes the claim — no extra step when the work lands. On abandon, drop yourself with the `/unassign @<your-user>` quick action (`glab issue note <n> --message "/unassign @<your-user>"`) and post a `claim released` note.
35
+
25
36
  ## Wayfinding operations
26
37
 
27
38
  Used by `/wayfinder`. The **map** is a single issue with **child** issues as tickets.
@@ -18,6 +18,17 @@ Create a new file under `.scratch/<feature-slug>/` (creating the directory if ne
18
18
 
19
19
  Read the file at the referenced path. The user will normally pass the path or the issue number directly.
20
20
 
21
+ ## Pickup claim
22
+
23
+ Used by `/implement`, `/diagnose`, and `/orchestrate-wave`: the visible claim
24
+ that keeps a second session, machine, or cloud agent off an issue already being
25
+ built. There is no assignee field here, so the marker line carries the whole
26
+ claim — commit it, otherwise no other checkout can see it.
27
+
28
+ - **Check** (before any edit): read the issue file and grep it for `<!-- agent-claim:`. A marker this session did not plant is a foreign claim: stop and report it, never overwrite or delete it.
29
+ - **Claim**: set `Status: claimed` and add one marker line directly under it — `<!-- agent-claim: branch=<branch>; worktree=<absolute-path>; date=<YYYY-MM-DD> -->` — then commit and push the issue file so other checkouts see the claim.
30
+ - **Release**: a PR referencing the issue supersedes the claim. On abandon, delete your own marker line, reset `Status:` to its pre-pickup role, and commit.
31
+
21
32
  ## Wayfinding operations
22
33
 
23
34
  Used by `/wayfinder`. The **map** is a file with one **child** file per ticket.
@@ -11,6 +11,41 @@ A discipline for hard bugs. Skip phases only when explicitly justified.
11
11
 
12
12
  When exploring the codebase, read `CONTEXT.md` (if it exists) to get a clear mental model of the relevant modules, and check ADRs in the area you're touching.
13
13
 
14
+ ## Phase 0 — Claim the tracked issue
15
+
16
+ Applies only when the bug arrives as a tracked issue. A bug reported in chat has
17
+ nothing to claim; go straight to Phase 1.
18
+
19
+ <!-- issue-claim:start -->
20
+ **Claim the issue before you build.** A worktree, branch, or PR check only sees
21
+ this machine, and only once someone has pushed — the claim on the issue itself
22
+ is the only signal a second session, a second machine, or a cloud agent can
23
+ read.
24
+
25
+ 1. **Check first.** Read the issue's assignee and its claim comments. An
26
+ `<!-- agent-claim: ... -->` marker you did not plant, or an assignee that is
27
+ not you, is a **foreign claim**: **STOP**, report the claimed branch and
28
+ worktree, and ask the user how to proceed. Take the issue over only on their
29
+ word, and never delete a foreign claim. A claim whose branch and worktree no
30
+ longer exist is stale — say that and let the user decide; do not assume it is
31
+ dead.
32
+ 2. **Plant your claim, before the first edit.** Assign the issue to yourself
33
+ where the tracker supports it, and post the claim marker as a comment:
34
+ `<!-- agent-claim: branch=<branch>; worktree=<absolute-path>; date=<YYYY-MM-DD> -->`
35
+ Branch and worktree are the payload — without them a colliding session sees
36
+ the collision but cannot find the work in progress.
37
+ 3. **Release.** A PR that references the issue **supersedes** the claim, so
38
+ landing needs no extra step. If you abandon or hand back the work, remove
39
+ your own claim (unassign plus a one-line `claim released` comment) before you
40
+ stop.
41
+
42
+ The concrete commands are your tracker's — `docs/agents/issue-tracker.md`,
43
+ §Pickup claim. If that layer documents no claim convention, fall back to the two
44
+ generic operations above: self-assign, plus the marker comment.
45
+ <!-- issue-claim:end -->
46
+
47
+ Building the Phase-1 loop is already work: claim before it, not after.
48
+
14
49
  ## Phase 1 — Build a feedback loop
15
50
 
16
51
  **This is the skill.** Everything else is mechanical. If you have a **tight** pass/fail signal for the bug — one that goes red on _this_ bug — you will find the cause; bisection, hypothesis-testing, and instrumentation all just consume it. If you don't have one, no amount of staring at code will save you.
@@ -6,6 +6,39 @@ disable-model-invocation: true
6
6
 
7
7
  Implement the work described by the user in the PRD or issues.
8
8
 
9
+ ## Pickup — claim the issue first
10
+
11
+ Applies whenever the work comes from a tracked issue. Work handed over as plain
12
+ text or a local plan has nothing to claim; skip this section then.
13
+
14
+ <!-- issue-claim:start -->
15
+ **Claim the issue before you build.** A worktree, branch, or PR check only sees
16
+ this machine, and only once someone has pushed — the claim on the issue itself
17
+ is the only signal a second session, a second machine, or a cloud agent can
18
+ read.
19
+
20
+ 1. **Check first.** Read the issue's assignee and its claim comments. An
21
+ `<!-- agent-claim: ... -->` marker you did not plant, or an assignee that is
22
+ not you, is a **foreign claim**: **STOP**, report the claimed branch and
23
+ worktree, and ask the user how to proceed. Take the issue over only on their
24
+ word, and never delete a foreign claim. A claim whose branch and worktree no
25
+ longer exist is stale — say that and let the user decide; do not assume it is
26
+ dead.
27
+ 2. **Plant your claim, before the first edit.** Assign the issue to yourself
28
+ where the tracker supports it, and post the claim marker as a comment:
29
+ `<!-- agent-claim: branch=<branch>; worktree=<absolute-path>; date=<YYYY-MM-DD> -->`
30
+ Branch and worktree are the payload — without them a colliding session sees
31
+ the collision but cannot find the work in progress.
32
+ 3. **Release.** A PR that references the issue **supersedes** the claim, so
33
+ landing needs no extra step. If you abandon or hand back the work, remove
34
+ your own claim (unassign plus a one-line `claim released` comment) before you
35
+ stop.
36
+
37
+ The concrete commands are your tracker's — `docs/agents/issue-tracker.md`,
38
+ §Pickup claim. If that layer documents no claim convention, fall back to the two
39
+ generic operations above: self-assign, plus the marker comment.
40
+ <!-- issue-claim:end -->
41
+
9
42
  Use /tdd where possible, at pre-agreed seams.
10
43
 
11
44
  Run typechecking regularly, single test files regularly, and the full test suite once at the end.
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  name: kit-release
3
- description: "Prepare a verified release PR for agent-workflow-kit, delegate landing to wrapup, then monitor the trusted post-merge publishing flow through npm/GitHub parity."
3
+ description: "Prepare and integrate a verified agent-workflow-kit release, then record separately confirmed publication intent with an annotated version tag and monitor npm/GitHub parity."
4
4
  ---
5
5
 
6
6
  # Kit Release
7
7
 
8
8
  Prepare a release deterministically. This skill owns the shipped-delta decision,
9
- metadata preparation, and verification. It does not implement commit, push, PR,
10
- merge, registry publishing, tags, or release creation.
9
+ metadata preparation, verification, and the separate post-merge publication
10
+ gate. It delegates commit, branch push, PR, merge, and cleanup to wrapup. It
11
+ never publishes to a registry or creates a GitHub release directly.
11
12
 
12
13
  ## Workflow
13
14
 
@@ -22,11 +23,20 @@ merge, registry publishing, tags, or release creation.
22
23
  recommend Major, additions recommend Minor, and changed content recommends
23
24
  Patch.
24
25
 
25
- 2. Ask the user to confirm exactly one target Semver. Do not change release
26
- metadata before confirmation. A recommendation is advice; the confirmed
27
- target is authority.
26
+ 2. Resolve authority for exactly one target Semver:
28
27
 
29
- 3. Prepare that exact version:
28
+ - Normally, ask the user to confirm the target before changing release
29
+ metadata. A recommendation is advice; the confirmed target is authority.
30
+ - When the caller carries an **explicit AFK end-to-end mandate** whose scope
31
+ includes release preparation, accept the deterministic recommendation as
32
+ the target for **reversible metadata preparation** and record that choice.
33
+ Do not turn a narrower build-only or single-action request into this
34
+ authority.
35
+
36
+ Both routes authorize one prepared target only. Neither authorizes
37
+ publication.
38
+
39
+ 3. Prepare that authorized exact version:
30
40
 
31
41
  ```sh
32
42
  npm run release:prepare -- --version <confirmed-version>
@@ -42,7 +52,21 @@ merge, registry publishing, tags, or release creation.
42
52
  `scripts/wrapup-land.py` exclusively own commit, push, PR creation, merge,
43
53
  and cleanup. Do not reproduce those operations here.
44
54
 
45
- 5. After merge, monitor the `release.yml` workflow and inspect its externally
55
+ 5. After merge, report the exact integrated version and commit as
56
+ `awaiting-tag`. Merging integrates the prepared release; it cannot start
57
+ publication. Creating and pushing the annotated `v<version>` tag requires a
58
+ **separate explicit confirmation** to publish that exact version. The
59
+ earlier Semver confirmation or AFK preparation mandate authorized metadata
60
+ preparation, not publication.
61
+
62
+ 6. After that confirmation, verify that the package version on current
63
+ `origin/main` is exactly `<version>`. Create a matching annotated
64
+ `v<version>` tag on that commit and push only that tag. A lightweight tag,
65
+ mismatching version, or commit outside canonical `main` is invalid release
66
+ intent. Never infer a tag target, move an existing tag, or tag an unmerged
67
+ commit.
68
+
69
+ 7. Monitor the tag-triggered `release.yml` workflow and inspect its externally
46
70
  reconstructable state:
47
71
 
48
72
  ```sh
@@ -56,6 +80,17 @@ merge, registry publishing, tags, or release creation.
56
80
  release asset have identical version, manifest hash, and tarball integrity.
57
81
  The release is complete only at `released`.
58
82
 
83
+ Manual dispatch is recovery only. It requires the explicit existing
84
+ annotated tag and runs the same idempotent reconciler:
85
+
86
+ ```sh
87
+ gh workflow run release.yml -f tag=v<version>
88
+ ```
89
+
90
+ Use it only after reconstructing the release state for that tag. Never use
91
+ dispatch as the normal publication route or substitute a new version for a
92
+ partial release.
93
+
59
94
  The registry identity is **`@ikon85/agent-workflow-kit`**. The unscoped
60
95
  `agent-workflow-kit` package is owned by another publisher and must never be
61
96
  queried, published, or treated as this repository's release.
@@ -70,6 +70,16 @@ node scripts/readiness.mjs check --skill orchestrate-wave --json
70
70
  change — current gate, last green milestone, next step, visible blocker/risk. A
71
71
  still-running tool session is stated as such; never wait silently for the final
72
72
  result.
73
+ - **Authorization scope is sticky and gates are local.** A single-Wave mandate
74
+ authorizes only that Wave. A later explicit whole-Program mandate authorizes all
75
+ planned Waves in that Program and overrides a default per-Wave authorization
76
+ sentence in the Program-PRD; record that scope once and **Do not re-ask at each
77
+ Wave boundary**. A manual or irreversible gate pauses only the gated action:
78
+ continue every dependency-safe reversible or read-only step inside the
79
+ authorized scope, including preparation for later Waves. A persistent goal
80
+ must not be marked `blocked` while meaningful authorized safe work remains
81
+ anywhere in that scope. None of this carries authorization into the gated
82
+ irreversible action itself.
73
83
  - **Degrade by subtraction, never by improvisation.** The defined failure paths:
74
84
  - **Slice stays red after escalation** (2-strikes rule, see Routing): pull the
75
85
  slice — do not merge it (or revert its merge), pull every dependent that
@@ -188,6 +198,14 @@ Before each slice, bind **(a) inline vs delegate** and **(b) tier + effort** und
188
198
  Standing rules. Tiny mechanical work may stay inline.
189
199
  For Path A/B, create one worktree per agent from wave HEAD, using `§Setup` or
190
200
  `git worktree add <path> -b feat/<anchor>-<slug>`.
201
+ - **Claim each slice issue at builder launch — the wave claim is not a slice
202
+ claim.** It guards the anchor on this machine only; the slice issue is the
203
+ grabbable unit a second machine or cloud agent sees. Before dispatch, skip and
204
+ report any slice already carrying a foreign claim (assignee or
205
+ `<!-- agent-claim: ... -->` comment this run did not plant) — never overwrite
206
+ one. Otherwise assign it to yourself and post
207
+ `<!-- agent-claim: branch=<slice-branch>; worktree=<builder-worktree>; date=<YYYY-MM-DD> -->`
208
+ so the claim names the WIP. Commands: `docs/agents/issue-tracker.md`, §Pickup claim.
191
209
  - **Build the prompt from [`references/builder-contract.md`](references/builder-contract.md)**
192
210
  — fill the slots with the slice's VERBATIM What+AC, plan decision, recon
193
211
  file:line map and consume-only lines; never paraphrase (paraphrase drift has
@@ -198,7 +216,8 @@ For Path A/B, create one worktree per agent from wave HEAD, using `§Setup` or
198
216
 
199
217
  **Done when:** every dispatched slice reported back with commit SHA + green
200
218
  package tests + green fast gate (`§Builder Commands`) — or a STOP item you resolved
201
- (answered / re-dispatched) before integration.
219
+ (answered / re-dispatched) before integration · every dispatched slice issue
220
+ carries this run's claim, every foreign-claimed slice skipped and reported.
202
221
 
203
222
  ## Phase 3 — Serial integration
204
223
 
@@ -310,6 +329,9 @@ written · merge order documented.
310
329
  `wave-active/<anchor>`, call `releaseWaveClaim` with this run's owner after
311
330
  success or abort; its owner check, not a broad `wave-active/*` pattern,
312
331
  authorizes cleanup, and a foreign marker is left untouched.
332
+ - **Release this run's slice claims.** A landed slice's PR supersedes its claim;
333
+ for a pulled or abandoned slice remove the claim this run planted (unassign +
334
+ `claim released` comment) so it stays grabbable. Foreign ones stay untouched.
313
335
  - **Before removing any slice worktree, read its `ANNAHMEN.md`** (an assumptions
314
336
  log, gitignored at worktree-root) and propagate each build-time assumption marker
315
337
  to the sibling issue it carries. A hand-driven multi-PR / migration landing does
@@ -339,7 +361,8 @@ written · merge order documented.
339
361
  - Leave slice worktrees for the user to inspect, or note they're
340
362
  post-merge-removable.
341
363
 
342
- **Done when:** no orphan process · this run's claim removed · ANNAHMEN propagated ·
364
+ **Done when:** no orphan process · this run's wave claim removed · this run's
365
+ unlanded slice claims released · ANNAHMEN propagated ·
343
366
  anchor reconciled + leaf closes verified · anchor closure decided and documented ·
344
367
  Program-PRD propagation completed or explicitly skipped · final report lists
345
368
  landed/pulled slices as **X of Y**.
@@ -23,6 +23,17 @@ Create a GitHub issue.
23
23
 
24
24
  Run `gh issue view <number> --comments`.
25
25
 
26
+ ## Pickup claim
27
+
28
+ Used by `/implement`, `/diagnose`, and `/orchestrate-wave`: the visible claim
29
+ that keeps a second session, machine, or cloud agent off an issue already being
30
+ built. The marker carries the WIP location, the assignee makes the claim visible
31
+ in list views.
32
+
33
+ - **Check** (before any edit): `gh issue view <n> --json assignees,comments --jq '{assignees: [.assignees[].login], claims: [.comments[].body | select(contains("<!-- agent-claim:"))]}'` — a foreign assignee or a marker this session did not plant is a foreign claim: stop and report it, never overwrite or delete it.
34
+ - **Claim**: `gh issue edit <n> --add-assignee @me`, then post the marker as a comment — `gh issue comment <n> --body '<!-- agent-claim: branch=<branch>; worktree=<absolute-path>; date=<YYYY-MM-DD> -->'`.
35
+ - **Release**: a PR referencing the issue supersedes the claim — no extra step when the work lands. On abandon: `gh issue edit <n> --remove-assignee @me` plus `gh issue comment <n> --body "claim released"`.
36
+
26
37
  ## Wayfinding operations
27
38
 
28
39
  Used by `/wayfinder`. The **map** is a single issue with **child** issues as tickets.
@@ -22,6 +22,17 @@ Create a GitLab issue.
22
22
 
23
23
  Run `glab issue view <number> --comments`.
24
24
 
25
+ ## Pickup claim
26
+
27
+ Used by `/implement`, `/diagnose`, and `/orchestrate-wave`: the visible claim
28
+ that keeps a second session, machine, or cloud agent off an issue already being
29
+ built. The marker carries the WIP location, the assignee makes the claim visible
30
+ in list views.
31
+
32
+ - **Check** (before any edit): `glab issue view <n> --comments` (or `-F json`) — a foreign assignee, or an `<!-- agent-claim: ... -->` note this session did not plant, is a foreign claim: stop and report it, never overwrite or delete it.
33
+ - **Claim**: `glab issue update <n> --assignee @me`, then post the marker as a note — `glab issue note <n> --message '<!-- agent-claim: branch=<branch>; worktree=<absolute-path>; date=<YYYY-MM-DD> -->'`.
34
+ - **Release**: a merge request referencing the issue supersedes the claim — no extra step when the work lands. On abandon, drop yourself with the `/unassign @<your-user>` quick action (`glab issue note <n> --message "/unassign @<your-user>"`) and post a `claim released` note.
35
+
25
36
  ## Wayfinding operations
26
37
 
27
38
  Used by `/wayfinder`. The **map** is a single issue with **child** issues as tickets.
@@ -18,6 +18,17 @@ Create a new file under `.scratch/<feature-slug>/` (creating the directory if ne
18
18
 
19
19
  Read the file at the referenced path. The user will normally pass the path or the issue number directly.
20
20
 
21
+ ## Pickup claim
22
+
23
+ Used by `/implement`, `/diagnose`, and `/orchestrate-wave`: the visible claim
24
+ that keeps a second session, machine, or cloud agent off an issue already being
25
+ built. There is no assignee field here, so the marker line carries the whole
26
+ claim — commit it, otherwise no other checkout can see it.
27
+
28
+ - **Check** (before any edit): read the issue file and grep it for `<!-- agent-claim:`. A marker this session did not plant is a foreign claim: stop and report it, never overwrite or delete it.
29
+ - **Claim**: set `Status: claimed` and add one marker line directly under it — `<!-- agent-claim: branch=<branch>; worktree=<absolute-path>; date=<YYYY-MM-DD> -->` — then commit and push the issue file so other checkouts see the claim.
30
+ - **Release**: a PR referencing the issue supersedes the claim. On abandon, delete your own marker line, reset `Status:` to its pre-pickup role, and commit.
31
+
21
32
  ## Wayfinding operations
22
33
 
23
34
  Used by `/wayfinder`. The **map** is a file with one **child** file per ticket.
package/README.md CHANGED
@@ -24,8 +24,10 @@ changes.
24
24
  Maintainers prepare releases with `/kit-release`. It derives the shipped delta
25
25
  from a fresh manifest, recommends Semver, applies only the confirmed target,
26
26
  regenerates the checked-in manifest, and runs the full test and pack gates.
27
- Landing remains owned by `/wrapup`; publishing the matching npm package and
28
- GitHub release happens only through the configured post-merge release flow.
27
+ Landing remains owned by `/wrapup` and only integrates the prepared version.
28
+ After a separate publication confirmation, a matching annotated `v<version>`
29
+ tag on canonical `main` starts the trusted publish flow. Manual dispatch
30
+ requires an explicit existing tag and only reconciles an incomplete release.
29
31
 
30
32
  These are the skills, helper scripts, and conventions one team actually uses to
31
33
  take work from a vague idea to a merged, verified PR with [Claude Code] and
@@ -385,6 +387,34 @@ the old way. Decision record:
385
387
 
386
388
  ## Release notes
387
389
 
390
+ ### 0.34.3
391
+
392
+ - changed: `.agents/skills/diagnose/SKILL.md`
393
+ - changed: `.agents/skills/implement/SKILL.md`
394
+ - changed: `.agents/skills/orchestrate-wave/SKILL.md`
395
+ - changed: `.agents/skills/setup-workflow/issue-tracker-github.md`
396
+ - changed: `.agents/skills/setup-workflow/issue-tracker-gitlab.md`
397
+ - changed: `.agents/skills/setup-workflow/issue-tracker-local.md`
398
+ - changed: `.claude/skills/diagnose/SKILL.md`
399
+ - changed: `.claude/skills/implement/SKILL.md`
400
+ - changed: `.claude/skills/orchestrate-wave/SKILL.md`
401
+ - changed: `.claude/skills/setup-workflow/issue-tracker-github.md`
402
+ - changed: `.claude/skills/setup-workflow/issue-tracker-gitlab.md`
403
+ - changed: `.claude/skills/setup-workflow/issue-tracker-local.md`
404
+
405
+ ### 0.34.2
406
+
407
+ - changed: `.agents/skills/kit-release/SKILL.md`
408
+ - changed: `.agents/skills/orchestrate-wave/SKILL.md`
409
+ - changed: `.claude/skills/kit-release/SKILL.md`
410
+ - changed: `.claude/skills/orchestrate-wave/SKILL.md`
411
+
412
+ ### 0.34.1
413
+
414
+ - changed: `.agents/skills/kit-release/SKILL.md`
415
+ - changed: `.claude/skills/kit-release/SKILL.md`
416
+ - changed: `scripts/release-state.mjs`
417
+
388
418
  ### 0.34.0
389
419
 
390
420
  - added: `src/commands/routing-policy-update.mjs`