claude-code-pilot 2.0.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.
Files changed (257) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +151 -0
  3. package/bin/install.js +431 -0
  4. package/docs/agent-guides/architecture.md +107 -0
  5. package/ecc/agents/architect.md +211 -0
  6. package/ecc/agents/code-reviewer.md +237 -0
  7. package/ecc/agents/doc-updater.md +107 -0
  8. package/ecc/agents/e2e-runner.md +107 -0
  9. package/ecc/agents/security-reviewer.md +108 -0
  10. package/ecc/agents/tdd-guide.md +91 -0
  11. package/ecc/commands/checkpoint.md +74 -0
  12. package/ecc/commands/evolve.md +178 -0
  13. package/ecc/commands/learn.md +70 -0
  14. package/ecc/commands/model-route.md +26 -0
  15. package/ecc/commands/quality-gate.md +29 -0
  16. package/ecc/commands/resume-session.md +155 -0
  17. package/ecc/commands/save-session.md +275 -0
  18. package/ecc/commands/sessions.md +305 -0
  19. package/ecc/commands/verify.md +59 -0
  20. package/ecc/contexts/dev.md +20 -0
  21. package/ecc/contexts/research.md +26 -0
  22. package/ecc/contexts/review.md +22 -0
  23. package/ecc/examples/CLAUDE.md +100 -0
  24. package/ecc/examples/django-api-CLAUDE.md +308 -0
  25. package/ecc/examples/go-microservice-CLAUDE.md +267 -0
  26. package/ecc/examples/rust-api-CLAUDE.md +285 -0
  27. package/ecc/examples/saas-nextjs-CLAUDE.md +166 -0
  28. package/ecc/examples/user-CLAUDE.md +109 -0
  29. package/ecc/rules/common/agents.md +49 -0
  30. package/ecc/rules/common/coding-style.md +48 -0
  31. package/ecc/rules/common/development-workflow.md +37 -0
  32. package/ecc/rules/common/git-workflow.md +24 -0
  33. package/ecc/rules/common/hooks.md +30 -0
  34. package/ecc/rules/common/patterns.md +31 -0
  35. package/ecc/rules/common/performance.md +55 -0
  36. package/ecc/rules/common/security.md +29 -0
  37. package/ecc/rules/common/testing.md +29 -0
  38. package/ecc/rules/golang/coding-style.md +32 -0
  39. package/ecc/rules/golang/hooks.md +17 -0
  40. package/ecc/rules/golang/patterns.md +45 -0
  41. package/ecc/rules/golang/security.md +34 -0
  42. package/ecc/rules/golang/testing.md +31 -0
  43. package/ecc/rules/kotlin/coding-style.md +86 -0
  44. package/ecc/rules/kotlin/patterns.md +146 -0
  45. package/ecc/rules/kotlin/security.md +82 -0
  46. package/ecc/rules/kotlin/testing.md +128 -0
  47. package/ecc/rules/perl/coding-style.md +46 -0
  48. package/ecc/rules/perl/hooks.md +22 -0
  49. package/ecc/rules/perl/patterns.md +76 -0
  50. package/ecc/rules/perl/security.md +69 -0
  51. package/ecc/rules/perl/testing.md +54 -0
  52. package/ecc/rules/php/coding-style.md +35 -0
  53. package/ecc/rules/php/hooks.md +24 -0
  54. package/ecc/rules/php/patterns.md +32 -0
  55. package/ecc/rules/php/security.md +33 -0
  56. package/ecc/rules/php/testing.md +34 -0
  57. package/ecc/rules/python/coding-style.md +42 -0
  58. package/ecc/rules/python/hooks.md +19 -0
  59. package/ecc/rules/python/patterns.md +39 -0
  60. package/ecc/rules/python/security.md +30 -0
  61. package/ecc/rules/python/testing.md +38 -0
  62. package/ecc/rules/swift/coding-style.md +47 -0
  63. package/ecc/rules/swift/hooks.md +20 -0
  64. package/ecc/rules/swift/patterns.md +66 -0
  65. package/ecc/rules/swift/security.md +33 -0
  66. package/ecc/rules/swift/testing.md +45 -0
  67. package/ecc/rules/typescript/coding-style.md +199 -0
  68. package/ecc/rules/typescript/hooks.md +22 -0
  69. package/ecc/rules/typescript/patterns.md +52 -0
  70. package/ecc/rules/typescript/security.md +28 -0
  71. package/ecc/rules/typescript/testing.md +18 -0
  72. package/ecc/scripts/hooks/check-hook-enabled.js +12 -0
  73. package/ecc/scripts/hooks/evaluate-session.js +100 -0
  74. package/ecc/scripts/hooks/pre-compact.js +48 -0
  75. package/ecc/scripts/hooks/run-with-flags-shell.sh +32 -0
  76. package/ecc/scripts/hooks/run-with-flags.js +120 -0
  77. package/ecc/scripts/hooks/session-end-marker.js +15 -0
  78. package/ecc/scripts/hooks/session-end.js +258 -0
  79. package/ecc/scripts/hooks/session-start.js +97 -0
  80. package/ecc/scripts/hooks/suggest-compact.js +80 -0
  81. package/ecc/scripts/lib/hook-flags.js +74 -0
  82. package/ecc/scripts/lib/package-manager.d.ts +119 -0
  83. package/ecc/scripts/lib/package-manager.js +431 -0
  84. package/ecc/scripts/lib/project-detect.js +428 -0
  85. package/ecc/scripts/lib/resolve-formatter.js +185 -0
  86. package/ecc/scripts/lib/session-aliases.d.ts +136 -0
  87. package/ecc/scripts/lib/session-aliases.js +481 -0
  88. package/ecc/scripts/lib/session-manager.d.ts +131 -0
  89. package/ecc/scripts/lib/session-manager.js +444 -0
  90. package/ecc/scripts/lib/shell-split.js +86 -0
  91. package/ecc/scripts/lib/utils.d.ts +183 -0
  92. package/ecc/scripts/lib/utils.js +543 -0
  93. package/ecc/skills/continuous-learning-v2/SKILL.md +365 -0
  94. package/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +144 -0
  95. package/ecc/skills/continuous-learning-v2/agents/observer.md +198 -0
  96. package/ecc/skills/continuous-learning-v2/agents/start-observer.sh +194 -0
  97. package/ecc/skills/continuous-learning-v2/config.json +8 -0
  98. package/ecc/skills/continuous-learning-v2/hooks/observe.sh +246 -0
  99. package/ecc/skills/continuous-learning-v2/scripts/detect-project.sh +218 -0
  100. package/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +1148 -0
  101. package/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +984 -0
  102. package/ecc/skills/strategic-compact/SKILL.md +103 -0
  103. package/ecc/skills/strategic-compact/suggest-compact.sh +54 -0
  104. package/ecc/skills/verification-loop-SKILL.md +126 -0
  105. package/gsd/LICENSE +21 -0
  106. package/gsd/agents/gsd-codebase-mapper.md +772 -0
  107. package/gsd/agents/gsd-debugger.md +1257 -0
  108. package/gsd/agents/gsd-executor.md +489 -0
  109. package/gsd/agents/gsd-integration-checker.md +445 -0
  110. package/gsd/agents/gsd-nyquist-auditor.md +178 -0
  111. package/gsd/agents/gsd-phase-researcher.md +555 -0
  112. package/gsd/agents/gsd-plan-checker.md +708 -0
  113. package/gsd/agents/gsd-planner.md +1309 -0
  114. package/gsd/agents/gsd-project-researcher.md +631 -0
  115. package/gsd/agents/gsd-research-synthesizer.md +249 -0
  116. package/gsd/agents/gsd-roadmapper.md +652 -0
  117. package/gsd/agents/gsd-verifier.md +581 -0
  118. package/gsd/commands-gsd/add-phase.md +43 -0
  119. package/gsd/commands-gsd/add-tests.md +41 -0
  120. package/gsd/commands-gsd/add-todo.md +47 -0
  121. package/gsd/commands-gsd/audit-milestone.md +36 -0
  122. package/gsd/commands-gsd/check-todos.md +45 -0
  123. package/gsd/commands-gsd/cleanup.md +18 -0
  124. package/gsd/commands-gsd/complete-milestone.md +136 -0
  125. package/gsd/commands-gsd/debug.md +168 -0
  126. package/gsd/commands-gsd/discuss-phase.md +90 -0
  127. package/gsd/commands-gsd/execute-phase.md +41 -0
  128. package/gsd/commands-gsd/health.md +22 -0
  129. package/gsd/commands-gsd/help.md +22 -0
  130. package/gsd/commands-gsd/insert-phase.md +32 -0
  131. package/gsd/commands-gsd/join-discord.md +18 -0
  132. package/gsd/commands-gsd/list-phase-assumptions.md +46 -0
  133. package/gsd/commands-gsd/map-codebase.md +71 -0
  134. package/gsd/commands-gsd/new-milestone.md +44 -0
  135. package/gsd/commands-gsd/new-project.md +42 -0
  136. package/gsd/commands-gsd/pause-work.md +38 -0
  137. package/gsd/commands-gsd/plan-milestone-gaps.md +34 -0
  138. package/gsd/commands-gsd/plan-phase.md +45 -0
  139. package/gsd/commands-gsd/progress.md +24 -0
  140. package/gsd/commands-gsd/quick.md +45 -0
  141. package/gsd/commands-gsd/reapply-patches.md +123 -0
  142. package/gsd/commands-gsd/remove-phase.md +31 -0
  143. package/gsd/commands-gsd/research-phase.md +190 -0
  144. package/gsd/commands-gsd/resume-work.md +40 -0
  145. package/gsd/commands-gsd/set-profile.md +34 -0
  146. package/gsd/commands-gsd/settings.md +36 -0
  147. package/gsd/commands-gsd/update.md +37 -0
  148. package/gsd/commands-gsd/validate-phase.md +35 -0
  149. package/gsd/commands-gsd/verify-work.md +38 -0
  150. package/gsd/get-shit-done/bin/gsd-tools.cjs +592 -0
  151. package/gsd/get-shit-done/bin/lib/commands.cjs +548 -0
  152. package/gsd/get-shit-done/bin/lib/config.cjs +169 -0
  153. package/gsd/get-shit-done/bin/lib/core.cjs +492 -0
  154. package/gsd/get-shit-done/bin/lib/frontmatter.cjs +299 -0
  155. package/gsd/get-shit-done/bin/lib/init.cjs +710 -0
  156. package/gsd/get-shit-done/bin/lib/milestone.cjs +241 -0
  157. package/gsd/get-shit-done/bin/lib/phase.cjs +901 -0
  158. package/gsd/get-shit-done/bin/lib/roadmap.cjs +298 -0
  159. package/gsd/get-shit-done/bin/lib/state.cjs +721 -0
  160. package/gsd/get-shit-done/bin/lib/template.cjs +222 -0
  161. package/gsd/get-shit-done/bin/lib/verify.cjs +820 -0
  162. package/gsd/get-shit-done/references/checkpoints.md +776 -0
  163. package/gsd/get-shit-done/references/continuation-format.md +249 -0
  164. package/gsd/get-shit-done/references/decimal-phase-calculation.md +65 -0
  165. package/gsd/get-shit-done/references/git-integration.md +248 -0
  166. package/gsd/get-shit-done/references/git-planning-commit.md +38 -0
  167. package/gsd/get-shit-done/references/model-profile-resolution.md +34 -0
  168. package/gsd/get-shit-done/references/model-profiles.md +93 -0
  169. package/gsd/get-shit-done/references/phase-argument-parsing.md +61 -0
  170. package/gsd/get-shit-done/references/planning-config.md +200 -0
  171. package/gsd/get-shit-done/references/questioning.md +162 -0
  172. package/gsd/get-shit-done/references/tdd.md +263 -0
  173. package/gsd/get-shit-done/references/ui-brand.md +160 -0
  174. package/gsd/get-shit-done/references/verification-patterns.md +612 -0
  175. package/gsd/get-shit-done/templates/DEBUG.md +164 -0
  176. package/gsd/get-shit-done/templates/UAT.md +247 -0
  177. package/gsd/get-shit-done/templates/VALIDATION.md +76 -0
  178. package/gsd/get-shit-done/templates/codebase/architecture.md +255 -0
  179. package/gsd/get-shit-done/templates/codebase/concerns.md +310 -0
  180. package/gsd/get-shit-done/templates/codebase/conventions.md +307 -0
  181. package/gsd/get-shit-done/templates/codebase/integrations.md +280 -0
  182. package/gsd/get-shit-done/templates/codebase/stack.md +186 -0
  183. package/gsd/get-shit-done/templates/codebase/structure.md +285 -0
  184. package/gsd/get-shit-done/templates/codebase/testing.md +480 -0
  185. package/gsd/get-shit-done/templates/config.json +37 -0
  186. package/gsd/get-shit-done/templates/context.md +297 -0
  187. package/gsd/get-shit-done/templates/continue-here.md +78 -0
  188. package/gsd/get-shit-done/templates/debug-subagent-prompt.md +91 -0
  189. package/gsd/get-shit-done/templates/discovery.md +146 -0
  190. package/gsd/get-shit-done/templates/milestone-archive.md +123 -0
  191. package/gsd/get-shit-done/templates/milestone.md +115 -0
  192. package/gsd/get-shit-done/templates/phase-prompt.md +569 -0
  193. package/gsd/get-shit-done/templates/planner-subagent-prompt.md +117 -0
  194. package/gsd/get-shit-done/templates/project.md +184 -0
  195. package/gsd/get-shit-done/templates/requirements.md +231 -0
  196. package/gsd/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -0
  197. package/gsd/get-shit-done/templates/research-project/FEATURES.md +147 -0
  198. package/gsd/get-shit-done/templates/research-project/PITFALLS.md +200 -0
  199. package/gsd/get-shit-done/templates/research-project/STACK.md +120 -0
  200. package/gsd/get-shit-done/templates/research-project/SUMMARY.md +170 -0
  201. package/gsd/get-shit-done/templates/research.md +552 -0
  202. package/gsd/get-shit-done/templates/retrospective.md +54 -0
  203. package/gsd/get-shit-done/templates/roadmap.md +202 -0
  204. package/gsd/get-shit-done/templates/state.md +176 -0
  205. package/gsd/get-shit-done/templates/summary-complex.md +59 -0
  206. package/gsd/get-shit-done/templates/summary-minimal.md +41 -0
  207. package/gsd/get-shit-done/templates/summary-standard.md +48 -0
  208. package/gsd/get-shit-done/templates/summary.md +248 -0
  209. package/gsd/get-shit-done/templates/user-setup.md +311 -0
  210. package/gsd/get-shit-done/templates/verification-report.md +322 -0
  211. package/gsd/get-shit-done/workflows/add-phase.md +112 -0
  212. package/gsd/get-shit-done/workflows/add-tests.md +351 -0
  213. package/gsd/get-shit-done/workflows/add-todo.md +158 -0
  214. package/gsd/get-shit-done/workflows/audit-milestone.md +332 -0
  215. package/gsd/get-shit-done/workflows/check-todos.md +177 -0
  216. package/gsd/get-shit-done/workflows/cleanup.md +152 -0
  217. package/gsd/get-shit-done/workflows/complete-milestone.md +764 -0
  218. package/gsd/get-shit-done/workflows/diagnose-issues.md +219 -0
  219. package/gsd/get-shit-done/workflows/discovery-phase.md +289 -0
  220. package/gsd/get-shit-done/workflows/discuss-phase.md +676 -0
  221. package/gsd/get-shit-done/workflows/execute-phase.md +459 -0
  222. package/gsd/get-shit-done/workflows/execute-plan.md +449 -0
  223. package/gsd/get-shit-done/workflows/health.md +159 -0
  224. package/gsd/get-shit-done/workflows/help.md +489 -0
  225. package/gsd/get-shit-done/workflows/insert-phase.md +130 -0
  226. package/gsd/get-shit-done/workflows/list-phase-assumptions.md +178 -0
  227. package/gsd/get-shit-done/workflows/map-codebase.md +316 -0
  228. package/gsd/get-shit-done/workflows/new-milestone.md +384 -0
  229. package/gsd/get-shit-done/workflows/new-project.md +1111 -0
  230. package/gsd/get-shit-done/workflows/pause-work.md +122 -0
  231. package/gsd/get-shit-done/workflows/plan-milestone-gaps.md +274 -0
  232. package/gsd/get-shit-done/workflows/plan-phase.md +560 -0
  233. package/gsd/get-shit-done/workflows/progress.md +382 -0
  234. package/gsd/get-shit-done/workflows/quick.md +601 -0
  235. package/gsd/get-shit-done/workflows/remove-phase.md +155 -0
  236. package/gsd/get-shit-done/workflows/research-phase.md +74 -0
  237. package/gsd/get-shit-done/workflows/resume-project.md +307 -0
  238. package/gsd/get-shit-done/workflows/set-profile.md +81 -0
  239. package/gsd/get-shit-done/workflows/settings.md +214 -0
  240. package/gsd/get-shit-done/workflows/transition.md +544 -0
  241. package/gsd/get-shit-done/workflows/update.md +240 -0
  242. package/gsd/get-shit-done/workflows/validate-phase.md +167 -0
  243. package/gsd/get-shit-done/workflows/verify-phase.md +243 -0
  244. package/gsd/get-shit-done/workflows/verify-work.md +583 -0
  245. package/gsd/hooks/gsd-check-update.js +81 -0
  246. package/gsd/hooks/gsd-context-monitor.js +141 -0
  247. package/gsd/hooks/gsd-statusline.js +115 -0
  248. package/kit/CLAUDE.md +43 -0
  249. package/kit/commands/kit/update.md +46 -0
  250. package/kit/commands/setup-refresh.md +50 -0
  251. package/kit/commands/setup.md +579 -0
  252. package/kit/commands/tool-guide.md +44 -0
  253. package/kit/hooks/kit-check-update.js +54 -0
  254. package/kit/mcp.json +10 -0
  255. package/kit/rules/code-style.md +24 -0
  256. package/manifest.json +30 -0
  257. package/package.json +36 -0
