@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,756 @@
1
+ <purpose>
2
+ Check project progress, summarize recent work and what's ahead, then intelligently route to the next action — either executing an existing plan or creating the next one. Provides situational awareness before continuing work.
3
+ </purpose>
4
+
5
+ <required_reading>
6
+ Read all files referenced by the invoking prompt's execution_context before starting.
7
+ </required_reading>
8
+
9
+ <process>
10
+
11
+ <step name="init_context">
12
+ **Load progress context (paths only):**
13
+
14
+ ```bash
15
+ _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
16
+ INIT=$(pp_run query init.progress)
17
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
18
+ ```
19
+
20
+ Extract from init JSON: `project_exists`, `roadmap_exists`, `state_exists`, `phases`, `current_phase`, `next_phase`, `milestone_version`, `completed_count`, `phase_count`, `paused_at`, `state_path`, `roadmap_path`, `project_path`, `config_path`.
21
+
22
+ ```bash
23
+ DISCUSS_MODE=$(pp_run query config-get workflow.discuss_mode 2>/dev/null || echo "discuss")
24
+ ```
25
+
26
+ If `project_exists` is false (no `.planning/` directory):
27
+
28
+ ```
29
+ No planning structure found.
30
+
31
+ Run /pp:new-project to start a new project.
32
+ ```
33
+
34
+ Exit.
35
+
36
+ If missing STATE.md: suggest `/pp:new-project`.
37
+
38
+ **If ROADMAP.md missing but PROJECT.md exists:**
39
+
40
+ This means a milestone was completed and archived. Go to **Route F** (between milestones).
41
+
42
+ If missing both ROADMAP.md and PROJECT.md: suggest `/pp:new-project`.
43
+ </step>
44
+
45
+ <step name="load">
46
+ **Use structured extraction from `pp-tools.cjs query` (or legacy pp-tools.cjs):**
47
+
48
+ Instead of reading full files, use targeted tools to get only the data needed for the report:
49
+ - `ROADMAP=$(pp-tools.cjs query roadmap.analyze)`
50
+ - `STATE=$(pp-tools.cjs query state-snapshot)`
51
+
52
+ This minimizes orchestrator context usage.
53
+ </step>
54
+
55
+ <step name="analyze_roadmap">
56
+ **Get comprehensive roadmap analysis (replaces manual parsing):**
57
+
58
+ ```bash
59
+ ROADMAP=$(pp_run query roadmap.analyze)
60
+ ```
61
+
62
+ This returns structured JSON with:
63
+ - All phases with disk status (complete/partial/planned/empty/no_directory)
64
+ - Goal and dependencies per phase
65
+ - Plan and summary counts per phase
66
+ - Aggregated stats: total plans, summaries, progress percent
67
+ - Current and next phase identification
68
+
69
+ Use this instead of manually reading/parsing ROADMAP.md.
70
+ </step>
71
+
72
+ <step name="recent">
73
+ **Gather recent work context:**
74
+
75
+ - Find the 2-3 most recent SUMMARY.md files
76
+ - Use `summary-extract` for efficient parsing:
77
+ ```bash
78
+ pp_run query summary-extract <path> --fields one_liner
79
+ ```
80
+ - This shows "what we've been working on"
81
+ </step>
82
+
83
+ <step name="position">
84
+ **Parse current position from init context and roadmap analysis:**
85
+
86
+ - Use `current_phase` and `next_phase` from `$ROADMAP`
87
+ - Note `paused_at` if work was paused (from `$STATE`)
88
+ - Count pending todos: use `init todos` or `list-todos`
89
+ - Check for active debug sessions: `(ls .planning/debug/*.md 2>/dev/null || true) | grep -v resolved | wc -l`
90
+ </step>
91
+
92
+ <step name="report">
93
+ > ⚠️ Context authority: PROJECT.md, STATE.md, and ROADMAP.md are the authoritative sources
94
+ > for project name, milestone, current phase, and next-step routing. CLAUDE.md ## Project
95
+ > blocks are a secondary config aid that may be significantly stale — do NOT use the
96
+ > CLAUDE.md project description as a source for any progress report field.
97
+
98
+ **Generate progress bar from `pp-tools.cjs query progress` / `progress.json`, then present rich status report:**
99
+
100
+ ```bash
101
+ # Get formatted progress bar
102
+ PROGRESS_BAR=$(pp_run query progress.bar --raw)
103
+ ```
104
+
105
+ Present:
106
+
107
+ ```
108
+ # [Project Name]
109
+
110
+ **Progress:** {PROGRESS_BAR}
111
+ **Profile:** [quality/balanced/budget/inherit]
112
+ **Discuss mode:** {DISCUSS_MODE}
113
+
114
+ ## Recent Work
115
+ - [Phase X, Plan Y]: [what was accomplished - 1 line from summary-extract]
116
+ - [Phase X, Plan Z]: [what was accomplished - 1 line from summary-extract]
117
+
118
+ ## Current Position
119
+ Phase [N] of [total]: [phase-name]
120
+ Plan [M] of [phase-total]: [status]
121
+ CONTEXT: [✓ if has_context | - if not]
122
+
123
+ ## Key Decisions Made
124
+ - [extract from $STATE.decisions[]]
125
+ - [e.g. jq -r '.decisions[].decision' from state-snapshot]
126
+
127
+ ## Blockers/Concerns
128
+ - [extract from $STATE.blockers[]]
129
+ - [e.g. jq -r '.blockers[].text' from state-snapshot]
130
+
131
+ ## Pending Todos
132
+ - [count] pending — /pp:capture --list to review
133
+
134
+ ## Active Debug Sessions
135
+ - [count] active — /pp:debug to continue
136
+ (Only show this section if count > 0)
137
+
138
+ ## What's Next
139
+ [Next phase/plan objective from roadmap analyze]
140
+ ```
141
+
142
+ </step>
143
+
144
+ <step name="mvp_display">
145
+ **MVP-mode display (when phase has `**Mode:** mvp` in ROADMAP.md).**
146
+
147
+ Resolve `MVP_MODE` per phase via the centralized resolver. progress has no `--mvp` CLI flag (mode is inherited from the planned phase), so we omit `--cli-flag`:
148
+
149
+ ```bash
150
+ MVP_MODE=$(pp_run query phase.mvp-mode "${PHASE_NUMBER}" --pick active)
151
+ ```
152
+
153
+ When `MVP_MODE=true`, the per-phase progress block adds a **user-flow status** sub-block sourced from the phase's PLAN.md task names. Each task whose name reads like a user-visible capability (e.g., "Register flow", "Login flow", "Password reset") is rendered as a status line:
154
+
155
+ ```
156
+ Phase 1 — User Auth MVP
157
+ ✅ Walking Skeleton complete ← from SKELETON.md existence
158
+ ✅ Register flow working ← from PLAN.md task with summary
159
+ ✅ Login flow working ← from PLAN.md task with summary
160
+ 🔄 Password reset (in progress) ← from PLAN.md task without summary
161
+ ⬜ Email verification ← from PLAN.md task not yet started
162
+ ```
163
+
164
+ **User-flow filter:** Tasks whose names are technical-sounding ("Wire DB schema", "Create migration", "Bump deps") are NOT rendered as user-flow status lines. Heuristic: a task name is user-flow-shaped if it ends in "flow", "page", "screen", or starts with a verb the user would recognize ("Register", "Login", "Upload", "View"). Tasks that fail the heuristic still count toward the standard task progress total but don't appear in the user-flow sub-block.
165
+
166
+ When `MVP_MODE=false` (mode is null, absent, or the phase has no `**Mode:**` line), fall back to the standard display path — no behavioral change.
167
+ </step>
168
+
169
+ <step name="route">
170
+ **Determine next action based on verified counts.**
171
+
172
+ **Step 0: Resume-incomplete-phase invariant (Route 0)**
173
+
174
+ Before any current-phase-scoped counting, scan ALL phases for incomplete execution. This catches the case where STATE.md's `current_phase` was advanced past the phase that actually has unfinished work (common after a mid-execution session death from hang, token exhaustion, or API disruption). Without this guard, the current-phase-scoped count in Step 1 would inspect the wrong phase and the routing would skip the unfinished work.
175
+
176
+ **Skip if `--no-resume` or `--force` is present in `$ARGUMENTS`.**
177
+
178
+ Scan all phases via the `$ROADMAP` JSON already loaded in `analyze_roadmap`. For each phase entry, compare `plans` length to `summaries` length using the same plans-without-summaries predicate as `determine_next_action` Route 4 (`plans.length > summaries.length`). Stop at the first (lowest-numbered) phase where the predicate is true. Record its phase number as `INCOMPLETE_PHASE`.
179
+
180
+ If `$ROADMAP` is empty or the query failed, surface a warning rather than silently proceeding:
181
+
182
+ ```bash
183
+ INCOMPLETE_PHASE=""
184
+ if [ -z "$ROADMAP" ]; then
185
+ echo "⚠ WARNING: resume-incomplete-phase scan could not run (\$ROADMAP is empty)." >&2
186
+ echo " The incomplete-phase invariant (#160) could not be verified." >&2
187
+ echo " Review project state carefully before continuing." >&2
188
+ else
189
+ for PHASE_NUM in $(echo "$ROADMAP" | jq -r '.phases[] | (.number // .phase_number)'); do
190
+ PHASE_DATA=$(echo "$ROADMAP" | jq --arg n "$PHASE_NUM" '.phases[] | select((.number // .phase_number) == ($n | tonumber))')
191
+ PLAN_COUNT=$(echo "$PHASE_DATA" | jq '(.plans // []) | length')
192
+ SUMMARY_COUNT=$(echo "$PHASE_DATA" | jq '(.summaries // []) | length')
193
+ if [ "${PLAN_COUNT:-0}" -gt "${SUMMARY_COUNT:-0}" ]; then
194
+ INCOMPLETE_PHASE="$PHASE_NUM"
195
+ break
196
+ fi
197
+ done
198
+ fi
199
+ ```
200
+
201
+ **If `INCOMPLETE_PHASE` is non-empty:** emit a one-line resume notice in the routing output and route to `/pp:execute-phase ${INCOMPLETE_PHASE}` instead of running Step 1's current-phase routing. The progress report (already displayed by the `report` step above) gives the user full project status before this routing decision is shown.
202
+
203
+ ```
204
+ ---
205
+
206
+ ## ▶ Next Up — Resuming incomplete Phase ${INCOMPLETE_PHASE}
207
+
208
+ `/clear` then:
209
+
210
+ `/pp:execute-phase ${INCOMPLETE_PHASE} ${GSD_WS}`
211
+
212
+ (plans without summaries detected; use --no-resume to skip this check and route by current_phase instead; --force to skip all gates)
213
+
214
+ ---
215
+ ```
216
+
217
+ Then exit the route step. Do NOT run Steps 1 through Routes A-F.
218
+
219
+ **If `INCOMPLETE_PHASE` is empty:** continue to Step 1.
220
+
221
+ **Step 1: Count plans, summaries, and issues in current phase**
222
+
223
+ List files in the current phase directory:
224
+
225
+ ```bash
226
+ (ls -1 .planning/phases/[current-phase-dir]/*-PLAN.md 2>/dev/null || true) | wc -l
227
+ (ls -1 .planning/phases/[current-phase-dir]/*-SUMMARY.md 2>/dev/null || true) | wc -l
228
+ (ls -1 .planning/phases/[current-phase-dir]/*-UAT.md 2>/dev/null || true) | wc -l
229
+ ```
230
+
231
+ State: "This phase has {X} plans, {Y} summaries."
232
+
233
+ **Step 1.5: Check for unaddressed UAT gaps**
234
+
235
+ Check for UAT.md files with status "diagnosed" (has gaps needing fixes).
236
+
237
+ ```bash
238
+ # Check for diagnosed UAT with gaps or partial (incomplete) testing
239
+ grep -l "status: diagnosed\|status: partial" .planning/phases/[current-phase-dir]/*-UAT.md 2>/dev/null || true
240
+ ```
241
+
242
+ Track:
243
+ - `uat_with_gaps`: UAT.md files with status "diagnosed" (gaps need fixing)
244
+ - `uat_partial`: UAT.md files with status "partial" (incomplete testing)
245
+
246
+ **Step 1.6: Cross-phase health check**
247
+
248
+ Scan ALL phases in the current milestone for outstanding verification debt using the CLI (which respects milestone boundaries via `getMilestonePhaseFilter`):
249
+
250
+ ```bash
251
+ DEBT=$(pp_run query audit-uat --raw 2>/dev/null)
252
+ ```
253
+
254
+ Parse JSON for `summary.total_items` and `summary.total_files`.
255
+
256
+ Track: `outstanding_debt` — `summary.total_items` from the audit.
257
+
258
+ **If outstanding_debt > 0:** Add a warning section to the progress report output (in the `report` step), placed between "## What's Next" and the route suggestion:
259
+
260
+ ```markdown
261
+ ## Verification Debt ({N} files across prior phases)
262
+
263
+ | Phase | File | Issue |
264
+ |-------|------|-------|
265
+ | {phase} | {filename} | {pending_count} pending, {skipped_count} skipped, {blocked_count} blocked |
266
+ | {phase} | {filename} | human_needed — {count} items |
267
+
268
+ Review: `/pp:audit-uat ${GSD_WS}` — full cross-phase audit
269
+ Resume testing: `/pp:verify-work {phase} ${GSD_WS}` — retest specific phase
270
+ ```
271
+
272
+ This is a WARNING, not a blocker — routing proceeds normally. The debt is visible so the user can make an informed choice.
273
+
274
+ **Step 1.7: Check verification status for the current phase**
275
+
276
+ A phase whose verification ended `gaps_found` or `human_needed` is NOT complete, even when every PLAN.md has a matching SUMMARY.md. The count-based status (`roadmap.analyze`) only sees plans/summaries, so without this check such a phase is reported complete and routing skips straight to the next phase. When the phase appears count-complete (`summaries = plans AND plans > 0`), consult the verification report (the same `verification.status` gate `ship` and `execute-phase` use, from #651):
277
+
278
+ ```bash
279
+ PHASE_DIR=".planning/phases/[current-phase-dir]"
280
+ VERIFICATION=$(pp_run query verification.status "${PHASE_DIR}" 2>/dev/null)
281
+ VERIFICATION_STATUS=$(printf '%s' "$VERIFICATION" | jq -r '.status' 2>/dev/null || echo "")
282
+ VERIFICATION_NEXT_ACTION=$(printf '%s' "$VERIFICATION" | jq -r '.next_action' 2>/dev/null || echo "")
283
+ ```
284
+
285
+ Track: `verification_status` — the `.status` field (`passed | gaps_found | human_needed | missing | unknown`). The query already handles a missing VERIFICATION.md (returns `missing`) and unexpected values, so no per-status file probing is needed. `passed`, `missing` (not yet verified), and `unknown` route as complete (Step 3) — `missing` with an advisory that the phase is unverified; `gaps_found` and `human_needed` route back to close the verification debt (Step 2).
286
+
287
+ **Step 2: Route based on counts**
288
+
289
+ | Condition | Meaning | Action |
290
+ |-----------|---------|--------|
291
+ | uat_partial > 0 | UAT testing incomplete | Go to **Route E.2** |
292
+ | uat_with_gaps > 0 | UAT gaps need fix plans | Go to **Route E** |
293
+ | summaries < plans | Unexecuted plans exist | Go to **Route A** |
294
+ | summaries = plans AND plans > 0 AND verification_status = gaps_found | Phase executed; verification found gaps | Go to **Route V.gaps** |
295
+ | summaries = plans AND plans > 0 AND verification_status = human_needed | Phase executed; awaiting human verification | Go to **Route V.human** |
296
+ | summaries = plans AND plans > 0 | Phase complete (verification passed, missing, or n/a) | Go to Step 3 |
297
+ | plans = 0 | Phase not yet planned | Go to **Route B** |
298
+
299
+ Rows are evaluated top to bottom; the first matching row wins. The two `verification_status` rows must precede the general `summaries = plans` row so a non-`passed` verification is not reported as complete.
300
+
301
+ ---
302
+
303
+ **Route A: Unexecuted plan exists**
304
+
305
+ Find the first PLAN.md without matching SUMMARY.md.
306
+ Read its `<objective>` section.
307
+
308
+ ```
309
+ ---
310
+
311
+ ## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
312
+
313
+ **{phase}-{plan}: [Plan Name]** — [objective summary from PLAN.md]
314
+
315
+ `/clear` then:
316
+
317
+ `/pp:execute-phase {phase} ${GSD_WS}`
318
+
319
+ ---
320
+ ```
321
+
322
+ ---
323
+
324
+ **Route B: Phase needs planning**
325
+
326
+ Check if `{phase_num}-CONTEXT.md` exists in phase directory.
327
+
328
+ Check if current phase has UI indicators:
329
+
330
+ ```bash
331
+ PHASE_SECTION=$(pp_run query roadmap.get-phase "${CURRENT_PHASE}" 2>/dev/null)
332
+ PHASE_HAS_UI=$(echo "$PHASE_SECTION" | grep -qi "UI hint.*yes" && echo "true" || echo "false")
333
+ ```
334
+
335
+ **If CONTEXT.md exists:**
336
+
337
+ ```
338
+ ---
339
+
340
+ ## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
341
+
342
+ **Phase {N}: {Name}** — {Goal from ROADMAP.md}
343
+ <sub>✓ Context gathered, ready to plan</sub>
344
+
345
+ `/clear` then:
346
+
347
+ `/pp:plan-phase {phase-number} ${GSD_WS}`
348
+
349
+ ---
350
+ ```
351
+
352
+ **If CONTEXT.md does NOT exist AND phase has UI (`PHASE_HAS_UI` is `true`):**
353
+
354
+ ```
355
+ ---
356
+
357
+ ## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
358
+
359
+ **Phase {N}: {Name}** — {Goal from ROADMAP.md}
360
+
361
+ `/clear` then:
362
+
363
+ `/pp:discuss-phase {phase}` — gather context and clarify approach
364
+
365
+ ---
366
+
367
+ **Also available:**
368
+ - `/pp:ui-phase {phase}` — generate UI design contract (recommended for frontend phases)
369
+ - `/pp:plan-phase {phase}` — skip discussion, plan directly
370
+ - `/pp:discuss-phase {phase}` — include assumptions check before planning
371
+
372
+ ---
373
+ ```
374
+
375
+ **If CONTEXT.md does NOT exist AND phase has no UI:**
376
+
377
+ ```
378
+ ---
379
+
380
+ ## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
381
+
382
+ **Phase {N}: {Name}** — {Goal from ROADMAP.md}
383
+
384
+ `/clear` then:
385
+
386
+ `/pp:discuss-phase {phase} ${GSD_WS}` — gather context and clarify approach
387
+
388
+ ---
389
+
390
+ **Also available:**
391
+ - `/pp:plan-phase {phase} ${GSD_WS}` — skip discussion, plan directly
392
+ - `/pp:discuss-phase {phase} ${GSD_WS}` — include assumptions check before planning
393
+
394
+ ---
395
+ ```
396
+
397
+ ---
398
+
399
+ **Route E: UAT gaps need fix plans**
400
+
401
+ UAT.md exists with gaps (diagnosed issues). User needs to plan fixes.
402
+
403
+ ```
404
+ ---
405
+
406
+ ## ⚠ UAT Gaps Found
407
+
408
+ **{phase_num}-UAT.md** has {N} gaps requiring fixes.
409
+
410
+ `/clear` then:
411
+
412
+ `/pp:plan-phase {phase} --gaps ${GSD_WS}`
413
+
414
+ ---
415
+
416
+ **Also available:**
417
+ - `/pp:execute-phase {phase} ${GSD_WS}` — execute phase plans
418
+ - `/pp:verify-work {phase} ${GSD_WS}` — run more UAT testing
419
+
420
+ ---
421
+ ```
422
+
423
+ ---
424
+
425
+ **Route E.2: UAT testing incomplete (partial)**
426
+
427
+ UAT.md exists with `status: partial` — testing session ended before all items resolved.
428
+
429
+ ```
430
+ ---
431
+
432
+ ## Incomplete UAT Testing
433
+
434
+ **{phase_num}-UAT.md** has {N} unresolved tests (pending, blocked, or skipped).
435
+
436
+ `/clear` then:
437
+
438
+ `/pp:verify-work {phase} ${GSD_WS}` — resume testing from where you left off
439
+
440
+ ---
441
+
442
+ **Also available:**
443
+ - `/pp:audit-uat ${GSD_WS}` — full cross-phase UAT audit
444
+ - `/pp:execute-phase {phase} ${GSD_WS}` — execute phase plans
445
+
446
+ ---
447
+ ```
448
+
449
+ ---
450
+
451
+ **Route V.gaps: verification found gaps (gaps_found)**
452
+
453
+ VERIFICATION.md exists with `status: gaps_found` — verification identified gaps that need fix plans. The phase is NOT complete.
454
+
455
+ ```
456
+ ---
457
+
458
+ ## ⚠ Verification Gaps Found
459
+
460
+ **{phase_num}-VERIFICATION.md** reports `gaps_found`. ${VERIFICATION_NEXT_ACTION}
461
+
462
+ `/clear` then:
463
+
464
+ `/pp:plan-phase {phase} --gaps ${GSD_WS}`
465
+
466
+ ---
467
+ ```
468
+
469
+ ---
470
+
471
+ **Route V.human: human verification required (human_needed)**
472
+
473
+ VERIFICATION.md exists with `status: human_needed` — automated checks passed but manual verification items remain. The phase is NOT complete until they are resolved.
474
+
475
+ ```
476
+ ---
477
+
478
+ ## Human Verification Required
479
+
480
+ **{phase_num}-VERIFICATION.md** reports `human_needed`. ${VERIFICATION_NEXT_ACTION}
481
+
482
+ `/clear` then:
483
+
484
+ `/pp:verify-work {phase} ${GSD_WS}` — resume human verification
485
+
486
+ ---
487
+ ```
488
+
489
+ ---
490
+
491
+ **Step 3: Check milestone status (only when phase complete)**
492
+
493
+ Read ROADMAP.md and identify:
494
+ 1. Current phase number
495
+ 2. All phase numbers in the current milestone section
496
+
497
+ Count total phases and identify the highest phase number.
498
+
499
+ State: "Current phase is {X}. Milestone has {N} phases (highest: {Y})."
500
+
501
+ **Route based on milestone status:**
502
+
503
+ | Condition | Meaning | Action |
504
+ |-----------|---------|--------|
505
+ | current phase < highest phase | More phases remain | Go to **Route C** |
506
+ | current phase = highest phase | Milestone complete | Go to **Route D** |
507
+
508
+ ---
509
+
510
+ **Route C: Phase complete, more phases remain**
511
+
512
+ Read ROADMAP.md to get the next phase's name and goal.
513
+
514
+ Check if next phase has UI indicators:
515
+
516
+ ```bash
517
+ NEXT_PHASE_SECTION=$(pp_run query roadmap.get-phase "$((Z+1))" 2>/dev/null)
518
+ NEXT_HAS_UI=$(echo "$NEXT_PHASE_SECTION" | grep -qi "UI hint.*yes" && echo "true" || echo "false")
519
+ ```
520
+
521
+ **If next phase has UI (`NEXT_HAS_UI` is `true`):**
522
+
523
+ ```
524
+ ---
525
+
526
+ ## ✓ Phase {Z} Complete
527
+
528
+ ## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
529
+
530
+ **Phase {Z+1}: {Name}** — {Goal from ROADMAP.md}
531
+
532
+ `/clear` then:
533
+
534
+ `/pp:discuss-phase {Z+1}` — gather context and clarify approach
535
+
536
+ ---
537
+
538
+ **Also available:**
539
+ - `/pp:ui-phase {Z+1}` — generate UI design contract (recommended for frontend phases)
540
+ - `/pp:plan-phase {Z+1}` — skip discussion, plan directly
541
+ - `/pp:verify-work {Z}` — user acceptance test before continuing
542
+
543
+ ---
544
+ ```
545
+
546
+ **If next phase has no UI:**
547
+
548
+ ```
549
+ ---
550
+
551
+ ## ✓ Phase {Z} Complete
552
+
553
+ ## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
554
+
555
+ **Phase {Z+1}: {Name}** — {Goal from ROADMAP.md}
556
+
557
+ `/clear` then:
558
+
559
+ `/pp:discuss-phase {Z+1} ${GSD_WS}` — gather context and clarify approach
560
+
561
+ ---
562
+
563
+ **Also available:**
564
+ - `/pp:plan-phase {Z+1} ${GSD_WS}` — skip discussion, plan directly
565
+ - `/pp:verify-work {Z} ${GSD_WS}` — user acceptance test before continuing
566
+
567
+ ---
568
+ ```
569
+
570
+ ---
571
+
572
+ **Route D: Milestone complete**
573
+
574
+ ```
575
+ ---
576
+
577
+ ## 🎉 Milestone Complete
578
+
579
+ All {N} phases finished!
580
+
581
+ ## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
582
+
583
+ **Complete Milestone** — archive and prepare for next
584
+
585
+ `/clear` then:
586
+
587
+ `/pp:complete-milestone ${GSD_WS}`
588
+
589
+ ---
590
+
591
+ **Also available:**
592
+ - `/pp:verify-work ${GSD_WS}` — user acceptance test before completing milestone
593
+
594
+ ---
595
+ ```
596
+
597
+ ---
598
+
599
+ **Route F: Between milestones (ROADMAP.md missing, PROJECT.md exists)**
600
+
601
+ A milestone was completed and archived. Ready to start the next milestone cycle.
602
+
603
+ Read MILESTONES.md to find the last completed milestone version.
604
+
605
+ ```
606
+ ---
607
+
608
+ ## ✓ Milestone v{X.Y} Complete
609
+
610
+ Ready to plan the next milestone.
611
+
612
+ ## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
613
+
614
+ **Start Next Milestone** — questioning → research → requirements → roadmap
615
+
616
+ `/clear` then:
617
+
618
+ `/pp:new-milestone ${GSD_WS}`
619
+
620
+ ---
621
+ ```
622
+
623
+ </step>
624
+
625
+ <step name="edge_cases">
626
+ **Handle edge cases:**
627
+
628
+ - Phase complete but next phase not planned → offer `/pp:plan-phase [next] ${GSD_WS}`
629
+ - All work complete → offer milestone completion
630
+ - Blockers present → highlight before offering to continue
631
+ - Handoff file exists → mention it, offer `/pp:resume-work ${GSD_WS}`
632
+ </step>
633
+
634
+ <step name="forensic_audit">
635
+ **Forensic Integrity Audit** — only runs when `--forensic` is present in ARGUMENTS.
636
+
637
+ If `--forensic` is NOT present in ARGUMENTS: skip this step entirely. Default progress behavior (standard report + routing) is unchanged.
638
+
639
+ If `--forensic` IS present: after the standard report and routing suggestion have been displayed, append the following audit section.
640
+
641
+ ---
642
+
643
+ ## Forensic Integrity Audit
644
+
645
+ Running 6 deep checks against project state...
646
+
647
+ Run each check in order. For each check, emit ✓ (pass) or ⚠ (warning) with concrete evidence when a problem is found.
648
+
649
+ **Check 1 — STATE vs artifact consistency**
650
+
651
+ Read STATE.md `status` / `stopped_at` fields (from the STATE snapshot already loaded). Compare against the artifact count from the roadmap analysis. If STATE.md claims the current phase is pending/mid-flight but the artifact count shows it as complete (all PLAN.md files have matching SUMMARY.md files), flag inconsistency. Emit:
652
+ - ✓ `STATE.md consistent with artifact count` — if both agree
653
+ - ⚠ `STATE.md claims [status] but artifact count shows phase complete` — with the specific values
654
+
655
+ **Check 2 — Orphaned handoff files**
656
+
657
+ Check for existence of:
658
+ ```bash
659
+ ls .planning/HANDOFF.json .planning/phases/*/.continue-here.md .planning/phases/*/*HANDOFF*.md 2>/dev/null || true
660
+ ```
661
+ Also check `.planning/continue-here.md`.
662
+
663
+ Emit:
664
+ - ✓ `No orphaned handoff files` — if none found
665
+ - ⚠ `Orphaned handoff files found` — list each file path, add: `→ Work was paused mid-flight. Read the handoff before continuing.`
666
+
667
+ **Check 3 — Deferred scope drift**
668
+
669
+ Search phase artifacts (CONTEXT.md, DISCUSSION-LOG.md, BUG-BRIEF.md, VERIFICATION.md, SUMMARY.md, HANDOFF.md files under `.planning/phases/`) for patterns:
670
+ ```bash
671
+ grep -rl "defer to Phase\|future phase\|out of scope Phase\|deferred to Phase" .planning/phases/ 2>/dev/null || true
672
+ ```
673
+
674
+ For each match, extract the referenced phase number. Cross-reference against ROADMAP.md phase list. If the referenced phase number is NOT in ROADMAP.md, flag as deferred scope not captured.
675
+
676
+ Emit:
677
+ - ✓ `All deferred scope captured in ROADMAP` — if no mismatches
678
+ - ⚠ `Deferred scope references phase(s) not in ROADMAP` — list: file, reference text, missing phase number
679
+
680
+ **Check 4 — Memory-flagged pending work**
681
+
682
+ Check if `.planning/MEMORY.md` or `.planning/memory/` exists:
683
+ ```bash
684
+ ls .planning/MEMORY.md .planning/memory/*.md 2>/dev/null || true
685
+ ```
686
+
687
+ If found, grep for entries containing: `pending`, `status`, `deferred`, `not yet run`, `backfill`, `blocking`.
688
+
689
+ Emit:
690
+ - ✓ `No memory entries flagging pending work` — if none found or no MEMORY.md
691
+ - ⚠ `Memory entries flag pending/deferred work` — list the matching lines (max 5, truncated at 80 chars)
692
+
693
+ **Check 5 — Blocking operational todos**
694
+
695
+ Check for pending todos:
696
+ ```bash
697
+ ls .planning/todos/pending/*.md 2>/dev/null || true
698
+ ```
699
+
700
+ For files found, scan for keywords indicating operational blockers: `script`, `credential`, `API key`, `manual`, `verification`, `setup`, `configure`, `run `.
701
+
702
+ Emit:
703
+ - ✓ `No blocking operational todos` — if no pending todos or none match operational keywords
704
+ - ⚠ `Blocking operational todos found` — list the file names and matching keywords (max 5)
705
+
706
+ **Check 6 — Uncommitted code**
707
+
708
+ ```bash
709
+ git status --porcelain 2>/dev/null | grep -v "^??" | grep -v "^.planning\/" | grep -v "^\.\." | head -10
710
+ ```
711
+
712
+ If output is non-empty (modified/staged files outside `.planning/`), flag as uncommitted code.
713
+
714
+ Emit:
715
+ - ✓ `Working tree clean` — if no modified files outside `.planning/`
716
+ - ⚠ `Uncommitted changes in source files` — list up to 10 file paths
717
+
718
+ ---
719
+
720
+ After all 6 checks, display the verdict:
721
+
722
+ **If all 6 checks passed:**
723
+ ```
724
+ ### Verdict: CLEAN
725
+
726
+ The standard progress report is trustworthy — proceed with the routing suggestion above.
727
+ ```
728
+
729
+ **If 1 or more checks failed:**
730
+ ```
731
+ ### Verdict: N INTEGRITY ISSUE(S) FOUND
732
+
733
+ The standard progress report may not reflect true project state.
734
+ Review the flagged items above before acting on the routing suggestion.
735
+ ```
736
+
737
+ Then for each failed check, add a concrete next action:
738
+ - Check 2 (orphaned handoff): `Read the handoff file(s) and resume from where work was paused: /pp:resume-work ${GSD_WS}`
739
+ - Check 3 (deferred scope): `Add the missing phases to ROADMAP.md or update the deferred references`
740
+ - Check 4 (memory pending): `Review the flagged memory entries and resolve or clear them`
741
+ - Check 5 (blocking todos): `Complete the operational steps in .planning/todos/pending/ before continuing`
742
+ - Check 6 (uncommitted code): `Commit or stash the uncommitted changes before advancing`
743
+ - Check 1 (STATE inconsistency): `Run /pp:verify-work ${PHASE} ${GSD_WS} to reconcile state`
744
+ </step>
745
+
746
+ </process>
747
+
748
+ <success_criteria>
749
+
750
+ - [ ] Rich context provided (recent work, decisions, issues)
751
+ - [ ] Current position clear with visual progress
752
+ - [ ] What's next clearly explained
753
+ - [ ] Smart routing: /pp:execute-phase if plans exist, /pp:plan-phase if not
754
+ - [ ] User confirms before any action
755
+ - [ ] Seamless handoff to appropriate gsd command
756
+ </success_criteria>