@ikon85/agent-workflow-kit 0.42.0 → 0.42.1
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/README.md
CHANGED
|
@@ -2,12 +2,165 @@
|
|
|
2
2
|
<!-- agent-workflow-kit: project-extension/v1; skill=orchestrate-wave -->
|
|
3
3
|
# Project layer — orchestrate-wave
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Filled 2026-07-27 after Welle 18 (#289) ran the whole loop end-to-end — recon,
|
|
6
|
+
build, integrate, verify, land, tag, publish — and proved the recipe below. The
|
|
7
|
+
sections were deliberately empty until then; the generic fallback carried that
|
|
8
|
+
run and cost it a `degraded` start plus a hand-derivation of every command here.
|
|
9
|
+
|
|
10
|
+
This repo has **no database, no dev server, no typecheck step and no browser
|
|
11
|
+
surface**, so several generic phases collapse to very little. Where that is the
|
|
12
|
+
case the section says so rather than inventing a command.
|
|
6
13
|
|
|
7
14
|
## §Setup
|
|
15
|
+
|
|
16
|
+
Nothing to start. No DB, no tunnel, no service, no dev server — Phase 0's
|
|
17
|
+
"start what live-verify needs" is a no-op here.
|
|
18
|
+
|
|
19
|
+
Two things that are *not* no-ops:
|
|
20
|
+
|
|
21
|
+
- `git config core.hooksPath .githooks` once per clone (worktrees inherit it).
|
|
22
|
+
- `npm install` in the wave worktree after fast-forwarding to `origin/main` —
|
|
23
|
+
the lockfile is untracked, so dependencies do not travel with the branch.
|
|
24
|
+
|
|
8
25
|
## §Builder Commands
|
|
26
|
+
|
|
27
|
+
Per-slice gate, run by the implementer before reporting back:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
npm test # test:node (node --test) + test:python (unittest)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The fast pre-commit lints run automatically via `.githooks/pre-commit`
|
|
34
|
+
(~3 s, skill/manifest lints). A slice is not "green" on the fast lints alone.
|
|
35
|
+
|
|
9
36
|
## §Builder Hard Rules
|
|
37
|
+
|
|
38
|
+
- **Never `--no-verify`.** pre-commit and pre-push are the backstop, not an
|
|
39
|
+
obstacle.
|
|
40
|
+
- **English-first prose** in every published skill; the language census in the
|
|
41
|
+
maintainer suite enforces it.
|
|
42
|
+
- **No hardcoded board values** — labels, headings, field IDs and status names
|
|
43
|
+
come from `docs/agents/board-sync.md`; the portability lint blocks literals.
|
|
44
|
+
- **Dual-surface mirror in the same PR.** A changed `.claude/skills/<s>/SKILL.md`
|
|
45
|
+
needs its `.agents/skills/<s>/SKILL.md` mirror via `codex-adapter-sync` in the
|
|
46
|
+
same PR, never after merge.
|
|
47
|
+
- **Shipped-file changes must preserve the manifest/reconcile contract.**
|
|
48
|
+
|
|
10
49
|
## §Integration Suites
|
|
50
|
+
|
|
51
|
+
Both frameworks, every time — `npm test` runs both and a red in either is a red:
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
npm test
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- `test:node` — `node --test` (665 tests as of 0.42.0)
|
|
58
|
+
- `test:python` — `python3 -m unittest discover -s scripts -p 'test_*.py'`
|
|
59
|
+
(522 tests as of 0.42.0)
|
|
60
|
+
|
|
61
|
+
There is no typecheck step in this repo; do not look for one. Several
|
|
62
|
+
negative-path tests print `[FAIL] …` lines **by design** — only the runner's own
|
|
63
|
+
summary and exit code decide red or green.
|
|
64
|
+
|
|
11
65
|
## §Verify Recipe
|
|
66
|
+
|
|
67
|
+
Central verify is the `/local-ci` full gate, run from the wave worktree root.
|
|
68
|
+
It mirrors the CI `test` job step for step:
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
git fetch origin main
|
|
72
|
+
npm test
|
|
73
|
+
npm run kit:staleness
|
|
74
|
+
npm run release:guard -- --base "$(git merge-base origin/main HEAD)"
|
|
75
|
+
npm pack --dry-run
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
- **No branch-name-derived guard exists here**, so the generic skill's warning
|
|
79
|
+
about an integrated verify branch blocking with no baseline does not apply.
|
|
80
|
+
No skip or override is needed.
|
|
81
|
+
- **No browser, no headless login, no screenshots, no console check, no DB
|
|
82
|
+
compare, no design/brand check.** This repo ships text; "assert the AC as a
|
|
83
|
+
user-visible outcome" means reading the artefact the slice produced (an ADR,
|
|
84
|
+
a skill body, a script's output) and the tests that pin it.
|
|
85
|
+
- **`release:guard` red with "shipped delta has no version bump" is not a
|
|
86
|
+
failure of the wave** — it means the wave touched the shipped consumer set and
|
|
87
|
+
the release metadata is missing. See §Landing.
|
|
88
|
+
- **A flaky red is possible.** `scripts/codex-exec.test.mjs` contains
|
|
89
|
+
timing-sensitive tests that fail under CPU contention (#345). Re-run the single
|
|
90
|
+
test in isolation before treating it as a real red; a test that is green in
|
|
91
|
+
isolation and red under load is contention, not the wave.
|
|
92
|
+
|
|
12
93
|
## §Headless Login
|
|
94
|
+
|
|
95
|
+
Not applicable. No application, no browser surface, no authenticated session.
|
|
96
|
+
Never invent a login recipe for this repo.
|
|
97
|
+
|
|
13
98
|
## §Landing
|
|
99
|
+
|
|
100
|
+
**One PR for the whole wave**, base `main`. `main` is protected by the
|
|
101
|
+
`main protection` ruleset: a PR is required, the CI job **`test`** (job name, not
|
|
102
|
+
the workflow name `CI`) must be green with the branch up to date, and there are
|
|
103
|
+
no bypass actors — `gh pr merge --admin` does not help.
|
|
104
|
+
|
|
105
|
+
- `Closes #<n>` on its own line per leaf; `Part of #<anchor>` for the anchor,
|
|
106
|
+
never `closes`.
|
|
107
|
+
- Body via temp file + `--body-file`, and **run `gh` from the repo** (it resolves
|
|
108
|
+
the target repo from the cwd).
|
|
109
|
+
|
|
110
|
+
**Anchor reconcile, on PR create and on merge:**
|
|
111
|
+
|
|
112
|
+
```sh
|
|
113
|
+
python3 scripts/board-sync.py anchor-sync <anchor#> --dry-run # review first
|
|
114
|
+
python3 scripts/board-sync.py anchor-sync <anchor#>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
`anchor-sync` only works on a **promoted** anchor whose body carries a slice
|
|
118
|
+
table between `<!-- slice-table:start -->` and `<!-- slice-table:end -->`. A
|
|
119
|
+
stub-shaped anchor (a bullet list of slices, `wave-stub` label) makes it a no-op
|
|
120
|
+
that exits 1 with "no slice table found — nothing to sync". That is a promotion
|
|
121
|
+
gap, not a sync failure: install the table with the columns
|
|
122
|
+
`| # | Status | Slice | Sub-Issue | Gate | closes/refs |`, drop the `wave-stub`
|
|
123
|
+
label, then re-run. Do not hand-maintain the Status cells afterwards — they are
|
|
124
|
+
regenerated from the board.
|
|
125
|
+
|
|
126
|
+
**Completion, after merge:**
|
|
127
|
+
|
|
128
|
+
```sh
|
|
129
|
+
python3 scripts/board-sync.py add --issue <anchor#> --status-role done
|
|
130
|
+
gh issue close <anchor#> --reason completed --comment "…"
|
|
131
|
+
python3 scripts/board-sync.py item-of --issue <anchor#> # re-read: status must be Done
|
|
132
|
+
python3 scripts/board-sync.py parent-of <anchor#> # Program-PRD?
|
|
133
|
+
python3 scripts/board-sync.py program-sync <prd#> # after the anchor is Done
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Closing the issue does **not** move the board field — set the field, then re-read
|
|
137
|
+
both.
|
|
138
|
+
|
|
139
|
+
**New issues** go through `python3 scripts/board-sync.py create --title … --body-file …`,
|
|
140
|
+
never a bare `gh issue create`.
|
|
141
|
+
|
|
142
|
+
### Release lockstep
|
|
143
|
+
|
|
144
|
+
There is no deploy and no migration, but there **is** a publication gate, and a
|
|
145
|
+
wave that touches the shipped consumer set (anything in the kit manifest —
|
|
146
|
+
including `docs/adr/*` and `docs/research/*`) drags it along.
|
|
147
|
+
|
|
148
|
+
1. `npm run release:prepare -- --base origin/main` reports the delta and a
|
|
149
|
+
`recommendedBump` without writing anything.
|
|
150
|
+
2. **The confirmed Semver is the one human gate.** Ask, unless an explicit
|
|
151
|
+
end-to-end mandate covers release preparation. That confirmed version then
|
|
152
|
+
authorizes metadata, merge, tag *and* publish — do not ask again after merge.
|
|
153
|
+
3. `npm run release:prepare -- --version <x.y.z>`, commit the bump.
|
|
154
|
+
4. Merge the PR. Merging **integrates only**; it cannot publish.
|
|
155
|
+
5. Verify on canonical `main`: tip == merge commit, `package.json` version
|
|
156
|
+
matches, no existing tag. Then `git tag -a v<x.y.z> <main-tip> -m "…"` and
|
|
157
|
+
push. The annotated tag on the `main` tip is the sole publication intent.
|
|
158
|
+
6. **A red release run does not prove nothing was published.** Read
|
|
159
|
+
`npm view @ikon85/agent-workflow-kit version` and `gh release view v<x.y.z>`
|
|
160
|
+
directly, plus `npm run release:status` (cache-bypassing), before reacting.
|
|
161
|
+
7. **Recovery is `gh workflow run release.yml -f tag=v<x.y.z>` on the existing
|
|
162
|
+
tag** — the reconciler is idempotent. **Never recover by bumping the version.**
|
|
163
|
+
|
|
164
|
+
The release workflow runs the full suite *after* the tag is pushed, so a flaky
|
|
165
|
+
test strands an already-published tag. That is the recovery path above, not a
|
|
166
|
+
reason to re-tag.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ikon85/agent-workflow-kit",
|
|
3
|
-
"version": "0.42.
|
|
3
|
+
"version": "0.42.1",
|
|
4
4
|
"description": "Portable AI-agent workflow skills (plan → execute → land → learn) for Claude Code & Codex — grilling, TDD, diagnosis, two-axis code review, cross-model Codex review, design & domain-modeling, plus a skill router (ask-matt). npx init/update/diff/uninstall.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|