@hegemonart/get-design-done 1.28.0 → 1.28.6

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.
Files changed (98) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +134 -0
  4. package/SKILL.md +1 -1
  5. package/hooks/gdd-decision-injector.js +149 -3
  6. package/package.json +1 -1
  7. package/reference/adr-format.md +96 -0
  8. package/reference/architecture-vocabulary.md +102 -0
  9. package/reference/context-md-format.md +106 -0
  10. package/reference/heuristics.md +84 -0
  11. package/reference/registry.json +29 -1
  12. package/reference/registry.schema.json +1 -1
  13. package/reference/shared-preamble.md +78 -6
  14. package/reference/skill-authoring-contract.md +159 -0
  15. package/scripts/validate-skill-length.cjs +283 -0
  16. package/skills/add-backlog/SKILL.md +1 -0
  17. package/skills/analyze-dependencies/SKILL.md +33 -122
  18. package/skills/apply-reflections/SKILL.md +1 -40
  19. package/skills/apply-reflections/apply-reflections-procedure.md +68 -0
  20. package/skills/audit/SKILL.md +3 -1
  21. package/skills/bandit-status/SKILL.md +31 -66
  22. package/skills/benchmark/SKILL.md +15 -55
  23. package/skills/brief/SKILL.md +12 -1
  24. package/skills/cache-manager/SKILL.md +3 -57
  25. package/skills/cache-manager/cache-policy.md +126 -0
  26. package/skills/check-update/SKILL.md +38 -75
  27. package/skills/compare/SKILL.md +29 -269
  28. package/skills/compare/compare-rubric.md +171 -0
  29. package/skills/complete-cycle/SKILL.md +1 -1
  30. package/skills/connections/SKILL.md +21 -427
  31. package/skills/connections/connections-onboarding.md +417 -0
  32. package/skills/continue/SKILL.md +1 -0
  33. package/skills/darkmode/SKILL.md +32 -287
  34. package/skills/darkmode/darkmode-audit-procedure.md +258 -0
  35. package/skills/debug/SKILL.md +11 -8
  36. package/skills/debug/debug-feedback-loops.md +119 -0
  37. package/skills/design/SKILL.md +27 -245
  38. package/skills/design/design-procedure.md +304 -0
  39. package/skills/discover/SKILL.md +26 -133
  40. package/skills/discover/discover-procedure.md +204 -0
  41. package/skills/discuss/SKILL.md +18 -2
  42. package/skills/explore/SKILL.md +40 -205
  43. package/skills/explore/explore-procedure.md +267 -0
  44. package/skills/fast/SKILL.md +1 -0
  45. package/skills/figma-write/SKILL.md +2 -2
  46. package/skills/health/SKILL.md +11 -33
  47. package/skills/health/health-mcp-detection.md +44 -0
  48. package/skills/health/health-skill-length-report.md +69 -0
  49. package/skills/help/SKILL.md +1 -0
  50. package/skills/list-assumptions/SKILL.md +1 -0
  51. package/skills/map/SKILL.md +8 -31
  52. package/skills/new-cycle/SKILL.md +3 -1
  53. package/skills/new-cycle/milestone-completeness-rubric.md +87 -0
  54. package/skills/next/SKILL.md +1 -0
  55. package/skills/note/SKILL.md +1 -0
  56. package/skills/optimize/SKILL.md +21 -44
  57. package/skills/pause/SKILL.md +1 -0
  58. package/skills/peer-cli-add/SKILL.md +26 -108
  59. package/skills/peer-cli-add/peer-cli-protocol.md +161 -0
  60. package/skills/peer-cli-customize/SKILL.md +22 -42
  61. package/skills/peers/SKILL.md +33 -57
  62. package/skills/plan/SKILL.md +33 -220
  63. package/skills/plan/plan-procedure.md +278 -0
  64. package/skills/plant-seed/SKILL.md +1 -0
  65. package/skills/pr-branch/SKILL.md +1 -0
  66. package/skills/progress/SKILL.md +1 -7
  67. package/skills/quality-gate/SKILL.md +34 -166
  68. package/skills/quality-gate/threat-modeling.md +101 -0
  69. package/skills/quick/SKILL.md +1 -0
  70. package/skills/reapply-patches/SKILL.md +1 -0
  71. package/skills/recall/SKILL.md +1 -0
  72. package/skills/resume/SKILL.md +1 -0
  73. package/skills/review-backlog/SKILL.md +1 -0
  74. package/skills/router/SKILL.md +3 -59
  75. package/skills/router/router-rules.md +84 -0
  76. package/skills/scan/SKILL.md +36 -675
  77. package/skills/scan/scan-procedure.md +731 -0
  78. package/skills/settings/SKILL.md +1 -0
  79. package/skills/ship/SKILL.md +1 -0
  80. package/skills/sketch/SKILL.md +1 -1
  81. package/skills/sketch-wrap-up/SKILL.md +13 -54
  82. package/skills/spike/SKILL.md +1 -1
  83. package/skills/spike-wrap-up/SKILL.md +12 -46
  84. package/skills/start/SKILL.md +13 -112
  85. package/skills/start/start-procedure.md +115 -0
  86. package/skills/stats/SKILL.md +1 -0
  87. package/skills/style/SKILL.md +18 -140
  88. package/skills/style/style-doc-procedure.md +150 -0
  89. package/skills/synthesize/SKILL.md +1 -0
  90. package/skills/timeline/SKILL.md +1 -0
  91. package/skills/todo/SKILL.md +1 -0
  92. package/skills/turn-closeout/SKILL.md +36 -56
  93. package/skills/undo/SKILL.md +1 -0
  94. package/skills/update/SKILL.md +1 -0
  95. package/skills/verify/SKILL.md +42 -457
  96. package/skills/verify/verify-procedure.md +512 -0
  97. package/skills/warm-cache/SKILL.md +3 -35
  98. package/skills/zoom-out/SKILL.md +26 -0
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: get-design-done:style
3
- description: "Generate a component handoff doc (.design/DESIGN-STYLE-[ComponentName].md) from existing pipeline artifacts or source files. Two modes: post-pipeline (uses DESIGN-SUMMARY.md) and pre-pipeline fallback (uses DESIGN.md + source). Invoke with a ComponentName argument, or with no argument to list available components."
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
4
  argument-hint: "[ComponentName]"
