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,313 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:kotlin-test
|
|
3
|
+
description: Enforce TDD workflow for Kotlin. Write Kotest tests first, then implement. Verify 80%+ coverage with Kover.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Kotlin TDD Command
|
|
7
|
+
|
|
8
|
+
This command enforces test-driven development methodology for Kotlin code using Kotest, MockK, and Kover.
|
|
9
|
+
|
|
10
|
+
## What This Command Does
|
|
11
|
+
|
|
12
|
+
1. **Define Types/Interfaces**: Scaffold function signatures first
|
|
13
|
+
2. **Write Kotest Tests**: Create comprehensive test specs (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 with Kover
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
Use `/ccp:kotlin-test` when:
|
|
22
|
+
- Implementing new Kotlin functions or classes
|
|
23
|
+
- Adding test coverage to existing Kotlin code
|
|
24
|
+
- Fixing bugs (write failing test first)
|
|
25
|
+
- Building critical business logic
|
|
26
|
+
- Learning TDD workflow in Kotlin
|
|
27
|
+
|
|
28
|
+
## TDD Cycle
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
RED -> Write failing Kotest 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
|
+
````text
|
|
40
|
+
User: /ccp:kotlin-test I need a function to validate user registration requests
|
|
41
|
+
|
|
42
|
+
Agent:
|
|
43
|
+
# TDD Session: Registration Validator
|
|
44
|
+
|
|
45
|
+
## Step 1: Define Interface
|
|
46
|
+
|
|
47
|
+
```kotlin
|
|
48
|
+
// validator/RegistrationValidator.kt
|
|
49
|
+
package com.example.validator
|
|
50
|
+
|
|
51
|
+
data class RegistrationRequest(
|
|
52
|
+
val name: String,
|
|
53
|
+
val email: String,
|
|
54
|
+
val password: String,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
sealed class ValidationResult {
|
|
58
|
+
data object Valid : ValidationResult()
|
|
59
|
+
data class Invalid(val errors: List<String>) : ValidationResult()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
fun validateRegistration(request: RegistrationRequest): ValidationResult {
|
|
63
|
+
TODO("not implemented")
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Step 2: Write Kotest Tests (RED)
|
|
68
|
+
|
|
69
|
+
```kotlin
|
|
70
|
+
// validator/RegistrationValidatorTest.kt
|
|
71
|
+
package com.example.validator
|
|
72
|
+
|
|
73
|
+
import io.kotest.core.spec.style.FunSpec
|
|
74
|
+
import io.kotest.matchers.shouldBe
|
|
75
|
+
import io.kotest.matchers.types.shouldBeInstanceOf
|
|
76
|
+
|
|
77
|
+
class RegistrationValidatorTest : FunSpec({
|
|
78
|
+
test("valid registration returns Valid") {
|
|
79
|
+
val request = RegistrationRequest(
|
|
80
|
+
name = "Alice",
|
|
81
|
+
email = "alice@example.com",
|
|
82
|
+
password = "SecureP@ss1",
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
val result = validateRegistration(request)
|
|
86
|
+
|
|
87
|
+
result.shouldBeInstanceOf<ValidationResult.Valid>()
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
test("blank name returns Invalid") {
|
|
91
|
+
val request = RegistrationRequest(
|
|
92
|
+
name = "",
|
|
93
|
+
email = "alice@example.com",
|
|
94
|
+
password = "SecureP@ss1",
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
val result = validateRegistration(request)
|
|
98
|
+
|
|
99
|
+
val invalid = result.shouldBeInstanceOf<ValidationResult.Invalid>()
|
|
100
|
+
invalid.errors shouldBe listOf("Name is required")
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
test("invalid email returns Invalid") {
|
|
104
|
+
val request = RegistrationRequest(
|
|
105
|
+
name = "Alice",
|
|
106
|
+
email = "not-an-email",
|
|
107
|
+
password = "SecureP@ss1",
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
val result = validateRegistration(request)
|
|
111
|
+
|
|
112
|
+
val invalid = result.shouldBeInstanceOf<ValidationResult.Invalid>()
|
|
113
|
+
invalid.errors shouldBe listOf("Invalid email format")
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
test("short password returns Invalid") {
|
|
117
|
+
val request = RegistrationRequest(
|
|
118
|
+
name = "Alice",
|
|
119
|
+
email = "alice@example.com",
|
|
120
|
+
password = "short",
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
val result = validateRegistration(request)
|
|
124
|
+
|
|
125
|
+
val invalid = result.shouldBeInstanceOf<ValidationResult.Invalid>()
|
|
126
|
+
invalid.errors shouldBe listOf("Password must be at least 8 characters")
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
test("multiple errors returns all errors") {
|
|
130
|
+
val request = RegistrationRequest(
|
|
131
|
+
name = "",
|
|
132
|
+
email = "bad",
|
|
133
|
+
password = "short",
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
val result = validateRegistration(request)
|
|
137
|
+
|
|
138
|
+
val invalid = result.shouldBeInstanceOf<ValidationResult.Invalid>()
|
|
139
|
+
invalid.errors.size shouldBe 3
|
|
140
|
+
}
|
|
141
|
+
})
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Step 3: Run Tests - Verify FAIL
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
$ ./gradlew test
|
|
148
|
+
|
|
149
|
+
RegistrationValidatorTest > valid registration returns Valid FAILED
|
|
150
|
+
kotlin.NotImplementedError: An operation is not implemented
|
|
151
|
+
|
|
152
|
+
FAILED (5 tests, 0 passed, 5 failed)
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
✓ Tests fail as expected (NotImplementedError).
|
|
156
|
+
|
|
157
|
+
## Step 4: Implement Minimal Code (GREEN)
|
|
158
|
+
|
|
159
|
+
```kotlin
|
|
160
|
+
// validator/RegistrationValidator.kt
|
|
161
|
+
package com.example.validator
|
|
162
|
+
|
|
163
|
+
private val EMAIL_REGEX = Regex("^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$")
|
|
164
|
+
private const val MIN_PASSWORD_LENGTH = 8
|
|
165
|
+
|
|
166
|
+
fun validateRegistration(request: RegistrationRequest): ValidationResult {
|
|
167
|
+
val errors = buildList {
|
|
168
|
+
if (request.name.isBlank()) add("Name is required")
|
|
169
|
+
if (!EMAIL_REGEX.matches(request.email)) add("Invalid email format")
|
|
170
|
+
if (request.password.length < MIN_PASSWORD_LENGTH) add("Password must be at least $MIN_PASSWORD_LENGTH characters")
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return if (errors.isEmpty()) ValidationResult.Valid
|
|
174
|
+
else ValidationResult.Invalid(errors)
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Step 5: Run Tests - Verify PASS
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
$ ./gradlew test
|
|
182
|
+
|
|
183
|
+
RegistrationValidatorTest > valid registration returns Valid PASSED
|
|
184
|
+
RegistrationValidatorTest > blank name returns Invalid PASSED
|
|
185
|
+
RegistrationValidatorTest > invalid email returns Invalid PASSED
|
|
186
|
+
RegistrationValidatorTest > short password returns Invalid PASSED
|
|
187
|
+
RegistrationValidatorTest > multiple errors returns all errors PASSED
|
|
188
|
+
|
|
189
|
+
PASSED (5 tests, 5 passed, 0 failed)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
✓ All tests passing!
|
|
193
|
+
|
|
194
|
+
## Step 6: Check Coverage
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
$ ./gradlew koverHtmlReport
|
|
198
|
+
|
|
199
|
+
Coverage: 100.0% of statements
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
✓ Coverage: 100%
|
|
203
|
+
|
|
204
|
+
## TDD Complete!
|
|
205
|
+
````
|
|
206
|
+
|
|
207
|
+
## Test Patterns
|
|
208
|
+
|
|
209
|
+
### StringSpec (Simplest)
|
|
210
|
+
|
|
211
|
+
```kotlin
|
|
212
|
+
class CalculatorTest : StringSpec({
|
|
213
|
+
"add two positive numbers" {
|
|
214
|
+
Calculator.add(2, 3) shouldBe 5
|
|
215
|
+
}
|
|
216
|
+
})
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### BehaviorSpec (BDD)
|
|
220
|
+
|
|
221
|
+
```kotlin
|
|
222
|
+
class OrderServiceTest : BehaviorSpec({
|
|
223
|
+
Given("a valid order") {
|
|
224
|
+
When("placed") {
|
|
225
|
+
Then("should be confirmed") { /* ... */ }
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
})
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Data-Driven Tests
|
|
232
|
+
|
|
233
|
+
```kotlin
|
|
234
|
+
class ParserTest : FunSpec({
|
|
235
|
+
context("valid inputs") {
|
|
236
|
+
withData("2026-01-15", "2026-12-31", "2000-01-01") { input ->
|
|
237
|
+
parseDate(input).shouldNotBeNull()
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
})
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Coroutine Testing
|
|
244
|
+
|
|
245
|
+
```kotlin
|
|
246
|
+
class AsyncServiceTest : FunSpec({
|
|
247
|
+
test("concurrent fetch completes") {
|
|
248
|
+
runTest {
|
|
249
|
+
val result = service.fetchAll()
|
|
250
|
+
result.shouldNotBeEmpty()
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
})
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## Coverage Commands
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# Run tests with coverage
|
|
260
|
+
./gradlew koverHtmlReport
|
|
261
|
+
|
|
262
|
+
# Verify coverage thresholds
|
|
263
|
+
./gradlew koverVerify
|
|
264
|
+
|
|
265
|
+
# XML report for CI
|
|
266
|
+
./gradlew koverXmlReport
|
|
267
|
+
|
|
268
|
+
# Open HTML report
|
|
269
|
+
open build/reports/kover/html/index.html
|
|
270
|
+
|
|
271
|
+
# Run specific test class
|
|
272
|
+
./gradlew test --tests "com.example.UserServiceTest"
|
|
273
|
+
|
|
274
|
+
# Run with verbose output
|
|
275
|
+
./gradlew test --info
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## Coverage Targets
|
|
279
|
+
|
|
280
|
+
| Code Type | Target |
|
|
281
|
+
|-----------|--------|
|
|
282
|
+
| Critical business logic | 100% |
|
|
283
|
+
| Public APIs | 90%+ |
|
|
284
|
+
| General code | 80%+ |
|
|
285
|
+
| Generated code | Exclude |
|
|
286
|
+
|
|
287
|
+
## TDD Best Practices
|
|
288
|
+
|
|
289
|
+
**DO:**
|
|
290
|
+
- Write test FIRST, before any implementation
|
|
291
|
+
- Run tests after each change
|
|
292
|
+
- Use Kotest matchers for expressive assertions
|
|
293
|
+
- Use MockK's `coEvery`/`coVerify` for suspend functions
|
|
294
|
+
- Test behavior, not implementation details
|
|
295
|
+
- Include edge cases (empty, null, max values)
|
|
296
|
+
|
|
297
|
+
**DON'T:**
|
|
298
|
+
- Write implementation before tests
|
|
299
|
+
- Skip the RED phase
|
|
300
|
+
- Test private functions directly
|
|
301
|
+
- Use `Thread.sleep()` in coroutine tests
|
|
302
|
+
- Ignore flaky tests
|
|
303
|
+
|
|
304
|
+
## Related Commands
|
|
305
|
+
|
|
306
|
+
- `/ccp:kotlin-build` - Fix build errors
|
|
307
|
+
- `/ccp:kotlin-review` - Review code after implementation
|
|
308
|
+
- `/ccp:verify` - Run full verification loop
|
|
309
|
+
|
|
310
|
+
## Related
|
|
311
|
+
|
|
312
|
+
- Skill: `skills/kotlin-testing/`
|
|
313
|
+
- Skill: `skills/tdd-workflow/`
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
name: ccp:learn
|
|
3
|
+
description: "Extract reusable patterns from the current session into skills"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /ccp:learn - Extract Reusable Patterns
|
|
2
7
|
|
|
3
8
|
Analyze the current session and extract any patterns worth saving as skills.
|
|
4
9
|
|
|
5
10
|
## Trigger
|
|
6
11
|
|
|
7
|
-
Run `/learn` at any point during a session when you've solved a non-trivial problem.
|
|
12
|
+
Run `/ccp:learn` at any point during a session when you've solved a non-trivial problem.
|
|
8
13
|
|
|
9
14
|
## What to Extract
|
|
10
15
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ccp:list-phase-assumptions
|
|
3
3
|
description: Surface Claude's assumptions about a phase approach before planning
|
|
4
4
|
argument-hint: "[phase]"
|
|
5
5
|
allowed-tools:
|
|
@@ -17,7 +17,7 @@ Output: Conversational output only (no file creation) - ends with "What do you t
|
|
|
17
17
|
</objective>
|
|
18
18
|
|
|
19
19
|
<execution_context>
|
|
20
|
-
@~/.claude/
|
|
20
|
+
@~/.claude/pilot/workflows/list-phase-assumptions.md
|
|
21
21
|
</execution_context>
|
|
22
22
|
|
|
23
23
|
<context>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:manager
|
|
3
|
+
description: Interactive command center for managing multiple phases from one terminal
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Write
|
|
7
|
+
- Bash
|
|
8
|
+
- Glob
|
|
9
|
+
- Grep
|
|
10
|
+
- AskUserQuestion
|
|
11
|
+
- Task
|
|
12
|
+
---
|
|
13
|
+
<objective>
|
|
14
|
+
Single-terminal command center for managing a milestone. Shows a dashboard of all phases with visual status indicators, recommends optimal next actions, and dispatches work — discuss runs inline, plan/execute run as background agents.
|
|
15
|
+
|
|
16
|
+
Designed for power users who want to parallelize work across phases from one terminal: discuss a phase while another plans or executes in the background.
|
|
17
|
+
|
|
18
|
+
**Creates/Updates:**
|
|
19
|
+
- No files created directly — dispatches to existing CCP commands via Skill() and background Task agents.
|
|
20
|
+
- Reads `.planning/STATE.md`, `.planning/ROADMAP.md`, phase directories for status.
|
|
21
|
+
|
|
22
|
+
**After:** User exits when done managing, or all phases complete and milestone lifecycle is suggested.
|
|
23
|
+
</objective>
|
|
24
|
+
|
|
25
|
+
<execution_context>
|
|
26
|
+
@~/.claude/pilot/workflows/manager.md
|
|
27
|
+
@~/.claude/pilot/references/ui-brand.md
|
|
28
|
+
</execution_context>
|
|
29
|
+
|
|
30
|
+
<context>
|
|
31
|
+
No arguments required. Requires an active milestone with ROADMAP.md and STATE.md.
|
|
32
|
+
|
|
33
|
+
Project context, phase list, dependencies, and recommendations are resolved inside the workflow using `ccp-tools.cjs init manager`. No upfront context loading needed.
|
|
34
|
+
</context>
|
|
35
|
+
|
|
36
|
+
<process>
|
|
37
|
+
Execute the manager workflow from @~/.claude/pilot/workflows/manager.md end-to-end.
|
|
38
|
+
Maintain the dashboard refresh loop until the user exits or all phases complete.
|
|
39
|
+
</process>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ccp:map-codebase
|
|
3
3
|
description: Analyze codebase with parallel mapper agents to produce .planning/codebase/ documents
|
|
4
4
|
argument-hint: "[optional: specific area to map, e.g., 'api' or 'auth']"
|
|
5
5
|
allowed-tools:
|
|
@@ -12,7 +12,7 @@ allowed-tools:
|
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
<objective>
|
|
15
|
-
Analyze existing codebase using parallel
|
|
15
|
+
Analyze existing codebase using parallel ccp-codebase-mapper agents to produce structured codebase documents.
|
|
16
16
|
|
|
17
17
|
Each mapper agent explores a focus area and **writes documents directly** to `.planning/codebase/`. The orchestrator only receives confirmations, keeping context usage minimal.
|
|
18
18
|
|
|
@@ -20,7 +20,7 @@ Output: .planning/codebase/ folder with 7 structured documents about the codebas
|
|
|
20
20
|
</objective>
|
|
21
21
|
|
|
22
22
|
<execution_context>
|
|
23
|
-
@~/.claude/
|
|
23
|
+
@~/.claude/pilot/workflows/map-codebase.md
|
|
24
24
|
</execution_context>
|
|
25
25
|
|
|
26
26
|
<context>
|
|
@@ -30,8 +30,8 @@ Focus area: $ARGUMENTS (optional - if provided, tells agents to focus on specifi
|
|
|
30
30
|
Check for .planning/STATE.md - loads context if project already initialized
|
|
31
31
|
|
|
32
32
|
**This command can run:**
|
|
33
|
-
- Before /
|
|
34
|
-
- After /
|
|
33
|
+
- Before /ccp:new-project (brownfield codebases) - creates codebase map first
|
|
34
|
+
- After /ccp:new-project (greenfield codebases) - updates codebase map as code evolves
|
|
35
35
|
- Anytime to refresh codebase understanding
|
|
36
36
|
</context>
|
|
37
37
|
|
|
@@ -51,7 +51,7 @@ Check for .planning/STATE.md - loads context if project already initialized
|
|
|
51
51
|
<process>
|
|
52
52
|
1. Check if .planning/codebase/ already exists (offer to refresh or skip)
|
|
53
53
|
2. Create .planning/codebase/ directory structure
|
|
54
|
-
3. Spawn 4 parallel
|
|
54
|
+
3. Spawn 4 parallel ccp-codebase-mapper agents:
|
|
55
55
|
- Agent 1: tech focus → writes STACK.md, INTEGRATIONS.md
|
|
56
56
|
- Agent 2: arch focus → writes ARCHITECTURE.md, STRUCTURE.md
|
|
57
57
|
- Agent 3: quality focus → writes CONVENTIONS.md, TESTING.md
|
|
@@ -59,7 +59,7 @@ Check for .planning/STATE.md - loads context if project already initialized
|
|
|
59
59
|
4. Wait for agents to complete, collect confirmations (NOT document contents)
|
|
60
60
|
5. Verify all 7 documents exist with line counts
|
|
61
61
|
6. Commit codebase map
|
|
62
|
-
7. Offer next steps (typically: /
|
|
62
|
+
7. Offer next steps (typically: /ccp:new-project or /ccp:plan-phase)
|
|
63
63
|
</process>
|
|
64
64
|
|
|
65
65
|
<success_criteria>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: prompt
|
|
3
|
+
name: ccp:milestone-summary
|
|
4
|
+
description: Generate a comprehensive project summary from milestone artifacts for team onboarding and review
|
|
5
|
+
argument-hint: "[version]"
|
|
6
|
+
allowed-tools:
|
|
7
|
+
- Read
|
|
8
|
+
- Write
|
|
9
|
+
- Bash
|
|
10
|
+
- Grep
|
|
11
|
+
- Glob
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
<objective>
|
|
15
|
+
Generate a structured milestone summary for team onboarding and project review. Reads completed milestone artifacts (ROADMAP, REQUIREMENTS, CONTEXT, SUMMARY, VERIFICATION files) and produces a human-friendly overview of what was built, how, and why.
|
|
16
|
+
|
|
17
|
+
Purpose: Enable new team members to understand a completed project by reading one document and asking follow-up questions.
|
|
18
|
+
Output: MILESTONE_SUMMARY written to `.planning/reports/`, presented inline, optional interactive Q&A.
|
|
19
|
+
</objective>
|
|
20
|
+
|
|
21
|
+
<execution_context>
|
|
22
|
+
@~/.claude/pilot/workflows/milestone-summary.md
|
|
23
|
+
</execution_context>
|
|
24
|
+
|
|
25
|
+
<context>
|
|
26
|
+
**Project files:**
|
|
27
|
+
- `.planning/ROADMAP.md`
|
|
28
|
+
- `.planning/PROJECT.md`
|
|
29
|
+
- `.planning/STATE.md`
|
|
30
|
+
- `.planning/RETROSPECTIVE.md`
|
|
31
|
+
- `.planning/milestones/v{version}-ROADMAP.md` (if archived)
|
|
32
|
+
- `.planning/milestones/v{version}-REQUIREMENTS.md` (if archived)
|
|
33
|
+
- `.planning/phases/*-*/` (SUMMARY.md, VERIFICATION.md, CONTEXT.md, RESEARCH.md)
|
|
34
|
+
|
|
35
|
+
**User input:**
|
|
36
|
+
- Version: $ARGUMENTS (optional — defaults to current/latest milestone)
|
|
37
|
+
</context>
|
|
38
|
+
|
|
39
|
+
<process>
|
|
40
|
+
Read and execute the milestone-summary workflow from @~/.claude/pilot/workflows/milestone-summary.md end-to-end.
|
|
41
|
+
</process>
|
|
42
|
+
|
|
43
|
+
<success_criteria>
|
|
44
|
+
- Milestone version resolved (from args, STATE.md, or archive scan)
|
|
45
|
+
- All available artifacts read (ROADMAP, REQUIREMENTS, CONTEXT, SUMMARY, VERIFICATION, RESEARCH, RETROSPECTIVE)
|
|
46
|
+
- Summary document written to `.planning/reports/MILESTONE_SUMMARY-v{version}.md`
|
|
47
|
+
- All 7 sections generated (Overview, Architecture, Phases, Decisions, Requirements, Tech Debt, Getting Started)
|
|
48
|
+
- Summary presented inline to user
|
|
49
|
+
- Interactive Q&A offered
|
|
50
|
+
- STATE.md updated
|
|
51
|
+
</success_criteria>
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:model-route
|
|
3
|
+
description: "Recommend the best model tier for the current task by complexity and budget"
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Model Route Command
|
|
2
7
|
|
|
3
8
|
Recommend the best model tier for the current task by complexity and budget.
|
|
4
9
|
|
|
5
10
|
## Usage
|
|
6
11
|
|
|
7
|
-
`/model-route [task-description] [--budget low|med|high]`
|
|
12
|
+
`/ccp:model-route [task-description] [--budget low|med|high]`
|
|
8
13
|
|
|
9
14
|
## Routing Heuristic
|
|
10
15
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ccp:new-milestone
|
|
3
3
|
description: Start a new milestone cycle — update PROJECT.md and route to requirements
|
|
4
4
|
argument-hint: "[milestone name, e.g., 'v1.1 Notifications']"
|
|
5
5
|
allowed-tools:
|
|
@@ -21,15 +21,15 @@ Brownfield equivalent of new-project. Project exists, PROJECT.md has history. Ga
|
|
|
21
21
|
- `.planning/ROADMAP.md` — phase structure (continues numbering)
|
|
22
22
|
- `.planning/STATE.md` — reset for new milestone
|
|
23
23
|
|
|
24
|
-
**After:** `/
|
|
24
|
+
**After:** `/ccp:plan-phase [N]` to start execution.
|
|
25
25
|
</objective>
|
|
26
26
|
|
|
27
27
|
<execution_context>
|
|
28
|
-
@~/.claude/
|
|
29
|
-
@~/.claude/
|
|
30
|
-
@~/.claude/
|
|
31
|
-
@~/.claude/
|
|
32
|
-
@~/.claude/
|
|
28
|
+
@~/.claude/pilot/workflows/new-milestone.md
|
|
29
|
+
@~/.claude/pilot/references/questioning.md
|
|
30
|
+
@~/.claude/pilot/references/ui-brand.md
|
|
31
|
+
@~/.claude/pilot/templates/project.md
|
|
32
|
+
@~/.claude/pilot/templates/requirements.md
|
|
33
33
|
</execution_context>
|
|
34
34
|
|
|
35
35
|
<context>
|
|
@@ -39,6 +39,6 @@ Project and milestone context files are resolved inside the workflow (`init new-
|
|
|
39
39
|
</context>
|
|
40
40
|
|
|
41
41
|
<process>
|
|
42
|
-
Execute the new-milestone workflow from @~/.claude/
|
|
42
|
+
Execute the new-milestone workflow from @~/.claude/pilot/workflows/new-milestone.md end-to-end.
|
|
43
43
|
Preserve all workflow gates (validation, questioning, research, requirements, roadmap approval, commits).
|
|
44
44
|
</process>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ccp:new-project
|
|
3
3
|
description: Initialize a new project with deep context gathering and PROJECT.md
|
|
4
4
|
argument-hint: "[--auto]"
|
|
5
5
|
allowed-tools:
|
|
@@ -25,18 +25,18 @@ Initialize a new project through unified flow: questioning → research (optiona
|
|
|
25
25
|
- `.planning/ROADMAP.md` — phase structure
|
|
26
26
|
- `.planning/STATE.md` — project memory
|
|
27
27
|
|
|
28
|
-
**After this command:** Run `/
|
|
28
|
+
**After this command:** Run `/ccp:plan-phase 1` to start execution.
|
|
29
29
|
</objective>
|
|
30
30
|
|
|
31
31
|
<execution_context>
|
|
32
|
-
@~/.claude/
|
|
33
|
-
@~/.claude/
|
|
34
|
-
@~/.claude/
|
|
35
|
-
@~/.claude/
|
|
36
|
-
@~/.claude/
|
|
32
|
+
@~/.claude/pilot/workflows/new-project.md
|
|
33
|
+
@~/.claude/pilot/references/questioning.md
|
|
34
|
+
@~/.claude/pilot/references/ui-brand.md
|
|
35
|
+
@~/.claude/pilot/templates/project.md
|
|
36
|
+
@~/.claude/pilot/templates/requirements.md
|
|
37
37
|
</execution_context>
|
|
38
38
|
|
|
39
39
|
<process>
|
|
40
|
-
Execute the new-project workflow from @~/.claude/
|
|
40
|
+
Execute the new-project workflow from @~/.claude/pilot/workflows/new-project.md end-to-end.
|
|
41
41
|
Preserve all workflow gates (validation, approvals, commits, routing).
|
|
42
42
|
</process>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:next
|
|
3
|
+
description: Automatically advance to the next logical step in the CCP workflow
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Bash
|
|
7
|
+
- Grep
|
|
8
|
+
- Glob
|
|
9
|
+
- SlashCommand
|
|
10
|
+
---
|
|
11
|
+
<objective>
|
|
12
|
+
Detect the current project state and automatically invoke the next logical CCP workflow step.
|
|
13
|
+
No arguments needed — reads STATE.md, ROADMAP.md, and phase directories to determine what comes next.
|
|
14
|
+
|
|
15
|
+
Designed for rapid multi-project workflows where remembering which phase/step you're on is overhead.
|
|
16
|
+
</objective>
|
|
17
|
+
|
|
18
|
+
<execution_context>
|
|
19
|
+
@~/.claude/pilot/workflows/next.md
|
|
20
|
+
</execution_context>
|
|
21
|
+
|
|
22
|
+
<process>
|
|
23
|
+
Execute the next workflow from @~/.claude/pilot/workflows/next.md end-to-end.
|
|
24
|
+
</process>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:note
|
|
3
|
+
description: Zero-friction idea capture. Append, list, or promote notes to todos.
|
|
4
|
+
argument-hint: "<text> | list | promote <N> [--global]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Glob
|
|
9
|
+
- Grep
|
|
10
|
+
---
|
|
11
|
+
<objective>
|
|
12
|
+
Zero-friction idea capture — one Write call, one confirmation line.
|
|
13
|
+
|
|
14
|
+
Three subcommands:
|
|
15
|
+
- **append** (default): Save a timestamped note file. No questions, no formatting.
|
|
16
|
+
- **list**: Show all notes from project and global scopes.
|
|
17
|
+
- **promote**: Convert a note into a structured todo.
|
|
18
|
+
|
|
19
|
+
Runs inline — no Task, no AskUserQuestion, no Bash.
|
|
20
|
+
</objective>
|
|
21
|
+
|
|
22
|
+
<execution_context>
|
|
23
|
+
@~/.claude/pilot/workflows/note.md
|
|
24
|
+
@~/.claude/pilot/references/ui-brand.md
|
|
25
|
+
</execution_context>
|
|
26
|
+
|
|
27
|
+
<context>
|
|
28
|
+
$ARGUMENTS
|
|
29
|
+
</context>
|
|
30
|
+
|
|
31
|
+
<process>
|
|
32
|
+
Execute the note workflow from @~/.claude/pilot/workflows/note.md end-to-end.
|
|
33
|
+
Capture the note, list notes, or promote to todo — depending on arguments.
|
|
34
|
+
</process>
|