@ikon85/agent-workflow-kit 0.10.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 (273) hide show
  1. package/.agents/skills/ask-matt/SKILL.md +139 -0
  2. package/.agents/skills/ask-matt/THIRD-PARTY-NOTICES.md +29 -0
  3. package/.agents/skills/audit-skills/SKILL.md +145 -0
  4. package/.agents/skills/board-to-waves/SKILL.md +135 -0
  5. package/.agents/skills/code-review/SKILL.md +64 -0
  6. package/.agents/skills/codebase-design/DEEPENING.md +37 -0
  7. package/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
  8. package/.agents/skills/codebase-design/SKILL.md +114 -0
  9. package/.agents/skills/codebase-design/THIRD-PARTY-NOTICES.md +29 -0
  10. package/.agents/skills/codex-adapter-sync/SKILL.md +151 -0
  11. package/.agents/skills/decision-gate/SKILL.md +67 -0
  12. package/.agents/skills/diagnose/SKILL.md +136 -0
  13. package/.agents/skills/diagnose/THIRD-PARTY-NOTICES.md +29 -0
  14. package/.agents/skills/diagnose/scripts/hitl-loop.template.sh +41 -0
  15. package/.agents/skills/domain-modeling/ADR-FORMAT.md +47 -0
  16. package/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  17. package/.agents/skills/domain-modeling/SKILL.md +76 -0
  18. package/.agents/skills/domain-modeling/THIRD-PARTY-NOTICES.md +29 -0
  19. package/.agents/skills/git-worktree-recover/SKILL.md +176 -0
  20. package/.agents/skills/grill-me/SKILL.md +54 -0
  21. package/.agents/skills/grill-me/THIRD-PARTY-NOTICES.md +29 -0
  22. package/.agents/skills/grill-with-docs/ADR-FORMAT.md +47 -0
  23. package/.agents/skills/grill-with-docs/CONTEXT-FORMAT.md +60 -0
  24. package/.agents/skills/grill-with-docs/SKILL.md +137 -0
  25. package/.agents/skills/grill-with-docs/THIRD-PARTY-NOTICES.md +29 -0
  26. package/.agents/skills/implement/SKILL.md +15 -0
  27. package/.agents/skills/implement/THIRD-PARTY-NOTICES.md +29 -0
  28. package/.agents/skills/improve-codebase-architecture/ADR-FORMAT.md +47 -0
  29. package/.agents/skills/improve-codebase-architecture/CONTEXT-FORMAT.md +60 -0
  30. package/.agents/skills/improve-codebase-architecture/DEEPENING.md +37 -0
  31. package/.agents/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
  32. package/.agents/skills/improve-codebase-architecture/INTERFACE-DESIGN.md +46 -0
  33. package/.agents/skills/improve-codebase-architecture/LANGUAGE.md +53 -0
  34. package/.agents/skills/improve-codebase-architecture/SKILL.md +88 -0
  35. package/.agents/skills/improve-codebase-architecture/THIRD-PARTY-NOTICES.md +29 -0
  36. package/.agents/skills/kit-release/SKILL.md +56 -0
  37. package/.agents/skills/local-ci/SKILL.md +94 -0
  38. package/.agents/skills/orchestrate-wave/SKILL.md +261 -0
  39. package/.agents/skills/orchestrate-wave/references/builder-contract.md +67 -0
  40. package/.agents/skills/prototype/LOGIC.md +79 -0
  41. package/.agents/skills/prototype/SKILL.md +30 -0
  42. package/.agents/skills/prototype/THIRD-PARTY-NOTICES.md +29 -0
  43. package/.agents/skills/prototype/UI.md +112 -0
  44. package/.agents/skills/research/SKILL.md +12 -0
  45. package/.agents/skills/research/THIRD-PARTY-NOTICES.md +29 -0
  46. package/.agents/skills/resolving-merge-conflicts/SKILL.md +14 -0
  47. package/.agents/skills/resolving-merge-conflicts/THIRD-PARTY-NOTICES.md +29 -0
  48. package/.agents/skills/retro/SKILL.md +209 -0
  49. package/.agents/skills/scale-check/SKILL.md +141 -0
  50. package/.agents/skills/security-audit/SKILL.md +67 -0
  51. package/.agents/skills/setup-workflow/SKILL.md +187 -0
  52. package/.agents/skills/setup-workflow/THIRD-PARTY-NOTICES.md +29 -0
  53. package/.agents/skills/setup-workflow/board-sync.md +111 -0
  54. package/.agents/skills/setup-workflow/code-review.md +26 -0
  55. package/.agents/skills/setup-workflow/domain.md +51 -0
  56. package/.agents/skills/setup-workflow/issue-tracker-github.md +35 -0
  57. package/.agents/skills/setup-workflow/issue-tracker-gitlab.md +34 -0
  58. package/.agents/skills/setup-workflow/issue-tracker-local.md +30 -0
  59. package/.agents/skills/setup-workflow/orchestrate-wave-seed.md +44 -0
  60. package/.agents/skills/setup-workflow/spec-completeness-seed.md +44 -0
  61. package/.agents/skills/setup-workflow/spec-self-critique-seed.md +43 -0
  62. package/.agents/skills/setup-workflow/triage-labels.md +18 -0
  63. package/.agents/skills/setup-workflow/workflow-overview.md +33 -0
  64. package/.agents/skills/spec-self-critique/SKILL.md +152 -0
  65. package/.agents/skills/spec-self-critique/scenarios.md +82 -0
  66. package/.agents/skills/tdd/SKILL.md +120 -0
  67. package/.agents/skills/tdd/THIRD-PARTY-NOTICES.md +29 -0
  68. package/.agents/skills/tdd/deep-modules.md +33 -0
  69. package/.agents/skills/tdd/interface-design.md +31 -0
  70. package/.agents/skills/tdd/mocking.md +59 -0
  71. package/.agents/skills/tdd/refactoring.md +10 -0
  72. package/.agents/skills/tdd/tests.md +61 -0
  73. package/.agents/skills/to-issues/SKILL.md +325 -0
  74. package/.agents/skills/to-issues/THIRD-PARTY-NOTICES.md +29 -0
  75. package/.agents/skills/to-prd/PROGRAM-PRD-FORMAT.md +162 -0
  76. package/.agents/skills/to-prd/SKILL.md +180 -0
  77. package/.agents/skills/to-prd/THIRD-PARTY-NOTICES.md +29 -0
  78. package/.agents/skills/to-waves/SKILL.md +260 -0
  79. package/.agents/skills/to-waves/SLICE-METADATA-FORMAT.md +74 -0
  80. package/.agents/skills/triage/AGENT-BRIEF.md +168 -0
  81. package/.agents/skills/triage/OUT-OF-SCOPE.md +101 -0
  82. package/.agents/skills/triage/SKILL.md +122 -0
  83. package/.agents/skills/triage/THIRD-PARTY-NOTICES.md +29 -0
  84. package/.agents/skills/verify-spike/SKILL.md +39 -0
  85. package/.agents/skills/wayfinder/SKILL.md +127 -0
  86. package/.agents/skills/wayfinder/THIRD-PARTY-NOTICES.md +29 -0
  87. package/.agents/skills/wrapup/SKILL.md +71 -0
  88. package/.agents/skills/wrapup/SOURCES.txt +6 -0
  89. package/.agents/skills/zoom-out/SKILL.md +7 -0
  90. package/.agents/skills/zoom-out/THIRD-PARTY-NOTICES.md +29 -0
  91. package/.claude/hooks/_hook_utils.py +184 -0
  92. package/.claude/hooks/drift-guard.py +176 -0
  93. package/.claude/hooks/skill-drift-hint.py +122 -0
  94. package/.claude/hooks/sync-board-status.py +191 -0
  95. package/.claude/skills/ask-matt/SKILL.md +139 -0
  96. package/.claude/skills/ask-matt/THIRD-PARTY-NOTICES.md +29 -0
  97. package/.claude/skills/audit-skills/SKILL.md +145 -0
  98. package/.claude/skills/board-to-waves/SKILL.md +148 -0
  99. package/.claude/skills/code-review/SKILL.md +64 -0
  100. package/.claude/skills/codebase-design/DEEPENING.md +37 -0
  101. package/.claude/skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
  102. package/.claude/skills/codebase-design/SKILL.md +114 -0
  103. package/.claude/skills/codebase-design/THIRD-PARTY-NOTICES.md +29 -0
  104. package/.claude/skills/codex-build/SKILL.md +126 -0
  105. package/.claude/skills/codex-build/THIRD-PARTY-NOTICES.md +35 -0
  106. package/.claude/skills/codex-review/SKILL.md +145 -0
  107. package/.claude/skills/codex-review/THIRD-PARTY-NOTICES.md +31 -0
  108. package/.claude/skills/decision-gate/SKILL.md +67 -0
  109. package/.claude/skills/diagnose/SKILL.md +136 -0
  110. package/.claude/skills/diagnose/THIRD-PARTY-NOTICES.md +29 -0
  111. package/.claude/skills/diagnose/scripts/hitl-loop.template.sh +41 -0
  112. package/.claude/skills/domain-modeling/ADR-FORMAT.md +47 -0
  113. package/.claude/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  114. package/.claude/skills/domain-modeling/SKILL.md +76 -0
  115. package/.claude/skills/domain-modeling/THIRD-PARTY-NOTICES.md +29 -0
  116. package/.claude/skills/git-guardrails-claude-code/SKILL.md +96 -0
  117. package/.claude/skills/git-guardrails-claude-code/THIRD-PARTY-NOTICES.md +29 -0
  118. package/.claude/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh +28 -0
  119. package/.claude/skills/git-worktree-recover/SKILL.md +182 -0
  120. package/.claude/skills/grill-me/SKILL.md +54 -0
  121. package/.claude/skills/grill-me/THIRD-PARTY-NOTICES.md +29 -0
  122. package/.claude/skills/grill-me-codex/SKILL.md +158 -0
  123. package/.claude/skills/grill-me-codex/THIRD-PARTY-NOTICES.md +32 -0
  124. package/.claude/skills/grill-with-docs/ADR-FORMAT.md +47 -0
  125. package/.claude/skills/grill-with-docs/CONTEXT-FORMAT.md +60 -0
  126. package/.claude/skills/grill-with-docs/SKILL.md +137 -0
  127. package/.claude/skills/grill-with-docs/THIRD-PARTY-NOTICES.md +29 -0
  128. package/.claude/skills/grill-with-docs-codex/ADR-FORMAT.md +47 -0
  129. package/.claude/skills/grill-with-docs-codex/CONTEXT-FORMAT.md +60 -0
  130. package/.claude/skills/grill-with-docs-codex/SKILL.md +233 -0
  131. package/.claude/skills/grill-with-docs-codex/THIRD-PARTY-NOTICES.md +33 -0
  132. package/.claude/skills/implement/SKILL.md +15 -0
  133. package/.claude/skills/implement/THIRD-PARTY-NOTICES.md +29 -0
  134. package/.claude/skills/improve-codebase-architecture/ADR-FORMAT.md +47 -0
  135. package/.claude/skills/improve-codebase-architecture/CONTEXT-FORMAT.md +60 -0
  136. package/.claude/skills/improve-codebase-architecture/DEEPENING.md +37 -0
  137. package/.claude/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
  138. package/.claude/skills/improve-codebase-architecture/INTERFACE-DESIGN.md +46 -0
  139. package/.claude/skills/improve-codebase-architecture/LANGUAGE.md +53 -0
  140. package/.claude/skills/improve-codebase-architecture/SKILL.md +88 -0
  141. package/.claude/skills/improve-codebase-architecture/THIRD-PARTY-NOTICES.md +29 -0
  142. package/.claude/skills/kit-release/SKILL.md +56 -0
  143. package/.claude/skills/local-ci/SKILL.md +94 -0
  144. package/.claude/skills/orchestrate-wave/SKILL.md +269 -0
  145. package/.claude/skills/orchestrate-wave/references/builder-contract.md +67 -0
  146. package/.claude/skills/prototype/LOGIC.md +79 -0
  147. package/.claude/skills/prototype/SKILL.md +30 -0
  148. package/.claude/skills/prototype/THIRD-PARTY-NOTICES.md +29 -0
  149. package/.claude/skills/prototype/UI.md +112 -0
  150. package/.claude/skills/research/SKILL.md +12 -0
  151. package/.claude/skills/research/THIRD-PARTY-NOTICES.md +29 -0
  152. package/.claude/skills/resolving-merge-conflicts/SKILL.md +14 -0
  153. package/.claude/skills/resolving-merge-conflicts/THIRD-PARTY-NOTICES.md +29 -0
  154. package/.claude/skills/retro/SKILL.md +209 -0
  155. package/.claude/skills/scale-check/SKILL.md +141 -0
  156. package/.claude/skills/security-audit/SKILL.md +67 -0
  157. package/.claude/skills/setup-pre-commit/SKILL.md +104 -0
  158. package/.claude/skills/setup-pre-commit/scripts/pre-commit.template.sh +35 -0
  159. package/.claude/skills/setup-workflow/SKILL.md +187 -0
  160. package/.claude/skills/setup-workflow/THIRD-PARTY-NOTICES.md +29 -0
  161. package/.claude/skills/setup-workflow/board-sync.md +111 -0
  162. package/.claude/skills/setup-workflow/code-review.md +26 -0
  163. package/.claude/skills/setup-workflow/domain.md +51 -0
  164. package/.claude/skills/setup-workflow/issue-tracker-github.md +35 -0
  165. package/.claude/skills/setup-workflow/issue-tracker-gitlab.md +34 -0
  166. package/.claude/skills/setup-workflow/issue-tracker-local.md +30 -0
  167. package/.claude/skills/setup-workflow/orchestrate-wave-seed.md +44 -0
  168. package/.claude/skills/setup-workflow/spec-completeness-seed.md +44 -0
  169. package/.claude/skills/setup-workflow/spec-self-critique-seed.md +43 -0
  170. package/.claude/skills/setup-workflow/triage-labels.md +18 -0
  171. package/.claude/skills/setup-workflow/workflow-overview.md +33 -0
  172. package/.claude/skills/skill-manifest.json +389 -0
  173. package/.claude/skills/spec-self-critique/SKILL.md +152 -0
  174. package/.claude/skills/spec-self-critique/scenarios.md +82 -0
  175. package/.claude/skills/tdd/SKILL.md +120 -0
  176. package/.claude/skills/tdd/THIRD-PARTY-NOTICES.md +29 -0
  177. package/.claude/skills/tdd/deep-modules.md +33 -0
  178. package/.claude/skills/tdd/interface-design.md +31 -0
  179. package/.claude/skills/tdd/mocking.md +59 -0
  180. package/.claude/skills/tdd/refactoring.md +10 -0
  181. package/.claude/skills/tdd/tests.md +61 -0
  182. package/.claude/skills/to-issues/SKILL.md +325 -0
  183. package/.claude/skills/to-issues/THIRD-PARTY-NOTICES.md +29 -0
  184. package/.claude/skills/to-prd/PROGRAM-PRD-FORMAT.md +162 -0
  185. package/.claude/skills/to-prd/SKILL.md +180 -0
  186. package/.claude/skills/to-prd/THIRD-PARTY-NOTICES.md +29 -0
  187. package/.claude/skills/to-waves/SKILL.md +260 -0
  188. package/.claude/skills/to-waves/SLICE-METADATA-FORMAT.md +74 -0
  189. package/.claude/skills/triage/AGENT-BRIEF.md +168 -0
  190. package/.claude/skills/triage/OUT-OF-SCOPE.md +101 -0
  191. package/.claude/skills/triage/SKILL.md +122 -0
  192. package/.claude/skills/triage/THIRD-PARTY-NOTICES.md +29 -0
  193. package/.claude/skills/verify-spike/SKILL.md +39 -0
  194. package/.claude/skills/wayfinder/SKILL.md +127 -0
  195. package/.claude/skills/wayfinder/THIRD-PARTY-NOTICES.md +29 -0
  196. package/.claude/skills/wrapup/SKILL.md +81 -0
  197. package/.claude/skills/wrapup/SOURCES.txt +6 -0
  198. package/.claude/skills/write-a-skill/GLOSSARY.md +201 -0
  199. package/.claude/skills/write-a-skill/SKILL.md +88 -0
  200. package/.claude/skills/write-a-skill/THIRD-PARTY-NOTICES.md +29 -0
  201. package/.claude/skills/zoom-out/SKILL.md +7 -0
  202. package/.claude/skills/zoom-out/THIRD-PARTY-NOTICES.md +29 -0
  203. package/LICENSE +28 -0
  204. package/PROVENANCE.md +39 -0
  205. package/README.md +619 -0
  206. package/agent-workflow-kit.package.json +1939 -0
  207. package/docs/agents/board-sync.md +71 -0
  208. package/docs/agents/code-review.md +14 -0
  209. package/docs/agents/domain.md +7 -0
  210. package/docs/agents/issue-tracker.md +12 -0
  211. package/docs/agents/security-audit-runbook-template.md +205 -0
  212. package/docs/agents/skills/orchestrate-wave.md +13 -0
  213. package/docs/agents/skills/spec-self-critique.md +18 -0
  214. package/docs/agents/triage-labels.md +10 -0
  215. package/docs/agents/wave-anchor-template.md +88 -0
  216. package/docs/conventions/spec-completeness.md +23 -0
  217. package/docs/index.html +56 -0
  218. package/docs/methodology.html +488 -0
  219. package/docs/methodology.svg +93 -0
  220. package/docs/workflow.png +0 -0
  221. package/package.json +40 -0
  222. package/scripts/anchor_table.py +343 -0
  223. package/scripts/board-sync.py +1232 -0
  224. package/scripts/board_config.py +147 -0
  225. package/scripts/board_fields.py +192 -0
  226. package/scripts/build-kit.mjs +116 -0
  227. package/scripts/build-kit.test.mjs +59 -0
  228. package/scripts/check-kit-staleness.mjs +45 -0
  229. package/scripts/check-kit-staleness.test.mjs +19 -0
  230. package/scripts/execute-ready-check.py +516 -0
  231. package/scripts/issue_deps.py +79 -0
  232. package/scripts/kit-release.mjs +100 -0
  233. package/scripts/kit-release.test.mjs +67 -0
  234. package/scripts/lib/audit-refs.mjs +146 -0
  235. package/scripts/lib/scrub.mjs +113 -0
  236. package/scripts/lib/scrub.test.mjs +187 -0
  237. package/scripts/loc_offender_core.py +196 -0
  238. package/scripts/loc_offender_gate.py +182 -0
  239. package/scripts/node_kind.py +68 -0
  240. package/scripts/portability_profile_scan.py +53 -0
  241. package/scripts/pr-body-check.py +263 -0
  242. package/scripts/program_graph.py +125 -0
  243. package/scripts/program_graph_parse.py +275 -0
  244. package/scripts/program_graph_validate.py +256 -0
  245. package/scripts/program_sync.py +160 -0
  246. package/scripts/release-delta-guard.mjs +96 -0
  247. package/scripts/release-delta-guard.test.mjs +53 -0
  248. package/scripts/test_board_sync_create_idempotency.py +104 -0
  249. package/scripts/test_dist_kit_smoke.py +199 -0
  250. package/scripts/test_kit_docs_language_census.py +178 -0
  251. package/scripts/test_skill_code_review_seed.py +89 -0
  252. package/scripts/test_skill_frontmatter_lint.py +226 -0
  253. package/scripts/test_skill_gh_lint.py +124 -0
  254. package/scripts/test_skill_language_census.py +254 -0
  255. package/scripts/test_skill_portability_lint.py +773 -0
  256. package/scripts/test_skill_publish_audit.py +300 -0
  257. package/scripts/test_skill_selfcontainment_lint.py +255 -0
  258. package/scripts/test_skill_setup_workflow_seeds.py +200 -0
  259. package/scripts/test_skill_stale_name_lint.py +126 -0
  260. package/scripts/test_skill_surface_refs.py +300 -0
  261. package/scripts/test_skill_trailing_artifact_lint.py +71 -0
  262. package/scripts/wrapup-land.py +573 -0
  263. package/src/cli.mjs +70 -0
  264. package/src/commands/diff.mjs +6 -0
  265. package/src/commands/init.mjs +59 -0
  266. package/src/commands/uninstall.mjs +43 -0
  267. package/src/commands/update.mjs +95 -0
  268. package/src/lib/atomicWrite.mjs +49 -0
  269. package/src/lib/bundle.mjs +133 -0
  270. package/src/lib/hash.mjs +13 -0
  271. package/src/lib/manifest.mjs +58 -0
  272. package/src/lib/sentinel.mjs +20 -0
  273. package/src/lib/settings.mjs +23 -0
