@sienklogic/plan-build-run 2.11.0 → 2.12.1

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