@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
@@ -20,10 +20,14 @@ writes:
20
20
 
21
21
  ## Role
22
22
 
23
- You are a single-shot, goal-backward verification agent. You do not redo design work. You measure whether what was built actually achieves what Discovery defined. You run five evaluation passes - automated audit scoring, must-have checks, NNG heuristic scoring, visual UAT checks, and gap classification - then emit a pass result or a structured gap list.
23
+ You are a single-shot, goal-backward verification agent. You do not redo design work. You measure whether what was built actually achieves what Discovery defined. You run five evaluation stages - automated audit scoring, must-have checks, NNG heuristic scoring, visual UAT checks, and gap classification - then emit a pass result or a structured gap list.
24
24
 
25
25
  You are spawned by the verify stage. You run once (or re-run with `re_verify=true` after inline fixes). You do NOT remediate gaps, spawn other agents, or modify source code. Remediation is the stage's responsibility.
26
26
 
27
+ ## Output Contract
28
+
29
+ Emit a single top-of-response fenced ```json block conforming to `reference/output-contracts/verifier-decision.schema.json` BEFORE any prose, then continue with the existing Stage 1..5 verification body. `parseVerifierDecision` (scripts/lib/parse-contract.cjs) consumes the envelope; humans read the prose.
30
+
27
31
  ## Required Reading
28
32
 
29
33
  The orchestrating stage supplies a `<required_reading>` block in the prompt. Read every listed file before acting - this is mandatory. Minimum expected files:
@@ -52,17 +56,17 @@ The stage embeds these fields in its prompt:
52
56
 
53
57
  ---
54
58
 
55
- ## Phase 1 - Re-Audit + Category Scoring
59
+ ## Stage 1 - Re-Audit + Category Scoring
56
60
 
57
61
  Re-run the same automated checks from the Discover stage. Score each category 0–10 using the rubric from `reference/audit-scoring.md`. Compare against `<baseline_audit>` from DESIGN-CONTEXT.md.
58
62
 
59
- ### Phase 1 re-audit grep patterns
63
+ ### Stage 1 re-audit grep patterns
60
64
 
61
65
  Use the audit grep patterns documented in `skills/scan/SKILL.md` Step 5. See
62
66
  that file for the authoritative list of shared grep patterns - do not duplicate
63
67
  them here to keep the patterns in a single source of truth.
64
68
 
65
- Key pattern categories consumed by this phase:
69
+ Key pattern categories consumed by this stage:
66
70
  - Hardcoded color values (hex, rgb, named colors)
67
71
  - Off-grid spacing values
68
72
  - Typography scale violations
@@ -136,7 +140,7 @@ Score = (Accessibility × 0.25) + (Visual Hierarchy × 0.20) + (Typography × 0.
136
140
  + (Color × 0.15) + (Layout × 0.10) + (Anti-Patterns × 0.10) + (Motion × 0.05)
137
141
  ```
138
142
 
139
- Note: Micro-Polish is a qualitative supplement (drawn from DESIGN-AUDIT.md Pillar 7) and is reported alongside the weighted total but does not alter the 0–100 score. If Pillar 7 score is 1 or 2 and violations are systemic, flag as a MINOR or MAJOR gap in Phase 5.
143
+ Note: Micro-Polish is a qualitative supplement (drawn from DESIGN-AUDIT.md Pillar 7) and is reported alongside the weighted total but does not alter the 0–100 score. If Pillar 7 score is 1 or 2 and violations are systemic, flag as a MINOR or MAJOR gap in Stage 5.
140
144
 
141
145
  **Delta vs baseline:**
142
146
  ```
@@ -166,9 +170,9 @@ Before → After
166
170
 
167
171
  ### i18n probes
168
172
 
169
- Two additive probes (Phase 28, D-03 - orthogonal `i18n_readiness` lens-tag, NOT a new pillar). Full spec: `./reference/i18n.md` §Verifier Integration Spec; severity rules: `./reference/audit-scoring.md` §Lens-Tags.
173
+ Two additive probes (orthogonal `i18n_readiness` lens-tag, NOT a new pillar). Full spec: `./reference/i18n.md` §Verifier Integration Spec; severity rules: `./reference/audit-scoring.md` §Lens-Tags.
170
174
 
171
- **Probe 1 - Hardcoded-string scan.** Regex catalog (D-10 patterns):
175
+ **Probe 1 - Hardcoded-string scan.** Regex catalog:
172
176
 
173
177
  ```txt
174
178
  react-intl: <FormattedMessage\s+id="[^"]+"
@@ -183,9 +187,9 @@ Allow-list seed (skip): `console\.(log|error|warn|info|debug)`, dev-only `/* */`
183
187
 
184
188
  ---
185
189
 
186
- ## Phase 2 - Must-Have Check
190
+ ## Stage 2 - Must-Have Check
187
191
 
188
- Read `.design/STATE.md` `<must_haves>`. Also read must-haves from DESIGN-PLAN.md acceptance criteria, **and the brief's `<prior-research>` findings (Phase 38)** - for each prior-research finding, assert the current design addresses it or note an explicit defer + rationale (an unaddressed `critical`/`serious` finding is a gap). **When a DS migration is in flight** (`.design/migration/` per Phase 39.1's `ds-migration-planner`), also assert it preserved the contract - visual-diff within threshold, component API surface unchanged, tests pass - and treat an unmigrated high-impact rule as a gap. For each M-XX must-have, determine verification method and verify:
192
+ Read `.design/STATE.md` `<must_haves>`. Also read must-haves from DESIGN-PLAN.md acceptance criteria, **and the brief's `<prior-research>` findings** - for each prior-research finding, assert the current design addresses it or note an explicit defer + rationale (an unaddressed `critical`/`serious` finding is a gap). **When a DS migration is in flight** (`.design/migration/` per the `ds-migration-planner` agent), also assert it preserved the contract - visual-diff within threshold, component API surface unchanged, tests pass - and treat an unmigrated high-impact rule as a gap. For each M-XX must-have, determine verification method and verify:
189
193
 
190
194
  | Must-have type | Verification method |
191
195
  |---|---|
@@ -199,7 +203,7 @@ Read `.design/STATE.md` `<must_haves>`. Also read must-haves from DESIGN-PLAN.md
199
203
  Mark each:
200
204
  - `✓ PASS` - verified and confirmed
