@hegemonart/get-design-done 1.31.0 → 1.32.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 +75 -0
- package/NOTICE +262 -0
- package/README.md +13 -1
- package/SKILL.md +4 -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/hooks/hooks.json +9 -0
- package/hooks/inject-using-gdd.sh +72 -0
- package/hooks/run-hook.cmd +35 -0
- package/package.json +20 -9
- package/recipes/.gitkeep +0 -0
- package/reference/schemas/events.schema.json +63 -1
- 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/gdd-errors/index.ts +24 -213
- package/scripts/lib/gdd-state/index.ts +23 -161
- package/scripts/lib/health-mirror/index.cjs +79 -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 +1966 -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/audit/SKILL.md +13 -0
- package/skills/brief/SKILL.md +25 -0
- package/skills/design/SKILL.md +17 -0
- package/skills/discuss/SKILL.md +13 -0
- package/skills/explore/SKILL.md +17 -0
- package/skills/health/SKILL.md +6 -0
- package/skills/plan/SKILL.md +25 -0
- package/skills/quality-gate/SKILL.md +2 -2
- package/skills/router/SKILL.md +4 -0
- package/skills/router/router-pick-emitter.md +78 -0
- package/skills/using-gdd/SKILL.md +78 -0
- package/skills/verify/SKILL.md +17 -0
- 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.32.0"
|
|
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.32.0",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "hegemonart"
|
|
18
18
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "get-design-done",
|
|
3
3
|
"short_name": "gdd",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.32.0",
|
|
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",
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,81 @@ All notable changes to get-design-done are documented here. Versions follow [sem
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [1.32.0] - 2026-05-30
|
|
8
|
+
|
|
9
|
+
### Phase 32 — Skill Auto-Trigger Discipline + Defensive Guardrails
|
|
10
|
+
|
|
11
|
+
Closes the auto-trigger gap between GDD's 70+ skills and the harness's description-match skill-discovery layer. GDD had zero forcing functions — agents consulted skills opportunistically, not disciplinedly. This release ports the skill-discipline **mechanism** (not content) from [`obra/superpowers`](https://github.com/obra/superpowers) (MIT): a SessionStart-injected bootstrap contract, defensive guardrails at every stage transition, and two lightweight skill-discovery instruments that feed Phase 33's behavioral A/B. 9 plans across Waves A–C.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **`using-gdd` SessionStart bootstrap (the forcing function GDD lacked).** A new `skills/using-gdd/SKILL.md` discipline contract — the **1%-rule** ("if you think there is even a 1% chance a skill applies, you ABSOLUTELY MUST invoke it"), a ≥10-row **red-flags table** (Thought → Reality), a skill-priority order (Process → Implementation → Audit), an instruction-priority precedence (user CLAUDE.md > GDD skill > defaults), and the GDD pipeline flow. Carries `disable-model-invocation: true` (it is injected, not model-invoked) and a pure-trigger description (no `<what>` clause, per superpowers' shortcut finding — proof-by-implementation; Phase 28.5's description-format validator stays open pending Phase 33's A/B evidence).
|
|
16
|
+
- **Per-harness SessionStart inject emitter.** `hooks/inject-using-gdd.sh` is a single polyglot script that reads `using-gdd` and emits it as the host harness's SessionStart `additionalContext` shape — Cursor (`additional_context`), Claude Code (`hookSpecificOutput.additionalContext`), and SDK-standard (top-level `additionalContext`) branches via env-var detection, with a pure-bash JSON escaper (no jq/python dependency). A `hooks/run-hook.cmd` polyglot Windows wrapper and a 5th `hooks/hooks.json` SessionStart entry (matcher `startup|clear|compact`) wire it in.
|
|
17
|
+
- **`<SUBAGENT-STOP>` no-cascade structural guarantee.** The inject is wired ONLY under the SessionStart hook event; subagent spawns do not fire SessionStart, so the bootstrap contract cannot cascade into a subagent's context. The `using-gdd` body opens with a `<SUBAGENT-STOP>` tag. (Structural guarantee here; the behavioral proof under pressure is deferred to Phase 33.)
|
|
18
|
+
- **`<HARD-GATE>` at the 5 stage transitions.** `skills/{brief,explore,plan,design,verify}/SKILL.md` each gain a `<HARD-GATE>` block that refuses to advance the pipeline until the stage's required artifact (`.design/BRIEF.md`, `DESIGN.md` + `DESIGN-CONTEXT.md`, etc.) exists and is approved — reading the artifact path from `.design/STATE.md` when a project uses a custom location.
|
|
19
|
+
- **Rationalization tables in the 7 stage-orchestrator skills.** `brief / explore / plan / design / verify / discuss / audit` each carry a `| Thought | Reality |` rationalization table (≥6 rows) that names the common "skip the stage" justifications and rebuts each.
|
|
20
|
+
- **Inline self-review blocks** in `brief` and `plan` (the 2 spec-producing transitions) — a 4-line inline checklist (Phase 28.5 progressive-disclosure: a short check belongs at the transition surface, not behind a skill-discovery hop).
|
|
21
|
+
- **Portable discipline blocks** in `AGENTS.md` + `GEMINI.md` so non-Claude-Code harnesses (Codex, Gemini, etc.) inherit the same skill-discipline contract.
|
|
22
|
+
- **`router_pick` skill-discovery telemetry** — a new `router_pick` event in `reference/schemas/events.schema.json` plus an emit point (`skills/router/router-pick-emitter.md`). Records a sha256 `context_hash` (never the raw intent — no PII) so Phase 33 can measure which skill the router actually selected.
|
|
23
|
+
- **`lint-skill-descriptions.cjs` drift detector** — a maintainer/CI script (not shipped to npm) that flags any skill whose one-line `description:` is stale while its body changed ≥3 times since (the D-02 heuristic).
|
|
24
|
+
- **`gdd-health` `skill_discipline` check (#7).** `scripts/lib/health-mirror/index.cjs` gains a 7th read-only check reporting `skill-discipline: ready` (using-gdd present AND `hooks.json` SessionStart wires the inject), `skill-discipline: missing using-gdd`, or `skill-discipline: hook not wired`. Documented in `skills/health/SKILL.md`.
|
|
25
|
+
|
|
26
|
+
### Attribution
|
|
27
|
+
|
|
28
|
+
- **Mechanism ported from [`obra/superpowers`](https://github.com/obra/superpowers) (MIT).** Three artifacts: the SessionStart hook-script structure, the 1%-rule + red-flags-table format, and the defensive-guardrail patterns (`<HARD-GATE>` / `<SUBAGENT-STOP>` / rationalization-table). See `NOTICE`. We port the MECHANISM, not the content — GDD's skills, gates, and tables are GDD-specific.
|
|
29
|
+
|
|
30
|
+
### Notes
|
|
31
|
+
|
|
32
|
+
- The pure-trigger `using-gdd` description ships as **proof-by-implementation** of superpowers' shortcut finding (a `<what>`-clause can make agents follow the description summary instead of reading the body). The counterfactual A/B description test and the pressure-scenario behavior runner are **deferred to Phase 33** (D-02); Phase 32 ships the `router_pick` events + drift-lint instruments that Phase 33 consumes. Phase 28.5's global description-format validator regex stays open until that evidence lands.
|
|
33
|
+
- 4 stage skills (`brief`, `explore`, `plan`, `verify`) sit in the validator's advisory **warn** band (≥100 lines) after gaining the mandatory discipline blocks — well under the **block** threshold (250). Accepted by design: the gates + tables are the deliverable.
|
|
34
|
+
- 6-manifest lockstep at **v1.32.0** (`package.json` + `.claude-plugin/plugin.json` + `.claude-plugin/marketplace.json` (metadata.version + plugins[0].version) + `.cursor-plugin/plugin.json` + `.codex-plugin/plugin.json`).
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## [1.31.5] - 2026-05-29
|
|
39
|
+
|
|
40
|
+
### Phase 31.5 — Repo Structure Consolidation
|
|
41
|
+
|
|
42
|
+
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).
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- **`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).
|
|
47
|
+
- **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).
|
|
48
|
+
- **`recipes/` scaffold** — `recipes/` + a recipe-loader + `reference/schemas/recipe.schema.json`. Ships empty of recipes (the loading machinery, not content).
|
|
49
|
+
- **`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.
|
|
50
|
+
- **`.npmignore`** — a defense-in-depth duplicate of the `package.json` `files` allowlist (D-10).
|
|
51
|
+
- **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).
|
|
52
|
+
- **`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/`.
|
|
53
|
+
|
|
54
|
+
### Changed
|
|
55
|
+
|
|
56
|
+
- **`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:**
|
|
57
|
+
- **ADDED:** `sdk/` (the SDK, incl. the 3 compiled-bin `.js` siblings), `recipes/`, `docs/i18n/`, `NOTICE`.
|
|
58
|
+
- **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/`.
|
|
59
|
+
- **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`.
|
|
60
|
+
- Tarball golden manifest pinned at **620 paths** (paths-only per D-07).
|
|
61
|
+
- **`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/`.
|
|
62
|
+
|
|
63
|
+
### Deprecated
|
|
64
|
+
|
|
65
|
+
- **`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/`.
|
|
66
|
+
|
|
67
|
+
### Backward compatibility
|
|
68
|
+
|
|
69
|
+
- 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.
|
|
70
|
+
- 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`).
|
|
71
|
+
|
|
72
|
+
### Decisions
|
|
73
|
+
|
|
74
|
+
- **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).
|
|
75
|
+
- **D-02**: Deprecation-shim removal target is **v1.33.0** (the stale ROADMAP v1.29.0 is already shipped/past). One-minor grace window.
|
|
76
|
+
- **D-03**: The private-file leak was already remediated on main; Plan 01 ships only the CI guard.
|
|
77
|
+
- **D-08**: `gdd-mcp` (Phase 27.7) folded in for full symmetry with `gdd-state-mcp` — both MCP servers live under `sdk/mcp/`.
|
|
78
|
+
- **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.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
7
82
|
## [1.31.0] - 2026-05-29
|
|
8
83
|
|
|
9
84
|
### Phase 31 — Figma Off-Context Extractor + Variables Sync Plugin
|
package/NOTICE
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
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
|
+
Phase 32 — Skill Auto-Trigger Discipline + Defensive Guardrails (v1.32.0, 2026-05-30)
|
|
216
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
217
|
+
|
|
218
|
+
The skill-discipline layer shipped in v1.32.0 ports the MECHANISM (not the
|
|
219
|
+
content) from:
|
|
220
|
+
|
|
221
|
+
obra/superpowers (https://github.com/obra/superpowers)
|
|
222
|
+
License: MIT
|
|
223
|
+
|
|
224
|
+
GDD had 70+ skills and zero forcing functions; superpowers ships exactly one
|
|
225
|
+
(`using-superpowers` SessionStart inject) plus the `<HARD-GATE>` /
|
|
226
|
+
`<SUBAGENT-STOP>` / rationalization-table guardrail patterns, and reliably
|
|
227
|
+
auto-triggers its skills. We re-derive the mechanism in GDD's own runtime and
|
|
228
|
+
skill set; the skill bodies, gates, tables, and pipeline flow are GDD-specific.
|
|
229
|
+
Three ported artifacts:
|
|
230
|
+
|
|
231
|
+
hooks/inject-using-gdd.sh
|
|
232
|
+
└─ SessionStart hook-script structure adapted from superpowers'
|
|
233
|
+
`using-superpowers` inject: one polyglot script, env-var branch per
|
|
234
|
+
harness, pure-bash escape_for_json (no jq/python dependency).
|
|
235
|
+
|
|
236
|
+
skills/using-gdd/SKILL.md
|
|
237
|
+
└─ The 1%-rule ("even a 1% chance a skill applies → invoke it") + the
|
|
238
|
+
red-flags `| Thought | Reality |` table format adapted from
|
|
239
|
+
superpowers' using-superpowers discipline contract. GDD content:
|
|
240
|
+
GDD pipeline stages, skill-priority order, instruction-priority.
|
|
241
|
+
|
|
242
|
+
skills/{brief,explore,plan,design,verify,discuss,audit}/SKILL.md
|
|
243
|
+
└─ The defensive-guardrail patterns — `<HARD-GATE>` (refuse to advance a
|
|
244
|
+
stage without its artifact), `<SUBAGENT-STOP>` (no-cascade into
|
|
245
|
+
subagents), and the rationalization-table pattern — adapted from
|
|
246
|
+
superpowers. The specific gates, artifact paths, and table rows are
|
|
247
|
+
GDD-specific.
|
|
248
|
+
|
|
249
|
+
The mechanism is the contribution being attributed; the discipline content is
|
|
250
|
+
original to get-design-done.
|
|
251
|
+
|
|
252
|
+
────────────────────────────────────────────────────────────────────────
|
|
253
|
+
|
|
254
|
+
Note on the broader codebase: get-design-done as a whole is licensed under
|
|
255
|
+
the MIT License (see LICENSE). The Apache 2.0 attribution above applies
|
|
256
|
+
specifically to the cc-multi-cli-derived files listed under the Phase 27
|
|
257
|
+
block. The MIT attributions under Phase 28.5, Phase 28.7, and Phase 32 cover
|
|
258
|
+
content/mechanism adapted from mattpocock/skills (MIT), gsd-build/get-shit-done
|
|
259
|
+
(MIT), and obra/superpowers (MIT) respectively — the MIT-to-MIT re-licensing is
|
|
260
|
+
straightforward and the attributions above provide the required source
|
|
261
|
+
citation. The MIT and Apache 2.0 licenses are compatible — see
|
|
262
|
+
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
|
|
|
@@ -276,6 +276,18 @@ node scripts/lib/figma-extract/digest.cjs --raw <cache>/raw/<key> --out .design/
|
|
|
276
276
|
|
|
277
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
278
|
|
|
279
|
+
### Skill discipline bootstrap (v1.32.0+)
|
|
280
|
+
|
|
281
|
+
GDD ships 70+ skills, but a description-match skill router consults them opportunistically — easy to skip a stage under pressure. v1.32.0 adds the forcing function GDD lacked, porting the skill-discipline **mechanism** (not content) from [`obra/superpowers`](https://github.com/obra/superpowers) (MIT):
|
|
282
|
+
|
|
283
|
+
- **SessionStart inject.** A `using-gdd` bootstrap contract is injected at every session start / `/clear` / compact (`hooks/inject-using-gdd.sh`, per-harness: Cursor / Claude Code / SDK). It carries the **1%-rule** ("even a 1% chance a skill applies → invoke it"), a red-flags `Thought → Reality` table, and the skill-priority + instruction-priority order — so the agent is primed to find the right skill before it acts.
|
|
284
|
+
- **`<HARD-GATE>` at every stage transition.** Brief / Explore / Plan / Design / Verify each refuse to advance until the stage's artifact exists and is approved — no free-handing a stage.
|
|
285
|
+
- **Rationalization tables** in all 7 stage skills name the common "skip it" justifications and rebut each; **inline self-review** blocks gate the brief and plan specs.
|
|
286
|
+
- **`<SUBAGENT-STOP>` no-cascade.** The inject fires only on SessionStart, so the bootstrap never cascades into spawned subagents.
|
|
287
|
+
- **Portable + health-aware.** `AGENTS.md` + `GEMINI.md` carry the same discipline block for non-Claude-Code harnesses, and `/gdd:health` reports a `skill-discipline` readiness line.
|
|
288
|
+
|
|
289
|
+
See [`skills/using-gdd/SKILL.md`](skills/using-gdd/SKILL.md) and the `NOTICE` attribution for details.
|
|
290
|
+
|
|
279
291
|
|
|
280
292
|
## How It Works
|
|
281
293
|
|
package/SKILL.md
CHANGED
|
@@ -243,6 +243,10 @@ If `$ARGUMENTS` is a stage or command name — invoke it directly, no state chec
|
|
|
243
243
|
/gdd:sketch-wrap-up → Skill("get-design-done:gdd-sketch-wrap-up")
|
|
244
244
|
/gdd:spike → Skill("get-design-done:gdd-spike")
|
|
245
245
|
/gdd:spike-wrap-up → Skill("get-design-done:gdd-spike-wrap-up")
|
|
246
|
+
# --- Bootstrap (not slash-routed) ---
|
|
247
|
+
# using-gdd → injected at SessionStart by hooks/inject-using-gdd.sh
|
|
248
|
+
# (disable-model-invocation: true). The skill-discipline contract;
|
|
249
|
+
# not a user-invoked command — see skills/using-gdd/SKILL.md.
|
|
246
250
|
```
|
|
247
251
|
|
|
248
252
|
Pass remaining arguments through: `/gdd:explore --skip-interview` → `Skill("get-design-done:gdd-explore", "--skip-interview")`.
|
|
@@ -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
|
+
});
|
package/bin/gdd-sdk
CHANGED
|
@@ -1,37 +1,47 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// bin/gdd-sdk — Plan 21-09 Task 7 (SDK-21).
|
|
2
|
+
// bin/gdd-sdk — Plan 21-09 Task 7 (SDK-21); dual-mode since Plan 31-5-9.5 (D-16).
|
|
3
3
|
//
|
|
4
|
-
// CJS trampoline
|
|
5
|
-
//
|
|
6
|
-
// exit code. Windows-compatible (npm's generated .cmd shim on Windows
|
|
7
|
-
// has no way to inject the --experimental-strip-types flag otherwise).
|
|
4
|
+
// DUAL-MODE CJS trampoline. Resolves the SDK CLI entry and re-launches it under
|
|
5
|
+
// `node`, forwarding argv + exit code/signal. Two modes:
|
|
8
6
|
//
|
|
9
|
-
//
|
|
7
|
+
// • COMPILED (installed / packed): if the esbuild-bundled sibling
|
|
8
|
+
// `sdk/cli/index.js` exists, spawn `node <js>` with NO flag. This is the
|
|
9
|
+
// path a user gets from `npm i` — the entry lives under node_modules where
|
|
10
|
+
// Node refuses --experimental-strip-types on `.ts`
|
|
11
|
+
// (ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING). `prepack` compiles the .js
|
|
12
|
+
// before every pack/publish (see scripts/build-sdk-bins.cjs).
|
|
13
|
+
// • SOURCE (in-repo dev): otherwise spawn
|
|
14
|
+
// `node --experimental-strip-types sdk/cli/index.ts` — the raw TS, no build
|
|
15
|
+
// step, exactly as before this plan.
|
|
16
|
+
//
|
|
17
|
+
// Why a trampoline at all:
|
|
10
18
|
// POSIX shebangs can use `#!/usr/bin/env -S node --experimental-strip-types`,
|
|
11
|
-
// but Windows cmd.exe does not honor shebangs
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// explicitly so both platforms end up at the same TS entry.
|
|
19
|
+
// but Windows cmd.exe does not honor shebangs and npm's auto-generated .cmd
|
|
20
|
+
// shim invokes plain `node bin/gdd-sdk` with no way to inject the flag. The
|
|
21
|
+
// trampoline re-launches node correctly on both platforms.
|
|
15
22
|
|
|
16
23
|
'use strict';
|
|
17
24
|
|
|
18
25
|
const { spawn } = require('node:child_process');
|
|
26
|
+
const fs = require('node:fs');
|
|
19
27
|
const path = require('node:path');
|
|
20
28
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
// Sibling compiled JS (preferred) and the TS source (dev fallback).
|
|
30
|
+
const compiled = path.resolve(__dirname, '..', 'sdk', 'cli', 'index.js');
|
|
31
|
+
const source = path.resolve(__dirname, '..', 'sdk', 'cli', 'index.ts');
|
|
32
|
+
|
|
33
|
+
// fs.existsSync (not a try/require) — the entry is launched in a child node,
|
|
34
|
+
// not require()'d here, and we must not evaluate it in this process.
|
|
35
|
+
const useCompiled = fs.existsSync(compiled);
|
|
36
|
+
const entry = useCompiled ? compiled : source;
|
|
37
|
+
const nodeArgs = useCompiled
|
|
38
|
+
? [entry, ...process.argv.slice(2)]
|
|
39
|
+
: ['--experimental-strip-types', entry, ...process.argv.slice(2)];
|
|
29
40
|
|
|
30
|
-
const child = spawn(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
);
|
|
41
|
+
const child = spawn(process.execPath, nodeArgs, {
|
|
42
|
+
stdio: 'inherit',
|
|
43
|
+
shell: false,
|
|
44
|
+
});
|
|
35
45
|
|
|
36
46
|
child.on('exit', (code, signal) => {
|
|
37
47
|
if (signal) {
|
|
@@ -50,6 +60,6 @@ child.on('exit', (code, signal) => {
|
|
|
50
60
|
child.on('error', (err) => {
|
|
51
61
|
// Failure to spawn node itself — extremely rare; surface to stderr.
|
|
52
62
|
// eslint-disable-next-line no-console
|
|
53
|
-
console.error('gdd-sdk: failed to launch
|
|
63
|
+
console.error('gdd-sdk: failed to launch SDK CLI entry:', err.message);
|
|
54
64
|
process.exit(3);
|
|
55
65
|
});
|