@ikon85/agent-workflow-kit 0.26.1 → 0.27.0

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.
Files changed (33) hide show
  1. package/.agents/skills/ask-matt/SKILL.md +1 -2
  2. package/.agents/skills/board-to-waves/SKILL.md +2 -2
  3. package/.agents/skills/improve-codebase-architecture/SKILL.md +0 -2
  4. package/.agents/skills/setup-workflow/board-sync.md +11 -0
  5. package/.claude/skills/ask-matt/SKILL.md +1 -2
  6. package/.claude/skills/board-to-waves/SKILL.md +2 -2
  7. package/.claude/skills/improve-codebase-architecture/SKILL.md +0 -2
  8. package/.claude/skills/setup-pre-commit/SKILL.md +3 -0
  9. package/.claude/skills/setup-pre-commit/scripts/pre-commit.template.sh +6 -0
  10. package/.claude/skills/setup-workflow/board-sync.md +11 -0
  11. package/.claude/skills/skill-manifest.json +1 -9
  12. package/PROVENANCE.md +5 -4
  13. package/README.md +39 -17
  14. package/agent-workflow-kit.package.json +297 -49
  15. package/docs/agents/board-sync.md +3 -0
  16. package/docs/workflow.html +259 -0
  17. package/docs/workflow.png +0 -0
  18. package/package.json +1 -1
  19. package/scripts/board-sync.py +18 -13
  20. package/scripts/board_config.py +7 -0
  21. package/scripts/build-kit.mjs +2 -1
  22. package/scripts/build-kit.test.mjs +44 -1
  23. package/scripts/test_board_sync_wave_title.py +108 -0
  24. package/scripts/test_skill_precommit_template.py +30 -0
  25. package/src/commands/init.mjs +12 -1
  26. package/src/commands/update.mjs +2 -1
  27. package/src/lib/bundle.mjs +12 -6
  28. package/src/lib/manifest.mjs +13 -3
  29. package/src/lib/updateReconcile.mjs +22 -8
  30. package/.agents/skills/zoom-out/SKILL.md +0 -7
  31. package/.agents/skills/zoom-out/THIRD-PARTY-NOTICES.md +0 -29
  32. package/.claude/skills/zoom-out/SKILL.md +0 -7
  33. package/.claude/skills/zoom-out/THIRD-PARTY-NOTICES.md +0 -29
@@ -90,8 +90,7 @@ An independent second model catches what one model rationalises. Read-only, boun
90
90
 
91
91
  Not feature work — upkeep.
92
92
 
93
- - **`/improve-codebase-architecture`** — run in spare moments to keep the codebase good for agents. Surfaces **deepening opportunities**; picking one _generates an idea_ for the main flow at `/grill-with-docs`.
94
- - **`/zoom-out`** — step back from the diff to the structure when a change is fighting the codebase; recon that becomes a planned slice or guides a refactor in place.
93
+ - **`/improve-codebase-architecture`** — run in spare moments to keep the codebase good for agents, or step back from the diff to the structure when a change is fighting the codebase. Surfaces **deepening opportunities**; picking one _generates an idea_ for the main flow at `/grill-with-docs`.
95
94
  - **`/security-audit`** — a whole-app, application-layer security audit run as an independent two-model pass (two models audit the same code separately, then the remediation plan is hardened before any fix). Run before a release or after the attack surface changes (new endpoint, new input source, auth change, dependency bump). Infra hardening (ports/TLS/SSH/backups) is audited separately.
96
95
 
97
96
  ## Vocabulary underneath
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: board-to-waves
3
3
  disable-model-invocation: false