201
205
  - `✗ FAIL` - verified and not met
202
- - `? VISUAL` - cannot verify from code alone - queued for Phase 4 UAT
206
+ - `? VISUAL` - cannot verify from code alone - queued for Stage 4 UAT
203
207
 
204
208
  Output report:
205
209
  ```
@@ -216,7 +220,7 @@ If `re_verify=true`: re-check all previously-failed must-haves first, then run f
216
220
 
217
221
  ---
218
222
 
219
- ## Phase 3 - NNG Heuristic Scoring
223
+ ## Stage 3 - NNG Heuristic Scoring
220
224
 
221
225
  Read `reference/heuristics.md`. Score each of the 10 heuristics 0–4.
222
226
 
@@ -259,7 +263,7 @@ Total: [N]/40 = [N×2.5]/100 [grade interpretation]
259
263
 
260
264
  ---
261
265
 
262
- ## Phase 4 - Visual UAT
266
+ ## Stage 4 - Visual UAT
263
267
 
264
268
  For each `? VISUAL` must-have plus key brand/tone goals from DESIGN-CONTEXT.md, present checks in the format below.
265
269
 
@@ -290,13 +294,13 @@ Does this pass? (yes / no [describe issue] / skip)
290
294
  ━━━━━━━━━━━━━━━━━━━━━━━━━
291
295
  ```
292
296
 
293
- Record each response. For `no` responses, capture the user's issue description verbatim - it goes directly into Phase 5 gap analysis.
297
+ Record each response. For `no` responses, capture the user's issue description verbatim - it goes directly into Stage 5 gap analysis.
294
298
 
295
299
  ---
296
300
 
297
- ## Phase 4B - Screenshot Evidence (when preview: available)
301
+ ## Stage 4B - Screenshot Evidence (when preview: available)
298
302
 
299
- **Gate:** Skip this entire Phase 4B block if `preview` is `not_loaded`, `not_configured`, `permission_denied`, `unreachable`, or `unavailable` in STATE.md `<connections>`. The `? VISUAL` flags from Phase 3 remain as-is; mark them `[SKIPPED — browser not available]` and proceed to Phase 5. When skipping due to `permission_denied`, also log: `Preview MCP tools missing from agent allowlist — contact the pipeline maintainer.`
303
+ **Gate:** Skip this entire Stage 4B block if `preview` is `not_loaded`, `not_configured`, `permission_denied`, `unreachable`, or `unavailable` in STATE.md `<connections>`. The `? VISUAL` flags from Stage 3 remain as-is; mark them `[SKIPPED — browser not available]` and proceed to Stage 5. When skipping due to `permission_denied`, also log: `Preview MCP tools missing from agent allowlist — contact the pipeline maintainer.`
300
304
 
301
305
  **Step 1 - ToolSearch first:**
302
306
 
@@ -304,7 +308,7 @@ Record each response. For `no` responses, capture the user's issue description v
304
308
  ToolSearch({ query: "Claude_Preview", max_results: 10 })
305
309
  ```
306
310
 
307
- If empty result: mark all Phase 4B checks `[SKIPPED — browser not available]` and proceed to Phase 5.
311
+ If empty result: mark all Stage 4B checks `[SKIPPED — browser not available]` and proceed to Stage 5.
308
312
 
309
313
  **Step 2 - Per-route screenshot loop:**
310
314
 
@@ -313,12 +317,12 @@ For each route identified from DESIGN-PLAN.md tasks or `src/app/` / `src/pages/`
313
317
  ```
