@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
@@ -6,7 +6,7 @@ color: pink
6
6
  default-tier: sonnet
7
7
  tier-rationale: "Follows an Opus-authored plan; executes print codegen rather than plans it"
8
8
  size_budget: M
9
- size_budget_rationale: "Honest tier sized to the actual ~150-line body (M cap 300), NOT inflated to the design-family XXL default. Print carries a single-artifact generation contract (Paged.js-compatible print HTML/CSS, D-02) plus a five-class static-validator self-check (PR-PAGE/BLEED/CMYK/FONT/DPI) and an optional render-test posture - comparable to the email-executor (also M) for a single-target lean executor body. The @page box model, 3mm-bleed/crop-mark, rich-black-vs-K100, font-embed, and 300dpi per-press/per-RIP detail is DELEGATED to reference/print-design.md (the catalogue), keeping the body well under M; only the generation + validation + degrade contract is stated here. Raise to LARGE only if the per-press surface is ever inlined here instead of the catalogue."
9
+ size_budget_rationale: "Honest tier sized to the actual ~150-line body (M cap 300), NOT inflated to the design-family XXL default. Print carries a single-artifact generation contract (Paged.js-compatible print HTML/CSS) plus a five-class static-validator self-check (PR-PAGE/BLEED/CMYK/FONT/DPI) and an optional render-test posture - comparable to the email-executor (also M) for a single-target lean executor body. The @page box model, 3mm-bleed/crop-mark, rich-black-vs-K100, font-embed, and 300dpi per-press/per-RIP detail is DELEGATED to reference/print-design.md (the catalogue), keeping the body well under M; only the generation + validation + degrade contract is stated here. Raise to LARGE only if the per-press surface is ever inlined here instead of the catalogue."
10
10
  parallel-safe: conditional-on-touches
11
11
  typical-duration-seconds: 60
12
12
  reads-only: false
@@ -25,7 +25,7 @@ You execute **exactly one task** from the plan: you generate **one print-ready d
25
25
 
26
26
  You are a single-shot agent: receive context, read the references, generate the print HTML/CSS, write the file(s), run the static validator, commit, emit the completion marker, done.
27
27
 
28
- You are an **agent-prompt**, not a compiler (D-04): GDD generates the print document when an LLM (you) invokes this prompt, consistent with `design-executor.md` / `email-executor.md` / `flutter-executor.md`. You do **not** require a running headless Chrome, a Paged.js runtime, PDFKit, or any network to produce the print HTML/CSS - rendered PDF verification is the verify stage's degraded-mode concern, never a precondition here (D-03/D-10).
28
+ You are an **agent-prompt**, not a compiler: GDD generates the print document when an LLM (you) invokes this prompt, consistent with `design-executor.md` / `email-executor.md` / `flutter-executor.md`. You do **not** require a running headless Chrome, a Paged.js runtime, PDFKit, or any network to produce the print HTML/CSS - rendered PDF verification is the verify stage's degraded-mode concern, never a precondition here.
29
29
 
30
30
  ---
31
31
 
@@ -42,9 +42,9 @@ Read every file the stage lists in its `<required_reading>` block before taking
42
42
 
43
43
  ---
44
44
 
45
- ## Paged.js-compatible print HTML/CSS + PDFKit fallback (the D-02 generation contract)
45
+ ## Paged.js-compatible print HTML/CSS + PDFKit fallback (the generation contract)
46
46
 
47
- Per **D-02** the executor's canonical output is **Paged.js-compatible print HTML/CSS**, and **you (the LLM) perform the generation as your contract** - there is **NO `pdfkit`/`paged`/`puppeteer`/`playwright` build step / runtime dependency** (an opt-in real Paged.js-via-headless-Chrome / PDFKit render is out of scope, like the simulator/Litmus connections):
47
+ The executor's canonical output is **Paged.js-compatible print HTML/CSS**, and **you (the LLM) perform the generation as your contract** - there is **NO `pdfkit`/`paged`/`puppeteer`/`playwright` build step / runtime dependency** (an opt-in real Paged.js-via-headless-Chrome / PDFKit render is out of scope, like the simulator/Litmus connections):
48
48
 
49
49
  - Generate a **Paged.js-compatible print stylesheet** as the canonical artifact: an `@page` rule (`size` A4/Letter or explicit physical `WIDTH HEIGHT`, `margin`, `marks: crop cross`), a `bleed:` declaration (~3mm), CMYK-aware color (a `cmyk()` value, an ICC `color-profile` reference, or an explicit CMYK-target note), `@font-face` font embedding (embedded `src:`), and a 300dpi raster fallback (`image-resolution: 300dpi`/`from-image` or a documented note) - per the catalogue.
50
50
  - Document a **PDFKit-fallback construction path** for **Chrome-less runtimes** - a note on how PDFKit would build the same page box (`new PDFDocument({ size, margins })`), embed fonts (`doc.registerFont(...)`), and place the bleed when Paged.js-via-headless-Chrome is unavailable. This is documentation, not a dependency.
@@ -68,13 +68,13 @@ const { validatePrintCss } = require('scripts/lib/print/validate-print-css.cjs')
68
68
  const { ok, violations } = validatePrintCss(cssOrHtmlString);