5
5
  user-invocable: true
6
6
  ---
@@ -9,6 +9,8 @@ user-invocable: true
9
9
 
10
10
  Generates a per-component style spec at `.design/DESIGN-STYLE-[ComponentName].md`. This is a **standalone command**, not a pipeline stage.
11
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
+
12
14
  Output artifact naming: `.design/DESIGN-STYLE-[ComponentName].md` — Title-cased component name, one file per invocation.
13
15
 
14
16
  ---
@@ -27,134 +29,24 @@ This separation is a pre-roadmap decision recorded in `.planning/STATE.md`: util
27
29
 
28
30
  ---
29
31
 
30
- ## Argument Handling
31
-
32
- **If `$ARGUMENTS` contains a ComponentName** → proceed to Mode Detection with that name.
33
-
34
- **If `$ARGUMENTS` is empty** → do not generate a doc. Instead:
35
-
36
- 1. List available component files by globbing:
37
- - `src/components/*.tsx`
38
- - `src/components/*.jsx`
39
- - `src/**/*.vue`
40
- - `src/**/*.svelte`
41
- - `components/*.tsx`
42
- - `components/*.jsx`
43
- 2. Also list task names from `.design/tasks/*.md` (if directory exists).
44
- 3. Display the list to the user and prompt: "Specify a ComponentName to generate a style spec. Example: `/get-design-done style Button`"
45
- 4. Exit without generating any file.
46
-
47
- ---
48
-
49
- ## Mode Detection
50
-
51
- Before spawning the agent, detect which mode to use:
52
-
53
- ```
54
- If .design/DESIGN-SUMMARY.md exists:
55
- mode = post-pipeline (STYL-03)
56
- pipeline_complete = true
57
-
58
- Elif .design/DESIGN.md exists:
59
- mode = pre-pipeline (STYL-04)
60
- pipeline_complete = false
61
-
62
- Else:
63
- Abort: "No .design/ artifacts found. Run /get-design-done scan first to initialize."
64
- ```
65
-
66
- The mode controls which files are supplied to the agent in `<required_reading>`.
67
-
68
- ---
69
-
70
- ## Component Source Resolution
71
-
72
- Search for a source file matching the provided ComponentName (case-insensitive):
73
-
74
- 1. `src/components/[ComponentName].tsx`
75
- 2. `src/components/[ComponentName].jsx`
76
- 3. `src/components/[ComponentName].vue`
77
- 4. `src/components/[ComponentName].svelte`
78
- 5. `src/**/[ComponentName]/index.tsx`
79
- 6. `src/**/[ComponentName]/index.jsx`
80
- 7. `components/[ComponentName].tsx`
81
- 8. `components/[ComponentName].jsx`
82
- 9. `components/[ComponentName].vue`
83
- 10. `components/[ComponentName].svelte`
84
-
85
- **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.
86
-
87
- **If zero matches found:** Abort with: "Component [ComponentName] not found in expected paths. Verify the name matches a file in src/components/ or components/."
88
-
89
- ---
90
-
91
- ## Agent Spawn
92
-
93
- Once mode and source path are resolved, spawn the `design-doc-writer` agent:
94
-
95
- ```
96
- Task("design-doc-writer", """
97
- <required_reading>
98
- [If pipeline_complete=true:]
99
- @.design/STATE.md
100
- @.design/DESIGN-SUMMARY.md
101
- @.design/DESIGN-CONTEXT.md
102
- @<component_source_path>
103
- [Else (pipeline_complete=false):]
104
- @.design/DESIGN.md
105
- @<component_source_path>
106
- @reference/anti-patterns.md
107
- @reference/audit-scoring.md
108
- </required_reading>
109
-
110
- Generate a handoff spec for component <ComponentName>.
111
-
112
- Context:
113
- component_name: <ComponentName>
114
- component_source_path: <resolved absolute path>
115
- pipeline_complete: <true|false>
116
- output_path: .design/DESIGN-STYLE-<ComponentName>.md
117
-
118
- Produce the doc per STYL-05 sections:
119
- - Spacing Tokens (used by component)
120
- - Color Tokens (used by component)
121
- - Typography Scale (used by component)
122
- - Component States (default, hover, focus, active, disabled, etc.)
123
- - Token Semantic Health Score (raw-hex-ratio formula)
124
- - AI-Slop Detection (using reference/anti-patterns.md BAN/SLOP patterns)
125
- [If pipeline_complete=true:]
126
- - Decisions Applied (D-XX from DESIGN-SUMMARY.md that mention this component)
127
-
128
- Emit ## DOC COMPLETE when the output file is written.
129
- """)
130
- ```
131
-
132
- After the agent emits `## DOC COMPLETE`, confirm the file exists at `output_path` and report success to the user.
133
-
134
- ---
135
-
136
- ## Output Location
137
-
138
- Output is written by the agent to:
139
-
140
- ```
141
- .design/DESIGN-STYLE-[ComponentName].md
142
- ```
143
-
144
- This artifact is **outside the pipeline namespace**. The `DESIGN-STYLE-` prefix is distinct from all pipeline-owned artifacts (`DESIGN.md`, `DESIGN-CONTEXT.md`, `DESIGN-PLAN.md`, `DESIGN-SUMMARY.md`, `DESIGN-VERIFICATION.md`). There is no naming conflict.
32
+ ## Workflow
145
33
 
