@sienklogic/plan-build-run 2.21.0 → 2.21.2

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 (983) hide show
  1. package/CHANGELOG.md +1331 -299
  2. package/CLAUDE.md +75 -40
  3. package/LICENSE +2 -1
  4. package/README.md +412 -177
  5. package/bin/install.js +2752 -0
  6. package/dashboard/bin/cli.cjs +96 -0
  7. package/dashboard/bin/stop.cjs +129 -0
  8. package/dashboard/eslint.config.js +37 -0
  9. package/dashboard/index.html +20 -0
  10. package/dashboard/package.json +27 -25
  11. package/dashboard/server/index.js +151 -0
  12. package/dashboard/server/lib/frontmatter.js +92 -0
  13. package/dashboard/server/middleware/static.js +35 -0
  14. package/dashboard/server/package.json +16 -0
  15. package/dashboard/server/routes/agents.js +234 -0
  16. package/dashboard/server/routes/config.js +64 -0
  17. package/dashboard/server/routes/health.js +98 -0
  18. package/dashboard/server/routes/incidents.js +78 -0
  19. package/dashboard/server/routes/intel.js +69 -0
  20. package/dashboard/server/routes/memory.js +107 -0
  21. package/dashboard/server/routes/planning.js +234 -0
  22. package/dashboard/server/routes/progress.js +77 -0
  23. package/dashboard/server/routes/projects.js +36 -0
  24. package/dashboard/server/routes/requirements.js +40 -0
  25. package/dashboard/server/routes/roadmap.js +69 -0
  26. package/dashboard/server/routes/sessions.js +70 -0
  27. package/dashboard/server/routes/status.js +25 -0
  28. package/dashboard/server/routes/telemetry.js +233 -0
  29. package/dashboard/server/services/file-watcher.js +105 -0
  30. package/dashboard/server/services/planning-reader.js +727 -0
  31. package/dashboard/server/test/cli.test.js +34 -0
  32. package/dashboard/server/test/frontmatter.test.js +104 -0
  33. package/dashboard/server/test/isolation.test.js +32 -0
  34. package/dashboard/server/test/planning-reader.test.js +151 -0
  35. package/dashboard/server/test/routes.test.js +91 -0
  36. package/dashboard/server/test/ws.test.js +81 -0
  37. package/dashboard/server/ws.js +96 -0
  38. package/dashboard/src/App.jsx +165 -0
  39. package/dashboard/src/components/charts/BudgetBars.jsx +42 -0
  40. package/dashboard/src/components/charts/ContextRadar.jsx +34 -0
  41. package/dashboard/src/components/charts/PhaseDonut.jsx +66 -0
  42. package/dashboard/src/components/charts/SuccessTrend.jsx +45 -0
  43. package/dashboard/src/components/charts/TokenChart.jsx +55 -0
  44. package/dashboard/src/components/charts/index.js +5 -0
  45. package/dashboard/src/components/config/CfgSection.jsx +93 -0
  46. package/dashboard/src/components/layout/Header.jsx +89 -0
  47. package/dashboard/src/components/layout/ProjectSwitcher.jsx +160 -0
  48. package/dashboard/src/components/layout/Sidebar.jsx +161 -0
  49. package/dashboard/src/components/ui/AutoModeBanner.jsx +138 -0
  50. package/dashboard/src/components/ui/BackButton.jsx +27 -0
  51. package/dashboard/src/components/ui/Badge.jsx +27 -0
  52. package/dashboard/src/components/ui/Card.jsx +23 -0
  53. package/dashboard/src/components/ui/ChartTooltip.jsx +48 -0
  54. package/dashboard/src/components/ui/CheckpointBox.jsx +110 -0
  55. package/dashboard/src/components/ui/CodeBlock.jsx +27 -0
  56. package/dashboard/src/components/ui/ConfidenceBadge.jsx +20 -0
  57. package/dashboard/src/components/ui/ConfirmModal.jsx +161 -0
  58. package/dashboard/src/components/ui/ConnectionBanner.jsx +60 -0
  59. package/dashboard/src/components/ui/ErrorBoundary.jsx +106 -0
  60. package/dashboard/src/components/ui/ErrorBox.jsx +107 -0
  61. package/dashboard/src/components/ui/KeyValue.jsx +33 -0
  62. package/dashboard/src/components/ui/LoadingSkeleton.jsx +84 -0
  63. package/dashboard/src/components/ui/MetricCard.jsx +58 -0
  64. package/dashboard/src/components/ui/NextUpBlock.jsx +92 -0
  65. package/dashboard/src/components/ui/NumberInput.jsx +44 -0
  66. package/dashboard/src/components/ui/PBRBanner.jsx +47 -0
  67. package/dashboard/src/components/ui/PipelineView.jsx +130 -0
  68. package/dashboard/src/components/ui/ProgressBar.jsx +28 -0
  69. package/dashboard/src/components/ui/ProgressDisplay.jsx +47 -0
  70. package/dashboard/src/components/ui/QualityGateBadge.jsx +15 -0
  71. package/dashboard/src/components/ui/SectionTitle.jsx +35 -0
  72. package/dashboard/src/components/ui/SelectInput.jsx +45 -0
  73. package/dashboard/src/components/ui/StatusDot.jsx +51 -0
  74. package/dashboard/src/components/ui/StatusSymbol.jsx +49 -0
  75. package/dashboard/src/components/ui/TabBar.jsx +41 -0
  76. package/dashboard/src/components/ui/TextInput.jsx +42 -0
  77. package/dashboard/src/components/ui/Toast.jsx +117 -0
  78. package/dashboard/src/components/ui/Toggle.jsx +70 -0
  79. package/dashboard/src/components/ui/index.js +29 -0
  80. package/dashboard/src/hooks/useDocumentTitle.js +16 -0
  81. package/dashboard/src/hooks/useFetch.js +50 -0
  82. package/dashboard/src/hooks/useToast.jsx +43 -0
  83. package/dashboard/src/hooks/useWebSocket.js +103 -0
  84. package/dashboard/src/lib/api.js +112 -0
  85. package/dashboard/src/lib/configSchema.js +189 -0
  86. package/dashboard/src/lib/constants.js +22 -0
  87. package/dashboard/src/main.jsx +15 -0
  88. package/dashboard/src/pages/AgentsPage.jsx +191 -0
  89. package/dashboard/src/pages/ConfigPage.jsx +298 -0
  90. package/dashboard/src/pages/HooksPage.jsx +412 -0
  91. package/dashboard/src/pages/IncidentsPage.jsx +135 -0
  92. package/dashboard/src/pages/IntelPage.jsx +193 -0
  93. package/dashboard/src/pages/LiveFeed.jsx +274 -0
  94. package/dashboard/src/pages/MemoryPage.jsx +107 -0
  95. package/dashboard/src/pages/OnboardingPage.jsx +117 -0
  96. package/dashboard/src/pages/Overview.jsx +360 -0
  97. package/dashboard/src/pages/PhaseDetailView.jsx +216 -0
  98. package/dashboard/src/pages/PlanningPage.jsx +181 -0
  99. package/dashboard/src/pages/ProgressPage.jsx +249 -0
  100. package/dashboard/src/pages/ResearchPage.jsx +129 -0
  101. package/dashboard/src/pages/RoadmapPage.jsx +251 -0
  102. package/dashboard/src/pages/SessionsPage.jsx +117 -0
  103. package/dashboard/src/pages/Telemetry.jsx +166 -0
  104. package/dashboard/src/pages/planning/DecisionsTab.jsx +153 -0
  105. package/dashboard/src/pages/planning/FilesTab.jsx +420 -0
  106. package/dashboard/src/pages/planning/MilestoneDetail.jsx +319 -0
  107. package/dashboard/src/pages/planning/MilestonesTab.jsx +151 -0
  108. package/dashboard/src/pages/planning/NotesTab.jsx +251 -0
  109. package/dashboard/src/pages/planning/PhasesTab.jsx +218 -0
  110. package/dashboard/src/pages/planning/QuickTab.jsx +50 -0
  111. package/dashboard/src/pages/planning/ResearchTab.jsx +103 -0
  112. package/dashboard/src/pages/planning/TodosTab.jsx +297 -0
  113. package/dashboard/src/theme/ThemeProvider.jsx +38 -0
  114. package/dashboard/src/theme/tokens.js +17 -0
  115. package/dashboard/tests/components/ConfirmModal.test.jsx +179 -0
  116. package/dashboard/tests/components/ConnectionBanner.test.jsx +37 -0
  117. package/dashboard/tests/components/ErrorBoundary.test.jsx +59 -0
  118. package/dashboard/tests/components/LoadingSkeleton.test.jsx +46 -0
  119. package/dashboard/tests/components/ToastContainer.test.jsx +47 -0
  120. package/dashboard/tests/components/Toggle.test.jsx +61 -0
  121. package/dashboard/tests/hooks/useFetch.test.jsx +77 -0
  122. package/dashboard/tests/hooks/useToast.test.jsx +78 -0
  123. package/dashboard/tests/hooks/useWebSocket.test.jsx +128 -0
  124. package/dashboard/tests/pages/ConfigPage.test.jsx +199 -0
  125. package/dashboard/tests/pages/PlanningPage.test.jsx +119 -0
  126. package/dashboard/tests/pages/planning/FilesTab.test.jsx +198 -0
  127. package/dashboard/tests/pages/planning/NotesTab.test.jsx +178 -0
  128. package/dashboard/tests/pages/planning/TodosTab.test.jsx +188 -0
  129. package/dashboard/tests/performance.test.jsx +46 -0
  130. package/dashboard/tests/routes/config.test.js +98 -0
  131. package/dashboard/tests/routes/health.test.js +40 -0
  132. package/dashboard/tests/routes/planning.test.js +112 -0
  133. package/dashboard/tests/routes/roadmap.test.js +91 -0
  134. package/dashboard/tests/routes/status.test.js +131 -0
  135. package/dashboard/tests/server/planning-reader.test.js +153 -0
  136. package/dashboard/tests/setup.js +7 -0
  137. package/dashboard/vite.config.js +41 -0
  138. package/package.json +56 -41
  139. package/plan-build-run/bin/config-schema.json +1298 -0
  140. package/plugins/pbr/.claude-plugin/plugin.json +1 -1
  141. package/plugins/pbr/CLAUDE.md +19 -0
  142. package/plugins/pbr/UI-CONSISTENCY-GAPS.md +1 -1
  143. package/plugins/pbr/agents/advisor-researcher.md +101 -0
  144. package/plugins/pbr/agents/audit.md +207 -89
  145. package/plugins/pbr/agents/codebase-mapper.md +158 -23
  146. package/plugins/pbr/agents/debugger.md +212 -34
  147. package/plugins/pbr/agents/dev-sync.md +206 -0
  148. package/plugins/pbr/agents/executor.md +737 -39
  149. package/plugins/pbr/agents/general.md +71 -6
  150. package/plugins/pbr/agents/integration-checker.md +148 -30
  151. package/plugins/pbr/agents/intel-updater.md +332 -0
  152. package/plugins/pbr/agents/nyquist-auditor.md +254 -0
  153. package/plugins/pbr/agents/plan-checker.md +268 -66
  154. package/plugins/pbr/agents/planner.md +451 -42
  155. package/plugins/pbr/agents/researcher.md +219 -36
  156. package/plugins/pbr/agents/roadmapper.md +398 -0
  157. package/plugins/pbr/agents/synthesizer.md +166 -26
  158. package/plugins/pbr/agents/ui-checker.md +204 -0
  159. package/plugins/pbr/agents/ui-researcher.md +224 -0
  160. package/plugins/pbr/agents/verifier.md +571 -47
  161. package/plugins/pbr/commands/add-phase.md +75 -0
  162. package/plugins/pbr/commands/add-todo.md +8 -0
  163. package/plugins/pbr/commands/audit-fix.md +5 -0
  164. package/plugins/pbr/commands/audit-milestone.md +8 -0
  165. package/plugins/pbr/commands/autonomous.md +5 -0
  166. package/plugins/pbr/commands/backlog.md +6 -0
  167. package/plugins/pbr/commands/check-todos.md +8 -0
  168. package/plugins/pbr/commands/complete-milestone.md +8 -0
  169. package/plugins/pbr/commands/config.md +1 -1
  170. package/plugins/pbr/commands/discuss-phase.md +6 -0
  171. package/plugins/pbr/commands/do.md +5 -0
  172. package/plugins/pbr/commands/execute-phase.md +6 -0
  173. package/plugins/pbr/commands/fast.md +6 -0
  174. package/plugins/pbr/commands/forensics.md +6 -0
  175. package/plugins/pbr/commands/import.md +1 -1
  176. package/plugins/pbr/commands/insert-phase.md +65 -0
  177. package/plugins/pbr/commands/intel.md +5 -0
  178. package/plugins/pbr/commands/join-discord.md +11 -0
  179. package/plugins/pbr/commands/list-phase-assumptions.md +5 -0
  180. package/plugins/pbr/commands/map-codebase.md +6 -0
  181. package/plugins/pbr/commands/milestone-summary.md +6 -0
  182. package/plugins/pbr/commands/new-milestone.md +8 -0
  183. package/plugins/pbr/commands/new-project.md +6 -0
  184. package/plugins/pbr/commands/pause-work.md +5 -0
  185. package/plugins/pbr/commands/plan-milestone-gaps.md +7 -0
  186. package/plugins/pbr/commands/plan-phase.md +6 -0
  187. package/plugins/pbr/commands/plant-seed.md +6 -0
  188. package/plugins/pbr/commands/profile-user.md +5 -0
  189. package/plugins/pbr/commands/profile.md +5 -0
  190. package/plugins/pbr/commands/progress.md +6 -0
  191. package/plugins/pbr/commands/quick.md +1 -1
  192. package/plugins/pbr/commands/reapply-patches.md +47 -0
  193. package/plugins/pbr/commands/release.md +6 -0
  194. package/plugins/pbr/commands/remove-phase.md +66 -0
  195. package/plugins/pbr/commands/research-phase.md +59 -0
  196. package/plugins/pbr/commands/resume-work.md +5 -0
  197. package/plugins/pbr/commands/seed.md +6 -0
  198. package/plugins/pbr/commands/session-report.md +5 -0
  199. package/plugins/pbr/commands/set-profile.md +6 -0
  200. package/plugins/pbr/commands/settings.md +5 -0
  201. package/plugins/pbr/commands/setup.md +1 -1
  202. package/plugins/pbr/commands/ship.md +5 -0
  203. package/plugins/pbr/commands/stats.md +6 -0
  204. package/plugins/pbr/commands/test.md +5 -0
  205. package/plugins/pbr/commands/thread.md +6 -0
  206. package/plugins/pbr/commands/todo.md +1 -1
  207. package/plugins/pbr/commands/ui-phase.md +5 -0
  208. package/plugins/pbr/commands/ui-review.md +5 -0
  209. package/plugins/pbr/commands/undo.md +5 -0
  210. package/plugins/pbr/commands/update.md +37 -0
  211. package/plugins/pbr/commands/validate-phase.md +5 -0
  212. package/plugins/pbr/commands/verify-work.md +6 -0
  213. package/plugins/pbr/dashboard/package-lock.json +6 -0
  214. package/plugins/pbr/dist/architecture-guard.js +76 -0
  215. package/plugins/pbr/dist/audit-dimensions.js +556 -0
  216. package/plugins/pbr/dist/auto-continue.js +277 -0
  217. package/plugins/pbr/dist/block-skill-self-read.js +124 -0
  218. package/plugins/pbr/dist/check-agent-state-write.js +63 -0
  219. package/plugins/pbr/dist/check-config-change.js +213 -0
  220. package/plugins/pbr/dist/check-cross-plugin-sync.js +93 -0
  221. package/plugins/pbr/dist/check-dangerous-commands.js +193 -0
  222. package/plugins/pbr/dist/check-direct-state-write.js +37 -0
  223. package/plugins/pbr/dist/check-doc-sprawl.js +102 -0
  224. package/plugins/pbr/dist/check-phase-boundary.js +191 -0
  225. package/plugins/pbr/dist/check-plan-format.js +227 -0
  226. package/plugins/pbr/dist/check-read-first.js +345 -0
  227. package/plugins/pbr/dist/check-roadmap-sync.js +507 -0
  228. package/plugins/pbr/dist/check-skill-workflow.js +354 -0
  229. package/plugins/pbr/dist/check-state-sync.js +676 -0
  230. package/plugins/pbr/dist/check-subagent-output.js +425 -0
  231. package/plugins/pbr/dist/check-summary-gate.js +188 -0
  232. package/plugins/pbr/dist/context-bridge.js +425 -0
  233. package/plugins/pbr/dist/context-budget-check.js +442 -0
  234. package/plugins/pbr/dist/context-quality.js +271 -0
  235. package/plugins/pbr/dist/enforce-context-budget.js +138 -0
  236. package/plugins/pbr/dist/enforce-pbr-workflow.js +277 -0
  237. package/plugins/pbr/dist/event-handler.js +212 -0
  238. package/plugins/pbr/dist/event-logger.js +125 -0
  239. package/plugins/pbr/dist/feedback-loop.js +155 -0
  240. package/plugins/pbr/dist/graph-update.js +422 -0
  241. package/plugins/pbr/dist/hook-logger.js +114 -0
  242. package/plugins/pbr/dist/hook-server-client.js +361 -0
  243. package/plugins/pbr/dist/hook-server.js +664 -0
  244. package/plugins/pbr/dist/hooks-schema.json +87 -0
  245. package/plugins/pbr/dist/instructions-loaded.js +173 -0
  246. package/plugins/pbr/dist/intercept-plan-mode.js +81 -0
  247. package/plugins/pbr/dist/log-notification.js +131 -0
  248. package/plugins/pbr/dist/log-subagent.js +367 -0
  249. package/plugins/pbr/dist/log-tool-failure.js +140 -0
  250. package/plugins/pbr/dist/milestone-learnings.js +519 -0
  251. package/plugins/pbr/dist/pbr-tools.js +493 -0
  252. package/plugins/pbr/dist/post-bash-triage.js +96 -0
  253. package/plugins/pbr/dist/post-compact.js +135 -0
  254. package/plugins/pbr/dist/post-hoc.js +237 -0
  255. package/plugins/pbr/dist/post-write-dispatch.js +243 -0
  256. package/plugins/pbr/dist/post-write-quality.js +208 -0
  257. package/plugins/pbr/dist/pre-bash-dispatch.js +212 -0
  258. package/plugins/pbr/dist/pre-skill-dispatch.js +114 -0
  259. package/plugins/pbr/dist/pre-task-dispatch.js +269 -0
  260. package/plugins/pbr/dist/pre-write-dispatch.js +234 -0
  261. package/plugins/pbr/dist/progress-tracker.js +173 -0
  262. package/plugins/pbr/dist/prompt-guard.js +114 -0
  263. package/plugins/pbr/dist/prompt-routing.js +209 -0
  264. package/plugins/pbr/dist/quick-status.js +179 -0
  265. package/plugins/pbr/dist/record-incident.js +37 -0
  266. package/plugins/pbr/dist/run-hook.js +132 -0
  267. package/plugins/pbr/dist/session-cleanup.js +653 -0
  268. package/plugins/pbr/dist/session-tracker.js +124 -0
  269. package/plugins/pbr/dist/status-line.js +849 -0
  270. package/plugins/pbr/dist/suggest-compact.js +307 -0
  271. package/plugins/pbr/dist/sync-context-to-claude.js +100 -0
  272. package/plugins/pbr/dist/task-completed.js +206 -0
  273. package/plugins/pbr/dist/track-context-budget.js +432 -0
  274. package/plugins/pbr/dist/track-user-gates.js +88 -0
  275. package/plugins/pbr/dist/trust-tracker.js +193 -0
  276. package/plugins/pbr/dist/validate-commit.js +233 -0
  277. package/plugins/pbr/dist/validate-skill-args.js +222 -0
  278. package/plugins/pbr/dist/validate-task.js +271 -0
  279. package/plugins/pbr/dist/worktree-create.js +144 -0
  280. package/plugins/pbr/dist/worktree-remove.js +147 -0
  281. package/plugins/pbr/hooks/hooks.json +137 -65
  282. package/plugins/pbr/references/agent-contracts.md +39 -8
  283. package/plugins/pbr/references/agent-teams.md +3 -3
  284. package/plugins/pbr/references/archive/checkpoints.md +189 -0
  285. package/plugins/pbr/references/archive/context-quality-tiers.md +45 -0
  286. package/plugins/pbr/references/archive/hook-ordering.md +89 -0
  287. package/plugins/pbr/references/archive/limitations.md +106 -0
  288. package/plugins/pbr/references/archive/pbr-rules.md +194 -0
  289. package/plugins/pbr/references/archive/pbr-tools-cli.md +415 -0
  290. package/plugins/pbr/references/archive/pretooluse-jsonl-behavior.md +58 -0
  291. package/plugins/pbr/references/archive/signal-files.md +41 -0
  292. package/plugins/pbr/references/archive/tmux-setup.md +288 -0
  293. package/plugins/pbr/references/archive/verification-matrix.md +34 -0
  294. package/plugins/pbr/references/archive/verification-patterns.md +277 -0
  295. package/plugins/pbr/references/archive/worktree-sparse-checkout.md +86 -0
  296. package/plugins/pbr/references/assumptions.md +42 -0
  297. package/plugins/pbr/references/checkpoints.md +723 -104
  298. package/plugins/pbr/references/config-reference.md +387 -10
  299. package/plugins/pbr/references/continuation-format.md +1 -0
  300. package/plugins/pbr/references/decimal-phase-calculation.md +65 -0
  301. package/plugins/pbr/references/deviation-rules.md +12 -0
  302. package/plugins/pbr/references/few-shot-examples/audit.md +77 -0
  303. package/plugins/pbr/references/few-shot-examples/check-plan-format.md +172 -0
  304. package/plugins/pbr/references/few-shot-examples/check-subagent-output.md +118 -0
  305. package/plugins/pbr/references/few-shot-examples/integration-checker.md +70 -0
  306. package/plugins/pbr/references/few-shot-examples/nyquist-auditor.md +83 -0
  307. package/plugins/pbr/references/few-shot-examples/plan-checker.md +73 -0
  308. package/plugins/pbr/references/few-shot-examples/ui-checker.md +71 -0
  309. package/plugins/pbr/references/few-shot-examples/verifier.md +109 -0
  310. package/plugins/pbr/references/git-integration.md +110 -27
  311. package/plugins/pbr/references/git-planning-commit.md +35 -0
  312. package/plugins/pbr/references/model-profile-resolution.md +34 -0
  313. package/plugins/pbr/references/model-profiles.md +90 -7
  314. package/plugins/pbr/references/model-selection.md +1 -1
  315. package/plugins/pbr/references/node-repair.md +48 -0
  316. package/plugins/pbr/references/plan-authoring.md +65 -0
  317. package/plugins/pbr/references/plan-format.md +184 -10
  318. package/plugins/pbr/references/questioning.md +138 -49
  319. package/plugins/pbr/references/reading-verification.md +4 -4
  320. package/plugins/pbr/references/tdd.md +263 -0
  321. package/plugins/pbr/references/thinking-models-planning.md +47 -0
  322. package/plugins/pbr/references/thinking-models-verification.md +44 -0
  323. package/plugins/pbr/references/ui-brand.md +449 -0
  324. package/plugins/pbr/references/verification-overrides.md +39 -0
  325. package/plugins/pbr/references/verification-patterns.md +529 -113
  326. package/plugins/pbr/scripts/architecture-guard.js +76 -0
  327. package/plugins/pbr/scripts/audit-checks/behavioral-compliance.js +2098 -0
  328. package/plugins/pbr/scripts/audit-checks/error-analysis.js +989 -0
  329. package/plugins/pbr/scripts/audit-checks/feature-verification.js +723 -0
  330. package/plugins/pbr/scripts/audit-checks/index.js +433 -0
  331. package/plugins/pbr/scripts/audit-checks/infrastructure.js +816 -0
  332. package/plugins/pbr/scripts/audit-checks/quality-metrics.js +455 -0
  333. package/plugins/pbr/scripts/audit-checks/session-quality.js +980 -0
  334. package/plugins/pbr/scripts/audit-checks/si-agent-hook-config-checks.js +396 -0
  335. package/plugins/pbr/scripts/audit-checks/si-cross-cutting-checks.js +272 -0
  336. package/plugins/pbr/scripts/audit-checks/si-skill-checks.js +424 -0
  337. package/plugins/pbr/scripts/audit-checks/workflow-compliance.js +1175 -0
  338. package/plugins/pbr/scripts/audit-dimensions.js +556 -0
  339. package/plugins/pbr/scripts/auto-continue.js +192 -37
  340. package/plugins/pbr/scripts/block-skill-self-read.js +124 -0
  341. package/plugins/pbr/scripts/check-agent-state-write.js +63 -0
  342. package/plugins/pbr/scripts/check-config-change.js +84 -1
  343. package/plugins/pbr/scripts/check-cross-plugin-sync.js +93 -0
  344. package/plugins/pbr/scripts/check-dangerous-commands.js +18 -5
  345. package/plugins/pbr/scripts/check-direct-state-write.js +37 -0
  346. package/plugins/pbr/scripts/check-phase-boundary.js +3 -8
  347. package/plugins/pbr/scripts/check-plan-format.js +153 -278
  348. package/plugins/pbr/scripts/check-read-first.js +345 -0
  349. package/plugins/pbr/scripts/check-roadmap-sync.js +174 -19
  350. package/plugins/pbr/scripts/check-skill-workflow.js +24 -27
  351. package/plugins/pbr/scripts/check-state-sync.js +360 -218
  352. package/plugins/pbr/scripts/check-subagent-output.js +308 -273
  353. package/plugins/pbr/scripts/check-summary-gate.js +5 -15
  354. package/plugins/pbr/scripts/commands/benchmarks.js +195 -0
  355. package/plugins/pbr/scripts/commands/calibrate.js +530 -0
  356. package/plugins/pbr/scripts/commands/config.js +72 -0
  357. package/plugins/pbr/scripts/commands/misc.js +779 -0
  358. package/plugins/pbr/scripts/commands/phase.js +293 -0
  359. package/plugins/pbr/scripts/commands/roadmap.js +75 -0
  360. package/plugins/pbr/scripts/commands/state.js +84 -0
  361. package/plugins/pbr/scripts/commands/stress-test.js +349 -0
  362. package/plugins/pbr/scripts/commands/todo.js +191 -0
  363. package/plugins/pbr/scripts/commands/verify.js +169 -0
  364. package/plugins/pbr/scripts/config-schema.json +1183 -95
  365. package/plugins/pbr/scripts/context-bridge.js +425 -0
  366. package/plugins/pbr/scripts/context-budget-check.js +171 -16
  367. package/plugins/pbr/scripts/context-quality.js +271 -0
  368. package/plugins/pbr/scripts/enforce-context-budget.js +138 -0
  369. package/plugins/pbr/scripts/enforce-pbr-workflow.js +277 -0
  370. package/plugins/pbr/scripts/event-handler.js +137 -87
  371. package/plugins/pbr/scripts/event-logger.js +58 -25
  372. package/plugins/pbr/scripts/feedback-loop.js +155 -0
  373. package/plugins/pbr/scripts/graph-update.js +422 -0
  374. package/plugins/pbr/scripts/hook-logger.js +69 -35
  375. package/plugins/pbr/scripts/hook-server-client.js +361 -0
  376. package/plugins/pbr/scripts/hook-server.js +664 -0
  377. package/plugins/pbr/scripts/hooks-schema.json +12 -5
  378. package/plugins/pbr/scripts/instructions-loaded.js +173 -0
  379. package/plugins/pbr/scripts/intent-router.cjs +147 -0
  380. package/plugins/pbr/scripts/intercept-plan-mode.js +52 -18
  381. package/plugins/pbr/scripts/lib/alternatives.js +203 -0
  382. package/plugins/pbr/scripts/lib/audit.js +65 -0
  383. package/plugins/pbr/scripts/lib/auto-cleanup.js +221 -0
  384. package/plugins/pbr/scripts/lib/auto-verify.js +123 -0
  385. package/plugins/pbr/scripts/lib/benchmark.js +190 -0
  386. package/plugins/pbr/scripts/lib/build.js +719 -0
  387. package/plugins/pbr/scripts/lib/ci-fix-loop.js +228 -0
  388. package/plugins/pbr/scripts/lib/commands.js +483 -0
  389. package/plugins/pbr/scripts/lib/compound.js +222 -0
  390. package/plugins/pbr/scripts/lib/config-cache.js +83 -0
  391. package/plugins/pbr/scripts/lib/config.js +1469 -0
  392. package/plugins/pbr/scripts/lib/context.js +254 -0
  393. package/plugins/pbr/scripts/lib/contextual-help.js +183 -0
  394. package/plugins/pbr/scripts/lib/convention-detector.js +413 -0
  395. package/plugins/pbr/scripts/lib/core.js +1585 -0
  396. package/plugins/pbr/scripts/lib/dashboard-launch.js +364 -0
  397. package/plugins/pbr/scripts/lib/data-hygiene.js +179 -0
  398. package/plugins/pbr/scripts/lib/decision-extraction.js +183 -0
  399. package/plugins/pbr/scripts/lib/decisions.js +194 -0
  400. package/plugins/pbr/scripts/lib/dependency-break.js +147 -0
  401. package/plugins/pbr/scripts/lib/format-validators.js +1049 -0
  402. package/plugins/pbr/scripts/lib/frontmatter.js +302 -0
  403. package/plugins/pbr/scripts/lib/gates/advisories.js +133 -0
  404. package/plugins/pbr/scripts/lib/gates/build-dependency.js +118 -0
  405. package/plugins/pbr/scripts/lib/gates/build-executor.js +106 -0
  406. package/plugins/pbr/scripts/lib/gates/doc-existence.js +46 -0
  407. package/plugins/pbr/scripts/lib/gates/helpers.js +98 -0
  408. package/plugins/pbr/scripts/lib/gates/inline-execution.js +187 -0
  409. package/plugins/pbr/scripts/lib/gates/milestone-complete.js +139 -0
  410. package/plugins/pbr/scripts/lib/gates/milestone-summary.js +121 -0
  411. package/plugins/pbr/scripts/lib/gates/multi-phase-loader.js +149 -0
  412. package/plugins/pbr/scripts/lib/gates/plan-executor.js +36 -0
  413. package/plugins/pbr/scripts/lib/gates/plan-validation.js +115 -0
  414. package/plugins/pbr/scripts/lib/gates/quick-executor.js +78 -0
  415. package/plugins/pbr/scripts/lib/gates/review-planner.js +63 -0
  416. package/plugins/pbr/scripts/lib/gates/review-verifier.js +71 -0
  417. package/plugins/pbr/scripts/lib/gates/rich-agent-context.js +148 -0
  418. package/plugins/pbr/scripts/lib/gates/sprint-preflight.js +30 -0
  419. package/plugins/pbr/scripts/lib/gates/user-confirmation.js +95 -0
  420. package/plugins/pbr/scripts/lib/graph-cli.js +89 -0
  421. package/plugins/pbr/scripts/lib/graph.js +553 -0
  422. package/plugins/pbr/scripts/lib/handoff-validators.js +224 -0
  423. package/plugins/pbr/scripts/lib/health-checks.js +107 -0
  424. package/plugins/pbr/scripts/lib/health-phase06.js +120 -0
  425. package/plugins/pbr/scripts/lib/health.js +132 -0
  426. package/plugins/pbr/scripts/lib/help.js +100 -0
  427. package/plugins/pbr/scripts/lib/history.js +150 -0
  428. package/plugins/pbr/scripts/lib/impact-analysis.js +319 -0
  429. package/plugins/pbr/scripts/lib/incidents.js +190 -0
  430. package/plugins/pbr/scripts/lib/init.js +643 -0
  431. package/plugins/pbr/scripts/lib/insights-parser.js +320 -0
  432. package/plugins/pbr/scripts/lib/intel.js +653 -0
  433. package/plugins/pbr/scripts/lib/learnings.js +511 -0
  434. package/plugins/pbr/scripts/lib/migrate.js +309 -0
  435. package/plugins/pbr/scripts/lib/milestone.js +306 -0
  436. package/plugins/pbr/scripts/lib/msys-path.js +20 -0
  437. package/plugins/pbr/scripts/lib/negative-knowledge.js +194 -0
  438. package/plugins/pbr/scripts/lib/notification-throttle.js +141 -0
  439. package/plugins/pbr/scripts/lib/onboarding-generator.js +288 -0
  440. package/plugins/pbr/scripts/lib/parse-args.js +134 -0
  441. package/plugins/pbr/scripts/lib/pattern-routing.js +55 -0
  442. package/plugins/pbr/scripts/lib/patterns.js +272 -0
  443. package/plugins/pbr/scripts/lib/perf.js +190 -0
  444. package/plugins/pbr/scripts/lib/phase.js +1043 -0
  445. package/plugins/pbr/scripts/lib/pid-lock.js +156 -0
  446. package/plugins/pbr/scripts/lib/post-hoc.js +160 -0
  447. package/plugins/pbr/scripts/lib/pre-commit-checks.js +220 -0
  448. package/plugins/pbr/scripts/lib/pre-research.js +126 -0
  449. package/plugins/pbr/scripts/lib/premature-completion.js +312 -0
  450. package/plugins/pbr/scripts/lib/preview.js +174 -0
  451. package/plugins/pbr/scripts/lib/progress-visualization.js +296 -0
  452. package/plugins/pbr/scripts/lib/quick-init.js +131 -0
  453. package/plugins/pbr/scripts/lib/reference.js +236 -0
  454. package/plugins/pbr/scripts/lib/requirements.js +153 -0
  455. package/plugins/pbr/scripts/lib/resolve-root.js +66 -0
  456. package/plugins/pbr/scripts/lib/reverse-spec.js +259 -0
  457. package/plugins/pbr/scripts/lib/roadmap.js +1089 -0
  458. package/plugins/pbr/scripts/lib/security-scan.js +200 -0
  459. package/plugins/pbr/scripts/lib/session-briefing.js +918 -0
  460. package/plugins/pbr/scripts/lib/skill-section.js +99 -0
  461. package/plugins/pbr/scripts/lib/smart-next-task.js +198 -0
  462. package/plugins/pbr/scripts/lib/snapshot-manager.js +232 -0
  463. package/plugins/pbr/scripts/lib/spec-diff.js +209 -0
  464. package/plugins/pbr/scripts/lib/spec-engine.js +189 -0
  465. package/plugins/pbr/scripts/lib/spot-check.js +539 -0
  466. package/plugins/pbr/scripts/lib/state-queue.js +171 -0
  467. package/plugins/pbr/scripts/lib/state.js +1082 -0
  468. package/plugins/pbr/scripts/lib/status-render.js +511 -0
  469. package/plugins/pbr/scripts/lib/step-verify.js +149 -0
  470. package/plugins/pbr/scripts/lib/subagent-validators.js +1119 -0
  471. package/plugins/pbr/scripts/lib/suggest-next.js +435 -0
  472. package/plugins/pbr/scripts/lib/tech-debt-scanner.js +116 -0
  473. package/plugins/pbr/scripts/lib/templates.js +362 -0
  474. package/plugins/pbr/scripts/lib/test-selection.js +163 -0
  475. package/plugins/pbr/scripts/lib/todo.js +300 -0
  476. package/plugins/pbr/scripts/lib/verify.js +1561 -0
  477. package/plugins/pbr/scripts/log-notification.js +131 -0
  478. package/plugins/pbr/scripts/log-subagent.js +221 -18
  479. package/plugins/pbr/scripts/log-tool-failure.js +60 -8
  480. package/plugins/pbr/scripts/milestone-learnings.js +519 -0
  481. package/plugins/pbr/scripts/package.json +1 -1
  482. package/plugins/pbr/scripts/pbr-tools.js +362 -1247
  483. package/plugins/pbr/scripts/post-bash-triage.js +96 -0
  484. package/plugins/pbr/scripts/post-compact.js +135 -0
  485. package/plugins/pbr/scripts/post-hoc.js +237 -0
  486. package/plugins/pbr/scripts/post-write-dispatch.js +201 -31
  487. package/plugins/pbr/scripts/post-write-quality.js +4 -3
  488. package/plugins/pbr/scripts/pre-bash-dispatch.js +147 -51
  489. package/plugins/pbr/scripts/pre-skill-dispatch.js +114 -0
  490. package/plugins/pbr/scripts/pre-task-dispatch.js +269 -0
  491. package/plugins/pbr/scripts/pre-write-dispatch.js +170 -73
  492. package/plugins/pbr/scripts/progress-tracker.js +121 -324
  493. package/plugins/pbr/scripts/prompt-guard.js +114 -0
  494. package/plugins/pbr/scripts/prompt-routing.js +209 -0
  495. package/plugins/pbr/scripts/quick-status.js +179 -0
  496. package/plugins/pbr/scripts/record-incident.js +37 -0
  497. package/plugins/pbr/scripts/risk-classifier.cjs +123 -0
  498. package/plugins/pbr/scripts/run-hook.js +63 -23
  499. package/plugins/pbr/scripts/session-cleanup.js +428 -29
  500. package/plugins/pbr/scripts/session-tracker.js +124 -0
  501. package/plugins/pbr/scripts/status-line.js +593 -32
  502. package/plugins/pbr/scripts/suggest-compact.js +201 -13
  503. package/plugins/pbr/scripts/sync-context-to-claude.js +100 -0
  504. package/plugins/pbr/scripts/task-completed.js +165 -4
  505. package/plugins/pbr/scripts/test/config.test.js +126 -0
  506. package/plugins/pbr/scripts/test/cross-platform.test.js +120 -0
  507. package/plugins/pbr/scripts/test/fixtures/config.json +20 -0
  508. package/plugins/pbr/scripts/test/fixtures/plan.md +54 -0
  509. package/plugins/pbr/scripts/test/fixtures/project.md +30 -0
  510. package/plugins/pbr/scripts/test/fixtures/roadmap.md +55 -0
  511. package/plugins/pbr/scripts/test/fixtures/state.md +60 -0
  512. package/plugins/pbr/scripts/test/fixtures/summary.md +35 -0
  513. package/plugins/pbr/scripts/test/fixtures.test.js +184 -0
  514. package/plugins/pbr/scripts/test/phase.test.js +142 -0
  515. package/plugins/pbr/scripts/test/roadmap.test.js +96 -0
  516. package/plugins/pbr/scripts/test/state.test.js +155 -0
  517. package/plugins/pbr/scripts/track-context-budget.js +368 -104
  518. package/plugins/pbr/scripts/track-user-gates.js +88 -0
  519. package/plugins/pbr/scripts/trust-tracker.js +193 -0
  520. package/plugins/pbr/scripts/validate-commit.js +59 -26
  521. package/plugins/pbr/scripts/validate-skill-args.js +87 -15
  522. package/plugins/pbr/scripts/validate-task.js +83 -627
  523. package/plugins/pbr/scripts/worktree-create.js +144 -0
  524. package/plugins/pbr/scripts/worktree-remove.js +147 -0
  525. package/plugins/pbr/skills/audit/SKILL.md +195 -24
  526. package/plugins/pbr/skills/audit-fix/SKILL.md +326 -0
  527. package/plugins/pbr/skills/autonomous/SKILL.md +551 -0
  528. package/plugins/pbr/skills/backlog/SKILL.md +56 -0
  529. package/plugins/pbr/skills/begin/SKILL.md +508 -153
  530. package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +1 -2
  531. package/plugins/pbr/skills/begin/templates/config.json.tmpl +419 -36
  532. package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +28 -0
  533. package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +28 -3
  534. package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +33 -5
  535. package/plugins/pbr/skills/build/SKILL.md +1180 -358
  536. package/plugins/pbr/skills/build/templates/continuation-prompt.md.tmpl +26 -0
  537. package/plugins/pbr/skills/build/templates/executor-prompt.md.tmpl +77 -0
  538. package/plugins/pbr/skills/build/templates/inline-verifier-prompt.md.tmpl +33 -0
  539. package/plugins/pbr/skills/build/templates/qa-round-context.md.tmpl +16 -0
  540. package/plugins/pbr/skills/config/SKILL.md +112 -9
  541. package/plugins/pbr/skills/continue/SKILL.md +113 -33
  542. package/plugins/pbr/skills/dashboard/SKILL.md +21 -9
  543. package/plugins/pbr/skills/debug/SKILL.md +70 -12
  544. package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +12 -1
  545. package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +12 -5
  546. package/plugins/pbr/skills/discuss/SKILL.md +205 -24
  547. package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +21 -1
  548. package/plugins/pbr/skills/do/SKILL.md +119 -24
  549. package/plugins/pbr/skills/explore/SKILL.md +95 -20
  550. package/plugins/pbr/skills/fast/SKILL.md +94 -0
  551. package/plugins/pbr/skills/forensics/SKILL.md +144 -0
  552. package/plugins/pbr/skills/health/SKILL.md +35 -117
  553. package/plugins/pbr/skills/help/SKILL.md +83 -123
  554. package/plugins/pbr/skills/import/SKILL.md +332 -13
  555. package/plugins/pbr/skills/intel/SKILL.md +131 -0
  556. package/plugins/pbr/skills/list-phase-assumptions/SKILL.md +231 -0
  557. package/plugins/pbr/skills/milestone/SKILL.md +383 -274
  558. package/plugins/pbr/skills/milestone/templates/audit-output.md.tmpl +76 -0
  559. package/plugins/pbr/skills/milestone/templates/complete-output.md.tmpl +32 -0
  560. package/plugins/pbr/skills/milestone/templates/edge-cases.md +54 -0
  561. package/plugins/pbr/skills/milestone/templates/gaps-output.md.tmpl +25 -0
  562. package/plugins/pbr/skills/milestone/templates/integration-checker-prompt.md.tmpl +25 -0
  563. package/plugins/pbr/skills/milestone/templates/new-output.md.tmpl +29 -0
  564. package/plugins/pbr/skills/milestone-summary/SKILL.md +86 -0
  565. package/plugins/pbr/skills/note/SKILL.md +20 -4
  566. package/plugins/pbr/skills/pause/SKILL.md +54 -14
  567. package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +33 -52
  568. package/plugins/pbr/skills/plan/SKILL.md +526 -280
  569. package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +20 -2
  570. package/plugins/pbr/skills/plan/templates/completion-output.md.tmpl +27 -0
  571. package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +43 -1
  572. package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +21 -5
  573. package/plugins/pbr/skills/profile/SKILL.md +185 -0
  574. package/plugins/pbr/skills/profile-user/SKILL.md +227 -0
  575. package/plugins/pbr/skills/quick/SKILL.md +435 -100
  576. package/plugins/pbr/skills/release/SKILL.md +206 -0
  577. package/plugins/pbr/skills/resume/SKILL.md +170 -46
  578. package/plugins/pbr/skills/review/SKILL.md +233 -165
  579. package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +7 -0
  580. package/plugins/pbr/skills/scan/SKILL.md +152 -106
  581. package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +5 -56
  582. package/plugins/pbr/skills/seed/SKILL.md +87 -0
  583. package/plugins/pbr/skills/session-report/SKILL.md +130 -0
  584. package/plugins/pbr/skills/setup/SKILL.md +150 -202
  585. package/plugins/pbr/skills/shared/agent-context-enrichment.md +21 -0
  586. package/plugins/pbr/skills/shared/agent-type-resolution.md +32 -0
  587. package/plugins/pbr/skills/shared/commit-planning-docs.md +8 -0
  588. package/plugins/pbr/skills/shared/context-budget.md +66 -1
  589. package/plugins/pbr/skills/shared/context-loader-task.md +18 -11
  590. package/plugins/pbr/skills/shared/criterion-writing.md +58 -0
  591. package/plugins/pbr/skills/shared/digest-select.md +2 -2
  592. package/plugins/pbr/skills/shared/domain-probes.md +1 -1
  593. package/plugins/pbr/skills/shared/error-reporting.md +38 -60
  594. package/plugins/pbr/skills/shared/gate-prompts.md +4 -2
  595. package/plugins/pbr/skills/shared/memory-capture.md +48 -0
  596. package/plugins/pbr/skills/shared/phase-argument-parsing.md +4 -4
  597. package/plugins/pbr/skills/shared/revision-loop.md +24 -6
  598. package/plugins/pbr/skills/shared/state-update.md +49 -56
  599. package/plugins/pbr/skills/shared/universal-anti-patterns.md +27 -4
  600. package/plugins/pbr/skills/ship/SKILL.md +155 -0
  601. package/plugins/pbr/skills/stats/SKILL.md +110 -0
  602. package/plugins/pbr/skills/status/SKILL.md +185 -119
  603. package/plugins/pbr/skills/test/SKILL.md +254 -0
  604. package/plugins/pbr/skills/thread/SKILL.md +73 -0
  605. package/plugins/pbr/skills/todo/SKILL.md +28 -72
  606. package/plugins/pbr/skills/ui-phase/SKILL.md +180 -0
  607. package/plugins/pbr/skills/ui-review/SKILL.md +206 -0
  608. package/plugins/pbr/skills/undo/SKILL.md +221 -0
  609. package/plugins/pbr/skills/validate-phase/SKILL.md +362 -0
  610. package/plugins/pbr/templates/CONTEXT.md.tmpl +45 -20
  611. package/plugins/pbr/templates/DISCOVERY.md.tmpl +29 -0
  612. package/plugins/pbr/templates/DISCUSSION-LOG.md.tmpl +49 -0
  613. package/plugins/pbr/templates/HANDOFF.json.tmpl +30 -0
  614. package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +18 -2
  615. package/plugins/pbr/templates/MILESTONE-AUDIT.md.tmpl +44 -0
  616. package/plugins/pbr/templates/PROJECT.md.tmpl +126 -0
  617. package/plugins/pbr/templates/REQUIREMENTS.md.tmpl +96 -0
  618. package/plugins/pbr/templates/RETROSPECTIVE.md.tmpl +43 -0
  619. package/plugins/pbr/templates/ROADMAP.md.tmpl +108 -14
  620. package/plugins/pbr/templates/SUMMARY-complex.md.tmpl +133 -0
  621. package/plugins/pbr/templates/SUMMARY-minimal.md.tmpl +55 -0
  622. package/plugins/pbr/templates/SUMMARY.md.tmpl +21 -0
  623. package/plugins/pbr/templates/UAT.md.tmpl +94 -0
  624. package/plugins/pbr/templates/UI-SPEC.md.tmpl +144 -0
  625. package/plugins/pbr/templates/VALIDATION.md.tmpl +94 -0
  626. package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +54 -13
  627. package/plugins/pbr/templates/project-CONTEXT.md.tmpl +59 -0
  628. package/plugins/pbr/templates/research-outputs/ARCHITECTURE.md.tmpl +91 -0
  629. package/plugins/pbr/templates/research-outputs/FEATURES.md.tmpl +64 -0
  630. package/plugins/pbr/templates/research-outputs/PITFALLS.md.tmpl +50 -0
  631. package/plugins/pbr/templates/research-outputs/STACK.md.tmpl +63 -0
  632. package/plugins/pbr/templates/research-outputs/SUMMARY.md.tmpl +98 -0
  633. package/scripts/build-hooks.js +61 -0
  634. package/scripts/check-ci.js +100 -0
  635. package/scripts/clean-changelog.js +364 -0
  636. package/scripts/generate-derivatives.js +581 -0
  637. package/scripts/posttest.js +93 -0
  638. package/scripts/release.js +262 -0
  639. package/scripts/run-tests.cjs +29 -0
  640. package/scripts/test-wrapper.js +43 -0
  641. package/dashboard/bin/cli.js +0 -25
  642. package/dashboard/public/css/layout.css +0 -704
  643. package/dashboard/public/css/status-colors.css +0 -98
  644. package/dashboard/public/css/tokens.css +0 -59
  645. package/dashboard/public/js/htmx-title.js +0 -5
  646. package/dashboard/public/js/sidebar-toggle.js +0 -34
  647. package/dashboard/public/js/sse-client.js +0 -100
  648. package/dashboard/public/js/theme-toggle.js +0 -46
  649. package/dashboard/src/app.js +0 -91
  650. package/dashboard/src/middleware/current-phase.js +0 -24
  651. package/dashboard/src/middleware/errorHandler.js +0 -52
  652. package/dashboard/src/middleware/notFoundHandler.js +0 -9
  653. package/dashboard/src/repositories/planning.repository.js +0 -130
  654. package/dashboard/src/routes/events.routes.js +0 -45
  655. package/dashboard/src/routes/index.routes.js +0 -35
  656. package/dashboard/src/routes/pages.routes.js +0 -426
  657. package/dashboard/src/server.js +0 -42
  658. package/dashboard/src/services/analytics.service.js +0 -141
  659. package/dashboard/src/services/dashboard.service.js +0 -309
  660. package/dashboard/src/services/milestone.service.js +0 -222
  661. package/dashboard/src/services/notes.service.js +0 -50
  662. package/dashboard/src/services/phase.service.js +0 -232
  663. package/dashboard/src/services/project.service.js +0 -57
  664. package/dashboard/src/services/roadmap.service.js +0 -258
  665. package/dashboard/src/services/sse.service.js +0 -58
  666. package/dashboard/src/services/todo.service.js +0 -272
  667. package/dashboard/src/services/watcher.service.js +0 -48
  668. package/dashboard/src/utils/cache.js +0 -55
  669. package/dashboard/src/views/analytics.ejs +0 -5
  670. package/dashboard/src/views/coming-soon.ejs +0 -11
  671. package/dashboard/src/views/dependencies.ejs +0 -5
  672. package/dashboard/src/views/error.ejs +0 -20
  673. package/dashboard/src/views/index.ejs +0 -5
  674. package/dashboard/src/views/milestone-detail.ejs +0 -5
  675. package/dashboard/src/views/milestones.ejs +0 -5
  676. package/dashboard/src/views/notes.ejs +0 -5
  677. package/dashboard/src/views/partials/analytics-content.ejs +0 -90
  678. package/dashboard/src/views/partials/breadcrumbs.ejs +0 -14
  679. package/dashboard/src/views/partials/dashboard-content.ejs +0 -84
  680. package/dashboard/src/views/partials/dependencies-content.ejs +0 -48
  681. package/dashboard/src/views/partials/empty-state.ejs +0 -7
  682. package/dashboard/src/views/partials/footer.ejs +0 -3
  683. package/dashboard/src/views/partials/head.ejs +0 -30
  684. package/dashboard/src/views/partials/header.ejs +0 -21
  685. package/dashboard/src/views/partials/layout-bottom.ejs +0 -43
  686. package/dashboard/src/views/partials/layout-top.ejs +0 -16
  687. package/dashboard/src/views/partials/milestone-detail-content.ejs +0 -20
  688. package/dashboard/src/views/partials/milestones-content.ejs +0 -88
  689. package/dashboard/src/views/partials/notes-content.ejs +0 -23
  690. package/dashboard/src/views/partials/phase-content.ejs +0 -193
  691. package/dashboard/src/views/partials/phase-doc-content.ejs +0 -38
  692. package/dashboard/src/views/partials/phases-content.ejs +0 -124
  693. package/dashboard/src/views/partials/roadmap-content.ejs +0 -180
  694. package/dashboard/src/views/partials/sidebar.ejs +0 -99
  695. package/dashboard/src/views/partials/todo-create-content.ejs +0 -54
  696. package/dashboard/src/views/partials/todo-detail-content.ejs +0 -42
  697. package/dashboard/src/views/partials/todos-content.ejs +0 -97
  698. package/dashboard/src/views/phase-detail.ejs +0 -5
  699. package/dashboard/src/views/phase-doc.ejs +0 -5
  700. package/dashboard/src/views/phases.ejs +0 -5
  701. package/dashboard/src/views/roadmap.ejs +0 -5
  702. package/dashboard/src/views/todo-create.ejs +0 -5
  703. package/dashboard/src/views/todo-detail.ejs +0 -5
  704. package/dashboard/src/views/todos.ejs +0 -5
  705. package/plugins/copilot-pbr/CHANGELOG.md +0 -19
  706. package/plugins/copilot-pbr/README.md +0 -139
  707. package/plugins/copilot-pbr/agents/audit.agent.md +0 -113
  708. package/plugins/copilot-pbr/agents/codebase-mapper.agent.md +0 -151
  709. package/plugins/copilot-pbr/agents/debugger.agent.md +0 -182
  710. package/plugins/copilot-pbr/agents/executor.agent.md +0 -267
  711. package/plugins/copilot-pbr/agents/general.agent.md +0 -88
  712. package/plugins/copilot-pbr/agents/integration-checker.agent.md +0 -119
  713. package/plugins/copilot-pbr/agents/plan-checker.agent.md +0 -208
  714. package/plugins/copilot-pbr/agents/planner.agent.md +0 -238
  715. package/plugins/copilot-pbr/agents/researcher.agent.md +0 -186
  716. package/plugins/copilot-pbr/agents/synthesizer.agent.md +0 -126
  717. package/plugins/copilot-pbr/agents/verifier.agent.md +0 -228
  718. package/plugins/copilot-pbr/hooks/hooks.json +0 -258
  719. package/plugins/copilot-pbr/plugin.json +0 -30
  720. package/plugins/copilot-pbr/references/agent-anti-patterns.md +0 -25
  721. package/plugins/copilot-pbr/references/agent-contracts.md +0 -297
  722. package/plugins/copilot-pbr/references/agent-interactions.md +0 -135
  723. package/plugins/copilot-pbr/references/agent-teams.md +0 -55
  724. package/plugins/copilot-pbr/references/checkpoints.md +0 -158
  725. package/plugins/copilot-pbr/references/common-bug-patterns.md +0 -14
  726. package/plugins/copilot-pbr/references/config-reference.md +0 -442
  727. package/plugins/copilot-pbr/references/continuation-format.md +0 -213
  728. package/plugins/copilot-pbr/references/deviation-rules.md +0 -113
  729. package/plugins/copilot-pbr/references/git-integration.md +0 -227
  730. package/plugins/copilot-pbr/references/integration-patterns.md +0 -118
  731. package/plugins/copilot-pbr/references/model-profiles.md +0 -100
  732. package/plugins/copilot-pbr/references/model-selection.md +0 -32
  733. package/plugins/copilot-pbr/references/pbr-rules.md +0 -195
  734. package/plugins/copilot-pbr/references/pbr-tools-cli.md +0 -285
  735. package/plugins/copilot-pbr/references/plan-authoring.md +0 -182
  736. package/plugins/copilot-pbr/references/plan-format.md +0 -288
  737. package/plugins/copilot-pbr/references/planning-config.md +0 -214
  738. package/plugins/copilot-pbr/references/questioning.md +0 -215
  739. package/plugins/copilot-pbr/references/reading-verification.md +0 -128
  740. package/plugins/copilot-pbr/references/stub-patterns.md +0 -161
  741. package/plugins/copilot-pbr/references/subagent-coordination.md +0 -120
  742. package/plugins/copilot-pbr/references/ui-formatting.md +0 -444
  743. package/plugins/copilot-pbr/references/verification-patterns.md +0 -199
  744. package/plugins/copilot-pbr/references/wave-execution.md +0 -96
  745. package/plugins/copilot-pbr/rules/pbr-workflow.mdc +0 -48
  746. package/plugins/copilot-pbr/setup.ps1 +0 -93
  747. package/plugins/copilot-pbr/setup.sh +0 -93
  748. package/plugins/copilot-pbr/skills/audit/SKILL.md +0 -330
  749. package/plugins/copilot-pbr/skills/begin/SKILL.md +0 -589
  750. package/plugins/copilot-pbr/skills/begin/templates/PROJECT.md.tmpl +0 -34
  751. package/plugins/copilot-pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +0 -19
  752. package/plugins/copilot-pbr/skills/begin/templates/STATE.md.tmpl +0 -50
  753. package/plugins/copilot-pbr/skills/begin/templates/config.json.tmpl +0 -64
  754. package/plugins/copilot-pbr/skills/begin/templates/researcher-prompt.md.tmpl +0 -20
  755. package/plugins/copilot-pbr/skills/begin/templates/roadmap-prompt.md.tmpl +0 -31
  756. package/plugins/copilot-pbr/skills/begin/templates/synthesis-prompt.md.tmpl +0 -17
  757. package/plugins/copilot-pbr/skills/build/SKILL.md +0 -960
  758. package/plugins/copilot-pbr/skills/config/SKILL.md +0 -250
  759. package/plugins/copilot-pbr/skills/continue/SKILL.md +0 -159
  760. package/plugins/copilot-pbr/skills/dashboard/SKILL.md +0 -43
  761. package/plugins/copilot-pbr/skills/debug/SKILL.md +0 -508
  762. package/plugins/copilot-pbr/skills/debug/templates/continuation-prompt.md.tmpl +0 -17
  763. package/plugins/copilot-pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +0 -28
  764. package/plugins/copilot-pbr/skills/discuss/SKILL.md +0 -353
  765. package/plugins/copilot-pbr/skills/discuss/templates/CONTEXT.md.tmpl +0 -62
  766. package/plugins/copilot-pbr/skills/discuss/templates/decision-categories.md +0 -10
  767. package/plugins/copilot-pbr/skills/do/SKILL.md +0 -66
  768. package/plugins/copilot-pbr/skills/explore/SKILL.md +0 -373
  769. package/plugins/copilot-pbr/skills/health/SKILL.md +0 -283
  770. package/plugins/copilot-pbr/skills/health/templates/check-pattern.md.tmpl +0 -31
  771. package/plugins/copilot-pbr/skills/health/templates/output-format.md.tmpl +0 -64
  772. package/plugins/copilot-pbr/skills/help/SKILL.md +0 -193
  773. package/plugins/copilot-pbr/skills/import/SKILL.md +0 -502
  774. package/plugins/copilot-pbr/skills/milestone/SKILL.md +0 -806
  775. package/plugins/copilot-pbr/skills/milestone/templates/audit-report.md.tmpl +0 -49
  776. package/plugins/copilot-pbr/skills/milestone/templates/stats-file.md.tmpl +0 -31
  777. package/plugins/copilot-pbr/skills/note/SKILL.md +0 -213
  778. package/plugins/copilot-pbr/skills/pause/SKILL.md +0 -247
  779. package/plugins/copilot-pbr/skills/pause/templates/continue-here.md.tmpl +0 -72
  780. package/plugins/copilot-pbr/skills/plan/SKILL.md +0 -662
  781. package/plugins/copilot-pbr/skills/plan/templates/checker-prompt.md.tmpl +0 -22
  782. package/plugins/copilot-pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +0 -33
  783. package/plugins/copilot-pbr/skills/plan/templates/planner-prompt.md.tmpl +0 -39
  784. package/plugins/copilot-pbr/skills/plan/templates/researcher-prompt.md.tmpl +0 -20
  785. package/plugins/copilot-pbr/skills/plan/templates/revision-prompt.md.tmpl +0 -24
  786. package/plugins/copilot-pbr/skills/quick/SKILL.md +0 -376
  787. package/plugins/copilot-pbr/skills/resume/SKILL.md +0 -399
  788. package/plugins/copilot-pbr/skills/review/SKILL.md +0 -653
  789. package/plugins/copilot-pbr/skills/review/templates/debugger-prompt.md.tmpl +0 -61
  790. package/plugins/copilot-pbr/skills/review/templates/gap-planner-prompt.md.tmpl +0 -41
  791. package/plugins/copilot-pbr/skills/review/templates/verifier-prompt.md.tmpl +0 -116
  792. package/plugins/copilot-pbr/skills/scan/SKILL.md +0 -299
  793. package/plugins/copilot-pbr/skills/scan/templates/mapper-prompt.md.tmpl +0 -202
  794. package/plugins/copilot-pbr/skills/setup/SKILL.md +0 -296
  795. package/plugins/copilot-pbr/skills/shared/commit-planning-docs.md +0 -36
  796. package/plugins/copilot-pbr/skills/shared/config-loading.md +0 -103
  797. package/plugins/copilot-pbr/skills/shared/context-budget.md +0 -41
  798. package/plugins/copilot-pbr/skills/shared/context-loader-task.md +0 -87
  799. package/plugins/copilot-pbr/skills/shared/digest-select.md +0 -80
  800. package/plugins/copilot-pbr/skills/shared/domain-probes.md +0 -126
  801. package/plugins/copilot-pbr/skills/shared/error-recovery-strategies.md +0 -51
  802. package/plugins/copilot-pbr/skills/shared/error-reporting.md +0 -81
  803. package/plugins/copilot-pbr/skills/shared/gate-prompts.md +0 -389
  804. package/plugins/copilot-pbr/skills/shared/phase-argument-parsing.md +0 -46
  805. package/plugins/copilot-pbr/skills/shared/progress-display.md +0 -53
  806. package/plugins/copilot-pbr/skills/shared/revision-loop.md +0 -82
  807. package/plugins/copilot-pbr/skills/shared/state-loading.md +0 -63
  808. package/plugins/copilot-pbr/skills/shared/state-update.md +0 -162
  809. package/plugins/copilot-pbr/skills/shared/universal-anti-patterns.md +0 -38
  810. package/plugins/copilot-pbr/skills/status/SKILL.md +0 -362
  811. package/plugins/copilot-pbr/skills/statusline/SKILL.md +0 -149
  812. package/plugins/copilot-pbr/skills/todo/SKILL.md +0 -279
  813. package/plugins/copilot-pbr/templates/CONTEXT.md.tmpl +0 -53
  814. package/plugins/copilot-pbr/templates/INTEGRATION-REPORT.md.tmpl +0 -152
  815. package/plugins/copilot-pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -98
  816. package/plugins/copilot-pbr/templates/ROADMAP.md.tmpl +0 -41
  817. package/plugins/copilot-pbr/templates/SUMMARY.md.tmpl +0 -82
  818. package/plugins/copilot-pbr/templates/VERIFICATION-DETAIL.md.tmpl +0 -117
  819. package/plugins/copilot-pbr/templates/codebase/ARCHITECTURE.md.tmpl +0 -98
  820. package/plugins/copilot-pbr/templates/codebase/CONCERNS.md.tmpl +0 -93
  821. package/plugins/copilot-pbr/templates/codebase/CONVENTIONS.md.tmpl +0 -104
  822. package/plugins/copilot-pbr/templates/codebase/INTEGRATIONS.md.tmpl +0 -78
  823. package/plugins/copilot-pbr/templates/codebase/STACK.md.tmpl +0 -78
  824. package/plugins/copilot-pbr/templates/codebase/STRUCTURE.md.tmpl +0 -80
  825. package/plugins/copilot-pbr/templates/codebase/TESTING.md.tmpl +0 -107
  826. package/plugins/copilot-pbr/templates/continue-here.md.tmpl +0 -74
  827. package/plugins/copilot-pbr/templates/prompt-partials/phase-project-context.md.tmpl +0 -38
  828. package/plugins/copilot-pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  829. package/plugins/copilot-pbr/templates/research/STACK.md.tmpl +0 -71
  830. package/plugins/copilot-pbr/templates/research/SUMMARY.md.tmpl +0 -112
  831. package/plugins/copilot-pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  832. package/plugins/copilot-pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  833. package/plugins/copilot-pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  834. package/plugins/cursor-pbr/.cursor-plugin/plugin.json +0 -32
  835. package/plugins/cursor-pbr/CHANGELOG.md +0 -15
  836. package/plugins/cursor-pbr/README.md +0 -123
  837. package/plugins/cursor-pbr/agents/audit.md +0 -178
  838. package/plugins/cursor-pbr/agents/codebase-mapper.md +0 -150
  839. package/plugins/cursor-pbr/agents/debugger.md +0 -181
  840. package/plugins/cursor-pbr/agents/executor.md +0 -266
  841. package/plugins/cursor-pbr/agents/general.md +0 -87
  842. package/plugins/cursor-pbr/agents/integration-checker.md +0 -118
  843. package/plugins/cursor-pbr/agents/plan-checker.md +0 -207
  844. package/plugins/cursor-pbr/agents/planner.md +0 -237
  845. package/plugins/cursor-pbr/agents/researcher.md +0 -185
  846. package/plugins/cursor-pbr/agents/synthesizer.md +0 -125
  847. package/plugins/cursor-pbr/agents/verifier.md +0 -227
  848. package/plugins/cursor-pbr/assets/.gitkeep +0 -0
  849. package/plugins/cursor-pbr/assets/logo.svg +0 -21
  850. package/plugins/cursor-pbr/hooks/hooks.json +0 -224
  851. package/plugins/cursor-pbr/references/agent-anti-patterns.md +0 -25
  852. package/plugins/cursor-pbr/references/agent-contracts.md +0 -297
  853. package/plugins/cursor-pbr/references/agent-interactions.md +0 -135
  854. package/plugins/cursor-pbr/references/agent-teams.md +0 -55
  855. package/plugins/cursor-pbr/references/checkpoints.md +0 -158
  856. package/plugins/cursor-pbr/references/common-bug-patterns.md +0 -14
  857. package/plugins/cursor-pbr/references/config-reference.md +0 -442
  858. package/plugins/cursor-pbr/references/continuation-format.md +0 -213
  859. package/plugins/cursor-pbr/references/deviation-rules.md +0 -113
  860. package/plugins/cursor-pbr/references/git-integration.md +0 -227
  861. package/plugins/cursor-pbr/references/integration-patterns.md +0 -118
  862. package/plugins/cursor-pbr/references/model-profiles.md +0 -100
  863. package/plugins/cursor-pbr/references/model-selection.md +0 -32
  864. package/plugins/cursor-pbr/references/pbr-rules.md +0 -195
  865. package/plugins/cursor-pbr/references/pbr-tools-cli.md +0 -285
  866. package/plugins/cursor-pbr/references/plan-authoring.md +0 -182
  867. package/plugins/cursor-pbr/references/plan-format.md +0 -288
  868. package/plugins/cursor-pbr/references/planning-config.md +0 -214
  869. package/plugins/cursor-pbr/references/questioning.md +0 -215
  870. package/plugins/cursor-pbr/references/reading-verification.md +0 -128
  871. package/plugins/cursor-pbr/references/stub-patterns.md +0 -161
  872. package/plugins/cursor-pbr/references/subagent-coordination.md +0 -120
  873. package/plugins/cursor-pbr/references/ui-formatting.md +0 -444
  874. package/plugins/cursor-pbr/references/verification-patterns.md +0 -199
  875. package/plugins/cursor-pbr/references/wave-execution.md +0 -96
  876. package/plugins/cursor-pbr/rules/pbr-workflow.mdc +0 -48
  877. package/plugins/cursor-pbr/setup.ps1 +0 -78
  878. package/plugins/cursor-pbr/setup.sh +0 -83
  879. package/plugins/cursor-pbr/skills/audit/SKILL.md +0 -331
  880. package/plugins/cursor-pbr/skills/begin/SKILL.md +0 -589
  881. package/plugins/cursor-pbr/skills/begin/templates/PROJECT.md.tmpl +0 -34
  882. package/plugins/cursor-pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +0 -19
  883. package/plugins/cursor-pbr/skills/begin/templates/STATE.md.tmpl +0 -50
  884. package/plugins/cursor-pbr/skills/begin/templates/config.json.tmpl +0 -64
  885. package/plugins/cursor-pbr/skills/begin/templates/researcher-prompt.md.tmpl +0 -20
  886. package/plugins/cursor-pbr/skills/begin/templates/roadmap-prompt.md.tmpl +0 -31
  887. package/plugins/cursor-pbr/skills/begin/templates/synthesis-prompt.md.tmpl +0 -17
  888. package/plugins/cursor-pbr/skills/build/SKILL.md +0 -961
  889. package/plugins/cursor-pbr/skills/config/SKILL.md +0 -252
  890. package/plugins/cursor-pbr/skills/continue/SKILL.md +0 -159
  891. package/plugins/cursor-pbr/skills/dashboard/SKILL.md +0 -44
  892. package/plugins/cursor-pbr/skills/debug/SKILL.md +0 -512
  893. package/plugins/cursor-pbr/skills/debug/templates/continuation-prompt.md.tmpl +0 -17
  894. package/plugins/cursor-pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +0 -28
  895. package/plugins/cursor-pbr/skills/discuss/SKILL.md +0 -354
  896. package/plugins/cursor-pbr/skills/discuss/templates/CONTEXT.md.tmpl +0 -62
  897. package/plugins/cursor-pbr/skills/discuss/templates/decision-categories.md +0 -10
  898. package/plugins/cursor-pbr/skills/do/SKILL.md +0 -67
  899. package/plugins/cursor-pbr/skills/explore/SKILL.md +0 -376
  900. package/plugins/cursor-pbr/skills/health/SKILL.md +0 -283
  901. package/plugins/cursor-pbr/skills/health/templates/check-pattern.md.tmpl +0 -31
  902. package/plugins/cursor-pbr/skills/health/templates/output-format.md.tmpl +0 -64
  903. package/plugins/cursor-pbr/skills/help/SKILL.md +0 -193
  904. package/plugins/cursor-pbr/skills/import/SKILL.md +0 -505
  905. package/plugins/cursor-pbr/skills/milestone/SKILL.md +0 -807
  906. package/plugins/cursor-pbr/skills/milestone/templates/audit-report.md.tmpl +0 -49
  907. package/plugins/cursor-pbr/skills/milestone/templates/stats-file.md.tmpl +0 -31
  908. package/plugins/cursor-pbr/skills/note/SKILL.md +0 -214
  909. package/plugins/cursor-pbr/skills/pause/SKILL.md +0 -248
  910. package/plugins/cursor-pbr/skills/pause/templates/continue-here.md.tmpl +0 -72
  911. package/plugins/cursor-pbr/skills/plan/SKILL.md +0 -663
  912. package/plugins/cursor-pbr/skills/plan/templates/checker-prompt.md.tmpl +0 -22
  913. package/plugins/cursor-pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +0 -33
  914. package/plugins/cursor-pbr/skills/plan/templates/planner-prompt.md.tmpl +0 -39
  915. package/plugins/cursor-pbr/skills/plan/templates/researcher-prompt.md.tmpl +0 -20
  916. package/plugins/cursor-pbr/skills/plan/templates/revision-prompt.md.tmpl +0 -24
  917. package/plugins/cursor-pbr/skills/quick/SKILL.md +0 -376
  918. package/plugins/cursor-pbr/skills/resume/SKILL.md +0 -399
  919. package/plugins/cursor-pbr/skills/review/SKILL.md +0 -654
  920. package/plugins/cursor-pbr/skills/review/templates/debugger-prompt.md.tmpl +0 -61
  921. package/plugins/cursor-pbr/skills/review/templates/gap-planner-prompt.md.tmpl +0 -41
  922. package/plugins/cursor-pbr/skills/review/templates/verifier-prompt.md.tmpl +0 -116
  923. package/plugins/cursor-pbr/skills/scan/SKILL.md +0 -300
  924. package/plugins/cursor-pbr/skills/scan/templates/mapper-prompt.md.tmpl +0 -202
  925. package/plugins/cursor-pbr/skills/setup/SKILL.md +0 -296
  926. package/plugins/cursor-pbr/skills/shared/commit-planning-docs.md +0 -36
  927. package/plugins/cursor-pbr/skills/shared/config-loading.md +0 -103
  928. package/plugins/cursor-pbr/skills/shared/context-budget.md +0 -41
  929. package/plugins/cursor-pbr/skills/shared/context-loader-task.md +0 -87
  930. package/plugins/cursor-pbr/skills/shared/digest-select.md +0 -80
  931. package/plugins/cursor-pbr/skills/shared/domain-probes.md +0 -126
  932. package/plugins/cursor-pbr/skills/shared/error-recovery-strategies.md +0 -51
  933. package/plugins/cursor-pbr/skills/shared/error-reporting.md +0 -81
  934. package/plugins/cursor-pbr/skills/shared/gate-prompts.md +0 -389
  935. package/plugins/cursor-pbr/skills/shared/phase-argument-parsing.md +0 -46
  936. package/plugins/cursor-pbr/skills/shared/progress-display.md +0 -53
  937. package/plugins/cursor-pbr/skills/shared/revision-loop.md +0 -82
  938. package/plugins/cursor-pbr/skills/shared/state-loading.md +0 -63
  939. package/plugins/cursor-pbr/skills/shared/state-update.md +0 -162
  940. package/plugins/cursor-pbr/skills/shared/universal-anti-patterns.md +0 -38
  941. package/plugins/cursor-pbr/skills/status/SKILL.md +0 -362
  942. package/plugins/cursor-pbr/skills/statusline/SKILL.md +0 -150
  943. package/plugins/cursor-pbr/skills/todo/SKILL.md +0 -280
  944. package/plugins/cursor-pbr/templates/CONTEXT.md.tmpl +0 -53
  945. package/plugins/cursor-pbr/templates/INTEGRATION-REPORT.md.tmpl +0 -152
  946. package/plugins/cursor-pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -98
  947. package/plugins/cursor-pbr/templates/ROADMAP.md.tmpl +0 -41
  948. package/plugins/cursor-pbr/templates/SUMMARY.md.tmpl +0 -82
  949. package/plugins/cursor-pbr/templates/VERIFICATION-DETAIL.md.tmpl +0 -117
  950. package/plugins/cursor-pbr/templates/codebase/ARCHITECTURE.md.tmpl +0 -98
  951. package/plugins/cursor-pbr/templates/codebase/CONCERNS.md.tmpl +0 -93
  952. package/plugins/cursor-pbr/templates/codebase/CONVENTIONS.md.tmpl +0 -104
  953. package/plugins/cursor-pbr/templates/codebase/INTEGRATIONS.md.tmpl +0 -78
  954. package/plugins/cursor-pbr/templates/codebase/STACK.md.tmpl +0 -78
  955. package/plugins/cursor-pbr/templates/codebase/STRUCTURE.md.tmpl +0 -80
  956. package/plugins/cursor-pbr/templates/codebase/TESTING.md.tmpl +0 -107
  957. package/plugins/cursor-pbr/templates/continue-here.md.tmpl +0 -74
  958. package/plugins/cursor-pbr/templates/prompt-partials/phase-project-context.md.tmpl +0 -38
  959. package/plugins/cursor-pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  960. package/plugins/cursor-pbr/templates/research/STACK.md.tmpl +0 -71
  961. package/plugins/cursor-pbr/templates/research/SUMMARY.md.tmpl +0 -112
  962. package/plugins/cursor-pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  963. package/plugins/cursor-pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  964. package/plugins/cursor-pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  965. package/plugins/pbr/references/agent-interactions.md +0 -134
  966. package/plugins/pbr/references/pbr-rules.md +0 -194
  967. package/plugins/pbr/references/pbr-tools-cli.md +0 -285
  968. package/plugins/pbr/references/planning-config.md +0 -213
  969. package/plugins/pbr/references/subagent-coordination.md +0 -119
  970. package/plugins/pbr/references/ui-formatting.md +0 -444
  971. package/plugins/pbr/scripts/validate-plugin-structure.js +0 -183
  972. package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +0 -48
  973. package/plugins/pbr/skills/shared/error-recovery-strategies.md +0 -51
  974. package/plugins/pbr/skills/shared/progress-display.md +0 -53
  975. package/plugins/pbr/skills/shared/state-loading.md +0 -62
  976. package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -97
  977. package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  978. package/plugins/pbr/templates/research/STACK.md.tmpl +0 -71
  979. package/plugins/pbr/templates/research/SUMMARY.md.tmpl +0 -112
  980. package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  981. package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  982. package/plugins/pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  983. /package/plugins/pbr/references/{agent-anti-patterns.md → archive/agent-anti-patterns.md} +0 -0