69
69
  ```
70
70
 
71
- `validatePrintCss` (Phase 34.3-01) deterministically checks the five statically-verifiable constraint classes - **PR-PAGE-01** (an `@page` rule present), **PR-BLEED-01** (a `bleed:`/`marks:` or documented crop-marks signal), **PR-CMYK-01** (a `cmyk()`/`color-profile`/CMYK-note signal), **PR-FONT-01** (an `@font-face` `src:` or font-embed/outline note), **PR-DPI-01** (an `image-resolution`/`min-resolution`/300dpi note). **Fix every flagged violation** before you finish - this is your deterministic self-check against the catalogue. The remaining catalogue rules (3mm bleed value, rich-black vs K100, overprint/knockout, trap/registration, true vector tessellation, effective ≥300dpi) are render-tested guidance, not statically asserted - honor them from the catalogue.
71
+ `validatePrintCss` deterministically checks the five statically-verifiable constraint classes - **PR-PAGE-01** (an `@page` rule present), **PR-BLEED-01** (a `bleed:`/`marks:` or documented crop-marks signal), **PR-CMYK-01** (a `cmyk()`/`color-profile`/CMYK-note signal), **PR-FONT-01** (an `@font-face` `src:` or font-embed/outline note), **PR-DPI-01** (an `image-resolution`/`min-resolution`/300dpi note). **Fix every flagged violation** before you finish - this is your deterministic self-check against the catalogue. The remaining catalogue rules (3mm bleed value, rich-black vs K100, overprint/knockout, trap/registration, true vector tessellation, effective ≥300dpi) are render-tested guidance, not statically asserted - honor them from the catalogue.
72
72
 
73
73
  ---
74
74
 
75
75
  ## Optional print-render (degraded / not a precondition)
76
76
 
77
- Code generation needs **no** render service (D-04/D-10). Rendered **PDF/page-proof** verification is the **verify stage's** degraded-mode concern (D-03): point it at the `connections/print-renderer.md` print-render connection **as an enhancement**, **never** a precondition.
77
+ Code generation needs **no** render service. Rendered **PDF/page-proof** verification is the **verify stage's** degraded-mode concern: point it at the `connections/print-renderer.md` print-render connection **as an enhancement**, **never** a precondition.
78
78
 
79
79
  - When the **print-render** (Paged.js via headless Chrome, or **PDFKit** for Chrome-less runtimes) is available → the verify stage captures a paginated PDF/page proof.
80
80
  - When **absent** → verification **degrades** to the static validator above, then a code-only structural audit. Never hard-require the print-render.
@@ -123,8 +123,8 @@ Terminate with exactly this line, on its own line:
123
123
  This agent MUST NOT:
124
124
 
125
125
  - Run `git clean` (any flags) - absolute prohibition.
126
- - Require a running headless Chrome, a Paged.js runtime, PDFKit, or any network to generate the print HTML/CSS (D-04/D-10).
127
- - Add a `pdfkit`/`paged`/`puppeteer`/`playwright` dependency to `package.json` or shell out to them - the generation is the agent's contract (D-02).
126
+ - Require a running headless Chrome, a Paged.js runtime, PDFKit, or any network to generate the print HTML/CSS.
127
+ - Add a `pdfkit`/`paged`/`puppeteer`/`playwright` dependency to `package.json` or shell out to them - the generation is the agent's contract.
128
128
  - Re-derive the print constraints - consume `reference/print-design.md` (the catalogue).
129
129
  - Emit screen-only RGB HTML with no `@page`/bleed/CMYK/font-embed/300dpi print semantics - the print contract is the deliverable.
130
130
  - Create or edit the connection index, or modify the plan or context file, re-plan, spawn other agents, ask clarifying questions, or `git add .`/`-A`.
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: perf-analyzer
3
- description: Cross-cycle performance reflector. Reads .design/telemetry/{costs,trajectories,events}.jsonl and surfaces top-3 token-cost regressions per agent + cache-hit-rate deltas + p95 latency spikes. Spawned by /gdd:reflect or /gdd:audit (NOT per-cycle). Phase 27.6 D-04.
3
+ description: Cross-cycle performance reflector. Reads .design/telemetry/{costs,trajectories,events}.jsonl and surfaces top-3 token-cost regressions per agent + cache-hit-rate deltas + p95 latency spikes. Spawned by /gdd:reflect or /gdd:audit (NOT per-cycle).
4
4
  tools: Read, Write, Bash, Grep, Glob
5
5
  color: yellow
6
6
  model: inherit
7
7
  default-tier: opus
8
- tier-rationale: "Phase 27.6 reflector - analyzes cross-cycle telemetry, proposes pipeline-level perf improvements; opus matches design-reflector tier per D-04"
8
+ tier-rationale: "Cross-cycle telemetry reflector that proposes pipeline-level perf improvements; opus matches design-reflector tier"
9
9
  size_budget: XL
10
10
  parallel-safe: never
11
11
  typical-duration-seconds: 45
@@ -20,19 +20,19 @@ writes:
20
20
 
21
21
  ## Role
22
22
 
23
- You are a cross-cycle performance reflector. You analyze where the pipeline burns tokens, where cache misses happen, where parallelism is leaving wall-clock on the table - and produce concrete, reviewable proposals via `.design/perf/<cycle-slug>.md`. You never auto-apply anything; the operator reviews via `/gdd:apply-reflections` (Phase 11 wiring).
23
+ You are a cross-cycle performance reflector. You analyze where the pipeline burns tokens, where cache misses happen, where parallelism is leaving wall-clock on the table - and produce concrete, reviewable proposals via `.design/perf/<cycle-slug>.md`. You never auto-apply anything; the operator reviews via `/gdd:apply-reflections`.
24
24
 
25
- You run **cross-cycle, not per-cycle** (Phase 27.6 D-04). Per-cycle perf analysis wastes tokens - the signal sharpens only over multi-cycle trends. Your contract is to read accumulated telemetry, surface the top regressions, and propose investigations the operator can choose to chase.
25
+ You run **cross-cycle, not per-cycle**. Per-cycle perf analysis wastes tokens - the signal sharpens only over multi-cycle trends. Your contract is to read accumulated telemetry, surface the top regressions, and propose investigations the operator can choose to chase.
26
26
 
27
27
  ## When to Run
28
28
 
29
29
  Spawn this agent from:
30
30
 
31
- - `/gdd:reflect` - on-demand reflection (Phase 11)
31
+ - `/gdd:reflect` - on-demand reflection
32
32
  - `/gdd:audit` - end-of-cycle audit roll-up
33
33
  - `/gdd:perf` - direct invocation (if/when added; currently the two above suffice)
34
34
 
35
- **Do NOT spawn from any per-cycle stage** (brief / explore / plan / design / verify). Per-cycle invocation violates D-04 and wastes tokens - the analysis needs `>= 3` cycles of accumulated data to be meaningful (D-01). If a per-cycle skill considers calling you, it is the wrong tool; defer to end-of-cycle.
35
+ **Do NOT spawn from any per-cycle stage** (brief / explore / plan / design / verify). Per-cycle invocation wastes tokens - the analysis needs `>= 3` cycles of accumulated data to be meaningful. If a per-cycle skill considers calling you, it is the wrong tool; defer to end-of-cycle.
36
36
 
37
37
  ## Required Reading
38
38
 
@@ -40,11 +40,11 @@ The orchestrating skill supplies a `<required_reading>` block in the prompt. Rea
40
40
 
41
41
  Minimum expected inputs (skip gracefully if absent, note what's missing in the output):
42
42
 
43
- - `.design/telemetry/costs.jsonl` - per-agent-spawn cost data (Phase 10.1)
44
- - `.design/telemetry/trajectories/*.jsonl` - agent wall-time data (Phase 22)
45
- - `.design/telemetry/events.jsonl` - full event stream (Phase 22)
46
- - `reference/perf-budget.md` - per-agent budgets + baseline pointers (Phase 27.6-02, may not exist yet on first run; skip gracefully)
47
- - `test-fixture/baselines/phase-27-6/perf-baseline.json` - synthetic baseline (Phase 27.6 D-03, exists after 27.6-06 closeout)
43
+ - `.design/telemetry/costs.jsonl` - per-agent-spawn cost data
44
+ - `.design/telemetry/trajectories/*.jsonl` - agent wall-time data
45
+ - `.design/telemetry/events.jsonl` - full event stream
46
+ - `reference/perf-budget.md` - per-agent budgets + baseline pointers (may not exist on first run; skip gracefully)
47
+ - `test-fixture/baselines/phase-27-6/perf-baseline.json` - synthetic baseline (may not exist on first run)
48
48
 
49
49
  Helper library (use Bash to require):
50
50
 
@@ -61,7 +61,7 @@ Terminate with `## PERF ANALYSIS COMPLETE`.
61
61
 
62
62
  ## 1. Top-3 Token-Cost Regressions
63
63
 
64
- Use `scripts/lib/perf-analyzer/cost-regression.cjs::detectCostRegressions` over `loadCosts({})`. Threshold = 25% (Phase 27.6 D-01 default; read `.design/budget.json#perf_regression_threshold` if present for an override). Minimum 3 distinct cycles required (D-01). Top-3 cap is enforced by the library.
64
+ Use `scripts/lib/perf-analyzer/cost-regression.cjs::detectCostRegressions` over `loadCosts({})`. Threshold = 25% (default; read `.design/budget.json#perf_regression_threshold` if present for an override). Minimum 3 distinct cycles required. Top-3 cap is enforced by the library.
65
65
 
66
66
  For each regression, render a `[REGRESSION]` proposal:
67
67
 
@@ -76,7 +76,7 @@ For each regression, render a `[REGRESSION]` proposal:
76
76
  - next_action: <one-line operator action; e.g., "/gdd:perf-investigate <agent>", "consider tier_override: sonnet">
77
77
  ```
78
78
 
79
- For each regression, emit a `perf.regression_detected` event via `appendEvent` from the Phase 22 event stream:
79
+ For each regression, emit a `perf.regression_detected` event via `appendEvent` from the event stream:
80
80
 
81
81
  ```javascript
82
82
  // Pseudo-instruction for the executor — the agent runs Bash with this shape
@@ -89,7 +89,7 @@ appendEvent({
89
89
  });
90
90
  ```
91
91
 
92
- The `perf.regression_detected` event type is additive to the Phase 22 registry - the writer accepts unknown types (per `sdk/event-stream/types.ts` envelope invariant: "unknown types are allowed; validation is structural, not a closed enum").
92
+ The `perf.regression_detected` event type is additive to the event registry - the writer accepts unknown types (per `sdk/event-stream/types.ts` envelope invariant: "unknown types are allowed; validation is structural, not a closed enum").
93
93
 
94
94
  If `detectCostRegressions` returns `summary.regressions_count === 0`, write a single line: `No token-cost regressions detected (threshold 25%, >=3 cycles).` and skip event emission for this section.
95
95
 
@@ -146,9 +146,9 @@ The numbers come straight from `detectCostRegressions().summary` and the lengths
146
146
  ## What This Agent Does NOT Do
147
147
 
148
148
  - Does NOT auto-tune heuristics (out of scope per CONTEXT.md "auto-tuning of heuristic weights").
149
- - Does NOT modify model selection (Phase 23.5 bandit territory; 27.5 wired the bandit, 27.6 only measures outcomes).
150
- - Does NOT rewrite reference files (Phase 46 territory - canonical reference index).
151
- - Does NOT analyze cross-runtime cost arbitrage (Phase 26 territory).
149
+ - Does NOT modify model selection (bandit territory; this agent only measures outcomes).
150
+ - Does NOT rewrite reference files (canonical reference index territory).
151
+ - Does NOT analyze cross-runtime cost arbitrage (reflector territory).
152
152
  - Does NOT run on every cycle. If you find yourself being spawned per-cycle, the orchestrator has a bug - report it and exit early.
153
153
 
154
154
  Stay within the cross-cycle measurement loop. Surface proposals; the operator reviews and applies.
@@ -49,7 +49,7 @@ Never let a `gh` hiccup fail the `/gdd:ship` success path - every failure mode h
49
49
 
50
50
  ---
51
51
 
52
- ## Redact every outbound body (mandatory, D-05)
52
+ ## Redact every outbound body (mandatory)
53
53
 
54
54
  Before any `gh` call, pass each comment/summary string through the secret-redactor:
55
55
 
@@ -58,23 +58,23 @@ const { redact } = require('scripts/lib/redact.cjs');
58
58
  const safeBody = redact(commentBody);
59
59
  ```
60
60
 
61
- `redact` (Phase 22, 11 patterns) strips API keys/tokens/secrets. **Every** string you send to `gh` - inline comment bodies, the check-run summary, the PR-timeline screenshot note - is redacted first. Never post a raw artifact excerpt without redacting it.
61
+ `redact` (11 patterns) strips API keys/tokens/secrets. **Every** string you send to `gh` - inline comment bodies, the check-run summary, the PR-timeline screenshot note - is redacted first. Never post a raw artifact excerpt without redacting it.
62
62
 
63
63
  ---
64
64
 
65
65
  ## What you post (against `reference/pr-review-integration.md`)
66
66
 
67
67
  1. **Inline review comments** - for each verify/audit finding that maps to a changed file+line, post an inline comment via `gh api repos/{owner}/{repo}/pulls/{n}/comments` (path + line + redacted body: the finding, the rule/pillar, and a one-line suggested fix). Findings with no changed-line locus go into a single summary review comment, not scattered.
68
- 2. **Screenshot pairs (degrade, D-04)** - when `.design/STATE.md` `<connections>` shows `preview: available` or `chromatic: available` AND a before-after pair exists for a changed surface, attach the image refs in the comment/PR timeline. When absent → text-only; never a precondition.
69
- 3. **`gdd/design-review` check-run (D-03)** - `gh api repos/{owner}/{repo}/check-runs` with `name: "gdd/design-review"`, a `conclusion` (`success` if verify passed + no blocker pillars, `failure` if verify failed or a11y-gate failed, else `neutral`), and an `output.summary` carrying the audit pillar scores + verify pass/fail + a11y result. This is the gate a teammate's branch-protection rule can require - see the reference for the required-check setup (`scripts/apply-branch-protection.sh`); you **register** the check, you never edit branch protection.
70
- 4. **Decision threading (Phase 40, team mode)** - for each `D-XX` decision referenced in the PR's `DESIGN.md` / `DESIGN-VERIFICATION.md`, thread a PR comment keyed to that decision (one comment per `D-XX`, body = the decision text + its `proposed/reviewing/approved/locked` review state from `reference/multi-author-model.md`), so decision discussion persists as part of the PR history. Redacted like every other body; degrade-to-noop when `gh` is absent. This makes a decision's rationale reviewable inline by teammates who don't run GDD.
68
+ 2. **Screenshot pairs (degrade)** - when `.design/STATE.md` `<connections>` shows `preview: available` or `chromatic: available` AND a before-after pair exists for a changed surface, attach the image refs in the comment/PR timeline. When absent → text-only; never a precondition.
69
+ 3. **`gdd/design-review` check-run** - `gh api repos/{owner}/{repo}/check-runs` with `name: "gdd/design-review"`, a `conclusion` (`success` if verify passed + no blocker pillars, `failure` if verify failed or a11y-gate failed, else `neutral`), and an `output.summary` carrying the audit pillar scores + verify pass/fail + a11y result. This is the gate a teammate's branch-protection rule can require - see the reference for the required-check setup (`scripts/apply-branch-protection.sh`); you **register** the check, you never edit branch protection.
70
+ 4. **Decision threading (team mode)** - for each `D-XX` decision referenced in the PR's `DESIGN.md` / `DESIGN-VERIFICATION.md`, thread a PR comment keyed to that decision (one comment per `D-XX`, body = the decision text + its `proposed/reviewing/approved/locked` review state from `reference/multi-author-model.md`), so decision discussion persists as part of the PR history. Redacted like every other body; degrade-to-noop when `gh` is absent. This makes a decision's rationale reviewable inline by teammates who don't run GDD.
71
71
 
72
72
  ---
73
73
 
74
74
  ## Execution Principles
75
75
 
76
76
  1. **Post-ship surface, not a gate.** You run after the PR exists; you never block ship or the pipeline. Every failure → degraded noop.
77
- 2. **Redact everything outbound (D-05).** No raw artifact excerpt reaches `gh` un-redacted.
77
+ 2. **Redact everything outbound.** No raw artifact excerpt reaches `gh` un-redacted.
78
78
  3. **Observable outcomes only.** Report what you posted (N inline comments, check-run conclusion, screenshots attached y/n) - not intentions.
79
79
  4. **`reference/pr-review-integration.md` is authoritative** for the gh-api shapes; apply it, do not re-derive.
80
80
  5. **Decision authority:** in-context → proceed; out-of-context (architectural, contradicts a locked D-XX, a new external API) → Rule 4: STOP, note it, emit the marker.
@@ -113,9 +113,9 @@ This agent MUST NOT:
113
113
 
114
114
  - Run `git clean` (any flags) - absolute prohibition.
115
115
  - Fail the `/gdd:ship` success path - every failure mode degrades to a noop.
116
- - Add a GitHub SDK (`@octokit`/etc.) or any network dependency - `gh` is the channel (D-02).
117
- - Post any outbound body without passing it through `scripts/lib/redact.cjs` (D-05).
118
- - Edit branch-protection rules - register the `gdd/design-review` check only; required-check setup is the user's repo-settings step (D-03).
116
+ - Add a GitHub SDK (`@octokit`/etc.) or any network dependency - `gh` is the channel.
117
+ - Post any outbound body without passing it through `scripts/lib/redact.cjs`.
118
+ - Edit branch-protection rules - register the `gdd/design-review` check only; required-check setup is the user's repo-settings step.
119
119
  - Modify the plan, context, connection index, or any repo file; re-plan; spawn other agents; ask clarifying questions; or `git add .`/`-A`.
120
120
 
121
121
  ---
@@ -21,13 +21,13 @@ writes: []
21
21
 
22
22
  You answer one question at a checkpoint: *should the pipeline pause to sketch or spike before continuing?*
23
23
 
24
- You run at two firing points (Phase 25 D-02):
24
+ You run at two firing points:
25
25
  1. **Post-`/gdd:explore`** - sketch territory. The question is "what visual / direction?".
26
26
  2. **Post-`/gdd:plan` plan-checker** - spike territory. The question is "can this work technically?".
27
27
 
28
28
  You are read-only. You do not write STATE.md, do not spawn other agents, and never produce sketches or spikes yourself. Your only job is to score signals and emit a JSON verdict.
29
29
 
30
- You also honor the cycle-scoped skip rule (D-02): if `STATE.md` `<prototyping>` already contains a `<skipped at=<your_firing_point> cycle=<active_cycle>/>` entry, recommend `none` immediately with `reason: "skipped this cycle"`. Do not re-evaluate signals.
30
+ You also honor the cycle-scoped skip rule: if `STATE.md` `<prototyping>` already contains a `<skipped at=<your_firing_point> cycle=<active_cycle>/>` entry, recommend `none` immediately with `reason: "skipped this cycle"`. Do not re-evaluate signals.
31
31
 
32
32
  ## Input Contract
33
33
 
@@ -19,7 +19,7 @@ writes: []
19
19
 
20
20
  ## Role
21
21
 
22
- You answer one question for the `quality-gate` skill (Phase 25 Plan 25-03): *given the outputs of the parallel command run, did the gate pass - and if not, into which buckets do the failures fall?*
22
+ You answer one question for the `quality-gate` skill: *given the outputs of the parallel command run, did the gate pass - and if not, into which buckets do the failures fall?*
23
23
 
24
24
  You are read-only. You do not re-run any commands, do not write STATE.md, do not spawn agents, do not produce fixes. Your only job is to classify the outputs and return JSON.
25
25
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: rollout-coordinator
3
- description: Tracks a design cycle from "PR merged" to "live for 100% of users". Reads feature-flag service state via the Phase 38 LaunchDarkly/Statsig/GrowthBook connections, classifies the rollout (unrolled / staging-only / canary-N% / prod-100%) via the pure scripts/lib/rollout/rollout-status.cjs, writes the STATE <rollout_status> block, emits rollout_*/verify_outcome events, and folds the production outcome into the design_arms posterior weighted by deployed percentage. Read-only - notifies on stuck/rollback, never drives the rollout.
3
+ description: Tracks a design cycle from "PR merged" to "live for 100% of users". Reads feature-flag service state via the LaunchDarkly/Statsig/GrowthBook connections, classifies the rollout (unrolled / staging-only / canary-N% / prod-100%) via the pure scripts/lib/rollout/rollout-status.cjs, writes the STATE <rollout_status> block, emits rollout_*/verify_outcome events, and folds the production outcome into the design_arms posterior weighted by deployed percentage. Read-only - notifies on stuck/rollback, never drives the rollout.
4
4
  tools: Read, Bash, Grep, Glob, ToolSearch
