@sienklogic/plan-build-run 2.21.1 → 2.21.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (982) hide show
  1. package/CHANGELOG.md +1331 -323
  2. package/CLAUDE.md +75 -40
  3. package/LICENSE +2 -1
  4. package/README.md +412 -177
  5. package/bin/install.js +2752 -0
  6. package/dashboard/bin/cli.cjs +96 -0
  7. package/dashboard/bin/stop.cjs +129 -0
  8. package/dashboard/eslint.config.js +37 -0
  9. package/dashboard/index.html +20 -0
  10. package/dashboard/package.json +27 -25
  11. package/dashboard/server/index.js +151 -0
  12. package/dashboard/server/lib/frontmatter.js +92 -0
  13. package/dashboard/server/middleware/static.js +35 -0
  14. package/dashboard/server/package.json +16 -0
  15. package/dashboard/server/routes/agents.js +234 -0
  16. package/dashboard/server/routes/config.js +64 -0
  17. package/dashboard/server/routes/health.js +98 -0
  18. package/dashboard/server/routes/incidents.js +78 -0
  19. package/dashboard/server/routes/intel.js +69 -0
  20. package/dashboard/server/routes/memory.js +107 -0
  21. package/dashboard/server/routes/planning.js +234 -0
  22. package/dashboard/server/routes/progress.js +77 -0
  23. package/dashboard/server/routes/projects.js +36 -0
  24. package/dashboard/server/routes/requirements.js +40 -0
  25. package/dashboard/server/routes/roadmap.js +69 -0
  26. package/dashboard/server/routes/sessions.js +70 -0
  27. package/dashboard/server/routes/status.js +25 -0
  28. package/dashboard/server/routes/telemetry.js +233 -0
  29. package/dashboard/server/services/file-watcher.js +105 -0
  30. package/dashboard/server/services/planning-reader.js +727 -0
  31. package/dashboard/server/test/cli.test.js +34 -0
  32. package/dashboard/server/test/frontmatter.test.js +104 -0
  33. package/dashboard/server/test/isolation.test.js +32 -0
  34. package/dashboard/server/test/planning-reader.test.js +151 -0
  35. package/dashboard/server/test/routes.test.js +91 -0
  36. package/dashboard/server/test/ws.test.js +81 -0
  37. package/dashboard/server/ws.js +96 -0
  38. package/dashboard/src/App.jsx +165 -0
  39. package/dashboard/src/components/charts/BudgetBars.jsx +42 -0
  40. package/dashboard/src/components/charts/ContextRadar.jsx +34 -0
  41. package/dashboard/src/components/charts/PhaseDonut.jsx +66 -0
  42. package/dashboard/src/components/charts/SuccessTrend.jsx +45 -0
  43. package/dashboard/src/components/charts/TokenChart.jsx +55 -0
  44. package/dashboard/src/components/charts/index.js +5 -0
  45. package/dashboard/src/components/config/CfgSection.jsx +93 -0
  46. package/dashboard/src/components/layout/Header.jsx +89 -0
  47. package/dashboard/src/components/layout/ProjectSwitcher.jsx +160 -0
  48. package/dashboard/src/components/layout/Sidebar.jsx +161 -0
  49. package/dashboard/src/components/ui/AutoModeBanner.jsx +138 -0
  50. package/dashboard/src/components/ui/BackButton.jsx +27 -0
  51. package/dashboard/src/components/ui/Badge.jsx +27 -0
  52. package/dashboard/src/components/ui/Card.jsx +23 -0
  53. package/dashboard/src/components/ui/ChartTooltip.jsx +48 -0
  54. package/dashboard/src/components/ui/CheckpointBox.jsx +110 -0
  55. package/dashboard/src/components/ui/CodeBlock.jsx +27 -0
  56. package/dashboard/src/components/ui/ConfidenceBadge.jsx +20 -0
  57. package/dashboard/src/components/ui/ConfirmModal.jsx +161 -0
  58. package/dashboard/src/components/ui/ConnectionBanner.jsx +60 -0
  59. package/dashboard/src/components/ui/ErrorBoundary.jsx +106 -0
  60. package/dashboard/src/components/ui/ErrorBox.jsx +107 -0
  61. package/dashboard/src/components/ui/KeyValue.jsx +33 -0
  62. package/dashboard/src/components/ui/LoadingSkeleton.jsx +84 -0
  63. package/dashboard/src/components/ui/MetricCard.jsx +58 -0
  64. package/dashboard/src/components/ui/NextUpBlock.jsx +92 -0
  65. package/dashboard/src/components/ui/NumberInput.jsx +44 -0
  66. package/dashboard/src/components/ui/PBRBanner.jsx +47 -0
  67. package/dashboard/src/components/ui/PipelineView.jsx +130 -0
  68. package/dashboard/src/components/ui/ProgressBar.jsx +28 -0
  69. package/dashboard/src/components/ui/ProgressDisplay.jsx +47 -0
  70. package/dashboard/src/components/ui/QualityGateBadge.jsx +15 -0
  71. package/dashboard/src/components/ui/SectionTitle.jsx +35 -0
  72. package/dashboard/src/components/ui/SelectInput.jsx +45 -0
  73. package/dashboard/src/components/ui/StatusDot.jsx +51 -0
  74. package/dashboard/src/components/ui/StatusSymbol.jsx +49 -0
  75. package/dashboard/src/components/ui/TabBar.jsx +41 -0
  76. package/dashboard/src/components/ui/TextInput.jsx +42 -0
  77. package/dashboard/src/components/ui/Toast.jsx +117 -0
  78. package/dashboard/src/components/ui/Toggle.jsx +70 -0
  79. package/dashboard/src/components/ui/index.js +29 -0
  80. package/dashboard/src/hooks/useDocumentTitle.js +16 -0
  81. package/dashboard/src/hooks/useFetch.js +50 -0
  82. package/dashboard/src/hooks/useToast.jsx +43 -0
  83. package/dashboard/src/hooks/useWebSocket.js +103 -0
  84. package/dashboard/src/lib/api.js +112 -0
  85. package/dashboard/src/lib/configSchema.js +189 -0
  86. package/dashboard/src/lib/constants.js +22 -0
  87. package/dashboard/src/main.jsx +15 -0
  88. package/dashboard/src/pages/AgentsPage.jsx +191 -0
  89. package/dashboard/src/pages/ConfigPage.jsx +298 -0
  90. package/dashboard/src/pages/HooksPage.jsx +412 -0
  91. package/dashboard/src/pages/IncidentsPage.jsx +135 -0
  92. package/dashboard/src/pages/IntelPage.jsx +193 -0
  93. package/dashboard/src/pages/LiveFeed.jsx +274 -0
  94. package/dashboard/src/pages/MemoryPage.jsx +107 -0
  95. package/dashboard/src/pages/OnboardingPage.jsx +117 -0
  96. package/dashboard/src/pages/Overview.jsx +360 -0
  97. package/dashboard/src/pages/PhaseDetailView.jsx +216 -0
  98. package/dashboard/src/pages/PlanningPage.jsx +181 -0
  99. package/dashboard/src/pages/ProgressPage.jsx +249 -0
  100. package/dashboard/src/pages/ResearchPage.jsx +129 -0
  101. package/dashboard/src/pages/RoadmapPage.jsx +251 -0
  102. package/dashboard/src/pages/SessionsPage.jsx +117 -0
  103. package/dashboard/src/pages/Telemetry.jsx +166 -0
  104. package/dashboard/src/pages/planning/DecisionsTab.jsx +153 -0
  105. package/dashboard/src/pages/planning/FilesTab.jsx +420 -0
  106. package/dashboard/src/pages/planning/MilestoneDetail.jsx +319 -0
  107. package/dashboard/src/pages/planning/MilestonesTab.jsx +151 -0
  108. package/dashboard/src/pages/planning/NotesTab.jsx +251 -0
  109. package/dashboard/src/pages/planning/PhasesTab.jsx +218 -0
  110. package/dashboard/src/pages/planning/QuickTab.jsx +50 -0
  111. package/dashboard/src/pages/planning/ResearchTab.jsx +103 -0
  112. package/dashboard/src/pages/planning/TodosTab.jsx +297 -0
  113. package/dashboard/src/theme/ThemeProvider.jsx +38 -0
  114. package/dashboard/src/theme/tokens.js +17 -0
  115. package/dashboard/tests/components/ConfirmModal.test.jsx +179 -0
  116. package/dashboard/tests/components/ConnectionBanner.test.jsx +37 -0
  117. package/dashboard/tests/components/ErrorBoundary.test.jsx +59 -0
  118. package/dashboard/tests/components/LoadingSkeleton.test.jsx +46 -0
  119. package/dashboard/tests/components/ToastContainer.test.jsx +47 -0
  120. package/dashboard/tests/components/Toggle.test.jsx +61 -0
  121. package/dashboard/tests/hooks/useFetch.test.jsx +77 -0
  122. package/dashboard/tests/hooks/useToast.test.jsx +78 -0
  123. package/dashboard/tests/hooks/useWebSocket.test.jsx +128 -0
  124. package/dashboard/tests/pages/ConfigPage.test.jsx +199 -0
  125. package/dashboard/tests/pages/PlanningPage.test.jsx +119 -0
  126. package/dashboard/tests/pages/planning/FilesTab.test.jsx +198 -0
  127. package/dashboard/tests/pages/planning/NotesTab.test.jsx +178 -0
  128. package/dashboard/tests/pages/planning/TodosTab.test.jsx +188 -0
  129. package/dashboard/tests/performance.test.jsx +46 -0
  130. package/dashboard/tests/routes/config.test.js +98 -0
  131. package/dashboard/tests/routes/health.test.js +40 -0
  132. package/dashboard/tests/routes/planning.test.js +112 -0
  133. package/dashboard/tests/routes/roadmap.test.js +91 -0
  134. package/dashboard/tests/routes/status.test.js +131 -0
  135. package/dashboard/tests/server/planning-reader.test.js +153 -0
  136. package/dashboard/tests/setup.js +7 -0
  137. package/dashboard/vite.config.js +41 -0
  138. package/package.json +56 -41
  139. package/plan-build-run/bin/config-schema.json +1298 -0
  140. package/plugins/pbr/.claude-plugin/plugin.json +1 -1
  141. package/plugins/pbr/CLAUDE.md +19 -0
  142. package/plugins/pbr/UI-CONSISTENCY-GAPS.md +1 -1
  143. package/plugins/pbr/agents/advisor-researcher.md +101 -0
  144. package/plugins/pbr/agents/audit.md +207 -89
  145. package/plugins/pbr/agents/codebase-mapper.md +158 -23
  146. package/plugins/pbr/agents/debugger.md +210 -34
  147. package/plugins/pbr/agents/dev-sync.md +206 -0
  148. package/plugins/pbr/agents/executor.md +734 -38
  149. package/plugins/pbr/agents/general.md +69 -5
  150. package/plugins/pbr/agents/integration-checker.md +147 -31
  151. package/plugins/pbr/agents/intel-updater.md +332 -0
  152. package/plugins/pbr/agents/nyquist-auditor.md +254 -0
  153. package/plugins/pbr/agents/plan-checker.md +268 -65
  154. package/plugins/pbr/agents/planner.md +449 -41
  155. package/plugins/pbr/agents/researcher.md +218 -37
  156. package/plugins/pbr/agents/roadmapper.md +398 -0
  157. package/plugins/pbr/agents/synthesizer.md +166 -25
  158. package/plugins/pbr/agents/ui-checker.md +204 -0
  159. package/plugins/pbr/agents/ui-researcher.md +224 -0
  160. package/plugins/pbr/agents/verifier.md +570 -46
  161. package/plugins/pbr/commands/add-phase.md +75 -0
  162. package/plugins/pbr/commands/add-todo.md +8 -0
  163. package/plugins/pbr/commands/audit-fix.md +5 -0
  164. package/plugins/pbr/commands/audit-milestone.md +8 -0
  165. package/plugins/pbr/commands/autonomous.md +5 -0
  166. package/plugins/pbr/commands/backlog.md +6 -0
  167. package/plugins/pbr/commands/check-todos.md +8 -0
  168. package/plugins/pbr/commands/complete-milestone.md +8 -0
  169. package/plugins/pbr/commands/config.md +1 -1
  170. package/plugins/pbr/commands/discuss-phase.md +6 -0
  171. package/plugins/pbr/commands/execute-phase.md +6 -0
  172. package/plugins/pbr/commands/fast.md +6 -0
  173. package/plugins/pbr/commands/forensics.md +6 -0
  174. package/plugins/pbr/commands/import.md +1 -1
  175. package/plugins/pbr/commands/insert-phase.md +65 -0
  176. package/plugins/pbr/commands/intel.md +5 -0
  177. package/plugins/pbr/commands/join-discord.md +11 -0
  178. package/plugins/pbr/commands/list-phase-assumptions.md +5 -0
  179. package/plugins/pbr/commands/map-codebase.md +6 -0
  180. package/plugins/pbr/commands/milestone-summary.md +6 -0
  181. package/plugins/pbr/commands/new-milestone.md +8 -0
  182. package/plugins/pbr/commands/new-project.md +6 -0
  183. package/plugins/pbr/commands/pause-work.md +5 -0
  184. package/plugins/pbr/commands/plan-milestone-gaps.md +7 -0
  185. package/plugins/pbr/commands/plan-phase.md +6 -0
  186. package/plugins/pbr/commands/plant-seed.md +6 -0
  187. package/plugins/pbr/commands/profile-user.md +5 -0
  188. package/plugins/pbr/commands/profile.md +5 -0
  189. package/plugins/pbr/commands/progress.md +6 -0
  190. package/plugins/pbr/commands/quick.md +1 -1
  191. package/plugins/pbr/commands/reapply-patches.md +47 -0
  192. package/plugins/pbr/commands/release.md +6 -0
  193. package/plugins/pbr/commands/remove-phase.md +66 -0
  194. package/plugins/pbr/commands/research-phase.md +59 -0
  195. package/plugins/pbr/commands/resume-work.md +5 -0
  196. package/plugins/pbr/commands/seed.md +6 -0
  197. package/plugins/pbr/commands/session-report.md +5 -0
  198. package/plugins/pbr/commands/set-profile.md +6 -0
  199. package/plugins/pbr/commands/settings.md +5 -0
  200. package/plugins/pbr/commands/setup.md +1 -1
  201. package/plugins/pbr/commands/ship.md +5 -0
  202. package/plugins/pbr/commands/stats.md +6 -0
  203. package/plugins/pbr/commands/test.md +5 -0
  204. package/plugins/pbr/commands/thread.md +6 -0
  205. package/plugins/pbr/commands/todo.md +1 -1
  206. package/plugins/pbr/commands/ui-phase.md +5 -0
  207. package/plugins/pbr/commands/ui-review.md +5 -0
  208. package/plugins/pbr/commands/undo.md +5 -0
  209. package/plugins/pbr/commands/update.md +37 -0
  210. package/plugins/pbr/commands/validate-phase.md +5 -0
  211. package/plugins/pbr/commands/verify-work.md +6 -0
  212. package/plugins/pbr/dashboard/package-lock.json +6 -0
  213. package/plugins/pbr/dist/architecture-guard.js +76 -0
  214. package/plugins/pbr/dist/audit-dimensions.js +556 -0
  215. package/plugins/pbr/dist/auto-continue.js +277 -0
  216. package/plugins/pbr/dist/block-skill-self-read.js +124 -0
  217. package/plugins/pbr/dist/check-agent-state-write.js +63 -0
  218. package/plugins/pbr/dist/check-config-change.js +213 -0
  219. package/plugins/pbr/dist/check-cross-plugin-sync.js +93 -0
  220. package/plugins/pbr/dist/check-dangerous-commands.js +193 -0
  221. package/plugins/pbr/dist/check-direct-state-write.js +37 -0
  222. package/plugins/pbr/dist/check-doc-sprawl.js +102 -0
  223. package/plugins/pbr/dist/check-phase-boundary.js +191 -0
  224. package/plugins/pbr/dist/check-plan-format.js +227 -0
  225. package/plugins/pbr/dist/check-read-first.js +345 -0
  226. package/plugins/pbr/dist/check-roadmap-sync.js +507 -0
  227. package/plugins/pbr/dist/check-skill-workflow.js +354 -0
  228. package/plugins/pbr/dist/check-state-sync.js +676 -0
  229. package/plugins/pbr/dist/check-subagent-output.js +425 -0
  230. package/plugins/pbr/dist/check-summary-gate.js +188 -0
  231. package/plugins/pbr/dist/context-bridge.js +425 -0
  232. package/plugins/pbr/dist/context-budget-check.js +442 -0
  233. package/plugins/pbr/dist/context-quality.js +271 -0
  234. package/plugins/pbr/dist/enforce-context-budget.js +138 -0
  235. package/plugins/pbr/dist/enforce-pbr-workflow.js +277 -0
  236. package/plugins/pbr/dist/event-handler.js +212 -0
  237. package/plugins/pbr/dist/event-logger.js +125 -0
  238. package/plugins/pbr/dist/feedback-loop.js +155 -0
  239. package/plugins/pbr/dist/graph-update.js +422 -0
  240. package/plugins/pbr/dist/hook-logger.js +114 -0
  241. package/plugins/pbr/dist/hook-server-client.js +361 -0
  242. package/plugins/pbr/dist/hook-server.js +664 -0
  243. package/plugins/pbr/dist/hooks-schema.json +87 -0
  244. package/plugins/pbr/dist/instructions-loaded.js +173 -0
  245. package/plugins/pbr/dist/intercept-plan-mode.js +81 -0
  246. package/plugins/pbr/dist/log-notification.js +131 -0
  247. package/plugins/pbr/dist/log-subagent.js +367 -0
  248. package/plugins/pbr/dist/log-tool-failure.js +140 -0
  249. package/plugins/pbr/dist/milestone-learnings.js +519 -0
  250. package/plugins/pbr/dist/pbr-tools.js +493 -0
  251. package/plugins/pbr/dist/post-bash-triage.js +96 -0
  252. package/plugins/pbr/dist/post-compact.js +135 -0
  253. package/plugins/pbr/dist/post-hoc.js +237 -0
  254. package/plugins/pbr/dist/post-write-dispatch.js +243 -0
  255. package/plugins/pbr/dist/post-write-quality.js +208 -0
  256. package/plugins/pbr/dist/pre-bash-dispatch.js +212 -0
  257. package/plugins/pbr/dist/pre-skill-dispatch.js +114 -0
  258. package/plugins/pbr/dist/pre-task-dispatch.js +269 -0
  259. package/plugins/pbr/dist/pre-write-dispatch.js +234 -0
  260. package/plugins/pbr/dist/progress-tracker.js +173 -0
  261. package/plugins/pbr/dist/prompt-guard.js +114 -0
  262. package/plugins/pbr/dist/prompt-routing.js +209 -0
  263. package/plugins/pbr/dist/quick-status.js +179 -0
  264. package/plugins/pbr/dist/record-incident.js +37 -0
  265. package/plugins/pbr/dist/run-hook.js +132 -0
  266. package/plugins/pbr/dist/session-cleanup.js +653 -0
  267. package/plugins/pbr/dist/session-tracker.js +124 -0
  268. package/plugins/pbr/dist/status-line.js +849 -0
  269. package/plugins/pbr/dist/suggest-compact.js +307 -0
  270. package/plugins/pbr/dist/sync-context-to-claude.js +100 -0
  271. package/plugins/pbr/dist/task-completed.js +206 -0
  272. package/plugins/pbr/dist/track-context-budget.js +432 -0
  273. package/plugins/pbr/dist/track-user-gates.js +88 -0
  274. package/plugins/pbr/dist/trust-tracker.js +193 -0
  275. package/plugins/pbr/dist/validate-commit.js +233 -0
  276. package/plugins/pbr/dist/validate-skill-args.js +222 -0
  277. package/plugins/pbr/dist/validate-task.js +271 -0
  278. package/plugins/pbr/dist/worktree-create.js +144 -0
  279. package/plugins/pbr/dist/worktree-remove.js +147 -0
  280. package/plugins/pbr/hooks/hooks.json +137 -65
  281. package/plugins/pbr/references/agent-contracts.md +39 -8
  282. package/plugins/pbr/references/agent-teams.md +3 -3
  283. package/plugins/pbr/references/archive/checkpoints.md +189 -0
  284. package/plugins/pbr/references/archive/context-quality-tiers.md +45 -0
  285. package/plugins/pbr/references/archive/hook-ordering.md +89 -0
  286. package/plugins/pbr/references/archive/limitations.md +106 -0
  287. package/plugins/pbr/references/archive/pbr-rules.md +194 -0
  288. package/plugins/pbr/references/archive/pbr-tools-cli.md +415 -0
  289. package/plugins/pbr/references/archive/pretooluse-jsonl-behavior.md +58 -0
  290. package/plugins/pbr/references/archive/signal-files.md +41 -0
  291. package/plugins/pbr/references/archive/tmux-setup.md +288 -0
  292. package/plugins/pbr/references/archive/verification-matrix.md +34 -0
  293. package/plugins/pbr/references/archive/verification-patterns.md +277 -0
  294. package/plugins/pbr/references/archive/worktree-sparse-checkout.md +86 -0
  295. package/plugins/pbr/references/assumptions.md +42 -0
  296. package/plugins/pbr/references/checkpoints.md +723 -104
  297. package/plugins/pbr/references/config-reference.md +387 -10
  298. package/plugins/pbr/references/continuation-format.md +1 -0
  299. package/plugins/pbr/references/decimal-phase-calculation.md +65 -0
  300. package/plugins/pbr/references/deviation-rules.md +12 -0
  301. package/plugins/pbr/references/few-shot-examples/audit.md +77 -0
  302. package/plugins/pbr/references/few-shot-examples/check-plan-format.md +172 -0
  303. package/plugins/pbr/references/few-shot-examples/check-subagent-output.md +118 -0
  304. package/plugins/pbr/references/few-shot-examples/integration-checker.md +70 -0
  305. package/plugins/pbr/references/few-shot-examples/nyquist-auditor.md +83 -0
  306. package/plugins/pbr/references/few-shot-examples/plan-checker.md +73 -0
  307. package/plugins/pbr/references/few-shot-examples/ui-checker.md +71 -0
  308. package/plugins/pbr/references/few-shot-examples/verifier.md +109 -0
  309. package/plugins/pbr/references/git-integration.md +110 -27
  310. package/plugins/pbr/references/git-planning-commit.md +35 -0
  311. package/plugins/pbr/references/model-profile-resolution.md +34 -0
  312. package/plugins/pbr/references/model-profiles.md +90 -7
  313. package/plugins/pbr/references/model-selection.md +1 -1
  314. package/plugins/pbr/references/node-repair.md +48 -0
  315. package/plugins/pbr/references/plan-authoring.md +65 -0
  316. package/plugins/pbr/references/plan-format.md +184 -10
  317. package/plugins/pbr/references/questioning.md +138 -49
  318. package/plugins/pbr/references/reading-verification.md +4 -4
  319. package/plugins/pbr/references/tdd.md +263 -0
  320. package/plugins/pbr/references/thinking-models-planning.md +47 -0
  321. package/plugins/pbr/references/thinking-models-verification.md +44 -0
  322. package/plugins/pbr/references/ui-brand.md +449 -0
  323. package/plugins/pbr/references/verification-overrides.md +39 -0
  324. package/plugins/pbr/references/verification-patterns.md +529 -113
  325. package/plugins/pbr/scripts/architecture-guard.js +76 -0
  326. package/plugins/pbr/scripts/audit-checks/behavioral-compliance.js +2098 -0
  327. package/plugins/pbr/scripts/audit-checks/error-analysis.js +989 -0
  328. package/plugins/pbr/scripts/audit-checks/feature-verification.js +723 -0
  329. package/plugins/pbr/scripts/audit-checks/index.js +433 -0
  330. package/plugins/pbr/scripts/audit-checks/infrastructure.js +816 -0
  331. package/plugins/pbr/scripts/audit-checks/quality-metrics.js +455 -0
  332. package/plugins/pbr/scripts/audit-checks/session-quality.js +980 -0
  333. package/plugins/pbr/scripts/audit-checks/si-agent-hook-config-checks.js +396 -0
  334. package/plugins/pbr/scripts/audit-checks/si-cross-cutting-checks.js +272 -0
  335. package/plugins/pbr/scripts/audit-checks/si-skill-checks.js +424 -0
  336. package/plugins/pbr/scripts/audit-checks/workflow-compliance.js +1175 -0
  337. package/plugins/pbr/scripts/audit-dimensions.js +556 -0
  338. package/plugins/pbr/scripts/auto-continue.js +192 -37
  339. package/plugins/pbr/scripts/block-skill-self-read.js +124 -0
  340. package/plugins/pbr/scripts/check-agent-state-write.js +63 -0
  341. package/plugins/pbr/scripts/check-config-change.js +84 -1
  342. package/plugins/pbr/scripts/check-cross-plugin-sync.js +93 -0
  343. package/plugins/pbr/scripts/check-dangerous-commands.js +18 -5
  344. package/plugins/pbr/scripts/check-direct-state-write.js +37 -0
  345. package/plugins/pbr/scripts/check-phase-boundary.js +3 -2
  346. package/plugins/pbr/scripts/check-plan-format.js +153 -354
  347. package/plugins/pbr/scripts/check-read-first.js +345 -0
  348. package/plugins/pbr/scripts/check-roadmap-sync.js +174 -19
  349. package/plugins/pbr/scripts/check-skill-workflow.js +21 -16
  350. package/plugins/pbr/scripts/check-state-sync.js +352 -220
  351. package/plugins/pbr/scripts/check-subagent-output.js +296 -333
  352. package/plugins/pbr/scripts/check-summary-gate.js +5 -15
  353. package/plugins/pbr/scripts/commands/benchmarks.js +195 -0
  354. package/plugins/pbr/scripts/commands/calibrate.js +530 -0
  355. package/plugins/pbr/scripts/commands/config.js +72 -0
  356. package/plugins/pbr/scripts/commands/misc.js +779 -0
  357. package/plugins/pbr/scripts/commands/phase.js +293 -0
  358. package/plugins/pbr/scripts/commands/roadmap.js +75 -0
  359. package/plugins/pbr/scripts/commands/state.js +84 -0
  360. package/plugins/pbr/scripts/commands/stress-test.js +349 -0
  361. package/plugins/pbr/scripts/commands/todo.js +191 -0
  362. package/plugins/pbr/scripts/commands/verify.js +169 -0
  363. package/plugins/pbr/scripts/config-schema.json +1183 -95
  364. package/plugins/pbr/scripts/context-bridge.js +425 -0
  365. package/plugins/pbr/scripts/context-budget-check.js +171 -16
  366. package/plugins/pbr/scripts/context-quality.js +271 -0
  367. package/plugins/pbr/scripts/enforce-context-budget.js +138 -0
  368. package/plugins/pbr/scripts/enforce-pbr-workflow.js +277 -0
  369. package/plugins/pbr/scripts/event-handler.js +137 -87
  370. package/plugins/pbr/scripts/event-logger.js +58 -25
  371. package/plugins/pbr/scripts/feedback-loop.js +155 -0
  372. package/plugins/pbr/scripts/graph-update.js +422 -0
  373. package/plugins/pbr/scripts/hook-logger.js +69 -35
  374. package/plugins/pbr/scripts/hook-server-client.js +361 -0
  375. package/plugins/pbr/scripts/hook-server.js +664 -0
  376. package/plugins/pbr/scripts/hooks-schema.json +12 -5
  377. package/plugins/pbr/scripts/instructions-loaded.js +173 -0
  378. package/plugins/pbr/scripts/intent-router.cjs +147 -0
  379. package/plugins/pbr/scripts/intercept-plan-mode.js +52 -18
  380. package/plugins/pbr/scripts/lib/alternatives.js +203 -0
  381. package/plugins/pbr/scripts/lib/audit.js +65 -0
  382. package/plugins/pbr/scripts/lib/auto-cleanup.js +221 -0
  383. package/plugins/pbr/scripts/lib/auto-verify.js +123 -0
  384. package/plugins/pbr/scripts/lib/benchmark.js +190 -0
  385. package/plugins/pbr/scripts/lib/build.js +719 -0
  386. package/plugins/pbr/scripts/lib/ci-fix-loop.js +228 -0
  387. package/plugins/pbr/scripts/lib/commands.js +483 -0
  388. package/plugins/pbr/scripts/lib/compound.js +222 -0
  389. package/plugins/pbr/scripts/lib/config-cache.js +83 -0
  390. package/plugins/pbr/scripts/lib/config.js +1469 -0
  391. package/plugins/pbr/scripts/lib/context.js +254 -0
  392. package/plugins/pbr/scripts/lib/contextual-help.js +183 -0
  393. package/plugins/pbr/scripts/lib/convention-detector.js +413 -0
  394. package/plugins/pbr/scripts/lib/core.js +1585 -0
  395. package/plugins/pbr/scripts/lib/dashboard-launch.js +364 -0
  396. package/plugins/pbr/scripts/lib/data-hygiene.js +179 -0
  397. package/plugins/pbr/scripts/lib/decision-extraction.js +183 -0
  398. package/plugins/pbr/scripts/lib/decisions.js +194 -0
  399. package/plugins/pbr/scripts/lib/dependency-break.js +147 -0
  400. package/plugins/pbr/scripts/lib/format-validators.js +1049 -0
  401. package/plugins/pbr/scripts/lib/frontmatter.js +302 -0
  402. package/plugins/pbr/scripts/lib/gates/advisories.js +133 -0
  403. package/plugins/pbr/scripts/lib/gates/build-dependency.js +118 -0
  404. package/plugins/pbr/scripts/lib/gates/build-executor.js +106 -0
  405. package/plugins/pbr/scripts/lib/gates/doc-existence.js +46 -0
  406. package/plugins/pbr/scripts/lib/gates/helpers.js +98 -0
  407. package/plugins/pbr/scripts/lib/gates/inline-execution.js +187 -0
  408. package/plugins/pbr/scripts/lib/gates/milestone-complete.js +139 -0
  409. package/plugins/pbr/scripts/lib/gates/milestone-summary.js +121 -0
  410. package/plugins/pbr/scripts/lib/gates/multi-phase-loader.js +149 -0
  411. package/plugins/pbr/scripts/lib/gates/plan-executor.js +36 -0
  412. package/plugins/pbr/scripts/lib/gates/plan-validation.js +115 -0
  413. package/plugins/pbr/scripts/lib/gates/quick-executor.js +78 -0
  414. package/plugins/pbr/scripts/lib/gates/review-planner.js +63 -0
  415. package/plugins/pbr/scripts/lib/gates/review-verifier.js +71 -0
  416. package/plugins/pbr/scripts/lib/gates/rich-agent-context.js +148 -0
  417. package/plugins/pbr/scripts/lib/gates/sprint-preflight.js +30 -0
  418. package/plugins/pbr/scripts/lib/gates/user-confirmation.js +95 -0
  419. package/plugins/pbr/scripts/lib/graph-cli.js +89 -0
  420. package/plugins/pbr/scripts/lib/graph.js +553 -0
  421. package/plugins/pbr/scripts/lib/handoff-validators.js +224 -0
  422. package/plugins/pbr/scripts/lib/health-checks.js +107 -0
  423. package/plugins/pbr/scripts/lib/health-phase06.js +120 -0
  424. package/plugins/pbr/scripts/lib/health.js +132 -0
  425. package/plugins/pbr/scripts/lib/help.js +100 -0
  426. package/plugins/pbr/scripts/lib/history.js +150 -0
  427. package/plugins/pbr/scripts/lib/impact-analysis.js +319 -0
  428. package/plugins/pbr/scripts/lib/incidents.js +190 -0
  429. package/plugins/pbr/scripts/lib/init.js +643 -0
  430. package/plugins/pbr/scripts/lib/insights-parser.js +320 -0
  431. package/plugins/pbr/scripts/lib/intel.js +653 -0
  432. package/plugins/pbr/scripts/lib/learnings.js +511 -0
  433. package/plugins/pbr/scripts/lib/migrate.js +309 -0
  434. package/plugins/pbr/scripts/lib/milestone.js +306 -0
  435. package/plugins/pbr/scripts/lib/msys-path.js +20 -0
  436. package/plugins/pbr/scripts/lib/negative-knowledge.js +194 -0
  437. package/plugins/pbr/scripts/lib/notification-throttle.js +141 -0
  438. package/plugins/pbr/scripts/lib/onboarding-generator.js +288 -0
  439. package/plugins/pbr/scripts/lib/parse-args.js +134 -0
  440. package/plugins/pbr/scripts/lib/pattern-routing.js +55 -0
  441. package/plugins/pbr/scripts/lib/patterns.js +272 -0
  442. package/plugins/pbr/scripts/lib/perf.js +190 -0
  443. package/plugins/pbr/scripts/lib/phase.js +1043 -0
  444. package/plugins/pbr/scripts/lib/pid-lock.js +156 -0
  445. package/plugins/pbr/scripts/lib/post-hoc.js +160 -0
  446. package/plugins/pbr/scripts/lib/pre-commit-checks.js +220 -0
  447. package/plugins/pbr/scripts/lib/pre-research.js +126 -0
  448. package/plugins/pbr/scripts/lib/premature-completion.js +312 -0
  449. package/plugins/pbr/scripts/lib/preview.js +174 -0
  450. package/plugins/pbr/scripts/lib/progress-visualization.js +296 -0
  451. package/plugins/pbr/scripts/lib/quick-init.js +131 -0
  452. package/plugins/pbr/scripts/lib/reference.js +236 -0
  453. package/plugins/pbr/scripts/lib/requirements.js +153 -0
  454. package/plugins/pbr/scripts/lib/resolve-root.js +66 -0
  455. package/plugins/pbr/scripts/lib/reverse-spec.js +259 -0
  456. package/plugins/pbr/scripts/lib/roadmap.js +1089 -0
  457. package/plugins/pbr/scripts/lib/security-scan.js +200 -0
  458. package/plugins/pbr/scripts/lib/session-briefing.js +918 -0
  459. package/plugins/pbr/scripts/lib/skill-section.js +99 -0
  460. package/plugins/pbr/scripts/lib/smart-next-task.js +198 -0
  461. package/plugins/pbr/scripts/lib/snapshot-manager.js +232 -0
  462. package/plugins/pbr/scripts/lib/spec-diff.js +209 -0
  463. package/plugins/pbr/scripts/lib/spec-engine.js +189 -0
  464. package/plugins/pbr/scripts/lib/spot-check.js +539 -0
  465. package/plugins/pbr/scripts/lib/state-queue.js +171 -0
  466. package/plugins/pbr/scripts/lib/state.js +1082 -0
  467. package/plugins/pbr/scripts/lib/status-render.js +511 -0
  468. package/plugins/pbr/scripts/lib/step-verify.js +149 -0
  469. package/plugins/pbr/scripts/lib/subagent-validators.js +1119 -0
  470. package/plugins/pbr/scripts/lib/suggest-next.js +435 -0
  471. package/plugins/pbr/scripts/lib/tech-debt-scanner.js +116 -0
  472. package/plugins/pbr/scripts/lib/templates.js +362 -0
  473. package/plugins/pbr/scripts/lib/test-selection.js +163 -0
  474. package/plugins/pbr/scripts/lib/todo.js +300 -0
  475. package/plugins/pbr/scripts/lib/verify.js +1561 -0
  476. package/plugins/pbr/scripts/log-notification.js +131 -0
  477. package/plugins/pbr/scripts/log-subagent.js +221 -18
  478. package/plugins/pbr/scripts/log-tool-failure.js +60 -5
  479. package/plugins/pbr/scripts/milestone-learnings.js +519 -0
  480. package/plugins/pbr/scripts/package.json +1 -1
  481. package/plugins/pbr/scripts/pbr-tools.js +362 -1247
  482. package/plugins/pbr/scripts/post-bash-triage.js +96 -0
  483. package/plugins/pbr/scripts/post-compact.js +135 -0
  484. package/plugins/pbr/scripts/post-hoc.js +237 -0
  485. package/plugins/pbr/scripts/post-write-dispatch.js +201 -31
  486. package/plugins/pbr/scripts/post-write-quality.js +4 -3
  487. package/plugins/pbr/scripts/pre-bash-dispatch.js +147 -51
  488. package/plugins/pbr/scripts/pre-skill-dispatch.js +114 -0
  489. package/plugins/pbr/scripts/pre-task-dispatch.js +269 -0
  490. package/plugins/pbr/scripts/pre-write-dispatch.js +170 -72
  491. package/plugins/pbr/scripts/progress-tracker.js +121 -324
  492. package/plugins/pbr/scripts/prompt-guard.js +114 -0
  493. package/plugins/pbr/scripts/prompt-routing.js +209 -0
  494. package/plugins/pbr/scripts/quick-status.js +179 -0
  495. package/plugins/pbr/scripts/record-incident.js +37 -0
  496. package/plugins/pbr/scripts/risk-classifier.cjs +123 -0
  497. package/plugins/pbr/scripts/run-hook.js +63 -23
  498. package/plugins/pbr/scripts/session-cleanup.js +428 -29
  499. package/plugins/pbr/scripts/session-tracker.js +124 -0
  500. package/plugins/pbr/scripts/status-line.js +571 -43
  501. package/plugins/pbr/scripts/suggest-compact.js +201 -13
  502. package/plugins/pbr/scripts/sync-context-to-claude.js +100 -0
  503. package/plugins/pbr/scripts/task-completed.js +165 -4
  504. package/plugins/pbr/scripts/test/config.test.js +126 -0
  505. package/plugins/pbr/scripts/test/cross-platform.test.js +120 -0
  506. package/plugins/pbr/scripts/test/fixtures/config.json +20 -0
  507. package/plugins/pbr/scripts/test/fixtures/plan.md +54 -0
  508. package/plugins/pbr/scripts/test/fixtures/project.md +30 -0
  509. package/plugins/pbr/scripts/test/fixtures/roadmap.md +55 -0
  510. package/plugins/pbr/scripts/test/fixtures/state.md +60 -0
  511. package/plugins/pbr/scripts/test/fixtures/summary.md +35 -0
  512. package/plugins/pbr/scripts/test/fixtures.test.js +184 -0
  513. package/plugins/pbr/scripts/test/phase.test.js +142 -0
  514. package/plugins/pbr/scripts/test/roadmap.test.js +96 -0
  515. package/plugins/pbr/scripts/test/state.test.js +155 -0
  516. package/plugins/pbr/scripts/track-context-budget.js +368 -104
  517. package/plugins/pbr/scripts/track-user-gates.js +88 -0
  518. package/plugins/pbr/scripts/trust-tracker.js +193 -0
  519. package/plugins/pbr/scripts/validate-commit.js +51 -19
  520. package/plugins/pbr/scripts/validate-skill-args.js +85 -14
  521. package/plugins/pbr/scripts/validate-task.js +83 -622
  522. package/plugins/pbr/scripts/worktree-create.js +144 -0
  523. package/plugins/pbr/scripts/worktree-remove.js +147 -0
  524. package/plugins/pbr/skills/audit/SKILL.md +195 -24
  525. package/plugins/pbr/skills/audit-fix/SKILL.md +326 -0
  526. package/plugins/pbr/skills/autonomous/SKILL.md +551 -0
  527. package/plugins/pbr/skills/backlog/SKILL.md +56 -0
  528. package/plugins/pbr/skills/begin/SKILL.md +508 -153
  529. package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +1 -2
  530. package/plugins/pbr/skills/begin/templates/config.json.tmpl +419 -36
  531. package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +28 -0
  532. package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +28 -3
  533. package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +33 -5
  534. package/plugins/pbr/skills/build/SKILL.md +1180 -357
  535. package/plugins/pbr/skills/build/templates/continuation-prompt.md.tmpl +26 -0
  536. package/plugins/pbr/skills/build/templates/executor-prompt.md.tmpl +77 -0
  537. package/plugins/pbr/skills/build/templates/inline-verifier-prompt.md.tmpl +33 -0
  538. package/plugins/pbr/skills/build/templates/qa-round-context.md.tmpl +16 -0
  539. package/plugins/pbr/skills/config/SKILL.md +112 -9
  540. package/plugins/pbr/skills/continue/SKILL.md +113 -33
  541. package/plugins/pbr/skills/dashboard/SKILL.md +21 -9
  542. package/plugins/pbr/skills/debug/SKILL.md +70 -12
  543. package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +12 -1
  544. package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +12 -5
  545. package/plugins/pbr/skills/discuss/SKILL.md +205 -24
  546. package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +21 -1
  547. package/plugins/pbr/skills/do/SKILL.md +119 -24
  548. package/plugins/pbr/skills/explore/SKILL.md +95 -20
  549. package/plugins/pbr/skills/fast/SKILL.md +94 -0
  550. package/plugins/pbr/skills/forensics/SKILL.md +144 -0
  551. package/plugins/pbr/skills/health/SKILL.md +35 -115
  552. package/plugins/pbr/skills/help/SKILL.md +83 -123
  553. package/plugins/pbr/skills/import/SKILL.md +332 -13
  554. package/plugins/pbr/skills/intel/SKILL.md +131 -0
  555. package/plugins/pbr/skills/list-phase-assumptions/SKILL.md +231 -0
  556. package/plugins/pbr/skills/milestone/SKILL.md +383 -274
  557. package/plugins/pbr/skills/milestone/templates/audit-output.md.tmpl +76 -0
  558. package/plugins/pbr/skills/milestone/templates/complete-output.md.tmpl +32 -0
  559. package/plugins/pbr/skills/milestone/templates/edge-cases.md +54 -0
  560. package/plugins/pbr/skills/milestone/templates/gaps-output.md.tmpl +25 -0
  561. package/plugins/pbr/skills/milestone/templates/integration-checker-prompt.md.tmpl +25 -0
  562. package/plugins/pbr/skills/milestone/templates/new-output.md.tmpl +29 -0
  563. package/plugins/pbr/skills/milestone-summary/SKILL.md +86 -0
  564. package/plugins/pbr/skills/note/SKILL.md +20 -4
  565. package/plugins/pbr/skills/pause/SKILL.md +54 -14
  566. package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +33 -52
  567. package/plugins/pbr/skills/plan/SKILL.md +526 -280
  568. package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +20 -2
  569. package/plugins/pbr/skills/plan/templates/completion-output.md.tmpl +27 -0
  570. package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +43 -1
  571. package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +21 -5
  572. package/plugins/pbr/skills/profile/SKILL.md +185 -0
  573. package/plugins/pbr/skills/profile-user/SKILL.md +227 -0
  574. package/plugins/pbr/skills/quick/SKILL.md +435 -100
  575. package/plugins/pbr/skills/release/SKILL.md +206 -0
  576. package/plugins/pbr/skills/resume/SKILL.md +170 -46
  577. package/plugins/pbr/skills/review/SKILL.md +233 -165
  578. package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +7 -0
  579. package/plugins/pbr/skills/scan/SKILL.md +152 -106
  580. package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +5 -56
  581. package/plugins/pbr/skills/seed/SKILL.md +87 -0
  582. package/plugins/pbr/skills/session-report/SKILL.md +130 -0
  583. package/plugins/pbr/skills/setup/SKILL.md +150 -202
  584. package/plugins/pbr/skills/shared/agent-context-enrichment.md +21 -0
  585. package/plugins/pbr/skills/shared/agent-type-resolution.md +32 -0
  586. package/plugins/pbr/skills/shared/commit-planning-docs.md +8 -0
  587. package/plugins/pbr/skills/shared/context-budget.md +66 -1
  588. package/plugins/pbr/skills/shared/context-loader-task.md +18 -11
  589. package/plugins/pbr/skills/shared/criterion-writing.md +58 -0
  590. package/plugins/pbr/skills/shared/digest-select.md +2 -2
  591. package/plugins/pbr/skills/shared/domain-probes.md +1 -1
  592. package/plugins/pbr/skills/shared/error-reporting.md +38 -60
  593. package/plugins/pbr/skills/shared/gate-prompts.md +4 -2
  594. package/plugins/pbr/skills/shared/memory-capture.md +48 -0
  595. package/plugins/pbr/skills/shared/phase-argument-parsing.md +4 -4
  596. package/plugins/pbr/skills/shared/revision-loop.md +24 -6
  597. package/plugins/pbr/skills/shared/state-update.md +46 -61
  598. package/plugins/pbr/skills/shared/universal-anti-patterns.md +27 -4
  599. package/plugins/pbr/skills/ship/SKILL.md +155 -0
  600. package/plugins/pbr/skills/stats/SKILL.md +110 -0
  601. package/plugins/pbr/skills/status/SKILL.md +185 -119
  602. package/plugins/pbr/skills/test/SKILL.md +254 -0
  603. package/plugins/pbr/skills/thread/SKILL.md +73 -0
  604. package/plugins/pbr/skills/todo/SKILL.md +28 -72
  605. package/plugins/pbr/skills/ui-phase/SKILL.md +180 -0
  606. package/plugins/pbr/skills/ui-review/SKILL.md +206 -0
  607. package/plugins/pbr/skills/undo/SKILL.md +221 -0
  608. package/plugins/pbr/skills/validate-phase/SKILL.md +362 -0
  609. package/plugins/pbr/templates/CONTEXT.md.tmpl +45 -20
  610. package/plugins/pbr/templates/DISCOVERY.md.tmpl +29 -0
  611. package/plugins/pbr/templates/DISCUSSION-LOG.md.tmpl +49 -0
  612. package/plugins/pbr/templates/HANDOFF.json.tmpl +30 -0
  613. package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +18 -2
  614. package/plugins/pbr/templates/MILESTONE-AUDIT.md.tmpl +44 -0
  615. package/plugins/pbr/templates/PROJECT.md.tmpl +126 -0
  616. package/plugins/pbr/templates/REQUIREMENTS.md.tmpl +96 -0
  617. package/plugins/pbr/templates/RETROSPECTIVE.md.tmpl +43 -0
  618. package/plugins/pbr/templates/ROADMAP.md.tmpl +106 -14
  619. package/plugins/pbr/templates/SUMMARY-complex.md.tmpl +133 -0
  620. package/plugins/pbr/templates/SUMMARY-minimal.md.tmpl +55 -0
  621. package/plugins/pbr/templates/SUMMARY.md.tmpl +21 -0
  622. package/plugins/pbr/templates/UAT.md.tmpl +94 -0
  623. package/plugins/pbr/templates/UI-SPEC.md.tmpl +144 -0
  624. package/plugins/pbr/templates/VALIDATION.md.tmpl +94 -0
  625. package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +54 -13
  626. package/plugins/pbr/templates/project-CONTEXT.md.tmpl +59 -0
  627. package/plugins/pbr/templates/research-outputs/ARCHITECTURE.md.tmpl +91 -0
  628. package/plugins/pbr/templates/research-outputs/FEATURES.md.tmpl +64 -0
  629. package/plugins/pbr/templates/research-outputs/PITFALLS.md.tmpl +50 -0
  630. package/plugins/pbr/templates/research-outputs/STACK.md.tmpl +63 -0
  631. package/plugins/pbr/templates/research-outputs/SUMMARY.md.tmpl +98 -0
  632. package/scripts/build-hooks.js +61 -0
  633. package/scripts/check-ci.js +100 -0
  634. package/scripts/clean-changelog.js +364 -0
  635. package/scripts/generate-derivatives.js +581 -0
  636. package/scripts/posttest.js +93 -0
  637. package/scripts/release.js +262 -0
  638. package/scripts/run-tests.cjs +29 -0
  639. package/scripts/test-wrapper.js +43 -0
  640. package/dashboard/bin/cli.js +0 -25
  641. package/dashboard/public/css/layout.css +0 -704
  642. package/dashboard/public/css/status-colors.css +0 -98
  643. package/dashboard/public/css/tokens.css +0 -59
  644. package/dashboard/public/js/htmx-title.js +0 -5
  645. package/dashboard/public/js/sidebar-toggle.js +0 -34
  646. package/dashboard/public/js/sse-client.js +0 -100
  647. package/dashboard/public/js/theme-toggle.js +0 -46
  648. package/dashboard/src/app.js +0 -91
  649. package/dashboard/src/middleware/current-phase.js +0 -24
  650. package/dashboard/src/middleware/errorHandler.js +0 -52
  651. package/dashboard/src/middleware/notFoundHandler.js +0 -9
  652. package/dashboard/src/repositories/planning.repository.js +0 -130
  653. package/dashboard/src/routes/events.routes.js +0 -45
  654. package/dashboard/src/routes/index.routes.js +0 -35
  655. package/dashboard/src/routes/pages.routes.js +0 -426
  656. package/dashboard/src/server.js +0 -42
  657. package/dashboard/src/services/analytics.service.js +0 -141
  658. package/dashboard/src/services/dashboard.service.js +0 -309
  659. package/dashboard/src/services/milestone.service.js +0 -222
  660. package/dashboard/src/services/notes.service.js +0 -50
  661. package/dashboard/src/services/phase.service.js +0 -232
  662. package/dashboard/src/services/project.service.js +0 -57
  663. package/dashboard/src/services/roadmap.service.js +0 -258
  664. package/dashboard/src/services/sse.service.js +0 -58
  665. package/dashboard/src/services/todo.service.js +0 -272
  666. package/dashboard/src/services/watcher.service.js +0 -48
  667. package/dashboard/src/utils/cache.js +0 -55
  668. package/dashboard/src/views/analytics.ejs +0 -5
  669. package/dashboard/src/views/coming-soon.ejs +0 -11
  670. package/dashboard/src/views/dependencies.ejs +0 -5
  671. package/dashboard/src/views/error.ejs +0 -20
  672. package/dashboard/src/views/index.ejs +0 -5
  673. package/dashboard/src/views/milestone-detail.ejs +0 -5
  674. package/dashboard/src/views/milestones.ejs +0 -5
  675. package/dashboard/src/views/notes.ejs +0 -5
  676. package/dashboard/src/views/partials/analytics-content.ejs +0 -90
  677. package/dashboard/src/views/partials/breadcrumbs.ejs +0 -14
  678. package/dashboard/src/views/partials/dashboard-content.ejs +0 -84
  679. package/dashboard/src/views/partials/dependencies-content.ejs +0 -48
  680. package/dashboard/src/views/partials/empty-state.ejs +0 -7
  681. package/dashboard/src/views/partials/footer.ejs +0 -3
  682. package/dashboard/src/views/partials/head.ejs +0 -30
  683. package/dashboard/src/views/partials/header.ejs +0 -21
  684. package/dashboard/src/views/partials/layout-bottom.ejs +0 -43
  685. package/dashboard/src/views/partials/layout-top.ejs +0 -16
  686. package/dashboard/src/views/partials/milestone-detail-content.ejs +0 -20
  687. package/dashboard/src/views/partials/milestones-content.ejs +0 -88
  688. package/dashboard/src/views/partials/notes-content.ejs +0 -23
  689. package/dashboard/src/views/partials/phase-content.ejs +0 -193
  690. package/dashboard/src/views/partials/phase-doc-content.ejs +0 -38
  691. package/dashboard/src/views/partials/phases-content.ejs +0 -124
  692. package/dashboard/src/views/partials/roadmap-content.ejs +0 -180
  693. package/dashboard/src/views/partials/sidebar.ejs +0 -99
  694. package/dashboard/src/views/partials/todo-create-content.ejs +0 -54
  695. package/dashboard/src/views/partials/todo-detail-content.ejs +0 -42
  696. package/dashboard/src/views/partials/todos-content.ejs +0 -97
  697. package/dashboard/src/views/phase-detail.ejs +0 -5
  698. package/dashboard/src/views/phase-doc.ejs +0 -5
  699. package/dashboard/src/views/phases.ejs +0 -5
  700. package/dashboard/src/views/roadmap.ejs +0 -5
  701. package/dashboard/src/views/todo-create.ejs +0 -5
  702. package/dashboard/src/views/todo-detail.ejs +0 -5
  703. package/dashboard/src/views/todos.ejs +0 -5
  704. package/plugins/copilot-pbr/CHANGELOG.md +0 -19
  705. package/plugins/copilot-pbr/README.md +0 -139
  706. package/plugins/copilot-pbr/agents/audit.agent.md +0 -113
  707. package/plugins/copilot-pbr/agents/codebase-mapper.agent.md +0 -151
  708. package/plugins/copilot-pbr/agents/debugger.agent.md +0 -184
  709. package/plugins/copilot-pbr/agents/executor.agent.md +0 -269
  710. package/plugins/copilot-pbr/agents/general.agent.md +0 -89
  711. package/plugins/copilot-pbr/agents/integration-checker.agent.md +0 -121
  712. package/plugins/copilot-pbr/agents/plan-checker.agent.md +0 -208
  713. package/plugins/copilot-pbr/agents/planner.agent.md +0 -240
  714. package/plugins/copilot-pbr/agents/researcher.agent.md +0 -188
  715. package/plugins/copilot-pbr/agents/synthesizer.agent.md +0 -126
  716. package/plugins/copilot-pbr/agents/verifier.agent.md +0 -228
  717. package/plugins/copilot-pbr/hooks/hooks.json +0 -258
  718. package/plugins/copilot-pbr/plugin.json +0 -30
  719. package/plugins/copilot-pbr/references/agent-anti-patterns.md +0 -25
  720. package/plugins/copilot-pbr/references/agent-contracts.md +0 -297
  721. package/plugins/copilot-pbr/references/agent-interactions.md +0 -135
  722. package/plugins/copilot-pbr/references/agent-teams.md +0 -55
  723. package/plugins/copilot-pbr/references/checkpoints.md +0 -158
  724. package/plugins/copilot-pbr/references/common-bug-patterns.md +0 -14
  725. package/plugins/copilot-pbr/references/config-reference.md +0 -442
  726. package/plugins/copilot-pbr/references/continuation-format.md +0 -213
  727. package/plugins/copilot-pbr/references/deviation-rules.md +0 -113
  728. package/plugins/copilot-pbr/references/git-integration.md +0 -227
  729. package/plugins/copilot-pbr/references/integration-patterns.md +0 -118
  730. package/plugins/copilot-pbr/references/model-profiles.md +0 -100
  731. package/plugins/copilot-pbr/references/model-selection.md +0 -32
  732. package/plugins/copilot-pbr/references/pbr-rules.md +0 -195
  733. package/plugins/copilot-pbr/references/pbr-tools-cli.md +0 -285
  734. package/plugins/copilot-pbr/references/plan-authoring.md +0 -182
  735. package/plugins/copilot-pbr/references/plan-format.md +0 -288
  736. package/plugins/copilot-pbr/references/planning-config.md +0 -214
  737. package/plugins/copilot-pbr/references/questioning.md +0 -215
  738. package/plugins/copilot-pbr/references/reading-verification.md +0 -128
  739. package/plugins/copilot-pbr/references/stub-patterns.md +0 -161
  740. package/plugins/copilot-pbr/references/subagent-coordination.md +0 -120
  741. package/plugins/copilot-pbr/references/ui-formatting.md +0 -444
  742. package/plugins/copilot-pbr/references/verification-patterns.md +0 -199
  743. package/plugins/copilot-pbr/references/wave-execution.md +0 -96
  744. package/plugins/copilot-pbr/rules/pbr-workflow.mdc +0 -48
  745. package/plugins/copilot-pbr/setup.ps1 +0 -93
  746. package/plugins/copilot-pbr/setup.sh +0 -93
  747. package/plugins/copilot-pbr/skills/audit/SKILL.md +0 -330
  748. package/plugins/copilot-pbr/skills/begin/SKILL.md +0 -589
  749. package/plugins/copilot-pbr/skills/begin/templates/PROJECT.md.tmpl +0 -34
  750. package/plugins/copilot-pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +0 -19
  751. package/plugins/copilot-pbr/skills/begin/templates/STATE.md.tmpl +0 -50
  752. package/plugins/copilot-pbr/skills/begin/templates/config.json.tmpl +0 -64
  753. package/plugins/copilot-pbr/skills/begin/templates/researcher-prompt.md.tmpl +0 -20
  754. package/plugins/copilot-pbr/skills/begin/templates/roadmap-prompt.md.tmpl +0 -31
  755. package/plugins/copilot-pbr/skills/begin/templates/synthesis-prompt.md.tmpl +0 -17
  756. package/plugins/copilot-pbr/skills/build/SKILL.md +0 -959
  757. package/plugins/copilot-pbr/skills/config/SKILL.md +0 -250
  758. package/plugins/copilot-pbr/skills/continue/SKILL.md +0 -159
  759. package/plugins/copilot-pbr/skills/dashboard/SKILL.md +0 -43
  760. package/plugins/copilot-pbr/skills/debug/SKILL.md +0 -508
  761. package/plugins/copilot-pbr/skills/debug/templates/continuation-prompt.md.tmpl +0 -17
  762. package/plugins/copilot-pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +0 -28
  763. package/plugins/copilot-pbr/skills/discuss/SKILL.md +0 -353
  764. package/plugins/copilot-pbr/skills/discuss/templates/CONTEXT.md.tmpl +0 -62
  765. package/plugins/copilot-pbr/skills/discuss/templates/decision-categories.md +0 -10
  766. package/plugins/copilot-pbr/skills/do/SKILL.md +0 -66
  767. package/plugins/copilot-pbr/skills/explore/SKILL.md +0 -373
  768. package/plugins/copilot-pbr/skills/health/SKILL.md +0 -283
  769. package/plugins/copilot-pbr/skills/health/templates/check-pattern.md.tmpl +0 -31
  770. package/plugins/copilot-pbr/skills/health/templates/output-format.md.tmpl +0 -64
  771. package/plugins/copilot-pbr/skills/help/SKILL.md +0 -193
  772. package/plugins/copilot-pbr/skills/import/SKILL.md +0 -502
  773. package/plugins/copilot-pbr/skills/milestone/SKILL.md +0 -806
  774. package/plugins/copilot-pbr/skills/milestone/templates/audit-report.md.tmpl +0 -49
  775. package/plugins/copilot-pbr/skills/milestone/templates/stats-file.md.tmpl +0 -31
  776. package/plugins/copilot-pbr/skills/note/SKILL.md +0 -213
  777. package/plugins/copilot-pbr/skills/pause/SKILL.md +0 -247
  778. package/plugins/copilot-pbr/skills/pause/templates/continue-here.md.tmpl +0 -72
  779. package/plugins/copilot-pbr/skills/plan/SKILL.md +0 -662
  780. package/plugins/copilot-pbr/skills/plan/templates/checker-prompt.md.tmpl +0 -22
  781. package/plugins/copilot-pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +0 -33
  782. package/plugins/copilot-pbr/skills/plan/templates/planner-prompt.md.tmpl +0 -39
  783. package/plugins/copilot-pbr/skills/plan/templates/researcher-prompt.md.tmpl +0 -20
  784. package/plugins/copilot-pbr/skills/plan/templates/revision-prompt.md.tmpl +0 -24
  785. package/plugins/copilot-pbr/skills/quick/SKILL.md +0 -376
  786. package/plugins/copilot-pbr/skills/resume/SKILL.md +0 -399
  787. package/plugins/copilot-pbr/skills/review/SKILL.md +0 -653
  788. package/plugins/copilot-pbr/skills/review/templates/debugger-prompt.md.tmpl +0 -61
  789. package/plugins/copilot-pbr/skills/review/templates/gap-planner-prompt.md.tmpl +0 -41
  790. package/plugins/copilot-pbr/skills/review/templates/verifier-prompt.md.tmpl +0 -116
  791. package/plugins/copilot-pbr/skills/scan/SKILL.md +0 -299
  792. package/plugins/copilot-pbr/skills/scan/templates/mapper-prompt.md.tmpl +0 -202
  793. package/plugins/copilot-pbr/skills/setup/SKILL.md +0 -296
  794. package/plugins/copilot-pbr/skills/shared/commit-planning-docs.md +0 -36
  795. package/plugins/copilot-pbr/skills/shared/config-loading.md +0 -103
  796. package/plugins/copilot-pbr/skills/shared/context-budget.md +0 -41
  797. package/plugins/copilot-pbr/skills/shared/context-loader-task.md +0 -87
  798. package/plugins/copilot-pbr/skills/shared/digest-select.md +0 -80
  799. package/plugins/copilot-pbr/skills/shared/domain-probes.md +0 -126
  800. package/plugins/copilot-pbr/skills/shared/error-recovery-strategies.md +0 -51
  801. package/plugins/copilot-pbr/skills/shared/error-reporting.md +0 -81
  802. package/plugins/copilot-pbr/skills/shared/gate-prompts.md +0 -389
  803. package/plugins/copilot-pbr/skills/shared/phase-argument-parsing.md +0 -46
  804. package/plugins/copilot-pbr/skills/shared/progress-display.md +0 -53
  805. package/plugins/copilot-pbr/skills/shared/revision-loop.md +0 -82
  806. package/plugins/copilot-pbr/skills/shared/state-loading.md +0 -63
  807. package/plugins/copilot-pbr/skills/shared/state-update.md +0 -170
  808. package/plugins/copilot-pbr/skills/shared/universal-anti-patterns.md +0 -38
  809. package/plugins/copilot-pbr/skills/status/SKILL.md +0 -362
  810. package/plugins/copilot-pbr/skills/statusline/SKILL.md +0 -149
  811. package/plugins/copilot-pbr/skills/todo/SKILL.md +0 -279
  812. package/plugins/copilot-pbr/templates/CONTEXT.md.tmpl +0 -53
  813. package/plugins/copilot-pbr/templates/INTEGRATION-REPORT.md.tmpl +0 -152
  814. package/plugins/copilot-pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -98
  815. package/plugins/copilot-pbr/templates/ROADMAP.md.tmpl +0 -48
  816. package/plugins/copilot-pbr/templates/SUMMARY.md.tmpl +0 -82
  817. package/plugins/copilot-pbr/templates/VERIFICATION-DETAIL.md.tmpl +0 -117
  818. package/plugins/copilot-pbr/templates/codebase/ARCHITECTURE.md.tmpl +0 -98
  819. package/plugins/copilot-pbr/templates/codebase/CONCERNS.md.tmpl +0 -93
  820. package/plugins/copilot-pbr/templates/codebase/CONVENTIONS.md.tmpl +0 -104
  821. package/plugins/copilot-pbr/templates/codebase/INTEGRATIONS.md.tmpl +0 -78
  822. package/plugins/copilot-pbr/templates/codebase/STACK.md.tmpl +0 -78
  823. package/plugins/copilot-pbr/templates/codebase/STRUCTURE.md.tmpl +0 -80
  824. package/plugins/copilot-pbr/templates/codebase/TESTING.md.tmpl +0 -107
  825. package/plugins/copilot-pbr/templates/continue-here.md.tmpl +0 -74
  826. package/plugins/copilot-pbr/templates/prompt-partials/phase-project-context.md.tmpl +0 -38
  827. package/plugins/copilot-pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  828. package/plugins/copilot-pbr/templates/research/STACK.md.tmpl +0 -71
  829. package/plugins/copilot-pbr/templates/research/SUMMARY.md.tmpl +0 -112
  830. package/plugins/copilot-pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  831. package/plugins/copilot-pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  832. package/plugins/copilot-pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  833. package/plugins/cursor-pbr/.cursor-plugin/plugin.json +0 -32
  834. package/plugins/cursor-pbr/CHANGELOG.md +0 -15
  835. package/plugins/cursor-pbr/README.md +0 -123
  836. package/plugins/cursor-pbr/agents/audit.md +0 -178
  837. package/plugins/cursor-pbr/agents/codebase-mapper.md +0 -150
  838. package/plugins/cursor-pbr/agents/debugger.md +0 -183
  839. package/plugins/cursor-pbr/agents/executor.md +0 -268
  840. package/plugins/cursor-pbr/agents/general.md +0 -88
  841. package/plugins/cursor-pbr/agents/integration-checker.md +0 -120
  842. package/plugins/cursor-pbr/agents/plan-checker.md +0 -207
  843. package/plugins/cursor-pbr/agents/planner.md +0 -239
  844. package/plugins/cursor-pbr/agents/researcher.md +0 -187
  845. package/plugins/cursor-pbr/agents/synthesizer.md +0 -125
  846. package/plugins/cursor-pbr/agents/verifier.md +0 -227
  847. package/plugins/cursor-pbr/assets/.gitkeep +0 -0
  848. package/plugins/cursor-pbr/assets/logo.svg +0 -21
  849. package/plugins/cursor-pbr/hooks/hooks.json +0 -224
  850. package/plugins/cursor-pbr/references/agent-anti-patterns.md +0 -25
  851. package/plugins/cursor-pbr/references/agent-contracts.md +0 -297
  852. package/plugins/cursor-pbr/references/agent-interactions.md +0 -135
  853. package/plugins/cursor-pbr/references/agent-teams.md +0 -55
  854. package/plugins/cursor-pbr/references/checkpoints.md +0 -158
  855. package/plugins/cursor-pbr/references/common-bug-patterns.md +0 -14
  856. package/plugins/cursor-pbr/references/config-reference.md +0 -442
  857. package/plugins/cursor-pbr/references/continuation-format.md +0 -213
  858. package/plugins/cursor-pbr/references/deviation-rules.md +0 -113
  859. package/plugins/cursor-pbr/references/git-integration.md +0 -227
  860. package/plugins/cursor-pbr/references/integration-patterns.md +0 -118
  861. package/plugins/cursor-pbr/references/model-profiles.md +0 -100
  862. package/plugins/cursor-pbr/references/model-selection.md +0 -32
  863. package/plugins/cursor-pbr/references/pbr-rules.md +0 -195
  864. package/plugins/cursor-pbr/references/pbr-tools-cli.md +0 -285
  865. package/plugins/cursor-pbr/references/plan-authoring.md +0 -182
  866. package/plugins/cursor-pbr/references/plan-format.md +0 -288
  867. package/plugins/cursor-pbr/references/planning-config.md +0 -214
  868. package/plugins/cursor-pbr/references/questioning.md +0 -215
  869. package/plugins/cursor-pbr/references/reading-verification.md +0 -128
  870. package/plugins/cursor-pbr/references/stub-patterns.md +0 -161
  871. package/plugins/cursor-pbr/references/subagent-coordination.md +0 -120
  872. package/plugins/cursor-pbr/references/ui-formatting.md +0 -444
  873. package/plugins/cursor-pbr/references/verification-patterns.md +0 -199
  874. package/plugins/cursor-pbr/references/wave-execution.md +0 -96
  875. package/plugins/cursor-pbr/rules/pbr-workflow.mdc +0 -48
  876. package/plugins/cursor-pbr/setup.ps1 +0 -78
  877. package/plugins/cursor-pbr/setup.sh +0 -83
  878. package/plugins/cursor-pbr/skills/audit/SKILL.md +0 -331
  879. package/plugins/cursor-pbr/skills/begin/SKILL.md +0 -589
  880. package/plugins/cursor-pbr/skills/begin/templates/PROJECT.md.tmpl +0 -34
  881. package/plugins/cursor-pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +0 -19
  882. package/plugins/cursor-pbr/skills/begin/templates/STATE.md.tmpl +0 -50
  883. package/plugins/cursor-pbr/skills/begin/templates/config.json.tmpl +0 -64
  884. package/plugins/cursor-pbr/skills/begin/templates/researcher-prompt.md.tmpl +0 -20
  885. package/plugins/cursor-pbr/skills/begin/templates/roadmap-prompt.md.tmpl +0 -31
  886. package/plugins/cursor-pbr/skills/begin/templates/synthesis-prompt.md.tmpl +0 -17
  887. package/plugins/cursor-pbr/skills/build/SKILL.md +0 -960
  888. package/plugins/cursor-pbr/skills/config/SKILL.md +0 -252
  889. package/plugins/cursor-pbr/skills/continue/SKILL.md +0 -159
  890. package/plugins/cursor-pbr/skills/dashboard/SKILL.md +0 -44
  891. package/plugins/cursor-pbr/skills/debug/SKILL.md +0 -512
  892. package/plugins/cursor-pbr/skills/debug/templates/continuation-prompt.md.tmpl +0 -17
  893. package/plugins/cursor-pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +0 -28
  894. package/plugins/cursor-pbr/skills/discuss/SKILL.md +0 -354
  895. package/plugins/cursor-pbr/skills/discuss/templates/CONTEXT.md.tmpl +0 -62
  896. package/plugins/cursor-pbr/skills/discuss/templates/decision-categories.md +0 -10
  897. package/plugins/cursor-pbr/skills/do/SKILL.md +0 -67
  898. package/plugins/cursor-pbr/skills/explore/SKILL.md +0 -376
  899. package/plugins/cursor-pbr/skills/health/SKILL.md +0 -283
  900. package/plugins/cursor-pbr/skills/health/templates/check-pattern.md.tmpl +0 -31
  901. package/plugins/cursor-pbr/skills/health/templates/output-format.md.tmpl +0 -64
  902. package/plugins/cursor-pbr/skills/help/SKILL.md +0 -193
  903. package/plugins/cursor-pbr/skills/import/SKILL.md +0 -505
  904. package/plugins/cursor-pbr/skills/milestone/SKILL.md +0 -807
  905. package/plugins/cursor-pbr/skills/milestone/templates/audit-report.md.tmpl +0 -49
  906. package/plugins/cursor-pbr/skills/milestone/templates/stats-file.md.tmpl +0 -31
  907. package/plugins/cursor-pbr/skills/note/SKILL.md +0 -214
  908. package/plugins/cursor-pbr/skills/pause/SKILL.md +0 -248
  909. package/plugins/cursor-pbr/skills/pause/templates/continue-here.md.tmpl +0 -72
  910. package/plugins/cursor-pbr/skills/plan/SKILL.md +0 -663
  911. package/plugins/cursor-pbr/skills/plan/templates/checker-prompt.md.tmpl +0 -22
  912. package/plugins/cursor-pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +0 -33
  913. package/plugins/cursor-pbr/skills/plan/templates/planner-prompt.md.tmpl +0 -39
  914. package/plugins/cursor-pbr/skills/plan/templates/researcher-prompt.md.tmpl +0 -20
  915. package/plugins/cursor-pbr/skills/plan/templates/revision-prompt.md.tmpl +0 -24
  916. package/plugins/cursor-pbr/skills/quick/SKILL.md +0 -376
  917. package/plugins/cursor-pbr/skills/resume/SKILL.md +0 -399
  918. package/plugins/cursor-pbr/skills/review/SKILL.md +0 -654
  919. package/plugins/cursor-pbr/skills/review/templates/debugger-prompt.md.tmpl +0 -61
  920. package/plugins/cursor-pbr/skills/review/templates/gap-planner-prompt.md.tmpl +0 -41
  921. package/plugins/cursor-pbr/skills/review/templates/verifier-prompt.md.tmpl +0 -116
  922. package/plugins/cursor-pbr/skills/scan/SKILL.md +0 -300
  923. package/plugins/cursor-pbr/skills/scan/templates/mapper-prompt.md.tmpl +0 -202
  924. package/plugins/cursor-pbr/skills/setup/SKILL.md +0 -296
  925. package/plugins/cursor-pbr/skills/shared/commit-planning-docs.md +0 -36
  926. package/plugins/cursor-pbr/skills/shared/config-loading.md +0 -103
  927. package/plugins/cursor-pbr/skills/shared/context-budget.md +0 -41
  928. package/plugins/cursor-pbr/skills/shared/context-loader-task.md +0 -87
  929. package/plugins/cursor-pbr/skills/shared/digest-select.md +0 -80
  930. package/plugins/cursor-pbr/skills/shared/domain-probes.md +0 -126
  931. package/plugins/cursor-pbr/skills/shared/error-recovery-strategies.md +0 -51
  932. package/plugins/cursor-pbr/skills/shared/error-reporting.md +0 -81
  933. package/plugins/cursor-pbr/skills/shared/gate-prompts.md +0 -389
  934. package/plugins/cursor-pbr/skills/shared/phase-argument-parsing.md +0 -46
  935. package/plugins/cursor-pbr/skills/shared/progress-display.md +0 -53
  936. package/plugins/cursor-pbr/skills/shared/revision-loop.md +0 -82
  937. package/plugins/cursor-pbr/skills/shared/state-loading.md +0 -63
  938. package/plugins/cursor-pbr/skills/shared/state-update.md +0 -170
  939. package/plugins/cursor-pbr/skills/shared/universal-anti-patterns.md +0 -38
  940. package/plugins/cursor-pbr/skills/status/SKILL.md +0 -362
  941. package/plugins/cursor-pbr/skills/statusline/SKILL.md +0 -150
  942. package/plugins/cursor-pbr/skills/todo/SKILL.md +0 -280
  943. package/plugins/cursor-pbr/templates/CONTEXT.md.tmpl +0 -53
  944. package/plugins/cursor-pbr/templates/INTEGRATION-REPORT.md.tmpl +0 -152
  945. package/plugins/cursor-pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -98
  946. package/plugins/cursor-pbr/templates/ROADMAP.md.tmpl +0 -48
  947. package/plugins/cursor-pbr/templates/SUMMARY.md.tmpl +0 -82
  948. package/plugins/cursor-pbr/templates/VERIFICATION-DETAIL.md.tmpl +0 -117
  949. package/plugins/cursor-pbr/templates/codebase/ARCHITECTURE.md.tmpl +0 -98
  950. package/plugins/cursor-pbr/templates/codebase/CONCERNS.md.tmpl +0 -93
  951. package/plugins/cursor-pbr/templates/codebase/CONVENTIONS.md.tmpl +0 -104
  952. package/plugins/cursor-pbr/templates/codebase/INTEGRATIONS.md.tmpl +0 -78
  953. package/plugins/cursor-pbr/templates/codebase/STACK.md.tmpl +0 -78
  954. package/plugins/cursor-pbr/templates/codebase/STRUCTURE.md.tmpl +0 -80
  955. package/plugins/cursor-pbr/templates/codebase/TESTING.md.tmpl +0 -107
  956. package/plugins/cursor-pbr/templates/continue-here.md.tmpl +0 -74
  957. package/plugins/cursor-pbr/templates/prompt-partials/phase-project-context.md.tmpl +0 -38
  958. package/plugins/cursor-pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  959. package/plugins/cursor-pbr/templates/research/STACK.md.tmpl +0 -71
  960. package/plugins/cursor-pbr/templates/research/SUMMARY.md.tmpl +0 -112
  961. package/plugins/cursor-pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  962. package/plugins/cursor-pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  963. package/plugins/cursor-pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  964. package/plugins/pbr/references/agent-interactions.md +0 -134
  965. package/plugins/pbr/references/pbr-rules.md +0 -194
  966. package/plugins/pbr/references/pbr-tools-cli.md +0 -285
  967. package/plugins/pbr/references/planning-config.md +0 -213
  968. package/plugins/pbr/references/subagent-coordination.md +0 -119
  969. package/plugins/pbr/references/ui-formatting.md +0 -444
  970. package/plugins/pbr/scripts/validate-plugin-structure.js +0 -183
  971. package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +0 -48
  972. package/plugins/pbr/skills/shared/error-recovery-strategies.md +0 -51
  973. package/plugins/pbr/skills/shared/progress-display.md +0 -53
  974. package/plugins/pbr/skills/shared/state-loading.md +0 -62
  975. package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +0 -97
  976. package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +0 -124
  977. package/plugins/pbr/templates/research/STACK.md.tmpl +0 -71
  978. package/plugins/pbr/templates/research/SUMMARY.md.tmpl +0 -112
  979. package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +0 -81
  980. package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +0 -99
  981. package/plugins/pbr/templates/research-outputs/synthesis.md.tmpl +0 -36
  982. /package/plugins/pbr/references/{agent-anti-patterns.md → archive/agent-anti-patterns.md} +0 -0
