@hegemonart/get-design-done 1.59.3 → 1.59.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +61 -0
- package/SKILL.md +2 -0
- package/figma-plugin/README.md +61 -0
- package/figma-plugin/code.ts +36 -0
- package/figma-plugin/manifest.json +12 -0
- package/figma-plugin/package-lock.json +35 -0
- package/figma-plugin/package.json +12 -0
- package/figma-plugin/src/export-variables.ts +144 -0
- package/figma-plugin/src/payload-schema.ts +250 -0
- package/figma-plugin/tsconfig.json +16 -0
- package/figma-plugin/ui.html +44 -0
- package/hooks/budget-enforcer.ts +134 -7
- package/hooks/gdd-intel-trigger.js +3 -3
- package/package.json +6 -1
- package/reference/DEPRECATIONS.md +3 -3
- package/reference/live-mode-integration.md +1 -1
- package/reference/registry.json +1 -1
- package/reference/runtime-models.md +15 -15
- package/reference/schemas/generated.d.ts +4 -0
- package/reference/schemas/runtime-models.schema.json +5 -0
- package/reference/skill-metadata.md +4 -4
- package/reference/skill-placeholders.md +2 -2
- package/scripts/build-skills.cjs +146 -0
- package/scripts/generate-skill-frontmatter.cjs +243 -0
- package/scripts/lib/bandit-router/integration.cjs +38 -0
- package/scripts/lib/install/installer.cjs +133 -1
- package/scripts/lib/manifest/scaffolder.cjs +1 -1
- package/scripts/lib/manifest/schemas/skills.schema.json +1 -1
- package/scripts/lib/manifest/skills.json +1 -1
- package/scripts/lib/new-addendum.cjs +1 -1
- package/scripts/skill-templates/README.md +90 -0
- package/scripts/skill-templates/add-backlog/SKILL.md +48 -0
- package/scripts/skill-templates/analyze-dependencies/SKILL.md +95 -0
- package/scripts/skill-templates/apply-reflections/SKILL.md +109 -0
- package/scripts/skill-templates/apply-reflections/apply-reflections-procedure.md +170 -0
- package/scripts/skill-templates/audit/SKILL.md +79 -0
- package/scripts/skill-templates/bandit-reset/SKILL.md +91 -0
- package/scripts/skill-templates/bandit-status/SKILL.md +94 -0
- package/scripts/skill-templates/benchmark/SKILL.md +65 -0
- package/scripts/skill-templates/bootstrap-ds/SKILL.md +43 -0
- package/scripts/skill-templates/brief/SKILL.md +145 -0
- package/scripts/skill-templates/budget/SKILL.md +45 -0
- package/scripts/skill-templates/cache-manager/SKILL.md +66 -0
- package/scripts/skill-templates/cache-manager/cache-policy.md +126 -0
- package/scripts/skill-templates/check-update/SKILL.md +98 -0
- package/scripts/skill-templates/compare/SKILL.md +82 -0
- package/scripts/skill-templates/compare/compare-rubric.md +171 -0
- package/scripts/skill-templates/complete-cycle/SKILL.md +81 -0
- package/scripts/skill-templates/connections/SKILL.md +71 -0
- package/scripts/skill-templates/connections/connections-onboarding.md +608 -0
- package/scripts/skill-templates/context/SKILL.md +137 -0
- package/scripts/skill-templates/continue/SKILL.md +24 -0
- package/scripts/skill-templates/darkmode/SKILL.md +76 -0
- package/scripts/skill-templates/darkmode/darkmode-audit-procedure.md +258 -0
- package/scripts/skill-templates/debug/SKILL.md +41 -0
- package/scripts/skill-templates/debug/debug-feedback-loops.md +119 -0
- package/scripts/skill-templates/design/SKILL.md +118 -0
- package/scripts/skill-templates/design/design-procedure.md +304 -0
- package/scripts/skill-templates/discuss/SKILL.md +96 -0
- package/scripts/skill-templates/do/SKILL.md +45 -0
- package/scripts/skill-templates/explore/SKILL.md +118 -0
- package/scripts/skill-templates/explore/explore-procedure.md +267 -0
- package/scripts/skill-templates/export/SKILL.md +30 -0
- package/scripts/skill-templates/extract-learnings/SKILL.md +114 -0
- package/scripts/skill-templates/fast/SKILL.md +91 -0
- package/scripts/skill-templates/figma-extract/SKILL.md +64 -0
- package/scripts/skill-templates/figma-write/SKILL.md +50 -0
- package/scripts/skill-templates/graphify/SKILL.md +49 -0
- package/scripts/skill-templates/health/SKILL.md +99 -0
- package/scripts/skill-templates/health/health-mcp-detection.md +44 -0
- package/scripts/skill-templates/health/health-skill-length-report.md +69 -0
- package/scripts/skill-templates/help/SKILL.md +60 -0
- package/scripts/skill-templates/instinct/SKILL.md +111 -0
- package/scripts/skill-templates/list-assumptions/SKILL.md +61 -0
- package/scripts/skill-templates/list-pins/SKILL.md +27 -0
- package/scripts/skill-templates/live/SKILL.md +98 -0
- package/scripts/skill-templates/locale/SKILL.md +51 -0
- package/scripts/skill-templates/map/SKILL.md +89 -0
- package/scripts/skill-templates/migrate/SKILL.md +70 -0
- package/scripts/skill-templates/migrate-context/SKILL.md +123 -0
- package/scripts/skill-templates/new-addendum/SKILL.md +81 -0
- package/scripts/skill-templates/new-cycle/SKILL.md +37 -0
- package/scripts/skill-templates/new-project/SKILL.md +53 -0
- package/scripts/skill-templates/new-skill/SKILL.md +90 -0
- package/scripts/skill-templates/next/SKILL.md +68 -0
- package/scripts/skill-templates/note/SKILL.md +48 -0
- package/scripts/skill-templates/openrouter-status/SKILL.md +86 -0
- package/scripts/skill-templates/optimize/SKILL.md +97 -0
- package/scripts/skill-templates/override/SKILL.md +86 -0
- package/scripts/skill-templates/paper-write/SKILL.md +54 -0
- package/scripts/skill-templates/pause/SKILL.md +77 -0
- package/scripts/skill-templates/peer-cli-add/SKILL.md +88 -0
- package/scripts/skill-templates/peer-cli-add/peer-cli-protocol.md +161 -0
- package/scripts/skill-templates/peer-cli-customize/SKILL.md +89 -0
- package/scripts/skill-templates/peers/SKILL.md +96 -0
- package/scripts/skill-templates/pencil-write/SKILL.md +54 -0
- package/scripts/skill-templates/pin/SKILL.md +37 -0
- package/scripts/skill-templates/plan/SKILL.md +105 -0
- package/scripts/skill-templates/plan/plan-procedure.md +278 -0
- package/scripts/skill-templates/plant-seed/SKILL.md +48 -0
- package/scripts/skill-templates/pr-branch/SKILL.md +32 -0
- package/scripts/skill-templates/progress/SKILL.md +107 -0
- package/scripts/skill-templates/quality-gate/SKILL.md +90 -0
- package/scripts/skill-templates/quality-gate/threat-modeling.md +101 -0
- package/scripts/skill-templates/quick/SKILL.md +44 -0
- package/scripts/skill-templates/reapply-patches/SKILL.md +32 -0
- package/scripts/skill-templates/recall/SKILL.md +75 -0
- package/scripts/skill-templates/reflect/SKILL.md +85 -0
- package/scripts/skill-templates/reflect/procedures/capability-gap-scan.md +119 -0
- package/scripts/skill-templates/report-issue/SKILL.md +53 -0
- package/scripts/skill-templates/report-issue/report-issue-procedure.md +119 -0
- package/scripts/skill-templates/resume/SKILL.md +93 -0
- package/scripts/skill-templates/review-backlog/SKILL.md +46 -0
- package/scripts/skill-templates/review-decisions/SKILL.md +42 -0
- package/scripts/skill-templates/roi/SKILL.md +54 -0
- package/scripts/skill-templates/rollout-status/SKILL.md +35 -0
- package/scripts/skill-templates/router/SKILL.md +89 -0
- package/scripts/skill-templates/router/capability-gap-emitter.md +65 -0
- package/scripts/skill-templates/router/router-pick-emitter.md +78 -0
- package/scripts/skill-templates/router/router-rules.md +84 -0
- package/scripts/skill-templates/settings/SKILL.md +87 -0
- package/scripts/skill-templates/ship/SKILL.md +48 -0
- package/scripts/skill-templates/sketch/SKILL.md +78 -0
- package/scripts/skill-templates/sketch-wrap-up/SKILL.md +92 -0
- package/scripts/skill-templates/skill-manifest/SKILL.md +79 -0
- package/scripts/skill-templates/spike/SKILL.md +67 -0
- package/scripts/skill-templates/spike-wrap-up/SKILL.md +86 -0
- package/scripts/skill-templates/start/SKILL.md +67 -0
- package/scripts/skill-templates/start/start-procedure.md +115 -0
- package/scripts/skill-templates/state/SKILL.md +106 -0
- package/scripts/skill-templates/stats/SKILL.md +51 -0
- package/scripts/skill-templates/style/SKILL.md +71 -0
- package/scripts/skill-templates/style/style-doc-procedure.md +150 -0
- package/scripts/skill-templates/synthesize/SKILL.md +94 -0
- package/scripts/skill-templates/timeline/SKILL.md +66 -0
- package/scripts/skill-templates/todo/SKILL.md +64 -0
- package/scripts/skill-templates/turn-closeout/SKILL.md +95 -0
- package/scripts/skill-templates/undo/SKILL.md +31 -0
- package/scripts/skill-templates/unlock-decision/SKILL.md +54 -0
- package/scripts/skill-templates/unpin/SKILL.md +31 -0
- package/scripts/skill-templates/update/SKILL.md +56 -0
- package/scripts/skill-templates/using-gdd/SKILL.md +78 -0
- package/scripts/skill-templates/verify/SKILL.md +113 -0
- package/scripts/skill-templates/verify/verify-procedure.md +511 -0
- package/scripts/skill-templates/warm-cache/SKILL.md +81 -0
- package/scripts/skill-templates/watch-authorities/SKILL.md +82 -0
- package/scripts/skill-templates/zoom-out/SKILL.md +26 -0
- package/sdk/cli/commands/build.ts +2 -2
- package/sdk/cli/index.js +2 -2
- package/sdk/cli/index.ts +1 -1
- package/skills/README.md +22 -14
- package/skills/help/SKILL.md +28 -55
- package/skills/new-skill/SKILL.md +5 -5
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-state
|
|
3
|
+
description: "Query, recover, or roll back the Phase 57 SQLite state backbone. Use when you need to inspect the decisions/blockers/plans tables with a raw SELECT, rebuild a corrupt state.sqlite from the markdown STATE.md, or revert to the markdown-only source of truth by removing state.sqlite. Activates for requests involving querying the SQLite state database, recovering from SQLite corruption, or reverting the migration (demigrate)."
|
|
4
|
+
argument-hint: "<query \"<sql>\" | recover | demigrate>"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
tools: Read, Bash, Grep, Glob
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# {{command_prefix}}state
|
|
10
|
+
|
|
11
|
+
The Phase 57 SQLite state backbone is opt-in (`--migrate-state`) and fully reversible.
|
|
12
|
+
Markdown `.design/STATE.md` is always the human-editable SoT; SQLite is a faster query
|
|
13
|
+
layer derived from it. This skill exposes three subcommands for operating on that layer.
|
|
14
|
+
|
|
15
|
+
## Subcommands
|
|
16
|
+
|
|
17
|
+
| Subcommand | What it does |
|
|
18
|
+
|---|---|
|
|
19
|
+
| `{{command_prefix}}state query "<sql>"` | Run a read-only SELECT against `.design/state.sqlite`. |
|
|
20
|
+
| `{{command_prefix}}state recover` | Rotate the current sqlite to a `.bak` and rebuild from markdown. |
|
|
21
|
+
| `{{command_prefix}}state demigrate` | Remove `.design/state.sqlite`; markdown becomes the SoT again. |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## query
|
|
26
|
+
|
|
27
|
+
Execute a read-only SELECT against the state database.
|
|
28
|
+
|
|
29
|
+
The engine opens the file with `readonly:true` so all writes are rejected at the
|
|
30
|
+
engine level. A first-token denylist (Set membership, no regex) additionally blocks
|
|
31
|
+
DROP, DELETE, UPDATE, INSERT, ALTER, ATTACH, CREATE, PRAGMA, VACUUM, ANALYZE,
|
|
32
|
+
REINDEX, and REPLACE before the connection is opened.
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
node -e '
|
|
36
|
+
const qs = require("./scripts/lib/state/query-surface.cjs");
|
|
37
|
+
const result = qs.query(process.argv[1], { projectRoot: process.cwd() });
|
|
38
|
+
console.log(JSON.stringify(result, null, 2));
|
|
39
|
+
' "<sql>"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Outputs `{ rows: [...], backend: "sqlite" }` on success, or
|
|
43
|
+
`{ degraded: true, message: "..." }` when SQLite is not active.
|
|
44
|
+
|
|
45
|
+
Degrades gracefully (no throw) when `BACKEND==='markdown'` or when
|
|
46
|
+
`.design/state.sqlite` has not been created yet (run `--migrate-state` first).
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## recover
|
|
51
|
+
|
|
52
|
+
Rotate the current (possibly corrupt) `.design/state.sqlite` to `.bak.0`, then
|
|
53
|
+
rebuild a fresh database from the markdown `.design/STATE.md` using
|
|
54
|
+
`migrate-to-sqlite.cjs` in force mode. Runs `PRAGMA integrity_check` on the
|
|
55
|
+
result and reports the outcome.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
node -e '
|
|
59
|
+
const qs = require("./scripts/lib/state/query-surface.cjs");
|
|
60
|
+
const result = qs.recover({ projectRoot: process.cwd() });
|
|
61
|
+
console.log(JSON.stringify(result, null, 2));
|
|
62
|
+
'
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Outputs `{ recovered: true, integrity: true, message: "..." }` on success.
|
|
66
|
+
|
|
67
|
+
Backup rotation keeps at most 10 files (`.bak.0` through `.bak.9`). The oldest
|
|
68
|
+
backup is overwritten when the cap is reached.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## demigrate
|
|
73
|
+
|
|
74
|
+
Remove `.design/state.sqlite` so the markdown `STATE.md` becomes the SoT again.
|
|
75
|
+
Idempotent: if the file does not exist, returns a clear no-op message without error.
|
|
76
|
+
A backup is taken in `.bak.0` before removal.
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
node -e '
|
|
80
|
+
const qs = require("./scripts/lib/state/query-surface.cjs");
|
|
81
|
+
const result = qs.demigrate({ projectRoot: process.cwd() });
|
|
82
|
+
console.log(JSON.stringify(result, null, 2));
|
|
83
|
+
'
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Outputs `{ demigrated: true, message: "..." }` when the file was removed, or
|
|
87
|
+
`{ demigrated: false, message: "..." }` when it was already absent (no-op).
|
|
88
|
+
|
|
89
|
+
To re-enable SQLite after a demigrate, run `--migrate-state` again.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Key design decisions
|
|
94
|
+
|
|
95
|
+
- **Markdown is always the SoT.** SQLite is opt-in via `--migrate-state` and
|
|
96
|
+
reversible via `demigrate`. The markdown file is never silently overwritten.
|
|
97
|
+
- **Read-only queries only.** The `query` subcommand enforces SELECT-only via both
|
|
98
|
+
the engine (`readonly:true`) and a defense-in-depth denylist. No writes
|
|
99
|
+
are possible through this skill.
|
|
100
|
+
- **Backup rotation cap.** `rotateBak` shifts `.bak.0..8` up by one index and caps
|
|
101
|
+
at `.bak.9` (10 files total). The oldest backup is overwritten automatically.
|
|
102
|
+
- **Graceful degradation.** All subcommands return a clear `{ degraded, message }`
|
|
103
|
+
object (no throw) when `better-sqlite3` is not installed or when
|
|
104
|
+
`GDD_STATE_BACKEND=markdown` is set.
|
|
105
|
+
|
|
106
|
+
## STATE COMPLETE
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-stats
|
|
3
|
+
description: "Cycle stats - decisions made, tasks completed, commits, timeline, git metrics."
|
|
4
|
+
tools: Read, Bash
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# {{command_prefix}}stats
|
|
9
|
+
|
|
10
|
+
**Role:** Print cycle metrics.
|
|
11
|
+
|
|
12
|
+
## Step 1 - Read state
|
|
13
|
+
|
|
14
|
+
Read `.design/STATE.md`. Extract:
|
|
15
|
+
- `cycle:` and `started_at` (or per-cycle start date if present in CYCLES.md)
|
|
16
|
+
- D-XX count under `<decisions>`
|
|
17
|
+
|
|
18
|
+
## Step 2 - Collect git metrics
|
|
19
|
+
|
|
20
|
+
Let `<since>` = cycle start date (fallback to STATE.md `started_at`).
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
git log --oneline --since="<since>" | wc -l # commits
|
|
24
|
+
git diff --stat HEAD~N HEAD # files changed since cycle start
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If git unavailable, print `git: unavailable` and skip git metrics.
|
|
28
|
+
|
|
29
|
+
## Step 3 - Count todos
|
|
30
|
+
|
|
31
|
+
Read `.design/TODO.md` if present:
|
|
32
|
+
- pending: count `- [ ]`
|
|
33
|
+
- in-progress: count `- [-]`
|
|
34
|
+
- done: count `- [x]`
|
|
35
|
+
- group pending by P0/P1/P2/P3 section
|
|
36
|
+
|
|
37
|
+
## Step 4 - Output
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
━━━ Cycle stats ━━━
|
|
41
|
+
Cycle: cycle-1 Started: 2026-04-18
|
|
42
|
+
Decisions made: 12 (D-01..D-12)
|
|
43
|
+
Tasks completed: 8 / 10
|
|
44
|
+
Git commits: 23
|
|
45
|
+
Files changed: 47
|
|
46
|
+
Open todos: 3 (P0: 1, P1: 2, P2: 0, P3: 0)
|
|
47
|
+
Agents spawned: — (no task log)
|
|
48
|
+
━━━━━━━━━━━━━━━━━━
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## STATS COMPLETE
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-style
|
|
3
|
+
description: "Generate a component handoff doc at `.design/DESIGN-STYLE-<ComponentName>.md` by dispatching the `design-doc-writer` agent in one of two modes: post-pipeline (uses `DESIGN-SUMMARY.md`) or pre-pipeline fallback (uses `DESIGN.md` + source). Use when the user wants a single-component spec covering tokens, states, and AI-slop detection. Invoke with a ComponentName, or with no argument to list available components."
|
|
4
|
+
argument-hint: "[ComponentName]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# gdd-style - Component Handoff Doc Generator
|
|
9
|
+
|
|
10
|
+
Generates a per-component style spec at `.design/DESIGN-STYLE-[ComponentName].md`. This is a **standalone command**, not a pipeline stage.
|
|
11
|
+
|
|
12
|
+
For the full mode-detection logic, source-resolution fallback chain (10 paths), agent-spawn payload, and STYL-05 section spec, see `./style-doc-procedure.md`. For the cross-skill output discipline (artifact prefix, completion marker, MUST-NOT-write list), see `../../reference/shared-preamble.md#output-contract-reminders`. For the raw-hex audit signal used in Token Semantic Health Score, see `../../reference/shared-preamble.md#token-first-reasoning`.
|
|
13
|
+
|
|
14
|
+
Output artifact naming: `.design/DESIGN-STYLE-[ComponentName].md` - Title-cased component name, one file per invocation.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Scope
|
|
19
|
+
|
|
20
|
+
This command is **additive and non-destructive**:
|
|
21
|
+
|
|
22
|
+
- It is NOT a pipeline stage - no `.design/STATE.md` read or write contract.
|
|
23
|
+
- Output lives in the `DESIGN-STYLE-*.md` namespace - distinct from the pipeline namespace (`DESIGN.md`, `DESIGN-CONTEXT.md`, `DESIGN-PLAN.md`, `DESIGN-SUMMARY.md`, `DESIGN-VERIFICATION.md`).
|
|
24
|
+
- It does not modify any pipeline artifact.
|
|
25
|
+
- It does not invoke the pipeline router.
|
|
26
|
+
- One doc per invocation - no batch mode in v3.
|
|
27
|
+
|
|
28
|
+
This separation is a pre-roadmap decision recorded in `.planning/STATE.md`: utility commands use distinct prefixes (`DESIGN-STYLE-[Component].md`); the pipeline owns the `DESIGN-*.md` namespace without qualifiers.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Workflow
|
|
33
|
+
|
|
34
|
+
1. **Argument check** - if `$ARGUMENTS` is empty, enter list mode (see `./style-doc-procedure.md#component-source-resolution`); display available components from `src/components/` + `.design/tasks/`, then exit.
|
|
35
|
+
2. **Mode detect** - `DESIGN-SUMMARY.md` exists → post-pipeline; else `DESIGN.md` exists → pre-pipeline; else abort with a "run /get-design-done scan first" message. Full decision tree at `./style-doc-procedure.md#mode-detection`.
|
|
36
|
+
3. **Source resolve** - search the 10-path fallback chain for a file matching the ComponentName. On zero matches: abort. On multiple matches: prompt the user to disambiguate.
|
|
37
|
+
4. **Agent spawn** - dispatch `design-doc-writer` with the mode-specific `<required_reading>` block and the STYL-05 section list. The full Task payload + STYL-05 spec live in `./style-doc-procedure.md#agent-spawn-payload`.
|
|
38
|
+
5. **Confirm + report** - after the agent emits `## DOC COMPLETE`, verify the output path exists and report success.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Constraints
|
|
43
|
+
|
|
44
|
+
This command MUST NOT (per `../../reference/shared-preamble.md#output-contract-reminders`):
|
|
45
|
+
|
|
46
|
+
- Write to `DESIGN.md`, `DESIGN-SUMMARY.md`, `DESIGN-VERIFICATION.md`, `DESIGN-CONTEXT.md`, or `.design/STATE.md`
|
|
47
|
+
- Invoke the pipeline router (this command is a leaf invocation, not a pipeline stage)
|
|
48
|
+
- Require Figma or Refero MCPs - v3 uses only local source files and `.design/` artifacts (MCP enrichment is reserved for a future version)
|
|
49
|
+
- Produce more than one output file per invocation - no batch mode in v3
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Examples
|
|
54
|
+
|
|
55
|
+
**Example 1: Named component**
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
/get-design-done style Button
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Resolves `src/components/Button.tsx`, detects post-pipeline mode (DESIGN-SUMMARY.md exists), spawns `design-doc-writer` with `pipeline_complete: true`, writes `.design/DESIGN-STYLE-Button.md`.
|
|
62
|
+
|
|
63
|
+
**Example 2: No argument (list mode)**
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
/get-design-done style
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Globs component files and prompts the user to specify a ComponentName. Exits without generating any file. See `./style-doc-procedure.md#component-source-resolution` for the full glob path list.
|
|
70
|
+
|
|
71
|
+
## STYLE COMPLETE
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: style-doc-procedure
|
|
3
|
+
type: meta-rules
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
phase: 28.5
|
|
6
|
+
tags: [style, handoff, component-spec, doc-writer, procedure, extracted]
|
|
7
|
+
last_updated: 2026-05-18
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Source: extracted from `skills/style/SKILL.md` (Phase 28.5 rework - D-10 extract-then-link).
|
|
11
|
+
The skill's essential routing + mode-detection stays in `../skills/style/SKILL.md`; this file
|
|
12
|
+
holds the agent-spawn payload, source-resolution paths, and the per-section spec the
|
|
13
|
+
`design-doc-writer` agent produces. See `./shared-preamble.md#output-contract-reminders` for
|
|
14
|
+
the cross-skill output discipline.
|
|
15
|
+
|
|
16
|
+
# Style Doc Procedure
|
|
17
|
+
|
|
18
|
+
Detailed procedure for the `gdd-style` standalone command - companion to
|
|
19
|
+
`../skills/style/SKILL.md`. Read this file when executing the agent-spawn step (Step 4 in the
|
|
20
|
+
skill) or when wiring the source-resolution fallback chain. The SKILL.md keeps the essential
|
|
21
|
+
mode detection + decision tree; this file holds the deep methodology.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Mode Detection
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
If .design/DESIGN-SUMMARY.md exists:
|
|
29
|
+
mode = post-pipeline (STYL-03)
|
|
30
|
+
pipeline_complete = true
|
|
31
|
+
|
|
32
|
+
Elif .design/DESIGN.md exists:
|
|
33
|
+
mode = pre-pipeline (STYL-04)
|
|
34
|
+
pipeline_complete = false
|
|
35
|
+
|
|
36
|
+
Else:
|
|
37
|
+
Abort: "No .design/ artifacts found. Run /get-design-done scan first to initialize."
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The mode controls which files are supplied to the agent in `<required_reading>`.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Component Source Resolution
|
|
45
|
+
|
|
46
|
+
Search for a source file matching the provided ComponentName (case-insensitive):
|
|
47
|
+
|
|
48
|
+
1. `src/components/[ComponentName].tsx`
|
|
49
|
+
2. `src/components/[ComponentName].jsx`
|
|
50
|
+
3. `src/components/[ComponentName].vue`
|
|
51
|
+
4. `src/components/[ComponentName].svelte`
|
|
52
|
+
5. `src/**/[ComponentName]/index.tsx`
|
|
53
|
+
6. `src/**/[ComponentName]/index.jsx`
|
|
54
|
+
7. `components/[ComponentName].tsx`
|
|
55
|
+
8. `components/[ComponentName].jsx`
|
|
56
|
+
9. `components/[ComponentName].vue`
|
|
57
|
+
10. `components/[ComponentName].svelte`
|
|
58
|
+
|
|
59
|
+
**If multiple matches found:** Present the list to the user and prompt them to specify the exact path. Do not proceed until a single file is selected.
|
|
60
|
+
|
|
61
|
+
**If zero matches found:** Abort with: "Component [ComponentName] not found in expected paths. Verify the name matches a file in src/components/ or components/."
|
|
62
|
+
|
|
63
|
+
When `$ARGUMENTS` is empty, the skill enters **list mode** - glob the same source roots, also list task names from `.design/tasks/*.md` (if directory exists), display the list, and prompt the user to specify a ComponentName. Exit without generating any file.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Agent Spawn Payload
|
|
68
|
+
|
|
69
|
+
Once mode and source path are resolved, spawn the `design-doc-writer` agent:
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Task("design-doc-writer", """
|
|
73
|
+
<required_reading>
|
|
74
|
+
[If pipeline_complete=true:]
|
|
75
|
+
@.design/STATE.md
|
|
76
|
+
@.design/DESIGN-SUMMARY.md
|
|
77
|
+
@.design/DESIGN-CONTEXT.md
|
|
78
|
+
@<component_source_path>
|
|
79
|
+
[Else (pipeline_complete=false):]
|
|
80
|
+
@.design/DESIGN.md
|
|
81
|
+
@<component_source_path>
|
|
82
|
+
@reference/anti-patterns.md
|
|
83
|
+
@reference/audit-scoring.md
|
|
84
|
+
</required_reading>
|
|
85
|
+
|
|
86
|
+
Generate a handoff spec for component <ComponentName>.
|
|
87
|
+
|
|
88
|
+
Context:
|
|
89
|
+
component_name: <ComponentName>
|
|
90
|
+
component_source_path: <resolved absolute path>
|
|
91
|
+
pipeline_complete: <true|false>
|
|
92
|
+
output_path: .design/DESIGN-STYLE-<ComponentName>.md
|
|
93
|
+
|
|
94
|
+
Produce the doc per STYL-05 sections:
|
|
95
|
+
- Spacing Tokens (used by component)
|
|
96
|
+
- Color Tokens (used by component)
|
|
97
|
+
- Typography Scale (used by component)
|
|
98
|
+
- Component States (default, hover, focus, active, disabled, etc.)
|
|
99
|
+
- Token Semantic Health Score (raw-hex-ratio formula — see ./shared-preamble.md#token-first-reasoning)
|
|
100
|
+
- AI-Slop Detection (using ./anti-patterns.md BAN/SLOP patterns)
|
|
101
|
+
[If pipeline_complete=true:]
|
|
102
|
+
- Decisions Applied (D-XX from DESIGN-SUMMARY.md that mention this component)
|
|
103
|
+
|
|
104
|
+
Emit ## DOC COMPLETE when the output file is written.
|
|
105
|
+
""")
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
After the agent emits `## DOC COMPLETE`, confirm the file exists at `output_path` and report success to the user.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## STYL-05 Section Spec
|
|
113
|
+
|
|
114
|
+
Each generated `.design/DESIGN-STYLE-[ComponentName].md` SHOULD contain (in this order):
|
|
115
|
+
|
|
116
|
+
1. **Spacing Tokens** - every spacing token the component uses (paddings, gaps, margins). Cross-reference `./composition.md` for the 4 px / 8 px modular scale discipline.
|
|
117
|
+
2. **Color Tokens** - every color token the component uses (background, foreground, border, focus ring, state-overlays). Cross-reference `./palette-catalog.md` for naming convention and `./shared-preamble.md#token-first-reasoning` for the raw-hex audit threshold.
|
|
118
|
+
3. **Typography Scale** - type ramps the component reaches into (label, body, code, etc.) with size + line-height + weight. Cross-reference `./typography.md`.
|
|
119
|
+
4. **Component States** - default, hover, focus, active, disabled, loading, error. Each row: token diff vs default.
|
|
120
|
+
5. **Token Semantic Health Score** - raw-hex ratio = `raw_hex_count / total_color_uses`. Healthy < 5 %.
|
|
121
|
+
6. **AI-Slop Detection** - apply `./anti-patterns.md` `BAN-*` and `SLOP-*` patterns to the component source. List violations.
|
|
122
|
+
7. **Decisions Applied** (post-pipeline only) - D-XX entries from `DESIGN-SUMMARY.md` that name or describe this component.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Examples
|
|
127
|
+
|
|
128
|
+
**Example 1: Named component**
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
/get-design-done style Button
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
- Resolves component: `src/components/Button.tsx`
|
|
135
|
+
- Detects mode: DESIGN-SUMMARY.md exists → post-pipeline
|
|
136
|
+
- Spawns `design-doc-writer` with `pipeline_complete: true`
|
|
137
|
+
- Output: `.design/DESIGN-STYLE-Button.md`
|
|
138
|
+
|
|
139
|
+
**Example 2: No argument (list mode)**
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
/get-design-done style
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
- Globs component files from `src/components/`
|
|
146
|
+
- Displays available components and exits without generating any file.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
*Imported by: `../skills/style/SKILL.md`. Maintained as part of Phase 28.5 (Bucket 2 rework).*
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: synthesize
|
|
3
|
+
description: "Streaming synthesizer - collapses N parallel-agent markdown outputs into one compact merged summary via a single Haiku 4.5 call. Invoked inline by orchestrators (skills/map/, skills/explore/, skills/plan/) after parallel spawns return. Not user-invocable."
|
|
4
|
+
tools: Read, Task
|
|
5
|
+
user-invocable: false
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
@reference/shared-preamble.md
|
|
10
|
+
|
|
11
|
+
# synthesize
|
|
12
|
+
|
|
13
|
+
## Role
|
|
14
|
+
|
|
15
|
+
Reusable streaming synthesizer. You receive N markdown strings (parallel-agent outputs) plus a directive, emit one compact merged output in the format the directive specifies. Inline-invoked - no Task() spawn overhead; thin Haiku 4.5 merge call wrapped in a skill.
|
|
16
|
+
|
|
17
|
+
You are not an orchestrator, not an auditor, not a second-pass reviewer. You preserve every distinct signal from the inputs, consolidate duplicates with source tags, and return a single merged artifact. The invoking orchestrator writes the result to disk; you do not touch the filesystem.
|
|
18
|
+
|
|
19
|
+
## When to use
|
|
20
|
+
|
|
21
|
+
**Use synthesize when:**
|
|
22
|
+
- Parallel-mapper / parallel-researcher produced N overlapping outputs and main-context doesn't need them verbatim.
|
|
23
|
+
- The downstream consumer wants one cross-cutting summary (e.g., `.design/DESIGN-PATTERNS.md` merged from 5 per-concern mappers).
|
|
24
|
+
- The per-agent output files remain on disk as drill-down - the synthesized artifact becomes the compact canonical input.
|
|
25
|
+
|
|
26
|
+
**Do NOT use synthesize when:**
|
|
27
|
+
- A single-agent flow produced the output (nothing to merge).
|
|
28
|
+
- A verify/check-mode flow returned a structured gap list (merging breaks the gap-id → severity → location mapping).
|
|
29
|
+
- A downstream consumer needs every byte verbatim for grep (e.g., decision-wiring checker that matches exact D-XX anchors).
|
|
30
|
+
|
|
31
|
+
## Input Contract
|
|
32
|
+
|
|
33
|
+
The invoking orchestrator passes three fields:
|
|
34
|
+
|
|
35
|
+
- `outputs: string[]` - N labeled strings, each pre-labeled with `=== from <agent-name> ===\n<content>` so the merge call can trace per-signal provenance.
|
|
36
|
+
- `directive: string` - merge instruction (format, target length, which headers to preserve, how to tag sources). Default when empty: `"produce a single merged summary preserving all distinct signals, grouped by natural section headers"`.
|
|
37
|
+
- `output_shape: "markdown" | "json"` - controls the output format. Defaults to `"markdown"`.
|
|
38
|
+
|
|
39
|
+
## Implementation
|
|
40
|
+
|
|
41
|
+
Single Haiku 4.5 call with this exact merge-prompt template:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
You have received {N} outputs from parallel agents. Each output is labeled with its source.
|
|
45
|
+
|
|
46
|
+
Directive: {directive}
|
|
47
|
+
|
|
48
|
+
Outputs:
|
|
49
|
+
{each labeled with === from <agent-name> === and its full content}
|
|
50
|
+
|
|
51
|
+
Produce the merged result in the format specified by the directive.
|
|
52
|
+
Preserve every distinct signal — do NOT drop content. Consolidate duplicates
|
|
53
|
+
(same finding mentioned by multiple agents) into a single entry with the
|
|
54
|
+
source-agent names listed. Keep section headers intact when the directive
|
|
55
|
+
requests section preservation.
|
|
56
|
+
|
|
57
|
+
Emit ONLY the merged output — no preamble, no meta-commentary.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Tier is hard-coded to `haiku` per D-14. Orchestrators should **not** re-route this to Sonnet - the merge is structure-preserving, not generative, and Haiku handles it without quality loss.
|
|
61
|
+
|
|
62
|
+
## Output Contract
|
|
63
|
+
|
|
64
|
+
- **Markdown shape (`output_shape: "markdown"`)** → emit the merged markdown inline, then `## SYNTHESIS COMPLETE` on its own final line. No code fence wrapping the merged output.
|
|
65
|
+
- **JSON shape (`output_shape: "json"`)** → emit the merged JSON object inline (no fence), then `## SYNTHESIS COMPLETE` on its own final line.
|
|
66
|
+
|
|
67
|
+
The orchestrator is responsible for:
|
|
68
|
+
- Stripping the `## SYNTHESIS COMPLETE` marker before writing to the target file.
|
|
69
|
+
- Persisting the merged artifact to disk (e.g., `.design/DESIGN-PATTERNS.md`).
|
|
70
|
+
- Keeping per-agent files on disk as drill-down evidence.
|
|
71
|
+
|
|
72
|
+
## Cost and Tier
|
|
73
|
+
|
|
74
|
+
Hard-coded to Haiku 4.5 per D-14. `budget.json.tier_overrides.synthesize` can override. Typical cost per invocation: $0.002–$0.02 - dominated by input tokens (5 × ~1500-line mapper outputs ≈ 7.5k input tokens, merge output ≈ 1k output tokens).
|
|
75
|
+
|
|
76
|
+
## Failure Modes
|
|
77
|
+
|
|
78
|
+
- **Empty `outputs: []`** → emit an empty string followed immediately by `## SYNTHESIS COMPLETE`. Do NOT error - the orchestrator handles the empty case (e.g., `--only <name>` in map skipped the parallel dispatch).
|
|
79
|
+
- **Empty `directive`** → apply the default directive: `"produce a single merged summary preserving all distinct signals, grouped by natural section headers"`.
|
|
80
|
+
- **Haiku call fails** → fall back to naive concatenation with `\n---\n` separators between each `outputs[i]` entry, emit the fallback as the merged result, and log a telemetry warning (`synthesize_fallback: true`) so Phase 11 reflector can measure the failure rate. Always emit `## SYNTHESIS COMPLETE` after the fallback body.
|
|
81
|
+
- **`output_shape` is neither `markdown` nor `json`** → treat as `markdown` (default) and proceed.
|
|
82
|
+
|
|
83
|
+
## Non-Goals
|
|
84
|
+
|
|
85
|
+
- Does **NOT** spawn Task() agents. Synthesize is a thin skill, not an orchestrator.
|
|
86
|
+
- Does **NOT** write files. The invoking orchestrator owns the target path.
|
|
87
|
+
- Does **NOT** validate directive semantics. If the directive is nonsensical, the merge output will reflect that - garbage in, garbage out is acceptable for an internal-use skill.
|
|
88
|
+
- Does **NOT** re-rank or re-score the inputs. Preservation is the contract.
|
|
89
|
+
|
|
90
|
+
## Completion Marker
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
## SYNTHESIS COMPLETE
|
|
94
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-timeline
|
|
3
|
+
description: "Narrative retrospective across cycles: reads EXPERIENCE.md files and git log to produce a timeline view."
|
|
4
|
+
argument-hint: "[<cycle-N> | <from>-<to> | all]"
|
|
5
|
+
tools: Read, Bash, Glob
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
@reference/retrieval-contract.md
|
|
10
|
+
@reference/cycle-handoff-preamble.md
|
|
11
|
+
|
|
12
|
+
# {{command_prefix}}timeline
|
|
13
|
+
|
|
14
|
+
Generates a narrative retrospective across one or more completed cycles by reading `.design/archive/cycle-N/EXPERIENCE.md` files and correlating with `git log`.
|
|
15
|
+
|
|
16
|
+
## Steps
|
|
17
|
+
|
|
18
|
+
1. **Parse argument**: accepted forms:
|
|
19
|
+
- `cycle-N` or `N` - single cycle
|
|
20
|
+
- `N-M` - inclusive range
|
|
21
|
+
- `all` or no argument - all archived cycles
|
|
22
|
+
|
|
23
|
+
2. **Discover archives**: glob `.design/archive/cycle-*/EXPERIENCE.md`. Sort by cycle number. Filter to requested range.
|
|
24
|
+
|
|
25
|
+
3. **For each cycle archive**:
|
|
26
|
+
a. Read `EXPERIENCE.md` - extract sections: Goal, Decisions made, Learnings graduated, What died, Handoff to next cycle.
|
|
27
|
+
b. Read `DESIGN-SUMMARY.md` (if present) for shipped artifacts list.
|
|
28
|
+
c. Run:
|
|
29
|
+
```bash
|
|
30
|
+
git log --oneline --after="<cycle start date>" --before="<cycle end date>" -- .design/ 2>/dev/null | head -10
|
|
31
|
+
```
|
|
32
|
+
to correlate with commits. Use dates from `EXPERIENCE.md` Opened/Ended headers if present.
|
|
33
|
+
|
|
34
|
+
4. **Print timeline** in this shape:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
## Timeline: Cycle 1 → Cycle 3
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### Cycle 1 — <goal headline>
|
|
42
|
+
|
|
43
|
+
**Opened with**: <first meaningful action>
|
|
44
|
+
**Key decisions**: <D-XX summary>, <D-XX summary>
|
|
45
|
+
**Surprises**: <what was unexpected>
|
|
46
|
+
**What we'd do differently**: <retrospective note>
|
|
47
|
+
**Shipped**: <artifact list or "see DESIGN-SUMMARY.md">
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### Cycle 2 — <goal headline>
|
|
52
|
+
...
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
5. **No archives found**: print
|
|
56
|
+
```
|
|
57
|
+
No archived cycles found in .design/archive/.
|
|
58
|
+
Complete a cycle first with {{command_prefix}}complete-cycle.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Do Not
|
|
62
|
+
|
|
63
|
+
- Do not modify any file.
|
|
64
|
+
- Do not run git commands that write or stage (only `git log` for read).
|
|
65
|
+
|
|
66
|
+
## TIMELINE COMPLETE
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gdd-todo
|
|
3
|
+
description: "Design backlog - add/list/pick design tasks. Writes to .design/TODO.md."
|
|
4
|
+
argument-hint: "<add|list|pick> [text]"
|
|
5
|
+
tools: Read, Write, AskUserQuestion, mcp__gdd_state__get, mcp__gdd_state__add_decision, mcp__gdd_state__add_must_have
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# {{command_prefix}}todo
|
|
10
|
+
|
|
11
|
+
**Role:** Design todo list. Three subcommands: `add`, `list`, `pick`. Backing store: `.design/TODO.md`. For items that are pipeline-level decisions or must-haves (not free-form backlog), route through the `gdd-state` MCP tools instead - see **Pipeline-linked items** below.
|
|
12
|
+
|
|
13
|
+
## File format
|
|
14
|
+
|
|
15
|
+
```markdown
|
|
16
|
+
# Design Todos
|
|
17
|
+
|
|
18
|
+
## P0 — Blocking
|
|
19
|
+
- [ ] [2026-04-18] Fix contrast ratio on card headers
|
|
20
|
+
|
|
21
|
+
## P1 — High
|
|
22
|
+
- [ ] [2026-04-18] Align Button focus ring with tokens
|
|
23
|
+
|
|
24
|
+
## P2 — Normal
|
|
25
|
+
|
|
26
|
+
## P3 — Nice to have
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Priority is encoded by section, not inline. Status markers: `[ ]` unchecked, `[x]` done, `[-]` `[in-progress]`, `[p]` `[promoted]`.
|
|
30
|
+
|
|
31
|
+
## Subcommands
|
|
32
|
+
|
|
33
|
+
### add [text]
|
|
34
|
+
If text omitted, use `AskUserQuestion`: "What todo item? (include priority P0-P3 if known)". Parse leading `P[0-3]` token from text; default P2. Append under the right section as:
|
|
35
|
+
```
|
|
36
|
+
- [ ] [YYYY-MM-DD] <text without priority token>
|
|
37
|
+
```
|
|
38
|
+
Create TODO.md from the template above if missing.
|
|
39
|
+
|
|
40
|
+
### list
|
|
41
|
+
1. Call `mcp__gdd_state__get` → pipeline-level decisions + must-haves (shown as context at the top).
|
|
42
|
+
2. Read `.design/TODO.md` (file outside the MCP catalog). Print all `- [ ]` and `- [-]` items grouped by priority section, with index numbers.
|
|
43
|
+
|
|
44
|
+
### pick
|
|
45
|
+
Read `.design/TODO.md`. Collect unchecked items. Use `AskUserQuestion` to let the user pick one. Rewrite the chosen line as:
|
|
46
|
+
```
|
|
47
|
+
- [-] [YYYY-MM-DD] [in-progress] <original text>
|
|
48
|
+
```
|
|
49
|
+
Print "Picked: <item>".
|
|
50
|
+
|
|
51
|
+
## Pipeline-linked items
|
|
52
|
+
|
|
53
|
+
When the user promotes a todo to a pipeline decision or must-have, route through MCP instead of TODO.md:
|
|
54
|
+
|
|
55
|
+
- Decision → `mcp__gdd_state__add_decision` with `{ id: "D-XX", text: "...", status: "locked"|"tentative" }`.
|
|
56
|
+
- Must-have → `mcp__gdd_state__add_must_have` with `{ id: "M-XX", text: "...", status: "pending" }`.
|
|
57
|
+
|
|
58
|
+
## Constraints
|
|
59
|
+
|
|
60
|
+
- Do not modify files outside `.design/`.
|
|
61
|
+
- Preserve existing sections and ordering on write.
|
|
62
|
+
- Do not mutate STATE.md directly - use the MCP tools above.
|
|
63
|
+
|
|
64
|
+
## TODO COMPLETE
|