146
- The `.design/` directory is gitignored (developer tooling only not shipped with the plugin).
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.
147
39
 
148
40
  ---
149
41
 
150
42
  ## Constraints
151
43
 
152
- This command MUST NOT:
44
+ This command MUST NOT (per `../../reference/shared-preamble.md#output-contract-reminders`):
153
45
 
154
- - MUST NOT write to `DESIGN.md`, `DESIGN-SUMMARY.md`, `DESIGN-VERIFICATION.md`, `DESIGN-CONTEXT.md`, or `.design/STATE.md`
155
- - MUST NOT invoke the pipeline router (this command is a leaf invocation, not a pipeline stage)
156
- - MUST NOT require Figma or Refero MCPs — v3 uses only local source files and `.design/` artifacts (MCP enrichment is reserved for a future version)
157
- - MUST NOT produce more than one output file per invocation — no batch mode in v3
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
158
50
 
159
51
  ---
160
52
 
@@ -166,12 +58,7 @@ This command MUST NOT:
166
58
  /get-design-done style Button
167
59
  ```
168
60
 
169
- - Resolves component: `src/components/Button.tsx`
170
- - Detects mode: DESIGN-SUMMARY.md exists → post-pipeline
171
- - Spawns `design-doc-writer` with `pipeline_complete: true`
172
- - Output: `.design/DESIGN-STYLE-Button.md`
173
-
174
- ---
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`.
175
62
 
