@hegemonart/get-design-done 1.57.1 → 1.57.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/.claude-plugin/marketplace.json +26 -41
  2. package/.claude-plugin/plugin.json +23 -48
  3. package/CHANGELOG.md +139 -0
  4. package/README.md +166 -511
  5. package/SKILL.md +4 -6
  6. package/agents/README.md +33 -36
  7. package/agents/a11y-mapper.md +3 -3
  8. package/agents/component-benchmark-harvester.md +6 -6
  9. package/agents/component-benchmark-synthesizer.md +3 -3
  10. package/agents/compose-executor.md +3 -3
  11. package/agents/cost-forecaster.md +2 -2
  12. package/agents/design-auditor.md +7 -7
  13. package/agents/design-authority-watcher.md +15 -15
  14. package/agents/design-context-builder.md +4 -4
  15. package/agents/design-context-checker-gate.md +1 -1
  16. package/agents/design-discussant.md +2 -2
  17. package/agents/design-doc-writer.md +1 -1
  18. package/agents/design-executor.md +2 -2
  19. package/agents/design-figma-writer.md +2 -2
  20. package/agents/design-fixer.md +7 -7
  21. package/agents/design-integration-checker-gate.md +1 -1
  22. package/agents/design-integration-checker.md +1 -1
  23. package/agents/design-paper-writer.md +3 -3
  24. package/agents/design-pencil-writer.md +1 -1
  25. package/agents/design-planner.md +21 -0
  26. package/agents/design-reflector.md +39 -39
  27. package/agents/design-research-synthesizer.md +1 -0
  28. package/agents/design-start-writer.md +1 -1
  29. package/agents/design-update-checker.md +5 -5
  30. package/agents/design-verifier-gate.md +1 -1
  31. package/agents/design-verifier.md +52 -48
  32. package/agents/ds-generator.md +2 -2
  33. package/agents/ds-migration-planner.md +4 -4
  34. package/agents/email-executor.md +9 -9
  35. package/agents/experiment-result-ingester.md +3 -3
  36. package/agents/flutter-executor.md +5 -5
  37. package/agents/gdd-graph-refresh.md +3 -3
  38. package/agents/gdd-intel-updater.md +2 -2
  39. package/agents/motion-mapper.md +2 -2
  40. package/agents/motion-verifier.md +4 -4
  41. package/agents/pdf-executor.md +8 -8
  42. package/agents/perf-analyzer.md +17 -17
  43. package/agents/pr-commenter.md +9 -9
  44. package/agents/prototype-gate.md +2 -2
  45. package/agents/quality-gate-runner.md +1 -1
  46. package/agents/rollout-coordinator.md +3 -3
  47. package/agents/swift-executor.md +4 -4
  48. package/agents/ticket-sync-agent.md +6 -6
  49. package/agents/user-research-synthesizer.md +2 -2
  50. package/connections/connections.md +44 -45
  51. package/connections/cursor.md +72 -0
  52. package/connections/preview.md +3 -3
  53. package/hooks/first-run-nudge.cjs +171 -0
  54. package/hooks/gdd-intel-trigger.js +243 -0
  55. package/hooks/gdd-mcp-circuit-breaker.js +62 -7
  56. package/hooks/gdd-precompact-snapshot.js +50 -29
  57. package/hooks/gdd-protected-paths.js +150 -18
  58. package/hooks/gdd-risk-gate.js +93 -1
  59. package/hooks/gdd-sessionstart-recap.js +59 -24
  60. package/hooks/hooks.json +13 -4
  61. package/hooks/inject-using-gdd.cjs +188 -0
  62. package/hooks/update-check.cjs +511 -0
  63. package/package.json +9 -3
  64. package/reference/STATE-TEMPLATE.md +10 -13
  65. package/reference/audit-scoring.md +1 -1
  66. package/reference/cache-tier-doctrine.md +46 -0
  67. package/reference/config-schema.md +9 -9
  68. package/reference/i18n.md +1 -1
  69. package/reference/intel-schema.md +37 -2
  70. package/reference/meta-rules.md +4 -4
  71. package/reference/model-tiers.md +2 -2
  72. package/reference/registry.json +101 -94
  73. package/reference/runtime-models.md +11 -1
  74. package/reference/shared-preamble.md +13 -14
  75. package/reference/skill-graph.md +22 -3
  76. package/scripts/bootstrap.cjs +373 -0
  77. package/scripts/injection-patterns.cjs +58 -0
  78. package/scripts/lib/apply-reflections/incubator-proposals.cjs +57 -26
  79. package/scripts/lib/install/converters/codex-plugin.cjs +5 -2
  80. package/scripts/lib/install/converters/cursor.cjs +20 -0
  81. package/scripts/lib/issue-reporter/report-flow.cjs +1 -1
  82. package/scripts/lib/manifest/skills.json +75 -28
  83. package/scripts/lib/state/query-surface.cjs +67 -9
  84. package/scripts/lib/state/state-store.cjs +68 -26
  85. package/scripts/lib/worktree-resolve.cjs +4 -16
  86. package/sdk/cli/commands/stage.ts +17 -0
  87. package/sdk/cli/index.js +14 -0
  88. package/skills/README.md +46 -0
  89. package/skills/bootstrap-ds/SKILL.md +1 -1
  90. package/skills/cache-manager/SKILL.md +3 -3
  91. package/skills/cache-manager/cache-policy.md +1 -1
  92. package/skills/compare/SKILL.md +1 -1
  93. package/skills/design/SKILL.md +19 -0
  94. package/skills/explore/SKILL.md +11 -0
  95. package/skills/figma-write/SKILL.md +13 -2
  96. package/skills/new-cycle/SKILL.md +1 -1
  97. package/skills/paper-write/SKILL.md +54 -0
  98. package/skills/peer-cli-customize/SKILL.md +0 -1
  99. package/skills/peers/SKILL.md +1 -1
  100. package/skills/pencil-write/SKILL.md +54 -0
  101. package/skills/reflect/procedures/capability-gap-scan.md +0 -1
  102. package/skills/report-issue/SKILL.md +2 -2
  103. package/skills/report-issue/report-issue-procedure.md +0 -1
  104. package/skills/router/SKILL.md +2 -2
  105. package/skills/synthesize/SKILL.md +1 -1
  106. package/skills/turn-closeout/SKILL.md +1 -1
  107. package/skills/verify/verify-procedure.md +10 -11
  108. package/skills/warm-cache/SKILL.md +1 -1
  109. package/dist/claude-code/.claude/skills/add-backlog/SKILL.md +0 -48
  110. package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +0 -95
  111. package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +0 -109
  112. package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +0 -170
  113. package/dist/claude-code/.claude/skills/audit/SKILL.md +0 -79
  114. package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +0 -94
  115. package/dist/claude-code/.claude/skills/benchmark/SKILL.md +0 -65
  116. package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +0 -43
  117. package/dist/claude-code/.claude/skills/brief/SKILL.md +0 -145
  118. package/dist/claude-code/.claude/skills/budget/SKILL.md +0 -45
  119. package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +0 -66
  120. package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +0 -126
  121. package/dist/claude-code/.claude/skills/check-update/SKILL.md +0 -98
  122. package/dist/claude-code/.claude/skills/compare/SKILL.md +0 -82
  123. package/dist/claude-code/.claude/skills/compare/compare-rubric.md +0 -171
  124. package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +0 -81
  125. package/dist/claude-code/.claude/skills/connections/SKILL.md +0 -71
  126. package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +0 -608
  127. package/dist/claude-code/.claude/skills/context/SKILL.md +0 -137
  128. package/dist/claude-code/.claude/skills/continue/SKILL.md +0 -24
  129. package/dist/claude-code/.claude/skills/darkmode/SKILL.md +0 -76
  130. package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +0 -258
  131. package/dist/claude-code/.claude/skills/debug/SKILL.md +0 -41
  132. package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +0 -119
  133. package/dist/claude-code/.claude/skills/design/SKILL.md +0 -99
  134. package/dist/claude-code/.claude/skills/design/design-procedure.md +0 -304
  135. package/dist/claude-code/.claude/skills/discover/SKILL.md +0 -78
  136. package/dist/claude-code/.claude/skills/discover/discover-procedure.md +0 -222
  137. package/dist/claude-code/.claude/skills/discuss/SKILL.md +0 -96
  138. package/dist/claude-code/.claude/skills/do/SKILL.md +0 -45
  139. package/dist/claude-code/.claude/skills/explore/SKILL.md +0 -107
  140. package/dist/claude-code/.claude/skills/explore/explore-procedure.md +0 -267
  141. package/dist/claude-code/.claude/skills/export/SKILL.md +0 -30
  142. package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +0 -114
  143. package/dist/claude-code/.claude/skills/fast/SKILL.md +0 -91
  144. package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +0 -64
  145. package/dist/claude-code/.claude/skills/figma-write/SKILL.md +0 -39
  146. package/dist/claude-code/.claude/skills/graphify/SKILL.md +0 -49
  147. package/dist/claude-code/.claude/skills/health/SKILL.md +0 -99
  148. package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +0 -44
  149. package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +0 -69
  150. package/dist/claude-code/.claude/skills/help/SKILL.md +0 -87
  151. package/dist/claude-code/.claude/skills/instinct/SKILL.md +0 -111
  152. package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +0 -61
  153. package/dist/claude-code/.claude/skills/list-pins/SKILL.md +0 -27
  154. package/dist/claude-code/.claude/skills/live/SKILL.md +0 -98
  155. package/dist/claude-code/.claude/skills/locale/SKILL.md +0 -51
  156. package/dist/claude-code/.claude/skills/map/SKILL.md +0 -89
  157. package/dist/claude-code/.claude/skills/migrate/SKILL.md +0 -70
  158. package/dist/claude-code/.claude/skills/migrate-context/SKILL.md +0 -123
  159. package/dist/claude-code/.claude/skills/new-addendum/SKILL.md +0 -81
  160. package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +0 -37
  161. package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +0 -87
  162. package/dist/claude-code/.claude/skills/new-project/SKILL.md +0 -53
  163. package/dist/claude-code/.claude/skills/new-skill/SKILL.md +0 -90
  164. package/dist/claude-code/.claude/skills/next/SKILL.md +0 -68
  165. package/dist/claude-code/.claude/skills/note/SKILL.md +0 -48
  166. package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +0 -86
  167. package/dist/claude-code/.claude/skills/optimize/SKILL.md +0 -97
  168. package/dist/claude-code/.claude/skills/override/SKILL.md +0 -86
  169. package/dist/claude-code/.claude/skills/pause/SKILL.md +0 -77
  170. package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +0 -88
  171. package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +0 -161
  172. package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +0 -90
  173. package/dist/claude-code/.claude/skills/peers/SKILL.md +0 -96
  174. package/dist/claude-code/.claude/skills/pin/SKILL.md +0 -37
  175. package/dist/claude-code/.claude/skills/plan/SKILL.md +0 -105
  176. package/dist/claude-code/.claude/skills/plan/plan-procedure.md +0 -278
  177. package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +0 -48
  178. package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +0 -32
  179. package/dist/claude-code/.claude/skills/progress/SKILL.md +0 -107
  180. package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +0 -90
  181. package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +0 -101
  182. package/dist/claude-code/.claude/skills/quick/SKILL.md +0 -44
  183. package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +0 -32
  184. package/dist/claude-code/.claude/skills/recall/SKILL.md +0 -75
  185. package/dist/claude-code/.claude/skills/reflect/SKILL.md +0 -85
  186. package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +0 -120
  187. package/dist/claude-code/.claude/skills/report-issue/SKILL.md +0 -53
  188. package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +0 -120
  189. package/dist/claude-code/.claude/skills/resume/SKILL.md +0 -93
  190. package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +0 -46
  191. package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +0 -42
  192. package/dist/claude-code/.claude/skills/roi/SKILL.md +0 -54
  193. package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +0 -35
  194. package/dist/claude-code/.claude/skills/router/SKILL.md +0 -89
  195. package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +0 -65
  196. package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +0 -78
  197. package/dist/claude-code/.claude/skills/router/router-rules.md +0 -84
  198. package/dist/claude-code/.claude/skills/scan/SKILL.md +0 -92
  199. package/dist/claude-code/.claude/skills/scan/scan-procedure.md +0 -732
  200. package/dist/claude-code/.claude/skills/settings/SKILL.md +0 -87
  201. package/dist/claude-code/.claude/skills/ship/SKILL.md +0 -48
  202. package/dist/claude-code/.claude/skills/sketch/SKILL.md +0 -78
  203. package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +0 -92
  204. package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +0 -79
  205. package/dist/claude-code/.claude/skills/spike/SKILL.md +0 -67
  206. package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +0 -86
  207. package/dist/claude-code/.claude/skills/start/SKILL.md +0 -67
  208. package/dist/claude-code/.claude/skills/start/start-procedure.md +0 -115
  209. package/dist/claude-code/.claude/skills/state/SKILL.md +0 -106
  210. package/dist/claude-code/.claude/skills/stats/SKILL.md +0 -51
  211. package/dist/claude-code/.claude/skills/style/SKILL.md +0 -71
  212. package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +0 -150
  213. package/dist/claude-code/.claude/skills/synthesize/SKILL.md +0 -94
  214. package/dist/claude-code/.claude/skills/timeline/SKILL.md +0 -66
  215. package/dist/claude-code/.claude/skills/todo/SKILL.md +0 -64
  216. package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +0 -95
  217. package/dist/claude-code/.claude/skills/undo/SKILL.md +0 -31
  218. package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +0 -54
  219. package/dist/claude-code/.claude/skills/unpin/SKILL.md +0 -31
  220. package/dist/claude-code/.claude/skills/update/SKILL.md +0 -56
  221. package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +0 -78
  222. package/dist/claude-code/.claude/skills/verify/SKILL.md +0 -113
  223. package/dist/claude-code/.claude/skills/verify/verify-procedure.md +0 -512
  224. package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +0 -81
  225. package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +0 -82
  226. package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +0 -26
  227. package/hooks/first-run-nudge.sh +0 -82
  228. package/hooks/inject-using-gdd.sh +0 -72
  229. package/hooks/run-hook.cmd +0 -35
  230. package/hooks/update-check.sh +0 -251
  231. package/scripts/lib/audit-aggregator/index.cjs +0 -219
  232. package/scripts/lib/hedge-ensemble.cjs +0 -217
  233. package/skills/discover/SKILL.md +0 -78
  234. package/skills/discover/discover-procedure.md +0 -222
  235. package/skills/new-cycle/milestone-completeness-rubric.md +0 -87
  236. package/skills/scan/SKILL.md +0 -92
  237. package/skills/scan/scan-procedure.md +0 -732
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: gdd-router
3
- description: "Routes a /gdd command to fast|quick|full path + S|M|L|XL complexity_class and returns {path, complexity_class, model_tier_overrides, resolved_models, estimated_cost_usd, cache_hits}. Deterministic - no model call. Invoked once at command entry before any Agent spawn. Read by hooks/budget-enforcer.js."
3
+ description: "Routes a /gdd command to fast|quick|full path + S|M|L|XL complexity_class and returns {path, complexity_class, model_tier_overrides, resolved_models, estimated_cost_usd, cache_hits}. Deterministic - no model call. Invoked once at command entry before any Agent spawn. Read by hooks/budget-enforcer.ts."
4
4
  argument-hint: "<intent-string> [<target-artifacts-csv>]"