@@ -7,296 +7,97 @@
7
7
  * after the agent completes. This catches silent agent failures early
8
8
  * rather than discovering them during verification.
9
9
  *
10
- * Agent Expected output mapping:
11
- * executor SUMMARY-{plan_id}.md (or SUMMARY.md) in the phase directory
12
- * planner PLAN-{MM}.md in the phase directory
13
- * verifier VERIFICATION.md in the phase directory
14
- * researcher RESEARCH.md (or domain-specific .md) in research/
10
+ * Agent -> Expected output mapping:
11
+ * executor -> SUMMARY-{plan_id}.md (or SUMMARY.md) in the phase directory
12
+ * planner -> PLAN-{MM}.md in the phase directory
13
+ * verifier -> VERIFICATION.md in the phase directory
14
+ * researcher -> RESEARCH.md (or domain-specific .md) in research/
15
15
  *
16
16
  * Exit codes:
17
- * 0 = always (informational hook, never blocks PostToolUse can only warn)
17
+ * 0 = always (informational hook, never blocks -- PostToolUse can only warn)
18
18
  */
19
19
 
20
20
  const fs = require('fs');
21
21
  const path = require('path');
22
22
  const { logHook } = require('./hook-logger');
23
-
24
- /**
25
- * Check if a file was modified recently (within thresholdMs).
26
- * Returns false if file doesn't exist or on error.
27
- */
28
- function isRecent(filePath, thresholdMs = 300000) {
23
+ const { KNOWN_AGENTS, sessionLoad } = require('./pbr-tools');
24
+ const { resolveSessionPath } = require('./lib/core');
25
+ const { logEvent } = require('./event-logger');
26
+ const { recordOutcome } = require('./trust-tracker');
27
+ const { checkPrematureCompletion } = require('./lib/premature-completion');
28
+
29
+ // Stress-test disablement check
30
+ function isDisabledForStressTest(planningDir, hookName) {
29
31
  try {
30
- const stat = fs.statSync(filePath);
31
- return (Date.now() - stat.mtimeMs) < thresholdMs;
32
- } catch (_e) {
33
- return false;
34
- }
32
+ const configPath = require('path').join(planningDir, 'config.json');
33
+ const config = JSON.parse(require('fs').readFileSync(configPath, 'utf8'));
34
+ const disabled = config.stress_test && config.stress_test.disabled_hooks;
35
+ return Array.isArray(disabled) && disabled.includes(hookName);
36
+ } catch (_e) { return false; }
35
37
  }