176
63
  **Example 2: No argument (list mode)**
177
64
 
@@ -179,15 +66,6 @@ This command MUST NOT:
179
66
  /get-design-done style
180
67
  ```
181
68
 
182
- - Globs component files from `src/components/`
183
- - Displays list to user:
184
- ```
185
- Available components:
186
- Button
187
- CardHeader
188
- Input
189
- Modal
190
- Toast
191
- Specify: /get-design-done style [ComponentName]
192
- ```
193
- - Exits without generating any file.
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 load-bearing 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 `get-design-done: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 load-bearing
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).*
@@ -3,6 +3,7 @@ name: synthesize
3
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/discover/, skills/plan/) after parallel spawns return. Not user-invocable."
4
4
  tools: Read, Task
5
5
  user-invocable: false
6
+ disable-model-invocation: true
6
7
  ---
7
8
 
8
9
  @reference/shared-preamble.md
@@ -3,6 +3,7 @@ name: gdd-timeline
3
3
  description: "Narrative retrospective across cycles: reads EXPERIENCE.md files and git log to produce a timeline view."
4
4
  argument-hint: "[<cycle-N> | <from>-<to> | all]"
5
5
  tools: Read, Bash, Glob
6
+ disable-model-invocation: true
6
7
  ---
7
8
 
8
9
  @reference/retrieval-contract.md
@@ -3,6 +3,7 @@ name: gdd-todo
3
3
  description: "Design backlog — add/list/pick design tasks. Writes to .design/TODO.md."
4
4
  argument-hint: "<add|list|pick> [text]"
5
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
6
7
  ---
7
8
 
8
9
  # /gdd:todo
@@ -9,107 +9,87 @@ tools: Read, Bash
9
9
 
10
10
  ## Role
11
11
 
12
- You are a deterministic **closeout** skill. You close the per-turn telemetry gap on runtimes that don't expose a Stop event (codex, gemini, and 11 others). You are a code-level mirror of `hooks/gdd-turn-closeout.js` (D-10): same conditions, same idempotence, same emitted event shape. The only difference: the JS hook emits the nudge as `additionalContext` via the harness; this skill prints the nudge directly to the user.
12
+ You are a deterministic **closeout** skill. You close the per-turn telemetry gap on runtimes that don't expose a Stop event (codex, gemini, and 11 others). You are a code-level mirror of `hooks/gdd-turn-closeout.js` (D-10): same conditions, same idempotence, same emitted event shape. The only difference: the JS hook emits the nudge as `additionalContext` via the harness; this skill prints the nudge directly to the user. See `./../new-cycle/milestone-completeness-rubric.md` §"Task level" for the broader closeout discipline (what "turn complete" means within a stage).
13
13
 
