@hegemonart/get-design-done 1.41.0 → 1.42.0
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 +1 -1
- package/CHANGELOG.md +81 -0
- package/README.md +2 -0
- package/dist/claude-code/.claude/skills/add-backlog/SKILL.md +48 -0
- package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +95 -0
- package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +92 -0
- package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +170 -0
- package/dist/claude-code/.claude/skills/audit/SKILL.md +79 -0
- package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +94 -0
- package/dist/claude-code/.claude/skills/benchmark/SKILL.md +65 -0
- package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +43 -0
- package/dist/claude-code/.claude/skills/brief/SKILL.md +128 -0
- package/dist/claude-code/.claude/skills/budget/SKILL.md +45 -0
- package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +66 -0
- package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +126 -0
- package/dist/claude-code/.claude/skills/check-update/SKILL.md +98 -0
- package/dist/claude-code/.claude/skills/compare/SKILL.md +82 -0
- package/dist/claude-code/.claude/skills/compare/compare-rubric.md +171 -0
- package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +81 -0
- package/dist/claude-code/.claude/skills/connections/SKILL.md +71 -0
- package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +608 -0
- package/dist/claude-code/.claude/skills/continue/SKILL.md +24 -0
- package/dist/claude-code/.claude/skills/darkmode/SKILL.md +76 -0
- package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +258 -0
- package/dist/claude-code/.claude/skills/debug/SKILL.md +41 -0
- package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +119 -0
- package/dist/claude-code/.claude/skills/design/SKILL.md +99 -0
- package/dist/claude-code/.claude/skills/design/design-procedure.md +304 -0
- package/dist/claude-code/.claude/skills/discover/SKILL.md +72 -0
- package/dist/claude-code/.claude/skills/discover/discover-procedure.md +222 -0
- package/dist/claude-code/.claude/skills/discuss/SKILL.md +96 -0
- package/dist/claude-code/.claude/skills/do/SKILL.md +45 -0
- package/dist/claude-code/.claude/skills/explore/SKILL.md +105 -0
- package/dist/claude-code/.claude/skills/explore/explore-procedure.md +267 -0
- package/dist/claude-code/.claude/skills/export/SKILL.md +30 -0
- package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +98 -0
- package/dist/claude-code/.claude/skills/fast/SKILL.md +91 -0
- package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +64 -0
- package/dist/claude-code/.claude/skills/figma-write/SKILL.md +39 -0
- package/dist/claude-code/.claude/skills/graphify/SKILL.md +49 -0
- package/dist/claude-code/.claude/skills/health/SKILL.md +99 -0
- package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +44 -0
- package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +69 -0
- package/dist/claude-code/.claude/skills/help/SKILL.md +87 -0
- package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +61 -0
- package/dist/claude-code/.claude/skills/locale/SKILL.md +51 -0
- package/dist/claude-code/.claude/skills/map/SKILL.md +89 -0
- package/dist/claude-code/.claude/skills/migrate/SKILL.md +70 -0
- package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +37 -0
- package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +87 -0
- package/dist/claude-code/.claude/skills/new-project/SKILL.md +53 -0
- package/dist/claude-code/.claude/skills/next/SKILL.md +68 -0
- package/dist/claude-code/.claude/skills/note/SKILL.md +48 -0
- package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +86 -0
- package/dist/claude-code/.claude/skills/optimize/SKILL.md +97 -0
- package/dist/claude-code/.claude/skills/pause/SKILL.md +77 -0
- package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +88 -0
- package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +161 -0
- package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +90 -0
- package/dist/claude-code/.claude/skills/peers/SKILL.md +96 -0
- package/dist/claude-code/.claude/skills/plan/SKILL.md +105 -0
- package/dist/claude-code/.claude/skills/plan/plan-procedure.md +278 -0
- package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +48 -0
- package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +32 -0
- package/dist/claude-code/.claude/skills/progress/SKILL.md +95 -0
- package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +90 -0
- package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +101 -0
- package/dist/claude-code/.claude/skills/quick/SKILL.md +44 -0
- package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +32 -0
- package/dist/claude-code/.claude/skills/recall/SKILL.md +75 -0
- package/dist/claude-code/.claude/skills/reflect/SKILL.md +85 -0
- package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +120 -0
- package/dist/claude-code/.claude/skills/report-issue/SKILL.md +53 -0
- package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +120 -0
- package/dist/claude-code/.claude/skills/resume/SKILL.md +93 -0
- package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +46 -0
- package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +42 -0
- package/dist/claude-code/.claude/skills/roi/SKILL.md +54 -0
- package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +35 -0
- package/dist/claude-code/.claude/skills/router/SKILL.md +89 -0
- package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +65 -0
- package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +78 -0
- package/dist/claude-code/.claude/skills/router/router-rules.md +84 -0
- package/dist/claude-code/.claude/skills/scan/SKILL.md +92 -0
- package/dist/claude-code/.claude/skills/scan/scan-procedure.md +732 -0
- package/dist/claude-code/.claude/skills/settings/SKILL.md +87 -0
- package/dist/claude-code/.claude/skills/ship/SKILL.md +48 -0
- package/dist/claude-code/.claude/skills/sketch/SKILL.md +78 -0
- package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +92 -0
- package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +79 -0
- package/dist/claude-code/.claude/skills/spike/SKILL.md +67 -0
- package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +86 -0
- package/dist/claude-code/.claude/skills/start/SKILL.md +67 -0
- package/dist/claude-code/.claude/skills/start/start-procedure.md +115 -0
- package/dist/claude-code/.claude/skills/stats/SKILL.md +51 -0
- package/dist/claude-code/.claude/skills/style/SKILL.md +71 -0
- package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +150 -0
- package/dist/claude-code/.claude/skills/synthesize/SKILL.md +94 -0
- package/dist/claude-code/.claude/skills/timeline/SKILL.md +66 -0
- package/dist/claude-code/.claude/skills/todo/SKILL.md +64 -0
- package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +95 -0
- package/dist/claude-code/.claude/skills/undo/SKILL.md +31 -0
- package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +54 -0
- package/dist/claude-code/.claude/skills/update/SKILL.md +56 -0
- package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +78 -0
- package/dist/claude-code/.claude/skills/verify/SKILL.md +113 -0
- package/dist/claude-code/.claude/skills/verify/verify-procedure.md +512 -0
- package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +81 -0
- package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +82 -0
- package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +26 -0
- package/package.json +5 -1
- package/reference/DEPRECATIONS.md +14 -0
- package/reference/registry.json +7 -0
- package/reference/skill-placeholders.md +71 -0
- package/scripts/lib/build/factory.cjs +62 -0
- package/scripts/lib/build/harness-configs.cjs +64 -0
- package/scripts/lib/manifest/README.md +46 -0
- package/scripts/lib/manifest/harnesses.cjs +3 -0
- package/scripts/lib/manifest/harnesses.json +91 -0
- package/scripts/lib/manifest/index.cjs +26 -0
- package/scripts/lib/manifest/loader.cjs +51 -0
- package/scripts/lib/manifest/prose-denylist.json +126 -0
- package/scripts/lib/manifest/schemas/harnesses.schema.json +38 -0
- package/scripts/lib/manifest/schemas/prose-denylist.schema.json +41 -0
- package/scripts/lib/manifest/schemas/skills.schema.json +33 -0
- package/scripts/lib/manifest/skills.json +255 -0
- package/sdk/cli/commands/build.ts +106 -0
- package/sdk/cli/index.js +84 -2
- package/sdk/cli/index.ts +7 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-fast
|
|
3
|
+
description: "Trivial inline design task. No subagents, no planning documents, no pipeline stages. Just do the thing described."
|
|
4
|
+
argument-hint: "<task description>"
|
|
5
|
+
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /gdd:fast
|
|
10
|
+
|
|
11
|
+
The leanest possible execution path. No subagents, no STATE.md update, no DESIGN-*.md artifacts. Read the target file, apply the change inline, commit.
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
- "Change this button's border-radius to 8px"
|
|
16
|
+
- "Add a hover state to the nav links"
|
|
17
|
+
- "Fix the mobile breakpoint on the hero"
|
|
18
|
+
- Single-file or single-component obvious changes
|
|
19
|
+
|
|
20
|
+
## When NOT to use
|
|
21
|
+
|
|
22
|
+
- Multi-component changes.
|
|
23
|
+
- Anything touching tokens used across the app.
|
|
24
|
+
- Anything requiring a design decision (taste, tradeoff, scope).
|
|
25
|
+
- Use `/gdd:quick` or the full pipeline instead.
|
|
26
|
+
|
|
27
|
+
## Steps
|
|
28
|
+
|
|
29
|
+
1. Parse the task description from the argument.
|
|
30
|
+
2. Use Grep/Glob to locate the target file(s). If ambiguous (>2 candidates), stop and ask the user which to edit — do not guess.
|
|
31
|
+
3. Read the target file(s).
|
|
32
|
+
4. Apply the described change with Edit.
|
|
33
|
+
5. Run a relevant sanity check (grep for the old value to confirm it's gone; grep for the new value to confirm it's in).
|
|
34
|
+
6. Commit with message: `fix: <task description>` (one commit, one change).
|
|
35
|
+
7. Print: "Done: <summary of what changed>."
|
|
36
|
+
|
|
37
|
+
## Do Not
|
|
38
|
+
|
|
39
|
+
- No subagent spawns.
|
|
40
|
+
- No `.design/` writes.
|
|
41
|
+
- No STATE.md mutation.
|
|
42
|
+
- No pipeline stage invocation.
|
|
43
|
+
- Do not proceed if the change turns out to be non-trivial — bail out and recommend `/gdd:quick` or the full pipeline.
|
|
44
|
+
- Do not skip the `capability_gap` emit on bail-out — Stage-0 telemetry depends on it (Phase 29 D-01).
|
|
45
|
+
|
|
46
|
+
## Emitting capability_gap on no-skill-match
|
|
47
|
+
|
|
48
|
+
If step 2 cannot locate any candidate files for the task description (or all candidates are filtered out as off-topic), or if the change in step 4 turns out to be non-trivial in a way that has no obvious resolution without a dedicated skill/agent, emit ONE `capability_gap` event before returning control to the user. This feeds Phase 29 Stage-0 telemetry — the reflector pattern-detection pass (Plan 29-02) and aggregation (Plan 29-03) read these events from the chain file (`.design/gep/events.jsonl`) to surface recurring capability gaps in `/gdd:apply-reflections`.
|
|
49
|
+
|
|
50
|
+
Synchronous emitter call (via Bash):
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
node -e '
|
|
54
|
+
const { appendChainEvent } = require("./scripts/lib/event-chain.cjs");
|
|
55
|
+
const { createHash, randomUUID } = require("node:crypto");
|
|
56
|
+
const intent = process.env.GDD_INTENT || "";
|
|
57
|
+
const payload = {
|
|
58
|
+
event_id: randomUUID(),
|
|
59
|
+
parent_event_id: null,
|
|
60
|
+
source: "fast",
|
|
61
|
+
context_hash: createHash("sha256").update(intent).digest("hex"),
|
|
62
|
+
intent_summary: intent.slice(0, 256),
|
|
63
|
+
suggested_kind: "skill",
|
|
64
|
+
evidence_refs: [],
|
|
65
|
+
};
|
|
66
|
+
appendChainEvent({
|
|
67
|
+
agent: "fast",
|
|
68
|
+
outcome: "capability_gap",
|
|
69
|
+
payload,
|
|
70
|
+
type: "capability_gap",
|
|
71
|
+
timestamp: new Date().toISOString(),
|
|
72
|
+
sessionId: process.env.GDD_SESSION_ID || "fast-cli",
|
|
73
|
+
});
|
|
74
|
+
'
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Notes:
|
|
78
|
+
- `evidence_refs` is empty `[]` for fast (no trajectory in `/gdd:fast` — that path is too lean by design).
|
|
79
|
+
- `parent_event_id` is null (root event for the fast bail-out).
|
|
80
|
+
- `suggested_kind` is `"skill"` because fast bail-outs are usually narrow primitives, not multi-step workflows. Plan 29-03's aggregator may upgrade to `"agent"` if a `context_hash` cluster shows multi-step usage.
|
|
81
|
+
- The emitter MUST NOT block — `appendChainEvent` already swallows IO errors via its existing try/catch (see `scripts/lib/event-chain.cjs:97-105`).
|
|
82
|
+
- The 7-field payload is preserved verbatim through `appendChainEvent`'s opaque-extras pattern; the chain row carries `type`, `timestamp`, `sessionId`, `payload` as opaque caller-supplied fields and is projected back to the events-schema envelope shape by readers (Plan 29-03 aggregator).
|
|
83
|
+
|
|
84
|
+
Trigger conditions:
|
|
85
|
+
- **Trigger 1**: Step 2 returns zero candidate files for the task description (target is genuinely missing).
|
|
86
|
+
- **Trigger 2**: Step 2 returns more than 2 candidates AND the user bail-out in step 2 fires (stop and ask).
|
|
87
|
+
- **Trigger 3**: Step 4 reveals the change is non-trivial in a way that has no obvious primitive resolution (the `## Do Not` "Do not proceed" line fires).
|
|
88
|
+
|
|
89
|
+
MCP-probe failures (connection down, transport-layer errors) do NOT emit `capability_gap` — those are Phase 22 connection-status concerns (D-08).
|
|
90
|
+
|
|
91
|
+
## FAST COMPLETE
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-figma-extract
|
|
3
|
+
description: Off-context Figma design-system extraction into a compact local digest (DESIGN.md + tokens.json + components.json). Pulls the file via the Figma REST API and digests it without the raw JSON ever entering the model context.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# gdd-figma-extract
|
|
7
|
+
|
|
8
|
+
Pull a whole Figma design system into a compact, queryable local digest — **without** the raw JSON ever entering Claude context. The heavy lifting runs in tested `.cjs` tools; the model reads only the digest outputs.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
/gdd:figma-extract <file-key-or-url> # full design-system digest
|
|
14
|
+
/gdd:figma-extract <file-key-or-url> --component Button # ~500-token single-component slice
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`<file-key-or-url>` is a Figma file URL (`https://www.figma.com/file/<key>/…` or `/design/<key>/…`) or a bare file key.
|
|
18
|
+
|
|
19
|
+
## Behavior
|
|
20
|
+
|
|
21
|
+
1. **Preflight (D-10).** Confirm `FIGMA_TOKEN` is set in the environment:
|
|
22
|
+
```
|
|
23
|
+
node -e "process.exit(process.env.FIGMA_TOKEN||process.env.FIGMA_PERSONAL_ACCESS_TOKEN?0:1)"
|
|
24
|
+
```
|
|
25
|
+
If unset, tell the user to `export FIGMA_TOKEN=figd_…` (from https://www.figma.com/developers/api#access-tokens). The token comes from the environment **only** — never ask the user to paste it into a file or the chat, and never echo it back.
|
|
26
|
+
|
|
27
|
+
2. **Stage 1 — pull.** Pull the file's REST endpoints into the gitignored raw cache (D-09):
|
|
28
|
+
```
|
|
29
|
+
node scripts/lib/figma-extract/pull.cjs "<file-key-or-url>"
|
|
30
|
+
```
|
|
31
|
+
This caches to `.figma-extract-cache/raw/<file-key>/` and skips re-pulling when Figma's `version` is unchanged (D-11). Add `--force` to bypass the cache, `--out <dir>` to relocate the cache. The tool prints a JSON summary (endpoints, bytes, cached) on stdout — the raw bodies stay on disk.
|
|
32
|
+
|
|
33
|
+
3. **Stage 2 — plugin sync (OPTIONAL, Path C).** Only when the design tokens live in Figma Variables that the REST API cannot return (non-Enterprise plans → the pull summary shows `variables` skipped) and the user wants token coverage:
|
|
34
|
+
```
|
|
35
|
+
node scripts/lib/figma-extract/receiver.cjs --out .figma-extract-cache/raw/<file-key>
|
|
36
|
+
```
|
|
37
|
+
This binds `127.0.0.1:5179` (D-06). Tell the user to run the dev-installed **"GDD Sync"** plugin in Figma and click **"Export to GDD"** — see `figma-plugin/README.md` for the one-time dev-install. The receiver writes `variables.json` into the cache and exits on receipt or timeout. Skip this stage entirely for design systems whose tokens already come through the REST pull.
|
|
38
|
+
|
|
39
|
+
4. **Stage 3 — digest.** Transform the cache into the compact digest:
|
|
40
|
+
```
|
|
41
|
+
node scripts/lib/figma-extract/digest.cjs --raw .figma-extract-cache/raw/<file-key> --out .figma-extract-cache/digest
|
|
42
|
+
```
|
|
43
|
+
This writes `DESIGN.md`, `tokens.json`, and `components.json`. Add `--prefer-styles` to invert the token priority to styles-first (D-04). Add `--component <name>` (D-08) to emit a single-component slice instead of the full digest.
|
|
44
|
+
|
|
45
|
+
5. **Read the digest.** Open **only** `.figma-extract-cache/digest/DESIGN.md` (plus `tokens.json` / `components.json` when you need structured data). For a single component, pass `--component <name>` in Stage 3 and read the ~500-token slice instead of the full ~16K-token spec.
|
|
46
|
+
|
|
47
|
+
## Required Reading
|
|
48
|
+
|
|
49
|
+
- `.figma-extract-cache/digest/DESIGN.md` — the compact human/LLM-readable spec
|
|
50
|
+
- `.figma-extract-cache/digest/tokens.json` — resolved design tokens (when structured token data is needed)
|
|
51
|
+
- `.figma-extract-cache/digest/components.json` — components with variants/props/defaults (when structured component data is needed)
|
|
52
|
+
|
|
53
|
+
## Notes
|
|
54
|
+
|
|
55
|
+
- Two-stage pipeline (D-01): re-run Stage 3 against an existing cache without re-pulling. The digest does zero network calls.
|
|
56
|
+
- The spike proved **0 Claude tokens** during extraction (898× compression, 223 MB → 254 KB). That property holds only because this skill never surfaces the raw cache.
|
|
57
|
+
- Figma MCP remains the right tool for spot questions on a single live component; this skill is the cheaper path for whole-design-system workflows.
|
|
58
|
+
|
|
59
|
+
## Do Not
|
|
60
|
+
|
|
61
|
+
- **Do NOT read or `cat` the `raw/*.json` cache** (e.g. `.figma-extract-cache/raw/<file-key>/file.json`). It is tool-internal and often 100+ MB; loading it into context defeats the off-context guarantee (D-12). Read only the digest outputs above.
|
|
62
|
+
- **Do not persist, log, echo, or print `FIGMA_TOKEN`** (D-10). It belongs in the environment only — never write it to a file, a commit, or chat output.
|
|
63
|
+
|
|
64
|
+
## FIGMA-EXTRACT COMPLETE
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-figma-write
|
|
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
|
+
---
|
|
5
|
+
|
|
6
|
+
# gdd-figma-write
|
|
7
|
+
|
|
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
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
/get-design-done figma-write <mode> [--dry-run] [--confirm-shared]
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Modes:
|
|
17
|
+
- `annotate` — add design decision comments to Figma layers
|
|
18
|
+
- `tokenize` — bind hard-coded color/spacing/type values to Figma variables
|
|
19
|
+
- `mappings` — write Code Connect component↔code file mappings
|
|
20
|
+
|
|
21
|
+
Flags:
|
|
22
|
+
- `--dry-run` — emit the proposal without executing any Figma writes
|
|
23
|
+
- `--confirm-shared` — authorize writes to shared team library components
|
|
24
|
+
|
|
25
|
+
## Prerequisites
|
|
26
|
+
|
|
27
|
+
1. Remote Figma MCP registered (writes are remote-only). Preferred: `claude plugin install figma@claude-plugins-official`. Manual: `claude mcp add --transport http figma https://mcp.figma.com/mcp`.
|
|
28
|
+
2. `.design/DESIGN-CONTEXT.md` exists (run `discover` first)
|
|
29
|
+
3. `.design/STATE.md` `<connections>` shows `figma: available (…, writes=true)`. If `writes=false` (desktop-only variant), writes are not supported — the agent will STOP with an instruction to install the remote MCP.
|
|
30
|
+
|
|
31
|
+
## Required Reading
|
|
32
|
+
|
|
33
|
+
Read `.design/STATE.md` and `.design/DESIGN-CONTEXT.md` before dispatching the agent.
|
|
34
|
+
|
|
35
|
+
## Dispatch
|
|
36
|
+
|
|
37
|
+
<agent>design-figma-writer</agent>
|
|
38
|
+
|
|
39
|
+
Pass through all flags and arguments from the invocation to the agent.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-graphify
|
|
3
|
+
description: Manage the Graphify knowledge graph for the current project. Build, query, status, diff. When available, design-planner and design-integration-checker use the graph for pre-search consultation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# gdd-graphify
|
|
7
|
+
|
|
8
|
+
Thin command wrapper around the GSD graphify tools integration.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
/get-design-done graphify build # Build or rebuild the knowledge graph
|
|
14
|
+
/get-design-done graphify query <term> # Query graph for a node and neighbors
|
|
15
|
+
/get-design-done graphify status # Check graph age, enabled, node count
|
|
16
|
+
/get-design-done graphify diff # Show topology changes since last build
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Behavior
|
|
20
|
+
|
|
21
|
+
1. Read `.design/STATE.md` to check `graphify` status in `<connections>`.
|
|
22
|
+
2. Check `graphify.enabled` in `.design/config.json` via a direct file read (per D-09 — no `config-get` CLI subcommand):
|
|
23
|
+
```
|
|
24
|
+
node -e "try{const c=JSON.parse(require('fs').readFileSync('.design/config.json','utf8'));process.stdout.write(String(c.graphify?.enabled===true))}catch{process.stdout.write('false')}"
|
|
25
|
+
```
|
|
26
|
+
3. If not enabled, print:
|
|
27
|
+
```
|
|
28
|
+
"Graphify is not enabled. Edit `.design/config.json` to set `graphify.enabled: true`."
|
|
29
|
+
"Then run /gdd:graphify build to generate the knowledge graph."
|
|
30
|
+
```
|
|
31
|
+
STOP.
|
|
32
|
+
4. Execute the requested subcommand via the native CLI:
|
|
33
|
+
- build: `node bin/gdd-graph build`
|
|
34
|
+
- query: `node bin/gdd-graph query "<term>" --budget 2000`
|
|
35
|
+
- status: `node bin/gdd-graph status`
|
|
36
|
+
- diff: `node bin/gdd-graph diff`
|
|
37
|
+
5. After `build` completes, update `.design/STATE.md` `<connections>`: `graphify: available`
|
|
38
|
+
|
|
39
|
+
## Required Reading
|
|
40
|
+
|
|
41
|
+
- `.design/STATE.md` — for graphify status in `<connections>`
|
|
42
|
+
- `.design/config.json` — for `graphify.enabled` flag
|
|
43
|
+
|
|
44
|
+
## Notes
|
|
45
|
+
|
|
46
|
+
- Graphify is optional. The native CLI ships in this repo at `bin/gdd-graph` (no external install — Node only).
|
|
47
|
+
- Graph is stored at `.design/graph/graph.json` (Ajv-validated against `scripts/lib/graph/schema.json`).
|
|
48
|
+
- Graph covers source code (`src/`, `components/`). It does NOT index `.design/` artifacts by default.
|
|
49
|
+
- Use `query` with node IDs from the graph schema: `component:<name>`, `token:color/<name>`, `decision:D-<nn>`, etc.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-health
|
|
3
|
+
description: "Reports .design/ artifact health — staleness, missing files, token drift, broken state transitions."
|
|
4
|
+
tools: Read, Bash, Glob, Grep, mcp__gdd_state__get
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /gdd:health
|
|
9
|
+
|
|
10
|
+
**Role:** Report the health of the `.design/` directory. Print a score and list the checks that failed.
|
|
11
|
+
|
|
12
|
+
## Checks
|
|
13
|
+
|
|
14
|
+
1. **Artifact inventory** — `ls -la .design/*.md` with size and mtime. Print a table.
|
|
15
|
+
2. **Missing expected artifacts** — by `stage` field from the `mcp__gdd_state__get` snapshot:
|
|
16
|
+
- `brief` expects BRIEF.md
|
|
17
|
+
- `explore` expects DESIGN.md, DESIGN-DEBT.md, DESIGN-CONTEXT.md
|
|
18
|
+
- `plan` expects DESIGN-PLAN.md
|
|
19
|
+
- `design` expects DESIGN-SUMMARY.md
|
|
20
|
+
- `verify` expects DESIGN-VERIFICATION.md
|
|
21
|
+
FAIL per missing.
|
|
22
|
+
3. **Token drift** — `wc -c .design/DESIGN.md .design/DESIGN-CONTEXT.md`; approx tokens = bytes/4. WARN if combined >40000.
|
|
23
|
+
4. **Aged DESIGN-DEBT** — items in `.design/DESIGN-DEBT.md` not touched in >14 days (file mtime). WARN.
|
|
24
|
+
5. **Broken state transitions** — `stage` field from the snapshot inconsistent with artifacts present (e.g. stage=`verify` but DESIGN-SUMMARY.md missing). FAIL.
|
|
25
|
+
6. **Pending sketch/spike wrap-ups** — any `.design/sketches/*` or `.design/spikes/*` directory lacking a SUMMARY.md. WARN.
|
|
26
|
+
7. **Seed germination** — scan `.design/SEEDS.md` (if present) for seeds whose trigger keywords match the snapshot or CYCLES.md content. List as "Seed ready: <text>".
|
|
27
|
+
|
|
28
|
+
## State snapshot
|
|
29
|
+
|
|
30
|
+
Call `mcp__gdd_state__get` once at the start to pull the snapshot used by checks 2, 5, and 7. Aggregate health math stays prose-level:
|
|
31
|
+
- Count available connections from `<connections>`.
|
|
32
|
+
- Count open blockers from `<blockers>` where `resolved` is absent.
|
|
33
|
+
- Count pending must-haves from `<must_haves>` where `status: "pending"`.
|
|
34
|
+
|
|
35
|
+
## Output
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
━━━ Design health ━━━
|
|
39
|
+
Artifacts:
|
|
40
|
+
BRIEF.md 2.1 KB 2026-04-14
|
|
41
|
+
DESIGN.md 18.4 KB 2026-04-17
|
|
42
|
+
DESIGN-CONTEXT.md 7.2 KB 2026-04-17
|
|
43
|
+
|
|
44
|
+
Checks:
|
|
45
|
+
[PASS] Missing artifacts
|
|
46
|
+
[WARN] Token drift (42,100)
|
|
47
|
+
[PASS] Aged DESIGN-DEBT
|
|
48
|
+
[PASS] State transitions
|
|
49
|
+
[PASS] Sketch/spike wrap-ups
|
|
50
|
+
[PASS] Seed germination
|
|
51
|
+
|
|
52
|
+
Health: 5 / 6 checks passing.
|
|
53
|
+
━━━━━━━━━━━━━━━━━━━━━
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Figma-extract readiness (figma_extract)
|
|
57
|
+
|
|
58
|
+
After the health table, the `gdd_health` MCP surface (`scripts/lib/health-mirror/index.cjs`) reports a `figma_extract` check so a user knows whether figma-extract is usable. The detail is one of three exact strings:
|
|
59
|
+
|
|
60
|
+
- `figma extract: ready (token set)` — `FIGMA_TOKEN` (or `FIGMA_PERSONAL_ACCESS_TOKEN`) is present (status `ok`).
|
|
61
|
+
- `figma extract: token missing` — no token env is set (status `warn`).
|
|
62
|
+
- `figma extract: plugin sync needed for variables (Free tier detected)` — token present but a prior pull recorded a 403/skip on the Variables REST path, so run the plugin-sync step (status `warn`).
|
|
63
|
+
|
|
64
|
+
Token PRESENCE only is detected (D-10) — the token value is never read, logged, or shown. The Free-tier signal is read from the local raw-pull cache only; no network call is made.
|
|
65
|
+
|
|
66
|
+
## Skill-discipline bootstrap (skill_discipline)
|
|
67
|
+
|
|
68
|
+
The `gdd_health` MCP surface also reports a `skill_discipline` check (Phase 32) confirming the using-gdd SessionStart bootstrap is live — detail is one of three exact strings:
|
|
69
|
+
- `skill-discipline: ready` — `skills/using-gdd/SKILL.md` exists AND `hooks/hooks.json` SessionStart wires `inject-using-gdd.sh` (status `ok`).
|
|
70
|
+
- `skill-discipline: missing using-gdd` (skill absent) or `skill-discipline: hook not wired` (skill present, no SessionStart inject) — both `warn`.
|
|
71
|
+
|
|
72
|
+
## Check MCP registration (gdd-mcp)
|
|
73
|
+
|
|
74
|
+
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 `./health-mcp-detection.md`.
|
|
75
|
+
|
|
76
|
+
## Update notice (safe-window surface)
|
|
77
|
+
|
|
78
|
+
After the health table, emit the plugin-update banner if one is present:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
[ -f .design/update-available.md ] && cat .design/update-available.md
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Written by `hooks/update-check.sh`; suppressed mid-pipeline and when the latest release is dismissed.
|
|
85
|
+
|
|
86
|
+
## Skill-length report
|
|
87
|
+
|
|
88
|
+
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:
|
|
89
|
+
|
|
90
|
+
- `Skill-length: <total> total | <clean> clean | <warnings> warn (>=100) | <blockers> block (>=250)`
|
|
91
|
+
- If blockers > 0: list each blocker as a row `- <name> (<lines> lines)`. Else: print `All skills within contract.`
|
|
92
|
+
|
|
93
|
+
Thresholds: warn >=100, block >=250 (D-01). Strict description-format off by default (D-02). See `./health-skill-length-report.md` for the JSON shape and threshold rationale.
|
|
94
|
+
|
|
95
|
+
## Do Not
|
|
96
|
+
|
|
97
|
+
- Do not mutate STATE.md — this skill is read-only. Only `mcp__gdd_state__get` is permitted.
|
|
98
|
+
|
|
99
|
+
## HEALTH COMPLETE
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: health-mcp-detection
|
|
3
|
+
type: heuristic
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
phase: 28.5
|
|
6
|
+
tags: [health, mcp, detection, gdd-mcp, registration-nudge]
|
|
7
|
+
last_updated: 2026-05-18
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Health MCP-Registration Detection Procedure
|
|
11
|
+
|
|
12
|
+
Extracted from `skills/health/SKILL.md` per Phase 28.5 D-10 (extract-then-link, never delete content).
|
|
13
|
+
This file documents the canonical procedure for inspecting whether `gdd-mcp` (Phase 27.7+) is
|
|
14
|
+
registered with any installed harness and rendering a one-line status row after the health
|
|
15
|
+
table. The procedure is non-blocking by design: any failure path renders `unknown` rather
|
|
16
|
+
than crashing the skill.
|
|
17
|
+
|
|
18
|
+
## Dismissal check
|
|
19
|
+
|
|
20
|
+
1. Read `.design/config.json` (if present). Parse JSON inside a try/catch.
|
|
21
|
+
2. If `config.mcp_nudge === false`, SKIP this step entirely (render nothing).
|
|
22
|
+
3. On parse failure: default to `mcp_nudge=true` (show the row) — fail-safe per threat T-27.7-04-05.
|
|
23
|
+
|
|
24
|
+
## Detection
|
|
25
|
+
|
|
26
|
+
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).
|
|
27
|
+
2. Preferred invocation via the install-lib: call `detectMcpRegistration()` from `scripts/lib/install/mcp-register.cjs`. Returns `{harnesses: [{harness, present, registered}], summary}`.
|
|
28
|
+
|
|
29
|
+
## Row rendering
|
|
30
|
+
|
|
31
|
+
Based on the detection result, render exactly ONE of these row strings:
|
|
32
|
+
|
|
33
|
+
- When `claude` and `codex` both present + both registered:
|
|
34
|
+
`MCP server: registered with claude+codex`
|
|
35
|
+
- When only one harness is present and registered:
|
|
36
|
+
`MCP server: registered with claude` (or `MCP server: registered with codex`)
|
|
37
|
+
- When at least one harness is present but `gdd-mcp` is NOT in its registered list:
|
|
38
|
+
`MCP server: not registered (run: npx @hegemonart/get-design-done --register-mcp; dismiss: .design/config.json#mcp_nudge=false)`
|
|
39
|
+
- When neither harness CLI is found on PATH:
|
|
40
|
+
`MCP server: unknown (claude/codex CLI not found)`
|
|
41
|
+
|
|
42
|
+
## Fallback (if `mcp-register.cjs` not yet shipped)
|
|
43
|
+
|
|
44
|
+
Skip this step silently with status `MCP server: unknown`. This step is non-blocking — failures here MUST NOT crash the SKILL.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Health skill — skill-length report subsection
|
|
2
|
+
|
|
3
|
+
Phase 28.5-11 / D-11 reference. Read by `skills/health/SKILL.md` to render the
|
|
4
|
+
"Skill-length report" subsection after the standard health checks.
|
|
5
|
+
|
|
6
|
+
## JSON shape (from `validate-skill-length.cjs --quiet --json`)
|
|
7
|
+
|
|
8
|
+
```jsonc
|
|
9
|
+
{
|
|
10
|
+
"summary": {
|
|
11
|
+
"total": 70, // number of SKILL.md files under skills/
|
|
12
|
+
"clean": 70, // skills with 0 errors and 0 warnings
|
|
13
|
+
"warnings": 0, // skills with >=100 lines but <250 (D-01 warn band)
|
|
14
|
+
"blockers": 0 // skills with any block-level error (>=250 lines,
|
|
15
|
+
// missing frontmatter field, description out of
|
|
16
|
+
// range, disable-model-invocation non-whitelisted)
|
|
17
|
+
},
|
|
18
|
+
"skills": [
|
|
19
|
+
{
|
|
20
|
+
"name": "...", // skill folder name (matches skills/<name>/SKILL.md)
|
|
21
|
+
"path": "...", // absolute path to the file on disk
|
|
22
|
+
"lines": 0, // wc -l semantics
|
|
23
|
+
"descriptionLength": 0, // length of frontmatter.description string
|
|
24
|
+
"hasRequiredFields": true,
|
|
25
|
+
"level": "clean", // "clean" | "warn" | "block"
|
|
26
|
+
"errors": [{ "code": "...", "message": "..." }],
|
|
27
|
+
"warnings": [{ "code": "...", "message": "..." }],
|
|
28
|
+
"reasons": ["..."] // human-readable summary lines
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Render contract
|
|
35
|
+
|
|
36
|
+
The health skill prints two lines after the existing checks table:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Skill-length: <total> total | <clean> clean | <warnings> warn (>=100) | <blockers> block (>=250)
|
|
40
|
+
All skills within contract.
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
If `summary.blockers > 0`, replace the second line with one indented row per
|
|
44
|
+
blocker entry (skills where `level === "block"`):
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
Skill-length: 70 total | 67 clean | 2 warn (>=100) | 1 block (>=250)
|
|
48
|
+
- <name> (<lines> lines)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Thresholds (D-01)
|
|
52
|
+
|
|
53
|
+
- `warn >=100` — skill flagged as advisory; CI emits `::warning::` annotation
|
|
54
|
+
but does not fail the build.
|
|
55
|
+
- `block >=250` — skill flagged as blocker; CI emits `::error::` and fails
|
|
56
|
+
the build via exit code 2.
|
|
57
|
+
|
|
58
|
+
## Strict description-format (D-02)
|
|
59
|
+
|
|
60
|
+
`STRICT_DESCRIPTION=1` / `--strict-description` is OFF by default. Phase 33
|
|
61
|
+
will graduate the strict `<what>. Use when <triggers>.` regex from advisory
|
|
62
|
+
to hard-block based on A/B evidence at
|
|
63
|
+
`.design/research/description-format-ab.md`.
|
|
64
|
+
|
|
65
|
+
## Cross-link from health
|
|
66
|
+
|
|
67
|
+
- `skills/health/SKILL.md` — emits the report after the main checks table.
|
|
68
|
+
- `scripts/validate-skill-length.cjs` — provides the JSON.
|
|
69
|
+
- `tests/phase-28.5-baseline.test.cjs` — locks the post-rework distribution.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-help
|
|
3
|
+
description: "Lists all available get-design-done commands with one-line descriptions"
|
|
4
|
+
tools: Read
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Get Design Done — Help
|
|
9
|
+
|
|
10
|
+
**Role:** Print a formatted reference of all `/gdd:` commands, grouped by purpose.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Output
|
|
15
|
+
|
|
16
|
+
Print the following table:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
━━━ Get Design Done — Command Reference ━━━
|
|
20
|
+
|
|
21
|
+
Pipeline stages (run in order):
|
|
22
|
+
brief Stage 1 — capture problem statement, audience, constraints → BRIEF.md
|
|
23
|
+
explore Stage 2 — inventory scan + design context interview → DESIGN.md, DESIGN-DEBT.md, DESIGN-CONTEXT.md
|
|
24
|
+
plan Stage 3 — decompose into executable tasks → DESIGN-PLAN.md
|
|
25
|
+
design Stage 4 — execute tasks with wave coordination → DESIGN-SUMMARY.md
|
|
26
|
+
verify Stage 5 — audit, verify, score → DESIGN-VERIFICATION.md
|
|
27
|
+
|
|
28
|
+
Standalone analysis:
|
|
29
|
+
style [Component] Generate component handoff doc → DESIGN-STYLE-[Name].md
|
|
30
|
+
darkmode Audit dark mode architecture + contrast → DARKMODE-AUDIT.md
|
|
31
|
+
compare Delta between baseline and verification → COMPARE-REPORT.md
|
|
32
|
+
|
|
33
|
+
Ergonomics:
|
|
34
|
+
next Route to the next pipeline stage based on STATE.md
|
|
35
|
+
help This reference
|
|
36
|
+
progress Show current pipeline state
|
|
37
|
+
health Health check of .design/ artifacts
|
|
38
|
+
quick Fast pass through the whole pipeline
|
|
39
|
+
fast Aggressive speed mode
|
|
40
|
+
|
|
41
|
+
Exploration:
|
|
42
|
+
discuss Open discussion thread with design-discussant agent
|
|
43
|
+
list-assumptions Print active D-XX decisions from STATE.md
|
|
44
|
+
sketch Open a design sketch scratchpad
|
|
45
|
+
sketch-wrap-up Close sketch and merge learnings
|
|
46
|
+
spike Time-boxed exploratory spike
|
|
47
|
+
spike-wrap-up Close spike and capture outcomes
|
|
48
|
+
map Map the codebase structure
|
|
49
|
+
audit Run audit-only pass
|
|
50
|
+
|
|
51
|
+
Maintenance:
|
|
52
|
+
note Record a quick note to STATE.md
|
|
53
|
+
plant-seed Record an idea for later
|
|
54
|
+
add-backlog Append item to backlog
|
|
55
|
+
review-backlog Review pending backlog
|
|
56
|
+
todo List/manage design TODOs
|
|
57
|
+
stats Print pipeline stats
|
|
58
|
+
settings View/edit plugin settings
|
|
59
|
+
update Update the plugin
|
|
60
|
+
reapply-patches Reapply any pending patches
|
|
61
|
+
debug Enter systematic debugging mode
|
|
62
|
+
undo Revert the last stage action
|
|
63
|
+
|
|
64
|
+
Lifecycle:
|
|
65
|
+
new-project Initialize STATE.md + .design/ directory
|
|
66
|
+
new-cycle Start a new design cycle on an existing project
|
|
67
|
+
complete-cycle Archive the current cycle
|
|
68
|
+
pause Pause work and save context
|
|
69
|
+
resume Resume paused work
|
|
70
|
+
do Execute a specific task
|
|
71
|
+
ship Create PR from completed work
|
|
72
|
+
pr-branch Create/switch PR branch
|
|
73
|
+
|
|
74
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Update notice (safe-window surface)
|
|
78
|
+
|
|
79
|
+
After the command reference, emit the plugin-update banner if one is present:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
[ -f .design/update-available.md ] && cat .design/update-available.md
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Written by `hooks/update-check.sh`; suppressed mid-pipeline and when the latest release is dismissed.
|
|
86
|
+
|
|
87
|
+
## HELP COMPLETE
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-list-assumptions
|
|
3
|
+
description: "Surfaces hidden design assumptions baked into the codebase before planning — pattern-based detection plus user-surfaced items."
|
|
4
|
+
argument-hint: "[--area typography|color|layout|motion|a11y]"
|
|
5
|
+
tools: Read, Grep, Glob
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /gdd:list-assumptions
|
|
10
|
+
|
|
11
|
+
**Role:** Surface implicit design assumptions that were never explicitly decided. Output a numbered list tagging each as `[EXPLICIT]` (found in STATE.md/DESIGN-CONTEXT.md decisions) or `[IMPLICIT]` (inferred from code patterns).
|
|
12
|
+
|
|
13
|
+
## Step 1 — Read explicit decisions
|
|
14
|
+
|
|
15
|
+
Read `.design/STATE.md` `<decisions>` and `.design/DESIGN-CONTEXT.md` (if present). Collect every D-XX as `[EXPLICIT]` entries keyed by category.
|
|
16
|
+
|
|
17
|
+
## Step 2 — Scan codebase for implicit patterns
|
|
18
|
+
|
|
19
|
+
If `--area <name>` is given, restrict to that area. Otherwise scan all.
|
|
20
|
+
|
|
21
|
+
**Layout**
|
|
22
|
+
- Grep for `@media` queries → "Is mobile-first or desktop-first assumed?"
|
|
23
|
+
- Grep for `grid-template`, `flex-direction` → "Is F-pattern or Z-pattern layout assumed?"
|
|
24
|
+
|
|
25
|
+
**Typography**
|
|
26
|
+
- Grep for `font-family` declarations → "Does the chosen font stack assume brand acceptance?"
|
|
27
|
+
- Grep for `font-size: [0-9]+px` with varying values → "Is a modular scale assumed or ad-hoc sizing?"
|
|
28
|
+
|
|
29
|
+
**Color**
|
|
30
|
+
- Grep for hex literals `#[0-9a-fA-F]{3,8}` → "Is the palette assumed to be fixed without a token layer?"
|
|
31
|
+
|
|
32
|
+
**Motion**
|
|
33
|
+
- Grep for `@keyframes`, `transition`, `animate` → "Does the brand tolerate animation?"
|
|
34
|
+
- Grep for `prefers-reduced-motion` → "Is reduced-motion honored or assumed ignored?"
|
|
35
|
+
|
|
36
|
+
**A11y**
|
|
37
|
+
- Grep for `aria-`, `role=`, `alt=` coverage → "Is WCAG AA the target, or AAA?"
|
|
38
|
+
- Grep for `outline: none`, `outline: 0` → "Are focus rings intentionally removed?"
|
|
39
|
+
|
|
40
|
+
For each hit, emit `Detected assumption: [pattern] at [file:line]` and flag as `[IMPLICIT]`.
|
|
41
|
+
|
|
42
|
+
## Step 3 — Output
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
━━━ Design assumptions ━━━
|
|
46
|
+
|
|
47
|
+
Typography
|
|
48
|
+
01 [EXPLICIT] D-03: Font family Inter
|
|
49
|
+
02 [IMPLICIT] 18 px font-size values found — scale not explicit (src/Card.css:12, ...)
|
|
50
|
+
|
|
51
|
+
Color
|
|
52
|
+
03 [IMPLICIT] 47 hex literals — no token layer (see /gdd:discuss color)
|
|
53
|
+
|
|
54
|
+
...
|
|
55
|
+
|
|
56
|
+
N assumptions total — M implicit.
|
|
57
|
+
Next: /gdd:discuss --all to resolve implicit ones.
|
|
58
|
+
━━━━━━━━━━━━━━━━━━━━━━━━
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## LIST-ASSUMPTIONS COMPLETE
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-locale
|
|
3
|
+
description: "Inspects or sets the GDD CLI locale for this project. With no argument, reports the resolved locale (config.locale > env LANG > en), the fallback chain, and per-locale coverage (which message tables are complete vs placeholder). With a <code> (en/ru/uk/de/fr/zh/ja), sets .design/config.json#locale after previewing the change. Localizes --help, common error messages, and skill prompt headers via scripts/lib/i18n/; missing keys fall back to English, so a partial locale never breaks the CLI. Use to switch GDD's own output language."
|
|
4
|
+
argument-hint: "[<code>]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
tools: Read, Write, Bash, Grep, Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /gdd:locale
|
|
10
|
+
|
|
11
|
+
Closes the English-only CLI gap: GDD's README is multilingual, but `--help`, errors, and skill prompt
|
|
12
|
+
headers spoke English until now. This skill inspects or sets the project's locale. Contract:
|
|
13
|
+
`../../reference/cli-localization.md`.
|
|
14
|
+
|
|
15
|
+
## Invocation
|
|
16
|
+
|
|
17
|
+
| Command | Behavior |
|
|
18
|
+
|---|---|
|
|
19
|
+
| `/gdd:locale` | Report the resolved locale, the fallback chain, and per-locale coverage. |
|
|
20
|
+
| `/gdd:locale <code>` | Set `.design/config.json#locale` to `<code>` (en/ru/uk/de/fr/zh/ja), after preview. |
|
|
21
|
+
|
|
22
|
+
## Steps
|
|
23
|
+
|
|
24
|
+
1. **Resolve current.** Read `.design/config.json#locale` (if any) and the environment, then call the
|
|
25
|
+
resolver to report the active locale + chain:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
node -e '
|
|
29
|
+
const i = require("./scripts/lib/i18n/index.cjs");
|
|
30
|
+
let cfg = {}; try { cfg = JSON.parse(require("fs").readFileSync(".design/config.json","utf8")); } catch {}
|
|
31
|
+
const loc = i.resolveLocale({ env: process.env, configLocale: cfg.locale });
|
|
32
|
+
const cov = i.KNOWN_LOCALES.map((l) => `${l}:${(i.loadTable(l)._meta||{}).coverage||"?"}`).join(" ");
|
|
33
|
+
console.log(JSON.stringify({ resolved: loc, chain: i.fallbackChain(loc), coverage: cov }));
|
|
34
|
+
'
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
2. **No argument** → print the resolved locale, the fallback chain, and the coverage line (which
|
|
38
|
+
tables are `complete` vs `placeholder`). Stop.
|
|
39
|
+
3. **`<code>` argument** → validate it is in `KNOWN_LOCALES` (en/ru/uk/de/fr/zh/ja). Unknown → print the
|
|
40
|
+
`error.invalid_locale` message + the known list, change nothing.
|
|
41
|
+
4. **Preview + set.** Show `locale: <old> -> <code>`, then write `locale` into `.design/config.json`
|
|
42
|
+
(create the file if absent, preserving any existing keys). Confirm, and note that missing keys in a
|
|
43
|
+
placeholder locale fall back to English.
|
|
44
|
+
|
|
45
|
+
## Output
|
|
46
|
+
|
|
47
|
+
End with:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
## LOCALE COMPLETE
|
|
51
|
+
```
|