claude-code-pilot 2.0.0 → 3.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 (455) hide show
  1. package/bin/install.js +267 -250
  2. package/manifest.json +5 -18
  3. package/package.json +5 -7
  4. package/src/agents/build-error-resolver.md +114 -0
  5. package/src/agents/ccp-advisor-researcher.md +104 -0
  6. package/src/agents/ccp-assumptions-analyzer.md +105 -0
  7. package/{gsd/agents/gsd-codebase-mapper.md → src/agents/ccp-codebase-mapper.md} +7 -7
  8. package/{gsd/agents/gsd-debugger.md → src/agents/ccp-debugger.md} +125 -8
  9. package/{gsd/agents/gsd-executor.md → src/agents/ccp-executor.md} +31 -20
  10. package/{gsd/agents/gsd-integration-checker.md → src/agents/ccp-integration-checker.md} +2 -2
  11. package/{gsd/agents/gsd-nyquist-auditor.md → src/agents/ccp-nyquist-auditor.md} +3 -3
  12. package/{gsd/agents/gsd-phase-researcher.md → src/agents/ccp-phase-researcher.md} +127 -13
  13. package/{gsd/agents/gsd-plan-checker.md → src/agents/ccp-plan-checker.md} +57 -21
  14. package/{gsd/agents/gsd-planner.md → src/agents/ccp-planner.md} +61 -23
  15. package/{gsd/agents/gsd-project-researcher.md → src/agents/ccp-project-researcher.md} +33 -6
  16. package/{gsd/agents/gsd-research-synthesizer.md → src/agents/ccp-research-synthesizer.md} +11 -11
  17. package/{gsd/agents/gsd-roadmapper.md → src/agents/ccp-roadmapper.md} +39 -10
  18. package/src/agents/ccp-ui-auditor.md +439 -0
  19. package/src/agents/ccp-ui-checker.md +300 -0
  20. package/src/agents/ccp-ui-researcher.md +357 -0
  21. package/{gsd/agents/gsd-verifier.md → src/agents/ccp-verifier.md} +81 -15
  22. package/src/agents/cpp-build-resolver.md +90 -0
  23. package/src/agents/cpp-reviewer.md +72 -0
  24. package/src/agents/database-reviewer.md +91 -0
  25. package/src/agents/docs-lookup.md +68 -0
  26. package/src/agents/flutter-reviewer.md +243 -0
  27. package/src/agents/go-build-resolver.md +94 -0
  28. package/src/agents/go-reviewer.md +76 -0
  29. package/src/agents/java-build-resolver.md +153 -0
  30. package/src/agents/java-reviewer.md +92 -0
  31. package/src/agents/kotlin-build-resolver.md +118 -0
  32. package/src/agents/kotlin-reviewer.md +159 -0
  33. package/src/agents/planner.md +212 -0
  34. package/src/agents/python-reviewer.md +98 -0
  35. package/src/agents/pytorch-build-resolver.md +120 -0
  36. package/src/agents/refactor-cleaner.md +85 -0
  37. package/src/agents/rust-build-resolver.md +148 -0
  38. package/src/agents/rust-reviewer.md +94 -0
  39. package/src/agents/typescript-reviewer.md +112 -0
  40. package/src/available-rules/README.md +80 -0
  41. package/src/available-rules/cpp/coding-style.md +44 -0
  42. package/src/available-rules/cpp/hooks.md +39 -0
  43. package/src/available-rules/cpp/patterns.md +51 -0
  44. package/src/available-rules/cpp/security.md +51 -0
  45. package/src/available-rules/cpp/testing.md +44 -0
  46. package/src/available-rules/csharp/coding-style.md +72 -0
  47. package/src/available-rules/csharp/hooks.md +25 -0
  48. package/src/available-rules/csharp/patterns.md +50 -0
  49. package/src/available-rules/csharp/security.md +58 -0
  50. package/src/available-rules/csharp/testing.md +46 -0
  51. package/src/available-rules/java/coding-style.md +114 -0
  52. package/src/available-rules/java/hooks.md +18 -0
  53. package/src/available-rules/java/patterns.md +146 -0
  54. package/src/available-rules/java/security.md +100 -0
  55. package/src/available-rules/java/testing.md +131 -0
  56. package/src/available-rules/kotlin/hooks.md +17 -0
  57. package/src/available-rules/rust/coding-style.md +151 -0
  58. package/src/available-rules/rust/hooks.md +16 -0
  59. package/src/available-rules/rust/patterns.md +168 -0
  60. package/src/available-rules/rust/security.md +141 -0
  61. package/src/available-rules/rust/testing.md +154 -0
  62. package/src/commands/aside.md +164 -0
  63. package/src/commands/build-fix.md +62 -0
  64. package/src/commands/ccp/add-backlog.md +76 -0
  65. package/{gsd/commands-gsd → src/commands/ccp}/add-phase.md +3 -3
  66. package/{gsd/commands-gsd → src/commands/ccp}/add-tests.md +5 -5
  67. package/{gsd/commands-gsd → src/commands/ccp}/add-todo.md +4 -4
  68. package/{gsd/commands-gsd → src/commands/ccp}/audit-milestone.md +3 -3
  69. package/src/commands/ccp/audit-uat.md +24 -0
  70. package/src/commands/ccp/autonomous.md +41 -0
  71. package/{gsd/commands-gsd → src/commands/ccp}/check-todos.md +3 -3
  72. package/{gsd/commands-gsd → src/commands/ccp}/cleanup.md +3 -3
  73. package/{gsd/commands-gsd → src/commands/ccp}/complete-milestone.md +9 -9
  74. package/{gsd/commands-gsd → src/commands/ccp}/debug.md +14 -9
  75. package/src/commands/ccp/discuss-phase.md +64 -0
  76. package/src/commands/ccp/do.md +30 -0
  77. package/src/commands/ccp/execute-phase.md +59 -0
  78. package/src/commands/ccp/fast.md +30 -0
  79. package/src/commands/ccp/forensics.md +56 -0
  80. package/{gsd/commands-gsd → src/commands/ccp}/health.md +3 -3
  81. package/{gsd/commands-gsd → src/commands/ccp}/help.md +5 -5
  82. package/{gsd/commands-gsd → src/commands/ccp}/insert-phase.md +3 -3
  83. package/{gsd/commands-gsd → src/commands/ccp}/list-phase-assumptions.md +2 -2
  84. package/src/commands/ccp/manager.md +39 -0
  85. package/{gsd/commands-gsd → src/commands/ccp}/map-codebase.md +7 -7
  86. package/src/commands/ccp/milestone-summary.md +51 -0
  87. package/{gsd/commands-gsd → src/commands/ccp}/new-milestone.md +8 -8
  88. package/{gsd/commands-gsd → src/commands/ccp}/new-project.md +8 -8
  89. package/src/commands/ccp/next.md +24 -0
  90. package/src/commands/ccp/note.md +34 -0
  91. package/{gsd/commands-gsd → src/commands/ccp}/pause-work.md +3 -3
  92. package/{gsd/commands-gsd → src/commands/ccp}/plan-milestone-gaps.md +5 -5
  93. package/{gsd/commands-gsd → src/commands/ccp}/plan-phase.md +9 -7
  94. package/src/commands/ccp/plant-seed.md +28 -0
  95. package/src/commands/ccp/pr-branch.md +25 -0
  96. package/{gsd/commands-gsd → src/commands/ccp}/progress.md +3 -3
  97. package/{gsd/commands-gsd → src/commands/ccp}/quick.md +10 -8
  98. package/{gsd/commands-gsd → src/commands/ccp}/remove-phase.md +3 -3
  99. package/{gsd/commands-gsd → src/commands/ccp}/research-phase.md +17 -12
  100. package/{gsd/commands-gsd → src/commands/ccp}/resume-work.md +3 -3
  101. package/src/commands/ccp/review-backlog.md +61 -0
  102. package/src/commands/ccp/session-report.md +19 -0
  103. package/src/commands/ccp/set-profile.md +12 -0
  104. package/{gsd/commands-gsd → src/commands/ccp}/settings.md +5 -5
  105. package/src/commands/ccp/ship.md +23 -0
  106. package/src/commands/ccp/stats.md +18 -0
  107. package/src/commands/ccp/thread.md +127 -0
  108. package/src/commands/ccp/ui-phase.md +34 -0
  109. package/src/commands/ccp/ui-review.md +32 -0
  110. package/{gsd/commands-gsd → src/commands/ccp}/update.md +5 -5
  111. package/{gsd/commands-gsd → src/commands/ccp}/validate-phase.md +3 -3
  112. package/{gsd/commands-gsd → src/commands/ccp}/verify-work.md +5 -5
  113. package/src/commands/code-review.md +40 -0
  114. package/src/commands/context-budget.md +29 -0
  115. package/src/commands/cpp-build.md +173 -0
  116. package/src/commands/cpp-review.md +132 -0
  117. package/src/commands/cpp-test.md +251 -0
  118. package/src/commands/docs.md +31 -0
  119. package/src/commands/e2e.md +364 -0
  120. package/src/commands/eval.md +120 -0
  121. package/{ecc → src}/commands/evolve.md +2 -2
  122. package/src/commands/go-build.md +183 -0
  123. package/src/commands/go-review.md +148 -0
  124. package/src/commands/go-test.md +268 -0
  125. package/src/commands/gradle-build.md +70 -0
  126. package/src/commands/harness-audit.md +71 -0
  127. package/src/commands/kotlin-build.md +174 -0
  128. package/src/commands/kotlin-review.md +140 -0
  129. package/src/commands/kotlin-test.md +312 -0
  130. package/src/commands/orchestrate.md +231 -0
  131. package/src/commands/plan.md +114 -0
  132. package/src/commands/prompt-optimize.md +38 -0
  133. package/src/commands/prune.md +25 -0
  134. package/src/commands/python-review.md +297 -0
  135. package/{ecc → src}/commands/quality-gate.md +1 -1
  136. package/src/commands/refactor-clean.md +80 -0
  137. package/src/commands/rules-distill.md +11 -0
  138. package/src/commands/rust-build.md +187 -0
  139. package/src/commands/rust-review.md +142 -0
  140. package/src/commands/rust-test.md +308 -0
  141. package/{ecc → src}/commands/sessions.md +10 -10
  142. package/src/commands/setup-pm.md +80 -0
  143. package/{kit → src}/commands/setup.md +45 -19
  144. package/src/commands/skill-create.md +172 -0
  145. package/src/commands/skill-health.md +51 -0
  146. package/src/commands/tdd.md +328 -0
  147. package/src/commands/test-coverage.md +69 -0
  148. package/src/commands/update-codemaps.md +72 -0
  149. package/src/commands/update-docs.md +84 -0
  150. package/{gsd/hooks/gsd-context-monitor.js → src/hooks/ccp-context-monitor.js} +3 -3
  151. package/src/hooks/ccp-prompt-guard.js +96 -0
  152. package/{gsd/hooks/gsd-statusline.js → src/hooks/ccp-statusline.js} +7 -7
  153. package/src/hooks/ccp-workflow-guard.js +94 -0
  154. package/src/hooks/config-protection.js +141 -0
  155. package/{kit → src}/hooks/kit-check-update.js +7 -4
  156. package/src/hooks/mcp-health-check.js +620 -0
  157. package/{ecc/scripts → src}/hooks/run-with-flags-shell.sh +1 -1
  158. package/{ecc/scripts → src}/hooks/run-with-flags.js +74 -13
  159. package/src/hooks/session-end-marker.js +29 -0
  160. package/{ecc/scripts → src}/hooks/session-end.js +83 -40
  161. package/{ecc/scripts → src}/hooks/session-start.js +75 -9
  162. package/{ecc/scripts → src}/lib/hook-flags.js +8 -4
  163. package/{ecc/scripts → src}/lib/project-detect.js +2 -1
  164. package/{ecc/scripts → src}/lib/session-manager.d.ts +5 -1
  165. package/{ecc/scripts → src}/lib/session-manager.js +202 -92
  166. package/{ecc/scripts → src}/lib/utils.d.ts +23 -1
  167. package/{ecc/scripts → src}/lib/utils.js +91 -3
  168. package/{gsd/get-shit-done/bin/gsd-tools.cjs → src/pilot/bin/ccp-tools.cjs} +257 -86
  169. package/{gsd/get-shit-done → src/pilot}/bin/lib/commands.cjs +1 -1
  170. package/src/pilot/bin/lib/config.cjs +444 -0
  171. package/src/pilot/bin/lib/core.cjs +1190 -0
  172. package/src/pilot/bin/lib/init.cjs +1281 -0
  173. package/src/pilot/bin/lib/model-profiles.cjs +67 -0
  174. package/{gsd/get-shit-done → src/pilot}/bin/lib/phase.cjs +2 -2
  175. package/src/pilot/bin/lib/security.cjs +382 -0
  176. package/{gsd/get-shit-done → src/pilot}/bin/lib/state.cjs +1 -1
  177. package/src/pilot/bin/lib/uat.cjs +282 -0
  178. package/{gsd/get-shit-done → src/pilot}/bin/lib/verify.cjs +10 -10
  179. package/{gsd/get-shit-done → src/pilot}/references/continuation-format.md +16 -16
  180. package/{gsd/get-shit-done → src/pilot}/references/decimal-phase-calculation.md +5 -5
  181. package/{gsd/get-shit-done → src/pilot}/references/git-integration.md +5 -5
  182. package/{gsd/get-shit-done → src/pilot}/references/git-planning-commit.md +4 -4
  183. package/src/pilot/references/mcp-servers.json +153 -0
  184. package/{gsd/get-shit-done → src/pilot}/references/model-profile-resolution.md +2 -2
  185. package/{gsd/get-shit-done → src/pilot}/references/model-profiles.md +20 -20
  186. package/{gsd/get-shit-done → src/pilot}/references/phase-argument-parsing.md +4 -4
  187. package/{gsd/get-shit-done → src/pilot}/references/planning-config.md +15 -15
  188. package/{gsd/get-shit-done → src/pilot}/references/ui-brand.md +5 -5
  189. package/{gsd/get-shit-done → src/pilot}/references/verification-patterns.md +1 -1
  190. package/{gsd/get-shit-done → src/pilot}/templates/DEBUG.md +1 -1
  191. package/{gsd/get-shit-done → src/pilot}/templates/UAT.md +3 -3
  192. package/src/pilot/templates/UI-SPEC.md +100 -0
  193. package/{gsd/get-shit-done → src/pilot}/templates/VALIDATION.md +1 -1
  194. package/src/pilot/templates/claude-md.md +122 -0
  195. package/{gsd/get-shit-done → src/pilot}/templates/codebase/architecture.md +2 -2
  196. package/{gsd/get-shit-done → src/pilot}/templates/codebase/structure.md +13 -13
  197. package/{gsd/get-shit-done → src/pilot}/templates/context.md +4 -4
  198. package/src/pilot/templates/copilot-instructions.md +7 -0
  199. package/{gsd/get-shit-done → src/pilot}/templates/debug-subagent-prompt.md +4 -4
  200. package/src/pilot/templates/dev-preferences.md +21 -0
  201. package/{gsd/get-shit-done → src/pilot}/templates/discovery.md +2 -2
  202. package/src/pilot/templates/discussion-log.md +63 -0
  203. package/{gsd/get-shit-done → src/pilot}/templates/phase-prompt.md +12 -12
  204. package/{gsd/get-shit-done → src/pilot}/templates/planner-subagent-prompt.md +7 -7
  205. package/{gsd/get-shit-done → src/pilot}/templates/project.md +1 -1
  206. package/{gsd/get-shit-done → src/pilot}/templates/research.md +2 -2
  207. package/{gsd/get-shit-done → src/pilot}/templates/state.md +2 -2
  208. package/{gsd/get-shit-done → src/pilot}/templates/summary-complex.md +1 -1
  209. package/{gsd/get-shit-done → src/pilot}/workflows/add-phase.md +11 -11
  210. package/{gsd/get-shit-done → src/pilot}/workflows/add-tests.md +15 -15
  211. package/{gsd/get-shit-done → src/pilot}/workflows/add-todo.md +7 -7
  212. package/{gsd/get-shit-done → src/pilot}/workflows/audit-milestone.md +24 -16
  213. package/src/pilot/workflows/audit-uat.md +109 -0
  214. package/src/pilot/workflows/autonomous.md +891 -0
  215. package/{gsd/get-shit-done → src/pilot}/workflows/check-todos.md +10 -10
  216. package/{gsd/get-shit-done → src/pilot}/workflows/cleanup.md +3 -3
  217. package/{gsd/get-shit-done → src/pilot}/workflows/complete-milestone.md +19 -16
  218. package/{gsd/get-shit-done → src/pilot}/workflows/diagnose-issues.md +9 -4
  219. package/{gsd/get-shit-done → src/pilot}/workflows/discovery-phase.md +8 -8
  220. package/src/pilot/workflows/discuss-phase-assumptions.md +653 -0
  221. package/{gsd/get-shit-done → src/pilot}/workflows/discuss-phase.md +407 -49
  222. package/src/pilot/workflows/do.md +104 -0
  223. package/src/pilot/workflows/execute-phase.md +821 -0
  224. package/{gsd/get-shit-done → src/pilot}/workflows/execute-plan.md +79 -28
  225. package/src/pilot/workflows/fast.md +105 -0
  226. package/src/pilot/workflows/forensics.md +265 -0
  227. package/{gsd/get-shit-done → src/pilot}/workflows/health.md +34 -11
  228. package/src/pilot/workflows/help.md +775 -0
  229. package/{gsd/get-shit-done → src/pilot}/workflows/insert-phase.md +10 -10
  230. package/{gsd/get-shit-done → src/pilot}/workflows/list-phase-assumptions.md +4 -4
  231. package/src/pilot/workflows/manager.md +362 -0
  232. package/{gsd/get-shit-done → src/pilot}/workflows/map-codebase.md +27 -17
  233. package/src/pilot/workflows/milestone-summary.md +223 -0
  234. package/{gsd/get-shit-done → src/pilot}/workflows/new-milestone.md +135 -33
  235. package/{gsd/get-shit-done → src/pilot}/workflows/new-project.md +152 -79
  236. package/src/pilot/workflows/next.md +97 -0
  237. package/src/pilot/workflows/node-repair.md +92 -0
  238. package/src/pilot/workflows/note.md +156 -0
  239. package/src/pilot/workflows/pause-work.md +177 -0
  240. package/{gsd/get-shit-done → src/pilot}/workflows/plan-milestone-gaps.md +10 -11
  241. package/src/pilot/workflows/plan-phase.md +859 -0
  242. package/src/pilot/workflows/plant-seed.md +169 -0
  243. package/src/pilot/workflows/pr-branch.md +129 -0
  244. package/{gsd/get-shit-done → src/pilot}/workflows/progress.md +95 -34
  245. package/{gsd/get-shit-done → src/pilot}/workflows/quick.md +33 -21
  246. package/{gsd/get-shit-done → src/pilot}/workflows/remove-phase.md +14 -14
  247. package/{gsd/get-shit-done → src/pilot}/workflows/research-phase.md +18 -10
  248. package/{gsd/get-shit-done → src/pilot}/workflows/resume-project.md +37 -18
  249. package/src/pilot/workflows/session-report.md +146 -0
  250. package/{gsd/get-shit-done → src/pilot}/workflows/set-profile.md +7 -7
  251. package/{gsd/get-shit-done → src/pilot}/workflows/settings.md +75 -22
  252. package/src/pilot/workflows/ship.md +228 -0
  253. package/src/pilot/workflows/stats.md +60 -0
  254. package/{gsd/get-shit-done → src/pilot}/workflows/transition.md +57 -17
  255. package/src/pilot/workflows/ui-phase.md +302 -0
  256. package/src/pilot/workflows/ui-review.md +165 -0
  257. package/{gsd/get-shit-done → src/pilot}/workflows/update.md +88 -58
  258. package/{gsd/get-shit-done → src/pilot}/workflows/validate-phase.md +24 -17
  259. package/{gsd/get-shit-done → src/pilot}/workflows/verify-phase.md +26 -15
  260. package/{gsd/get-shit-done → src/pilot}/workflows/verify-work.md +89 -37
  261. package/{ecc → src}/rules/common/agents.md +1 -0
  262. package/{ecc → src}/rules/common/coding-style.md +21 -0
  263. package/src/skills/agentic-engineering/SKILL.md +63 -0
  264. package/src/skills/ai-first-engineering/SKILL.md +51 -0
  265. package/src/skills/ai-regression-testing/SKILL.md +385 -0
  266. package/src/skills/api-design/SKILL.md +523 -0
  267. package/src/skills/architecture-decision-records/SKILL.md +179 -0
  268. package/src/skills/backend-patterns/SKILL.md +598 -0
  269. package/src/skills/benchmark/SKILL.md +87 -0
  270. package/src/skills/blueprint/SKILL.md +90 -0
  271. package/src/skills/browser-qa/SKILL.md +81 -0
  272. package/src/skills/claude-api/SKILL.md +337 -0
  273. package/src/skills/codebase-onboarding/SKILL.md +233 -0
  274. package/src/skills/coding-standards/SKILL.md +530 -0
  275. package/src/skills/context-budget/SKILL.md +135 -0
  276. package/{ecc → src}/skills/continuous-learning-v2/SKILL.md +2 -2
  277. package/{ecc → src}/skills/continuous-learning-v2/agents/observer-loop.sh +1 -1
  278. package/src/skills/cpp-coding-standards/SKILL.md +723 -0
  279. package/src/skills/cpp-testing/SKILL.md +324 -0
  280. package/src/skills/database-migrations/SKILL.md +429 -0
  281. package/src/skills/deep-research/SKILL.md +155 -0
  282. package/src/skills/deployment-patterns/SKILL.md +427 -0
  283. package/src/skills/django-patterns/SKILL.md +734 -0
  284. package/src/skills/django-security/SKILL.md +593 -0
  285. package/src/skills/django-tdd/SKILL.md +729 -0
  286. package/src/skills/django-verification/SKILL.md +469 -0
  287. package/src/skills/docker-patterns/SKILL.md +364 -0
  288. package/src/skills/documentation-lookup/SKILL.md +90 -0
  289. package/src/skills/e2e-testing/SKILL.md +326 -0
  290. package/src/skills/exa-search/SKILL.md +103 -0
  291. package/src/skills/frontend-patterns/SKILL.md +642 -0
  292. package/src/skills/golang-patterns/SKILL.md +674 -0
  293. package/src/skills/golang-testing/SKILL.md +720 -0
  294. package/src/skills/java-coding-standards/SKILL.md +147 -0
  295. package/src/skills/jpa-patterns/SKILL.md +151 -0
  296. package/src/skills/kotlin-coroutines-flows/SKILL.md +284 -0
  297. package/src/skills/kotlin-exposed-patterns/SKILL.md +719 -0
  298. package/src/skills/kotlin-ktor-patterns/SKILL.md +689 -0
  299. package/src/skills/kotlin-patterns/SKILL.md +711 -0
  300. package/src/skills/kotlin-testing/SKILL.md +824 -0
  301. package/src/skills/laravel-patterns/SKILL.md +415 -0
  302. package/src/skills/laravel-security/SKILL.md +285 -0
  303. package/src/skills/laravel-tdd/SKILL.md +283 -0
  304. package/src/skills/laravel-verification/SKILL.md +179 -0
  305. package/src/skills/mcp-server-patterns/SKILL.md +67 -0
  306. package/src/skills/perl-patterns/SKILL.md +504 -0
  307. package/src/skills/perl-testing/SKILL.md +475 -0
  308. package/src/skills/postgres-patterns/SKILL.md +147 -0
  309. package/src/skills/prompt-optimizer/SKILL.md +397 -0
  310. package/src/skills/python-patterns/SKILL.md +750 -0
  311. package/src/skills/python-testing/SKILL.md +816 -0
  312. package/src/skills/rust-patterns/SKILL.md +499 -0
  313. package/src/skills/rust-testing/SKILL.md +500 -0
  314. package/src/skills/safety-guard/SKILL.md +69 -0
  315. package/src/skills/search-first/SKILL.md +161 -0
  316. package/src/skills/security-review/SKILL.md +495 -0
  317. package/src/skills/security-review/cloud-infrastructure-security.md +361 -0
  318. package/src/skills/security-scan/SKILL.md +165 -0
  319. package/src/skills/springboot-patterns/SKILL.md +314 -0
  320. package/src/skills/springboot-security/SKILL.md +272 -0
  321. package/src/skills/springboot-tdd/SKILL.md +158 -0
  322. package/src/skills/springboot-verification/SKILL.md +231 -0
  323. package/src/skills/tdd-workflow/SKILL.md +410 -0
  324. package/ecc/scripts/hooks/session-end-marker.js +0 -15
  325. package/gsd/LICENSE +0 -21
  326. package/gsd/commands-gsd/discuss-phase.md +0 -90
  327. package/gsd/commands-gsd/execute-phase.md +0 -41
  328. package/gsd/commands-gsd/join-discord.md +0 -18
  329. package/gsd/commands-gsd/reapply-patches.md +0 -123
  330. package/gsd/commands-gsd/set-profile.md +0 -34
  331. package/gsd/get-shit-done/bin/lib/config.cjs +0 -169
  332. package/gsd/get-shit-done/bin/lib/core.cjs +0 -492
  333. package/gsd/get-shit-done/bin/lib/init.cjs +0 -710
  334. package/gsd/get-shit-done/workflows/execute-phase.md +0 -459
  335. package/gsd/get-shit-done/workflows/help.md +0 -489
  336. package/gsd/get-shit-done/workflows/pause-work.md +0 -122
  337. package/gsd/get-shit-done/workflows/plan-phase.md +0 -560
  338. package/gsd/hooks/gsd-check-update.js +0 -81
  339. package/kit/CLAUDE.md +0 -43
  340. package/kit/commands/kit/update.md +0 -46
  341. package/kit/mcp.json +0 -10
  342. package/kit/rules/code-style.md +0 -24
  343. /package/{ecc → src}/agents/architect.md +0 -0
  344. /package/{ecc → src}/agents/code-reviewer.md +0 -0
  345. /package/{ecc → src}/agents/doc-updater.md +0 -0
  346. /package/{ecc → src}/agents/e2e-runner.md +0 -0
  347. /package/{ecc → src}/agents/security-reviewer.md +0 -0
  348. /package/{ecc → src}/agents/tdd-guide.md +0 -0
  349. /package/{ecc/rules → src/available-rules}/golang/coding-style.md +0 -0
  350. /package/{ecc/rules → src/available-rules}/golang/hooks.md +0 -0
  351. /package/{ecc/rules → src/available-rules}/golang/patterns.md +0 -0
  352. /package/{ecc/rules → src/available-rules}/golang/security.md +0 -0
  353. /package/{ecc/rules → src/available-rules}/golang/testing.md +0 -0
  354. /package/{ecc/rules → src/available-rules}/kotlin/coding-style.md +0 -0
  355. /package/{ecc/rules → src/available-rules}/kotlin/patterns.md +0 -0
  356. /package/{ecc/rules → src/available-rules}/kotlin/security.md +0 -0
  357. /package/{ecc/rules → src/available-rules}/kotlin/testing.md +0 -0
  358. /package/{ecc/rules → src/available-rules}/perl/coding-style.md +0 -0
  359. /package/{ecc/rules → src/available-rules}/perl/hooks.md +0 -0
  360. /package/{ecc/rules → src/available-rules}/perl/patterns.md +0 -0
  361. /package/{ecc/rules → src/available-rules}/perl/security.md +0 -0
  362. /package/{ecc/rules → src/available-rules}/perl/testing.md +0 -0
  363. /package/{ecc/rules → src/available-rules}/php/coding-style.md +0 -0
  364. /package/{ecc/rules → src/available-rules}/php/hooks.md +0 -0
  365. /package/{ecc/rules → src/available-rules}/php/patterns.md +0 -0
  366. /package/{ecc/rules → src/available-rules}/php/security.md +0 -0
  367. /package/{ecc/rules → src/available-rules}/php/testing.md +0 -0
  368. /package/{ecc/rules → src/available-rules}/python/coding-style.md +0 -0
  369. /package/{ecc/rules → src/available-rules}/python/hooks.md +0 -0
  370. /package/{ecc/rules → src/available-rules}/python/patterns.md +0 -0
  371. /package/{ecc/rules → src/available-rules}/python/security.md +0 -0
  372. /package/{ecc/rules → src/available-rules}/python/testing.md +0 -0
  373. /package/{ecc/rules → src/available-rules}/swift/coding-style.md +0 -0
  374. /package/{ecc/rules → src/available-rules}/swift/hooks.md +0 -0
  375. /package/{ecc/rules → src/available-rules}/swift/patterns.md +0 -0
  376. /package/{ecc/rules → src/available-rules}/swift/security.md +0 -0
  377. /package/{ecc/rules → src/available-rules}/swift/testing.md +0 -0
  378. /package/{ecc/rules → src/available-rules}/typescript/coding-style.md +0 -0
  379. /package/{ecc/rules → src/available-rules}/typescript/hooks.md +0 -0
  380. /package/{ecc/rules → src/available-rules}/typescript/patterns.md +0 -0
  381. /package/{ecc/rules → src/available-rules}/typescript/security.md +0 -0
  382. /package/{ecc/rules → src/available-rules}/typescript/testing.md +0 -0
  383. /package/{ecc → src}/commands/checkpoint.md +0 -0
  384. /package/{ecc → src}/commands/learn.md +0 -0
  385. /package/{ecc → src}/commands/model-route.md +0 -0
  386. /package/{ecc → src}/commands/resume-session.md +0 -0
  387. /package/{ecc → src}/commands/save-session.md +0 -0
  388. /package/{kit → src}/commands/setup-refresh.md +0 -0
  389. /package/{kit → src}/commands/tool-guide.md +0 -0
  390. /package/{ecc → src}/commands/verify.md +0 -0
  391. /package/{ecc → src}/contexts/dev.md +0 -0
  392. /package/{ecc → src}/contexts/research.md +0 -0
  393. /package/{ecc → src}/contexts/review.md +0 -0
  394. /package/{ecc → src}/examples/CLAUDE.md +0 -0
  395. /package/{ecc → src}/examples/django-api-CLAUDE.md +0 -0
  396. /package/{ecc → src}/examples/go-microservice-CLAUDE.md +0 -0
  397. /package/{ecc → src}/examples/rust-api-CLAUDE.md +0 -0
  398. /package/{ecc → src}/examples/saas-nextjs-CLAUDE.md +0 -0
  399. /package/{ecc → src}/examples/user-CLAUDE.md +0 -0
  400. /package/{ecc/scripts → src}/hooks/check-hook-enabled.js +0 -0
  401. /package/{ecc/scripts → src}/hooks/evaluate-session.js +0 -0
  402. /package/{ecc/scripts → src}/hooks/pre-compact.js +0 -0
  403. /package/{ecc/scripts → src}/hooks/suggest-compact.js +0 -0
  404. /package/{ecc/scripts → src}/lib/package-manager.d.ts +0 -0
  405. /package/{ecc/scripts → src}/lib/package-manager.js +0 -0
  406. /package/{ecc/scripts → src}/lib/resolve-formatter.js +0 -0
  407. /package/{ecc/scripts → src}/lib/session-aliases.d.ts +0 -0
  408. /package/{ecc/scripts → src}/lib/session-aliases.js +0 -0
  409. /package/{ecc/scripts → src}/lib/shell-split.js +0 -0
  410. /package/{gsd/get-shit-done → src/pilot}/bin/lib/frontmatter.cjs +0 -0
  411. /package/{gsd/get-shit-done → src/pilot}/bin/lib/milestone.cjs +0 -0
  412. /package/{gsd/get-shit-done → src/pilot}/bin/lib/roadmap.cjs +0 -0
  413. /package/{gsd/get-shit-done → src/pilot}/bin/lib/template.cjs +0 -0
  414. /package/{gsd/get-shit-done → src/pilot}/references/checkpoints.md +0 -0
  415. /package/{gsd/get-shit-done → src/pilot}/references/questioning.md +0 -0
  416. /package/{gsd/get-shit-done → src/pilot}/references/tdd.md +0 -0
  417. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/concerns.md +0 -0
  418. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/conventions.md +0 -0
  419. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/integrations.md +0 -0
  420. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/stack.md +0 -0
  421. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/testing.md +0 -0
  422. /package/{gsd/get-shit-done → src/pilot}/templates/config.json +0 -0
  423. /package/{gsd/get-shit-done → src/pilot}/templates/continue-here.md +0 -0
  424. /package/{gsd/get-shit-done → src/pilot}/templates/milestone-archive.md +0 -0
  425. /package/{gsd/get-shit-done → src/pilot}/templates/milestone.md +0 -0
  426. /package/{gsd/get-shit-done → src/pilot}/templates/requirements.md +0 -0
  427. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/ARCHITECTURE.md +0 -0
  428. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/FEATURES.md +0 -0
  429. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/PITFALLS.md +0 -0
  430. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/STACK.md +0 -0
  431. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/SUMMARY.md +0 -0
  432. /package/{gsd/get-shit-done → src/pilot}/templates/retrospective.md +0 -0
  433. /package/{gsd/get-shit-done → src/pilot}/templates/roadmap.md +0 -0
  434. /package/{gsd/get-shit-done → src/pilot}/templates/summary-minimal.md +0 -0
  435. /package/{gsd/get-shit-done → src/pilot}/templates/summary-standard.md +0 -0
  436. /package/{gsd/get-shit-done → src/pilot}/templates/summary.md +0 -0
  437. /package/{gsd/get-shit-done → src/pilot}/templates/user-setup.md +0 -0
  438. /package/{gsd/get-shit-done → src/pilot}/templates/verification-report.md +0 -0
  439. /package/{ecc → src}/rules/common/development-workflow.md +0 -0
  440. /package/{ecc → src}/rules/common/git-workflow.md +0 -0
  441. /package/{ecc → src}/rules/common/hooks.md +0 -0
  442. /package/{ecc → src}/rules/common/patterns.md +0 -0
  443. /package/{ecc → src}/rules/common/performance.md +0 -0
  444. /package/{ecc → src}/rules/common/security.md +0 -0
  445. /package/{ecc → src}/rules/common/testing.md +0 -0
  446. /package/{ecc → src}/skills/continuous-learning-v2/agents/observer.md +0 -0
  447. /package/{ecc → src}/skills/continuous-learning-v2/agents/start-observer.sh +0 -0
  448. /package/{ecc → src}/skills/continuous-learning-v2/config.json +0 -0
  449. /package/{ecc → src}/skills/continuous-learning-v2/hooks/observe.sh +0 -0
  450. /package/{ecc → src}/skills/continuous-learning-v2/scripts/detect-project.sh +0 -0
  451. /package/{ecc → src}/skills/continuous-learning-v2/scripts/instinct-cli.py +0 -0
  452. /package/{ecc → src}/skills/continuous-learning-v2/scripts/test_parse_instinct.py +0 -0
  453. /package/{ecc → src}/skills/strategic-compact/SKILL.md +0 -0
  454. /package/{ecc → src}/skills/strategic-compact/suggest-compact.sh +0 -0
  455. /package/{ecc/skills/verification-loop-SKILL.md → src/skills/verification-loop/SKILL.md} +0 -0