4
- "description": "Use when sweeping/grooming the GitHub backlog board to cluster open issues into thematic waves (Wellen) — \"lass uns das Board durchgehen\", \"was ist offen und passt zusammen\", \"clustern wir den Backlog\", \"welche Wellen stecken da drin\" — or to spot candidate waves before planning. Reads all open issues, groups them by the Gate+Booster+Splitter heuristic, estimates size/risk + grill-needed per candidate, and after the user confirms creates cluster/Wave-less candidate STUB issues with a To-Do checklist. STOPS at stubs: no PRD, no slicing, no sub-issue links, no promotion (downstream: to-prd matures the stub, to-issues slices + promotes). NOT for maturing/slicing ONE already-chosen candidate (to-prd/to-issues), NOT for per-issue triage labelling (triage), NOT for code comprehension (zoom-out) — this is board-WIDE thematic affinity grouping, not per-issue and not code-reading."
4
+ "description": "Use when sweeping/grooming the GitHub backlog board to cluster open issues into thematic waves (Wellen) — \"lass uns das Board durchgehen\", \"was ist offen und passt zusammen\", \"clustern wir den Backlog\", \"welche Wellen stecken da drin\" — or to spot candidate waves before planning. Reads all open issues, groups them by the Gate+Booster+Splitter heuristic, estimates size/risk + grill-needed per candidate, and after the user confirms creates cluster/Wave-less candidate STUB issues with a To-Do checklist. STOPS at stubs: no PRD, no slicing, no sub-issue links, no promotion (downstream: to-prd matures the stub, to-issues slices + promotes). NOT for maturing/slicing ONE already-chosen candidate (to-prd/to-issues), NOT for per-issue triage labelling (triage), NOT for code comprehension — this is board-WIDE thematic affinity grouping, not per-issue and not code-reading."
5
5
  ---
6
6
 
7
7
  # board-to-waves