5
5
  tools: Read, Bash, Grep
6
6
  ---
@@ -9,7 +9,7 @@ tools: Read, Bash, Grep
9
9
 
10
10
  ## Role
11
11
 
12
- You are a deterministic routing skill. You do not spawn agents. You read `.design/budget.json`, `reference/model-prices.md`, `.design/cache-manifest.json` (if present), and the agent frontmatter list, then emit a single JSON object describing the planned spawn graph. The budget-enforcer hook (`hooks/budget-enforcer.js`) consumes your output on every `Agent` tool call.
12
+ You are a deterministic routing skill. You do not spawn agents. You read `.design/budget.json`, `reference/model-prices.md`, `.design/cache-manifest.json` (if present), and the agent frontmatter list, then emit a single JSON object describing the planned spawn graph. The budget-enforcer hook (`hooks/budget-enforcer.ts`) consumes your output on every `Agent` tool call.
13
13
 
14
14
  ## Invocation Contract
15
15
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: synthesize
3
- description: "Streaming synthesizer - collapses N parallel-agent markdown outputs into one compact merged summary via a single Haiku 4.5 call. Invoked inline by orchestrators (skills/map/, skills/discover/, skills/plan/) after parallel spawns return. Not user-invocable."
3
+ description: "Streaming synthesizer - collapses N parallel-agent markdown outputs into one compact merged summary via a single Haiku 4.5 call. Invoked inline by orchestrators (skills/map/, skills/explore/, skills/plan/) after parallel spawns return. Not user-invocable."
4
4
  tools: Read, Task