@@ -0,0 +1,104 @@
1
+ ---
2
+ name: setup-pre-commit
3
+ description: Set up a native, zero-dependency git pre-commit hook (via core.hooksPath) that runs your project's type checks, linting, tests, or formatting before each commit. Use when the user wants to add pre-commit hooks, gate commits on checks, or wire commit-time typecheck/lint/test/format — no Husky or Node deps required.
4
+ ---
5
+
6
+ # Setup Pre-Commit Hooks (native git, zero-dep)
7
+
8
+ ## What This Sets Up
9
+
10
+ A versioned hooks directory wired through git's own `core.hooksPath` — no Husky,
11
+ no `lint-staged`, no extra dependencies, works in any repo regardless of stack:
12
+
13
+ - a `.githooks/` dir tracked in the repo
14
+ - a `pre-commit` hook (from the bundled template) that runs **your** checks
15
+ - one git config line so every clone uses it
16
+
17
+ ## Why native over Husky
18
+
19
+ `core.hooksPath` (git ≥ 2.9) points git at a tracked hooks dir directly. The
20
+ hooks are plain scripts under version control — readable, debuggable, and
21
+ stack-agnostic. Husky adds a Node devDependency and a `prepare` script just to
22
+ do what one `git config` line does, and assumes a Node/npm project. For a kit
23
+ that must work in any consumer repo, native is the robust default. (Husky
24
+ remains a valid choice for Node-only teams — see the disclaimer at the end.)
25
+
26
+ ## Steps
27
+
28
+ ### 1. Create the hooks dir + drop in the template
29
+
30
+ ```bash
31
+ mkdir -p .githooks
32
+ cp scripts/pre-commit.template.sh .githooks/pre-commit # this skill's bundled template
33
+ chmod +x .githooks/pre-commit
34
+ ```
35
+
36
+ The bundled template (`scripts/pre-commit.template.sh`) is a generic skeleton:
37
+ a shebang, an optional toolchain preflight, and a clearly-marked gate block with
38
+ commented per-stack examples. You fill the gate; you don't write the plumbing.
39
+
40
+ ### 2. Wire the dir (one line, every clone honours it)
41
+
42
+ ```bash
43
+ git config core.hooksPath .githooks
44
+ ```
45
+
46
+ - **Team-wide auto-setup (optional):** so a fresh clone wires itself without the
47
+ manual line, add it to an install step the repo already runs — e.g. a
48
+ `postinstall`/bootstrap script: `git config core.hooksPath .githooks`. Keep it
49
+ idempotent (the command is safe to re-run).
50
+
51
+ ### 3. Fill the gate — Refinement seam
52
+
53
+ Open `.githooks/pre-commit`. Replace the `>>> your gate commands here <<<`
54
+ block with **your** project's fast checks. Each command must exit non-zero on
55
+ failure so the script's `set -e` blocks the commit. Examples by stack:
56
+
57
+ | Stack | Example gate |
58
+ |---|---|
59
+ | JS/TS (pnpm) | `pnpm exec tsc -b && pnpm lint` |
60
+ | Python | `ruff check . && mypy .` |
61
+ | Go | `go vet ./... && gofmt -l .` |
62
+ | Rust | `cargo fmt --check && cargo clippy -- -D warnings` |
63
+
64
+ - **Keep it fast.** Pre-commit runs on every commit. A whole test suite or
65
+ type-check of a huge repo belongs in **pre-push** or CI, not here. Put only
66
+ the cheap, high-signal checks in pre-commit.
67
+ - **Optional preflight.** If your checks need installed deps (`node_modules`,
68
+ a venv), keep the template's preflight block so a missing toolchain fails with
69
+ a clear message instead of a cryptic one. **Never instruct `--no-verify`** as
70
+ the fix — fix the deps.
71
+
72
+ ### 4. (Optional) add a pre-push hook for the heavy checks
73
+
74
+ Same mechanism: drop a `.githooks/pre-push` script (already wired by step 2).
75
+ Put the slower gate there — full test suite, build, or CI-mirror commands —
76
+ so commits stay fast but pushes are still gated.
77
+
78
+ ### 5. Verify
79
+
80
+ - [ ] `git config --get core.hooksPath` → `.githooks`
81
+ - [ ] `.githooks/pre-commit` exists and is executable (`-x`)
82
+ - [ ] the gate block holds your real commands (no leftover `>>> ... <<<` marker)
83
+ - [ ] a deliberately-broken change is blocked by the hook (smoke test)
84
+
85
+ ### 6. Commit
86
+
87
+ Stage the new `.githooks/` dir (and any bootstrap wiring) and commit. The commit
88
+ runs through your new hook — a good smoke test that the gate works.
89
+
90
+ ## Alternative: Husky
91
+
92
+ If your repo is Node-only and your team already standardises on Husky, you can
93
+ use it instead (`npx husky init` + a `.husky/pre-commit`). It pulls a Node
94
+ devDependency and a `prepare` script and assumes npm/pnpm/yarn — which is why
95
+ this skill defaults to the native `core.hooksPath` scaffold above. Don't run
96
+ both: pick one hooks mechanism per repo.
97
+
98
+ ## Notes
99
+
100
+ - `core.hooksPath` is repo-local config; each clone runs the wiring once (step 2
101
+ or the optional bootstrap).
102
+ - Hooks are just scripts — `echo`-debug them freely; nothing is hidden behind a
103
+ tool.
104
+ - Exit non-zero = block the commit. Exit 0 = allow.
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env bash
2
+ # pre-commit — native git hook (zero-dep, stack-agnostic).
3
+ #
4
+ # This is a TEMPLATE. Copy it into your repo's hooks dir (default: .githooks/),
5
+ # make it executable (chmod +x), and wire the dir with:
6
+ # git config core.hooksPath .githooks
7
+ # Then fill the gate block below with YOUR project's checks.
8
+ #
9
+ # Exit non-zero to BLOCK the commit. Keep each check fast — it runs on every
10
+ # commit. Slow/whole-suite checks belong in pre-push or CI, not here.
11
+
12
+ set -euo pipefail
13
+
14
+ # --- Optional preflight ----------------------------------------------------
15
+ # Bail early with a clear message if the toolchain isn't installed, so the
16
+ # real checks don't fail with cryptic errors. Adapt or delete for your stack.
17
+ #
18
+ # if [ ! -d node_modules ]; then
19
+ # echo "❌ deps missing — run your install, then commit again. NEVER --no-verify."
20
+ # exit 1
21
+ # fi
22
+
23
+ # --- Gate: fill in YOUR checks ---------------------------------------------
24
+ # Replace the examples below with your real commands. Each must exit non-zero
25
+ # on failure (the script's `set -e` then blocks the commit). Examples by stack:
26
+ #
27
+ # # JS/TS (pnpm): pnpm exec tsc -b && pnpm lint
28
+ # # Python: ruff check . && mypy .
29
+ # # Go: go vet ./... && gofmt -l .
30
+ # # Rust: cargo fmt --check && cargo clippy -- -D warnings
31
+ #
32
+ # >>> your gate commands here <<<
33
+ echo "⚠ pre-commit template not configured yet — add your checks in .githooks/pre-commit"
34
+
35
+ echo "✅ pre-commit checks passed."
@@ -0,0 +1,187 @@
1
+ ---
2
+ name: setup-workflow
3
+ description: "Scaffolds the project layer the portable workflow skills assume — issue tracker, triage labels, domain-doc layout, GitHub-Projects board field-IDs, spec-self-critique + spec-completeness seeds, workflow overview, and the deploy target. Writes `docs/agents/*`, `docs/conventions/spec-completeness.md`, and the `## Workflow` / `## Agent skills` / `## Prod` blocks in CLAUDE.md/AGENTS.md. Idempotent: a re-run reconciles per file/section and never overwrites filled content. Run once after installing the skills (or `npx <pkg> init`), or when a skill reports missing project-layer context. Adapted from Matt Pocock's `setup-matt-pocock-skills` (MIT)."
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Setup Workflow
8
+
9
+ Scaffold the **project layer** the portable workflow skills (`to-prd`, `to-issues`, `triage`, `spec-self-critique`, `retro`, `wrapup`, …) read at runtime. The generic skills ship the *how*; this skill writes the project-specific *what* into the consumer repo, where `retro`/`wrapup` then grow it over time.
10
+
11
+ This is a prompt-driven skill, not a deterministic script. Explore, present what you found, confirm with the user, then write — **one section at a time**, never dump everything at once. Assume the user does not know what these terms mean; each section opens with a short plain explainer.
12
+
13
+ ## Targets
14
+
15
+ | File / block | What |
16
+ |---|---|
17
+ | `docs/agents/issue-tracker.md` | where issues live + how to read/write them (Section A) |
18
+ | `docs/agents/triage-labels.md` | the triage label vocabulary (Section B) |
19
+ | `docs/agents/domain.md` | `CONTEXT.md`/ADR layout the domain skills read (Section C) |
20
+ | `docs/agents/board-sync.md` | GitHub-Projects field-IDs + board profile — **only meaningful for a GitHub tracker** (Section D) |
21
+ | `docs/agents/skills/spec-self-critique.md` | per-point enrichment skeleton; `/retro` appends here (Section E) |
22
+ | `docs/agents/skills/orchestrate-wave.md` | `orchestrate-wave` project layer (setup / commands / verify / login / landing) the wave-landing skill probes at runtime (Section E) |
23
+ | `docs/conventions/spec-completeness.md` | a valid `## Self-Critique-Check` convention seed (Section E) |
24
+ | `docs/agents/code-review.md` | Standards-source pointers + adjacent-review-tooling notes the `code-review` skill's Standards axis reads (Section I) |
25
+ | `## Workflow` in CLAUDE.md **and** AGENTS.md | generic entry-point map seeded from [workflow-overview.md](./workflow-overview.md) (Section F + Write) |
26
+ | `## Agent skills` + `## Prod` in CLAUDE.md **and** AGENTS.md | one-line pointers + deploy target (Sections C/G + Write) |
27
+
28
+ ## Idempotency contract — read before writing anything
29
+
30
+ Every project-layer file this skill (or `npx init`) creates begins with **one sentinel line as its very first line**:
31
+
32
+ ```
33
+ <!-- setup-workflow: state=<stub|filled|not-applicable>[; mode=<github-projects-v2|none>] -->
34
+ ```
35
+
36
+ - `state=stub` — placeholder, awaiting fill (retryable). `state=filled` — populated, done. `state=not-applicable` — complete *by design* (e.g. board-sync for a non-GitHub tracker); never re-prompt. `mode=` appears **only** in `board-sync.md`.
37
+ - **Per-file decision** when this skill runs:
38
+ - File missing → create it (write body + sentinel).
39
+ - First line is `state=stub` → fill it, flip the sentinel to `filled` (or `not-applicable`).
40
+ - First line is `state=filled` / `state=not-applicable` → **skip** (only the *first line* counts — a later mention of "setup-workflow" in the body does not).
41
+ - File exists, **non-empty, no sentinel** (legacy / pre-existing) → treat as **legacy-filled**, **skip**, report it.
42
+ - File exists but empty/whitespace, no sentinel → treat as fillable.
43
+ - **CLAUDE.md / AGENTS.md carry no sentinel** (they are not ours) → reconcile **per section** via the block headers `## Workflow` / `## Agent skills` / `## Prod`: add a missing block, never overwrite an existing one or surrounding user content.
44
+ - **Never overwrite filled content.** A re-run only fills what is missing/stub. End with a report: `<file>: created · filled · skipped (already filled / legacy / not-applicable)`.
45
+
46
+ ## Process
47
+
48
+ ### 1. Explore
49
+
50
+ Read the current state; don't assume. For every target file, read its first line to classify it per the idempotency contract (missing / stub / filled / not-applicable / legacy).
51
+
52
+ - `git remote -v` and `.git/config` — GitHub? GitLab? Which owner/repo?
53
+ - `CLAUDE.md` and `AGENTS.md` at the repo root — which exist? Do they already have a `## Workflow` / `## Agent skills` / `## Prod` block?
54
+ - `CONTEXT.md`, `CONTEXT-MAP.md`, `docs/adr/` — domain-doc layout.
55
+ - `docs/agents/`, `docs/agents/skills/`, `docs/conventions/` — prior output of this skill.
56
+ - `gh auth status` (if GitHub) — is `gh` authenticated, and with which scopes?
57
+
58
+ ### 2. Section A — Issue tracker
59
+
60
+ > The "issue tracker" is where issues live for this repo. Skills like `to-issues`, `triage`, and `to-prd` read from and write to it — they need to know whether to call `gh`, `glab`, write markdown under `.scratch/`, or follow a workflow you describe.
61
+
62
+ Default posture: these skills were designed for GitHub. If a `git remote` points at GitHub, propose GitHub; at GitLab, propose GitLab. Otherwise offer:
63
+
64
+ - **GitHub** — GitHub Issues (`gh` CLI)
65
+ - **GitLab** — GitLab Issues (`glab` CLI)
66
+ - **Local markdown** — files under `.scratch/<feature>/` (solo projects / no remote)
67
+ - **Other** (Jira, Linear, …) — ask the user to describe the workflow in one paragraph; record it as freeform prose.
68
+
69
+ Seed `docs/agents/issue-tracker.md` from the matching template in this folder: [issue-tracker-github.md](./issue-tracker-github.md), [issue-tracker-gitlab.md](./issue-tracker-gitlab.md), [issue-tracker-local.md](./issue-tracker-local.md). For "other", write it from the user's description.
70
+
71
+ **Conditional board-write note (only when the GitHub tracker uses a managed board):** if Section D ends with `board-sync.md` at `mode: github-projects-v2`, add one line to `issue-tracker.md`: *"Board writes (item-add, status/wave/cluster field edits, sub-issue links) go through the board-sync helper, not bare `gh issue create`/`gh project item-*`."* Do **not** add this for GitLab, local, other, or `mode: none`.
72
+
73
+ ### 3. Section B — Triage labels
74
+
75
+ > When `triage` processes an incoming issue it applies labels (or your tracker's equivalent). It needs strings you've actually configured, or it creates duplicates.
76
+
77
+ Present the canonical roles from [triage-labels.md](./triage-labels.md); each role's string defaults to its name. Ask whether to override any. Seed `docs/agents/triage-labels.md` from the template.
78
+
79
+ ### 4. Section C — Domain docs
80
+
81
+ > Some skills read `CONTEXT.md` for domain language and `docs/adr/` for past decisions. They need to know whether the repo has one global context or several.
82
+
83
+ - **Single-context** — one `CONTEXT.md` + `docs/adr/` at the root (most repos).
84
+ - **Multi-context** — `CONTEXT-MAP.md` at the root pointing to per-context `CONTEXT.md` files (typically a monorepo).
85
+
86
+ Seed `docs/agents/domain.md` from [domain.md](./domain.md).
87
+
88
+ ### 5. Section D — Board field-IDs (GitHub tracker only)
89
+
90
+ > A GitHub-Projects board stores its fields (Status, and any workflow fields like a wave/cluster/spec-path) under opaque GraphQL IDs. The board-managed skills need those IDs. They differ per board and can't be typed by hand, so this skill discovers them.
91
+
92
+ **Skip entirely if Section A is not GitHub** → write `board-sync.md` with `state=not-applicable`, `mode=none`, a one-line "this project does not use a GitHub-Projects board" note. Terminal; never re-prompts.
93
+
94
+ **Preflight:** `gh auth status`. If `project`/`read:project` scope is missing, surface the exact remedy: `gh auth refresh -s project,read:project`, then fall through to the stub path below.
95
+
96
+ **Discover (the success path):** `gh project list --owner <remote-owner> --format json`. If **exactly one** project clearly belongs to this repo's owner, read its fields: `gh project field-list <number> --owner <owner> --format json`. Record each field's `id`, `name`, `dataType` (single-select / number / text), and for single-selects the option `id`s. Write `board-sync.md` with `state=filled`, `mode=github-projects-v2`, the project node id + repo + the discovered field/option IDs, seeded from [board-sync.md](./board-sync.md). Fill the `<!-- board-sync:profile -->` **JSON block** (the machine SSOT `scripts/board_config.py` parses) — replace each `<…>` placeholder under `repo`/`project`/`fields` with the discovered value; leave the convention values (`labels`/`branchPrefixes`/`prMarkers`/`headings`) at their seeded defaults unless this project's conventions differ.
97
+
98
+ **Map the status roles (`fields.status.roles`):** the seeded map carries the recommended English stage names (`Idea/Triaged/Spec/In Progress/Review/Done`). Reconcile it against the **discovered** Status option names: an exact (case-sensitive) match keeps its seeded entry; for every role whose seeded name is NOT among the discovered options, ask the user which of their actual option names plays that role (a stage they don't have may be omitted from the map — say so). Never guess a mapping from similarity. Finish with a validation pass: every role value in the map MUST appear in `fields.status.options`, else fix before writing `state=filled`.
99
+
100
+ **Fallback (the single catch-all — no board / >1 / ambiguous / scope error / read failure):** do **not** auto-create a board (`gh project create` alone cannot provision the Status options + workflow fields a board needs). Write `board-sync.md` with `state=stub`, `mode=github-projects-v2`, and inline **instructions**: which fields the workflow profile needs (a Status single-select with your stage options; optionally a Wave number, a Cluster text, a Spec-Path / Plan-Path text), how to create the board in the GitHub UI / `gh`, and "then run `/setup-workflow` again — it will discover and fill the IDs." Retryable.
101
+
102
+ **Optional — Phase field + saved Views (Program route only):** never auto-discovered or auto-created, unlike the fields above — a Phase field's option set is plan-specific. If this project plans to use the Program route (`scale-check` → `to-waves` → `validate-graph`), point the user at the seeded [board-sync.md](./board-sync.md)'s "Optional: the Program route" section for the `gh project field-create` command, the optional `fields.phase` / `labels.programType` profile keys, and the two saved Views to create by hand.
103
+
104
+ ### 6. Section E — Spec-layer seeds (non-interactive)
105
+
106
+ These are **structured-but-empty** crusts that `/retro` grows; do not ask the user to fill them now.
107
+
108
+ - `docs/agents/skills/spec-self-critique.md` — seed the 12 per-point headings from [spec-self-critique-seed.md](./spec-self-critique-seed.md) so `/retro` has stable append anchors and `spec-self-critique` finds its project layer (suppressing the "layer absent" warning) without inventing project content.
109
+ - `docs/agents/skills/orchestrate-wave.md` — seed the named `§`-section headings from [orchestrate-wave-seed.md](./orchestrate-wave-seed.md) so the `orchestrate-wave` skill's Phase-0 probe finds its project layer. The sections ship **empty** (the exact commands / tunnel / login can't be guessed) → the skill treats an unfilled seed as "layer absent" and runs its generic fallback until the project fills them. A filled section is a manual project-maintenance edit, not something this run invents.
110
+ - `docs/conventions/spec-completeness.md` — seed **one valid** `## Self-Critique-Check` block (Trigger/Check/Korrektur) from [spec-completeness-seed.md](./spec-completeness-seed.md). A convention file *without* a valid block makes `spec-self-critique` point 8 warn — an empty file is worse than none.
111
+
112
+ > **Handoff drift-guard (`.claude/hooks/drift-guard.py`).** The repo ships a PreToolUse hook that blocks a `.handoff/*.md` Write when the linked issue's rooted graph is not execute-ready (it delegates all coherence to `scripts/execute-ready-check.py --mode handoff`). It self-filters to `.handoff/*.md` and fires **only once handoff docs exist** — a freshly scaffolded project carries the guard but has nothing to guard yet (silently inoperative until the first `.handoff/` write). This scaffold only **documents** the interplay; it does **not** build new mechanics. Once the project starts emitting handoffs, writes land in `.handoff/` and the guard activates automatically.
113
+
114
+ ### 7. Section F — Workflow overview
115
+
116
+ > The workflow overview is a short entry-point map: which skill to start with for a feature, ready plan, bug, implementation slice, or finished branch. It should stay generic; the detailed mechanics live in the individual skills and the project-layer docs.
117
+
118
+ Seed `## Workflow` from [workflow-overview.md](./workflow-overview.md) when the target CLAUDE.md/AGENTS.md file has no `## Workflow` block. If a `## Workflow` block already exists, leave it untouched and report `skipped (already present)`; it is likely repo-specific.
119
+
120
+ ### 8. Section G — Deploy target
121
+
122
+ > `wrapup` and live-verify reference where this project deploys (host, command, URL). It lives in the `## Prod` block of CLAUDE.md/AGENTS.md, not a separate file.
123
+
124
+ Ask for the deploy target in plain terms (where does this ship, how is it deployed, what's the live URL?). Record it for the `## Prod` block (Write step). If the user has no deploy target, skip — do not invent one.
125
+
126
+ ### 8b. Section H — Size-Profil (optional LoC-offender gate, non-interactive)
127
+
128
+ > **Optional, opt-in.** The kit ships a LoC-offender drive gate (`scripts/loc_offender_gate.py`) — a stdlib-only helper that flags files over a line threshold (e.g. wire it into a pre-push hook). It reads a **single threshold SSOT**: `maxLines` in `max-lines-allowlist.json` at the repo root. Seeding that file is harmless even if you never wire the gate; without it the gate has no profile to read. (The SSOT repo additionally enforces the same threshold as a project-specific test-runner fitness check — that check is **not** shipped; the portable gate is the Python helper above.)
129
+
130
+ Seed `max-lines-allowlist.json` **only if absent** (never overwrite — its `offenders` array is curated debt):
131
+ ```json
132
+ {
133
+ "maxLines": 300,
134
+ "vendored": [],
135
+ "offenders": []
136
+ }
137
+ ```
138
+ Adjust `maxLines` only if the consumer asks for a different line limit. `vendored` = permanently-exempt third-party primitives; `offenders` = the shrinking known-debt set (files already over the limit at adoption). Report `created · skipped (already present)`.
139
+
140
+ ### 8c. Section I — Code-review project layer (non-interactive)
141
+
142
+ > The `code-review` skill's Standards axis reads a project layer for exactly which docs count as this repo's conventions, and how the method relates to any other review tooling already running here. Seed it so the skill resolves that directly instead of guessing at the repo root.
143
+
144
+ Seed `docs/agents/code-review.md` from [code-review.md](./code-review.md) — the same structured-but-empty philosophy as Section E: the two headings ("Standards sources in this repo" / "Adjacent review tooling") ship complete, but filling in this repo's real values is a manual edit (or a later pass), not something this run invents. Write at `state=filled` — the scaffold itself is the finished deliverable; nothing is pending from `/setup-workflow`'s side.
145
+
146
+ ### 8. Write
147
+
148
+ For each `docs/...` file: obey the idempotency contract (the "Idempotency contract" section). Prepend the sentinel with the resolved `state` (and `mode` for board-sync).
149
+
150
+ For the **`## Workflow`**, **`## Agent skills`**, and **`## Prod`** blocks, reconcile per section in **both** CLAUDE.md and AGENTS.md that exist:
151
+
152
+ - If **both** files exist → write/update the block in **both** (keep them coherent — Codex is a first-class surface).
153
+ - If **one** exists → that one.
154
+ - If **neither** exists → ask the user which surface(s) to create (**default `CLAUDE.md`**), then write there.
155
+ - If a `## Workflow` block already exists → skip it; this block is often repo-specific.
156
+ - If an `## Agent skills` / `## Prod` block already exists → update its contents in-place; never duplicate or clobber surrounding user content.
157
+
158
+ `## Workflow` block:
159
+
160
+ Use [workflow-overview.md](./workflow-overview.md) verbatim as the generic seed.
161
+
162
+ `## Agent skills` block:
163
+
164
+ ```markdown
165
+ ## Agent skills
166
+
167
+ ### Issue tracker
168
+ [one-line summary]. See `docs/agents/issue-tracker.md`.
169
+
170
+ ### Triage labels
171
+ [one-line summary]. See `docs/agents/triage-labels.md`.
172
+
173
+ ### Domain docs
174
+ [one-line summary — single- or multi-context]. See `docs/agents/domain.md`.
175
+ ```
176
+
177
+ `## Prod` block (only if Section F produced a deploy target):
178
+
179
+ ```markdown
180
+ ## Prod
181
+
182
+ [host / platform], deployed via [command/trigger]. Live: [URL].
183
+ ```
184
+
185
+ ### 9. Done
186
+
187
+ Report the per-file outcome (`created · filled · skipped`), which surface(s) you wrote the blocks to, and which skills now read the layer. Note the user can edit `docs/agents/*.md` directly later, and that `/retro` grows the spec-layer seeds over time. Re-running this skill only fills what is missing or `state=stub`.
@@ -0,0 +1,29 @@
1
+ # Third-Party Notices
2
+
3
+ This skill is adapted from **Matt Pocock's skills**
4
+ (https://github.com/mattpocock/skills), `skills/engineering/setup-matt-pocock-skills` @ d574778, Copyright (c) 2026 Matt Pocock,
5
+ used under the MIT License. Locally adapted (fork-and-own); see PROVENANCE.md.
6
+
7
+ ```
8
+ MIT License
9
+
10
+ Copyright (c) 2026 Matt Pocock
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+ ```
@@ -0,0 +1,111 @@
1
+ # Board sync — GitHub Projects field-IDs
2
+
3
+ How the board-managed workflow skills (`to-prd`, `to-issues`, `board-to-waves`, …) address this project's GitHub-Projects board. A board stores its fields under opaque GraphQL IDs that differ per board, so they are recorded here rather than hardcoded in any skill.
4
+
5
+ `/setup-workflow` writes this file in one of three states (see the sentinel on the first line):
6
+ - **`state=filled`** — the IDs below were discovered from your board.
7
+ - **`state=stub`** — no single board was found; fill the IDs by creating the board (below) and re-running `/setup-workflow`.
8
+ - **`state=not-applicable`** (`mode=none`) — this project does not use a GitHub-Projects board.
9
+
10
+ ## Board profile — fields the workflow skills use
11
+
12
+ | Field | Type | Required | Used for |
13
+ |---|---|---|---|
14
+ | Status | single-select | yes | workflow stage (the skills move items through your stage options) |
15
+ | Wave | number | optional | grouping anchors into waves/campaigns |
16
+ | Cluster | text | optional | thematic cluster tag |
17
+ | Spec-Path | text | optional | link from an issue to its spec doc |
18
+ | Plan-Path | text | optional | link from an issue to its plan doc |
19
+ | Phase | single-select | optional | groups waves into phases for the Program route (`to-waves`/`validate-graph`) — only needed if this project uses it |
20
+
21
+ ## Machine profile (SSOT) — `scripts/board_config.py` reads this
22
+
23
+ `/setup-workflow` fills the board-identity values (node id, field IDs, status options) from `gh project field-list`. The convention values (labels, branch prefixes, PR markers, headings) ship pre-filled to match the bundled skills — edit them only if you adapt those conventions. The IDs live **only** in this block (the table above is documentation), so the two cannot drift.
24
+
25
+ The optional `wrapup` block is a wrapup-only switch, not a board field: `wrapup.remoteBranchSweep` (default `false`) gates `wrapup` Step 5d's remote-branch sweep — `false`/missing (the shipped default) means Step 5d only reports the count of stale merged-PR remotes it found; `true` lets it actually `git push origin --delete` them. Flip it to `true` once you trust the sweep in your repo.
26
+
27
+ <!-- board-sync:profile -->
28
+ ```json
29
+ {
30
+ "repo": "<owner>/<repo>",
31
+ "project": {
32
+ "number": 0,
33
+ "owner": "<owner>",
34
+ "nodeId": "<fill via /setup-workflow>"
35
+ },
36
+ "fields": {
37
+ "status": {
38
+ "id": "<fill>",
39
+ "options": { "<stage>": "<option-id>" },
40
+ "roles": {
41
+ "idea": "Idea",
42
+ "triaged": "Triaged",
43
+ "spec": "Spec",
44
+ "inProgress": "In Progress",
45
+ "review": "Review",
46
+ "done": "Done"
47
+ }
48
+ },
49
+ "wave": "<fill / omit>",
50
+ "cluster": "<fill / omit>",
51
+ "specPath": "<fill / omit>",
52
+ "planPath": "<fill / omit>",
53
+ "phase": {
54
+ "id": "<fill / omit whole block>",
55
+ "options": { "<phase-name>": "<option-id>" }
56
+ }
57
+ },
58
+ "labels": {
59
+ "readyForAgent": "ready-for-agent",
60
+ "typePrefix": "type:",
61
+ "clusterType": "type:cluster",
62
+ "waveStub": "wave-stub",
63
+ "programType": "type:program"
64
+ },
65
+ "branchPrefixes": ["feat", "fix", "chore", "docs"],
66
+ "prMarkers": {
67
+ "partOf": "Part of",
68
+ "retroMarker": "**Retro:**",
69
+ "retroValues": ["ran", "skipped"]
70
+ },
71
+ "headings": {
72
+ "vorBau": "Clarify Before Build"
73
+ },
74
+ "wrapup": {
75
+ "remoteBranchSweep": false
76
+ }
77
+ }
78
+ ```
79
+
80
+ ### Status roles (`fields.status.roles`)
81
+
82
+ The scripts and skills never hardcode status option NAMES — they address stages
83
+ by semantic **role** (`idea` / `triaged` / `spec` / `inProgress` / `review` /
84
+ `done`) and resolve the name via this map (e.g. `board-sync.py add
85
+ --status-role spec`, the SessionStart auto-transition, the wave/anchor status
86
+ icons). The seeded values above are the **recommended English defaults**: name
87
+ your board's Status options exactly like that and nothing needs editing. A
88
+ board in another language (or with different stage names) maps each role to
89
+ its own option name once — e.g. `"inProgress": "En cours"` — and everything
90
+ follows; renaming an option later is one edit here. A role you don't have
91
+ (e.g. no `idea` stage) may simply be omitted. A profile **without** the whole
92
+ `roles` map keeps loading: the auto-transition hook and status icons degrade
93
+ with a visible hint, and `--status-role` commands fail with the exact snippet
94
+ to add.
95
+
96
+ ## If the IDs are not yet filled (stub)
97
+
98
+ 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).
99
+ 2. Ensure `gh` has the scopes: `gh auth refresh -s project,read:project`.
100
+ 3. Re-run `/setup-workflow` — it discovers the board (`gh project field-list`) and fills the IDs here automatically.
101
+
102
+ ## Optional: the Program route (Phase field + saved Views)
103
+
104
+ Skip this section entirely unless this project actually plans to use the Program route (`scale-check` → `to-waves` → `validate-graph`) — `fields.phase` / `labels.programType` are never auto-discovered or auto-created (a Phase field's option set is plan-specific, not something `/setup-workflow` can guess), and a profile without them keeps loading unchanged.
105
+
106
+ 1. **Create the Phase field:** `gh project field-create <number> --owner <owner> --name Phase --data-type SINGLE_SELECT --single-select-options "P1,P2,P3"` (name the options after this project's actual phases).
107
+ 2. **Fill `fields.phase`** in the `<!-- board-sync:profile -->` block above with the same `{id, options}` shape as `fields.status` — read both back via `gh project field-list <number> --owner <owner> --format json`.
108
+ 3. **Fill `labels.programType`** only if this project's Program-PRD type label should differ from the shipped literal default `type:program`.
109
+ 4. **Create two saved Views** in the GitHub Projects UI by hand (not API-creatable):
110
+ - **"Program"** — Group by: `Phase` · Sort by: `Wave` · Filter: `type:cluster OR wave-stub OR type:program`.
111
+ - **"Active Wave"** — Filter: `Wave=<n>` (the current wave number) · Group by: `Status`.
@@ -0,0 +1,26 @@
1
+ # Code-review project layer
2
+
3
+ The generic `code-review` skill ships the Two-Axis method (Standards × Spec),
4
+ the Fowler-smell baseline, and the merge-base preflight — the *how*. This file
5
+ is the **project layer**: it records exactly which docs count as this repo's
6
+ Standards-axis sources, and how the method relates to any other review
7
+ tooling already running in this environment. The skill reads it at runtime;
8
+ with this file present it resolves the Standards sources directly instead of
9
+ scanning the repo root itself.
10
+
11
+ This is a structured-but-empty crust — `/setup-workflow` seeds the headings,
12
+ it does not invent your project's answers. Fill the two sections below
13
+ directly (or grow them over time) whenever you know the real values.
14
+
15
+ ## Standards sources in this repo
16
+ <!-- List the docs the Standards axis should read: a root convention file
17
+ (CLAUDE.md/AGENTS.md/CONTRIBUTING.md), any per-package convention files
18
+ in a monorepo, a docs/conventions/ folder, a style guide. One per line. -->
19
+ - _none recorded yet — add the paths this repo's standards actually live at_
20
+
21
+ ## Adjacent review tooling
22
+ <!-- Name any other review-shaped tool/skill/command already running in this
23
+ environment (a plan-review loop, a security-specific audit, a
24
+ reuse/simplification pass, a reviewer subagent) and how code-review
25
+ relates to it (complements it / does not replace it). One per line. -->
26
+ - _none recorded yet_
@@ -0,0 +1,51 @@
1
+ # Domain Docs
2
+
3
+ How the engineering skills should consume this repo's domain documentation when exploring the codebase.
4
+
5
+ ## Before exploring, read these
6
+
7
+ - **`CONTEXT.md`** at the repo root, or
8
+ - **`CONTEXT-MAP.md`** at the repo root if it exists — it points at one `CONTEXT.md` per context. Read each one relevant to the topic.
9
+ - **`docs/adr/`** — read ADRs that touch the area you're about to work in. In multi-context repos, also check `src/<context>/docs/adr/` for context-scoped decisions.
10
+
11
+ If any of these files don't exist, **proceed silently**. Don't flag their absence; don't suggest creating them upfront. The producer skill (`/grill-with-docs`) creates them lazily when terms or decisions actually get resolved.
12
+
13
+ ## File structure
14
+
15
+ Single-context repo (most repos):
16
+
17
+ ```
18
+ /
19
+ ├── CONTEXT.md
20
+ ├── docs/adr/
21
+ │ ├── 0001-event-sourced-orders.md
22
+ │ └── 0002-postgres-for-write-model.md
23
+ └── src/
24
+ ```
25
+
26
+ Multi-context repo (presence of `CONTEXT-MAP.md` at the root):
27
+
28
+ ```
29
+ /
30
+ ├── CONTEXT-MAP.md
31
+ ├── docs/adr/ ← system-wide decisions
32
+ └── src/
33
+ ├── ordering/
34
+ │ ├── CONTEXT.md
35
+ │ └── docs/adr/ ← context-specific decisions
36
+ └── billing/
37
+ ├── CONTEXT.md
38
+ └── docs/adr/
39
+ ```
40
+
41
+ ## Use the glossary's vocabulary
42
+
43
+ When your output names a domain concept (in an issue title, a refactor proposal, a hypothesis, a test name), use the term as defined in `CONTEXT.md`. Don't drift to synonyms the glossary explicitly avoids.
44
+
45
+ If the concept you need isn't in the glossary yet, that's a signal — either you're inventing language the project doesn't use (reconsider) or there's a real gap (note it for `/grill-with-docs`).
46
+
47
+ ## Flag ADR conflicts
48
+
49
+ If your output contradicts an existing ADR, surface it explicitly rather than silently overriding:
50
+
51
+ > _Contradicts ADR-0007 (event-sourced orders) — but worth reopening because…_
@@ -0,0 +1,35 @@
1
+ # Issue tracker: GitHub
2
+
3
+ Issues and PRDs for this repo live as GitHub issues. Use the `gh` CLI for all operations.
4
+
5
+ ## Conventions
6
+
7
+ - **Create an issue**: `gh issue create --title "..." --body-file <file>` — body always via `--body-file` (inline `--body` with backticks/parens crashes bash). Use a heredoc to build the file for multi-line bodies.
8
+ <!-- setup-workflow: when board-sync.md ends at mode=github-projects-v2, insert the managed-board routing line here — "Board writes (item-add, status/wave/cluster field edits, sub-issue links) go through scripts/board-sync.py, not bare `gh issue create`/`gh project item-*`." Omit for GitLab / local / other / mode=none. -->
9
+ - **Sync to the board** (managed-board projects only): route board writes through the board-sync helper, not bare `gh issue create`/`gh project item-*` — see `docs/agents/board-sync.md` once `/setup-workflow` has filled it.
10
+ - **Read an issue**: `gh issue view <number> --comments`, filtering comments by `jq` and also fetching labels.
11
+ - **List issues**: `gh issue list --state open --json number,title,body,labels,comments --jq '[.[] | {number, title, body, labels: [.labels[].name], comments: [.comments[].body]}]'` with appropriate `--label` and `--state` filters.
12
+ - **Comment on an issue**: `gh issue comment <number> --body "..."`
13
+ - **Apply / remove labels**: `gh issue edit <number> --add-label "..."` / `--remove-label "..."`
14
+ - **Close**: `gh issue close <number> --comment "..."`
15
+
16
+ Infer the repo from `git remote -v` — `gh` does this automatically when run inside a clone.
17
+
18
+ ## When a skill says "publish to the issue tracker"
19
+
20
+ Create a GitHub issue.
21
+
22
+ ## When a skill says "fetch the relevant ticket"
23
+
24
+ Run `gh issue view <number> --comments`.
25
+
26
+ ## Wayfinding operations
27
+
28
+ Used by `/wayfinder`. The **map** is a single issue with **child** issues as tickets.
29
+
30
+ - **Map**: a single issue labelled `wayfinder:map`, holding the Notes / Decisions-so-far / Fog body. `gh issue create --label wayfinder:map`.
31
+ - **Child ticket**: an issue linked to the map as a GitHub sub-issue (`gh api` on the sub-issues endpoint). Where sub-issues aren't enabled, add the child to a task list in the map body and put `Part of #<map>` at the top of the child body. Labels: `wayfinder:<type>` (`research`/`prototype`/`grilling`/`task`). Once claimed, the ticket is assigned to the driving dev.
32
+ - **Blocking**: GitHub's **native issue dependencies** — the canonical, UI-visible representation and the blocking SSOT. Set an edge via the board helper, which encapsulates the database-id resolution AND maintains the `## Blocked by` body mirror: `python3 scripts/board-sync.py dep-add --issue <child#> --blocked-by <blocker#>` (remove: `dep-remove`; read: `deps <#>`). Never a bare `gh api` on the dependencies endpoints — the helper is the only writer, same rule as sub-issues. *(Raw shape, for repos without the helper: `POST repos/<owner>/<repo>/issues/<child>/dependencies/blocked_by -F issue_id=<blocker-db-id>` with the blocker's numeric **database id** — `gh api repos/<owner>/<repo>/issues/<n> --jq .id`, not the `#number`/`node_id`.)* GitHub reports `issue_dependencies_summary.blocked_by` (open blockers only — the live gate). Where dependencies aren't available, fall back to a `Blocked by: #<n>, #<n>` line at the top of the child body. A ticket is unblocked when every blocker is closed.
33
+ - **Frontier query**: `python3 scripts/board-sync.py frontier <map#>` — classifies each native child `FREI` / `BLOCKED by #…` / `done` from the native edges; the first `FREI` unassigned child in map order wins. Without the helper: list the map's open children (`gh issue list --state open`, scoped to the map's sub-issues / task list), drop any with an open blocker (`issue_dependencies_summary.blocked_by > 0`, or an open issue in the `Blocked by` line) or an assignee.
34
+ - **Claim**: `gh issue edit <n> --add-assignee @me` — the session's first write.
35
+ - **Resolve**: `gh issue comment <n> --body "<answer>"`, then `gh issue close <n>`, then append a context pointer (gist + link) to the map's Decisions-so-far.
@@ -0,0 +1,34 @@
1
+ # Issue tracker: GitLab
2
+
3
+ Issues and PRDs for this repo live as GitLab issues. Use the [`glab`](https://gitlab.com/gitlab-org/cli) CLI for all operations.
4
+
5
+ ## Conventions
6
+
7
+ - **Create an issue**: `glab issue create --title "..." --description "..."`. Use a heredoc for multi-line descriptions. Pass `--description -` to open an editor.
8
+ - **Read an issue**: `glab issue view <number> --comments`. Use `-F json` for machine-readable output.
9
+ - **List issues**: `glab issue list -F json` with appropriate `--label` filters.
10
+ - **Comment on an issue**: `glab issue note <number> --message "..."`. GitLab calls comments "notes".
11
+ - **Apply / remove labels**: `glab issue update <number> --label "..."` / `--unlabel "..."`. Multiple labels can be comma-separated or by repeating the flag.
12
+ - **Close**: `glab issue close <number>`. `glab issue close` does not accept a closing comment, so post the explanation first with `glab issue note <number> --message "..."`, then close.
13
+ - **Merge requests**: GitLab calls PRs "merge requests". Use `glab mr create`, `glab mr view`, `glab mr note`, etc. — the same shape as `gh pr ...` with `mr` in place of `pr` and `note`/`--message` in place of `comment`/`--body`.
14
+
15
+ Infer the repo from `git remote -v` — `glab` does this automatically when run inside a clone.
16
+
17
+ ## When a skill says "publish to the issue tracker"
18
+
19
+ Create a GitLab issue.
20
+
21
+ ## When a skill says "fetch the relevant ticket"
22
+
23
+ Run `glab issue view <number> --comments`.
24
+
25
+ ## Wayfinding operations
26
+
27
+ Used by `/wayfinder`. The **map** is a single issue with **child** issues as tickets.
28
+
29
+ - **Map**: a single issue labelled `wayfinder:map`, holding the Notes / Decisions-so-far / Fog body. `glab issue create --label wayfinder:map`. (On GitLab tiers with native epics, an epic may hold the map instead; a labelled issue works everywhere.)
30
+ - **Child ticket**: an issue carrying `Part of #<map>` at the top of its description and labels `wayfinder:<type>` (`research`/`prototype`/`grilling`/`task`). Once claimed, the ticket is assigned to the driving dev.
31
+ - **Blocking**: GitLab's **native blocking link** — the canonical, UI-visible representation. Add it with the `/blocked_by #<n>` quick action, posted as a note (`glab issue note <child> --message "/blocked_by #<blocker>"`). Native blocking links are a Premium/Ultimate feature; on the free tier (or where unavailable) fall back to a `Blocked by: #<n>, #<n>` line at the top of the description. A ticket is unblocked when every blocker is closed.
32
+ - **Frontier query**: `glab issue list -F json` scoped to the map's children, drop any with an open blocker — a native `blocked_by` link to an open issue (`glab api projects/:id/issues/:iid/links`), or an open issue in the `Blocked by` line — or an assignee; first in map order wins.
33
+ - **Claim**: `glab issue update <n> --assignee @me` — the session's first write.
34
+ - **Resolve**: `glab issue note <n> --message "<answer>"`, then `glab issue close <n>`, then append a context pointer (gist + link) to the map's Decisions-so-far.