@@ -0,0 +1,240 @@
1
+ <purpose>
2
+ Check for GSD updates via npm, display changelog for versions between installed and latest, obtain user confirmation, and execute clean installation with cache clearing.
3
+ </purpose>
4
+
5
+ <required_reading>
6
+ Read all files referenced by the invoking prompt's execution_context before starting.
7
+ </required_reading>
8
+
9
+ <process>
10
+
11
+ <step name="get_installed_version">
12
+ Detect whether GSD is installed locally or globally by checking both locations and validating install integrity:
13
+
14
+ ```bash
15
+ # Check local first (takes priority only if valid)
16
+ # Detect runtime config directory (supports Claude, OpenCode, Gemini)
17
+ LOCAL_VERSION_FILE="" LOCAL_MARKER_FILE="" LOCAL_DIR=""
18
+ for dir in .claude .config/opencode .opencode .gemini; do
19
+ if [ -f "./$dir/get-shit-done/VERSION" ]; then
20
+ LOCAL_VERSION_FILE="./$dir/get-shit-done/VERSION"
21
+ LOCAL_MARKER_FILE="./$dir/get-shit-done/workflows/update.md"
22
+ LOCAL_DIR="$(cd "./$dir" 2>/dev/null && pwd)"
23
+ break
24
+ fi
25
+ done
26
+ GLOBAL_VERSION_FILE="" GLOBAL_MARKER_FILE="" GLOBAL_DIR=""
27
+ for dir in .claude .config/opencode .opencode .gemini; do
28
+ if [ -f "$HOME/$dir/get-shit-done/VERSION" ]; then
29
+ GLOBAL_VERSION_FILE="$HOME/$dir/get-shit-done/VERSION"
30
+ GLOBAL_MARKER_FILE="$HOME/$dir/get-shit-done/workflows/update.md"
31
+ GLOBAL_DIR="$(cd "$HOME/$dir" 2>/dev/null && pwd)"
32
+ break
33
+ fi
34
+ done
35
+
36
+ # Only treat as LOCAL if the resolved paths differ (prevents misdetection when CWD=$HOME)
37
+ IS_LOCAL=false
38
+ if [ -n "$LOCAL_VERSION_FILE" ] && [ -f "$LOCAL_VERSION_FILE" ] && [ -f "$LOCAL_MARKER_FILE" ] && grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+' "$LOCAL_VERSION_FILE"; then
39
+ if [ -z "$GLOBAL_DIR" ] || [ "$LOCAL_DIR" != "$GLOBAL_DIR" ]; then
40
+ IS_LOCAL=true
41
+ fi
42
+ fi
43
+
44
+ if [ "$IS_LOCAL" = true ]; then
45
+ cat "$LOCAL_VERSION_FILE"
46
+ echo "LOCAL"
47
+ elif [ -n "$GLOBAL_VERSION_FILE" ] && [ -f "$GLOBAL_VERSION_FILE" ] && [ -f "$GLOBAL_MARKER_FILE" ] && grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+' "$GLOBAL_VERSION_FILE"; then
48
+ cat "$GLOBAL_VERSION_FILE"
49
+ echo "GLOBAL"
50
+ else
51
+ echo "UNKNOWN"
52
+ fi
53
+ ```
54
+
55
+ Parse output:
56
+ - If last line is "LOCAL": local install is valid; installed version is first line; use `--local`
57
+ - If last line is "GLOBAL": local missing/invalid, global install is valid; installed version is first line; use `--global`
58
+ - If "UNKNOWN": proceed to install step (treat as version 0.0.0)
59
+
60
+ **If VERSION file missing:**
61
+ ```
62
+ ## GSD Update
63
+
64
+ **Installed version:** Unknown
65
+
66
+ Your installation doesn't include version tracking.
67
+
68
+ Running fresh install...
69
+ ```
70
+
71
+ Proceed to install step (treat as version 0.0.0 for comparison).
72
+ </step>
73
+
74
+ <step name="check_latest_version">
75
+ Check npm for latest version:
76
+
77
+ ```bash
78
+ npm view get-shit-done-cc version 2>/dev/null
79
+ ```
80
+
81
+ **If npm check fails:**
82
+ ```
83
+ Couldn't check for updates (offline or npm unavailable).
84
+
85
+ To update manually: `npx get-shit-done-cc --global`
86
+ ```
87
+
88
+ Exit.
89
+ </step>
90
+
91
+ <step name="compare_versions">
92
+ Compare installed vs latest:
93
+
94
+ **If installed == latest:**
95
+ ```
96
+ ## GSD Update
97
+
98
+ **Installed:** X.Y.Z
99
+ **Latest:** X.Y.Z
100
+
101
+ You're already on the latest version.
102
+ ```
103
+
104
+ Exit.
105
+
106
+ **If installed > latest:**
107
+ ```
108
+ ## GSD Update
109
+
110
+ **Installed:** X.Y.Z
111
+ **Latest:** A.B.C
112
+
113
+ You're ahead of the latest release (development version?).
114
+ ```
115
+
116
+ Exit.
117
+ </step>
118
+
119
+ <step name="show_changes_and_confirm">
120
+ **If update available**, fetch and show what's new BEFORE updating:
121
+
122
+ 1. Fetch changelog from GitHub raw URL
123
+ 2. Extract entries between installed and latest versions
124
+ 3. Display preview and ask for confirmation:
125
+
126
+ ```
127
+ ## GSD Update Available
128
+
129
+ **Installed:** 1.5.10
130
+ **Latest:** 1.5.15
131
+
132
+ ### What's New
133
+ ────────────────────────────────────────────────────────────
134
+
135
+ ## [1.5.15] - 2026-01-20
136
+
137
+ ### Added
138
+ - Feature X
139
+
140
+ ## [1.5.14] - 2026-01-18
141
+
142
+ ### Fixed
143
+ - Bug fix Y
144
+
145
+ ────────────────────────────────────────────────────────────
146
+
147
+ ⚠️ **Note:** The installer performs a clean install of GSD folders:
148
+ - `commands/gsd/` will be wiped and replaced
149
+ - `get-shit-done/` will be wiped and replaced
150
+ - `agents/gsd-*` files will be replaced
151
+
152
+ (Paths are relative to your install location: `~/.claude/` for global, `./.claude/` for local)
153
+
154
+ Your custom files in other locations are preserved:
155
+ - Custom commands not in `commands/gsd/` ✓
156
+ - Custom agents not prefixed with `gsd-` ✓
157
+ - Custom hooks ✓
158
+ - Your CLAUDE.md files ✓
159
+
160
+ If you've modified any GSD files directly, they'll be automatically backed up to `gsd-local-patches/` and can be reapplied with `/gsd:reapply-patches` after the update.
161
+ ```
162
+
163
+ Use AskUserQuestion:
164
+ - Question: "Proceed with update?"
165
+ - Options:
166
+ - "Yes, update now"
167
+ - "No, cancel"
168
+
169
+ **If user cancels:** Exit.
170
+ </step>
171
+
172
+ <step name="run_update">
173
+ Run the update using the install type detected in step 1:
174
+
175
+ **If LOCAL install:**
176
+ ```bash
177
+ npx -y get-shit-done-cc@latest --local
178
+ ```
179
+
180
+ **If GLOBAL install (or unknown):**
181
+ ```bash
182
+ npx -y get-shit-done-cc@latest --global
183
+ ```
184
+
185
+ Capture output. If install fails, show error and exit.
186
+
187
+ Clear the update cache so statusline indicator disappears:
188
+
189
+ ```bash
190
+ # Clear update cache across all runtime directories
191
+ for dir in .claude .config/opencode .opencode .gemini; do
192
+ rm -f "./$dir/cache/gsd-update-check.json"
193
+ rm -f "$HOME/$dir/cache/gsd-update-check.json"
194
+ done
195
+ ```
196
+
197
+ The SessionStart hook (`gsd-check-update.js`) writes to the detected runtime's cache directory, so all paths must be cleared to prevent stale update indicators.
198
+ </step>
199
+
200
+ <step name="display_result">
201
+ Format completion message (changelog was already shown in confirmation step):
202
+
203
+ ```
204
+ ╔═══════════════════════════════════════════════════════════╗
205
+ ║ GSD Updated: v1.5.10 → v1.5.15 ║
206
+ ╚═══════════════════════════════════════════════════════════╝
207
+
208
+ ⚠️ Restart Claude Code to pick up the new commands.
209
+
210
+ [View full changelog](https://github.com/glittercowboy/get-shit-done/blob/main/CHANGELOG.md)
211
+ ```
212
+ </step>
213
+
214
+
215
+ <step name="check_local_patches">
216
+ After update completes, check if the installer detected and backed up any locally modified files:
217
+
218
+ Check for gsd-local-patches/backup-meta.json in the config directory.
219
+
220
+ **If patches found:**
221
+
222
+ ```
223
+ Local patches were backed up before the update.
224
+ Run /gsd:reapply-patches to merge your modifications into the new version.
225
+ ```
226
+
227
+ **If no patches:** Continue normally.
228
+ </step>
229
+ </process>
230
+
231
+ <success_criteria>
232
+ - [ ] Installed version read correctly
233
+ - [ ] Latest version checked via npm
234
+ - [ ] Update skipped if already current
235
+ - [ ] Changelog fetched and displayed BEFORE update
236
+ - [ ] Clean install warning shown
237
+ - [ ] User confirmation obtained
238
+ - [ ] Update executed successfully
239
+ - [ ] Restart reminder shown
240
+ </success_criteria>
@@ -0,0 +1,167 @@
1
+ <purpose>
2
+ Audit Nyquist validation gaps for a completed phase. Generate missing tests. Update VALIDATION.md.
3
+ </purpose>
4
+
5
+ <required_reading>
6
+ @~/.claude/get-shit-done/references/ui-brand.md
7
+ </required_reading>
8
+
9
+ <process>
10
+
11
+ ## 0. Initialize
12
+
13
+ ```bash
14
+ INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE_ARG}")
15
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
16
+ ```
17
+
18
+ Parse: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`.
19
+
20
+ ```bash
21
+ AUDITOR_MODEL=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" resolve-model gsd-nyquist-auditor --raw)
22
+ NYQUIST_CFG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config get workflow.nyquist_validation --raw)
23
+ ```
24
+
25
+ If `NYQUIST_CFG` is `false`: exit with "Nyquist validation is disabled. Enable via /gsd:settings."
26
+
27
+ Display banner: `GSD > VALIDATE PHASE {N}: {name}`
28
+
29
+ ## 1. Detect Input State
30
+
31
+ ```bash
32
+ VALIDATION_FILE=$(ls "${PHASE_DIR}"/*-VALIDATION.md 2>/dev/null | head -1)
33
+ SUMMARY_FILES=$(ls "${PHASE_DIR}"/*-SUMMARY.md 2>/dev/null)
34
+ ```
35
+
36
+ - **State A** (`VALIDATION_FILE` non-empty): Audit existing
37
+ - **State B** (`VALIDATION_FILE` empty, `SUMMARY_FILES` non-empty): Reconstruct from artifacts
38
+ - **State C** (`SUMMARY_FILES` empty): Exit — "Phase {N} not executed. Run /gsd:execute-phase {N} first."
39
+
40
+ ## 2. Discovery
41
+
42
+ ### 2a. Read Phase Artifacts
43
+
44
+ Read all PLAN and SUMMARY files. Extract: task lists, requirement IDs, key-files changed, verify blocks.
45
+
46
+ ### 2b. Build Requirement-to-Task Map
47
+
48
+ Per task: `{ task_id, plan_id, wave, requirement_ids, has_automated_command }`
49
+
50
+ ### 2c. Detect Test Infrastructure
51
+
52
+ State A: Parse from existing VALIDATION.md Test Infrastructure table.
53
+ State B: Filesystem scan:
54
+
55
+ ```bash
56
+ find . -name "pytest.ini" -o -name "jest.config.*" -o -name "vitest.config.*" -o -name "pyproject.toml" 2>/dev/null | head -10
57
+ find . \( -name "*.test.*" -o -name "*.spec.*" -o -name "test_*" \) -not -path "*/node_modules/*" 2>/dev/null | head -40
58
+ ```
59
+
60
+ ### 2d. Cross-Reference
61
+
62
+ Match each requirement to existing tests by filename, imports, test descriptions. Record: requirement → test_file → status.
63
+
64
+ ## 3. Gap Analysis
65
+
66
+ Classify each requirement:
67
+
68
+ | Status | Criteria |
69
+ |--------|----------|
70
+ | COVERED | Test exists, targets behavior, runs green |
71
+ | PARTIAL | Test exists, failing or incomplete |
72
+ | MISSING | No test found |
73
+
74
+ Build: `{ task_id, requirement, gap_type, suggested_test_path, suggested_command }`
75
+
76
+ No gaps → skip to Step 6, set `nyquist_compliant: true`.
77
+
78
+ ## 4. Present Gap Plan
79
+
80
+ Call AskUserQuestion with gap table and options:
81
+ 1. "Fix all gaps" → Step 5
82
+ 2. "Skip — mark manual-only" → add to Manual-Only, Step 6
83
+ 3. "Cancel" → exit
84
+
85
+ ## 5. Spawn gsd-nyquist-auditor
86
+
87
+ ```
88
+ Task(
89
+ prompt="Read ~/.claude/agents/gsd-nyquist-auditor.md for instructions.\n\n" +
90
+ "<files_to_read>{PLAN, SUMMARY, impl files, VALIDATION.md}</files_to_read>" +
91
+ "<gaps>{gap list}</gaps>" +
92
+ "<test_infrastructure>{framework, config, commands}</test_infrastructure>" +
93
+ "<constraints>Never modify impl files. Max 3 debug iterations. Escalate impl bugs.</constraints>",
94
+ subagent_type="gsd-nyquist-auditor",
95
+ model="{AUDITOR_MODEL}",
96
+ description="Fill validation gaps for Phase {N}"
97
+ )
98
+ ```
99
+
100
+ Handle return:
101
+ - `## GAPS FILLED` → record tests + map updates, Step 6
102
+ - `## PARTIAL` → record resolved, move escalated to manual-only, Step 6
103
+ - `## ESCALATE` → move all to manual-only, Step 6
104
+
105
+ ## 6. Generate/Update VALIDATION.md
106
+
107
+ **State B (create):**
108
+ 1. Read template from `~/.claude/get-shit-done/templates/VALIDATION.md`
109
+ 2. Fill: frontmatter, Test Infrastructure, Per-Task Map, Manual-Only, Sign-Off
110
+ 3. Write to `${PHASE_DIR}/${PADDED_PHASE}-VALIDATION.md`
111
+
112
+ **State A (update):**
113
+ 1. Update Per-Task Map statuses, add escalated to Manual-Only, update frontmatter
114
+ 2. Append audit trail:
115
+
116
+ ```markdown
117
+ ## Validation Audit {date}
118
+ | Metric | Count |
119
+ |--------|-------|
120
+ | Gaps found | {N} |
121
+ | Resolved | {M} |
122
+ | Escalated | {K} |
123
+ ```
124
+
125
+ ## 7. Commit
126
+
127
+ ```bash
128
+ git add {test_files}
129
+ git commit -m "test(phase-${PHASE}): add Nyquist validation tests"
130
+
131
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit-docs "docs(phase-${PHASE}): add/update validation strategy"
132
+ ```
133
+
134
+ ## 8. Results + Routing
135
+
136
+ **Compliant:**
137
+ ```
138
+ GSD > PHASE {N} IS NYQUIST-COMPLIANT
139
+ All requirements have automated verification.
140
+ ▶ Next: /gsd:audit-milestone
141
+ ```
142
+
143
+ **Partial:**
144
+ ```
145
+ GSD > PHASE {N} VALIDATED (PARTIAL)
146
+ {M} automated, {K} manual-only.
147
+ ▶ Retry: /gsd:validate-phase {N}
148
+ ```
149
+
150
+ Display `/clear` reminder.
151
+
152
+ </process>
153
+
154
+ <success_criteria>
155
+ - [ ] Nyquist config checked (exit if disabled)
156
+ - [ ] Input state detected (A/B/C)
157
+ - [ ] State C exits cleanly
158
+ - [ ] PLAN/SUMMARY files read, requirement map built
159
+ - [ ] Test infrastructure detected
160
+ - [ ] Gaps classified (COVERED/PARTIAL/MISSING)
161
+ - [ ] User gate with gap table
162
+ - [ ] Auditor spawned with complete context
163
+ - [ ] All three return formats handled
164
+ - [ ] VALIDATION.md created or updated
165
+ - [ ] Test files committed separately
166
+ - [ ] Results with routing presented
167
+ </success_criteria>
@@ -0,0 +1,243 @@
1
+ <purpose>
2
+ Verify phase goal achievement through goal-backward analysis. Check that the codebase delivers what the phase promised, not just that tasks completed.
3
+
4
+ Executed by a verification subagent spawned from execute-phase.md.
5
+ </purpose>
6
+
7
+ <core_principle>
8
+ **Task completion ≠ Goal achievement**
9
+
10
+ A task "create chat component" can be marked complete when the component is a placeholder. The task was done — but the goal "working chat interface" was not achieved.
11
+
12
+ Goal-backward verification:
13
+ 1. What must be TRUE for the goal to be achieved?
14
+ 2. What must EXIST for those truths to hold?
15
+ 3. What must be WIRED for those artifacts to function?
16
+
17
+ Then verify each level against the actual codebase.
18
+ </core_principle>
19
+
20
+ <required_reading>
21
+ @~/.claude/get-shit-done/references/verification-patterns.md
22
+ @~/.claude/get-shit-done/templates/verification-report.md
23
+ </required_reading>
24
+
25
+ <process>
26
+
27
+ <step name="load_context" priority="first">
28
+ Load phase operation context:
29
+
30
+ ```bash
31
+ INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE_ARG}")
32
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
33
+ ```
34
+
35
+ Extract from init JSON: `phase_dir`, `phase_number`, `phase_name`, `has_plans`, `plan_count`.
36
+
37
+ Then load phase details and list plans/summaries:
38
+ ```bash
39
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${phase_number}"
40
+ grep -E "^| ${phase_number}" .planning/REQUIREMENTS.md 2>/dev/null
41
+ ls "$phase_dir"/*-SUMMARY.md "$phase_dir"/*-PLAN.md 2>/dev/null
42
+ ```
43
+
44
+ Extract **phase goal** from ROADMAP.md (the outcome to verify, not tasks) and **requirements** from REQUIREMENTS.md if it exists.
45
+ </step>
46
+
47
+ <step name="establish_must_haves">
48
+ **Option A: Must-haves in PLAN frontmatter**
49
+
50
+ Use gsd-tools to extract must_haves from each PLAN:
51
+
52
+ ```bash
53
+ for plan in "$PHASE_DIR"/*-PLAN.md; do
54
+ MUST_HAVES=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" frontmatter get "$plan" --field must_haves)
55
+ echo "=== $plan ===" && echo "$MUST_HAVES"
56
+ done
57
+ ```
58
+
59
+ Returns JSON: `{ truths: [...], artifacts: [...], key_links: [...] }`
60
+
61
+ Aggregate all must_haves across plans for phase-level verification.
62
+
63
+ **Option B: Use Success Criteria from ROADMAP.md**
64
+
65
+ If no must_haves in frontmatter (MUST_HAVES returns error or empty), check for Success Criteria:
66
+
67
+ ```bash
68
+ PHASE_DATA=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${phase_number}" --raw)
69
+ ```
70
+
71
+ Parse the `success_criteria` array from the JSON output. If non-empty:
72
+ 1. Use each Success Criterion directly as a **truth** (they are already written as observable, testable behaviors)
73
+ 2. Derive **artifacts** (concrete file paths for each truth)
74
+ 3. Derive **key links** (critical wiring where stubs hide)
75
+ 4. Document the must-haves before proceeding
76
+
77
+ Success Criteria from ROADMAP.md are the contract — they override PLAN-level must_haves when both exist.
78
+
79
+ **Option C: Derive from phase goal (fallback)**
80
+
81
+ If no must_haves in frontmatter AND no Success Criteria in ROADMAP:
82
+ 1. State the goal from ROADMAP.md
83
+ 2. Derive **truths** (3-7 observable behaviors, each testable)
84
+ 3. Derive **artifacts** (concrete file paths for each truth)
85
+ 4. Derive **key links** (critical wiring where stubs hide)
86
+ 5. Document derived must-haves before proceeding
87
+ </step>
88
+
89
+ <step name="verify_truths">
90
+ For each observable truth, determine if the codebase enables it.
91
+
92
+ **Status:** ✓ VERIFIED (all supporting artifacts pass) | ✗ FAILED (artifact missing/stub/unwired) | ? UNCERTAIN (needs human)
93
+
94
+ For each truth: identify supporting artifacts → check artifact status → check wiring → determine truth status.
95
+
96
+ **Example:** Truth "User can see existing messages" depends on Chat.tsx (renders), /api/chat GET (provides), Message model (schema). If Chat.tsx is a stub or API returns hardcoded [] → FAILED. If all exist, are substantive, and connected → VERIFIED.
97
+ </step>
98
+
99
+ <step name="verify_artifacts">
100
+ Use gsd-tools for artifact verification against must_haves in each PLAN:
101
+
102
+ ```bash
103
+ for plan in "$PHASE_DIR"/*-PLAN.md; do
104
+ ARTIFACT_RESULT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify artifacts "$plan")
105
+ echo "=== $plan ===" && echo "$ARTIFACT_RESULT"
106
+ done
107
+ ```
108
+
109
+ Parse JSON result: `{ all_passed, passed, total, artifacts: [{path, exists, issues, passed}] }`
110
+
111
+ **Artifact status from result:**
112
+ - `exists=false` → MISSING
113
+ - `issues` not empty → STUB (check issues for "Only N lines" or "Missing pattern")
114
+ - `passed=true` → VERIFIED (Levels 1-2 pass)
115
+
116
+ **Level 3 — Wired (manual check for artifacts that pass Levels 1-2):**
117
+ ```bash
118
+ grep -r "import.*$artifact_name" src/ --include="*.ts" --include="*.tsx" # IMPORTED
119
+ grep -r "$artifact_name" src/ --include="*.ts" --include="*.tsx" | grep -v "import" # USED
120
+ ```
121
+ WIRED = imported AND used. ORPHANED = exists but not imported/used.
122
+
123
+ | Exists | Substantive | Wired | Status |
124
+ |--------|-------------|-------|--------|
125
+ | ✓ | ✓ | ✓ | ✓ VERIFIED |
126
+ | ✓ | ✓ | ✗ | ⚠️ ORPHANED |
127
+ | ✓ | ✗ | - | ✗ STUB |
128
+ | ✗ | - | - | ✗ MISSING |
129
+ </step>
130
+
131
+ <step name="verify_wiring">
132
+ Use gsd-tools for key link verification against must_haves in each PLAN:
133
+
134
+ ```bash
135
+ for plan in "$PHASE_DIR"/*-PLAN.md; do
136
+ LINKS_RESULT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" verify key-links "$plan")
137
+ echo "=== $plan ===" && echo "$LINKS_RESULT"
138
+ done
139
+ ```
140
+
141
+ Parse JSON result: `{ all_verified, verified, total, links: [{from, to, via, verified, detail}] }`
142
+
143
+ **Link status from result:**
144
+ - `verified=true` → WIRED
145
+ - `verified=false` with "not found" → NOT_WIRED
146
+ - `verified=false` with "Pattern not found" → PARTIAL
147
+
148
+ **Fallback patterns (if key_links not in must_haves):**
149
+
150
+ | Pattern | Check | Status |
151
+ |---------|-------|--------|
152
+ | Component → API | fetch/axios call to API path, response used (await/.then/setState) | WIRED / PARTIAL (call but unused response) / NOT_WIRED |
153
+ | API → Database | Prisma/DB query on model, result returned via res.json() | WIRED / PARTIAL (query but not returned) / NOT_WIRED |
154
+ | Form → Handler | onSubmit with real implementation (fetch/axios/mutate/dispatch), not console.log/empty | WIRED / STUB (log-only/empty) / NOT_WIRED |
155
+ | State → Render | useState variable appears in JSX (`{stateVar}` or `{stateVar.property}`) | WIRED / NOT_WIRED |
156
+
157
+ Record status and evidence for each key link.
158
+ </step>
159
+
160
+ <step name="verify_requirements">
161
+ If REQUIREMENTS.md exists:
162
+ ```bash
163
+ grep -E "Phase ${PHASE_NUM}" .planning/REQUIREMENTS.md 2>/dev/null
164
+ ```
165
+
166
+ For each requirement: parse description → identify supporting truths/artifacts → status: ✓ SATISFIED / ✗ BLOCKED / ? NEEDS HUMAN.
167
+ </step>
168
+
169
+ <step name="scan_antipatterns">
170
+ Extract files modified in this phase from SUMMARY.md, scan each:
171
+
172
+ | Pattern | Search | Severity |
173
+ |---------|--------|----------|
174
+ | TODO/FIXME/XXX/HACK | `grep -n -E "TODO\|FIXME\|XXX\|HACK"` | ⚠️ Warning |
175
+ | Placeholder content | `grep -n -iE "placeholder\|coming soon\|will be here"` | 🛑 Blocker |
176
+ | Empty returns | `grep -n -E "return null\|return \{\}\|return \[\]\|=> \{\}"` | ⚠️ Warning |
177
+ | Log-only functions | Functions containing only console.log | ⚠️ Warning |
178
+
179
+ Categorize: 🛑 Blocker (prevents goal) | ⚠️ Warning (incomplete) | ℹ️ Info (notable).
180
+ </step>
181
+
182
+ <step name="identify_human_verification">
183
+ **Always needs human:** Visual appearance, user flow completion, real-time behavior (WebSocket/SSE), external service integration, performance feel, error message clarity.
184
+
185
+ **Needs human if uncertain:** Complex wiring grep can't trace, dynamic state-dependent behavior, edge cases.
186
+
187
+ Format each as: Test Name → What to do → Expected result → Why can't verify programmatically.
188
+ </step>
189
+
190
+ <step name="determine_status">
191
+ **passed:** All truths VERIFIED, all artifacts pass levels 1-3, all key links WIRED, no blocker anti-patterns.
192
+
193
+ **gaps_found:** Any truth FAILED, artifact MISSING/STUB, key link NOT_WIRED, or blocker found.
194
+
195
+ **human_needed:** All automated checks pass but human verification items remain.
196
+
197
+ **Score:** `verified_truths / total_truths`
198
+ </step>
199
+
200
+ <step name="generate_fix_plans">
201
+ If gaps_found:
202
+
203
+ 1. **Cluster related gaps:** API stub + component unwired → "Wire frontend to backend". Multiple missing → "Complete core implementation". Wiring only → "Connect existing components".
204
+
205
+ 2. **Generate plan per cluster:** Objective, 2-3 tasks (files/action/verify each), re-verify step. Keep focused: single concern per plan.
206
+
207
+ 3. **Order by dependency:** Fix missing → fix stubs → fix wiring → verify.
208
+ </step>
209
+
210
+ <step name="create_report">
211
+ ```bash
212
+ REPORT_PATH="$PHASE_DIR/${PHASE_NUM}-VERIFICATION.md"
213
+ ```
214
+
215
+ Fill template sections: frontmatter (phase/timestamp/status/score), goal achievement, artifact table, wiring table, requirements coverage, anti-patterns, human verification, gaps summary, fix plans (if gaps_found), metadata.
216
+
217
+ See ~/.claude/get-shit-done/templates/verification-report.md for complete template.
218
+ </step>
219
+
220
+ <step name="return_to_orchestrator">
221
+ Return status (`passed` | `gaps_found` | `human_needed`), score (N/M must-haves), report path.
222
+
223
+ If gaps_found: list gaps + recommended fix plan names.
224
+ If human_needed: list items requiring human testing.
225
+
226
+ Orchestrator routes: `passed` → update_roadmap | `gaps_found` → create/execute fixes, re-verify | `human_needed` → present to user.
227
+ </step>
228
+
229
+ </process>
230
+
231
+ <success_criteria>
232
+ - [ ] Must-haves established (from frontmatter or derived)
233
+ - [ ] All truths verified with status and evidence
234
+ - [ ] All artifacts checked at all three levels
235
+ - [ ] All key links verified
236
+ - [ ] Requirements coverage assessed (if applicable)
237
+ - [ ] Anti-patterns scanned and categorized
238
+ - [ ] Human verification items identified
239
+ - [ ] Overall status determined
240
+ - [ ] Fix plans generated (if gaps_found)
241
+ - [ ] VERIFICATION.md created with complete report
242
+ - [ ] Results returned to orchestrator
243
+ </success_criteria>