5
5
  user-invocable: false
6
6
  disable-model-invocation: true
@@ -9,7 +9,7 @@ tools: Read, Bash
9
9
 
10
10
  ## Role
11
11
 
12
- You are a deterministic **closeout** skill. You close the per-turn telemetry gap on runtimes that don't expose a Stop event (codex, gemini, and 11 others). You are a code-level mirror of `hooks/gdd-turn-closeout.js` (D-10): same conditions, same idempotence, same emitted event shape. The only difference: the JS hook emits the nudge as `additionalContext` via the harness; this skill prints the nudge directly to the user. See `./../new-cycle/milestone-completeness-rubric.md` §"Task level" for the broader closeout discipline (what "turn complete" means within a stage).
12
+ You are a deterministic **closeout** skill. You close the per-turn telemetry gap on runtimes that don't expose a Stop event (codex, gemini, and 11 others). You are a code-level mirror of `hooks/gdd-turn-closeout.js` (D-10): same conditions, same idempotence, same emitted event shape. The only difference: the JS hook emits the nudge as `additionalContext` via the harness; this skill prints the nudge directly to the user. A turn is "complete" when the verify command exits 0, the `<done>` criterion is observable, and the diff stays within the declared scope - any deviation is logged for the run summary.
13
13
 
14
14
  **When to invoke:** orchestrator skills (`/gdd:next`, `/gdd:design`, `/gdd:verify`) tail-call this skill as their final step before returning. Adoption is incremental - each orchestrator can wire the tail-call independently; the skill exists as a stable, callable surface today.
15
15
 
@@ -2,12 +2,11 @@
2
2
  name: verify-procedure
3
3
  type: meta-rules
4
4
  version: 1.0.0
5
- phase: 28.5
6
5
  tags: [verify, procedure, extracted, pipeline-stage, gap-loop, must-have, quality-gate]
7
6
  last_updated: 2026-05-18
8
7
  ---
9
8
 
10
- Source: extracted from `skills/verify/SKILL.md` (Phase 28.5 rework - D-10 extract-then-link).
9
+ Source: extracted from `skills/verify/SKILL.md` to keep the SKILL focused on the essential workflow.
11
10
  The skill's essential workflow stays in `../skills/verify/SKILL.md`; this file holds the
12
11
  detail the agent reaches for when executing a specific step (state integration, quality-gate
13
12
  decision tree, agent spawn protocols, gap-response loop, must-have flipping).
@@ -28,9 +27,9 @@ methodology, agent prompts, and gap-loop semantics.
28
27
  1. `mcp__gdd_state__transition_stage` with `to: "verify"`.
29
28
  2. `mcp__gdd_state__get` → snapshot `state`. Read `state.must_haves` - this is the verification checklist; each M-XX starts at `status: pending` and will be flipped to `pass` or `fail` as verification concludes.
30
29
 
31
- #### Step 2.5 - Quality-gate gate (D-08, D-09)
30
+ #### Step 2.5 - Quality-gate gate
32
31
 
33
- Before resume detection, inspect `state.quality_gate` from the same snapshot. The Stage 4.5 quality-gate skill (see `skills/quality-gate/SKILL.md`) writes a single `<run/>` element capturing the most recent run; this step is the verify-side consumer of that result. Three branches, evaluated in order:
32
+ Before resume detection, inspect `state.quality_gate` from the same snapshot. The quality-gate skill (see `skills/quality-gate/SKILL.md`) writes a single `<run/>` element capturing the most recent run; this step is the verify-side consumer of that result. Three branches, evaluated in order:
34
33
 
35
34
  - **`state.quality_gate?.run?.status === "fail"`** → Refuse to advance. The fix loop in `quality-gate/SKILL.md` Step 4 reached `max_iters` without converging, and the verify stage MUST NOT paper over it. Print a blocker reason that includes the iteration count and the `commands_run` field from the run, then call:
36
35
 
@@ -43,9 +42,9 @@ Before resume detection, inspect `state.quality_gate` from the same snapshot. Th
43
42
 
44
43
  Exit immediately with the failure surface visible to the user. Do NOT call `mcp__gdd_state__update_progress` to open the verify stage; the gate refused entry, so the stage was never opened.
45
44
 
46
- - **`state.quality_gate?.run?.status === "timeout"` OR `=== "skipped"`** → Print a one-line warning naming the status and the `commands_run` value, then continue normally. Per D-07 these are signals, not walls: a slow test suite must not hostage the pipeline, and a project with no detectable quality commands must not block verify entry. The warning surfaces the degraded state without halting.
45
+ - **`state.quality_gate?.run?.status === "timeout"` OR `=== "skipped"`** → Print a one-line warning naming the status and the `commands_run` value, then continue normally. These are signals, not walls: a slow test suite must not hostage the pipeline, and a project with no detectable quality commands must not block verify entry. The warning surfaces the degraded state without halting.
47
46
 
48
- - **`state.quality_gate?.run?.status === "pass"` OR `state.quality_gate === null`** → Continue silently. `pass` is the happy path; `null` means the gate has never been run for this cycle (the user skipped Stage 4.5 entirely, which is permitted - verify only *checks* the gate result, never *runs* the gate itself, per the 25-07 out-of-scope clause).
47
+ - **`state.quality_gate?.run?.status === "pass"` OR `state.quality_gate === null`** → Continue silently. `pass` is the happy path; `null` means the gate has never been run for this cycle (the user skipped the quality-gate stage entirely, which is permitted - verify only *checks* the gate result, never *runs* the gate itself).
49
48
 
