@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.
- package/.claude-plugin/marketplace.json +63 -0
- package/.claude-plugin/plugin.json +54 -0
- package/CHANGELOG.md +221 -0
- package/LICENSE +21 -0
- package/README.md +724 -0
- package/SKILL.md +232 -0
- package/agents/README.md +226 -0
- package/agents/a11y-mapper.md +118 -0
- package/agents/component-taxonomy-mapper.md +88 -0
- package/agents/design-advisor.md +139 -0
- package/agents/design-assumptions-analyzer.md +171 -0
- package/agents/design-auditor.md +383 -0
- package/agents/design-context-builder.md +544 -0
- package/agents/design-context-checker-gate.md +90 -0
- package/agents/design-context-checker.md +260 -0
- package/agents/design-discussant.md +98 -0
- package/agents/design-doc-writer.md +229 -0
- package/agents/design-executor.md +452 -0
- package/agents/design-figma-writer.md +302 -0
- package/agents/design-fixer.md +180 -0
- package/agents/design-integration-checker-gate.md +93 -0
- package/agents/design-integration-checker.md +326 -0
- package/agents/design-pattern-mapper.md +206 -0
- package/agents/design-phase-researcher.md +229 -0
- package/agents/design-plan-checker.md +164 -0
- package/agents/design-planner.md +352 -0
- package/agents/design-reflector.md +175 -0
- package/agents/design-research-synthesizer.md +127 -0
- package/agents/design-verifier-gate.md +97 -0
- package/agents/design-verifier.md +605 -0
- package/agents/gdd-graphify-sync.md +100 -0
- package/agents/gdd-intel-updater.md +88 -0
- package/agents/gdd-learnings-extractor.md +85 -0
- package/agents/motion-mapper.md +103 -0
- package/agents/token-mapper.md +103 -0
- package/agents/visual-hierarchy-mapper.md +95 -0
- package/connections/chromatic.md +247 -0
- package/connections/claude-design.md +190 -0
- package/connections/connections.md +218 -0
- package/connections/figma-writer.md +139 -0
- package/connections/figma.md +146 -0
- package/connections/graphify.md +197 -0
- package/connections/pinterest.md +153 -0
- package/connections/preview.md +173 -0
- package/connections/refero.md +189 -0
- package/connections/storybook.md +280 -0
- package/hooks/budget-enforcer.js +318 -0
- package/hooks/context-exhaustion.js +127 -0
- package/hooks/gdd-read-injection-scanner.js +44 -0
- package/hooks/hooks.json +44 -0
- package/package.json +60 -0
- package/reference/BRANCH-PROTECTION.md +65 -0
- package/reference/DEPRECATIONS.md +41 -0
- package/reference/STATE-TEMPLATE.md +200 -0
- package/reference/accessibility.md +190 -0
- package/reference/anti-patterns.md +336 -0
- package/reference/audit-scoring.md +205 -0
- package/reference/checklists.md +137 -0
- package/reference/config-schema.md +319 -0
- package/reference/debugger-philosophy.md +32 -0
- package/reference/heuristics.md +201 -0
- package/reference/intel-schema.md +266 -0
- package/reference/model-prices.md +37 -0
- package/reference/model-tiers.md +118 -0
- package/reference/motion.md +285 -0
- package/reference/parallelism-rules.md +108 -0
- package/reference/priority-matrix.md +31 -0
- package/reference/project-skills-guide.md +42 -0
- package/reference/review-format.md +107 -0
- package/reference/schemas/config.schema.json +41 -0
- package/reference/schemas/hooks.schema.json +55 -0
- package/reference/schemas/intel.schema.json +191 -0
- package/reference/schemas/marketplace.schema.json +72 -0
- package/reference/schemas/plugin.schema.json +59 -0
- package/reference/shared-preamble.md +82 -0
- package/reference/typography.md +229 -0
- package/scripts/aggregate-agent-metrics.js +144 -0
- package/scripts/apply-branch-protection.sh +75 -0
- package/scripts/bootstrap-manifest.txt +3 -0
- package/scripts/bootstrap.sh +80 -0
- package/scripts/build-intel.cjs +458 -0
- package/scripts/detect-stale-refs.cjs +101 -0
- package/scripts/extract-changelog-section.cjs +57 -0
- package/scripts/release-smoke-test.cjs +169 -0
- package/scripts/rollback-release.sh +42 -0
- package/scripts/run-injection-scanner-ci.cjs +92 -0
- package/scripts/validate-frontmatter.cjs +68 -0
- package/scripts/validate-schemas.cjs +225 -0
- package/scripts/verify-version-sync.cjs +30 -0
- package/skills/add-backlog/SKILL.md +47 -0
- package/skills/analyze-dependencies/SKILL.md +184 -0
- package/skills/apply-reflections/SKILL.md +112 -0
- package/skills/audit/SKILL.md +54 -0
- package/skills/brief/SKILL.md +75 -0
- package/skills/cache-manager/SKILL.md +120 -0
- package/skills/compare/SKILL.md +322 -0
- package/skills/complete-cycle/SKILL.md +33 -0
- package/skills/darkmode/SKILL.md +331 -0
- package/skills/debug/SKILL.md +38 -0
- package/skills/design/SKILL.md +281 -0
- package/skills/discover/SKILL.md +172 -0
- package/skills/discuss/SKILL.md +67 -0
- package/skills/do/SKILL.md +45 -0
- package/skills/explore/SKILL.md +109 -0
- package/skills/extract-learnings/SKILL.md +98 -0
- package/skills/fast/SKILL.md +44 -0
- package/skills/figma-write/SKILL.md +40 -0
- package/skills/graphify/SKILL.md +48 -0
- package/skills/health/SKILL.md +48 -0
- package/skills/help/SKILL.md +76 -0
- package/skills/list-assumptions/SKILL.md +60 -0
- package/skills/map/SKILL.md +112 -0
- package/skills/new-cycle/SKILL.md +35 -0
- package/skills/new-project/SKILL.md +53 -0
- package/skills/next/SKILL.md +42 -0
- package/skills/note/SKILL.md +47 -0
- package/skills/optimize/SKILL.md +120 -0
- package/skills/pause/SKILL.md +41 -0
- package/skills/plan/SKILL.md +251 -0
- package/skills/plant-seed/SKILL.md +47 -0
- package/skills/pr-branch/SKILL.md +31 -0
- package/skills/progress/SKILL.md +60 -0
- package/skills/quick/SKILL.md +43 -0
- package/skills/reapply-patches/SKILL.md +31 -0
- package/skills/reflect/SKILL.md +73 -0
- package/skills/resume/SKILL.md +37 -0
- package/skills/review-backlog/SKILL.md +45 -0
- package/skills/router/SKILL.md +67 -0
- package/skills/scan/SKILL.md +721 -0
- package/skills/settings/SKILL.md +78 -0
- package/skills/ship/SKILL.md +31 -0
- package/skills/sketch/SKILL.md +78 -0
- package/skills/sketch-wrap-up/SKILL.md +88 -0
- package/skills/skill-manifest/SKILL.md +79 -0
- package/skills/spike/SKILL.md +67 -0
- package/skills/spike-wrap-up/SKILL.md +81 -0
- package/skills/stats/SKILL.md +50 -0
- package/skills/style/SKILL.md +193 -0
- package/skills/synthesize/SKILL.md +93 -0
- package/skills/todo/SKILL.md +54 -0
- package/skills/undo/SKILL.md +30 -0
- package/skills/update/SKILL.md +36 -0
- package/skills/verify/SKILL.md +452 -0
- package/skills/warm-cache/SKILL.md +113 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-debug
|
|
3
|
+
description: "Symptom-driven design investigation with persistent state. Writes findings to .design/DEBUG.md."
|
|
4
|
+
argument-hint: "[<symptom description>]"
|
|
5
|
+
tools: Read, Write, Grep, Glob, AskUserQuestion, Task
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /gdd:debug
|
|
9
|
+
|
|
10
|
+
Systematic, checkpoint-driven design debugger. Loads philosophy from `reference/debugger-philosophy.md` and writes every investigation step to `.design/DEBUG.md` so killed sessions can resume.
|
|
11
|
+
|
|
12
|
+
## Steps
|
|
13
|
+
|
|
14
|
+
1. **Load philosophy**: Read `reference/debugger-philosophy.md` and keep its five principles in mind for the entire session.
|
|
15
|
+
2. **Symptom**: If no symptom argument was passed, ask (AskUserQuestion): "What design symptom are you investigating? (observable only — 'cards look crowded', not 'padding is wrong')"
|
|
16
|
+
3. **Resume check**: Read `.design/DEBUG.md` if it exists. If there is an open session with no `### Fix Proposal` block, ask: "Resume existing session '<symptom>' or start a new one?"
|
|
17
|
+
4. **Ground truth load**: Read `.design/DESIGN-PLAN.md` (goals), `.design/STATE.md` `<decisions>` block (D-XX items), and any relevant source files pointed at by the symptom.
|
|
18
|
+
5. **Optional rendered-output check**: Use ToolSearch to see if Playwright/Preview MCP tools are available. If yes, capture rendered state. If no, fall back to code-only analysis.
|
|
19
|
+
6. **Investigation loop** — for each step:
|
|
20
|
+
- Form one hypothesis (one variable).
|
|
21
|
+
- Investigate (read files, grep, measure).
|
|
22
|
+
- Append to `.design/DEBUG.md`:
|
|
23
|
+
```markdown
|
|
24
|
+
## <symptom> — <date>
|
|
25
|
+
### Hypothesis <N>
|
|
26
|
+
### Investigation
|
|
27
|
+
### Finding
|
|
28
|
+
```
|
|
29
|
+
- Ask (AskUserQuestion): "Continue investigating? (yes / found it / dead end)"
|
|
30
|
+
7. **When found**: Write `### Fix Proposal` block with a concrete patch description. Ask: "Create a todo with `/gdd:todo add`, or execute the fix now?"
|
|
31
|
+
|
|
32
|
+
## Do Not
|
|
33
|
+
|
|
34
|
+
- Do not change multiple variables at once.
|
|
35
|
+
- Do not modify global tokens to fix a single component without explicit user approval.
|
|
36
|
+
- Do not close the DEBUG.md session without a finding (mark as "dead end" if abandoned).
|
|
37
|
+
|
|
38
|
+
## DEBUG COMPLETE
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design
|
|
3
|
+
description: "Stage 4 of 5 — reads DESIGN-PLAN.md, spawns design-executor per task with wave coordination and parallel/sequential routing. Thin orchestrator."
|
|
4
|
+
argument-hint: "[--auto] [--parallel]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Get Design Done — Design
|
|
9
|
+
|
|
10
|
+
**Stage 4 of 5** in the get-design-done pipeline. Thin orchestrator. All design execution intelligence lives in `agents/design-executor.md`.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## State Integration
|
|
15
|
+
|
|
16
|
+
1. Read `.design/STATE.md`.
|
|
17
|
+
- **If missing:** create minimal skeleton from `reference/STATE-TEMPLATE.md` with `stage: design`, `status: in_progress`; log warning: "STATE.md not found — creating from template. Prior stage outputs may be incomplete."
|
|
18
|
+
- **If present and `stage == design` and `status == in_progress`:** RESUME — use `task_progress` numerator as source of truth; skip tasks that already have a corresponding `.design/tasks/task-NN.md` file.
|
|
19
|
+
- **Otherwise:** normal transition — set `stage: design`, `status: in_progress`.
|
|
20
|
+
2. Probe `<connections>`, update `last_checkpoint`, write STATE.md.
|
|
21
|
+
|
|
22
|
+
Abort only if `.design/DESIGN-PLAN.md` is missing:
|
|
23
|
+
> "No plan found. Run `/get-design-done:plan` first."
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Flag Parsing
|
|
28
|
+
|
|
29
|
+
- `--auto` → `auto_mode=true` (no mid-stage prompts; architectural deviations still stop the individual task but continue with remaining tasks)
|
|
30
|
+
- `--parallel` → `parallel_mode=true` (use worktree isolation for `Parallel: true` tasks)
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Pre-execution — Directionally-open check
|
|
35
|
+
|
|
36
|
+
Scan DESIGN-PLAN.md for tasks marked as "directionally open" (exploration-appropriate — e.g., tasks whose acceptance criteria read "explore N directions" or "pick a visual approach"). If any are found, print:
|
|
37
|
+
|
|
38
|
+
> "Tasks [IDs] appear directionally open — consider running `/gdd:sketch` first to explore variants before implementation."
|
|
39
|
+
|
|
40
|
+
Skip if `auto_mode=true`.
|
|
41
|
+
|
|
42
|
+
## Pre-execution — Project-local conventions
|
|
43
|
+
|
|
44
|
+
When spawning the executor, include any `./.claude/skills/design-*-conventions.md` files in `<required_reading>` so the executor sees project-local design conventions (typography, color, layout, motion, component, interaction decisions codified from prior sketch wrap-ups). Also include any `~/.claude/gdd/global-skills/*.md` files if the directory exists � global skills are cross-project conventions that inform but do not override project-local D-XX decisions.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
### .stories.tsx Stub (when storybook project detected)
|
|
49
|
+
|
|
50
|
+
After every new component file is created by the design-executor:
|
|
51
|
+
|
|
52
|
+
Step 1 — Check project detection (does not require server running):
|
|
53
|
+
Bash: ls .storybook/ 2>/dev/null || grep '"storybook"' package.json 2>/dev/null
|
|
54
|
+
→ Found → storybook_project: true
|
|
55
|
+
→ Not found → skip .stories.tsx emission
|
|
56
|
+
|
|
57
|
+
Step 2 — When storybook_project: true, emit a CSF stub alongside the component:
|
|
58
|
+
File: `<same directory as component>/<ComponentName>.stories.tsx`
|
|
59
|
+
Content follows CSF format (see `connections/storybook.md` for full template):
|
|
60
|
+
- Import `Meta` and `StoryObj` from `@storybook/react`
|
|
61
|
+
- Import the new component
|
|
62
|
+
- `meta: Meta<typeof ComponentName>` with `title` and `parameters.a11y.test = 'error'`
|
|
63
|
+
- Export `Default`, `Primary`, `Disabled` story variants
|
|
64
|
+
Adjust `title` to match directory structure (e.g., `'Components/Button'` or `'Features/Auth/LoginForm'`)
|
|
65
|
+
|
|
66
|
+
Note: the `.stories.tsx` stub is emitted whenever `storybook_project: true` regardless of whether
|
|
67
|
+
the dev server is running. New components need stories even in offline/CI contexts.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Step 1 — Parse DESIGN-PLAN.md
|
|
72
|
+
|
|
73
|
+
Read `.design/DESIGN-PLAN.md`. Partition tasks by `## Wave N` heading. Within each wave, partition by `Parallel: true` vs `Parallel: false`. Compute `total_tasks` for `task_progress` denominator.
|
|
74
|
+
|
|
75
|
+
If resuming: skip tasks where `.design/tasks/task-NN.md` already exists.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Parallelism Decision (per wave, before spawning)
|
|
80
|
+
|
|
81
|
+
For each wave:
|
|
82
|
+
1. Read `.design/config.json` `parallelism` (or defaults from `reference/config-schema.md`).
|
|
83
|
+
2. Collect candidates in the wave; check `Touches:`, `writes:`, `parallel-safe`, and `typical-duration-seconds` fields.
|
|
84
|
+
3. Apply rules in order from `reference/parallelism-rules.md` (hard → soft). Overlapping Touches split into sequential sub-waves.
|
|
85
|
+
4. Write `<parallelism_decision>` to STATE.md per wave (stage: design, wave: N).
|
|
86
|
+
5. If `parallel`: spawn all candidates via concurrent `Task()` calls in one response. If `serial`: spawn sequentially.
|
|
87
|
+
|
|
88
|
+
## Step 2 — Wave-by-Wave Execution
|
|
89
|
+
|
|
90
|
+
For each Wave in order (Wave 1, Wave 2, ...):
|
|
91
|
+
|
|
92
|
+
### Parallel batch (if `parallel_mode=true` AND any `Parallel: true` tasks in wave)
|
|
93
|
+
|
|
94
|
+
Report the partition before spawning:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
━━━ Wave [N] — parallel mode ━━━
|
|
98
|
+
Parallel batch ([N] tasks — spawning concurrently):
|
|
99
|
+
[01] [type]: [scope] — touches: [files]
|
|
100
|
+
[02] [type]: [scope] — touches: [files]
|
|
101
|
+
|
|
102
|
+
Sequential tail ([N] tasks):
|
|
103
|
+
[03] [type]: [scope] — touches: [files]
|
|
104
|
+
|
|
105
|
+
Spawning agents now...
|
|
106
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Spawn ALL `Parallel: true` tasks in this wave as concurrent `Task()` calls in ONE response. Each call uses `isolation: "worktree"`:
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
Task("design-executor", """
|
|
113
|
+
<required_reading>
|
|
114
|
+
@.design/STATE.md
|
|
115
|
+
@.design/DESIGN-PLAN.md
|
|
116
|
+
@.design/DESIGN-CONTEXT.md
|
|
117
|
+
@reference/[type-relevant].md
|
|
118
|
+
</required_reading>
|
|
119
|
+
|
|
120
|
+
You are the design-executor agent. Execute Task NN from DESIGN-PLAN.md.
|
|
121
|
+
|
|
122
|
+
Prompt context:
|
|
123
|
+
task_id: NN
|
|
124
|
+
task_type: [type]
|
|
125
|
+
task_scope: [scope]
|
|
126
|
+
task_acceptance_criteria:
|
|
127
|
+
- [criterion 1]
|
|
128
|
+
- [criterion 2]
|
|
129
|
+
wave: N
|
|
130
|
+
is_parallel: true
|
|
131
|
+
auto_mode: [true|false]
|
|
132
|
+
|
|
133
|
+
Write .design/tasks/task-NN.md and make an atomic commit `feat(design-NN): [type] — [scope]`.
|
|
134
|
+
|
|
135
|
+
Emit `## EXECUTION COMPLETE` when done.
|
|
136
|
+
""", subagent_type="design-executor", isolation="worktree")
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Wait for all parallel tasks to emit `## EXECUTION COMPLETE`.
|
|
140
|
+
|
|
141
|
+
**Merge worktrees** (preserved from v2.1.0 — do not redesign):
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
━━━ Parallel batch complete ━━━
|
|
145
|
+
[✓/⚠/✗] Task 01 — [type]
|
|
146
|
+
[✓/⚠/✗] Task 02 — [type]
|
|
147
|
+
|
|
148
|
+
Merging worktrees...
|
|
149
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Merge each worktree branch back into the working directory. Each agent touched non-overlapping files (guaranteed by the conflict check on `Touches:` fields). If an unexpected merge conflict appears, flag it and ask the user to resolve before continuing.
|
|
153
|
+
|
|
154
|
+
Update STATE.md `task_progress` after merge.
|
|
155
|
+
|
|
156
|
+
### Sequential tail (Parallel: false tasks, or all tasks if `parallel_mode=false`)
|
|
157
|
+
|
|
158
|
+
Announce each wave before starting:
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
━━━ Wave [N] — [N tasks] — sequential ━━━
|
|
162
|
+
Tasks:
|
|
163
|
+
[01] [type]: [scope]
|
|
164
|
+
[02] [type]: [scope]
|
|
165
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Run one at a time. Same `Task("design-executor", ...)` pattern with `is_parallel: false` (no worktree isolation):
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
Task("design-executor", """
|
|
172
|
+
<required_reading>
|
|
173
|
+
@.design/STATE.md
|
|
174
|
+
@.design/DESIGN-PLAN.md
|
|
175
|
+
@.design/DESIGN-CONTEXT.md
|
|
176
|
+
@reference/[type-relevant].md
|
|
177
|
+
</required_reading>
|
|
178
|
+
|
|
179
|
+
You are the design-executor agent. Execute Task NN from DESIGN-PLAN.md.
|
|
180
|
+
|
|
181
|
+
Prompt context:
|
|
182
|
+
task_id: NN
|
|
183
|
+
task_type: [type]
|
|
184
|
+
task_scope: [scope]
|
|
185
|
+
task_acceptance_criteria:
|
|
186
|
+
- [criterion 1]
|
|
187
|
+
- [criterion 2]
|
|
188
|
+
wave: N
|
|
189
|
+
is_parallel: false
|
|
190
|
+
auto_mode: [true|false]
|
|
191
|
+
|
|
192
|
+
Write .design/tasks/task-NN.md and make an atomic commit `feat(design-NN): [type] — [scope]`.
|
|
193
|
+
|
|
194
|
+
Emit `## EXECUTION COMPLETE` when done.
|
|
195
|
+
""", subagent_type="design-executor")
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Update STATE.md `task_progress` after each task completes.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Step 3 — Wave Checkpoint
|
|
203
|
+
|
|
204
|
+
After each wave (unless `--auto` flag was passed):
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
━━━ Wave [N] complete ━━━
|
|
208
|
+
✓ [N] tasks complete
|
|
209
|
+
⚠ [N] deviations (see .design/tasks/ files)
|
|
210
|
+
|
|
211
|
+
Ready for Wave [N+1]? (yes / review first)
|
|
212
|
+
━━━━━━━━━━━━━━━━━━━━━━━
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Skip checkpoint if `auto_mode=true`.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Step 4 — Handle Deviations
|
|
220
|
+
|
|
221
|
+
After each wave, check task-NN.md files for `status: deviation`. If any found:
|
|
222
|
+
|
|
223
|
+
- Present affected task IDs and their blocker descriptions (from `.design/STATE.md <blockers>`)
|
|
224
|
+
- Offer: (a) stop stage, (b) continue remaining tasks
|
|
225
|
+
- In `auto_mode`: continue automatically, log all deviations
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## State Update (exit)
|
|
230
|
+
|
|
231
|
+
1. Set `<position> status: completed`, `stage: design`.
|
|
232
|
+
2. Set `<timestamps> design_completed_at: [now ISO 8601]`.
|
|
233
|
+
3. Write STATE.md.
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## After Completion
|
|
238
|
+
|
|
239
|
+
Print summary:
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
━━━ Design stage complete ━━━
|
|
243
|
+
Tasks: [N] complete / [M] total
|
|
244
|
+
Deviations: [N]
|
|
245
|
+
Commits: [git log --oneline since stage start]
|
|
246
|
+
|
|
247
|
+
Next: /get-design-done:verify
|
|
248
|
+
→ Scores the result against baseline, checks must-haves,
|
|
249
|
+
runs NNG heuristic evaluation, and identifies gaps.
|
|
250
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
### Figma Write Dispatch (after design-executor completes)
|
|
256
|
+
|
|
257
|
+
After design-executor has finished and DESIGN-PLAN.md tasks are complete:
|
|
258
|
+
|
|
259
|
+
1. Read `figma_writer:` status from `.design/STATE.md` `<connections>`:
|
|
260
|
+
- If `figma_writer: not_configured` or absent → skip this block entirely (no prompt, no output)
|
|
261
|
+
- If `figma_writer: available` → proceed to step 2
|
|
262
|
+
|
|
263
|
+
2. Offer the user a prompt:
|
|
264
|
+
```
|
|
265
|
+
figma-writer is available — propagate design decisions back to Figma?
|
|
266
|
+
Modes: annotate (layer comments) | tokenize (variable bindings) | mappings (Code Connect)
|
|
267
|
+
Run figma-write? (y/N):
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
3. If user answers "y" or "yes":
|
|
271
|
+
- Ask which mode: annotate / tokenize / mappings (or all)
|
|
272
|
+
- Spawn `design-figma-writer` agent with the selected mode
|
|
273
|
+
- Pass `--dry-run` flag if user requests preview first
|
|
274
|
+
|
|
275
|
+
4. If user answers "n", "N", or no response: skip silently.
|
|
276
|
+
|
|
277
|
+
Note: This dispatch is always opt-in. The design stage never auto-runs figma-writer without user confirmation.
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## DESIGN COMPLETE
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: discover
|
|
3
|
+
description: "Stage 1.5 of 4 — thin orchestrator that spawns design-context-builder (auto-detect + interview) and design-context-checker (6-dimension validator) to produce DESIGN-CONTEXT.md."
|
|
4
|
+
argument-hint: "[--auto]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Get Design Done — Discover
|
|
9
|
+
|
|
10
|
+
**Stage 1.5 of 4.** Produces `.design/DESIGN-CONTEXT.md`.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## State Integration
|
|
15
|
+
|
|
16
|
+
1. Read `.design/STATE.md`.
|
|
17
|
+
- If missing: create minimal skeleton from `reference/STATE-TEMPLATE.md` with stage=discover, status=in_progress, task_progress=0/1, and log warning: "STATE.md not found — created fresh. If this is a resumed session, run /get-design-done:scan first."
|
|
18
|
+
- If present and stage==discover and status==in_progress: RESUME — continue existing interview; do not reset.
|
|
19
|
+
- Otherwise: normal transition — set frontmatter stage=discover, <position> stage=discover, status=in_progress, task_progress=0/1.
|
|
20
|
+
2. **Probe connection availability** — ToolSearch runs FIRST because MCP tools may be in the deferred tool set. This is the canonical probe pattern (spec lives in `connections/connections.md`; copied inline because SKILL.md has no include mechanism — if the probe pattern changes, update all stages that copied it).
|
|
21
|
+
|
|
22
|
+
**A — Figma probe:**
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
A1. ToolSearch({ query: "select:mcp__figma-desktop__get_metadata", max_results: 1 })
|
|
26
|
+
A2. Empty result → figma: not_configured (skip all Figma paths)
|
|
27
|
+
Non-empty result → call mcp__figma-desktop__get_metadata
|
|
28
|
+
Success → figma: available
|
|
29
|
+
Error → figma: unavailable
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**B — Refero probe (ToolSearch presence is sufficient — no tool call needed):**
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
B1. ToolSearch({ query: "refero", max_results: 5 })
|
|
36
|
+
B2. Empty result → refero: not_configured
|
|
37
|
+
Non-empty → refero: available
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**C — Pinterest probe (ToolSearch-only, same pattern as Refero):**
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
C1. ToolSearch({ query: "mcp-pinterest", max_results: 5 })
|
|
44
|
+
C2. Empty result → pinterest: not_configured
|
|
45
|
+
Non-empty → pinterest: available
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
No live `pinterest_search` call at probe time — ToolSearch presence is sufficient. The synthesizer makes the actual search calls.
|
|
49
|
+
|
|
50
|
+
After all probes (A, B, C), update `.design/STATE.md` `<connections>` with the results and continue. Downstream stages (design-context-builder) read `<connections>` from STATE.md rather than re-probing.
|
|
51
|
+
3. Update last_checkpoint. Write STATE.md.
|
|
52
|
+
|
|
53
|
+
## Auto Mode
|
|
54
|
+
|
|
55
|
+
Auto Mode CSS detection (when `auto_mode: true` is passed to the builder):
|
|
56
|
+
1. If tailwind.config.{js,cjs,mjs,ts} exists → Tailwind-only project
|
|
57
|
+
- Skip CSS file grep
|
|
58
|
+
- Parse tailwind.config for color palette, spacing scale, font families
|
|
59
|
+
- Use tailwind.config values as the baseline style signal
|
|
60
|
+
2. Else → fall through to existing CSS file grep logic
|
|
61
|
+
|
|
62
|
+
## Step 1 — Spawn design-context-builder
|
|
63
|
+
|
|
64
|
+
Task("design-context-builder", """
|
|
65
|
+
<required_reading>
|
|
66
|
+
@.design/STATE.md
|
|
67
|
+
@reference/audit-scoring.md
|
|
68
|
+
@reference/anti-patterns.md
|
|
69
|
+
</required_reading>
|
|
70
|
+
|
|
71
|
+
You are the design-context-builder agent. Auto-detect existing design system
|
|
72
|
+
state via grep/glob before asking questions. Interview the user ONLY for areas
|
|
73
|
+
where auto-detect returned no confident answer. Write .design/DESIGN-CONTEXT.md.
|
|
74
|
+
|
|
75
|
+
Baseline audit directory detection (ordered fallback chain):
|
|
76
|
+
1. If src/ exists → use src/
|
|
77
|
+
2. Elif app/ exists → use app/ (Next.js App Router)
|
|
78
|
+
3. Elif pages/ exists → use pages/ (Next.js Pages Router)
|
|
79
|
+
4. Elif lib/ exists → use lib/ (library-only projects)
|
|
80
|
+
5. Else → flag "layout unknown", skip baseline, note in DESIGN-CONTEXT.md
|
|
81
|
+
|
|
82
|
+
Common gray areas to probe during discovery (Area 7):
|
|
83
|
+
1. font-change risk — switching type families when existing UI has body copy in a specific family. Ask: "Is the current body font intentional or inherited? OK to change?"
|
|
84
|
+
2. token-layer introduction risk — adding CSS custom properties to a codebase that uses direct values. Ask: "Do you want design tokens (--primary, --surface) or inline values (hex, rgb)?"
|
|
85
|
+
3. Component rebuild vs restyle — when to keep existing component, when to rebuild from scratch. Ask: "For <component>, restyle in place or rebuild?"
|
|
86
|
+
|
|
87
|
+
Context:
|
|
88
|
+
auto_mode: <true|false>
|
|
89
|
+
|
|
90
|
+
Output file: .design/DESIGN-CONTEXT.md
|
|
91
|
+
Emit `## CONTEXT COMPLETE` when done.
|
|
92
|
+
""")
|
|
93
|
+
|
|
94
|
+
Wait for `## CONTEXT COMPLETE`. Update STATE.md task_progress = 0.5.
|
|
95
|
+
|
|
96
|
+
## Step 1.75 — Lazy gate: should design-context-checker run? (Plan 10.1-04, D-21)
|
|
97
|
+
|
|
98
|
+
Spawn the cheap Haiku gate before the full context-checker:
|
|
99
|
+
|
|
100
|
+
Task("design-context-checker-gate", """
|
|
101
|
+
<required_reading>
|
|
102
|
+
@.design/STATE.md
|
|
103
|
+
</required_reading>
|
|
104
|
+
|
|
105
|
+
You are the design-context-checker-gate.
|
|
106
|
+
|
|
107
|
+
Context:
|
|
108
|
+
diff_files: <git diff --name-only HEAD~1..HEAD>
|
|
109
|
+
diff_body: (not needed — single-file heuristic)
|
|
110
|
+
baseline_sha: <HEAD~1>
|
|
111
|
+
|
|
112
|
+
Apply the heuristic (DESIGN-CONTEXT.md in diff_files?). Emit JSON + `## GATE COMPLETE`.
|
|
113
|
+
""")
|
|
114
|
+
|
|
115
|
+
Wait for `## GATE COMPLETE`. Parse JSON:
|
|
116
|
+
|
|
117
|
+
- `spawn: false` → append `lazy_skipped: true` telemetry row for `design-context-checker`, skip Step 2, set STATE.md `<position>` as if checker passed (rationale: DESIGN-CONTEXT.md didn't change, last validation still holds), emit `design-context-checker skipped — <rationale>`.
|
|
118
|
+
- `spawn: true` → proceed to Step 2 as currently written.
|
|
119
|
+
|
|
120
|
+
**Note:** On first-run discover, the builder just wrote DESIGN-CONTEXT.md so the gate returns `spawn: true`. The gate meaningfully short-circuits only on re-runs where the builder made no changes.
|
|
121
|
+
|
|
122
|
+
**Parallel synthesizer note:** discover does not spawn parallel researchers in v1, so `skills/synthesize/` is not wired here. If future variants spawn N parallel interviewers/auto-detectors, wire synthesize between dispatch and collate as in `skills/map/` Step 3.5.
|
|
123
|
+
|
|
124
|
+
## Step 2 — Spawn design-context-checker
|
|
125
|
+
|
|
126
|
+
Task("design-context-checker", """
|
|
127
|
+
<required_reading>
|
|
128
|
+
@.design/STATE.md
|
|
129
|
+
@.design/DESIGN-CONTEXT.md
|
|
130
|
+
</required_reading>
|
|
131
|
+
|
|
132
|
+
You are the design-context-checker agent. Validate DESIGN-CONTEXT.md across
|
|
133
|
+
6 dimensions. Return APPROVED or BLOCKED with per-dimension verdicts.
|
|
134
|
+
|
|
135
|
+
Emit `## CONTEXT CHECK COMPLETE` when done.
|
|
136
|
+
""")
|
|
137
|
+
|
|
138
|
+
Wait for `## CONTEXT CHECK COMPLETE`.
|
|
139
|
+
|
|
140
|
+
## Step 3 — Handle checker verdict
|
|
141
|
+
|
|
142
|
+
If APPROVED: proceed to state update.
|
|
143
|
+
If BLOCKED: present dimensions that BLOCKED to user, offer fix-and-retry loop
|
|
144
|
+
(re-spawn builder with specific fix instructions). Do not proceed to planning.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## State Update (exit)
|
|
149
|
+
|
|
150
|
+
1. Set <position> status=completed, task_progress=1/1.
|
|
151
|
+
2. Set <timestamps> discover_completed_at=<ISO 8601 now>.
|
|
152
|
+
3. Update last_checkpoint. Write STATE.md.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## After Writing
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
━━━ Discovery complete ━━━
|
|
160
|
+
Saved: .design/DESIGN-CONTEXT.md
|
|
161
|
+
|
|
162
|
+
Baseline score: [N]/100 ([grade])
|
|
163
|
+
Key issues: [top issue 1], [top issue 2], [top issue 3]
|
|
164
|
+
|
|
165
|
+
Next: /get-design-done:plan
|
|
166
|
+
→ Decomposes your context into executable design tasks.
|
|
167
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Do not proceed to planning automatically unless `--auto` was passed.
|
|
171
|
+
|
|
172
|
+
## DISCOVER COMPLETE
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-discuss
|
|
3
|
+
description: "Adaptive design interview — spawns design-discussant to gather decisions via one-question-at-a-time questioning. Writes D-XX decisions to STATE.md <decisions> block."
|
|
4
|
+
argument-hint: "[topic] [--all] [--spec] [--cycle <name>]"
|
|
5
|
+
tools: Read, Write, Task
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /gdd:discuss
|
|
9
|
+
|
|
10
|
+
**Role:** You are the `/gdd:discuss` command. You spawn the `design-discussant` agent with the right mode and context.
|
|
11
|
+
|
|
12
|
+
## Step 1 — Read state
|
|
13
|
+
|
|
14
|
+
Read `.design/STATE.md`. Note:
|
|
15
|
+
- Current `cycle:` frontmatter value
|
|
16
|
+
- Highest existing `D-XX` number under `<decisions>`
|
|
17
|
+
|
|
18
|
+
If `.design/STATE.md` does not exist, tell the user to run `/gdd:brief` first and stop.
|
|
19
|
+
|
|
20
|
+
## Step 2 — Parse arguments
|
|
21
|
+
|
|
22
|
+
Inspect `$ARGUMENTS`:
|
|
23
|
+
- Free-text before flags → `<topic>`
|
|
24
|
+
- `--all` → batch gray-areas mode
|
|
25
|
+
- `--spec` → Socratic ambiguity scoring mode
|
|
26
|
+
- `--cycle <name>` → scope decisions to that cycle
|
|
27
|
+
|
|
28
|
+
## Step 3 — Spawn design-discussant
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
Task("design-discussant", """
|
|
32
|
+
<required_reading>
|
|
33
|
+
@.design/STATE.md
|
|
34
|
+
@.design/BRIEF.md
|
|
35
|
+
@.design/DESIGN-CONTEXT.md
|
|
36
|
+
@./.claude/skills
|
|
37
|
+
</required_reading>
|
|
38
|
+
|
|
39
|
+
<mode>{normal|--all|--spec}</mode>
|
|
40
|
+
<topic>{topic or omit}</topic>
|
|
41
|
+
<cycle>{cycle-name or omit}</cycle>
|
|
42
|
+
|
|
43
|
+
Run an adaptive design interview. Append D-XX decisions to STATE.md <decisions> block.
|
|
44
|
+
Emit `## DISCUSS COMPLETE` when done.
|
|
45
|
+
""")
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Use only the modes the user actually passed. Missing flags → `<mode>normal</mode>`.
|
|
49
|
+
|
|
50
|
+
## Step 4 — Report
|
|
51
|
+
|
|
52
|
+
Wait for `## DISCUSS COMPLETE`. Re-read STATE.md. Count new D-XX entries since Step 1. Print:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
━━━ Discuss complete ━━━
|
|
56
|
+
New decisions: N (D-XX through D-YY)
|
|
57
|
+
Mode: normal | --all | --spec
|
|
58
|
+
Cycle: <name or "default">
|
|
59
|
+
━━━━━━━━━━━━━━━━━━━━━━━━
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Constraints
|
|
63
|
+
|
|
64
|
+
- Do not run the interview yourself — always spawn the agent.
|
|
65
|
+
- Do not touch files outside `.design/`.
|
|
66
|
+
|
|
67
|
+
## DISCUSS COMMAND COMPLETE
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-do
|
|
3
|
+
description: "Natural-language design task router. Parses your intent, maps to the right gdd command(s), confirms before executing."
|
|
4
|
+
argument-hint: "<natural language description>"
|
|
5
|
+
tools: Read, Write, AskUserQuestion
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /gdd:do
|
|
9
|
+
|
|
10
|
+
Takes a free-form description, maps it to a `/gdd:*` command, confirms with the user, then routes.
|
|
11
|
+
|
|
12
|
+
## Intent parsing table
|
|
13
|
+
|
|
14
|
+
| Intent signals | Maps to |
|
|
15
|
+
|---|---|
|
|
16
|
+
| "explore", "scan", "what design patterns", "what components" | `/gdd:explore` |
|
|
17
|
+
| "discuss", "decide", "what should we use for", "help me decide" | `/gdd:discuss` |
|
|
18
|
+
| "plan", "create tasks", "what tasks do we need" | `@get-design-done plan` |
|
|
19
|
+
| "design", "implement", "build", "execute" | `@get-design-done design` |
|
|
20
|
+
| "verify", "check", "audit", "review" | `/gdd:audit` |
|
|
21
|
+
| "sketch", "explore directions", "try designs", "variant" | `/gdd:sketch` |
|
|
22
|
+
| "spike", "experiment", "feasibility", "test if" | `/gdd:spike` |
|
|
23
|
+
| "fix [specific thing]" | `/gdd:fast` |
|
|
24
|
+
| "pause", "stop", "save my place" | `/gdd:pause` |
|
|
25
|
+
| "resume", "pick back up", "continue where I left off" | `/gdd:resume` |
|
|
26
|
+
| "ship", "PR", "submit", "merge" | `/gdd:ship` |
|
|
27
|
+
| "undo", "revert", "roll back" | `/gdd:undo` |
|
|
28
|
+
|
|
29
|
+
## Steps
|
|
30
|
+
|
|
31
|
+
1. Parse the argument text. Match it against the intent signals table. Choose the best fit.
|
|
32
|
+
2. If two intents tie, ask (AskUserQuestion): "Did you mean <option A> or <option B>?"
|
|
33
|
+
3. Print the routing decision in this exact shape:
|
|
34
|
+
```
|
|
35
|
+
I'll run `/gdd:<command>` — "<one-line rationale>". Confirm? (yes/no)
|
|
36
|
+
```
|
|
37
|
+
4. On confirmation: invoke the target skill with any parameters extracted from the input (e.g., topic for `discuss`, symptom for `debug`).
|
|
38
|
+
5. On rejection: ask "What did you mean instead?" and retry once, then abort gracefully.
|
|
39
|
+
|
|
40
|
+
## Do Not
|
|
41
|
+
|
|
42
|
+
- Do not execute the target command without confirmation.
|
|
43
|
+
- Do not invent new commands — if no intent matches, say so and list the closest options.
|
|
44
|
+
|
|
45
|
+
## DO COMPLETE
|