@@ -2,22 +2,31 @@
2
2
  name: build
3
3
  description: "Execute all plans in a phase. Spawns agents to build in parallel, commits atomically."
4
4
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Task, AskUserQuestion, Skill
5
- argument-hint: "<phase-number> [--gaps-only] [--team]"
5
+ argument-hint: "<phase-number> [--gaps-only] [--team] [--model <model>] [--auto]"
6
6
  ---
7
7
 
8
8
  **STOP — DO NOT READ THIS FILE. You are already reading it. This prompt was injected into your context by Claude Code's plugin system. Using the Read tool on this SKILL.md file wastes ~7,600 tokens. Begin executing Step 1 immediately.**
9
9
 
10
- # /pbr:build — Phase Execution
10
+ # /pbr:execute-phase — Phase Execution
11
11
 
12
- You are the orchestrator for `/pbr:build`. This skill executes all plans in a phase by spawning executor agents. Plans are grouped by wave and executed in order — independent plans run in parallel, dependent plans wait. Your job is to stay lean, delegate ALL building work to Task() subagents, and keep the user's main context window clean.
12
+ **References:** `@references/questioning.md`, `@references/ui-brand.md`
13
+
14
+ You are the orchestrator for `/pbr:execute-phase`. This skill executes all plans in a phase by spawning executor agents. Plans are grouped by wave and executed in order — independent plans run in parallel, dependent plans wait. Your job is to stay lean, delegate ALL building work to Task() subagents, and keep the user's main context window clean.
13
15
 
