@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,71 @@
1
+ <!-- setup-workflow: state=filled; mode=github-projects-v2 -->
2
+ # Board sync — GitHub Projects field IDs
3
+
4
+ The workflow board is [Agent Workflow Kit](https://github.com/users/iKon85/projects/3). Board-managed skills address it through the profile below and `scripts/board-sync.py`.
5
+
6
+ <!-- board-sync:profile -->
7
+ ```json
8
+ {
9
+ "repo": "iKon85/agent-workflow-kit",
10
+ "project": {
11
+ "number": 3,
12
+ "owner": "iKon85",
13
+ "nodeId": "PVT_kwHOAuH31M4BdM5V"
14
+ },
15
+ "fields": {
16
+ "status": {
17
+ "id": "PVTSSF_lAHOAuH31M4BdM5VzhXwFOk",
18
+ "options": {
19
+ "Idea": "357a9b54",
20
+ "Triaged": "463d3f21",
21
+ "Spec": "1cd0343b",
22
+ "In Progress": "35e6c509",
23
+ "Review": "51f16b28",
24
+ "Done": "491150b6"
25
+ },
26
+ "roles": {
27
+ "idea": "Idea",
28
+ "triaged": "Triaged",
29
+ "spec": "Spec",
30
+ "inProgress": "In Progress",
31
+ "review": "Review",
32
+ "done": "Done"
33
+ }
34
+ },
35
+ "wave": "PVTF_lAHOAuH31M4BdM5VzhXwFWg",
36
+ "cluster": "PVTF_lAHOAuH31M4BdM5VzhXwFWk",
37
+ "specPath": "PVTF_lAHOAuH31M4BdM5VzhXwFWo",
38
+ "planPath": "PVTF_lAHOAuH31M4BdM5VzhXwFWs",
39
+ "phase": {
40
+ "id": "PVTSSF_lAHOAuH31M4BdM5VzhXwFWw",
41
+ "options": {
42
+ "P1": "9c8c93e0",
43
+ "P2": "cf741bec",
44
+ "P3": "8a69a61e"
45
+ }
46
+ }
47
+ },
48
+ "labels": {
49
+ "readyForAgent": "ready-for-agent",
50
+ "typePrefix": "type:",
51
+ "clusterType": "type:cluster",
52
+ "waveStub": "wave-stub",
53
+ "programType": "type:program"
54
+ },
55
+ "branchPrefixes": ["feat", "fix", "chore", "docs"],
56
+ "prMarkers": {
57
+ "partOf": "Part of",
58
+ "retroMarker": "**Retro:**",
59
+ "retroValues": ["ran", "skipped"]
60
+ },
61
+ "headings": {
62
+ "vorBau": "Clarify Before Build"
63
+ },
64
+ "wrapup": {
65
+ "remoteBranchSweep": false
66
+ }
67
+ }
68
+ ```
69
+
70
+ The Program route uses phases `P1`, `P2`, and `P3`. Saved board views remain a GitHub UI concern; the machine profile above is the workflow SSOT.
71
+
@@ -0,0 +1,14 @@
1
+ <!-- setup-workflow: state=filled -->
2
+ # Code-review project layer
3
+
4
+ ## Standards sources in this repo
5
+
6
+ - `CLAUDE.md` and `AGENTS.md`
7
+ - `docs/conventions/`
8
+ - The originating issue or PRD for the Spec axis
9
+
10
+ ## Adjacent review tooling
11
+
12
+ - `spec-self-critique` reviews plans before code exists; it does not replace diff review.
13
+ - Security audits and simplification passes remain narrower complementary checks.
14
+
@@ -0,0 +1,7 @@
1
+ <!-- setup-workflow: state=filled -->
2
+ # Domain docs
3
+
4
+ This is a single-context repository. Before design work, read root `CONTEXT.md` when present and the relevant decisions under `docs/adr/`. Their absence is non-blocking: `grill-with-docs` creates them when the product language or a durable decision first needs recording.
5
+
6
+ Use glossary terms consistently in issues, tests, and skill text. Surface conflicts with an existing ADR instead of silently replacing its decision.
7
+
@@ -0,0 +1,12 @@
1
+ <!-- setup-workflow: state=filled -->
2
+ # Issue tracker: GitHub
3
+
4
+ Issues and PRDs for this repo live in `iKon85/agent-workflow-kit` as GitHub issues.
5
+
6
+ ## Conventions
7
+
8
+ - Use `gh` for issue reads and comments; infer the repository from the remote.
9
+ - Write multi-line issue and PR bodies through a temporary file and `--body-file`.
10
+ - Route board writes, status/wave/cluster field edits, dependencies, and sub-issue links through `scripts/board-sync.py`, not bare `gh project` commands.
11
+ - Board state is authoritative for workflow status; GitHub issues remain the durable content source.
12
+
@@ -0,0 +1,205 @@
1
+ # Security-Audit Runbook — TEMPLATE
2
+
3
+ > **Copy this file into your project** (for example `docs/security/audit-runbook.md`),
4
+ > then replace every `<placeholder>` with your actual stack and delete the guidance
5
+ > lines. The `security-audit` skill is the *run procedure*; this runbook is the
6
+ > *checklist* it works through. The STRUCTURE below carries the value — keep all six
7
+ > Parts, fill them for your stack.
8
+ >
9
+ > **Scope: source code + config = the application layer only.** Infrastructure
10
+ > (firewall, exposed ports, TLS, SSH, backups) is audited **separately** — an exposed
11
+ > database port beats any code fix. Track the standing audit anchor issue in Part 0.
12
+
13
+ ---
14
+
15
+ ## Part 0 — Scope
16
+
17
+ Fill this once per project; re-confirm it each run (the attack surface moves).
18
+
19
+ | Question | Answer |
20
+ |---|---|
21
+ | **Public surface** | `<public URLs>` — which routes are reachable **unauthenticated** vs auth-gated. |
22
+ | **Trust boundary** (untrusted input) | `<HTTP body/query/params · file uploads · outbound fetch of user/admin-configured URLs · webhook payloads · SSE/websocket streams>` |
23
+ | **Crown jewels** | `<secrets/keys · third-party credentials · per-tenant data · the database · admin accounts>` |
24
+ | **Auth model** | `<session/token mechanism → authn gate → per-resource authorization → tenant/row scoping>` |
25
+ | **Deployment** | `<where it runs, which images/artifacts, what is internal-only, deploy trigger>` |
26
+ | **Tracking anchor** | `#<issue>` — the umbrella issue this audit's findings link under. |
27
+
28
+ ---
29
+
30
+ ## Part 1 — AI-runnable audit prompt
31
+
32
+ Open your AI code assistant (and a second, independent model — see Part 5) in the
33
+ repo root and paste a prompt shaped like this, tailored to your stack:
34
+
35
+ ````text
36
+ You are performing a READ-ONLY security audit of THIS repository
37
+ (<framework> backend, <ORM> on <database>, <auth lib>, <frontend stack>,
38
+ <deploy platform>). Do NOT modify files.
39
+
40
+ For EACH checklist item: search the code (prefer ripgrep), report findings with an
41
+ exact `file:line`, classify severity (Critical/High/Medium/Low/Info), and give a
42
+ concrete fix. If an item does not apply, say "N/A" and why. End with a findings
43
+ table sorted by severity plus a "needs human verification" list.
44
+
45
+ Rules:
46
+ - Cite a real file:line for every finding. No finding without evidence
47
+ (tag each: suspected / verified-with-evidence).
48
+ - Distinguish confirmed from suspected. Never claim a vuln you did not locate.
49
+ - Prefer a flagged false positive over a silent omission.
50
+
51
+ CHECKLIST: <paste the 12 headings from Part 2>
52
+ ````
53
+
54
+ > The agent pass is a **lead generator, not a verdict**. Every finding is
55
+ > "suspected" until confirmed against the real code in Part 2.
56
+
57
+ ---
58
+
59
+ ## Part 2 — Manual checklist
60
+
61
+ Each section: **what & why**, **example commands** (swap in your paths/tools), a
62
+ **baseline** you record on the first run and re-verify every run (code moves), and a
63
+ **severity**. Read the surrounding code; never trust a grep hit alone. Anchor every
64
+ path from the repo root.
65
+
66
+ ### 1. Secrets & credentials · **Critical**
67
+ - [ ] No secrets in tracked files **or git history** (treat any hit as compromised → **rotate**).
68
+ - [ ] Ignore files exclude `.env*`, key/credential files (from both VCS and the build image).
69
+ - [ ] Secrets read from the environment at runtime; no defaults baked into code.
70
+ - **Baseline:** `<record: committed secrets? history scanned? gaps + tracking issue>`
71
+
72
+ ### 2. Authentication & authorization (IDOR + tenant scope) · **Critical**
73
+ - [ ] Every non-public route requires the authn guard, applied **before** the handler.
74
+ - [ ] Reads/writes verify the caller **owns / belongs to** the resource, not just "logged in".
75
+ - [ ] **Every** tenant-scoped query filters by `<tenant-scope column>` — no query forgets it.
76
+ - [ ] Admin routes check an admin role, not merely authentication.
77
+ - **Baseline:** `<record>`
78
+
79
+ ### 3. Injection · **Critical**
80
+ - [ ] All DB access parameterized (query builder or bound params) — no user input concatenated.
81
+ - [ ] Any credential-decrypting / privileged DB function only ever receives bound params.
82
+ - [ ] No `child_process` / `exec` / `eval` / dynamic-code on untrusted data.
83
+ - **Baseline:** `<record — mark stack-irrelevant classes (NoSQL, templating, deserialization) N/A>`
84
+
85
+ ### 4. XSS & output encoding · **High**
86
+ - [ ] User input rendered to HTML is escaped (most frameworks auto-escape by default).
87
+ - [ ] Any raw-HTML sink (`<raw-html API>`) is justified and sanitized if input is user-controlled.
88
+ - **Baseline:** `<record>`
89
+
90
+ ### 5. Attack-surface & error exposure · **High**
91
+ - [ ] Generic 500s — no stack traces / internals returned to clients.
92
+ - [ ] CORS is an explicit allowlist; never `*` with credentials.
93
+ - [ ] Debug/test routes gated behind an env flag, off in production. No open redirects.
94
+ - [ ] Security headers present (`<header middleware / proxy config>`).
95
+ - **Baseline:** `<record>`
96
+
97
+ ### 6. Input validation, uploads, path traversal, SSRF · **High**
98
+ - [ ] Request bodies validated against a schema, not trusted raw.
99
+ - [ ] Uploads enforce **type (real MIME, not just extension), size, safe path**; content scrubbed
100
+ (for example spreadsheet formula injection on leading `=` `+` `-` `@` cells).
101
+ - [ ] No path traversal: user input never joined into a filesystem path without normalize + base-dir check.
102
+ - [ ] **SSRF:** any server-side fetch of a user/admin-supplied URL is allowlisted / blocks internal
103
+ ranges (`169.254.169.254`, `localhost`, RFC1918).
104
+ - **Baseline:** `<record — SSRF and upload scrubbing are common blind spots; confirm this run>`
105
+
106
+ ### 7. Auth tokens, sessions, cookies · **High**
107
+ - [ ] Session/token secret is strong and **from env**, never a hardcoded default.
108
+ - [ ] Cookies `HttpOnly` + `Secure` (prod) + `SameSite`; session invalidated on logout/deactivation.
109
+ - **Baseline:** `<record>`
110
+
111
+ ### 8. Client-side / frontend leaks · **High**
112
+ - [ ] No secret/private key in any client-exposed env var or the shipped bundle (only public values).
113
+ - [ ] Source maps not deployed to prod (or access-restricted).
114
+ - [ ] Security enforced **server-side**; client checks are UX only.
115
+ - **Baseline:** `<record>`
116
+
117
+ ### 9. Dependencies & supply chain · **High**
118
+ - [ ] No known-vulnerable deps; critical CVEs triaged.
119
+ - [ ] Dependencies pinned / lockfile committed.
120
+ - [ ] Automated alerts (Dependabot / Renovate / equivalent) enabled.
121
+ - **Baseline:** `<record + tracking issue for any automation gap>`
122
+
123
+ ### 10. Config, logging & headers · **Medium**
124
+ - [ ] No default credentials anywhere (`user:user`, `admin:admin`, `changeme`, …).
125
+ - [ ] Secrets / tokens / PII never written to logs / error tracker / audit tables (sanitizer-covered).
126
+ - [ ] DB connects as a least-privilege user.
127
+ - **Baseline:** `<record>`
128
+
129
+ ### 11. Repo & CI/CD hygiene · **Medium**
130
+ - [ ] Branch protection on the default branch; force-push disabled (or the local gate that stands in for it).
131
+ - [ ] 2FA on the org; write access + installed Apps/OAuth grants reviewed.
132
+ - [ ] Secret scanning in the commit/push gate.
133
+ - **Baseline:** `<record — name where the gate lives if you have no hosted required check>`
134
+
135
+ ### 12. Container & image security · **High**
136
+ - [ ] **Non-root USER** in every Dockerfile.
137
+ - [ ] **Base image digest-pinned** (`@sha256:…`), not tag-only.
138
+ - [ ] No secrets in `ARG` / `ENV` / `RUN` (use build-time secret mounts or runtime env).
139
+ - [ ] Ignore file excludes `.git/`, `.env*`, keys (verify by listing the image, not trusting the file).
140
+ - [ ] Internal services **not published** to the host; only the proxy faces `0.0.0.0`; no docker socket mount.
141
+ - **Baseline:** `<record — mark N/A if you do not ship containers>`
142
+
143
+ ---
144
+
145
+ ## Part 3 — Tooling
146
+
147
+ Wire the fast scanners into your commit/push gate so the audit is continuous, not a
148
+ one-off. Swap in the tools your stack needs.
149
+
150
+ | Tool | Purpose | Quick start |
151
+ |------|---------|-------------|
152
+ | **gitleaks** | Secrets in tree **and git history** | `gitleaks detect --source . --redact` |
153
+ | **detect-secrets** | Pre-commit secret baseline | `detect-secrets scan > .secrets.baseline` |
154
+ | **semgrep** | Static analysis (injection / authz / XSS) | `semgrep --config auto .` |
155
+ | **trivy** | Vulns + secrets + IaC misconfig (also images) | `trivy fs --scanners vuln,secret,misconfig .` |
156
+ | **`<dep auditor>`** | Dependency CVEs | `<npm/pnpm/pip/... audit>` |
157
+
158
+ ---
159
+
160
+ ## Part 4 — Findings report template
161
+
162
+ Copy per run → `<docs/audits/YYYY-MM-security-audit/findings.md>` (date the folder per
163
+ run). **Severity:** Critical = fix today · High = this week · Medium = schedule ·
164
+ Low/Info = hygiene.
165
+
166
+ ```markdown
167
+ # Security Audit — <project> — <YYYY-MM-DD> — auditor: <model A> + <model B>
168
+
169
+ Scope: <repo @ commit/branch> Public surface: <…> Crown jewels: <…>
170
+
171
+ ## Summary
172
+ Critical: N High: N Medium: N Low: N
173
+
174
+ ## Findings
175
+ | # | Severity | Category | Location (file:line) | Issue | Fix | Verified-by | Status |
176
+ |---|----------|----------|----------------------|-------|-----|-------------|--------|
177
+ | 1 | High | Container | <Dockerfile> | runs as root | add USER | both | Open |
178
+
179
+ ## Needs human verification
180
+ - <agent-flagged item, why unconfirmed, which model disagreed>
181
+
182
+ ## Top 5 actions (by priority)
183
+ 1. …
184
+ ```
185
+
186
+ ---
187
+
188
+ ## Part 5 — Triage & the two-model run
189
+
190
+ Fix by **exploitability × impact**, not top-to-bottom:
191
+
192
+ 1. **Secrets exposed** (§1, §8) → rotate immediately, then remove from code/history. Beats everything.
193
+ 2. **Auth/authz holes** (§2) → IDOR / missing tenant scope leaks other tenants' data with no tooling.
194
+ 3. **Injection** (§3) → SQL/command injection ≈ full data/host compromise.
195
+ 4. **Exposed surface & XSS** (§5, §4) → debug routes, `*` CORS, reflected XSS.
196
+ 5. **Everything else** (§6–§12) → validation, headers, deps, container, hygiene — defense-in-depth.
197
+
198
+ **One confirmed Critical outweighs ten Lows.** And remember: this is the *application*
199
+ layer — infrastructure is checked separately.
200
+
201
+ **The two-model run** is the `security-audit` skill's job: model A and model B work
202
+ this runbook independently and read-only, their findings are consolidated (disagreements
203
+ → "needs human verification", never dropped), then the *remediation plan* is hardened
204
+ with a plan-review grill before any fix lands. This runbook is the *what*; the skill
205
+ drives the *how*.
@@ -0,0 +1,13 @@
1
+ <!-- setup-workflow: state=filled -->
2
+ # Project layer — orchestrate-wave
3
+
4
+ These stable sections are intentionally empty until the kit has proven its own landing recipe. The skill uses its generic fallback meanwhile.
5
+
6
+ ## §Setup
7
+ ## §Builder Commands
8
+ ## §Builder Hard Rules
9
+ ## §Integration Suites
10
+ ## §Verify Recipe
11
+ ## §Headless Login
12
+ ## §Landing
13
+
@@ -0,0 +1,18 @@
1
+ <!-- setup-workflow: state=filled -->
2
+ # Project layer — spec-self-critique
3
+
4
+ The generic checklist owns the checks; `/retro` appends project-specific incidents below these stable anchors.
5
+
6
+ ## Point 1
7
+ ## Point 2
8
+ ## Point 3
9
+ ## Point 4
10
+ ## Point 5
11
+ ## Point 6
12
+ ## Point 7
13
+ ## Point 8
14
+ ## Point 9
15
+ ## Point 10
16
+ ## Point 11
17
+ ## Point 12
18
+
@@ -0,0 +1,10 @@
1
+ <!-- setup-workflow: state=filled -->
2
+ # Triage labels
3
+
4
+ | Canonical role | Label in this repository | Meaning |
5
+ |---|---|---|
6
+ | `needs-info` | `needs-info` | Waiting for information from the reporter |
7
+ | `ready-for-agent` | `ready-for-agent` | Fully specified and safe for an AFK agent |
8
+
9
+ The board Status field owns `Idea`, `Triaged`, `Spec`, `In Progress`, `Review`, and `Done`. Close rejected work instead of adding a separate `wontfix` workflow label.
10
+
@@ -0,0 +1,88 @@
1
+ # Wave Anchor Template
2
+
3
+ The body of a wave-anchor issue. Model: this is the tracker that worked — **slimmed in**: the body is read by the agent in every slice session (`--json body` loads ALL of it, a `<details>` block collapses only in the browser), so it carries **navigation + decisions only**. The full PRD is posted as **issue comment #1** on the anchor (one click away for a human, loaded only on demand by an agent); the paste-ready handoff lives **in each slice leaf** (self-contained — no anchor↔leaf circular reference).
4
+ **Maturity stages** — replace `<…>` placeholders, delete lines that don't apply:
5
+
6
+ - **Stage 1 (candidate stub, bottom-up)** — filled by `board-to-waves`: header through the To-Do checklist. **No cluster/Wave** yet, Slice table stays empty (`⬜ via to-issues`).
7
+ - **Stage 1p (program pre-state, top-down)** — filled by `to-waves` from a Program PRD: a named stub `Welle <N> — <Topic>` **from creation**, `wave-stub` label, **Wave + Phase stamped immediately**, native parent = the Program PRD, pre-generated Slice leaves as native children. Difference from Stage 1: named + stamped + PRD-parent instead of no cluster/Wave. Details below (§ Stage 1p).
8
+ - **Stage 2 (matured + promoted)** — filled by `to-prd` (Decisions body) + `to-issues` (Slice table, links sub-issues, promotion sets `type:cluster` + Wave; the full PRD moves to **issue comment #1**, the To-Do checklist **collapses to its one-line summary**, per-slice handoffs land in the **leaf bodies**). A Stage-1p stub matures the same way here (the first program-stub promotion flips the PRD to the in-progress status, `roles.inProgress`).
9
+
10
+ The **candidate stub** (Stage 1) has no cluster/Wave. On **`to-issues` promotion** (Stage 2) the anchor gets `type:cluster` + **Wave field = `<N>`** (monotone number, no `wave:*` label); `type:cluster` **replaces** the stub's previous `type:*` (e.g. `type:followup`) — exactly one `type:*` per issue, `board-sync.py promote` strips the old one; the **issue title becomes `Welle <N> — <Topic>`** (this is `board-sync.py promote`'s default behavior — `wave_title()` idempotently replaces any existing `Welle X —` prefix and strips a leading conventional-commit prefix; opt out with `--no-rename` — **the `promote` code is authoritative**), and the `Welle <N> — <Topic>` string also appears in the **body's top line**. Body **always** via `--body-file` (`gotchas_gh_body_file`). Numbering → [the `board-to-waves` SKILL.md](.claude/skills/board-to-waves/SKILL.md) "Wave numbering".
11
+
12
+ ---
13
+ --- TEMPLATE STARTS HERE (everything above is guidance, don't copy it into the issue) ---
14
+
15
+ <!-- wave-stub-source: <topic-slug> --> <!-- Stage 1: stable idempotency marker, board-to-waves search-before-create; kebab-case slug of the gate outcome, never changed -->
16
+ <!-- prd-source-id: <#> -->
17
+ **plan_revision:** r<N> <!-- Stage 2: stamped at promotion (before the first heading — the execute-ready checker requires it there, otherwise the post-promote audit denies the anchor) -->
18
+
19
+ **Welle <N> — <Short description>.** Common thread: <Gate — the shared outcome that makes these issues a wave>.
20
+
21
+ > 📍 **Execution tracker (as of <Date>).** This issue is the single source of truth for "where do we stand, what's next". Every sub-session anchors here.
22
+
23
+ ## Origin
24
+
25
+ - **Source:** <board-to-waves | external-prd | raw-issue | plan | grill> *(provenance-neutral — the shape is the same regardless of origin; fill the following lines where they apply, delete where they don't)*
26
+ - **Member issues:** #<a> #<b> #<c> … *(listed; linked via `to-issues` promotion, To-Do below)*
27
+ - **Why together (firing criteria):** Gate=<Outcome> · <B1 code proximity / B2 type homogeneity / B3 dependency / B4 verify surface, where applicable>
28
+ - **Size + risk:** ~<N> slices · Backend: <yes/no> · Model mix: <Model [Effort], e.g. Sonnet [medium] / Opus [high] / gpt-5.5 [medium]> · Risk: <low/medium/high — reason, e.g. race/cache/forecast/migration>
29
+ - **`grill-needed`:** <no> | <yes — this session> | <yes — own session (too big/fuzzy)>
30
+
31
+ ### To-Do (maturation: grill → to-prd → to-issues) — *(Stage 1/1p only; at promotion this whole checklist collapses to ONE line: `Maturation: grill <✓/–> · to-prd ✓ · to-issues ✓ (<Date>) — Wave gate + tracking open`)*
32
+ - [ ] *(only if grill-needed=yes, own session)* dedicated `grill-with-docs` session — domain discovery
33
+ - [ ] **`to-prd`** → write decisions/PRD body into this stub (Mode B); `spec-self-critique` runs automatically
34
+ - [ ] **`to-issues`** → cut slices, **one sub-issue per slice** (reuse member issue / create new), fill the slice table + a **self-contained `## Handoff Start Command` in each slice leaf** (§5d); at ≥2 slices **promote** (sets `type:cluster` + Wave, moves the PRD to comment #1) + link **all** slice sub-issues natively (complete — slice set == sub-issue set)
35
+ - [ ] **Wave gate** → before closing: reconcile any open `annahme-drift` propagation toward future waves/stubs (and, if part of a program, the Program PRD) — no unnoticed drift across the wave boundary (drift checkpoint, `wrapup` Step 5e.2)
36
+ - [ ] **Track** → rollup is the status; anchor closes at 100%
37
+
38
+ ## Decisions — *(`to-prd` fills; for source `grill`: "Grill <Date>, locked")*
39
+
40
+ | Item | Decision |
41
+ |---|---|
42
+ | <Issue/Topic> | <What exactly, in outcome language> |
43
+
44
+ **Artifacts:** <CONTEXT.md terms / docs/adr/<nnnn>-…md, if produced during the grill>
45
+
46
+ ## Slices (vertical, 1 PR/session each) — *(`to-issues` fills)*
47
+
48
+ Order (WSJF-lite): visible + low-risk first → logic/backend → cleanup. Dependencies force ordering.
49
+
50
+ <!-- slice-table:start -->
51
+ | # | Status | Slice | Sub-Issue | Gate | closes/refs |
52
+ |---|---|---|---|---|---|
53
+ | 1 | ⬜ | <Slice title> | #<sub> | <—/🧭/🔬/📐/📝> | <closes #x / refs #y> |
54
+ <!-- slice-table:end -->
55
+
56
+ Status legend: ⬜ open · 🔄 in progress · ✅ merged #<PR>. **Every slice = one sub-issue** (`#<sub>`). **The volatile Status column is generated by `board-sync.py anchor-sync <anchor#>` from the board** (between the `<!-- slice-table:start/end -->` markers; `wrapup` Step 5e.1 calls it on merge) — monotone (never flips a `✅`/`🔄` back), drift-free idempotent; **stable plan columns (Slice/Gate/refs) stay hand-maintained** and survive verbatim. It appends missing sub-issue rows (gen-b split). **Don't delete the markers** — without them `anchor-sync` can't locate the table (the first run locates it via the `Status`+`Sub-Issue` header row and sets the markers itself). The native "Sub-issues progress" rollup is the secondary %-view. *(Slimmed in: Branch is derivable from the `feat/<#>-<slug>` convention, the model recommendation lives in the leaf's handoff, Backend? carried no navigation value — legacy anchors that still have those columns keep working, `anchor-sync` matches columns by header name and refreshes Branch/Blocked-by only where the column exists.)*
57
+
58
+ **Gate legend (retro):** `—` AFK build (`/tdd`) · 🧭 design grill (`grill-with-docs-codex`, ADR) · 🔬 verify spike (read-only fact question) · 📐 trade-off/research (read-only, below grill threshold) · 📝 review note (not a build slice). A gate slice (🧭/🔬/📐) sits **before** its dependent build slice (gate-before-build) and blocks it.
59
+
60
+ **Closing conditions:** <Issue #x → after which slices> · <…> · Anchor #<self> → all slices merged + native sub-issues 100%.
61
+
62
+ **Mid-wave discovered follow-ups** → schedule as a **slice row in this table** (an intermediate slice at the right sequence position, or at the end) + its own sub-issue (natively linked, counts in the rollup). **No** separate follow-ups table — that would be invisible in the slice view.
63
+
64
+ **Parallel note:** true parallelism only with a worktree per strand. Slices that share files → serial.
65
+
66
+ **Handoff + PRD live elsewhere:** the paste-ready start command sits **self-contained in each slice leaf** (`to-issues` §5d — scope + live-verify inline, no "see anchor" indirection), and the full grilled PRD is **issue comment #1** on this anchor (posted at promotion; rationale archive, not per-session reading). The anchor body itself ends here.
67
+
68
+ ## Stage 1p — Program pre-state (top-down, `to-waves`)
69
+
70
+ `to-waves` creates a **Program PRD**'s wave stubs in exactly this shape — the defined pre-state above the feature route (instead of no cluster/Wave like Stage 1):
71
+
72
+ - **Title** `Welle <N> — <Topic>` **from creation** (not only at promotion).
73
+ - **Label** `wave-stub`; **Wave + Phase** stamped immediately (batched via `stamp-batch`).
74
+ - **Native parent = the Program PRD** (3 levels: PRD → Stub → Slice leaves). The pre-generated Slice leaves hang as native children under the stub — for `to-prd` Mode B the **expected skeleton**, no child drift.
75
+ - **Idempotency marker in the body** (top line, grep-able, never changed):
76
+
77
+ ```
78
+ <!-- program-stub-source: <prd-source-id>/w<N> --> <!-- stable identity: to-waves search-before-create + delta re-run/crash recovery -->
79
+ <!-- program-revision: rN --> <!-- checked against the PRD's plan_revision; a stale stub blocks loudly; the delta re-run refreshes it -->
80
+ ```
81
+
82
+ - **Handoff worktree line stays consumer-neutral** — the program pre-state is part of the published `to-waves` route, so **no** project-specific script path, but instead:
83
+
84
+ ```
85
+ Worktree: your project's worktree helper, or `git worktree add`
86
+ ```
87
+
88
+ Maturation: the stub matures at **wave promotion** like Stage 2 (`to-prd` Mode B into the stub + `to-issues`); unbuilt leaves/stubs of an abandoned program close in the order leaves → stubs → PRD (abandonment convention in the PROGRAM-PRD-FORMAT).
@@ -0,0 +1,23 @@
1
+ <!-- setup-workflow: state=filled -->
2
+ # Convention — Spec completeness before implementation
3
+
4
+ ## Self-Critique-Check
5
+
6
+ **Trigger:** A spec states a concrete count, quantity, or `N of M` claim.
7
+
8
+ **Check:** Is each number freshly derived from the source rather than estimated or recalled?
9
+
10
+ **Korrektur:** Recount from code and replace the claim, or mark it explicitly as an implementation-time assumption.
11
+
12
+ ## Vertical-slice completeness
13
+
14
+ Every user-facing slice is an outcome tracer, carries at least one acceptance criterion, names its estimated blast radius, and identifies seam ownership. Every prep slice names the omitted half and the later slice that closes it. `to-issues` must re-derive this readiness rather than trusting a pre-cut table.
15
+
16
+ ## Self-Critique-Check
17
+
18
+ **Trigger:** A spec contains a wave/slice table or decomposes into multiple issues.
19
+
20
+ **Check:** Are rows outcomes rather than layer names, and do enablers name the outcome wave that closes them?
21
+
22
+ **Korrektur:** Reword or split layer-only rows and make every deferred half explicit.
23
+
@@ -0,0 +1,56 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>agent-workflow-kit</title>
7
+ <link rel="canonical" href="methodology.html">
8
+ <meta http-equiv="refresh" content="0; url=methodology.html">
9
+ <style>
10
+ :root {
11
+ --page-bg: #F5F1E8;
12
+ --surface: #FAFAF7;
13
+ --ink: #1F2532;
14
+ --muted: #5B6579;
15
+ --accent: #B5533A;
16
+ }
17
+ html, body { height: 100%; margin: 0; }
18
+ body {
19
+ background: var(--page-bg);
20
+ color: var(--ink);
21
+ font: 16px/1.6 system-ui, -apple-system, "Segoe UI", sans-serif;
22
+ display: grid;
23
+ place-items: center;
24
+ text-align: center;
25
+ padding: 2rem;
26
+ }
27
+ .card {
28
+ background: var(--surface);
29
+ border: 1px solid rgba(31, 37, 50, 0.08);
30
+ border-radius: 14px;
31
+ padding: 2.5rem 2.75rem;
32
+ max-width: 30rem;
33
+ box-shadow: 0 1px 3px rgba(31, 37, 50, 0.06);
34
+ }
35
+ h1 { font-size: 1.4rem; margin: 0 0 0.5rem; }
36
+ p { color: var(--muted); margin: 0 0 1.5rem; }
37
+ a.go {
38
+ display: inline-block;
39
+ background: var(--accent);
40
+ color: #fff;
41
+ text-decoration: none;
42
+ font-weight: 600;
43
+ padding: 0.7rem 1.4rem;
44
+ border-radius: 9px;
45
+ }
46
+ a.go:hover { filter: brightness(1.05); }
47
+ </style>
48
+ </head>
49
+ <body>
50
+ <main class="card">
51
+ <h1>agent-workflow-kit</h1>
52
+ <p>Redirecting to the methodology&hellip;</p>
53
+ <a class="go" href="methodology.html">Read the methodology &rarr;</a>
54
+ </main>
55
+ </body>
56
+ </html>