@jokerized/getresearchdone 0.4.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/.claude-plugin/plugin.json +103 -0
- package/README.md +211 -0
- package/agents/grd-baseline-assessor.md +684 -0
- package/agents/grd-code-reviewer.md +300 -0
- package/agents/grd-codebase-mapper.md +355 -0
- package/agents/grd-critique-agent.md +119 -0
- package/agents/grd-debugger.md +519 -0
- package/agents/grd-deep-diver.md +737 -0
- package/agents/grd-eval-planner.md +913 -0
- package/agents/grd-eval-reporter.md +717 -0
- package/agents/grd-executor.md +683 -0
- package/agents/grd-feasibility-analyst.md +624 -0
- package/agents/grd-integration-checker.md +367 -0
- package/agents/grd-knowledge-miner.md +81 -0
- package/agents/grd-migrator.md +88 -0
- package/agents/grd-phase-researcher.md +697 -0
- package/agents/grd-plan-checker.md +443 -0
- package/agents/grd-planner.md +1532 -0
- package/agents/grd-product-owner.md +562 -0
- package/agents/grd-project-researcher.md +513 -0
- package/agents/grd-research-synthesizer.md +273 -0
- package/agents/grd-roadmapper.md +798 -0
- package/agents/grd-surveyor.md +566 -0
- package/agents/grd-verifier.md +893 -0
- package/bin/gd.js +4 -0
- package/bin/gd.ts +227 -0
- package/bin/grd-manifest.js +4 -0
- package/bin/grd-manifest.ts +286 -0
- package/bin/grd-mcp-server.js +4 -0
- package/bin/grd-mcp-server.ts +124 -0
- package/bin/grd-tools.js +4 -0
- package/bin/grd-tools.ts +2471 -0
- package/bin/postinstall.js +4 -0
- package/bin/postinstall.ts +80 -0
- package/commands/add-phase.md +123 -0
- package/commands/add-todo.md +87 -0
- package/commands/assess-baseline.md +289 -0
- package/commands/autopilot.md +100 -0
- package/commands/autoplan.md +55 -0
- package/commands/check-todos.md +87 -0
- package/commands/compare-methods.md +262 -0
- package/commands/complete-milestone.md +225 -0
- package/commands/debug.md +372 -0
- package/commands/deep-dive.md +288 -0
- package/commands/discover.md +281 -0
- package/commands/discuss-phase.md +188 -0
- package/commands/discuss.md +55 -0
- package/commands/eval-report.md +310 -0
- package/commands/evolve.md +79 -0
- package/commands/execute-phase.md +1017 -0
- package/commands/feasibility.md +292 -0
- package/commands/help.md +407 -0
- package/commands/init.md +1508 -0
- package/commands/insert-phase.md +113 -0
- package/commands/iterate.md +327 -0
- package/commands/list-phase-assumptions.md +217 -0
- package/commands/long-term-roadmap.md +202 -0
- package/commands/map-codebase.md +111 -0
- package/commands/migrate.md +159 -0
- package/commands/new-milestone.md +169 -0
- package/commands/pause-work.md +83 -0
- package/commands/plan-milestone-gaps.md +373 -0
- package/commands/plan-phase.md +655 -0
- package/commands/principles.md +328 -0
- package/commands/product-plan.md +319 -0
- package/commands/progress.md +481 -0
- package/commands/quick.md +167 -0
- package/commands/reapply-patches.md +154 -0
- package/commands/remove-phase.md +97 -0
- package/commands/requirement.md +96 -0
- package/commands/resume-project.md +113 -0
- package/commands/settings.md +1144 -0
- package/commands/survey.md +242 -0
- package/commands/sync.md +246 -0
- package/commands/tracker-setup.md +322 -0
- package/commands/update.md +202 -0
- package/commands/verify-phase.md +335 -0
- package/commands/verify-work.md +701 -0
- package/commands/wireup.md +29 -0
- package/dist/bin/gd.d.ts +3 -0
- package/dist/bin/gd.d.ts.map +1 -0
- package/dist/bin/gd.js +178 -0
- package/dist/bin/gd.js.map +1 -0
- package/dist/bin/grd-manifest.d.ts +3 -0
- package/dist/bin/grd-manifest.d.ts.map +1 -0
- package/dist/bin/grd-manifest.js +202 -0
- package/dist/bin/grd-manifest.js.map +1 -0
- package/dist/bin/grd-mcp-server.d.ts +3 -0
- package/dist/bin/grd-mcp-server.d.ts.map +1 -0
- package/dist/bin/grd-mcp-server.js +71 -0
- package/dist/bin/grd-mcp-server.js.map +1 -0
- package/dist/bin/grd-tools.d.ts +3 -0
- package/dist/bin/grd-tools.d.ts.map +1 -0
- package/dist/bin/grd-tools.js +1680 -0
- package/dist/bin/grd-tools.js.map +1 -0
- package/dist/bin/postinstall.d.ts +3 -0
- package/dist/bin/postinstall.d.ts.map +1 -0
- package/dist/bin/postinstall.js +61 -0
- package/dist/bin/postinstall.js.map +1 -0
- package/dist/lib/autopilot-milestone.d.ts +2 -0
- package/dist/lib/autopilot-milestone.d.ts.map +1 -0
- package/dist/lib/autopilot-milestone.js +94 -0
- package/dist/lib/autopilot-milestone.js.map +1 -0
- package/dist/lib/autopilot-pipeline.d.ts +2 -0
- package/dist/lib/autopilot-pipeline.d.ts.map +1 -0
- package/dist/lib/autopilot-pipeline.js +830 -0
- package/dist/lib/autopilot-pipeline.js.map +1 -0
- package/dist/lib/autopilot-waves.d.ts +2 -0
- package/dist/lib/autopilot-waves.d.ts.map +1 -0
- package/dist/lib/autopilot-waves.js +266 -0
- package/dist/lib/autopilot-waves.js.map +1 -0
- package/dist/lib/autopilot.d.ts +2 -0
- package/dist/lib/autopilot.d.ts.map +1 -0
- package/dist/lib/autopilot.js +1314 -0
- package/dist/lib/autopilot.js.map +1 -0
- package/dist/lib/autoplan.d.ts +2 -0
- package/dist/lib/autoplan.d.ts.map +1 -0
- package/dist/lib/autoplan.js +198 -0
- package/dist/lib/autoplan.js.map +1 -0
- package/dist/lib/autoresearch.d.ts +2 -0
- package/dist/lib/autoresearch.d.ts.map +1 -0
- package/dist/lib/autoresearch.js +626 -0
- package/dist/lib/autoresearch.js.map +1 -0
- package/dist/lib/backend.d.ts +2 -0
- package/dist/lib/backend.d.ts.map +1 -0
- package/dist/lib/backend.js +1036 -0
- package/dist/lib/backend.js.map +1 -0
- package/dist/lib/benchmark.d.ts +99 -0
- package/dist/lib/benchmark.d.ts.map +1 -0
- package/dist/lib/benchmark.js +278 -0
- package/dist/lib/benchmark.js.map +1 -0
- package/dist/lib/citations.d.ts +2 -0
- package/dist/lib/citations.d.ts.map +1 -0
- package/dist/lib/citations.js +642 -0
- package/dist/lib/citations.js.map +1 -0
- package/dist/lib/cleanup.d.ts +2 -0
- package/dist/lib/cleanup.d.ts.map +1 -0
- package/dist/lib/cleanup.js +1222 -0
- package/dist/lib/cleanup.js.map +1 -0
- package/dist/lib/cli/adapters.d.ts +10 -0
- package/dist/lib/cli/adapters.d.ts.map +1 -0
- package/dist/lib/cli/adapters.js +27 -0
- package/dist/lib/cli/adapters.js.map +1 -0
- package/dist/lib/cli/agent.d.ts +17 -0
- package/dist/lib/cli/agent.d.ts.map +1 -0
- package/dist/lib/cli/agent.js +53 -0
- package/dist/lib/cli/agent.js.map +1 -0
- package/dist/lib/cli/index.d.ts +21 -0
- package/dist/lib/cli/index.d.ts.map +1 -0
- package/dist/lib/cli/index.js +264 -0
- package/dist/lib/cli/index.js.map +1 -0
- package/dist/lib/cli/output.d.ts +20 -0
- package/dist/lib/cli/output.d.ts.map +1 -0
- package/dist/lib/cli/output.js +22 -0
- package/dist/lib/cli/output.js.map +1 -0
- package/dist/lib/cli/scan-dispatch.d.ts +9 -0
- package/dist/lib/cli/scan-dispatch.d.ts.map +1 -0
- package/dist/lib/cli/scan-dispatch.js +107 -0
- package/dist/lib/cli/scan-dispatch.js.map +1 -0
- package/dist/lib/cli/tools.d.ts +16 -0
- package/dist/lib/cli/tools.d.ts.map +1 -0
- package/dist/lib/cli/tools.js +168 -0
- package/dist/lib/cli/tools.js.map +1 -0
- package/dist/lib/commands/_dashboard-parsers.d.ts +2 -0
- package/dist/lib/commands/_dashboard-parsers.d.ts.map +1 -0
- package/dist/lib/commands/_dashboard-parsers.js +192 -0
- package/dist/lib/commands/_dashboard-parsers.js.map +1 -0
- package/dist/lib/commands/analysis.d.ts +2 -0
- package/dist/lib/commands/analysis.d.ts.map +1 -0
- package/dist/lib/commands/analysis.js +1418 -0
- package/dist/lib/commands/analysis.js.map +1 -0
- package/dist/lib/commands/assumptions.d.ts +2 -0
- package/dist/lib/commands/assumptions.d.ts.map +1 -0
- package/dist/lib/commands/assumptions.js +166 -0
- package/dist/lib/commands/assumptions.js.map +1 -0
- package/dist/lib/commands/blame.d.ts +2 -0
- package/dist/lib/commands/blame.d.ts.map +1 -0
- package/dist/lib/commands/blame.js +133 -0
- package/dist/lib/commands/blame.js.map +1 -0
- package/dist/lib/commands/budget.d.ts +2 -0
- package/dist/lib/commands/budget.d.ts.map +1 -0
- package/dist/lib/commands/budget.js +100 -0
- package/dist/lib/commands/budget.js.map +1 -0
- package/dist/lib/commands/check-plans.d.ts +2 -0
- package/dist/lib/commands/check-plans.d.ts.map +1 -0
- package/dist/lib/commands/check-plans.js +190 -0
- package/dist/lib/commands/check-plans.js.map +1 -0
- package/dist/lib/commands/config.d.ts +2 -0
- package/dist/lib/commands/config.d.ts.map +1 -0
- package/dist/lib/commands/config.js +188 -0
- package/dist/lib/commands/config.js.map +1 -0
- package/dist/lib/commands/dashboard.d.ts +2 -0
- package/dist/lib/commands/dashboard.d.ts.map +1 -0
- package/dist/lib/commands/dashboard.js +466 -0
- package/dist/lib/commands/dashboard.js.map +1 -0
- package/dist/lib/commands/estimate.d.ts +2 -0
- package/dist/lib/commands/estimate.d.ts.map +1 -0
- package/dist/lib/commands/estimate.js +148 -0
- package/dist/lib/commands/estimate.js.map +1 -0
- package/dist/lib/commands/eval-diff.d.ts +2 -0
- package/dist/lib/commands/eval-diff.d.ts.map +1 -0
- package/dist/lib/commands/eval-diff.js +213 -0
- package/dist/lib/commands/eval-diff.js.map +1 -0
- package/dist/lib/commands/freshness.d.ts +2 -0
- package/dist/lib/commands/freshness.d.ts.map +1 -0
- package/dist/lib/commands/freshness.js +163 -0
- package/dist/lib/commands/freshness.js.map +1 -0
- package/dist/lib/commands/health.d.ts +2 -0
- package/dist/lib/commands/health.d.ts.map +1 -0
- package/dist/lib/commands/health.js +435 -0
- package/dist/lib/commands/health.js.map +1 -0
- package/dist/lib/commands/index.d.ts +2 -0
- package/dist/lib/commands/index.d.ts.map +1 -0
- package/dist/lib/commands/index.js +128 -0
- package/dist/lib/commands/index.js.map +1 -0
- package/dist/lib/commands/install.d.ts +56 -0
- package/dist/lib/commands/install.d.ts.map +1 -0
- package/dist/lib/commands/install.js +214 -0
- package/dist/lib/commands/install.js.map +1 -0
- package/dist/lib/commands/knowhow-aggregator.d.ts +2 -0
- package/dist/lib/commands/knowhow-aggregator.d.ts.map +1 -0
- package/dist/lib/commands/knowhow-aggregator.js +279 -0
- package/dist/lib/commands/knowhow-aggregator.js.map +1 -0
- package/dist/lib/commands/knowledge-search.d.ts +2 -0
- package/dist/lib/commands/knowledge-search.d.ts.map +1 -0
- package/dist/lib/commands/knowledge-search.js +113 -0
- package/dist/lib/commands/knowledge-search.js.map +1 -0
- package/dist/lib/commands/long-term-roadmap.d.ts +2 -0
- package/dist/lib/commands/long-term-roadmap.d.ts.map +1 -0
- package/dist/lib/commands/long-term-roadmap.js +272 -0
- package/dist/lib/commands/long-term-roadmap.js.map +1 -0
- package/dist/lib/commands/patterns.d.ts +91 -0
- package/dist/lib/commands/patterns.d.ts.map +1 -0
- package/dist/lib/commands/patterns.js +391 -0
- package/dist/lib/commands/patterns.js.map +1 -0
- package/dist/lib/commands/phase-info.d.ts +2 -0
- package/dist/lib/commands/phase-info.d.ts.map +1 -0
- package/dist/lib/commands/phase-info.js +509 -0
- package/dist/lib/commands/phase-info.js.map +1 -0
- package/dist/lib/commands/plan-lint.d.ts +56 -0
- package/dist/lib/commands/plan-lint.d.ts.map +1 -0
- package/dist/lib/commands/plan-lint.js +481 -0
- package/dist/lib/commands/plan-lint.js.map +1 -0
- package/dist/lib/commands/plan-phase.d.ts +53 -0
- package/dist/lib/commands/plan-phase.d.ts.map +1 -0
- package/dist/lib/commands/plan-phase.js +288 -0
- package/dist/lib/commands/plan-phase.js.map +1 -0
- package/dist/lib/commands/progress.d.ts +2 -0
- package/dist/lib/commands/progress.d.ts.map +1 -0
- package/dist/lib/commands/progress.js +266 -0
- package/dist/lib/commands/progress.js.map +1 -0
- package/dist/lib/commands/quality.d.ts +2 -0
- package/dist/lib/commands/quality.d.ts.map +1 -0
- package/dist/lib/commands/quality.js +80 -0
- package/dist/lib/commands/quality.js.map +1 -0
- package/dist/lib/commands/rollback.d.ts +2 -0
- package/dist/lib/commands/rollback.d.ts.map +1 -0
- package/dist/lib/commands/rollback.js +145 -0
- package/dist/lib/commands/rollback.js.map +1 -0
- package/dist/lib/commands/scan.d.ts +25 -0
- package/dist/lib/commands/scan.d.ts.map +1 -0
- package/dist/lib/commands/scan.js +28 -0
- package/dist/lib/commands/scan.js.map +1 -0
- package/dist/lib/commands/search.d.ts +2 -0
- package/dist/lib/commands/search.d.ts.map +1 -0
- package/dist/lib/commands/search.js +212 -0
- package/dist/lib/commands/search.js.map +1 -0
- package/dist/lib/commands/select-candidate.d.ts +128 -0
- package/dist/lib/commands/select-candidate.d.ts.map +1 -0
- package/dist/lib/commands/select-candidate.js +518 -0
- package/dist/lib/commands/select-candidate.js.map +1 -0
- package/dist/lib/commands/singularity.d.ts +2 -0
- package/dist/lib/commands/singularity.d.ts.map +1 -0
- package/dist/lib/commands/singularity.js +185 -0
- package/dist/lib/commands/singularity.js.map +1 -0
- package/dist/lib/commands/slug-timestamp.d.ts +2 -0
- package/dist/lib/commands/slug-timestamp.d.ts.map +1 -0
- package/dist/lib/commands/slug-timestamp.js +54 -0
- package/dist/lib/commands/slug-timestamp.js.map +1 -0
- package/dist/lib/commands/tail.d.ts +2 -0
- package/dist/lib/commands/tail.d.ts.map +1 -0
- package/dist/lib/commands/tail.js +100 -0
- package/dist/lib/commands/tail.js.map +1 -0
- package/dist/lib/commands/todo.d.ts +2 -0
- package/dist/lib/commands/todo.d.ts.map +1 -0
- package/dist/lib/commands/todo.js +200 -0
- package/dist/lib/commands/todo.js.map +1 -0
- package/dist/lib/commands/watch.d.ts +2 -0
- package/dist/lib/commands/watch.d.ts.map +1 -0
- package/dist/lib/commands/watch.js +72 -0
- package/dist/lib/commands/watch.js.map +1 -0
- package/dist/lib/complexity.d.ts +55 -0
- package/dist/lib/complexity.d.ts.map +1 -0
- package/dist/lib/complexity.js +80 -0
- package/dist/lib/complexity.js.map +1 -0
- package/dist/lib/context/agents.d.ts +2 -0
- package/dist/lib/context/agents.d.ts.map +1 -0
- package/dist/lib/context/agents.js +344 -0
- package/dist/lib/context/agents.js.map +1 -0
- package/dist/lib/context/base.d.ts +2 -0
- package/dist/lib/context/base.d.ts.map +1 -0
- package/dist/lib/context/base.js +81 -0
- package/dist/lib/context/base.js.map +1 -0
- package/dist/lib/context/execute.d.ts +2 -0
- package/dist/lib/context/execute.d.ts.map +1 -0
- package/dist/lib/context/execute.js +753 -0
- package/dist/lib/context/execute.js.map +1 -0
- package/dist/lib/context/index.d.ts +2 -0
- package/dist/lib/context/index.d.ts.map +1 -0
- package/dist/lib/context/index.js +88 -0
- package/dist/lib/context/index.js.map +1 -0
- package/dist/lib/context/progress.d.ts +2 -0
- package/dist/lib/context/progress.d.ts.map +1 -0
- package/dist/lib/context/progress.js +178 -0
- package/dist/lib/context/progress.js.map +1 -0
- package/dist/lib/context/project.d.ts +2 -0
- package/dist/lib/context/project.d.ts.map +1 -0
- package/dist/lib/context/project.js +413 -0
- package/dist/lib/context/project.js.map +1 -0
- package/dist/lib/context/research.d.ts +2 -0
- package/dist/lib/context/research.d.ts.map +1 -0
- package/dist/lib/context/research.js +466 -0
- package/dist/lib/context/research.js.map +1 -0
- package/dist/lib/dead-ends.d.ts +28 -0
- package/dist/lib/dead-ends.d.ts.map +1 -0
- package/dist/lib/dead-ends.js +451 -0
- package/dist/lib/dead-ends.js.map +1 -0
- package/dist/lib/deps.d.ts +2 -0
- package/dist/lib/deps.d.ts.map +1 -0
- package/dist/lib/deps.js +630 -0
- package/dist/lib/deps.js.map +1 -0
- package/dist/lib/discussion.d.ts +2 -0
- package/dist/lib/discussion.d.ts.map +1 -0
- package/dist/lib/discussion.js +1041 -0
- package/dist/lib/discussion.js.map +1 -0
- package/dist/lib/drift.d.ts +36 -0
- package/dist/lib/drift.d.ts.map +1 -0
- package/dist/lib/drift.js +481 -0
- package/dist/lib/drift.js.map +1 -0
- package/dist/lib/evolve/_dimensions-features.d.ts +2 -0
- package/dist/lib/evolve/_dimensions-features.d.ts.map +1 -0
- package/dist/lib/evolve/_dimensions-features.js +369 -0
- package/dist/lib/evolve/_dimensions-features.js.map +1 -0
- package/dist/lib/evolve/_dimensions.d.ts +2 -0
- package/dist/lib/evolve/_dimensions.d.ts.map +1 -0
- package/dist/lib/evolve/_dimensions.js +358 -0
- package/dist/lib/evolve/_dimensions.js.map +1 -0
- package/dist/lib/evolve/_product-ideation.d.ts +2 -0
- package/dist/lib/evolve/_product-ideation.d.ts.map +1 -0
- package/dist/lib/evolve/_product-ideation.js +281 -0
- package/dist/lib/evolve/_product-ideation.js.map +1 -0
- package/dist/lib/evolve/_prompts.d.ts +2 -0
- package/dist/lib/evolve/_prompts.d.ts.map +1 -0
- package/dist/lib/evolve/_prompts.js +153 -0
- package/dist/lib/evolve/_prompts.js.map +1 -0
- package/dist/lib/evolve/cli.d.ts +2 -0
- package/dist/lib/evolve/cli.d.ts.map +1 -0
- package/dist/lib/evolve/cli.js +224 -0
- package/dist/lib/evolve/cli.js.map +1 -0
- package/dist/lib/evolve/discovery.d.ts +2 -0
- package/dist/lib/evolve/discovery.d.ts.map +1 -0
- package/dist/lib/evolve/discovery.js +391 -0
- package/dist/lib/evolve/discovery.js.map +1 -0
- package/dist/lib/evolve/index.d.ts +2 -0
- package/dist/lib/evolve/index.d.ts.map +1 -0
- package/dist/lib/evolve/index.js +88 -0
- package/dist/lib/evolve/index.js.map +1 -0
- package/dist/lib/evolve/orchestrator.d.ts +2 -0
- package/dist/lib/evolve/orchestrator.d.ts.map +1 -0
- package/dist/lib/evolve/orchestrator.js +851 -0
- package/dist/lib/evolve/orchestrator.js.map +1 -0
- package/dist/lib/evolve/scoring.d.ts +2 -0
- package/dist/lib/evolve/scoring.d.ts.map +1 -0
- package/dist/lib/evolve/scoring.js +118 -0
- package/dist/lib/evolve/scoring.js.map +1 -0
- package/dist/lib/evolve/state.d.ts +2 -0
- package/dist/lib/evolve/state.d.ts.map +1 -0
- package/dist/lib/evolve/state.js +264 -0
- package/dist/lib/evolve/state.js.map +1 -0
- package/dist/lib/evolve/types.d.ts +249 -0
- package/dist/lib/evolve/types.d.ts.map +1 -0
- package/dist/lib/evolve/types.js +3 -0
- package/dist/lib/evolve/types.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +2 -0
- package/dist/lib/frontmatter.d.ts.map +1 -0
- package/dist/lib/frontmatter.js +513 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/gates.d.ts +2 -0
- package/dist/lib/gates.d.ts.map +1 -0
- package/dist/lib/gates.js +578 -0
- package/dist/lib/gates.js.map +1 -0
- package/dist/lib/genome.d.ts +10 -0
- package/dist/lib/genome.d.ts.map +1 -0
- package/dist/lib/genome.js +368 -0
- package/dist/lib/genome.js.map +1 -0
- package/dist/lib/got.d.ts +2 -0
- package/dist/lib/got.d.ts.map +1 -0
- package/dist/lib/got.js +280 -0
- package/dist/lib/got.js.map +1 -0
- package/dist/lib/invariants.d.ts +2 -0
- package/dist/lib/invariants.d.ts.map +1 -0
- package/dist/lib/invariants.js +298 -0
- package/dist/lib/invariants.js.map +1 -0
- package/dist/lib/knowledge.d.ts +2 -0
- package/dist/lib/knowledge.d.ts.map +1 -0
- package/dist/lib/knowledge.js +658 -0
- package/dist/lib/knowledge.js.map +1 -0
- package/dist/lib/long-term-roadmap.d.ts +2 -0
- package/dist/lib/long-term-roadmap.d.ts.map +1 -0
- package/dist/lib/long-term-roadmap.js +602 -0
- package/dist/lib/long-term-roadmap.js.map +1 -0
- package/dist/lib/markdown-split.d.ts +2 -0
- package/dist/lib/markdown-split.d.ts.map +1 -0
- package/dist/lib/markdown-split.js +199 -0
- package/dist/lib/markdown-split.js.map +1 -0
- package/dist/lib/mcp-server.d.ts +2 -0
- package/dist/lib/mcp-server.d.ts.map +1 -0
- package/dist/lib/mcp-server.js +2424 -0
- package/dist/lib/mcp-server.js.map +1 -0
- package/dist/lib/metrics.d.ts +16 -0
- package/dist/lib/metrics.d.ts.map +1 -0
- package/dist/lib/metrics.js +48 -0
- package/dist/lib/metrics.js.map +1 -0
- package/dist/lib/overstory.d.ts +2 -0
- package/dist/lib/overstory.d.ts.map +1 -0
- package/dist/lib/overstory.js +211 -0
- package/dist/lib/overstory.js.map +1 -0
- package/dist/lib/parallel.d.ts +2 -0
- package/dist/lib/parallel.d.ts.map +1 -0
- package/dist/lib/parallel.js +349 -0
- package/dist/lib/parallel.js.map +1 -0
- package/dist/lib/paths.d.ts +2 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +254 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/phase-complete-llm.d.ts +22 -0
- package/dist/lib/phase-complete-llm.d.ts.map +1 -0
- package/dist/lib/phase-complete-llm.js +331 -0
- package/dist/lib/phase-complete-llm.js.map +1 -0
- package/dist/lib/phase-complete.d.ts +46 -0
- package/dist/lib/phase-complete.d.ts.map +1 -0
- package/dist/lib/phase-complete.js +278 -0
- package/dist/lib/phase-complete.js.map +1 -0
- package/dist/lib/phase-io.d.ts +2 -0
- package/dist/lib/phase-io.d.ts.map +1 -0
- package/dist/lib/phase-io.js +126 -0
- package/dist/lib/phase-io.js.map +1 -0
- package/dist/lib/phase.d.ts +2 -0
- package/dist/lib/phase.d.ts.map +1 -0
- package/dist/lib/phase.js +1344 -0
- package/dist/lib/phase.js.map +1 -0
- package/dist/lib/plan-tournament.d.ts +63 -0
- package/dist/lib/plan-tournament.d.ts.map +1 -0
- package/dist/lib/plan-tournament.js +353 -0
- package/dist/lib/plan-tournament.js.map +1 -0
- package/dist/lib/refinement.d.ts +74 -0
- package/dist/lib/refinement.d.ts.map +1 -0
- package/dist/lib/refinement.js +283 -0
- package/dist/lib/refinement.js.map +1 -0
- package/dist/lib/requirements.d.ts +2 -0
- package/dist/lib/requirements.d.ts.map +1 -0
- package/dist/lib/requirements.js +355 -0
- package/dist/lib/requirements.js.map +1 -0
- package/dist/lib/research-bundle.d.ts +2 -0
- package/dist/lib/research-bundle.d.ts.map +1 -0
- package/dist/lib/research-bundle.js +246 -0
- package/dist/lib/research-bundle.js.map +1 -0
- package/dist/lib/roadmap.d.ts +2 -0
- package/dist/lib/roadmap.d.ts.map +1 -0
- package/dist/lib/roadmap.js +541 -0
- package/dist/lib/roadmap.js.map +1 -0
- package/dist/lib/sample.d.ts +16 -0
- package/dist/lib/sample.d.ts.map +1 -0
- package/dist/lib/sample.js +20 -0
- package/dist/lib/sample.js.map +1 -0
- package/dist/lib/scaffold.d.ts +2 -0
- package/dist/lib/scaffold.d.ts.map +1 -0
- package/dist/lib/scaffold.js +355 -0
- package/dist/lib/scaffold.js.map +1 -0
- package/dist/lib/scan/_utils.d.ts +11 -0
- package/dist/lib/scan/_utils.d.ts.map +1 -0
- package/dist/lib/scan/_utils.js +36 -0
- package/dist/lib/scan/_utils.js.map +1 -0
- package/dist/lib/scan/base64.d.ts +15 -0
- package/dist/lib/scan/base64.d.ts.map +1 -0
- package/dist/lib/scan/base64.js +66 -0
- package/dist/lib/scan/base64.js.map +1 -0
- package/dist/lib/scan/ignorefile.d.ts +30 -0
- package/dist/lib/scan/ignorefile.d.ts.map +1 -0
- package/dist/lib/scan/ignorefile.js +101 -0
- package/dist/lib/scan/ignorefile.js.map +1 -0
- package/dist/lib/scan/injection.d.ts +14 -0
- package/dist/lib/scan/injection.d.ts.map +1 -0
- package/dist/lib/scan/injection.js +39 -0
- package/dist/lib/scan/injection.js.map +1 -0
- package/dist/lib/scan/patterns.d.ts +17 -0
- package/dist/lib/scan/patterns.d.ts.map +1 -0
- package/dist/lib/scan/patterns.js +123 -0
- package/dist/lib/scan/patterns.js.map +1 -0
- package/dist/lib/scan/strip-markdown.d.ts +7 -0
- package/dist/lib/scan/strip-markdown.d.ts.map +1 -0
- package/dist/lib/scan/strip-markdown.js +38 -0
- package/dist/lib/scan/strip-markdown.js.map +1 -0
- package/dist/lib/scan/types.d.ts +23 -0
- package/dist/lib/scan/types.d.ts.map +1 -0
- package/dist/lib/scan/types.js +3 -0
- package/dist/lib/scan/types.js.map +1 -0
- package/dist/lib/scheduler-wait.d.ts +2 -0
- package/dist/lib/scheduler-wait.d.ts.map +1 -0
- package/dist/lib/scheduler-wait.js +59 -0
- package/dist/lib/scheduler-wait.js.map +1 -0
- package/dist/lib/scheduler.d.ts +254 -0
- package/dist/lib/scheduler.d.ts.map +1 -0
- package/dist/lib/scheduler.js +1147 -0
- package/dist/lib/scheduler.js.map +1 -0
- package/dist/lib/state.d.ts +2 -0
- package/dist/lib/state.d.ts.map +1 -0
- package/dist/lib/state.js +744 -0
- package/dist/lib/state.js.map +1 -0
- package/dist/lib/think.d.ts +18 -0
- package/dist/lib/think.d.ts.map +1 -0
- package/dist/lib/think.js +317 -0
- package/dist/lib/think.js.map +1 -0
- package/dist/lib/tracker.d.ts +2 -0
- package/dist/lib/tracker.d.ts.map +1 -0
- package/dist/lib/tracker.js +1121 -0
- package/dist/lib/tracker.js.map +1 -0
- package/dist/lib/types.d.ts +1514 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +4 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +1363 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/verify.d.ts +2 -0
- package/dist/lib/verify.d.ts.map +1 -0
- package/dist/lib/verify.js +1153 -0
- package/dist/lib/verify.js.map +1 -0
- package/dist/lib/wireup/autofix.d.ts +2 -0
- package/dist/lib/wireup/autofix.d.ts.map +1 -0
- package/dist/lib/wireup/autofix.js +188 -0
- package/dist/lib/wireup/autofix.js.map +1 -0
- package/dist/lib/wireup/cli.d.ts +2 -0
- package/dist/lib/wireup/cli.d.ts.map +1 -0
- package/dist/lib/wireup/cli.js +194 -0
- package/dist/lib/wireup/cli.js.map +1 -0
- package/dist/lib/wireup/detection.d.ts +47 -0
- package/dist/lib/wireup/detection.d.ts.map +1 -0
- package/dist/lib/wireup/detection.js +410 -0
- package/dist/lib/wireup/detection.js.map +1 -0
- package/dist/lib/wireup/discovery.d.ts +2 -0
- package/dist/lib/wireup/discovery.d.ts.map +1 -0
- package/dist/lib/wireup/discovery.js +934 -0
- package/dist/lib/wireup/discovery.js.map +1 -0
- package/dist/lib/wireup/execution.d.ts +2 -0
- package/dist/lib/wireup/execution.d.ts.map +1 -0
- package/dist/lib/wireup/execution.js +573 -0
- package/dist/lib/wireup/execution.js.map +1 -0
- package/dist/lib/wireup/index.d.ts +2 -0
- package/dist/lib/wireup/index.d.ts.map +1 -0
- package/dist/lib/wireup/index.js +85 -0
- package/dist/lib/wireup/index.js.map +1 -0
- package/dist/lib/wireup/orchestrator.d.ts +2 -0
- package/dist/lib/wireup/orchestrator.d.ts.map +1 -0
- package/dist/lib/wireup/orchestrator.js +366 -0
- package/dist/lib/wireup/orchestrator.js.map +1 -0
- package/dist/lib/wireup/report.d.ts +47 -0
- package/dist/lib/wireup/report.d.ts.map +1 -0
- package/dist/lib/wireup/report.js +201 -0
- package/dist/lib/wireup/report.js.map +1 -0
- package/dist/lib/wireup/scenarios.d.ts +2 -0
- package/dist/lib/wireup/scenarios.d.ts.map +1 -0
- package/dist/lib/wireup/scenarios.js +516 -0
- package/dist/lib/wireup/scenarios.js.map +1 -0
- package/dist/lib/wireup/state.d.ts +2 -0
- package/dist/lib/wireup/state.d.ts.map +1 -0
- package/dist/lib/wireup/state.js +102 -0
- package/dist/lib/wireup/state.js.map +1 -0
- package/dist/lib/wireup/types.d.ts +376 -0
- package/dist/lib/wireup/types.d.ts.map +1 -0
- package/dist/lib/wireup/types.js +3 -0
- package/dist/lib/wireup/types.js.map +1 -0
- package/dist/lib/worktree.d.ts +2 -0
- package/dist/lib/worktree.d.ts.map +1 -0
- package/dist/lib/worktree.js +999 -0
- package/dist/lib/worktree.js.map +1 -0
- package/lib/autopilot-milestone.ts +136 -0
- package/lib/autopilot-pipeline.ts +1179 -0
- package/lib/autopilot-waves.ts +361 -0
- package/lib/autopilot.ts +1874 -0
- package/lib/autoplan.ts +280 -0
- package/lib/autoresearch.js +4 -0
- package/lib/autoresearch.ts +886 -0
- package/lib/backend.ts +1252 -0
- package/lib/benchmark.ts +341 -0
- package/lib/citations.ts +760 -0
- package/lib/cleanup.ts +1588 -0
- package/lib/cli/adapters.ts +41 -0
- package/lib/cli/agent.ts +83 -0
- package/lib/cli/index.ts +273 -0
- package/lib/cli/output.ts +33 -0
- package/lib/cli/scan-dispatch.ts +130 -0
- package/lib/cli/tools.ts +198 -0
- package/lib/commands/_dashboard-parsers.ts +275 -0
- package/lib/commands/analysis.ts +1851 -0
- package/lib/commands/assumptions.ts +232 -0
- package/lib/commands/blame.ts +174 -0
- package/lib/commands/budget.ts +148 -0
- package/lib/commands/check-plans.ts +233 -0
- package/lib/commands/config.ts +287 -0
- package/lib/commands/dashboard.ts +680 -0
- package/lib/commands/estimate.ts +204 -0
- package/lib/commands/eval-diff.ts +252 -0
- package/lib/commands/freshness.ts +213 -0
- package/lib/commands/health.ts +607 -0
- package/lib/commands/index.ts +266 -0
- package/lib/commands/install.ts +307 -0
- package/lib/commands/knowhow-aggregator.ts +345 -0
- package/lib/commands/knowledge-search.ts +153 -0
- package/lib/commands/long-term-roadmap.ts +390 -0
- package/lib/commands/patterns.ts +465 -0
- package/lib/commands/phase-info.ts +698 -0
- package/lib/commands/plan-lint.ts +546 -0
- package/lib/commands/plan-phase.ts +375 -0
- package/lib/commands/progress.ts +319 -0
- package/lib/commands/quality.ts +138 -0
- package/lib/commands/rollback.ts +195 -0
- package/lib/commands/scan.ts +72 -0
- package/lib/commands/search.ts +300 -0
- package/lib/commands/select-candidate.ts +687 -0
- package/lib/commands/singularity.ts +222 -0
- package/lib/commands/slug-timestamp.ts +74 -0
- package/lib/commands/tail.ts +129 -0
- package/lib/commands/todo.ts +273 -0
- package/lib/commands/watch.ts +80 -0
- package/lib/complexity.ts +117 -0
- package/lib/context/agents.ts +505 -0
- package/lib/context/base.ts +123 -0
- package/lib/context/execute.ts +977 -0
- package/lib/context/index.ts +110 -0
- package/lib/context/progress.ts +278 -0
- package/lib/context/project.ts +531 -0
- package/lib/context/research.ts +646 -0
- package/lib/dead-ends.ts +506 -0
- package/lib/deps.ts +773 -0
- package/lib/discussion.ts +1275 -0
- package/lib/drift.ts +519 -0
- package/lib/evolve/_dimensions-features.ts +525 -0
- package/lib/evolve/_dimensions.ts +511 -0
- package/lib/evolve/_product-ideation.ts +405 -0
- package/lib/evolve/_prompts.ts +178 -0
- package/lib/evolve/cli.ts +330 -0
- package/lib/evolve/discovery.ts +571 -0
- package/lib/evolve/index.ts +105 -0
- package/lib/evolve/orchestrator.ts +1139 -0
- package/lib/evolve/scoring.ts +167 -0
- package/lib/evolve/state.ts +330 -0
- package/lib/evolve/types.ts +290 -0
- package/lib/frontmatter.ts +615 -0
- package/lib/gates.ts +695 -0
- package/lib/genome.ts +402 -0
- package/lib/got.js +4 -0
- package/lib/got.ts +361 -0
- package/lib/invariants.ts +378 -0
- package/lib/knowledge.ts +768 -0
- package/lib/long-term-roadmap.ts +806 -0
- package/lib/markdown-split.ts +273 -0
- package/lib/mcp-server.ts +3292 -0
- package/lib/metrics.ts +49 -0
- package/lib/overstory.ts +270 -0
- package/lib/parallel.ts +570 -0
- package/lib/paths.ts +293 -0
- package/lib/phase-complete-llm.ts +376 -0
- package/lib/phase-complete.ts +366 -0
- package/lib/phase-io.ts +101 -0
- package/lib/phase.ts +1981 -0
- package/lib/plan-tournament.ts +426 -0
- package/lib/refinement.ts +349 -0
- package/lib/requirements.ts +469 -0
- package/lib/research-bundle.ts +300 -0
- package/lib/roadmap.ts +775 -0
- package/lib/scaffold.ts +480 -0
- package/lib/scan/_utils.ts +37 -0
- package/lib/scan/base64.ts +90 -0
- package/lib/scan/ignorefile.ts +109 -0
- package/lib/scan/injection.ts +67 -0
- package/lib/scan/patterns.ts +139 -0
- package/lib/scan/strip-markdown.ts +39 -0
- package/lib/scan/types.ts +28 -0
- package/lib/scheduler-wait.ts +58 -0
- package/lib/scheduler.ts +1370 -0
- package/lib/state.ts +1000 -0
- package/lib/think.ts +365 -0
- package/lib/tracker.ts +1591 -0
- package/lib/types.ts +1663 -0
- package/lib/utils.ts +1479 -0
- package/lib/verify.ts +1434 -0
- package/lib/wireup/autofix.ts +241 -0
- package/lib/wireup/cli.ts +278 -0
- package/lib/wireup/detection.ts +542 -0
- package/lib/wireup/discovery.ts +1063 -0
- package/lib/wireup/execution.ts +686 -0
- package/lib/wireup/index.ts +117 -0
- package/lib/wireup/orchestrator.ts +519 -0
- package/lib/wireup/report.ts +286 -0
- package/lib/wireup/scenarios.ts +616 -0
- package/lib/wireup/state.ts +139 -0
- package/lib/wireup/types.ts +436 -0
- package/lib/worktree.ts +1309 -0
- package/package.json +67 -0
|
@@ -0,0 +1,1017 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Execute all plans in a phase using wave-based parallel execution
|
|
3
|
+
argument-hint: <phase number>
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- Variable reference guide:
|
|
7
|
+
${CLAUDE_PLUGIN_ROOT} — Absolute path to the GRD plugin root. Used for:
|
|
8
|
+
- bin/grd-tools.js calls (grd-tools lives in bin/, not the skill directory)
|
|
9
|
+
- @references/*.md and @templates/*.md (cross-directory references)
|
|
10
|
+
- agents/*.md references from commands/ (cross-directory)
|
|
11
|
+
${CLAUDE_SKILL_DIR} — Resolves to the directory containing THIS skill file (commands/).
|
|
12
|
+
Available since Claude Code v2.1.69. Use for same-directory references
|
|
13
|
+
(e.g., referencing another command from a command file).
|
|
14
|
+
Currently unused because all GRD cross-references are cross-directory.
|
|
15
|
+
-->
|
|
16
|
+
|
|
17
|
+
<purpose>
|
|
18
|
+
Execute all plans in a phase using wave-based parallel execution. Orchestrator stays lean — delegates plan execution to subagents. After execution, auto-triggers eval report if EVAL.md exists and tracks experiment parameters in commit messages.
|
|
19
|
+
</purpose>
|
|
20
|
+
|
|
21
|
+
<core_principle>
|
|
22
|
+
Orchestrator coordinates, not executes. Each subagent loads the full execute-plan context. Orchestrator: discover plans -> analyze deps -> group waves -> spawn agents -> handle checkpoints -> collect results -> trigger eval.
|
|
23
|
+
</core_principle>
|
|
24
|
+
|
|
25
|
+
<required_reading>
|
|
26
|
+
Read STATE.md before any operation to load project context.
|
|
27
|
+
</required_reading>
|
|
28
|
+
|
|
29
|
+
<process>
|
|
30
|
+
|
|
31
|
+
<step name="initialize" priority="first">
|
|
32
|
+
Load all context in one call:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
INIT=$(node ${CLAUDE_PLUGIN_ROOT}/bin/grd-tools.js init execute-phase "${PHASE_ARG}" --include context)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Parse JSON for: `executor_model`, `verifier_model`, `reviewer_model`, `commit_docs`, `parallelization`, `branching_strategy`, `branch_name`, `base_branch`, `worktree_dir`, `branch_template`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `plans`, `incomplete_plans`, `plan_count`, `incomplete_count`, `state_exists`, `roadmap_exists`, `autonomous_mode`, `use_teams`, `code_review_enabled`, `code_review_timing`, `code_review_severity_gate`, `team_timeout_minutes`, `max_concurrent_teammates`, `phases_dir`, `research_dir`, `codebase_dir`, `webmcp_available`, `webmcp_skip_reason`, `isolation_mode`, `main_repo_path`, `native_worktree_available`, `context_content`.
|
|
39
|
+
|
|
40
|
+
**If `phase_found` is false:** Error — phase directory not found.
|
|
41
|
+
**If `plan_count` is 0:** Error — no plans found in phase.
|
|
42
|
+
**If `state_exists` is false but `.planning/` exists:** Offer reconstruct or continue.
|
|
43
|
+
|
|
44
|
+
When `parallelization` is false, plans within a wave execute sequentially.
|
|
45
|
+
</step>
|
|
46
|
+
|
|
47
|
+
<step name="setup_isolation" condition="branching_strategy != none">
|
|
48
|
+
Set up isolation for this phase execution based on `isolation_mode` from init JSON.
|
|
49
|
+
|
|
50
|
+
**Mode A: native (isolation_mode='native')**
|
|
51
|
+
|
|
52
|
+
Native worktree isolation is available (Claude Code manages worktrees automatically). Do NOT create a worktree manually.
|
|
53
|
+
|
|
54
|
+
- Record: `ISOLATION_MODE=native`
|
|
55
|
+
- Record: `MAIN_REPO_PATH` from init JSON (for STATE.md writes)
|
|
56
|
+
- Note: Each executor agent will be spawned with `isolation: "worktree"` parameter on the Task call
|
|
57
|
+
- The branch name will be captured from each executor's Task result
|
|
58
|
+
- No `WORKTREE_PATH` is pre-computed — Claude Code handles worktree creation transparently
|
|
59
|
+
|
|
60
|
+
**Mode B: manual (isolation_mode='manual')**
|
|
61
|
+
|
|
62
|
+
GRD manages the worktree explicitly (v0.2.5 behavior). Preserve existing worktree creation:
|
|
63
|
+
|
|
64
|
+
1. **Check for uncommitted changes on current branch:**
|
|
65
|
+
```bash
|
|
66
|
+
DIRTY=$(git status --porcelain)
|
|
67
|
+
```
|
|
68
|
+
If non-empty: warn "Uncommitted changes detected. Stash or commit before worktree creation." Stop.
|
|
69
|
+
|
|
70
|
+
2. **Create worktree:**
|
|
71
|
+
```bash
|
|
72
|
+
WT_RESULT=$(node ${CLAUDE_PLUGIN_ROOT}/bin/grd-tools.js worktree create --phase "${PHASE_NUMBER}" --slug "${PHASE_SLUG}")
|
|
73
|
+
```
|
|
74
|
+
Parse JSON result for `path` and `branch`. If `error` field present: report error and stop.
|
|
75
|
+
Store: `WORKTREE_PATH` = result.path, `WORKTREE_BRANCH` = result.branch
|
|
76
|
+
|
|
77
|
+
3. **Verify worktree is ready:**
|
|
78
|
+
```bash
|
|
79
|
+
ls "${WORKTREE_PATH}/.planning" && echo "Worktree ready"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
- Record: `ISOLATION_MODE=manual`, `WORKTREE_PATH`, `WORKTREE_BRANCH`
|
|
83
|
+
- Record: `MAIN_REPO_PATH` as the current working directory
|
|
84
|
+
- All executor agents will receive `WORKTREE_PATH` and operate within it.
|
|
85
|
+
- The main checkout remains clean on its original branch.
|
|
86
|
+
|
|
87
|
+
**Mode C: overstory (isolation_mode='overstory')**
|
|
88
|
+
|
|
89
|
+
Overstory manages agent lifecycle, worktrees, and merging. GRD dispatches plans via `ov sling`.
|
|
90
|
+
|
|
91
|
+
- Record: `ISOLATION_MODE=overstory`
|
|
92
|
+
- Record: `MAIN_REPO_PATH` from init JSON
|
|
93
|
+
- Load: `OVERSTORY_CONFIG` from init JSON `overstory_config`
|
|
94
|
+
- **Stale overlay cleanup:** Remove any leftover files matching `.planning/.tmp/overlay-*.md` from prior crashed runs
|
|
95
|
+
- Verify: `overstory_available` is true from init JSON. If false:
|
|
96
|
+
- Check if `OVERSTORY_CONFIG.install_prompt` is true
|
|
97
|
+
- If yes: prompt user "Overstory CLI not found. Install? (bun install -g overstory)"
|
|
98
|
+
- On confirm: run `node ${CLAUDE_PLUGIN_ROOT}/bin/grd-tools.js overstory install`, then re-detect
|
|
99
|
+
- On decline or if install_prompt is false: fall back to Mode A (native) or Mode B (manual) with warning
|
|
100
|
+
- No worktree pre-creation — Overstory handles this via `ov sling`
|
|
101
|
+
|
|
102
|
+
**When `branching_strategy` is `"none"`:** Skip this step entirely. Continue on the current directory with no worktree isolation (backwards compatible). No `ISOLATION_MODE` is set.
|
|
103
|
+
</step>
|
|
104
|
+
|
|
105
|
+
<step name="validate_phase">
|
|
106
|
+
From init JSON: `phase_dir`, `plan_count`, `incomplete_count`.
|
|
107
|
+
|
|
108
|
+
Report: "Found {plan_count} plans in {phase_dir} ({incomplete_count} incomplete)"
|
|
109
|
+
</step>
|
|
110
|
+
|
|
111
|
+
<step name="discover_and_group_plans">
|
|
112
|
+
Load plan inventory with wave grouping in one call:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
PLAN_INDEX=$(node ${CLAUDE_PLUGIN_ROOT}/bin/grd-tools.js phase-plan-index "${PHASE_NUMBER}")
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Parse JSON for: `phase`, `plans[]` (each with `id`, `wave`, `autonomous`, `objective`, `files_modified`, `task_count`, `has_summary`), `waves` (map of wave number -> plan IDs), `incomplete`, `has_checkpoints`.
|
|
119
|
+
|
|
120
|
+
**Filtering:** Skip plans where `has_summary: true`. If `--gaps-only`: also skip non-gap_closure plans. If all filtered: "No matching incomplete plans" -> exit.
|
|
121
|
+
|
|
122
|
+
Report:
|
|
123
|
+
```
|
|
124
|
+
## Execution Plan
|
|
125
|
+
|
|
126
|
+
**Phase {X}: {Name}** — {total_plans} plans across {wave_count} waves
|
|
127
|
+
|
|
128
|
+
| Wave | Plans | What it builds |
|
|
129
|
+
|------|-------|----------------|
|
|
130
|
+
| 1 | 01-01, 01-02 | {from plan objectives, 3-8 words} |
|
|
131
|
+
| 2 | 01-03 | ... |
|
|
132
|
+
```
|
|
133
|
+
</step>
|
|
134
|
+
|
|
135
|
+
<step name="create_phase_team" condition="use_teams=true">
|
|
136
|
+
**Only when `use_teams: true` from init.**
|
|
137
|
+
|
|
138
|
+
Create an Agent Team for this phase:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
TeamCreate(
|
|
142
|
+
team_name="grd-phase-${PHASE_NUMBER}-${PHASE_SLUG}",
|
|
143
|
+
description="Executing phase ${PHASE_NUMBER}: ${PHASE_NAME}"
|
|
144
|
+
)
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The team lead (this orchestrator) coordinates all executor teammates and handles checkpoint mediation.
|
|
148
|
+
</step>
|
|
149
|
+
|
|
150
|
+
<step name="execute_waves_teams" condition="use_teams=true">
|
|
151
|
+
**Alternative to `execute_waves` — only when `use_teams: true`.**
|
|
152
|
+
|
|
153
|
+
Execute each wave in sequence using Agent Teams coordination.
|
|
154
|
+
|
|
155
|
+
**For each wave:**
|
|
156
|
+
|
|
157
|
+
1. **Describe what's being built (same as standard flow).**
|
|
158
|
+
|
|
159
|
+
2. **Spawn executor teammates** (up to `max_concurrent_teammates`):
|
|
160
|
+
|
|
161
|
+
**When ISOLATION_MODE=native:** Add `isolation: "worktree"` parameter to the Task call. Use `<native_isolation>` block instead of `<worktree>`:
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
Task(
|
|
165
|
+
subagent_type="grd:grd-executor",
|
|
166
|
+
model="{executor_model}",
|
|
167
|
+
team_name="grd-phase-${PHASE_NUMBER}-${PHASE_SLUG}",
|
|
168
|
+
name="executor-${PLAN_ID}",
|
|
169
|
+
isolation: "worktree",
|
|
170
|
+
prompt="
|
|
171
|
+
<objective>
|
|
172
|
+
Execute plan ${plan_number} of phase ${phase_number}-${phase_name}.
|
|
173
|
+
Commit each task atomically. Create SUMMARY.md. Update STATE.md.
|
|
174
|
+
Track experiment parameters in commit messages where applicable.
|
|
175
|
+
</objective>
|
|
176
|
+
|
|
177
|
+
<team_coordination>
|
|
178
|
+
You are part of team: grd-phase-${PHASE_NUMBER}-${PHASE_SLUG}
|
|
179
|
+
Team lead: orchestrator
|
|
180
|
+
If you hit a checkpoint, use SendMessage to report to team lead.
|
|
181
|
+
Wait for team lead's response before continuing.
|
|
182
|
+
</team_coordination>
|
|
183
|
+
|
|
184
|
+
<native_isolation>
|
|
185
|
+
Isolation mode: native
|
|
186
|
+
You are running in a Claude Code-managed worktree. Your working directory
|
|
187
|
+
IS the worktree — operate naturally. No path prefixing needed.
|
|
188
|
+
Main repo path: ${MAIN_REPO_PATH}
|
|
189
|
+
STATE.md updates must use this main repo path (not your working directory).
|
|
190
|
+
</native_isolation>
|
|
191
|
+
|
|
192
|
+
<phase_context>
|
|
193
|
+
${context_content or "No CONTEXT.md found for this phase."}
|
|
194
|
+
</phase_context>
|
|
195
|
+
|
|
196
|
+
<execution_context>
|
|
197
|
+
@${CLAUDE_PLUGIN_ROOT}/references/execute-plan.md
|
|
198
|
+
@${CLAUDE_PLUGIN_ROOT}/templates/summary.md
|
|
199
|
+
@${CLAUDE_PLUGIN_ROOT}/references/checkpoints.md
|
|
200
|
+
@${CLAUDE_PLUGIN_ROOT}/references/tdd.md
|
|
201
|
+
</execution_context>
|
|
202
|
+
|
|
203
|
+
<paths>
|
|
204
|
+
research_dir: ${research_dir}
|
|
205
|
+
phases_dir: ${phases_dir}
|
|
206
|
+
phase_dir: ${phase_dir}
|
|
207
|
+
codebase_dir: ${codebase_dir}
|
|
208
|
+
</paths>
|
|
209
|
+
|
|
210
|
+
<files_to_read>
|
|
211
|
+
Read these files at execution start using the Read tool:
|
|
212
|
+
- Plan: ${phase_dir}/${plan_file}
|
|
213
|
+
- State: .planning/STATE.md
|
|
214
|
+
- Config: .planning/config.json (if exists)
|
|
215
|
+
</files_to_read>
|
|
216
|
+
|
|
217
|
+
<experiment_tracking>
|
|
218
|
+
When committing tasks that involve experiment parameters (hyperparameters, model configs, dataset splits, etc.):
|
|
219
|
+
- Include key parameters in commit message body
|
|
220
|
+
- Format: param: value on separate lines
|
|
221
|
+
</experiment_tracking>
|
|
222
|
+
|
|
223
|
+
<success_criteria>
|
|
224
|
+
- [ ] All tasks executed
|
|
225
|
+
- [ ] Each task committed individually
|
|
226
|
+
- [ ] Experiment parameters tracked in commits
|
|
227
|
+
- [ ] SUMMARY.md created in plan directory
|
|
228
|
+
- [ ] STATE.md updated with position and decisions
|
|
229
|
+
</success_criteria>
|
|
230
|
+
"
|
|
231
|
+
)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**When ISOLATION_MODE=manual:** Keep existing `<worktree>` block (v0.2.5 behavior):
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
Task(
|
|
238
|
+
subagent_type="grd:grd-executor",
|
|
239
|
+
model="{executor_model}",
|
|
240
|
+
team_name="grd-phase-${PHASE_NUMBER}-${PHASE_SLUG}",
|
|
241
|
+
name="executor-${PLAN_ID}",
|
|
242
|
+
prompt="
|
|
243
|
+
<objective>
|
|
244
|
+
Execute plan ${plan_number} of phase ${phase_number}-${phase_name}.
|
|
245
|
+
Commit each task atomically. Create SUMMARY.md. Update STATE.md.
|
|
246
|
+
Track experiment parameters in commit messages where applicable.
|
|
247
|
+
</objective>
|
|
248
|
+
|
|
249
|
+
<team_coordination>
|
|
250
|
+
You are part of team: grd-phase-${PHASE_NUMBER}-${PHASE_SLUG}
|
|
251
|
+
Team lead: orchestrator
|
|
252
|
+
If you hit a checkpoint, use SendMessage to report to team lead.
|
|
253
|
+
Wait for team lead's response before continuing.
|
|
254
|
+
</team_coordination>
|
|
255
|
+
|
|
256
|
+
<worktree>
|
|
257
|
+
Working directory: ${WORKTREE_PATH}
|
|
258
|
+
All file operations (Read, Write, Edit) and Bash commands MUST use this
|
|
259
|
+
directory as the working root. Use absolute paths prefixed with this directory
|
|
260
|
+
for all file operations. For Bash commands, use: cd "${WORKTREE_PATH}" && ...
|
|
261
|
+
</worktree>
|
|
262
|
+
|
|
263
|
+
<phase_context>
|
|
264
|
+
${context_content or "No CONTEXT.md found for this phase."}
|
|
265
|
+
</phase_context>
|
|
266
|
+
|
|
267
|
+
<execution_context>
|
|
268
|
+
@${CLAUDE_PLUGIN_ROOT}/references/execute-plan.md
|
|
269
|
+
@${CLAUDE_PLUGIN_ROOT}/templates/summary.md
|
|
270
|
+
@${CLAUDE_PLUGIN_ROOT}/references/checkpoints.md
|
|
271
|
+
@${CLAUDE_PLUGIN_ROOT}/references/tdd.md
|
|
272
|
+
</execution_context>
|
|
273
|
+
|
|
274
|
+
<paths>
|
|
275
|
+
research_dir: ${research_dir}
|
|
276
|
+
phases_dir: ${phases_dir}
|
|
277
|
+
phase_dir: ${phase_dir}
|
|
278
|
+
codebase_dir: ${codebase_dir}
|
|
279
|
+
</paths>
|
|
280
|
+
|
|
281
|
+
<files_to_read>
|
|
282
|
+
Read these files at execution start using the Read tool:
|
|
283
|
+
- Plan: ${phase_dir}/${plan_file}
|
|
284
|
+
- State: .planning/STATE.md
|
|
285
|
+
- Config: .planning/config.json (if exists)
|
|
286
|
+
</files_to_read>
|
|
287
|
+
|
|
288
|
+
<experiment_tracking>
|
|
289
|
+
When committing tasks that involve experiment parameters (hyperparameters, model configs, dataset splits, etc.):
|
|
290
|
+
- Include key parameters in commit message body
|
|
291
|
+
- Format: param: value on separate lines
|
|
292
|
+
</experiment_tracking>
|
|
293
|
+
|
|
294
|
+
<success_criteria>
|
|
295
|
+
- [ ] All tasks executed
|
|
296
|
+
- [ ] Each task committed individually
|
|
297
|
+
- [ ] Experiment parameters tracked in commits
|
|
298
|
+
- [ ] SUMMARY.md created in plan directory
|
|
299
|
+
- [ ] STATE.md updated with position and decisions
|
|
300
|
+
</success_criteria>
|
|
301
|
+
"
|
|
302
|
+
)
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
**When branching_strategy=none:** No isolation block at all in the prompt. Omit both `<worktree>` and `<native_isolation>` blocks, and do not set `isolation` parameter on the Task call. Include `<phase_context>` block in all modes.
|
|
306
|
+
|
|
307
|
+
3. **Create and assign tasks:**
|
|
308
|
+
|
|
309
|
+
For each plan in this wave:
|
|
310
|
+
```
|
|
311
|
+
TaskCreate(subject="Execute plan ${PLAN_ID}", description="...")
|
|
312
|
+
TaskUpdate(taskId=..., owner="executor-${PLAN_ID}")
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
4. **Monitor via TaskList** until all wave tasks show `completed`.
|
|
316
|
+
|
|
317
|
+
5. **Handle teammate messages:**
|
|
318
|
+
- **Checkpoint messages:** Present checkpoint to user, get response, SendMessage response back to teammate
|
|
319
|
+
- **Completion messages:** Verify via spot-checks (same as standard flow)
|
|
320
|
+
- **Failure messages:** Report to user, ask "Retry?" or "Continue?"
|
|
321
|
+
|
|
322
|
+
6. **Spot-check results** (same as standard `execute_waves` step 4).
|
|
323
|
+
|
|
324
|
+
6b. **WebMCP sanity checks (if `webmcp_available=true` from init):**
|
|
325
|
+
|
|
326
|
+
Apply the same WebMCP sanity check logic described in the standard `execute_waves` step 4b. Skip when `webmcp_available` is false (log: "WebMCP not available — skipping health checks (reason: {webmcp_skip_reason})"). When enabled, run three health checks (`hive_get_health_status`, `hive_check_console_errors`, `hive_get_page_info`) for each completed plan in this wave. Retry failed checks once; halt on second consecutive failure.
|
|
327
|
+
|
|
328
|
+
7. **Code review (if `code_review_timing="per_wave"` and `code_review_enabled=true`):**
|
|
329
|
+
|
|
330
|
+
```
|
|
331
|
+
Task(
|
|
332
|
+
subagent_type="grd:grd-code-reviewer",
|
|
333
|
+
model="{reviewer_model}",
|
|
334
|
+
team_name="grd-phase-${PHASE_NUMBER}-${PHASE_SLUG}",
|
|
335
|
+
name="reviewer-wave-${WAVE}",
|
|
336
|
+
prompt="
|
|
337
|
+
Review wave ${WAVE} of phase ${PHASE_NUMBER}.
|
|
338
|
+
Plans reviewed: ${PLAN_IDS_IN_WAVE}
|
|
339
|
+
Phase directory: ${PHASE_DIR}
|
|
340
|
+
|
|
341
|
+
PATHS:
|
|
342
|
+
research_dir: ${research_dir}
|
|
343
|
+
phases_dir: ${phases_dir}
|
|
344
|
+
phase_dir: ${phase_dir}
|
|
345
|
+
codebase_dir: ${codebase_dir}
|
|
346
|
+
|
|
347
|
+
<phase_context>
|
|
348
|
+
${context_content or "No CONTEXT.md found for this phase."}
|
|
349
|
+
</phase_context>
|
|
350
|
+
|
|
351
|
+
Read each plan's PLAN.md and SUMMARY.md.
|
|
352
|
+
Produce ${PHASE_NUMBER}-${WAVE}-REVIEW.md in ${PHASE_DIR}.
|
|
353
|
+
"
|
|
354
|
+
)
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
**Handle review verdict:**
|
|
358
|
+
- `pass`: Proceed to next wave
|
|
359
|
+
- `blocker_found` and `severity_gate="blocker"` or `severity_gate="warning"`:
|
|
360
|
+
Present blockers to user. Options: "Fix and re-run wave" / "Acknowledge and continue" / "Stop execution"
|
|
361
|
+
- `warnings_only` and `severity_gate="warning"`:
|
|
362
|
+
Present warnings to user. Same options.
|
|
363
|
+
- `severity_gate="none"`: Log review, always continue.
|
|
364
|
+
|
|
365
|
+
8. **Proceed to next wave.**
|
|
366
|
+
</step>
|
|
367
|
+
|
|
368
|
+
<step name="execute_waves" condition="use_teams=false">
|
|
369
|
+
**Standard execution — when `use_teams: false` (default).**
|
|
370
|
+
|
|
371
|
+
Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`, sequential if `false`.
|
|
372
|
+
|
|
373
|
+
**For each wave:**
|
|
374
|
+
|
|
375
|
+
1. **Describe what's being built (BEFORE spawning):**
|
|
376
|
+
|
|
377
|
+
Read each plan's `<objective>`. Extract what's being built and why.
|
|
378
|
+
|
|
379
|
+
```
|
|
380
|
+
---
|
|
381
|
+
## Wave {N}
|
|
382
|
+
|
|
383
|
+
**{Plan ID}: {Plan Name}**
|
|
384
|
+
{2-3 sentences: what this builds, technical approach, why it matters}
|
|
385
|
+
|
|
386
|
+
Spawning {count} agent(s)...
|
|
387
|
+
---
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
2. **Spawn executor agents:**
|
|
391
|
+
|
|
392
|
+
Pass paths only — executors read files themselves with their fresh 200k context.
|
|
393
|
+
This keeps orchestrator context lean (~10-15%).
|
|
394
|
+
|
|
395
|
+
**When ISOLATION_MODE=native:** Add `isolation: "worktree"` parameter to the Task call. Use the `<native_isolation>` block instead of `<worktree>`:
|
|
396
|
+
|
|
397
|
+
```
|
|
398
|
+
Task(
|
|
399
|
+
subagent_type="grd:grd-executor",
|
|
400
|
+
model="{executor_model}",
|
|
401
|
+
isolation: "worktree",
|
|
402
|
+
prompt="
|
|
403
|
+
<objective>
|
|
404
|
+
Execute plan {plan_number} of phase {phase_number}-{phase_name}.
|
|
405
|
+
Commit each task atomically. Create SUMMARY.md. Update STATE.md.
|
|
406
|
+
Track experiment parameters in commit messages where applicable.
|
|
407
|
+
</objective>
|
|
408
|
+
|
|
409
|
+
<native_isolation>
|
|
410
|
+
Isolation mode: native
|
|
411
|
+
You are running in a Claude Code-managed worktree. Your working directory
|
|
412
|
+
IS the worktree — operate naturally. No path prefixing needed.
|
|
413
|
+
Main repo path: ${MAIN_REPO_PATH}
|
|
414
|
+
STATE.md updates must use this main repo path (not your working directory).
|
|
415
|
+
</native_isolation>
|
|
416
|
+
|
|
417
|
+
<phase_context>
|
|
418
|
+
${context_content or "No CONTEXT.md found for this phase."}
|
|
419
|
+
</phase_context>
|
|
420
|
+
|
|
421
|
+
<execution_context>
|
|
422
|
+
@${CLAUDE_PLUGIN_ROOT}/references/execute-plan.md
|
|
423
|
+
@${CLAUDE_PLUGIN_ROOT}/templates/summary.md
|
|
424
|
+
@${CLAUDE_PLUGIN_ROOT}/references/checkpoints.md
|
|
425
|
+
@${CLAUDE_PLUGIN_ROOT}/references/tdd.md
|
|
426
|
+
</execution_context>
|
|
427
|
+
|
|
428
|
+
<paths>
|
|
429
|
+
research_dir: ${research_dir}
|
|
430
|
+
phases_dir: ${phases_dir}
|
|
431
|
+
phase_dir: ${phase_dir}
|
|
432
|
+
codebase_dir: ${codebase_dir}
|
|
433
|
+
</paths>
|
|
434
|
+
|
|
435
|
+
<files_to_read>
|
|
436
|
+
Read these files at execution start using the Read tool:
|
|
437
|
+
- Plan: {phase_dir}/{plan_file}
|
|
438
|
+
- State: .planning/STATE.md
|
|
439
|
+
- Config: .planning/config.json (if exists)
|
|
440
|
+
</files_to_read>
|
|
441
|
+
|
|
442
|
+
<experiment_tracking>
|
|
443
|
+
When committing tasks that involve experiment parameters (hyperparameters, model configs, dataset splits, etc.):
|
|
444
|
+
- Include key parameters in commit message body
|
|
445
|
+
- Format: `param: value` on separate lines
|
|
446
|
+
- Example: `feat(03-02): train baseline model\n\nlr: 0.001\nbatch_size: 32\nepochs: 50`
|
|
447
|
+
</experiment_tracking>
|
|
448
|
+
|
|
449
|
+
<success_criteria>
|
|
450
|
+
- [ ] All tasks executed
|
|
451
|
+
- [ ] Each task committed individually
|
|
452
|
+
- [ ] Experiment parameters tracked in commits
|
|
453
|
+
- [ ] SUMMARY.md created in plan directory
|
|
454
|
+
- [ ] STATE.md updated with position and decisions
|
|
455
|
+
</success_criteria>
|
|
456
|
+
"
|
|
457
|
+
)
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
**When ISOLATION_MODE=manual:** Keep existing `<worktree>` block (v0.2.5 behavior):
|
|
461
|
+
|
|
462
|
+
```
|
|
463
|
+
Task(
|
|
464
|
+
subagent_type="grd:grd-executor",
|
|
465
|
+
model="{executor_model}",
|
|
466
|
+
prompt="
|
|
467
|
+
<objective>
|
|
468
|
+
Execute plan {plan_number} of phase {phase_number}-{phase_name}.
|
|
469
|
+
Commit each task atomically. Create SUMMARY.md. Update STATE.md.
|
|
470
|
+
Track experiment parameters in commit messages where applicable.
|
|
471
|
+
</objective>
|
|
472
|
+
|
|
473
|
+
<worktree>
|
|
474
|
+
Working directory: ${WORKTREE_PATH}
|
|
475
|
+
All file operations (Read, Write, Edit) and Bash commands MUST use this
|
|
476
|
+
directory as the working root. Use absolute paths prefixed with this directory
|
|
477
|
+
for all file operations. For Bash commands, use: cd "${WORKTREE_PATH}" && ...
|
|
478
|
+
</worktree>
|
|
479
|
+
|
|
480
|
+
<phase_context>
|
|
481
|
+
${context_content or "No CONTEXT.md found for this phase."}
|
|
482
|
+
</phase_context>
|
|
483
|
+
|
|
484
|
+
<execution_context>
|
|
485
|
+
@${CLAUDE_PLUGIN_ROOT}/references/execute-plan.md
|
|
486
|
+
@${CLAUDE_PLUGIN_ROOT}/templates/summary.md
|
|
487
|
+
@${CLAUDE_PLUGIN_ROOT}/references/checkpoints.md
|
|
488
|
+
@${CLAUDE_PLUGIN_ROOT}/references/tdd.md
|
|
489
|
+
</execution_context>
|
|
490
|
+
|
|
491
|
+
<paths>
|
|
492
|
+
research_dir: ${research_dir}
|
|
493
|
+
phases_dir: ${phases_dir}
|
|
494
|
+
phase_dir: ${phase_dir}
|
|
495
|
+
codebase_dir: ${codebase_dir}
|
|
496
|
+
</paths>
|
|
497
|
+
|
|
498
|
+
<files_to_read>
|
|
499
|
+
Read these files at execution start using the Read tool:
|
|
500
|
+
- Plan: {phase_dir}/{plan_file}
|
|
501
|
+
- State: .planning/STATE.md
|
|
502
|
+
- Config: .planning/config.json (if exists)
|
|
503
|
+
</files_to_read>
|
|
504
|
+
|
|
505
|
+
<experiment_tracking>
|
|
506
|
+
When committing tasks that involve experiment parameters (hyperparameters, model configs, dataset splits, etc.):
|
|
507
|
+
- Include key parameters in commit message body
|
|
508
|
+
- Format: `param: value` on separate lines
|
|
509
|
+
- Example: `feat(03-02): train baseline model\n\nlr: 0.001\nbatch_size: 32\nepochs: 50`
|
|
510
|
+
</experiment_tracking>
|
|
511
|
+
|
|
512
|
+
<success_criteria>
|
|
513
|
+
- [ ] All tasks executed
|
|
514
|
+
- [ ] Each task committed individually
|
|
515
|
+
- [ ] Experiment parameters tracked in commits
|
|
516
|
+
- [ ] SUMMARY.md created in plan directory
|
|
517
|
+
- [ ] STATE.md updated with position and decisions
|
|
518
|
+
</success_criteria>
|
|
519
|
+
"
|
|
520
|
+
)
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
**When branching_strategy=none:** No isolation block at all in the prompt. Omit both `<worktree>` and `<native_isolation>` blocks, and do not set `isolation` parameter on the Task call. Include `<phase_context>` block in all modes. The executor operates in the normal working directory.
|
|
524
|
+
|
|
525
|
+
**If ISOLATION_MODE is 'overstory':**
|
|
526
|
+
|
|
527
|
+
For each wave:
|
|
528
|
+
|
|
529
|
+
1. **Generate overlays:**
|
|
530
|
+
For each plan in wave:
|
|
531
|
+
- Read PLAN.md content from phase directory
|
|
532
|
+
- Generate overlay via lib/overstory.ts `generateOverlay(planContent, context)`
|
|
533
|
+
- Write overlay to `.planning/.tmp/overlay-${PHASE_NUMBER}-${PLAN_ID}.md`
|
|
534
|
+
|
|
535
|
+
2. **Dispatch workers:**
|
|
536
|
+
For each plan in wave:
|
|
537
|
+
- Call `ov sling "GRD plan ${PLAN_ID}: execute plan" --runtime ${OVERSTORY_CONFIG.runtime} --model ${EXECUTOR_MODEL} --overlay <overlay_path>`
|
|
538
|
+
- Parse JSON result: record `agent_id`, `worktree_path`, `branch` per plan
|
|
539
|
+
|
|
540
|
+
3. **Poll for completion:**
|
|
541
|
+
Every `OVERSTORY_CONFIG.poll_interval_ms` (default 5000ms):
|
|
542
|
+
- Run `ov status --json`, filter to dispatched agent_ids
|
|
543
|
+
- For each agent with `state: 'running'`:
|
|
544
|
+
a. Check mail: `ov mail --agent ${agent_id} --json`
|
|
545
|
+
b. If checkpoint messages found (type='checkpoint'):
|
|
546
|
+
- Surface checkpoint body to user
|
|
547
|
+
- Get user response
|
|
548
|
+
- Send via `ov nudge ${agent_id} -- "${response}"`
|
|
549
|
+
- For each agent with `state: 'done'`:
|
|
550
|
+
a. **Copy SUMMARY.md from worktree BEFORE merge:**
|
|
551
|
+
`cp ${agent.worktree_path}/${PHASE_DIR}/${PLAN_ID}-SUMMARY.md ${MAIN_REPO_PATH}/${PHASE_DIR}/`
|
|
552
|
+
b. Run `ov merge ${agent_id} --json` — parse MergeResult
|
|
553
|
+
c. If `merged: false`: log conflict to SUMMARY.md, warn user
|
|
554
|
+
- For each agent with `state: 'failed'`:
|
|
555
|
+
a. Log failure, copy any partial SUMMARY.md
|
|
556
|
+
b. Mark plan as failed in status tracker
|
|
557
|
+
- Check timeout: if any agent exceeds `team_timeout_minutes`, run `ov stop ${agent_id}`
|
|
558
|
+
|
|
559
|
+
4. **Wave complete:**
|
|
560
|
+
- Clean up overlay files: remove `.planning/.tmp/overlay-${PHASE_NUMBER}-*.md`
|
|
561
|
+
- Code review (if timing=per_wave): run as normal
|
|
562
|
+
- Proceed to next wave
|
|
563
|
+
|
|
564
|
+
5. **Phase complete:**
|
|
565
|
+
- Clean up `.planning/.tmp/` if empty
|
|
566
|
+
- Record metrics via `state record-metric`
|
|
567
|
+
- Trigger eval report if EVAL.md exists
|
|
568
|
+
|
|
569
|
+
3. **Wait for all agents in wave to complete.**
|
|
570
|
+
|
|
571
|
+
4. **Report completion — spot-check claims first:**
|
|
572
|
+
|
|
573
|
+
For each SUMMARY.md:
|
|
574
|
+
- Verify first 2 files from `key-files.created` exist on disk
|
|
575
|
+
- Check `git log --oneline --all --grep="{phase}-{plan}"` returns >=1 commit
|
|
576
|
+
- Check for `## Self-Check: FAILED` marker
|
|
577
|
+
|
|
578
|
+
If ANY spot-check fails: report which plan failed, route to failure handler — ask "Retry plan?" or "Continue with remaining waves?"
|
|
579
|
+
|
|
580
|
+
If pass:
|
|
581
|
+
```
|
|
582
|
+
---
|
|
583
|
+
## Wave {N} Complete
|
|
584
|
+
|
|
585
|
+
**{Plan ID}: {Plan Name}**
|
|
586
|
+
{What was built — from SUMMARY.md}
|
|
587
|
+
{Notable deviations, if any}
|
|
588
|
+
|
|
589
|
+
{If more waves: what this enables for next wave}
|
|
590
|
+
---
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
4b. **WebMCP sanity checks (if `webmcp_available=true` from init):**
|
|
594
|
+
|
|
595
|
+
**Skip condition:** If `webmcp_available` is `false` in the INIT JSON, skip this step entirely. Log: "WebMCP not available — skipping health checks (reason: {webmcp_skip_reason})"
|
|
596
|
+
|
|
597
|
+
**When enabled, run three health checks for each completed plan in this wave:**
|
|
598
|
+
|
|
599
|
+
```
|
|
600
|
+
## WebMCP Health Check — Plan {PLAN_ID}
|
|
601
|
+
|
|
602
|
+
Check 1: hive_get_health_status
|
|
603
|
+
→ Verify backend is responding. Expected: status field indicates healthy.
|
|
604
|
+
|
|
605
|
+
Check 2: hive_check_console_errors
|
|
606
|
+
→ Verify no new JavaScript errors. Expected: no new errors since plan execution started.
|
|
607
|
+
|
|
608
|
+
Check 3: hive_get_page_info
|
|
609
|
+
→ Verify app is rendering. Expected: page has content and is interactive.
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
**Retry logic:**
|
|
613
|
+
- If ANY check fails, log which check failed and the error
|
|
614
|
+
- Retry the FAILED check(s) once (not all three — only the ones that failed)
|
|
615
|
+
- If the retry also fails, HALT execution with:
|
|
616
|
+
```
|
|
617
|
+
## WebMCP Health Check FAILED
|
|
618
|
+
|
|
619
|
+
**Plan:** {PLAN_ID}
|
|
620
|
+
**Failed check:** {check_name} (e.g., hive_check_console_errors)
|
|
621
|
+
**Error:** {error_details}
|
|
622
|
+
**Attempts:** 2/2
|
|
623
|
+
|
|
624
|
+
Execution halted. The web application is in an unhealthy state after plan {PLAN_ID}.
|
|
625
|
+
|
|
626
|
+
Options:
|
|
627
|
+
- Fix the issue and re-run: `/grd:execute-phase {PHASE}`
|
|
628
|
+
- Skip WebMCP checks: set `webmcp.enabled: false` in `.planning/config.json`
|
|
629
|
+
```
|
|
630
|
+
- If all checks pass (including any retried ones): continue to step 5
|
|
631
|
+
|
|
632
|
+
**Important:** These checks call Chrome DevTools MCP tools directly via the orchestrator's tool access (not via a subagent). The orchestrator already has access to MCP tools from its tool list.
|
|
633
|
+
|
|
634
|
+
5. **Handle failures:**
|
|
635
|
+
|
|
636
|
+
**Known Claude Code bug (classifyHandoffIfNeeded):** If an agent reports "failed" with error containing `classifyHandoffIfNeeded is not defined`, this is a Claude Code runtime bug — not a GRD or agent issue. The error fires in the completion handler AFTER all tool calls finish. In this case: run the same spot-checks as step 4 (SUMMARY.md exists, git commits present, no Self-Check: FAILED). If spot-checks PASS -> treat as **successful**. If spot-checks FAIL -> treat as real failure below.
|
|
637
|
+
|
|
638
|
+
For real failures: report which plan failed -> ask "Continue?" or "Stop?" -> if continue, dependent plans may also fail. If stop, partial completion report.
|
|
639
|
+
|
|
640
|
+
6. **Execute checkpoint plans between waves** — see `<checkpoint_handling>`.
|
|
641
|
+
|
|
642
|
+
7. **Proceed to next wave.**
|
|
643
|
+
</step>
|
|
644
|
+
|
|
645
|
+
<step name="checkpoint_handling">
|
|
646
|
+
Plans with `autonomous: false` require user interaction.
|
|
647
|
+
|
|
648
|
+
**Flow:**
|
|
649
|
+
|
|
650
|
+
1. Spawn agent for checkpoint plan
|
|
651
|
+
2. Agent runs until checkpoint task or auth gate -> returns structured state
|
|
652
|
+
3. Agent return includes: completed tasks table, current task + blocker, checkpoint type/details, what's awaited
|
|
653
|
+
4. **Present to user:**
|
|
654
|
+
```
|
|
655
|
+
## Checkpoint: [Type]
|
|
656
|
+
|
|
657
|
+
**Plan:** 03-03 Dashboard Layout
|
|
658
|
+
**Progress:** 2/3 tasks complete
|
|
659
|
+
|
|
660
|
+
[Checkpoint Details from agent return]
|
|
661
|
+
[Awaiting section from agent return]
|
|
662
|
+
```
|
|
663
|
+
5. User responds: "approved"/"done" | issue description | decision selection
|
|
664
|
+
6. **Spawn continuation agent (NOT resume)** using continuation-prompt.md template
|
|
665
|
+
7. Continuation agent verifies previous commits, continues from resume point
|
|
666
|
+
8. Repeat until plan completes or user stops
|
|
667
|
+
</step>
|
|
668
|
+
|
|
669
|
+
<step name="aggregate_results">
|
|
670
|
+
After all waves:
|
|
671
|
+
|
|
672
|
+
```markdown
|
|
673
|
+
## Phase {X}: {Name} Execution Complete
|
|
674
|
+
|
|
675
|
+
**Waves:** {N} | **Plans:** {M}/{total} complete
|
|
676
|
+
|
|
677
|
+
| Wave | Plans | Status |
|
|
678
|
+
|------|-------|--------|
|
|
679
|
+
| 1 | plan-01, plan-02 | Complete |
|
|
680
|
+
| CP | plan-03 | Verified |
|
|
681
|
+
| 2 | plan-04 | Complete |
|
|
682
|
+
|
|
683
|
+
### Plan Details
|
|
684
|
+
1. **03-01**: [one-liner from SUMMARY.md]
|
|
685
|
+
2. **03-02**: [one-liner from SUMMARY.md]
|
|
686
|
+
|
|
687
|
+
### Issues Encountered
|
|
688
|
+
[Aggregate from SUMMARYs, or "None"]
|
|
689
|
+
```
|
|
690
|
+
</step>
|
|
691
|
+
|
|
692
|
+
<step name="completion_flow" condition="branching_strategy != none">
|
|
693
|
+
Present the user with 4 completion options for the worktree.
|
|
694
|
+
|
|
695
|
+
**ExitWorktree (native isolation only):**
|
|
696
|
+
|
|
697
|
+
Before presenting completion options, exit the worktree to return to the main repository context. This ensures all subsequent git operations (merge, PR, discard) run from the correct directory.
|
|
698
|
+
|
|
699
|
+
When ISOLATION_MODE=native, call the ExitWorktree tool:
|
|
700
|
+
|
|
701
|
+
```
|
|
702
|
+
Use the ExitWorktree tool to leave the current worktree and return to the main repository.
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
This step is skipped when ISOLATION_MODE=manual (GRD manages worktree switching itself) or when branching_strategy=none.
|
|
706
|
+
|
|
707
|
+
**When ISOLATION_MODE=native:**
|
|
708
|
+
|
|
709
|
+
After all executor agents complete, determine the worktree branch name and path:
|
|
710
|
+
|
|
711
|
+
1. **Find the worktree:** Run `git worktree list` in the main repo (`${MAIN_REPO_PATH}`) and look for the phase branch. The branch may follow Claude Code's naming convention rather than GRD's template.
|
|
712
|
+
2. **Capture branch name:** Parse the branch from `git worktree list` output, or run `git rev-parse --abbrev-ref HEAD` within the worktree directory.
|
|
713
|
+
3. **Capture worktree path:** Parse from `git worktree list` output. Store as `WORKTREE_PATH` for use in completion commands.
|
|
714
|
+
|
|
715
|
+
Present the 4 completion options:
|
|
716
|
+
|
|
717
|
+
```
|
|
718
|
+
## Phase Complete -- Choose Completion Action
|
|
719
|
+
|
|
720
|
+
All plans executed in worktree. Choose how to finish:
|
|
721
|
+
|
|
722
|
+
1. **Merge locally** -- Run tests, merge branch into base, delete worktree
|
|
723
|
+
2. **Push and create PR** -- Run tests, push branch, create PR, delete worktree
|
|
724
|
+
3. **Keep branch** -- Leave worktree and branch intact for later
|
|
725
|
+
4. **Discard work** -- Delete worktree and branch (destructive!)
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
For each completion option, use the worktree commands with explicit branch name:
|
|
729
|
+
- **Merge:** `node ${CLAUDE_PLUGIN_ROOT}/bin/grd-tools.js worktree merge --phase "${PHASE_NUMBER}" --branch "${BRANCH_NAME}"` (uses the explicit branch parameter from Plan 02 to handle non-GRD branch names)
|
|
730
|
+
- **PR:** `node ${CLAUDE_PLUGIN_ROOT}/bin/grd-tools.js worktree push-pr --phase "${PHASE_NUMBER}"` (reads branch from worktree HEAD automatically)
|
|
731
|
+
- **Keep:** Note the branch name and worktree path for the user
|
|
732
|
+
- **Discard:** `node ${CLAUDE_PLUGIN_ROOT}/bin/grd-tools.js worktree remove --phase "${PHASE_NUMBER}"`
|
|
733
|
+
|
|
734
|
+
The test gate should run in the worktree directory. Use the worktree path obtained from step 1.
|
|
735
|
+
|
|
736
|
+
**When ISOLATION_MODE=manual:**
|
|
737
|
+
|
|
738
|
+
Preserve existing v0.2.5 completion flow exactly:
|
|
739
|
+
|
|
740
|
+
```
|
|
741
|
+
## Phase Complete -- Choose Completion Action
|
|
742
|
+
|
|
743
|
+
All plans executed in worktree. Choose how to finish:
|
|
744
|
+
|
|
745
|
+
1. **Merge locally** -- Run tests, merge branch into base, delete worktree
|
|
746
|
+
2. **Push and create PR** -- Run tests, push branch, create PR, delete worktree
|
|
747
|
+
3. **Keep branch** -- Leave worktree and branch intact for later
|
|
748
|
+
4. **Discard work** -- Delete worktree and branch (destructive!)
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
Based on user's choice, call the worktree complete command:
|
|
752
|
+
|
|
753
|
+
```bash
|
|
754
|
+
COMPLETE_RESULT=$(node ${CLAUDE_PLUGIN_ROOT}/bin/grd-tools.js worktree complete \
|
|
755
|
+
--action "${ACTION}" \
|
|
756
|
+
--phase "${PHASE_NUMBER}" \
|
|
757
|
+
[--test-cmd "${TEST_CMD}"] \
|
|
758
|
+
[--base "${BASE_BRANCH}"] \
|
|
759
|
+
[--title "Phase ${PHASE_NUMBER}: ${PHASE_NAME} (${MILESTONE_VERSION})"] \
|
|
760
|
+
[--body "${PR_BODY}"])
|
|
761
|
+
```
|
|
762
|
+
|
|
763
|
+
**For both modes, parse JSON result:**
|
|
764
|
+
|
|
765
|
+
**If `blocked: true`** (test gate failed on merge/pr):
|
|
766
|
+
```
|
|
767
|
+
## Test Gate Failed
|
|
768
|
+
|
|
769
|
+
Tests must pass before merge/PR. Fix failures and retry.
|
|
770
|
+
|
|
771
|
+
Exit code: ${test_exit_code}
|
|
772
|
+
${test_stdout}
|
|
773
|
+
${test_stderr}
|
|
774
|
+
|
|
775
|
+
Options:
|
|
776
|
+
- Fix tests in the worktree and retry completion
|
|
777
|
+
- Choose "keep" to preserve the branch for manual fixing
|
|
778
|
+
- Choose "discard" to abandon this work
|
|
779
|
+
```
|
|
780
|
+
|
|
781
|
+
**If `error`** (merge conflict, push failure, etc.):
|
|
782
|
+
Report the error with actionable guidance.
|
|
783
|
+
|
|
784
|
+
**If success** (action-specific):
|
|
785
|
+
- `merge`: "Phase ${PHASE_NUMBER} merged into ${BASE_BRANCH}. Branch deleted."
|
|
786
|
+
- `pr`: "PR created: ${pr_url}. Branch: ${branch} -> ${base}."
|
|
787
|
+
- `keep`: "Worktree and branch preserved at ${path}."
|
|
788
|
+
- `discard`: "Worktree and branch deleted."
|
|
789
|
+
</step>
|
|
790
|
+
|
|
791
|
+
<step name="tracker_sync">
|
|
792
|
+
**Sync phase status to issue tracker (non-blocking):**
|
|
793
|
+
|
|
794
|
+
Check tracker config provider first. **For GitHub:**
|
|
795
|
+
```bash
|
|
796
|
+
node ${CLAUDE_PLUGIN_ROOT}/bin/grd-tools.js tracker sync-phase "${PHASE_NUMBER}" --raw 2>/dev/null || true
|
|
797
|
+
```
|
|
798
|
+
|
|
799
|
+
**For mcp-atlassian** (see @${CLAUDE_PLUGIN_ROOT}/references/mcp-tracker-protocol.md):
|
|
800
|
+
```bash
|
|
801
|
+
OPS=$(node ${CLAUDE_PLUGIN_ROOT}/bin/grd-tools.js tracker prepare-phase-sync "${PHASE_NUMBER}" --raw)
|
|
802
|
+
```
|
|
803
|
+
For each `"create"` operation, call MCP `create_issue`, then `record-mapping`.
|
|
804
|
+
|
|
805
|
+
This updates the tracker with any new plans created during execution. If no tracker is configured, this is a no-op.
|
|
806
|
+
</step>
|
|
807
|
+
|
|
808
|
+
<step name="code_review_per_phase" condition="code_review_timing=per_phase AND code_review_enabled=true">
|
|
809
|
+
**Run code review across all plans in the phase.**
|
|
810
|
+
|
|
811
|
+
Only when `code_review_timing: "per_phase"` and `code_review_enabled: true`. Skipped if `timing: "per_wave"` (already reviewed per wave) or `timing: "disabled"`.
|
|
812
|
+
|
|
813
|
+
```
|
|
814
|
+
Task(
|
|
815
|
+
subagent_type="grd:grd-code-reviewer",
|
|
816
|
+
model="{reviewer_model}",
|
|
817
|
+
prompt="
|
|
818
|
+
Review all plans in phase ${PHASE_NUMBER}.
|
|
819
|
+
Plans: ${ALL_PLAN_IDS}
|
|
820
|
+
Phase directory: ${PHASE_DIR}
|
|
821
|
+
|
|
822
|
+
PATHS:
|
|
823
|
+
research_dir: ${research_dir}
|
|
824
|
+
phases_dir: ${phases_dir}
|
|
825
|
+
phase_dir: ${phase_dir}
|
|
826
|
+
codebase_dir: ${codebase_dir}
|
|
827
|
+
|
|
828
|
+
<phase_context>
|
|
829
|
+
${context_content or "No CONTEXT.md found for this phase."}
|
|
830
|
+
</phase_context>
|
|
831
|
+
|
|
832
|
+
Read each plan's PLAN.md and SUMMARY.md.
|
|
833
|
+
Produce ${PHASE_NUMBER}-REVIEW.md in ${PHASE_DIR}.
|
|
834
|
+
"
|
|
835
|
+
)
|
|
836
|
+
```
|
|
837
|
+
|
|
838
|
+
**Handle review verdict** (same as per-wave handling):
|
|
839
|
+
- `pass`: Continue to eval
|
|
840
|
+
- `blocker_found`: Present to user, get acknowledgement before proceeding
|
|
841
|
+
- `warnings_only`: Present if `severity_gate="warning"`, else continue
|
|
842
|
+
</step>
|
|
843
|
+
|
|
844
|
+
<step name="teardown_phase_team" condition="use_teams=true">
|
|
845
|
+
**Only when `use_teams: true`.**
|
|
846
|
+
|
|
847
|
+
After all execution and review complete, shut down the team:
|
|
848
|
+
|
|
849
|
+
1. Send shutdown requests to all remaining teammates:
|
|
850
|
+
```
|
|
851
|
+
SendMessage(type="shutdown_request", recipient="executor-{plan_id}", content="Phase execution complete")
|
|
852
|
+
```
|
|
853
|
+
For each teammate still active.
|
|
854
|
+
|
|
855
|
+
2. Wait for shutdown confirmations.
|
|
856
|
+
|
|
857
|
+
3. Delete the team:
|
|
858
|
+
```
|
|
859
|
+
TeamDelete()
|
|
860
|
+
```
|
|
861
|
+
</step>
|
|
862
|
+
|
|
863
|
+
<step name="auto_trigger_eval">
|
|
864
|
+
**After execution completes, check for EVAL.md:**
|
|
865
|
+
|
|
866
|
+
```bash
|
|
867
|
+
ls "${PHASE_DIR}"/*-EVAL.md 2>/dev/null
|
|
868
|
+
```
|
|
869
|
+
|
|
870
|
+
**If EVAL.md exists:**
|
|
871
|
+
|
|
872
|
+
Display:
|
|
873
|
+
```
|
|
874
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
875
|
+
GRD ► RUNNING EVALUATION
|
|
876
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
877
|
+
```
|
|
878
|
+
|
|
879
|
+
Read EVAL.md and run Tier 1 (sanity) and Tier 2 (proxy) checks automatically.
|
|
880
|
+
Record results in `{phase}-EVAL-RESULTS.md`.
|
|
881
|
+
|
|
882
|
+
**If eval results < targets:**
|
|
883
|
+
|
|
884
|
+
```
|
|
885
|
+
## Eval Results Below Targets
|
|
886
|
+
|
|
887
|
+
| Metric | Target | Actual | Status |
|
|
888
|
+
|--------|--------|--------|--------|
|
|
889
|
+
| [metric] | [target] | [actual] | BELOW |
|
|
890
|
+
|
|
891
|
+
---
|
|
892
|
+
|
|
893
|
+
**Options:**
|
|
894
|
+
- /grd:iterate — re-evaluate approach and iterate
|
|
895
|
+
- /grd:plan-phase {X} --gaps — plan targeted fixes
|
|
896
|
+
- Continue to verification anyway
|
|
897
|
+
```
|
|
898
|
+
|
|
899
|
+
**If eval results >= targets:** Report success, continue to verification.
|
|
900
|
+
|
|
901
|
+
**If no EVAL.md:** Skip eval, proceed to verification.
|
|
902
|
+
</step>
|
|
903
|
+
|
|
904
|
+
<step name="verify_phase_goal">
|
|
905
|
+
Verify phase achieved its GOAL, not just completed tasks.
|
|
906
|
+
|
|
907
|
+
```
|
|
908
|
+
Task(
|
|
909
|
+
prompt="Verify phase {phase_number} goal achievement.
|
|
910
|
+
Phase directory: {phase_dir}
|
|
911
|
+
Phase goal: {goal from ROADMAP.md}
|
|
912
|
+
Check must_haves against actual codebase. Create VERIFICATION.md.
|
|
913
|
+
|
|
914
|
+
PATHS:
|
|
915
|
+
research_dir: ${research_dir}
|
|
916
|
+
phases_dir: ${phases_dir}
|
|
917
|
+
phase_dir: ${phase_dir}
|
|
918
|
+
codebase_dir: ${codebase_dir}
|
|
919
|
+
|
|
920
|
+
<phase_context>
|
|
921
|
+
${context_content or 'No CONTEXT.md found for this phase.'}
|
|
922
|
+
</phase_context>",
|
|
923
|
+
subagent_type="grd:grd-verifier",
|
|
924
|
+
model="{verifier_model}"
|
|
925
|
+
)
|
|
926
|
+
```
|
|
927
|
+
|
|
928
|
+
Read status:
|
|
929
|
+
```bash
|
|
930
|
+
grep "^status:" "$PHASE_DIR"/*-VERIFICATION.md | cut -d: -f2 | tr -d ' '
|
|
931
|
+
```
|
|
932
|
+
|
|
933
|
+
| Status | Action |
|
|
934
|
+
|--------|--------|
|
|
935
|
+
| `passed` | -> update_roadmap |
|
|
936
|
+
| `human_needed` | Present items for human testing, get approval or feedback |
|
|
937
|
+
| `gaps_found` | Present gap summary, offer `/grd:plan-phase {phase} --gaps` |
|
|
938
|
+
|
|
939
|
+
**If gaps_found:**
|
|
940
|
+
```
|
|
941
|
+
## Phase {X}: {Name} — Gaps Found
|
|
942
|
+
|
|
943
|
+
**Score:** {N}/{M} must-haves verified
|
|
944
|
+
**Report:** {phase_dir}/{phase}-VERIFICATION.md
|
|
945
|
+
|
|
946
|
+
### What's Missing
|
|
947
|
+
{Gap summaries from VERIFICATION.md}
|
|
948
|
+
|
|
949
|
+
---
|
|
950
|
+
## Next Up
|
|
951
|
+
|
|
952
|
+
`/grd:plan-phase {X} --gaps`
|
|
953
|
+
`/grd:iterate` — if eval results also below target
|
|
954
|
+
|
|
955
|
+
<sub>`/clear` first -> fresh context window</sub>
|
|
956
|
+
|
|
957
|
+
Also: `cat {phase_dir}/{phase}-VERIFICATION.md` — full report
|
|
958
|
+
Also: `/grd:verify-work {X}` — manual testing first
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
Gap closure cycle: `/grd:plan-phase {X} --gaps` reads VERIFICATION.md -> creates gap plans with `gap_closure: true` -> user runs `/grd:execute-phase {X} --gaps-only` -> verifier re-runs.
|
|
962
|
+
</step>
|
|
963
|
+
|
|
964
|
+
<step name="update_roadmap">
|
|
965
|
+
Mark phase complete in ROADMAP.md (date, status).
|
|
966
|
+
|
|
967
|
+
```bash
|
|
968
|
+
node ${CLAUDE_PLUGIN_ROOT}/bin/grd-tools.js commit "docs(phase-{X}): complete phase execution" --files .planning/ROADMAP.md .planning/STATE.md ${phase_dir}/*-VERIFICATION.md .planning/REQUIREMENTS.md
|
|
969
|
+
```
|
|
970
|
+
</step>
|
|
971
|
+
|
|
972
|
+
<step name="offer_next">
|
|
973
|
+
|
|
974
|
+
**If more phases:**
|
|
975
|
+
```
|
|
976
|
+
## Next Up
|
|
977
|
+
|
|
978
|
+
**Phase {X+1}: {Name}** — {Goal}
|
|
979
|
+
|
|
980
|
+
`/grd:plan-phase {X+1}`
|
|
981
|
+
|
|
982
|
+
<sub>`/clear` first for fresh context</sub>
|
|
983
|
+
```
|
|
984
|
+
|
|
985
|
+
**If milestone complete:**
|
|
986
|
+
```
|
|
987
|
+
MILESTONE COMPLETE!
|
|
988
|
+
|
|
989
|
+
All {N} phases executed.
|
|
990
|
+
|
|
991
|
+
`/grd:complete-milestone`
|
|
992
|
+
```
|
|
993
|
+
</step>
|
|
994
|
+
|
|
995
|
+
</process>
|
|
996
|
+
|
|
997
|
+
<context_efficiency>
|
|
998
|
+
Orchestrator: ~10-15% context. Subagents: fresh 200k each. No polling (Task blocks). No context bleed.
|
|
999
|
+
</context_efficiency>
|
|
1000
|
+
|
|
1001
|
+
<failure_handling>
|
|
1002
|
+
- **classifyHandoffIfNeeded false failure:** Agent reports "failed" but error is `classifyHandoffIfNeeded is not defined` -> Claude Code bug, not GRD. Spot-check (SUMMARY exists, commits present) -> if pass, treat as success
|
|
1003
|
+
- **Agent fails mid-plan:** Missing SUMMARY.md -> report, ask user how to proceed
|
|
1004
|
+
- **Dependency chain breaks:** Wave 1 fails -> Wave 2 dependents likely fail -> user chooses attempt or skip
|
|
1005
|
+
- **All agents in wave fail:** Systemic issue -> stop, report for investigation
|
|
1006
|
+
- **Checkpoint unresolvable:** "Skip this plan?" or "Abort phase execution?" -> record partial progress in STATE.md
|
|
1007
|
+
</failure_handling>
|
|
1008
|
+
|
|
1009
|
+
<resumption>
|
|
1010
|
+
Re-run `/grd:execute-phase {phase}` -> discover_plans finds completed SUMMARYs -> skips them -> resumes from first incomplete plan -> continues wave execution.
|
|
1011
|
+
|
|
1012
|
+
STATE.md tracks: last completed plan, current wave, pending checkpoints.
|
|
1013
|
+
|
|
1014
|
+
**When resuming with manual isolation:** Check if a worktree already exists for this phase (via `worktree list`). If it does, reuse it instead of creating a new one. If it doesn't, create a fresh one. The `setup_isolation` step handles this: if `worktree create` returns an `error` with "already exists", parse the existing worktree path from the error response and reuse it.
|
|
1015
|
+
|
|
1016
|
+
**When resuming with native isolation:** Check `git worktree list` in the main repo for an existing worktree on the phase branch. If found, reuse it — Claude Code will recognize the existing worktree when spawning executor agents with `isolation: "worktree"`. If not found, native isolation will create a new one automatically on the next executor spawn.
|
|
1017
|
+
</resumption>
|