14
16
  ## Context Budget
15
17
 
16
18
  Reference: `skills/shared/context-budget.md` for the universal orchestrator rules.
19
+ Reference: `skills/shared/agent-type-resolution.md` for agent type fallback when spawning Task() subagents.
20
+
21
+ Reference: `skills/shared/agent-context-enrichment.md` for enriching executor spawn prompts with project context.
22
+ Reference: `references/deviation-rules.md` for the deviation taxonomy (Rules 1-4) used by executors to classify and handle unexpected issues.
23
+ Reference: `references/node-repair.md` for the node repair taxonomy (RETRY, DECOMPOSE, PRUNE, ESCALATE) used by executors to handle failed tasks.
17
24
 
18
25
  Additionally for this skill:
19
- - **Minimize** reading executor output — read only SUMMARY.md frontmatter, not full content
26
+ - **Minimize** reading executor output — read only SUMMARY.md frontmatter, not full content. Exception: if `context_window_tokens` in `.planning/config.json` is >= 500000, reading full SUMMARY.md bodies is permitted when semantic content is needed for inline decisions.
20
27
  - **Delegate** all building work to executor subagents — the orchestrator routes, it doesn't build
28
+ - **Lazy-load steps**: Instead of reading ahead, fetch the next step's instructions on demand:
29
+ `node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js skill-section build "step-6"` → returns that step's content as JSON. Use this when context budget is DEGRADING.
21
30
 