@@ -130,6 +130,6 @@ Next step (<maintainer>'s call, separate): grill → to-prd (matures the stub)
130
130
 
131
131
  ## Notes
132
132
  - **Stops at stubs.** Never write the PRD, slice, link, promote, or call `to-prd`/`to-issues` yourself.
133
- - Boundary: `triage` = per-issue state machine; `zoom-out` = code comprehension; `board-to-waves` = board-wide thematic affinity. Different altitudes.
133
+ - Boundary: `triage` = per-issue state machine; `improve-codebase-architecture` = code structure; `board-to-waves` = board-wide thematic affinity. Different altitudes.
134
134
  - A leftover bucket is OK and intentional — not every issue belongs in a wave. Force-clustering dilutes the gate.
135
135
  - Size/risk are a rough estimate, not a commitment. <maintainer> can override the stub's "when to grill" recommendation at any time.
@@ -8,8 +8,6 @@ description: "Find deepening opportunities in a codebase, informed by the domain
8
8
 
9
9
  Surface architectural friction and propose **deepening opportunities** — refactors that turn shallow modules into deep ones. The aim is testability and AI-navigability.
10
10
 
11
- For a quick one-off map of an unfamiliar area without the report/grilling loop below, use `zoom-out` instead.
12
-
13
11
  ## Glossary
14
12
 
15
13
  Use these terms exactly in every suggestion. Consistent language is the point — don't drift into "component," "service," "API," or "boundary." Full definitions in [LANGUAGE.md](LANGUAGE.md).
@@ -71,6 +71,9 @@ The optional `wrapup` block is a wrapup-only switch, not a board field: `wrapup.
71
71
  "headings": {
72
72
  "vorBau": "Clarify Before Build"
73
73
  },
74
+ "titles": {
75
+ "wavePrefix": "Wave"
76
+ },
74
77
  "wrapup": {
75
78
  "remoteBranchSweep": false
76
79
  }
@@ -93,6 +96,14 @@ follows; renaming an option later is one edit here. A role you don't have
93
96
  with a visible hint, and `--status-role` commands fail with the exact snippet
94
97
  to add.
95
98
 
99
+ ### Wave titles (`titles.wavePrefix`)
100
+
101
+ The word that opens a wave anchor's title: `<prefix> <N> — <topic>` (e.g.
102
+ `Wave 7 — Auth hardening`). `board-sync.py promote` writes it and strips an
103
+ existing one idempotently on re-promote. A profile **without** the key keeps
104
+ the historical default `"Welle"`, so boards created before this key keep
105
+ their titles unchanged; set it once to match your board's language.
106
+
96
107
  ## If the IDs are not yet filled (stub)
97
108
 
98
109
  1. Create a GitHub-Projects (v2) board for this owner and add the fields above (at minimum a `Status` single-select with your stage options — the recommended stage names are `Idea, Triaged, Spec, In Progress, Review, Done`, matching the seeded `roles` defaults).
@@ -90,8 +90,7 @@ An independent second model catches what one model rationalises. Read-only, boun
90
90
 
91
91
  Not feature work — upkeep.
92
92
 
93
- - **`/improve-codebase-architecture`** — run in spare moments to keep the codebase good for agents. Surfaces **deepening opportunities**; picking one _generates an idea_ for the main flow at `/grill-with-docs`.
94
- - **`/zoom-out`** — step back from the diff to the structure when a change is fighting the codebase; recon that becomes a planned slice or guides a refactor in place.
93
+ - **`/improve-codebase-architecture`** — run in spare moments to keep the codebase good for agents, or step back from the diff to the structure when a change is fighting the codebase. Surfaces **deepening opportunities**; picking one _generates an idea_ for the main flow at `/grill-with-docs`.
95
94
  - **`/security-audit`** — a whole-app, application-layer security audit run as an independent two-model pass (two models audit the same code separately, then the remediation plan is hardened before any fix). Run before a release or after the attack surface changes (new endpoint, new input source, auth change, dependency bump). Infra hardening (ports/TLS/SSH/backups) is audited separately.
96
95
 
97
96
  ## Vocabulary underneath
@@ -12,7 +12,7 @@ description: >-
12
12
  stubs: no PRD, no slicing, no sub-issue links, no promotion (downstream:
13
13
  to-prd matures the stub, to-issues slices + promotes). NOT for
14
14
  maturing/slicing ONE already-chosen candidate (to-prd/to-issues), NOT for
15
- per-issue triage labelling (triage), NOT for code comprehension (zoom-out)
15
+ per-issue triage labelling (triage), NOT for code comprehension —
16
16
  this is board-WIDE thematic affinity grouping, not per-issue and not
17
17
  code-reading.
18
18
  ---
@@ -143,6 +143,6 @@ Next step (<maintainer>'s call, separate): grill → to-prd (matures the stub)
143
143
 
144
144
  ## Notes
145
145
  - **Stops at stubs.** Never write the PRD, slice, link, promote, or call `to-prd`/`to-issues` yourself.
146
- - Boundary: `triage` = per-issue state machine; `zoom-out` = code comprehension; `board-to-waves` = board-wide thematic affinity. Different altitudes.
146
+ - Boundary: `triage` = per-issue state machine; `improve-codebase-architecture` = code structure; `board-to-waves` = board-wide thematic affinity. Different altitudes.
147
147
  - A leftover bucket is OK and intentional — not every issue belongs in a wave. Force-clustering dilutes the gate.
148
148
  - Size/risk are a rough estimate, not a commitment. <maintainer> can override the stub's "when to grill" recommendation at any time.
@@ -8,8 +8,6 @@ description: Find deepening opportunities in a codebase, informed by the domain
8
8
 
9
9
  Surface architectural friction and propose **deepening opportunities** — refactors that turn shallow modules into deep ones. The aim is testability and AI-navigability.
10
10
 
11
- For a quick one-off map of an unfamiliar area without the report/grilling loop below, use `zoom-out` instead.
12
-
13
11
  ## Glossary
14
12
 
15
13
  Use these terms exactly in every suggestion. Consistent language is the point — don't drift into "component," "service," "API," or "boundary." Full definitions in [LANGUAGE.md](LANGUAGE.md).
@@ -102,3 +102,6 @@ both: pick one hooks mechanism per repo.
102
102
  - Hooks are just scripts — `echo`-debug them freely; nothing is hidden behind a
103
103
  tool.
104
104
  - Exit non-zero = block the commit. Exit 0 = allow.
105
+ - Keep the template's `unset GIT_DIR …` line: git exports these to hooks, and a
106
+ gate that runs tests which call git in their own temp repos would otherwise
107
+ operate on the host repo's index instead.
@@ -11,6 +11,12 @@
11
11
 
12
12
  set -euo pipefail
13
13
 
14
+ # --- Env sanitize (keep this) ----------------------------------------------
15
+ # Git exports GIT_DIR & co. to hooks. If your gate runs a test suite whose
16
+ # child tests call git in their own temp repos, these inherited vars redirect
17
+ # every such git call onto THIS repo's index (mass-staged deletions).
18
+ unset GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE GIT_PREFIX
19
+
14
20
  # --- Optional preflight ----------------------------------------------------
15
21
  # Bail early with a clear message if the toolchain isn't installed, so the
16
22
  # real checks don't fail with cryptic errors. Adapt or delete for your stack.
@@ -71,6 +71,9 @@ The optional `wrapup` block is a wrapup-only switch, not a board field: `wrapup.
71
71
  "headings": {
72
72
  "vorBau": "Clarify Before Build"
73
73
  },
74
+ "titles": {
75
+ "wavePrefix": "Wave"
76
+ },
74
77
  "wrapup": {
75
78
  "remoteBranchSweep": false
76
79
  }
@@ -93,6 +96,14 @@ follows; renaming an option later is one edit here. A role you don't have
93
96
  with a visible hint, and `--status-role` commands fail with the exact snippet
94
97
  to add.
95
98
 
99
+ ### Wave titles (`titles.wavePrefix`)
100
+
101
+ The word that opens a wave anchor's title: `<prefix> <N> — <topic>` (e.g.
102
+ `Wave 7 — Auth hardening`). `board-sync.py promote` writes it and strips an
103
+ existing one idempotently on re-promote. A profile **without** the key keeps
104
+ the historical default `"Welle"`, so boards created before this key keep
105
+ their titles unchanged; set it once to match your board's language.
106
+
96
107
  ## If the IDs are not yet filled (stub)