36
38
 
37
- // Agent type expected output patterns
38
- const AGENT_OUTPUTS = {
39
- 'pbr:executor': {
40
- description: 'SUMMARY.md in the phase or quick directory',
41
- check: (planningDir) => {
42
- // Check phase directory first, then quick directory
43
- const phaseMatches = findInPhaseDir(planningDir, /^SUMMARY.*\.md$/i);
44
- if (phaseMatches.length > 0) return phaseMatches;
45
- return findInQuickDir(planningDir, /^SUMMARY.*\.md$/i);
46
- }
47
- },
48
- 'pbr:planner': {
49
- description: 'PLAN.md in the phase directory',
50
- check: (planningDir) => findInPhaseDir(planningDir, /^PLAN.*\.md$/i)
51
- },
52
- 'pbr:verifier': {
53
- description: 'VERIFICATION.md in the phase directory',
54
- check: (planningDir) => findInPhaseDir(planningDir, /^VERIFICATION\.md$/i)
55
- },
56
- 'pbr:researcher': {
57
- description: 'research file in .planning/research/',
58
- check: (planningDir) => {
59
- const researchDir = path.join(planningDir, 'research');
60
- if (!fs.existsSync(researchDir)) return [];
61
- try {
62
- const allFiles = fs.readdirSync(researchDir)
63
- .filter(f => f.endsWith('.md'))
64
- .map(f => path.join('research', f));
65
- if (allFiles.length === 0) return [];
66
- const recentFiles = allFiles.filter(f => isRecent(path.join(planningDir, f)));
67
- if (recentFiles.length === 0) {
68
- // Files exist but none are recent — return them but flag staleness
69
- allFiles._stale = true;
70
- }
71
- return allFiles;
72
- } catch (_e) {
73
- return [];
74
- }
75
- }
76
- },
77
- 'pbr:synthesizer': {
78
- description: 'synthesis file in .planning/research/ or CONTEXT.md update',
79
- check: (planningDir) => {
80
- const researchDir = path.join(planningDir, 'research');
81
- if (fs.existsSync(researchDir)) {
82
- try {
83
- const files = fs.readdirSync(researchDir).filter(f => f.endsWith('.md'));
84
- if (files.length > 0) {
85
- const allFiles = files.map(f => path.join('research', f));
86
- const recentFiles = allFiles.filter(f => isRecent(path.join(planningDir, f)));
87
- if (recentFiles.length === 0) {
88
- allFiles._stale = true;
89
- }
90
- return allFiles;
91
- }
92
- } catch (_e) { /* best-effort */ }
93
- }
94
- const contextFile = path.join(planningDir, 'CONTEXT.md');
95
- if (fs.existsSync(contextFile)) {
96
- try {
97
- const stat = fs.statSync(contextFile);
98
- if (stat.size > 0) {
99
- const result = ['CONTEXT.md'];
100
- if (!isRecent(contextFile)) {
101
- result._stale = true;
102
- }
103
- return result;
104
- }
105
- } catch (_e) { /* best-effort */ }
106
- }
107
- return [];
108
- }
109
- },
110
- 'pbr:plan-checker': {
111
- description: 'advisory output (no file expected)',
112
- noFileExpected: true,
113
- check: () => []
114
- },
115
- 'pbr:integration-checker': {
116
- description: 'advisory output (no file expected)',
117
- noFileExpected: true,
118
- check: () => []
119
- },
120
- 'pbr:debugger': {
121
- description: 'debug file in .planning/debug/',
122
- check: (planningDir) => {
123
- const debugDir = path.join(planningDir, 'debug');
124
- if (!fs.existsSync(debugDir)) return [];
125
- try {
126
- return fs.readdirSync(debugDir)
127
- .filter(f => f.endsWith('.md'))
128
- .map(f => path.join('debug', f));
129
- } catch (_e) {
130
- return [];
131
- }
132
- }
133
- },
134
- 'pbr:codebase-mapper': {
135
- description: 'codebase map in .planning/codebase/',
136
- check: (planningDir) => {
137
- const codebaseDir = path.join(planningDir, 'codebase');
138
- if (!fs.existsSync(codebaseDir)) return [];
139
- try {
140
- return fs.readdirSync(codebaseDir)
141
- .filter(f => f.endsWith('.md'))
142
- .map(f => path.join('codebase', f));
143
- } catch (_e) {
144
- return [];
145
- }
146
- }
147
- },
148
- 'pbr:general': {
149
- description: 'advisory output (no file expected)',
150
- noFileExpected: true,
151
- check: () => []
152
- }
153
- };
154
-
155
- /**
156
- * Extract current phase number from STATE.md, preferring frontmatter over body.
157
- * @param {string} stateContent - Full STATE.md content
158
- * @returns {string|null} Phase number string or null
159
- */
160
- function getCurrentPhase(stateContent) {
161
- // Prefer frontmatter (always up-to-date)
162
- const fmMatch = stateContent.match(/^current_phase:\s*(\d+)/m);
163
- if (fmMatch) return fmMatch[1];
164
- // Fall back to body text
165
- const bodyMatch = stateContent.match(/Phase:\s*(\d+)\s+of\s+\d+/);
166
- return bodyMatch ? bodyMatch[1] : null;
167
- }
39
+ // Import all validators from extracted module
40
+ const validators = require('./lib/subagent-validators');
41
+ const {
42
+ AGENT_TO_SKILL,
43
+ AGENT_OUTPUTS,
44
+ SKILL_CHECKS,
45
+ findInPhaseDir,
46
+ findInQuickDir,
47
+ checkSummaryCommits,
48
+ checkDeviationsRequiringReview,
49
+ logCompliance,
50
+ checkTriggeredSeeds,
51
+ checkLearningsRequired,
52
+ isRecent,
53
+ getCurrentPhase,
54
+ checkRoadmapStaleness,
55
+ logInlineDecision,
56
+ extractVerificationOutcome,
57
+ shouldTrackTrust,
58
+ loadFeatureFlag,
59
+ updateConventionsAfterBuild,
60
+ validateSelfCheck
61
+ } = validators;
168
62
 
