@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,258 @@
1
+ #!/usr/bin/env bash
2
+ # scripts/verify-phase-02-rename.sh
3
+ #
4
+ # Phase 2 (Identity & CLI Rename) — repeatable success-criteria audit.
5
+ # Runs all five ROADMAP Phase 2 success criteria against the BUILT output tree.
6
+ # Exits 0 only when all five pass.
7
+ #
8
+ # Design notes (T-02-10 / comment-self-invalidation guard):
9
+ # This script greps pp-core/bin/ — NOT itself. The grep gates use
10
+ # --include='*.cjs' / -r over the compiled output tree. All filtering is
11
+ # applied to the CONTENT of the matched lines (see SC3/SC5 below), never
12
+ # to this file's own text, so the script cannot count its own comments.
13
+ #
14
+ # Filtering policy (audit correctness, not gate inflation):
15
+ # 1. JSDoc/comment-only lines (lines whose non-whitespace content starts
16
+ # with * or // ) are excluded from all SC3/SC5 counts. These are
17
+ # historical docblock references to the old binary name — they carry no
18
+ # functional meaning and are scheduled for Phase 3 prose-rename.
19
+ # 2. SC3 also excludes lines containing '"inline":' — these are embedded
20
+ # workflow markdown content inside capability-registry.cjs (a JSON string
21
+ # literal field). The capability registry body is regenerated in Phase 3
22
+ # (CONTEXT.md D-04 scope boundary); until then, old bash variable names
23
+ # from workflows appear verbatim inside these string literals.
24
+ # 3. SC5 exempts pp-core/bin/verify-reapply-patches.cjs for gsd-hook-version:
25
+ # the file explicitly handles BOTH pp-hook-version and gsd-hook-version
26
+ # for backward compatibility with hooks that have not yet been reinstalled.
27
+ # SC5 also excludes lines whose trimmed content begins with 'ownershipEvidence'
28
+ # — these are human-readable diagnostic explanation strings, not functional
29
+ # path references. Both categories are Phase 3 cosmetic-rename scope.
30
+ #
31
+ # Usage: bash scripts/verify-phase-02-rename.sh
32
+ # Exit 0 = all five criteria pass.
33
+ # Exit 1 = one or more criteria failed.
34
+
35
+ set -euo pipefail
36
+
37
+ REPO_ROOT="$(git rev-parse --show-toplevel)"
38
+ BIN_DIR="${REPO_ROOT}/pp-core/bin"
39
+
40
+ PASS=0
41
+ FAIL=1
42
+ overall=0
43
+
44
+ result() {
45
+ local criterion="$1" status="$2" detail="$3"
46
+ if [ "$status" -eq 0 ]; then
47
+ printf '[PASS] %s\n' "$criterion"
48
+ else
49
+ printf '[FAIL] %s — %s\n' "$criterion" "$detail"
50
+ overall=1
51
+ fi
52
+ }
53
+
54
+ echo "=== Phase 2 Success-Criteria Audit ==="
55
+ echo "Built output tree: ${BIN_DIR}"
56
+ echo ""
57
+
58
+ # ---------------------------------------------------------------------------
59
+ # SC1: Build produces pp-tools.cjs; gsd-tools.cjs is absent
60
+ # ---------------------------------------------------------------------------
61
+ SC1_STATUS=0
62
+ SC1_DETAIL=""
63
+
64
+ if [ ! -f "${BIN_DIR}/pp-tools.cjs" ]; then
65
+ SC1_STATUS=1
66
+ SC1_DETAIL="${BIN_DIR}/pp-tools.cjs not found"
67
+ fi
68
+
69
+ if [ -f "${BIN_DIR}/gsd-tools.cjs" ]; then
70
+ SC1_STATUS=1
71
+ SC1_DETAIL="${SC1_DETAIL:+${SC1_DETAIL}; }${BIN_DIR}/gsd-tools.cjs still exists (D-05 violated)"
72
+ fi
73
+
74
+ result "SC1: pp-tools.cjs exists / gsd-tools.cjs absent" "$SC1_STATUS" "$SC1_DETAIL"
75
+
76
+ # ---------------------------------------------------------------------------
77
+ # SC2: package-identity.cjs resolves @pareto4/pp-core (not @opengsd/gsd-core)
78
+ # and uses pp-update-check- prefix (not gsd-update-check-)
79
+ # ---------------------------------------------------------------------------
80
+ SC2_STATUS=0
81
+ SC2_DETAIL=""
82
+
83
+ node -e "
84
+ const id = require('${BIN_DIR}/lib/package-identity.cjs');
85
+ const s = JSON.stringify(id);
86
+ if (!s.includes('@pareto4/pp-core')) {
87
+ process.stderr.write('package-identity missing @pareto4/pp-core\\n');
88
+ process.exit(1);
89
+ }
90
+ if (s.includes('@opengsd/gsd-core')) {
91
+ process.stderr.write('package-identity still references @opengsd/gsd-core\\n');
92
+ process.exit(2);
93
+ }
94
+ if (/gsd-update-check-/.test(s)) {
95
+ process.stderr.write('package-identity uses gsd-update-check- prefix (expected pp-update-check-)\\n');
96
+ process.exit(3);
97
+ }
98
+ " 2>/tmp/sc2-err.txt || {
99
+ SC2_STATUS=1
100
+ SC2_DETAIL="$(cat /tmp/sc2-err.txt)"
101
+ }
102
+ rm -f /tmp/sc2-err.txt
103
+
104
+ result "SC2: package-identity.cjs → @pareto4/pp-core (no @opengsd/gsd-core, no gsd-update-check- prefix)" "$SC2_STATUS" "$SC2_DETAIL"
105
+
106
+ # ---------------------------------------------------------------------------
107
+ # SC3: Tier-1 shim rename — zero functional (non-comment, non-embedded-content)
108
+ # occurrences of: gsd-tools.cjs | _GSD_SHIM_NAME | gsd_run
109
+ #
110
+ # Filtering applied (see Design notes above):
111
+ # - lines whose trimmed content starts with * or // (JSDoc/comments)
112
+ # - lines containing '"inline":' (embedded workflow content in
113
+ # capability-registry.cjs; Phase 3 scope)
114
+ # ---------------------------------------------------------------------------
115
+ SC3_STATUS=0
116
+ SC3_DETAIL=""
117
+ SC3_COUNT=0
118
+
119
+ SC3_COUNT=$(
120
+ grep -rn 'gsd-tools\.cjs\|_GSD_SHIM_NAME\|gsd_run' "${BIN_DIR}" 2>/dev/null \
121
+ | grep -v '^Binary' \
122
+ | perl -ne '
123
+ if (/^[^:]+:\d+:\s*(.*)$/) {
124
+ my $content = $1;
125
+ # Skip JSDoc/comment-only lines
126
+ next if $content =~ /^\s*[*\/]/;
127
+ # Skip embedded workflow content in capability-registry.cjs
128
+ next if $content =~ /"inline":/;
129
+ print;
130
+ }
131
+ ' \
132
+ | wc -l \
133
+ | tr -d ' '
134
+ ) || true
135
+
136
+ if [ "$SC3_COUNT" -ne 0 ]; then
137
+ SC3_STATUS=1
138
+ SC3_DETAIL="${SC3_COUNT} functional match(es) found after filtering comments and embedded content"
139
+ # Print offending lines for diagnostics
140
+ echo " SC3 offending lines:"
141
+ grep -rn 'gsd-tools\.cjs\|_GSD_SHIM_NAME\|gsd_run' "${BIN_DIR}" 2>/dev/null \
142
+ | grep -v '^Binary' \
143
+ | perl -ne '
144
+ if (/^[^:]+:\d+:\s*(.*)$/) {
145
+ my $content = $1;
146
+ next if $content =~ /^\s*[*\/]/;
147
+ next if $content =~ /"inline":/;
148
+ print " $_";
149
+ }
150
+ ' || true
151
+ fi
152
+
153
+ result "SC3: Tier-1 shim tokens absent in pp-core/bin/ (functional code only; comments+embedded filtered)" "$SC3_STATUS" "$SC3_DETAIL"
154
+
155
+ # ---------------------------------------------------------------------------
156
+ # SC4: Full command parity — all 65 command families dispatch without failure
157
+ # Delegates to the dedicated test that was added in Plan 03.
158
+ # ---------------------------------------------------------------------------
159
+ SC4_STATUS=0
160
+ SC4_DETAIL=""
161
+
162
+ if [ ! -f "${REPO_ROOT}/tests/phase-02-command-parity.test.cjs" ]; then
163
+ SC4_STATUS=1
164
+ SC4_DETAIL="tests/phase-02-command-parity.test.cjs not found"
165
+ else
166
+ node --test "${REPO_ROOT}/tests/phase-02-command-parity.test.cjs" >/tmp/sc4-out.txt 2>&1 || {
167
+ SC4_STATUS=1
168
+ SC4_DETAIL="command-parity test failed (see /tmp/sc4-out.txt)"
169
+ tail -20 /tmp/sc4-out.txt
170
+ }
171
+ rm -f /tmp/sc4-out.txt
172
+ fi
173
+
174
+ result "SC4: all 65 command families dispatch (node --test tests/phase-02-command-parity.test.cjs)" "$SC4_STATUS" "$SC4_DETAIL"
175
+
176
+ # ---------------------------------------------------------------------------
177
+ # SC5: Tier-2 installer-state rename — zero functional occurrences of:
178
+ # "gsd-core" (quoted) | gsd-file-manifest | gsd-install-state | gsd-hook-version
179
+ #
180
+ # Filtering applied (see Design notes above):
181
+ # - lines whose trimmed content starts with * or // (JSDoc/comments)
182
+ # - pp-core/bin/verify-reapply-patches.cjs is exempt (backward-compat
183
+ # logic that accepts both pp-hook-version and gsd-hook-version)
184
+ # - lines whose trimmed content starts with 'ownershipEvidence'
185
+ # (human-readable diagnostic strings, Phase 3 cosmetic rename)
186
+ # ---------------------------------------------------------------------------
187
+ SC5_STATUS=0
188
+ SC5_DETAIL=""
189
+ SC5_COUNT=0
190
+
191
+ SC5_COUNT=$(
192
+ grep -rn '"gsd-core"\|gsd-file-manifest\|gsd-install-state\|gsd-hook-version' "${BIN_DIR}" 2>/dev/null \
193
+ | grep -v '^Binary' \
194
+ | grep -v 'verify-reapply-patches\.cjs' \
195
+ | perl -ne '
196
+ if (/^[^:]+:\d+:\s*(.*)$/) {
197
+ my $content = $1;
198
+ # Skip JSDoc/comment-only lines
199
+ next if $content =~ /^\s*[*\/]/;
200
+ # Skip human-readable ownershipEvidence explanation strings
201
+ next if $content =~ /^\s*ownershipEvidence/;
202
+ print;
203
+ }
204
+ ' \
205
+ | wc -l \
206
+ | tr -d ' '
207
+ ) || true
208
+
209
+ if [ "$SC5_COUNT" -ne 0 ]; then
210
+ SC5_STATUS=1
211
+ SC5_DETAIL="${SC5_COUNT} functional match(es) found after filtering comments and exempt files"
212
+ echo " SC5 offending lines:"
213
+ grep -rn '"gsd-core"\|gsd-file-manifest\|gsd-install-state\|gsd-hook-version' "${BIN_DIR}" 2>/dev/null \
214
+ | grep -v '^Binary' \
215
+ | grep -v 'verify-reapply-patches\.cjs' \
216
+ | perl -ne '
217
+ if (/^[^:]+:\d+:\s*(.*)$/) {
218
+ my $content = $1;
219
+ next if $content =~ /^\s*[*\/]/;
220
+ next if $content =~ /^\s*ownershipEvidence/;
221
+ print " $_";
222
+ }
223
+ ' || true
224
+ fi
225
+
226
+ result "SC5: Tier-2 state/hook-marker tokens absent (comments+compat-guards filtered)" "$SC5_STATUS" "$SC5_DETAIL"
227
+
228
+ # ---------------------------------------------------------------------------
229
+ # Phase gate: full npm test suite (npm test)
230
+ # ---------------------------------------------------------------------------
231
+ echo ""
232
+ echo "=== Phase Gate: npm test ==="
233
+
234
+ NPM_TEST_STATUS=0
235
+ npm test >/tmp/pp-phase-gate-test.log 2>&1 || {
236
+ NPM_TEST_STATUS=1
237
+ echo "[FAIL] npm test failed"
238
+ tail -30 /tmp/pp-phase-gate-test.log
239
+ overall=1
240
+ }
241
+ if [ "$NPM_TEST_STATUS" -eq 0 ]; then
242
+ TEST_SUMMARY=$(grep -E '^(ℹ|i) (tests|pass|fail) ' /tmp/pp-phase-gate-test.log 2>/dev/null | tail -3 || true)
243
+ echo "[PASS] npm test — ${TEST_SUMMARY}"
244
+ fi
245
+ rm -f /tmp/pp-phase-gate-test.log
246
+
247
+ # ---------------------------------------------------------------------------
248
+ # Summary
249
+ # ---------------------------------------------------------------------------
250
+ echo ""
251
+ echo "=== Summary ==="
252
+ if [ "$overall" -eq 0 ]; then
253
+ echo "ALL FIVE CRITERIA PASSED — Phase 2 gate: OK"
254
+ else
255
+ echo "ONE OR MORE CRITERIA FAILED — Phase 2 gate: FAILED"
256
+ fi
257
+
258
+ exit "$overall"
@@ -0,0 +1,376 @@
1
+ #!/usr/bin/env bash
2
+ # scripts/verify-phase-03-rename.sh
3
+ #
4
+ # Phase 3 (Content & Registry Rename) — repeatable success-criteria audit.
5
+ # Runs all five ROADMAP Phase 3 success criteria against the content trees.
6
+ # Exits 0 only when all five pass.
7
+ #
8
+ # Design notes (T-03-01 / comment-self-invalidation guard):
9
+ # This script greps the TARGET TREES — pp-core/workflows/, pp-core/references/,
10
+ # pp-core/templates/, pp-core/contexts/, agents/, commands/gsd/ (or pp/),
11
+ # pp-core/bin/lib/ — NEVER itself. The grep gates that search for legacy
12
+ # tokens construct those tokens at runtime by concatenating parts so the
13
+ # literal string never appears in this file's own text. This prevents the
14
+ # script from counting its own comment lines as rename-audit failures.
15
+ #
16
+ # Specifically:
17
+ # SC1 needle is built as: shim="${legacy}-tools.cjs" (not written literally)
18
+ # SC2 needle is the pattern /gsd[:-] (the bracket syntax means the hyphen
19
+ # and colon forms both match; see SC2 block for details)
20
+ # SC3 needle searches frontmatter: ^name: gsd[:-] in commands/gsd/
21
+ # SC4 needles are built by concatenating "g"+"s"+"d" to form the legacy
22
+ # prefix variable, never using the three-letter prefix literally
23
+ # SC5 needle for GSD: markers is built as: marker="${cap}:" where cap is
24
+ # built by concatenating "G"+"S"+"D"
25
+ #
26
+ # No bare legacy three-letter prefix joined to -tools.cjs, _SHIM_NAME, _run,
27
+ # or -core/bin appears as a searchable literal anywhere in this script.
28
+ #
29
+ # Usage:
30
+ # bash scripts/verify-phase-03-rename.sh # full audit + build + test
31
+ # bash scripts/verify-phase-03-rename.sh --audit-only # five SC grep gates only (fast)
32
+ #
33
+ # Exit 0 = all criteria pass (and build+test pass if not --audit-only).
34
+ # Exit 1 = one or more criteria failed.
35
+
36
+ set -euo pipefail
37
+ # Ignore SIGPIPE so that piping diagnostic output through head -10 does not
38
+ # abort the script under set -o pipefail.
39
+ trap '' PIPE
40
+
41
+ REPO_ROOT="$(git rev-parse --show-toplevel)"
42
+
43
+ # ---------------------------------------------------------------------------
44
+ # .planning/ preservation baseline (SC5 guard — RENAME-08)
45
+ # ---------------------------------------------------------------------------
46
+ # Live count of .planning/ references in pp-core/workflows/ was captured at
47
+ # Wave 0 planning time: 734. SC5 fails if the live count changes — this
48
+ # catches a sweep that accidentally rewrote .planning/ path strings.
49
+ PLANNING_BASELINE=734
50
+
51
+ # ---------------------------------------------------------------------------
52
+ # Flag: --audit-only (fast path — greps only, skips npm run build + npm test)
53
+ # ---------------------------------------------------------------------------
54
+ AUDIT_ONLY=false
55
+ for arg in "$@"; do
56
+ [ "$arg" = "--audit-only" ] && AUDIT_ONLY=true
57
+ done
58
+
59
+ # ---------------------------------------------------------------------------
60
+ # Helper
61
+ # ---------------------------------------------------------------------------
62
+ PASS=0
63
+ FAIL=1
64
+ overall=0
65
+
66
+ result() {
67
+ local criterion="$1" status="$2" detail="$3"
68
+ if [ "$status" -eq 0 ]; then
69
+ printf '[PASS] %s\n' "$criterion"
70
+ else
71
+ printf '[FAIL] %s — %s\n' "$criterion" "$detail"
72
+ overall=1
73
+ fi
74
+ }
75
+
76
+ echo "=== Phase 3 Success-Criteria Audit ==="
77
+ echo "Repo root: ${REPO_ROOT}"
78
+ echo "Audit-only mode: ${AUDIT_ONLY}"
79
+ echo ""
80
+
81
+ # ---------------------------------------------------------------------------
82
+ # Build legacy needle fragments at runtime (comment-self-invalidation guard)
83
+ # ---------------------------------------------------------------------------
84
+ # The three-letter legacy prefix is never written as a bare literal in this
85
+ # script. Construct it at runtime so greps against this file return nothing.
86
+ legacy="g""s""d"
87
+ cap="G""S""D"
88
+
89
+ # ---------------------------------------------------------------------------
90
+ # SC1 (RENAME-05): Zero shim tokens in pp-core/workflows/
91
+ #
92
+ # Tokens: <legacy>-tools.cjs | _<LEGACY>_SHIM_NAME | <legacy>_run | <legacy>-core/bin
93
+ # These variables hold the full needles but the needles are never written
94
+ # verbatim — they are assembled from the fragment variables above.
95
+ # ---------------------------------------------------------------------------
96
+ SC1_STATUS=0
97
+ SC1_DETAIL=""
98
+
99
+ shim_cjs="${legacy}-tools.cjs"
100
+ shim_var="_${cap}_SHIM_NAME"
101
+ shim_run="${legacy}_run"
102
+ shim_bin="${legacy}-core/bin"
103
+
104
+ SC1_PATTERN="${shim_cjs}|${shim_var}|${shim_run}|${shim_bin}"
105
+
106
+ SC1_HITS=$(
107
+ grep -rE "${SC1_PATTERN}" "${REPO_ROOT}/pp-core/workflows/" 2>/dev/null || true
108
+ )
109
+
110
+ if [ -n "$SC1_HITS" ]; then
111
+ SC1_STATUS=1
112
+ SC1_COUNT=$(echo "$SC1_HITS" | wc -l | tr -d ' ')
113
+ SC1_DETAIL="${SC1_COUNT} shim token line(s) found in pp-core/workflows/"
114
+ echo " SC1 offending lines (first 10):"
115
+ echo "$SC1_HITS" | awk 'NR<=10{print " " $0}'
116
+ fi
117
+
118
+ result "SC1 (RENAME-05): Zero shim tokens (${shim_cjs}, ${shim_var}, ${shim_run}, ${shim_bin}) in pp-core/workflows/" "$SC1_STATUS" "$SC1_DETAIL"
119
+
120
+ # ---------------------------------------------------------------------------
121
+ # SC2 (RENAME-05/08): Zero /gsd[:-] slash command refs
122
+ #
123
+ # The pattern /gsd[:-] matches BOTH:
124
+ # - /gsd:<cmd> (colon form — dominant, e.g. /gsd:plan-phase) — 783+ in workflows
125
+ # - /gsd-<cmd> (hyphen form — e.g. /gsd-plan-phase)
126
+ # A /gsd- only pattern gives a false green because 900+ colon refs survive.
127
+ # Target trees: workflows, references, templates, contexts
128
+ # ---------------------------------------------------------------------------
129
+ SC2_STATUS=0
130
+ SC2_DETAIL=""
131
+
132
+ SC2_HITS=$(
133
+ grep -rnE "/${legacy}[:-]" \
134
+ "${REPO_ROOT}/pp-core/workflows/" \
135
+ "${REPO_ROOT}/pp-core/references/" \
136
+ "${REPO_ROOT}/pp-core/templates/" \
137
+ "${REPO_ROOT}/pp-core/contexts/" \
138
+ 2>/dev/null || true
139
+ )
140
+
141
+ if [ -n "$SC2_HITS" ]; then
142
+ SC2_STATUS=1
143
+ SC2_COUNT=$(echo "$SC2_HITS" | wc -l | tr -d ' ')
144
+ SC2_DETAIL="${SC2_COUNT} /${legacy}[:-] slash-command ref(s) found"
145
+ echo " SC2 offending lines (first 10):"
146
+ echo "$SC2_HITS" | awk 'NR<=10{print " " $0}'
147
+ fi
148
+
149
+ result "SC2 (RENAME-05/08): Zero /${legacy}[:-] slash refs in workflows/references/templates/contexts" "$SC2_STATUS" "$SC2_DETAIL"
150
+
151
+ # ---------------------------------------------------------------------------
152
+ # SC3 (RENAME-06): All 34 agents renamed; no residual agent-type gsd- refs
153
+ #
154
+ # Three sub-checks:
155
+ # a) ls agents/ | grep -c "^<legacy>-" == 0
156
+ # b) ls agents/ | grep -c "^pp-" == 34
157
+ # c) grep -rn "<legacy>-project-researcher|..." pp-core/workflows/ is empty
158
+ # d) Skill frontmatter gate:
159
+ # grep -rlE "^name: <legacy>[:-]" commands/gsd/ returns no files (false green
160
+ # guard: bare filenames in commands/gsd/ DON'T start with gsd- today — skills
161
+ # are identified by their frontmatter "name:" field, not the filename)
162
+ # e) grep -rlE "^name: pp[:-]" commands/gsd/ | wc -l == 69
163
+ # ---------------------------------------------------------------------------
164
+ SC3_STATUS=0
165
+ SC3_DETAIL=""
166
+
167
+ # 3a: no agent files named gsd-* remain
168
+ agent_legacy_count=$(ls "${REPO_ROOT}/agents/" 2>/dev/null | grep -c "^${legacy}-" || true)
169
+ if [ "$agent_legacy_count" -ne 0 ]; then
170
+ SC3_STATUS=1
171
+ SC3_DETAIL="${SC3_DETAIL:+${SC3_DETAIL}; }${agent_legacy_count} agent file(s) still named ${legacy}-*.md"
172
+ fi
173
+
174
+ # 3b: exactly 34 pp-* agent files exist
175
+ agent_pp_count=$(ls "${REPO_ROOT}/agents/" 2>/dev/null | grep -c "^pp-" || true)
176
+ if [ "$agent_pp_count" -ne 34 ]; then
177
+ SC3_STATUS=1
178
+ SC3_DETAIL="${SC3_DETAIL:+${SC3_DETAIL}; }pp- agent count = ${agent_pp_count} (expected 34)"
179
+ fi
180
+
181
+ # 3c: specific legacy agent names absent from workflows prose
182
+ SC3_PROSE_HITS=$(
183
+ grep -rn "${legacy}-project-researcher\|${legacy}-research-synthesizer\|${legacy}-roadmapper" \
184
+ "${REPO_ROOT}/pp-core/workflows/" 2>/dev/null || true
185
+ )
186
+ if [ -n "$SC3_PROSE_HITS" ]; then
187
+ SC3_STATUS=1
188
+ SC3_COUNT=$(echo "$SC3_PROSE_HITS" | wc -l | tr -d ' ')
189
+ SC3_DETAIL="${SC3_DETAIL:+${SC3_DETAIL}; }${SC3_COUNT} legacy agent-name ref(s) in workflows"
190
+ fi
191
+
192
+ # 3d: skill frontmatter gate — no "name: gsd[:-]" in commands/gsd/ frontmatter
193
+ SC3_SKILL_LEGACY=$(
194
+ grep -rlE "^name: ${legacy}[:-]" "${REPO_ROOT}/commands/gsd/" 2>/dev/null || true
195
+ )
196
+ if [ -n "$SC3_SKILL_LEGACY" ]; then
197
+ SC3_STATUS=1
198
+ SC3_SKILL_LEGACY_COUNT=$(echo "$SC3_SKILL_LEGACY" | wc -l | tr -d ' ')
199
+ SC3_DETAIL="${SC3_DETAIL:+${SC3_DETAIL}; }${SC3_SKILL_LEGACY_COUNT} skill file(s) with legacy frontmatter name: ${legacy}[:-]"
200
+ echo " SC3 legacy-frontmatter skills (first 5):"
201
+ echo "$SC3_SKILL_LEGACY" | awk 'NR<=5{print " " $0}'
202
+ fi
203
+
204
+ # 3e: 69 skill files have "name: pp[:-]" frontmatter
205
+ SC3_SKILL_PP=$(
206
+ grep -rlE "^name: pp[:-]" "${REPO_ROOT}/commands/gsd/" 2>/dev/null \
207
+ | wc -l | tr -d ' ' || true
208
+ )
209
+ # Note: after commands/gsd/ → commands/pp/ rename, update the path above.
210
+ # For now the source dir may still be commands/gsd/ during the rename waves.
211
+ if [ "$SC3_SKILL_PP" -ne 69 ]; then
212
+ SC3_STATUS=1
213
+ SC3_DETAIL="${SC3_DETAIL:+${SC3_DETAIL}; }pp[:-] skill frontmatter count = ${SC3_SKILL_PP} (expected 69)"
214
+ fi
215
+
216
+ result "SC3 (RENAME-06): Agents all pp-* (0 ${legacy}-, 34 pp-); legacy agent refs absent; skill frontmatter pp[:-]" "$SC3_STATUS" "$SC3_DETAIL"
217
+
218
+ # ---------------------------------------------------------------------------
219
+ # SC4 (RENAME-07): Registry regenerated, no "gsd-" entries, Kimi name: pp
220
+ #
221
+ # Three sub-checks:
222
+ # a) grep '"<legacy>-"' pp-core/bin/lib/capability-registry.cjs is empty
223
+ # b) node scripts/gen-capability-registry.cjs --check exits 0
224
+ # c) Kimi root agent in built lib uses name: pp (not name: <legacy>)
225
+ # — assert grep -c "name: pp" runtime-artifact-layout.cjs >= 1
226
+ # AND legacy form "name: <legacy>" is absent
227
+ # Kimi needle is built at runtime to avoid self-invalidation.
228
+ # ---------------------------------------------------------------------------
229
+ SC4_STATUS=0
230
+ SC4_DETAIL=""
231
+
232
+ REGISTRY="${REPO_ROOT}/pp-core/bin/lib/capability-registry.cjs"
233
+ LAYOUT="${REPO_ROOT}/pp-core/bin/lib/runtime-artifact-layout.cjs"
234
+
235
+ # 4a: no '"gsd-"' entries in registry
236
+ # Build the needle: double-quote + legacy + hyphen + double-quote
237
+ registry_needle="\"${legacy}-\""
238
+
239
+ SC4_REGISTRY_HITS=$(
240
+ grep "${registry_needle}" "${REGISTRY}" 2>/dev/null || true
241
+ )
242
+ if [ -n "$SC4_REGISTRY_HITS" ]; then
243
+ SC4_STATUS=1
244
+ SC4_COUNT=$(echo "$SC4_REGISTRY_HITS" | wc -l | tr -d ' ')
245
+ SC4_DETAIL="${SC4_DETAIL:+${SC4_DETAIL}; }${SC4_COUNT} \"${legacy}-\" line(s) in capability-registry.cjs"
246
+ fi
247
+
248
+ # 4b: gen-capability-registry.cjs --check exits 0
249
+ if [ -f "${REPO_ROOT}/scripts/gen-capability-registry.cjs" ]; then
250
+ node "${REPO_ROOT}/scripts/gen-capability-registry.cjs" --check >/dev/null 2>&1 || {
251
+ SC4_STATUS=1
252
+ SC4_DETAIL="${SC4_DETAIL:+${SC4_DETAIL}; }gen-capability-registry.cjs --check exited non-zero (registry is stale or has drift)"
253
+ }
254
+ else
255
+ SC4_STATUS=1
256
+ SC4_DETAIL="${SC4_DETAIL:+${SC4_DETAIL}; }scripts/gen-capability-registry.cjs not found"
257
+ fi
258
+
259
+ # 4c: Kimi root agent — "name: pp" present; "name: <legacy>" absent in built layout
260
+ # Build legacy Kimi needle: "name: " + legacy (three parts joined)
261
+ kimi_legacy_needle="name: ${legacy}"
262
+
263
+ if [ -f "${LAYOUT}" ]; then
264
+ kimi_pp_count=$(grep -c "name: pp" "${LAYOUT}" 2>/dev/null || true)
265
+ kimi_legacy_count=$(grep -c "${kimi_legacy_needle}" "${LAYOUT}" 2>/dev/null || true)
266
+
267
+ if [ "$kimi_pp_count" -lt 1 ]; then
268
+ SC4_STATUS=1
269
+ SC4_DETAIL="${SC4_DETAIL:+${SC4_DETAIL}; }Kimi root agent 'name: pp' not found in runtime-artifact-layout.cjs"
270
+ fi
271
+ if [ "$kimi_legacy_count" -ne 0 ]; then
272
+ SC4_STATUS=1
273
+ SC4_DETAIL="${SC4_DETAIL:+${SC4_DETAIL}; }${kimi_legacy_count} '${kimi_legacy_needle}' line(s) still in runtime-artifact-layout.cjs"
274
+ fi
275
+ else
276
+ SC4_STATUS=1
277
+ SC4_DETAIL="${SC4_DETAIL:+${SC4_DETAIL}; }pp-core/bin/lib/runtime-artifact-layout.cjs not found"
278
+ fi
279
+
280
+ result "SC4 (RENAME-07): Capability registry regenerated; no \"${legacy}-\" entries; Kimi root name: pp" "$SC4_STATUS" "$SC4_DETAIL"
281
+
282
+ # ---------------------------------------------------------------------------
283
+ # SC5 (RENAME-08): GSD: markers replaced by PP: + .planning/ count preserved
284
+ #
285
+ # Three sub-checks:
286
+ # a) grep -c "<CAP>:" pp-core/templates/claude-md.md == 0
287
+ # b) grep -c "PP:" pp-core/templates/claude-md.md >= 16
288
+ # c) live .planning/ count in workflows == PLANNING_BASELINE (734)
289
+ #
290
+ # The GSD: marker needle is built at runtime: cap + ":" (never a literal).
291
+ # ---------------------------------------------------------------------------
292
+ SC5_STATUS=0
293
+ SC5_DETAIL=""
294
+
295
+ CLAUDE_MD="${REPO_ROOT}/pp-core/templates/claude-md.md"
296
+
297
+ # Build GSD: marker needle at runtime
298
+ gsd_marker="${cap}:"
299
+
300
+ if [ -f "${CLAUDE_MD}" ]; then
301
+ # 5a: no legacy GSD: markers remain
302
+ gsd_marker_count=$(grep -c "${gsd_marker}" "${CLAUDE_MD}" 2>/dev/null || true)
303
+ if [ "$gsd_marker_count" -ne 0 ]; then
304
+ SC5_STATUS=1
305
+ SC5_DETAIL="${SC5_DETAIL:+${SC5_DETAIL}; }${gsd_marker_count} '${gsd_marker}' marker(s) still in templates/claude-md.md"
306
+ fi
307
+
308
+ # 5b: PP: markers are present (at least 16)
309
+ pp_marker_count=$(grep -c "PP:" "${CLAUDE_MD}" 2>/dev/null || true)
310
+ if [ "$pp_marker_count" -lt 16 ]; then
311
+ SC5_STATUS=1
312
+ SC5_DETAIL="${SC5_DETAIL:+${SC5_DETAIL}; }PP: marker count = ${pp_marker_count} in claude-md.md (expected >= 16)"
313
+ fi
314
+ else
315
+ SC5_STATUS=1
316
+ SC5_DETAIL="${SC5_DETAIL:+${SC5_DETAIL}; }pp-core/templates/claude-md.md not found"
317
+ fi
318
+
319
+ # 5c: .planning/ reference count preservation guard
320
+ live=$(grep -rn "\.planning/" "${REPO_ROOT}/pp-core/workflows/" 2>/dev/null | wc -l | tr -d ' ')
321
+ if [ "$live" -ne "$PLANNING_BASELINE" ]; then
322
+ SC5_STATUS=1
323
+ SC5_DETAIL="${SC5_DETAIL:+${SC5_DETAIL}; }.planning/ ref count = ${live} (baseline ${PLANNING_BASELINE}); sweep may have corrupted .planning/ paths"
324
+ fi
325
+
326
+ result "SC5 (RENAME-08): ${gsd_marker} markers = 0; PP: markers >= 16; .planning/ count = ${PLANNING_BASELINE}" "$SC5_STATUS" "$SC5_DETAIL"
327
+
328
+ # ---------------------------------------------------------------------------
329
+ # Phase gate: npm run build + npm test (skipped when --audit-only)
330
+ # ---------------------------------------------------------------------------
331
+ if [ "${AUDIT_ONLY}" = "true" ]; then
332
+ echo ""
333
+ echo "=== Phase Gate: SKIPPED (--audit-only) ==="
334
+ else
335
+ echo ""
336
+ echo "=== Phase Gate: npm run build ==="
337
+ BUILD_STATUS=0
338
+ npm run build --prefix "${REPO_ROOT}" >/tmp/pp-phase-03-build.log 2>&1 || {
339
+ BUILD_STATUS=1
340
+ echo "[FAIL] npm run build failed"
341
+ tail -30 /tmp/pp-phase-03-build.log
342
+ overall=1
343
+ }
344
+ if [ "$BUILD_STATUS" -eq 0 ]; then
345
+ echo "[PASS] npm run build"
346
+ fi
347
+ rm -f /tmp/pp-phase-03-build.log
348
+
349
+ echo ""
350
+ echo "=== Phase Gate: npm test ==="
351
+ NPM_TEST_STATUS=0
352
+ npm test --prefix "${REPO_ROOT}" >/tmp/pp-phase-03-test.log 2>&1 || {
353
+ NPM_TEST_STATUS=1
354
+ echo "[FAIL] npm test failed"
355
+ tail -30 /tmp/pp-phase-03-test.log
356
+ overall=1
357
+ }
358
+ if [ "$NPM_TEST_STATUS" -eq 0 ]; then
359
+ TEST_SUMMARY=$(grep -E '^(ℹ|i) (tests|pass|fail) ' /tmp/pp-phase-03-test.log 2>/dev/null | tail -3 || true)
360
+ echo "[PASS] npm test — ${TEST_SUMMARY}"
361
+ fi
362
+ rm -f /tmp/pp-phase-03-test.log
363
+ fi
364
+
365
+ # ---------------------------------------------------------------------------
366
+ # Summary
367
+ # ---------------------------------------------------------------------------
368
+ echo ""
369
+ echo "=== Summary ==="
370
+ if [ "$overall" -eq 0 ]; then
371
+ echo "ALL FIVE CRITERIA PASSED — Phase 3 gate: OK"
372
+ else
373
+ echo "ONE OR MORE CRITERIA FAILED — Phase 3 gate: FAILED"
374
+ fi
375
+
376
+ exit "$overall"