claude-code-pilot 2.0.0 → 3.1.0
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/README.md +76 -97
- package/bin/install.js +267 -250
- package/manifest.json +5 -18
- package/package.json +5 -7
- package/src/agents/build-error-resolver.md +114 -0
- package/src/agents/ccp-advisor-researcher.md +104 -0
- package/src/agents/ccp-assumptions-analyzer.md +105 -0
- package/{gsd/agents/gsd-codebase-mapper.md → src/agents/ccp-codebase-mapper.md} +7 -7
- package/{gsd/agents/gsd-debugger.md → src/agents/ccp-debugger.md} +125 -8
- package/{gsd/agents/gsd-executor.md → src/agents/ccp-executor.md} +31 -20
- package/{gsd/agents/gsd-integration-checker.md → src/agents/ccp-integration-checker.md} +2 -2
- package/{gsd/agents/gsd-nyquist-auditor.md → src/agents/ccp-nyquist-auditor.md} +3 -3
- package/{gsd/agents/gsd-phase-researcher.md → src/agents/ccp-phase-researcher.md} +127 -13
- package/{gsd/agents/gsd-plan-checker.md → src/agents/ccp-plan-checker.md} +57 -21
- package/{gsd/agents/gsd-planner.md → src/agents/ccp-planner.md} +61 -23
- package/{gsd/agents/gsd-project-researcher.md → src/agents/ccp-project-researcher.md} +33 -6
- package/{gsd/agents/gsd-research-synthesizer.md → src/agents/ccp-research-synthesizer.md} +11 -11
- package/{gsd/agents/gsd-roadmapper.md → src/agents/ccp-roadmapper.md} +39 -10
- package/src/agents/ccp-ui-auditor.md +439 -0
- package/src/agents/ccp-ui-checker.md +300 -0
- package/src/agents/ccp-ui-researcher.md +357 -0
- package/{gsd/agents/gsd-verifier.md → src/agents/ccp-verifier.md} +81 -15
- package/src/agents/cpp-build-resolver.md +90 -0
- package/src/agents/cpp-reviewer.md +72 -0
- package/src/agents/database-reviewer.md +91 -0
- package/{ecc → src}/agents/doc-updater.md +1 -1
- package/src/agents/docs-lookup.md +68 -0
- package/src/agents/flutter-reviewer.md +243 -0
- package/src/agents/gan-evaluator.md +209 -0
- package/src/agents/gan-generator.md +131 -0
- package/src/agents/gan-planner.md +99 -0
- package/src/agents/go-build-resolver.md +94 -0
- package/src/agents/go-reviewer.md +76 -0
- package/src/agents/harness-optimizer.md +35 -0
- package/src/agents/java-build-resolver.md +153 -0
- package/src/agents/java-reviewer.md +92 -0
- package/src/agents/kotlin-build-resolver.md +118 -0
- package/src/agents/kotlin-reviewer.md +159 -0
- package/src/agents/loop-operator.md +36 -0
- package/src/agents/opensource-forker.md +198 -0
- package/src/agents/opensource-packager.md +249 -0
- package/src/agents/opensource-sanitizer.md +188 -0
- package/src/agents/performance-optimizer.md +446 -0
- package/src/agents/planner.md +212 -0
- package/src/agents/python-reviewer.md +98 -0
- package/src/agents/pytorch-build-resolver.md +120 -0
- package/src/agents/refactor-cleaner.md +85 -0
- package/src/agents/rust-build-resolver.md +148 -0
- package/src/agents/rust-reviewer.md +94 -0
- package/src/agents/typescript-reviewer.md +112 -0
- package/src/available-rules/README.md +80 -0
- package/src/available-rules/cpp/coding-style.md +44 -0
- package/src/available-rules/cpp/hooks.md +39 -0
- package/src/available-rules/cpp/patterns.md +51 -0
- package/src/available-rules/cpp/security.md +51 -0
- package/src/available-rules/cpp/testing.md +44 -0
- package/src/available-rules/csharp/coding-style.md +72 -0
- package/src/available-rules/csharp/hooks.md +25 -0
- package/src/available-rules/csharp/patterns.md +50 -0
- package/src/available-rules/csharp/security.md +58 -0
- package/src/available-rules/csharp/testing.md +46 -0
- package/src/available-rules/java/coding-style.md +114 -0
- package/src/available-rules/java/hooks.md +18 -0
- package/src/available-rules/java/patterns.md +146 -0
- package/src/available-rules/java/security.md +100 -0
- package/src/available-rules/java/testing.md +131 -0
- package/src/available-rules/kotlin/hooks.md +17 -0
- package/src/available-rules/rust/coding-style.md +151 -0
- package/src/available-rules/rust/hooks.md +16 -0
- package/src/available-rules/rust/patterns.md +168 -0
- package/src/available-rules/rust/security.md +141 -0
- package/src/available-rules/rust/testing.md +154 -0
- package/src/commands/ccp/add-backlog.md +76 -0
- package/{gsd/commands-gsd → src/commands/ccp}/add-phase.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/add-tests.md +5 -5
- package/{gsd/commands-gsd → src/commands/ccp}/add-todo.md +4 -4
- package/src/commands/ccp/aside.md +165 -0
- package/{gsd/commands-gsd → src/commands/ccp}/audit-milestone.md +3 -3
- package/src/commands/ccp/audit-uat.md +24 -0
- package/src/commands/ccp/autonomous.md +41 -0
- package/src/commands/ccp/build-fix.md +67 -0
- package/{gsd/commands-gsd → src/commands/ccp}/check-todos.md +3 -3
- package/{ecc/commands → src/commands/ccp}/checkpoint.md +12 -7
- package/{gsd/commands-gsd → src/commands/ccp}/cleanup.md +3 -3
- package/src/commands/ccp/code-review.md +45 -0
- package/{gsd/commands-gsd → src/commands/ccp}/complete-milestone.md +9 -9
- package/src/commands/ccp/context-budget.md +30 -0
- package/src/commands/ccp/cpp-build.md +174 -0
- package/src/commands/ccp/cpp-review.md +133 -0
- package/src/commands/ccp/cpp-test.md +252 -0
- package/{gsd/commands-gsd → src/commands/ccp}/debug.md +14 -9
- package/src/commands/ccp/discuss-phase.md +64 -0
- package/src/commands/ccp/do.md +30 -0
- package/src/commands/ccp/docs-update.md +48 -0
- package/src/commands/ccp/docs.md +32 -0
- package/src/commands/ccp/e2e.md +365 -0
- package/src/commands/ccp/eval.md +125 -0
- package/{ecc/commands → src/commands/ccp}/evolve.md +5 -5
- package/src/commands/ccp/execute-phase.md +59 -0
- package/src/commands/ccp/fast.md +30 -0
- package/src/commands/ccp/forensics.md +56 -0
- package/src/commands/ccp/go-build.md +184 -0
- package/src/commands/ccp/go-review.md +149 -0
- package/src/commands/ccp/go-test.md +269 -0
- package/src/commands/ccp/gradle-build.md +71 -0
- package/src/commands/ccp/harness-audit.md +76 -0
- package/{gsd/commands-gsd → src/commands/ccp}/health.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/help.md +5 -5
- package/{gsd/commands-gsd → src/commands/ccp}/insert-phase.md +3 -3
- package/src/commands/ccp/kotlin-build.md +175 -0
- package/src/commands/ccp/kotlin-review.md +141 -0
- package/src/commands/ccp/kotlin-test.md +313 -0
- package/{ecc/commands → src/commands/ccp}/learn.md +7 -2
- package/{gsd/commands-gsd → src/commands/ccp}/list-phase-assumptions.md +2 -2
- package/src/commands/ccp/manager.md +39 -0
- package/{gsd/commands-gsd → src/commands/ccp}/map-codebase.md +7 -7
- package/src/commands/ccp/milestone-summary.md +51 -0
- package/{ecc/commands → src/commands/ccp}/model-route.md +6 -1
- package/{gsd/commands-gsd → src/commands/ccp}/new-milestone.md +8 -8
- package/{gsd/commands-gsd → src/commands/ccp}/new-project.md +8 -8
- package/src/commands/ccp/next.md +24 -0
- package/src/commands/ccp/note.md +34 -0
- package/src/commands/ccp/orchestrate.md +232 -0
- package/{gsd/commands-gsd → src/commands/ccp}/pause-work.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/plan-milestone-gaps.md +5 -5
- package/{gsd/commands-gsd → src/commands/ccp}/plan-phase.md +9 -7
- package/src/commands/ccp/plan.md +115 -0
- package/src/commands/ccp/plant-seed.md +28 -0
- package/src/commands/ccp/pr-branch.md +25 -0
- package/src/commands/ccp/profile-user.md +46 -0
- package/{gsd/commands-gsd → src/commands/ccp}/progress.md +3 -3
- package/src/commands/ccp/prompt-optimize.md +39 -0
- package/src/commands/ccp/prune.md +25 -0
- package/src/commands/ccp/python-review.md +298 -0
- package/{ecc/commands → src/commands/ccp}/quality-gate.md +7 -2
- package/{gsd/commands-gsd → src/commands/ccp}/quick.md +10 -8
- package/src/commands/ccp/refactor-clean.md +85 -0
- package/{gsd/commands-gsd → src/commands/ccp}/remove-phase.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/research-phase.md +17 -12
- package/{ecc/commands → src/commands/ccp}/resume-session.md +9 -8
- package/{gsd/commands-gsd → src/commands/ccp}/resume-work.md +3 -3
- package/src/commands/ccp/review-backlog.md +61 -0
- package/src/commands/ccp/review.md +37 -0
- package/src/commands/ccp/rules-distill.md +12 -0
- package/src/commands/ccp/rust-build.md +188 -0
- package/src/commands/ccp/rust-review.md +143 -0
- package/src/commands/ccp/rust-test.md +309 -0
- package/{ecc/commands → src/commands/ccp}/save-session.md +2 -1
- package/src/commands/ccp/secure-phase.md +35 -0
- package/src/commands/ccp/session-report.md +19 -0
- package/{ecc/commands → src/commands/ccp}/sessions.md +39 -34
- package/src/commands/ccp/set-profile.md +12 -0
- package/{gsd/commands-gsd → src/commands/ccp}/settings.md +5 -5
- package/src/commands/ccp/setup-pm.md +81 -0
- package/{kit/commands → src/commands/ccp}/setup-refresh.md +4 -3
- package/{kit/commands → src/commands/ccp}/setup.md +67 -40
- package/src/commands/ccp/ship.md +23 -0
- package/src/commands/ccp/skill-create.md +172 -0
- package/src/commands/ccp/skill-health.md +51 -0
- package/src/commands/ccp/stats.md +18 -0
- package/src/commands/ccp/tdd.md +329 -0
- package/src/commands/ccp/test-coverage.md +74 -0
- package/src/commands/ccp/thread.md +127 -0
- package/{kit/commands → src/commands/ccp}/tool-guide.md +2 -1
- package/src/commands/ccp/ui-phase.md +34 -0
- package/src/commands/ccp/ui-review.md +32 -0
- package/src/commands/ccp/update-codemaps.md +77 -0
- package/src/commands/ccp/update-docs.md +89 -0
- package/{gsd/commands-gsd → src/commands/ccp}/update.md +5 -5
- package/{gsd/commands-gsd → src/commands/ccp}/validate-phase.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/verify-work.md +5 -5
- package/{ecc/commands → src/commands/ccp}/verify.md +5 -0
- package/src/commands/ccp/workstreams.md +68 -0
- package/{ecc → src}/examples/CLAUDE.md +4 -4
- package/{ecc → src}/examples/django-api-CLAUDE.md +5 -5
- package/{ecc → src}/examples/go-microservice-CLAUDE.md +6 -6
- package/{ecc → src}/examples/rust-api-CLAUDE.md +4 -4
- package/{ecc → src}/examples/saas-nextjs-CLAUDE.md +8 -8
- package/{gsd/hooks/gsd-context-monitor.js → src/hooks/ccp-context-monitor.js} +3 -3
- package/src/hooks/ccp-prompt-guard.js +96 -0
- package/{gsd/hooks/gsd-statusline.js → src/hooks/ccp-statusline.js} +7 -7
- package/src/hooks/ccp-workflow-guard.js +94 -0
- package/src/hooks/config-protection.js +141 -0
- package/{kit → src}/hooks/kit-check-update.js +7 -4
- package/src/hooks/mcp-health-check.js +620 -0
- package/{ecc/scripts → src}/hooks/run-with-flags-shell.sh +1 -1
- package/{ecc/scripts → src}/hooks/run-with-flags.js +74 -13
- package/src/hooks/session-end-marker.js +29 -0
- package/{ecc/scripts → src}/hooks/session-end.js +83 -40
- package/{ecc/scripts → src}/hooks/session-start.js +76 -10
- package/{ecc/scripts → src}/lib/hook-flags.js +8 -4
- package/{ecc/scripts → src}/lib/project-detect.js +2 -1
- package/{ecc/scripts → src}/lib/session-manager.d.ts +5 -1
- package/{ecc/scripts → src}/lib/session-manager.js +202 -92
- package/{ecc/scripts → src}/lib/utils.d.ts +23 -1
- package/{ecc/scripts → src}/lib/utils.js +91 -3
- package/{gsd/get-shit-done/bin/gsd-tools.cjs → src/pilot/bin/ccp-tools.cjs} +257 -86
- package/{gsd/get-shit-done → src/pilot}/bin/lib/commands.cjs +1 -1
- package/src/pilot/bin/lib/config.cjs +444 -0
- package/src/pilot/bin/lib/core.cjs +1190 -0
- package/src/pilot/bin/lib/init.cjs +1281 -0
- package/src/pilot/bin/lib/model-profiles.cjs +67 -0
- package/{gsd/get-shit-done → src/pilot}/bin/lib/phase.cjs +2 -2
- package/src/pilot/bin/lib/security.cjs +382 -0
- package/{gsd/get-shit-done → src/pilot}/bin/lib/state.cjs +1 -1
- package/src/pilot/bin/lib/uat.cjs +282 -0
- package/{gsd/get-shit-done → src/pilot}/bin/lib/verify.cjs +10 -10
- package/{gsd/get-shit-done → src/pilot}/references/continuation-format.md +16 -16
- package/{gsd/get-shit-done → src/pilot}/references/decimal-phase-calculation.md +5 -5
- package/{gsd/get-shit-done → src/pilot}/references/git-integration.md +5 -5
- package/{gsd/get-shit-done → src/pilot}/references/git-planning-commit.md +4 -4
- package/src/pilot/references/mcp-servers.json +153 -0
- package/{gsd/get-shit-done → src/pilot}/references/model-profile-resolution.md +2 -2
- package/{gsd/get-shit-done → src/pilot}/references/model-profiles.md +20 -20
- package/{gsd/get-shit-done → src/pilot}/references/phase-argument-parsing.md +4 -4
- package/{gsd/get-shit-done → src/pilot}/references/planning-config.md +15 -15
- package/{gsd/get-shit-done → src/pilot}/references/ui-brand.md +5 -5
- package/{gsd/get-shit-done → src/pilot}/references/verification-patterns.md +1 -1
- package/{gsd/get-shit-done → src/pilot}/templates/DEBUG.md +1 -1
- package/{gsd/get-shit-done → src/pilot}/templates/UAT.md +3 -3
- package/src/pilot/templates/UI-SPEC.md +100 -0
- package/{gsd/get-shit-done → src/pilot}/templates/VALIDATION.md +1 -1
- package/src/pilot/templates/claude-md.md +122 -0
- package/{gsd/get-shit-done → src/pilot}/templates/codebase/architecture.md +2 -2
- package/{gsd/get-shit-done → src/pilot}/templates/codebase/structure.md +13 -13
- package/{gsd/get-shit-done → src/pilot}/templates/context.md +4 -4
- package/src/pilot/templates/copilot-instructions.md +7 -0
- package/{gsd/get-shit-done → src/pilot}/templates/debug-subagent-prompt.md +4 -4
- package/src/pilot/templates/dev-preferences.md +21 -0
- package/{gsd/get-shit-done → src/pilot}/templates/discovery.md +2 -2
- package/src/pilot/templates/discussion-log.md +63 -0
- package/{gsd/get-shit-done → src/pilot}/templates/phase-prompt.md +12 -12
- package/{gsd/get-shit-done → src/pilot}/templates/planner-subagent-prompt.md +7 -7
- package/{gsd/get-shit-done → src/pilot}/templates/project.md +1 -1
- package/{gsd/get-shit-done → src/pilot}/templates/research.md +2 -2
- package/{gsd/get-shit-done → src/pilot}/templates/state.md +2 -2
- package/{gsd/get-shit-done → src/pilot}/templates/summary-complex.md +1 -1
- package/{gsd/get-shit-done → src/pilot}/workflows/add-phase.md +11 -11
- package/{gsd/get-shit-done → src/pilot}/workflows/add-tests.md +15 -15
- package/{gsd/get-shit-done → src/pilot}/workflows/add-todo.md +7 -7
- package/{gsd/get-shit-done → src/pilot}/workflows/audit-milestone.md +24 -16
- package/src/pilot/workflows/audit-uat.md +109 -0
- package/src/pilot/workflows/autonomous.md +891 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/check-todos.md +10 -10
- package/{gsd/get-shit-done → src/pilot}/workflows/cleanup.md +3 -3
- package/{gsd/get-shit-done → src/pilot}/workflows/complete-milestone.md +19 -16
- package/{gsd/get-shit-done → src/pilot}/workflows/diagnose-issues.md +9 -4
- package/{gsd/get-shit-done → src/pilot}/workflows/discovery-phase.md +8 -8
- package/src/pilot/workflows/discuss-phase-assumptions.md +653 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/discuss-phase.md +407 -49
- package/src/pilot/workflows/do.md +104 -0
- package/src/pilot/workflows/docs-update.md +1165 -0
- package/src/pilot/workflows/execute-phase.md +821 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/execute-plan.md +79 -28
- package/src/pilot/workflows/fast.md +105 -0
- package/src/pilot/workflows/forensics.md +265 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/health.md +34 -11
- package/src/pilot/workflows/help.md +767 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/insert-phase.md +10 -10
- package/{gsd/get-shit-done → src/pilot}/workflows/list-phase-assumptions.md +4 -4
- package/src/pilot/workflows/manager.md +362 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/map-codebase.md +27 -17
- package/src/pilot/workflows/milestone-summary.md +223 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/new-milestone.md +135 -33
- package/{gsd/get-shit-done → src/pilot}/workflows/new-project.md +152 -79
- package/src/pilot/workflows/next.md +97 -0
- package/src/pilot/workflows/node-repair.md +92 -0
- package/src/pilot/workflows/note.md +156 -0
- package/src/pilot/workflows/pause-work.md +177 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/plan-milestone-gaps.md +10 -11
- package/src/pilot/workflows/plan-phase.md +859 -0
- package/src/pilot/workflows/plant-seed.md +169 -0
- package/src/pilot/workflows/pr-branch.md +129 -0
- package/src/pilot/workflows/profile-user.md +452 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/progress.md +95 -34
- package/{gsd/get-shit-done → src/pilot}/workflows/quick.md +33 -21
- package/{gsd/get-shit-done → src/pilot}/workflows/remove-phase.md +14 -14
- package/{gsd/get-shit-done → src/pilot}/workflows/research-phase.md +18 -10
- package/{gsd/get-shit-done → src/pilot}/workflows/resume-project.md +37 -18
- package/src/pilot/workflows/review.md +244 -0
- package/src/pilot/workflows/secure-phase.md +164 -0
- package/src/pilot/workflows/session-report.md +146 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/set-profile.md +7 -7
- package/{gsd/get-shit-done → src/pilot}/workflows/settings.md +75 -22
- package/src/pilot/workflows/ship.md +228 -0
- package/src/pilot/workflows/stats.md +60 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/transition.md +57 -17
- package/src/pilot/workflows/ui-phase.md +302 -0
- package/src/pilot/workflows/ui-review.md +165 -0
- package/{gsd/get-shit-done → src/pilot}/workflows/update.md +88 -58
- package/{gsd/get-shit-done → src/pilot}/workflows/validate-phase.md +24 -17
- package/{gsd/get-shit-done → src/pilot}/workflows/verify-phase.md +26 -15
- package/{gsd/get-shit-done → src/pilot}/workflows/verify-work.md +89 -37
- package/{ecc → src}/rules/common/agents.md +1 -0
- package/src/rules/common/code-review.md +124 -0
- package/{ecc → src}/rules/common/coding-style.md +21 -0
- package/src/rules/zh/README.md +108 -0
- package/src/rules/zh/agents.md +50 -0
- package/src/rules/zh/code-review.md +124 -0
- package/src/rules/zh/coding-style.md +48 -0
- package/src/rules/zh/development-workflow.md +44 -0
- package/src/rules/zh/git-workflow.md +24 -0
- package/src/rules/zh/hooks.md +30 -0
- package/src/rules/zh/patterns.md +31 -0
- package/src/rules/zh/performance.md +55 -0
- package/src/rules/zh/security.md +29 -0
- package/src/rules/zh/testing.md +29 -0
- package/src/skills/agentic-engineering/SKILL.md +63 -0
- package/src/skills/ai-first-engineering/SKILL.md +51 -0
- package/src/skills/ai-regression-testing/SKILL.md +385 -0
- package/src/skills/api-design/SKILL.md +523 -0
- package/src/skills/architecture-decision-records/SKILL.md +179 -0
- package/src/skills/autonomous-agent-harness/SKILL.md +267 -0
- package/src/skills/autonomous-loops/SKILL.md +610 -0
- package/src/skills/backend-patterns/SKILL.md +598 -0
- package/src/skills/benchmark/SKILL.md +87 -0
- package/src/skills/blueprint/SKILL.md +90 -0
- package/src/skills/browser-qa/SKILL.md +81 -0
- package/src/skills/bun-runtime/SKILL.md +84 -0
- package/src/skills/claude-api/SKILL.md +337 -0
- package/src/skills/codebase-onboarding/SKILL.md +233 -0
- package/src/skills/coding-standards/SKILL.md +530 -0
- package/src/skills/content-hash-cache-pattern/SKILL.md +161 -0
- package/src/skills/context-budget/SKILL.md +135 -0
- package/{ecc → src}/skills/continuous-learning-v2/SKILL.md +6 -6
- package/{ecc → src}/skills/continuous-learning-v2/agents/observer-loop.sh +1 -1
- package/{ecc → src}/skills/continuous-learning-v2/agents/observer.md +1 -1
- package/src/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
- package/src/skills/cpp-coding-standards/SKILL.md +723 -0
- package/src/skills/cpp-testing/SKILL.md +324 -0
- package/src/skills/database-migrations/SKILL.md +429 -0
- package/src/skills/deep-research/SKILL.md +155 -0
- package/src/skills/deployment-patterns/SKILL.md +427 -0
- package/src/skills/design-system/SKILL.md +82 -0
- package/src/skills/django-patterns/SKILL.md +734 -0
- package/src/skills/django-security/SKILL.md +593 -0
- package/src/skills/django-tdd/SKILL.md +729 -0
- package/src/skills/django-verification/SKILL.md +469 -0
- package/src/skills/docker-patterns/SKILL.md +364 -0
- package/src/skills/documentation-lookup/SKILL.md +90 -0
- package/src/skills/e2e-testing/SKILL.md +326 -0
- package/src/skills/eval-harness/SKILL.md +270 -0
- package/src/skills/exa-search/SKILL.md +103 -0
- package/src/skills/flutter-dart-code-review/SKILL.md +435 -0
- package/src/skills/frontend-patterns/SKILL.md +642 -0
- package/src/skills/gan-style-harness/SKILL.md +278 -0
- package/src/skills/git-workflow/SKILL.md +715 -0
- package/src/skills/golang-patterns/SKILL.md +674 -0
- package/src/skills/golang-testing/SKILL.md +720 -0
- package/src/skills/hexagonal-architecture/SKILL.md +276 -0
- package/src/skills/iterative-retrieval/SKILL.md +211 -0
- package/src/skills/java-coding-standards/SKILL.md +147 -0
- package/src/skills/jpa-patterns/SKILL.md +151 -0
- package/src/skills/kotlin-coroutines-flows/SKILL.md +284 -0
- package/src/skills/kotlin-exposed-patterns/SKILL.md +719 -0
- package/src/skills/kotlin-ktor-patterns/SKILL.md +689 -0
- package/src/skills/kotlin-patterns/SKILL.md +711 -0
- package/src/skills/kotlin-testing/SKILL.md +824 -0
- package/src/skills/laravel-patterns/SKILL.md +415 -0
- package/src/skills/laravel-plugin-discovery/SKILL.md +229 -0
- package/src/skills/laravel-security/SKILL.md +285 -0
- package/src/skills/laravel-tdd/SKILL.md +283 -0
- package/src/skills/laravel-verification/SKILL.md +179 -0
- package/src/skills/mcp-server-patterns/SKILL.md +67 -0
- package/src/skills/nextjs-turbopack/SKILL.md +44 -0
- package/src/skills/nuxt4-patterns/SKILL.md +100 -0
- package/src/skills/opensource-pipeline/SKILL.md +255 -0
- package/src/skills/perl-patterns/SKILL.md +504 -0
- package/src/skills/perl-security/SKILL.md +503 -0
- package/src/skills/perl-testing/SKILL.md +475 -0
- package/src/skills/postgres-patterns/SKILL.md +147 -0
- package/src/skills/project-flow-ops/SKILL.md +111 -0
- package/src/skills/project-guidelines-example/SKILL.md +349 -0
- package/src/skills/prompt-optimizer/SKILL.md +397 -0
- package/src/skills/python-patterns/SKILL.md +750 -0
- package/src/skills/python-testing/SKILL.md +816 -0
- package/src/skills/pytorch-patterns/SKILL.md +396 -0
- package/src/skills/regex-vs-llm-structured-text/SKILL.md +220 -0
- package/src/skills/repo-scan/SKILL.md +78 -0
- package/src/skills/rules-distill/SKILL.md +264 -0
- package/src/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/src/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/src/skills/rust-patterns/SKILL.md +499 -0
- package/src/skills/rust-testing/SKILL.md +500 -0
- package/src/skills/safety-guard/SKILL.md +69 -0
- package/src/skills/search-first/SKILL.md +161 -0
- package/src/skills/security-review/SKILL.md +495 -0
- package/src/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/src/skills/security-scan/SKILL.md +165 -0
- package/src/skills/springboot-patterns/SKILL.md +314 -0
- package/src/skills/springboot-security/SKILL.md +272 -0
- package/src/skills/springboot-tdd/SKILL.md +158 -0
- package/src/skills/springboot-verification/SKILL.md +231 -0
- package/src/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/src/skills/tdd-workflow/SKILL.md +410 -0
- package/src/skills/token-budget-advisor/SKILL.md +133 -0
- package/{ecc/skills/verification-loop-SKILL.md → src/skills/verification-loop/SKILL.md} +1 -1
- package/src/skills/workspace-surface-audit/SKILL.md +125 -0
- package/ecc/scripts/hooks/session-end-marker.js +0 -15
- package/gsd/LICENSE +0 -21
- package/gsd/commands-gsd/discuss-phase.md +0 -90
- package/gsd/commands-gsd/execute-phase.md +0 -41
- package/gsd/commands-gsd/join-discord.md +0 -18
- package/gsd/commands-gsd/reapply-patches.md +0 -123
- package/gsd/commands-gsd/set-profile.md +0 -34
- package/gsd/get-shit-done/bin/lib/config.cjs +0 -169
- package/gsd/get-shit-done/bin/lib/core.cjs +0 -492
- package/gsd/get-shit-done/bin/lib/init.cjs +0 -710
- package/gsd/get-shit-done/workflows/execute-phase.md +0 -459
- package/gsd/get-shit-done/workflows/help.md +0 -489
- package/gsd/get-shit-done/workflows/pause-work.md +0 -122
- package/gsd/get-shit-done/workflows/plan-phase.md +0 -560
- package/gsd/hooks/gsd-check-update.js +0 -81
- package/kit/CLAUDE.md +0 -43
- package/kit/commands/kit/update.md +0 -46
- package/kit/mcp.json +0 -10
- package/kit/rules/code-style.md +0 -24
- /package/{ecc → src}/agents/architect.md +0 -0
- /package/{ecc → src}/agents/code-reviewer.md +0 -0
- /package/{ecc → src}/agents/e2e-runner.md +0 -0
- /package/{ecc → src}/agents/security-reviewer.md +0 -0
- /package/{ecc → src}/agents/tdd-guide.md +0 -0
- /package/{ecc/rules → src/available-rules}/golang/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/golang/hooks.md +0 -0
- /package/{ecc/rules → src/available-rules}/golang/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/golang/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/golang/testing.md +0 -0
- /package/{ecc/rules → src/available-rules}/kotlin/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/kotlin/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/kotlin/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/kotlin/testing.md +0 -0
- /package/{ecc/rules → src/available-rules}/perl/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/perl/hooks.md +0 -0
- /package/{ecc/rules → src/available-rules}/perl/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/perl/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/perl/testing.md +0 -0
- /package/{ecc/rules → src/available-rules}/php/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/php/hooks.md +0 -0
- /package/{ecc/rules → src/available-rules}/php/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/php/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/php/testing.md +0 -0
- /package/{ecc/rules → src/available-rules}/python/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/python/hooks.md +0 -0
- /package/{ecc/rules → src/available-rules}/python/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/python/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/python/testing.md +0 -0
- /package/{ecc/rules → src/available-rules}/swift/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/swift/hooks.md +0 -0
- /package/{ecc/rules → src/available-rules}/swift/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/swift/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/swift/testing.md +0 -0
- /package/{ecc/rules → src/available-rules}/typescript/coding-style.md +0 -0
- /package/{ecc/rules → src/available-rules}/typescript/hooks.md +0 -0
- /package/{ecc/rules → src/available-rules}/typescript/patterns.md +0 -0
- /package/{ecc/rules → src/available-rules}/typescript/security.md +0 -0
- /package/{ecc/rules → src/available-rules}/typescript/testing.md +0 -0
- /package/{ecc → src}/contexts/dev.md +0 -0
- /package/{ecc → src}/contexts/research.md +0 -0
- /package/{ecc → src}/contexts/review.md +0 -0
- /package/{ecc → src}/examples/user-CLAUDE.md +0 -0
- /package/{ecc/scripts → src}/hooks/check-hook-enabled.js +0 -0
- /package/{ecc/scripts → src}/hooks/evaluate-session.js +0 -0
- /package/{ecc/scripts → src}/hooks/pre-compact.js +0 -0
- /package/{ecc/scripts → src}/hooks/suggest-compact.js +0 -0
- /package/{ecc/scripts → src}/lib/package-manager.d.ts +0 -0
- /package/{ecc/scripts → src}/lib/package-manager.js +0 -0
- /package/{ecc/scripts → src}/lib/resolve-formatter.js +0 -0
- /package/{ecc/scripts → src}/lib/session-aliases.d.ts +0 -0
- /package/{ecc/scripts → src}/lib/session-aliases.js +0 -0
- /package/{ecc/scripts → src}/lib/shell-split.js +0 -0
- /package/{gsd/get-shit-done → src/pilot}/bin/lib/frontmatter.cjs +0 -0
- /package/{gsd/get-shit-done → src/pilot}/bin/lib/milestone.cjs +0 -0
- /package/{gsd/get-shit-done → src/pilot}/bin/lib/roadmap.cjs +0 -0
- /package/{gsd/get-shit-done → src/pilot}/bin/lib/template.cjs +0 -0
- /package/{gsd/get-shit-done → src/pilot}/references/checkpoints.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/references/questioning.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/references/tdd.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/codebase/concerns.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/codebase/conventions.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/codebase/integrations.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/codebase/stack.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/codebase/testing.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/config.json +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/continue-here.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/milestone-archive.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/milestone.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/requirements.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/research-project/ARCHITECTURE.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/research-project/FEATURES.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/research-project/PITFALLS.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/research-project/STACK.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/research-project/SUMMARY.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/retrospective.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/roadmap.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/summary-minimal.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/summary-standard.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/summary.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/user-setup.md +0 -0
- /package/{gsd/get-shit-done → src/pilot}/templates/verification-report.md +0 -0
- /package/{ecc → src}/rules/common/development-workflow.md +0 -0
- /package/{ecc → src}/rules/common/git-workflow.md +0 -0
- /package/{ecc → src}/rules/common/hooks.md +0 -0
- /package/{ecc → src}/rules/common/patterns.md +0 -0
- /package/{ecc → src}/rules/common/performance.md +0 -0
- /package/{ecc → src}/rules/common/security.md +0 -0
- /package/{ecc → src}/rules/common/testing.md +0 -0
- /package/{ecc → src}/skills/continuous-learning-v2/agents/start-observer.sh +0 -0
- /package/{ecc → src}/skills/continuous-learning-v2/config.json +0 -0
- /package/{ecc → src}/skills/continuous-learning-v2/hooks/observe.sh +0 -0
- /package/{ecc → src}/skills/continuous-learning-v2/scripts/detect-project.sh +0 -0
- /package/{ecc → src}/skills/continuous-learning-v2/scripts/instinct-cli.py +0 -0
- /package/{ecc → src}/skills/continuous-learning-v2/scripts/test_parse_instinct.py +0 -0
- /package/{ecc → src}/skills/strategic-compact/SKILL.md +0 -0
- /package/{ecc → src}/skills/strategic-compact/suggest-compact.sh +0 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:cpp-build
|
|
3
|
+
description: Fix C++ build errors, CMake issues, and linker problems incrementally. Invokes the cpp-build-resolver agent for minimal, surgical fixes.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# C++ Build and Fix
|
|
7
|
+
|
|
8
|
+
This command invokes the **cpp-build-resolver** agent to incrementally fix C++ build errors with minimal changes.
|
|
9
|
+
|
|
10
|
+
## What This Command Does
|
|
11
|
+
|
|
12
|
+
1. **Run Diagnostics**: Execute `cmake --build`, `clang-tidy`, `cppcheck`
|
|
13
|
+
2. **Parse Errors**: Group by file and sort by severity
|
|
14
|
+
3. **Fix Incrementally**: One error at a time
|
|
15
|
+
4. **Verify Each Fix**: Re-run build after each change
|
|
16
|
+
5. **Report Summary**: Show what was fixed and what remains
|
|
17
|
+
|
|
18
|
+
## When to Use
|
|
19
|
+
|
|
20
|
+
Use `/ccp:cpp-build` when:
|
|
21
|
+
- `cmake --build build` fails with errors
|
|
22
|
+
- Linker errors (undefined references, multiple definitions)
|
|
23
|
+
- Template instantiation failures
|
|
24
|
+
- Include/dependency issues
|
|
25
|
+
- After pulling changes that break the build
|
|
26
|
+
|
|
27
|
+
## Diagnostic Commands Run
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# CMake configure
|
|
31
|
+
cmake -B build -S .
|
|
32
|
+
|
|
33
|
+
# Build
|
|
34
|
+
cmake --build build 2>&1 | head -100
|
|
35
|
+
|
|
36
|
+
# Static analysis (if available)
|
|
37
|
+
clang-tidy src/*.cpp -- -std=c++17
|
|
38
|
+
cppcheck --enable=all src/
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Example Session
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
User: /ccp:cpp-build
|
|
45
|
+
|
|
46
|
+
Agent:
|
|
47
|
+
# C++ Build Resolution
|
|
48
|
+
|
|
49
|
+
## Initial Diagnostics
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
$ cmake --build build
|
|
53
|
+
src/service/user.cpp:25:15: error: use of undeclared identifier 'UserRepository'
|
|
54
|
+
src/handler/api.cpp:42:9: error: no matching function for call to 'process'
|
|
55
|
+
src/handler/api.cpp:58:1: error: non-void function does not return a value
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Errors found: 3
|
|
59
|
+
|
|
60
|
+
## Fix 1: Undeclared Identifier
|
|
61
|
+
|
|
62
|
+
File: src/service/user.cpp:25
|
|
63
|
+
Error: use of undeclared identifier 'UserRepository'
|
|
64
|
+
Cause: Missing include
|
|
65
|
+
|
|
66
|
+
```cpp
|
|
67
|
+
// Added include
|
|
68
|
+
#include "repository/user_repository.hpp"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
$ cmake --build build
|
|
73
|
+
# 2 errors remaining
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Fix 2: No Matching Function
|
|
77
|
+
|
|
78
|
+
File: src/handler/api.cpp:42
|
|
79
|
+
Error: no matching function for call to 'process'
|
|
80
|
+
|
|
81
|
+
```cpp
|
|
82
|
+
// Changed
|
|
83
|
+
process(params.get("count"));
|
|
84
|
+
// To
|
|
85
|
+
process(std::stoi(params.get("count")));
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
$ cmake --build build
|
|
90
|
+
# 1 error remaining
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Fix 3: Missing Return
|
|
94
|
+
|
|
95
|
+
File: src/handler/api.cpp:58
|
|
96
|
+
Error: non-void function does not return a value
|
|
97
|
+
|
|
98
|
+
```cpp
|
|
99
|
+
std::optional<User> getUser(const std::string& id) {
|
|
100
|
+
if (id.empty()) {
|
|
101
|
+
return std::nullopt;
|
|
102
|
+
}
|
|
103
|
+
auto user = findUser(id);
|
|
104
|
+
// Added missing return
|
|
105
|
+
return user;
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
$ cmake --build build
|
|
111
|
+
# Build successful!
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Final Verification
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
$ ctest --test-dir build --output-on-failure
|
|
118
|
+
Test project build
|
|
119
|
+
1/5 Test #1: unit_tests ........ Passed 0.02 sec
|
|
120
|
+
2/5 Test #2: integration_tests Passed 0.15 sec
|
|
121
|
+
All tests passed.
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Summary
|
|
125
|
+
|
|
126
|
+
| Metric | Count |
|
|
127
|
+
|--------|-------|
|
|
128
|
+
| Build errors fixed | 3 |
|
|
129
|
+
| Linker errors fixed | 0 |
|
|
130
|
+
| Files modified | 2 |
|
|
131
|
+
| Remaining issues | 0 |
|
|
132
|
+
|
|
133
|
+
Build Status: ✅ SUCCESS
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Common Errors Fixed
|
|
137
|
+
|
|
138
|
+
| Error | Typical Fix |
|
|
139
|
+
|-------|-------------|
|
|
140
|
+
| `undeclared identifier` | Add `#include` or fix typo |
|
|
141
|
+
| `no matching function` | Fix argument types or add overload |
|
|
142
|
+
| `undefined reference` | Link library or add implementation |
|
|
143
|
+
| `multiple definition` | Use `inline` or move to .cpp |
|
|
144
|
+
| `incomplete type` | Replace forward decl with `#include` |
|
|
145
|
+
| `no member named X` | Fix member name or include |
|
|
146
|
+
| `cannot convert X to Y` | Add appropriate cast |
|
|
147
|
+
| `CMake Error` | Fix CMakeLists.txt configuration |
|
|
148
|
+
|
|
149
|
+
## Fix Strategy
|
|
150
|
+
|
|
151
|
+
1. **Compilation errors first** - Code must compile
|
|
152
|
+
2. **Linker errors second** - Resolve undefined references
|
|
153
|
+
3. **Warnings third** - Fix with `-Wall -Wextra`
|
|
154
|
+
4. **One fix at a time** - Verify each change
|
|
155
|
+
5. **Minimal changes** - Don't refactor, just fix
|
|
156
|
+
|
|
157
|
+
## Stop Conditions
|
|
158
|
+
|
|
159
|
+
The agent will stop and report if:
|
|
160
|
+
- Same error persists after 3 attempts
|
|
161
|
+
- Fix introduces more errors
|
|
162
|
+
- Requires architectural changes
|
|
163
|
+
- Missing external dependencies
|
|
164
|
+
|
|
165
|
+
## Related Commands
|
|
166
|
+
|
|
167
|
+
- `/ccp:cpp-test` - Run tests after build succeeds
|
|
168
|
+
- `/ccp:cpp-review` - Review code quality
|
|
169
|
+
- `/ccp:verify` - Full verification loop
|
|
170
|
+
|
|
171
|
+
## Related
|
|
172
|
+
|
|
173
|
+
- Agent: `agents/cpp-build-resolver.md`
|
|
174
|
+
- Skill: `skills/cpp-coding-standards/`
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:cpp-review
|
|
3
|
+
description: Comprehensive C++ code review for memory safety, modern C++ idioms, concurrency, and security. Invokes the cpp-reviewer agent.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# C++ Code Review
|
|
7
|
+
|
|
8
|
+
This command invokes the **cpp-reviewer** agent for comprehensive C++-specific code review.
|
|
9
|
+
|
|
10
|
+
## What This Command Does
|
|
11
|
+
|
|
12
|
+
1. **Identify C++ Changes**: Find modified `.cpp`, `.hpp`, `.cc`, `.h` files via `git diff`
|
|
13
|
+
2. **Run Static Analysis**: Execute `clang-tidy` and `cppcheck`
|
|
14
|
+
3. **Memory Safety Scan**: Check for raw new/delete, buffer overflows, use-after-free
|
|
15
|
+
4. **Concurrency Review**: Analyze thread safety, mutex usage, data races
|
|
16
|
+
5. **Modern C++ Check**: Verify code follows C++17/20 conventions and best practices
|
|
17
|
+
6. **Generate Report**: Categorize issues by severity
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
Use `/ccp:cpp-review` when:
|
|
22
|
+
- After writing or modifying C++ code
|
|
23
|
+
- Before committing C++ changes
|
|
24
|
+
- Reviewing pull requests with C++ code
|
|
25
|
+
- Onboarding to a new C++ codebase
|
|
26
|
+
- Checking for memory safety issues
|
|
27
|
+
|
|
28
|
+
## Review Categories
|
|
29
|
+
|
|
30
|
+
### CRITICAL (Must Fix)
|
|
31
|
+
- Raw `new`/`delete` without RAII
|
|
32
|
+
- Buffer overflows and use-after-free
|
|
33
|
+
- Data races without synchronization
|
|
34
|
+
- Command injection via `system()`
|
|
35
|
+
- Uninitialized variable reads
|
|
36
|
+
- Null pointer dereferences
|
|
37
|
+
|
|
38
|
+
### HIGH (Should Fix)
|
|
39
|
+
- Rule of Five violations
|
|
40
|
+
- Missing `std::lock_guard` / `std::scoped_lock`
|
|
41
|
+
- Detached threads without proper lifetime management
|
|
42
|
+
- C-style casts instead of `static_cast`/`dynamic_cast`
|
|
43
|
+
- Missing `const` correctness
|
|
44
|
+
|
|
45
|
+
### MEDIUM (Consider)
|
|
46
|
+
- Unnecessary copies (pass by value instead of `const&`)
|
|
47
|
+
- Missing `reserve()` on known-size containers
|
|
48
|
+
- `using namespace std;` in headers
|
|
49
|
+
- Missing `[[nodiscard]]` on important return values
|
|
50
|
+
- Overly complex template metaprogramming
|
|
51
|
+
|
|
52
|
+
## Automated Checks Run
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Static analysis
|
|
56
|
+
clang-tidy --checks='*,-llvmlibc-*' src/*.cpp -- -std=c++17
|
|
57
|
+
|
|
58
|
+
# Additional analysis
|
|
59
|
+
cppcheck --enable=all --suppress=missingIncludeSystem src/
|
|
60
|
+
|
|
61
|
+
# Build with warnings
|
|
62
|
+
cmake --build build -- -Wall -Wextra -Wpedantic
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Example Usage
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
User: /ccp:cpp-review
|
|
69
|
+
|
|
70
|
+
Agent:
|
|
71
|
+
# C++ Code Review Report
|
|
72
|
+
|
|
73
|
+
## Files Reviewed
|
|
74
|
+
- src/handler/user.cpp (modified)
|
|
75
|
+
- src/service/auth.cpp (modified)
|
|
76
|
+
|
|
77
|
+
## Static Analysis Results
|
|
78
|
+
✓ clang-tidy: 2 warnings
|
|
79
|
+
✓ cppcheck: No issues
|
|
80
|
+
|
|
81
|
+
## Issues Found
|
|
82
|
+
|
|
83
|
+
[CRITICAL] Memory Leak
|
|
84
|
+
File: src/service/auth.cpp:45
|
|
85
|
+
Issue: Raw `new` without matching `delete`
|
|
86
|
+
```cpp
|
|
87
|
+
auto* session = new Session(userId); // Memory leak!
|
|
88
|
+
cache[userId] = session;
|
|
89
|
+
```
|
|
90
|
+
Fix: Use `std::unique_ptr`
|
|
91
|
+
```cpp
|
|
92
|
+
auto session = std::make_unique<Session>(userId);
|
|
93
|
+
cache[userId] = std::move(session);
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
[HIGH] Missing const Reference
|
|
97
|
+
File: src/handler/user.cpp:28
|
|
98
|
+
Issue: Large object passed by value
|
|
99
|
+
```cpp
|
|
100
|
+
void processUser(User user) { // Unnecessary copy
|
|
101
|
+
```
|
|
102
|
+
Fix: Pass by const reference
|
|
103
|
+
```cpp
|
|
104
|
+
void processUser(const User& user) {
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Summary
|
|
108
|
+
- CRITICAL: 1
|
|
109
|
+
- HIGH: 1
|
|
110
|
+
- MEDIUM: 0
|
|
111
|
+
|
|
112
|
+
Recommendation: ❌ Block merge until CRITICAL issue is fixed
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Approval Criteria
|
|
116
|
+
|
|
117
|
+
| Status | Condition |
|
|
118
|
+
|--------|-----------|
|
|
119
|
+
| ✅ Approve | No CRITICAL or HIGH issues |
|
|
120
|
+
| ⚠️ Warning | Only MEDIUM issues (merge with caution) |
|
|
121
|
+
| ❌ Block | CRITICAL or HIGH issues found |
|
|
122
|
+
|
|
123
|
+
## Integration with Other Commands
|
|
124
|
+
|
|
125
|
+
- Use `/ccp:cpp-test` first to ensure tests pass
|
|
126
|
+
- Use `/ccp:cpp-build` if build errors occur
|
|
127
|
+
- Use `/ccp:cpp-review` before committing
|
|
128
|
+
- Use `/ccp:code-review` for non-C++ specific concerns
|
|
129
|
+
|
|
130
|
+
## Related
|
|
131
|
+
|
|
132
|
+
- Agent: `agents/cpp-reviewer.md`
|
|
133
|
+
- Skills: `skills/cpp-coding-standards/`, `skills/cpp-testing/`
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:cpp-test
|
|
3
|
+
description: Enforce TDD workflow for C++. Write GoogleTest tests first, then implement. Verify coverage with gcov/lcov.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# C++ TDD Command
|
|
7
|
+
|
|
8
|
+
This command enforces test-driven development methodology for C++ code using GoogleTest/GoogleMock with CMake/CTest.
|
|
9
|
+
|
|
10
|
+
## What This Command Does
|
|
11
|
+
|
|
12
|
+
1. **Define Interfaces**: Scaffold class/function signatures first
|
|
13
|
+
2. **Write Tests**: Create comprehensive GoogleTest test cases (RED)
|
|
14
|
+
3. **Run Tests**: Verify tests fail for the right reason
|
|
15
|
+
4. **Implement Code**: Write minimal code to pass (GREEN)
|
|
16
|
+
5. **Refactor**: Improve while keeping tests green
|
|
17
|
+
6. **Check Coverage**: Ensure 80%+ coverage
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
Use `/ccp:cpp-test` when:
|
|
22
|
+
- Implementing new C++ functions or classes
|
|
23
|
+
- Adding test coverage to existing code
|
|
24
|
+
- Fixing bugs (write failing test first)
|
|
25
|
+
- Building critical business logic
|
|
26
|
+
- Learning TDD workflow in C++
|
|
27
|
+
|
|
28
|
+
## TDD Cycle
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
RED → Write failing GoogleTest test
|
|
32
|
+
GREEN → Implement minimal code to pass
|
|
33
|
+
REFACTOR → Improve code, tests stay green
|
|
34
|
+
REPEAT → Next test case
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Example Session
|
|
38
|
+
|
|
39
|
+
````
|
|
40
|
+
User: /ccp:cpp-test I need a function to validate email addresses
|
|
41
|
+
|
|
42
|
+
Agent:
|
|
43
|
+
# TDD Session: Email Validator
|
|
44
|
+
|
|
45
|
+
## Step 1: Define Interface
|
|
46
|
+
|
|
47
|
+
```cpp
|
|
48
|
+
// validator/email.hpp
|
|
49
|
+
#pragma once
|
|
50
|
+
#include <string>
|
|
51
|
+
#include <expected>
|
|
52
|
+
|
|
53
|
+
enum class EmailError {
|
|
54
|
+
Empty,
|
|
55
|
+
InvalidFormat
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
std::expected<void, EmailError> validate_email(const std::string& email);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Step 2: Write Tests (RED)
|
|
62
|
+
|
|
63
|
+
```cpp
|
|
64
|
+
// validator/email_test.cpp
|
|
65
|
+
#include <gtest/gtest.h>
|
|
66
|
+
#include "email.hpp"
|
|
67
|
+
|
|
68
|
+
TEST(ValidateEmail, AcceptsSimpleEmail) {
|
|
69
|
+
auto result = validate_email("user@example.com");
|
|
70
|
+
EXPECT_TRUE(result.has_value());
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
TEST(ValidateEmail, AcceptsSubdomain) {
|
|
74
|
+
EXPECT_TRUE(validate_email("user@mail.example.com").has_value());
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
TEST(ValidateEmail, AcceptsPlus) {
|
|
78
|
+
EXPECT_TRUE(validate_email("user+tag@example.com").has_value());
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
TEST(ValidateEmail, RejectsEmpty) {
|
|
82
|
+
auto result = validate_email("");
|
|
83
|
+
ASSERT_FALSE(result.has_value());
|
|
84
|
+
EXPECT_EQ(result.error(), EmailError::Empty);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
TEST(ValidateEmail, RejectsNoAtSign) {
|
|
88
|
+
EXPECT_FALSE(validate_email("userexample.com").has_value());
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
TEST(ValidateEmail, RejectsNoDomain) {
|
|
92
|
+
EXPECT_FALSE(validate_email("user@").has_value());
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
TEST(ValidateEmail, RejectsNoLocalPart) {
|
|
96
|
+
EXPECT_FALSE(validate_email("@example.com").has_value());
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Step 3: Run Tests - Verify FAIL
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
$ cmake --build build && ctest --test-dir build --output-on-failure
|
|
104
|
+
|
|
105
|
+
1/1 Test #1: email_validator_test .....***Failed
|
|
106
|
+
--- undefined reference to `validate_email`
|
|
107
|
+
|
|
108
|
+
FAIL
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
✓ Tests fail as expected (unimplemented).
|
|
112
|
+
|
|
113
|
+
## Step 4: Implement Minimal Code (GREEN)
|
|
114
|
+
|
|
115
|
+
```cpp
|
|
116
|
+
// validator/email.cpp
|
|
117
|
+
#include "email.hpp"
|
|
118
|
+
#include <regex>
|
|
119
|
+
|
|
120
|
+
std::expected<void, EmailError> validate_email(const std::string& email) {
|
|
121
|
+
if (email.empty()) {
|
|
122
|
+
return std::unexpected(EmailError::Empty);
|
|
123
|
+
}
|
|
124
|
+
static const std::regex pattern(R"([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})");
|
|
125
|
+
if (!std::regex_match(email, pattern)) {
|
|
126
|
+
return std::unexpected(EmailError::InvalidFormat);
|
|
127
|
+
}
|
|
128
|
+
return {};
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Step 5: Run Tests - Verify PASS
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
$ cmake --build build && ctest --test-dir build --output-on-failure
|
|
136
|
+
|
|
137
|
+
1/1 Test #1: email_validator_test ..... Passed 0.01 sec
|
|
138
|
+
|
|
139
|
+
100% tests passed.
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
✓ All tests passing!
|
|
143
|
+
|
|
144
|
+
## Step 6: Check Coverage
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
$ cmake -DCMAKE_CXX_FLAGS="--coverage" -B build && cmake --build build
|
|
148
|
+
$ ctest --test-dir build
|
|
149
|
+
$ lcov --capture --directory build --output-file coverage.info
|
|
150
|
+
$ lcov --list coverage.info
|
|
151
|
+
|
|
152
|
+
validator/email.cpp | 100%
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
✓ Coverage: 100%
|
|
156
|
+
|
|
157
|
+
## TDD Complete!
|
|
158
|
+
````
|
|
159
|
+
|
|
160
|
+
## Test Patterns
|
|
161
|
+
|
|
162
|
+
### Basic Tests
|
|
163
|
+
```cpp
|
|
164
|
+
TEST(SuiteName, TestName) {
|
|
165
|
+
EXPECT_EQ(add(2, 3), 5);
|
|
166
|
+
EXPECT_NE(result, nullptr);
|
|
167
|
+
EXPECT_TRUE(is_valid);
|
|
168
|
+
EXPECT_THROW(func(), std::invalid_argument);
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Fixtures
|
|
173
|
+
```cpp
|
|
174
|
+
class DatabaseTest : public ::testing::Test {
|
|
175
|
+
protected:
|
|
176
|
+
void SetUp() override { db_ = create_test_db(); }
|
|
177
|
+
void TearDown() override { db_.reset(); }
|
|
178
|
+
std::unique_ptr<Database> db_;
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
TEST_F(DatabaseTest, InsertsRecord) {
|
|
182
|
+
db_->insert("key", "value");
|
|
183
|
+
EXPECT_EQ(db_->get("key"), "value");
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Parameterized Tests
|
|
188
|
+
```cpp
|
|
189
|
+
class PrimeTest : public ::testing::TestWithParam<std::pair<int, bool>> {};
|
|
190
|
+
|
|
191
|
+
TEST_P(PrimeTest, ChecksPrimality) {
|
|
192
|
+
auto [input, expected] = GetParam();
|
|
193
|
+
EXPECT_EQ(is_prime(input), expected);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
INSTANTIATE_TEST_SUITE_P(Primes, PrimeTest, ::testing::Values(
|
|
197
|
+
std::make_pair(2, true),
|
|
198
|
+
std::make_pair(4, false),
|
|
199
|
+
std::make_pair(7, true)
|
|
200
|
+
));
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Coverage Commands
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
# Build with coverage
|
|
207
|
+
cmake -DCMAKE_CXX_FLAGS="--coverage" -DCMAKE_EXE_LINKER_FLAGS="--coverage" -B build
|
|
208
|
+
|
|
209
|
+
# Run tests
|
|
210
|
+
cmake --build build && ctest --test-dir build
|
|
211
|
+
|
|
212
|
+
# Generate coverage report
|
|
213
|
+
lcov --capture --directory build --output-file coverage.info
|
|
214
|
+
lcov --remove coverage.info '/usr/*' --output-file coverage.info
|
|
215
|
+
genhtml coverage.info --output-directory coverage_html
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## Coverage Targets
|
|
219
|
+
|
|
220
|
+
| Code Type | Target |
|
|
221
|
+
|-----------|--------|
|
|
222
|
+
| Critical business logic | 100% |
|
|
223
|
+
| Public APIs | 90%+ |
|
|
224
|
+
| General code | 80%+ |
|
|
225
|
+
| Generated code | Exclude |
|
|
226
|
+
|
|
227
|
+
## TDD Best Practices
|
|
228
|
+
|
|
229
|
+
**DO:**
|
|
230
|
+
- Write test FIRST, before any implementation
|
|
231
|
+
- Run tests after each change
|
|
232
|
+
- Use `EXPECT_*` (continues) over `ASSERT_*` (stops) when appropriate
|
|
233
|
+
- Test behavior, not implementation details
|
|
234
|
+
- Include edge cases (empty, null, max values, boundary conditions)
|
|
235
|
+
|
|
236
|
+
**DON'T:**
|
|
237
|
+
- Write implementation before tests
|
|
238
|
+
- Skip the RED phase
|
|
239
|
+
- Test private methods directly (test through public API)
|
|
240
|
+
- Use `sleep` in tests
|
|
241
|
+
- Ignore flaky tests
|
|
242
|
+
|
|
243
|
+
## Related Commands
|
|
244
|
+
|
|
245
|
+
- `/ccp:cpp-build` - Fix build errors
|
|
246
|
+
- `/ccp:cpp-review` - Review code after implementation
|
|
247
|
+
- `/ccp:verify` - Run full verification loop
|
|
248
|
+
|
|
249
|
+
## Related
|
|
250
|
+
|
|
251
|
+
- Skill: `skills/cpp-testing/`
|
|
252
|
+
- Skill: `skills/tdd-workflow/`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ccp:debug
|
|
3
3
|
description: Systematic debugging with persistent state across context resets
|
|
4
4
|
argument-hint: [issue description]
|
|
5
5
|
allowed-tools:
|
|
@@ -12,11 +12,16 @@ allowed-tools:
|
|
|
12
12
|
<objective>
|
|
13
13
|
Debug issues using scientific method with subagent isolation.
|
|
14
14
|
|
|
15
|
-
**Orchestrator role:** Gather symptoms, spawn
|
|
15
|
+
**Orchestrator role:** Gather symptoms, spawn ccp-debugger agent, handle checkpoints, spawn continuations.
|
|
16
16
|
|
|
17
17
|
**Why subagent:** Investigation burns context fast (reading files, forming hypotheses, testing). Fresh 200k context per investigation. Main context stays lean for user interaction.
|
|
18
18
|
</objective>
|
|
19
19
|
|
|
20
|
+
<available_agent_types>
|
|
21
|
+
Valid CCP subagent types (use exact names — do not fall back to 'general-purpose'):
|
|
22
|
+
- ccp-debugger — Diagnoses and fixes issues
|
|
23
|
+
</available_agent_types>
|
|
24
|
+
|
|
20
25
|
<context>
|
|
21
26
|
User's issue: $ARGUMENTS
|
|
22
27
|
|
|
@@ -31,13 +36,13 @@ ls .planning/debug/*.md 2>/dev/null | grep -v resolved | head -5
|
|
|
31
36
|
## 0. Initialize Context
|
|
32
37
|
|
|
33
38
|
```bash
|
|
34
|
-
INIT=$(node "$HOME/.claude/
|
|
39
|
+
INIT=$(node "$HOME/.claude/pilot/bin/ccp-tools.cjs" state load)
|
|
35
40
|
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
36
41
|
```
|
|
37
42
|
|
|
38
43
|
Extract `commit_docs` from init JSON. Resolve debugger model:
|
|
39
44
|
```bash
|
|
40
|
-
debugger_model=$(node "$HOME/.claude/
|
|
45
|
+
debugger_model=$(node "$HOME/.claude/pilot/bin/ccp-tools.cjs" resolve-model ccp-debugger --raw)
|
|
41
46
|
```
|
|
42
47
|
|
|
43
48
|
## 1. Check Active Sessions
|
|
@@ -61,7 +66,7 @@ Use AskUserQuestion for each:
|
|
|
61
66
|
|
|
62
67
|
After all gathered, confirm ready to investigate.
|
|
63
68
|
|
|
64
|
-
## 3. Spawn
|
|
69
|
+
## 3. Spawn ccp-debugger Agent
|
|
65
70
|
|
|
66
71
|
Fill prompt and spawn:
|
|
67
72
|
|
|
@@ -93,7 +98,7 @@ Create: .planning/debug/{slug}.md
|
|
|
93
98
|
```
|
|
94
99
|
Task(
|
|
95
100
|
prompt=filled_prompt,
|
|
96
|
-
subagent_type="
|
|
101
|
+
subagent_type="ccp-debugger",
|
|
97
102
|
model="{debugger_model}",
|
|
98
103
|
description="Debug {slug}"
|
|
99
104
|
)
|
|
@@ -105,7 +110,7 @@ Task(
|
|
|
105
110
|
- Display root cause and evidence summary
|
|
106
111
|
- Offer options:
|
|
107
112
|
- "Fix now" - spawn fix subagent
|
|
108
|
-
- "Plan fix" - suggest /
|
|
113
|
+
- "Plan fix" - suggest /ccp:plan-phase --gaps
|
|
109
114
|
- "Manual fix" - done
|
|
110
115
|
|
|
111
116
|
**If `## CHECKPOINT REACHED`:**
|
|
@@ -151,7 +156,7 @@ goal: find_and_fix
|
|
|
151
156
|
```
|
|
152
157
|
Task(
|
|
153
158
|
prompt=continuation_prompt,
|
|
154
|
-
subagent_type="
|
|
159
|
+
subagent_type="ccp-debugger",
|
|
155
160
|
model="{debugger_model}",
|
|
156
161
|
description="Continue debug {slug}"
|
|
157
162
|
)
|
|
@@ -162,7 +167,7 @@ Task(
|
|
|
162
167
|
<success_criteria>
|
|
163
168
|
- [ ] Active sessions checked
|
|
164
169
|
- [ ] Symptoms gathered (if new)
|
|
165
|
-
- [ ]
|
|
170
|
+
- [ ] ccp-debugger spawned with context
|
|
166
171
|
- [ ] Checkpoints handled correctly
|
|
167
172
|
- [ ] Root cause confirmed before fixing
|
|
168
173
|
</success_criteria>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:discuss-phase
|
|
3
|
+
description: Gather phase context through adaptive questioning before planning. Use --auto to skip interactive questions (Claude picks recommended defaults).
|
|
4
|
+
argument-hint: "<phase> [--auto] [--batch] [--analyze] [--text]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Bash
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- AskUserQuestion
|
|
12
|
+
- Task
|
|
13
|
+
- mcp__context7__resolve-library-id
|
|
14
|
+
- mcp__context7__query-docs
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
<objective>
|
|
18
|
+
Extract implementation decisions that downstream agents need — researcher and planner will use CONTEXT.md to know what to investigate and what choices are locked.
|
|
19
|
+
|
|
20
|
+
**How it works:**
|
|
21
|
+
1. Load prior context (PROJECT.md, REQUIREMENTS.md, STATE.md, prior CONTEXT.md files)
|
|
22
|
+
2. Scout codebase for reusable assets and patterns
|
|
23
|
+
3. Analyze phase — skip gray areas already decided in prior phases
|
|
24
|
+
4. Present remaining gray areas — user selects which to discuss
|
|
25
|
+
5. Deep-dive each selected area until satisfied
|
|
26
|
+
6. Create CONTEXT.md with decisions that guide research and planning
|
|
27
|
+
|
|
28
|
+
**Output:** `{phase_num}-CONTEXT.md` — decisions clear enough that downstream agents can act without asking the user again
|
|
29
|
+
</objective>
|
|
30
|
+
|
|
31
|
+
<execution_context>
|
|
32
|
+
@~/.claude/pilot/workflows/discuss-phase.md
|
|
33
|
+
@~/.claude/pilot/workflows/discuss-phase-assumptions.md
|
|
34
|
+
@~/.claude/pilot/templates/context.md
|
|
35
|
+
</execution_context>
|
|
36
|
+
|
|
37
|
+
<context>
|
|
38
|
+
Phase number: $ARGUMENTS (required)
|
|
39
|
+
|
|
40
|
+
Context files are resolved in-workflow using `init phase-op` and roadmap/state tool calls.
|
|
41
|
+
</context>
|
|
42
|
+
|
|
43
|
+
<process>
|
|
44
|
+
**Mode routing:**
|
|
45
|
+
```bash
|
|
46
|
+
DISCUSS_MODE=$(node "$HOME/.claude/pilot/bin/ccp-tools.cjs" config-get workflow.discuss_mode 2>/dev/null || echo "discuss")
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
If `DISCUSS_MODE` is `"assumptions"`: Read and execute @~/.claude/pilot/workflows/discuss-phase-assumptions.md end-to-end.
|
|
50
|
+
|
|
51
|
+
If `DISCUSS_MODE` is `"discuss"` (or unset, or any other value): Read and execute @~/.claude/pilot/workflows/discuss-phase.md end-to-end.
|
|
52
|
+
|
|
53
|
+
**MANDATORY:** The execution_context files listed above ARE the instructions. Read the workflow file BEFORE taking any action. The objective and success_criteria sections in this command file are summaries — the workflow file contains the complete step-by-step process with all required behaviors, config checks, and interaction patterns. Do not improvise from the summary.
|
|
54
|
+
</process>
|
|
55
|
+
|
|
56
|
+
<success_criteria>
|
|
57
|
+
- Prior context loaded and applied (no re-asking decided questions)
|
|
58
|
+
- Gray areas identified through intelligent analysis
|
|
59
|
+
- User chose which areas to discuss
|
|
60
|
+
- Each selected area explored until satisfied
|
|
61
|
+
- Scope creep redirected to deferred ideas
|
|
62
|
+
- CONTEXT.md captures decisions, not vague vision
|
|
63
|
+
- User knows next steps
|
|
64
|
+
</success_criteria>
|