169
63
  /**
170
- * Check if ROADMAP.md is stale after executor/verifier completion.
171
- * Detects: (1) no Progress table for current milestone, (2) table exists but
172
- * phase row is out of date vs. phase artifacts on disk.
173
- *
174
- * @param {string} planningDir - Path to .planning/
175
- * @returns {string|null} Warning message or null if in sync
64
+ * Log plan-checker completion results to hooks.jsonl for audit trail.
65
+ * Extracts phase, status, dimension count, and blocker count from agent output.
176
66
  */
177
- function checkRoadmapStaleness(planningDir) {
178
- const roadmapPath = path.join(planningDir, 'ROADMAP.md');
179
- if (!fs.existsSync(roadmapPath)) return null;
180
-
181
- try {
182
- const content = fs.readFileSync(roadmapPath, 'utf8');
183
-
184
- // Check if there's a Progress table at all
185
- const hasProgressTable = /Plans\s*Complete/i.test(content);
186
- if (!hasProgressTable) {
187
- return 'ROADMAP.md has no Progress table for the current milestone. The orchestrator should add a Progress table with columns: Phase | Plans Complete | Status | Completed. See skills/shared/state-update.md for format.';
188
- }
189
-
190
- // If table exists, check if current phase row is present
191
- const stateFile = path.join(planningDir, 'STATE.md');
192
- if (fs.existsSync(stateFile)) {
193
- const stateContent = fs.readFileSync(stateFile, 'utf8');
194
- const currentPhase = getCurrentPhase(stateContent);
195
- if (currentPhase) {
196
- const paddedPhase = currentPhase.padStart(2, '0');
197
- const phaseInTable = new RegExp(`\\|\\s*${paddedPhase}\\.`).test(content) ||
198
- new RegExp(`\\|\\s*${parseInt(currentPhase, 10)}\\.`).test(content);
199
- if (!phaseInTable) {
200
- return `ROADMAP.md Progress table exists but has no row for Phase ${currentPhase}. Add a row for the current phase.`;
201
- }
202
- }
203
- }
204
- } catch (_e) {
205
- // best-effort
206
- }
207
- return null;
208
- }
209
-
210
- function findInPhaseDir(planningDir, pattern) {
211
- const matches = [];
212
- const phasesDir = path.join(planningDir, 'phases');
213
- if (!fs.existsSync(phasesDir)) return matches;
214
-
67
+ function logPlanCheckerResult(data) {
215
68
  try {
216
- // Find the active phase from STATE.md (prefer frontmatter over body)
217
- const stateFile = path.join(planningDir, 'STATE.md');
218
- if (!fs.existsSync(stateFile)) return matches;
219
-
220
- const stateContent = fs.readFileSync(stateFile, 'utf8');
221
- const phaseNum = getCurrentPhase(stateContent);
222
- if (!phaseNum) return matches;
223
-
224
- const currentPhase = phaseNum.padStart(2, '0');
225
- const dirs = fs.readdirSync(phasesDir).filter(d => d.startsWith(currentPhase));
226
- if (dirs.length === 0) return matches;
227
-
228
- const phaseDir = path.join(phasesDir, dirs[0]);
229
- const files = fs.readdirSync(phaseDir);
230
- for (const file of files) {
231
- if (pattern.test(file)) {
232
- // Check it's non-empty
233
- const filePath = path.join(phaseDir, file);
234
- const stat = fs.statSync(filePath);
235
- if (stat.size > 0) {
236
- matches.push(path.join('phases', dirs[0], file));
237
- }
238
- }
239
- }
240
- } catch (_e) {
241
- // best-effort
242
- }
243
- return matches;
244
- }
245
-
246
- function findInQuickDir(planningDir, pattern) {
247
- const matches = [];
248
- const quickDir = path.join(planningDir, 'quick');
249
- if (!fs.existsSync(quickDir)) return matches;
250
-
251
- try {
252
- // Find the most recent quick task directory (highest NNN)
253
- const dirs = fs.readdirSync(quickDir)
254
- .filter(d => /^\d{3}-/.test(d))
255
- .sort()
256
- .reverse();
257
- if (dirs.length === 0) return matches;
258
-
259
- const latestDir = path.join(quickDir, dirs[0]);
260
- const stat = fs.statSync(latestDir);
261
- if (!stat.isDirectory()) return matches;
262
-
263
- const files = fs.readdirSync(latestDir);
264
- for (const file of files) {
265
- if (pattern.test(file)) {
266
- const filePath = path.join(latestDir, file);
267
- const fileStat = fs.statSync(filePath);
268
- if (fileStat.size > 0) {
269
- matches.push(path.join('quick', dirs[0], file));
270
- }
271
- }
272
- }
69
+ const toolOutput = data.tool_output || '';
70
+
71
+ // Extract phase number from output or tool_input
72
+ let phaseNum = null;
73
+ const phaseMatch = toolOutput.match(/phase[:\s]+(\d+)/i) ||
74
+ (data.tool_input && JSON.stringify(data.tool_input).match(/phase[:\s"]+(\d+)/i));
75
+ if (phaseMatch) phaseNum = parseInt(phaseMatch[1], 10);
76
+
77
+ // Determine status from output patterns
78
+ let status = 'unknown';
79
+ if (/BLOCKER/i.test(toolOutput)) status = 'issues_found';
80
+ else if (/WARNING/i.test(toolOutput) && !/BLOCKER/i.test(toolOutput)) status = 'warnings';
81
+ else if (/pass|clean|no issues/i.test(toolOutput)) status = 'passed';
82
+ else if (toolOutput.length > 0) status = 'completed';
83
+
84
+ // Count dimensions checked (D1: through D9: patterns)
85
+ const dimensionMatches = toolOutput.match(/D\d+[:\s]/g);
86
+ const dimensionCount = dimensionMatches ? new Set(dimensionMatches.map(d => d.trim())).size : 0;
87
+
88
+ // Count blockers
89
+ const blockerMatches = toolOutput.match(/BLOCKER/gi);
90
+ const blockerCount = blockerMatches ? blockerMatches.length : 0;
91
+
92
+ logHook('plan-checker', 'SubagentStop', 'complete', {
93
+ action: 'validate',
94
+ phase: phaseNum,
95
+ status: status,
96
+ dimensions: dimensionCount,
97
+ blockers: blockerCount
98
+ });
273
99
  } catch (_e) {
274
- // best-effort
275
- }
276
- return matches;
277
- }
278
-
279
- function checkSummaryCommits(planningDir, foundFiles, warnings) {
280
- // Look for SUMMARY files in found list
281
- const summaryFiles = foundFiles.filter(f => /SUMMARY/i.test(f));
282
- for (const relPath of summaryFiles) {
283
- try {
284
- const fullPath = path.join(planningDir, relPath);
285
- const content = fs.readFileSync(fullPath, 'utf8');
286
- // Parse frontmatter for commits field
287
- const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
288
- if (!fmMatch) continue;
289
- const fm = fmMatch[1];
290
- const commitsMatch = fm.match(/commits:\s*(\[.*?\]|.*)/);
291
- if (!commitsMatch) {
292
- warnings.push(`${relPath}: No "commits" field in frontmatter. Executor should record commit hashes.`);
293
- continue;
294
- }
295
- const commitsVal = commitsMatch[1].trim();
296
- if (commitsVal === '[]' || commitsVal === '' || commitsVal === '~' || commitsVal === 'null') {
297
- warnings.push(`${relPath}: "commits" field is empty. Executor may have failed to commit changes.`);
298
- }
299
- } catch (_e) { /* best-effort */ }
100
+ // Never let logging failures block the hook
300
101
  }
301
102
  }
302
103
 
@@ -310,9 +111,10 @@ function readStdin() {
310
111
  return {};
311
112
  }
312
113
 
313
- function main() {
114
+
115
+ async function main() {
314
116
  const data = readStdin();
315
- const cwd = process.cwd();
117
+ const cwd = process.env.PBR_PROJECT_ROOT || process.cwd();
316
118
  const planningDir = path.join(cwd, '.planning');
317
119
 
318
120
  // Only relevant for Plan-Build-Run projects
@@ -320,20 +122,43 @@ function main() {
320
122
  process.exit(0);
321
123
  }
322
124
 
125
+ // Stress-test disablement: skip validation when this hook is disabled
126
+ if (isDisabledForStressTest(planningDir, 'check-subagent-output')) {
127
+ logHook('stress-test', 'check-subagent-output', 'disabled for stress testing');
128
+ process.exit(0);
129
+ }
130
+
323
131
  // Extract agent type from the Task completion data
324
- const agentType = data.tool_input?.subagent_type || data.subagent_type || '';
132
+ const agentType = data.agent_type || data.tool_input?.subagent_type || data.subagent_type || '';
325
133
 
326
134
  // Only check known Plan-Build-Run agent types
327
135
  const outputSpec = AGENT_OUTPUTS[agentType];
328
136
  if (!outputSpec) {
137
+ // Log when agent is in KNOWN_AGENTS but missing from AGENT_OUTPUTS
138
+ const shortName = agentType.startsWith('pbr:') ? agentType.slice(4) : agentType;
139
+ if (KNOWN_AGENTS && KNOWN_AGENTS.includes && KNOWN_AGENTS.includes(shortName)) {
140
+ logHook('check-subagent-output', 'PostToolUse', 'missing-output-spec', {
141
+ agent_type: agentType,
142
+ message: `Agent ${agentType} is in KNOWN_AGENTS but has no AGENT_OUTPUTS entry. Add one to check-subagent-output.js.`
143
+ });
144
+ }
329
145
  process.exit(0);
330
146
  }
331
147
 
332
- // Read active skill
333
- let activeSkill = '';
334
- try {
335
- activeSkill = fs.readFileSync(path.join(planningDir, '.active-skill'), 'utf8').trim();
336
- } catch (_e) { /* no active skill */ }
148
+ // Log plan-checker completions for audit trail
149
+ if (agentType === 'pbr:plan-checker') {
150
+ logPlanCheckerResult(data);
151
+ }
152
+
153
+ // Read active skill -- session-scoped when session_id available
154
+ const sessionId = data.session_id || null;
155
+ let activeSkill = sessionLoad(planningDir, sessionId).activeSkill || '';
156
+ if (!activeSkill) {
157
+ const skillPath = sessionId
158
+ ? resolveSessionPath(planningDir, '.active-skill', sessionId)
159
+ : path.join(planningDir, '.active-skill');
160
+ try { activeSkill = fs.readFileSync(skillPath, 'utf8').trim(); } catch (_) { /* file missing */ }
161
+ }
337
162
 
338
163
  // Check for expected outputs
339
164
  const found = outputSpec.check(planningDir);
@@ -343,16 +168,27 @@ function main() {
343
168
  // Skill-specific post-completion validation
344
169
  const skillWarnings = [];
345
170
 
346
- // ACTIVE-SKILL ENFORCEMENT: Warn when no .active-skill file exists.
347
- // Skills are instructed (with CRITICAL markers) to write this file, but LLMs
348
- // skip it under cognitive load. This warning reminds the orchestrator.
171
+ // ACTIVE-SKILL ENFORCEMENT: Auto-create .active-skill when missing.
349
172
  if (!activeSkill && agentType !== 'pbr:general' && agentType !== 'pbr:plan-checker' && agentType !== 'pbr:integration-checker') {
350
- skillWarnings.push('.active-skill file is missing — the orchestrating skill never wrote it. This means skill-workflow guards were inactive for this entire operation. CRITICAL: Write the skill name to .planning/.active-skill BEFORE spawning agents.');
173
+ const inferredSkill = AGENT_TO_SKILL[agentType];
174
+ if (inferredSkill) {
175
+ try {
176
+ const skillPath = sessionId
177
+ ? resolveSessionPath(planningDir, '.active-skill', sessionId)
178
+ : path.join(planningDir, '.active-skill');
179
+ fs.writeFileSync(skillPath, inferredSkill, 'utf8');
180
+ activeSkill = inferredSkill;
181
+ logHook('check-subagent-output', 'PostToolUse', 'active-skill-auto-created', { skill: inferredSkill, agent: agentType });
182
+ skillWarnings.push(`.active-skill was missing — auto-created as "${inferredSkill}" (inferred from ${agentType}). Skill-specific enforcement is now active for subsequent agents.`);
183
+ } catch (_writeErr) {
184
+ skillWarnings.push('.active-skill file is missing and auto-creation failed. Skill-workflow guards were inactive for this operation.');
185
+ }
186
+ } else {
187
+ skillWarnings.push('.active-skill file is missing — the orchestrating skill never wrote it. This means skill-workflow guards were inactive for this entire operation. CRITICAL: Write the skill name to .planning/.active-skill BEFORE spawning agents.');
188
+ }
351
189
  }
352
190
 
353
- // ROADMAP.md SYNC: After executor or verifier completes, check if ROADMAP.md
354
- // needs updating. Subagent writes (SUMMARY/VERIFICATION) trigger check-state-sync
355
- // in the subagent context, but the main context ROADMAP.md may still be stale.
191
+ // ROADMAP.md SYNC check after executor or verifier completes
356
192
  if (agentType === 'pbr:executor' || agentType === 'pbr:verifier') {
357
193
  const roadmapWarning = checkRoadmapStaleness(planningDir);
358
194
  if (roadmapWarning) {
@@ -366,57 +202,55 @@ function main() {
366
202
  skillWarnings.push(`${label} output may be stale — no recent output files detected.`);
367
203
  }
368
204
 
369
- // GAP-04: Begin planner must produce core files
370
- if (activeSkill === 'begin' && agentType === 'pbr:planner') {
371
- const coreFiles = ['REQUIREMENTS.md', 'ROADMAP.md', 'STATE.md'];
372
- for (const f of coreFiles) {
373
- if (!fs.existsSync(path.join(planningDir, f))) {
374
- skillWarnings.push(`Begin planner: ${f} was not created. The project may be in an incomplete state.`);
375
- }
376
- }
205
+ // Skill-specific dispatch via SKILL_CHECKS lookup
206
+ const skillCheckKey = `${activeSkill}:${agentType}`;
207
+ const skillCheck = SKILL_CHECKS[skillCheckKey];
208
+ if (skillCheck) {
209
+ skillCheck.check(planningDir, found, skillWarnings);
377
210
  }
378
211
 
379
- // GAP-05: Plan researcher should produce phase-level RESEARCH.md
380
- if (activeSkill === 'plan' && agentType === 'pbr:researcher') {
381
- const phaseResearch = findInPhaseDir(planningDir, /^RESEARCH\.md$/i);
382
- if (found.length === 0 && phaseResearch.length === 0) {
383
- skillWarnings.push('Plan researcher: No research output found in .planning/research/ or in the phase directory.');
212
+ // Completion marker validation for executor agents
213
+ if (agentType === 'pbr:executor') {
214
+ const toolOutput = data.tool_output || '';
215
+ const hasCompletionMarker = /## PLAN COMPLETE|## PLAN FAILED|## CHECKPOINT:/i.test(toolOutput);
216
+ if (toolOutput && !hasCompletionMarker) {
217
+ skillWarnings.push('Executor did not return a completion marker (expected ## PLAN COMPLETE, ## PLAN FAILED, or ## CHECKPOINT:). Build skill may not route correctly.');
384
218
  }
385
- }
386
219
 
387
- // GAP-08: Scan codebase-mapper should produce all 4 focus areas
388
- if (activeSkill === 'scan' && agentType === 'pbr:codebase-mapper') {
389
- const expectedAreas = ['tech', 'arch', 'quality', 'concerns'];
390
- const codebaseDir = path.join(planningDir, 'codebase');
391
- if (fs.existsSync(codebaseDir)) {
392
- try {
393
- const files = fs.readdirSync(codebaseDir).map(f => f.toLowerCase());
394
- for (const area of expectedAreas) {
395
- if (!files.some(f => f.includes(area))) {
396
- skillWarnings.push(`Scan mapper: No output file containing "${area}" found in .planning/codebase/. One of the 4 mappers may have failed.`);
220
+ // Self-Check section validation in SUMMARY.md body
221
+ if (found.length > 0) {
222
+ const summaryFiles = found.filter(f => /SUMMARY/i.test(f));
223
+ let hasSelfCheckSection = false;
224
+ for (const relPath of summaryFiles) {
225
+ try {
226
+ const fullPath = path.join(planningDir, relPath);
227
+ const content = fs.readFileSync(fullPath, 'utf8');
228
+ if (/^## Self-Check:\s*(PASSED|FAILED)/mi.test(content)) {
229
+ hasSelfCheckSection = true;
230
+ break;
397
231
  }
398
- }
399
- } catch (_e) { /* best-effort */ }
232
+ } catch (_e) { /* best-effort */ }
233
+ }
234
+ if (!hasSelfCheckSection) {
235
+ skillWarnings.push('Executor SUMMARY.md missing ## Self-Check section. Self-verification may have been skipped.');
236
+ }
400
237
  }
401
238
  }
402
239
 
403
- // GAP-07: Review verifier should produce meaningful VERIFICATION.md status
404
- if (activeSkill === 'review' && agentType === 'pbr:verifier') {
405
- const verFiles = findInPhaseDir(planningDir, /^VERIFICATION\.md$/i);
406
- for (const vf of verFiles) {
407
- try {
408
- const content = fs.readFileSync(path.join(planningDir, vf), 'utf8');
409
- const statusMatch = content.match(/^status:\s*(\S+)/mi);
410
- if (statusMatch && statusMatch[1] === 'gaps_found') {
411
- skillWarnings.push('Review verifier: VERIFICATION.md has status "gaps_found" — ensure gaps are surfaced to the user.');
412
- }
413
- } catch (_e) { /* best-effort */ }
414
- }
240
+ // Premature completion detection (REQ-HI-08)
241
+ const prematureResult = checkPrematureCompletion(agentType, data, planningDir);
242
+ if (prematureResult && prematureResult.warning) {
243
+ skillWarnings.push(`[ADVISORY] Possible premature completion: ${prematureResult.warning} (signals: ${prematureResult.signals.join(', ')})`);
415
244
  }
416
245
 
417
- // GAP-06: Build/quick executor SUMMARY should have commits
418
- if ((activeSkill === 'build' || activeSkill === 'quick') && agentType === 'pbr:executor') {
419
- checkSummaryCommits(planningDir, found, skillWarnings);
246
+ // Log compliance violations for tracking and session-end summary
247
+ if (genericMissing) {
248
+ logCompliance(planningDir, agentType, `Missing expected output: ${outputSpec.description}`, 'required');
249
+ }
250
+ for (const w of skillWarnings) {
251
+ if (w.startsWith('[REQUIRED]')) {
252
+ logCompliance(planningDir, agentType, w.replace('[REQUIRED] ', ''), 'required');
253
+ }
420
254
  }
421
255
 
422
256
  // Output logic: avoid duplicating warnings
@@ -436,7 +270,7 @@ function main() {
436
270
  found: 'none'
437
271
  });
438
272
  const output = {
439
- additionalContext: `Warning: Agent ${agentType} completed but no ${outputSpec.description} was found. The agent may have failed silently. Check agent output for errors.`
273
+ additionalContext: `[WARN] Agent ${agentType} completed but no ${outputSpec.description} was found. Likely causes: (1) agent hit an error mid-run, (2) wrong working directory. To fix: re-run the parent skill — the executor gate will block until the output is present. Check the Task() output above for error details.`
440
274
  };
441
275
  process.stdout.write(JSON.stringify(output));
442
276
  } else if (skillWarnings.length > 0) {
@@ -458,5 +292,134 @@ function main() {
458
292
  process.exit(0);
459
293
  }
460
294
 
461
- module.exports = { AGENT_OUTPUTS, findInPhaseDir, findInQuickDir, checkSummaryCommits, isRecent, getCurrentPhase, checkRoadmapStaleness };
295
+ /**
296
+ * HTTP handler for hook-server.js integration.
297
+ * Called as handleHttp(reqBody, cache) where reqBody = { event, tool, data, planningDir, cache }.
298
+ * Must NOT call process.exit().
299
+ * @param {{ data: object, planningDir: string }} reqBody
300
+ * @returns {Promise<{ additionalContext: string }|null>}
301
+ */
302
+ async function handleHttp(reqBody) {
303
+ const data = reqBody.data || {};
304
+ const planningDir = reqBody.planningDir;
305
+ if (!planningDir || !fs.existsSync(planningDir)) return null;
306
+
307
+ const agentType = data.agent_type || data.tool_input?.subagent_type || data.subagent_type || '';
308
+ const outputSpec = AGENT_OUTPUTS[agentType];
309
+ if (!outputSpec) {
310
+ const shortName = agentType.startsWith('pbr:') ? agentType.slice(4) : agentType;
311
+ if (KNOWN_AGENTS && KNOWN_AGENTS.includes && KNOWN_AGENTS.includes(shortName)) {
312
+ logHook('check-subagent-output', 'PostToolUse', 'missing-output-spec', {
313
+ agent_type: agentType,
314
+ message: `Agent ${agentType} is in KNOWN_AGENTS but has no AGENT_OUTPUTS entry. Add one to check-subagent-output.js.`
315
+ });
316
+ }
317
+ return null;
318
+ }
319
+
320
+ // Log plan-checker completions for audit trail
321
+ if (agentType === 'pbr:plan-checker') {
322
+ logPlanCheckerResult(data);
323
+ }
324
+
325
+ const sessionId = data.session_id || null;
326
+ let activeSkill = sessionLoad(planningDir, sessionId).activeSkill || '';
327
+ if (!activeSkill) {
328
+ const skillPath = sessionId
329
+ ? resolveSessionPath(planningDir, '.active-skill', sessionId)
330
+ : path.join(planningDir, '.active-skill');
331
+ try { activeSkill = fs.readFileSync(skillPath, 'utf8').trim(); } catch (_) { /* file missing */ }
332
+ }
333
+
334
+ const found = outputSpec.check(planningDir);
335
+ const genericMissing = found.length === 0 && !outputSpec.noFileExpected;
336
+ const skillWarnings = [];
337
+
338
+ if (!activeSkill && agentType !== 'pbr:general' && agentType !== 'pbr:plan-checker' && agentType !== 'pbr:integration-checker') {
339
+ const inferredSkill = AGENT_TO_SKILL[agentType];
340
+ if (inferredSkill) {
341
+ try {
342
+ const skillPath = sessionId
343
+ ? resolveSessionPath(planningDir, '.active-skill', sessionId)
344
+ : path.join(planningDir, '.active-skill');
345
+ fs.writeFileSync(skillPath, inferredSkill, 'utf8');
346
+ activeSkill = inferredSkill;
347
+ logHook('check-subagent-output', 'PostToolUse', 'active-skill-auto-created', { skill: inferredSkill, agent: agentType });
348
+ skillWarnings.push(`.active-skill was missing — auto-created as "${inferredSkill}" (inferred from ${agentType}).`);
349
+ } catch (_writeErr) {
350
+ skillWarnings.push('.active-skill file is missing and auto-creation failed.');
351
+ }
352
+ } else {
353
+ skillWarnings.push('.active-skill file is missing — the orchestrating skill never wrote it. CRITICAL: Write the skill name to .planning/.active-skill BEFORE spawning agents.');
354
+ }
355
+ }
356
+
357
+ if (agentType === 'pbr:executor' || agentType === 'pbr:verifier') {
358
+ const roadmapWarning = checkRoadmapStaleness(planningDir);
359
+ if (roadmapWarning) skillWarnings.push(roadmapWarning);
360
+ }
361
+
362
+ if (found._stale && (agentType === 'pbr:researcher' || agentType === 'pbr:synthesizer')) {
363
+ const label = agentType === 'pbr:researcher' ? 'Researcher' : 'Synthesizer';
364
+ skillWarnings.push(`${label} output may be stale — no recent output files detected.`);
365
+ }
366
+
367
+ const skillCheckKey = `${activeSkill}:${agentType}`;
368
+ const skillCheck = SKILL_CHECKS[skillCheckKey];
369
+ if (skillCheck) skillCheck.check(planningDir, found, skillWarnings);
370
+
371
+ // Completion marker validation for executor agents
372
+ if (agentType === 'pbr:executor') {
373
+ const toolOutput = data.tool_output || '';
374
+ const hasCompletionMarker = /## PLAN COMPLETE|## PLAN FAILED|## CHECKPOINT:/i.test(toolOutput);
375
+ if (toolOutput && !hasCompletionMarker) {
376
+ skillWarnings.push('Executor did not return a completion marker (expected ## PLAN COMPLETE, ## PLAN FAILED, or ## CHECKPOINT:). Build skill may not route correctly.');
377
+ }
378
+
379
+ // Self-Check section validation in SUMMARY.md body
380
+ if (found.length > 0) {
381
+ const summaryFiles = found.filter(f => /SUMMARY/i.test(f));
382
+ let hasSelfCheckSection = false;
383
+ for (const relPath of summaryFiles) {
384
+ try {
385
+ const fullPath = path.join(planningDir, relPath);
386
+ const content = fs.readFileSync(fullPath, 'utf8');
387
+ if (/^## Self-Check:\s*(PASSED|FAILED)/mi.test(content)) {
388
+ hasSelfCheckSection = true;
389
+ break;
390
+ }
391
+ } catch (_e) { /* best-effort */ }
392
+ }
393
+ if (!hasSelfCheckSection) {
394
+ skillWarnings.push('Executor SUMMARY.md missing ## Self-Check section. Self-verification may have been skipped.');
395
+ }
396
+ }
397
+ }
398
+
399
+ // Premature completion detection (REQ-HI-08)
400
+ const prematureResult = checkPrematureCompletion(agentType, data, planningDir);
401
+ if (prematureResult && prematureResult.warning) {
402
+ skillWarnings.push(`[ADVISORY] Possible premature completion: ${prematureResult.warning} (signals: ${prematureResult.signals.join(', ')})`);
403
+ }
404
+
405
+ if (genericMissing && skillWarnings.length > 0) {
406
+ logHook('check-subagent-output', 'PostToolUse', 'skill-warning', { skill: activeSkill, agent_type: agentType, warnings: skillWarnings });
407
+ const msg = `Warning: Agent ${agentType} completed but no ${outputSpec.description} was found.\nSkill-specific warnings:\n` +
408
+ skillWarnings.map(w => `- ${w}`).join('\n');
409
+ return { additionalContext: msg };
410
+ } else if (genericMissing) {
411
+ logHook('check-subagent-output', 'PostToolUse', 'warning', { agent_type: agentType, expected: outputSpec.description, found: 'none' });
412
+ return {
413
+ additionalContext: `[WARN] Agent ${agentType} completed but no ${outputSpec.description} was found. Likely causes: (1) agent hit an error mid-run, (2) wrong working directory. To fix: re-run the parent skill — the executor gate will block until the output is present. Check the Task() output above for error details.`
414
+ };
415
+ } else if (skillWarnings.length > 0) {
416
+ logHook('check-subagent-output', 'PostToolUse', 'skill-warning', { skill: activeSkill, agent_type: agentType, warnings: skillWarnings });
417
+ return { additionalContext: 'Skill-specific warnings:\n' + skillWarnings.map(w => `- ${w}`).join('\n') };
418
+ } else {
419
+ logHook('check-subagent-output', 'PostToolUse', 'verified', { agent_type: agentType, found: found });
420
+ return null;
421
+ }
422
+ }
423
+
424
+ module.exports = { ...validators, handleHttp };
462
425
  if (require.main === module || process.argv[1] === __filename) { main(); }