14
- **When to invoke:** orchestrator skills (`/gdd:next`, `/gdd:design`, `/gdd:verify`) tail-call this skill as their final step before returning, so the user sees a closing nudge that matches what Claude Code users see via the Stop hook. Adoption is incremental — each orchestrator can wire the tail-call independently; the skill exists as a stable, callable surface today.
14
+ **When to invoke:** orchestrator skills (`/gdd:next`, `/gdd:design`, `/gdd:verify`) tail-call this skill as their final step before returning. Adoption is incremental — each orchestrator can wire the tail-call independently; the skill exists as a stable, callable surface today.
15
15
 
16
16
  ## Invocation Contract
17
17
 
18
- - **Input**: none. Operates on `.design/STATE.md` and `.design/telemetry/events.jsonl` in the current working directory.
18
+ - **Input**: none. Operates on `.design/STATE.md` and `.design/telemetry/events.jsonl` in cwd.
19
19
  - **Output**: at most one printed line — the nudge — or silent return.
20
- - **Latency budget**: ≤10ms typical (matches D-10). Read **only** STATE.md and the tail of events.jsonl; never load the full event stream.
21
- - **Idempotence**: if the most recent event line is already a `turn_end` for the current `(stage, task_progress)` tuple, skip the append but still print the nudge.
22
- - **Non-blocking**: any I/O failure → silent return. This skill must never gate the user.
20
+ - **Latency budget**: ≤10ms typical. Read **only** STATE.md and the tail of events.jsonl.
21
+ - **Idempotence**: if the most recent event is already a `turn_end` for the current `(stage, task_progress)` tuple, skip append but still print nudge.
22
+ - **Non-blocking**: any I/O failure → silent return. This skill never gates the user.
23
23
 
24
24
  ## Algorithm
25
25
 
26
- Execute these steps **in order** and stop at the first early-return.
26
+ Execute in order; stop at the first early-return.
27
27
 
28
- ### Step 1 — Try to read STATE.md
28
+ ### Step 1 — Read STATE.md
29
29
 
30
- Read `.design/STATE.md`. If the file is missing or unreadable: **return silently** (no print, no append). Mirrors the JS hook's "missing STATE.md" branch.
30
+ Read `.design/STATE.md`. Missing or unreadable **return silently** (no print, no append).
31
31
 
32
- ### Step 2 — Parse the `<position>` block
32
+ ### Step 2 — Parse `<position>` block
33
33
 
34
- Lightweight-parse only the `<position>…</position>` block (the rest of STATE.md is irrelevant here). Extract `stage`, `status`, `task_progress`. A regex pass (`/<position>([\s\S]*?)<\/position>/` then per-line `key: value`) is sufficient do **not** invoke the full STATE parser (cost overhead).
34
+ Lightweight-parse only `<position>…</position>` (regex `/<position>([\s\S]*?)<\/position>/` then per-line `key: value`). Extract `stage`, `status`, `task_progress`. Do not invoke the full STATE parser.
35
35
 
36
- If `status != "in_progress"`: **return silently**. The pipeline is either initialized, completed, or blocked — no turn-end gap to close.
36
+ If `status != "in_progress"` **return silently**. Pipeline is initialized / completed / blocked — no turn-end gap to close.
37
37
 
38
38
  ### Step 3 — Tail the last event line
39
39
 
40
- Read **only the last 8 KiB** of `.design/telemetry/events.jsonl` (a single event line is ≪64 KiB). Treat all of these as "stale by definition":
41
- - The file is missing.
42
- - The file is empty.
43
- - The last line fails to parse as JSON.
44
- - The last line's `timestamp` is missing or unparseable.
40
+ Read **only the last 8 KiB** of `.design/telemetry/events.jsonl`. Treat as "stale by definition":
45
41
 
46
- Otherwise compute `now - last_event.timestamp`. If the gap is **<60 seconds**, the user is actively mid-turn — **return silently** (the next real event will close the gap naturally).
42
+ - File missing.
43
+ - File empty.
44
+ - Last line fails JSON parse.
45
+ - Last line's `timestamp` is missing or unparseable.
47
46
 
