@hegemonart/get-design-done 1.30.6 → 1.31.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 +6 -3
- package/.claude-plugin/plugin.json +5 -2
- package/CHANGELOG.md +105 -0
- package/NOTICE +224 -0
- package/README.md +22 -1
- package/SKILL.md +1 -0
- package/agents/design-authority-watcher.md +1 -1
- package/agents/perf-analyzer.md +2 -2
- package/bin/gdd-mcp +78 -0
- package/bin/gdd-sdk +34 -24
- package/bin/gdd-state-mcp +78 -0
- package/{README.de.md → docs/i18n/README.de.md} +1 -1
- package/{README.fr.md → docs/i18n/README.fr.md} +1 -1
- package/{README.it.md → docs/i18n/README.it.md} +1 -1
- package/{README.ja.md → docs/i18n/README.ja.md} +1 -1
- package/{README.ko.md → docs/i18n/README.ko.md} +1 -1
- package/{README.zh-CN.md → docs/i18n/README.zh-CN.md} +1 -1
- package/hooks/_hook-emit.js +1 -1
- package/hooks/budget-enforcer.ts +5 -5
- package/hooks/context-exhaustion.ts +2 -2
- package/hooks/gdd-precompact-snapshot.js +3 -3
- package/hooks/gdd-read-injection-scanner.ts +2 -2
- package/hooks/gdd-sessionstart-recap.js +1 -1
- package/hooks/gdd-turn-closeout.js +1 -1
- package/package.json +24 -10
- package/recipes/.gitkeep +0 -0
- package/reference/schemas/recipe.schema.json +33 -0
- package/scripts/cli/gdd-events.mjs +5 -5
- package/scripts/lib/cache/gdd-cache-manager.cjs +1 -1
- package/scripts/lib/cli/index.ts +22 -160
- package/scripts/lib/connection-probe/index.cjs +1 -1
- package/scripts/lib/discuss-parallel-runner/aggregator.ts +1 -1
- package/scripts/lib/discuss-parallel-runner/index.ts +1 -1
- package/scripts/lib/error-classifier.cjs +24 -227
- package/scripts/lib/event-stream/index.ts +25 -193
- package/scripts/lib/figma-extract/digest.cjs +430 -0
- package/scripts/lib/figma-extract/parse-url.cjs +87 -0
- package/scripts/lib/figma-extract/payload-schema.json +108 -0
- package/scripts/lib/figma-extract/pull.cjs +394 -0
- package/scripts/lib/figma-extract/receiver.cjs +273 -0
- package/scripts/lib/figma-extract/render-md.cjs +143 -0
- package/scripts/lib/figma-extract/styles-resolver.cjs +147 -0
- package/scripts/lib/figma-extract/walk.cjs +100 -0
- package/scripts/lib/gdd-errors/index.ts +24 -213
- package/scripts/lib/gdd-state/index.ts +23 -161
- package/scripts/lib/health-mirror/index.cjs +88 -1
- package/scripts/lib/iteration-budget.cjs +23 -199
- package/scripts/lib/jittered-backoff.cjs +24 -107
- package/scripts/lib/lockfile.cjs +23 -195
- package/scripts/lib/logger/index.ts +1 -1
- package/scripts/lib/parallelism-engine/concurrency-tuner.cjs +1 -1
- package/scripts/lib/perf-analyzer/index.cjs +1 -1
- package/scripts/lib/pipeline-runner/index.ts +4 -4
- package/scripts/lib/pipeline-runner/state-machine.ts +1 -1
- package/scripts/lib/prompt-dedup/index.cjs +1 -1
- package/scripts/lib/rate-guard.cjs +2 -2
- package/scripts/lib/recipe-loader.cjs +142 -0
- package/scripts/lib/session-runner/errors.ts +3 -3
- package/scripts/lib/session-runner/index.ts +3 -3
- package/scripts/lib/session-runner/transcript.ts +1 -1
- package/scripts/lib/tool-scoping/index.ts +1 -1
- package/scripts/mcp-servers/gdd-mcp/server.ts +29 -311
- package/scripts/mcp-servers/gdd-state/server.ts +28 -282
- package/sdk/README.md +45 -0
- package/{scripts/lib → sdk}/cli/commands/audit.ts +3 -3
- package/{scripts/lib → sdk}/cli/commands/init.ts +3 -3
- package/{scripts/lib → sdk}/cli/commands/query.ts +4 -4
- package/{scripts/lib → sdk}/cli/commands/run.ts +5 -5
- package/{scripts/lib → sdk}/cli/commands/stage.ts +5 -5
- package/sdk/cli/index.js +8091 -0
- package/sdk/cli/index.ts +172 -0
- package/{scripts/lib → sdk}/cli/parse-args.ts +2 -2
- package/{scripts/lib/gdd-errors → sdk/errors}/classification.ts +1 -1
- package/sdk/errors/index.ts +218 -0
- package/{scripts/lib → sdk}/event-stream/emitter.ts +1 -1
- package/sdk/event-stream/index.ts +197 -0
- package/{scripts/lib → sdk}/event-stream/reader.ts +1 -1
- package/{scripts/lib → sdk}/event-stream/types.ts +2 -2
- package/{scripts/lib → sdk}/event-stream/writer.ts +1 -1
- package/sdk/index.ts +19 -0
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/README.md +3 -3
- package/sdk/mcp/gdd-mcp/server.js +1924 -0
- package/sdk/mcp/gdd-mcp/server.ts +325 -0
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_cycle_recap.ts +3 -3
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_decisions_list.ts +2 -2
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_events_tail.ts +3 -3
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_health.ts +2 -2
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_intel_get.ts +2 -2
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_learnings_digest.ts +2 -2
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_phase_current.ts +2 -2
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_phases_list.ts +2 -2
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_plans_list.ts +2 -2
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_reflections_latest.ts +2 -2
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_status.ts +3 -3
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_telemetry_query.ts +3 -3
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/index.ts +2 -2
- package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/shared.ts +3 -3
- package/sdk/mcp/gdd-state/server.js +2790 -0
- package/sdk/mcp/gdd-state/server.ts +294 -0
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/add_blocker.ts +3 -3
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/add_decision.ts +3 -3
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/add_must_have.ts +3 -3
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/checkpoint.ts +2 -2
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/frontmatter_update.ts +2 -2
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/get.ts +3 -3
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/index.ts +1 -1
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/probe_connections.ts +3 -3
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/resolve_blocker.ts +3 -3
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/set_status.ts +2 -2
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/shared.ts +8 -8
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/transition_stage.ts +4 -4
- package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/update_progress.ts +2 -2
- package/sdk/primitives/error-classifier.cjs +232 -0
- package/sdk/primitives/iteration-budget.cjs +205 -0
- package/sdk/primitives/jittered-backoff.cjs +112 -0
- package/sdk/primitives/lockfile.cjs +201 -0
- package/{scripts/lib/gdd-state → sdk/state}/gates.ts +1 -1
- package/sdk/state/index.ts +167 -0
- package/{scripts/lib/gdd-state → sdk/state}/lockfile.ts +1 -1
- package/{scripts/lib/gdd-state → sdk/state}/mutator.ts +1 -1
- package/{scripts/lib/gdd-state → sdk/state}/parser.ts +1 -1
- package/{scripts/lib/gdd-state → sdk/state}/types.ts +4 -4
- package/skills/figma-extract/SKILL.md +64 -0
- package/skills/health/SKILL.md +10 -0
- package/skills/quality-gate/SKILL.md +2 -2
- package/scripts/aggregate-agent-metrics.ts +0 -282
- package/scripts/bootstrap-manifest.txt +0 -3
- package/scripts/bootstrap.sh +0 -80
- package/scripts/build-distribution-bundles.cjs +0 -549
- package/scripts/build-intel.cjs +0 -486
- package/scripts/codegen-schema-types.ts +0 -149
- package/scripts/detect-stale-refs.cjs +0 -107
- package/scripts/e2e/run-headless.ts +0 -514
- package/scripts/extract-changelog-section.cjs +0 -58
- package/scripts/gsd-cleanup-incubator.cjs +0 -367
- package/scripts/injection-patterns.cjs +0 -58
- package/scripts/lint-agentskills-spec.cjs +0 -457
- package/scripts/release-smoke-test.cjs +0 -200
- package/scripts/rollback-release.sh +0 -42
- package/scripts/run-injection-scanner-ci.cjs +0 -83
- package/scripts/tests/test-authority-rejected-kinds.sh +0 -58
- package/scripts/tests/test-authority-watcher-diff.sh +0 -113
- package/scripts/tests/test-motion-provenance.sh +0 -64
- package/scripts/validate-frontmatter.ts +0 -409
- package/scripts/validate-incubator-scope.cjs +0 -133
- package/scripts/validate-schemas.ts +0 -401
- package/scripts/validate-skill-length.cjs +0 -283
- package/scripts/verify-version-sync.cjs +0 -30
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_cycle_recap.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_decisions_list.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_events_tail.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_health.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_intel_get.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_learnings_digest.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_phase_current.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_phases_list.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_plans_list.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_reflections_latest.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_status.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_telemetry_query.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/add_blocker.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/add_decision.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/add_must_have.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/checkpoint.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/frontmatter_update.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/get.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/probe_connections.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/resolve_blocker.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/set_status.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/transition_stage.schema.json +0 -0
- /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/update_progress.schema.json +0 -0
- /package/{scripts/lib → sdk/primitives}/error-classifier.d.cts +0 -0
- /package/{scripts/lib → sdk/primitives}/iteration-budget.d.cts +0 -0
- /package/{scripts/lib → sdk/primitives}/jittered-backoff.d.cts +0 -0
- /package/{scripts/lib → sdk/primitives}/lockfile.d.cts +0 -0
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
},
|
|
6
6
|
"metadata": {
|
|
7
7
|
"description": "Get Design Done — 5-stage agent-orchestrated design pipeline with 9 connections, handoff-first workflow, bidirectional Figma write-back, 22+ specialized agents, queryable knowledge layer (intel store, dependency analysis, learnings extraction), and a self-improvement loop (reflector, frontmatter + budget feedback, global-skills layer). v1.20.0 ships the SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream, and resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) for rate-limit + 429 + context-overflow recovery. Full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows) and release automation (auto-tag + GitHub Release + release-time smoke test).",
|
|
8
|
-
"version": "1.
|
|
8
|
+
"version": "1.31.5"
|
|
9
9
|
},
|
|
10
10
|
"plugins": [
|
|
11
11
|
{
|
|
12
12
|
"name": "get-design-done",
|
|
13
13
|
"source": "./",
|
|
14
14
|
"description": "Agent-orchestrated 5-stage design pipeline: Brief → Explore → Plan → Design → Verify. 22+ specialized agents, 9 connections (Figma, Refero, Preview, Storybook, Chromatic, Figma Writer, Graphify, Pinterest, Claude Design), Claude Design handoff, bidirectional Figma write-back, and a queryable intel store (.design/intel/) for dependency and learnings queries. Standalone commands: style, darkmode, compare, figma-write, graphify, handoff, analyze-dependencies, skill-manifest, extract-learnings. Embeds NNG heuristics, WCAG thresholds, typographic systems, motion framework, and anti-pattern catalog. Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows) and release automation. Optimization layer (v1.0.4.1, retroactive): gdd-router + gdd-cache-manager skills, PreToolUse budget-enforcer hook, tier-aware agent frontmatter, lazy checker gates, streaming synthesizer, /gdd:warm-cache + /gdd:optimize commands, and cost telemetry at .design/telemetry/costs.jsonl — targeting 50-70% per-task token-cost reduction with no quality-floor regression. v1.20.0 SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream at .design/telemetry/events.jsonl, resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) with rate-limit + 429 + context-overflow recovery, and TypeScript toolchain.",
|
|
15
|
-
"version": "1.
|
|
15
|
+
"version": "1.31.5",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "hegemonart"
|
|
18
18
|
},
|
|
@@ -68,7 +68,10 @@
|
|
|
68
68
|
"gemini",
|
|
69
69
|
"mcp",
|
|
70
70
|
"parallel-agents",
|
|
71
|
-
"agent-sdk"
|
|
71
|
+
"agent-sdk",
|
|
72
|
+
"figma",
|
|
73
|
+
"extractor",
|
|
74
|
+
"design-system-sync"
|
|
72
75
|
]
|
|
73
76
|
}
|
|
74
77
|
]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "get-design-done",
|
|
3
3
|
"short_name": "gdd",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.31.5",
|
|
5
5
|
"description": "Agent-orchestrated 5-stage design pipeline: Brief → Explore → Plan → Design → Verify. 22+ specialized agents, 9 connections (Figma, Refero, Preview, Storybook, Chromatic, Figma Writer, Graphify, Pinterest, Claude Design), handoff-first workflow via Claude Design bundles, bidirectional Figma write-back (annotations, Code Connect), queryable intel store (`.design/intel/`) for O(1) design surface lookups, and self-improvement loop (reflector agent, frontmatter + budget feedback, global-skills layer at `~/.claude/gdd/global-skills/`). Standalone commands: style, darkmode, compare, figma-write, graphify, handoff, analyze-dependencies, skill-manifest, extract-learnings, reflect, apply-reflections. Embeds NNG heuristics, WCAG thresholds, typographic systems, motion framework, and anti-pattern catalog. Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows, lint + schema + frontmatter + stale-ref + shellcheck + gitleaks + injection-scan + blocking size-budget) and release automation (auto-tag + GitHub Release + release-time smoke test). Optimization layer (v1.0.4.1, retroactive): gdd-router + gdd-cache-manager skills, PreToolUse budget-enforcer hook, tier-aware agent frontmatter, lazy checker gates, streaming synthesizer, /gdd:warm-cache + /gdd:optimize commands, and cost telemetry at .design/telemetry/costs.jsonl — targeting 50-70% per-task token-cost reduction with no quality-floor regression. v1.20.0 SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream at .design/telemetry/events.jsonl, resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) with rate-limit + 429 + context-overflow recovery, and TypeScript toolchain. v1.27.7 ships gdd-mcp (Phase 27.7): 12 read-only MCP tools for sub-3s priming. v1.28.0 (Phase 28): Foundational References Tier 2 — 5 new reference files (color-theory, composition, proportion-systems, i18n, contrast-advanced), 2 verifier i18n probes + 1 explore i18n-readiness probe, 12 additive cross-link insertions across 10 existing references, 2 orthogonal audit-scoring lens-tags (composition_alignment + i18n_readiness).",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "hegemonart",
|
|
@@ -62,7 +62,10 @@
|
|
|
62
62
|
"agent-sdk",
|
|
63
63
|
"mcp-server",
|
|
64
64
|
"context-loading",
|
|
65
|
-
"cross-session"
|
|
65
|
+
"cross-session",
|
|
66
|
+
"figma",
|
|
67
|
+
"extractor",
|
|
68
|
+
"design-system-sync"
|
|
66
69
|
],
|
|
67
70
|
"skills": [
|
|
68
71
|
"./skills/"
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,111 @@ All notable changes to get-design-done are documented here. Versions follow [sem
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [1.31.5] - 2026-05-29
|
|
8
|
+
|
|
9
|
+
### Phase 31.5 — Repo Structure Consolidation
|
|
10
|
+
|
|
11
|
+
One audit-clean repo layout with **zero changes to the public surface** (commands, agents, skills, hooks, connections, install flow) and **no file content lost**. The SDK that `plugin.json` has advertised since v1.20.0 now actually lives in `sdk/`; the npm tarball ships only what plugin users need; the repo root is decluttered. Every move was history-preserving (`git mv`), guarded by three independent regression nets (test-parity, tarball-diff golden, headless-E2E install) and a one-minor deprecation-shim grace window. 10 plans + 1 follow-up across Waves A–E (31-5-01..31-5-10 + 31-5-9.5).
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **`sdk/` — the public SDK, collected.** `git mv` consolidated the strewn modules into one place: `sdk/cli`, `sdk/state`, `sdk/event-stream`, `sdk/errors`, `sdk/primitives/*` (the 4 typed `.cjs`+`.d.cts` pairs), and **both** MCP servers under `sdk/mcp/` (`sdk/mcp/gdd-state`, `sdk/mcp/gdd-mcp` — D-08). A `sdk/index.ts` barrel re-exports the surface, and `sdk/README.md` (≤120 lines, D-06) documents what the SDK is with a per-module import-path table (module → public import → helpers → stability tag). Public import paths are explicit per-module (`/sdk/cli`, `/sdk/state`, `/sdk/event-stream`, `/sdk/primitives/*`, `/sdk/errors`, `/sdk/mcp/gdd-state`, `/sdk/mcp/gdd-mcp`) plus the barrel (D-04).
|
|
16
|
+
- **3 SDK bins that now work from an npm install.** `bin/gdd-sdk`, `bin/gdd-state-mcp`, and `bin/gdd-mcp` are dual-mode trampolines (prefer a compiled `.js` sibling, fall back to `.ts` strip in-repo). A `prepack` step (`npm run build:sdk` → esbuild) bundles the three TS-entry bins to self-contained CommonJS siblings that ship in the tarball — fixing a **pre-existing latent break**: raw `.ts` bins cannot run under `--experimental-strip-types` from inside `node_modules` (`ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING`), which had silently shipped since the TS bins were introduced. The `.ts` remain the source of truth; the `.js` are gitignored build artifacts (`postpack` cleans them).
|
|
17
|
+
- **`recipes/` scaffold** — `recipes/` + a recipe-loader + `reference/schemas/recipe.schema.json`. Ships empty of recipes (the loading machinery, not content).
|
|
18
|
+
- **`docs/i18n/`** — the 6 `README.{de,fr,it,ja,ko,zh-CN}.md` translations relocated from the repo root (D-11). English `README.md` stays at root; its language-selector links were repointed.
|
|
19
|
+
- **`.npmignore`** — a defense-in-depth duplicate of the `package.json` `files` allowlist (D-10).
|
|
20
|
+
- **Private-files CI guard** — `test/suite/no-private-files-tracked.test.cjs` asserts 0 tracked `.planning/` / `REVIEW.md` / `tmp_support_preview*` files so the (already-remediated) leak stays closed (D-03).
|
|
21
|
+
- **`no-stale-internal-refs` static guard** — `test/suite/no-stale-internal-refs.test.cjs` greps the shipped user-facing surface (hooks/, agents/, skills/, bin/, scripts/cli/, scripts/install.cjs) for any reference to an OLD moved-SDK path and fails on any hit outside a deprecation shim. Proves every internal caller was repointed to `sdk/`.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- **`package.json` `files` narrowed to an explicit allowlist (+ `.npmignore`).** Maintainer-only top-level scripts no longer reach a user's `node_modules`. **Tarball diff vs the prior (v1.31.0) tarball:**
|
|
26
|
+
- **ADDED:** `sdk/` (the SDK, incl. the 3 compiled-bin `.js` siblings), `recipes/`, `docs/i18n/`, `NOTICE`.
|
|
27
|
+
- **DROPPED (23 maintainer-only files):** `scripts/` wholesale + the top-level `bootstrap*`, `rollback-release.sh`, `apply-branch-protection.sh`, `release-smoke-test.cjs`, `verify-version-sync.cjs`, `extract-changelog-section.cjs`, `detect-stale-refs.cjs`, `run-injection-scanner-ci.cjs`, `injection-patterns.cjs`, `build-*.cjs`, `validate-*` (`.cjs`/`.ts`), `codegen-schema-types.ts`, `aggregate-agent-metrics.ts`, `lint-agentskills-spec.cjs`, `scripts/e2e/`, `scripts/tests/`.
|
|
28
|
+
- **KEPT (runtime subtrees, D-09) — a "drop `scripts/` wholesale" allowlist would have shipped a *broken* package:** `scripts/lib/` (incl. `scripts/lib/graph/` for `gdd-graph` per D-14 and `scripts/lib/figma-extract/` for the figma-extract SKILL per D-15), `scripts/mcp-servers/` (the residual MCP deprecation shims), `scripts/cli/` (the `gdd-events` target), and `scripts/install.cjs`.
|
|
29
|
+
- Tarball golden manifest pinned at **620 paths** (paths-only per D-07).
|
|
30
|
+
- **`tests/` → `test/suite/` and `test-fixture/` → `test/fixtures/`** (D-12) — a pure mechanical, history-preserving relocation done with an identical full-suite pass before/after. Contributor-facing only; not shipped in the tarball. All subsequent tests are authored into `test/suite/`.
|
|
31
|
+
|
|
32
|
+
### Deprecated
|
|
33
|
+
|
|
34
|
+
- **`scripts/lib/{cli,gdd-state,event-stream,gdd-errors}/`, the 4 primitive `.cjs` (`error-classifier`, `iteration-budget`, `jittered-backoff`, `lockfile`), and `scripts/mcp-servers/{gdd-state,gdd-mcp}/server.ts` are now thin deprecation shims** that re-export from `sdk/*` and emit a one-time `DeprecationWarning`. They exist for undocumented EXTERNAL importers who reached into `node_modules/.../scripts/lib/...` directly. **Removed in v1.33.0** (D-02). Grace window: v1.31.5 ships with shims → v1.32.0 still has them → v1.33.0 removes them with a breaking-change note. **If you imported from `node_modules/@hegemonart/get-design-done/scripts/lib/...` directly, switch to `sdk/...`** (e.g. `scripts/lib/cli` → `sdk/cli`, `scripts/lib/error-classifier.cjs` → `sdk/primitives/error-classifier.cjs`, `scripts/mcp-servers/gdd-state/server.ts` → `sdk/mcp/gdd-state/server.ts`). Internal callers already use `sdk/`.
|
|
35
|
+
|
|
36
|
+
### Backward compatibility
|
|
37
|
+
|
|
38
|
+
- Public surface unchanged — no command, agent, skill, hook, or connection was renamed (zero-rename discipline). All install flows and all 6 bins resolve identically; MCP handshakes and primitive imports verified by the headless pack→install→run E2E.
|
|
39
|
+
- 6-manifest lockstep at v1.31.5 (`package.json` + `.claude-plugin/plugin.json` + `.claude-plugin/marketplace.json` (metadata.version + plugins[0].version) + `.cursor-plugin/plugin.json` + `.codex-plugin/plugin.json`).
|
|
40
|
+
|
|
41
|
+
### Decisions
|
|
42
|
+
|
|
43
|
+
- **D-01**: Target version is **v1.31.5** (the stale ROADMAP v1.28.0 was a pre-renumber artifact — the phase was renumbered 2026-05-16 to monotonic-with-phase-number).
|
|
44
|
+
- **D-02**: Deprecation-shim removal target is **v1.33.0** (the stale ROADMAP v1.29.0 is already shipped/past). One-minor grace window.
|
|
45
|
+
- **D-03**: The private-file leak was already remediated on main; Plan 01 ships only the CI guard.
|
|
46
|
+
- **D-08**: `gdd-mcp` (Phase 27.7) folded in for full symmetry with `gdd-state-mcp` — both MCP servers live under `sdk/mcp/`.
|
|
47
|
+
- **D-09**: The `files` allowlist keeps the runtime subtrees `scripts/lib` + `scripts/mcp-servers` + `scripts/cli` + `scripts/install.cjs` so `gdd-graph`, `figma-extract`, and `gdd-mcp` keep working.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## [1.31.0] - 2026-05-29
|
|
52
|
+
|
|
53
|
+
### Phase 31 — Figma Off-Context Extractor + Variables Sync Plugin
|
|
54
|
+
|
|
55
|
+
Ships `gdd-figma-extract` — pull a whole Figma design system into a compact, queryable local digest (`DESIGN.md` + `tokens.json` + `components.json`) **without the raw JSON ever entering Claude's context**. One command extracts the file via the Figma REST API to a local raw cache; a separate digest stage reduces it to an LLM-readable spec. Plus a thin **"GDD Sync"** Figma plugin that fills the Variables-API-Enterprise gap by reading `figma.variables` from inside Figma (works on any plan — including Free) and POSTing them to an ephemeral localhost receiver. 10 plans across 4 waves: Wave A (raw puller + digest + styles resolver + SKILL), Wave B (plugin scaffold + export + receiver), Wave C (`--component` slice + `figma_extract` health check), Wave D (closeout).
|
|
56
|
+
|
|
57
|
+
### Motivation — the spike trail
|
|
58
|
+
|
|
59
|
+
Spike 001 (commit `c3a9cf6`, `.planning/spikes/001-figma-offcontext-extractor/`) validated the economics: **898× compression** (223 MB raw → 254 KB digest), a 15.7K-token DESIGN.md (under the 20K target), 127 component sets + 40 singletons captured with variants/props/defaults, ~33s wall time, and crucially **0 Claude tokens + 0 Figma MCP calls during extraction**. This is the economic alternative to Figma MCP for whole-design-system workflows (Figma MCP remains correct for spot questions on individual components). The spike surfaced two gaps, both closed by this phase:
|
|
60
|
+
|
|
61
|
+
1. **Variables API → 403 (Enterprise-only)** — closed by **Path C** (the GDD Sync plugin reads variables locally and POSTs to the receiver).
|
|
62
|
+
2. **Legacy styles → 0 tokens** — closed by **Path B** (two-step `/styles` + `/nodes?ids=` lookup; published-style source nodes live in canvas frames, not the main document tree).
|
|
63
|
+
|
|
64
|
+
### Added
|
|
65
|
+
|
|
66
|
+
- **`gdd-figma-extract` off-context extractor** — the two-stage pipeline (D-01: extract → digest stay separated, re-digest without re-pulling):
|
|
67
|
+
- `scripts/lib/figma-extract/pull.cjs` — productionized Figma REST puller (retry/backoff, version-based cache invalidation with 1h TTL fallback per D-11, drops `geometry=paths` per D-03). Writes raw JSON to disk only; raw bodies never returned to a logging caller.
|
|
68
|
+
- `scripts/lib/figma-extract/digest.cjs` — reads the raw cache, walks the node tree with **variant rollup** (D-02 — naive walk inflates ~16×), assembles tokens via the 3-path chain, renders `DESIGN.md` + `tokens.json` + `components.json`.
|
|
69
|
+
- `scripts/lib/figma-extract/styles-resolver.cjs` — **Path B** two-step `/styles` + `/nodes?ids=` resolver (fixes the spike's 0-tokens bug).
|
|
70
|
+
- `scripts/lib/figma-extract/render-md.cjs` + `walk.cjs` — deterministic, byte-stable DESIGN.md renderer + the variant-rollup walker.
|
|
71
|
+
- **Three-path token extraction (D-04)** with a fallback chain — Path A (Variables API, Enterprise; 403 skipped silently), Path B (`/styles` + `/nodes`), Path C (plugin sync). Resolution priority on collision: Variables > plugin sync > styles, with a `--prefer-styles` escape hatch.
|
|
72
|
+
- **"GDD Sync" Figma plugin** (`figma-plugin/`, D-05) — TypeScript, single "Export to GDD" button. Reads ALL local variables (D-13 — digest filters later), resolves aliases + modes, and POSTs to the localhost receiver.
|
|
73
|
+
- **Localhost receiver** (`scripts/lib/figma-extract/receiver.cjs`, D-06) — ephemeral, **127.0.0.1-only**, port hardcoded to 5179, schema-validated, refuses non-loopback remotes, exits on first valid receipt or timeout.
|
|
74
|
+
- **`--component <name|glob>` digest slice** (D-08) — a ~500-token per-component slice instead of the full ~16K digest; strictly additive (omitting it reproduces the full digest unchanged).
|
|
75
|
+
- **`figma_extract` health check** (Plan 31-09) — `/gdd:health` now reports one of three exact states: `figma extract: ready (token set)`, `figma extract: token missing`, or `figma extract: plugin sync needed for variables (Free tier detected)`. Presence-only token check (D-10); the Free-tier signal is read from the local raw-pull cache only (no network call).
|
|
76
|
+
- **`skills/figma-extract/SKILL.md`** (`name: gdd-figma-extract`) — off-context orchestration that never instructs reading `raw/*.json` (D-12).
|
|
77
|
+
- **`tests/phase-31-baseline.test.cjs`** + 6 baseline files at `test-fixture/baselines/phase-31/` (design-md, components-json, tokens-json, health-line, manifest-network-scope, token-isolation-static), **`tests/phase-31-end-to-end.test.cjs`** (offline pull+digest against fixtures), and **`tests/figma-extract-token-isolation.test.cjs`** (the D-10 static scanner + meta-tests).
|
|
78
|
+
|
|
79
|
+
### Security & guarantees
|
|
80
|
+
|
|
81
|
+
- **Off-context guarantee (D-12) — statically enforced.** The SKILL never instructs reading `raw/*.json`; the digest is a pure function of the raw cache. The raw pull consumes 0 Claude tokens.
|
|
82
|
+
- **Token isolation (D-10) — statically enforced.** `FIGMA_TOKEN` (fallback `FIGMA_PERSONAL_ACCESS_TOKEN`) is read from the environment only and is sent ONLY as the `X-Figma-Token` request header — never logged, never written to disk. `tests/figma-extract-token-isolation.test.cjs` scans every file under `scripts/lib/figma-extract/` for any `writeFile`/`appendFile`/`console.*`/`logger.*`/`process.std*.write` call referencing the token and fails on a non-zero count (meta-tested to prove the scanner is not vacuous).
|
|
83
|
+
- **Receiver network scope (D-06).** The plugin manifest's `allowedDomains` is exactly the localhost pair (`http://localhost:5179`, `http://127.0.0.1:5179`) — any widening trips the baseline test. No external host, no wildcard.
|
|
84
|
+
|
|
85
|
+
### Deferred
|
|
86
|
+
|
|
87
|
+
- **Live Figma validation (D-07).** The phase ships with hermetic offline tests (stubbed fetch against committed fixtures); a one-time end-to-end run against a real Figma file with a live token is a maintainer follow-up, not a v1.31.0 blocker. Plugin Community-directory submission is likewise deferred (dev-install path ships now).
|
|
88
|
+
|
|
89
|
+
### Decisions (D-01 through D-13)
|
|
90
|
+
|
|
91
|
+
- **D-01**: Two-stage pipeline (extract → digest) stays separated. Re-run digest without re-pulling.
|
|
92
|
+
- **D-02**: Variant rollup default-on — skip COMPONENT children of a COMPONENT_SET; record variants as a field on the parent (naive walk inflates ~16×).
|
|
93
|
+
- **D-03**: Drop the `geometry=paths` query param (~30% smaller raw; geometry is discarded in the digest).
|
|
94
|
+
- **D-04**: Three-path token extraction with a fallback chain (Variables > plugin sync > styles; `--prefer-styles` escape).
|
|
95
|
+
- **D-05**: "GDD Sync" plugin as a separate `figma-plugin/` package (TypeScript, single button).
|
|
96
|
+
- **D-06**: Receiver is ephemeral + 127.0.0.1-only + hardcoded port 5179; refuses non-loopback; closes on receipt or timeout.
|
|
97
|
+
- **D-07**: Plugin distribution is dev-build now, Community submission as a follow-up; live-Figma validation is a maintainer follow-up — neither blocks v1.31.0.
|
|
98
|
+
- **D-08**: `--component <name|glob>` filter on digest for per-component slicing (~500 tokens vs ~16K).
|
|
99
|
+
- **D-09**: Raw cache gitignored (`.figma-extract-cache/`), reproducible from `pull.cjs`; `digest/` artifacts may be committed.
|
|
100
|
+
- **D-10**: Token never logged or persisted — `FIGMA_TOKEN` from env only; CI static-analysis test enforces it library-wide.
|
|
101
|
+
- **D-11**: Cache invalidation is content-based via Figma's `version` field, with a 1h wall-clock TTL fallback.
|
|
102
|
+
- **D-12**: Off-context guarantee enforced statically — the skill never instructs reading `raw/*.json`.
|
|
103
|
+
- **D-13**: Plugin emits ALL local variables (not just published-collection ones); filtering happens at the digest stage.
|
|
104
|
+
|
|
105
|
+
### Backward compatibility
|
|
106
|
+
|
|
107
|
+
- 4-manifest + 2 Tier-2 manifest lockstep at v1.31.0 (`package.json` + `.claude-plugin/plugin.json` + `.claude-plugin/marketplace.json` (metadata.version + plugins[0].version) + `.cursor-plugin/plugin.json` + `.codex-plugin/plugin.json`). Keywords `figma`, `extractor`, `design-system-sync` added across the manifest keyword arrays.
|
|
108
|
+
- `NOTICE` preserved verbatim — Phase 31 productionizes our own spike (`c3a9cf6`) and uses Figma's official REST + plugin APIs plus `@figma/plugin-typings` (a normal npm devDependency, not a vendored code transplant). No third-party CODE was vendored, so no new attribution is owed.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
7
112
|
## [1.30.6] - 2026-05-28
|
|
8
113
|
|
|
9
114
|
### Phase 30.6 — Graphify Self-Ownership
|
package/NOTICE
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
get-design-done
|
|
2
|
+
Copyright (c) 2026 hegemonart
|
|
3
|
+
|
|
4
|
+
This product includes software developed by third parties under the
|
|
5
|
+
Apache License, Version 2.0. See https://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
for the full license text.
|
|
7
|
+
|
|
8
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
9
|
+
Phase 27 — Peer-CLI Delegation Layer (v1.27.0, 2026-04-30)
|
|
10
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
11
|
+
|
|
12
|
+
The peer-CLI delegation layer ports protocol shapes and skill patterns from:
|
|
13
|
+
|
|
14
|
+
greenpolo/cc-multi-cli-plugin (https://github.com/greenpolo/cc-multi-cli-plugin)
|
|
15
|
+
License: Apache License, Version 2.0
|
|
16
|
+
Version reference: cc-multi-cli v2.0.0 (shipped 2026-04-24)
|
|
17
|
+
|
|
18
|
+
The following gdd files re-derive logic, contracts, or procedural patterns
|
|
19
|
+
from cc-multi-cli's source. We re-derive in our own runtime (CommonJS in
|
|
20
|
+
gdd's case; cc-multi-cli ships ESM); we do NOT vendor their runtime —
|
|
21
|
+
their hub assumes Claude-as-host while gdd needs any-runtime-as-host.
|
|
22
|
+
Attribution is provided here per Apache 2.0 §4.
|
|
23
|
+
|
|
24
|
+
scripts/lib/peer-cli/acp-client.cjs
|
|
25
|
+
└─ Adapts the line-delimited JSON-RPC + initialize/prompt/notification
|
|
26
|
+
framing from cc-multi-cli's `acp-client.mjs`.
|
|
27
|
+
|
|
28
|
+
scripts/lib/peer-cli/asp-client.cjs
|
|
29
|
+
└─ Adapts the App Server Protocol thread-start + thread-resume + turn
|
|
30
|
+
lifecycle from cc-multi-cli's `asp-client.mjs`. service_name and
|
|
31
|
+
experimentalRawEvents conventions match cc-multi-cli.
|
|
32
|
+
|
|
33
|
+
scripts/lib/peer-cli/spawn-cmd.cjs
|
|
34
|
+
└─ Implements the Windows `.cmd` EINVAL workaround documented in
|
|
35
|
+
cc-multi-cli's `transport-decisions.md`
|
|
36
|
+
(`spawn(`"<absolute-fwd-slash-path>" <args>`, [], {shell: true})`).
|
|
37
|
+
|
|
38
|
+
skills/peer-cli-customize/SKILL.md
|
|
39
|
+
└─ Procedural pattern adapted from cc-multi-cli's `customize` skill.
|
|
40
|
+
|
|
41
|
+
skills/peer-cli-add/SKILL.md
|
|
42
|
+
└─ Procedural pattern adapted from cc-multi-cli's `multi-cli-anything`
|
|
43
|
+
skill, including the verification ladder, model-ID `-preview`-suffix
|
|
44
|
+
trap, and Windows quirk handling.
|
|
45
|
+
|
|
46
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
47
|
+
Phase 28.5 — Skill Authoring Contract + Rework + Project Artifacts (v1.28.5, 2026-05-18)
|
|
48
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
49
|
+
|
|
50
|
+
The skill-authoring contract, project-artifact format files, the
|
|
51
|
+
debug-feedback-loops reference, and the new zoom-out micro-skill port
|
|
52
|
+
content from:
|
|
53
|
+
|
|
54
|
+
mattpocock/skills (https://github.com/mattpocock/skills)
|
|
55
|
+
License: MIT
|
|
56
|
+
Adapted with permission.
|
|
57
|
+
|
|
58
|
+
The following gdd files contain content adapted from mattpocock/skills:
|
|
59
|
+
|
|
60
|
+
reference/skill-authoring-contract.md
|
|
61
|
+
└─ Adapts the SKILL.md <=100-line cap, description-format contract
|
|
62
|
+
(lax-mode default per Phase 33 A/B pending), frontmatter required
|
|
63
|
+
fields, and progressive-disclosure-one-level-deep rules from
|
|
64
|
+
mattpocock's productivity/write-a-skill/SKILL.md.
|
|
65
|
+
|
|
66
|
+
reference/context-md-format.md
|
|
67
|
+
└─ Adapts mattpocock's productivity/grill-with-docs/CONTEXT-FORMAT.md
|
|
68
|
+
(DDD-style ubiquitous-language glossary schema, inline-write
|
|
69
|
+
trigger, multi-context CONTEXT-MAP.md pattern). GDD additions:
|
|
70
|
+
optional first-seen + aliases on term entries.
|
|
71
|
+
|
|
72
|
+
reference/adr-format.md
|
|
73
|
+
└─ Adapts mattpocock's productivity/grill-with-docs/ADR-FORMAT.md
|
|
74
|
+
(3-criteria offer gate: hard-to-reverse AND surprising-without-
|
|
75
|
+
context AND real-tradeoff; 4-state status lifecycle). GDD
|
|
76
|
+
additions: optional cycle-id + phase-id cross-refs back to
|
|
77
|
+
STATE.md.
|
|
78
|
+
|
|
79
|
+
reference/architecture-vocabulary.md
|
|
80
|
+
└─ Ports Ousterhout's *A Philosophy of Software Design* glossary via
|
|
81
|
+
mattpocock's improve-codebase-architecture/LANGUAGE.md (8 core
|
|
82
|
+
terms — Module / Interface / Implementation / Depth / Seam /
|
|
83
|
+
Adapter / Leverage / Locality — plus 3 principles: deletion test,
|
|
84
|
+
interface-is-test-surface, two-adapters-rule).
|
|
85
|
+
|
|
86
|
+
reference/debug-feedback-loops.md
|
|
87
|
+
└─ Adapts mattpocock's engineering/diagnose Phase 1 — feedback-loop
|
|
88
|
+
discipline, 10 construction paths in priority order (failing test
|
|
89
|
+
-> curl -> CLI fixture -> headless browser -> trace replay ->
|
|
90
|
+
throwaway harness -> fuzz -> bisect harness -> differential loop
|
|
91
|
+
-> HITL bash), iterate-on-loop sub-discipline, non-determinism
|
|
92
|
+
reproduction-rate branch.
|
|
93
|
+
|
|
94
|
+
skills/zoom-out/SKILL.md
|
|
95
|
+
└─ Direct port of mattpocock's engineering/zoom-out (~10 lines body,
|
|
96
|
+
disable-model-invocation: true, zoom-out-and-map-the-area
|
|
97
|
+
instruction). User-invoked-only shortcut.
|
|
98
|
+
|
|
99
|
+
skills/debug/SKILL.md (Phase 1 ordering)
|
|
100
|
+
└─ Adopts the feedback-loop-discipline-first ordering — build the
|
|
101
|
+
deterministic, fast, agent-runnable signal before hypothesizing.
|
|
102
|
+
(Skill body itself is GDD original; the Phase 1 ordering +
|
|
103
|
+
cross-link to reference/debug-feedback-loops.md is adapted.)
|
|
104
|
+
|
|
105
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
106
|
+
Phase 28.7 — Multi-Runtime Install Architecture (v1.28.7, 2026-05-19)
|
|
107
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
108
|
+
|
|
109
|
+
The multi-runtime install pipeline shipped in v1.28.7 — the runtime-homes /
|
|
110
|
+
runtime-artifact-layout / runtime-slash trio plus the per-runtime content
|
|
111
|
+
converters — is a re-implementation of the architecture from:
|
|
112
|
+
|
|
113
|
+
gsd-build/get-shit-done (https://github.com/gsd-build/get-shit-done)
|
|
114
|
+
License: MIT
|
|
115
|
+
|
|
116
|
+
The following gdd modules are an architectural port from gsd-build's MIT-
|
|
117
|
+
licensed install machinery. We re-implemented in GDD's existing module
|
|
118
|
+
conventions rather than byte-copying source, per Phase 28.7 D-02, to keep
|
|
119
|
+
the GDD codebase free of upstream version drift and the bundled
|
|
120
|
+
`bin/install.js` monolith:
|
|
121
|
+
|
|
122
|
+
scripts/lib/install/runtime-homes.cjs
|
|
123
|
+
└─ Per-runtime config-dir resolver (env-var + XDG + special-case nests).
|
|
124
|
+
Same shape as gsd-build's `bin/lib/runtime-homes.cjs`.
|
|
125
|
+
|
|
126
|
+
scripts/lib/install/runtime-artifact-layout.cjs
|
|
127
|
+
└─ Per-(runtime, scope) layout table mapping to kinds[]. Same shape as
|
|
128
|
+
gsd-build's `bin/lib/runtime-artifact-layout.cjs`. Adapted to GDD's
|
|
129
|
+
14-runtime set (gsd-build's Hermes is omitted per D-03 + D-10).
|
|
130
|
+
|
|
131
|
+
scripts/lib/install/runtime-slash.cjs
|
|
132
|
+
└─ Per-runtime slash-command surface emitter. Adapted from gsd-build's
|
|
133
|
+
`bin/lib/runtime-slash.cjs`. Codex uses `$gdd-<name>` shell-var form;
|
|
134
|
+
other runtimes use `/gdd-<name>`.
|
|
135
|
+
|
|
136
|
+
scripts/lib/install/converters/{antigravity,augment,cline,codebuddy,codex,
|
|
137
|
+
copilot,cursor,gemini,kilo,opencode,qwen,
|
|
138
|
+
shared,trae,windsurf}.cjs
|
|
139
|
+
└─ Per-runtime content converters. Each translates a Claude SKILL.md
|
|
140
|
+
source into the runtime's expected shape (path rewrite, tool-name
|
|
141
|
+
rewrite via Phase 21 cross-harness maps, frontmatter pass-through).
|
|
142
|
+
gsd-build implements these as `convertClaudeCommandTo<Runtime>Skill`
|
|
143
|
+
functions inside a bundled `bin/install.js`; we factor them into
|
|
144
|
+
per-runtime `.cjs` files for independent testability.
|
|
145
|
+
|
|
146
|
+
Per-file headers in the ported modules carry the same attribution. This
|
|
147
|
+
NOTICE block is the rollup citation.
|
|
148
|
+
|
|
149
|
+
The upstream gsd-build project remains the authoritative reference for the
|
|
150
|
+
install-pipeline architecture; bug reports specific to the architecture's
|
|
151
|
+
shape should also be filed there.
|
|
152
|
+
|
|
153
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
154
|
+
Phase 30 — Privacy Layer (v1.30.0, 2026-05-20)
|
|
155
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
156
|
+
|
|
157
|
+
scripts/lib/pseudonymize.cjs and scripts/lib/issue-reporter/payload-assembly.cjs
|
|
158
|
+
were authored from scratch for Phase 30 (consent-first issue reporter). No
|
|
159
|
+
third-party privacy or anonymization patterns were adapted into either file
|
|
160
|
+
— verified by inspection of the file contents (no "adapted from" / "from
|
|
161
|
+
<library>" / source-citation comments) and by git log on both files (commits
|
|
162
|
+
ed478fe, e5fc79a, e86c648 — all original to this repo).
|
|
163
|
+
|
|
164
|
+
The regex rules in pseudonymize.cjs target generic identity-correlatable
|
|
165
|
+
fields (usernames, hostnames, filesystem paths, repo origin URLs, env-var
|
|
166
|
+
values, email patterns, IP addresses). The patterns were derived from the
|
|
167
|
+
canonical shapes of these surfaces as they appear in plugin runtime output;
|
|
168
|
+
they were NOT sourced from any upstream anonymization or pseudonymization
|
|
169
|
+
library.
|
|
170
|
+
|
|
171
|
+
The Phase 30 — Inbound Feedback Channel design itself (consent-first issue
|
|
172
|
+
reporter, hardcoded destination, no plugin-side credentials, gh-CLI-only
|
|
173
|
+
outbound) is original to get-design-done. The architectural rationale lives
|
|
174
|
+
in .planning/phases/30-issue-reporter/CONTEXT.md.
|
|
175
|
+
|
|
176
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
177
|
+
Phase 30.6 — Graphify Self-Ownership (v1.30.6, 2026-05-28)
|
|
178
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
179
|
+
|
|
180
|
+
Version 1.30.6 removes the last runtime touchpoint between get-design-done
|
|
181
|
+
and the user's `~/.claude/get-shit-done/` install. Eight callsites
|
|
182
|
+
previously dispatched `node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs"
|
|
183
|
+
graphify *` at runtime; they now dispatch a native `bin/gdd-graph` CLI
|
|
184
|
+
owned end-to-end in this repository.
|
|
185
|
+
|
|
186
|
+
No historical MIT/Apache attributions in this NOTICE are removed or
|
|
187
|
+
modified by this change. The Phase 27 / Phase 28.5 / Phase 28.7
|
|
188
|
+
attribution subsections above are preserved verbatim per Phase 30.6 D-06.
|
|
189
|
+
Those describe historical architectural ports:
|
|
190
|
+
|
|
191
|
+
- Phase 27 — peer-CLI delegation protocol shapes adapted from
|
|
192
|
+
cc-multi-cli-plugin (Apache 2.0).
|
|
193
|
+
- Phase 28.5 — skill-authoring contract + project-artifact formats +
|
|
194
|
+
debug feedback-loop reference + zoom-out micro-skill, ported from
|
|
195
|
+
mattpocock/skills (MIT).
|
|
196
|
+
- Phase 28.7 — multi-runtime install pipeline architecture, ported
|
|
197
|
+
from gsd-build/get-shit-done (MIT).
|
|
198
|
+
|
|
199
|
+
Phase 30.6 removes a runtime touchpoint, NOT a historical port. The
|
|
200
|
+
architectural ports listed above remain in our tree under their original
|
|
201
|
+
MIT/Apache terms.
|
|
202
|
+
|
|
203
|
+
For context: the upstream `gsd-build/get-shit-done` project has since been
|
|
204
|
+
archived (TÂCHES rug-pull, May 2026). The community continuation lives at
|
|
205
|
+
`open-gsd/get-shit-done-redux` and is bit-perfect with the pre-rug tree.
|
|
206
|
+
The Phase 28.7 attribution above remains pointed at the original upstream
|
|
207
|
+
URL because that is the source of the architectural port; the redux fork
|
|
208
|
+
is referenced in `README.md` for users seeking a current download.
|
|
209
|
+
|
|
210
|
+
See `.planning/phases/30.6-graphify-self-ownership/` for full phase
|
|
211
|
+
documentation including the 10 architectural decisions (D-01 through D-10)
|
|
212
|
+
and the migration of the 8 dispatching callsites to native `bin/gdd-graph`.
|
|
213
|
+
|
|
214
|
+
────────────────────────────────────────────────────────────────────────
|
|
215
|
+
|
|
216
|
+
Note on the broader codebase: get-design-done as a whole is licensed under
|
|
217
|
+
the MIT License (see LICENSE). The Apache 2.0 attribution above applies
|
|
218
|
+
specifically to the cc-multi-cli-derived files listed under the Phase 27
|
|
219
|
+
block. The MIT attributions under Phase 28.5 and Phase 28.7 cover content
|
|
220
|
+
adapted from mattpocock/skills (MIT) and gsd-build/get-shit-done (MIT)
|
|
221
|
+
respectively — the MIT-to-MIT re-licensing is straightforward and the
|
|
222
|
+
attributions above provide the required source citation. The MIT and
|
|
223
|
+
Apache 2.0 licenses are compatible — see
|
|
224
|
+
https://www.apache.org/legal/resolved.html#category-a.
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# GET DESIGN DONE
|
|
4
4
|
|
|
5
|
-
**English** · [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Français](README.fr.md) · [Italiano](README.it.md) · [Deutsch](README.de.md)
|
|
5
|
+
**English** · [简体中文](docs/i18n/README.zh-CN.md) · [日本語](docs/i18n/README.ja.md) · [한국어](docs/i18n/README.ko.md) · [Français](docs/i18n/README.fr.md) · [Italiano](docs/i18n/README.it.md) · [Deutsch](docs/i18n/README.de.md)
|
|
6
6
|
|
|
7
7
|
**A design-quality pipeline for AI coding agents: brief → explore → plan → implement → verify.**
|
|
8
8
|
|
|
@@ -256,6 +256,27 @@ When K=3 stable clusters surface across M=10 reflection cycles (defaults in `ref
|
|
|
256
256
|
**Discipline preserved.** Reflector authors nothing that auto-ships. `/gdd:apply-reflections` remains the single human gate (Phase 11 SC-8). Stage 1 never auto-flips — user opts in.
|
|
257
257
|
|
|
258
258
|
|
|
259
|
+
### Figma off-context extraction (v1.31.0+)
|
|
260
|
+
|
|
261
|
+
Pull an entire Figma design system into a compact, LLM-readable local digest — **without the raw JSON ever entering Claude's context**. One command extracts the file via the Figma REST API into a local raw cache; a separate digest stage reduces it to `DESIGN.md` + `tokens.json` + `components.json`.
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
# Stage 1 — raw pull (0 Claude tokens; writes a gitignored cache)
|
|
265
|
+
node scripts/lib/figma-extract/pull.cjs <figma-file-url-or-key>
|
|
266
|
+
# Stage 2 — digest (reads the cache, writes the compact spec)
|
|
267
|
+
node scripts/lib/figma-extract/digest.cjs --raw <cache>/raw/<key> --out .design/figma
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**The economics.** A spike measured **898× compression** (223 MB raw → 254 KB digest) with a ~15.7K-token `DESIGN.md`, capturing 127 component sets + 40 singletons (variants, props, defaults) in ~33s — at **0 Claude tokens and 0 Figma MCP calls during extraction**. This is the cost-sane alternative to the Figma MCP for whole-design-system work, which can run tens of minutes and 50–500K+ tokens for the same data. (The Figma MCP remains the right tool for spot questions on a single component.)
|
|
271
|
+
|
|
272
|
+
- **Token-safe by construction.** `FIGMA_TOKEN` is read from the environment only and sent solely as a request header — never logged, never written to disk (a CI static-analysis test enforces this across the whole extract library). The digest never reads raw JSON into context.
|
|
273
|
+
- **Works on any Figma plan.** The optional **"GDD Sync"** Figma plugin (`figma-plugin/`) fills the Variables-API-Enterprise gap: it reads `figma.variables` from inside Figma and POSTs them to an ephemeral, 127.0.0.1-only receiver — so Free-tier users get full token coverage too.
|
|
274
|
+
- **Per-component slices.** `digest --component <name|glob>` renders a ~500-token slice of just the components you ask for, instead of the full digest.
|
|
275
|
+
- **Health-aware.** `/gdd:health` reports a `figma_extract` readiness line (token set / token missing / Free-tier plugin-sync needed).
|
|
276
|
+
|
|
277
|
+
See [`skills/figma-extract/SKILL.md`](skills/figma-extract/SKILL.md) and [`figma-plugin/README.md`](figma-plugin/README.md) for the full flow.
|
|
278
|
+
|
|
279
|
+
|
|
259
280
|
## How It Works
|
|
260
281
|
|
|
261
282
|
> **New to an existing codebase?** Run `/gdd:map` first. It dispatches 5 specialist mappers in parallel (tokens, components, visual hierarchy, a11y, motion) and writes structured JSON to `.design/map/` — much higher signal than the grep-based fallback in Explore.
|
package/SKILL.md
CHANGED
|
@@ -35,6 +35,7 @@ Each stage produces artifacts in `.design/` inside the current project.
|
|
|
35
35
|
| `darkmode` | `get-design-done:gdd-darkmode` | Audit dark mode architecture + contrast + anti-patterns → .design/DARKMODE-AUDIT.md |
|
|
36
36
|
| `compare` | `get-design-done:gdd-compare` | Delta between DESIGN.md baseline and DESIGN-VERIFICATION.md → .design/COMPARE-REPORT.md |
|
|
37
37
|
| `figma-write <mode>` | `get-design-done:gdd-figma-write` | Write design decisions to Figma (annotate/tokenize/mappings) |
|
|
38
|
+
| `figma-extract <file-url-or-key>` | `get-design-done:gdd-figma-extract` | Off-context Figma design-system extraction → compact local digest (DESIGN.md + tokens.json + components.json), zero raw JSON in context |
|
|
38
39
|
| `graphify <subcommand>` | `get-design-done:gdd-graphify` | Manage Graphify knowledge graph (build/query/status/diff) |
|
|
39
40
|
| `discuss [topic] [--all] [--spec] [--cycle <name>]` | `get-design-done:gdd-discuss` | Adaptive design interview — spawns design-discussant; appends D-XX decisions to STATE.md |
|
|
40
41
|
| `list-assumptions [--area]` | `get-design-done:gdd-list-assumptions` | Surface implicit design assumptions baked into the codebase |
|
|
@@ -194,7 +194,7 @@ After classifying the new entries (Step 5) but BEFORE writing the snapshot (Step
|
|
|
194
194
|
- `/known issues/i`
|
|
195
195
|
- `/pitfalls/i`
|
|
196
196
|
|
|
197
|
-
For each entry whose `title` matches ANY pattern, emit a single `kfm-candidate` event to the events stream (`.design/telemetry/events.jsonl`) via `
|
|
197
|
+
For each entry whose `title` matches ANY pattern, emit a single `kfm-candidate` event to the events stream (`.design/telemetry/events.jsonl`) via `sdk/event-stream/writer.ts` (or the Bash equivalent — `printf '%s\n' "<json>" >> .design/telemetry/events.jsonl`).
|
|
198
198
|
|
|
199
199
|
Event payload shape — validates against `reference/schemas/events.schema.json` definitions `KfmCandidatePayload` (allOf[1] branch). Required 7 fields:
|
|
200
200
|
|
package/agents/perf-analyzer.md
CHANGED
|
@@ -80,7 +80,7 @@ For each regression, emit a `perf.regression_detected` event via `appendEvent` f
|
|
|
80
80
|
|
|
81
81
|
```javascript
|
|
82
82
|
// Pseudo-instruction for the executor — the agent runs Bash with this shape
|
|
83
|
-
const { appendEvent } = require('./
|
|
83
|
+
const { appendEvent } = require('./sdk/event-stream');
|
|
84
84
|
appendEvent({
|
|
85
85
|
type: 'perf.regression_detected',
|
|
86
86
|
timestamp: new Date().toISOString(),
|
|
@@ -89,7 +89,7 @@ appendEvent({
|
|
|
89
89
|
});
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
The `perf.regression_detected` event type is additive to the Phase 22 registry — the writer accepts unknown types (per `
|
|
92
|
+
The `perf.regression_detected` event type is additive to the Phase 22 registry — the writer accepts unknown types (per `sdk/event-stream/types.ts` envelope invariant: "unknown types are allowed; validation is structural, not a closed enum").
|
|
93
93
|
|
|
94
94
|
If `detectCostRegressions` returns `summary.regressions_count === 0`, write a single line: `No token-cost regressions detected (threshold 25%, >=3 cycles).` and skip event emission for this section.
|
|
95
95
|
|
package/bin/gdd-mcp
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// bin/gdd-mcp — Plan 31-5-05 (SDK-04, D-08); dual-mode since Plan 31-5-9.5 (D-16).
|
|
3
|
+
//
|
|
4
|
+
// DUAL-MODE CJS trampoline for the `gdd-mcp` MCP server. Resolves the server
|
|
5
|
+
// entry and re-launches it under `node`, forwarding argv + exit code/signal.
|
|
6
|
+
// Two modes:
|
|
7
|
+
//
|
|
8
|
+
// • COMPILED (installed / packed): if the esbuild-bundled sibling
|
|
9
|
+
// `sdk/mcp/gdd-mcp/server.js` exists, spawn `node <js>` with NO flag.
|
|
10
|
+
// This is the path a user gets from `npm i` — the entry lives under
|
|
11
|
+
// node_modules where Node refuses --experimental-strip-types on `.ts`
|
|
12
|
+
// (ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING). `prepack` compiles the .js
|
|
13
|
+
// before every pack/publish (see scripts/build-sdk-bins.cjs).
|
|
14
|
+
// • SOURCE (in-repo dev): otherwise spawn
|
|
15
|
+
// `node --experimental-strip-types sdk/mcp/gdd-mcp/server.ts` — raw TS, no
|
|
16
|
+
// build step, exactly as before this plan.
|
|
17
|
+
//
|
|
18
|
+
// Why a trampoline at all:
|
|
19
|
+
// POSIX shebangs can use `#!/usr/bin/env -S node --experimental-strip-types`,
|
|
20
|
+
// but Windows cmd.exe does not honor shebangs and npm's auto-generated .cmd
|
|
21
|
+
// shim invokes plain `node bin/gdd-mcp` with no way to inject the flag.
|
|
22
|
+
// Mirrors the proven bin/gdd-sdk trampoline pattern.
|
|
23
|
+
|
|
24
|
+
'use strict';
|
|
25
|
+
|
|
26
|
+
const { spawn } = require('node:child_process');
|
|
27
|
+
const fs = require('node:fs');
|
|
28
|
+
const path = require('node:path');
|
|
29
|
+
|
|
30
|
+
// Sibling compiled JS (preferred) and the TS source (dev fallback).
|
|
31
|
+
const compiled = path.resolve(
|
|
32
|
+
__dirname,
|
|
33
|
+
'..',
|
|
34
|
+
'sdk',
|
|
35
|
+
'mcp',
|
|
36
|
+
'gdd-mcp',
|
|
37
|
+
'server.js',
|
|
38
|
+
);
|
|
39
|
+
const source = path.resolve(
|
|
40
|
+
__dirname,
|
|
41
|
+
'..',
|
|
42
|
+
'sdk',
|
|
43
|
+
'mcp',
|
|
44
|
+
'gdd-mcp',
|
|
45
|
+
'server.ts',
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
const useCompiled = fs.existsSync(compiled);
|
|
49
|
+
const entry = useCompiled ? compiled : source;
|
|
50
|
+
const nodeArgs = useCompiled
|
|
51
|
+
? [entry, ...process.argv.slice(2)]
|
|
52
|
+
: ['--experimental-strip-types', entry, ...process.argv.slice(2)];
|
|
53
|
+
|
|
54
|
+
const child = spawn(process.execPath, nodeArgs, {
|
|
55
|
+
stdio: 'inherit',
|
|
56
|
+
shell: false,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
child.on('exit', (code, signal) => {
|
|
60
|
+
if (signal) {
|
|
61
|
+
// Re-raise the signal to ourselves so the parent shell sees the same
|
|
62
|
+
// termination mode (e.g., Ctrl+C propagates as SIGINT exit).
|
|
63
|
+
try {
|
|
64
|
+
process.kill(process.pid, signal);
|
|
65
|
+
} catch {
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
process.exit(typeof code === 'number' ? code : 0);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
child.on('error', (err) => {
|
|
74
|
+
// Failure to spawn node itself — extremely rare; surface to stderr.
|
|
75
|
+
// eslint-disable-next-line no-console
|
|
76
|
+
console.error('gdd-mcp: failed to launch MCP server entry:', err.message);
|
|
77
|
+
process.exit(3);
|
|
78
|
+
});
|