@pareto4/pp-core 1.5.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 (618) hide show
  1. package/.claude-plugin/plugin.json +23 -0
  2. package/GEMINI.md +53 -0
  3. package/LICENSE +22 -0
  4. package/README.md +100 -0
  5. package/agents/pp-advisor-researcher.md +108 -0
  6. package/agents/pp-ai-researcher.md +114 -0
  7. package/agents/pp-assumptions-analyzer.md +105 -0
  8. package/agents/pp-code-fixer.md +669 -0
  9. package/agents/pp-code-reviewer.md +387 -0
  10. package/agents/pp-codebase-mapper.md +853 -0
  11. package/agents/pp-debug-session-manager.md +315 -0
  12. package/agents/pp-debugger.md +1453 -0
  13. package/agents/pp-doc-classifier.md +168 -0
  14. package/agents/pp-doc-synthesizer.md +204 -0
  15. package/agents/pp-doc-verifier.md +217 -0
  16. package/agents/pp-doc-writer.md +616 -0
  17. package/agents/pp-domain-researcher.md +147 -0
  18. package/agents/pp-eval-auditor.md +191 -0
  19. package/agents/pp-eval-planner.md +154 -0
  20. package/agents/pp-executor.md +808 -0
  21. package/agents/pp-framework-selector.md +160 -0
  22. package/agents/pp-integration-checker.md +470 -0
  23. package/agents/pp-intel-updater.md +339 -0
  24. package/agents/pp-mempalace-curator.md +47 -0
  25. package/agents/pp-nyquist-auditor.md +204 -0
  26. package/agents/pp-pattern-mapper.md +335 -0
  27. package/agents/pp-phase-researcher.md +867 -0
  28. package/agents/pp-plan-checker.md +988 -0
  29. package/agents/pp-planner.md +1052 -0
  30. package/agents/pp-project-researcher.md +612 -0
  31. package/agents/pp-research-synthesizer.md +260 -0
  32. package/agents/pp-roadmapper.md +741 -0
  33. package/agents/pp-security-auditor.md +156 -0
  34. package/agents/pp-ui-auditor.md +495 -0
  35. package/agents/pp-ui-checker.md +309 -0
  36. package/agents/pp-ui-researcher.md +375 -0
  37. package/agents/pp-user-profiler.md +171 -0
  38. package/agents/pp-verifier.md +967 -0
  39. package/assets/gsd-logo-2000-transparent.png +0 -0
  40. package/assets/gsd-logo-2000-transparent.svg +17 -0
  41. package/assets/gsd-logo-2000.png +0 -0
  42. package/assets/gsd-logo-2000.svg +21 -0
  43. package/assets/terminal.svg +68 -0
  44. package/bin/install.js +12370 -0
  45. package/bin/lib/ui-safety-gate.cjs +107 -0
  46. package/commands/pp-add-tests.md +42 -0
  47. package/commands/pp-ai-integration-phase.md +37 -0
  48. package/commands/pp-audit-fix.md +34 -0
  49. package/commands/pp-audit-milestone.md +37 -0
  50. package/commands/pp-audit-uat.md +24 -0
  51. package/commands/pp-autonomous.md +51 -0
  52. package/commands/pp-capture.md +62 -0
  53. package/commands/pp-cleanup.md +24 -0
  54. package/commands/pp-code-review.md +59 -0
  55. package/commands/pp-complete-milestone.md +143 -0
  56. package/commands/pp-config.md +56 -0
  57. package/commands/pp-debug.md +52 -0
  58. package/commands/pp-discovery.md +34 -0
  59. package/commands/pp-discuss-phase.md +77 -0
  60. package/commands/pp-docs-update.md +49 -0
  61. package/commands/pp-eval-review.md +33 -0
  62. package/commands/pp-execute-phase.md +65 -0
  63. package/commands/pp-explore.md +27 -0
  64. package/commands/pp-extract-learnings.md +23 -0
  65. package/commands/pp-fast.md +31 -0
  66. package/commands/pp-forensics.md +57 -0
  67. package/commands/pp-graphify.md +204 -0
  68. package/commands/pp-health.md +31 -0
  69. package/commands/pp-help.md +28 -0
  70. package/commands/pp-import.md +45 -0
  71. package/commands/pp-inbox.md +39 -0
  72. package/commands/pp-ingest-docs.md +42 -0
  73. package/commands/pp-manager.md +45 -0
  74. package/commands/pp-map-codebase.md +83 -0
  75. package/commands/pp-mempalace-capture.md +71 -0
  76. package/commands/pp-mempalace-recall.md +102 -0
  77. package/commands/pp-milestone-summary.md +51 -0
  78. package/commands/pp-mvp-phase.md +45 -0
  79. package/commands/pp-new-milestone.md +45 -0
  80. package/commands/pp-new-project.md +47 -0
  81. package/commands/pp-ns-context.md +25 -0
  82. package/commands/pp-ns-ideate.md +24 -0
  83. package/commands/pp-ns-manage.md +36 -0
  84. package/commands/pp-ns-project.md +27 -0
  85. package/commands/pp-ns-review.md +29 -0
  86. package/commands/pp-ns-workflow.md +35 -0
  87. package/commands/pp-pause-work.md +43 -0
  88. package/commands/pp-phase.md +56 -0
  89. package/commands/pp-plan-phase.md +63 -0
  90. package/commands/pp-plan-review-convergence.md +60 -0
  91. package/commands/pp-pr-branch.md +26 -0
  92. package/commands/pp-profile-user.md +46 -0
  93. package/commands/pp-progress.md +49 -0
  94. package/commands/pp-quick.md +174 -0
  95. package/commands/pp-resume-work.md +30 -0
  96. package/commands/pp-review-backlog.md +63 -0
  97. package/commands/pp-review.md +42 -0
  98. package/commands/pp-secure-phase.md +36 -0
  99. package/commands/pp-settings.md +29 -0
  100. package/commands/pp-ship.md +24 -0
  101. package/commands/pp-sketch.md +60 -0
  102. package/commands/pp-spec-phase.md +63 -0
  103. package/commands/pp-spike.md +57 -0
  104. package/commands/pp-stats.md +20 -0
  105. package/commands/pp-surface.md +162 -0
  106. package/commands/pp-thread.md +24 -0
  107. package/commands/pp-ui-phase.md +35 -0
  108. package/commands/pp-ui-review.md +33 -0
  109. package/commands/pp-ultraplan-phase.md +34 -0
  110. package/commands/pp-undo.md +35 -0
  111. package/commands/pp-update.md +49 -0
  112. package/commands/pp-validate-phase.md +36 -0
  113. package/commands/pp-verify-work.md +39 -0
  114. package/commands/pp-workspace.md +52 -0
  115. package/commands/pp-workstreams.md +70 -0
  116. package/gemini-extension.json +6 -0
  117. package/hooks/dist/lib/git-cmd.js +150 -0
  118. package/hooks/dist/lib/pp-graphify-rebuild.sh +65 -0
  119. package/hooks/dist/managed-hooks-registry.cjs +39 -0
  120. package/hooks/dist/pp-check-update-worker.js +108 -0
  121. package/hooks/dist/pp-check-update.js +66 -0
  122. package/hooks/dist/pp-config-reload.js +133 -0
  123. package/hooks/dist/pp-context-monitor.js +196 -0
  124. package/hooks/dist/pp-cursor-post-tool.js +75 -0
  125. package/hooks/dist/pp-cursor-session-start.js +52 -0
  126. package/hooks/dist/pp-ensure-canonical-path.js +305 -0
  127. package/hooks/dist/pp-graphify-update.sh +158 -0
  128. package/hooks/dist/pp-phase-boundary.sh +47 -0
  129. package/hooks/dist/pp-prompt-guard.js +97 -0
  130. package/hooks/dist/pp-read-guard.js +101 -0
  131. package/hooks/dist/pp-read-injection-scanner.js +203 -0
  132. package/hooks/dist/pp-session-state.sh +59 -0
  133. package/hooks/dist/pp-statusline.js +566 -0
  134. package/hooks/dist/pp-update-banner.js +138 -0
  135. package/hooks/dist/pp-validate-commit.sh +57 -0
  136. package/hooks/dist/pp-workflow-guard.js +167 -0
  137. package/hooks/dist/pp-worktree-path-guard.js +185 -0
  138. package/hooks/hooks.json +70 -0
  139. package/hooks/lib/git-cmd.js +150 -0
  140. package/hooks/lib/pp-graphify-rebuild.sh +65 -0
  141. package/hooks/managed-hooks-registry.cjs +39 -0
  142. package/hooks/pp-check-update-worker.js +108 -0
  143. package/hooks/pp-check-update.js +66 -0
  144. package/hooks/pp-config-reload.js +133 -0
  145. package/hooks/pp-context-monitor.js +196 -0
  146. package/hooks/pp-cursor-post-tool.js +75 -0
  147. package/hooks/pp-cursor-session-start.js +52 -0
  148. package/hooks/pp-ensure-canonical-path.js +305 -0
  149. package/hooks/pp-graphify-update.sh +158 -0
  150. package/hooks/pp-phase-boundary.sh +47 -0
  151. package/hooks/pp-prompt-guard.js +97 -0
  152. package/hooks/pp-read-guard.js +101 -0
  153. package/hooks/pp-read-injection-scanner.js +203 -0
  154. package/hooks/pp-session-state.sh +59 -0
  155. package/hooks/pp-statusline.js +566 -0
  156. package/hooks/pp-update-banner.js +138 -0
  157. package/hooks/pp-validate-commit.sh +57 -0
  158. package/hooks/pp-workflow-guard.js +167 -0
  159. package/hooks/pp-worktree-path-guard.js +185 -0
  160. package/package.json +125 -0
  161. package/pp-core/bin/check-latest-version.cjs +161 -0
  162. package/pp-core/bin/lib/active-workstream-store.cjs +297 -0
  163. package/pp-core/bin/lib/adr-parser.cjs +399 -0
  164. package/pp-core/bin/lib/agent-command-router.cjs +68 -0
  165. package/pp-core/bin/lib/agent-install-check.cjs +143 -0
  166. package/pp-core/bin/lib/artifacts.cjs +51 -0
  167. package/pp-core/bin/lib/audit-command-router.cjs +61 -0
  168. package/pp-core/bin/lib/audit.cjs +743 -0
  169. package/pp-core/bin/lib/capability-activation.cjs +113 -0
  170. package/pp-core/bin/lib/capability-registry.cjs +3727 -0
  171. package/pp-core/bin/lib/capability-state.cjs +497 -0
  172. package/pp-core/bin/lib/capability-writer.cjs +355 -0
  173. package/pp-core/bin/lib/check-command-router.cjs +800 -0
  174. package/pp-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
  175. package/pp-core/bin/lib/cli-exit.cjs +61 -0
  176. package/pp-core/bin/lib/clock.cjs +95 -0
  177. package/pp-core/bin/lib/clusters.cjs +131 -0
  178. package/pp-core/bin/lib/code-review-flags.cjs +59 -0
  179. package/pp-core/bin/lib/command-aliases.cjs +809 -0
  180. package/pp-core/bin/lib/command-arg-projection.cjs +55 -0
  181. package/pp-core/bin/lib/command-roster.cjs +19 -0
  182. package/pp-core/bin/lib/command-routing-hub.cjs +300 -0
  183. package/pp-core/bin/lib/commands.cjs +1244 -0
  184. package/pp-core/bin/lib/config-loader.cjs +714 -0
  185. package/pp-core/bin/lib/config-schema.cjs +58 -0
  186. package/pp-core/bin/lib/config-types.cjs +20 -0
  187. package/pp-core/bin/lib/config.cjs +796 -0
  188. package/pp-core/bin/lib/configuration.cjs +209 -0
  189. package/pp-core/bin/lib/context-utilization.cjs +48 -0
  190. package/pp-core/bin/lib/core-utils.cjs +198 -0
  191. package/pp-core/bin/lib/decisions.cjs +136 -0
  192. package/pp-core/bin/lib/docs.cjs +264 -0
  193. package/pp-core/bin/lib/drift.cjs +364 -0
  194. package/pp-core/bin/lib/edge-probe.cjs +196 -0
  195. package/pp-core/bin/lib/fallow-runner.cjs +153 -0
  196. package/pp-core/bin/lib/federated-config.cjs +182 -0
  197. package/pp-core/bin/lib/frontmatter.cjs +494 -0
  198. package/pp-core/bin/lib/gap-checker.cjs +260 -0
  199. package/pp-core/bin/lib/git-base-branch.cjs +220 -0
  200. package/pp-core/bin/lib/graphify-command-router.cjs +72 -0
  201. package/pp-core/bin/lib/graphify.cjs +472 -0
  202. package/pp-core/bin/lib/gsd2-import.cjs +456 -0
  203. package/pp-core/bin/lib/init-command-router.cjs +62 -0
  204. package/pp-core/bin/lib/init.cjs +1912 -0
  205. package/pp-core/bin/lib/install-profiles.cjs +814 -0
  206. package/pp-core/bin/lib/installer-migration-authoring.cjs +122 -0
  207. package/pp-core/bin/lib/installer-migration-report.cjs +351 -0
  208. package/pp-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +225 -0
  209. package/pp-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
  210. package/pp-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
  211. package/pp-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
  212. package/pp-core/bin/lib/installer-migrations/004-prune-stale-pristine-snapshots.cjs +123 -0
  213. package/pp-core/bin/lib/installer-migrations/005-rename-gsd-core-to-pp-core.cjs +109 -0
  214. package/pp-core/bin/lib/installer-migrations/006-rename-gsd-command-namespace.cjs +135 -0
  215. package/pp-core/bin/lib/installer-migrations.cjs +823 -0
  216. package/pp-core/bin/lib/intel-command-router.cjs +119 -0
  217. package/pp-core/bin/lib/intel.cjs +584 -0
  218. package/pp-core/bin/lib/io.cjs +220 -0
  219. package/pp-core/bin/lib/learnings.cjs +270 -0
  220. package/pp-core/bin/lib/legacy-cleanup.cjs +253 -0
  221. package/pp-core/bin/lib/loop-host-contract.cjs +105 -0
  222. package/pp-core/bin/lib/loop-resolver.cjs +479 -0
  223. package/pp-core/bin/lib/milestone.cjs +381 -0
  224. package/pp-core/bin/lib/model-catalog.cjs +154 -0
  225. package/pp-core/bin/lib/model-profiles.cjs +24 -0
  226. package/pp-core/bin/lib/model-resolver.cjs +467 -0
  227. package/pp-core/bin/lib/observability/event.cjs +51 -0
  228. package/pp-core/bin/lib/observability/logger.cjs +146 -0
  229. package/pp-core/bin/lib/observability/redaction.cjs +48 -0
  230. package/pp-core/bin/lib/package-identity.cjs +35 -0
  231. package/pp-core/bin/lib/package-legitimacy.cjs +368 -0
  232. package/pp-core/bin/lib/phase-command-router.cjs +209 -0
  233. package/pp-core/bin/lib/phase-id.cjs +213 -0
  234. package/pp-core/bin/lib/phase-lifecycle.cjs +74 -0
  235. package/pp-core/bin/lib/phase-locator.cjs +145 -0
  236. package/pp-core/bin/lib/phase.cjs +1446 -0
  237. package/pp-core/bin/lib/phases-command-router.cjs +43 -0
  238. package/pp-core/bin/lib/plan-drift-guard.cjs +117 -0
  239. package/pp-core/bin/lib/plan-scan.cjs +91 -0
  240. package/pp-core/bin/lib/planning-workspace.cjs +245 -0
  241. package/pp-core/bin/lib/probe-core.cjs +402 -0
  242. package/pp-core/bin/lib/profile-output.cjs +1164 -0
  243. package/pp-core/bin/lib/profile-pipeline-command-router.cjs +138 -0
  244. package/pp-core/bin/lib/profile-pipeline.cjs +519 -0
  245. package/pp-core/bin/lib/prohibition-enforcement.cjs +660 -0
  246. package/pp-core/bin/lib/project-root.cjs +119 -0
  247. package/pp-core/bin/lib/prompt-budget.cjs +305 -0
  248. package/pp-core/bin/lib/research-provider.cjs +137 -0
  249. package/pp-core/bin/lib/research-store.cjs +167 -0
  250. package/pp-core/bin/lib/review-reviewer-selection.cjs +121 -0
  251. package/pp-core/bin/lib/roadmap-command-router.cjs +166 -0
  252. package/pp-core/bin/lib/roadmap-parser.cjs +456 -0
  253. package/pp-core/bin/lib/roadmap-upgrade.cjs +476 -0
  254. package/pp-core/bin/lib/roadmap.cjs +738 -0
  255. package/pp-core/bin/lib/runtime-artifact-conversion.cjs +1966 -0
  256. package/pp-core/bin/lib/runtime-artifact-layout.cjs +342 -0
  257. package/pp-core/bin/lib/runtime-config-adapter-registry.cjs +103 -0
  258. package/pp-core/bin/lib/runtime-homes.cjs +272 -0
  259. package/pp-core/bin/lib/runtime-hooks-surface.cjs +1460 -0
  260. package/pp-core/bin/lib/runtime-name-policy.cjs +97 -0
  261. package/pp-core/bin/lib/runtime-slash.cjs +137 -0
  262. package/pp-core/bin/lib/schema-detect.cjs +159 -0
  263. package/pp-core/bin/lib/secrets.cjs +34 -0
  264. package/pp-core/bin/lib/security.cjs +480 -0
  265. package/pp-core/bin/lib/semver-compare.cjs +42 -0
  266. package/pp-core/bin/lib/shell-command-projection.cjs +550 -0
  267. package/pp-core/bin/lib/state-command-router.cjs +172 -0
  268. package/pp-core/bin/lib/state-document.cjs +312 -0
  269. package/pp-core/bin/lib/state.cjs +2587 -0
  270. package/pp-core/bin/lib/surface.cjs +505 -0
  271. package/pp-core/bin/lib/task-command-router.cjs +85 -0
  272. package/pp-core/bin/lib/teams-status.cjs +74 -0
  273. package/pp-core/bin/lib/template.cjs +246 -0
  274. package/pp-core/bin/lib/uat-predicate.cjs +329 -0
  275. package/pp-core/bin/lib/uat.cjs +359 -0
  276. package/pp-core/bin/lib/ui-safety-gate.cjs +98 -0
  277. package/pp-core/bin/lib/update-context.cjs +221 -0
  278. package/pp-core/bin/lib/validate-command-router.cjs +91 -0
  279. package/pp-core/bin/lib/validate.cjs +122 -0
  280. package/pp-core/bin/lib/verification-command-router.cjs +31 -0
  281. package/pp-core/bin/lib/verification.cjs +196 -0
  282. package/pp-core/bin/lib/verify-command-router.cjs +44 -0
  283. package/pp-core/bin/lib/verify.cjs +1932 -0
  284. package/pp-core/bin/lib/workstream-inventory-builder.cjs +81 -0
  285. package/pp-core/bin/lib/workstream-inventory.cjs +147 -0
  286. package/pp-core/bin/lib/workstream-name-policy.cjs +91 -0
  287. package/pp-core/bin/lib/workstream.cjs +386 -0
  288. package/pp-core/bin/lib/worktree-base-ref.cjs +350 -0
  289. package/pp-core/bin/lib/worktree-safety.cjs +985 -0
  290. package/pp-core/bin/pp-tools.cjs +2239 -0
  291. package/pp-core/bin/pp_run +20 -0
  292. package/pp-core/bin/shared/config-defaults.manifest.json +97 -0
  293. package/pp-core/bin/shared/config-schema.manifest.json +176 -0
  294. package/pp-core/bin/shared/model-catalog.json +160 -0
  295. package/pp-core/bin/shared/runtime-aliases.manifest.json +79 -0
  296. package/pp-core/bin/verify-reapply-patches.cjs +400 -0
  297. package/pp-core/contexts/dev.md +21 -0
  298. package/pp-core/contexts/research.md +22 -0
  299. package/pp-core/contexts/review.md +23 -0
  300. package/pp-core/references/agent-contracts.md +79 -0
  301. package/pp-core/references/ai-evals.md +156 -0
  302. package/pp-core/references/ai-frameworks.md +186 -0
  303. package/pp-core/references/artifact-types.md +131 -0
  304. package/pp-core/references/autonomous-smart-discuss.md +277 -0
  305. package/pp-core/references/checkpoints.md +814 -0
  306. package/pp-core/references/common-bug-patterns.md +114 -0
  307. package/pp-core/references/context-budget.md +85 -0
  308. package/pp-core/references/continuation-format.md +253 -0
  309. package/pp-core/references/debugger-philosophy.md +76 -0
  310. package/pp-core/references/decimal-phase-calculation.md +64 -0
  311. package/pp-core/references/doc-conflict-engine.md +91 -0
  312. package/pp-core/references/domain-probes.md +125 -0
  313. package/pp-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json +7 -0
  314. package/pp-core/references/edge-probe-fixtures/01-round-half-even/requirements.json +1 -0
  315. package/pp-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json +8 -0
  316. package/pp-core/references/edge-probe-fixtures/02-merge-intervals/requirements.json +1 -0
  317. package/pp-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json +7 -0
  318. package/pp-core/references/edge-probe-fixtures/03-truncate-graphemes/requirements.json +1 -0
  319. package/pp-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json +7 -0
  320. package/pp-core/references/edge-probe-fixtures/04-money-rounding/requirements.json +1 -0
  321. package/pp-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json +8 -0
  322. package/pp-core/references/edge-probe-fixtures/05-list-dedupe/requirements.json +1 -0
  323. package/pp-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json +8 -0
  324. package/pp-core/references/edge-probe-fixtures/06-resolved-mixed/requirements.json +1 -0
  325. package/pp-core/references/edge-probe-fixtures/06-resolved-mixed/resolutions.json +4 -0
  326. package/pp-core/references/edge-probe.md +272 -0
  327. package/pp-core/references/execute-mvp-tdd.md +81 -0
  328. package/pp-core/references/executor-examples.md +110 -0
  329. package/pp-core/references/few-shot-examples/plan-checker.md +73 -0
  330. package/pp-core/references/few-shot-examples/verifier.md +109 -0
  331. package/pp-core/references/gate-prompts.md +100 -0
  332. package/pp-core/references/gates.md +70 -0
  333. package/pp-core/references/git-integration.md +298 -0
  334. package/pp-core/references/git-planning-commit.md +40 -0
  335. package/pp-core/references/ios-scaffold.md +123 -0
  336. package/pp-core/references/loop-hook-dispatch.md +61 -0
  337. package/pp-core/references/mandatory-initial-read.md +2 -0
  338. package/pp-core/references/model-profile-resolution.md +38 -0
  339. package/pp-core/references/model-profiles.md +245 -0
  340. package/pp-core/references/mvp-concepts.md +49 -0
  341. package/pp-core/references/phase-argument-parsing.md +61 -0
  342. package/pp-core/references/planner-antipatterns.md +176 -0
  343. package/pp-core/references/planner-chunked.md +49 -0
  344. package/pp-core/references/planner-gap-closure.md +62 -0
  345. package/pp-core/references/planner-graphify-auto-update.md +67 -0
  346. package/pp-core/references/planner-guidance.md +186 -0
  347. package/pp-core/references/planner-human-verify-mode.md +57 -0
  348. package/pp-core/references/planner-interface-context.md +62 -0
  349. package/pp-core/references/planner-load-graph-context.md +36 -0
  350. package/pp-core/references/planner-mvp-mode.md +53 -0
  351. package/pp-core/references/planner-reviews.md +42 -0
  352. package/pp-core/references/planner-revision.md +87 -0
  353. package/pp-core/references/planner-source-audit.md +73 -0
  354. package/pp-core/references/planning-config.md +477 -0
  355. package/pp-core/references/prohibition-probe-fixtures/01-streak-reminder/expected.json +14 -0
  356. package/pp-core/references/prohibition-probe-fixtures/02-clean-utility/expected.json +4 -0
  357. package/pp-core/references/prohibition-probe-fixtures/03-multi-prohibition/expected.json +32 -0
  358. package/pp-core/references/prohibition-probe.md +326 -0
  359. package/pp-core/references/project-skills-discovery.md +19 -0
  360. package/pp-core/references/questioning.md +162 -0
  361. package/pp-core/references/research-documentation-lookup.md +29 -0
  362. package/pp-core/references/research-philosophy.md +29 -0
  363. package/pp-core/references/research-verification-protocol.md +27 -0
  364. package/pp-core/references/revision-loop.md +97 -0
  365. package/pp-core/references/scout-codebase.md +51 -0
  366. package/pp-core/references/skeleton-template.md +48 -0
  367. package/pp-core/references/sketch-interactivity.md +41 -0
  368. package/pp-core/references/sketch-theme-system.md +94 -0
  369. package/pp-core/references/sketch-tooling.md +45 -0
  370. package/pp-core/references/sketch-variant-patterns.md +81 -0
  371. package/pp-core/references/spidr-splitting.md +69 -0
  372. package/pp-core/references/tdd.md +330 -0
  373. package/pp-core/references/thinking-models-debug.md +44 -0
  374. package/pp-core/references/thinking-models-execution.md +50 -0
  375. package/pp-core/references/thinking-models-planning.md +62 -0
  376. package/pp-core/references/thinking-models-research.md +50 -0
  377. package/pp-core/references/thinking-models-verification.md +55 -0
  378. package/pp-core/references/thinking-partner.md +96 -0
  379. package/pp-core/references/ui-brand.md +162 -0
  380. package/pp-core/references/universal-anti-patterns.md +63 -0
  381. package/pp-core/references/user-profiling.md +681 -0
  382. package/pp-core/references/user-story-template.md +58 -0
  383. package/pp-core/references/verification-overrides.md +227 -0
  384. package/pp-core/references/verification-patterns.md +612 -0
  385. package/pp-core/references/verify-mvp-mode.md +85 -0
  386. package/pp-core/references/workstream-flag.md +111 -0
  387. package/pp-core/references/worktree-branch-check.md +44 -0
  388. package/pp-core/references/worktree-path-safety.md +67 -0
  389. package/pp-core/templates/AI-SPEC.md +246 -0
  390. package/pp-core/templates/DEBUG.md +169 -0
  391. package/pp-core/templates/README.md +77 -0
  392. package/pp-core/templates/SECURITY.md +61 -0
  393. package/pp-core/templates/UAT.md +265 -0
  394. package/pp-core/templates/UI-SPEC.md +100 -0
  395. package/pp-core/templates/VALIDATION.md +76 -0
  396. package/pp-core/templates/claude-md.md +145 -0
  397. package/pp-core/templates/codebase/architecture.md +255 -0
  398. package/pp-core/templates/codebase/concerns.md +310 -0
  399. package/pp-core/templates/codebase/conventions.md +307 -0
  400. package/pp-core/templates/codebase/integrations.md +280 -0
  401. package/pp-core/templates/codebase/stack.md +186 -0
  402. package/pp-core/templates/codebase/structure.md +285 -0
  403. package/pp-core/templates/codebase/testing.md +480 -0
  404. package/pp-core/templates/config.json +62 -0
  405. package/pp-core/templates/context.md +352 -0
  406. package/pp-core/templates/continue-here.md +78 -0
  407. package/pp-core/templates/copilot-instructions.md +7 -0
  408. package/pp-core/templates/debug-subagent-prompt.md +91 -0
  409. package/pp-core/templates/dev-preferences.md +21 -0
  410. package/pp-core/templates/discovery.md +146 -0
  411. package/pp-core/templates/discussion-log.md +63 -0
  412. package/pp-core/templates/milestone-archive.md +123 -0
  413. package/pp-core/templates/milestone.md +115 -0
  414. package/pp-core/templates/phase-prompt.md +610 -0
  415. package/pp-core/templates/planner-subagent-prompt.md +117 -0
  416. package/pp-core/templates/project.md +203 -0
  417. package/pp-core/templates/requirements.md +231 -0
  418. package/pp-core/templates/research-project/ARCHITECTURE.md +204 -0
  419. package/pp-core/templates/research-project/FEATURES.md +147 -0
  420. package/pp-core/templates/research-project/PITFALLS.md +200 -0
  421. package/pp-core/templates/research-project/STACK.md +120 -0
  422. package/pp-core/templates/research-project/SUMMARY.md +170 -0
  423. package/pp-core/templates/research.md +592 -0
  424. package/pp-core/templates/retrospective.md +54 -0
  425. package/pp-core/templates/roadmap.md +202 -0
  426. package/pp-core/templates/spec.md +333 -0
  427. package/pp-core/templates/state.md +195 -0
  428. package/pp-core/templates/summary-complex.md +60 -0
  429. package/pp-core/templates/summary-minimal.md +42 -0
  430. package/pp-core/templates/summary-standard.md +49 -0
  431. package/pp-core/templates/summary.md +249 -0
  432. package/pp-core/templates/user-profile.md +146 -0
  433. package/pp-core/templates/user-setup.md +311 -0
  434. package/pp-core/templates/verification-report.md +335 -0
  435. package/pp-core/workflows/_runtime-launcher.snippet.sh +1 -0
  436. package/pp-core/workflows/add-backlog.md +91 -0
  437. package/pp-core/workflows/add-phase.md +113 -0
  438. package/pp-core/workflows/add-tests.md +355 -0
  439. package/pp-core/workflows/add-todo.md +161 -0
  440. package/pp-core/workflows/ai-integration-phase.md +295 -0
  441. package/pp-core/workflows/analyze-dependencies.md +96 -0
  442. package/pp-core/workflows/audit-fix.md +178 -0
  443. package/pp-core/workflows/audit-milestone.md +362 -0
  444. package/pp-core/workflows/audit-uat.md +110 -0
  445. package/pp-core/workflows/autonomous.md +886 -0
  446. package/pp-core/workflows/check-todos.md +180 -0
  447. package/pp-core/workflows/cleanup.md +195 -0
  448. package/pp-core/workflows/code-review-fix.md +506 -0
  449. package/pp-core/workflows/code-review.md +696 -0
  450. package/pp-core/workflows/complete-milestone.md +857 -0
  451. package/pp-core/workflows/debug.md +237 -0
  452. package/pp-core/workflows/diagnose-issues.md +245 -0
  453. package/pp-core/workflows/discovery-phase.md +291 -0
  454. package/pp-core/workflows/discovery-sprint.md +1546 -0
  455. package/pp-core/workflows/discuss-phase/modes/advisor.md +176 -0
  456. package/pp-core/workflows/discuss-phase/modes/all.md +28 -0
  457. package/pp-core/workflows/discuss-phase/modes/analyze.md +44 -0
  458. package/pp-core/workflows/discuss-phase/modes/auto.md +57 -0
  459. package/pp-core/workflows/discuss-phase/modes/batch.md +52 -0
  460. package/pp-core/workflows/discuss-phase/modes/chain.md +98 -0
  461. package/pp-core/workflows/discuss-phase/modes/default.md +141 -0
  462. package/pp-core/workflows/discuss-phase/modes/power.md +44 -0
  463. package/pp-core/workflows/discuss-phase/modes/text.md +55 -0
  464. package/pp-core/workflows/discuss-phase/templates/checkpoint.json +18 -0
  465. package/pp-core/workflows/discuss-phase/templates/context.md +136 -0
  466. package/pp-core/workflows/discuss-phase/templates/discussion-log.md +50 -0
  467. package/pp-core/workflows/discuss-phase-assumptions.md +675 -0
  468. package/pp-core/workflows/discuss-phase-power.md +291 -0
  469. package/pp-core/workflows/discuss-phase.md +520 -0
  470. package/pp-core/workflows/do.md +111 -0
  471. package/pp-core/workflows/docs-update.md +1168 -0
  472. package/pp-core/workflows/edit-phase.md +295 -0
  473. package/pp-core/workflows/eval-review.md +159 -0
  474. package/pp-core/workflows/execute-phase/steps/codebase-drift-gate.md +95 -0
  475. package/pp-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
  476. package/pp-core/workflows/execute-phase/steps/post-merge-gate.md +117 -0
  477. package/pp-core/workflows/execute-phase/steps/worktree-recovery-policy.md +9 -0
  478. package/pp-core/workflows/execute-phase.md +1707 -0
  479. package/pp-core/workflows/execute-plan.md +541 -0
  480. package/pp-core/workflows/explore.md +146 -0
  481. package/pp-core/workflows/extract-learnings.md +243 -0
  482. package/pp-core/workflows/fast.md +124 -0
  483. package/pp-core/workflows/forensics.md +279 -0
  484. package/pp-core/workflows/graduation.md +196 -0
  485. package/pp-core/workflows/health.md +224 -0
  486. package/pp-core/workflows/help/modes/brief.md +22 -0
  487. package/pp-core/workflows/help/modes/default.md +50 -0
  488. package/pp-core/workflows/help/modes/full.md +791 -0
  489. package/pp-core/workflows/help/modes/topic.md +74 -0
  490. package/pp-core/workflows/help.md +24 -0
  491. package/pp-core/workflows/import.md +256 -0
  492. package/pp-core/workflows/inbox.md +387 -0
  493. package/pp-core/workflows/ingest-docs.md +340 -0
  494. package/pp-core/workflows/insert-phase.md +152 -0
  495. package/pp-core/workflows/list-phase-assumptions.md +178 -0
  496. package/pp-core/workflows/list-workspaces.md +57 -0
  497. package/pp-core/workflows/manager.md +435 -0
  498. package/pp-core/workflows/map-codebase.md +444 -0
  499. package/pp-core/workflows/milestone-summary.md +224 -0
  500. package/pp-core/workflows/mvp-phase.md +222 -0
  501. package/pp-core/workflows/new-milestone.md +643 -0
  502. package/pp-core/workflows/new-project.md +1563 -0
  503. package/pp-core/workflows/new-workspace.md +240 -0
  504. package/pp-core/workflows/next.md +347 -0
  505. package/pp-core/workflows/node-repair.md +92 -0
  506. package/pp-core/workflows/note.md +158 -0
  507. package/pp-core/workflows/pause-work.md +250 -0
  508. package/pp-core/workflows/plan-milestone-gaps.md +281 -0
  509. package/pp-core/workflows/plan-phase.md +1755 -0
  510. package/pp-core/workflows/plan-review-convergence.md +369 -0
  511. package/pp-core/workflows/plant-seed.md +230 -0
  512. package/pp-core/workflows/pr-branch.md +159 -0
  513. package/pp-core/workflows/profile-user.md +455 -0
  514. package/pp-core/workflows/progress.md +756 -0
  515. package/pp-core/workflows/quick.md +1045 -0
  516. package/pp-core/workflows/reapply-patches.md +443 -0
  517. package/pp-core/workflows/remove-phase.md +156 -0
  518. package/pp-core/workflows/remove-workspace.md +108 -0
  519. package/pp-core/workflows/resume-project.md +348 -0
  520. package/pp-core/workflows/review.md +765 -0
  521. package/pp-core/workflows/scan.md +107 -0
  522. package/pp-core/workflows/secure-phase.md +184 -0
  523. package/pp-core/workflows/session-report.md +146 -0
  524. package/pp-core/workflows/settings-advanced.md +816 -0
  525. package/pp-core/workflows/settings-integrations.md +312 -0
  526. package/pp-core/workflows/settings.md +592 -0
  527. package/pp-core/workflows/ship.md +465 -0
  528. package/pp-core/workflows/sketch-wrap-up.md +286 -0
  529. package/pp-core/workflows/sketch.md +361 -0
  530. package/pp-core/workflows/spec-phase.md +495 -0
  531. package/pp-core/workflows/spike-wrap-up.md +307 -0
  532. package/pp-core/workflows/spike.md +453 -0
  533. package/pp-core/workflows/stats.md +80 -0
  534. package/pp-core/workflows/sync-skills.md +182 -0
  535. package/pp-core/workflows/thread.md +222 -0
  536. package/pp-core/workflows/transition.md +694 -0
  537. package/pp-core/workflows/ui-phase.md +328 -0
  538. package/pp-core/workflows/ui-review.md +193 -0
  539. package/pp-core/workflows/ultraplan-phase.md +199 -0
  540. package/pp-core/workflows/undo.md +314 -0
  541. package/pp-core/workflows/update.md +501 -0
  542. package/pp-core/workflows/validate-phase.md +183 -0
  543. package/pp-core/workflows/verify-phase.md +569 -0
  544. package/pp-core/workflows/verify-work.md +804 -0
  545. package/scripts/affected-tests-lib.cjs +554 -0
  546. package/scripts/audit-workflow-script-paths.cjs +73 -0
  547. package/scripts/base64-scan.sh +351 -0
  548. package/scripts/build-hooks.js +254 -0
  549. package/scripts/changeset/README.md +129 -0
  550. package/scripts/changeset/cli.cjs +597 -0
  551. package/scripts/changeset/github-release-notes.cjs +199 -0
  552. package/scripts/changeset/lint.cjs +147 -0
  553. package/scripts/changeset/new.cjs +151 -0
  554. package/scripts/changeset/parse.cjs +114 -0
  555. package/scripts/changeset/render.cjs +34 -0
  556. package/scripts/changeset/serialize.cjs +130 -0
  557. package/scripts/check-alias-drift.cjs +114 -0
  558. package/scripts/check-env.cjs +312 -0
  559. package/scripts/check-npm-integrity.cjs +215 -0
  560. package/scripts/ci-guard-runner.cjs +22 -0
  561. package/scripts/ci-prepare-test-scope.cjs +93 -0
  562. package/scripts/ci-rebase-check.cjs +86 -0
  563. package/scripts/ci-test-scope.cjs +441 -0
  564. package/scripts/command-contract-helpers.cjs +64 -0
  565. package/scripts/diff-touches-shipped-paths.cjs +149 -0
  566. package/scripts/fix-slash-commands.cjs +161 -0
  567. package/scripts/gen-capability-registry.cjs +2646 -0
  568. package/scripts/gen-commands-reference.cjs +139 -0
  569. package/scripts/gen-inventory-manifest.cjs +114 -0
  570. package/scripts/gen-loop-host-contract.cjs +526 -0
  571. package/scripts/gen-research-agents.cjs +276 -0
  572. package/scripts/generate-package-identity.cjs +134 -0
  573. package/scripts/issue-dedupe.cjs +278 -0
  574. package/scripts/issue-version-gate.cjs +140 -0
  575. package/scripts/lib/allowlist-ratchet.cjs +236 -0
  576. package/scripts/lib/cli-exit.cjs +56 -0
  577. package/scripts/lint-allow-test-rule-refs.allowlist.json +328 -0
  578. package/scripts/lint-allow-test-rule-refs.cjs +162 -0
  579. package/scripts/lint-command-contract.cjs +118 -0
  580. package/scripts/lint-descriptions.cjs +87 -0
  581. package/scripts/lint-docs-required.cjs +222 -0
  582. package/scripts/lint-legacy-dir-name.cjs +166 -0
  583. package/scripts/lint-package-identity-drift.cjs +141 -0
  584. package/scripts/lint-pr-check-project-dir.cjs +99 -0
  585. package/scripts/lint-regression-test-names.allowlist.json +269 -0
  586. package/scripts/lint-regression-test-names.cjs +117 -0
  587. package/scripts/lint-shell-command-projection-drift.cjs +62 -0
  588. package/scripts/lint-skill-deps.cjs +185 -0
  589. package/scripts/lint-test-file-count.allowlist.json +181 -0
  590. package/scripts/lint-test-file-count.cjs +246 -0
  591. package/scripts/lint-windows-test-portability.cjs +178 -0
  592. package/scripts/mutation-matrix.cjs +323 -0
  593. package/scripts/pr-target-policy.cjs +63 -0
  594. package/scripts/pr-template-policy.cjs +268 -0
  595. package/scripts/prompt-injection-scan.sh +207 -0
  596. package/scripts/registry-smoke.cjs +337 -0
  597. package/scripts/release-notes/discord-release-summary.cjs +373 -0
  598. package/scripts/release-notes/format-github-release-notes.cjs +261 -0
  599. package/scripts/release-tarball-smoke.cjs +763 -0
  600. package/scripts/research-profiles.cjs +149 -0
  601. package/scripts/run-affected-tests.cjs +7 -0
  602. package/scripts/run-tests.cjs +589 -0
  603. package/scripts/secret-scan-lint.sh +231 -0
  604. package/scripts/secret-scan.sh +358 -0
  605. package/scripts/setup-branch-protection.sh +234 -0
  606. package/scripts/strip-prose-atrefs.cjs +106 -0
  607. package/scripts/sync-manifest-versions.cjs +119 -0
  608. package/scripts/sync-next-version.cjs +133 -0
  609. package/scripts/sync-rulesets.sh +34 -0
  610. package/scripts/sync-runtime-launcher.cjs +425 -0
  611. package/scripts/test-failure-reasons.cjs +34 -0
  612. package/scripts/update-size-baseline.cjs +68 -0
  613. package/scripts/verify-npm-publish.cjs +240 -0
  614. package/scripts/verify-opengsd-sweep.cjs +288 -0
  615. package/scripts/verify-phase-02-rename.sh +258 -0
  616. package/scripts/verify-phase-03-rename.sh +376 -0
  617. package/scripts/workflow-policy.cjs +483 -0
  618. package/scripts/workflow-size.cjs +90 -0