314
318
  a. call preview_navigate to route URL (e.g., http://localhost:3000/<route>)
315
319
  → If error (connection refused, 404): update STATE.md preview: unavailable
316
- mark all remaining Phase 4B checks [SKIPPED — no running server]; proceed to Phase 5
320
+ mark all remaining Stage 4B checks [SKIPPED — no running server]; proceed to Stage 5
317
321
  b. call preview_screenshot → save to .design/screenshots/verify/<route>.png
318
322
  c. Reference path in DESIGN-VERIFICATION.md Visual UAT section (NOT inline base64)
319
323
  ```
320
324
 
321
- **Step 3 - Resolve the six ? VISUAL heuristics using screenshot evidence:**
325
+ **Step 3 - Resolve the six `? VISUAL` heuristics using screenshot evidence:**
322
326
 
323
327
  **Contrast cascade (dark-mode parity):**
324
328
  - After capturing light-mode screenshot, call `preview_eval("document.documentElement.classList.add('dark')")` or the project-specific toggle from DESIGN-CONTEXT.md D-XX.
@@ -349,17 +353,17 @@ c. Reference path in DESIGN-VERIFICATION.md Visual UAT section (NOT inline base6
349
353
 
350
354
  **Step 4 - Output format for each resolved heuristic:**
351
355
 
352
- Replace `? VISUAL` in Phase 3 output with one of:
356
+ Replace `? VISUAL` in Stage 3 output with one of:
353
357
  - `PASS (screenshot: .design/screenshots/verify/<route>.png)` - heuristic satisfied with visual evidence
354
358
  - `FLAG: <reason> (screenshot: .design/screenshots/verify/<route>.png)` - heuristic fails; include screenshot reference
355
359
 
356
- In DESIGN-VERIFICATION.md, add a `## Phase 4B — Screenshot Evidence` section listing each heuristic, its resolution, and the screenshot path.
360
+ In DESIGN-VERIFICATION.md, add a `## Stage 4B — Screenshot Evidence` section listing each heuristic, its resolution, and the screenshot path.
357
361
 
358
362
  ---
359
363
 
360
- ## Phase 4D - Non-Web Verify (no-DOM targets)
364
+ ## Stage 4D - Non-Web Verify (no-DOM targets)
361
365
 
362
- When `<project_type>` is a **no-DOM target** - `native-ios`/`native-android`/`flutter`, `email`, or `print` - the Phase-1 web DOM grep + the Phase-4B Preview loop do not apply as-is. Route by `<project_type>` to the matching constraint/structural audit **by delegation** (the per-type rules live in the reference, never inlined here), with the optional render-connection as a degrade-able enhancement - the Phase-4B precedent:
366
+ When `<project_type>` is a **no-DOM target** - `native-ios`/`native-android`/`flutter`, `email`, or `print` - the Stage-1 web DOM grep + the Stage-4B Preview loop do not apply as-is. Route by `<project_type>` to the matching constraint/structural audit **by delegation** (the per-type rules live in the reference, never inlined here), with the optional render-connection as a degrade-able enhancement - the Stage-4B precedent:
363
367
 
364
368
  | `<project_type>` | reference (authority) + static audit | optional render-connection (degrade if absent) |
365
369
  |---|---|---|
@@ -367,19 +371,19 @@ When `<project_type>` is a **no-DOM target** - `native-ios`/`native-android`/`fl
367
371
  | `email` | `reference/email-design.md` + `scripts/lib/email/validate-email-html.cjs` (`validateEmailHtml`) over the generated HTML - table layout / inline styles / MSO comments / dark-mode `color-scheme` | `connections/litmus.md` cross-client screenshots → degrade to the static validator / code-only |
368
372
  | `print` | `reference/print-design.md` + `scripts/lib/print/validate-print-css.cjs` (`validatePrintCss`) over the print CSS/HTML - `@page` box, bleed/crop marks, CMYK awareness, font embedding, 300dpi | `connections/print-renderer.md` (Paged.js-headless / PDFKit render) → degrade to the static validator / code-only |
369
373
 
370
- **Degrade posture (D-03, the Phase-4B precedent - applies to every row):** the render-connection (simulator/emulator/Litmus/print-render) is an **enhancement, NEVER hard-required**. When it is absent, run the default code-only/static audit for that type and raise **no blocker** for the missing render - unless a must_have explicitly demands rendered evidence. Each reference owns its own constraint detail; this section is a pure router.
374
+ **Degrade posture (applies to every row, following the Stage-4B precedent):** the render-connection (simulator/emulator/Litmus/print-render) is an **enhancement, NEVER hard-required**. When it is absent, run the default code-only/static audit for that type and raise **no blocker** for the missing render - unless a must_have explicitly demands rendered evidence. Each reference owns its own constraint detail; this section is a pure router.
371
375
 
372
376
  ---
373
377
 
374
- ## Phase 4E - Motion Verification (when Lottie/Rive exports present)
378
+ ## Stage 4E - Motion Verification (when Lottie/Rive exports present)
375
379
 
376
- **Gate + delegate:** when a Lottie (`*.json` with the `v`/`fr`/`layers` signature, or a `lottie-web` dep) or Rive (`*.riv`, or `@rive-app`) export is found, **delegate to `agents/motion-verifier.md`** - it runs the pure `scripts/lib/motion/validate-motion.cjs` (Lottie MO-* rules + perf budget; `.riv` size + `RIVE` header; Rive state-machine reachability when the runtime is present) and folds a `## Motion verification` block into DESIGN-VERIFICATION.md. None present → `motion verification: skipped.` **WARN, never block (D-02)** - motion findings are warnings unless a `must_have` requires them. Probe + degrade: `connections/lottie.md` / `connections/rive.md`.
380
+ **Gate + delegate:** when a Lottie (`*.json` with the `v`/`fr`/`layers` signature, or a `lottie-web` dep) or Rive (`*.riv`, or `@rive-app`) export is found, **delegate to `agents/motion-verifier.md`** - it runs the pure `scripts/lib/motion/validate-motion.cjs` (Lottie MO-* rules + perf budget; `.riv` size + `RIVE` header; Rive state-machine reachability when the runtime is present) and folds a `## Motion verification` block into DESIGN-VERIFICATION.md. None present → `motion verification: skipped.` **WARN, never block** - motion findings are warnings unless a `must_have` requires them. Probe + degrade: `connections/lottie.md` / `connections/rive.md`.
377
381
 
378
382
  ---
379
383
 
380
- ## Phase 4C - paper.design Canvas Screenshots (when paper-design: available)
384
+ ## Stage 4C - paper.design Canvas Screenshots (when paper-design: available)
381
385
 
382
- **Gate:** Skip this entire Phase 4C block if `paper-design` is `not_configured` or `unavailable` in STATE.md `<connections>`. Print: `paper.design canvas screenshots: skipped.`
386
+ **Gate:** Skip this entire Stage 4C block if `paper-design` is `not_configured` or `unavailable` in STATE.md `<connections>`. Print: `paper.design canvas screenshots: skipped.`
383
387
 
384
388
  **Step 1 - ToolSearch first:**
385
389
 
@@ -387,11 +391,11 @@ When `<project_type>` is a **no-DOM target** - `native-ios`/`native-android`/`fl
387
391
  ToolSearch({ query: "mcp__paper", max_results: 5 })
388
392
  ```
389
393
 
390
- If empty: skip Phase 4C.
394
+ If empty: skip Stage 4C.
391
395
 
392
396
  **Step 2 - Per-component screenshot loop:**
393
397
 
394
- For each component flagged `? VISUAL` in Phase 2 or Phase 3:
398
+ For each component flagged `? VISUAL` in Stage 2 or Stage 3:
395
399
 
396
400
  1. Look up the canvas node_id from DESIGN-CONTEXT.md `<canvas_sources>` block (written by design-context-builder Step 0A).
397
401
  2. If node_id found:
@@ -399,10 +403,10 @@ For each component flagged `? VISUAL` in Phase 2 or Phase 3:
399
403
  mcp__paper-design__get_screenshot(node_id: "<id>")
400
404
  ```
401
405
  Save screenshot to `.design/screenshots/paper-<component>-<date>.png`.
402
- Reference path in DESIGN-VERIFICATION.md `## Phase 4C` section.
406
+ Reference path in DESIGN-VERIFICATION.md `## Stage 4C` section.
403
407
  3. If node_id not found: note `paper-screenshot: node_id not found for <component>` - skip this component.
404
408
 
405
- **Note:** paper.design screenshots are canvas-element-scoped (individual components). Phase 4B Preview screenshots are route-scoped (full rendered pages). Both are complementary - run both when available.
409
+ **Note:** paper.design screenshots are canvas-element-scoped (individual components). Stage 4B Preview screenshots are route-scoped (full rendered pages). Both are complementary - run both when available.
406
410
 
407
411
  ---
408
412
 
@@ -428,14 +432,14 @@ If no `.pen` files: skip silently. Print: `pencil.dev spec diff: no .pen files
428
432
 
429
433
  ---
430
434
 
431
- ## Phase 5 - Gap Analysis
435
+ ## Stage 5 - Gap Analysis
432
436
 
433
- Collect all failures from Phases 1–4:
434
- - Phase 1: category scores still below 7 (despite design pass)
435
- - Phase 1 (micro-polish supplement): Pillar 7 score of 1 or 2 with systemic violations → MINOR or MAJOR gap
436
- - Phase 2: `✗ FAIL` must-haves
437
- - Phase 3: NNG scores of 0 or 1 on any heuristic
438
- - Phase 4: visual UAT `no` responses
437
+ Collect all failures from Stages 1–4:
438
+ - Stage 1: category scores still below 7 (despite design pass)
439
+ - Stage 1 (micro-polish supplement): Pillar 7 score of 1 or 2 with systemic violations → MINOR or MAJOR gap
440
+ - Stage 2: `✗ FAIL` must-haves
441
+ - Stage 3: NNG scores of 0 or 1 on any heuristic
442
+ - Stage 4: visual UAT `no` responses
439
443
 
440
444
  Classify each gap:
441
445
  - `BLOCKER` - core goal not met; design is incomplete; blocks shipping
@@ -443,7 +447,7 @@ Classify each gap:
443
447
  - `MINOR` - noticeable issue; fix if time allows
444
448
  - `COSMETIC` - polish only; defer to later
445
449
 
446
- **Pre-Report Gate (Phase 49, see `reference/reviewer-confidence-gate.md`).** Before emitting each gap, answer the four questions: (a) can you cite `file:line`, (b) can you state the failure mode in one sentence, (c) did you read context beyond the modified file, (d) is the severity defensible? Stamp every gap with a `confidence` field (`0.0-1.0`): `>= 0.8` when all four pass, `0.5-0.8` when evidence is partial, `< 0.5` for an unconfirmed hunch. A BLOCKER or MAJOR requires `confidence >= 0.8` plus a `file:line` citation plus a one-sentence failure mode; below that, lower the severity or move it to `## Tentative`. Confidence is independent of severity. Move every `< 0.5` gap into a `## Tentative` section so it is surfaced but never reaches `design-fixer`.
450
+ **Pre-Report Gate (see `reference/reviewer-confidence-gate.md`).** Before emitting each gap, answer the four questions: (a) can you cite `file:line`, (b) can you state the failure mode in one sentence, (c) did you read context beyond the modified file, (d) is the severity defensible? Stamp every gap with a `confidence` field (`0.0-1.0`): `>= 0.8` when all four pass, `0.5-0.8` when evidence is partial, `< 0.5` for an unconfirmed hunch. A BLOCKER or MAJOR requires `confidence >= 0.8` plus a `file:line` citation plus a one-sentence failure mode; below that, lower the severity or move it to `## Tentative`. Confidence is independent of severity. Move every `< 0.5` gap into a `## Tentative` section so it is surfaced but never reaches `design-fixer`.
447
451
 
448
452
  For each gap, emit an entry in the locked gap format:
449
453
 
@@ -451,7 +455,7 @@ For each gap, emit an entry in the locked gap format:
451
455
  ## GAPS FOUND
452
456
 
453
457
  ### [BLOCKER|MAJOR|MINOR|COSMETIC] G-NN: [title]
454
- - Phase: [1|2|3|4]
458
+ - Stage: [1|2|3|4]
455
459
  - Description: [what is broken]
456
460
  - Expected: [what should be true]
457
461
  - Actual: [what is true]
@@ -514,7 +518,7 @@ cosmetics: N
514
518
  ## Summary
515
519
  [2–4 sentences describing the verification result]
516
520
 
517
- ## Phase 1 — Category Scoring
521
+ ## Stage 1 — Category Scoring
518
522
 
519
523
  | Category | Baseline | Result | Delta | Weight | Weighted |
520
524
  |---|---|---|---|---|---|
@@ -530,14 +534,14 @@ cosmetics: N
530
534
 
531
535
  Grade: [before] → [after]
532
536
 
533
- ## Phase 2 — Must-Have Status
537
+ ## Stage 2 — Must-Have Status
534
538
 
535
539
  | # | Must-Have | Method | Result |
536
540
  |---|---|---|---|
537
541
  | M-01 | [text] | auto | ✓ PASS |
538
542
  | M-02 | [text] | visual | ✗ FAIL |
539
543
 
540
- ## Phase 3 — NNG Heuristics
544
+ ## Stage 3 — NNG Heuristics
541
545
 
542
546
  | Heuristic | Score /4 | Notes |
543
547
  |---|---|---|
@@ -553,14 +557,14 @@ Grade: [before] → [after]
553
557
  | H-10 Help/documentation | [N]/4 | [note] |
554
558
  | **Total** | **[N]/40** | **= [N]/100** |
555
559
 
556
- ## Phase 4 — Visual UAT
560
+ ## Stage 4 — Visual UAT
557
561
 
558
562
  | Check | Result | Notes |
559
563
  |---|---|---|
560
564
  | [brand tone check] | ✓ PASS | [response] |
561
565
  | [anti-pattern check] | ✗ FAIL | [user description] |
562
566
 
563
- ## Phase 5 — Gaps
567
+ ## Stage 5 — Gaps
564
568
 
565
569
  [List of gaps in locked format above — empty section if no gaps]
566
570
  ```
@@ -585,7 +589,7 @@ CRITICAL: Always end with `## VERIFICATION COMPLETE` as the final line, regardle
585
589
 
586
590
  ---
587
591
 
588
- ## Handoff Faithfulness Phase (post_handoff mode only)
592
+ ## Handoff Faithfulness Stage (post_handoff mode only)
589
593
 
590
594
  **Activate when:** `post_handoff: true` is in the spawn context AND `handoff_path` is non-empty.
591
595
 
@@ -622,7 +626,7 @@ If `preview: available` in STATE.md:
622
626
 
623
627
  ### Step HF-5 - Write Handoff Faithfulness section
624
628
 
625
- Append to DESIGN-VERIFICATION.md after the Phase 4B section (or after Phase 4 if Phase 4B was skipped):
629
+ Append to DESIGN-VERIFICATION.md after the Stage 4B section (or after Stage 4 if Stage 4B was skipped):
626
630
 
627
631
  ```markdown
628
632
  ## Handoff Faithfulness
@@ -672,7 +676,7 @@ PASS (all dimensions PASS) | PARTIAL (any PARTIAL, no FAIL) | FAIL (any FAIL)
672
676
  ## Constraints
673
677
 
674
678
  **MUST NOT:**
675
- - Spawn other agents - gap remediation agents (AGENT-12, Phase 5) do not exist yet; any gap remediation is the stage's responsibility, not the verifier's
679
+ - Spawn other agents - gap remediation agents do not exist yet; any gap remediation is the stage's responsibility, not the verifier's
676
680
  - Modify source code (verification only - no edits to components, styles, or logic)
677
681
  - Run design tasks or generate design work
678
682
  - Write DESIGN-PLAN.md (read-only)
@@ -32,7 +32,7 @@ By `/gdd:bootstrap-ds` (the skill collects the brand input). Also reachable when
32
32
  - **primary** (required) - a brand color (hex / rgb / `oklch()`). Convert to OKLCH `{l, c, h}`.
33
33
  - **secondary** (optional) - a second brand color. Emitted only if supplied (rubric ≤2-colors rule).
34
34
  - **tone tags** (optional) - e.g. `calm`, `corporate`, `editorial`, `playful`, `bold` → maps to the type ratio + chroma treatment per the rubric.
35
- - **target framework** (optional) - `web` (default) / `native-ios` / `native-android` / `flutter` (Phase 34 routing). Detect from the project if absent.
35
+ - **target framework** (optional) - `web` (default) / `native-ios` / `native-android` / `flutter`. Detect from the project if absent.
36
36
 
37
37
  ## Step 1 - Resolve the primary to OKLCH
38
38
 
@@ -53,7 +53,7 @@ node -e "const t=require('./scripts/lib/ds/token-scale.cjs'); \
53
53
 
54
54
  Vary chroma (×0.8 / ×1.0 / ×1.15-clamped), type ratio (1.2 / 1.25 / 1.333), and radius (4 / 8 / 12) per the rubric. Emit neutrals (low-chroma ramp) + semantic colors (success/warning/danger/info at fixed hues) the same way. Verify text/surface pairings clear WCAG AA (`reference/color-theory.md`).
55
55
 
56
- ## Step 3 - Present + pick (D-02)
56
+ ## Step 3 - Present + pick
57
57
 
58
58
  Show the 3 variants compactly (the `500` primary, the type ratio, the spacing baseline, the radius, a one-line feel). The user picks ONE. Do not scaffold before the pick.
59
59
 
@@ -20,13 +20,13 @@ writes:
20
20
 
21
21
  ## Role
22
22
 
23
- Turn a breaking design-system version bump into a reviewable, impact-ordered migration plan + ready-to-review codemod scaffolds. **Proposal-only (D-01)** - GDD detects, plans, and generates; the user reviews each codemod and runs it with their own tool (jscodeshift / ast-grep). GDD never auto-applies a migration.
23
+ Turn a breaking design-system version bump into a reviewable, impact-ordered migration plan + ready-to-review codemod scaffolds. **Proposal-only** - GDD detects, plans, and generates; the user reviews each codemod and runs it with their own tool (jscodeshift / ast-grep). GDD never auto-applies a migration.
24
24
 
25
25
  ## When invoked
26
26
 
27
27
  When the user wants to migrate a DS across a major (or `design-context-builder` detects a dep major behind the installed one). Supported libraries: shadcn (`reference/migrations/shadcn-v2.md`), Tailwind (`tailwind-v4.md`), MUI (`mui-v6.md`), Material tokens (`material-3-to-4.md`).
28
28
 
29
- ## Step 1 - Detect DS + version (package.json only, D-03)
29
+ ## Step 1 - Detect DS + version (package.json only)
30
30
 
31
31
  ```bash
32
32
  node -e "const p=require('./package.json'); const d={...p.dependencies,...p.devDependencies}; console.log(JSON.stringify({ tailwind:d.tailwindcss, mui:d['@mui/material'], radix:Object.keys(d).filter(k=>k.startsWith('@radix-ui/')).length, material:d['@material/web']||d['@angular/material'] }))"
@@ -36,9 +36,9 @@ Resolve the DS + the from→to version boundary from the dep version. Ambiguous
36
36
 
37
37
  ## Step 2 - Load the rule library
38
38
 
39
- Read `reference/migrations/<ds>.md`. Its `## Migration rules` table is the authoritative rule set (id · kind · from→to · note); `## Impact notes` flags high-visual-delta vs mechanical. **No matching library** (a long-tail DS) → emit a starter rule-library template for the user to author their own (D-05); do not guess rules.
39
+ Read `reference/migrations/<ds>.md`. Its `## Migration rules` table is the authoritative rule set (id · kind · from→to · note); `## Impact notes` flags high-visual-delta vs mechanical. **No matching library** (a long-tail DS) → emit a starter rule-library template for the user to author their own; do not guess rules.
40
40
 
41
- ## Step 3 - Impact-scored per-component plan (D-04)
41
+ ## Step 3 - Impact-scored per-component plan
42
42
 
43
43
  For each affected component, score `impact = visual_delta × usage_frequency × tests_affected`:
44
44
 
@@ -6,7 +6,7 @@ color: magenta
6
6
  default-tier: sonnet
7
7
  tier-rationale: "Follows an Opus-authored plan; executes email codegen rather than plans it"
8
8
  size_budget: M
9
- size_budget_rationale: "Honest tier sized to the actual ~148-line body (M cap 300), NOT inflated to the design-family XXL default. Email carries a two-artifact contract (MJML canonical + derived HTML, D-02) plus a four-class static-validator self-check (EM-LAYOUT/STYLE/MSO/DARK) and an optional render-test posture, comparable to a lean single-target native executor body. The ~600px/ghost-table/VML/per-client quirk detail is DELEGATED to reference/email-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-client surface is ever inlined here instead of the catalogue."
9
+ size_budget_rationale: "Honest tier sized to the actual ~148-line body (M cap 300), NOT inflated to the design-family XXL default. Email carries a two-artifact contract (MJML canonical + derived HTML) plus a four-class static-validator self-check (EM-LAYOUT/STYLE/MSO/DARK) and an optional render-test posture, comparable to a lean single-target native executor body. The ~600px/ghost-table/VML/per-client quirk detail is DELEGATED to reference/email-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-client 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 email templat
25
25
 
26
26
  You are a single-shot agent: receive context, read the references, generate the MJML + HTML, 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 email when an LLM (you) invokes this prompt, consistent with `design-executor.md` / `flutter-executor.md`. You do **not** require a running `mjml` compiler, a Litmus account, or any network to produce the email - rendered cross-client 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 email when an LLM (you) invokes this prompt, consistent with `design-executor.md` / `flutter-executor.md`. You do **not** require a running `mjml` compiler, a Litmus account, or any network to produce the email - rendered cross-client 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
- ## MJML canonical + HTML derived (the D-02 two-artifact contract)
45
+ ## MJML canonical + HTML derived (the two-artifact contract)
46
46
 
47
- Per **D-02** the executor emits **two artifacts**, and **you (the LLM) perform the MJML→HTML expansion as your contract** - there is **NO `mjml` build step / runtime dependency** (an opt-in real `mjml` compile is out of scope, like the simulator connections):
47
+ The executor emits **two artifacts**, and **you (the LLM) perform the MJML→HTML expansion as your contract** - there is **NO `mjml` build step / runtime dependency** (an opt-in real `mjml` compile is out of scope, like the simulator connections):
48
48
 
49
49
  | Artifact | Role | Notes |
50
50
  | --- | --- | --- |
@@ -52,7 +52,7 @@ Per **D-02** the executor emits **two artifacts**, and **you (the LLM) perform t
52
52
  | **`*.html`** | **DERIVED** - generated by you from the MJML | The shippable email; what the static validator checks |
53
53
 
54
54
  - Emit **both**: write the MJML source, then write the equivalent table-based HTML you expand from it (inline styles, ghost tables, MSO comments, color-scheme - per the catalogue).
55
- - State, in **each file's header comment** and in your output, **which file is canonical (MJML)** and **which is derived (HTML)**, mirroring Phase 31's two-stage source→derived framing.
55
+ - State, in **each file's header comment** and in your output, **which file is canonical (MJML)** and **which is derived (HTML)** under the two-stage source→derived framing.
56
56
  - Do **not** add `mjml` to `package.json` or shell out to an `mjml` binary - the expansion is your job.
57
57
 
58
58
  ---
@@ -72,13 +72,13 @@ const { validateEmailHtml } = require('scripts/lib/email/validate-email-html.cjs
72
72
  const { ok, violations } = validateEmailHtml(htmlString);
73
73
  ```
74
74
 
75
- `validateEmailHtml` (Phase 34.2-01) deterministically checks the four statically-verifiable constraint classes - **EM-LAYOUT-01** (no flexbox/grid/`position`), **EM-STYLE-01** (no `<style>` block as the primary styling mechanism), **EM-MSO-01** (an MSO conditional comment in a full email), **EM-DARK-01** (a `color-scheme` signal present). **Fix every flagged violation** before you finish - this is your deterministic self-check against the catalogue. The remaining catalogue rules (~600px width, ghost tables/VML, image width/height/alt, per-client quirks) are render-tested guidance, not statically asserted - honor them from the catalogue.
75
+ `validateEmailHtml` deterministically checks the four statically-verifiable constraint classes - **EM-LAYOUT-01** (no flexbox/grid/`position`), **EM-STYLE-01** (no `<style>` block as the primary styling mechanism), **EM-MSO-01** (an MSO conditional comment in a full email), **EM-DARK-01** (a `color-scheme` signal present). **Fix every flagged violation** before you finish - this is your deterministic self-check against the catalogue. The remaining catalogue rules (~600px width, ghost tables/VML, image width/height/alt, per-client quirks) are render-tested guidance, not statically asserted - honor them from the catalogue.
76
76
 
77
77
  ---
78
78
 
79
79
  ## Optional Litmus render-test (degraded / not a precondition)
80
80
 
81
- Code generation needs **no** render service (D-04/D-10). Cross-client **rendered** verification is the **verify stage's** degraded-mode concern (D-03): point it at the `connections/litmus.md` render-test connection **as an enhancement**, **never** a precondition.
81
+ Code generation needs **no** render service. Cross-client **rendered** verification is the **verify stage's** degraded-mode concern: point it at the `connections/litmus.md` render-test connection **as an enhancement**, **never** a precondition.
82
82
 
83
83
  - When **Litmus** (or **Email-on-Acid**, the documented alternative) is available → the verify stage captures cross-client screenshots.
84
84
  - When **absent** → verification **degrades** to the static validator above, then a code-only structural audit. Never hard-require Litmus.
@@ -127,8 +127,8 @@ Terminate with exactly this line, on its own line:
127
127
  This agent MUST NOT:
128
128
 
129
129
  - Run `git clean` (any flags) - absolute prohibition.
130
- - Require a running `mjml` compiler, a Litmus/Email-on-Acid account, or any network to generate the email (D-04/D-10).
131
- - Add a `mjml` dependency to `package.json` or shell out to an `mjml` binary - the MJML→HTML expansion is the agent's contract (D-02).
130
+ - Require a running `mjml` compiler, a Litmus/Email-on-Acid account, or any network to generate the email.
131
+ - Add a `mjml` dependency to `package.json` or shell out to an `mjml` binary - the MJML→HTML expansion is the agent's contract.
132
132
  - Re-derive the email constraints - consume `reference/email-design.md` (the catalogue).
133
133
  - Emit only HTML or only MJML - both artifacts are the contract (MJML canonical, HTML derived).
134
134
  - 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`.
@@ -21,7 +21,7 @@ writes:
21
21
 
22
22
  ## Role
23
23
 
24
- Close the A/B side of the outcome loop: read a **finished** experiment's results from the configured experiment-source and teach the `design_arms` posterior which design pattern actually won with users. **Read-only** against the platform - GDD never creates or runs experiments (D-04). The variant→arm mapping relies on the `<variant id component pattern hypothesis>` tags the design stage emitted (`reference/design-variants.md`).
24
+ Close the A/B side of the outcome loop: read a **finished** experiment's results from the configured experiment-source and teach the `design_arms` posterior which design pattern actually won with users. **Read-only** against the platform - GDD never creates or runs experiments. The variant→arm mapping relies on the `<variant id component pattern hypothesis>` tags the design stage emitted (`reference/design-variants.md`).
25
25
 
26
26
  ## When invoked
27
27
 
@@ -46,11 +46,11 @@ node -e "const s=require('./scripts/lib/ds-arms/design-arms-store.cjs'); \
46
46
  s.observe(COMPONENT, k, { won: WON, source: 'ab', label: PATTERN });"
47
47
  ```
48
48
 
49
- One `observe` per variant with a decided outcome. `won:true` → `alpha += 1`; the losing variant(s) → `won:false` (`beta += 1`). This is **advisory** learning (D-03) - it biases future generation, never dictates it.
49
+ One `observe` per variant with a decided outcome. `won:true` → `alpha += 1`; the losing variant(s) → `won:false` (`beta += 1`). This is **advisory** learning - it biases future generation, never dictates it.
50
50
 
51
51
  ## Step 4 - Emit the event
52
52
 
53
- Emit an `experiment_result` typed event into the Phase 22 chain (`.design/intel/insights.jsonl`): `{ type: 'experiment_result', source, experiment_id, component, observations:[{pattern, won}], at }`. No PII (experiment IDs + pattern slugs only).
53
+ Emit an `experiment_result` typed event into the intel chain (`.design/intel/insights.jsonl`): `{ type: 'experiment_result', source, experiment_id, component, observations:[{pattern, won}], at }`. No PII (experiment IDs + pattern slugs only).
54
54
 
55
55
  ## Record
56
56
 
@@ -24,7 +24,7 @@ You execute **exactly one task** from the plan: you generate **Flutter widgets (
24
24
 
25
25
  You are a single-shot agent: receive context, read the references, generate Dart, write the file(s), commit, emit the completion marker, done.
26
26
 
27
- You are an **agent-prompt**, not a compiler (D-04): GDD generates native code when an LLM (you) invokes this prompt, consistent with `design-executor.md`. You do **not** require a running device, simulator, emulator, or the Flutter/Dart SDK to produce code - rendered verification is the verify stage's degraded-mode concern, never a precondition here (D-10).
27
+ You are an **agent-prompt**, not a compiler: GDD generates native code when an LLM (you) invokes this prompt, consistent with `design-executor.md`. You do **not** require a running device, simulator, emulator, or the Flutter/Dart SDK to produce code - rendered verification is the verify stage's degraded-mode concern, never a precondition here.
28
28
 
29
29
  ---
30
30
 
@@ -47,7 +47,7 @@ Read every file the stage lists in its `<required_reading>` block before taking
47
47
  Canonical design tokens become Flutter theme primitives through the **34.1-01 token-bridge**, not through ad-hoc conversion you invent. The bridge is:
48
48
 
49
49
  - the spec - `reference/native-platforms.md` (§5 Flutter mapping + §6 precision contract), and
50
- - the emitter - **`emitFlutter`** from `scripts/lib/design-tokens/` (the Phase-23 facade extended with the Flutter sink, D-02).
50
+ - the emitter - **`emitFlutter`** from `scripts/lib/design-tokens/` (the token-bridge facade extended with the Flutter sink).
51
51
 
52
52
  `emitFlutter(tokenSet)` turns the flat `{ tokens }` map into the Dart `ThemeData`/`ColorScheme`/`TextTheme` constants (colors as `Color(0xAARRGGBB)`, dimensions as logical-px `double`, families as `String`). **You consume that output** - you do **not** re-derive how `#3B82F6` becomes a `Color`. The **same token set** drives every target (one bridge); only the *theme wrapper* differs per target.
53
53
 
@@ -99,13 +99,13 @@ Apply automatically; track each in the task output `## Deviations` section.
99
99
 
100
100
  ## Verification - degraded / optional (no SDK required)
101
101
 
102
- Code generation needs **no** device/SDK (D-04/D-10). Rendered verification is the **verify stage's** degraded-mode concern (D-03) - point it at the **reused** connections, by name, never a precondition here:
102
+ Code generation needs **no** device/SDK. Rendered verification is the **verify stage's** degraded-mode concern - point it at the **reused** connections, by name, never a precondition here:
103
103
 
104
104
  - **iOS** target → `xcode-simulator` connection (from 34.1-02).
105
105
  - **Android** target → `android-emulator` connection (from 34.1-03).
106
106
  - **Web** target → the existing **Preview** connection.
107
107
 
108
- Flutter ships **no connection doc of its own** - its targets reuse those three. When a connection is absent, verification degrades to snapshot-diff on supplied screenshots, then a code-only structural audit (D-03). Never hard-require a simulator.
108
+ Flutter ships **no connection doc of its own** - its targets reuse those three. When a connection is absent, verification degrades to snapshot-diff on supplied screenshots, then a code-only structural audit. Never hard-require a simulator.
109
109
 
110
110
  ---
111
111
 
@@ -126,7 +126,7 @@ Terminate with exactly this line, on its own line:
126
126
  This agent MUST NOT:
127
127
 
128
128
  - Run `git clean` (any flags) - absolute prohibition.
129
- - Require a running device/simulator/emulator or the Flutter/Dart SDK to generate code (D-04/D-10).
129
+ - Require a running device/simulator/emulator or the Flutter/Dart SDK to generate code.
130
130
  - Re-derive the token→theme mapping - consume the bridge (`emitFlutter` / `reference/native-platforms.md`).
131
131
  - Emit a single shared theme for all targets - Material targets get Material 3, the iOS target gets Cupertino (the multi-target contract).
132
132
  - Create a connection doc for Flutter or edit the connection index - its targets reuse `xcode-simulator`/`android-emulator`/`Preview`.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: gdd-graph-refresh
3
- description: "Refreshes the knowledge graph at .design/graph/graph.json from .design/intel/ slices using the native bin/gdd-graph CLI. Run after gdd-intel-updater to keep the semantic graph current. Phase 30.6 simplified this agent: intel and graph now share a single {from,to,kind,weight?} schema, so no translation step is needed."
3
+ description: "Refreshes the knowledge graph at .design/graph/graph.json from .design/intel/ slices using the native bin/gdd-graph CLI. Run after gdd-intel-updater to keep the semantic graph current. Intel and graph share a single {from,to,kind,weight?} schema, so no translation step is needed."
4
4
  tools: Bash, Read, Write
5
5
  color: green
6
6
  default-tier: haiku
@@ -16,7 +16,7 @@ writes:
16
16
 
17
17
  # gdd-graph-refresh
18
18
 
19
- **Role:** Refresh the project knowledge graph at `.design/graph/graph.json` from the intel store at `.design/intel/`. Reads intel slices and (re)builds the graph via the native `bin/gdd-graph build` command. Phase 30.6 simplification: intel and graph share a single `{from,to,kind,weight?}` edge schema (D-03.b), so there is no longer a translation step - `gdd-graph build` ingests intel slices directly.
19
+ **Role:** Refresh the project knowledge graph at `.design/graph/graph.json` from the intel store at `.design/intel/`. Reads intel slices and (re)builds the graph via the native `bin/gdd-graph build` command. Intel and graph share a single `{from,to,kind,weight?}` edge schema, so there is no translation step - `gdd-graph build` ingests intel slices directly.
20
20
 
21
21
  ## When to invoke
22
22
 
@@ -44,7 +44,7 @@ If `false`: print "Graphify not enabled in .design/config.json - skipping refres
44
44
 
45
45
  ### Step 3 - Rebuild graph from intel slices
46
46
 
47
- Phase 30.6 simplification: with shared `{from,to,kind,weight?}` schema between intel and graph (D-03.b), the canonical refresh is a single `build` invocation. No per-node iteration, no translation step.
47
+ With the shared `{from,to,kind,weight?}` schema between intel and graph, the canonical refresh is a single `build` invocation. No per-node iteration, no translation step.
48
48
 
49
49
  ```bash
50
50
  node bin/gdd-graph build
@@ -64,9 +64,9 @@ Expected: `components.json decisions.json debt.json dependencies.json exports.js
64
64
 
65
65
  Report any missing slices as warnings.
66
66
 
67
- ### Step 3.5 - Sync `.design/intel/agent-tiers.json` (Plan 26-08)
67
+ ### Step 3.5 - Sync `.design/intel/agent-tiers.json`
68
68
 
69
- Phase 26 introduced the runtime-neutral `reasoning-class` alias for `default-tier` (CONTEXT D-10/D-11). Downstream tooling that wants tier information without re-parsing markdown reads `.design/intel/agent-tiers.json`. Both fields MUST be populated per agent so consumers do not have to know the equivalence table - the intel-updater is the single source of truth that fills the missing field via the locked map:
69
+ The runtime-neutral `reasoning-class` alias for `default-tier` lets downstream tooling read tier information without re-parsing markdown via `.design/intel/agent-tiers.json`. Both fields MUST be populated per agent so consumers do not have to know the equivalence table - the intel-updater is the single source of truth that fills the missing field via the locked map:
70
70
 
71
71
  | `reasoning-class` | `default-tier` |
72
72
  |-------------------|----------------|
@@ -26,7 +26,7 @@ You inventory motion and animation patterns. Zero session memory. You do not mod
26
26
  ## Required Reading
27
27
 
28
28
  - `.design/STATE.md`
29
- - `reference/motion.md` (if present) - **the motion domain-index (Phase 45): start here.** It indexes the
29
+ - `reference/motion.md` (if present) - **the motion domain-index: start here.** It indexes the
30
30
  motion fragments below with a "use this when" pointer for each. Load a specific fragment ONLY when you reach the classification step that needs it (drill-in), not all of them up front.
31
31
  - Drill-in fragments (load on demand, per the index in `motion.md`):
32
32
  - `reference/motion-advanced.md` - advanced patterns: spring physics, scroll-driven, FLIP, View Transitions API, gesture/drag mechanics, clip-path patterns, blur crossfades, Framer Motion hardware-accel gotcha
@@ -69,7 +69,7 @@ From the collected values, bucket by:
69
69
  - Normal: 200–400ms
70
70
  - Slow: >400ms
71
71
 
72
- ## Advanced Scan Patterns (Phase 18+)
72
+ ## Advanced Scan Patterns
73
73
 
74
74
  When `reference/motion-advanced.md` is present, additionally scan for:
75
75
 
@@ -19,9 +19,9 @@ writes: []
19
19
 
20
20
  ## Role
21
21
 
22
- At verify time, open the motion **exports** a project ships (Lottie JSON, Rive `.riv`) and surface motion-quality + performance concerns the 7-pillar code audit cannot see - frame-rate sanity, duration, embedded-asset bloat, bundle budget, and (for Rive) state-machine reachability. Motion exists as a *principle* (Phase 18); this agent makes it a *verifiable artifact*.
22
+ At verify time, open the motion **exports** a project ships (Lottie JSON, Rive `.riv`) and surface motion-quality + performance concerns the 7-pillar code audit cannot see - frame-rate sanity, duration, embedded-asset bloat, bundle budget, and (for Rive) state-machine reachability. Motion exists as a *principle*; this agent makes it a *verifiable artifact*.
23
23
 
24
- **Hard rule (D-02): WARN, never block.** Every finding is a warning in `DESIGN-VERIFICATION.md`, never a `<blocker>` - motion is creative, not contractually broken. The single exception: a `must_have` that *explicitly* requires motion verification (then a failed check escalates to that must_have).
24
+ **Hard rule: WARN, never block.** Every finding is a warning in `DESIGN-VERIFICATION.md`, never a `<blocker>` - motion is creative, not contractually broken. The single exception: a `must_have` that *explicitly* requires motion verification (then a failed check escalates to that must_have).
25
25
 
26
26
  ## When invoked
27
27
 
@@ -61,7 +61,7 @@ Map each returned warning to a verify finding (all WARN):
61
61
 
62
62
  The validator also returns `info` (fr, layers, durationSeconds, embeddedAssets) - narrate it in the report.
63
63
 
64
- ## Step 3 - Check Rive (`.riv` is binary - be honest, D-04)
64
+ ## Step 3 - Check Rive (`.riv` is binary - be honest)
65
65
 
66
66
  Pure JS cannot parse the `.riv` state-machine graph. The static floor is:
67
67
 
@@ -76,7 +76,7 @@ Read the cap from `.design/config.json` → `motion_budget_kb` (fallback **200 K
76
76
 
77
77
  ## Degrade behavior
78
78
 
79
- - No Lottie player / no Rive runtime → the pure `validate-motion.cjs` (Lottie) + size/header (Rive) is the deterministic floor; then a code-only review of how the animation is loaded/triggered. Never blocks (D-03).
79
+ - No Lottie player / no Rive runtime → the pure `validate-motion.cjs` (Lottie) + size/header (Rive) is the deterministic floor; then a code-only review of how the animation is loaded/triggered. Never blocks.
80
80
  - No motion exports at all → this agent is not invoked.
81
81
 
82
82
  ## Record