97
108
 
98
109
  1. Create a GitHub-Projects (v2) board for this owner and add the fields above (at minimum a `Status` single-select with your stage options — the recommended stage names are `Idea, Triaged, Spec, In Progress, Review, Done`, matching the seeded `roles` defaults).
@@ -167,15 +167,6 @@
167
167
  ],
168
168
  "provenance": "matt-pocock"
169
169
  },
170
- "zoom-out": {
171
- "class": "vendored",
172
- "publish": true,
173
- "surfaces": [
174
- "claude",
175
- "codex"
176
- ],
177
- "provenance": "matt-pocock"
178
- },
179
170
  "improve-codebase-architecture": {
180
171
  "class": "vendored",
181
172
  "publish": true,
@@ -393,6 +384,7 @@
393
384
  "claude",
394
385
  "codex"
395
386
  ],
387
+ "installRole": "maintainer",
396
388
  "provenance": "own"
397
389
  },
398
390
  "project-release": {
package/PROVENANCE.md CHANGED
@@ -6,7 +6,7 @@ not byte-identity.
6
6
 
7
7
  ## Matt Pocock (MIT) — https://github.com/mattpocock/skills @ d574778
8
8
 
9
- to-prd, to-issues, grill-with-docs, grill-me, tdd, diagnose, zoom-out,
9
+ to-prd, to-issues, grill-with-docs, grill-me, tdd, diagnose,
10
10
  improve-codebase-architecture, prototype, triage, write-a-skill,
11
11
  codebase-design, domain-modeling, implement, resolving-merge-conflicts, ask-matt,
12
12
  wayfinder, research, git-guardrails-claude-code, setup-workflow.
@@ -15,9 +15,10 @@ Folder↔upstream-name divergence (upstream renamed; local folder kept for
15
15
  invocation stability): `diagnose` = upstream `diagnosing-bugs`,
16
16
  `write-a-skill` = upstream `writing-great-skills`, `to-prd` = upstream
17
17
  `to-spec`, `to-issues` = upstream `to-tickets` (upstream merged to-issues +
18
- the short-lived to-plan into to-tickets @ v1.1.0). `zoom-out` was removed
19
- upstream (attribution pins to its last-seen SHA 2bf7005) and is retained here
20
- as a local fork.
18
+ the short-lived to-plan into to-tickets @ v1.1.0). `zoom-out` (last-seen
19
+ upstream SHA 2bf7005) was removed upstream and, after a period as a local
20
+ fork, removed from this kit as well `improve-codebase-architecture` covers
21
+ the step-back-to-the-structure door.
21
22
 
