@hegemonart/get-design-done 1.0.7

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 (144) hide show
  1. package/.claude-plugin/marketplace.json +63 -0
  2. package/.claude-plugin/plugin.json +54 -0
  3. package/CHANGELOG.md +221 -0
  4. package/LICENSE +21 -0
  5. package/README.md +724 -0
  6. package/SKILL.md +232 -0
  7. package/agents/README.md +226 -0
  8. package/agents/a11y-mapper.md +118 -0
  9. package/agents/component-taxonomy-mapper.md +88 -0
  10. package/agents/design-advisor.md +139 -0
  11. package/agents/design-assumptions-analyzer.md +171 -0
  12. package/agents/design-auditor.md +383 -0
  13. package/agents/design-context-builder.md +544 -0
  14. package/agents/design-context-checker-gate.md +90 -0
  15. package/agents/design-context-checker.md +260 -0
  16. package/agents/design-discussant.md +98 -0
  17. package/agents/design-doc-writer.md +229 -0
  18. package/agents/design-executor.md +452 -0
  19. package/agents/design-figma-writer.md +302 -0
  20. package/agents/design-fixer.md +180 -0
  21. package/agents/design-integration-checker-gate.md +93 -0
  22. package/agents/design-integration-checker.md +326 -0
  23. package/agents/design-pattern-mapper.md +206 -0
  24. package/agents/design-phase-researcher.md +229 -0
  25. package/agents/design-plan-checker.md +164 -0
  26. package/agents/design-planner.md +352 -0
  27. package/agents/design-reflector.md +175 -0
  28. package/agents/design-research-synthesizer.md +127 -0
  29. package/agents/design-verifier-gate.md +97 -0
  30. package/agents/design-verifier.md +605 -0
  31. package/agents/gdd-graphify-sync.md +100 -0
  32. package/agents/gdd-intel-updater.md +88 -0
  33. package/agents/gdd-learnings-extractor.md +85 -0
  34. package/agents/motion-mapper.md +103 -0
  35. package/agents/token-mapper.md +103 -0
  36. package/agents/visual-hierarchy-mapper.md +95 -0
  37. package/connections/chromatic.md +247 -0
  38. package/connections/claude-design.md +190 -0
  39. package/connections/connections.md +218 -0
  40. package/connections/figma-writer.md +139 -0
  41. package/connections/figma.md +146 -0
  42. package/connections/graphify.md +197 -0
  43. package/connections/pinterest.md +153 -0
  44. package/connections/preview.md +173 -0
  45. package/connections/refero.md +189 -0
  46. package/connections/storybook.md +280 -0
  47. package/hooks/budget-enforcer.js +318 -0
  48. package/hooks/context-exhaustion.js +127 -0
  49. package/hooks/gdd-read-injection-scanner.js +44 -0
  50. package/hooks/hooks.json +44 -0
  51. package/package.json +60 -0
  52. package/reference/BRANCH-PROTECTION.md +65 -0
  53. package/reference/DEPRECATIONS.md +41 -0
  54. package/reference/STATE-TEMPLATE.md +200 -0
  55. package/reference/accessibility.md +190 -0
  56. package/reference/anti-patterns.md +336 -0
  57. package/reference/audit-scoring.md +205 -0
  58. package/reference/checklists.md +137 -0
  59. package/reference/config-schema.md +319 -0
  60. package/reference/debugger-philosophy.md +32 -0
  61. package/reference/heuristics.md +201 -0
  62. package/reference/intel-schema.md +266 -0
  63. package/reference/model-prices.md +37 -0
  64. package/reference/model-tiers.md +118 -0
  65. package/reference/motion.md +285 -0
  66. package/reference/parallelism-rules.md +108 -0
  67. package/reference/priority-matrix.md +31 -0
  68. package/reference/project-skills-guide.md +42 -0
  69. package/reference/review-format.md +107 -0
  70. package/reference/schemas/config.schema.json +41 -0
  71. package/reference/schemas/hooks.schema.json +55 -0
  72. package/reference/schemas/intel.schema.json +191 -0
  73. package/reference/schemas/marketplace.schema.json +72 -0
  74. package/reference/schemas/plugin.schema.json +59 -0
  75. package/reference/shared-preamble.md +82 -0
  76. package/reference/typography.md +229 -0
  77. package/scripts/aggregate-agent-metrics.js +144 -0
  78. package/scripts/apply-branch-protection.sh +75 -0
  79. package/scripts/bootstrap-manifest.txt +3 -0
  80. package/scripts/bootstrap.sh +80 -0
  81. package/scripts/build-intel.cjs +458 -0
  82. package/scripts/detect-stale-refs.cjs +101 -0
  83. package/scripts/extract-changelog-section.cjs +57 -0
  84. package/scripts/release-smoke-test.cjs +169 -0
  85. package/scripts/rollback-release.sh +42 -0
  86. package/scripts/run-injection-scanner-ci.cjs +92 -0
  87. package/scripts/validate-frontmatter.cjs +68 -0
  88. package/scripts/validate-schemas.cjs +225 -0
  89. package/scripts/verify-version-sync.cjs +30 -0
  90. package/skills/add-backlog/SKILL.md +47 -0
  91. package/skills/analyze-dependencies/SKILL.md +184 -0
  92. package/skills/apply-reflections/SKILL.md +112 -0
  93. package/skills/audit/SKILL.md +54 -0
  94. package/skills/brief/SKILL.md +75 -0
  95. package/skills/cache-manager/SKILL.md +120 -0
  96. package/skills/compare/SKILL.md +322 -0
  97. package/skills/complete-cycle/SKILL.md +33 -0
  98. package/skills/darkmode/SKILL.md +331 -0
  99. package/skills/debug/SKILL.md +38 -0
  100. package/skills/design/SKILL.md +281 -0
  101. package/skills/discover/SKILL.md +172 -0
  102. package/skills/discuss/SKILL.md +67 -0
  103. package/skills/do/SKILL.md +45 -0
  104. package/skills/explore/SKILL.md +109 -0
  105. package/skills/extract-learnings/SKILL.md +98 -0
  106. package/skills/fast/SKILL.md +44 -0
  107. package/skills/figma-write/SKILL.md +40 -0
  108. package/skills/graphify/SKILL.md +48 -0
  109. package/skills/health/SKILL.md +48 -0
  110. package/skills/help/SKILL.md +76 -0
  111. package/skills/list-assumptions/SKILL.md +60 -0
  112. package/skills/map/SKILL.md +112 -0
  113. package/skills/new-cycle/SKILL.md +35 -0
  114. package/skills/new-project/SKILL.md +53 -0
  115. package/skills/next/SKILL.md +42 -0
  116. package/skills/note/SKILL.md +47 -0
  117. package/skills/optimize/SKILL.md +120 -0
  118. package/skills/pause/SKILL.md +41 -0
  119. package/skills/plan/SKILL.md +251 -0
  120. package/skills/plant-seed/SKILL.md +47 -0
  121. package/skills/pr-branch/SKILL.md +31 -0
  122. package/skills/progress/SKILL.md +60 -0
  123. package/skills/quick/SKILL.md +43 -0
  124. package/skills/reapply-patches/SKILL.md +31 -0
  125. package/skills/reflect/SKILL.md +73 -0
  126. package/skills/resume/SKILL.md +37 -0
  127. package/skills/review-backlog/SKILL.md +45 -0
  128. package/skills/router/SKILL.md +67 -0
  129. package/skills/scan/SKILL.md +721 -0
  130. package/skills/settings/SKILL.md +78 -0
  131. package/skills/ship/SKILL.md +31 -0
  132. package/skills/sketch/SKILL.md +78 -0
  133. package/skills/sketch-wrap-up/SKILL.md +88 -0
  134. package/skills/skill-manifest/SKILL.md +79 -0
  135. package/skills/spike/SKILL.md +67 -0
  136. package/skills/spike-wrap-up/SKILL.md +81 -0
  137. package/skills/stats/SKILL.md +50 -0
  138. package/skills/style/SKILL.md +193 -0
  139. package/skills/synthesize/SKILL.md +93 -0
  140. package/skills/todo/SKILL.md +54 -0
  141. package/skills/undo/SKILL.md +30 -0
  142. package/skills/update/SKILL.md +36 -0
  143. package/skills/verify/SKILL.md +452 -0
  144. package/skills/warm-cache/SKILL.md +113 -0