50
49
  This step is a pure read against the snapshot already loaded in Step 2 - no extra MCP call is required.
51
50
 
@@ -93,7 +92,7 @@ Step P2 — Live tool call:
93
92
  Record the preview probe result via `mcp__gdd_state__probe_connections` (batched with the storybook and chromatic probes below — one call per stage, see "Batched connections write" at the end of this section).
94
93
  ```
95
94
 
96
- When `preview: available`, the design-verifier agent runs Phase 4B - Screenshot Evidence to resolve `? VISUAL` heuristic flags with real screenshot evidence. See `agents/design-verifier.md` Phase 4B for the screenshot evidence loop.
95
+ When `preview: available`, the design-verifier agent runs Stage 4B - Screenshot Evidence to resolve `? VISUAL` heuristic flags with real screenshot evidence. See `agents/design-verifier.md` Stage 4B for the screenshot evidence loop.
97
96
 
98
97
  ### Probe Storybook connection
99
98
 
@@ -202,7 +201,7 @@ Initialize iteration counter to 0 (used for fix loop limit in Step 3).
202
201
 
203
202
  Three agents run in sequence. Each waits for its completion marker before the next is spawned.
204
203
 
205
- **Note on lazy gates (Plan 10.1-04 / D-21):** Each full checker is preceded by a cheap Haiku gate that reads the diff and may return `{spawn: false}` to short-circuit. When gated out, `lazy_skipped: true` is appended to `.design/telemetry/costs.jsonl`. Gates: `design-verifier-gate` (before 1b), `design-integration-checker-gate` (before 1c). `design-context-checker-gate` is wired into `skills/discover/SKILL.md` Step 1.75.
204
+ **Note on lazy gates:** Each full checker is preceded by a cheap Haiku gate that reads the diff and may return `{spawn: false}` to short-circuit. When gated out, `lazy_skipped: true` is appended to `.design/telemetry/costs.jsonl`. Gates: `design-verifier-gate` (before 1b), `design-integration-checker-gate` (before 1c). `design-context-checker-gate` is wired into `skills/discover/SKILL.md` Step 1.75.
206
205
 
207
206
  ### 1a. Run design-auditor first (retrospective 7-pillar audit)
208
207
 
@@ -274,9 +273,9 @@ Task("design-verifier", """
274
273
  You are the design-verifier agent. Run the 5-phase verification against completed design work.
275
274
 
276
275
  DESIGN-AUDIT.md (above) contains a retrospective 7-pillar qualitative audit from design-auditor.
277
- Read it as supplementary signal — incorporate the priority fix list into your Phase 5 gap analysis
276
+ Read it as supplementary signal — incorporate the priority fix list into your Stage 5 gap analysis
278
277
  where relevant. The auditor's 1-4 scores complement your 0-10 category scores; they do not
279
- replace your Phase 1 category scoring.
278
+ replace your Stage 1 category scoring.
280
279
 
281
280
  Context:
282
281
  auto_mode: <true|false>
@@ -432,7 +431,7 @@ Task("design-fixer", """
432
431
  @.design/DESIGN-CONTEXT.md
433
432
  </required_reading>
434
433
 
435
- Fix all BLOCKER and MAJOR gaps from ## Phase 5 - Gaps in DESIGN-VERIFICATION.md.
434
+ Fix all BLOCKER and MAJOR gaps from ## Stage 5 - Gaps in DESIGN-VERIFICATION.md.
436
435
  For each gap: apply the targeted fix to the file/location in the gap's Location field.
437
436
  After each fix, make an atomic commit: fix(design-gap-GNN): [gap title].
438
437
 
@@ -62,7 +62,7 @@ Full + filtered command-output examples live in `./../cache-manager/cache-policy
62
62
 
63
63
  - **Pre-sprint**: `/gdd:warm-cache` is the recommended first line of a `/gdd:discover`, `/gdd:plan`, or `/gdd:verify` sprint. Users type it before the real command, or an orchestrator-level wrapper runs it automatically if `agent-metrics.json` (Plan 10.1-05) indicates the last sprint was > 5 min ago.
64
64
  - **`reference/shared-preamble.md`** (authored in Plan 10.1-04) is the essential file for this command - agents import it first per D-17, which makes the first N tokens of every agent's rendered system prompt identical, which is what Anthropic's prompt cache keys on.
65
- - **No interaction with `hooks/budget-enforcer.js`** - the hook is a PreToolUse gate; warm-cache runs as an ordinary Agent tool call itself and is subject to the hook (each no-op Haiku ping is budgeted and logged like any other spawn). This is intentional: warm-cache's own telemetry rows in `.design/telemetry/costs.jsonl` are the evidence that cache priming happened.
65
+ - **No interaction with `hooks/budget-enforcer.ts`** - the hook is a PreToolUse gate; warm-cache runs as an ordinary Agent tool call itself and is subject to the hook (each no-op Haiku ping is budgeted and logged like any other spawn). This is intentional: warm-cache's own telemetry rows in `.design/telemetry/costs.jsonl` are the evidence that cache priming happened.
66
66
 
67
67
  ## Cost Model
68
68
 