22
31
  ## Step 0 — Immediate Output
23
32
 
@@ -31,6 +40,22 @@ Additionally for this skill:
31
40
 
32
41
  Where `{N}` is the phase number from `$ARGUMENTS`. Then proceed to Step 1.
33
42
 
43
+ ## Multi-Session Sync
44
+
45
+ Before any phase-modifying operations (spawning executors, writing SUMMARY.md, updating STATE.md/ROADMAP.md), acquire a claim:
46
+
47
+ ```
48
+ acquireClaim(phaseDir, sessionId)
49
+ ```
50
+
51
+ If the claim fails (another session owns this phase), display: "Another session owns this phase. Use `/pbr:progress` to see active claims."
52
+
53
+ On completion or error (including all exit paths), release the claim:
54
+
55
+ ```
56
+ releaseClaim(phaseDir, sessionId)
57
+ ```
58
+
34
59
  ## Prerequisites
35
60
 
36
61
  - `.planning/config.json` exists
@@ -48,7 +73,57 @@ Parse `$ARGUMENTS` according to `skills/shared/phase-argument-parsing.md`.
48
73
  | `3` | Build phase 3 |
49
74
  | `3 --gaps-only` | Build only gap-closure plans in phase 3 |
50
75
  | `3 --team` | Use Agent Teams for complex inter-agent coordination |
76
+ | `3 --model opus` | Use opus for all executor spawns in phase 3 (overrides config and adaptive selection) |
77
+ | `3 --auto` | Build phase 3 with auto mode — suppress confirmation gates, auto-advance on success |
51
78
  | (no number) | Use current phase from STATE.md |
79
+ | `3 --preview` | Preview what build would do for phase 3 without executing |
80
+ | `3 --cross-check` | Before spawning executors for phase 3, check current plan files_modified against prior-phase provides for conflicts |
81
+
82
+ ---
83
+
84
+ ### --preview mode
85
+
86
+ If `--preview` is present in `$ARGUMENTS`:
87
+
88
+ 1. Extract the phase slug from `$ARGUMENTS` (use the phase number to look up the slug, or pass the number directly — the CLI accepts partial slug matches).
89
+ 2. Run:
90
+
91
+ ```bash
92
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js build-preview {phase-slug}
93
+ ```
94
+
95
+ Capture the JSON output.
96
+ 3. Render the following preview document (do NOT proceed to Step 2):
97
+
98
+ ```
99
+ ╔══════════════════════════════════════════════════════════════╗
100
+ ║ DRY RUN — /pbr:execute-phase {N} --preview ║
101
+ ║ No executor agents will be spawned ║
102
+ ╚══════════════════════════════════════════════════════════════╝
103
+
104
+ PHASE: {phase}
105
+
106
+ ## Plans
107
+ {for each plan: - {id} (wave {wave}, {task_count} tasks)}
108
+
109
+ ## Wave Structure
110
+ {for each wave: Wave {wave}: {plan IDs} [parallel | sequential]}
111
+
112
+ ## Files That Would Be Modified
113
+ {for each file in files_affected: - {file}}
114
+ (Total: {count} files)
115
+
116
+ ## Estimated Agent Spawns
117
+ {agent_count} executor task(s)
118
+
119
+ ## Critical Path
120
+ {critical_path joined with " → "}
121
+
122
+ ## Dependency Chain
123
+ {for each entry in dependency_chain: - {id} (wave {wave}) depends on: {depends_on or "none"}}
124
+ ```
125
+
126
+ 4. **STOP** — do not proceed to Step 2.
52
127
 
53
128
  ---
54
129
 
@@ -63,48 +138,68 @@ Execute these steps in order.
63
138
  Reference: `skills/shared/config-loading.md` for the tooling shortcut and config field reference.
64
139
 
65
140
  1. Parse `$ARGUMENTS` for phase number and flags
66
- 2. Read `.planning/config.json` for parallelization, model, and gate settings (see config-loading.md for field reference)
141
+ - If `--auto` is present in `$ARGUMENTS`: set `auto_mode = true`. Log: "Auto mode enabled — suppressing confirmation gates"
142
+ 2. **CRITICAL — Init first.** Run the init CLI call as the FIRST action after argument parsing:
143
+ ```bash
144
+ node plugins/pbr/scripts/pbr-tools.js init execute-phase {N}
145
+ ```
146
+ Store the JSON result as `blob`. All downstream steps MUST reference `blob` fields instead of re-reading files. Key fields: `blob.phase.dir`, `blob.phase.status`, `blob.config.depth`, `blob.plans`, `blob.waves`, `blob.executor_model`, `blob.drift`.
67
147
  3. Resolve depth profile: run `node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js config resolve-depth` to get the effective feature/gate settings for the current depth. Store the result for use in later gating decisions.
68
- 4. **CRITICAL: Write .active-skill NOW.** Write `.planning/.active-skill` with the content `build` (registers with workflow enforcement hook)
69
- 5. Validate:
70
- - Phase directory exists at `.planning/phases/{NN}-{slug}/`
71
- - PLAN.md files exist in the directory
72
- - Prior phase dependencies are met (check for SUMMARY.md files in dependency phases)
73
- 6. If no phase number given, read current phase from `.planning/STATE.md`
74
- - `config.models.complexity_map` — adaptive model mapping (default: `{ simple: "haiku", medium: "sonnet", complex: "inherit" }`)
75
- 7. If `gates.confirm_execute` is true: use AskUserQuestion (pattern: yes-no from `skills/shared/gate-prompts.md`):
148
+ 4. **CRITICAL (hook-enforced): Write .active-skill NOW.** Write `.planning/.active-skill` with the content `build` (registers with workflow enforcement hook)
149
+ 5. **Pre-build dependency validation (consolidated check):**
150
+ Run all three checks before spawning any executors. Use `blob.phase.dir` for the phase directory path and `blob.plans` for plan metadata:
151
+
152
+ a. **Phase artifact check:** `blob.phase.dir` is set and `blob.plans` is non-empty (PLAN.md files are present)
153
+ b. **Dependency SUMMARY check:** All phases listed in `depends_on` for each plan in `blob.plans` have a SUMMARY.md file (i.e., they have been built). If any dependency is unbuilt, display:
154
+ ```
155
+ BLOCKED: Plan {plan_id} depends on phase {dep_phase} which has not been built yet.
156
+ Run `/pbr:build {dep_phase}` first.
157
+ ```
158
+ and stop.
159
+ c. **Staleness / cross-check (optional):** If `--cross-check` flag is present, compare each plan's `files_modified` list against prior-phase `provides` for conflicts (see --cross-check section above for full logic). Without the flag, skip this check.
160
+
161
+ d. **Plan validation check:** Verify `.plan-check.json` exists in the phase directory and has `status: "passed"`. If missing or failed:
162
+ - Display: `BLOCKED: Phase {N} plans have not passed validation. Run /pbr:plan-phase {N} to validate plans.`
163
+ - Stop execution.
164
+ Note: This is an early-exit check complementing the validate-task.js hook gate. The hook gate catches executor spawns; this skill-level check catches the entire build flow before any executor is spawned.
165
+
166
+ All four sub-checks (a, b, c, d) are part of the same pre-build gate. Stop execution if (a), (b), or (d) fail. Proceed after (c) even if conflicts are acknowledged.
167
+ 6. If no phase number given, use `blob.phase.number` (already resolved from STATE.md by init)
168
+ - `blob.config.models.complexity_map` — adaptive model mapping (default: `{ simple: "haiku", medium: "sonnet", complex: "inherit" }`)
169
+ 7. If `gates.confirm_execute` is true AND `auto_mode` is NOT true:
170
+ **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
171
+ Use AskUserQuestion (pattern: yes-no from `skills/shared/gate-prompts.md`):
76
172
  question: "Ready to build Phase {N}? This will execute {count} plans."
77
173
  header: "Build?"
78
174
  options:
79
175
  - label: "Yes" description: "Start building Phase {N}"
80
176
  - label: "No" description: "Cancel — review plans first"
81
- If "No" or "Other": stop and suggest `/pbr:plan {N}` to review plans
82
- 8. If `git.branching` is `phase`: create and switch to branch `plan-build-run/phase-{NN}-{name}` before any build work begins
177
+ If "No" or "Other": stop and suggest `/pbr:plan-phase {N}` to review plans
178
+ **Skip if:** `auto_mode` is true auto-proceed as if user selected "Yes"
179
+ 8. **Git branching (config-gated):**
180
+ Read `git.branching` from config (values: none, phase, milestone, disabled).
181
+ - If `none` or `disabled`: skip branch operations entirely (current default behavior)
182
+ - If `phase`:
183
+ a. Determine branch name: `pbr/phase-{NN}-{name}` (e.g., `pbr/phase-03-auth`)
184
+ b. Check if branch already exists: `git branch --list {branch-name}`
185
+ c. If branch exists (resume scenario): `git switch {branch-name}` — log "Resuming on existing phase branch"
186
+ d. If branch does not exist: `git switch -c {branch-name}` — log "Created phase branch: {branch-name}"
187
+ - If `milestone`:
188
+ a. Determine branch name: `pbr/milestone-v{version}` where {version} comes from the active milestone in ROADMAP.md
189
+ b. Check if branch already exists: `git branch --list {branch-name}`
190
+ c. If branch exists: `git switch {branch-name}` — log "Switching to milestone branch"
191
+ d. If branch does not exist: `git switch -c {branch-name}` — log "Created milestone branch: {branch-name}"
192
+ e. Note: milestone branch persists across all phases in the milestone; it is merged by /pbr:milestone complete
83
193
  9. Record the current HEAD commit SHA: `git rev-parse HEAD` — store as `pre_build_commit` for use in Step 8-pre-c (codebase map update)
84
194
 
85
- **Staleness check (dependency fingerprints):**
86
- After validating prerequisites, check plan staleness:
87
- 1. Read each PLAN.md file's `dependency_fingerprints` field (if present)
88
- 2. For each fingerprinted dependency, check the current SUMMARY.md file (length + modification time)
89
- 3. If any fingerprint doesn't match: the dependency phase was re-built after this plan was created
90
- 4. Use AskUserQuestion (pattern: stale-continue from `skills/shared/gate-prompts.md`):
91
- question: "Plan {plan_id} may be stale — dependency phase {M} was re-built after this plan was created."
92
- header: "Stale"
93
- options:
94
- - label: "Continue anyway" description: "Proceed with existing plans (may still be valid)"
95
- - label: "Re-plan" description: "Stop and re-plan with `/pbr:plan {N}` (recommended)"
96
- If "Re-plan" or "Other": stop and suggest `/pbr:plan {N}`
97
- If "Continue anyway": proceed with existing plans
98
- 10. If plans have no `dependency_fingerprints` field, fall back to timestamp-based staleness detection:
99
- a. Read `.planning/ROADMAP.md` and identify the current phase's dependencies (the `depends_on` field)
100
- b. For each dependency phase, find its phase directory under `.planning/phases/`
101
- c. Check if any SUMMARY.md files in the dependency phase directory have a modification timestamp newer than the current phase's PLAN.md files
102
- d. If any upstream dependency was modified after planning, display a warning (do NOT block):
103
- ```
104
- Warning: Phase {dep_phase} (dependency of Phase {N}) was modified after this phase was planned.
105
- Plans may be based on outdated assumptions. Consider re-planning with `/pbr:plan {N}`.
106
- ```
107
- e. This is advisory only — continue with the build after displaying the warning
195
+ **Staleness check (from init blob):**
196
+ After validating prerequisites, check `blob.drift` for plan staleness. The drift field contains `{ stale: bool, plans: [{id, stale, reason}] }`. If `stale: true` for any plan:
197
+ **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
198
+ - Use AskUserQuestion (pattern: stale-continue from `skills/shared/gate-prompts.md`):
199
+ question: "Plan {plan_id} may be stale {reason}"
200
+ options: ["Continue anyway", "Re-plan with /pbr:plan-phase {N}"]
201
+ - If "Re-plan": stop. If "Continue anyway": proceed.
202
+ If `stale: false`: proceed silently.
108
203
 
109
204
  **Validation errors — use branded error boxes:**
110
205
 
@@ -116,47 +211,48 @@ If no plans found:
116
211
 
117
212
  Phase {N} has no plans.
118
213
 
119
- **To fix:** Run `/pbr:plan {N}` first.
214
+ **To fix:** Run `/pbr:plan-phase {N}` first.
120
215
  ```
121
216
 
122
- If dependencies incomplete:
123
- ```
124
- ╔══════════════════════════════════════════════════════════════╗
125
- ║ ERROR ║
126
- ╚══════════════════════════════════════════════════════════════╝
217
+ If dependencies incomplete, use conversational recovery:
127
218
 
128
- Phase {N} depends on Phase {M}, which is not complete.
219
+ 1. Run: `node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js suggest-alternatives missing-prereq {dependency-phase-slug}`
220
+ 2. Parse the JSON response to get `existing_summaries`, `missing_summaries`, and `suggested_action`.
221
+ 3. Display what summaries exist and what is still missing.
222
+ 4. **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
223
+ Use AskUserQuestion (pattern: yes-no from `skills/shared/gate-prompts.md`) to offer:
224
+ - "Build {dependency-phase} first" — stop and show: `/pbr:execute-phase {dependency-phase}`
225
+ - "Continue anyway (skip dependency check)" — proceed with build, note unmet deps in output
129
226
 