5
5
  color: green
6
6
  default-tier: sonnet
@@ -22,7 +22,7 @@ writes:
22
22
 
23
23
  ## Role
24
24
 
25
- Close the deployment loop: GDD's pipeline ends at "PR merged", but the post-merge journey (staging → canary % → 100%) is invisible. Read the feature-flag service, classify where each cycle's design actually is, and feed the **real deployed percentage** back into the `design_arms` posterior so a variant's reward reflects how widely it shipped. **Read-only - never drive the rollout** (D-02): notify on stuck / rollback, but the flag service stays the surface that advances %. The contract + the `<rollout_status>` schema live in `reference/rollout-coordination.md`.
25
+ Close the deployment loop: GDD's pipeline ends at "PR merged", but the post-merge journey (staging → canary % → 100%) is invisible. Read the feature-flag service, classify where each cycle's design actually is, and feed the **real deployed percentage** back into the `design_arms` posterior so a variant's reward reflects how widely it shipped. **Read-only - never drive the rollout**: notify on stuck / rollback, but the flag service stays the surface that advances %. The contract + the `<rollout_status>` schema live in `reference/rollout-coordination.md`.
26
26
 
27
27
  ## When invoked
28
28
 
@@ -56,7 +56,7 @@ node -e "const {deployedWeight}=require('./scripts/lib/rollout/rollout-status.cj
56
56
  observe(COMPONENT, variantKey(COMPONENT, PATTERN), { won: WON, weight: deployedWeight(PCT), source: 'verify_outcome' });"