@@ -0,0 +1,857 @@
1
+ <purpose>
2
+
3
+ Mark a shipped version (v1.0, v1.1, v2.0) as complete. Creates historical record in MILESTONES.md, performs full PROJECT.md evolution review, reorganizes ROADMAP.md with milestone groupings, and tags the release in git.
4
+
5
+ </purpose>
6
+
7
+ <required_reading>
8
+
9
+ 1. templates/milestone.md
10
+ 2. templates/milestone-archive.md
11
+ 3. `.planning/ROADMAP.md`
12
+ 4. `.planning/REQUIREMENTS.md`
13
+ 5. `.planning/PROJECT.md`
14
+
15
+ </required_reading>
16
+
17
+ <archival_behavior>
18
+
19
+ When a milestone completes:
20
+
21
+ 1. Extract full milestone details to `.planning/milestones/v[X.Y]-ROADMAP.md`
22
+ 2. Archive requirements to `.planning/milestones/v[X.Y]-REQUIREMENTS.md`
23
+ 3. Update ROADMAP.md — overwrite in place with milestone grouping (preserve Backlog section)
24
+ 4. Safety commit archive files + updated ROADMAP.md, then `git rm REQUIREMENTS.md` (fresh for next milestone)
25
+ 5. Perform full PROJECT.md evolution review
26
+ 6. Offer to create next milestone inline
27
+ 7. Archive UI artifacts (`*-UI-SPEC.md`, `*-UI-REVIEW.md`) alongside other phase documents
28
+ 8. Clean up `.planning/ui-reviews/` screenshot files (binary assets, never archived)
29
+
30
+ **Context Efficiency:** Archives keep ROADMAP.md constant-size and REQUIREMENTS.md milestone-scoped.
31
+
32
+ **ROADMAP archive** uses `templates/milestone-archive.md` — includes milestone header (status, phases, date), full phase details, milestone summary (decisions, issues, tech debt).
33
+
34
+ **REQUIREMENTS archive** contains all requirements marked complete with outcomes, traceability table with final status, notes on changed requirements.
35
+
36
+ </archival_behavior>
37
+
38
+ <process>
39
+
40
+ <step name="pre_close_artifact_audit">
41
+ Before proceeding with milestone close, run the comprehensive open artifact audit.
42
+
43
+ ```bash
44
+ _PP_SHIM_NAME="pp-tools.cjs"; _PP_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; PP_TOOLS="${_PP_RUNTIME_ROOT}/pp-core/bin/${_PP_SHIM_NAME}"; if [ -f "$PP_TOOLS" ]; then pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${_PP_RUNTIME_ROOT}/.claude/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${_PP_RUNTIME_ROOT}/.claude/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${_PP_RUNTIME_ROOT}/.codex/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${_PP_RUNTIME_ROOT}/.codex/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif command -v pp-tools >/dev/null 2>&1; then PP_TOOLS="$(command -v pp-tools)"; pp_run() { "$PP_TOOLS" "$@"; }; elif [ -f "$HOME/.claude/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="$HOME/.claude/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${HERMES_HOME:-$HOME/.hermes}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${HERMES_HOME:-$HOME/.hermes}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${CURSOR_CONFIG_DIR:-$HOME/.cursor}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CURSOR_CONFIG_DIR:-$HOME/.cursor}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${CODEX_HOME:-$HOME/.codex}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CODEX_HOME:-$HOME/.codex}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${GEMINI_CONFIG_DIR:-$HOME/.gemini}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${GEMINI_CONFIG_DIR:-$HOME/.gemini}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${COPILOT_CONFIG_DIR:-$HOME/.copilot}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${COPILOT_CONFIG_DIR:-$HOME/.copilot}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${WINDSURF_CONFIG_DIR:-$HOME/.codeium/windsurf}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${AUGMENT_CONFIG_DIR:-$HOME/.augment}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${AUGMENT_CONFIG_DIR:-$HOME/.augment}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${TRAE_CONFIG_DIR:-$HOME/.trae}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${TRAE_CONFIG_DIR:-$HOME/.trae}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${QWEN_CONFIG_DIR:-$HOME/.qwen}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${QWEN_CONFIG_DIR:-$HOME/.qwen}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CODEBUDDY_CONFIG_DIR:-$HOME/.codebuddy}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${CLINE_CONFIG_DIR:-$HOME/.cline}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${CLINE_CONFIG_DIR:-$HOME/.cline}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${GROK_AGENTS_HOME:-$HOME/.agents}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${GROK_AGENTS_HOME:-$HOME/.agents}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${ANTIGRAVITY_CONFIG_DIR:-$HOME/.gemini/antigravity}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${OPENCODE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/opencode}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; elif [ -f "${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/pp-core/bin/${_PP_SHIM_NAME}" ]; then PP_TOOLS="${KILO_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/kilo}/pp-core/bin/${_PP_SHIM_NAME}"; pp_run() { node "$PP_TOOLS" "$@"; }; else echo "ERROR: pp-tools.cjs not found at $PP_TOOLS and pp-tools is not on PATH. Run: npx -y @pareto4/pp-core@latest --claude --local" >&2; exit 1; fi; if [ -n "${CLAUDE_ENV_FILE:-}" ] && [ -n "${PP_TOOLS:-}" ]; then printf "export PATH='%s':\"\$PATH\"\n" "${PP_TOOLS%/*}" >> "$CLAUDE_ENV_FILE" 2>/dev/null || true; fi
45
+ pp_run query audit-open
46
+ ```
47
+
48
+ If the output contains open items (any section with count > 0):
49
+
50
+ Display the full audit report to the user.
51
+
52
+ Then ask:
53
+ ```
54
+ These items are open. Choose an action:
55
+ [R] Resolve — stop and fix items, then re-run /pp:complete-milestone
56
+ [A] Acknowledge all — document as deferred and proceed with close
57
+ [C] Cancel — exit without closing
58
+ ```
59
+
60
+ If user chooses [A] (Acknowledge):
61
+ 1. Re-run `pp-tools.cjs query audit-open --json` to get structured data
62
+ 2. Write acknowledged items to STATE.md under `## Deferred Items` section:
63
+ ```markdown
64
+ ## Deferred Items
65
+
66
+ Items acknowledged and deferred at milestone close on {date}:
67
+
68
+ | Category | Item | Status |
69
+ |----------|------|--------|
70
+ | debug | {slug} | {status} |
71
+ | quick_task | {slug} | {status} |
72
+ ...
73
+ ```
74
+ Sanitize all slug and status values via `sanitizeForDisplay()` before writing. Never inject raw file content into STATE.md.
75
+ 3. Record in MILESTONES.md entry: `Known deferred items at close: {count} (see STATE.md Deferred Items)`
76
+ 4. Proceed with milestone close.
77
+
78
+ If output shows all clear (no open items): print `All artifact types clear.` and proceed.
79
+
80
+ SECURITY: Audit JSON output is structured data from the `audit-open` query handler (same JSON contract as legacy `pp-tools.cjs audit-open`) — validated and sanitized at source. When writing to STATE.md, item slugs and descriptions are sanitized via `sanitizeForDisplay()` before inclusion. Never inject raw user-supplied content into STATE.md without sanitization.
81
+ </step>
82
+
83
+ <step name="verify_readiness">
84
+
85
+ **Use `roadmap analyze` for comprehensive readiness check:**
86
+
87
+ ```bash
88
+ ROADMAP=$(pp_run query roadmap.analyze)
89
+ ```
90
+
91
+ This returns all phases with plan/summary counts and disk status. Use this to verify:
92
+ - Which phases belong to this milestone?
93
+ - All phases complete (all plans have summaries)? Check `disk_status === 'complete'` for each.
94
+ - `progress_percent` should be 100%.
95
+
96
+ **Requirements completion check (REQUIRED before presenting):**
97
+
98
+ Parse REQUIREMENTS.md traceability table:
99
+ - Count total v1 requirements vs checked-off (`[x]`) requirements
100
+ - Identify any non-Complete rows in the traceability table
101
+
102
+ Present:
103
+
104
+ ```
105
+ Milestone: [Name, e.g., "v1.0 MVP"]
106
+
107
+ Includes:
108
+ - Phase 1: Foundation (2/2 plans complete)
109
+ - Phase 2: Authentication (2/2 plans complete)
110
+ - Phase 3: Core Features (3/3 plans complete)
111
+ - Phase 4: Polish (1/1 plan complete)
112
+
113
+ Total: {phase_count} phases, {total_plans} plans, all complete
114
+ Requirements: {N}/{M} v1 requirements checked off
115
+ ```
116
+
117
+ **If requirements incomplete** (N < M):
118
+
119
+ ```
120
+ ⚠ Unchecked Requirements:
121
+
122
+ - [ ] {REQ-ID}: {description} (Phase {X})
123
+ - [ ] {REQ-ID}: {description} (Phase {Y})
124
+ ```
125
+
126
+ MUST present 3 options:
127
+ 1. **Proceed anyway** — mark milestone complete with known gaps
128
+ 2. **Run audit first** — `/pp:audit-milestone` to assess gap severity
129
+ 3. **Abort** — return to development
130
+
131
+ If user selects "Proceed anyway": note incomplete requirements in MILESTONES.md under `### Known Gaps` with REQ-IDs and descriptions.
132
+
133
+ <config-check>
134
+
135
+ ```bash
136
+ cat .planning/config.json 2>/dev/null || true
137
+ ```
138
+
139
+ </config-check>
140
+
141
+ <if mode="yolo">
142
+
143
+ ```
144
+ ⚡ Auto-approved: Milestone scope verification
145
+ [Show breakdown summary without prompting]
146
+ Proceeding to stats gathering...
147
+ ```
148
+
149
+ Proceed to gather_stats.
150
+
151
+ </if>
152
+
153
+ <if mode="interactive" OR="custom with gates.confirm_milestone_scope true">
154
+
155
+ ```
156
+ Ready to mark this milestone as shipped?
157
+ (yes / wait / adjust scope)
158
+ ```
159
+
160
+ Wait for confirmation.
161
+ - "adjust scope": Ask which phases to include.
162
+ - "wait": Stop, user returns when ready.
163
+
164
+ </if>
165
+
166
+ </step>
167
+
168
+ <step name="gather_stats">
169
+
170
+ Calculate milestone statistics:
171
+
172
+ ```bash
173
+ git log --oneline --grep="feat(" | head -20
174
+ git diff --stat FIRST_COMMIT..LAST_COMMIT | tail -1
175
+ find . -name "*.swift" -o -name "*.ts" -o -name "*.py" | xargs wc -l 2>/dev/null || true
176
+ git log --format="%ai" FIRST_COMMIT | tail -1
177
+ git log --format="%ai" LAST_COMMIT | head -1
178
+ ```
179
+
180
+ Present:
181
+
182
+ ```
183
+ Milestone Stats:
184
+ - Phases: [X-Y]
185
+ - Plans: [Z] total
186
+ - Tasks: [N] total (from phase summaries)
187
+ - Files modified: [M]
188
+ - Lines of code: [LOC] [language]
189
+ - Timeline: [Days] days ([Start] → [End])
190
+ - Git range: feat(XX-XX) → feat(YY-YY)
191
+ ```
192
+
193
+ </step>
194
+
195
+ <step name="extract_accomplishments">
196
+
197
+ Extract one-liners from SUMMARY.md files using summary-extract:
198
+
199
+ ```bash
200
+ # For each phase in milestone, extract one-liner
201
+ for summary in .planning/phases/*-*/*-SUMMARY.md; do
202
+ [ -e "$summary" ] || continue
203
+ pp_run query summary-extract "$summary" --fields one_liner --pick one_liner
204
+ done
205
+ ```
206
+
207
+ Extract 4-6 key accomplishments. Present:
208
+
209
+ ```
210
+ Key accomplishments for this milestone:
211
+ 1. [Achievement from phase 1]
212
+ 2. [Achievement from phase 2]
213
+ 3. [Achievement from phase 3]
214
+ 4. [Achievement from phase 4]
215
+ 5. [Achievement from phase 5]
216
+ ```
217
+
218
+ </step>
219
+
220
+ <step name="create_milestone_entry">
221
+
222
+ **Note:** MILESTONES.md entry is now created automatically by `pp-tools.cjs query milestone.complete` in the archive_milestone step. The entry includes version, date, phase/plan/task counts, and accomplishments extracted from SUMMARY.md files.
223
+
224
+ If additional details are needed (e.g., user-provided "Delivered" summary, git range, LOC stats), add them manually after the CLI creates the base entry.
225
+
226
+ </step>
227
+
228
+ <step name="evolve_project_full_review">
229
+
230
+ Full PROJECT.md evolution review at milestone completion.
231
+
232
+ Read all phase summaries:
233
+
234
+ ```bash
235
+ cat .planning/phases/*-*/*-SUMMARY.md
236
+ ```
237
+
238
+ **Full review checklist:**
239
+
240
+ 1. **"What This Is" accuracy:**
241
+ - Compare current description to what was built
242
+ - Update if product has meaningfully changed
243
+
244
+ 2. **Core Value check:**
245
+ - Still the right priority? Did shipping reveal a different core value?
246
+ - Update if the ONE thing has shifted
247
+
248
+ 3. **Business Context check (only if the section is present):**
249
+ - Skip entirely if PROJECT.md has no `## Business Context` section
250
+ - Customer, revenue model, and success metric still accurate after shipping?
251
+ - Update any field that drifted; refresh the linked strategy doc reference if it moved
252
+
253
+ 4. **Requirements audit:**
254
+
255
+ **Validated section:**
256
+ - All Active requirements shipped this milestone → Move to Validated
257
+ - Format: `- ✓ [Requirement] — v[X.Y]`
258
+
259
+ **Active section:**
260
+ - Remove requirements moved to Validated
261
+ - Add new requirements for next milestone
262
+ - Keep unaddressed requirements
263
+
264
+ **Out of Scope audit:**
265
+ - Review each item — reasoning still valid?
266
+ - Remove irrelevant items
267
+ - Add requirements invalidated during milestone
268
+
269
+ 5. **Context update:**
270
+ - Current codebase state (LOC, tech stack)
271
+ - User feedback themes (if any)
272
+ - Known issues or technical debt
273
+
274
+ 6. **Key Decisions audit:**
275
+ - Extract all decisions from milestone phase summaries
276
+ - Add to Key Decisions table with outcomes
277
+ - Mark ✓ Good, ⚠️ Revisit, or — Pending
278
+
279
+ 7. **Constraints check:**
280
+ - Any constraints changed during development? Update as needed
281
+
282
+ Update PROJECT.md inline. Update "Last updated" footer:
283
+
284
+ ```markdown
285
+ ---
286
+ *Last updated: [date] after v[X.Y] milestone*
287
+ ```
288
+
289
+ **Example full evolution (v1.0 → v1.1 prep):**
290
+
291
+ Before:
292
+
293
+ ```markdown
294
+ ## What This Is
295
+
296
+ A real-time collaborative whiteboard for remote teams.
297
+
298
+ ## Core Value
299
+
300
+ Real-time sync that feels instant.
301
+
302
+ ## Requirements
303
+
304
+ ### Validated
305
+
306
+ (None yet — ship to validate)
307
+
308
+ ### Active
309
+
310
+ - [ ] Canvas drawing tools
311
+ - [ ] Real-time sync < 500ms
312
+ - [ ] User authentication
313
+ - [ ] Export to PNG
314
+
315
+ ### Out of Scope
316
+
317
+ - Mobile app — web-first approach
318
+ - Video chat — use external tools
319
+ ```
320
+
321
+ After v1.0:
322
+
323
+ ```markdown
324
+ ## What This Is
325
+
326
+ A real-time collaborative whiteboard for remote teams with instant sync and drawing tools.
327
+
328
+ ## Core Value
329
+
330
+ Real-time sync that feels instant.
331
+
332
+ ## Requirements
333
+
334
+ ### Validated
335
+
336
+ - ✓ Canvas drawing tools — v1.0
337
+ - ✓ Real-time sync < 500ms — v1.0 (achieved 200ms avg)
338
+ - ✓ User authentication — v1.0
339
+
340
+ ### Active
341
+
342
+ - [ ] Export to PNG
343
+ - [ ] Undo/redo history
344
+ - [ ] Shape tools (rectangles, circles)
345
+
346
+ ### Out of Scope
347
+
348
+ - Mobile app — web-first approach, PWA works well
349
+ - Video chat — use external tools
350
+ - Offline mode — real-time is core value
351
+
352
+ ## Context
353
+
354
+ Shipped v1.0 with 2,400 LOC TypeScript.
355
+ Tech stack: Next.js, Supabase, Canvas API.
356
+ Initial user testing showed demand for shape tools.
357
+ ```
358
+
359
+ **Step complete when:**
360
+
361
+ - [ ] "What This Is" reviewed and updated if needed
362
+ - [ ] Core Value verified as still correct
363
+ - [ ] Business Context checked (or confirmed absent)
364
+ - [ ] All shipped requirements moved to Validated
365
+ - [ ] New requirements added to Active for next milestone
366
+ - [ ] Out of Scope reasoning audited
367
+ - [ ] Context updated with current state
368
+ - [ ] All milestone decisions added to Key Decisions
369
+ - [ ] "Last updated" footer reflects milestone completion
370
+
371
+ </step>
372
+
373
+ <step name="reorganize_roadmap">
374
+
375
+ Update `.planning/ROADMAP.md` — group completed milestone phases:
376
+
377
+ ```markdown
378
+ # Roadmap: [Project Name]
379
+
380
+ ## Milestones
381
+
382
+ - ✅ **v1.0 MVP** — Phases 1-4 (shipped YYYY-MM-DD)
383
+ - 🚧 **v1.1 Security** — Phases 5-6 (in progress)
384
+ - 📋 **v2.0 Redesign** — Phases 7-10 (planned)
385
+
386
+ ## Phases
387
+
388
+ <details>
389
+ <summary>✅ v1.0 MVP (Phases 1-4) — SHIPPED YYYY-MM-DD</summary>
390
+
391
+ - [x] Phase 1: Foundation (2/2 plans) — completed YYYY-MM-DD
392
+ - [x] Phase 2: Authentication (2/2 plans) — completed YYYY-MM-DD
393
+ - [x] Phase 3: Core Features (3/3 plans) — completed YYYY-MM-DD
394
+ - [x] Phase 4: Polish (1/1 plan) — completed YYYY-MM-DD
395
+
396
+ </details>
397
+
398
+ ### 🚧 v[Next] [Name] (In Progress / Planned)
399
+
400
+ - [ ] Phase 5: [Name] ([N] plans)
401
+ - [ ] Phase 6: [Name] ([N] plans)
402
+
403
+ ## Progress
404
+
405
+ | Phase | Milestone | Plans Complete | Status | Completed |
406
+ | ----------------- | --------- | -------------- | ----------- | ---------- |
407
+ | 1. Foundation | v1.0 | 2/2 | Complete | YYYY-MM-DD |
408
+ | 2. Authentication | v1.0 | 2/2 | Complete | YYYY-MM-DD |
409
+ | 3. Core Features | v1.0 | 3/3 | Complete | YYYY-MM-DD |
410
+ | 4. Polish | v1.0 | 1/1 | Complete | YYYY-MM-DD |
411
+ | 5. Security Audit | v1.1 | 0/1 | Not started | - |
412
+ | 6. Hardening | v1.1 | 0/2 | Not started | - |
413
+ ```
414
+
415
+ </step>
416
+
417
+ <step name="archive_milestone">
418
+
419
+ **Delegate archival to `pp-tools.cjs query milestone.complete`:**
420
+
421
+ ```bash
422
+ ARCHIVE=$(pp_run query milestone.complete "v[X.Y]" --name "[Milestone Name]")
423
+ ```
424
+
425
+ The CLI handles:
426
+ - Creating `.planning/milestones/` directory
427
+ - Archiving ROADMAP.md to `milestones/v[X.Y]-ROADMAP.md`
428
+ - Archiving REQUIREMENTS.md to `milestones/v[X.Y]-REQUIREMENTS.md` with archive header
429
+ - Moving audit file to milestones if it exists
430
+ - Creating/appending MILESTONES.md entry with accomplishments from SUMMARY.md files
431
+ - Updating STATE.md (status, last activity)
432
+
433
+ Extract from result: `version`, `date`, `phases`, `plans`, `tasks`, `accomplishments`, `archived`.
434
+
435
+ Verify: `✅ Milestone archived to .planning/milestones/`
436
+
437
+ **Phase archival (optional):** After archival completes, ask the user:
438
+
439
+
440
+ **Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available.
441
+ AskUserQuestion(header="Archive Phases", question="Archive phase directories to milestones/?", options: "Yes — move to milestones/v[X.Y]-phases/" | "Skip — keep phases in place")
442
+
443
+ If "Yes": move phase directories to the milestone archive:
444
+ ```bash
445
+ mkdir -p .planning/milestones/v[X.Y]-phases
446
+ # For each phase directory in .planning/phases/:
447
+ mv .planning/phases/{phase-dir} .planning/milestones/v[X.Y]-phases/
448
+ ```
449
+ Verify: `✅ Phase directories archived to .planning/milestones/v[X.Y]-phases/`
450
+
451
+ If "Skip": Phase directories remain in `.planning/phases/` as raw execution history. Use `/pp:cleanup` later to archive retroactively.
452
+
453
+ After archival, the AI still handles:
454
+ - Reorganizing ROADMAP.md with milestone grouping (requires judgment) — overwrite in place after extracting Backlog section
455
+ - Full PROJECT.md evolution review (requires understanding)
456
+ - Safety commit of archive files + updated ROADMAP.md, then `git rm .planning/REQUIREMENTS.md`
457
+ - These are NOT fully delegated because they require AI interpretation of content
458
+
459
+ </step>
460
+
461
+ <step name="reorganize_roadmap_and_delete_originals">
462
+
463
+ After `milestone complete` has archived, reorganize ROADMAP.md with milestone groupings, then commit archives as a safety checkpoint before removing originals.
464
+
465
+ **Backlog preservation — do this FIRST before rewriting ROADMAP.md:**
466
+
467
+ Extract the Backlog section from the current ROADMAP.md before making any changes:
468
+
469
+ ```bash
470
+ # Extract lines under ## Backlog through end of file (or next ## section)
471
+ BACKLOG_SECTION=$(awk '/^## Backlog/{found=1} found{print}' .planning/ROADMAP.md)
472
+ ```
473
+
474
+ If `$BACKLOG_SECTION` is empty, there is no Backlog section — skip silently.
475
+
476
+ **Reorganize ROADMAP.md** — overwrite in place (do NOT delete first) with milestone groupings:
477
+
478
+ ```markdown
479
+ # Roadmap: [Project Name]
480
+
481
+ ## Milestones
482
+
483
+ - ✅ **v1.0 MVP** — Phases 1-4 (shipped YYYY-MM-DD)
484
+ - 🚧 **v1.1 Security** — Phases 5-6 (in progress)
485
+
486
+ ## Phases
487
+
488
+ <details>
489
+ <summary>✅ v1.0 MVP (Phases 1-4) — SHIPPED YYYY-MM-DD</summary>
490
+
491
+ - [x] Phase 1: Foundation (2/2 plans) — completed YYYY-MM-DD
492
+ - [x] Phase 2: Authentication (2/2 plans) — completed YYYY-MM-DD
493
+
494
+ </details>
495
+ ```
496
+
497
+ **Re-append Backlog section after the rewrite** (only if `$BACKLOG_SECTION` was non-empty):
498
+
499
+ Append the extracted Backlog content verbatim to the end of the newly written ROADMAP.md. This ensures 999.x backlog items are never silently dropped during milestone reorganization.
500
+
501
+ **Safety commit — commit archive files BEFORE deleting any originals:**
502
+
503
+ ```bash
504
+ pp_run query commit "chore: archive v[X.Y] milestone files" --files .planning/milestones/v[X.Y]-ROADMAP.md .planning/milestones/v[X.Y]-REQUIREMENTS.md .planning/milestones/v[X.Y]-MILESTONE-AUDIT.md .planning/MILESTONES.md .planning/PROJECT.md .planning/STATE.md .planning/ROADMAP.md
505
+ ```
506
+
507
+ This creates a durable checkpoint in git history. If anything fails after this point, the working tree can be reconstructed from git.
508
+
509
+ **Remove REQUIREMENTS.md via git rm** (preserves history, stages deletion atomically):
510
+
511
+ ```bash
512
+ git rm .planning/REQUIREMENTS.md
513
+ ```
514
+
515
+ </step>
516
+
517
+ <step name="write_retrospective">
518
+
519
+ **Append to living retrospective:**
520
+
521
+ Check for existing retrospective:
522
+ ```bash
523
+ ls .planning/RETROSPECTIVE.md 2>/dev/null || true
524
+ ```
525
+
526
+ **If exists:** Read the file, append new milestone section before the "## Cross-Milestone Trends" section.
527
+
528
+ **If doesn't exist:** Create from template at `~/.claude/pp-core/templates/retrospective.md`.
529
+
530
+ **Gather retrospective data:**
531
+
532
+ 1. From SUMMARY.md files: Extract key deliverables, one-liners, tech decisions
533
+ 2. From VERIFICATION.md files: Extract verification scores, gaps found
534
+ 3. From UAT.md files: Extract test results, issues found
535
+ 4. From git log: Count commits, calculate timeline
536
+ 5. From the milestone work: Reflect on what worked and what didn't
537
+
538
+ **Write the milestone section:**
539
+
540
+ ```markdown
541
+ ## Milestone: v{version} — {name}
542
+
543
+ **Shipped:** {date}
544
+ **Phases:** {phase_count} | **Plans:** {plan_count}
545
+
546
+ ### What Was Built
547
+ {Extract from SUMMARY.md one-liners}
548
+
549
+ ### What Worked
550
+ {Patterns that led to smooth execution}
551
+
552
+ ### What Was Inefficient
553
+ {Missed opportunities, rework, bottlenecks}
554
+
555
+ ### Patterns Established
556
+ {New conventions discovered during this milestone}
557
+
558
+ ### Key Lessons
559
+ {Specific, actionable takeaways}
560
+
561
+ ### Cost Observations
562
+ - Model mix: {X}% opus, {Y}% sonnet, {Z}% haiku
563
+ - Sessions: {count}
564
+ - Notable: {efficiency observation}
565
+ ```
566
+
567
+ **Update cross-milestone trends:**
568
+
569
+ If the "## Cross-Milestone Trends" section exists, update the tables with new data from this milestone.
570
+
571
+ **Commit:**
572
+ ```bash
573
+ pp_run query commit "docs: update retrospective for v${VERSION}" --files .planning/RETROSPECTIVE.md
574
+ ```
575
+
576
+ </step>
577
+
578
+ <step name="update_state">
579
+
580
+ Most STATE.md updates were handled by `milestone complete`, but verify and update remaining fields:
581
+
582
+ **Project Reference:**
583
+
584
+ ```markdown
585
+ ## Project Reference
586
+
587
+ See: .planning/PROJECT.md (updated [today])
588
+
589
+ **Core value:** [Current core value from PROJECT.md]
590
+ **Current focus:** [Next milestone or "Planning next milestone"]
591
+ ```
592
+
593
+ **Accumulated Context:**
594
+ - Clear decisions summary (full log in PROJECT.md)
595
+ - Clear resolved blockers
596
+ - Keep open blockers for next milestone
597
+
598
+ </step>
599
+
600
+ <step name="handle_branches">
601
+
602
+ Check branching strategy and offer merge options.
603
+
604
+ Use `init milestone-op` for context, or load config directly:
605
+
606
+ ```bash
607
+ INIT=$(pp_run query init.execute-phase "1")
608
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
609
+ ```
610
+
611
+ Extract `branching_strategy`, `phase_branch_template`, `milestone_branch_template`, and `commit_docs` from init JSON.
612
+
613
+ Detect base branch:
614
+ ```bash
615
+ BASE_BRANCH=$(pp_run query git.base-branch)
616
+ ```
617
+
618
+ **If "none":** Skip to git_tag.
619
+
620
+ **For "phase" strategy:**
621
+
622
+ ```bash
623
+ BRANCH_PREFIX=$(echo "$PHASE_BRANCH_TEMPLATE" | sed 's/{.*//')
624
+ PHASE_BRANCHES=$(git branch --list "${BRANCH_PREFIX}*" 2>/dev/null | sed 's/^\*//' | tr -d ' ')
625
+ ```
626
+
627
+ **For "milestone" strategy:**
628
+
629
+ ```bash
630
+ BRANCH_PREFIX=$(echo "$MILESTONE_BRANCH_TEMPLATE" | sed 's/{.*//')
631
+ MILESTONE_BRANCH=$(git branch --list "${BRANCH_PREFIX}*" 2>/dev/null | sed 's/^\*//' | tr -d ' ' | head -1)
632
+ ```
633
+
634
+ **If no branches found:** Skip to git_tag.
635
+
636
+ **If branches exist:**
637
+
638
+ ```
639
+ ## Git Branches Detected
640
+
641
+ Branching strategy: {phase/milestone}
642
+ Branches: {list}
643
+
644
+ Options:
645
+ 1. **Merge to main** — Merge branch(es) to main
646
+ 2. **Delete without merging** — Already merged or not needed
647
+ 3. **Keep branches** — Leave for manual handling
648
+ ```
649
+
650
+ AskUserQuestion with options: Squash merge (Recommended), Merge with history, Delete without merging, Keep branches.
651
+
652
+ **Squash merge:**
653
+
654
+ ```bash
655
+ CURRENT_BRANCH=$(git branch --show-current)
656
+ git checkout ${BASE_BRANCH}
657
+
658
+ if [ "$BRANCHING_STRATEGY" = "phase" ]; then
659
+ for branch in $PHASE_BRANCHES; do
660
+ git merge --squash "$branch"
661
+ # Strip .planning/ from staging if commit_docs is false
662
+ if [ "$COMMIT_DOCS" = "false" ]; then
663
+ git reset HEAD .planning/ 2>/dev/null || true
664
+ fi
665
+ git commit -m "feat: $branch for v[X.Y]"
666
+ done
667
+ fi
668
+
669
+ if [ "$BRANCHING_STRATEGY" = "milestone" ]; then
670
+ git merge --squash "$MILESTONE_BRANCH"
671
+ # Strip .planning/ from staging if commit_docs is false
672
+ if [ "$COMMIT_DOCS" = "false" ]; then
673
+ git reset HEAD .planning/ 2>/dev/null || true
674
+ fi
675
+ git commit -m "feat: $MILESTONE_BRANCH for v[X.Y]"
676
+ fi
677
+
678
+ git checkout "$CURRENT_BRANCH"
679
+ ```
680
+
681
+ **Merge with history:**
682
+
683
+ ```bash
684
+ CURRENT_BRANCH=$(git branch --show-current)
685
+ git checkout ${BASE_BRANCH}
686
+
687
+ if [ "$BRANCHING_STRATEGY" = "phase" ]; then
688
+ for branch in $PHASE_BRANCHES; do
689
+ git merge --no-ff --no-commit "$branch"
690
+ # Strip .planning/ from staging if commit_docs is false
691
+ if [ "$COMMIT_DOCS" = "false" ]; then
692
+ git reset HEAD .planning/ 2>/dev/null || true
693
+ fi
694
+ git commit -m "Merge branch '$branch' for v[X.Y]"
695
+ done
696
+ fi
697
+
698
+ if [ "$BRANCHING_STRATEGY" = "milestone" ]; then
699
+ git merge --no-ff --no-commit "$MILESTONE_BRANCH"
700
+ # Strip .planning/ from staging if commit_docs is false
701
+ if [ "$COMMIT_DOCS" = "false" ]; then
702
+ git reset HEAD .planning/ 2>/dev/null || true
703
+ fi
704
+ git commit -m "Merge branch '$MILESTONE_BRANCH' for v[X.Y]"
705
+ fi
706
+
707
+ git checkout "$CURRENT_BRANCH"
708
+ ```
709
+
710
+ **Delete without merging:**
711
+
712
+ ```bash
713
+ if [ "$BRANCHING_STRATEGY" = "phase" ]; then
714
+ for branch in $PHASE_BRANCHES; do
715
+ git branch -d "$branch" 2>/dev/null || git branch -D "$branch"
716
+ done
717
+ fi
718
+
719
+ if [ "$BRANCHING_STRATEGY" = "milestone" ]; then
720
+ git branch -d "$MILESTONE_BRANCH" 2>/dev/null || git branch -D "$MILESTONE_BRANCH"
721
+ fi
722
+ ```
723
+
724
+ **Keep branches:** Report "Branches preserved for manual handling"
725
+
726
+ </step>
727
+
728
+ <step name="git_tag">
729
+
730
+ <config-check>
731
+ Read `git.create_tag` via `pp-tools.cjs query config-get git.create_tag 2>/dev/null || echo "true"`.
732
+ If the result is `false` → skip this step entirely and proceed to `git_commit_milestone`.
733
+ </config-check>
734
+
735
+ Create git tag:
736
+
737
+ ```bash
738
+ # Pre-check: skip if tag already exists (prevents silent failure on retry)
739
+ if git rev-parse "v[X.Y]" >/dev/null 2>&1; then echo "Tag v[X.Y] already exists, skipping"; exit 0; fi
740
+ git tag -a v[X.Y] -m "v[X.Y] [Name]
741
+
742
+ Delivered: [One sentence]
743
+
744
+ Key accomplishments:
745
+ - [Item 1]
746
+ - [Item 2]
747
+ - [Item 3]
748
+
749
+ See .planning/MILESTONES.md for full details."
750
+ ```
751
+
752
+ Confirm: "Tagged: v[X.Y]"
753
+
754
+ Ask: "Push tag to remote? (y/n)"
755
+
756
+ If yes:
757
+ ```bash
758
+ git push origin v[X.Y]
759
+ ```
760
+
761
+ </step>
762
+
763
+ <step name="git_commit_milestone">
764
+
765
+ Commit the REQUIREMENTS.md deletion (archive files and ROADMAP.md were already committed in the safety commit in `reorganize_roadmap_and_delete_originals`).
766
+
767
+ ```bash
768
+ git commit -m "chore: remove REQUIREMENTS.md for v[X.Y] milestone"
769
+ ```
770
+
771
+ Confirm: "Committed: chore: remove REQUIREMENTS.md for v[X.Y] milestone"
772
+
773
+ </step>
774
+
775
+ <step name="offer_next">
776
+
777
+ ```
778
+ ✅ Milestone v[X.Y] [Name] complete
779
+
780
+ Shipped:
781
+ - [N] phases ([M] plans, [P] tasks)
782
+ - [One sentence of what shipped]
783
+
784
+ Archived:
785
+ - milestones/v[X.Y]-ROADMAP.md
786
+ - milestones/v[X.Y]-REQUIREMENTS.md
787
+
788
+ Summary: .planning/MILESTONES.md
789
+ Tag: v[X.Y]
790
+
791
+ ---
792
+
793
+ ## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
794
+
795
+ **Start Next Milestone** — questioning → research → requirements → roadmap
796
+
797
+ `/clear` then:
798
+
799
+ `/pp:new-milestone`
800
+
801
+ ---
802
+ ```
803
+
804
+ </step>
805
+
806
+ </process>
807
+
808
+ <milestone_naming>
809
+
810
+ **Version conventions:**
811
+ - **v1.0** — Initial MVP
812
+ - **v1.1, v1.2** — Minor updates, new features, fixes
813
+ - **v2.0, v3.0** — Major rewrites, breaking changes, new direction
814
+
815
+ **Names:** Short 1-2 words (v1.0 MVP, v1.1 Security, v1.2 Performance, v2.0 Redesign).
816
+
817
+ </milestone_naming>
818
+
819
+ <what_qualifies>
820
+
821
+ **Create milestones for:** Initial release, public releases, major feature sets shipped, before archiving planning.
822
+
823
+ **Don't create milestones for:** Every phase completion (too granular), work in progress, internal dev iterations (unless truly shipped).
824
+
825
+ Heuristic: "Is this deployed/usable/shipped?" If yes → milestone. If no → keep working.
826
+
827
+ </what_qualifies>
828
+
829
+ <success_criteria>
830
+
831
+ Milestone completion is successful when:
832
+
833
+ - [ ] Pre-close artifact audit run and output shown to user
834
+ - [ ] Deferred items recorded in STATE.md if user acknowledged
835
+ - [ ] Known deferred items count noted in MILESTONES.md entry
836
+
837
+ - [ ] MILESTONES.md entry created with stats and accomplishments
838
+ - [ ] PROJECT.md full evolution review completed
839
+ - [ ] All shipped requirements moved to Validated in PROJECT.md
840
+ - [ ] Key Decisions updated with outcomes
841
+ - [ ] ROADMAP.md Backlog section extracted before rewrite, re-appended after (skipped if absent)
842
+ - [ ] ROADMAP.md reorganized with milestone grouping (overwritten in place, not deleted)
843
+ - [ ] Roadmap archive created (milestones/v[X.Y]-ROADMAP.md)
844
+ - [ ] Requirements archive created (milestones/v[X.Y]-REQUIREMENTS.md)
845
+ - [ ] Safety commit made (archive files + updated ROADMAP.md) BEFORE deleting REQUIREMENTS.md
846
+ - [ ] REQUIREMENTS.md removed via `git rm` (fresh for next milestone, history preserved)
847
+ - [ ] STATE.md updated with fresh project reference
848
+ - [ ] Git tag created (v[X.Y]) (if `git.create_tag` enabled)
849
+ - [ ] Milestone commit made (includes archive files and deletion)
850
+ - [ ] Requirements completion checked against REQUIREMENTS.md traceability table
851
+ - [ ] Incomplete requirements surfaced with proceed/audit/abort options
852
+ - [ ] Known gaps recorded in MILESTONES.md if user proceeded with incomplete requirements
853
+ - [ ] RETROSPECTIVE.md updated with milestone section
854
+ - [ ] Cross-milestone trends updated
855
+ - [ ] User knows next step (/pp:new-milestone)
856
+
857
+ </success_criteria>