@hegemonart/get-design-done 1.41.5 → 1.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +49 -0
- package/README.md +2 -0
- package/dist/claude-code/.claude/skills/add-backlog/SKILL.md +48 -0
- package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +95 -0
- package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +92 -0
- package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +170 -0
- package/dist/claude-code/.claude/skills/audit/SKILL.md +79 -0
- package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +94 -0
- package/dist/claude-code/.claude/skills/benchmark/SKILL.md +65 -0
- package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +43 -0
- package/dist/claude-code/.claude/skills/brief/SKILL.md +128 -0
- package/dist/claude-code/.claude/skills/budget/SKILL.md +45 -0
- package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +66 -0
- package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +126 -0
- package/dist/claude-code/.claude/skills/check-update/SKILL.md +98 -0
- package/dist/claude-code/.claude/skills/compare/SKILL.md +82 -0
- package/dist/claude-code/.claude/skills/compare/compare-rubric.md +171 -0
- package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +81 -0
- package/dist/claude-code/.claude/skills/connections/SKILL.md +71 -0
- package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +608 -0
- package/dist/claude-code/.claude/skills/continue/SKILL.md +24 -0
- package/dist/claude-code/.claude/skills/darkmode/SKILL.md +76 -0
- package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +258 -0
- package/dist/claude-code/.claude/skills/debug/SKILL.md +41 -0
- package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +119 -0
- package/dist/claude-code/.claude/skills/design/SKILL.md +99 -0
- package/dist/claude-code/.claude/skills/design/design-procedure.md +304 -0
- package/dist/claude-code/.claude/skills/discover/SKILL.md +72 -0
- package/dist/claude-code/.claude/skills/discover/discover-procedure.md +222 -0
- package/dist/claude-code/.claude/skills/discuss/SKILL.md +96 -0
- package/dist/claude-code/.claude/skills/do/SKILL.md +45 -0
- package/dist/claude-code/.claude/skills/explore/SKILL.md +105 -0
- package/dist/claude-code/.claude/skills/explore/explore-procedure.md +267 -0
- package/dist/claude-code/.claude/skills/export/SKILL.md +30 -0
- package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +98 -0
- package/dist/claude-code/.claude/skills/fast/SKILL.md +91 -0
- package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +64 -0
- package/dist/claude-code/.claude/skills/figma-write/SKILL.md +39 -0
- package/dist/claude-code/.claude/skills/graphify/SKILL.md +49 -0
- package/dist/claude-code/.claude/skills/health/SKILL.md +99 -0
- package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +44 -0
- package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +69 -0
- package/dist/claude-code/.claude/skills/help/SKILL.md +87 -0
- package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +61 -0
- package/dist/claude-code/.claude/skills/locale/SKILL.md +51 -0
- package/dist/claude-code/.claude/skills/map/SKILL.md +89 -0
- package/dist/claude-code/.claude/skills/migrate/SKILL.md +70 -0
- package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +37 -0
- package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +87 -0
- package/dist/claude-code/.claude/skills/new-project/SKILL.md +53 -0
- package/dist/claude-code/.claude/skills/next/SKILL.md +68 -0
- package/dist/claude-code/.claude/skills/note/SKILL.md +48 -0
- package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +86 -0
- package/dist/claude-code/.claude/skills/optimize/SKILL.md +97 -0
- package/dist/claude-code/.claude/skills/pause/SKILL.md +77 -0
- package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +88 -0
- package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +161 -0
- package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +90 -0
- package/dist/claude-code/.claude/skills/peers/SKILL.md +96 -0
- package/dist/claude-code/.claude/skills/plan/SKILL.md +105 -0
- package/dist/claude-code/.claude/skills/plan/plan-procedure.md +278 -0
- package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +48 -0
- package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +32 -0
- package/dist/claude-code/.claude/skills/progress/SKILL.md +95 -0
- package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +90 -0
- package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +101 -0
- package/dist/claude-code/.claude/skills/quick/SKILL.md +44 -0
- package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +32 -0
- package/dist/claude-code/.claude/skills/recall/SKILL.md +75 -0
- package/dist/claude-code/.claude/skills/reflect/SKILL.md +85 -0
- package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +120 -0
- package/dist/claude-code/.claude/skills/report-issue/SKILL.md +53 -0
- package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +120 -0
- package/dist/claude-code/.claude/skills/resume/SKILL.md +93 -0
- package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +46 -0
- package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +42 -0
- package/dist/claude-code/.claude/skills/roi/SKILL.md +54 -0
- package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +35 -0
- package/dist/claude-code/.claude/skills/router/SKILL.md +89 -0
- package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +65 -0
- package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +78 -0
- package/dist/claude-code/.claude/skills/router/router-rules.md +84 -0
- package/dist/claude-code/.claude/skills/scan/SKILL.md +92 -0
- package/dist/claude-code/.claude/skills/scan/scan-procedure.md +732 -0
- package/dist/claude-code/.claude/skills/settings/SKILL.md +87 -0
- package/dist/claude-code/.claude/skills/ship/SKILL.md +48 -0
- package/dist/claude-code/.claude/skills/sketch/SKILL.md +78 -0
- package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +92 -0
- package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +79 -0
- package/dist/claude-code/.claude/skills/spike/SKILL.md +67 -0
- package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +86 -0
- package/dist/claude-code/.claude/skills/start/SKILL.md +67 -0
- package/dist/claude-code/.claude/skills/start/start-procedure.md +115 -0
- package/dist/claude-code/.claude/skills/stats/SKILL.md +51 -0
- package/dist/claude-code/.claude/skills/style/SKILL.md +71 -0
- package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +150 -0
- package/dist/claude-code/.claude/skills/synthesize/SKILL.md +94 -0
- package/dist/claude-code/.claude/skills/timeline/SKILL.md +66 -0
- package/dist/claude-code/.claude/skills/todo/SKILL.md +64 -0
- package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +95 -0
- package/dist/claude-code/.claude/skills/undo/SKILL.md +31 -0
- package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +54 -0
- package/dist/claude-code/.claude/skills/update/SKILL.md +56 -0
- package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +78 -0
- package/dist/claude-code/.claude/skills/verify/SKILL.md +113 -0
- package/dist/claude-code/.claude/skills/verify/verify-procedure.md +512 -0
- package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +81 -0
- package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +82 -0
- package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +26 -0
- package/package.json +4 -1
- package/reference/DEPRECATIONS.md +14 -0
- package/reference/registry.json +7 -0
- package/reference/skill-placeholders.md +71 -0
- package/scripts/lib/build/factory.cjs +62 -0
- package/scripts/lib/build/harness-configs.cjs +64 -0
- package/sdk/cli/commands/build.ts +106 -0
- package/sdk/cli/index.js +84 -2
- package/sdk/cli/index.ts +7 -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.42.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.42.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.42.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,55 @@ All notable changes to get-design-done are documented here. Versions follow [sem
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [1.42.0] - 2026-06-02
|
|
8
|
+
|
|
9
|
+
### Phase 42 — Multi-Harness Source Compilation
|
|
10
|
+
|
|
11
|
+
One skill source, N provider bundles. The README advertised 14 harnesses but every skill hard-coded
|
|
12
|
+
Claude syntax (`/gdd:`…). Phase 42 authors each skill **once** in `source/skills/` with placeholders and
|
|
13
|
+
compiles per-harness bundles via a pure transformer factory that reads the Phase 41.5 manifest SoT.
|
|
14
|
+
**No new runtime dependency, no new egress.**
|
|
15
|
+
|
|
16
|
+
### Breaking changes
|
|
17
|
+
|
|
18
|
+
- **`skills/` is now a generated artifact, not the authoring source.** Skills are authored in
|
|
19
|
+
**`source/skills/`** (with `{{command_prefix}}` and the other placeholders); the committed `skills/`
|
|
20
|
+
tree is regenerated from it for the Claude-Code default, and CI's `npm run build:skills:check` fails on
|
|
21
|
+
any drift. **Contributors must edit `source/skills/`, never `skills/` directly**, then run
|
|
22
|
+
`npm run build:skills` and commit the regenerated `skills/` + `dist/claude-code/`. The plugin contract is
|
|
23
|
+
unchanged — `.claude-plugin/plugin.json` still loads `./skills/`, now produced from `source/skills/`.
|
|
24
|
+
See `reference/DEPRECATIONS.md` → Authoring surfaces and `reference/skill-placeholders.md`.
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- **`source/skills/`** — all 83 skills (107 `.md`) authored once with placeholders. `/gdd:` →
|
|
29
|
+
`{{command_prefix}}` is a pure string inverse, so the Claude compile reproduces `skills/` byte-for-byte.
|
|
30
|
+
- **`scripts/lib/build/factory.cjs`** — the pure `compile(text, config)` transformer (no I/O): the four
|
|
31
|
+
placeholders, `<!-- harness-only: a,b -->` blocks, and `\{{…}}` escapes.
|
|
32
|
+
- **`scripts/lib/build/harness-configs.cjs`** — per-harness substitutions layered over
|
|
33
|
+
`scripts/lib/manifest/harnesses.json` (41.5). 14 records; `codex` is the flat-prefix (`/gdd-`) outlier.
|
|
34
|
+
Adding a 15th harness = one manifest entry plus an optional override row.
|
|
35
|
+
- **`scripts/build-skills.cjs`** (`npm run build:skills`, `build:skills:check`) — orchestrator with
|
|
36
|
+
`--harness`, `--check` (drift gate), and `--zip`. Writes `dist/<bundle>/<configDir>/skills/…` and
|
|
37
|
+
regenerates `skills/` in place. Idempotent + byte-stable.
|
|
38
|
+
- **`dist/claude-code/`** — the default Claude-Code bundle, committed + shipped in the npm tarball (other
|
|
39
|
+
per-harness bundles stay build-only artifacts; `--zip` packages them for releases).
|
|
40
|
+
- **`gdd-sdk build skills [--harness <id>] [--zip] [--check]`** — SDK CLI surface (operates in a repo clone
|
|
41
|
+
where `source/skills/` is present; the orchestrator + source are dev-only, not shipped).
|
|
42
|
+
- **`reference/skill-placeholders.md`** — the placeholder catalogue + per-harness substitution table +
|
|
43
|
+
escape and harness-only rules.
|
|
44
|
+
|
|
45
|
+
### Notes
|
|
46
|
+
|
|
47
|
+
- 6-manifest lockstep at **v1.42.0** + `OFF_CADENCE_VERSIONS.add('1.42.0')` + the 37 live-pinned
|
|
48
|
+
`manifests-version.txt` baselines forward-propagated 1.41.5 → 1.42.0.
|
|
49
|
+
- CI gains a `build:skills:check` drift step in the validate job; a per-harness compile smoke + a 14-harness
|
|
50
|
+
golden baseline (`test/fixtures/baselines/phase-42/`) pin the compile output.
|
|
51
|
+
- Inventory: tarball golden 757 → 868 (+111: `dist/claude-code/**` 107, `scripts/lib/build/**` 2,
|
|
52
|
+
`reference/skill-placeholders.md`, `sdk/cli/commands/build.ts`). `source/skills/` is dev-only (not shipped).
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
7
56
|
## [1.41.5] - 2026-06-02
|
|
8
57
|
|
|
9
58
|
### Phase 41.5 — SoT Manifest Consolidation
|
package/README.md
CHANGED
|
@@ -243,6 +243,8 @@ The installer prompts you to choose:
|
|
|
243
243
|
|
|
244
244
|
All 14 runtimes receive their native artifact layout (`skills/`, `command/`, `agents/`, or `.clinerules`) via per-runtime content converters — Claude SKILL.md sources are translated to each runtime's expected shape at install time (frontmatter pass-through, path rewrite, tool-name rewrite via the Phase 21 cross-harness maps). Architecture ported from `gsd-build/get-shit-done` (MIT — see `NOTICE`; upstream is now archived following the May 2026 $GSD token rug-pull, community continuation lives at [`open-gsd/get-shit-done-redux`](https://github.com/open-gsd/get-shit-done-redux)).
|
|
245
245
|
|
|
246
|
+
**Multi-harness compilation (v1.42.0).** Skills are authored once in `source/skills/` with placeholders (`{{command_prefix}}`, `{{model}}`, `{{config_file}}`, `{{ask_instruction}}`) and compiled per-harness by `scripts/build-skills.cjs` (`npm run build:skills`, or `gdd-sdk build skills`) using a pure transformer factory that reads the single harness manifest at `scripts/lib/manifest/harnesses.json`. The committed `skills/` tree is the regenerated Claude-Code default (CI drift-gates `committed === generated`); the default bundle ships at `dist/claude-code/`, and the other 13 bundles are produced on demand. Adding a 15th harness is one manifest entry. Contributors: edit `source/skills/`, never `skills/` directly — see `reference/skill-placeholders.md` and `reference/DEPRECATIONS.md`.
|
|
247
|
+
|
|
246
248
|
Verify with:
|
|
247
249
|
|
|
248
250
|
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-add-backlog
|
|
3
|
+
description: "Park a design idea for a future cycle. Writes to .design/backlog/BACKLOG.md."
|
|
4
|
+
argument-hint: "[text]"
|
|
5
|
+
tools: Read, Write, AskUserQuestion
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /gdd:add-backlog
|
|
10
|
+
|
|
11
|
+
**Role:** Long-term parking lot for design ideas. Backing store: `.design/backlog/BACKLOG.md`.
|
|
12
|
+
|
|
13
|
+
## Step 1 — Get text
|
|
14
|
+
|
|
15
|
+
If `$ARGUMENTS` is empty, ask the user: "What should be added to the backlog?"
|
|
16
|
+
|
|
17
|
+
## Step 2 — Append
|
|
18
|
+
|
|
19
|
+
Create `.design/backlog/` directory and `BACKLOG.md` with `# Design Backlog` header if missing.
|
|
20
|
+
|
|
21
|
+
Derive `<title>` = first 60 characters of the text (strip newlines). Append:
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
## <title>
|
|
25
|
+
**Added**: YYYY-MM-DD
|
|
26
|
+
**Status**: parked
|
|
27
|
+
|
|
28
|
+
<full text>
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Output
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
━━━ Backlog entry parked ━━━
|
|
37
|
+
Title: <title>
|
|
38
|
+
Status: parked
|
|
39
|
+
Promote later via: /gdd:review-backlog
|
|
40
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Constraints
|
|
44
|
+
|
|
45
|
+
- Do not modify files outside `.design/backlog/`.
|
|
46
|
+
- Do not set status to anything other than `parked` here — `/gdd:review-backlog` owns status transitions.
|
|
47
|
+
|
|
48
|
+
## ADD-BACKLOG COMPLETE
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-analyze-dependencies
|
|
3
|
+
description: "Queries the intel store to surface token fan-out, component call-graphs, decision traceability, and circular dependency detection. Requires .design/intel/ to exist (run build-intel.cjs first)."
|
|
4
|
+
tools: Bash, Read, Glob, Grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /gdd:analyze-dependencies
|
|
8
|
+
|
|
9
|
+
**Role:** Surface dependency relationships, token usage spread, component graphs, and decision traceability using `.design/intel/`. All queries are O(1) reads against pre-built JSON slices — no file greps. See `./reference/heuristics.md` for the underlying dependency-analysis heuristics (fan-out thresholds, orphan-token criteria, cycle-detection bias).
|
|
10
|
+
|
|
11
|
+
## Pre-flight
|
|
12
|
+
|
|
13
|
+
Verify the intel store exists:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
ls .design/intel/files.json 2>/dev/null && echo "ready" || echo "missing"
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
If missing, print:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
Intel store not found. Build it first:
|
|
23
|
+
node scripts/build-intel.cjs --force
|
|
24
|
+
Then re-run /gdd:analyze-dependencies.
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Usage modes
|
|
28
|
+
|
|
29
|
+
- `/gdd:analyze-dependencies` — run all four analyses and print a combined report
|
|
30
|
+
- `/gdd:analyze-dependencies tokens` — token fan-out only
|
|
31
|
+
- `/gdd:analyze-dependencies components` — component call-graph only
|
|
32
|
+
- `/gdd:analyze-dependencies decisions` — decision traceability only
|
|
33
|
+
- `/gdd:analyze-dependencies circular` — circular dependency detection only
|
|
34
|
+
|
|
35
|
+
## Analysis 1 — Token fan-out
|
|
36
|
+
|
|
37
|
+
Surfaces tokens referenced in many files + orphans (referenced exactly once).
|
|
38
|
+
|
|
39
|
+
1. Read `.design/intel/tokens.json`; group by `token` value; count distinct `file` values.
|
|
40
|
+
2. Sort descending; print top-20 with token / file count / category columns.
|
|
41
|
+
3. Append orphans list (token + file:line of the single reference).
|
|
42
|
+
|
|
43
|
+
Header: `━━━ Token fan-out ━━━` … `(top 20 shown)` … `Orphaned tokens (referenced in exactly 1 file):` … footer rule.
|
|
44
|
+
|
|
45
|
+
## Analysis 2 — Component call-graph
|
|
46
|
+
|
|
47
|
+
Surfaces widely-referenced components and the files referencing each.
|
|
48
|
+
|
|
49
|
+
1. Read `.design/intel/components.json`; group by `component` name; count distinct `file` values.
|
|
50
|
+
2. Sort descending; print top-20 with component / references / files columns.
|
|
51
|
+
3. If `components <Name>` is passed, print only that component's referencing files (one per line).
|
|
52
|
+
|
|
53
|
+
Header: `━━━ Component call-graph ━━━` … footer rule.
|
|
54
|
+
|
|
55
|
+
## Analysis 3 — Decision traceability
|
|
56
|
+
|
|
57
|
+
Maps decisions to skill/agent files that cite them.
|
|
58
|
+
|
|
59
|
+
1. Read `.design/intel/decisions.json` (decision IDs D-01, D-02, …).
|
|
60
|
+
2. Read `.design/intel/symbols.json` for heading anchors; `.design/intel/dependencies.json` for @-reference chains.
|
|
61
|
+
3. For each decision, cross-reference which files cite the ID.
|
|
62
|
+
4. Print per-decision block: `D-NN <description>` then a 6-space-indented `Referenced by: <file:line>, …` line (or `(no explicit references found)`).
|
|
63
|
+
5. Footer: `Total: N decisions tracked, M with file references`.
|
|
64
|
+
|
|
65
|
+
Empty-state: `No decisions indexed. Run node scripts/build-intel.cjs after creating .design/DESIGN-CONTEXT.md.`
|
|
66
|
+
|
|
67
|
+
## Analysis 4 — Circular dependency detection
|
|
68
|
+
|
|
69
|
+
Detects cycles in the `@`-reference graph (File A → File B → File A). DFS with path-tracking detects back-edges; algorithm + adjacency-map shape detailed in `./reference/heuristics.md` §"Dependency-cycle detection".
|
|
70
|
+
|
|
71
|
+
1. Read `.design/intel/graph.json`; build adjacency map from `edges`.
|
|
72
|
+
2. Run DFS with path-tracking; collect back-edges as cycles.
|
|
73
|
+
3. Print each cycle with the node sequence + `<- CYCLE` marker on the closing node.
|
|
74
|
+
4. Footer: `Total cycles: N` (or `All clear — no circular dependencies detected.`).
|
|
75
|
+
|
|
76
|
+
## Combined report
|
|
77
|
+
|
|
78
|
+
When run without a mode argument, print all four analyses in sequence separated by blank lines, prefixed with:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
━━━ Dependency Analysis ━━━
|
|
82
|
+
Intel store: .design/intel/
|
|
83
|
+
Generated: <timestamp from files.json>
|
|
84
|
+
Files indexed: <count>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Required reading (conditional)
|
|
88
|
+
|
|
89
|
+
@.design/intel/tokens.json (if present)
|
|
90
|
+
@.design/intel/components.json (if present)
|
|
91
|
+
@.design/intel/dependencies.json (if present)
|
|
92
|
+
@.design/intel/decisions.json (if present)
|
|
93
|
+
@.design/intel/graph.json (if present)
|
|
94
|
+
|
|
95
|
+
## ANALYZE-DEPENDENCIES COMPLETE
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-apply-reflections
|
|
3
|
+
description: "Review and selectively apply proposals from .design/reflections/<cycle-slug>.md. Diffs each proposal, prompts user to accept/skip/edit, then writes changes."
|
|
4
|
+
argument-hint: "[--cycle <slug>] [--filter <FRONTMATTER|REFERENCE|BUDGET|QUESTION|GLOBAL-SKILL>] [--dry-run]"
|
|
5
|
+
tools: Read, Write, Edit, Bash, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /gdd:apply-reflections
|
|
9
|
+
|
|
10
|
+
Interactive proposal review loop. Reads `.design/reflections/<cycle-slug>.md`, walks each numbered proposal, and applies accepted ones to the appropriate target file. Nothing is applied without explicit user confirmation.
|
|
11
|
+
|
|
12
|
+
## Steps
|
|
13
|
+
|
|
14
|
+
### 1. Resolve reflections file
|
|
15
|
+
|
|
16
|
+
- If `--cycle <slug>` given: load `.design/reflections/<slug>.md`
|
|
17
|
+
- Else: glob `.design/reflections/*.md`, sort by modified time descending, load the most recent
|
|
18
|
+
- If no file found: error "No reflections found. Run `/gdd:reflect` first."
|
|
19
|
+
- Print: "Reviewing reflections: <filename>"
|
|
20
|
+
|
|
21
|
+
### 2. Parse proposals
|
|
22
|
+
|
|
23
|
+
Scan file for lines matching `### Proposal N — [TYPE] ...`. Extract each proposal block (Why / Change / Risk).
|
|
24
|
+
|
|
25
|
+
If `--filter <TYPE>` given: skip proposals whose type tag doesn't match.
|
|
26
|
+
|
|
27
|
+
Print: "Found N proposals (N after filter)."
|
|
28
|
+
|
|
29
|
+
### 3. Review loop
|
|
30
|
+
|
|
31
|
+
For each proposal (in order):
|
|
32
|
+
|
|
33
|
+
Print the full proposal block:
|
|
34
|
+
```
|
|
35
|
+
─────────────────────────────────────────
|
|
36
|
+
Proposal N/TOTAL — [TYPE] Title
|
|
37
|
+
Risk: low|medium
|
|
38
|
+
|
|
39
|
+
Why: ...
|
|
40
|
+
Change: ...
|
|
41
|
+
─────────────────────────────────────────
|
|
42
|
+
(a) apply (s) skip (e) edit (q) quit
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If `--dry-run`: print `[dry-run — would prompt here]` and continue to next proposal without prompting.
|
|
46
|
+
|
|
47
|
+
Based on user choice:
|
|
48
|
+
- **a** — apply (see Apply Logic below)
|
|
49
|
+
- **s** — mark proposal as `**Reviewed: skipped**` in the reflections file; continue
|
|
50
|
+
- **e** — show the Change text, ask user to provide edited version, then apply the edited version
|
|
51
|
+
- **q** — stop processing; print "Stopped at proposal N. Resume with `/gdd:apply-reflections --cycle <slug>`."
|
|
52
|
+
|
|
53
|
+
### 4. Apply Logic by Proposal Type
|
|
54
|
+
|
|
55
|
+
After the user chooses `a` (apply) or `e` (edit-then-apply), branch on the proposal's bracketed type tag and follow the per-type apply procedure in `./apply-reflections-procedure.md` — one numbered procedure each for `[FRONTMATTER]`, `[REFERENCE]`, `[BUDGET]`, `[QUESTION]`, `[GLOBAL-SKILL]`. All branches end with `**Applied**: <date>` appended to the proposal block in the reflections file.
|
|
56
|
+
|
|
57
|
+
### 5. Summary
|
|
58
|
+
|
|
59
|
+
After all proposals processed (or `q`):
|
|
60
|
+
```
|
|
61
|
+
─────────────────────────────────────────
|
|
62
|
+
Apply-reflections complete
|
|
63
|
+
Applied: N
|
|
64
|
+
Skipped: N
|
|
65
|
+
Remaining: N (run again to continue)
|
|
66
|
+
─────────────────────────────────────────
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## [INCUBATOR]
|
|
70
|
+
|
|
71
|
+
Incubator drafts authored by `scripts/lib/incubator-author.cjs` (Phase 29-04) appear as a distinct proposal class. For each draft under `.design/reflections/incubator/<slug>/`, use `scripts/lib/apply-reflections/incubator-proposals.cjs`:
|
|
72
|
+
|
|
73
|
+
1. `discoverIncubatorDrafts()` → list pending drafts.
|
|
74
|
+
2. `renderProposal(draft)` → show full body + diff + origin signals.
|
|
75
|
+
3. User chooses **accept** | **reject** | **defer** | **edit**.
|
|
76
|
+
4. **accept** — scope-guard runs FIRST (`validateScope` from `scripts/validate-incubator-scope.cjs`); `applyAccept` then promotes draft → `agents/<slug>.md` or `skills/<slug>/SKILL.md` and appends a registry entry. Single-step per D-04.
|
|
77
|
+
5. **reject** — `applyReject` removes the incubator subdir.
|
|
78
|
+
6. **defer** — no-op; draft re-surfaces next run.
|
|
79
|
+
7. **edit** — `applyEdit` opens `$EDITOR`; re-prompt user on close.
|
|
80
|
+
|
|
81
|
+
**Stage-1 gate.** At session start, call `checkStage1Gate()`. If `thresholdMet && !optInRecorded`, display the opt-in prompt once. NEVER auto-flip per D-01 — recording opt-in requires explicit user confirmation via `recordOptIn()`. Full procedure: `./apply-reflections-procedure.md` §[INCUBATOR].
|
|
82
|
+
|
|
83
|
+
## [KFM-CANDIDATE]
|
|
84
|
+
|
|
85
|
+
KFM-catalogue proposals authored by `scripts/lib/reflector-kfm-proposer.cjs` (Phase 30.5-03 D-05) appear as a 6th proposal class. Drafts at `.design/reflections/incubator/kfm-<slug>/CATALOGUE-ENTRY.md`; pre-filled 11-field schema with `TODO:` placeholders for `pattern` + `fix`. Two upstream signals share the surface (D-06): `capability_gap` clusters (≥3, no existing match) + `kfm-candidate` events (whitelist-matched articles, 1-shot). User chooses **accept** | **reject** | **defer** | **edit**. `applyAccept` appends to `reference/known-failure-modes.md` + `reference/registry.json` (`origin: incubator-kfm`); `applyReject` removes the incubator subdir; `applyDefer` stamps `deferred_until`; `applyEdit` returns the draft path for `$EDITOR`. Full procedure: `./apply-reflections-procedure.md` §[KFM-CANDIDATE].
|
|
86
|
+
|
|
87
|
+
## Do Not
|
|
88
|
+
|
|
89
|
+
- Do not apply any proposal without the user explicitly choosing `a` or `e`.
|
|
90
|
+
- Do not modify source code files (`.ts`, `.tsx`, `.css`, `.js`) — only agent files, reference files, budget.json, discussant questions, global skills, and incubator drafts.
|
|
91
|
+
- Do not re-run the reflector — this skill only applies existing proposals.
|
|
92
|
+
- Do not bypass the scope guard or auto-flip Stage-1 — both are non-negotiable per D-05 / D-01.
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apply-reflections-procedure
|
|
3
|
+
type: heuristic
|
|
4
|
+
version: 1.3.0
|
|
5
|
+
phase: 30.5
|
|
6
|
+
tags: [apply-reflections, proposal, frontmatter, reference, budget, question, global-skill, incubator, kfm-candidate]
|
|
7
|
+
last_updated: 2026-05-21
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Apply-Reflections — Per-Type Procedure
|
|
11
|
+
|
|
12
|
+
Extracted from `skills/apply-reflections/SKILL.md` per Phase 28.5 D-10 (extract-then-link,
|
|
13
|
+
never delete content). The orchestrator loop in `apply-reflections` (resolve file → parse →
|
|
14
|
+
review loop → summary) stays in the SKILL. The per-proposal-type apply logic below moves
|
|
15
|
+
here because it is content-class methodology, not workflow.
|
|
16
|
+
|
|
17
|
+
## Apply Logic by Proposal Type
|
|
18
|
+
|
|
19
|
+
After the user chooses `a` (apply) or `e` (edit-then-apply) in the review loop, branch by
|
|
20
|
+
the proposal's bracketed type tag.
|
|
21
|
+
|
|
22
|
+
### [FRONTMATTER]
|
|
23
|
+
|
|
24
|
+
1. Extract agent name from Change field (e.g., `agents/design-verifier.md`)
|
|
25
|
+
2. Read the agent file
|
|
26
|
+
3. Find the frontmatter line matching the field being changed
|
|
27
|
+
4. Use Edit tool to update the specific line
|
|
28
|
+
5. Append `**Applied**: <date>` to the proposal in reflections file
|
|
29
|
+
|
|
30
|
+
### [REFERENCE]
|
|
31
|
+
|
|
32
|
+
1. Extract target file path from Change field (e.g., `reference/heuristics.md`)
|
|
33
|
+
2. If file exists: append the drafted text using Edit tool
|
|
34
|
+
3. If file doesn't exist: create it with a minimal header + the drafted text using Write tool
|
|
35
|
+
4. Append `**Applied**: <date>` to proposal in reflections file
|
|
36
|
+
|
|
37
|
+
### [BUDGET]
|
|
38
|
+
|
|
39
|
+
1. Read `.design/budget.json`
|
|
40
|
+
2. Locate the key path from the Change field (e.g., `design-verifier.per_run_cap_usd`)
|
|
41
|
+
3. Update the value
|
|
42
|
+
4. Write updated JSON back to `.design/budget.json`
|
|
43
|
+
5. Append `**Applied**: <date>` to proposal in reflections file
|
|
44
|
+
|
|
45
|
+
### [QUESTION]
|
|
46
|
+
|
|
47
|
+
1. Read `agents/design-discussant.md`
|
|
48
|
+
2. Find the question text specified in the Change field
|
|
49
|
+
3. If pruning: remove the question lines using Edit tool
|
|
50
|
+
4. If rewording: replace the question text using Edit tool
|
|
51
|
+
5. Append `**Applied**: <date>` to proposal in reflections file
|
|
52
|
+
|
|
53
|
+
### [GLOBAL-SKILL]
|
|
54
|
+
|
|
55
|
+
1. Extract target filename from Change field (e.g., `design-color-conventions.md`)
|
|
56
|
+
2. Ensure `~/.claude/gdd/global-skills/` directory exists (create with `mkdir -p` if not)
|
|
57
|
+
3. If target file exists: append new content using Edit tool (add a `---` separator first)
|
|
58
|
+
4. If target file doesn't exist: create with header + content using Write tool:
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
# <Topic> Conventions (Global)
|
|
62
|
+
*Promoted from project: <project-name>, cycle: <cycle-slug>*
|
|
63
|
+
|
|
64
|
+
<content>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
5. Print: "Global skill written to ~/.claude/gdd/global-skills/<name>.md — auto-loads in all future gdd sessions"
|
|
68
|
+
6. Append `**Applied**: <date>` to proposal in reflections file
|
|
69
|
+
|
|
70
|
+
### [INCUBATOR]
|
|
71
|
+
|
|
72
|
+
Incubator drafts come from `scripts/lib/incubator-author.cjs` (Phase 29-04). They live at
|
|
73
|
+
`.design/reflections/incubator/<slug>/` and contain `manifest.json` + `DRAFT.md` + (optional) `ORIGIN.md`.
|
|
74
|
+
|
|
75
|
+
Use `scripts/lib/apply-reflections/incubator-proposals.cjs` for all actions.
|
|
76
|
+
|
|
77
|
+
**Discovery + render** (once per cycle):
|
|
78
|
+
|
|
79
|
+
1. Call `discoverIncubatorDrafts()` → `Array<Draft>`. Skip malformed entries silently (already warned on stderr by the helper).
|
|
80
|
+
2. For each draft: call `renderProposal(draft)` and print the returned markdown block. The user sees a header (slug + kind), a diff vs the nearest existing artifact (or "net-new"), an Origin section listing capability-gap signals, and the full draft body.
|
|
81
|
+
3. Prompt: `(a) accept (r) reject (d) defer (e) edit (q) quit`.
|
|
82
|
+
|
|
83
|
+
**Per-action behavior:**
|
|
84
|
+
|
|
85
|
+
1. **accept** — call `applyAccept(draft, { registryPath, repoRoot })`.
|
|
86
|
+
- The helper calls `validateScope(draft.target_path)` from `scripts/validate-incubator-scope.cjs` **before** any write. Out-of-scope paths throw and the registry stays untouched. This is the non-bypassable scope guard (D-05).
|
|
87
|
+
- On success: target artifact written, `reference/registry.json` appended with `{ slug, path, added, origin: 'incubator' }`, incubator subdir removed last (T-29.05-04 — partial-failure leaves draft retryable).
|
|
88
|
+
- Print: "Accepted — promoted to <target_path>; registered."
|
|
89
|
+
- Append `**Applied**: <date>` to the proposal block.
|
|
90
|
+
|
|
91
|
+
2. **reject** — call `applyReject(draft)`. Only the incubator subdir is removed; registry is untouched. Append `**Reviewed: rejected**` to the reflections file.
|
|
92
|
+
|
|
93
|
+
3. **defer** — no-op. Print "Deferred — draft re-surfaces next run." Append `**Reviewed: deferred**`.
|
|
94
|
+
|
|
95
|
+
4. **edit** — call `applyEdit(draft)` (uses `$EDITOR` or the `editorCmd` array option). On clean exit, the helper reloads the draft and the caller re-runs `renderProposal` + the prompt. On non-zero exit, the original draft is preserved unchanged.
|
|
96
|
+
|
|
97
|
+
**Stage-1 gate (D-01 — no auto-flip):**
|
|
98
|
+
|
|
99
|
+
1. At the start of the cycle, call `checkStage1Gate({ gateSpecPath, statePath, registryPath })`. The call is **read-only** — never mutates state. The returned `{ thresholdMet, summary, optInRecorded }` is informational.
|
|
100
|
+
2. If `thresholdMet && !optInRecorded`, surface a one-time prompt:
|
|
101
|
+
```
|
|
102
|
+
Stage-1 capability-gap authoring threshold met: <summary>
|
|
103
|
+
Enable incubator-draft promotion? (y/N)
|
|
104
|
+
```
|
|
105
|
+
3. **Only on explicit `y`**, call `recordOptIn({ statePath, confirmedBy })`. The function is idempotent — a second call detects the existing record and returns `{ alreadyRecorded: true }`. Never call it on any other input.
|
|
106
|
+
|
|
107
|
+
**Why this is gated.** The `[INCUBATOR]` proposal class can write executable surface (agents + skills) into the plugin runtime. Both Phase 29 D-01 (no auto-flip) and D-05 (scope guard) exist because that surface has integration-test and security implications that exceed reflector autonomy. `validateScope` keeps the file landing zone confined to `agents/<slug>.md` or `skills/<slug>/SKILL.md`. The Stage-1 gate keeps the *whether* of opting in to incubator authoring under explicit user control even after the data threshold says we have enough signal.
|
|
108
|
+
|
|
109
|
+
**Bandit-fairness gate on `accept` (Phase 29 Plan 06 / CONTEXT D-04).**
|
|
110
|
+
|
|
111
|
+
When the `accept` action promotes an incubator draft, the bandit-router arms for the freshly-promoted agent/skill MUST be bootstrapped with `prior_class: 'promoted_incubator'`. This invokes a conservative `Beta(2, 8)` bootstrap prior (posterior mean 0.2) instead of the optimistic Phase 23.5 informed prior — the bandit-fairness gate IS the staging mechanism (D-04: no separate two-step ratify split). The conservative prior suppresses preferential selection until ~8-10 successful pulls accumulate.
|
|
112
|
+
|
|
113
|
+
Call shape (whether eagerly invoked on promotion or via first-pull lazy bootstrap):
|
|
114
|
+
|
|
115
|
+
```javascript
|
|
116
|
+
const bandit = require('./scripts/lib/bandit-router.cjs');
|
|
117
|
+
// Per arm bootstrapped for the freshly-promoted agent:
|
|
118
|
+
bandit.update({
|
|
119
|
+
agent: '<promoted-slug>',
|
|
120
|
+
bin: '<touches-bin>',
|
|
121
|
+
tier: '<chosen-tier>',
|
|
122
|
+
reward: <bernoulli>,
|
|
123
|
+
prior_class: 'promoted_incubator', // Phase 29 Plan 06 / D-04 — Beta(2,8) staging
|
|
124
|
+
});
|
|
125
|
+
// Or for the delegate-aware case (Plan 27-07):
|
|
126
|
+
bandit.updateWithDelegate({
|
|
127
|
+
agent: '<promoted-slug>',
|
|
128
|
+
bin: '<touches-bin>',
|
|
129
|
+
tier: '<chosen-tier>',
|
|
130
|
+
delegate: '<peer-cli-or-none>',
|
|
131
|
+
reward: <bernoulli>,
|
|
132
|
+
prior_class: 'promoted_incubator',
|
|
133
|
+
});
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Omitting `prior_class` reverts to Phase 23.5 informed-prior bootstrap (non-breaking). The reward math is unchanged — `prior_class` only affects bootstrap.
|
|
137
|
+
|
|
138
|
+
### [KFM-CANDIDATE]
|
|
139
|
+
|
|
140
|
+
Known-failure-mode catalogue proposals come from `scripts/lib/reflector-kfm-proposer.cjs` (Phase 30.5-03 D-05). They live at `.design/reflections/incubator/kfm-<slug>/CATALOGUE-ENTRY.md` and contain a single fenced ```yaml block pre-filled with the Phase 30.5 schema-v2 11-field shape (`id` + `pattern` + `diagnosis` + `remedy` + `severity` + `propose_report` + `symptom` + `root_cause` + `fix` + `related_phases` + `first_observed_cycle`). Two of those — `pattern` and `fix` — are `TODO:` placeholders the reflector cannot infer; the user fills them via the **edit** action before accepting.
|
|
141
|
+
|
|
142
|
+
Two upstream signals share this draft surface (D-06):
|
|
143
|
+
- `capability_gap` clusters of size ≥3 with no existing-entry match (Phase 29-03 aggregator + `failure-mode-matcher.match()`).
|
|
144
|
+
- `kfm-candidate` events from the Phase 30.5-03 Task 2 authority-watcher whitelist (D-06 — single events bypass the ≥3 gate).
|
|
145
|
+
|
|
146
|
+
Use `scripts/lib/reflector-kfm-proposer.cjs` for all actions:
|
|
147
|
+
|
|
148
|
+
**Discovery + render** (once per cycle):
|
|
149
|
+
|
|
150
|
+
1. Glob `.design/reflections/incubator/kfm-*/CATALOGUE-ENTRY.md` → list pending KFM drafts.
|
|
151
|
+
2. For each draft: read the body, show the origin header (source, parent event ids OR article url) + the proposed yaml block.
|
|
152
|
+
3. Prompt: `(a) accept (r) reject (d) defer (e) edit (q) quit`.
|
|
153
|
+
|
|
154
|
+
**Per-action behavior:**
|
|
155
|
+
|
|
156
|
+
1. **accept** — call `applyAccept(draftPath, { repoRoot })`.
|
|
157
|
+
- The helper re-stamps the proposed `id` with the next available `KFM-NNN` from the catalogue (avoids collisions when multiple drafts promote in the same run).
|
|
158
|
+
- Appends a `### KFM-NNN — <symptom heading>` section into `reference/known-failure-modes.md` with the yaml block intact.
|
|
159
|
+
- Appends a `reference/registry.json` entry: `{ name: 'known-failure-modes/kfm-NNN', path: 'reference/known-failure-modes.md', type: 'failure-mode', phase: 30.5, origin: 'incubator-kfm', added: '<ISO date>' }`.
|
|
160
|
+
- Removes the incubator subdir LAST (partial-failure leaves the draft retryable).
|
|
161
|
+
- Print: "Accepted — promoted to KFM-NNN in reference/known-failure-modes.md."
|
|
162
|
+
- Append `**Applied**: <date>` to the proposal entry (when surfaced from a reflections file).
|
|
163
|
+
|
|
164
|
+
2. **reject** — call `applyReject(draftPath)`. Only the incubator subdir is removed; catalogue + registry untouched. Print: "Rejected — draft removed."
|
|
165
|
+
|
|
166
|
+
3. **defer** — call `applyDefer(draftPath, { deferredUntil })` where `deferredUntil` is an ISO date (default: today + 30d). The helper stamps `deferred_until: <ISO>` into the draft body. Print: "Deferred — draft re-surfaces next run."
|
|
167
|
+
|
|
168
|
+
4. **edit** — call `applyEdit(draftPath)` which returns the draft path. The caller opens `$EDITOR` on the path; on clean exit, re-discover the draft and re-prompt. Typical edits: replace `pattern: 'TODO: ...'` with a conservative regex, replace `fix: 'TODO: ...'` with a step-by-step user-runnable remedy, set `severity` if `medium` default is wrong.
|
|
169
|
+
|
|
170
|
+
**Why this is gated.** `reference/known-failure-modes.md` feeds Phase 30's `triage-matcher.cjs` BEFORE the consent prompt — a bad entry could mute legitimate issue reports. The user-review gate is non-negotiable (D-05). The proposer is strictly proposal-only; the canonical catalogue only changes via the accept action.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-audit
|
|
3
|
+
description: "Run a design audit by spawning design-auditor, design-integration-checker, and (optionally) design-verifier + design-reflector agents, then printing a consolidated 6-pillar score summary. Use when the user wants to score the current design, retroactively verify a completed cycle, or quickly re-check after a fix."
|
|
4
|
+
argument-hint: "[--retroactive] [--quick] [--no-reflect]"
|
|
5
|
+
tools: Read, Write, Task, Glob, Bash
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /gdd:audit
|
|
9
|
+
|
|
10
|
+
Wraps the existing `design-auditor`, `design-verifier`, and `design-integration-checker` agents — no new auditor logic here. Parses flags, spawns the right combination, prints summary.
|
|
11
|
+
|
|
12
|
+
For the 6-pillar scoring rubric this skill aggregates, see `../../reference/audit-scoring.md`. For the shared design-quality pillar set that frames the score categories, see `../../reference/shared-preamble.md`.
|
|
13
|
+
|
|
14
|
+
## Modes
|
|
15
|
+
|
|
16
|
+
### Default
|
|
17
|
+
Spawn `design-auditor` (6-pillar scoring 1–4) in parallel with `design-integration-checker`. After both finish, read `.design/DESIGN-AUDIT.md` and `.design/DESIGN-INTEGRATION.md` and print a consolidated summary (scores + top 3 findings each).
|
|
18
|
+
|
|
19
|
+
After the auditor and integration checker complete, check if `.design/learnings/` exists and contains at least one `.md` file. If so — and unless `--no-reflect` is passed — spawn `design-reflector` for the current cycle. Append the reflection proposal count to the audit summary: "Reflection: N proposals → review with `/gdd:apply-reflections`".
|
|
20
|
+
|
|
21
|
+
### `--retroactive`
|
|
22
|
+
Spawn `design-verifier` with cycle-span scope. Verifier reads all tasks completed in the current cycle (from STATE.md `<completed_tasks>` list for the active `cycle:` ID) and uses `DESIGN-PLAN.md` goals as the reference baseline for what "should have been done." Output: `.design/DESIGN-VERIFICATION.md` with per-task pass/fail.
|
|
23
|
+
|
|
24
|
+
### `--quick`
|
|
25
|
+
Run only `design-auditor` (skip `design-integration-checker`). Faster health check when integration isn't the concern.
|
|
26
|
+
|
|
27
|
+
## Steps
|
|
28
|
+
|
|
29
|
+
1. Parse args for `--retroactive`, `--quick`, and `--no-reflect`.
|
|
30
|
+
2. Verify `.design/STATE.md` exists; abort if not (suggest `/gdd:new-project`).
|
|
31
|
+
3. Spawn the appropriate agents (Task tool). Default and `--retroactive` spawn two agents; `--quick` spawns one.
|
|
32
|
+
4. Wait for completion, then read each output file and print a summary:
|
|
33
|
+
- Auditor scores per pillar
|
|
34
|
+
- Integration check pass/fail
|
|
35
|
+
- Verifier pass/fail per task (retroactive mode)
|
|
36
|
+
5. **Reflection step** (default + retroactive modes only, skipped with `--no-reflect` or `--quick`):
|
|
37
|
+
- Check if `.design/learnings/` exists and has ≥1 `.md` file
|
|
38
|
+
- If yes: spawn `design-reflector` for the current cycle slug (read from STATE.md)
|
|
39
|
+
- After completion: count proposal types and append to summary
|
|
40
|
+
6. Recommend next action based on findings (e.g., "Score 2/4 on typography — run `/gdd:discuss typography` to gather decisions").
|
|
41
|
+
|
|
42
|
+
## Registered Audit Agents
|
|
43
|
+
|
|
44
|
+
| Agent | Trigger | Output |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| `design-auditor` | Default, retroactive | `.design/DESIGN-AUDIT.md` |
|
|
47
|
+
| `design-integration-checker` | Default, retroactive | `.design/DESIGN-INTEGRATION.md` |
|
|
48
|
+
| `design-verifier` | `--retroactive` only | `.design/DESIGN-VERIFICATION.md` |
|
|
49
|
+
| `design-reflector` | Default + retroactive when learnings exist | `.design/reflections/<slug>.md` |
|
|
50
|
+
|
|
51
|
+
## Do Not
|
|
52
|
+
|
|
53
|
+
- Do not modify source files.
|
|
54
|
+
- Do not rerun stages; this is a read-only audit.
|
|
55
|
+
|
|
56
|
+
## Step 7 — Update notice (post-closeout surface)
|
|
57
|
+
|
|
58
|
+
After the consolidated audit summary has been printed (and any reflection-proposal count appended), emit the plugin-update banner if one is present:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
[ -f .design/update-available.md ] && cat .design/update-available.md
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Written by `hooks/update-check.sh`; suppressed mid-pipeline and when the latest release is dismissed.
|
|
65
|
+
|
|
66
|
+
## Rationalizations — Thought to Reality
|
|
67
|
+
|
|
68
|
+
The excuses an agent reaches for to skip or thin out an audit, and the drift each one misses:
|
|
69
|
+
|
|
70
|
+
| Thought | Reality |
|
|
71
|
+
|---------|---------|
|
|
72
|
+
| "The audit passed last cycle, I can skip it this cycle." | Per-cycle audit catches drift the prior pass couldn't see; a skipped review is exactly where regressions accumulate unnoticed. |
|
|
73
|
+
| "`--quick` is fine, integration isn't the concern here." | Dropping the integration-checker hides orphaned decisions — wiring breaks even when the 6-pillar score looks healthy. |
|
|
74
|
+
| "I can eyeball the scores instead of spawning the auditor." | The auditor's rubric scores six pillars consistently; an eyeballed review drifts toward whatever the agent already believes. |
|
|
75
|
+
| "Reflection proposals are optional polish, skip the reflector." | The reflector turns this cycle's learnings into next-cycle improvements; skipping it lets the same mistakes repeat. |
|
|
76
|
+
| "I'll modify the source while I'm in here fixing findings." | Audit is read-only by contract; editing source mid-audit invalidates the very scores you're producing. |
|
|
77
|
+
| "Retroactive mode is overkill for a finished cycle." | Retroactive verification is the only check on tasks that shipped without per-task verify — skipping it leaves a completed cycle unaudited. |
|
|
78
|
+
|
|
79
|
+
## AUDIT COMPLETE
|