48
- A reasonable Bash one-liner for the tail when running this skill in a runtime that lacks a Read-tail primitive: `tail -n 1 .design/telemetry/events.jsonl 2>/dev/null`.
47
+ Otherwise compute `now - last_event.timestamp`. Gap < 60 seconds user is actively mid-turn **return silently** (next real event closes the gap naturally). Bash one-liner for the tail: `tail -n 1 .design/telemetry/events.jsonl 2>/dev/null`.
49
48
 
50
49
  ### Step 4 — Idempotence check, then append
51
50
 
52
- If the last event is already shaped `{type: "turn_end", stage: <same>, payload: {task_progress: <same>}}` for the **exact** `(stage, task_progress)` tuple from Step 2: **skip the append** but proceed to Step 5.
51
+ If last event is already `{type:"turn_end", stage:<same>, payload:{task_progress:<same>}}` for the exact `(stage, task_progress)` from Step 2: **skip append** but proceed to Step 5.
53
52
 
54
- Otherwise append a single JSONL line to `.design/telemetry/events.jsonl`:
53
+ Otherwise append one JSONL line to `.design/telemetry/events.jsonl`:
55
54
 
56
55
  ```json
57
56
  {"type":"turn_end","timestamp":"<ISO 8601 now>","sessionId":"<session-id-or-'turn-closeout'>","stage":"<stage>","payload":{"task_progress":"<N/M>"},"_meta":{"source":"gdd-turn-closeout-skill"}}
58
57
  ```
59
58
 
60
- Create `.design/telemetry/` if missing. The append must be a single `appendFile`-equivalent call (the writer assumes append-atomicity per Plan 20-06).
59
+ Create `.design/telemetry/` if missing. Append is a single `appendFile`-equivalent call (writer assumes append-atomicity per Plan 20-06).
61
60
 
62
61
  ### Step 5 — Print the nudge
63
62
 
64
63
  Match `task_progress` against `^(\d+)/(\d+)$`:
65
64
 
66
- - **Numerator equals denominator and denominator > 0** (e.g. `5/5`, stage-complete):
65
+ - **Numerator equals denominator and denominator > 0** (e.g. `5/5`): `Stage <stage> complete — run /gdd:next or /gdd:reflect`.
66
+ - **Otherwise** (mid-task, e.g. `3/7`, `0/0`, malformed): `Stage <stage> paused mid-task — resume with /gdd:resume`.
67
67
 
68
- > Stage `<stage>` completerun `/gdd:next` or `/gdd:reflect`
69
-
70
- - **Otherwise** (mid-task, e.g. `3/7`, `0/0`, malformed):
71
-
72
- > Stage `<stage>` paused mid-task — resume with `/gdd:resume`
73
-
74
- Print exactly one of these two lines. No additional commentary, no explanations of what the skill did — the nudge is the user-facing surface.
68
+ One line exactly. No commentary the nudge is the user-facing surface.
75
69
 
76
70
  ## Failure Modes
77
71
 
78
- Every step above has an explicit silent-return on failure. The skill must remain non-blocking under all conditions:
79
-
80
72
  | Condition | Behavior |
81
73
  |-----------|----------|
82
- | `.design/STATE.md` missing or unreadable | Silent return |
83
- | `<position>` block absent or malformed | Silent return |
74
+ | STATE.md missing/unreadable | Silent return |
75
+ | `<position>` absent or malformed | Silent return |
84
76
  | `status != "in_progress"` | Silent return |
85
- | `.design/telemetry/events.jsonl` missing | Treat as stale → fall through to append + nudge |
86
- | Last event line unparseable | Treat as stale → fall through |
87
- | Last event timestamp <60s old | Silent return |
88
- | Append fails (permission, disk full) | Print the nudge anyway; do not surface the I/O error |
89
- | Any uncaught throw at any step | Silent return |
77
+ | `events.jsonl` missing | Treat as stale → fall through to append + nudge |
78
+ | Last event unparseable | Treat as stale → fall through |
79
+ | Last event < 60s old | Silent return |
80
+ | Append fails (permission, disk full) | Print nudge anyway; do not surface I/O error |
81
+ | Any uncaught throw | Silent return |
90
82
 
