@hegemonart/get-design-done 1.27.7 → 1.28.5
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 +2 -2
- package/.claude-plugin/plugin.json +2 -2
- package/CHANGELOG.md +142 -0
- package/SKILL.md +1 -1
- package/agents/design-verifier.md +17 -0
- package/hooks/gdd-decision-injector.js +149 -3
- package/package.json +1 -1
- package/reference/accessibility.md +4 -0
- package/reference/adr-format.md +96 -0
- package/reference/apply-reflections-procedure.md +68 -0
- package/reference/architecture-vocabulary.md +102 -0
- package/reference/audit-scoring.md +14 -0
- package/reference/cache-policy.md +126 -0
- package/reference/color-theory.md +279 -0
- package/reference/compare-rubric.md +171 -0
- package/reference/composition.md +349 -0
- package/reference/connections-onboarding.md +417 -0
- package/reference/context-md-format.md +106 -0
- package/reference/contrast-advanced.md +205 -0
- package/reference/darkmode-audit-procedure.md +258 -0
- package/reference/debug-feedback-loops.md +119 -0
- package/reference/design-procedure.md +304 -0
- package/reference/design-system-guidance.md +2 -0
- package/reference/discover-procedure.md +204 -0
- package/reference/explore-procedure.md +267 -0
- package/reference/form-patterns.md +2 -0
- package/reference/health-mcp-detection.md +44 -0
- package/reference/health-skill-length-report.md +69 -0
- package/reference/heuristics.md +84 -0
- package/reference/i18n.md +554 -0
- package/reference/iconography.md +2 -0
- package/reference/milestone-completeness-rubric.md +87 -0
- package/reference/motion-interpolate.md +1 -0
- package/reference/palette-catalog.md +2 -0
- package/reference/peer-cli-protocol.md +161 -0
- package/reference/plan-procedure.md +278 -0
- package/reference/proportion-systems.md +267 -0
- package/reference/registry.json +204 -1
- package/reference/registry.schema.json +1 -1
- package/reference/router-rules.md +84 -0
- package/reference/rtl-cjk-cultural.md +2 -0
- package/reference/scan-procedure.md +731 -0
- package/reference/shared-preamble.md +78 -6
- package/reference/skill-authoring-contract.md +128 -0
- package/reference/start-procedure.md +115 -0
- package/reference/style-doc-procedure.md +150 -0
- package/reference/style-vocabulary.md +2 -0
- package/reference/threat-modeling.md +101 -0
- package/reference/typography.md +4 -0
- package/reference/verify-procedure.md +512 -0
- package/reference/visual-hierarchy-layout.md +4 -0
- package/scripts/validate-skill-length.cjs +283 -0
- package/skills/add-backlog/SKILL.md +1 -0
- package/skills/analyze-dependencies/SKILL.md +33 -122
- package/skills/apply-reflections/SKILL.md +1 -40
- package/skills/audit/SKILL.md +3 -1
- package/skills/bandit-status/SKILL.md +31 -66
- package/skills/benchmark/SKILL.md +15 -55
- package/skills/brief/SKILL.md +12 -1
- package/skills/cache-manager/SKILL.md +3 -57
- package/skills/check-update/SKILL.md +38 -75
- package/skills/compare/SKILL.md +29 -269
- package/skills/complete-cycle/SKILL.md +1 -1
- package/skills/connections/SKILL.md +21 -427
- package/skills/continue/SKILL.md +1 -0
- package/skills/darkmode/SKILL.md +32 -287
- package/skills/debug/SKILL.md +11 -8
- package/skills/design/SKILL.md +27 -245
- package/skills/discover/SKILL.md +26 -133
- package/skills/discuss/SKILL.md +18 -2
- package/skills/explore/SKILL.md +42 -176
- package/skills/fast/SKILL.md +1 -0
- package/skills/figma-write/SKILL.md +2 -2
- package/skills/health/SKILL.md +11 -33
- package/skills/help/SKILL.md +1 -0
- package/skills/list-assumptions/SKILL.md +1 -0
- package/skills/map/SKILL.md +8 -31
- package/skills/new-cycle/SKILL.md +3 -1
- package/skills/next/SKILL.md +1 -0
- package/skills/note/SKILL.md +1 -0
- package/skills/optimize/SKILL.md +21 -44
- package/skills/pause/SKILL.md +1 -0
- package/skills/peer-cli-add/SKILL.md +26 -108
- package/skills/peer-cli-customize/SKILL.md +22 -42
- package/skills/peers/SKILL.md +33 -57
- package/skills/plan/SKILL.md +33 -220
- package/skills/plant-seed/SKILL.md +1 -0
- package/skills/pr-branch/SKILL.md +1 -0
- package/skills/progress/SKILL.md +1 -7
- package/skills/quality-gate/SKILL.md +34 -166
- package/skills/quick/SKILL.md +1 -0
- package/skills/reapply-patches/SKILL.md +1 -0
- package/skills/recall/SKILL.md +1 -0
- package/skills/resume/SKILL.md +1 -0
- package/skills/review-backlog/SKILL.md +1 -0
- package/skills/router/SKILL.md +3 -59
- package/skills/scan/SKILL.md +36 -675
- package/skills/settings/SKILL.md +1 -0
- package/skills/ship/SKILL.md +1 -0
- package/skills/sketch/SKILL.md +1 -1
- package/skills/sketch-wrap-up/SKILL.md +13 -54
- package/skills/spike/SKILL.md +1 -1
- package/skills/spike-wrap-up/SKILL.md +12 -46
- package/skills/start/SKILL.md +13 -112
- package/skills/stats/SKILL.md +1 -0
- package/skills/style/SKILL.md +18 -140
- package/skills/synthesize/SKILL.md +1 -0
- package/skills/timeline/SKILL.md +1 -0
- package/skills/todo/SKILL.md +1 -0
- package/skills/turn-closeout/SKILL.md +36 -56
- package/skills/undo/SKILL.md +1 -0
- package/skills/update/SKILL.md +1 -0
- package/skills/verify/SKILL.md +42 -457
- package/skills/warm-cache/SKILL.md +3 -35
- package/skills/zoom-out/SKILL.md +26 -0
package/skills/explore/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gdd-explore
|
|
3
|
-
description: "
|
|
3
|
+
description: "Stage 2 of 5 — unified exploration merging inventory grep + design interview. Probes 6 connections, scans the codebase, conducts the AskUserQuestion interview, and writes .design/DESIGN.md + DESIGN-DEBT.md + DESIGN-CONTEXT.md. Use after /gdd:brief to map the existing system and lock decisions before planning."
|
|
4
4
|
argument-hint: "[--skip-interview] [--skip-scan]"
|
|
5
5
|
tools: Read, Write, Bash, Grep, Glob, Task, AskUserQuestion, mcp__gdd_state__get, mcp__gdd_state__transition_stage, mcp__gdd_state__probe_connections, mcp__gdd_state__update_progress, mcp__gdd_state__set_status, mcp__gdd_state__add_blocker, mcp__gdd_state__checkpoint, mcp__gdd_state__add_decision
|
|
6
6
|
---
|
|
@@ -11,212 +11,78 @@ tools: Read, Write, Bash, Grep, Glob, Task, AskUserQuestion, mcp__gdd_state__get
|
|
|
11
11
|
|
|
12
12
|
**Purpose:** Unified exploration merging the former `scan` (inventory grep) and `discover` (context interview) stages. Produces `.design/DESIGN.md`, `.design/DESIGN-DEBT.md`, and `.design/DESIGN-CONTEXT.md`.
|
|
13
13
|
|
|
14
|
+
Full procedure detail: `../../reference/explore-procedure.md`.
|
|
15
|
+
|
|
14
16
|
---
|
|
15
17
|
|
|
16
18
|
## Stage entry
|
|
17
19
|
|
|
18
|
-
All STATE.md persistence
|
|
19
|
-
|
|
20
|
-
1. Call `mcp__gdd_state__transition_stage` with `to: "explore"`.
|
|
21
|
-
- On success: proceed to probes.
|
|
22
|
-
- On gate failure: emit blockers to the user (do not advance). Each blocker is a line in the `error.context.blockers` array; print them verbatim.
|
|
23
|
-
2. Call `mcp__gdd_state__get` with no arguments — snapshot the parsed state into a local `state` variable for downstream steps.
|
|
24
|
-
|
|
25
|
-
## Step 1 — Connection probe
|
|
26
|
-
|
|
27
|
-
Probe connection availability (the batched write lands at the end of this step — see "Commit probe results" below):
|
|
28
|
-
|
|
29
|
-
**A — Figma probe (variant-agnostic):**
|
|
30
|
-
```
|
|
31
|
-
ToolSearch({ query: "figma get_metadata use_figma", max_results: 10 })
|
|
32
|
-
Parse tool names matching /^mcp__([^_]*figma[^_]*)__(get_metadata|use_figma)$/i
|
|
33
|
-
into read-capable and write-capable prefix sets.
|
|
34
|
-
Empty read set → figma: not_configured
|
|
35
|
-
One+ matches → pick prefix via tiebreaker:
|
|
36
|
-
(1) both-sets > reads-only,
|
|
37
|
-
(2) `figma` > others,
|
|
38
|
-
(3) non-`figma-desktop` > desktop,
|
|
39
|
-
(4) alphabetical.
|
|
40
|
-
Then call {prefix}get_metadata:
|
|
41
|
-
success → figma: available (prefix=mcp__<prefix>__, writes=<true|false>)
|
|
42
|
-
error → figma: unavailable
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
**B — Refero probe:**
|
|
46
|
-
```
|
|
47
|
-
ToolSearch({ query: "refero", max_results: 5 })
|
|
48
|
-
Empty → refero: not_configured
|
|
49
|
-
Non-empty → refero: available
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
**C — 21st.dev probe:**
|
|
53
|
-
```
|
|
54
|
-
ToolSearch({ query: "mcp__21st", max_results: 5 })
|
|
55
|
-
Empty → 21st-dev: not_configured
|
|
56
|
-
Non-empty → 21st-dev: available
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
**D — Magic Patterns probe:**
|
|
60
|
-
```
|
|
61
|
-
ToolSearch({ query: "mcp__magic_patterns", max_results: 5 })
|
|
62
|
-
Empty → magic-patterns: not_configured
|
|
63
|
-
Non-empty → magic-patterns: available
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
**E — paper.design probe:**
|
|
67
|
-
```
|
|
68
|
-
ToolSearch({ query: "mcp__paper", max_results: 5 })
|
|
69
|
-
Empty → paper-design: not_configured
|
|
70
|
-
Non-empty → call mcp__paper-design__get_selection; success → available; error → unavailable
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
**F — pencil.dev probe (file-based):**
|
|
74
|
-
```bash
|
|
75
|
-
find . -name "*.pen" -not -path "*/node_modules/*" 2>/dev/null | head -1
|
|
76
|
-
Empty → pencil-dev: not_configured
|
|
77
|
-
Found → pencil-dev: available
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## Commit probe results
|
|
81
|
-
|
|
82
|
-
After all probes complete, commit results in a single call:
|
|
83
|
-
|
|
84
|
-
`mcp__gdd_state__probe_connections` with `probe_results` = an array of `{ name, status }` entries — one per probed connection. Example:
|
|
85
|
-
|
|
86
|
-
```json
|
|
87
|
-
{
|
|
88
|
-
"probe_results": [
|
|
89
|
-
{ "name": "figma", "status": "available" },
|
|
90
|
-
{ "name": "refero", "status": "not_configured" },
|
|
91
|
-
{ "name": "preview", "status": "unavailable" }
|
|
92
|
-
]
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Unspecified connections keep their existing value. Do NOT issue multiple `probe_connections` calls — the tool is designed for a single batch write per stage.
|
|
97
|
-
|
|
98
|
-
## Step 1.5 — 21st.dev Prior-Art Check (when 21st-dev: available)
|
|
99
|
-
|
|
100
|
-
If `state.connections.21st-dev === "not_configured"` (from the snapshot captured at stage entry): skip this step entirely.
|
|
101
|
-
|
|
102
|
-
When the explore stage identifies any greenfield component in scope (component name from BRIEF.md or user request that does not yet have an implementation file):
|
|
103
|
-
|
|
104
|
-
1. `21st_magic_component_search(component_name, limit: 3)`
|
|
105
|
-
2. Evaluate top result:
|
|
106
|
-
- **fit ≥ 80%**: add `<prior-art>` block to DESIGN.md:
|
|
107
|
-
```xml
|
|
108
|
-
<prior-art source="21st.dev" component="<name>" fit="<score>%" id="<component_id>">
|
|
109
|
-
Recommendation: adopt — do not build custom. Confirm with design-executor.
|
|
110
|
-
</prior-art>
|
|
111
|
-
```
|
|
112
|
-
- **fit < 80%**: note top candidate in DESIGN.md as a reference, proceed with custom build:
|
|
113
|
-
```xml
|
|
114
|
-
<prior-art source="21st.dev" component="<name>" fit="<score>%" id="<component_id>">
|
|
115
|
-
Low fit — noted for reference. Building custom component.
|
|
116
|
-
</prior-art>
|
|
117
|
-
```
|
|
118
|
-
3. If `svgl_get_brand_logo` is available and explore scope includes brand logo assets: call `svgl_get_brand_logo(brand_name)` for each required brand asset; add SVG results to `.design/assets/` and note in DESIGN.md.
|
|
119
|
-
|
|
120
|
-
If no greenfield components in scope: skip this step.
|
|
121
|
-
|
|
122
|
-
## Step 2 — Inventory scan (unless `--skip-scan`)
|
|
123
|
-
|
|
124
|
-
**Map pre-check:** If `.design/map/` exists and all 5 files (`tokens.md`, `components.md`, `visual-hierarchy.md`, `a11y.md`, `motion.md`) are present AND fresher than `src/` (mtime), consume them as the inventory source and skip the grep pass. Otherwise proceed with grep below and, after Step 4, suggest running `/gdd:map` for richer parallel-scanned data on the next cycle.
|
|
125
|
-
|
|
126
|
-
**Parallelism decision (before any multi-agent spawn):**
|
|
127
|
-
1. Read `.design/config.json` `parallelism` (or defaults from `reference/config-schema.md`).
|
|
128
|
-
2. Apply rules from `reference/parallelism-rules.md` (hard → soft).
|
|
129
|
-
3. Record the verdict via `mcp__gdd_state__set_status` with a short status label (e.g., `status: "explore_parallel"` or `"explore_serial"`) carrying the stage/verdict/reason/agents payload.
|
|
130
|
-
4. If verdict is `parallel`, dispatch via multiple `Task()` calls in one response; if `serial`, spawn sequentially.
|
|
131
|
-
|
|
132
|
-
Run the canonical scan grep/glob inventory (preserves PLAT-01/02 POSIX ERE patterns from Phase 1):
|
|
20
|
+
All STATE.md persistence goes through `gdd-state` MCP tools — no direct edits. Plain design docs (DESIGN.md / DESIGN-DEBT.md / DESIGN-CONTEXT.md) use `Write`.
|
|
133
21
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
- **Typography scan** — Grep font-family declarations, Tailwind `font-*`, `text-*` size classes; identify type scale.
|
|
137
|
-
- **Motion scan** — Grep `transition`, `animate-`, `@keyframes`, `framer-motion` imports.
|
|
138
|
-
- **Token detection** — Check for `tailwind.config.{js,cjs,mjs,ts}`, CSS custom properties (`--*`), design-token JSON.
|
|
139
|
-
- **Layout detection** — Ordered fallback: `src/` → `app/` → `pages/` → `lib/` → unknown.
|
|
22
|
+
1. `mcp__gdd_state__transition_stage` with `to: "explore"`. On gate failure: print blockers from `error.context.blockers` verbatim, do not advance.
|
|
23
|
+
2. `mcp__gdd_state__get` (no args) -> snapshot `state` for downstream steps.
|
|
140
24
|
|
|
141
|
-
|
|
142
|
-
- `.design/DESIGN.md` — current design system inventory + baseline score
|
|
143
|
-
- `.design/DESIGN-DEBT.md` — prioritized debt roadmap
|
|
25
|
+
---
|
|
144
26
|
|
|
145
|
-
|
|
27
|
+
## Step 1 — Connection probe
|
|
146
28
|
|
|
147
|
-
|
|
29
|
+
Probe six connections, then batch-write results via ONE `mcp__gdd_state__probe_connections` call (unspecified connections keep their existing value):
|
|
148
30
|
|
|
149
|
-
**
|
|
31
|
+
- **A — Figma** (variant-agnostic): ToolSearch + regex parse of `get_metadata` / `use_figma` prefixes -> tiebreaker selection (`both-sets > reads-only`, `figma > others`, `non-figma-desktop`, alphabetical) -> live `{prefix}get_metadata` call -> `available` / `unavailable` / `not_configured` (with `prefix=` + `writes=`).
|
|
32
|
+
- **B — Refero**: ToolSearch presence sufficient.
|
|
33
|
+
- **C — 21st.dev**: ToolSearch `mcp__21st` presence.
|
|
34
|
+
- **D — Magic Patterns**: ToolSearch `mcp__magic_patterns` presence.
|
|
35
|
+
- **E — paper.design**: ToolSearch `mcp__paper` + live `get_selection` call.
|
|
36
|
+
- **F — pencil.dev**: `find . -name "*.pen"` file-presence.
|
|
150
37
|
|
|
151
|
-
|
|
38
|
+
Full probe specs + commit-results JSON shape: `../../reference/explore-procedure.md` §Step 1.
|
|
152
39
|
|
|
153
|
-
|
|
40
|
+
## Step 1.5 — 21st.dev Prior-Art Check (when `21st-dev: available`)
|
|
154
41
|
|
|
155
|
-
|
|
42
|
+
For each greenfield component in scope: `21st_magic_component_search(component_name, limit: 3)`. Fit >= 80% -> add `<prior-art>` block to DESIGN.md recommending adoption; fit < 80% -> note as reference, build custom. If `svgl_get_brand_logo` available and brand assets are in scope, call per logo and save SVGs to `.design/assets/`. Skip entirely if no greenfield components in scope. Detail: `../../reference/explore-procedure.md` §Step 1.5.
|
|
156
43
|
|
|
157
|
-
|
|
44
|
+
---
|
|
158
45
|
|
|
159
|
-
|
|
46
|
+
## Step 2 — Inventory scan (unless `--skip-scan`)
|
|
160
47
|
|
|
161
|
-
|
|
162
|
-
1. `state.decisions` from the snapshot captured at stage entry — existing D-XX entries (do NOT re-ask anything covered). If the snapshot is stale, refresh by calling `mcp__gdd_state__get`.
|
|
163
|
-
2. `.design/BRIEF.md` — problem statement, audience, constraints
|
|
164
|
-
3. `.design/DESIGN.md` — auto-detected inventory from Step 2
|
|
165
|
-
4. `.design/DESIGN-CONTEXT.md` if it exists — `<gray_areas>` block lists unresolved topics
|
|
166
|
-
5. `./.claude/skills/design-*-conventions.md` if any — locked project conventions, treat as authoritative
|
|
48
|
+
**Map pre-check**: if `.design/map/` exists with all 5 files (`tokens.md`, `components.md`, `visual-hierarchy.md`, `a11y.md`, `motion.md`) fresher than `src/`, consume them and skip the grep pass. Otherwise grep and, after Step 4, suggest `/gdd:map` for the next cycle.
|
|
167
49
|
|
|
168
|
-
|
|
50
|
+
**Parallelism decision**: read `.design/config.json` + `reference/parallelism-rules.md`. Record verdict via `mcp__gdd_state__set_status` (`"explore_parallel"` / `"explore_serial"`). Parallel -> multiple `Task()` in one response; serial -> sequential.
|
|
169
51
|
|
|
170
|
-
|
|
52
|
+
Run the canonical scan grep/glob inventory (POSIX ERE, preserving PLAT-01/02): component detection (Glob `**/*.{tsx,jsx,vue,svelte}`), color extraction (hex / rgb / hsl / Tailwind arbitrary), typography scan (font-family / Tailwind `font-*` / `text-*`), motion scan (`transition` / `animate-` / `@keyframes` / `framer-motion`), token detection (tailwind.config / CSS custom properties / token JSON), layout detection (ordered fallback `src/` -> `app/` -> `pages/` -> `lib/` -> unknown). Write `.design/DESIGN.md` + `.design/DESIGN-DEBT.md`. Then `mcp__gdd_state__update_progress` for scan progress. Detail: `../../reference/explore-procedure.md` §Step 2.
|
|
171
53
|
|
|
172
|
-
|
|
54
|
+
**Step 2.x — i18n readiness probe (informational, per D-04)**: check `package.json` deps against `{react-intl, next-intl, i18next, vue-i18n, formatjs, lingui}` -> `framework-managed`; else grep `Intl.(DateTimeFormat|NumberFormat|...)` in `src/` -> `partial`; else `none`. Emit single line `Localization readiness: <state>` in the report. NO gate, NO blocking — surface signal only (D-07). Detail: `../../reference/explore-procedure.md` §Step 2.x.
|
|
173
55
|
|
|
174
|
-
|
|
175
|
-
- Audience and primary use context
|
|
176
|
-
- Brand direction (only if no tokens detected in DESIGN.md)
|
|
177
|
-
- Color primitives (only if no palette detected)
|
|
178
|
-
- Typography scale (only if no type system detected)
|
|
179
|
-
- Spacing scale (only if no spacing tokens detected)
|
|
180
|
-
- Motion preferences (only if no motion patterns detected)
|
|
181
|
-
- Any `<gray_areas>` from DESIGN-CONTEXT.md
|
|
56
|
+
## Step 2.5 — Detect prior sketches and project-local conventions
|
|
182
57
|
|
|
183
|
-
|
|
58
|
+
- **Sketches**: list `.design/sketches/*` slugs, group by `WINNER.md` present (completed) vs absent (pending). Record via `mcp__gdd_state__set_status: "explore_sketches_present"`. Include in DESIGN.md "Prior Explorations" section.
|
|
59
|
+
- **Project-local skills**: read `./.claude/skills/design-*-conventions.md` -> include in DESIGN-CONTEXT.md `<project_conventions>` (these override defaults).
|
|
60
|
+
- **Global skills**: `~/.claude/gdd/global-skills/*.md` (other than README) -> prepend to `<project_conventions>` under `<global_conventions>` sub-block. Project-local D-XX wins on conflict.
|
|
184
61
|
|
|
185
|
-
|
|
62
|
+
---
|
|
186
63
|
|
|
187
|
-
|
|
64
|
+
## Step 3 — Design interview (unless `--skip-interview`)
|
|
188
65
|
|
|
189
|
-
|
|
66
|
+
**Run inline — NEVER spawn `design-discussant` as a subagent.** `AskUserQuestion` only renders the native picker from the top-level skill context; spawning degrades to plain markdown (broken in Claude Desktop).
|
|
190
67
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
2. Append one JSON line to `.design/learnings/question-quality.jsonl` (create if absent):
|
|
197
|
-
```json
|
|
198
|
-
{"ts":"<iso>","question_id":"Q-NN","question_text":"<verbatim>","answer_summary":"<one sentence>","quality":"high|medium|low|skipped","evidence":"<why>","cycle":"<active-cycle-slug>"}
|
|
199
|
-
```
|
|
200
|
-
Quality classification: `skipped` if user picked Skip / "doesn't matter"; `low` if < 10 words and not a specific value; `medium` if hedged ("maybe", "I think", "not sure"); `high` otherwise.
|
|
201
|
-
3. `add_decision` commits incrementally — the decision survives a crash mid-interview without an explicit save step.
|
|
68
|
+
- **3.a Pre-load context**: state.decisions snapshot -> BRIEF.md -> DESIGN.md -> DESIGN-CONTEXT.md `<gray_areas>` -> project conventions. If `figma: available`, call `{prefix}get_variable_defs` and draft tentative D-XX entries.
|
|
69
|
+
- **3.b Identify question set**: skip areas already covered by D-XX or project convention. Default coverage: cycle goal, audience, brand direction (if no tokens), color/typography/spacing primitives (if undetected), motion preferences, gray areas from DESIGN-CONTEXT.md.
|
|
70
|
+
- **3.c Ask one at a time**: `AskUserQuestion` with 4 concrete options + "Other" / "Skip". Reject generic answers ("modern", "clean") with one follow-up.
|
|
71
|
+
- **3.d Record after each answer**: `mcp__gdd_state__add_decision` (atomic, auto-assigns D-NN); append a quality-classified JSON line to `.design/learnings/question-quality.jsonl`.
|
|
72
|
+
- **3.e Produce DESIGN-CONTEXT.md**: summarize locked decisions, remaining gray areas, Figma tentatives. Frontmatter `status: complete`.
|
|
202
73
|
|
|
203
|
-
|
|
74
|
+
Full interview protocol + JSON line schema: `../../reference/explore-procedure.md` §Step 3.
|
|
204
75
|
|
|
205
|
-
|
|
76
|
+
---
|
|
206
77
|
|
|
207
78
|
## Step 4 — Close out explore
|
|
208
79
|
|
|
209
|
-
- If the synthesizer
|
|
210
|
-
-
|
|
211
|
-
- Stage advance to `plan` happens at the next stage's entry (
|
|
80
|
+
- If the synthesizer / mapper batch ran in Step 2: `mcp__gdd_state__update_progress` with `task_progress: "<done>/<total>"`, `status: "explore_mappers_done"`.
|
|
81
|
+
- `mcp__gdd_state__checkpoint` — bumps `last_checkpoint`.
|
|
82
|
+
- Stage advance to `plan` happens at the next stage's entry (plan owns its own `transition_stage`); do not edit frontmatter directly.
|
|
212
83
|
|
|
213
84
|
## After Writing
|
|
214
85
|
|
|
215
|
-
|
|
216
|
-
━━━ Explore complete ━━━
|
|
217
|
-
Saved: .design/DESIGN.md, .design/DESIGN-DEBT.md, .design/DESIGN-CONTEXT.md
|
|
218
|
-
Next: @get-design-done plan
|
|
219
|
-
━━━━━━━━━━━━━━━━━━━━━━━━
|
|
220
|
-
```
|
|
86
|
+
Print: "=== Explore complete ===\nSaved: .design/DESIGN.md, .design/DESIGN-DEBT.md, .design/DESIGN-CONTEXT.md\nNext: @get-design-done plan".
|
|
221
87
|
|
|
222
88
|
## EXPLORE COMPLETE
|
package/skills/fast/SKILL.md
CHANGED
|
@@ -3,6 +3,7 @@ name: gdd-fast
|
|
|
3
3
|
description: "Trivial inline design task. No subagents, no planning documents, no pipeline stages. Just do the thing described."
|
|
4
4
|
argument-hint: "<task description>"
|
|
5
5
|
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
6
|
+
disable-model-invocation: true
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# /gdd:fast
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: get-design-done:figma-write
|
|
3
|
-
description: Write design decisions from DESIGN-CONTEXT.md back into the active Figma file
|
|
3
|
+
description: "Write design decisions from `.design/DESIGN-CONTEXT.md` back into the active Figma file by dispatching the `design-figma-writer` agent in one of three modes (annotate / tokenize / mappings). Use when the user has completed a design pipeline cycle and wants the decisions (layer comments, variable bindings, or Code Connect mappings) reflected in Figma. Operates proposal→confirm with `--dry-run` and `--confirm-shared` flags."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# get-design-done:figma-write
|
|
7
7
|
|
|
8
|
-
Dispatches the `design-figma-writer` agent to write design decisions back to the open Figma file.
|
|
8
|
+
Dispatches the `design-figma-writer` agent to write design decisions back to the open Figma file. The shared probe pattern (ToolSearch → live call → STATE.md write) and connection handshake are documented at `../../reference/shared-preamble.md#connection-handshake-summary` and `../../connections/figma.md`.
|
|
9
9
|
|
|
10
10
|
## Usage
|
|
11
11
|
|
package/skills/health/SKILL.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
name: gdd-health
|
|
3
3
|
description: "Reports .design/ artifact health — staleness, missing files, token drift, broken state transitions."
|
|
4
4
|
tools: Read, Bash, Glob, Grep, mcp__gdd_state__get
|
|
5
|
+
disable-model-invocation: true
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
# /gdd:health
|
|
@@ -52,41 +53,9 @@ Health: 5 / 6 checks passing.
|
|
|
52
53
|
━━━━━━━━━━━━━━━━━━━━━
|
|
53
54
|
```
|
|
54
55
|
|
|
55
|
-
<step name="check-mcp-registration">
|
|
56
|
-
|
|
57
56
|
## Check MCP registration (gdd-mcp)
|
|
58
57
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
### Dismissal check
|
|
62
|
-
|
|
63
|
-
1. Read `.design/config.json` (if present). Parse JSON inside a try/catch.
|
|
64
|
-
2. If `config.mcp_nudge === false`, SKIP this step entirely (render nothing).
|
|
65
|
-
3. On parse failure: default to `mcp_nudge=true` (show the row) — fail-safe per threat T-27.7-04-05.
|
|
66
|
-
|
|
67
|
-
### Detection
|
|
68
|
-
|
|
69
|
-
1. Read `.claude/settings.local.json` (or equivalent harness settings file) and inspect its `mcpServers` object — alternatively run `claude mcp list` / `codex mcp list` if a CLI is available (see fallback below).
|
|
70
|
-
2. Preferred invocation via the install-lib: call `detectMcpRegistration()` from `scripts/lib/install/mcp-register.cjs`. Returns `{harnesses: [{harness, present, registered}], summary}`.
|
|
71
|
-
|
|
72
|
-
### Row rendering
|
|
73
|
-
|
|
74
|
-
Based on the detection result, render exactly ONE of these row strings:
|
|
75
|
-
|
|
76
|
-
- When `claude` and `codex` both present + both registered:
|
|
77
|
-
`MCP server: registered with claude+codex`
|
|
78
|
-
- When only one harness is present and registered:
|
|
79
|
-
`MCP server: registered with claude` (or `MCP server: registered with codex`)
|
|
80
|
-
- When at least one harness is present but `gdd-mcp` is NOT in its registered list:
|
|
81
|
-
`MCP server: not registered (run: npx @hegemonart/get-design-done --register-mcp; dismiss: .design/config.json#mcp_nudge=false)`
|
|
82
|
-
- When neither harness CLI is found on PATH:
|
|
83
|
-
`MCP server: unknown (claude/codex CLI not found)`
|
|
84
|
-
|
|
85
|
-
### Fallback (if `mcp-register.cjs` not yet shipped)
|
|
86
|
-
|
|
87
|
-
Skip this step silently with status `MCP server: unknown`. This step is non-blocking — failures here MUST NOT crash the SKILL.
|
|
88
|
-
|
|
89
|
-
</step>
|
|
58
|
+
After the health table, inspect whether `gdd-mcp` (Phase 27.7+) is registered with any installed harness and render a one-line status row. Dismissable via `.design/config.json#mcp_nudge=false`. Non-blocking: failure paths render `MCP server: unknown` rather than crash. Full detection procedure (dismissal check, detection via `scripts/lib/install/mcp-register.cjs`, row rendering for claude/codex/both/neither, fallback) lives in `./reference/health-mcp-detection.md`.
|
|
90
59
|
|
|
91
60
|
## Update notice (safe-window surface)
|
|
92
61
|
|
|
@@ -98,6 +67,15 @@ After the health table, emit the plugin-update banner if one is present:
|
|
|
98
67
|
|
|
99
68
|
Written by `hooks/update-check.sh`; suppressed mid-pipeline and when the latest release is dismissed.
|
|
100
69
|
|
|
70
|
+
## Skill-length report
|
|
71
|
+
|
|
72
|
+
After the health table, surface the Phase 28.5 skill-authoring contract drift signal by running `node scripts/validate-skill-length.cjs --quiet --json` and reading `summary` from stdout. Print two prose lines:
|
|
73
|
+
|
|
74
|
+
- `Skill-length: <total> total | <clean> clean | <warnings> warn (>=100) | <blockers> block (>=250)`
|
|
75
|
+
- If blockers > 0: list each blocker as a row `- <name> (<lines> lines)`. Else: print `All skills within contract.`
|
|
76
|
+
|
|
77
|
+
Thresholds: warn >=100, block >=250 (D-01). Strict description-format off by default (D-02). See `./reference/health-skill-length-report.md` for the JSON shape and threshold rationale.
|
|
78
|
+
|
|
101
79
|
## Do Not
|
|
102
80
|
|
|
103
81
|
- Do not mutate STATE.md — this skill is read-only. Only `mcp__gdd_state__get` is permitted.
|
package/skills/help/SKILL.md
CHANGED
|
@@ -3,6 +3,7 @@ name: gdd-list-assumptions
|
|
|
3
3
|
description: "Surfaces hidden design assumptions baked into the codebase before planning — pattern-based detection plus user-surfaced items."
|
|
4
4
|
argument-hint: "[--area typography|color|layout|motion|a11y]"
|
|
5
5
|
tools: Read, Grep, Glob
|
|
6
|
+
disable-model-invocation: true
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# /gdd:list-assumptions
|
package/skills/map/SKILL.md
CHANGED
|
@@ -8,7 +8,7 @@ user-invocable: true
|
|
|
8
8
|
|
|
9
9
|
# Get Design Done — Map
|
|
10
10
|
|
|
11
|
-
Parallel orchestrator. Spawns 5 specialist mappers, each writing one file under `.design/map/`. The explore stage consumes these when present.
|
|
11
|
+
Parallel orchestrator. Spawns 5 specialist mappers, each writing one file under `.design/map/`. The explore stage consumes these when present. See `./reference/heuristics.md` §"Optimization rules" for parallel-spawn cost considerations.
|
|
12
12
|
|
|
13
13
|
## Mapper → Output
|
|
14
14
|
|
|
@@ -29,11 +29,7 @@ Parallel orchestrator. Spawns 5 specialist mappers, each writing one file under
|
|
|
29
29
|
|
|
30
30
|
## Step 2 — Parallelism Decision
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
- All 5 mappers have `parallel-safe: auto` with disjoint `writes:` (each writes a different `.design/map/*.md` file) → no hard-rule conflict.
|
|
35
|
-
- `typical-duration-seconds` sum (~210s) minus slowest (~45s) ≈ 165s savings → clears `min_estimated_savings_seconds`.
|
|
36
|
-
- Verdict: **parallel**.
|
|
32
|
+
Per `reference/parallelism-rules.md`: all 5 mappers have `parallel-safe: auto` with disjoint `writes:` (each writes a different `.design/map/*.md` file) — no hard-rule conflict. `typical-duration-seconds` sum (~210s) minus slowest (~45s) ≈ 165s savings → clears `min_estimated_savings_seconds`. Verdict: **parallel**.
|
|
37
33
|
|
|
38
34
|
Write the verdict to STATE.md:
|
|
39
35
|
|
|
@@ -48,11 +44,11 @@ Write the verdict to STATE.md:
|
|
|
48
44
|
</parallelism_decision>
|
|
49
45
|
```
|
|
50
46
|
|
|
51
|
-
|
|
47
|
+
`--only` → adjust `agents` and set `verdict: serial` with `reason: "single mapper requested"`.
|
|
52
48
|
|
|
53
49
|
## Step 3 — Dispatch (concurrent)
|
|
54
50
|
|
|
55
|
-
Spawn all selected mappers in a single response
|
|
51
|
+
Spawn all selected mappers in a single response with multiple `Task()` calls:
|
|
56
52
|
|
|
57
53
|
```
|
|
58
54
|
Task("<mapper-name>", """
|
|
@@ -68,36 +64,17 @@ output file under .design/map/. Emit your completion marker when done.
|
|
|
68
64
|
""")
|
|
69
65
|
```
|
|
70
66
|
|
|
71
|
-
Wait for
|
|
72
|
-
- `## TOKEN MAP COMPLETE`
|
|
73
|
-
- `## COMPONENT MAP COMPLETE`
|
|
74
|
-
- `## VISUAL HIERARCHY MAP COMPLETE`
|
|
75
|
-
- `## A11Y MAP COMPLETE`
|
|
76
|
-
- `## MOTION MAP COMPLETE`
|
|
67
|
+
Wait for each completion marker: `## TOKEN MAP COMPLETE`, `## COMPONENT MAP COMPLETE`, `## VISUAL HIERARCHY MAP COMPLETE`, `## A11Y MAP COMPLETE`, `## MOTION MAP COMPLETE`.
|
|
77
68
|
|
|
78
69
|
## Step 3.5 — Synthesize parallel mapper outputs (Plan 10.1-04, D-13/D-14/D-15)
|
|
79
70
|
|
|
80
|
-
Each mapper has
|
|
81
|
-
|
|
82
|
-
Skill("synthesize", {
|
|
83
|
-
outputs: [
|
|
84
|
-
"=== from token-mapper ===\n" + <read .design/map/tokens.md>,
|
|
85
|
-
"=== from component-taxonomy-mapper ===\n" + <read .design/map/components.md>,
|
|
86
|
-
"=== from visual-hierarchy-mapper ===\n" + <read .design/map/visual-hierarchy.md>,
|
|
87
|
-
"=== from a11y-mapper ===\n" + <read .design/map/a11y.md>,
|
|
88
|
-
"=== from motion-mapper ===\n" + <read .design/map/motion.md>
|
|
89
|
-
],
|
|
90
|
-
directive: "Merge into a single cross-cutting DESIGN-PATTERNS.md summary preserving each mapper's top-level section header. Consolidate duplicates across mappers into single entries with source-agent names listed. Target ~120 lines.",
|
|
91
|
-
output_shape: "markdown"
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
Wait for `## SYNTHESIS COMPLETE`. Capture the merged markdown, write to `.design/DESIGN-PATTERNS.md` (overwrite if present). This becomes the primary explore-stage input; per-mapper `.design/map/*.md` files remain on disk as drill-down evidence.
|
|
71
|
+
Each mapper has written its own `.design/map/*.md` (disjoint writes). Main-context doesn't need all 5 verbatim — invoke `synthesize` inline with `outputs:[<each file's text labelled "=== from <mapper> ==="]`, `directive: "Merge into cross-cutting DESIGN-PATTERNS.md preserving section headers; consolidate cross-mapper duplicates with source-agent names; target ~120 lines."`, `output_shape:"markdown"`.
|
|
95
72
|
|
|
96
|
-
|
|
73
|
+
Wait for `## SYNTHESIS COMPLETE`. Write merged markdown to `.design/DESIGN-PATTERNS.md` (overwrite if present) — the primary explore-stage input; per-mapper files remain as drill-down evidence. `--only` (single mapper) → skip this step.
|
|
97
74
|
|
|
98
75
|
## Step 4 — Collate
|
|
99
76
|
|
|
100
|
-
Write `.design/DESIGN-MAP.md` —
|
|
77
|
+
Write `.design/DESIGN-MAP.md` — thin index linking to each `.design/map/*.md` with a one-paragraph summary from each file's header. If Step 3.5 ran, also cross-link to `.design/DESIGN-PATTERNS.md` and note at the top: "See DESIGN-PATTERNS.md for the merged cross-cutting summary — this index preserves per-mapper drill-down."
|
|
101
78
|
|
|
102
79
|
## Step 5 — Report
|
|
103
80
|
|
|
@@ -7,7 +7,7 @@ tools: Read, Write, AskUserQuestion
|
|
|
7
7
|
|
|
8
8
|
# /gdd:new-cycle
|
|
9
9
|
|
|
10
|
-
The cycle is the hierarchical unit above individual pipeline runs: **Cycle > Pipeline run > Wave > Task**. Each cycle has a goal, tracks its own decisions, and can span many pipeline runs.
|
|
10
|
+
The cycle is the hierarchical unit above individual pipeline runs: **Cycle > Pipeline run > Wave > Task**. Each cycle has a goal, tracks its own decisions, and can span many pipeline runs. See `./reference/milestone-completeness-rubric.md` §"Cycle level" for what counts as cycle completion (used by `/gdd:complete-cycle` to close the cycle).
|
|
11
11
|
|
|
12
12
|
## Steps
|
|
13
13
|
|
|
@@ -16,6 +16,7 @@ The cycle is the hierarchical unit above individual pipeline runs: **Cycle > Pip
|
|
|
16
16
|
3. Generate cycle ID: read `.design/CYCLES.md` if present, find the max `cycle-N`, increment. If CYCLES.md is missing, start at `cycle-1`.
|
|
17
17
|
4. Update `.design/STATE.md` frontmatter: set `cycle: cycle-N`.
|
|
18
18
|
5. Create or append to `.design/CYCLES.md`:
|
|
19
|
+
|
|
19
20
|
```markdown
|
|
20
21
|
## cycle-N: <goal>
|
|
21
22
|
**Started**: <date>
|
|
@@ -24,6 +25,7 @@ The cycle is the hierarchical unit above individual pipeline runs: **Cycle > Pip
|
|
|
24
25
|
**Pipeline runs**: 0
|
|
25
26
|
**Decisions made**: 0
|
|
26
27
|
```
|
|
28
|
+
|
|
27
29
|
6. Reset the `<decisions>` section in STATE.md for the new cycle. Preserve prior decisions by prepending a comment marker `<!-- prior cycle decisions archived in CYCLES.md -->`.
|
|
28
30
|
7. Print: "Cycle cycle-N started. Run `@get-design-done brief` or `@get-design-done explore` to begin."
|
|
29
31
|
|
package/skills/next/SKILL.md
CHANGED
package/skills/note/SKILL.md
CHANGED
|
@@ -3,6 +3,7 @@ name: gdd-note
|
|
|
3
3
|
description: "Zero-friction idea capture during any stage. Appends to .design/NOTES.md. Subcommands: add, list, promote."
|
|
4
4
|
argument-hint: "<add|list|promote> [text|line-number]"
|
|
5
5
|
tools: Read, Write
|
|
6
|
+
disable-model-invocation: true
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# /gdd:note
|