@@ -0,0 +1,282 @@
1
+ /**
2
+ * UAT Audit — Cross-phase UAT/VERIFICATION scanner
3
+ *
4
+ * Reads all *-UAT.md and *-VERIFICATION.md files across all phases.
5
+ * Extracts non-passing items. Returns structured JSON for workflow consumption.
6
+ */
7
+
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+ const { output, error, getMilestonePhaseFilter, planningDir, toPosixPath } = require('./core.cjs');
11
+ const { extractFrontmatter } = require('./frontmatter.cjs');
12
+ const { requireSafePath, sanitizeForDisplay } = require('./security.cjs');
13
+
14
+ function cmdAuditUat(cwd, raw) {
15
+ const phasesDir = path.join(planningDir(cwd), 'phases');
16
+ if (!fs.existsSync(phasesDir)) {
17
+ error('No phases directory found in planning directory');
18
+ }
19
+
20
+ const isDirInMilestone = getMilestonePhaseFilter(cwd);
21
+ const results = [];
22
+
23
+ // Scan all phase directories
24
+ const dirs = fs.readdirSync(phasesDir, { withFileTypes: true })
25
+ .filter(e => e.isDirectory())
26
+ .map(e => e.name)
27
+ .filter(isDirInMilestone)
28
+ .sort();
29
+
30
+ for (const dir of dirs) {
31
+ const phaseMatch = dir.match(/^(\d+[A-Z]?(?:\.\d+)*)/i);
32
+ const phaseNum = phaseMatch ? phaseMatch[1] : dir;
33
+ const phaseDir = path.join(phasesDir, dir);
34
+ const files = fs.readdirSync(phaseDir);
35
+
36
+ // Process UAT files
37
+ for (const file of files.filter(f => f.includes('-UAT') && f.endsWith('.md'))) {
38
+ const content = fs.readFileSync(path.join(phaseDir, file), 'utf-8');
39
+ const items = parseUatItems(content);
40
+ if (items.length > 0) {
41
+ results.push({
42
+ phase: phaseNum,
43
+ phase_dir: dir,
44
+ file,
45
+ file_path: toPosixPath(path.relative(cwd, path.join(phaseDir, file))),
46
+ type: 'uat',
47
+ status: (extractFrontmatter(content).status || 'unknown'),
48
+ items,
49
+ });
50
+ }
51
+ }
52
+
53
+ // Process VERIFICATION files
54
+ for (const file of files.filter(f => f.includes('-VERIFICATION') && f.endsWith('.md'))) {
55
+ const content = fs.readFileSync(path.join(phaseDir, file), 'utf-8');
56
+ const status = extractFrontmatter(content).status || 'unknown';
57
+ if (status === 'human_needed' || status === 'gaps_found') {
58
+ const items = parseVerificationItems(content, status);
59
+ if (items.length > 0) {
60
+ results.push({
61
+ phase: phaseNum,
62
+ phase_dir: dir,
63
+ file,
64
+ file_path: toPosixPath(path.relative(cwd, path.join(phaseDir, file))),
65
+ type: 'verification',
66
+ status,
67
+ items,
68
+ });
69
+ }
70
+ }
71
+ }
72
+ }
73
+
74
+ // Compute summary
75
+ const summary = {
76
+ total_files: results.length,
77
+ total_items: results.reduce((sum, r) => sum + r.items.length, 0),
78
+ by_category: {},
79
+ by_phase: {},
80
+ };
81
+
82
+ for (const r of results) {
83
+ if (!summary.by_phase[r.phase]) summary.by_phase[r.phase] = 0;
84
+ for (const item of r.items) {
85
+ summary.by_phase[r.phase]++;
86
+ const cat = item.category || 'unknown';
87
+ summary.by_category[cat] = (summary.by_category[cat] || 0) + 1;
88
+ }
89
+ }
90
+
91
+ output({ results, summary }, raw);
92
+ }
93
+
94
+ function cmdRenderCheckpoint(cwd, options = {}, raw) {
95
+ const filePath = options.file;
96
+ if (!filePath) {
97
+ error('UAT file required: use uat render-checkpoint --file <path>');
98
+ }
99
+
100
+ const resolvedPath = requireSafePath(filePath, cwd, 'UAT file', { allowAbsolute: true });
101
+ if (!fs.existsSync(resolvedPath)) {
102
+ error(`UAT file not found: ${filePath}`);
103
+ }
104
+
105
+ const content = fs.readFileSync(resolvedPath, 'utf-8');
106
+ const currentTest = parseCurrentTest(content);
107
+
108
+ if (currentTest.complete) {
109
+ error('UAT session is already complete; no pending checkpoint to render');
110
+ }
111
+
112
+ const checkpoint = buildCheckpoint(currentTest);
113
+ output({
114
+ file_path: toPosixPath(path.relative(cwd, resolvedPath)),
115
+ test_number: currentTest.number,
116
+ test_name: currentTest.name,
117
+ checkpoint,
118
+ }, raw, checkpoint);
119
+ }
120
+
121
+ // ─── Internal helpers (not exported) ─────────────────────────────────────────
122
+
123
+ function parseCurrentTest(content) {
124
+ const currentTestMatch = content.match(/##\s*Current Test\s*(?:\n<!--[\s\S]*?-->)?\n([\s\S]*?)(?=\n##\s|$)/i);
125
+ if (!currentTestMatch) {
126
+ error('UAT file is missing a Current Test section');
127
+ }
128
+
129
+ const section = currentTestMatch[1].trimEnd();
130
+ if (!section.trim()) {
131
+ error('Current Test section is empty');
132
+ }
133
+
134
+ if (/\[testing complete\]/i.test(section)) {
135
+ return { complete: true };
136
+ }
137
+
138
+ const numberMatch = section.match(/^number:\s*(\d+)\s*$/m);
139
+ const nameMatch = section.match(/^name:\s*(.+)\s*$/m);
140
+ const expectedBlockMatch = section.match(/^expected:\s*\|\n([\s\S]*?)(?=^\w[\w-]*:\s)/m)
141
+ || section.match(/^expected:\s*\|\n([\s\S]+)/m);
142
+ const expectedInlineMatch = section.match(/^expected:\s*(.+)\s*$/m);
143
+
144
+ if (!numberMatch || !nameMatch || (!expectedBlockMatch && !expectedInlineMatch)) {
145
+ error('Current Test section is malformed');
146
+ }
147
+
148
+ let expected;
149
+ if (expectedBlockMatch) {
150
+ expected = expectedBlockMatch[1]
151
+ .split('\n')
152
+ .map(line => line.replace(/^ {2}/, ''))
153
+ .join('\n')
154
+ .trim();
155
+ } else {
156
+ expected = expectedInlineMatch[1].trim();
157
+ }
158
+
159
+ return {
160
+ complete: false,
161
+ number: parseInt(numberMatch[1], 10),
162
+ name: sanitizeForDisplay(nameMatch[1].trim()),
163
+ expected: sanitizeForDisplay(expected),
164
+ };
165
+ }
166
+
167
+ function buildCheckpoint(currentTest) {
168
+ return [
169
+ '\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557',
170
+ '\u2551 CHECKPOINT: Verification Required \u2551',
171
+ '\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d',
172
+ '',
173
+ `**Test ${currentTest.number}: ${currentTest.name}**`,
174
+ '',
175
+ currentTest.expected,
176
+ '',
177
+ '\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500',
178
+ 'Type `pass` or describe what\'s wrong.',
179
+ '\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500',
180
+ ].join('\n');
181
+ }
182
+
183
+ function parseUatItems(content) {
184
+ const items = [];
185
+ // Match test blocks: ### N. Name\nexpected: ...\nresult: ...\n
186
+ const testPattern = /###\s*(\d+)\.\s*([^\n]+)\nexpected:\s*([^\n]+)\nresult:\s*(\w+)(?:\n(?:reported|reason|blocked_by):\s*[^\n]*)?/g;
187
+ let match;
188
+ while ((match = testPattern.exec(content)) !== null) {
189
+ const [, num, name, expected, result] = match;
190
+ if (result === 'pending' || result === 'skipped' || result === 'blocked') {
191
+ // Extract optional fields — limit to current test block (up to next ### or EOF)
192
+ const afterMatch = content.slice(match.index);
193
+ const nextHeading = afterMatch.indexOf('\n###', 1);
194
+ const blockText = nextHeading > 0 ? afterMatch.slice(0, nextHeading) : afterMatch;
195
+ const reasonMatch = blockText.match(/reason:\s*(.+)/);
196
+ const blockedByMatch = blockText.match(/blocked_by:\s*(.+)/);
197
+
198
+ const item = {
199
+ test: parseInt(num, 10),
200
+ name: name.trim(),
201
+ expected: expected.trim(),
202
+ result,
203
+ category: categorizeItem(result, reasonMatch?.[1], blockedByMatch?.[1]),
204
+ };
205
+ if (reasonMatch) item.reason = reasonMatch[1].trim();
206
+ if (blockedByMatch) item.blocked_by = blockedByMatch[1].trim();
207
+ items.push(item);
208
+ }
209
+ }
210
+ return items;
211
+ }
212
+
213
+ function parseVerificationItems(content, status) {
214
+ const items = [];
215
+ if (status === 'human_needed') {
216
+ // Extract from human_verification section — look for numbered items or table rows
217
+ const hvSection = content.match(/##\s*Human Verification.*?\n([\s\S]*?)(?=\n##\s|\n---\s|$)/i);
218
+ if (hvSection) {
219
+ const lines = hvSection[1].split('\n');
220
+ for (const line of lines) {
221
+ // Match table rows: | N | description | ... |
222
+ const tableMatch = line.match(/\|\s*(\d+)\s*\|\s*([^|]+)/);
223
+ // Match bullet items: - description
224
+ const bulletMatch = line.match(/^[-*]\s+(.+)/);
225
+ // Match numbered items: 1. description
226
+ const numberedMatch = line.match(/^(\d+)\.\s+(.+)/);
227
+
228
+ if (tableMatch) {
229
+ items.push({
230
+ test: parseInt(tableMatch[1], 10),
231
+ name: tableMatch[2].trim(),
232
+ result: 'human_needed',
233
+ category: 'human_uat',
234
+ });
235
+ } else if (numberedMatch) {
236
+ items.push({
237
+ test: parseInt(numberedMatch[1], 10),
238
+ name: numberedMatch[2].trim(),
239
+ result: 'human_needed',
240
+ category: 'human_uat',
241
+ });
242
+ } else if (bulletMatch && bulletMatch[1].length > 10) {
243
+ items.push({
244
+ name: bulletMatch[1].trim(),
245
+ result: 'human_needed',
246
+ category: 'human_uat',
247
+ });
248
+ }
249
+ }
250
+ }
251
+ }
252
+ // gaps_found items are already handled by plan-phase --gaps pipeline
253
+ return items;
254
+ }
255
+
256
+ function categorizeItem(result, reason, blockedBy) {
257
+ if (result === 'blocked' || blockedBy) {
258
+ if (blockedBy) {
259
+ if (/server/i.test(blockedBy)) return 'server_blocked';
260
+ if (/device|physical/i.test(blockedBy)) return 'device_needed';
261
+ if (/build|release|preview/i.test(blockedBy)) return 'build_needed';
262
+ if (/third.party|twilio|stripe/i.test(blockedBy)) return 'third_party';
263
+ }
264
+ return 'blocked';
265
+ }
266
+ if (result === 'skipped') {
267
+ if (reason) {
268
+ if (/server|not running|not available/i.test(reason)) return 'server_blocked';
269
+ if (/simulator|physical|device/i.test(reason)) return 'device_needed';
270
+ if (/build|release|preview/i.test(reason)) return 'build_needed';
271
+ }
272
+ return 'skipped_unresolved';
273
+ }
274
+ if (result === 'pending') return 'pending';
275
+ if (result === 'human_needed') return 'human_uat';
276
+ return 'unknown';
277
+ }
278
+
279
+ module.exports = {
280
+ cmdAuditUat,
281
+ cmdRenderCheckpoint,
282
+ };
@@ -537,7 +537,7 @@ function cmdValidateHealth(cwd, options, raw) {
537
537
 
538
538
  // ─── Check 1: .planning/ exists ───────────────────────────────────────────
539
539
  if (!fs.existsSync(planningDir)) {
540
- addIssue('error', 'E001', '.planning/ directory not found', 'Run /gsd:new-project to initialize');
540
+ addIssue('error', 'E001', '.planning/ directory not found', 'Run /ccp:new-project to initialize');
541
541
  output({
542
542
  status: 'broken',
543
543
  errors,
@@ -550,7 +550,7 @@ function cmdValidateHealth(cwd, options, raw) {
550
550
 
551
551
  // ─── Check 2: PROJECT.md exists and has required sections ─────────────────
552
552
  if (!fs.existsSync(projectPath)) {
553
- addIssue('error', 'E002', 'PROJECT.md not found', 'Run /gsd:new-project to create');
553
+ addIssue('error', 'E002', 'PROJECT.md not found', 'Run /ccp:new-project to create');
554
554
  } else {
555
555
  const content = fs.readFileSync(projectPath, 'utf-8');
556
556
  const requiredSections = ['## What This Is', '## Core Value', '## Requirements'];
@@ -563,12 +563,12 @@ function cmdValidateHealth(cwd, options, raw) {
563
563
 
564
564
  // ─── Check 3: ROADMAP.md exists ───────────────────────────────────────────
565
565
  if (!fs.existsSync(roadmapPath)) {
566
- addIssue('error', 'E003', 'ROADMAP.md not found', 'Run /gsd:new-milestone to create roadmap');
566
+ addIssue('error', 'E003', 'ROADMAP.md not found', 'Run /ccp:new-milestone to create roadmap');
567
567
  }
568
568
 
569
569
  // ─── Check 4: STATE.md exists and references valid phases ─────────────────
570
570
  if (!fs.existsSync(statePath)) {
571
- addIssue('error', 'E004', 'STATE.md not found', 'Run /gsd:health --repair to regenerate', true);
571
+ addIssue('error', 'E004', 'STATE.md not found', 'Run /ccp:health --repair to regenerate', true);
572
572
  repairs.push('regenerateState');
573
573
  } else {
574
574
  const stateContent = fs.readFileSync(statePath, 'utf-8');
@@ -591,7 +591,7 @@ function cmdValidateHealth(cwd, options, raw) {
591
591
  if (!diskPhases.has(ref) && !diskPhases.has(normalizedRef) && !diskPhases.has(String(parseInt(ref, 10)))) {
592
592
  // Only warn if phases dir has any content (not just an empty project)
593
593
  if (diskPhases.size > 0) {
594
- addIssue('warning', 'W002', `STATE.md references phase ${ref}, but only phases ${[...diskPhases].sort().join(', ')} exist`, 'Run /gsd:health --repair to regenerate STATE.md', true);
594
+ addIssue('warning', 'W002', `STATE.md references phase ${ref}, but only phases ${[...diskPhases].sort().join(', ')} exist`, 'Run /ccp:health --repair to regenerate STATE.md', true);
595
595
  if (!repairs.includes('regenerateState')) repairs.push('regenerateState');
596
596
  }
597
597
  }
@@ -600,7 +600,7 @@ function cmdValidateHealth(cwd, options, raw) {
600
600
 
601
601
  // ─── Check 5: config.json valid JSON + valid schema ───────────────────────
602
602
  if (!fs.existsSync(configPath)) {
603
- addIssue('warning', 'W003', 'config.json not found', 'Run /gsd:health --repair to create with defaults', true);
603
+ addIssue('warning', 'W003', 'config.json not found', 'Run /ccp:health --repair to create with defaults', true);
604
604
  repairs.push('createConfig');
605
605
  } else {
606
606
  try {
@@ -612,7 +612,7 @@ function cmdValidateHealth(cwd, options, raw) {
612
612
  addIssue('warning', 'W004', `config.json: invalid model_profile "${parsed.model_profile}"`, `Valid values: ${validProfiles.join(', ')}`);
613
613
  }
614
614
  } catch (err) {
615
- addIssue('error', 'E005', `config.json: JSON parse error - ${err.message}`, 'Run /gsd:health --repair to reset to defaults', true);
615
+ addIssue('error', 'E005', `config.json: JSON parse error - ${err.message}`, 'Run /ccp:health --repair to reset to defaults', true);
616
616
  repairs.push('resetConfig');
617
617
  }
618
618
  }
@@ -623,7 +623,7 @@ function cmdValidateHealth(cwd, options, raw) {
623
623
  const configRaw = fs.readFileSync(configPath, 'utf-8');
624
624
  const configParsed = JSON.parse(configRaw);
625
625
  if (configParsed.workflow && configParsed.workflow.nyquist_validation === undefined) {
626
- addIssue('warning', 'W008', 'config.json: workflow.nyquist_validation absent (defaults to enabled but agents may skip)', 'Run /gsd:health --repair to add key', true);
626
+ addIssue('warning', 'W008', 'config.json: workflow.nyquist_validation absent (defaults to enabled but agents may skip)', 'Run /ccp:health --repair to add key', true);
627
627
  if (!repairs.includes('addNyquistKey')) repairs.push('addNyquistKey');
628
628
  }
629
629
  } catch {}
@@ -670,7 +670,7 @@ function cmdValidateHealth(cwd, options, raw) {
670
670
  const researchFile = phaseFiles.find(f => f.endsWith('-RESEARCH.md'));
671
671
  const researchContent = fs.readFileSync(path.join(phasesDir, e.name, researchFile), 'utf-8');
672
672
  if (researchContent.includes('## Validation Architecture')) {
673
- addIssue('warning', 'W009', `Phase ${e.name}: has Validation Architecture in RESEARCH.md but no VALIDATION.md`, 'Re-run /gsd:plan-phase with --research to regenerate');
673
+ addIssue('warning', 'W009', `Phase ${e.name}: has Validation Architecture in RESEARCH.md but no VALIDATION.md`, 'Re-run /ccp:plan-phase with --research to regenerate');
674
674
  }
675
675
  }
676
676
  }
@@ -755,7 +755,7 @@ function cmdValidateHealth(cwd, options, raw) {
755
755
  stateContent += `**Current phase:** (determining...)\n`;
756
756
  stateContent += `**Status:** Resuming\n\n`;
757
757
  stateContent += `## Session Log\n\n`;
758
- stateContent += `- ${new Date().toISOString().split('T')[0]}: STATE.md regenerated by /gsd:health --repair\n`;
758
+ stateContent += `- ${new Date().toISOString().split('T')[0]}: STATE.md regenerated by /ccp:health --repair\n`;
759
759
  writeStateMd(statePath, stateContent, cwd);
760
760
  repairActions.push({ action: repair, success: true, path: 'STATE.md' });
761
761
  break;
@@ -44,7 +44,7 @@ Standard format for presenting next steps after completing a command or workflow
44
44
 
45
45
  **02-03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry
46
46
 
47
- `/gsd:execute-phase 2`
47
+ `/ccp:execute-phase 2`
48
48
 
49
49
  <sub>`/clear` first → fresh context window</sub>
50
50
 
@@ -52,7 +52,7 @@ Standard format for presenting next steps after completing a command or workflow
52
52
 
53
53
  **Also available:**
54
54
  - Review plan before executing
55
- - `/gsd:list-phase-assumptions 2` — check assumptions
55
+ - `/ccp:list-phase-assumptions 2` — check assumptions
56
56
 
57
57
  ---
58
58
  ```
@@ -69,7 +69,7 @@ Add note that this is the last plan and what comes after:
69
69
  **02-03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry
70
70
  <sub>Final plan in Phase 2</sub>
71
71
 
72
- `/gsd:execute-phase 2`
72
+ `/ccp:execute-phase 2`
73
73
 
74
74
  <sub>`/clear` first → fresh context window</sub>
75
75
 
@@ -91,15 +91,15 @@ Add note that this is the last plan and what comes after:
91
91
 
92
92
  **Phase 2: Authentication** — JWT login flow with refresh tokens
93
93
 
94
- `/gsd:plan-phase 2`
94
+ `/ccp:plan-phase 2`
95
95
 
96
96
  <sub>`/clear` first → fresh context window</sub>
97
97
 
98
98
  ---
99
99
 
100
100
  **Also available:**
101
- - `/gsd:discuss-phase 2` — gather context first
102
- - `/gsd:research-phase 2` — investigate unknowns
101
+ - `/ccp:discuss-phase 2` — gather context first
102
+ - `/ccp:research-phase 2` — investigate unknowns
103
103
  - Review roadmap
104
104
 
105
105
  ---
@@ -120,15 +120,15 @@ Show completion status before next action:
120
120
 
121
121
  **Phase 3: Core Features** — User dashboard, settings, and data export
122
122
 
123
- `/gsd:plan-phase 3`
123
+ `/ccp:plan-phase 3`
124
124
 
125
125
  <sub>`/clear` first → fresh context window</sub>
126
126
 
127
127
  ---
128
128
 
129
129
  **Also available:**
130
- - `/gsd:discuss-phase 3` — gather context first
131
- - `/gsd:research-phase 3` — investigate unknowns
130
+ - `/ccp:discuss-phase 3` — gather context first
131
+ - `/ccp:research-phase 3` — investigate unknowns
132
132
  - Review what Phase 2 built
133
133
 
134
134
  ---
@@ -145,11 +145,11 @@ When there's no clear primary action:
145
145
 
146
146
  **Phase 3: Core Features** — User dashboard, settings, and data export
147
147
 
148
- **To plan directly:** `/gsd:plan-phase 3`
148
+ **To plan directly:** `/ccp:plan-phase 3`
149
149
 
150
- **To discuss context first:** `/gsd:discuss-phase 3`
150
+ **To discuss context first:** `/ccp:discuss-phase 3`
151
151
 
152
- **To research unknowns:** `/gsd:research-phase 3`
152
+ **To research unknowns:** `/ccp:research-phase 3`
153
153
 
154
154
  <sub>`/clear` first → fresh context window</sub>
155
155
 
@@ -169,7 +169,7 @@ All 4 phases shipped
169
169
 
170
170
  **Start v1.1** — questioning → research → requirements → roadmap
171
171
 
172
- `/gsd:new-milestone`
172
+ `/ccp:new-milestone`
173
173
 
174
174
  <sub>`/clear` first → fresh context window</sub>
175
175
 
@@ -214,7 +214,7 @@ Extract: `**02-03: Refresh Token Rotation** — Add /api/auth/refresh with slidi
214
214
  ## To Continue
215
215
 
216
216
  Run `/clear`, then paste:
217
- /gsd:execute-phase 2
217
+ /ccp:execute-phase 2
218
218
  ```
219
219
 
220
220
  User has no idea what 02-03 is about.
@@ -222,7 +222,7 @@ User has no idea what 02-03 is about.
222
222
  ### Don't: Missing /clear explanation
223
223
 
224
224
  ```
225
- `/gsd:plan-phase 3`
225
+ `/ccp:plan-phase 3`
226
226
 
227
227
  Run /clear first.
228
228
  ```
@@ -242,7 +242,7 @@ Sounds like an afterthought. Use "Also available:" instead.
242
242
 
243
243
  ```
244
244
  ```
245
- /gsd:plan-phase 3
245
+ /ccp:plan-phase 3
246
246
  ```
247
247
  ```
248
248
 
@@ -2,11 +2,11 @@
2
2
 
3
3
  Calculate the next decimal phase number for urgent insertions.
4
4
 
5
- ## Using gsd-tools
5
+ ## Using ccp-tools
6
6
 
7
7
  ```bash
8
8
  # Get next decimal phase after phase 6
9
- node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase next-decimal 6
9
+ node "$HOME/.claude/pilot/bin/ccp-tools.cjs" phase next-decimal 6
10
10
  ```
11
11
 
12
12
  Output:
@@ -32,14 +32,14 @@ With existing decimals:
32
32
  ## Extract Values
33
33
 
34
34
  ```bash
35
- DECIMAL_INFO=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase next-decimal "${AFTER_PHASE}")
35
+ DECIMAL_INFO=$(node "$HOME/.claude/pilot/bin/ccp-tools.cjs" phase next-decimal "${AFTER_PHASE}")
36
36
  DECIMAL_PHASE=$(printf '%s\n' "$DECIMAL_INFO" | jq -r '.next')
37
37
  BASE_PHASE=$(printf '%s\n' "$DECIMAL_INFO" | jq -r '.base_phase')
38
38
  ```
39
39
 
40
40
  Or with --raw flag:
41
41
  ```bash
42
- DECIMAL_PHASE=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase next-decimal "${AFTER_PHASE}" --raw)
42
+ DECIMAL_PHASE=$(node "$HOME/.claude/pilot/bin/ccp-tools.cjs" phase next-decimal "${AFTER_PHASE}" --raw)
43
43
  # Returns just: 06.1
44
44
  ```
45
45
 
@@ -57,7 +57,7 @@ DECIMAL_PHASE=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" phase next-
57
57
  Decimal phase directories use the full decimal number:
58
58
 
59
59
  ```bash
60
- SLUG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" generate-slug "$DESCRIPTION" --raw)
60
+ SLUG=$(node "$HOME/.claude/pilot/bin/ccp-tools.cjs" generate-slug "$DESCRIPTION" --raw)
61
61
  PHASE_DIR=".planning/phases/${DECIMAL_PHASE}-${SLUG}"
62
62
  mkdir -p "$PHASE_DIR"
63
63
  ```
@@ -1,5 +1,5 @@
1
1
  <overview>
2
- Git integration for GSD framework.
2
+ Git integration for CCP framework.
3
3
  </overview>
4
4
 
5
5
  <core_principle>
@@ -29,7 +29,7 @@ The git log should read like a changelog of what shipped, not a diary of plannin
29
29
  [ -d .git ] && echo "GIT_EXISTS" || echo "NO_GIT"
30
30
  ```
31
31
 
32
- If NO_GIT: Run `git init` silently. GSD projects always get their own repo.
32
+ If NO_GIT: Run `git init` silently. CCP projects always get their own repo.
33
33
  </git_check>
34
34
 
35
35
  <commit_formats>
@@ -51,7 +51,7 @@ Phases:
51
51
  What to commit:
52
52
 
53
53
  ```bash
54
- node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: initialize [project-name] ([N] phases)" --files .planning/
54
+ node "$HOME/.claude/pilot/bin/ccp-tools.cjs" commit "docs: initialize [project-name] ([N] phases)" --files .planning/
55
55
  ```
56
56
 
57
57
  </format>
@@ -129,7 +129,7 @@ SUMMARY: .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md
129
129
  What to commit:
130
130
 
131
131
  ```bash
132
- node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-PLAN.md .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md
132
+ node "$HOME/.claude/pilot/bin/ccp-tools.cjs" commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-PLAN.md .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md
133
133
  ```
134
134
 
135
135
  **Note:** Code files NOT included - already committed per-task.
@@ -149,7 +149,7 @@ Current: [task name]
149
149
  What to commit:
150
150
 
151
151
  ```bash
152
- node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "wip: [phase-name] paused at task [X]/[Y]" --files .planning/
152
+ node "$HOME/.claude/pilot/bin/ccp-tools.cjs" commit "wip: [phase-name] paused at task [X]/[Y]" --files .planning/
153
153
  ```
154
154
 
155
155
  </format>
@@ -1,13 +1,13 @@
1
1
  # Git Planning Commit
2
2
 
3
- Commit planning artifacts using the gsd-tools CLI, which automatically checks `commit_docs` config and gitignore status.
3
+ Commit planning artifacts using the ccp-tools CLI, which automatically checks `commit_docs` config and gitignore status.
4
4
 
5
5
  ## Commit via CLI
6
6
 
7
- Always use `gsd-tools.cjs commit` for `.planning/` files — it handles `commit_docs` and gitignore checks automatically:
7
+ Always use `ccp-tools.cjs commit` for `.planning/` files — it handles `commit_docs` and gitignore checks automatically:
8
8
 
9
9
  ```bash
10
- node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs({scope}): {description}" --files .planning/STATE.md .planning/ROADMAP.md
10
+ node "$HOME/.claude/pilot/bin/ccp-tools.cjs" commit "docs({scope}): {description}" --files .planning/STATE.md .planning/ROADMAP.md
11
11
  ```
12
12
 
13
13
  The CLI will return `skipped` (with reason) if `commit_docs` is `false` or `.planning/` is gitignored. No manual conditional checks needed.
@@ -17,7 +17,7 @@ The CLI will return `skipped` (with reason) if `commit_docs` is `false` or `.pla
17
17
  To fold `.planning/` file changes into the previous commit:
18
18
 
19
19
  ```bash
20
- node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "" --files .planning/codebase/*.md --amend
20
+ node "$HOME/.claude/pilot/bin/ccp-tools.cjs" commit "" --files .planning/codebase/*.md --amend
21
21
  ```
22
22
 
23
23
  ## Commit Message Patterns