@@ -0,0 +1,247 @@
1
+ # Chromatic — Connection Specification
2
+
3
+ This file is the connection specification for Chromatic within the get-design-done pipeline. It lives in `connections/` alongside other connection specs. See `connections/connections.md` for the full connection index and capability matrix.
4
+
5
+ ---
6
+
7
+ Chromatic is the **verify stage's visual regression tool** and the **plan stage's change-risk scoping tool**. It captures Storybook story snapshots in the cloud and compares them to approved baselines. Its pipeline role: after a design executor pass, run Chromatic to surface which stories changed visually — the verify stage narrates these changes in plain English. Before planning a token or component change, use `--trace-changed` to enumerate exactly which stories depend on the files being changed, turning vague "this might affect things" into "23 stories are at risk."
8
+
9
+ **Key dependency:** Chromatic requires Storybook. If `storybook: not_configured`, Chromatic cannot function even if its project token is present.
10
+
11
+ ---
12
+
13
+ ## Setup
14
+
15
+ **Prerequisites:**
16
+
17
+ - Storybook configured in the project (see `connections/storybook.md` — Chromatic builds require a working Storybook configuration)
18
+ - Chromatic account created at [chromatic.com](https://www.chromatic.com) — free tier available
19
+
20
+ **Install:**
21
+
22
+ ```bash
23
+ npm install --save-dev chromatic
24
+ ```
25
+
26
+ **Account and token:**
27
+
28
+ 1. Create a Chromatic account at chromatic.com
29
+ 2. Link your repository and create a project
30
+ 3. Copy the project token from the project settings page
31
+ 4. Set the environment variable — **NEVER commit the token to git or to a tracked `.env` file:**
32
+
33
+ ```bash
34
+ export CHROMATIC_PROJECT_TOKEN=<your-token>
35
+ ```
36
+
37
+ Add this to your shell profile or CI environment secrets. Do not add it to `.env` files that are tracked in version control.
38
+
39
+ **First run (baseline establishment):**
40
+
41
+ ```bash
42
+ npx chromatic --project-token $CHROMATIC_PROJECT_TOKEN
43
+ ```
44
+
45
+ The first run creates baseline snapshots for all stories. Every story appears as "new" — this is not a regression. See the Baseline Management section below.
46
+
47
+ **Verification:**
48
+
49
+ ```bash
50
+ command -v chromatic 2>/dev/null || npx chromatic --version
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Why Chromatic is useful
56
+
57
+ Visual regressions are invisible to code review. A token change from `#3B82F6` to `#2563EB` looks like a one-character diff in a CSS file but visually affects every component that uses that token — buttons, links, badges, focus rings — across every state: hover, disabled, active, dark mode.
58
+
59
+ Chromatic snapshots every component state (every Storybook story) and flags pixel-level differences against approved baselines. Without Chromatic:
60
+
61
+ - Manual visual review of all story states is impractical at scale
62
+ - Token changes silently regress secondary states (disabled, loading, edge cases)
63
+ - Dark mode parity breaks go unnoticed until user report
64
+
65
+ With Chromatic:
66
+
67
+ - Every story state is a regression test
68
+ - Changes surface immediately with before/after visual diff
69
+ - `--trace-changed` tells the planner exactly how many stories depend on a given source file before any change is made
70
+
71
+ ---
72
+
73
+ ## When to use Chromatic
74
+
75
+ **Verify stage:** After the design executor runs, run Chromatic to check for visual regressions. The verify stage reads `.design/chromatic-results.json` and narrates the delta in plain English.
76
+
77
+ **Plan stage:** Before writing DESIGN-PLAN.md, run `--trace-changed` to enumerate which stories are affected by the planned token or component changes. Annotate tasks with the at-risk story count.
78
+
79
+ ---
80
+
81
+ ## CLI Commands (not MCP tools — Bash)
82
+
83
+ Chromatic is a CLI tool, not an MCP. All interactions are via Bash commands.
84
+
85
+ | Command | Flags | Returns | Pipeline use |
86
+ |---------|-------|---------|--------------|
87
+ | `npx chromatic` | `--project-token $TOKEN --output json` | JSON build results → `.design/chromatic-results.json` | verify: delta narration (CHR-01) |
88
+ | `npx chromatic` | `--project-token $TOKEN --trace-changed=expanded --dry-run` | Story dependency tree (stdout) | plan: change-risk scoping (CHR-02) |
89
+ | `npx chromatic` | `--project-token $TOKEN --junit-report` | JUnit XML report | CI integration (optional) |
90
+
91
+ **Exit codes:**
92
+
93
+ | Code | Meaning |
94
+ |------|---------|
95
+ | 0 | Build OK — no visual changes detected |
96
+ | 1 | Build has visual changes detected (not necessarily regressions — needs review on chromatic.com) |
97
+ | 2 | Build has errors |
98
+ | 11 | Account quota reached |
99
+
100
+ **Important:** Exit code 1 means changes were detected, NOT that an error occurred. In CI scripts, use `|| true` or check the exit code explicitly — do not treat exit code 1 as a build failure without review.
101
+
102
+ **Full verify run command:**
103
+
104
+ ```bash
105
+ npx chromatic --project-token $CHROMATIC_PROJECT_TOKEN --output json 2>&1 | tee .design/chromatic-results.json
106
+ ```
107
+
108
+ **TurboSnap change-risk command:**
109
+
110
+ ```bash
111
+ npx chromatic --project-token $CHROMATIC_PROJECT_TOKEN --trace-changed=expanded --dry-run 2>&1
112
+ ```
113
+
114
+ `--dry-run` skips publishing to the Chromatic cloud. `--trace-changed=expanded` outputs the full dependency tree showing which story files are affected by which source file changes.
115
+
116
+ ---
117
+
118
+ ## Which Stages Use This Connection
119
+
120
+ | Stage | Agent | Command | Purpose |
121
+ |-------|-------|---------|---------|
122
+ | verify | `agents/design-verifier.md` | `npx chromatic --project-token $TOKEN --output json` | Delta narration; visual regression flagging (CHR-01) |
123
+ | plan | `agents/design-planner.md` | `npx chromatic --project-token $TOKEN --trace-changed=expanded --dry-run` | Story-count annotation for change-risk scoping (CHR-02) |
124
+
125
+ ---
126
+
127
+ ## Availability Probe
128
+
129
+ Chromatic is a CLI tool — the probe is Bash-based, not ToolSearch-based.
130
+
131
+ **Step C1 — CLI presence:**
132
+
133
+ ```bash
134
+ command -v chromatic 2>/dev/null || npx chromatic --version 2>/dev/null
135
+ ```
136
+
137
+ - Command found → proceed to Step C2
138
+ - Not found → `chromatic: not_configured` (skip all Chromatic steps)
139
+
140
+ **Step C2 — Token check:**
141
+
142
+ ```bash
143
+ test -n "${CHROMATIC_PROJECT_TOKEN}"
144
+ ```
145
+
146
+ - Non-empty → `chromatic: available`
147
+ - Empty → `chromatic: unavailable` (CLI present but no project token)
148
+
149
+ **Also check:** If `storybook: not_configured` in STATE.md `<connections>`, Chromatic is effectively unavailable even if the token is present. Emit: "Chromatic requires Storybook — storybook not configured" and skip all Chromatic steps.
150
+
151
+ **Write chromatic status to `.design/STATE.md` `<connections>` after probing.**
152
+
153
+ ---
154
+
155
+ ## Baseline Management
156
+
157
+ Chromatic requires an approved baseline build before it can compute visual diffs. The first run establishes the baseline.
158
+
159
+ **First run behavior:**
160
+
161
+ - Every story snapshot appears with `status: "new"` — this means "first snapshot captured", NOT a regression
162
+ - All stories are automatically accepted as the baseline
163
+ - Subsequent runs compare against these accepted baselines
164
+
165
+ **Subsequent run behavior:**
166
+
167
+ - `status: "unchanged"` — story matches baseline
168
+ - `status: "changed"` — story differs from baseline (regression candidate — review required on chromatic.com)
169
+ - `status: "accepted"` — change was intentionally approved by a reviewer on chromatic.com
170
+ - `status: "new"` — new story added since last build (not a regression)
171
+ - `status: "error"` — story failed to render
172
+
173
+ **Narration rules:**
174
+
175
+ - **First run** (all entries have `status: "new"`): emit "Baseline established — no regressions detected (first run creates baseline)."
176
+ - **Subsequent runs with changes** (`status: "changed"` entries exist): emit "VISUAL REGRESSION CANDIDATES: N stories changed — review required on chromatic.com before merging."
177
+ - **Clean run** (all `status: "unchanged"` or `status: "accepted"`): emit "Visual regression check passed — all stories match baseline."
178
+
179
+ ---
180
+
181
+ ## Fallback Behavior
182
+
183
+ **verify stage:**
184
+
185
+ - `chromatic: unavailable` → skip delta narration; skip visual regression check; note in DESIGN-VERIFICATION.md: "Visual regression check skipped — CHROMATIC_PROJECT_TOKEN not set."
186
+ - `chromatic: not_configured` → same as unavailable; note: "Visual regression check skipped — chromatic CLI not installed (npm install --save-dev chromatic)."
187
+ - `storybook: not_configured` → skip; note: "Visual regression check skipped — Chromatic requires Storybook, which is not configured."
188
+
189
+ **plan stage:**
190
+
191
+ - `chromatic: unavailable` or `not_configured` → skip story-count annotation; design-planner proceeds without at-risk story counts.
192
+ - `storybook: not_configured` → same skip behavior.
193
+
194
+ **Graceful degradation required:** The pipeline must continue when Chromatic is unavailable. Missing visual regression data is a quality reduction, not a blocking error.
195
+
196
+ ---
197
+
198
+ ## STATE.md Integration
199
+
200
+ Every stage that probes Chromatic writes the result to `.design/STATE.md` under the `<connections>` section:
201
+
202
+ ```xml
203
+ <connections>
204
+ figma: available
205
+ refero: not_configured
206
+ storybook: unavailable
207
+ chromatic: available
208
+ </connections>
209
+ ```
210
+
211
+ **Status values:**
212
+
213
+ | Value | Meaning |
214
+ |-------|---------|
215
+ | `available` | CLI present AND `CHROMATIC_PROJECT_TOKEN` is set |
216
+ | `unavailable` | CLI present but `CHROMATIC_PROJECT_TOKEN` is empty |
217
+ | `not_configured` | CLI not found — chromatic not installed |
218
+
219
+ **Note:** Even with `chromatic: available`, if `storybook: not_configured`, Chromatic cannot run. Stages must check both statuses before invoking Chromatic.
220
+
221
+ ---
222
+
223
+ ## Caveats and Pitfalls
224
+
225
+ **1. First run is always 100% "new" — not regressions**
226
+
227
+ On the first Chromatic run (no existing baseline), every story registers as `status: "new"`. This is expected and correct — Chromatic is establishing the baseline, not detecting regressions. The verify stage must detect this condition (all entries `status: "new"`) and emit the baseline-establishment message rather than a regression alert.
228
+
229
+ **2. CHROMATIC_PROJECT_TOKEN security**
230
+
231
+ `CHROMATIC_PROJECT_TOKEN` grants write access to your Chromatic project (publish builds, approve snapshots). Treat it like a password:
232
+ - Set it as an environment variable in your shell profile or CI secrets
233
+ - Never commit it to git (not in source files, not in `.env`, not in configuration files)
234
+ - Never log it in CI output
235
+ - Rotate it if it is exposed
236
+
237
+ **3. Exit code 1 is not an error**
238
+
239
+ Exit code 1 means visual changes were detected — it is expected and normal after a design pass. Do not configure CI to fail on exit code 1 without a review step. Use `|| true` in scripts if you want the command to not block CI, then check the results separately.
240
+
241
+ **4. `--dry-run` and `--output json` are separate, incompatible for narration**
242
+
243
+ `--dry-run` skips publishing to Chromatic cloud — it does NOT produce chromatic-results.json. Use `--output json` (without `--dry-run`) for verify-stage narration. Use `--trace-changed=expanded --dry-run` for plan-stage scoping (which doesn't need the results file).
244
+
245
+ **5. Storybook dependency is hard**
246
+
247
+ Chromatic builds your Storybook and uploads the output to the cloud. If Storybook is not installed or `storybook build` fails, Chromatic will fail. Always check `storybook: not_configured` before attempting to run Chromatic.
@@ -0,0 +1,190 @@
1
+ # Claude Design — Connection Specification
2
+
3
+ This file is the connection specification for Claude Design (https://claude.ai/design, Anthropic Labs) within the get-design-done pipeline. Its primary role is to enable handoff-first workflows: when a Claude Design handoff bundle is available, users can skip the scan/discover/plan stages and route directly to verify. Claude Design is not an MCP server — it is a browser-based design tool that produces exportable handoff bundles. See `connections/connections.md` for the full connection index and capability matrix.
4
+
5
+ ---
6
+
7
+ ## What Is a Claude Design Handoff Bundle?
8
+
9
+ Claude Design produces AI-generated designs that can be exported as **handoff bundles**. A bundle contains:
10
+
11
+ | Artifact | Format | Contains |
12
+ |----------|--------|---------|
13
+ | Standalone HTML export | `.html` | Rendered component tree, inline CSS (design tokens as CSS custom properties), component structure, color/spacing/typography values |
14
+ | Design spec (optional) | `.md` or `.json` | Design decisions as structured text, token tables, component annotations |
15
+ | Assets (optional) | `assets/` dir | Icons, images referenced by the HTML export |
16
+
17
+ **Bundle entry point:** The primary parseable artifact is the HTML export. It contains inline `<style>` blocks with CSS custom properties (e.g., `--color-primary: #3B82F6`) and class-level token usage.
18
+
19
+ **Bundle discovery:** The pipeline looks for the bundle in:
20
+ 1. The path passed via `--from-handoff <path>` flag or `handoff <path>` sub-command
21
+ 2. The value of `handoff_source` in `.design/STATE.md` (if a prior session already set it)
22
+ 3. A `claude-design-handoff.html` file in the project root (convention — not required)
23
+
24
+ ---
25
+
26
+ ## Handoff Bundle Format — Field Catalogue
27
+
28
+ ### From the HTML export (primary parsing target)
29
+
30
+ | Field type | CSS pattern to grep | Example | D-XX mapping |
31
+ |------------|--------------------|---------|-----------|
32
+ | Color tokens | `--color-[name]:` in `<style>` | `--color-primary: #3B82F6` | `[Color] Primary: #3B82F6` |
33
+ | Spacing tokens | `--spacing-[n]:` in `<style>` | `--spacing-4: 1rem` | `[Spacing] Scale unit: 1rem (4px base)` |
34
+ | Typography tokens | `--font-[family|size|weight]:` in `<style>` | `--font-family: Inter, sans-serif` | `[Typography] Font family: Inter` |
35
+ | Radius tokens | `--radius-[n]:` in `<style>` | `--radius-md: 8px` | `[Radius] Default: 8px` |
36
+ | Shadow tokens | `--shadow-[level]:` in `<style>` | `--shadow-sm: 0 1px 2px` | `[Shadow] Elevation-sm: 0 1px 2px` |
37
+ | Component names | `<section class="component-[name]">` | `component-button` | `[Component] Button exists` |
38
+ | Layout pattern | `display: [grid\|flex]` in component sections | `display: grid; grid-template-columns: repeat(3, 1fr)` | `[Layout] Card grid: 3-col` |
39
+
40
+ ### From the spec markdown/JSON (secondary, if present)
41
+
42
+ Grep for `Decision:`, `Rationale:`, `Token:`, `Component:` prefixes. Treat as pre-formed D-XX entries — translate directly into STATE.md decisions with `(source: claude-design-handoff)` tag.
43
+
44
+ ---
45
+
46
+ ## Adapter Pattern — Bundle Fields → D-XX Decisions
47
+
48
+ The `design-research-synthesizer` runs in `handoff` mode when `handoff_source` is present in STATE.md. It:
49
+
50
+ 1. Parses the HTML export for CSS custom properties (colors, spacing, typography, radius, shadows)
51
+ 2. Reads any `.md` spec file in the same directory as the HTML export
52
+ 3. Translates each found value into a D-XX decision entry
53
+ 4. Tags all entries: `(source: claude-design-handoff)` + `(tentative — confirm with user)` for inferred values, `(locked — from handoff spec)` for explicit spec values
54
+ 5. Appends all entries to STATE.md `<decisions>` block and `.design/DESIGN-CONTEXT.md`
55
+
56
+ **Confidence levels:**
57
+
58
+ | Source | Tag | Confidence |
59
+ |--------|-----|-----------|
60
+ | Explicit spec markdown `Decision: ...` | `(locked — from handoff spec)` | High — treat as confirmed |
61
+ | CSS custom property in `<style>` | `(tentative — from handoff CSS)` | Medium — surfaced to user for confirm |
62
+ | Inferred from class structure | `(tentative — inferred)` | Low — always surface to user |
63
+
64
+ ---
65
+
66
+ ## Stage Routing for Handoff Workflows
67
+
68
+ When `handoff_source` is set in STATE.md:
69
+
70
+ ```
71
+ Normal pipeline: scan → discover → plan → design → verify
72
+ Handoff pipeline: [scan skipped] → [discover skipped] → [plan skipped] → verify
73
+ ```
74
+
75
+ **What skipped stages write to STATE.md:**
76
+
77
+ ```xml
78
+ <position>
79
+ stage: verify
80
+ wave: 1
81
+ task_progress: 0/0
82
+ status: handoff-sourced
83
+ handoff_source: claude-design-html
84
+ skipped_stages: scan, discover, plan
85
+ </position>
86
+ ```
87
+
88
+ **Verify `--post-handoff` mode** (implemented in plan 09-05):
89
+ - DESIGN-PLAN.md prerequisite check is relaxed (no DESIGN-PLAN.md exists for handoff flows)
90
+ - Adds "Handoff Faithfulness" section to DESIGN-VERIFICATION.md
91
+ - All other verify checks run normally
92
+
93
+ ---
94
+
95
+ ## Reverse Workflow — DESIGN.md → Claude Design Onboarding
96
+
97
+ After a successful implementation cycle, the pipeline can produce a design spec document that can be shared back with Claude Design (or any AI design tool) as an onboarding artifact:
98
+
99
+ 1. Run `/gdd:style` to generate `DESIGN-STYLE-[Component].md` for key components
100
+ 2. Collect the D-XX decisions from STATE.md `<decisions>` block
101
+ 3. Combine into `DESIGN.md` (or use the existing one if it was produced by the pipeline)
102
+
103
+ This `DESIGN.md` + `DESIGN-STYLE-*.md` set can be copy-pasted into a Claude Design conversation to seed a new AI design iteration with the implemented system's actual values — "feed the code back to the designer."
104
+
105
+ **No automation is required for this workflow** — it is a manual copy-paste operation. The connection spec documents it so users know it is possible.
106
+
107
+ ---
108
+
109
+ ## Availability Probe
110
+
111
+ Claude Design is not an MCP server — it has no tools to probe via ToolSearch. Availability is determined by whether the user has provided a handoff bundle path.
112
+
113
+ **Probe pattern:**
114
+
115
+ ```
116
+ At scan stage entry:
117
+ 1. Check STATE.md <position> for handoff_source field
118
+ 2. Check $ARGUMENTS for --from-handoff <path> flag
119
+ 3. Check project root for claude-design-handoff.html
120
+
121
+ → Bundle path found AND file exists → claude_design: available
122
+ → Bundle path provided but file missing/bad → claude_design: unavailable
123
+ → No bundle path, no file → claude_design: not_configured
124
+ ```
125
+
126
+ Write result to STATE.md `<connections>` at scan entry.
127
+
128
+ **Verdict summary:**
129
+
130
+ | Value | Meaning |
131
+ |-------|---------|
132
+ | `available` | A handoff bundle path was supplied and the file exists/parses |
133
+ | `unavailable` | A handoff path was configured but the file is missing, unreadable, or malformed |
134
+ | `not_configured` | No handoff bundle was supplied and none was discovered in the conventional location |
135
+
136
+ ---
137
+
138
+ ## STATE.md Integration
139
+
140
+ ### `<connections>` block
141
+
142
+ ```xml
143
+ <connections>
144
+ figma: available
145
+ refero: not_configured
146
+ preview: available
147
+ storybook: not_configured
148
+ chromatic: not_configured
149
+ figma_writer: not_configured
150
+ graphify: not_configured
151
+ pinterest: not_configured
152
+ claude_design: available
153
+ </connections>
154
+ ```
155
+
156
+ ### `<position>` block — handoff fields (added to STATE-TEMPLATE in plan 09-03)
157
+
158
+ ```xml
159
+ <position>
160
+ stage: verify
161
+ wave: 1
162
+ task_progress: 0/0
163
+ status: handoff-sourced
164
+ handoff_source: claude-design-html
165
+ handoff_path: ./claude-design-handoff.html
166
+ skipped_stages: scan, discover, plan
167
+ </position>
168
+ ```
169
+
170
+ **`handoff_source` values:**
171
+
172
+ | Value | Meaning |
173
+ |-------|---------|
174
+ | `claude-design-html` | Bundle is a standalone HTML export from Claude Design |
175
+ | `claude-design-bundle` | Bundle is a directory with HTML + spec markdown + assets |
176
+ | `manual` | User manually initialized STATE.md with design decisions (no bundle file) |
177
+
178
+ ---
179
+
180
+ ## Caveats and Pitfalls
181
+
182
+ 1. **Handoff bundle format is undocumented by Anthropic.** The Claude Design handoff bundle format is inferred from the product announcement and common HTML export patterns. The pipeline uses defensive parsing: grep for CSS custom properties in `<style>` tags, extract component class names from `class="component-*"` patterns, and fall back to the spec markdown/JSON if CSS parsing yields no results. If the format changes in a future Claude Design release, update this spec and the synthesizer's parsing patterns.
183
+
184
+ 2. **`(tentative)` decisions MUST be confirmed by the user.** The discussant `--from-handoff` mode surfaces all tentative decisions for confirmation before proceeding to verify. Do NOT skip this step — implementing against unconfirmed inferred values is the primary failure mode of handoff-sourced workflows.
185
+
186
+ 3. **Skipped stages mean no DESIGN-PLAN.md.** Verify's normal prerequisite check requires DESIGN-PLAN.md. Handoff mode bypasses this check (plan 09-05 implements the relaxation). If running verify manually after a handoff, always pass `--post-handoff` to prevent the prerequisite check from blocking.
187
+
188
+ 4. **Handoff faithfulness is grep-based, not visual.** The Handoff Faithfulness score in DESIGN-VERIFICATION.md compares token values between the handoff bundle and the implemented code — it does NOT use computer vision or screenshot comparison. Visual fidelity between the Claude Design render and the implementation is currently out of scope (requires computer-use, deferred to a future phase).
189
+
190
+ 5. **Reverse workflow is manual — no automation.** The DESIGN.md → Claude Design onboarding flow is documentation of a manual workflow. The pipeline does not auto-post to Claude Design or call any external API.
@@ -0,0 +1,218 @@
1
+ # Connections — Index and Capability Matrix
2
+
3
+ This directory contains connection specifications for external tools and MCPs that the get-design-done pipeline integrates with. Each connection has its own spec file. This file is the index.
4
+
5
+ ---
6
+
7
+ ## Active Connections
8
+
9
+ | Connection | Status | Spec File | Notes |
10
+ |-----------|--------|-----------|-------|
11
+ | Figma | Active | [`connections/figma.md`](connections/figma.md) | Uses `mcp__figma-desktop__*` tools (official Figma Desktop MCP) |
12
+ | Refero | Active | [`connections/refero.md`](connections/refero.md) | Uses `mcp__refero__*` tools (verify names via ToolSearch) |
13
+ | Preview | Active | [`connections/preview.md`](connections/preview.md) | Uses `mcp__Claude_Preview__*` tools |
14
+ | Storybook | Active | [`connections/storybook.md`](connections/storybook.md) | HTTP probe: `localhost:6006/index.json` |
15
+ | Chromatic | Active | [`connections/chromatic.md`](connections/chromatic.md) | CLI: `npx chromatic`; env: `CHROMATIC_PROJECT_TOKEN` |
16
+ | Figma Writer | Active | [`connections/figma-writer.md`](connections/figma-writer.md) | Uses `mcp__figma__use_figma` (remote MCP) |
17
+ | Graphify | Active | [`connections/graphify.md`](connections/graphify.md) | CLI: `graphify`; `gsd-tools graphify *` |
18
+ | Pinterest | Active | [`connections/pinterest.md`](connections/pinterest.md) | `mcp__mcp-pinterest__*` tools (ToolSearch-only probe; headless scraping, no API key) |
19
+ | Claude Design | Active | [`connections/claude-design.md`](connections/claude-design.md) | No MCP — bundle file probe; enables `/gdd:handoff` pipeline + bidirectional write-back via figma-writer |
20
+
21
+ ---
22
+
23
+ ## Capability Matrix
24
+
25
+ Each cell describes what the connection contributes at that pipeline stage, or `—` if it is not used.
26
+
27
+ | Connection | scan | discover | plan | design | verify |
28
+ |-----------|------|----------|------|--------|--------|
29
+ | Figma | token augmentation via `get_variable_defs` (CONN-03) | decisions pre-populate via `get_variable_defs` (CONN-04) | — | — | — |
30
+ | Refero | — | reference search via `mcp__refero__search`; fallback → awesome-design-md (CONN-05) | — | — | — |
31
+ | Preview | — | — | — | — | screenshots for `? VISUAL` checks (VIS-02) |
32
+ | Storybook | — | component inventory (STB-01) | change-risk via story count (STB-02) | `.stories.tsx` stub (STB-03) | a11y per story (STB-02) |
33
+ | Chromatic | — | — | change-risk scoping (CHR-02) | — | visual delta narration (CHR-01) |
34
+ | Figma Writer | — | — | — | write tokens/annotations/Code Connect (FWR-01..04) | — |
35
+ | Graphify | — | — | dependency scoping (GRF-03) | — | orphan detection (GRF-04) |
36
+ | Pinterest | probe only | visual reference search via `pinterest_search`; fallback → Refero → awesome-design-md | — | — | — |
37
+ | 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 |
38
+
39
+ **Column definitions:**
40
+
41
+ - **scan** — what the connection provides when the scan stage runs (design tokens, source metadata)
42
+ - **discover** — what the connection provides during discovery (visual references, design decisions)
43
+ - **plan** — what the connection contributes to planning artifacts
44
+ - **design** — what the connection provides during design execution
45
+ - **verify** — what the connection checks or surfaces during verification
46
+
47
+ ---
48
+
49
+ ## Connection Probe Pattern
50
+
51
+ This is the canonical probe pattern. All stages copy this prose inline — SKILL.md files have no include mechanism, so each stage repeats the relevant subset verbatim. The specification lives here; stages copy from it.
52
+
53
+ **Why ToolSearch first:** MCP tools may be in the deferred tool set (not loaded into context at session start when many servers are registered). Calling a deferred tool directly fails silently. ToolSearch loads the tools into context and confirms presence in a single call — always call it before any MCP tool invocation.
54
+
55
+ **Three-value status schema (fixed — do not extend):**
56
+
57
+ | Status | Meaning |
58
+ |--------|---------|
59
+ | `available` | MCP tool confirmed present and responsive |
60
+ | `unavailable` | MCP tool is in the session but errored (app offline, auth failure, rate-limited) |
61
+ | `not_configured` | ToolSearch returned empty — MCP not registered in this session |
62
+
63
+ **STATE.md format:**
64
+
65
+ ```xml
66
+ <connections>
67
+ figma: available
68
+ refero: not_configured
69
+ </connections>
70
+ ```
71
+
72
+ `<connections>` is the single source of truth across stages. Every stage reads it before deciding whether to invoke an MCP tool. Every stage writes to it after probing.
73
+
74
+ ---
75
+
76
+ **Figma probe (execute at stage entry, after reading STATE.md):**
77
+
78
+ ```
79
+ Step A1 — ToolSearch check:
80
+ ToolSearch({ query: "select:mcp__figma-desktop__get_metadata", max_results: 1 })
81
+ → Empty result → figma: not_configured (skip all Figma steps)
82
+ → Non-empty result → proceed to Step A2
83
+
84
+ Step A2 — Live tool call:
85
+ call mcp__figma-desktop__get_metadata
86
+ → Success → figma: available
87
+ → Error → figma: unavailable (skip all Figma steps)
88
+
89
+ Write figma status to STATE.md <connections>.
90
+ ```
91
+
92
+ **Refero probe (execute at stage entry, after reading STATE.md):**
93
+
94
+ ```
95
+ Step B1 — ToolSearch check:
96
+ ToolSearch({ query: "refero", max_results: 5 })
97
+ → Empty result → refero: not_configured (use fallback chain)
98
+ → Non-empty result → refero: available
99
+
100
+ Write refero status to STATE.md <connections>.
101
+ ```
102
+
103
+ Note: Refero probe is ToolSearch-only (no live tool call). ToolSearch presence is sufficient; a live Refero search as probe would waste tokens before confirming the connection is even needed.
104
+
105
+ ---
106
+
107
+ **Preview probe (execute at stage entry, after reading STATE.md):**
108
+
109
+ ```
110
+ Step P1 — ToolSearch check:
111
+ ToolSearch({ query: "Claude_Preview", max_results: 5 })
112
+ → Empty result → preview: not_configured
113
+ → Non-empty result → proceed to Step P2
114
+
115
+ Step P2 — Live tool call:
116
+ call mcp__Claude_Preview__preview_list
117
+ → Success (list returned, may be empty) → preview: available
118
+ → Error → preview: unavailable
119
+
120
+ Write preview status to STATE.md <connections>.
121
+ ```
122
+
123
+ **Storybook probe (execute at stage entry, after reading STATE.md):**
124
+
125
+ ```
126
+ Step S1 — HTTP check (Storybook 8):
127
+ Bash: curl -sf http://localhost:6006/index.json 2>/dev/null
128
+ → Success (JSON) → storybook: available
129
+ → Failure → proceed to Step S2
130
+
131
+ Step S2 — HTTP fallback (Storybook 7):
132
+ Bash: curl -sf http://localhost:6006/stories.json 2>/dev/null
133
+ → Success (JSON) → storybook: available
134
+ → Failure → storybook: not_configured
135
+
136
+ Write storybook status to STATE.md <connections>.
137
+ ```
138
+
139
+ Note: Storybook 8 index.json does NOT include parameters. Use id, title, name, type, kind, tags fields only.
140
+
141
+ **Chromatic probe (execute at stage entry, after reading STATE.md):**
142
+
143
+ ```
144
+ Step C1 — CLI check:
145
+ Bash: command -v chromatic || npx --yes chromatic --version 2>/dev/null
146
+ → Exits non-zero → chromatic: not_configured (skip all Chromatic steps)
147
+ → Exits 0 → proceed to Step C2
148
+
149
+ Step C2 — Token check:
150
+ Check env var: CHROMATIC_PROJECT_TOKEN
151
+ → Absent or empty → chromatic: unavailable (CLI present but not configured)
152
+ → Present → chromatic: available
153
+
154
+ Write chromatic status to STATE.md <connections>.
155
+ ```
156
+
157
+ Note: First Chromatic run has no baseline — all stories become new snapshots. This is expected; it establishes the baseline.
158
+
159
+ **Figma Writer probe (execute before any write operation):**
160
+
161
+ ```
162
+ Step R1 — ToolSearch check:
163
+ ToolSearch({ query: "mcp__figma__use_figma", max_results: 1 })
164
+ → Empty result → figma_writer: not_configured
165
+ → Non-empty result → figma_writer: available
166
+
167
+ Write figma_writer status to STATE.md <connections>.
168
+ ```
169
+
170
+ Note: figma_writer is a separate connection key from figma (desktop). Both can be active simultaneously. There is no `unavailable` state for figma_writer — the ToolSearch-only probe cannot detect auth failures; those surface at execution time.
171
+
172
+ **Graphify probe (execute at agent entry, before using graph):**
173
+
174
+ ```
175
+ Step G1 — Config check:
176
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" graphify status
177
+ → Error or { enabled: false } → graphify: not_configured
178
+ → { enabled: true } → proceed to Step G2
179
+
180
+ Step G2 — Graph file check:
181
+ Check if graphify-out/graph.json exists in project root
182
+ → Absent → graphify: unavailable (graph not built yet)
183
+ → Present → graphify: available
184
+
185
+ Write graphify status to STATE.md <connections>.
186
+ ```
187
+
188
+ ---
189
+
190
+ **Graceful degradation required:** stages MUST continue when a connection is `unavailable` or `not_configured`. Skip connection-dependent steps. If a missing connection prevents a `must_have` from being satisfied, append a `<blocker>` to `.design/STATE.md` and continue.
191
+
192
+ For full per-connection fallback details, see the spec files: [`connections/figma.md`](connections/figma.md), [`connections/refero.md`](connections/refero.md), [`connections/preview.md`](connections/preview.md), [`connections/storybook.md`](connections/storybook.md), [`connections/chromatic.md`](connections/chromatic.md), [`connections/figma-writer.md`](connections/figma-writer.md), and [`connections/graphify.md`](connections/graphify.md).
193
+
194
+ ---
195
+
196
+ ## Extensibility Guide
197
+
198
+ To add a new connection to the pipeline:
199
+
200
+ 1. **Create the spec file.** Write `connections/<connection-name>.md` following the structure of `connections/refero.md`: what the tool does, when to use it, available MCP tools, search/invocation strategy, fallbacks, anti-patterns.
201
+
202
+ 2. **Register in this file.** Add a row to the Active Connections table above (status, spec file path, MCP tool prefix).
203
+
204
+ 3. **Update the Capability Matrix.** Add a row for the new connection. Mark the stages it feeds with a short capability noun; use `—` for stages it does not affect.
205
+
206
+ 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-only MCP connections, use `connections/figma.md` as the model. For remote MCP write connections, use `connections/figma-writer.md` as the model.
207
+
208
+ 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>`.
209
+
210
+ 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.
211
+
212
+ ---
213
+
214
+ ## Notes
215
+
216
+ - `connections/` is infrastructure scaffolding introduced in Phase 1. Stage integration (wiring detection and graceful degradation into each stage) is Phase 2 work.
217
+ - Phase 8 added five new active connections. Linear and GitHub remain planned for a future phase.
218
+ - The capability matrix columns map to the five pipeline stages: `scan | discover | plan | design | verify`.