22
23
  Each carries a `THIRD-PARTY-NOTICES.md` with its upstream path.
23
24
 
package/README.md CHANGED
@@ -58,22 +58,20 @@ The skills aren't a grab-bag — they're four phases of one loop, entered throug
58
58
  single funnel no matter where your work starts. Each phase below names the failure
59
59
  mode it removes and the skills that remove it.
60
60
 
61
- ![The workflow loop: idea / plan / backlog / raw-issue all funnel through an optional grill into one uniform PRD, which to-issues decomposes into an atomic issue or a wave anchor; a gate clears any unknown, then Execute Land Learn, which compounds back into the next idea. Two further streams enter outside the funnel a bug/anomaly through diagnose, and a code-fighting-the-structure change through zoom-out both joining at Execute; a one-time repo-setup lane (setup-workflow, git-guardrails, setup-pre-commit) sits off the loop and installs the pre-commit/pre-push gate that Land relies on.](docs/workflow.png)
61
+ ![The workflow as a subway map one row per route, all converging on the same implement → wrapup → retro spine: a scale-check router sizes unclear work; the main line runs idea through an optional grill, to-prd, to-issues and a gate into implement (which drives tdd inside), wrapup, retro; a grill line scales from none over grill-me and grill-with-docs up to the +codex variants; a codex line adds cross-model review and build; program and board lines fund numbered waves built by orchestrate-wave; repair (diagnose) and structure (improve-codebase-architecture) lines enter from broken or tangled work; a learn line routes retro's findings into config by weight. Interchanges: verify-spike / decision-gate before an unknown, prototype for an unclear path, local-ci plus pre-commit/pre-push hooks before landing, ask-matt when lost, and a one-time setup lane.](docs/workflow.png)
62
62
 
63
63
  <!--
64
- The image above is a pre-rendered PNG, not a live Mermaid block, on purpose:
65
- GitHub's Mermaid renderer clips long node labels, and an <img>-embedded SVG
66
- can't render Mermaid's foreignObject node text (shows blank). A rasterised PNG
67
- renders identically everywhere.
68
- Source of truth: tools/agent-workflow-kit/assets/workflow.mmd
69
- Regenerate after editing the source:
70
- npx -y @mermaid-js/mermaid-cli \
71
- -i tools/agent-workflow-kit/assets/workflow.mmd \
72
- -o tools/agent-workflow-kit/assets/workflow.png \
73
- -t dark -b '#0d1117' -s 3
74
- build-kit.mjs copies assets/workflow.png -> dist-kit/docs/workflow.png.
64
+ The image above is a pre-rendered PNG, not live HTML, on purpose: GitHub
65
+ READMEs can't embed HTML pages, and a PNG renders identically everywhere.
66
+ Source of truth: docs/workflow.html (same design language as
67
+ docs/methodology.html). Regenerate after editing the source:
68
+ serve docs/ locally, open workflow.html?theme=dark in a 1160px-wide
69
+ viewport, take a full-page screenshot -> docs/workflow.png
70
+ The interactive version is linked below and published via GitHub Pages.
75
71
  -->
76
72
 
73
+ **[view the workflow map →](https://ikon85.github.io/agent-workflow-kit/workflow.html)**
74
+
77
75
 
78
76
  ### 1. Plan — turn a vague idea into shaped, tracked work
79
77
 
@@ -155,7 +153,7 @@ enter outside the plan funnel and feed straight into Execute:
155
153
  - **`diagnose`** — a disciplined root-cause hunt for bugs (reproduce → isolate →
156
154
  fix → prove), not a guess-and-patch. Entered from a bug or anomaly, never the PRD
157
155
  funnel; the fix it lands flows on into Execute.
158
- - **`zoom-out` / `improve-codebase-architecture`** — step back from the diff to
156
+ - **`improve-codebase-architecture`** — step back from the diff to
159
157
  the structure when a change is fighting the codebase. A recon stream that either
160
158
  becomes a planned slice (back through `to-issues`) or guides a refactor in place.
161
159
 
@@ -332,6 +330,29 @@ still reference. Flags: `--force` (overwrite pre-existing files on `init`),
332
330
 
333
331
  ## Release notes
334
332
 
333
+ ### 0.27.0
334
+
335
+ - removed: `.agents/skills/zoom-out/SKILL.md`
336
+ - removed: `.agents/skills/zoom-out/THIRD-PARTY-NOTICES.md`
337
+ - removed: `.claude/skills/zoom-out/SKILL.md`
338
+ - removed: `.claude/skills/zoom-out/THIRD-PARTY-NOTICES.md`
339
+ - changed: `.agents/skills/ask-matt/SKILL.md`
340
+ - changed: `.agents/skills/board-to-waves/SKILL.md`
341
+ - changed: `.agents/skills/improve-codebase-architecture/SKILL.md`
342
+ - changed: `.agents/skills/setup-workflow/board-sync.md`
343
+ - changed: `.claude/skills/ask-matt/SKILL.md`
344
+ - changed: `.claude/skills/board-to-waves/SKILL.md`
345
+ - changed: `.claude/skills/improve-codebase-architecture/SKILL.md`
346
+ - changed: `.claude/skills/setup-pre-commit/SKILL.md`
347
+ - changed: `.claude/skills/setup-pre-commit/scripts/pre-commit.template.sh`
348
+ - changed: `.claude/skills/setup-workflow/board-sync.md`
349
+ - changed: `scripts/board-sync.py`
350
+ - changed: `scripts/board_config.py`
351
+
352
+ ### 0.26.2
353
+
354
+ - Metadata-only release.
355
+
335
356
  ### 0.26.1
336
357
 
337
358
  - changed: `.agents/skills/kit-update/SKILL.md`
@@ -739,14 +760,15 @@ still reference. Flags: `--force` (overwrite pre-existing files on `init`),
739
760
 
740
761
  ## What's in the box
741
762
 
742
- **42 skills** (Router: ask-matt — "which skill/flow fits?" · Plan: grill-me,
763
+ **43 skills** (Router: ask-matt — "which skill/flow fits?" · Plan: grill-me,
743
764
  grill-with-docs, to-prd, to-issues, board-to-waves, triage, spec-self-critique,
744
765
  verify-spike, decision-gate, scale-check, to-waves, wayfinder, research · Execute: tdd, prototype, implement, orchestrate-wave ·
745
- Design/diagnose/refactor streams: diagnose, zoom-out,
766
+ Design/diagnose/refactor streams: diagnose,
746
767
  improve-codebase-architecture, codebase-design, domain-modeling, security-audit · Land: wrapup,
747
768
  resolving-merge-conflicts, code-review, local-ci, git-worktree-recover, kit-release,
748
- project-release · Learn: retro, audit-skills, write-a-skill · Setup:
749
- setup-workflow, git-guardrails, setup-pre-commit · Codex cross-model: grill-me-codex,
769
+ project-release, kit-update · Learn: retro, audit-skills, write-a-skill,
770
+ memory-lifecycle · Setup:
771
+ setup-workflow, git-guardrails, setup-pre-commit, census-update · Codex cross-model: grill-me-codex,
750
772
  grill-with-docs-codex, codex-review, codex-build),
751
773
  installed for both surfaces — `.claude/skills`
752
774
  (Claude Code) and `.agents/skills` (Codex) — plus `codex-adapter-sync`