91
83
  ## Equivalence with the JS hook
92
84
 
93
- This skill and `hooks/gdd-turn-closeout.js` MUST stay code-level equivalent. Specifically:
94
-
95
- - Same four early-return branches (no STATE / not in_progress / fresh event / no-op).
96
- - Same staleness threshold: **60 seconds**.
97
- - Same idempotence guard: `(type=turn_end, stage, payload.task_progress)` triple.
98
- - Same emitted event shape (only `_meta.source` differs: `gdd-turn-closeout` vs `gdd-turn-closeout-skill`, so reflector telemetry can distinguish hook-driven vs skill-driven turn-ends).
99
- - Same nudge wording for both `N/N` and mid-task cases.
100
-
101
- If you change one, change the other in the same plan. Plan 25-09's `tests/turn-closeout-hook.test.cjs` covers the JS hook; the parallel coverage for this skill rides on Plan 25-09's Phase 25 baseline.
85
+ This skill and `hooks/gdd-turn-closeout.js` MUST stay code-level equivalent: same four early-return branches, same 60-second staleness threshold, same idempotence guard (`type=turn_end, stage, payload.task_progress`), same event shape (only `_meta.source` differs: `gdd-turn-closeout` vs `gdd-turn-closeout-skill` so reflector telemetry can distinguish hook-driven vs skill-driven). Same nudge wording for both N/N and mid-task cases. Change one → change the other in the same plan. Plan 25-09's `tests/turn-closeout-hook.test.cjs` covers the JS hook.
102
86
 
103
87
  ## Non-Goals
104
88
 
105
- - **Not a state writer.** This skill never edits STATE.md. The events.jsonl append is the only side effect.
106
- - **Not a stage transition.** A `turn_end` event is a within-stage observation, not a state-machine move; downstream tools that gate on stage transitions ignore it.
107
- - **Not a Stop-event harness.** Cross-runtime Stop-event support at the harness level is explicit out-of-scope for Phase 25 (see CONTEXT.md OOS section).
89
+ - **Not a state writer.** Never edits STATE.md. The events.jsonl append is the only side effect.
90
+ - **Not a stage transition.** `turn_end` is within-stage, not a state-machine move; downstream tools ignore it for transition gating.
91
+ - **Not a Stop-event harness.** Cross-runtime Stop-event support at the harness level is out-of-scope for Phase 25 (CONTEXT.md OOS).
108
92
 
109
93
  ## Integration Point
110
94
 
111
- The canonical tail-call sites (per D-11) are `/gdd:next`, `/gdd:design`, `/gdd:verify`. Each orchestrator's final step, immediately before returning to the user, should be:
112
-
113
- > Invoke skill `gdd-turn-closeout`.
114
-
115
- Tail-call wiring is intentionally not part of v1.25 (Plan 25-04 ships only the callable surface). Each orchestrator can adopt the wiring independently in a follow-up.
95
+ Canonical tail-call sites per D-11: `/gdd:next`, `/gdd:design`, `/gdd:verify`. Each orchestrator's final step before returning to the user invokes `gdd-turn-closeout`. Tail-call wiring intentionally not part of v1.25 (Plan 25-04 ships only the callable surface).
@@ -3,6 +3,7 @@ name: gdd-undo
3
3
  description: "Safe design change revert. Uses git log to find design commits, checks dependencies, reverts safely."
4
4
  argument-hint: "[<commit SHA>]"
5
5
  tools: Read, Write, Bash, AskUserQuestion
6
+ disable-model-invocation: true
6
7
  ---
7
8
 
8
9
  # /gdd:undo
@@ -3,6 +3,7 @@ name: gdd-update
3
3
  description: "Update get-design-done to the latest release. Preserves .design/config.json and ./.claude/skills/."
4
4
  argument-hint: "[--dry-run] [--version <tag>]"
5
5
  tools: Read, Write, Bash
6
+ disable-model-invocation: true
6
7
  ---
7
8
 
8
9
  # gdd-update