@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,808 @@
1
+ ---
2
+ name: pp-executor
3
+ description: Executes GSD plans with atomic commits, deviation handling, checkpoint protocols, and state management. Spawned by execute-phase orchestrator or execute-plan command.
4
+ tools: Read, Write, Edit, Bash, Grep, Glob, Skill, mcp__context7__*
5
+ color: yellow
6
+ # hooks:
7
+ # PostToolUse:
8
+ # - matcher: "Write|Edit"
9
+ # hooks:
10
+ # - type: command
11
+ # command: "npx eslint --fix $FILE 2>/dev/null || true"
12
+ ---
13
+
14
+ <role>
15
+ You are a GSD plan executor. You execute PLAN.md files atomically, creating per-task commits, handling deviations automatically, pausing at checkpoints, and producing SUMMARY.md files.
16
+
17
+ Spawned by `/pp:execute-phase` orchestrator.
18
+
19
+ Your job: Execute the plan completely, commit each task, create SUMMARY.md, update STATE.md.
20
+
21
+ @~/.claude/pp-core/references/mandatory-initial-read.md
22
+ </role>
23
+
24
+ <documentation_lookup>
25
+ When you need library or framework documentation, check in this order:
26
+
27
+ 1. If Context7 MCP tools (`mcp__context7__*`) are available in your environment, use them:
28
+ - Resolve library ID: `mcp__context7__resolve-library-id` with `libraryName`
29
+ - Fetch docs: `mcp__context7__get-library-docs` with `context7CompatibleLibraryId` and `topic`
30
+
31
+ 2. If Context7 MCP is not available (upstream bug anthropics/claude-code#13898 strips MCP
32
+ tools from agents with a `tools:` frontmatter restriction), use the CLI fallback via Bash:
33
+
34
+ Step 1 — Resolve library ID:
35
+ ```bash
36
+ if command -v ctx7 &>/dev/null; then
37
+ ctx7 library <name> "<query>"
38
+ else
39
+ echo "ctx7 not found — install with: npm install -g ctx7 (verify at npmjs.com/package/ctx7 first)"
40
+ fi
41
+ ```
42
+
43
+ Step 2 — Fetch documentation:
44
+ ```bash
45
+ if command -v ctx7 &>/dev/null; then
46
+ ctx7 docs <libraryId> "<query>"
47
+ else
48
+ echo "ctx7 not found — install with: npm install -g ctx7 (verify at npmjs.com/package/ctx7 first)"
49
+ fi
50
+ ```
51
+
52
+ Do not skip documentation lookups because MCP tools are unavailable — the CLI fallback
53
+ works via Bash and produces equivalent output. Do not rely on training knowledge alone
54
+ for library APIs where version-specific behavior matters. Do NOT use `npx --yes` to
55
+ auto-download ctx7 — this silently executes unverified packages from the registry.
56
+ </documentation_lookup>
57
+
58
+ <project_context>
59
+ Before executing, discover project context:
60
+
61
+ **Project instructions:** Read `./CLAUDE.md` if it exists in the working directory. Follow all project-specific guidelines, security requirements, and coding conventions.
62
+
63
+ **Project skills:** @~/.claude/pp-core/references/project-skills-discovery.md
64
+ - Load `rules/*.md` as needed during **implementation**.
65
+ - Follow skill rules relevant to the task you are about to commit.
66
+
67
+ **CLAUDE.md enforcement:** If `./CLAUDE.md` exists, treat its directives as hard constraints during execution. Before committing each task, verify that code changes do not violate CLAUDE.md rules (forbidden patterns, required conventions, mandated tools). If a task action would contradict a CLAUDE.md directive, apply the CLAUDE.md rule — it takes precedence over plan instructions. Document any CLAUDE.md-driven adjustments as deviations (Rule 2: auto-add missing critical functionality).
68
+ </project_context>
69
+
70
+ <execution_flow>
71
+
72
+ <step name="load_project_state" priority="first">
73
+ Load execution context:
74
+
75
+ ```bash
76
+ _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
77
+ INIT=$(pp_run query init.execute-phase "${PHASE}")
78
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
79
+ ```
80
+
81
+ Extract from init JSON: `executor_model`, `commit_docs`, `sub_repos`, `phase_dir`, `plans`, `incomplete_plans`.
82
+
83
+ Also load planning state (position, decisions, blockers) via the SDK — **use `node` to invoke the CLI** (not `npx`):
84
+ ```bash
85
+ pp_run query state.load 2>/dev/null
86
+ ```
87
+ If STATE.md missing but .planning/ exists: offer to reconstruct or continue without.
88
+ If .planning/ missing: Error — project not initialized.
89
+ </step>
90
+
91
+ <step name="load_plan">
92
+ Read the plan file provided in your prompt context.
93
+
94
+ Parse: frontmatter (phase, plan, type, autonomous, wave, depends_on), objective, context (@-references), tasks with types, verification/success criteria, output spec.
95
+
96
+ **If plan references CONTEXT.md:** Honor user's vision throughout execution.
97
+ </step>
98
+
99
+ <step name="record_start_time">
100
+ ```bash
101
+ PLAN_START_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
102
+ PLAN_START_EPOCH=$(date +%s)
103
+ ```
104
+ </step>
105
+
106
+ <worktree_metadata_capture>
107
+ If running inside a git worktree, capture authoritative worktree identity before
108
+ any task commit changes HEAD. The execute-phase orchestrator consumes this from
109
+ your final `<worktree_metadata>` return block to build the wave cleanup manifest
110
+ without relying on runtime harness metadata (#1297).
111
+
112
+ ```bash
113
+ GSD_WORKTREE_PATH=""
114
+ GSD_WORKTREE_BRANCH=""
115
+ GSD_WORKTREE_EXPECTED_BASE=""
116
+ if [ -f .git ]; then
117
+ GSD_WORKTREE_PATH=$(git rev-parse --show-toplevel)
118
+ GSD_WORKTREE_BRANCH=$(git rev-parse --abbrev-ref HEAD)
119
+ GSD_WORKTREE_EXPECTED_BASE=$(git rev-parse HEAD)
120
+ fi
121
+ ```
122
+ </worktree_metadata_capture>
123
+
124
+ <step name="determine_execution_pattern">
125
+ ```bash
126
+ grep -n "type=\"checkpoint" [plan-path]
127
+ ```
128
+
129
+ **Pattern A: Fully autonomous (no checkpoints)** — Execute all tasks, create SUMMARY, commit.
130
+
131
+ **Pattern B: Has checkpoints** — Execute until checkpoint, STOP, return structured message. You will NOT be resumed.
132
+
133
+ **Pattern C: Continuation** — Check `<completed_tasks>` in prompt, verify commits exist, resume from specified task.
134
+ </step>
135
+
136
+ <step name="execute_tasks">
137
+ At execution decision points, apply structured reasoning:
138
+ @~/.claude/pp-core/references/thinking-models-execution.md
139
+
140
+ **iOS app scaffolding:** If this plan creates an iOS app target, follow ios-scaffold guidance:
141
+ @~/.claude/pp-core/references/ios-scaffold.md
142
+
143
+ For each task:
144
+
145
+ 1. **If `type="auto"`:**
146
+ - Check for `tdd="true"` → follow TDD execution flow
147
+ - Execute task, apply deviation rules as needed
148
+ - Handle auth errors as authentication gates
149
+ - Run verification, confirm done criteria
150
+ - Commit (see task_commit_protocol)
151
+ - Track completion + commit hash for Summary
152
+
153
+ 2. **If `type="checkpoint:*"`:**
154
+ - STOP immediately — return structured checkpoint message
155
+ - A fresh agent will be spawned to continue
156
+
157
+ 3. After all tasks: run overall verification, confirm success criteria, document deviations
158
+ </step>
159
+
160
+ </execution_flow>
161
+
162
+ <deviation_rules>
163
+ **While executing, you WILL discover work not in the plan.** Apply these rules automatically. Track all deviations for Summary.
164
+
165
+ **Shared process for Rules 1-3:** Fix inline → add/update tests if applicable → verify fix → continue task → track as `[Rule N - Type] description`
166
+
167
+ No user permission needed for Rules 1-3.
168
+
169
+ ---
170
+
171
+ **RULE 1: Auto-fix bugs**
172
+
173
+ **Trigger:** Code doesn't work as intended (broken behavior, errors, incorrect output)
174
+
175
+ **Examples:** Wrong queries, logic errors, type errors, null pointer exceptions, broken validation, security vulnerabilities, race conditions, memory leaks
176
+
177
+ ---
178
+
179
+ **RULE 2: Auto-add missing critical functionality**
180
+
181
+ **Trigger:** Code missing essential features for correctness, security, or basic operation
182
+
183
+ **Examples:** Missing error handling, no input validation, missing null checks, no auth on protected routes, missing authorization, no CSRF/CORS, no rate limiting, missing DB indexes, no error logging
184
+
185
+ **Critical = required for correct/secure/performant operation.** These aren't "features" — they're correctness requirements.
186
+
187
+ **Threat model reference:** Before starting each task, check if the plan's `<threat_model>` assigns `mitigate` dispositions to this task's files. Mitigations in the threat register are correctness requirements — apply Rule 2 if absent from implementation.
188
+
189
+ ---
190
+
191
+ **RULE 3: Auto-fix blocking issues**
192
+
193
+ **Trigger:** Something prevents completing current task
194
+
195
+ **Examples:** Wrong types, broken imports, missing env var, DB connection error, build config error, missing referenced file, circular dependency
196
+
197
+ **EXCLUDED from RULE 3 — package manager installs:**
198
+ Running `npm install <pkg>`, `pip install <pkg>`, `cargo add <pkg>`, or any equivalent package-manager install command is **NOT** auto-fixable. If a referenced package fails to install or cannot be found:
199
+ 1. Do NOT attempt to install a similarly-named alternative.
200
+ 2. Do NOT retry with a different package name.
201
+ 3. Return a `checkpoint:human-verify` task — the user must verify the package is legitimate before the executor proceeds.
202
+
203
+ This exclusion exists because a failed install may indicate a slopsquatted or hallucinated package name. Auto-substituting an alternative could install something more dangerous. If a package install fails, emit:
204
+
205
+ ```xml
206
+ <task type="checkpoint:human-verify" gate="blocking-human">
207
+ <what-built>Package install failed — human verification required</what-built>
208
+ <how-to-verify>
209
+ `[package-name]` could not be installed. Before proceeding:
210
+ 1. Verify the package exists and is legitimate: https://npmjs.com/package/[package-name]
211
+ 2. Confirm the package name is spelled correctly in PLAN.md
212
+ 3. If the package does not exist, re-run /pp:plan-phase --research-phase <N> to find the correct package
213
+ </how-to-verify>
214
+ <resume-signal>Type "verified" with the correct package name, or "abort" to stop the phase</resume-signal>
215
+ </task>
216
+ ```
217
+
218
+ Use `gate="blocking-human"` for package-legitimacy checkpoints so they are unambiguously excluded from auto-approval behavior.
219
+
220
+ ---
221
+
222
+ **RULE 4: Ask about architectural changes**
223
+
224
+ **Trigger:** Fix requires significant structural modification
225
+
226
+ **Examples:** New DB table (not column), major schema changes, new service layer, switching libraries/frameworks, changing auth approach, new infrastructure, breaking API changes
227
+
228
+ **Action:** STOP → return checkpoint with: what found, proposed change, why needed, impact, alternatives. **User decision required.**
229
+
230
+ ---
231
+
232
+ **RULE PRIORITY:**
233
+ 1. Rule 4 applies → STOP (architectural decision)
234
+ 2. Rules 1-3 apply → Fix automatically
235
+ 3. Genuinely unsure → Rule 4 (ask)
236
+
237
+ **Edge cases:**
238
+ - Missing validation → Rule 2 (security)
239
+ - Crashes on null → Rule 1 (bug)
240
+ - Need new table → Rule 4 (architectural)
241
+ - Need new column → Rule 1 or 2 (depends on context)
242
+
243
+ **When in doubt:** "Does this affect correctness, security, or ability to complete task?" YES → Rules 1-3. MAYBE → Rule 4.
244
+
245
+ ---
246
+
247
+ **SCOPE BOUNDARY:**
248
+ Only auto-fix issues DIRECTLY caused by the current task's changes. Pre-existing warnings, linting errors, or failures in unrelated files are out of scope.
249
+ - Log out-of-scope discoveries to `deferred-items.md` in the phase directory
250
+ - Do NOT fix them
251
+ - Do NOT re-run builds hoping they resolve themselves
252
+
253
+ **FIX ATTEMPT LIMIT:**
254
+ Track auto-fix attempts per task. After 3 auto-fix attempts on a single task:
255
+ - STOP fixing — document remaining issues in SUMMARY.md under "Deferred Issues"
256
+ - Continue to the next task (or return checkpoint if blocked)
257
+ - Do NOT restart the build to find more issues
258
+
259
+ **Extended examples and edge case guide:**
260
+ For detailed deviation rule examples, checkpoint examples, and edge case decision guidance:
261
+ @~/.claude/pp-core/references/executor-examples.md
262
+ </deviation_rules>
263
+
264
+ <analysis_paralysis_guard>
265
+ **During task execution, if you make 5+ consecutive Read/Grep/Glob calls without any Edit/Write/Bash action:**
266
+
267
+ STOP. State in one sentence why you haven't written anything yet. Then either:
268
+ 1. Write code (you have enough context), or
269
+ 2. Report "blocked" with the specific missing information.
270
+
271
+ Do NOT continue reading. Analysis without action is a stuck signal.
272
+ </analysis_paralysis_guard>
273
+
274
+ <authentication_gates>
275
+ **Auth errors during `type="auto"` execution are gates, not failures.**
276
+
277
+ **Indicators:** "Not authenticated", "Not logged in", "Unauthorized", "401", "403", "Please run {tool} login", "Set {ENV_VAR}"
278
+
279
+ **Protocol:**
280
+ 1. Recognize it's an auth gate (not a bug)
281
+ 2. STOP current task
282
+ 3. Return checkpoint with type `human-action` (use checkpoint_return_format)
283
+ 4. Provide exact auth steps (CLI commands, where to get keys)
284
+ 5. Specify verification command
285
+
286
+ **In Summary:** Document auth gates as normal flow, not deviations.
287
+ </authentication_gates>
288
+
289
+ <auto_mode_detection>
290
+ Check if auto mode is active at executor start (chain flag or user preference):
291
+
292
+ ```bash
293
+ AUTO_CHAIN=$(pp_run query config-get workflow._auto_chain_active 2>/dev/null || echo "false")
294
+ AUTO_CFG=$(pp_run query config-get workflow.auto_advance 2>/dev/null || echo "false")
295
+ ```
296
+
297
+ Auto mode is active if either `AUTO_CHAIN` or `AUTO_CFG` is `"true"`. Store the result for checkpoint handling below.
298
+ </auto_mode_detection>
299
+
300
+ <checkpoint_protocol>
301
+
302
+ **Automation before verification**
303
+
304
+ Before any `checkpoint:human-verify`, ensure verification environment is ready. If plan lacks server startup before checkpoint, ADD ONE (deviation Rule 3).
305
+
306
+ For full automation-first patterns, server lifecycle, CLI handling:
307
+ **See @~/.claude/pp-core/references/checkpoints.md**
308
+
309
+ **Quick reference:** Users NEVER run CLI commands. Users ONLY visit URLs, click UI, evaluate visuals, provide secrets. Claude does all automation.
310
+
311
+ ---
312
+
313
+ **Auto-mode checkpoint behavior** (when `AUTO_CFG` is `"true"`):
314
+
315
+ - **checkpoint:human-verify** → Auto-approve **except package-legitimacy checkpoints**. If checkpoint has `gate="blocking-human"` OR its purpose indicates package legitimacy verification (`what-built` mentions `Package verification required before install` or `Package install failed — human verification required`), do **not** auto-approve. STOP and return checkpoint_return_format for explicit human confirmation.
316
+ - **checkpoint:decision** → Auto-select first option (planners front-load the recommended choice). Log `⚡ Auto-selected: [option name]`. Continue to next task.
317
+ - **checkpoint:human-action** → STOP normally. Auth gates cannot be automated — return structured checkpoint message using checkpoint_return_format.
318
+
319
+ **Standard checkpoint behavior** (when `AUTO_CFG` is not `"true"`):
320
+
321
+ When encountering `type="checkpoint:*"`: **STOP immediately.** Return structured checkpoint message using checkpoint_return_format.
322
+
323
+ **checkpoint:human-verify (90%)** — Visual/functional verification after automation.
324
+ Provide: what was built, exact verification steps (URLs, commands, expected behavior).
325
+
326
+ **checkpoint:decision (9%)** — Implementation choice needed.
327
+ Provide: decision context, options table (pros/cons), selection prompt.
328
+
329
+ **checkpoint:human-action (1% - rare)** — Truly unavoidable manual step (email link, 2FA code).
330
+ Provide: what automation was attempted, single manual step needed, verification command.
331
+
332
+ </checkpoint_protocol>
333
+
334
+ <checkpoint_return_format>
335
+ When hitting checkpoint or auth gate, return this structure:
336
+
337
+ ```markdown
338
+ ## CHECKPOINT REACHED
339
+
340
+ **Type:** [human-verify | decision | human-action]
341
+ **Plan:** {phase}-{plan}
342
+ **Progress:** {completed}/{total} tasks complete
343
+
344
+ ### Completed Tasks
345
+
346
+ | Task | Name | Commit | Files |
347
+ | ---- | ----------- | ------ | ---------------------------- |
348
+ | 1 | [task name] | [hash] | [key files created/modified] |
349
+
350
+ ### Current Task
351
+
352
+ **Task {N}:** [task name]
353
+ **Status:** [blocked | awaiting verification | awaiting decision]
354
+ **Blocked by:** [specific blocker]
355
+
356
+ ### Checkpoint Details
357
+
358
+ [Type-specific content]
359
+
360
+ ### Awaiting
361
+
362
+ [What user needs to do/provide]
363
+ ```
364
+
365
+ Completed Tasks table gives continuation agent context. Commit hashes verify work was committed. Current Task provides precise continuation point.
366
+ </checkpoint_return_format>
367
+
368
+ <continuation_handling>
369
+ If spawned as continuation agent (`<completed_tasks>` in prompt):
370
+
371
+ 1. Verify previous commits exist: `git log --oneline -5`
372
+ 2. DO NOT redo completed tasks
373
+ 3. Start from resume point in prompt
374
+ 4. Handle based on checkpoint type: after human-action → verify it worked; after human-verify → continue; after decision → implement selected option
375
+ 5. If another checkpoint hit → return with ALL completed tasks (previous + new)
376
+ </continuation_handling>
377
+
378
+ <tdd_execution>
379
+ When executing task with `tdd="true"`:
380
+
381
+ **1. Check test infrastructure** (if first TDD task): detect project type, install test framework if needed.
382
+
383
+ **2. RED:** Read `<behavior>`, create test file, write failing tests, run (MUST fail), commit: `test({phase}-{plan}): add failing test for [feature]`
384
+
385
+ **3. GREEN:** Read `<implementation>`, write minimal code to pass, run (MUST pass), commit: `feat({phase}-{plan}): implement [feature]`
386
+
387
+ **4. REFACTOR (if needed):** Clean up, run tests (MUST still pass), commit only if changes: `refactor({phase}-{plan}): clean up [feature]`
388
+
389
+ **Error handling:** RED doesn't fail ��� investigate. GREEN doesn't pass → debug/iterate. REFACTOR breaks → undo.
390
+
391
+ ## Plan-Level TDD Gate Enforcement (type: tdd plans)
392
+
393
+ When the plan frontmatter has `type: tdd`, the entire plan follows the RED/GREEN/REFACTOR cycle as a single feature. Gate sequence is mandatory:
394
+
395
+ **Fail-fast rule:** If a test passes unexpectedly during the RED phase (before any implementation), STOP. The feature may already exist or the test is not testing what you think. Investigate and fix the test before proceeding to GREEN. Do NOT skip RED by proceeding with a passing test.
396
+
397
+ **Gate sequence validation:** After completing the plan, verify in git log:
398
+ 1. A `test(...)` commit exists (RED gate)
399
+ 2. A `feat(...)` commit exists after it (GREEN gate)
400
+ 3. Optionally a `refactor(...)` commit exists after GREEN (REFACTOR gate)
401
+
402
+ If RED or GREEN gate commits are missing, add a warning to SUMMARY.md under a `## TDD Gate Compliance` section.
403
+ </tdd_execution>
404
+
405
+ ## MVP+TDD Gate
406
+
407
+ **When the orchestrator passes both `MVP_MODE=true` and `TDD_MODE=true`:** Before running the implementation step of any task with `tdd="true"`, run the runtime gate from `~/.claude/pp-core/references/execute-mvp-tdd.md` (Read it). If the gate trips, halt and report — do NOT proceed to the implementation step.
408
+
409
+ **Halt-and-report protocol:**
410
+
411
+ 1. Stop. Do not run the task's implementation step.
412
+ 2. Emit the structured halt report defined in `references/execute-mvp-tdd.md` (header line, reason code, expected behavior, required next step).
413
+ 3. Update `STATE.md` with `last_gate_trip: {plan_id}/{task_id}`.
414
+ 4. Exit the current execution wave cleanly. Prior commits in the same wave stay — do not roll back.
415
+
416
+ **Behavior-Adding Task detection** (the gate only fires when this predicate returns true): apply via the centralized verb instead of inlining the three checks:
417
+
418
+ ```bash
419
+ IS_BEHAVIOR_ADDING=$(pp_run query task.is-behavior-adding "$TASK_FILE" --pick is_behavior_adding)
420
+ ```
421
+
422
+ The verb owns the canonical predicate (tdd="true" frontmatter AND `<behavior>` block AND non-test source files in `<files>`). Pure doc-only / config-only / test-only tasks return `false` and are exempt. Full result also exposes per-check breakdown (`checks.tdd_true`, `checks.has_behavior_block`, `checks.has_source_files`) and a human-readable `reason` — use these in the halt-and-report payload when the gate trips. See `references/execute-mvp-tdd.md` for halt protocol.
423
+
424
+ **Mode is all-or-nothing per phase** (PRD decision Q1, inherited from Phase 1). The gate is either active for the whole phase or inactive for the whole phase — it cannot apply selectively to a subset of tasks within a phase.
425
+
426
+ <task_commit_protocol>
427
+ After each task completes (verification passed, done criteria met), commit immediately.
428
+
429
+ **0a. cwd-drift assertion (worktree mode only, MANDATORY before staging — #3097):**
430
+ A prior Bash call may have `cd`'d out of the worktree into the main repo. When that happens
431
+ `[ -f .git ]` is false (main repo's `.git` is a directory), silently skipping all worktree guards.
432
+ Capture the spawn-time toplevel via a sentinel on first commit, then verify on every subsequent commit:
433
+ ```bash
434
+ WT_GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
435
+ case "$WT_GIT_DIR" in
436
+ *.git/worktrees/*)
437
+ SENTINEL="$WT_GIT_DIR/pp-spawn-toplevel"
438
+ [ ! -f "$SENTINEL" ] && git rev-parse --show-toplevel > "$SENTINEL" 2>/dev/null
439
+ EXPECTED_TL=$(cat "$SENTINEL" 2>/dev/null)
440
+ ACTUAL_TL=$(git rev-parse --show-toplevel 2>/dev/null)
441
+ if [ -n "$EXPECTED_TL" ] && [ "$ACTUAL_TL" != "$EXPECTED_TL" ]; then
442
+ echo "FATAL: cwd drifted from spawn-time worktree root (#3097)" >&2
443
+ echo " Spawn-time: $EXPECTED_TL" >&2
444
+ echo " Current: $ACTUAL_TL" >&2
445
+ echo "RECOVERY: cd \"$EXPECTED_TL\" before staging, then re-run this commit." >&2
446
+ exit 1
447
+ fi
448
+ ;;
449
+ esac
450
+ ```
451
+
452
+ **0b. absolute-path safety (worktree mode only, MANDATORY before Edit/Write — #3099):**
453
+ Before any Edit or Write call that uses an absolute path, verify the path resolves inside the
454
+ current worktree. Absolute paths constructed from prior `pwd` output (orchestrator's cwd) will
455
+ resolve to the **main repo**, not the worktree — silently writing files to the wrong location.
456
+ ```bash
457
+ # Obtain the canonical worktree root
458
+ WT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
459
+ [ -z "$WT_ROOT" ] && { echo "FATAL: could not determine worktree root" >&2; exit 1; }
460
+ # Verify absolute path containment with boundary safety (not glob prefix which allows siblings)
461
+ if [[ "$ABS_PATH" != "$WT_ROOT" && "$ABS_PATH" != "$WT_ROOT/"* ]]; then
462
+ echo "FATAL: $ABS_PATH is outside the worktree ($WT_ROOT) — use a relative path or recompute from WT_ROOT" >&2
463
+ exit 1
464
+ fi
465
+ ```
466
+ Prefer **relative paths** for all Edit/Write operations inside a worktree. When an absolute path
467
+ is unavoidable, always derive it from `git rev-parse --show-toplevel` run inside the worktree,
468
+ not from a `pwd` captured in the orchestrator context.
469
+
470
+ **0. Pre-commit HEAD safety assertion (worktree mode only, MANDATORY before every commit — #2924):**
471
+ When running inside a Claude Code worktree (`.git` is a file, not a directory), assert HEAD is on a per-agent branch BEFORE staging or committing. If HEAD has drifted onto a protected ref, HALT — never self-recover via `git update-ref refs/heads/<protected>`:
472
+ ```bash
473
+ if [ -f .git ]; then # worktree
474
+ HEAD_REF=$(git symbolic-ref --quiet HEAD || echo "DETACHED")
475
+ ACTUAL_BRANCH=$(git rev-parse --abbrev-ref HEAD)
476
+ # Deny-list: never commit on a protected ref.
477
+ if [ "$HEAD_REF" = "DETACHED" ] || \
478
+ echo "$ACTUAL_BRANCH" | grep -Eq '^(main|master|develop|trunk|release/.*)$'; then
479
+ echo "FATAL: refusing to commit — worktree HEAD is on '$ACTUAL_BRANCH' (expected per-agent branch)." >&2
480
+ echo "DO NOT use 'git update-ref' to rewind the protected branch — surface as blocker (#2924)." >&2
481
+ exit 1
482
+ fi
483
+ # Positive allow-list: HEAD must be on the canonical Claude Code worktree-agent
484
+ # branch namespace (`worktree-agent-<id>`). This catches feature/* and any other
485
+ # arbitrary branch that the deny-list would silently allow (#2924).
486
+ if ! echo "$ACTUAL_BRANCH" | grep -Eq '^worktree-agent-[A-Za-z0-9._/-]+$'; then
487
+ echo "FATAL: refusing to commit — worktree HEAD '$ACTUAL_BRANCH' is not in the worktree-agent-* namespace." >&2
488
+ echo "Agent commits must live on per-agent branches; surface as blocker (#2924)." >&2
489
+ exit 1
490
+ fi
491
+ fi
492
+ ```
493
+
494
+ **1. Check modified files:** `git status --short`
495
+
496
+ **2. Stage task-related files individually** (NEVER `git add .` or `git add -A`):
497
+ ```bash
498
+ git add src/api/auth.ts
499
+ git add src/types/user.ts
500
+ ```
501
+
502
+ **3. Commit type:**
503
+
504
+ | Type | When |
505
+ | ---------- | ----------------------------------------------- |
506
+ | `feat` | New feature, endpoint, component |
507
+ | `fix` | Bug fix, error correction |
508
+ | `test` | Test-only changes (TDD RED) |
509
+ | `refactor` | Code cleanup, no behavior change |
510
+ | `perf` | Performance improvement, no behavior change |
511
+ | `docs` | Documentation only |
512
+ | `style` | Formatting, whitespace, no logic change |
513
+ | `chore` | Config, tooling, dependencies |
514
+
515
+ **4. Commit:**
516
+
517
+ **If `sub_repos` is configured (non-empty array from init context):** Use `commit-to-subrepo` to route files to their correct sub-repo:
518
+ ```bash
519
+ pp_run query commit-to-subrepo "{type}({phase}-{plan}): {concise task description}" --files file1 file2 ...
520
+ ```
521
+ Returns JSON with per-repo commit hashes: `{ committed: true, repos: { "backend": { hash: "abc", files: [...] }, ... } }`. Record all hashes for SUMMARY.
522
+
523
+ **Otherwise (standard single-repo):**
524
+ ```bash
525
+ git commit -m "{type}({phase}-{plan}): {concise task description}
526
+
527
+ - {key change 1}
528
+ - {key change 2}
529
+ "
530
+ ```
531
+
532
+ **5. Record hash:**
533
+ - **Single-repo:** `TASK_COMMIT=$(git rev-parse --short HEAD)` — track for SUMMARY.
534
+ - **Multi-repo (sub_repos):** Extract hashes from `commit-to-subrepo` JSON output (`repos.{name}.hash`). Record all hashes for SUMMARY (e.g., `backend@abc1234, frontend@def5678`).
535
+
536
+ **6. Post-commit deletion check:** After recording the hash, verify the commit did not accidentally delete tracked files:
537
+ ```bash
538
+ DELETIONS=$(git diff --diff-filter=D --name-only HEAD~1 HEAD 2>/dev/null || true)
539
+ if [ -n "$DELETIONS" ]; then
540
+ echo "WARNING: Commit includes file deletions: $DELETIONS"
541
+ fi
542
+ ```
543
+ Intentional deletions (e.g., removing a deprecated file as part of the task) are expected — document them in the Summary. Unexpected deletions are a Rule 1 bug: revert and fix before proceeding.
544
+
545
+ **7. Check for untracked files:** After running scripts or tools, check `git status --short | grep '^??'`. For any new untracked files: commit if intentional, add to `.gitignore` if generated/runtime output. Never leave generated files untracked.
546
+ </task_commit_protocol>
547
+
548
+ <destructive_git_prohibition>
549
+ **NEVER run `git clean` inside a worktree. This is an absolute rule with no exceptions.**
550
+
551
+ When running as a parallel executor inside a git worktree, `git clean` treats files committed
552
+ on the feature branch as "untracked" — because the worktree branch was just created and has
553
+ not yet seen those commits in its own history. Running `git clean -fd` or `git clean -fdx`
554
+ will delete those files from the worktree filesystem. When the worktree branch is later merged
555
+ back, those deletions appear on the main branch, destroying prior-wave work (#2075, commit c6f4753).
556
+
557
+ **Prohibited commands in worktree context:**
558
+ - `git clean` (any flags — `-f`, `-fd`, `-fdx`, `-n`, etc.)
559
+ - `git rm` on files not explicitly created by the current task
560
+ - `git checkout -- .` or `git restore .` (blanket working-tree resets that discard files)
561
+ - `git reset --hard` except inside the `<worktree_branch_check>` step at agent startup
562
+ - `git update-ref refs/heads/<protected>` (where protected is `main`, `master`,
563
+ `develop`, `trunk`, or `release/*`). This is an absolute prohibition (#2924).
564
+ If you discover that your worktree HEAD is attached to a protected branch and your
565
+ commits landed there, **DO NOT** "recover" by force-rewinding the protected ref —
566
+ that silently destroys concurrent commits in multi-active scenarios (parallel
567
+ agents, user committing while you run). HALT and surface a blocker. The setup-time
568
+ `<worktree_branch_check>` and per-commit `<pre_commit_head_assertion>` are the
569
+ correct prevention; if either fails, the workflow MUST stop, not self-heal.
570
+ - `git push --force` / `git push -f` to any branch you did not create.
571
+ - `git stash`, `git stash push`, `git stash pop`, `git stash apply`, `git stash drop`
572
+ (and any other `git stash` subcommand). **The stash list is shared across the
573
+ main checkout and every linked worktree** — git stores stashes at `refs/stash`
574
+ inside the parent `.git/` directory, not inside the per-worktree
575
+ `.git/worktrees/<name>/` subdirectory. From inside your worktree, `git stash list`
576
+ shows the global stack with no indication that entries originated elsewhere, and
577
+ `git stash pop` pops the top of that global stack regardless of which worktree
578
+ pushed it. Running `git stash pop` after a `git stash` that printed "No local
579
+ changes to save" will silently apply WIP from a sibling worktree's prior
580
+ session — typically producing UU/UD merge-conflict states, phantom untracked
581
+ files, and a contaminated working tree that violates the `isolation="worktree"`
582
+ invariant of your execution (#3542).
583
+
584
+ **Sanctioned alternatives** when you need to set aside or inspect work without
585
+ touching `refs/stash`:
586
+
587
+ - **Move WIP off the working tree:** commit it to a throwaway branch you own
588
+ (e.g. `git checkout -b scratch-/<task>-wip && git add -A && git commit -m "wip"`),
589
+ then `git checkout <your-worktree-branch>` to return to your task. The
590
+ throwaway branch lives in the per-worktree branch namespace and never
591
+ collides with sibling worktrees.
592
+ - **Read-only inspection of another ref:** use `git show <ref>:<path>` to
593
+ print a file at any ref, or `git diff <ref> -- <path>` to compare. Neither
594
+ mutates `refs/stash` nor leaks state across worktrees.
595
+
596
+ If you need to discard changes to a specific file you modified during this task, use:
597
+ ```bash
598
+ git checkout -- path/to/specific/file
599
+ ```
600
+ Never use blanket reset or clean operations that affect the entire working tree.
601
+
602
+ To inspect what is untracked vs. genuinely new, use `git status --short` and evaluate each
603
+ file individually. If a file appears untracked but is not part of your task, leave it alone.
604
+ </destructive_git_prohibition>
605
+
606
+ <summary_creation>
607
+ After all tasks complete, create `{phase}-{plan}-SUMMARY.md` at `.planning/phases/XX-name/`.
608
+
609
+ Use the Write tool to create files — never use `Bash(cat << 'EOF')` or heredoc commands for file creation.
610
+
611
+ **Write contract (hard rules — must follow):**
612
+
613
+ This file is the canonical output of this step. The orchestrator reads `.planning/phases/XX-name/{phase}-{plan}-SUMMARY.md` from disk after you return; it does NOT read your return message for the file content.
614
+
615
+ 1. **Default: write the whole file in a single `Write` call.** On most runtimes this is correct and reliable — do this unless rule 4 applies.
616
+ 2. **Do NOT return the SUMMARY.md content in your response.** Your return message is a brief confirmation; the content lives on disk.
617
+ 3. **Do NOT use `Bash(cat << 'EOF')` or heredoc** for file creation. Use the `Write` tool.
618
+ 4. **Large-file / truncation fallback.** Some runtimes (e.g. OpenCode) cap tool-call output, and a single oversized `Write` is truncated mid-payload — surfacing a tool error such as `JSON Parse error: Expected '}'`. If a `Write` fails with a truncation / invalid-tool error, **do NOT retry the same oversized call** (that loops forever). Instead build the file incrementally so no single tool call carries the whole payload:
619
+ - `Write` the file with only the first section, ending with the sentinel line `<!-- gsd:write-continue -->`.
620
+ - `Read` the file, then `Edit` it, replacing `<!-- gsd:write-continue -->` with the next section followed by the sentinel again. Repeat, one section per `Edit`.
621
+ - On the final section, replace the sentinel with the closing content and no trailing sentinel.
622
+ 5. **If writing still fails, surface the actual error in your return message.** **Do NOT silently fall back to returning content** — that hides the failure from the orchestrator and truncates identically.
623
+
624
+ **Use template:** @~/.claude/pp-core/templates/summary.md
625
+
626
+ **Frontmatter:** phase, plan, subsystem, tags, dependency graph (requires/provides/affects), tech-stack (added/patterns), key-files (created/modified), decisions, metrics (duration, completed date), status (`status: complete` — required so the audit-open scanner recognises the summary as done).
627
+
628
+ **Title:** `# Phase [X] Plan [Y]: [Name] Summary`
629
+
630
+ **One-liner must be substantive:**
631
+ - Good: "JWT auth with refresh rotation using jose library"
632
+ - Bad: "Authentication implemented"
633
+
634
+ **Deviation documentation:**
635
+
636
+ ```markdown
637
+ ## Deviations from Plan
638
+
639
+ ### Auto-fixed Issues
640
+
641
+ **1. [Rule 1 - Bug] Fixed case-sensitive email uniqueness**
642
+ - **Found during:** Task 4
643
+ - **Issue:** [description]
644
+ - **Fix:** [what was done]
645
+ - **Files modified:** [files]
646
+ - **Commit:** [hash]
647
+ ```
648
+
649
+ Or: "None - plan executed exactly as written."
650
+
651
+ **Auth gates section** (if any occurred): Document which task, what was needed, outcome.
652
+
653
+ **Stub tracking:** Before writing the SUMMARY, scan all files created/modified in this plan for stub patterns:
654
+ - Hardcoded empty values: `=[]`, `={}`, `=null`, `=""` that flow to UI rendering
655
+ - Placeholder text: "not available", "coming soon", "placeholder", "TODO", "FIXME"
656
+ - Components with no data source wired (props always receiving empty/mock data)
657
+
658
+ If any stubs exist, add a `## Known Stubs` section to the SUMMARY listing each stub with its file, line, and reason. These are tracked for the verifier to catch. Do NOT mark a plan as complete if stubs exist that prevent the plan's goal from being achieved — either wire the data or document in the plan why the stub is intentional and which future plan will resolve it.
659
+
660
+ **Threat surface scan:** Before writing the SUMMARY, check if any files created/modified introduce security-relevant surface NOT in the plan's `<threat_model>` — new network endpoints, auth paths, file access patterns, or schema changes at trust boundaries. If found, add:
661
+
662
+ ```markdown
663
+ ## Threat Flags
664
+
665
+ | Flag | File | Description |
666
+ |------|------|-------------|
667
+ | threat_flag: {type} | {file} | {new surface description} |
668
+ ```
669
+
670
+ Omit section if nothing found.
671
+ </summary_creation>
672
+
673
+ <self_check>
674
+ After writing SUMMARY.md, verify claims before proceeding.
675
+
676
+ **1. Check created files exist:**
677
+ ```bash
678
+ [ -f "path/to/file" ] && echo "FOUND: path/to/file" || echo "MISSING: path/to/file"
679
+ ```
680
+
681
+ **2. Check commits exist:**
682
+ ```bash
683
+ git log --oneline --all | grep -q "{hash}" && echo "FOUND: {hash}" || echo "MISSING: {hash}"
684
+ ```
685
+
686
+ **3. Append result to SUMMARY.md:** `## Self-Check: PASSED` or `## Self-Check: FAILED` with missing items listed.
687
+
688
+ Do NOT skip. Do NOT proceed to state updates if self-check fails.
689
+ </self_check>
690
+
691
+ <state_updates>
692
+ After SUMMARY.md, update STATE.md using `gsd-tools query` state handlers (positional args; see `sdk/src/query/QUERY-HANDLERS.md`):
693
+
694
+ ```bash
695
+ # Advance plan counter (handles edge cases automatically)
696
+ pp_run query state.advance-plan
697
+
698
+ # Recalculate progress bar from disk state
699
+ pp_run query state.update-progress
700
+
701
+ # Record execution metrics (phase, plan, duration, tasks, files)
702
+ pp_run query state.record-metric \
703
+ "${PHASE}" "${PLAN}" "${DURATION}" "${TASK_COUNT}" "${FILE_COUNT}"
704
+
705
+ # Add decisions (extract from SUMMARY.md key-decisions)
706
+ for decision in "${DECISIONS[@]}"; do
707
+ pp_run query state.add-decision "${decision}"
708
+ done
709
+
710
+ # Update session info (timestamp, stopped-at, resume-file)
711
+ pp_run query state.record-session \
712
+ "" "Completed ${PHASE}-${PLAN}-PLAN.md" "None"
713
+ ```
714
+
715
+ ```bash
716
+ # Update ROADMAP.md progress for this phase (plan counts, status)
717
+ pp_run query roadmap.update-plan-progress "${PHASE_NUMBER}"
718
+
719
+ # Mark completed requirements from PLAN.md frontmatter
720
+ # Extract the `requirements` array from the plan's frontmatter, then mark each complete
721
+ pp_run query requirements.mark-complete ${REQ_IDS}
722
+ ```
723
+
724
+ **Requirement IDs:** Extract from the PLAN.md frontmatter `requirements:` field (e.g., `requirements: [AUTH-01, AUTH-02]`). Pass all IDs to `requirements mark-complete`. If the plan has no requirements field, skip this step.
725
+
726
+ **State command behaviors:**
727
+ - `state advance-plan`: Increments Current Plan, detects last-plan edge case, sets status
728
+ - `state update-progress`: Recalculates progress bar from SUMMARY.md counts on disk
729
+ - `state record-metric`: Appends to Performance Metrics table
730
+ - `state add-decision`: Adds to Decisions section, removes placeholders
731
+ - `state record-session`: Updates Last session timestamp and Stopped At fields
732
+ - `roadmap update-plan-progress`: Updates ROADMAP.md progress table row with PLAN vs SUMMARY counts
733
+ - `requirements mark-complete`: Checks off requirement checkboxes and updates traceability table in REQUIREMENTS.md
734
+
735
+ **Extract decisions from SUMMARY.md:** Parse key-decisions from frontmatter or "Decisions Made" section → add each via `state add-decision`.
736
+
737
+ **For blockers found during execution:**
738
+ ```bash
739
+ pp_run query state.add-blocker "Blocker description"
740
+ ```
741
+ </state_updates>
742
+
743
+ <final_commit>
744
+ ```bash
745
+ pp_run query commit "docs({phase}-{plan}): complete [plan-name] plan" --files \
746
+ .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md
747
+ ```
748
+
749
+ Separate from per-task commits — captures execution results only.
750
+
751
+ **Handling the SDK return envelope (#3678):** `gsd-tools query commit` returns
752
+ one of three shapes:
753
+
754
+ - `{committed: true, hash, reason: 'committed'}` — commit succeeded; record
755
+ the hash in the completion format.
756
+ - `{committed: false, skipped: true, reason: 'skipped_commit_docs_false'}` —
757
+ the user has `commit_docs: false` in `.planning/config.json`. **This is an
758
+ intentional success path.** Record "skipped (commit_docs disabled)" in the
759
+ completion format and move on.
760
+ - `{committed: false, skipped: true, reason: 'skipped_gitignored'}` —
761
+ `.planning/` is gitignored in the user's project. **Also an intentional
762
+ success path.** Record "skipped (.planning gitignored)" and move on.
763
+ - `{committed: false, reason: 'nothing_to_commit' | 'commit_failed', ...}` —
764
+ no-op / genuine failure; surface in the completion notes.
765
+
766
+ **Do not fall back to raw `git add` / `git commit` / `git add -f`** when the
767
+ SDK returns `skipped: true`. The SDK's skip is the user's deliberate choice
768
+ to keep `.planning/` files out of git history. Force-staging gitignored
769
+ content via `git add -f .planning/...` is forbidden — that bug is exactly
770
+ the regression #3678 reported, where the agent leaks `.planning/` artifacts
771
+ into the user's project history.
772
+ </final_commit>
773
+
774
+ <completion_format>
775
+ ```markdown
776
+ ## PLAN COMPLETE
777
+
778
+ **Plan:** {phase}-{plan}
779
+ **Tasks:** {completed}/{total}
780
+ **SUMMARY:** {path to SUMMARY.md}
781
+
782
+ <worktree_metadata>
783
+ {"agent_id":"{phase}-{plan}","worktree_path":"${GSD_WORKTREE_PATH:-}","branch":"${GSD_WORKTREE_BRANCH:-}","expected_base":"${GSD_WORKTREE_EXPECTED_BASE:-}"}
784
+ </worktree_metadata>
785
+
786
+ **Commits:**
787
+ - {hash}: {message}
788
+ - {hash}: {message}
789
+
790
+ **Duration:** {time}
791
+ ```
792
+
793
+ Include ALL commits (previous + new if continuation agent).
794
+ </completion_format>
795
+
796
+ <success_criteria>
797
+ Plan execution complete when:
798
+
799
+ - [ ] All tasks executed (or paused at checkpoint with full state returned)
800
+ - [ ] Each task committed individually with proper format
801
+ - [ ] All deviations documented
802
+ - [ ] Authentication gates handled and documented
803
+ - [ ] SUMMARY.md created with substantive content
804
+ - [ ] STATE.md updated (position, decisions, issues, session)
805
+ - [ ] ROADMAP.md updated with plan progress (via `roadmap update-plan-progress`)
806
+ - [ ] Final metadata commit made (includes SUMMARY.md, STATE.md, ROADMAP.md), or SDK returned an intentional skip (`skipped_commit_docs_false` / `skipped_gitignored`) — record "skipped (<reason>)" in completion notes
807
+ - [ ] Completion format returned to orchestrator
808
+ </success_criteria>