130
- **To fix:** Build Phase {M} first with `/pbr:build {M}`.
131
- ```
227
+ If config validation fails for a specific field, use conversational recovery:
228
+
229
+ 1. Run: `node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js suggest-alternatives config-invalid {field} {value}`
230
+ 2. Parse the JSON response to get `valid_values` and `suggested_fix`.
231
+ 3. Display the invalid field, its current value, and the valid options.
232
+ 4. **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
233
+ Use AskUserQuestion to offer: "Fix config.json now, or continue with current value?"
234
+ - If "Fix now": stop and display the `suggested_fix` instruction.
235
+ - If "Continue": proceed with default value for that field.
132
236
 
133
237
  ---
134
238
 
135
239
  ### Step 2: Load Config (inline)
136
240
 
137
- Read configuration values needed for execution. See `skills/shared/config-loading.md` for the full field reference; build uses: `parallelization.*`, `features.goal_verification`, `features.inline_verify`, `features.atomic_commits`, `features.auto_continue`, `features.auto_advance`, `planning.commit_docs`, `git.commit_format`, `git.branching`.
241
+ From the init `blob` captured in Step 1, extract the configuration fields needed for execution: `blob.config.parallelization`, `blob.config.features.goal_verification`, `blob.config.features.inline_verify`, `blob.config.features.atomic_commits`, `blob.config.features.auto_continue`, `blob.config.features.auto_advance`, `blob.config.planning.commit_docs`, `blob.config.git.commit_format`, `blob.config.git.branching`. See `skills/shared/config-loading.md` for the full field reference.
138
242
 
139
243
  ---
140
244
 
141
245
  ### Step 3: Discover Plans (inline)
142
246
 
143
- **Tooling shortcut**: Instead of manually parsing each PLAN.md frontmatter, run:
144
- ```bash
145
- node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js plan-index <phase>
146
- ```
147
- This returns a JSON object with `plans` (array with plan_id, wave, depends_on, autonomous, must_haves_count per plan) and `waves` (grouped by wave). Falls back to manual parsing if unavailable.
247
+ Use `blob.plans` and `blob.waves` from the init blob (Step 1). These contain the plan index with plan_id, wave, depends_on, autonomous, and must_haves_count per plan, already grouped by wave. No additional file reads or CLI calls needed.
148
248
 
149
- 1. List all files matching `.planning/phases/{NN}-{slug}/*-PLAN.md`
150
- 2. If `--gaps-only` flag: filter to only plans with `gap_closure: true` in frontmatter
151
- 3. Read each plan file's YAML frontmatter to extract:
152
- - Plan ID
153
- - Wave number
154
- - Dependencies (depends_on)
155
- - Whether autonomous
156
- 4. Sort plans by plan number
249
+ 1. Use `blob.plans` array for the plan list
250
+ 2. If `--gaps-only` flag: filter `blob.plans` to only plans with `gap_closure: true`
251
+ 3. Plans are already sorted by plan number in the blob
252
+ 4. Use `blob.waves` for wave grouping
157
253
 
158
254
  **If no plans match filters:**
159
- - With `--gaps-only`: "No gap-closure plans found. Run `/pbr:plan {N} --gaps` first."
255
+ - With `--gaps-only`: "No gap-closure plans found. Run `/pbr:plan-phase {N} --gaps` first."
160
256
  - Without filter: "No plans found in phase directory."
161
257
 
162
258
  ---
@@ -174,6 +270,7 @@ Check for existing SUMMARY.md files from previous runs (crash recovery):
174
270
  3. Build the skip list of plans to exclude
175
271
 
176
272
  **If all plans already have completed SUMMARYs:**
273
+ **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
177
274
  Use AskUserQuestion (pattern: yes-no from `skills/shared/gate-prompts.md`):
178
275
  question: "Phase {N} has already been built. All plans have completed SUMMARYs. Re-build from scratch?"
179
276
  header: "Re-build?"
@@ -181,13 +278,15 @@ Use AskUserQuestion (pattern: yes-no from `skills/shared/gate-prompts.md`):
181
278
  - label: "Yes" description: "Delete existing SUMMARYs and re-execute all plans"
182
279
  - label: "No" description: "Keep existing build — review instead"
183
280
  - If "Yes": delete SUMMARY files and proceed
184
- - If "No" or "Other": suggest `/pbr:review {N}`
281
+ - If "No" or "Other": suggest `/pbr:verify-work {N}`
185
282
 
186
283
  ---
187
284
 
188
285
  ### Step 5: Extract Waves (inline)
189
286
 
190
- Group plans by wave number from their frontmatter. See `references/wave-execution.md` for the full wave execution model (parallelization, git lock handling, checkpoint manifests).
287
+ Use `blob.waves` from the init blob (Step 1) which already groups plans by wave number. Do NOT re-parse plan frontmatter for wave extraction. If `blob.waves` is missing, error do not fall back to manual parsing.
288
+
289
+ See `references/wave-execution.md` for the full wave execution model (parallelization, git lock handling, checkpoint manifests).
191
290
 
192
291
  Validate wave consistency:
193
292
  - Wave 1 plans must have `depends_on: []`
@@ -196,32 +295,209 @@ Validate wave consistency:
196
295
 
197
296
  ---
198
297
 
298
+ ### Step 5a: Pre-Spawn Intra-Phase Conflict Detection (conditional)
299
+
300
+ **Trigger:** Only run if `context_window_tokens` in `.planning/config.json` is >= 500000.
301
+
302
+ If the condition is false, skip this step entirely and proceed to Step 5c.
303
+
304
+ **Purpose:** Before spawning any executor, detect whether plans within this phase conflict with each other — specifically plans that are assigned to the same wave (and would run in parallel) but modify the same files or share import graph dependencies without an explicit `depends_on` relationship. This prevents silent data-race failures where two parallel executors clobber each other's writes.
305
+
306
+ **Procedure:**
307
+
308
+ 1. Use the `plan-index` output already collected in Step 3. No additional file reads are needed. Extract from each plan:
309
+ - `plan_id`
310
+ - `wave`
311
+ - `depends_on` list
312
+ - `files_modified` list
313
+
314
+ 2. **Same-file conflict detection:** For every pair of plans in the same wave, compute the intersection of their `files_modified` lists. A non-empty intersection is a **direct conflict** — both plans write the same file in parallel.
315
+
316
+ 3. **Import graph overlap detection:** For every pair of plans in the same wave that do NOT share a direct file conflict, check for shared directory prefix overlap. If plan A modifies `src/auth/session.ts` and plan B modifies `src/auth/middleware.ts`, they share the `src/auth/` subtree — flag as a **potential conflict** (import graph sibling edits may cause merge conflicts or runtime breakage even without touching the same file).
317
+
318
+ Overlap rule: two files share a directory prefix if their paths share at least one path segment beyond the project root (e.g., both under `src/auth/` or both under `plugins/pbr/scripts/`).
319
+
320
+ 4. **Implicit dependency detection:** For every pair of plans across ANY waves (not just same-wave) where plan B's `files_modified` overlaps with plan A's `files_modified` BUT plan B does NOT list plan A in its `depends_on` (and plan A is in an earlier wave), flag as an **implicit dependency warning** — plan B will overwrite plan A's work without declaring the dependency.
321
+
322
+ 5. Build a conflict report:
323
+
324
+ ```
325
+ Intra-Phase Conflict Detection Results
326
+
327
+ Plans analyzed: {count} | Context: {context_window_tokens} tokens
328
+
329
+ {If direct conflicts found:}
330
+ DIRECT CONFLICTS (same file, same wave — parallel execution will clobber):
331
+
332
+ | File | Plan A | Plan B | Wave |
333
+ |------|--------|--------|------|
334
+ | {path} | {plan_id} | {plan_id} | {wave} |
335
+
336
+ {If potential conflicts found:}
337
+ POTENTIAL CONFLICTS (shared directory subtree, same wave):
338
+
339
+ | Shared Prefix | Plan A | Plan B | Wave |
340
+ |---------------|--------|--------|------|
341
+ | {prefix}/ | {plan_id} | {plan_id} | {wave} |
342
+
343
+ {If implicit dependencies found:}
344
+ IMPLICIT DEPENDENCIES (file overlap, no depends_on declared):
345
+
346
+ | File | Earlier Plan | Later Plan | Missing depends_on |
347
+ |------|-------------|------------|-------------------|
348
+ | {path} | {plan_id} (wave {W}) | {plan_id} (wave {W+N}) | {plan_id} not in depends_on |
349
+
350
+ {If conflicts found:}
351
+ Suggested wave reordering:
352
+ {For each direct conflict pair: "Move {plan_id} to wave {current_wave + 1} and add depends_on: ['{other_plan_id}']"}
353
+ {For each implicit dependency: "Add depends_on: ['{earlier_plan_id}'] to {later_plan_id}"}
354
+ ```
355
+
356
+ 6. If **any** conflicts or warnings were found, present the report and:
357
+ **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
358
+ Use AskUserQuestion (pattern: yes-no from `skills/shared/gate-prompts.md`):
359
+
360
+ ```
361
+ question: "{N} conflict(s) detected between plans in this phase. Proceed anyway?"
362
+ header: "Intra-Phase Conflicts"
363
+ options:
364
+ - label: "Proceed" description: "Continue — conflicts are intentional or I will fix them manually"
365
+ - label: "Abort" description: "Stop — I need to re-plan with /pbr:plan-phase {N}"
366
+ ```
367
+
368
+ If user selects "Abort": stop the build. Display: "Re-run `/pbr:plan-phase {N}` and apply the suggested wave reordering above."
369
+
370
+ If user selects "Proceed": log a deviation — `DEVIATION: Intra-phase conflict(s) acknowledged by user. Plans: {conflicting plan IDs}.` — then continue to Step 5c.
371
+
372
+ 7. If **no conflicts found**: display `✓ No intra-phase conflicts detected. Proceeding.` and continue to Step 5c silently.
373
+
374
+ ---
375
+
376
+ ### Step 5c: Pre-Spawn Cross-Phase Conflict Check (conditional)
377
+
378
+ Runs after Step 5a (intra-phase conflict detection).
379
+
380
+ **Trigger:** Only run if `--cross-check` flag is present in `$ARGUMENTS` AND `context_window_tokens` in `.planning/config.json` is >= 500000.
381
+
382
+ If either condition is false, skip this step entirely and proceed to Step 5d (sprint contract pre-flight).
383
+
384
+ **Purpose:** Before spawning any executor, detect whether this phase's planned file modifications conflict with artifacts or provides from prior completed phases. A conflict means the current phase may overwrite or break something a prior phase established.
385
+
386
+ **Procedure:**
387
+
388
+ 1. Collect current phase `files_modified` from all PLAN.md frontmatters:
389
+
390
+ ```bash
391
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js plan-index {phase-slug}
392
+ ```
393
+
394
+ Extract the union of all `files_modified` arrays across plans. This is the **change surface**.
395
+
396
+ 2. Collect prior completed phase provides:
397
+
398
+ ```bash
399
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js phase list --status verified --before {phase_number}
400
+ ```
401
+
402
+ For each returned phase, read SUMMARY.md `provides` list (frontmatter only — keep context lean).
403
+
404
+ 3. Compare: for each prior-phase `provides` entry that names a specific file path, check if that path appears in the current phase's change surface.
405
+
406
+ 4. Present conflict report to user before proceeding:
407
+
408
+ ```
409
+ Cross-Phase Conflict Check Results
410
+
411
+ Files in scope: {count}
412
+ Prior phases checked: {count}
413
+
414
+ {If conflicts found:}
415
+ ⚠ Potential conflicts detected:
416
+
417
+ | File | Current Phase Plans | Prior Phase That Provides It |
418
+ |------|---------------------|------------------------------|
419
+ | {path} | {plan_ids} | Phase {N}: {slug} |
420
+
421
+ These files were established as deliverables by prior phases. Modifying them may cause regressions.
422
+ ```
423
+
424
+ **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
425
+ Use AskUserQuestion (pattern: yes-no from `skills/shared/gate-prompts.md`):
426
+
427
+ ```
428
+ question: "{count} potential cross-phase conflicts detected. Proceed with build?"
429
+ header: "Conflicts"
430
+ options:
431
+ - label: "Proceed" description: "Continue — I reviewed the conflicts and they are intentional"
432
+ - label: "Abort" description: "Stop — I need to review the plan before building"
433
+ ```
434
+
435
+ ```
436
+ {If no conflicts found:}
437
+ ✓ No cross-phase conflicts detected. Proceeding to executor spawn.
438
+ ```
439
+
440
+ 5. If user selects "Abort": stop the build. Suggest reviewing the flagged plan files and running `/pbr:plan-phase {N}` to revise if needed.
441
+ 6. If user selects "Proceed" or no conflicts found: continue to Step 5d (sprint contract pre-flight).
442
+
443
+ ---
444
+
445
+ ### Step 5d: Sprint Contract Pre-Flight (conditional)
446
+
447
+ **Gate:** Read `features.sprint_contracts` from `.planning/config.json`. If not `true`, skip to Step 5b (checkpoint manifest).
448
+
449
+ If enabled:
450
+
451
+ 1. Display: `Sprint contract pre-flight enabled. Reviewing criteria before build...`
452
+
453
+ 2. **Verifier pre-flight:** Spawn verifier agent with:
454
+ - `subagent_type: "pbr:verifier"`
455
+ - Spawn prompt: Include `preflight: true`, list all PLAN files, phase directory
456
+ - Wait for `## PRE-FLIGHT COMPLETE`
457
+ - Read `.planning/phases/{NN}-{slug}/.preflight-verifier.json`
458
+
459
+ 3. **Executor pre-flight:** Spawn executor agent with:
460
+ - `subagent_type: "pbr:executor"`
461
+ - Spawn prompt: Include `preflight: true`, list all PLAN files, phase directory
462
+ - Wait for `## PRE-FLIGHT COMPLETE`
463
+ - Read `.planning/phases/{NN}-{slug}/.preflight-executor.json`
464
+
465
+ 4. **Merge and present feedback:**
466
+ - Combine flagged criteria from both JSON files
467
+ - If zero flags: display `Pre-flight passed. No criteria flagged. Proceeding to build.`
468
+ - If flags found: display each flagged criterion with its issue and suggestion
469
+ - If any flags have severity "concern": ask user via AskUserQuestion:
470
+ ```
471
+ question: "{N} criteria flagged with concerns. Proceed with build, or revise plans first?"
472
+ header: "Pre-Flight Concerns"
473
+ options:
474
+ - label: "Proceed" description: "Continue building — I accept the flagged criteria"
475
+ - label: "Revise" description: "Stop — I need to revise plans with /pbr:plan first"
476
+ ```
477
+ - If "Revise": display `Run /pbr:plan to revise, then /pbr:build again.` and STOP
478
+ - If "Proceed": log deviation and continue to Step 5b
479
+
480
+ 5. Clean up: delete `.preflight-verifier.json` and `.preflight-executor.json` (ephemeral artifacts)
481
+
482
+ ---
483
+
199
484
  ### Step 5b: Write Checkpoint Manifest (inline)
200
485
 
201
- **CRITICAL: Write .checkpoint-manifest.json NOW before entering the wave loop.**
486
+ **CRITICAL (hook-enforced): Initialize checkpoint manifest NOW before entering the wave loop.**
202
487
 
203
- Before entering the wave loop, write `.planning/phases/{NN}-{slug}/.checkpoint-manifest.json`:
488
+ **Session affinity:** The checkpoint manifest includes a `session_id` field. Before writing any phase state, validate that the current session owns the manifest by checking `manifest.session_id` matches the active session. If mismatch, another session may have taken over — re-acquire the claim or warn the user.
204
489
 
205
- ```json
206
- {
207
- "plans": ["02-01", "02-02", "02-03"],
208
- "checkpoints_resolved": [],
209
- "checkpoints_pending": [],
210
- "wave": 1,
211
- "deferred": [],
212
- "commit_log": [],
213
- "last_good_commit": null
214
- }
490
+ ```bash
491
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js checkpoint init {phase-slug} --plans "{comma-separated plan IDs}"
215
492
  ```
216
493
 
217
- This file tracks execution progress for crash recovery and rollback. On resume after compaction, read this manifest to determine where execution left off and which plans still need work.
494
+ After each wave completes, update the manifest:
495
+
496
+ ```bash
497
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js checkpoint update {phase-slug} --wave {N} --resolved {plan-id} --sha {commit-sha}
498
+ ```
218
499
 
219
- Update the manifest after each wave completes:
220
- - Move completed plan IDs into `checkpoints_resolved`
221
- - Advance the `wave` counter
222
- - Record commit SHAs in `commit_log` (array of `{ plan, sha, timestamp }` objects)
223
- - Update `last_good_commit` to the SHA of the last successfully verified commit
224
- - Append any deferred items collected from executor SUMMARYs
500
+ This tracks execution for crash recovery and rollback. Read `.checkpoint-manifest.json` on resume to reconstruct which plans are complete.
225
501
 
226
502
  ---
227
503
 
@@ -244,12 +520,75 @@ For each wave, in order (Wave 1, then Wave 2, etc.):
244
520
 
245
521
  For each plan in the current wave (excluding skipped plans):
246
522
 
523
+ **Inline Execution Gate (conditional):**
524
+
525
+ Before spawning a Task() executor, check if this plan qualifies for inline execution:
526
+
527
+ 1. Read `workflow.inline_execution` from config. If `false`, skip this check — use normal Task() spawn.
528
+ 2. Estimate current context usage percentage. Use a rough heuristic: if `context_window_tokens` is set in config, estimate based on conversation length; otherwise assume 30%.
529
+ 3. For each plan in the current wave, run the inline decision gate:
530
+ ```
531
+ const { shouldInlineExecution } = require(path.join(PLUGIN_ROOT, 'scripts/lib/gates/inline-execution.js'));
532
+ const result = shouldInlineExecution(planPath, config, contextPct);
533
+ ```
534
+ — The orchestrator conceptually evaluates these conditions; it does not literally run JavaScript. The gate logic is: plan has <= `inline_max_tasks` tasks (default 2), ALL tasks are `simple` complexity, AND context < `inline_context_cap_pct` (default 40%).
535
+
536
+ 4. If `result.inline` is `true`:
537
+ a. Display: `◆ Executing plan {plan_id} inline (trivial plan, {taskCount} simple task(s))`
538
+ **CRITICAL — DO NOT SKIP: Write .inline-active signal file NOW before executing inline tasks.**
539
+ b. Write signal file: Write the current phase number to `.planning/.inline-active` using the Write tool
540
+ c. Read the full PLAN.md file
541
+ d. For each task in the plan (parsed from XML `<task>` blocks):
542
+ - Read the `<action>` element and execute each numbered step directly
543
+ - Follow the same rules as a normal executor: create/modify files, run commands
544
+ - After each task, run the `<verify>` command
545
+ - If verify fails, fall back to normal Task() spawn for this plan
546
+ **CRITICAL — DO NOT SKIP: Write SUMMARY.md for the inline plan NOW. Required for crash recovery and build completion tracking.**
547
+ e. After all tasks complete, write SUMMARY.md directly:
548
+ - Use the same frontmatter format as executor-produced SUMMARYs
549
+ - Include: `status: completed`, `key_files`, `requires: []`, `deferred: []`
550
+ - Body: brief description of what was done
551
+ f. Delete `.planning/.inline-active` signal file
552
+ g. Skip the normal Task() spawn below — proceed to Step 6c (Read Results)
553
+
554
+ 5. If `result.inline` is `false`: proceed with normal Task() spawn below (no change to existing flow)
555
+
556
+ **Agent Context Enrichment (conditional):**
557
+
558
+ Before spawning each Task() executor, enrich its prompt with project context if enabled:
559
+
560
+ 1. Check `features.rich_agent_prompts` in config. If `true`:
561
+ ```
562
+ const { buildRichAgentContext } = require(path.join(PLUGIN_ROOT, 'scripts/lib/gates/rich-agent-context.js'));
563
+ const richContext = buildRichAgentContext(planningDir, config, contextPct > 50 ? 2500 : 5000);
564
+ ```
565
+ — The orchestrator conceptually evaluates this; it does not literally run JavaScript. If rich context is non-empty, include it in the executor spawn prompt under a `## Project Context` header.
566
+
567
+ 2. Check `features.multi_phase_awareness` in config. If `true`:
568
+ ```
569
+ const { loadMultiPhasePlans } = require(path.join(PLUGIN_ROOT, 'scripts/lib/gates/multi-phase-loader.js'));
570
+ const multiPhase = loadMultiPhasePlans(planningDir, currentPhaseNum, config);
571
+ ```
572
+ — If `multiPhase.phasesLoaded > 1`, include adjacent phase plan frontmatter (first 30 lines of each) in the executor spawn prompt under a `## Adjacent Phase Context` header. Do NOT include full plan bodies for adjacent phases — frontmatter only.
573
+
574
+ 3. If neither feature is enabled, skip enrichment entirely (no performance cost).
575
+
576
+ **Teams mode status check:**
577
+
578
+ Before spawning executors, read the teams config:
579
+
580
+ ```bash
581
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js config get parallelization.use_teams
582
+ ```
583
+
584
+ If `true`: Log `"Teams mode active — executor spawning coordinated with team config"`. This is informational only — teams mode affects planning and review, not execution. The log helps operators understand the full pipeline state.
585
+
247
586
  **Present plan narrative before spawning:**
248
587
 
249
588
  Display to the user before spawning:
250
589
 
251
590
  ```
252
- Spawning {N} executor(s) for Wave {W}...
591
+ Spawning {N} executor(s) for Wave {W}...
253
592
  ```
254
593
 
255
594
  Then present a brief narrative for each plan to give the user context on what's about to happen:
@@ -271,6 +610,7 @@ This is a read-only presentation step — extract descriptions from plan frontma
271
610
 
272
611
  **Model Selection (Adaptive)**:
273
612
  Before spawning the executor for each plan, determine the model:
613
+ 0. If `--model <value>` was parsed from `$ARGUMENTS` (valid values: sonnet, opus, haiku, inherit), use that model for ALL executor Task() spawns in this run. Skip steps 1-4. The --model flag is the highest precedence override.
274
614
  1. Read the plan's task elements for `complexity` and `model` attributes
275
615
  2. If ANY task has an explicit `model` attribute, use the most capable model among them (inherit > sonnet > haiku)
276
616
  3. Otherwise, use the HIGHEST complexity among the plan's tasks to select the model:
@@ -278,72 +618,32 @@ Before spawning the executor for each plan, determine the model:
278
618
  4. If `config.models.executor` is set (non-null), it overrides adaptive selection entirely — use that model for all executors
279
619
  5. Pass the selected model to the Task() spawn
280
620
 
621
+ If `--model <value>` is present in `$ARGUMENTS`, extract the value. Valid values: `sonnet`, `opus`, `haiku`, `inherit`. If an invalid value is provided, display an error and list valid values. Store as `override_model`.
622
+
281
623
  Reference: `references/model-selection.md` for full details.
282
624
 
283
625
  1. Extract the `## Summary` section from the PLAN.md (everything after the `## Summary` heading to end of file). If no ## Summary section exists (legacy plans), fall back to reading the full PLAN.md content. Note: The orchestrator reads the full PLAN.md once for narrative extraction AND summary extraction; only the ## Summary portion is inlined into the executor prompt. The full PLAN.md stays on disk for the executor to Read.
284
- 2. Read `.planning/CONTEXT.md` (if exists)
285
- 3. Read `.planning/STATE.md`
626
+ 2. Use `blob.phase.dir` for phase directory, `blob.phase.status` for current status
627
+ 3. Use `blob.config` for config fields instead of re-reading `.planning/config.json`
286
628
  4. Read prior SUMMARY.md files from the same phase (completed plans in earlier waves)
287
- 5. Read `.planning/config.json`
288
-
289
- Construct the executor prompt:
290
-
291
- ```
292
- You are the executor agent. Execute the following plan.
293
-
294
- <plan_summary>
295
- [Inline only the ## Summary section from PLAN.md]
296
- </plan_summary>
297
-
298
- <plan_file>
299
- .planning/phases/{NN}-{slug}/{plan_id}-PLAN.md
300
- </plan_file>
301
-
302
- <project_context>
303
- Project root: {absolute path to project root}
304
- Platform: {win32|linux|darwin}
305
629
 
306
- Config:
307
- commit_format: {commit_format from config}
308
- tdd_mode: {tdd_mode from config}
309
- atomic_commits: {atomic_commits from config}
630
+ Construct the executor prompt by reading `${CLAUDE_SKILL_DIR}/templates/executor-prompt.md.tmpl` and filling in all `{placeholder}` values:
310
631
 
311
- Available context files (read via Read tool as needed):
312
- - Config: {absolute path to config.json}
313
- - State: {absolute path to STATE.md}
314
- {If CONTEXT.md exists:}
315
- - Project context (locked decisions): {absolute path to CONTEXT.md}
316
- </project_context>
632
+ - `{NN}-{slug}` from `blob.phase.dir` (e.g., `02-authentication`)
633
+ - `{plan_id}` plan being executed (e.g., `02-01`)
634
+ - `{commit_format}`, `{tdd_mode}`, `{atomic_commits}` from `blob.config`
635
+ - File paths: absolute paths to project root, config.json, STATE.md, PROJECT.md
636
+ - `{prior_work table rows}` one row per completed plan in this phase
317
637
 
318
- <prior_work>
319
- Completed plans in this phase:
320
- | Plan | Status | Commits | Summary File |
321
- |------|--------|---------|-------------|
322
- | {plan_id} | complete | {hash1}, {hash2} | {absolute path to SUMMARY.md} |
323
-
324
- Read any SUMMARY file via Read tool if you need details on what prior plans produced.
325
- </prior_work>
326
-
327
- Execute all tasks in the plan sequentially. For each task:
328
- 0. Read the full plan file from the path in <plan_file> to get task details
329
- 1. Execute the <action> steps
330
- 2. Run the <verify> commands
331
- 3. Create an atomic commit with format: {commit_format}
332
- 4. Record the commit hash
333
-
334
- After all tasks complete:
335
- 1. Write SUMMARY.md to .planning/phases/{NN}-{slug}/SUMMARY-{plan_id}.md
336
- 2. Run self-check (verify files exist, commits exist, verify commands still pass)
337
- 3. Return your SUMMARY.md content as your final response
338
-
339
- If you hit a checkpoint task, STOP and return the checkpoint response format immediately.
340
- ```
638
+ Use the filled template as the Task() prompt.
341
639
 
342
640
  **Spawn strategy based on config:**
343
641
 
344
642
  - If `parallelization.enabled: true` AND multiple plans in this wave:
643
+ - **Extended context override:** If `features.extended_context` is `true` in `.planning/config.json`, use `max_concurrent_agents = 5` regardless of the configured value (unless the configured value is already higher). The 1M context window gives the orchestrator enough headroom to track 5 concurrent executor results. Log: "Extended context: raising max_concurrent_agents to 5"
345
644
  - Spawn up to `max_concurrent_agents` Task() calls in parallel
346
645
  - Each Task() call is independent
646
+ - **CRITICAL: Individual Agent Calls** — Each executor MUST be a separate Task() tool call in a single response message. Do NOT describe the batch in prose (e.g., "5 executors launched"). Each separate Task() call gets its own colored badge and independent ctrl+o expansion in the Claude Code UI. Multiple Task() calls in one message still run concurrently — no parallelism is lost.
347
647
  - Use `run_in_background: true` for each executor
348
648
  - While waiting, display progress to the user:
349
649
  - After spawning: "Wave {W}: launched {N} executors in parallel: {list of plan names}"
@@ -360,7 +660,18 @@ Task({
360
660
  prompt: <executor prompt constructed above>
361
661
  })
362
662
 
363
- NOTE: The pbr:executor subagent type auto-loads the agent definition. Do NOT inline it.
663
+ NOTE: The pbr:executor subagent type auto-loads the agent definition.
664
+
665
+ After executor completes, check its output for completion markers:
666
+
667
+ - `## PLAN COMPLETE` -- proceed to next plan or verification
668
+ - `## PLAN FAILED` -- log failure, check if retry is appropriate based on workflow.node_repair_budget
669
+ - `## CHECKPOINT: {TYPE}` -- surface checkpoint to user, pause workflow
670
+ - No marker found -- treat as partial completion, log warning "Executor returned without completion marker"
671
+
672
+ Route accordingly. Do NOT inline executor output into orchestrator context.
673
+
674
+ **Memory capture:** Reference `skills/shared/memory-capture.md` — check executor output for `<memory_suggestion>` blocks and save any reusable knowledge discovered during execution.
364
675
  ```
365
676
 
366
677
  **Path resolution**: Before constructing the agent prompt, resolve `${CLAUDE_PLUGIN_ROOT}` to its absolute path. Do not pass the variable literally in prompts — Task() contexts may not expand it. Use the resolved absolute path for any pbr-tools.js or template references included in the prompt.
@@ -386,79 +697,151 @@ For each completed executor:
386
697
 
387
698
  **Spot-check executor claims:**
388
699
 
389
- After reading each SUMMARY, perform a lightweight verification:
390
- - Pick 2-3 files from the SUMMARY's `key_files` list and verify they exist (`ls`)
391
- - Run `git log --oneline -n {commit_count}` and confirm the count matches the claimed commits
392
- - For each spot-checked file, verify it has >10 lines (`wc -l`): warn if trivially small
393
- - For each spot-checked file, search for TODO/FIXME/placeholder/stub markers: warn if found
394
- - Check SUMMARY.md frontmatter for `self_check_failures`: if present, warn the user:
395
- "Plan {id} reported self-check failures: {list failures}. Inspect before continuing?"
396
- - If ANY spot-check fails, warn the user before proceeding to the next wave:
397
- "Spot-check failed for plan {id}: {detail}. Inspect before continuing?"
700
+ CRITICAL (no hook): Before reading results or advancing to the next wave, run the spot-check CLI for each completed plan.
398
701
 
399
- **Read executor deviations:**
702
+ For each completed plan in this wave:
703
+
704
+ ```bash
705
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js spot-check {phaseSlug} {planId}
706
+ ```
400
707
 
708
+ Where `{phaseSlug}` is the phase directory name (e.g., `49-build-workflow-hardening`) and `{planId}` is the plan identifier (e.g., `49-01`).
709
+
710
+ The command returns JSON: `{ ok, summary_exists, key_files_checked, commits_present, detail }`
711
+
712
+ **If `ok` is `false` for ANY plan: STOP.** Do NOT advance to the next wave. Present the user with:
713
+
714
+ ```
715
+ Spot-check FAILED for plan {planId}: {detail}
716
+
717
+ Choose an action:
718
+ Retry — Re-spawn executor for this plan
719
+ Continue — Skip this plan and proceed to next wave (may leave phase incomplete)
720
+ Abort — Stop the build entirely
721
+ ```
722
+
723
+ **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
724
+ Use AskUserQuestion with the three options. Route:
725
+
726
+ - Retry: Re-spawn the executor for this plan (go back to Step 6a for this plan only)
727
+ - Continue: Log the failure, skip the plan, proceed
728
+ - Abort: Stop all build work, leave phase in partial state
729
+
730
+ **If `ok` is `true` for all plans:**
731
+
732
+ - Also check SUMMARY.md frontmatter for `self_check_failures`: if present, warn the user: "Plan {id} reported self-check failures: {list}. Inspect before continuing?"
733
+ - Also search SUMMARY.md for `## Self-Check: FAILED` marker — if present, warn before next wave
734
+ - Between waves: verify no file conflicts from parallel executors (`git status` for uncommitted changes)
735
+
736
+ **Read executor deviations:**
401
737
  After all executors in the wave complete, read all SUMMARY frontmatter and:
402
738
  - Collect `deferred` items into a running list (append to `.checkpoint-manifest.json` deferred array)
403
739
  - Flag any deviation-rule-4 (architectural) stops — these require user attention
740
+ - If SUMMARY frontmatter contains `deviations:` with entries, summarize by rule:
741
+ - Rule 1 (Bug, auto-fixed): informational only
742
+ - Rule 2 (Missing dep, auto-installed): informational only
743
+ - Rule 3 (Blocking, asked user): highlight for review
744
+ - Rule 4 (Architectural, asked user): highlight for review — these may need re-planning
745
+ - Check for ESCALATE entries from node repair (SUMMARY frontmatter `node_repair` field with strategy "ESCALATE"): these indicate the executor exhausted RETRY/DECOMPOSE/PRUNE and needs user intervention. Surface immediately:
746
+ ```
747
+ Executor escalated {N} task(s):
748
+ - Task {id}: {description} — {error details}
749
+ How to proceed? (retry with different approach / skip / abort)
750
+ ```
404
751
  - Present a brief wave summary to the user:
405
752
  "Wave {W} complete. {N} plans done. {D} deferred ideas logged. {A} architectural issues."
406
753
 
407
- Build a wave results table:
754
+ Build a wave results table using standardized status symbols (`✓` complete, `✗` failed, `◆` in-progress, `○` pending — see `@references/ui-brand.md`):
408
755
 
409
756
  ```
410
757
  Wave {W} Results:
411
758
  | Plan | Status | Tasks | Commits | Deviations |
412
759
  |------|--------|-------|---------|------------|
413
- | {id} | complete | 3/3 | abc, def, ghi | 0 |
414
- | {id} | complete | 2/2 | jkl, mno | 1 |
760
+ | {id} | complete | 3/3 | abc, def, ghi | 0 |
761
+ | {id} | complete | 2/2 | jkl, mno | 1 |
415
762
  ```
416
763
 
417
764
  #### 6c-ii. Inline Per-Task Verification (conditional)
418
765
 
419
766
  **Skip if** the depth profile has `features.inline_verify: false`.
420
767
 
421
- To check: use the resolved depth profile. Only `comprehensive` mode enables inline verification by default.
422
-
423
- When inline verification is enabled, each completed plan gets a targeted verification pass before the orchestrator proceeds to the next wave. This catches issues early — before dependent plans build on a broken foundation.
768
+ To check: use the resolved depth profile. Only `comprehensive` mode enables inline verification by default. When inline verification is enabled, each completed plan gets a targeted verification pass before the orchestrator proceeds to the next wave — catching issues early before dependent plans build on a broken foundation.
424
769
 
425
770
  For each plan that completed successfully in this wave:
426
771
 
427
772
  1. Read the plan's SUMMARY.md to get `key_files` (the files this plan created/modified)
428
- 2. Display to the user: `◐ Spawning inline verifier for plan {plan_id}...`
773
+ 2. Display to the user: `◆ Spawning inline verifier for plan {plan_id}...`
429
774
 
430
- Spawn a lightweight verifier:
775
+ Spawn `Task({ subagent_type: "pbr:verifier", model: "haiku", prompt: ... })`. Read `${CLAUDE_SKILL_DIR}/templates/inline-verifier-prompt.md.tmpl` and fill in `{NN}-{slug}`, `{plan_id}`, and `{comma-separated key_files list}` (key_files from PLAN.md frontmatter). Use the filled template as the `prompt` value.
431
776
 
432
- <!-- NOTE: This is a targeted inline check (existence/substantiveness/wiring for specific files),
433
- NOT the full must-have verifier. The canonical full verifier prompt lives in
434
- agents/verifier.md and is templated via skills/review/templates/verifier-prompt.md.tmpl.
435
- Keep this lightweight prompt distinct from the full verifier. -->
777
+ 3. If verifier reports FAIL for any file:
778
+ - Present the failure to the user: "Inline verify failed for plan {plan_id}: {details}"
779
+ - Re-spawn the executor for just the failed items: include only the failing file context in the prompt
780
+ - If the retry also fails: proceed but flag in the wave results table (don't block indefinitely)
781
+ 4. If verifier reports all PASS: continue to next wave
436
782
 
783
+ **Note:** This adds latency (~10-20s per plan for the haiku verifier). It's opt-in via `features.inline_verify: true` for projects where early detection outweighs speed.
784
+
785
+ ---
786
+
787
+ #### 6c-iii. Security Scan (conditional)
788
+
789
+ **Skip if** `features.security_scanning` is not `true` in `.planning/config.json`.
790
+
791
+ Run an OWASP-style security scan over the files changed during this wave using the patterns in `plugins/pbr/scripts/lib/security-scan.js`.
792
+
793
+ ```bash
794
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js security scan '{space-separated changed files}'
437
795
  ```
438
- Task({
439
- subagent_type: "pbr:verifier",
440
- model: "haiku",
441
- prompt: "Targeted inline verification for plan {plan_id}.
442
796
 
443
- Verify ONLY these files: {comma-separated key_files list}
797
+ (`scanFiles()` in `plugins/pbr/scripts/lib/security-scan.js`)
444
798
 
445
- For each file, check three layers:
446
- 1. Existence — does the file exist?
447
- 2. Substantiveness — is it more than a stub? (>10 lines, no TODO/FIXME placeholders)
448
- 3. Wiring — is it imported/used by at least one other file?
799
+ Display formatted findings:
449
800
 
450
- Report PASS or FAIL with a one-line reason per file.
451
- Write nothing to disk — just return your results as text."
452
- })
801
+ ```bash
802
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js security format-findings '{scan-output-json}'
453
803
  ```
454
804
 
455
- 3. If verifier reports FAIL for any file:
456
- - Present the failure to the user: "Inline verify failed for plan {plan_id}: {details}"
457
- - Re-spawn the executor for just the failed items: include only the failing file context in the prompt
458
- - If the retry also fails: proceed but flag in the wave results table (don't block indefinitely)
459
- 4. If verifier reports all PASS: continue to next wave
805
+ (`formatFindings()` in `plugins/pbr/scripts/lib/security-scan.js`)
460
806
 
461
- **Note:** This adds latency (~10-20s per plan for the haiku verifier). It's opt-in via `features.inline_verify: true` for projects where early detection outweighs speed.
807
+ Output format:
808
+ - If no findings: `✓ Security scan: clean`
809
+ - If findings exist:
810
+ ```
811
+ ⚠ Security scan: {N} finding(s)
812
+ [SEC-001] {file}:{line} — {message} (severity: high)
813
+ ...
814
+ ```
815
+
816
+ HIGH-severity findings (hardcoded secrets, SQL injection, eval-of-user-input) require user acknowledgment before the build continues. MEDIUM and LOW findings are logged but non-blocking.
817
+
818
+ ---
819
+
820
+ #### 6c-v. Smart Test Selection (conditional)
821
+
822
+ **Skip if** `features.regression_prevention` is not `true` in `.planning/config.json`.
823
+
824
+ After each wave, identify which test files are relevant to the changed source files using `plugins/pbr/scripts/lib/test-selection.js`. Run only those tests instead of the full suite — this catches regressions early without the latency of a full test run.
825
+
826
+ ```bash
827
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js test-selection select '{space-separated changed files}'
828
+ ```
829
+
830
+ (`selectTests()` in `plugins/pbr/scripts/lib/test-selection.js`)
831
+
832
+ Then format the test command:
833
+
834
+ ```bash
835
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js test-selection format-command '{selection-output-json}'
836
+ ```
837
+
838
+ (`formatTestCommand()` in `plugins/pbr/scripts/lib/test-selection.js`)
839
+
840
+ Run the resulting command (e.g., `npm test -- tests/foo.test.js tests/bar.test.js`) via Bash. Display:
841
+ - `✓ Smart tests ({N} files): all passed`
842
+ - `✗ Smart tests ({N} files): {M} failed — {test names}`
843
+
844
+ If tests fail: present the failure to the user (same flow as Step 6d). The failing test output counts as a gap for the wave — the orchestrator does NOT automatically retry, but surfaces it for the user to decide (fix now, skip, or abort).
462
845
 
463
846
  ---
464
847
 
@@ -490,6 +873,7 @@ Plan {id} {status}:
490
873
  Last verify output: {output}
491
874
  ```
492
875
 
876
+ **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
493
877
  Use AskUserQuestion (pattern: multi-option-failure from `skills/shared/gate-prompts.md`):
494
878
  question: "Plan {id} failed at task {N} ({name}). How should we proceed?"
495
879
  header: "Failed"
@@ -500,7 +884,45 @@ Use AskUserQuestion (pattern: multi-option-failure from `skills/shared/gate-prom
500
884
  - label: "Abort" description: "Stop the entire build"
501
885
 
502
886
  **If user selects 'Retry':**
503
- - Re-spawn executor Task() with the same prompt
887
+
888
+ **Phase Replay Enrichment (conditional):**
889
+
890
+ Before re-spawning, check `workflow.phase_replay` from config (loaded in Step 2).
891
+
892
+ If `workflow.phase_replay` is `true`:
893
+
894
+ 1. Collect replay context:
895
+ a. Read the original PLAN.md for this plan (already available from Step 6a)
896
+ b. Read SUMMARY.md if it exists (partial results from the failed attempt)
897
+ c. Read VERIFICATION.md if it exists (specific failure details)
898
+ d. Run `git diff {pre_build_commit}..HEAD -- {files_modified}` to get code diffs from the failed attempt
899
+ 2. Construct an enriched fix-executor prompt by reading `${CLAUDE_SKILL_DIR}/templates/executor-prompt.md.tmpl` and appending a `## Replay Context` section:
900
+
901
+ <!-- markdownlint-disable MD046 -->
902
+
903
+ ## Replay Context
904
+
905
+ This is a RETRY of a failed execution. Use the context below to understand what went wrong and fix it.
906
+
907
+ ### Original Plan Summary
908
+ {plan ## Summary section}
909
+
910
+ ### Prior Attempt Results
911
+ {SUMMARY.md frontmatter: status, completed tasks, failed task, error details}
912
+
913
+ ### Verification Failures
914
+ {VERIFICATION.md gaps if available, or "No verification run yet"}
915
+
916
+ ### Code Diffs From Failed Attempt
917
+ {git diff output, truncated to 200 lines max to stay within 30% of the executor's context budget}
918
+
919
+ <!-- markdownlint-enable MD046 -->
920
+
921
+ 3. Cap the replay context: if the total replay section exceeds 30% of the executor's context budget (estimate ~60k tokens for a 200k window), truncate the git diff first, then VERIFICATION details.
922
+
923
+ If `workflow.phase_replay` is `false` or not set:
924
+ - Re-spawn executor Task() with the same prompt (unchanged current behavior)
925
+
504
926
  - If retry also fails: ask user again (max 2 retries total)
505
927
 
506
928
  **If user selects 'Skip':**
@@ -509,102 +931,167 @@ Use AskUserQuestion (pattern: multi-option-failure from `skills/shared/gate-prom
509
931
  - If yes: warn user that those plans will also need to be skipped or adjusted
510
932
 
511
933
  **If user selects 'Rollback':**
512
- - Read `last_good_commit` from `.checkpoint-manifest.json`
513
- - If `last_good_commit` exists:
514
- - Show the user: "Rolling back to commit {sha} (last verified good state). This will soft-reset {N} commits."
515
- - Run: `git reset --soft {last_good_commit}`
516
- - Delete the failed plan's SUMMARY.md file if it was created
517
- - **CRITICAL — Invalidate downstream dependencies:**
518
- - Check if any plans in later waves depend on the rolled-back plan
519
- - For each downstream plan that depends on it: delete its SUMMARY.md (forces re-execution)
520
- - Remove ALL downstream dependent plans from `checkpoints_resolved` in the manifest
521
- - If downstream phases (outside this build) have `dependency_fingerprints` referencing this phase, warn: "Downstream phases may need re-planning with `/pbr:plan <N>` since Phase {current} was partially rolled back."
522
- - Update the checkpoint manifest: remove the failed plan from `checkpoints_resolved`
523
- - Continue to next wave or stop based on user preference
524
- - If no `last_good_commit`: warn "No rollback point available (this was the first plan). Use abort instead."
934
+ Run the rollback CLI:
935
+
936
+ ```bash
937
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js rollback .planning/phases/{NN}-{slug}/.checkpoint-manifest.json
938
+ ```
939
+
940
+ Returns `{ ok, rolled_back_to, plans_invalidated, files_deleted, warnings }`.
941
+
942
+ - If `ok` is `true`: display "Rolled back to commit {rolled_back_to}. {plans_invalidated.length} downstream plans invalidated."
943
+ Show any warnings. Continue to next wave or stop based on user preference.
944
+ - If `ok` is `false`: display the error message. Suggest "Use abort instead."
525
945
 
526
946
  **If user selects 'Abort':**
527
947
  - Update STATE.md with current progress
528
948
  - Present what was completed before the abort
529
- - Suggest: "Fix the issue and run `/pbr:build {N}` to resume (completed plans will be skipped)"
949
+ - Suggest: "Fix the issue and run `/pbr:execute-phase {N}` to resume (completed plans will be skipped)"
530
950
 
531
951
  #### 6e. Handle Checkpoints
532
952
 
533
953
  If any executor returned `checkpoint`:
534
954
 
535
955
  1. Read the checkpoint details from the executor's response
536
- 2. Present the checkpoint to the user:
956
+ 2. Read checkpoint type from executor response: `human-verify` | `decision` | `human-action`
957
+ 3. Read `gates.checkpoint_auto_resolve` from config.json (default: `"none"`)
958
+ Values: `none` | `verify-only` | `verify-and-decision` | `all`
537
959
 
538
- ```
539
- Checkpoint in Plan {id}, Task {N}: {checkpoint type}
960
+ **When `--auto` flag is active, `checkpoint_auto_resolve` defaults to `verify-and-decision` unless explicitly set to `none` in config.**
540
961
 
541
- {checkpoint details what was built, what is needed}
962
+ 4. Determine auto-resolve eligibility:
542
963
 
543
- {For decision type: present options}
544
- {For human-action type: present steps}
545
- {For human-verify type: present what to verify}
546
- ```
964
+ - **human-action**: NEVER auto-resolve (regardless of config or `--auto` flag). Always present to user.
965
+ - **human-verify**:
966
+ - Auto-resolve if `checkpoint_auto_resolve` is `verify-only`, `verify-and-decision`, or `all`
967
+ - Auto-resolve if `--auto` flag is active AND `checkpoint_auto_resolve` is NOT `none`
968
+ - To auto-resolve: run the verify command from the checkpoint. If passes, approve and continue. If fails, present to user.
969
+ - **decision**:
970
+ - Auto-resolve if `checkpoint_auto_resolve` is `verify-and-decision` or `all`
971
+ - To auto-resolve: use the first/default option. Log which option was auto-selected.
972
+ - If `checkpoint_auto_resolve` is `verify-only` or `none`: present to user.
547
973
 
548
- 3. Wait for user response
549
- 4. Spawn a FRESH continuation executor:
974
+ 5. If auto-resolved:
975
+ Log: `"Auto-resolved {type} checkpoint for Plan {id}, Task {N}: {resolution}"`
976
+ Resume executor with resolution context.
550
977
 
551
- Reference: `references/continuation-format.md` for the continuation protocol.
978
+ 6. If NOT auto-resolved, present based on type:
552
979
 
553
- ```
554
- You are the executor agent. Continue executing a plan from a checkpoint.
980
+ **For `human-verify`:**
555
981
 
556
- <plan_summary>
557
- [Inline only the ## Summary section from PLAN.md]
558
- </plan_summary>
982
+ ```text
983
+ CHECKPOINT: Verify Output
559
984
 
560
- <plan_file>
561
- .planning/phases/{NN}-{slug}/{plan_id}-PLAN.md
562
- </plan_file>
985
+ Plan {id}, Task {N}: {description}
563
986
 
564
- <completed_tasks>
565
- | Task | Commit | Status |
566
- |------|--------|--------|
567
- | {task_name} | {hash} | complete |
568
- | {task_name} | {hash} | complete |
569
- | {checkpoint_task} | — | checkpoint |
570
- </completed_tasks>
987
+ What was built:
988
+ {what_built from checkpoint data}
571
989
 
572
- <checkpoint_resolution>
573
- User response to checkpoint: {user's response}
574
- Resume at: Task {N+1} (or re-execute checkpoint task with user's answer)
575
- </checkpoint_resolution>
990
+ How to verify:
991
+ {verify_steps from checkpoint data}
992
+ ```
576
993
 
577
- <project_context>
578
- {Same lean context as original spawn config key-values + file paths, not inlined bodies}
579
- </project_context>
994
+ **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
995
+ Use AskUserQuestion with options: "Looks good", "Has issues" (+ text field for details)
580
996
 
581
- Continue execution from the checkpoint. Skip completed tasks. Process the checkpoint resolution, then continue with remaining tasks. Write SUMMARY.md when done.
582
- ```
997
+ **For `decision`:**
998
+
999
+ ```text
1000
+ CHECKPOINT: Decision Required
1001
+
1002
+ Plan {id}, Task {N}: {description}
1003
+
1004
+ Options:
1005
+ {options from checkpoint data}
1006
+ ```
1007
+
1008
+ **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
1009
+ Use AskUserQuestion with the options from the checkpoint as selectable choices
1010
+
1011
+ **For `human-action`:**
1012
+
1013
+ ```text
1014
+ CHECKPOINT: Action Required
1015
+
1016
+ Plan {id}, Task {N}: {description}
1017
+
1018
+ You need to:
1019
+ {required_action from checkpoint data}
1020
+
1021
+ Reply when complete.
1022
+ ```
1023
+
1024
+ **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
1025
+ Use AskUserQuestion with options: "Done", "Can't do this right now"
1026
+ If user selects "Can't do this right now": suggest "Run `/pbr:pause` to save state and resume later."
1027
+
1028
+ 7. Wait for user response
1029
+ 8. Spawn a FRESH continuation executor:
1030
+
1031
+ Reference: `references/continuation-format.md` for the continuation protocol.
1032
+
1033
+ Read `${CLAUDE_SKILL_DIR}/templates/continuation-prompt.md.tmpl` and fill in:
1034
+
1035
+ - `{NN}-{slug}`, `{plan_id}` — current phase and plan
1036
+ - `{plan_summary}` — the ## Summary section from PLAN.md
1037
+ - `{task table rows}` — one row per task with completion status
1038
+ - `{user's response}` — the checkpoint resolution from Step 3
1039
+ - `{project context key-values}` — config values + file paths
1040
+
1041
+ Use the filled template as the Task() prompt.
1042
+
1043
+ #### 6e-ii. CI Gate (after wave completion, conditional)
1044
+
1045
+ If `config.ci.gate_enabled` is `true` AND `config.git.branching` is not `none`:
1046
+
1047
+ 1. Push current commits: `git push`
1048
+ 2. Wait 5 seconds for CI to trigger
1049
+ 3. Get the current run ID:
1050
+ ```bash
1051
+ gh run list --branch $(git branch --show-current) --limit 1 --json databaseId -q '.[0].databaseId'
1052
+ ```
1053
+ 4. Poll CI status using CLI:
1054
+ ```bash
1055
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js ci-poll <run-id> [--timeout <seconds>]
1056
+ ```
1057
+ Returns `{ status, conclusion, url, next_action, elapsed_seconds }`.
1058
+ 5. If `next_action` is `"continue"`: proceed to next wave
1059
+ 6. If `next_action` is `"wait"`: re-run ci-poll after 15 seconds (repeat up to `config.ci.wait_timeout_seconds`)
1060
+ 7. If `next_action` is `"abort"` or `status` is `"failed"`:
1061
+ **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
1062
+ Show warning box and use AskUserQuestion: Wait / Continue anyway / Abort
1063
+ 8. If "Continue anyway": log deviation — `DEVIATION: CI gate bypassed for wave {N}`
1064
+ 9. If "Abort": stop build, update STATE.md
583
1065
 
584
1066
  #### 6f. Update STATE.md
585
1067
 
586
1068
  After each wave completes (all plans in the wave are done, skipped, or aborted):
587
1069
 
588
1070
  **SUMMARY gate — verify before updating STATE.md:**
1071
+ For every plan in the wave, run:
589
1072
 
590
- Before writing any STATE.md update, verify these three gates for every plan in the wave:
591
- 1. SUMMARY file exists at the expected path
592
- 2. SUMMARY file is not empty (file size > 0)
593
- 3. SUMMARY file has a valid title and YAML frontmatter (contains `---` delimiters and a `status:` field)
1073
+ ```bash
1074
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js summary-gate {phase-slug} {plan-id}
1075
+ ```
594
1076
 
595
- Block the STATE.md update until ALL gates pass. If any gate fails:
596
- - Warn user: "SUMMARY gate failed for plan {id}: {which gate}. Cannot update STATE.md."
597
- - Ask user to retry the executor or manually inspect the SUMMARY file
1077
+ Returns `{ ok: bool, gate: string, detail: string }`. Block STATE.md update until ALL plans return `ok: true`. If any fail, warn: "SUMMARY gate failed for plan {id}: {gate} — {detail}. Cannot update STATE.md."
598
1078
 
599
1079
  Once gates pass, update `.planning/STATE.md`:
600
1080
 
601
1081
  **Tooling shortcut**: Use the CLI for atomic STATE.md updates instead of manual read-modify-write:
602
1082
  ```bash
603
- node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js state update plans_complete {N}
604
- node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js state update status building
605
- node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js state update last_activity now
1083
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js state patch '{"plans_complete":"{N}","status":"building","last_activity":"now"}'
606
1084
  ```
607
1085
 
1086
+ **CLI exit code verification with retry**: After running each pbr-tools CLI command above, check the exit code:
1087
+
1088
+ - If the command succeeds (exit 0): proceed to next command
1089
+ - If the command fails (non-zero exit):
1090
+ 1. Log the error: "CLI command failed: {command} (exit {code})"
1091
+ 2. Wait 1 second
1092
+ 3. Retry the command once
1093
+ 4. If retry also fails: log warning "CLI command failed after retry: {command}" and continue. Do NOT block the workflow -- state can be reconciled later via `/pbr:status`
1094
+
608
1095
  - Current plan progress: "{completed}/{total} in current phase"
609
1096
  - Last activity timestamp
610
1097
  - Progress bar percentage
@@ -612,6 +1099,32 @@ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js state update last_activity now
612
1099
 
613
1100
  **STATE.md size limit:** Follow the size limit enforcement rules in `skills/shared/state-update.md` (150 lines max — collapse completed phases, remove duplicated decisions, trim old sessions).
614
1101
 
1102
+ **Completion check:** Before proceeding to next wave, confirm ALL of:
1103
+ - [ ] SUMMARY gate passed for every plan in this wave
1104
+ - [ ] STATE.md frontmatter `plans_complete` updated
1105
+ - [ ] STATE.md body progress bar updated
1106
+ - [ ] `last_activity` timestamp refreshed
1107
+
1108
+ To verify programmatically: `node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js step-verify build step-6f '["STATE.md updated","SUMMARY.md exists","commit made"]'`
1109
+ If any item fails, investigate before proceeding to the Regression Gate.
1110
+
1111
+ ---
1112
+
1113
+ ### Regression Gate (Pre-Verification)
1114
+
1115
+ Before proceeding to verification, run a quick regression check:
1116
+
1117
+ 1. Read `.planning/config.json` — check `features.regression_gate` (default: `true`). If `false`, skip this gate.
1118
+ 2. Run the project's test suite: `npm test 2>&1 | tail -20`
1119
+ 3. If tests pass: log `Regression gate: PASSED — all tests pass` and proceed to verification.
1120
+ 4. If tests fail:
1121
+ a. Log: `Regression gate: FAILED — {N} test failures detected`
1122
+ b. Display the failing test output
1123
+ c. **CRITICAL**: Do NOT fix failures inline. Spawn a debugger agent:
1124
+ `Task({ subagent_type: "pbr:debugger", prompt: "Phase {N} regression gate failed. Test output: {failure_output}. Fix the regressions." })`
1125
+ d. After debugger completes, re-run `npm test` to confirm fix
1126
+ e. If still failing after debugger: STOP and report to user
1127
+
615
1128
  ---
616
1129
 
617
1130
  ### Step 7: Phase Verification (delegated, conditional)
@@ -628,30 +1141,169 @@ To check: run `node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js config resolve-de
628
1141
  This implements budget mode's "skip verifier for < 3 tasks" rule: small phases in quick mode don't need a full verification pass.
629
1142
 
630
1143
  **If skipping because `features.goal_verification` is `false`:**
631
- Note for Step 8f completion summary: append "Note: Automatic verification was skipped (goal_verification: false). Run `/pbr:review {N}` to verify what was built."
1144
+ Note for Step 8f completion summary: append "Note: Automatic verification was skipped (goal_verification: false). Run `/pbr:verify-work {N}` to verify what was built."
1145
+
1146
+ **Confidence-Gated Verification Skip (conditional):**
1147
+
1148
+ Before spawning the verifier, check if the build passes the confidence gate:
1149
+
1150
+ 1. Read `verification.confidence_gate` from config. If `false` or not set, skip this check — proceed to normal verification flow.
1151
+ 2. Read `verification.confidence_threshold` from config (default: `100`).
1152
+ 3. Collect confidence signals:
1153
+ a. Read ALL SUMMARY.md frontmatter from this phase's completed plans. Extract `completion` percentage from each.
1154
+ b. Calculate aggregate completion: average of all plan completion percentages.
1155
+ c. Check commit SHAs: for each SUMMARY.md that lists `commits`, verify they exist via `git log --oneline {sha} -1` (quick existence check, not full log).
1156
+ d. Detect test suite: check for `package.json` (scripts.test), `pytest.ini`/`pyproject.toml` ([tool.pytest]), `Makefile` (test target), or `Cargo.toml`. Use the first match.
1157
+ e. Run test suite: execute the detected test command (e.g., `npm test`, `pytest`, `make test`). Capture exit code.
1158
+ f. Wiring check: for each file in SUMMARY.md key_files (excluding test files and .md files), verify at least one require()/import reference exists elsewhere in the project. Use: `grep -rl "{basename}" --include="*.js" --include="*.cjs" --include="*.ts" --include="*.md" . | grep -v node_modules | grep -v "{key_file_itself}"`. If any key file has zero external references, it is orphaned.
1159
+
1160
+ 4. Evaluate confidence gate:
1161
+ - `completion_met`: aggregate completion >= `confidence_threshold`
1162
+ - `shas_verified`: all listed commit SHAs exist in git log
1163
+ - `tests_passed`: test suite exit code is 0 (or no test suite detected — treat as pass with warning)
1164
+ - `key_files_imported`: all key_files (excluding tests, docs, config) have at least one import/require reference elsewhere in the project
1165
+
1166
+ 5. If ALL FOUR pass:
1167
+ - Display: `Confidence gate passed — spawning verifier in light mode`
1168
+ - The confidence gate result is advisory context for the verifier. The verifier ALWAYS runs to check must-haves.
1169
+
1170
+ 6. If ANY signal fails:
1171
+ - Display: `Confidence gate not met ({failed_signals}) — spawning verifier in full mode`
1172
+ - If wiring check failed specifically: `Display: Confidence gate not met (orphaned files: {list}) — spawning verifier in full mode`
1173
+
1174
+ In both cases, proceed to the verifier spawn below. The confidence gate never skips the verifier — it only determines logging output.
632
1175
 
633
1176
  **If verification is enabled:**
634
1177
 
635
- Display to the user: `◐ Spawning verifier...`
1178
+ **Path resolution**: Before constructing any agent prompt, resolve `${CLAUDE_PLUGIN_ROOT}` to its absolute path. Do not pass the variable literally in prompts — Task() contexts may not expand it. Use the resolved absolute path for any pbr-tools.js or template references included in the prompt.
1179
+
1180
+ #### Multi-Round QA Loop
1181
+
1182
+ Read `verification.qa_rounds` from config (default: 1). If `qa_rounds` == 1, the existing single-pass verification behavior is unchanged -- execute a single verifier spawn as described below.
1183
+
1184
+ If `qa_rounds` > 1, wrap the verification in a loop:
1185
+
1186
+ **for round = 1 to qa_rounds:**
1187
+
1188
+ **Round {round} of {qa_rounds}:**
1189
+
1190
+ a. **If round > 1 -- fix gaps from prior round:**
1191
+ - Read the previous round's `VERIFICATION-R{round-1}.md` from the phase directory
1192
+ - Extract gaps (failed must-haves with evidence)
1193
+ - Extract passing must-haves
1194
+ - Read `${CLAUDE_SKILL_DIR}/templates/qa-round-context.md.tmpl` and render it with:
1195
+ - `{round}` = current round number
1196
+ - `{gaps_list}` = formatted list of failed must-haves with evidence
1197
+ - `{evidence_list}` = detailed evidence for each gap
1198
+ - `{passing_list}` = list of must-haves that already passed
1199
+ - Spawn executor with the rendered QA context appended to the plan prompt:
1200
+ - The executor prompt MUST include: "Fix ONLY the listed gaps. Do NOT re-implement passing must-haves."
1201
+ - Executor writes `SUMMARY-R{round}-{plan_id}.md`
1202
+
1203
+ b. **Determine verification depth for this round:**
1204
+ - Round 1: `verification_depth` = "standard"
1205
+ - Round 2: `verification_depth` = "thorough"
1206
+ - Round 3+: `verification_depth` = "thorough", AND if `features.live_verification` is true in config, set `live_verification` = true
1207
+
1208
+ c. **Spawn verifier with round metadata:**
1209
+
1210
+ Display to the user: `◆ Spawning verifier (round {round}/{qa_rounds})...`
1211
+
1212
+ ```
1213
+ Task({
1214
+ subagent_type: "pbr:verifier",
1215
+ prompt: <verifier prompt with additional fields:>
1216
+ verification_depth: "{depth for this round}"
1217
+ live_verification: {true only if round >= 3 AND features.live_verification is true}
1218
+ live_tools: {from verification.live_tools config, only if live_verification is true}
1219
+ round: {current round number}
1220
+ total_rounds: {qa_rounds}
1221
+ })
1222
+ ```
1223
+
1224
+ NOTE: The pbr:verifier subagent type auto-loads the agent definition. Do NOT inline it.
1225
+
1226
+ d. **Verifier writes `VERIFICATION-R{round}.md`** (NOT `VERIFICATION.md`) to the phase directory.
1227
+
1228
+ After verifier completes, check for completion marker: `## VERIFICATION COMPLETE`. Read `VERIFICATION-R{round}.md` frontmatter for status.
1229
+
1230
+ e. **Display round results:**
1231
+
1232
+ `QA Round {round}/{qa_rounds}: {status} -- {passed}/{total} must-haves`
1233
+
1234
+ f. **If round == qa_rounds (final round):**
1235
+ - Copy `VERIFICATION-R{round}.md` to `VERIFICATION.md`
1236
+ - Update `VERIFICATION.md` frontmatter: set `round: {round}`, `total_rounds: {qa_rounds}`
1237
+ - If `qa_rounds` > 1, add a `## QA Round History` section summarizing each round's status:
1238
+ ```
1239
+ ## QA Round History
1240
+
1241
+ | Round | Depth | Status | Passed | Failed |
1242
+ |-------|-------|--------|--------|--------|
1243
+ | 1 | standard | gaps_found | 8/10 | 2 |
1244
+ | 2 | thorough | gaps_found | 9/10 | 1 |
1245
+ | 3 | thorough+live | passed | 10/10 | 0 |
1246
+ ```
1247
+
1248
+ g. **If round < qa_rounds AND all must-haves passed:**
1249
+ - Display: `Round {round} passed. Proceeding to deeper verification (round {round+1})...`
1250
+ - Continue loop (progressive deepening even on pass)
1251
+
1252
+ #### Single-Pass Verification (qa_rounds == 1)
1253
+
1254
+ When `qa_rounds` is 1 (default), execute a single verifier spawn:
1255
+
1256
+ Display to the user: `◆ Spawning verifier...`
636
1257
 
637
1258
  Spawn a verifier Task():
638
1259
 
639
1260
  ```
640
1261
  Task({
641
1262
  subagent_type: "pbr:verifier",
642
- prompt: <verifier prompt>
1263
+ prompt: <verifier prompt with:>
1264
+ verification_depth: "{depth from confidence gate}"
1265
+ round: 1
1266
+ total_rounds: 1
1267
+ live_verification: {true if features.live_verification is true, false otherwise}
1268
+ live_tools: {from verification.live_tools config, only if live_verification is true}
643
1269
  })
644
1270
 
645
1271
  NOTE: The pbr:verifier subagent type auto-loads the agent definition. Do NOT inline it.
646
- ```
647
1272
 
648
- **Path resolution**: Before constructing the agent prompt, resolve `${CLAUDE_PLUGIN_ROOT}` to its absolute path. Do not pass the variable literally in prompts — Task() contexts may not expand it. Use the resolved absolute path for any pbr-tools.js or template references included in the prompt.
1273
+ After verifier completes, check for completion marker: `## VERIFICATION COMPLETE`. Read VERIFICATION.md frontmatter for status.
1274
+ ```
649
1275
 
650
1276
  #### Verifier Prompt Template
651
1277
 
652
- Use the same verifier prompt template as defined in `/pbr:review`: read `skills/review/templates/verifier-prompt.md.tmpl` and fill in its placeholders with the phase's PLAN.md must_haves and SUMMARY.md file paths. This avoids maintaining duplicate verifier prompts across skills.
1278
+ Use the same verifier prompt template as defined in `/pbr:verify-work`: read `${CLAUDE_PLUGIN_ROOT}/skills/review/templates/verifier-prompt.md.tmpl` and fill in its placeholders with the phase's PLAN.md must_haves and SUMMARY.md file paths. This avoids maintaining duplicate verifier prompts across skills.
653
1279
 
654
- After the verifier returns, read the VERIFICATION.md frontmatter and display the results:
1280
+ **Prepend this block to the verifier prompt before sending:**
1281
+ ```
1282
+ <files_to_read>
1283
+ CRITICAL (no hook): Read these files BEFORE any other action:
1284
+ 1. .planning/phases/{NN}-{slug}/PLAN-*.md — must-haves to verify against
1285
+ 2. .planning/phases/{NN}-{slug}/SUMMARY-*.md — executor build summaries
1286
+ 3. .planning/phases/{NN}-{slug}/VERIFICATION.md — prior verification results (if exists)
1287
+ </files_to_read>
1288
+ ```
1289
+
1290
+ **Append this block to the verifier prompt after the placeholders:**
1291
+
1292
+ ```
1293
+ **Verification depth:** {verification_depth}
1294
+ - standard: Full 3-layer verification (L1-L3). Default for round 1.
1295
+ - thorough: Full 4-layer verification (L1-L4) + cross-phase regression. Default for round 2+.
1296
+
1297
+ **Round metadata:** round: {round}, total_rounds: {total_rounds}
1298
+ - If round > 1: Write output to VERIFICATION-R{round}.md (not VERIFICATION.md)
1299
+ - If total_rounds > 1: Include round number in frontmatter
1300
+
1301
+ **Live verification:** {live_verification}
1302
+ - If true: Execute Step 5b (Live Functional Verification) using live_tools: {live_tools}
1303
+ - If false: Skip Step 5b entirely
1304
+ ```
1305
+
1306
+ After the verifier returns, read the VERIFICATION.md (or VERIFICATION-R{round}.md) frontmatter and display the results:
655
1307
 
656
1308
  - If status is `passed`: display `✓ Verifier: {X}/{Y} must-haves verified` (where X = `must_haves_passed` and Y = `must_haves_checked`)
657
1309
  - If status is `gaps_found`: display `⚠ Verifier found {N} gap(s) — see VERIFICATION.md` (where N = `must_haves_failed`)
@@ -670,7 +1322,7 @@ If `--gaps-only` flag was used AND `features.goal_verification` is `true`:
670
1322
  2. Re-run the verifier using the same Step 7 process — this produces a fresh `VERIFICATION.md` that accounts for the gap-closure work
671
1323
  3. Read the new verification status for use in determining `final_status` below
672
1324
 
673
- This ensures that `/pbr:review` after a `--gaps-only` build sees the updated verification state, not stale gaps from before the fix.
1325
+ This ensures that `/pbr:verify-work` after a `--gaps-only` build sees the updated verification state, not stale gaps from before the fix.
674
1326
 
675
1327
  **8-pre-b. Determine final status based on verification:**
676
1328
  - If verification ran and status is `passed`: final_status = "built"
@@ -680,15 +1332,17 @@ This ensures that `/pbr:review` after a `--gaps-only` build sees the updated ver
680
1332
 
681
1333
  **8-pre-c. Codebase map incremental update (conditional):**
682
1334
 
1335
+ **CRITICAL (no hook): Run codebase map update if conditions are met. Do NOT skip this step.**
1336
+
683
1337
  Only run if ALL of these are true:
684
- - `.planning/codebase/` directory exists (project was previously scanned with `/pbr:scan`)
1338
+ - `.planning/codebase/` directory exists (project was previously scanned with `/pbr:map-codebase`)
685
1339
  - Build was not aborted
686
1340
  - `git diff --name-only {pre_build_commit}..HEAD` shows >5 files changed OR `package.json`/`requirements.txt`/`go.mod`/`Cargo.toml` was modified
687
1341
 
688
1342
  If triggered:
689
1343
  1. Record the pre-build commit SHA at the start of Step 1 (before any executors run) for comparison
690
1344
  2. Run `git diff --name-only {pre_build_commit}..HEAD` to get the list of changed files
691
- 3. Display to the user: `◐ Spawning codebase mapper (incremental update)...`
1345
+ 3. Display to the user: `◆ Spawning codebase mapper (incremental update)...`
692
1346
 
693
1347
  Spawn a lightweight mapper Task():
694
1348
  ```
@@ -700,7 +1354,17 @@ If triggered:
700
1354
  ```
701
1355
  4. Do NOT block on this — use `run_in_background: true` and continue to Step 8a. Report completion in Step 8f if it finishes in time.
702
1356
 
703
- **CRITICAL: Update ROADMAP.md progress table NOW. Do NOT skip this step.**
1357
+ **8-pre-d. Write phase manifest (on successful completion):**
1358
+
1359
+ If all plans completed successfully (final_status is "built" or "built (unverified)"), write `.phase-manifest.json` to the phase directory. This manifest aggregates all plan commits for the undo skill's `--phase NN` mode:
1360
+
1361
+ ```bash
1362
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js phase write-manifest {phase-slug}
1363
+ ```
1364
+
1365
+ The manifest collects commit hashes from each plan's SUMMARY.md and stores them as a single artifact that `completePhase()` uses for rollback support. If the command fails, log a warning but do not block completion.
1366
+
1367
+ **CRITICAL (no hook): Update ROADMAP.md progress table NOW. Do NOT skip this step. (roadmap-sync warns)**
704
1368
 
705
1369
  **8a. Update ROADMAP.md Progress table** (REQUIRED — do this BEFORE updating STATE.md):
706
1370
 
@@ -709,8 +1373,13 @@ If triggered:
709
1373
  node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js roadmap update-plans {phase} {completed} {total}
710
1374
  node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js roadmap update-status {phase} {final_status}
711
1375
  ```
712
- These return `{ success, old_status, new_status }` or `{ success, old_plans, new_plans }`. Falls back to manual editing if unavailable.
1376
+ These return `{ success, old_status, new_status }` or `{ success, old_plans, new_plans }`.
1377
+
1378
+ > Note: Use CLI for atomic writes — direct Write bypasses file locking.
1379
+
1380
+ **CLI exit code verification with retry**: Same pattern as Step 6f -- if any CLI command fails, retry once after 1 second. If retry also fails, log a warning but do not block the build.
713
1381
 
1382
+ **Last-resort fallback** (only if CLI is completely unavailable after retry):
714
1383
  1. Open `.planning/ROADMAP.md`
715
1384
  2. Find the `## Progress` table
716
1385
  3. Locate the row matching this phase number
@@ -718,13 +1387,61 @@ These return `{ success, old_status, new_status }` or `{ success, old_plans, new
718
1387
  5. Update the `Status` column to the final_status determined in Step 8-pre
719
1388
  6. Save the file — do NOT skip this step
720
1389
 
721
- **CRITICAL: Update STATE.md NOW with phase completion status. Do NOT skip this step.**
1390
+ **CRITICAL (no hook): Update STATE.md NOW with phase completion status. Do NOT skip this step. (state-sync warns)**
722
1391
 
723
- **8b. Update STATE.md:**
724
- - Phase status: {final_status from Step 8-pre}
725
- - Plan completion count
726
- - Last activity timestamp
727
- - Progress bar
1392
+ **8b. Update STATE.md (CRITICAL (no hook) — update BOTH frontmatter AND body):**
1393
+
1394
+ > Note: Use CLI for atomic writes — direct Write bypasses file locking.
1395
+
1396
+ Use CLI commands to update STATE.md (keeps frontmatter and body in sync atomically):
1397
+ ```bash
1398
+ node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js state patch '{"status":"{final_status}","plans_complete":"{N}","last_activity":"now","progress_percent":"{pct}","last_command":"/pbr:execute-phase {N}"}'
1399
+ ```
1400
+ These update both frontmatter fields (`status`, `plans_complete`, `last_activity`, `progress_percent`, `last_command`) and the body `## Current Position` section (`Phase:`, `Plan:`, `Status:`, `Last activity:`, `Progress:` bar) atomically — they MUST stay in sync.
1401
+
1402
+ **Completion check:** Before proceeding to 8c, confirm ALL of:
1403
+ - [ ] STATE.md frontmatter fields set: status, plans_complete, last_activity, progress_percent, last_command
1404
+ - [ ] STATE.md body ## Current Position updated: Phase, Status, Last activity, Progress bar
1405
+ - [ ] Frontmatter and body are consistent (same status value in both)
1406
+
1407
+ To verify programmatically: `node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js step-verify build step-8b '["STATE.md updated","ROADMAP.md updated","commit made"]'`
1408
+ If any item fails, investigate before marking phase complete.
1409
+
1410
+ **8b-ii. Calculate and write velocity metrics to STATE.md (informational only):**
1411
+
1412
+ After updating STATE.md status, calculate velocity metrics from this phase's build data:
1413
+
1414
+ 1. Read all SUMMARY.md files in the current phase directory. Extract `metrics.duration_minutes` from each frontmatter (if present). If duration is not in frontmatter, estimate from git log: time between first and last commit for that plan using `git log --format=%aI`.
1415
+
1416
+ 2. Calculate:
1417
+ - `plans_executed`: count of SUMMARY.md files in this phase
1418
+ - `avg_duration_minutes`: mean of all plan durations (round to nearest integer)
1419
+ - `phase_duration_minutes`: total time from first plan start to last plan completion
1420
+ - `trend`: compare this phase's avg\_duration to the previous phase's avg\_duration (read prior phase SUMMARY.md files if they exist):
1421
+ - If >20% faster: "improving"
1422
+ - If >20% slower: "degrading"
1423
+ - Otherwise: "stable"
1424
+ - If no previous phase data: "baseline"
1425
+
1426
+ 3. Count total plans across all phases from ROADMAP.md progress table for the `total_plans` metric.
1427
+
1428
+ 4. Write a `## Metrics` section to STATE.md. If a `## Metrics` section already exists, replace it. Otherwise insert it before `## History` (or append at end if no History section):
1429
+
1430
+ ```
1431
+ ## Metrics
1432
+
1433
+ | Metric | Value |
1434
+ |--------|-------|
1435
+ | Plans executed (this phase) | {plans_executed} |
1436
+ | Avg plan duration | {avg_duration_minutes} min |
1437
+ | Phase duration | {phase_duration_minutes} min |
1438
+ | Trend | {trend} |
1439
+ | Total plans (all phases) | {total_plans} |
1440
+ ```
1441
+
1442
+ 5. Keep the metrics section concise (under 10 lines) to respect the 100-line STATE.md cap from RH-56. The metrics section replaces itself on each phase completion — it does NOT accumulate.
1443
+
1444
+ 6. Metrics are **informational only** — they do NOT gate any workflow decisions.
728
1445
 
729
1446
  **8c. Commit planning docs (if configured):**
730
1447
  Reference: `skills/shared/commit-planning-docs.md` for the standard commit pattern.
@@ -732,40 +1449,170 @@ If `planning.commit_docs` is `true`:
732
1449
  - Stage SUMMARY.md files and VERIFICATION.md
733
1450
  - Commit: `docs({phase}): add build summaries and verification`
734
1451
 
1452
+ **8c-ii. Evolve PROJECT.md (conditional, lightweight):**
1453
+
1454
+ After a successful phase build (final_status is "built" or "built (unverified)"), check if `.planning/PROJECT.md` exists. If it does:
1455
+
1456
+ 1. Read the current phase's SUMMARY.md files (frontmatter only: `provides`, `key_files`, `deferred` fields)
1457
+ 2. Read `.planning/PROJECT.md` to find the `### Active` requirements section
1458
+ 3. Spawn a lightweight Task() to propose PROJECT.md updates:
1459
+
1460
+ ```
1461
+ Task({
1462
+ subagent_type: "pbr:general",
1463
+ model: "haiku",
1464
+ prompt: "Evolve PROJECT.md after Phase {N} completion.
1465
+
1466
+ Read .planning/PROJECT.md and the SUMMARY.md files in .planning/phases/{NN}-{slug}/.
1467
+
1468
+ For each SUMMARY.md, check the 'provides' field against PROJECT.md's ### Active requirements:
1469
+ - If a requirement was satisfied by this phase's deliverables, move it to ### Validated with: '- [checkmark] {requirement} -- Phase {N}'
1470
+ - If a SUMMARY.md 'deferred' field mentions a new capability need, add it to ### Active
1471
+
1472
+ Also check STATE.md ## Accumulated Context ### Blockers/Concerns:
1473
+ - If a blocker was resolved by this phase's work (check provides/key_files), remove it
1474
+ - Keep unresolved blockers
1475
+
1476
+ Write the updated PROJECT.md. Write the updated STATE.md Accumulated Context section.
1477
+
1478
+ End with: ## EVOLUTION COMPLETE"
1479
+ })
1480
+ ```
1481
+
1482
+ 4. Run in background (`run_in_background: true`) -- do NOT block the finalization flow.
1483
+ 5. **Skip if**: `final_status` is "partial" (incomplete builds should not evolve project state).
1484
+
1485
+ This step restores the legacy transition workflow's PROJECT.md evolution that was lost during migration. It keeps requirements and blockers current across phases.
1486
+
735
1487
  **8d. Handle git branching:**
736
1488
  If `git.branching` is `phase`:
737
- - All work was done on the phase branch (created in Step 1)
738
- - Squash merge to main: `git checkout main && git merge --squash plan-build-run/phase-{NN}-{name}`
739
- - Use AskUserQuestion (pattern: yes-no from `skills/shared/gate-prompts.md`):
740
- question: "Phase {N} complete on branch `plan-build-run/phase-{NN}-{name}`. Squash merge to main?"
741
- header: "Merge?"
742
- options:
743
- - label: "Yes, merge" description: "Squash merge to main and delete the phase branch"
744
- - label: "No, keep" description: "Leave the branch as-is for manual review"
745
- - If "Yes, merge": complete the merge and delete the phase branch
746
- - If "No, keep" or "Other": leave the branch as-is and inform the user
1489
+ - Verify we are on the phase branch: `git branch --show-current`
1490
+ - If NOT on the phase branch, warn: "Expected to be on {branch-name} but on {current}. Skipping merge."
1491
+ - If on the phase branch:
1492
+ - **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
1493
+ Use AskUserQuestion (pattern: yes-no from `skills/shared/gate-prompts.md`):
1494
+ question: "Phase {N} complete on branch `pbr/phase-{NN}-{name}`. Squash merge to main?"
1495
+ header: "Merge?"
1496
+ options:
1497
+ - label: "Yes, merge" description: "Squash merge to main and delete the phase branch"
1498
+ - label: "No, keep" description: "Leave the branch as-is for manual review"
1499
+ - If "Yes, merge":
1500
+ 1. `git switch main`
1501
+ 2. `git merge --squash pbr/phase-{NN}-{name}`
1502
+ 3. `git commit -m "feat({NN}-{name}): phase {N} squash merge"`
1503
+ 4. `git branch -d pbr/phase-{NN}-{name}`
1504
+ 5. Log: "Phase branch merged and deleted"
1505
+ - If "No, keep" or "Other": leave the branch as-is and inform the user
1506
+ - **Skip if:** `auto_mode` is true — auto-proceed with "Yes, merge"
1507
+
1508
+ If `git.branching` is `milestone`:
1509
+ - Do NOT merge after individual phase completion
1510
+ - Log: "Phase complete on milestone branch. Branch will be merged when milestone is completed via /pbr:milestone complete."
1511
+ - Stay on the milestone branch for the next phase
1512
+
1513
+ **8d-ii. PR Creation (when branching enabled):**
1514
+
1515
+ If `config.git.branching` is `phase` or `milestone` AND phase verification passed:
1516
+
1517
+ 1. Push the phase branch: `git push -u origin {branch-name}`
1518
+ 2. If `config.git.auto_pr` is `true`:
1519
+ - Run: `gh pr create --title "feat({phase-scope}): {phase-slug}" --body "$(cat <<'EOF'
1520
+ ## Phase {N}: {phase name}
1521
+
1522
+ **Goal**: {phase goal from ROADMAP.md}
1523
+
1524
+ ### Key Files
1525
+ {key_files from SUMMARY.md, bulleted}
1526
+
1527
+ ### Verification
1528
+ {pass/fail status from VERIFICATION.md}
1529
+
1530
+ ---
1531
+ Generated by Plan-Build-Run
1532
+ EOF
1533
+ )"`
1534
+ 3. If `config.git.auto_pr` is `false`:
1535
+ - **CRITICAL -- DO NOT SKIP**: Present the following choice to the user via AskUserQuestion before proceeding:
1536
+ Use AskUserQuestion to ask: "Phase branch pushed. Create a PR?"
1537
+ - Options: Yes (create PR as above) / No / Later (skip)
747
1538
 
748
1539
  **8e. Auto-advance / auto-continue (conditional):**
749
1540
 
1541
+ **If `auto_mode` is `true`:** Set `features.auto_advance = true` and `mode = autonomous` behavior for the remainder of this invocation. Pass `--auto` to chained skills. Fall through to the auto_advance logic below.
1542
+
1543
+ **Speculative Planning (conditional):**
1544
+
1545
+ Before evaluating auto-advance, check if the next phase can be speculatively planned:
1546
+
1547
+ 1. Read `workflow.speculative_planning` from config. If `false` or not set, skip this block entirely.
1548
+ 2. Determine the next phase number: `N+1`.
1549
+ 3. Check ROADMAP.md for phase N+1:
1550
+ a. Does phase N+1 exist in the roadmap?
1551
+ b. Read its `**Depends on:**` field. Does it list phase N as a dependency?
1552
+ c. If N+1 depends on N: skip speculative planning — the next phase needs this phase's output.
1553
+ d. If N+1 does NOT depend on N (independent): proceed with speculative planning.
1554
+
1555
+ 4. Check deviation count from this build:
1556
+ a. Read all SUMMARY.md frontmatter from this phase. Count total `deviations` across all plans.
1557
+ b. If deviation count > 2: skip speculative planning. Display: `Speculative planning skipped — {count} deviations detected (threshold: 2)`
1558
+ c. If deviation count <= 2: proceed.
1559
+
1560
+ 5. Spawn speculative planner in background:
1561
+ a. Display: `Spawning speculative planner for Phase {N+1} (independent of Phase {N})...`
1562
+ b. Write speculative plan to a temp location: `.planning/phases/{N+1-slug}/.speculative/`
1563
+ c. Spawn:
1564
+
1565
+ <!-- markdownlint-disable MD046 -->
1566
+
1567
+ Task({
1568
+ subagent_type: "pbr:planner",
1569
+ model: "sonnet",
1570
+ run_in_background: true,
1571
+ prompt: "Plan Phase {N+1}: {phase goal from ROADMAP.md}. Write plans to .planning/phases/{N+1-slug}/. This is a SPECULATIVE plan — it may be discarded if Phase {N} deviates significantly."
1572
+ })
1573
+
1574
+ <!-- markdownlint-enable MD046 -->
1575
+
1576
+ d. Do NOT block on the result — continue to auto-advance evaluation.
1577
+
1578
+ 6. After the build completes (in Step 8f), check if speculative planner finished:
1579
+ a. If finished AND phase N deviation count is still <= 2: move speculative plans from `.speculative/` to the phase directory. Display: `Speculative plans for Phase {N+1} ready`
1580
+ b. If finished BUT deviation count > 2: discard speculative plans. Delete `.speculative/` directory. Display: `Speculative plans for Phase {N+1} discarded (Phase {N} deviated)`
1581
+ c. If not yet finished: note in completion summary. Plans will be available when the planner completes.
1582
+
750
1583
  **If `features.auto_advance` is `true` AND `mode` is `autonomous`:**
751
1584
  Chain to the next skill directly within this session. This eliminates manual phase cycling.
752
1585
 
1586
+ **NOTE:** When `workflow.phase_boundary_clear` is `enforce`, do NOT write `.auto-next` — force the user to /clear first. The phase boundary enforcement in auto-continue.js will also block continuation if a `.phase-boundary-pending` signal file exists.
1587
+
753
1588
  | Build Result | Next Action | How |
754
1589
  |-------------|-------------|-----|
755
- | Verification passed, more phases | Plan next phase | `Skill({ skill: "pbr:plan", args: "{N+1}" })` |
756
- | Verification skipped | Run review | `Skill({ skill: "pbr:review", args: "{N}" })` |
757
- | Verification gaps found | **HARD STOP** present gaps to user | Do NOT auto-advance past failures |
758
- | Last phase in current milestone | **HARD STOP** — milestone boundary | Suggest `/pbr:milestone audit`. Explain: "auto_advance pauses at milestone boundaries — your sign-off is required." |
759
- | Build errors occurred | **HARD STOP** — errors need human review | Do NOT auto-advance past errors |
1590
+ | Verification passed, more phases | Plan next phase | `Skill({ skill: "pbr:plan", args: "{N+1}" })` (append `--auto` if `auto_mode`) |
1591
+ | Verification skipped, `workflow.validate_phase: true` | Run validate-phase | `Skill({ skill: "pbr:validate-phase", args: "{N}" })` (append `--auto` if `auto_mode`) |
1592
+ | Verification skipped, `workflow.validate_phase: false` | Run review | `Skill({ skill: "pbr:review", args: "{N}" })` (append `--auto` if `auto_mode`) |
1593
+ | Verification gaps found | **HARD STOP** — present gaps to user | If `auto_continue` also true: write `.planning/.auto-next` with `/pbr:verify-work {N}` before stopping. Do NOT auto-advance past failures. |
1594
+ | Last phase in current milestone | **HARD STOP** — milestone boundary | If `auto_continue` also true: write `.planning/.auto-next` with `/pbr:complete-milestone` before stopping. Suggest `/pbr:audit-milestone`. Explain: "auto_advance pauses at milestone boundaries — your sign-off is required." |
1595
+ | Build errors occurred | **HARD STOP** — errors need human review | If `auto_continue` also true: write `.planning/.auto-next` with `/pbr:execute-phase {N}` before stopping. Do NOT auto-advance past errors. |
760
1596
 
761
1597
  After invoking the chained skill, it runs within the same session. When it completes, the chained skill may itself chain further (review→plan, plan→build) if auto_advance remains true. This creates the full cycle: build→review→plan→build→...
762
1598
 
763
1599
  **Else if `features.auto_continue` is `true`:**
764
- Write `.planning/.auto-next` containing the next logical command (e.g., `/pbr:plan {N+1}` or `/pbr:review {N}`)
1600
+ Write `.planning/.auto-next` containing the next logical command (e.g., `/pbr:plan-phase {N+1}` or `/pbr:verify-work {N}`)
765
1601
  - This file signals to the user or to wrapper scripts that the next step is ready
766
1602
 
1603
+ **Completion check:** Before proceeding to 8f, confirm ALL of:
1604
+ - [ ] auto_advance OR auto_continue evaluated (one path taken)
1605
+ - [ ] If auto_continue: `.auto-next` file written with correct next command
1606
+ - [ ] Pending todos evaluated (Step 8e-ii)
1607
+ - [ ] Clearly-satisfied todos auto-closed via `pbr-tools.js todo done`
1608
+
1609
+ To verify programmatically: `node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js step-verify build step-8e '["STATE.md updated","commit made"]'`
1610
+ If any item fails, investigate before closing the session.
1611
+
767
1612
  **8e-ii. Check Pending Todos:**
768
1613
 
1614
+ **CRITICAL (no hook): Check pending todos after build. Do NOT skip this step.**
1615
+
769
1616
  After completing the build, check if any pending todos are now satisfied:
770
1617
 
771
1618
  1. Check if `.planning/todos/pending/` exists and contains files
@@ -779,16 +1626,38 @@ After completing the build, check if any pending todos are now satisfied:
779
1626
 
780
1627
  Only auto-close when the match is unambiguous. When in doubt, leave it open.
781
1628
 
1629
+ **8f-pre. Phase Boundary Clear (conditional):**
1630
+
1631
+ After verification completes and before the branded banner, check `workflow.phase_boundary_clear` from config:
1632
+
1633
+ 1. Read config: `node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js config get workflow.phase_boundary_clear`
1634
+ 2. If `"off"` or missing: skip (no action — current default behavior)
1635
+ 3. If `"recommend"`:
1636
+ - Add an advisory line to the completion output:
1637
+ ```
1638
+ Context Reset: Run /clear before starting the next phase for optimal context quality.
1639
+ ```
1640
+ - This is informational only — do NOT block the user
1641
+ 4. If `"enforce"`:
1642
+ - Add a prominent warning to the completion output:
1643
+ ```
1644
+ CONTEXT RESET REQUIRED
1645
+ Phase boundary clear is enforced. Run /clear before continuing to the next phase.
1646
+ The next /pbr:plan-phase or /pbr:execute-phase will work best with a fresh context window.
1647
+ ```
1648
+ - Write `.planning/.phase-boundary-pending` file containing `{phase_num}` — this signals to auto-continue.js that a clear is needed
1649
+ - Do NOT write `.planning/.auto-next` when enforce is active — the auto-continue hook will handle this
1650
+
782
1651
  **8f. Present completion summary:**
783
1652
 
784
- Use the branded output templates from `references/ui-formatting.md`. Route based on status:
1653
+ Use the branded output templates from `references/ui-brand.md`. Route based on status:
785
1654
 
786
1655
  | Status | Template |
787
1656
  |--------|----------|
788
1657
  | `passed` + more phases in current milestone | "Phase Complete" template |
789
1658
  | `passed` + last phase in current milestone | "Milestone Complete" template |
790
1659
 
791
- **Milestone boundary detection:** To determine "last phase in current milestone", read ROADMAP.md and find the `## Milestone:` section containing the current phase. Check its `**Phases:** start - end` range. If the current phase equals `end`, this is the last phase in the milestone. For projects with a single milestone or no explicit milestone sections, "last phase in ROADMAP" is equivalent.
1660
+ **Milestone boundary detection:** To determine "last phase in current milestone", read ROADMAP.md and find the `## Milestone:` section containing the current phase. Active milestones use `## Milestone:` headings directly; completed milestones are wrapped in `<details><summary>## Milestone:` blocks or use the legacy `-- COMPLETED` suffix. Check the active milestone's `**Phases:** start - end` range. If the current phase equals `end`, this is the last phase in the milestone. For projects with a single milestone or no explicit milestone sections, "last phase in ROADMAP" is equivalent.
792
1661
  | `gaps_found` | "Gaps Found" template |
793
1662
 
794
1663
  Before the branded banner, include the results table:
@@ -810,107 +1679,54 @@ Total files modified: {count}
810
1679
  Deviations: {count}
811
1680
  ```
812
1681
 
813
- Then present the appropriate branded banner:
814
-
815
- **If `passed` + more phases:**
816
- ```
817
- ╔══════════════════════════════════════════════════════════════╗
818
- ║ PLAN-BUILD-RUN ► PHASE {N} COMPLETE ✓ ║
819
- ╚══════════════════════════════════════════════════════════════╝
820
-
821
- **Phase {N}: {Name}**
822
-
823
- {X} plans executed
824
- Goal verified ✓
825
-
826
-
827
-
828
- ╔══════════════════════════════════════════════════════════════╗
829
- ║ ▶ NEXT UP ║
830
- ╚══════════════════════════════════════════════════════════════╝
831
-
832
- **Phase {N+1}: {Name}** — {Goal from ROADMAP.md}
1682
+ Then present the appropriate branded banner from Read `references/ui-brand.md` § "Completion Summary Templates":
833
1683
 
834
- `/pbr:plan {N+1}`
1684
+ - **If `passed` + more phases:** Use the "Phase Complete" template. Fill in phase number, name, plan count, and next phase details.
1685
+ - **If `passed` + last phase:** Use the "Milestone Complete" template. Fill in phase count.
1686
+ - **If `gaps_found`:** Use the "Gaps Found" template. Fill in phase number, name, score, and gap summaries from VERIFICATION.md.
835
1687
 
836
- <sub>`/clear` first fresh context window</sub>
837
-
838
-
839
-
840
- **Also available:**
841
- - `/pbr:review {N}` — manual acceptance testing before continuing
842
- - `/pbr:discuss {N+1}` — talk through the next phase before planning
843
- - `/pbr:status` — see full project status
1688
+ **Conditional routing additions for Next Up block:**
844
1689
 
1690
+ After the primary next-action command in the NEXT UP block, append the following conditional suggestions (in this order):
845
1691
 
1692
+ **A. Ship suggestion (gated: git.branching=phase AND auto_pr=true):**
1693
+ Read `config.git.branching` and `config.git.auto_pr` from `.planning/config.json`.
1694
+ If `branching === "phase"` AND `auto_pr === true`:
846
1695
  ```
847
-
848
- **If `passed` + last phase:**
1696
+ **Also available:** Create a PR for this phase's branch
1697
+ `/pbr:ship`
849
1698
  ```
850
- ╔══════════════════════════════════════════════════════════════╗
851
- ║ PLAN-BUILD-RUN ► MILESTONE COMPLETE 🎉 ║
852
- ╚══════════════════════════════════════════════════════════════╝
853
-
854
- {N} phases completed
855
- All phase goals verified ✓
856
-
857
-
858
-
859
- ╔══════════════════════════════════════════════════════════════╗
860
- ║ ▶ NEXT UP ║
861
- ╚══════════════════════════════════════════════════════════════╝
862
-
863
- **Audit milestone** — verify requirements, cross-phase integration, E2E flows
864
-
865
- `/pbr:milestone audit`
866
-
867
- <sub>`/clear` first → fresh context window</sub>
868
-
869
-
870
-
871
- **Also available:**
872
- - `/pbr:review` — manual acceptance testing
873
- - `/pbr:milestone complete` — archive milestone after audit passes
874
-
875
1699
 
1700
+ **B. UI review suggestion (gated: UI files in SUMMARY key_files):**
1701
+ Collect all `key_files` values from every SUMMARY.md frontmatter in this phase.
1702
+ Check if any entry has extension `.tsx`, `.jsx`, `.css`, `.scss`, `.vue`, `.svelte`, or `.html` (case-insensitive).
1703
+ If YES:
876
1704
  ```
877
-
878
- **If `gaps_found`:**
1705
+ **UI components detected:** Review visual output before continuing
1706
+ `/pbr:ui-review {N}`
879
1707
  ```
880
- ╔══════════════════════════════════════════════════════════════╗
881
- ║ PLAN-BUILD-RUN ► PHASE {N} GAPS FOUND ⚠ ║
882
- ╚══════════════════════════════════════════════════════════════╝
1708
+ If NO: skip silently — do not display an empty block.
883
1709
 
884
- **Phase {N}: {Name}**
1710
+ Both A and B are appended AFTER the primary next-action command. They never replace the primary routing.
885
1711
 
886
- Score: {X}/{Y} must-haves verified
887
- Report: .planning/phases/{phase_dir}/VERIFICATION.md
1712
+ Include `<sub>/clear first → fresh context window</sub>` inside the Next Up routing block of the completion template.
888
1713
 
889
- ### What's Missing
1714
+ **NEXT UP routing (when verification was skipped):**
890
1715
 
891
- {Extract gap summaries from VERIFICATION.md}
892
-
893
-
894
-
895
- ╔══════════════════════════════════════════════════════════════╗
896
- ║ ▶ NEXT UP ║
897
- ╚══════════════════════════════════════════════════════════════╝
898
-
899
- **Plan gap closure** — create additional plans to complete the phase
900
-
901
- `/pbr:plan {N} --gaps`
902
-
903
- <sub>`/clear` first → fresh context window</sub>
1716
+ If verification was skipped and `workflow.validate_phase` is `true` (default), present:
904
1717
 
1718
+ ```
1719
+ **Run quality gate** to check test coverage gaps
905
1720
 
1721
+ `/pbr:validate-phase {N}`
906
1722
 
907
1723
  **Also available:**
908
- - `cat .planning/phases/{phase_dir}/VERIFICATION.md` — see full report
909
- - `/pbr:review {N}` — manual testing before planning
910
-
911
-
1724
+ - `/pbr:review {N}` — skip validation, go straight to review
1725
+ - `/pbr:continue` — auto-route to next logical step
912
1726
  ```
913
1727
 
1728
+ If `workflow.validate_phase` is `false`, present the existing `/pbr:review {N}` suggestion instead.
1729
+
914
1730
  **8g. Display USER-SETUP.md (conditional):**
915
1731
 
916
1732
  Check if `.planning/phases/{NN}-{slug}/USER-SETUP.md` exists. If it does:
@@ -957,12 +1773,12 @@ If SUMMARY.md shows files not listed in the plan's `files_modified`:
957
1773
 
958
1774
  ### Build on wrong branch
959
1775
  If `git.branching` is `phase` but we're not on the phase branch:
960
- - Create the phase branch: `git checkout -b plan-build-run/phase-{NN}-{name}`
1776
+ - Create the phase branch: `git switch -c pbr/phase-{NN}-{name}`
961
1777
  - Proceed with build on the new branch
962
1778
 
963
1779
  ---
964
1780
 
965
- ## Files Created/Modified by /pbr:build
1781
+ ## Files Created/Modified by /pbr:execute-phase
966
1782
 
967
1783
  | File | Purpose | When |
968
1784
  |------|---------|------|
@@ -975,3 +1791,9 @@ If `git.branching` is `phase` but we're not on the phase branch:
975
1791
  | `.planning/STATE.md` | Updated progress | Steps 6f, 8b |
976
1792
  | `.planning/.auto-next` | Next command signal (if auto_continue enabled) | Step 8e |
977
1793
  | Project source files | Actual code | Step 6 (executors) |
1794
+
1795
+ ---
1796
+
1797
+ ## Cleanup
1798
+
1799
+ Delete `.planning/.active-skill` if it exists. This must happen on all paths (success, partial, and failure) before reporting results.