@@ -1,48 +0,0 @@
1
- ---
2
- name: gdd-add-backlog
3
- description: "Park a design idea for a future cycle. Writes to .design/backlog/BACKLOG.md."
4
- argument-hint: "[text]"
5
- tools: Read, Write, AskUserQuestion
6
- disable-model-invocation: true
7
- ---
8
-
9
- # /gdd:add-backlog
10
-
11
- **Role:** Long-term parking lot for design ideas. Backing store: `.design/backlog/BACKLOG.md`.
12
-
13
- ## Step 1 - Get text
14
-
15
- If `$ARGUMENTS` is empty, ask the user: "What should be added to the backlog?"
16
-
17
- ## Step 2 - Append
18
-
19
- Create `.design/backlog/` directory and `BACKLOG.md` with `# Design Backlog` header if missing.
20
-
21
- Derive `<title>` = first 60 characters of the text (strip newlines). Append:
22
-
23
- ```markdown
24
- ## <title>
25
- **Added**: YYYY-MM-DD
26
- **Status**: parked
27
-
28
- <full text>
29
-
30
- ---
31
- ```
32
-
33
- ## Output
34
-
35
- ```
36
- ━━━ Backlog entry parked ━━━
37
- Title: <title>
38
- Status: parked
39
- Promote later via: /gdd:review-backlog
40
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
41
- ```
42
-
43
- ## Constraints
44
-
45
- - Do not modify files outside `.design/backlog/`.
46
- - Do not set status to anything other than `parked` here - `/gdd:review-backlog` owns status transitions.
47
-
48
- ## ADD-BACKLOG COMPLETE
@@ -1,95 +0,0 @@
1
- ---
2
- name: gdd-analyze-dependencies
3
- description: "Queries the intel store to surface token fan-out, component call-graphs, decision traceability, and circular dependency detection. Requires .design/intel/ to exist (run build-intel.cjs first)."
4
- tools: Bash, Read, Glob, Grep
5
- ---
6
-
7
- # /gdd:analyze-dependencies
8
-
9
- **Role:** Surface dependency relationships, token usage spread, component graphs, and decision traceability using `.design/intel/`. All queries are O(1) reads against pre-built JSON slices - no file greps. See `./reference/heuristics.md` for the underlying dependency-analysis heuristics (fan-out thresholds, orphan-token criteria, cycle-detection bias).
10
-
11
- ## Pre-flight
12
-
13
- Verify the intel store exists:
14
-
15
- ```bash
16
- ls .design/intel/files.json 2>/dev/null && echo "ready" || echo "missing"
17
- ```
18
-
19
- If missing, print:
20
-
21
- ```
22
- Intel store not found. Build it first:
23
- node scripts/build-intel.cjs --force
24
- Then re-run /gdd:analyze-dependencies.
25
- ```
26
-
27
- ## Usage modes
28
-
29
- - `/gdd:analyze-dependencies` - run all four analyses and print a combined report
30
- - `/gdd:analyze-dependencies tokens` - token fan-out only
31
- - `/gdd:analyze-dependencies components` - component call-graph only
32
- - `/gdd:analyze-dependencies decisions` - decision traceability only
33
- - `/gdd:analyze-dependencies circular` - circular dependency detection only
34
-
35
- ## Analysis 1 - Token fan-out
36
-
37
- Surfaces tokens referenced in many files + orphans (referenced exactly once).
38
-
39
- 1. Read `.design/intel/tokens.json`; group by `token` value; count distinct `file` values.
40
- 2. Sort descending; print top-20 with token / file count / category columns.
41
- 3. Append orphans list (token + file:line of the single reference).
42
-
43
- Header: `━━━ Token fan-out ━━━` … `(top 20 shown)` … `Orphaned tokens (referenced in exactly 1 file):` … footer rule.
44
-
45
- ## Analysis 2 - Component call-graph
46
-
47
- Surfaces widely-referenced components and the files referencing each.
48
-
49
- 1. Read `.design/intel/components.json`; group by `component` name; count distinct `file` values.
50
- 2. Sort descending; print top-20 with component / references / files columns.
51
- 3. If `components <Name>` is passed, print only that component's referencing files (one per line).
52
-
53
- Header: `━━━ Component call-graph ━━━` … footer rule.
54
-
55
- ## Analysis 3 - Decision traceability
56
-
57
- Maps decisions to skill/agent files that cite them.
58
-
59
- 1. Read `.design/intel/decisions.json` (decision IDs D-01, D-02, …).
60
- 2. Read `.design/intel/symbols.json` for heading anchors; `.design/intel/dependencies.json` for @-reference chains.
61
- 3. For each decision, cross-reference which files cite the ID.
62
- 4. Print per-decision block: `D-NN <description>` then a 6-space-indented `Referenced by: <file:line>, …` line (or `(no explicit references found)`).
63
- 5. Footer: `Total: N decisions tracked, M with file references`.
64
-
65
- Empty-state: `No decisions indexed. Run node scripts/build-intel.cjs after creating .design/DESIGN-CONTEXT.md.`
66
-
67
- ## Analysis 4 - Circular dependency detection
68
-
69
- Detects cycles in the `@`-reference graph (File A → File B → File A). DFS with path-tracking detects back-edges; algorithm + adjacency-map shape detailed in `./reference/heuristics.md` §"Dependency-cycle detection".
70
-
71
- 1. Read `.design/intel/graph.json`; build adjacency map from `edges`.
72
- 2. Run DFS with path-tracking; collect back-edges as cycles.
73
- 3. Print each cycle with the node sequence + `<- CYCLE` marker on the closing node.
74
- 4. Footer: `Total cycles: N` (or `All clear — no circular dependencies detected.`).
75
-
76
- ## Combined report
77
-
78
- When run without a mode argument, print all four analyses in sequence separated by blank lines, prefixed with:
79
-
80
- ```
81
- ━━━ Dependency Analysis ━━━
82
- Intel store: .design/intel/
83
- Generated: <timestamp from files.json>
84
- Files indexed: <count>
85
- ```
86
-
87
- ## Required reading (conditional)
88
-
89
- @.design/intel/tokens.json (if present)
90
- @.design/intel/components.json (if present)
91
- @.design/intel/dependencies.json (if present)
92
- @.design/intel/decisions.json (if present)
93
- @.design/intel/graph.json (if present)
94
-
95
- ## ANALYZE-DEPENDENCIES COMPLETE
@@ -1,109 +0,0 @@
1
- ---
2
- name: gdd-apply-reflections
3
- description: "Review and selectively apply proposals from .design/reflections/<cycle-slug>.md. Diffs each proposal, prompts user to accept/skip/edit, then writes changes."
4
- argument-hint: "[--cycle <slug>] [--filter <FRONTMATTER|REFERENCE|BUDGET|QUESTION|GLOBAL-SKILL>] [--dry-run]"
5
- tools: Read, Write, Edit, Bash, Glob
6
- ---
7
-
8
- # /gdd:apply-reflections
9
-
10
- Interactive proposal review loop. Reads `.design/reflections/<cycle-slug>.md`, walks each numbered proposal, and applies accepted ones to the appropriate target file. Nothing is applied without explicit user confirmation.
11
-
12
- ## Steps
13
-
14
- ### 1. Resolve reflections file
15
-
16
- - If `--cycle <slug>` given: load `.design/reflections/<slug>.md`
17
- - Else: glob `.design/reflections/*.md`, sort by modified time descending, load the most recent
18
- - If no file found: error "No reflections found. Run `/gdd:reflect` first."
19
- - Print: "Reviewing reflections: <filename>"
20
-
21
- ### 2. Parse proposals
22
-
23
- Scan file for lines matching `### Proposal N — [TYPE] ...`. Extract each proposal block (Why / Change / Risk).
24
-
25
- If `--filter <TYPE>` given: skip proposals whose type tag doesn't match.
26
-
27
- Print: "Found N proposals (N after filter)."
28
-
29
- ### 3. Review loop
30
-
31
- For each proposal (in order):
32
-
33
- Print the full proposal block:
34
- ```
35
- ─────────────────────────────────────────
36
- Proposal N/TOTAL — [TYPE] Title
37
- Risk: low|medium
38
-
39
- Why: ...
40
- Change: ...
41
- ─────────────────────────────────────────
42
- (a) apply (s) skip (e) edit (q) quit
43
- ```
44
-
45
- If `--dry-run`: print `[dry-run — would prompt here]` and continue to next proposal without prompting.
46
-
47
- Based on user choice:
48
- - **a** - apply (see Apply Logic below)
49
- - **s** - mark proposal as `**Reviewed: skipped**` in the reflections file; continue
50
- - **e** - show the Change text, ask user to provide edited version, then apply the edited version
51
- - **q** - stop processing; print "Stopped at proposal N. Resume with `/gdd:apply-reflections --cycle <slug>`."
52
-
53
- ### 4. Apply Logic by Proposal Type
54
-
55
- After the user chooses `a` (apply) or `e` (edit-then-apply), branch on the proposal's bracketed type tag and follow the per-type apply procedure in `./apply-reflections-procedure.md` - one numbered procedure each for `[FRONTMATTER]`, `[REFERENCE]`, `[BUDGET]`, `[QUESTION]`, `[GLOBAL-SKILL]`. All branches end with `**Applied**: <date>` appended to the proposal block in the reflections file.
56
-
57
- ### 5. Summary
58
-
59
- After all proposals processed (or `q`):
60
- ```
61
- ─────────────────────────────────────────
62
- Apply-reflections complete
63
- Applied: N
64
- Skipped: N
65
- Remaining: N (run again to continue)
66
- ─────────────────────────────────────────
67
- ```
68
-
69
- ## [INCUBATOR]
70
-
71
- Incubator drafts authored by `scripts/lib/incubator-author.cjs` (Phase 29-04) appear as a distinct proposal class. For each draft under `.design/reflections/incubator/<slug>/`, use `scripts/lib/apply-reflections/incubator-proposals.cjs`:
72
-
73
- 1. `discoverIncubatorDrafts()` → list pending drafts.
74
- 2. `renderProposal(draft)` → show full body + diff + origin signals.
75
- 3. User chooses **accept** | **reject** | **defer** | **edit**.
76
- 4. **accept** - scope-guard runs FIRST (`validateScope` from `scripts/validate-incubator-scope.cjs`); `applyAccept` then promotes draft → `agents/<slug>.md` or `skills/<slug>/SKILL.md` and appends a registry entry. Single-step per D-04.
77
- 5. **reject** - `applyReject` removes the incubator subdir.
78
- 6. **defer** - no-op; draft re-surfaces next run.
79
- 7. **edit** - `applyEdit` opens `$EDITOR`; re-prompt user on close.
80
-
81
- **Stage-1 gate.** At session start, call `checkStage1Gate()`. If `thresholdMet && !optInRecorded`, display the opt-in prompt once. NEVER auto-flip per D-01 - recording opt-in requires explicit user confirmation via `recordOptIn()`. Full procedure: `./apply-reflections-procedure.md` §[INCUBATOR].
82
-
83
- ## [KFM-CANDIDATE]
84
-
85
- KFM-catalogue proposals authored by `scripts/lib/reflector-kfm-proposer.cjs` (Phase 30.5-03 D-05) appear as a 6th proposal class. Drafts at `.design/reflections/incubator/kfm-<slug>/CATALOGUE-ENTRY.md`; pre-filled 11-field schema with `TODO:` placeholders for `pattern` + `fix`. Two upstream signals share the surface (D-06): `capability_gap` clusters (≥3, no existing match) + `kfm-candidate` events (whitelist-matched articles, 1-shot). User chooses **accept** | **reject** | **defer** | **edit**. `applyAccept` appends to `reference/known-failure-modes.md` + `reference/registry.json` (`origin: incubator-kfm`); `applyReject` removes the incubator subdir; `applyDefer` stamps `deferred_until`; `applyEdit` returns the draft path for `$EDITOR`. Full procedure: `./apply-reflections-procedure.md` §[KFM-CANDIDATE].
86
-
87
- ## [INSTINCT]
88
-
89
- Atomic instinct units emitted by `design-reflector` (and surfaced from `/gdd:extract-learnings`) appear as a distinct proposal class, alongside `[INCUBATOR]` and `[KFM-CANDIDATE]`. Each unit is a fenced `yaml` block under the reflector's `## Atomic instincts` section, shaped per `reference/instinct-format.md` (`id`, `trigger`, `confidence`, `domain`, `scope`, `project_id`, `source`, `cycles_seen`, `first_seen`, `last_seen`, plus a short body). A unit is a proposal, never a stored fact - nothing lands until the user accepts it.
90
-
91
- Mirror the `[INCUBATOR]` flow:
92
-
93
- 1. Discover the units: parse every `yaml` block under `## Atomic instincts` in the reflections file. Skip malformed blocks (warn on stderr, keep going).
94
- 2. For each unit: show the parsed `trigger`, `domain`, `confidence`, and body so the user sees what would be stored.
95
- 3. Prompt: `(a) accept (r) reject (d) defer (e) edit (q) quit`.
96
-
97
- **Per-action behavior:**
98
-
99
- 1. **accept** - call `scripts/lib/instinct-store.cjs` `add(unit, { scope, baseDir })` with the unit at its emitted `confidence`. The store owns de-duplication and `cycles_seen` bookkeeping. On success print `Stored instinct <id> (<domain>, confidence <n>).` and append `**Applied**: <date>` to the proposal block.
100
- 2. **reject** - do not store the unit. Append `**Reviewed: rejected**` to the reflections file.
101
- 3. **defer** - no-op; the unit re-surfaces next run. Append `**Reviewed: deferred**`.
102
- 4. **edit** - let the user adjust `trigger`, `confidence`, or `domain`, then accept the edited unit through the same `add(...)` call. Default `scope: 'project'` (write `global` only when the unit's frontmatter says so); never edit `.design/instincts/instincts.json` directly, and promote to global via the separate gated `/gdd:instinct promote`.
103
-
104
- ## Do Not
105
-
106
- - Do not apply any proposal without the user explicitly choosing `a` or `e`.
107
- - Do not modify source code files (`.ts`, `.tsx`, `.css`, `.js`) - only agent files, reference files, budget.json, discussant questions, global skills, and incubator drafts.
108
- - Do not re-run the reflector - this skill only applies existing proposals.
109
- - Do not bypass the scope guard or auto-flip Stage-1 - both are non-negotiable per D-05 / D-01.
@@ -1,170 +0,0 @@
1
- ---
2
- name: apply-reflections-procedure
3
- type: heuristic
4
- version: 1.3.0
5
- phase: 30.5
6
- tags: [apply-reflections, proposal, frontmatter, reference, budget, question, global-skill, incubator, kfm-candidate]
7
- last_updated: 2026-05-21
8
- ---
9
-
10
- # Apply-Reflections - Per-Type Procedure
11
-
12
- Extracted from `skills/apply-reflections/SKILL.md` per Phase 28.5 D-10 (extract-then-link,
13
- never delete content). The orchestrator loop in `apply-reflections` (resolve file → parse →
14
- review loop → summary) stays in the SKILL. The per-proposal-type apply logic below moves
15
- here because it is content-class methodology, not workflow.
16
-
17
- ## Apply Logic by Proposal Type
18
-
19
- After the user chooses `a` (apply) or `e` (edit-then-apply) in the review loop, branch by
20
- the proposal's bracketed type tag.
21
-
22
- ### [FRONTMATTER]
23
-
24
- 1. Extract agent name from Change field (e.g., `agents/design-verifier.md`)
25
- 2. Read the agent file
26
- 3. Find the frontmatter line matching the field being changed
27
- 4. Use Edit tool to update the specific line
28
- 5. Append `**Applied**: <date>` to the proposal in reflections file
29
-
30
- ### [REFERENCE]
31
-
32
- 1. Extract target file path from Change field (e.g., `reference/heuristics.md`)
33
- 2. If file exists: append the drafted text using Edit tool
34
- 3. If file doesn't exist: create it with a minimal header + the drafted text using Write tool
35
- 4. Append `**Applied**: <date>` to proposal in reflections file
36
-
37
- ### [BUDGET]
38
-
39
- 1. Read `.design/budget.json`
40
- 2. Locate the key path from the Change field (e.g., `design-verifier.per_run_cap_usd`)
41
- 3. Update the value
42
- 4. Write updated JSON back to `.design/budget.json`
43
- 5. Append `**Applied**: <date>` to proposal in reflections file
44
-
45
- ### [QUESTION]
46
-
47
- 1. Read `agents/design-discussant.md`
48
- 2. Find the question text specified in the Change field
49
- 3. If pruning: remove the question lines using Edit tool
50
- 4. If rewording: replace the question text using Edit tool
51
- 5. Append `**Applied**: <date>` to proposal in reflections file
52
-
53
- ### [GLOBAL-SKILL]
54
-
55
- 1. Extract target filename from Change field (e.g., `design-color-conventions.md`)
56
- 2. Ensure `~/.claude/gdd/global-skills/` directory exists (create with `mkdir -p` if not)
57
- 3. If target file exists: append new content using Edit tool (add a `---` separator first)
58
- 4. If target file doesn't exist: create with header + content using Write tool:
59
-
60
- ```markdown
61
- # <Topic> Conventions (Global)
62
- *Promoted from project: <project-name>, cycle: <cycle-slug>*
63
-
64
- <content>
65
- ```
66
-
67
- 5. Print: "Global skill written to ~/.claude/gdd/global-skills/<name>.md - auto-loads in all future gdd sessions"
68
- 6. Append `**Applied**: <date>` to proposal in reflections file
69
-
70
- ### [INCUBATOR]
71
-
72
- Incubator drafts come from `scripts/lib/incubator-author.cjs` (Phase 29-04). They live at
73
- `.design/reflections/incubator/<slug>/` and contain `manifest.json` + `DRAFT.md` + (optional) `ORIGIN.md`.
74
-
75
- Use `scripts/lib/apply-reflections/incubator-proposals.cjs` for all actions.
76
-
77
- **Discovery + render** (once per cycle):
78
-
79
- 1. Call `discoverIncubatorDrafts()` → `Array<Draft>`. Skip malformed entries silently (already warned on stderr by the helper).
80
- 2. For each draft: call `renderProposal(draft)` and print the returned markdown block. The user sees a header (slug + kind), a diff vs the nearest existing artifact (or "net-new"), an Origin section listing capability-gap signals, and the full draft body.
81
- 3. Prompt: `(a) accept (r) reject (d) defer (e) edit (q) quit`.
82
-
83
- **Per-action behavior:**
84
-
85
- 1. **accept** - call `applyAccept(draft, { registryPath, repoRoot })`.
86
- - The helper calls `validateScope(draft.target_path)` from `scripts/validate-incubator-scope.cjs` **before** any write. Out-of-scope paths throw and the registry stays untouched. This is the non-bypassable scope guard (D-05).
87
- - On success: target artifact written, `reference/registry.json` appended with `{ slug, path, added, origin: 'incubator' }`, incubator subdir removed last (T-29.05-04 - partial-failure leaves draft retryable).
88
- - Print: "Accepted - promoted to <target_path>; registered."
89
- - Append `**Applied**: <date>` to the proposal block.
90
-
91
- 2. **reject** - call `applyReject(draft)`. Only the incubator subdir is removed; registry is untouched. Append `**Reviewed: rejected**` to the reflections file.
92
-
93
- 3. **defer** - no-op. Print "Deferred - draft re-surfaces next run." Append `**Reviewed: deferred**`.
94
-
95
- 4. **edit** - call `applyEdit(draft)` (uses `$EDITOR` or the `editorCmd` array option). On clean exit, the helper reloads the draft and the caller re-runs `renderProposal` + the prompt. On non-zero exit, the original draft is preserved unchanged.
96
-
97
- **Stage-1 gate (D-01 - no auto-flip):**
98
-
99
- 1. At the start of the cycle, call `checkStage1Gate({ gateSpecPath, statePath, registryPath })`. The call is **read-only** - never mutates state. The returned `{ thresholdMet, summary, optInRecorded }` is informational.
100
- 2. If `thresholdMet && !optInRecorded`, surface a one-time prompt:
101
- ```
102
- Stage-1 capability-gap authoring threshold met: <summary>
103
- Enable incubator-draft promotion? (y/N)
104
- ```
105
- 3. **Only on explicit `y`**, call `recordOptIn({ statePath, confirmedBy })`. The function is idempotent - a second call detects the existing record and returns `{ alreadyRecorded: true }`. Never call it on any other input.
106
-
107
- **Why this is gated.** The `[INCUBATOR]` proposal class can write executable surface (agents + skills) into the plugin runtime. Both Phase 29 D-01 (no auto-flip) and D-05 (scope guard) exist because that surface has integration-test and security implications that exceed reflector autonomy. `validateScope` keeps the file landing zone confined to `agents/<slug>.md` or `skills/<slug>/SKILL.md`. The Stage-1 gate keeps the *whether* of opting in to incubator authoring under explicit user control even after the data threshold says we have enough signal.
108
-
109
- **Bandit-fairness gate on `accept` (Phase 29 Plan 06 / CONTEXT D-04).**
110
-
111
- When the `accept` action promotes an incubator draft, the bandit-router arms for the freshly-promoted agent/skill MUST be bootstrapped with `prior_class: 'promoted_incubator'`. This invokes a conservative `Beta(2, 8)` bootstrap prior (posterior mean 0.2) instead of the optimistic Phase 23.5 informed prior - the bandit-fairness gate IS the staging mechanism (D-04: no separate two-step ratify split). The conservative prior suppresses preferential selection until ~8-10 successful pulls accumulate.
112
-
113
- Call shape (whether eagerly invoked on promotion or via first-pull lazy bootstrap):
114
-
115
- ```javascript
116
- const bandit = require('./scripts/lib/bandit-router.cjs');
117
- // Per arm bootstrapped for the freshly-promoted agent:
118
- bandit.update({
119
- agent: '<promoted-slug>',
120
- bin: '<touches-bin>',
121
- tier: '<chosen-tier>',
122
- reward: <bernoulli>,
123
- prior_class: 'promoted_incubator', // Phase 29 Plan 06 / D-04 — Beta(2,8) staging
124
- });
125
- // Or for the delegate-aware case (Plan 27-07):
126
- bandit.updateWithDelegate({
127
- agent: '<promoted-slug>',
128
- bin: '<touches-bin>',
129
- tier: '<chosen-tier>',
130
- delegate: '<peer-cli-or-none>',
131
- reward: <bernoulli>,
132
- prior_class: 'promoted_incubator',
133
- });
134
- ```
135
-
136
- Omitting `prior_class` reverts to Phase 23.5 informed-prior bootstrap (non-breaking). The reward math is unchanged - `prior_class` only affects bootstrap.
137
-
138
- ### [KFM-CANDIDATE]
139
-
140
- Known-failure-mode catalogue proposals come from `scripts/lib/reflector-kfm-proposer.cjs` (Phase 30.5-03 D-05). They live at `.design/reflections/incubator/kfm-<slug>/CATALOGUE-ENTRY.md` and contain a single fenced ```yaml block pre-filled with the Phase 30.5 schema-v2 11-field shape (`id` + `pattern` + `diagnosis` + `remedy` + `severity` + `propose_report` + `symptom` + `root_cause` + `fix` + `related_phases` + `first_observed_cycle`). Two of those — `pattern` and `fix` — are `TODO:` placeholders the reflector cannot infer; the user fills them via the **edit** action before accepting.
141
-
142
- Two upstream signals share this draft surface (D-06):
143
- - `capability_gap` clusters of size ≥3 with no existing-entry match (Phase 29-03 aggregator + `failure-mode-matcher.match()`).
144
- - `kfm-candidate` events from the Phase 30.5-03 Task 2 authority-watcher whitelist (D-06 - single events bypass the ≥3 gate).
145
-
146
- Use `scripts/lib/reflector-kfm-proposer.cjs` for all actions:
147
-
148
- **Discovery + render** (once per cycle):
149
-
150
- 1. Glob `.design/reflections/incubator/kfm-*/CATALOGUE-ENTRY.md` → list pending KFM drafts.
151
- 2. For each draft: read the body, show the origin header (source, parent event ids OR article url) + the proposed yaml block.
152
- 3. Prompt: `(a) accept (r) reject (d) defer (e) edit (q) quit`.
153
-
154
- **Per-action behavior:**
155
-
156
- 1. **accept** - call `applyAccept(draftPath, { repoRoot })`.
157
- - The helper re-stamps the proposed `id` with the next available `KFM-NNN` from the catalogue (avoids collisions when multiple drafts promote in the same run).
158
- - Appends a `### KFM-NNN — <symptom heading>` section into `reference/known-failure-modes.md` with the yaml block intact.
159
- - Appends a `reference/registry.json` entry: `{ name: 'known-failure-modes/kfm-NNN', path: 'reference/known-failure-modes.md', type: 'failure-mode', phase: 30.5, origin: 'incubator-kfm', added: '<ISO date>' }`.
160
- - Removes the incubator subdir LAST (partial-failure leaves the draft retryable).
161
- - Print: "Accepted - promoted to KFM-NNN in reference/known-failure-modes.md."
162
- - Append `**Applied**: <date>` to the proposal entry (when surfaced from a reflections file).
163
-
164
- 2. **reject** - call `applyReject(draftPath)`. Only the incubator subdir is removed; catalogue + registry untouched. Print: "Rejected - draft removed."
165
-
166
- 3. **defer** - call `applyDefer(draftPath, { deferredUntil })` where `deferredUntil` is an ISO date (default: today + 30d). The helper stamps `deferred_until: <ISO>` into the draft body. Print: "Deferred - draft re-surfaces next run."
167
-
168
- 4. **edit** - call `applyEdit(draftPath)` which returns the draft path. The caller opens `$EDITOR` on the path; on clean exit, re-discover the draft and re-prompt. Typical edits: replace `pattern: 'TODO: ...'` with a conservative regex, replace `fix: 'TODO: ...'` with a step-by-step user-runnable remedy, set `severity` if `medium` default is wrong.
169
-
170
- **Why this is gated.** `reference/known-failure-modes.md` feeds Phase 30's `triage-matcher.cjs` BEFORE the consent prompt - a bad entry could mute legitimate issue reports. The user-review gate is non-negotiable (D-05). The proposer is strictly proposal-only; the canonical catalogue only changes via the accept action.
@@ -1,79 +0,0 @@
1
- ---
2
- name: gdd-audit
3
- description: "Run a design audit by spawning design-auditor, design-integration-checker, and (optionally) design-verifier + design-reflector agents, then printing a consolidated 7-pillar score summary. Use when the user wants to score the current design, retroactively verify a completed cycle, or quickly re-check after a fix. Activates for requests involving scoring an existing design, retroactively reviewing quality, or re-checking after a fix."
4
- argument-hint: "[--retroactive] [--quick] [--no-reflect]"
5
- tools: Read, Write, Task, Glob, Bash
6
- ---
7
-
8
- # /gdd:audit
9
-
10
- Wraps the existing `design-auditor`, `design-verifier`, and `design-integration-checker` agents - no new auditor logic here. Parses flags, spawns the right combination, prints summary.
11
-
12
- For the 7-pillar scoring rubric this skill aggregates, see `../../reference/audit-scoring.md`. For the shared design-quality pillar set that frames the score categories, see `../../reference/shared-preamble.md`.
13
-
14
- ## Modes
15
-
16
- ### Default
17
- Spawn `design-auditor` (7-pillar scoring 1–4) in parallel with `design-integration-checker`. After both finish, read `.design/DESIGN-AUDIT.md` and `.design/DESIGN-INTEGRATION.md` and print a consolidated summary (scores + top 3 findings each).
18
-
19
- After the auditor and integration checker complete, check if `.design/learnings/` exists and contains at least one `.md` file. If so - and unless `--no-reflect` is passed - spawn `design-reflector` for the current cycle. Append the reflection proposal count to the audit summary: "Reflection: N proposals → review with `/gdd:apply-reflections`".
20
-
21
- ### `--retroactive`
22
- Spawn `design-verifier` with cycle-span scope. Verifier reads all tasks completed in the current cycle (from STATE.md `<completed_tasks>` list for the active `cycle:` ID) and uses `DESIGN-PLAN.md` goals as the reference baseline for what "should have been done." Output: `.design/DESIGN-VERIFICATION.md` with per-task pass/fail.
23
-
24
- ### `--quick`
25
- Run only `design-auditor` (skip `design-integration-checker`). Faster health check when integration isn't the concern.
26
-
27
- ## Steps
28
-
29
- 1. Parse args for `--retroactive`, `--quick`, and `--no-reflect`.
30
- 2. Verify `.design/STATE.md` exists; abort if not (suggest `/gdd:new-project`).
31
- 3. Spawn the appropriate agents (Task tool). Default and `--retroactive` spawn two agents; `--quick` spawns one.
32
- 4. Wait for completion, then read each output file and print a summary:
33
- - Auditor scores per pillar
34
- - Integration check pass/fail
35
- - Verifier pass/fail per task (retroactive mode)
36
- 5. **Reflection step** (default + retroactive modes only, skipped with `--no-reflect` or `--quick`):
37
- - Check if `.design/learnings/` exists and has ≥1 `.md` file
38
- - If yes: spawn `design-reflector` for the current cycle slug (read from STATE.md)
39
- - After completion: count proposal types and append to summary
40
- 6. Recommend next action based on findings (e.g., "Score 2/4 on typography - run `/gdd:discuss typography` to gather decisions").
41
-
42
- ## Registered Audit Agents
43
-
44
- | Agent | Trigger | Output |
45
- |---|---|---|
46
- | `design-auditor` | Default, retroactive | `.design/DESIGN-AUDIT.md` |
47
- | `design-integration-checker` | Default, retroactive | `.design/DESIGN-INTEGRATION.md` |
48
- | `design-verifier` | `--retroactive` only | `.design/DESIGN-VERIFICATION.md` |
49
- | `design-reflector` | Default + retroactive when learnings exist | `.design/reflections/<slug>.md` |
50
-
51
- ## Do Not
52
-
53
- - Do not modify source files.
54
- - Do not rerun stages; this is a read-only audit.
55
-
56
- ## Step 7 - Update notice (post-closeout surface)
57
-
58
- After the consolidated audit summary has been printed (and any reflection-proposal count appended), emit the plugin-update banner if one is present:
59
-
60
- ```bash
61
- [ -f .design/update-available.md ] && cat .design/update-available.md
62
- ```
63
-
64
- Written by `hooks/update-check.sh`; suppressed mid-pipeline and when the latest release is dismissed.
65
-
66
- ## Rationalizations - Thought to Reality
67
-
68
- The excuses an agent reaches for to skip or thin out an audit, and the drift each one misses:
69
-
70
- | Thought | Reality |
71
- |---------|---------|
72
- | "The audit passed last cycle, I can skip it this cycle." | Per-cycle audit catches drift the prior pass couldn't see; a skipped review is exactly where regressions accumulate unnoticed. |
73
- | "`--quick` is fine, integration isn't the concern here." | Dropping the integration-checker hides orphaned decisions - wiring breaks even when the 7-pillar score looks healthy. |
74
- | "I can eyeball the scores instead of spawning the auditor." | The auditor's rubric scores seven pillars consistently; an eyeballed review drifts toward whatever the agent already believes. |
75
- | "Reflection proposals are optional polish, skip the reflector." | The reflector turns this cycle's learnings into next-cycle improvements; skipping it lets the same mistakes repeat. |
76
- | "I'll modify the source while I'm in here fixing findings." | Audit is read-only by contract; editing source mid-audit invalidates the very scores you're producing. |
77
- | "Retroactive mode is overkill for a finished cycle." | Retroactive verification is the only check on tasks that shipped without per-task verify - skipping it leaves a completed cycle unaudited. |
78
-
79
- ## AUDIT COMPLETE