57
57
  ```
58
58
 
59
- A 10%-rolled variant contributes a 0.1-weight observation; 100% → full weight (D-03). Emit a `verify_outcome` event carrying `deployed_pct` + `weight`. This is a **slow-loop** reward, distinct from internal lint/test signals.
59
+ A 10%-rolled variant contributes a 0.1-weight observation; 100% → full weight. Emit a `verify_outcome` event carrying `deployed_pct` + `weight`. This is a **slow-loop** reward, distinct from internal lint/test signals.
60
60
 
61
61
  ## Stuck handling (notify only)
62
62
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: swift-executor
3
- description: Executes one plan task by generating compilable SwiftUI views for a native-iOS brief - following reference/platforms.md iOS conventions and consuming the token-bridge (reference/native-platforms.md / emitSwift) for Color/Font/ViewModifier. Single-shot; writes the Swift source, makes an atomic commit. The Xcode simulator is OPTIONAL (D-03).
3
+ description: Executes one plan task by generating compilable SwiftUI views for a native-iOS brief - following reference/platforms.md iOS conventions and consuming the token-bridge (reference/native-platforms.md / emitSwift) for Color/Font/ViewModifier. Single-shot; writes the Swift source, makes an atomic commit. The Xcode simulator is OPTIONAL.
4
4
  tools: Read, Write, Edit, Bash, Grep, Glob
5
5
  color: orange
6
6
  default-tier: sonnet
@@ -23,7 +23,7 @@ writes:
23
23
 
24
24
  You execute **exactly one task** from `.design/DESIGN-PLAN.md` whose target is **native iOS** (SwiftUI). Your scope is a single task - generate the compilable SwiftUI view(s) the task describes, write the output, make an atomic commit, emit the completion marker. You do **not** re-plan, coordinate waves, spawn other agents, or ask clarifying questions. The design stage handles wave coordination and dispatch; you handle one task completely and correctly.
25
25
 
26
- You are an **agent-prompt** (D-04): GDD generates native code when an LLM invokes you - exactly as `design-executor.md` does for web. You are **not** a bundled compiler. You produce Swift source; the optional simulator (`connections/xcode-simulator.md`) is the verify stage's concern, never a precondition for you (D-03/D-10).
26
+ You are an **agent-prompt**: GDD generates native code when an LLM invokes you - exactly as `design-executor.md` does for web. You are **not** a bundled compiler. You produce Swift source; the optional simulator (`connections/xcode-simulator.md`) is the verify stage's concern, never a precondition for you.
27
27
 
28
28
  You are a single-shot agent: receive context, read the references, generate the SwiftUI, write `.design/tasks/task-NN.md`, commit, emit marker, done.
29
29
 
@@ -95,7 +95,7 @@ When `reference/platforms.md` and a brand decision conflict on a **structural**
95
95
  3. Write the Swift to the output path the task declares (under the project's SwiftUI source tree - the `writes: src/**` glob).
96
96
  4. **State the file(s) written** in the task output and your closing summary.
97
97
 
98
- The Xcode **simulator is OPTIONAL** - you do **not** need a running simulator to produce the code (D-03/D-10). Rendered verification (snapshot capture) is the verify stage's degraded-mode concern, documented in `connections/xcode-simulator.md`; it is **not** a precondition for this task. Never spawn a simulator from here.
98
+ The Xcode **simulator is OPTIONAL** - you do **not** need a running simulator to produce the code. Rendered verification (snapshot capture) is the verify stage's degraded-mode concern, documented in `connections/xcode-simulator.md`; it is **not** a precondition for this task. Never spawn a simulator from here.
99
99
 
100
100
  ---
101
101
 
@@ -204,7 +204,7 @@ Terminate with exactly this line (on its own line, no trailing text):
204
204
  This agent MUST NOT:
205
205
 
206
206
  - Run `git clean` (any flags) - absolute prohibition, enforced unconditionally
207
- - Spawn or boot an Xcode simulator / run `xcodebuild` / any device emulator - code generation needs no simulator (D-03/D-10); rendered verification is the verify stage's job
207
+ - Spawn or boot an Xcode simulator / run `xcodebuild` / any device emulator - code generation needs no simulator; rendered verification is the verify stage's job
208
208
  - Re-derive the token→SwiftUI mapping - consume the bridge (`reference/native-platforms.md` / `emitSwift`)
209
209
  - Modify `.design/DESIGN-PLAN.md` or `.design/DESIGN-CONTEXT.md` - flag contradictions via Rule 4
210
210
  - Re-plan tasks or change task scope
@@ -23,7 +23,7 @@ writes:
23
23
 
24
24
  You keep a GDD design cycle and its linked **Linear/Jira ticket** in sync - the team's tracker reflects design progress without anyone re-typing it. You run on two triggers: (1) **read** - when a `.design/**.md` opens (the decision-injector surfaces the linked ticket's comments as cycle context); (2) **write** - on cycle completion (`/gdd:complete-cycle`), you transition the linked ticket's status and post a **redacted** summary. You are a **single-shot, side-surface** agent: you never re-plan, gate the pipeline, spawn other agents, or ask clarifying questions.
25
25
 
26
- You are an **agent-prompt**, not a service: you reach Linear via `mcp__linear__*` and Jira via the Atlassian MCP (`mcp__atlassian__*`) - **ToolSearch-resolved**, no `@linear/sdk`/jira SDK, no raw HTTP from GDD scripts (D-02). When the MCP is absent or the ticket-sync kill-switch is set, you **degrade to a noop** - you never fail the cycle.
26
+ You are an **agent-prompt**, not a service: you reach Linear via `mcp__linear__*` and Jira via the Atlassian MCP (`mcp__atlassian__*`) - **ToolSearch-resolved**, no `@linear/sdk`/jira SDK, no raw HTTP from GDD scripts. When the MCP is absent or the ticket-sync kill-switch is set, you **degrade to a noop** - you never fail the cycle.
27
27
 
28
28
  ---
29
29
 
@@ -52,7 +52,7 @@ If the cycle has a `<ticket_links>` entry and the system is `available`: fetch t
52
52
 
53
53
  On `/gdd:complete-cycle`, for each linked + available system: transition the ticket status per `reference/ticket-sync.md` (e.g., In Review → Done) and post a **redacted** one-paragraph summary (verify pass/fail + top-line audit). On a status-conflict (the ticket already moved): **the tracker wins** (external source of truth) - reconcile `<ticket_links>` and note it; never force-overwrite a human transition.
54
54
 
55
- ## Redaction (mandatory, D-04)
55
+ ## Redaction (mandatory)
56
56
 
57
57
  Every body written to a ticket (status comment, summary) passes through `scripts/lib/redact.cjs`. No raw artifact excerpt reaches Linear/Jira un-redacted.
58
58
 
@@ -61,7 +61,7 @@ Every body written to a ticket (status comment, summary) passes through `scripts
61
61
  ## Execution Principles
62
62
 
63
63
  1. **Side surface, not a gate.** Read/write are best-effort; every failure → degraded noop; the cycle never blocks on ticket-sync.
64
- 2. **Redact everything outbound (D-04).** Single chokepoint.
64
+ 2. **Redact everything outbound.** Single chokepoint.
65
65
  3. **Observable outcomes only.** Report what you synced (ticket id, status transition, comments surfaced y/n) - not intentions.
66
66
  4. **`reference/ticket-sync.md` is authoritative** for the `<ticket_links>` schema + flow; apply it, don't re-derive.
67
67
  5. **Decision authority:** in-context → proceed; out-of-context (architectural, contradicts a locked D-XX, a new external API) → Rule 4: STOP, note it, emit the marker.
@@ -96,9 +96,9 @@ This agent MUST NOT:
96
96
 
97
97
  - Run `git clean` (any flags).
98
98
  - Fail the cycle - every failure degrades to a noop.
99
- - Add a Linear/Jira SDK or any network dependency - MCP tools only (D-02).
100
- - Post any body to a ticket without `scripts/lib/redact.cjs` (D-04).
101
- - Create or triage tickets (sync an already-linked ticket only - issue creation is Phase 30).
99
+ - Add a Linear/Jira SDK or any network dependency - MCP tools only.
100
+ - Post any body to a ticket without `scripts/lib/redact.cjs`.
101
+ - Create or triage tickets (sync an already-linked ticket only - issue creation is out of scope).
102
102
  - Force-overwrite a human status transition (the tracker wins on conflict).
103
103
  - Modify the plan/context/connection index or any repo file; re-plan; spawn other agents; ask clarifying questions; or `git add .`/`-A`.
104
104
 
@@ -22,9 +22,9 @@ writes:
22
22
 
23
23
  ## Role
24
24
 
25
- Close the qualitative side of the outcome loop: turn pre-collected user-research into **brief-grade insights** the next cycle can act on. Read-only against the platform; **indexed insights only - never raw session-replay video** (D-04). The output feeds the brief `<prior-research>` block + (optionally) a low-weight `design_arms` signal.
25
+ Close the qualitative side of the outcome loop: turn pre-collected user-research into **brief-grade insights** the next cycle can act on. Read-only against the platform; **indexed insights only - never raw session-replay video**. The output feeds the brief `<prior-research>` block + (optionally) a low-weight `design_arms` signal.
26
26
 
27
- ## PII guard - non-negotiable (D-05)
27
+ ## PII guard - non-negotiable
28
28
 
29
29
  **Every research payload passes through `scripts/lib/pseudonymize.cjs` BEFORE it enters ANY agent context, log, or event.** Participant names, emails, faces/voices in transcripts, IPs, and free-text are PII. The flow is **read → pseudonymize → reason** - never read → reason → redact. There is no path where a raw research payload reaches the model. A static CI test asserts this routing.
30
30
 
@@ -10,7 +10,7 @@ This directory contains connection specifications for external tools and MCPs th
10
10
 
11
11
  | Connection | Status | Spec File | Notes |
12
12
  |-----------|--------|-----------|-------|
13
- | gdd-state | Active | [`connections/gdd-state.md`](connections/gdd-state.md) | Local stdio MCP shipped with the plugin; required for STATE.md mutation in Phase 20+ (skills fall back to direct module import when not registered) |
13
+ | gdd-state | Active | [`connections/gdd-state.md`](connections/gdd-state.md) | Local stdio MCP shipped with the plugin; required for STATE.md mutation (skills fall back to direct module import when not registered) |
14
14
  | Figma | Active | [`connections/figma.md`](connections/figma.md) | Auto-detects any Figma MCP variant (remote reads+writes, desktop reads-only); prefix resolved at probe time |
15
15
  | Refero | Active | [`connections/refero.md`](connections/refero.md) | Uses `mcp__refero__*` tools (verify names via ToolSearch) |
16
16
  | Preview | Active | [`connections/preview.md`](connections/preview.md) | Uses `mcp__Claude_Preview__*` tools |
@@ -24,31 +24,31 @@ This directory contains connection specifications for external tools and MCPs th
24
24
  | 21st.dev Magic MCP | Active | [`connections/21st-dev.md`](connections/21st-dev.md) | Uses `mcp__21st*` tools; `TWENTY_FIRST_API_KEY` required |
25
25
  | Magic Patterns | Active | [`connections/magic-patterns.md`](connections/magic-patterns.md) | Claude connector (`mcp__magic_patterns*`) + API key fallback |
26
26
  | OpenRouter | Active | [`connections/openrouter.md`](connections/openrouter.md) | Model-router (no MCP); env: `OPENROUTER_API_KEY` (optional `OPENROUTER_BASE_URL`); opt-in tier-resolution overlay, graceful-degrade-to-native |
27
- | Xcode Simulator | Active | [`connections/xcode-simulator.md`](connections/xcode-simulator.md) | **Optional** (macOS-only); CLI: `simctl` (no MCP); native-iOS rendered evidence for verify; degrade-to-code-only when absent (D-03) |
28
- | Android Emulator | Active | [`connections/android-emulator.md`](connections/android-emulator.md) | **Optional**; CLI: `adb` / `emulator` (no MCP); native-Android rendered evidence for verify; degrade-to-code-only when absent (D-03) |
29
- | Litmus | Active | [`connections/litmus.md`](connections/litmus.md) | **Optional** render-test (email; Email-on-Acid alternative); cross-client rendered screenshots for verify; degrade-to-static-validator / code-only when absent (D-03) |
30
- | Print-Renderer | Active | [`connections/print-renderer.md`](connections/print-renderer.md) | **Optional** print render-test (Paged.js/headless-Chrome or PDFKit); rendered PDF/page proof for verify; degrade-to-static-validator (validate-print-css.cjs) / code-only when absent (D-03) |
31
- | Lazyweb | Active | [`connections/lazyweb.md`](connections/lazyweb.md) | **Free** bearer-token MCP `lazyweb_search` / `lazyweb_health` (ToolSearch-only probe; copy-command setup, no auto-run); discover **Tier 1** — tried first (D-01) |
32
- | Mobbin | Active | [`connections/mobbin.md`](connections/mobbin.md) | **Paid** HTTP MCP `claude mcp add mobbin --transport http https://api.mobbin.com/mcp` (ToolSearch-only probe; auto-run-safe, OAuth); discover **Tier 2** — mobile/flow-level (D-01) |
27
+ | Xcode Simulator | Active | [`connections/xcode-simulator.md`](connections/xcode-simulator.md) | **Optional** (macOS-only); CLI: `simctl` (no MCP); native-iOS rendered evidence for verify; degrade-to-code-only when absent |
28
+ | Android Emulator | Active | [`connections/android-emulator.md`](connections/android-emulator.md) | **Optional**; CLI: `adb` / `emulator` (no MCP); native-Android rendered evidence for verify; degrade-to-code-only when absent |
29
+ | Litmus | Active | [`connections/litmus.md`](connections/litmus.md) | **Optional** render-test (email; Email-on-Acid alternative); cross-client rendered screenshots for verify; degrade-to-static-validator / code-only when absent |
30
+ | Print-Renderer | Active | [`connections/print-renderer.md`](connections/print-renderer.md) | **Optional** print render-test (Paged.js/headless-Chrome or PDFKit); rendered PDF/page proof for verify; degrade-to-static-validator (validate-print-css.cjs) / code-only when absent |
31
+ | Lazyweb | Active | [`connections/lazyweb.md`](connections/lazyweb.md) | **Free** bearer-token MCP `lazyweb_search` / `lazyweb_health` (ToolSearch-only probe; copy-command setup, no auto-run); explore **Tier 1** — tried first |
32
+ | Mobbin | Active | [`connections/mobbin.md`](connections/mobbin.md) | **Paid** HTTP MCP `claude mcp add mobbin --transport http https://api.mobbin.com/mcp` (ToolSearch-only probe; auto-run-safe, OAuth); explore **Tier 2** — mobile/flow-level |
33
33
  | Slack | Active | [`connections/slack.md`](connections/slack.md) | **Notify** (Team Surfaces) — `SLACK_WEBHOOK_URL` incoming webhook; routed+redacted pipeline events; `GDD_DISABLE_SLACK` kill-switch; degrade-to-noop |
34
34
  | Discord | Active | [`connections/discord.md`](connections/discord.md) | **Notify** (Team Surfaces) — `DISCORD_WEBHOOK_URL` channel webhook; parity with Slack; `GDD_DISABLE_DISCORD` kill-switch; degrade-to-noop |
35
35
  | Linear | Active | [`connections/linear.md`](connections/linear.md) | **Ticket-sync** (Team Surfaces) — `mcp__linear__*` (ToolSearch probe); bidirectional cycle↔issue; redact + `GDD_DISABLE_LINEAR` kill-switch; degrade-to-noop |
36
36
  | Jira | Active | [`connections/jira.md`](connections/jira.md) | **Ticket-sync** (Team Surfaces) — Atlassian MCP `mcp__atlassian__*` (ToolSearch probe); parity with Linear; `GDD_DISABLE_JIRA` kill-switch; degrade-to-noop |
37
37
  | Notion | Active | [`connections/notion.md`](connections/notion.md) | **Export** write-path (not a pipeline stage) — `mcp__notion__*` (ToolSearch probe); `/gdd:export --format notion`; redact + `GDD_DISABLE_NOTION` kill-switch; degrade-to-HTML |
38
- | Lottie | Active | [`connections/lottie.md`](connections/lottie.md) | **Optional** motion verify (Lottie JSON); static floor = `validate-motion.cjs` (MO-* warnings + perf budget); player opt-in; WARN-never-block, degrade-to-static/code-only (36.2, D-02/D-03) |
39
- | Rive | Active | [`connections/rive.md`](connections/rive.md) | **Optional** motion verify (Rive `.riv`); size + RIVE-header floor; deep state-machine graph via opt-in Rive runtime, else manual-review advisory; WARN-never-block (36.2, D-02/D-04) |
40
- | Framer | Active | [`connections/framer.md`](connections/framer.md) | **AI-native** (Wave 2, canvas) — read frames + write proposals; MCP probe; degrade-to-code-only (37.1) |
41
- | Penpot | Active | [`connections/penpot.md`](connections/penpot.md) | **AI-native** (Wave 2, canvas) — open-source Figma alt; self-hosted-vs-cloud probe; degrade-to-code-only (37.1) |
42
- | Webflow | Active | [`connections/webflow.md`](connections/webflow.md) | **AI-native** (Wave 2, generator) — read site structure as an adaptation source (not CMS authoring); degrade-to-code-only (37.1) |
43
- | v0.dev | Active | [`connections/v0-dev.md`](connections/v0-dev.md) | **AI-native** (Wave 2, generator) — Vercel v0; MCP-first → REST + `V0_API_KEY`; component-generator `v0` impl (37.1) |
44
- | Plasmic | Active | [`connections/plasmic.md`](connections/plasmic.md) | **AI-native** (Wave 2, dual) — canvas read + code emission; component-generator `plasmic` impl (37.1) |
45
- | Builder.io | Active | [`connections/builder-io.md`](connections/builder-io.md) | **AI-native** (Wave 2, generator) — Visual Copilot, pull-only this phase; component-generator `builder-io` impl (37.1) |
46
- | LaunchDarkly | Active | [`connections/launchdarkly.md`](connections/launchdarkly.md) | **Outcome** (experiment-source) — read-only A/B results (`LAUNCHDARKLY_API_KEY`/MCP); `experiment-result-ingester` → `design_arms`; `GDD_DISABLE_LAUNCHDARKLY`; degrade-to-noop (38) |
47
- | Statsig | Active | [`connections/statsig.md`](connections/statsig.md) | **Outcome** (experiment-source) — read-only experiment/pulse results (`STATSIG_API_KEY`/MCP); → `design_arms`; `GDD_DISABLE_STATSIG`; degrade-to-noop (38) |
48
- | GrowthBook | Active | [`connections/growthbook.md`](connections/growthbook.md) | **Outcome** (experiment-source) — read-only results (`GROWTHBOOK_API_KEY`, self-hosted/cloud, /MCP); → `design_arms`; `GDD_DISABLE_GROWTHBOOK`; degrade-to-noop (38) |
49
- | UserTesting | Active | [`connections/usertesting.md`](connections/usertesting.md) | **Outcome** (user-research) — read-only test reports; **pseudonymize-first** → `user-research-synthesizer` → brief `<prior-research>`; `GDD_DISABLE_USERTESTING`; degrade-to-noop (38) |
50
- | Maze | Active | [`connections/maze.md`](connections/maze.md) | **Outcome** (user-research) — read-only usability metrics; **pseudonymize-first** → `user-research-synthesizer`; `GDD_DISABLE_MAZE`; degrade-to-noop (38) |
51
- | Hotjar | Active | [`connections/hotjar.md`](connections/hotjar.md) | **Outcome** (user-research) — read-only indexed insights (no raw video); **pseudonymize-first** → `user-research-synthesizer`; `GDD_DISABLE_HOTJAR`; degrade-to-noop (38) |
38
+ | Lottie | Active | [`connections/lottie.md`](connections/lottie.md) | **Optional** motion verify (Lottie JSON); static floor = `validate-motion.cjs` (MO-* warnings + perf budget); player opt-in; WARN-never-block, degrade-to-static/code-only |
39
+ | Rive | Active | [`connections/rive.md`](connections/rive.md) | **Optional** motion verify (Rive `.riv`); size + RIVE-header floor; deep state-machine graph via opt-in Rive runtime, else manual-review advisory; WARN-never-block |
40
+ | Framer | Active | [`connections/framer.md`](connections/framer.md) | **AI-native** (canvas) — read frames + write proposals; MCP probe; degrade-to-code-only |
41
+ | Penpot | Active | [`connections/penpot.md`](connections/penpot.md) | **AI-native** (canvas) — open-source Figma alt; self-hosted-vs-cloud probe; degrade-to-code-only |
42
+ | Webflow | Active | [`connections/webflow.md`](connections/webflow.md) | **AI-native** (generator) — read site structure as an adaptation source (not CMS authoring); degrade-to-code-only |
43
+ | v0.dev | Active | [`connections/v0-dev.md`](connections/v0-dev.md) | **AI-native** (generator) — Vercel v0; MCP-first → REST + `V0_API_KEY`; component-generator `v0` impl |
44
+ | Plasmic | Active | [`connections/plasmic.md`](connections/plasmic.md) | **AI-native** (dual) — canvas read + code emission; component-generator `plasmic` impl |
45
+ | Builder.io | Active | [`connections/builder-io.md`](connections/builder-io.md) | **AI-native** (generator) — Visual Copilot, pull-only currently; component-generator `builder-io` impl |
46
+ | LaunchDarkly | Active | [`connections/launchdarkly.md`](connections/launchdarkly.md) | **Outcome** (experiment-source) — read-only A/B results (`LAUNCHDARKLY_API_KEY`/MCP); `experiment-result-ingester` → `design_arms`; `GDD_DISABLE_LAUNCHDARKLY`; degrade-to-noop |
47
+ | Statsig | Active | [`connections/statsig.md`](connections/statsig.md) | **Outcome** (experiment-source) — read-only experiment/pulse results (`STATSIG_API_KEY`/MCP); → `design_arms`; `GDD_DISABLE_STATSIG`; degrade-to-noop |
48
+ | GrowthBook | Active | [`connections/growthbook.md`](connections/growthbook.md) | **Outcome** (experiment-source) — read-only results (`GROWTHBOOK_API_KEY`, self-hosted/cloud, /MCP); → `design_arms`; `GDD_DISABLE_GROWTHBOOK`; degrade-to-noop |
49
+ | UserTesting | Active | [`connections/usertesting.md`](connections/usertesting.md) | **Outcome** (user-research) — read-only test reports; **pseudonymize-first** → `user-research-synthesizer` → brief `<prior-research>`; `GDD_DISABLE_USERTESTING`; degrade-to-noop |
50
+ | Maze | Active | [`connections/maze.md`](connections/maze.md) | **Outcome** (user-research) — read-only usability metrics; **pseudonymize-first** → `user-research-synthesizer`; `GDD_DISABLE_MAZE`; degrade-to-noop |
51
+ | Hotjar | Active | [`connections/hotjar.md`](connections/hotjar.md) | **Outcome** (user-research) — read-only indexed insights (no raw video); **pseudonymize-first** → `user-research-synthesizer`; `GDD_DISABLE_HOTJAR`; degrade-to-noop |
52
52
 
53
53
  ---
54
54
 
@@ -56,8 +56,8 @@ This directory contains connection specifications for external tools and MCPs th
56
56
 
57
57
  Each cell describes what the connection contributes at that pipeline stage, or `—` if it is not used.
58
58
 
59
- | Connection | scan | discover | plan | design | verify | canvas | generator | notify | ticket-sync |
60
- |-----------|------|----------|------|--------|--------|--------|-----------|--------|------------|
59
+ | Connection | brief | explore | plan | design | verify | canvas | generator | notify | ticket-sync |
60
+ |-----------|-------|---------|------|--------|--------|--------|-----------|--------|------------|
61
61
  | gdd-state | STATE mutation (init position, probe_connections, add_decision) | STATE mutation (add_decision, add_must_have, transition gate) | STATE mutation (locked decisions, must_haves, transition gate) | STATE mutation (update_progress, resolve_blocker, transition gate) | STATE mutation (must_have pass/fail, add_blocker, set_status) | — | — | — | — |
62
62
  | Figma | token augmentation via `get_variable_defs` (CONN-03) | decisions pre-populate via `get_variable_defs` (CONN-04) | — | write tokens/annotations/Code Connect via `use_figma` (FWR-01..04) | — | — | — | — | — |
63
63
  | Refero | — | reference search via `mcp__refero__search`; fallback → awesome-design-md (CONN-05) | — | — | — | — | — | — | — |
@@ -66,35 +66,35 @@ Each cell describes what the connection contributes at that pipeline stage, or `
66
66
  | Chromatic | — | — | change-risk scoping (CHR-02) | — | visual delta narration (CHR-01) | — | — | — | — |
67
67
  | Graphify | — | — | dependency scoping (GRF-03) | — | orphan detection (GRF-04) | — | — | — | — |
68
68
  | Pinterest | probe only | visual reference search via `pinterest_search`; fallback → Refero → awesome-design-md | — | — | — | — | — | — | — |
69
- | Claude Design | bundle probe → `claude_design: available` | synthesizer handoff mode — parses bundle → D-XX decisions; discussant `--from-handoff` confirms | — (skipped in handoff) | — (skipped in handoff) | Handoff Faithfulness section; bidirectional write-back via figma-writer `implementation-status` mode | — | — | — | — |
69
+ | Claude Design | bundle probe → `claude_design: available` | synthesizer handoff mode — parses bundle → decisions; discussant `--from-handoff` confirms | — (skipped in handoff) | — (skipped in handoff) | Handoff Faithfulness section; bidirectional write-back via figma-writer `implementation-status` mode | — | — | — | — |
70
70
  | paper.design | — | canvas read: `get_selection`, `get_jsx`, `get_computed_styles` | — | paper-writer: annotate/tokenize/roundtrip | `get_screenshot` for `? VISUAL` | ✓ | — | — | — |
71
71
  | pencil.dev | `.pen` discovery | `.pen` as canonical design source | — | pencil-writer: annotate/roundtrip | spec-vs-impl diff | ✓ | — | — | — |
72
72
  | 21st.dev | — | prior-art gate: marketplace search before greenfield build | — | component-generator (21st impl) | — | — | ✓ | — | — |
73
73
  | Magic Patterns | — | — | — | component-generator (magic-patterns impl) | preview_url → `? VISUAL` check | — | ✓ | — | — |
74
74
  | OpenRouter | — | — | — | — | — | — | ✓ (model-router: tier→model resolution, all stages) | — | — |
75
- | Xcode Simulator | — | — | — | native iOS code-gen target (swift-executor / emitSwift) | rendered SwiftUI snapshot when simulator available, else degrade to code-only structural audit (D-03) | — | — | — | — |
76
- | Android Emulator | — | — | — | native Android code-gen target (compose-executor / emitCompose) | rendered Compose screenshot when emulator available, else degrade to code-only structural audit (D-03) | — | — | — | — |
77
- | Litmus | — | — | — | email render-test target (email-executor) | cross-client rendered evidence when Litmus available, else degrade to the static email-HTML validator / code-only (D-03) | — | — | — | — |
78
- | Print-Renderer | — | — | — | print render-test target (pdf-executor) | rendered PDF/page evidence when the print-render is available, else degrade to the static print-CSS validator / code-only (D-03) | — | — | — | — |
79
- | Lottie | — | — | — | — | Lottie-export motion check: `validate-motion.cjs` (MO-FR/DUR/IMG/BUDGET) when present, WARN-never-block (D-02) | — | — | — | — |
80
- | Rive | — | — | — | — | Rive-export motion check: size + RIVE-header floor; state-machine graph via opt-in runtime, else manual-review advisory; WARN (D-02/D-04) | — | — | — | — |
75
+ | Xcode Simulator | — | — | — | native iOS code-gen target (swift-executor / emitSwift) | rendered SwiftUI snapshot when simulator available, else degrade to code-only structural audit | — | — | — | — |
76
+ | Android Emulator | — | — | — | native Android code-gen target (compose-executor / emitCompose) | rendered Compose screenshot when emulator available, else degrade to code-only structural audit | — | — | — | — |
77
+ | Litmus | — | — | — | email render-test target (email-executor) | cross-client rendered evidence when Litmus available, else degrade to the static email-HTML validator / code-only | — | — | — | — |
78
+ | Print-Renderer | — | — | — | print render-test target (pdf-executor) | rendered PDF/page evidence when the print-render is available, else degrade to the static print-CSS validator / code-only | — | — | — | — |
79
+ | Lottie | — | — | — | — | Lottie-export motion check: `validate-motion.cjs` (MO-FR/DUR/IMG/BUDGET) when present, WARN-never-block | — | — | — | — |
80
+ | Rive | — | — | — | — | Rive-export motion check: size + RIVE-header floor; state-machine graph via opt-in runtime, else manual-review advisory; WARN | — | — | — | — |
81
81
  | Framer | — | — | — | canvas source (read frames, write proposals) | — | ✓ | — | — | — |
82
82
  | Penpot | — | — | — | canvas source (read boards/components) | — | ✓ | — | — | — |
83
83
  | Webflow | — | — | — | structure / adaptation source | — | — | ✓ | — | — |
84
84
  | v0.dev | — | — | — | component-generator (v0 impl) | — | — | ✓ | — | — |
85
85
  | Plasmic | — | — | — | component-generator (plasmic impl) + canvas read | — | ✓ | ✓ | — | — |
86
86
  | Builder.io | — | — | — | component-generator (builder-io impl) | — | — | ✓ | — | — |
87
- | Lazyweb | — | reference search via `lazyweb_search` (**Tier 1 — free, tried first**; D-01); complements refero/pinterest | — | — | — | — | — | — | — |
88
- | Mobbin | — | reference search via mobbin tools (**Tier 2 — paid, mobile/flow-level**; D-01); complements refero/lazyweb | — | — | — | — | — | — | — |
89
- | Slack | — | — | — | — | — | — | — | verify-fail/audit-pass/ship → Slack webhook (routed, redacted, degrade-to-noop; D-04/D-05) | — |
87
+ | Lazyweb | — | reference search via `lazyweb_search` (**Tier 1 — free, tried first**); complements refero/pinterest | — | — | — | — | — | — | — |
88
+ | Mobbin | — | reference search via mobbin tools (**Tier 2 — paid, mobile/flow-level**); complements refero/lazyweb | — | — | — | — | — | — | — |
89
+ | Slack | — | — | — | — | — | — | — | verify-fail/audit-pass/ship → Slack webhook (routed, redacted, degrade-to-noop) | — |
90
90
  | Discord | — | — | — | — | — | — | — | parity with Slack — events → Discord webhook (routed, redacted, degrade-to-noop) | — |
91
- | Linear | — | — | — | — | — | — | — | — | bidirectional cycle↔issue: read comments (decision-injector) + transition + redacted summary on completion (D-03) |
91
+ | Linear | — | — | — | — | — | — | — | — | bidirectional cycle↔issue: read comments (decision-injector) + transition + redacted summary on completion |
92
92
  | Jira | — | — | — | — | — | — | — | — | parity with Linear — Atlassian MCP; transition + redacted summary on completion |
93
93
 
94
94
  **Column definitions:**
95
95
 
96
- - **scan** — what the connection provides when the scan stage runs (design tokens, source metadata)
97
- - **discover** — what the connection provides during discovery (visual references, design decisions)
96
+ - **brief** — what the connection provides when the brief stage runs (design tokens, source metadata)
97
+ - **explore** — what the connection provides during exploration (visual references, design decisions)
98
98
  - **plan** — what the connection contributes to planning artifacts
99
99
  - **design** — what the connection provides during design execution
100
100
  - **verify** — what the connection checks or surfaces during verification
@@ -235,7 +235,7 @@ Step G1 — Bash: test -n "$DISCORD_WEBHOOK_URL"
235
235
  → non-empty → discord: available
236
236
  ```
237
237
 
238
- Note: Lazyweb + Mobbin probes are ToolSearch-only (no live call). The discover stage resolves reference sources **cost-aware (D-01): Lazyweb (free) → Mobbin / Refero (paid, whichever is bound + subscribed) → Pinterest → awesome-design-md → WebFetch.**
238
+ Note: Lazyweb + Mobbin probes are ToolSearch-only (no live call). The explore stage resolves reference sources **cost-aware: Lazyweb (free) → Mobbin / Refero (paid, whichever is bound + subscribed) → Pinterest → awesome-design-md → WebFetch.**
239
239
 
240
240
  ---
241
241
 
@@ -294,7 +294,7 @@ Note: First Chromatic run has no baseline — all stories become new snapshots.
294
294
  **Graphify probe (execute at agent entry, before using graph):**
295
295
 
296
296
  ```
297
- Step G1 — Config check (per D-09 direct read, no CLI subcommand):
297
+ Step G1 — Config check (direct read, no CLI subcommand):
298
298
  Bash: node -e "try{const c=JSON.parse(require('fs').readFileSync('.design/config.json','utf8'));process.stdout.write(String(c.graphify?.enabled===true))}catch{process.stdout.write('false')}"
299
299
  → false → graphify: not_configured
300
300
  → true → proceed to Step G2
@@ -328,19 +328,18 @@ To add a new connection to the pipeline:
328
328
 
329
329
  4. **Declare the MCP.** If the connection uses an MCP server, ensure the server is declared in `.claude-plugin/plugin.json` or documented as a user-supplied MCP in the spec file. For read+write remote MCPs, use `connections/figma.md` as the model. For read-only remote MCPs with headless / API-key-free setup, use `connections/pinterest.md`.
330
330
 
331
- 5. **Wire into stage skills (Phase 2+ work).** Update the relevant stage `SKILL.md` files to probe the connection at entry and write its status to `.design/STATE.md <connections>`.
331
+ 5. **Wire into stage skills.** Update the relevant stage `SKILL.md` files to probe the connection at entry and write its status to `.design/STATE.md <connections>`.
332
332
 
333
- 6. **Update relevant agents (Phase 2+ work).** If agents will use the connection's tools, list the MCP tools in the agent's `tools` frontmatter field.
333
+ 6. **Update relevant agents.** If agents will use the connection's tools, list the MCP tools in the agent's `tools` frontmatter field.
334
334
 
335
335
  ---
336
336
 
337
337
  ## Notes
338
338
 
339
- - `connections/` is infrastructure scaffolding introduced in Phase 1. Stage integration (wiring detection and graceful degradation into each stage) is Phase 2 work.
340
- - Phase 8 added five new active connections. Linear and GitHub remain planned for a future phase.
341
- - Phase 14 added four AI-native design tool connections (paper.design, pencil.dev, 21st.dev, Magic Patterns) and the canvas/generator capability columns.
342
- - Phase 20 added `gdd-state` a local stdio MCP server shipped with the plugin that owns STATE.md mutation across every pipeline stage. Unlike external connections, `gdd-state` is required (fallback to direct module import preserves mutation safety but loses event telemetry). See [`connections/gdd-state.md`](connections/gdd-state.md).
343
- - The capability matrix columns map to the five pipeline stages: `scan | discover | plan | design | verify`, plus `canvas` and `generator` sub-categories.
339
+ - `connections/` is the infrastructure scaffolding that catalogs external integrations. Stage integration wires detection and graceful degradation into each pipeline stage.
340
+ - AI-native design tool connections (paper.design, pencil.dev, 21st.dev, Magic Patterns) populate the canvas/generator capability columns.
341
+ - `gdd-state` is a local stdio MCP server shipped with the plugin that owns STATE.md mutation across every pipeline stage. Unlike external connections, `gdd-state` is required (fallback to direct module import preserves mutation safety but loses event telemetry). See [`connections/gdd-state.md`](connections/gdd-state.md).
342
+ - The capability matrix columns map to the five pipeline stages: `brief | explore | plan | design | verify`, plus `canvas` and `generator` sub-categories.
344
343
 
345
344
  ---
346
345