@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.
- package/.agents/skills/diagnose/SKILL.md +35 -0
- package/.agents/skills/implement/SKILL.md +33 -0
- package/.agents/skills/kit-release/SKILL.md +43 -8
- package/.agents/skills/orchestrate-wave/SKILL.md +25 -2
- package/.agents/skills/setup-workflow/issue-tracker-github.md +11 -0
- package/.agents/skills/setup-workflow/issue-tracker-gitlab.md +11 -0
- package/.agents/skills/setup-workflow/issue-tracker-local.md +11 -0
- package/.claude/skills/diagnose/SKILL.md +35 -0
- package/.claude/skills/implement/SKILL.md +33 -0
- package/.claude/skills/kit-release/SKILL.md +43 -8
- package/.claude/skills/orchestrate-wave/SKILL.md +25 -2
- package/.claude/skills/setup-workflow/issue-tracker-github.md +11 -0
- package/.claude/skills/setup-workflow/issue-tracker-gitlab.md +11 -0
- package/.claude/skills/setup-workflow/issue-tracker-local.md +11 -0
- package/README.md +32 -2
- package/agent-workflow-kit.package.json +16 -16
- package/docs/adr/0004-release-intent-is-a-version-tag.md +51 -0
- package/docs/agents/issue-tracker.md +11 -0
- package/package.json +1 -1
- package/scripts/kit-release.test.mjs +190 -0
- package/scripts/release-state.mjs +35 -5
- package/scripts/release-state.test.mjs +122 -5
- package/scripts/test_issue_claim_contract.py +169 -0
- package/scripts/test_orchestrate_wave_contract.py +13 -1
|
@@ -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
|
|
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,
|
|
10
|
-
|
|
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.
|
|
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
|
-
|
|
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,
|
|
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 ·
|
|
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
|
|
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,
|
|
10
|
-
|
|
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.
|
|
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
|
-
|
|
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,
|
|
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 ·
|
|
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
|
|
28
|
-
|
|
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`
|