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