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,309 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:rust-test
|
|
3
|
+
description: Enforce TDD workflow for Rust. Write tests first, then implement. Verify 80%+ coverage with cargo-llvm-cov.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Rust TDD Command
|
|
7
|
+
|
|
8
|
+
This command enforces test-driven development methodology for Rust code using `#[test]`, rstest, proptest, and mockall.
|
|
9
|
+
|
|
10
|
+
## What This Command Does
|
|
11
|
+
|
|
12
|
+
1. **Define Types/Traits**: Scaffold function signatures with `todo!()`
|
|
13
|
+
2. **Write Tests**: Create comprehensive test module (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 cargo-llvm-cov
|
|
18
|
+
|
|
19
|
+
## When to Use
|
|
20
|
+
|
|
21
|
+
Use `/ccp:rust-test` when:
|
|
22
|
+
- Implementing new Rust functions, methods, or traits
|
|
23
|
+
- Adding test coverage to existing Rust code
|
|
24
|
+
- Fixing bugs (write failing test first)
|
|
25
|
+
- Building critical business logic
|
|
26
|
+
- Learning TDD workflow in Rust
|
|
27
|
+
|
|
28
|
+
## TDD Cycle
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
RED -> Write failing test first
|
|
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:rust-test I need a function to validate user registration
|
|
41
|
+
|
|
42
|
+
Agent:
|
|
43
|
+
# TDD Session: Registration Validator
|
|
44
|
+
|
|
45
|
+
## Step 1: Define Interface
|
|
46
|
+
|
|
47
|
+
```rust
|
|
48
|
+
// src/validator.rs
|
|
49
|
+
pub struct RegistrationRequest {
|
|
50
|
+
pub name: String,
|
|
51
|
+
pub email: String,
|
|
52
|
+
pub password: String,
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
pub enum ValidationResult {
|
|
56
|
+
Valid,
|
|
57
|
+
Invalid(Vec<String>),
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
pub fn validate_registration(request: &RegistrationRequest) -> ValidationResult {
|
|
61
|
+
todo!()
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Step 2: Write Tests (RED)
|
|
66
|
+
|
|
67
|
+
```rust
|
|
68
|
+
#[cfg(test)]
|
|
69
|
+
mod tests {
|
|
70
|
+
use super::*;
|
|
71
|
+
|
|
72
|
+
#[test]
|
|
73
|
+
fn valid_registration_returns_valid() {
|
|
74
|
+
let request = RegistrationRequest {
|
|
75
|
+
name: "Alice".into(),
|
|
76
|
+
email: "alice@example.com".into(),
|
|
77
|
+
password: "SecureP@ss1".into(),
|
|
78
|
+
};
|
|
79
|
+
assert!(matches!(validate_registration(&request), ValidationResult::Valid));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
#[test]
|
|
83
|
+
fn blank_name_returns_invalid() {
|
|
84
|
+
let request = RegistrationRequest {
|
|
85
|
+
name: "".into(),
|
|
86
|
+
email: "alice@example.com".into(),
|
|
87
|
+
password: "SecureP@ss1".into(),
|
|
88
|
+
};
|
|
89
|
+
match validate_registration(&request) {
|
|
90
|
+
ValidationResult::Invalid(errors) => {
|
|
91
|
+
assert!(errors.contains(&"Name is required".to_string()));
|
|
92
|
+
}
|
|
93
|
+
ValidationResult::Valid => panic!("expected Invalid"),
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
#[test]
|
|
98
|
+
fn invalid_email_returns_invalid() {
|
|
99
|
+
let request = RegistrationRequest {
|
|
100
|
+
name: "Alice".into(),
|
|
101
|
+
email: "not-an-email".into(),
|
|
102
|
+
password: "SecureP@ss1".into(),
|
|
103
|
+
};
|
|
104
|
+
assert!(matches!(
|
|
105
|
+
validate_registration(&request),
|
|
106
|
+
ValidationResult::Invalid(_)
|
|
107
|
+
));
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
#[test]
|
|
111
|
+
fn short_password_returns_invalid() {
|
|
112
|
+
let request = RegistrationRequest {
|
|
113
|
+
name: "Alice".into(),
|
|
114
|
+
email: "alice@example.com".into(),
|
|
115
|
+
password: "short".into(),
|
|
116
|
+
};
|
|
117
|
+
assert!(matches!(
|
|
118
|
+
validate_registration(&request),
|
|
119
|
+
ValidationResult::Invalid(_)
|
|
120
|
+
));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Step 3: Run Tests — Verify FAIL
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
$ cargo test
|
|
129
|
+
running 4 tests
|
|
130
|
+
test tests::valid_registration_returns_valid ... FAILED (not yet implemented)
|
|
131
|
+
test tests::blank_name_returns_invalid ... FAILED
|
|
132
|
+
test tests::invalid_email_returns_invalid ... FAILED
|
|
133
|
+
test tests::short_password_returns_invalid ... FAILED
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Tests fail as expected (todo! panic).
|
|
137
|
+
|
|
138
|
+
## Step 4: Implement Minimal Code (GREEN)
|
|
139
|
+
|
|
140
|
+
```rust
|
|
141
|
+
pub fn validate_registration(request: &RegistrationRequest) -> ValidationResult {
|
|
142
|
+
let mut errors = Vec::new();
|
|
143
|
+
|
|
144
|
+
if request.name.trim().is_empty() {
|
|
145
|
+
errors.push("Name is required".into());
|
|
146
|
+
}
|
|
147
|
+
if !request.email.contains('@') {
|
|
148
|
+
errors.push("Invalid email format".into());
|
|
149
|
+
}
|
|
150
|
+
if request.password.len() < 8 {
|
|
151
|
+
errors.push("Password must be at least 8 characters".into());
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if errors.is_empty() {
|
|
155
|
+
ValidationResult::Valid
|
|
156
|
+
} else {
|
|
157
|
+
ValidationResult::Invalid(errors)
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Step 5: Run Tests — Verify PASS
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
$ cargo test
|
|
166
|
+
running 4 tests
|
|
167
|
+
test tests::valid_registration_returns_valid ... ok
|
|
168
|
+
test tests::blank_name_returns_invalid ... ok
|
|
169
|
+
test tests::invalid_email_returns_invalid ... ok
|
|
170
|
+
test tests::short_password_returns_invalid ... ok
|
|
171
|
+
|
|
172
|
+
test result: ok. 4 passed; 0 failed
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
All tests passing!
|
|
176
|
+
|
|
177
|
+
## Step 6: Check Coverage
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
$ cargo llvm-cov
|
|
181
|
+
Coverage: 100.0% of lines
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Coverage: 100%
|
|
185
|
+
|
|
186
|
+
## TDD Complete!
|
|
187
|
+
````
|
|
188
|
+
|
|
189
|
+
## Test Patterns
|
|
190
|
+
|
|
191
|
+
### Unit Tests
|
|
192
|
+
|
|
193
|
+
```rust
|
|
194
|
+
#[cfg(test)]
|
|
195
|
+
mod tests {
|
|
196
|
+
use super::*;
|
|
197
|
+
|
|
198
|
+
#[test]
|
|
199
|
+
fn adds_two_numbers() {
|
|
200
|
+
assert_eq!(add(2, 3), 5);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
#[test]
|
|
204
|
+
fn handles_error() -> Result<(), Box<dyn std::error::Error>> {
|
|
205
|
+
let result = parse_config(r#"port = 8080"#)?;
|
|
206
|
+
assert_eq!(result.port, 8080);
|
|
207
|
+
Ok(())
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Parameterized Tests with rstest
|
|
213
|
+
|
|
214
|
+
```rust
|
|
215
|
+
use rstest::{rstest, fixture};
|
|
216
|
+
|
|
217
|
+
#[rstest]
|
|
218
|
+
#[case("hello", 5)]
|
|
219
|
+
#[case("", 0)]
|
|
220
|
+
#[case("rust", 4)]
|
|
221
|
+
fn test_string_length(#[case] input: &str, #[case] expected: usize) {
|
|
222
|
+
assert_eq!(input.len(), expected);
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Async Tests
|
|
227
|
+
|
|
228
|
+
```rust
|
|
229
|
+
#[tokio::test]
|
|
230
|
+
async fn fetches_data_successfully() {
|
|
231
|
+
let client = TestClient::new().await;
|
|
232
|
+
let result = client.get("/data").await;
|
|
233
|
+
assert!(result.is_ok());
|
|
234
|
+
}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Property-Based Tests
|
|
238
|
+
|
|
239
|
+
```rust
|
|
240
|
+
use proptest::prelude::*;
|
|
241
|
+
|
|
242
|
+
proptest! {
|
|
243
|
+
#[test]
|
|
244
|
+
fn encode_decode_roundtrip(input in ".*") {
|
|
245
|
+
let encoded = encode(&input);
|
|
246
|
+
let decoded = decode(&encoded).unwrap();
|
|
247
|
+
assert_eq!(input, decoded);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Coverage Commands
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
# Summary report
|
|
256
|
+
cargo llvm-cov
|
|
257
|
+
|
|
258
|
+
# HTML report
|
|
259
|
+
cargo llvm-cov --html
|
|
260
|
+
|
|
261
|
+
# Fail if below threshold
|
|
262
|
+
cargo llvm-cov --fail-under-lines 80
|
|
263
|
+
|
|
264
|
+
# Run specific test
|
|
265
|
+
cargo test test_name
|
|
266
|
+
|
|
267
|
+
# Run with output
|
|
268
|
+
cargo test -- --nocapture
|
|
269
|
+
|
|
270
|
+
# Run without stopping on first failure
|
|
271
|
+
cargo test --no-fail-fast
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## Coverage Targets
|
|
275
|
+
|
|
276
|
+
| Code Type | Target |
|
|
277
|
+
|-----------|--------|
|
|
278
|
+
| Critical business logic | 100% |
|
|
279
|
+
| Public API | 90%+ |
|
|
280
|
+
| General code | 80%+ |
|
|
281
|
+
| Generated / FFI bindings | Exclude |
|
|
282
|
+
|
|
283
|
+
## TDD Best Practices
|
|
284
|
+
|
|
285
|
+
**DO:**
|
|
286
|
+
- Write test FIRST, before any implementation
|
|
287
|
+
- Run tests after each change
|
|
288
|
+
- Use `assert_eq!` over `assert!` for better error messages
|
|
289
|
+
- Use `?` in tests that return `Result` for cleaner output
|
|
290
|
+
- Test behavior, not implementation
|
|
291
|
+
- Include edge cases (empty, boundary, error paths)
|
|
292
|
+
|
|
293
|
+
**DON'T:**
|
|
294
|
+
- Write implementation before tests
|
|
295
|
+
- Skip the RED phase
|
|
296
|
+
- Use `#[should_panic]` when `Result::is_err()` works
|
|
297
|
+
- Use `sleep()` in tests — use channels or `tokio::time::pause()`
|
|
298
|
+
- Mock everything — prefer integration tests when feasible
|
|
299
|
+
|
|
300
|
+
## Related Commands
|
|
301
|
+
|
|
302
|
+
- `/ccp:rust-build` - Fix build errors
|
|
303
|
+
- `/ccp:rust-review` - Review code after implementation
|
|
304
|
+
- `/ccp:verify` - Run full verification loop
|
|
305
|
+
|
|
306
|
+
## Related
|
|
307
|
+
|
|
308
|
+
- Skill: `skills/rust-testing/`
|
|
309
|
+
- Skill: `skills/rust-patterns/`
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: ccp:save-session
|
|
2
3
|
description: Save current session state to a dated file in ~/.claude/sessions/ so work can be resumed in a future session with full context.
|
|
3
4
|
---
|
|
4
5
|
|
|
@@ -270,6 +271,6 @@ Then test with Postman — the response should include a `Set-Cookie` header.
|
|
|
270
271
|
- Each session gets its own file — never append to a previous session's file
|
|
271
272
|
- The "What Did NOT Work" section is the most critical — future sessions will blindly retry failed approaches without it
|
|
272
273
|
- If the user asks to save mid-session (not just at the end), save what's known so far and mark in-progress items clearly
|
|
273
|
-
- The file is meant to be read by Claude at the start of the next session via `/resume-session`
|
|
274
|
+
- The file is meant to be read by Claude at the start of the next session via `/ccp:resume-session`
|
|
274
275
|
- Use the canonical global session store: `~/.claude/sessions/`
|
|
275
276
|
- Prefer the short-id filename form (`YYYY-MM-DD-<short-id>-session.tmp`) for any new session file
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:secure-phase
|
|
3
|
+
description: Retroactively verify threat mitigations for a completed phase
|
|
4
|
+
argument-hint: "[phase number]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Edit
|
|
9
|
+
- Bash
|
|
10
|
+
- Glob
|
|
11
|
+
- Grep
|
|
12
|
+
- Task
|
|
13
|
+
- AskUserQuestion
|
|
14
|
+
---
|
|
15
|
+
<objective>
|
|
16
|
+
Verify threat mitigations for a completed phase. Three states:
|
|
17
|
+
- (A) SECURITY.md exists — audit and verify mitigations
|
|
18
|
+
- (B) No SECURITY.md, PLAN.md with threat model exists — run from artifacts
|
|
19
|
+
- (C) Phase not executed — exit with guidance
|
|
20
|
+
|
|
21
|
+
Output: updated SECURITY.md.
|
|
22
|
+
</objective>
|
|
23
|
+
|
|
24
|
+
<execution_context>
|
|
25
|
+
@~/.claude/pilot/workflows/secure-phase.md
|
|
26
|
+
</execution_context>
|
|
27
|
+
|
|
28
|
+
<context>
|
|
29
|
+
Phase: $ARGUMENTS — optional, defaults to last completed phase.
|
|
30
|
+
</context>
|
|
31
|
+
|
|
32
|
+
<process>
|
|
33
|
+
Execute @~/.claude/pilot/workflows/secure-phase.md.
|
|
34
|
+
Preserve all workflow gates.
|
|
35
|
+
</process>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:session-report
|
|
3
|
+
description: Generate a session report with token usage estimates, work summary, and outcomes
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Bash
|
|
7
|
+
- Write
|
|
8
|
+
---
|
|
9
|
+
<objective>
|
|
10
|
+
Generate a structured SESSION_REPORT.md document capturing session outcomes, work performed, and estimated resource usage. Provides a shareable artifact for post-session review.
|
|
11
|
+
</objective>
|
|
12
|
+
|
|
13
|
+
<execution_context>
|
|
14
|
+
@~/.claude/pilot/workflows/session-report.md
|
|
15
|
+
</execution_context>
|
|
16
|
+
|
|
17
|
+
<process>
|
|
18
|
+
Execute the session-report workflow from @~/.claude/pilot/workflows/session-report.md end-to-end.
|
|
19
|
+
</process>
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:sessions
|
|
3
|
+
description: "Manage Claude Code session history - list, load, alias, and edit sessions"
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Sessions Command
|
|
2
7
|
|
|
3
8
|
Manage Claude Code session history - list, load, alias, and edit sessions stored in `~/.claude/sessions/`.
|
|
4
9
|
|
|
5
10
|
## Usage
|
|
6
11
|
|
|
7
|
-
`/sessions [list|load|alias|info|help] [options]`
|
|
12
|
+
`/ccp:sessions [list|load|alias|info|help] [options]`
|
|
8
13
|
|
|
9
14
|
## Actions
|
|
10
15
|
|
|
@@ -13,18 +18,18 @@ Manage Claude Code session history - list, load, alias, and edit sessions stored
|
|
|
13
18
|
Display all sessions with metadata, filtering, and pagination.
|
|
14
19
|
|
|
15
20
|
```bash
|
|
16
|
-
/sessions # List all sessions (default)
|
|
17
|
-
/sessions list # Same as above
|
|
18
|
-
/sessions list --limit 10 # Show 10 sessions
|
|
19
|
-
/sessions list --date 2026-02-01 # Filter by date
|
|
20
|
-
/sessions list --search abc # Search by session ID
|
|
21
|
+
/ccp:sessions # List all sessions (default)
|
|
22
|
+
/ccp:sessions list # Same as above
|
|
23
|
+
/ccp:sessions list --limit 10 # Show 10 sessions
|
|
24
|
+
/ccp:sessions list --date 2026-02-01 # Filter by date
|
|
25
|
+
/ccp:sessions list --search abc # Search by session ID
|
|
21
26
|
```
|
|
22
27
|
|
|
23
28
|
**Script:**
|
|
24
29
|
```bash
|
|
25
30
|
node -e "
|
|
26
|
-
const sm = require((process.env.
|
|
27
|
-
const aa = require((process.env.
|
|
31
|
+
const sm = require((process.env.CCP_CLAUDE_DIR||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-manager');
|
|
32
|
+
const aa = require((process.env.CCP_CLAUDE_DIR||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-aliases');
|
|
28
33
|
|
|
29
34
|
const result = sm.getAllSessions({ limit: 20 });
|
|
30
35
|
const aliases = aa.listAliases();
|
|
@@ -53,17 +58,17 @@ for (const s of result.sessions) {
|
|
|
53
58
|
Load and display a session's content (by ID or alias).
|
|
54
59
|
|
|
55
60
|
```bash
|
|
56
|
-
/sessions load <id|alias> # Load session
|
|
57
|
-
/sessions load 2026-02-01 # By date (for no-id sessions)
|
|
58
|
-
/sessions load a1b2c3d4 # By short ID
|
|
59
|
-
/sessions load my-alias # By alias name
|
|
61
|
+
/ccp:sessions load <id|alias> # Load session
|
|
62
|
+
/ccp:sessions load 2026-02-01 # By date (for no-id sessions)
|
|
63
|
+
/ccp:sessions load a1b2c3d4 # By short ID
|
|
64
|
+
/ccp:sessions load my-alias # By alias name
|
|
60
65
|
```
|
|
61
66
|
|
|
62
67
|
**Script:**
|
|
63
68
|
```bash
|
|
64
69
|
node -e "
|
|
65
|
-
const sm = require((process.env.
|
|
66
|
-
const aa = require((process.env.
|
|
70
|
+
const sm = require((process.env.CCP_CLAUDE_DIR||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-manager');
|
|
71
|
+
const aa = require((process.env.CCP_CLAUDE_DIR||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-aliases');
|
|
67
72
|
const id = process.argv[1];
|
|
68
73
|
|
|
69
74
|
// First try to resolve as alias
|
|
@@ -116,21 +121,21 @@ if (session.metadata.lastUpdated) {
|
|
|
116
121
|
Create a memorable alias for a session.
|
|
117
122
|
|
|
118
123
|
```bash
|
|
119
|
-
/sessions alias <id> <name> # Create alias
|
|
120
|
-
/sessions alias 2026-02-01 today-work # Create alias named "today-work"
|
|
124
|
+
/ccp:sessions alias <id> <name> # Create alias
|
|
125
|
+
/ccp:sessions alias 2026-02-01 today-work # Create alias named "today-work"
|
|
121
126
|
```
|
|
122
127
|
|
|
123
128
|
**Script:**
|
|
124
129
|
```bash
|
|
125
130
|
node -e "
|
|
126
|
-
const sm = require((process.env.
|
|
127
|
-
const aa = require((process.env.
|
|
131
|
+
const sm = require((process.env.CCP_CLAUDE_DIR||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-manager');
|
|
132
|
+
const aa = require((process.env.CCP_CLAUDE_DIR||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-aliases');
|
|
128
133
|
|
|
129
134
|
const sessionId = process.argv[1];
|
|
130
135
|
const aliasName = process.argv[2];
|
|
131
136
|
|
|
132
137
|
if (!sessionId || !aliasName) {
|
|
133
|
-
console.log('Usage: /sessions alias <id> <name>');
|
|
138
|
+
console.log('Usage: /ccp:sessions alias <id> <name>');
|
|
134
139
|
process.exit(1);
|
|
135
140
|
}
|
|
136
141
|
|
|
@@ -156,18 +161,18 @@ if (result.success) {
|
|
|
156
161
|
Delete an existing alias.
|
|
157
162
|
|
|
158
163
|
```bash
|
|
159
|
-
/sessions alias --remove <name> # Remove alias
|
|
160
|
-
/sessions unalias <name> # Same as above
|
|
164
|
+
/ccp:sessions alias --remove <name> # Remove alias
|
|
165
|
+
/ccp:sessions unalias <name> # Same as above
|
|
161
166
|
```
|
|
162
167
|
|
|
163
168
|
**Script:**
|
|
164
169
|
```bash
|
|
165
170
|
node -e "
|
|
166
|
-
const aa = require((process.env.
|
|
171
|
+
const aa = require((process.env.CCP_CLAUDE_DIR||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-aliases');
|
|
167
172
|
|
|
168
173
|
const aliasName = process.argv[1];
|
|
169
174
|
if (!aliasName) {
|
|
170
|
-
console.log('Usage: /sessions alias --remove <name>');
|
|
175
|
+
console.log('Usage: /ccp:sessions alias --remove <name>');
|
|
171
176
|
process.exit(1);
|
|
172
177
|
}
|
|
173
178
|
|
|
@@ -186,14 +191,14 @@ if (result.success) {
|
|
|
186
191
|
Show detailed information about a session.
|
|
187
192
|
|
|
188
193
|
```bash
|
|
189
|
-
/sessions info <id|alias> # Show session details
|
|
194
|
+
/ccp:sessions info <id|alias> # Show session details
|
|
190
195
|
```
|
|
191
196
|
|
|
192
197
|
**Script:**
|
|
193
198
|
```bash
|
|
194
199
|
node -e "
|
|
195
|
-
const sm = require((process.env.
|
|
196
|
-
const aa = require((process.env.
|
|
200
|
+
const sm = require((process.env.CCP_CLAUDE_DIR||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-manager');
|
|
201
|
+
const aa = require((process.env.CCP_CLAUDE_DIR||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-aliases');
|
|
197
202
|
|
|
198
203
|
const id = process.argv[1];
|
|
199
204
|
const resolved = aa.resolveAlias(id);
|
|
@@ -233,13 +238,13 @@ if (aliases.length > 0) {
|
|
|
233
238
|
Show all session aliases.
|
|
234
239
|
|
|
235
240
|
```bash
|
|
236
|
-
/sessions aliases # List all aliases
|
|
241
|
+
/ccp:sessions aliases # List all aliases
|
|
237
242
|
```
|
|
238
243
|
|
|
239
244
|
**Script:**
|
|
240
245
|
```bash
|
|
241
246
|
node -e "
|
|
242
|
-
const aa = require((process.env.
|
|
247
|
+
const aa = require((process.env.CCP_CLAUDE_DIR||require('path').join(require('os').homedir(),'.claude'))+'/scripts/lib/session-aliases');
|
|
243
248
|
|
|
244
249
|
const aliases = aa.listAliases();
|
|
245
250
|
console.log('Session Aliases (' + aliases.length + '):');
|
|
@@ -279,22 +284,22 @@ $ARGUMENTS:
|
|
|
279
284
|
|
|
280
285
|
```bash
|
|
281
286
|
# List all sessions
|
|
282
|
-
/sessions list
|
|
287
|
+
/ccp:sessions list
|
|
283
288
|
|
|
284
289
|
# Create an alias for today's session
|
|
285
|
-
/sessions alias 2026-02-01 today
|
|
290
|
+
/ccp:sessions alias 2026-02-01 today
|
|
286
291
|
|
|
287
292
|
# Load session by alias
|
|
288
|
-
/sessions load today
|
|
293
|
+
/ccp:sessions load today
|
|
289
294
|
|
|
290
295
|
# Show session info
|
|
291
|
-
/sessions info today
|
|
296
|
+
/ccp:sessions info today
|
|
292
297
|
|
|
293
298
|
# Remove alias
|
|
294
|
-
/sessions alias --remove today
|
|
299
|
+
/ccp:sessions alias --remove today
|
|
295
300
|
|
|
296
301
|
# List all aliases
|
|
297
|
-
/sessions aliases
|
|
302
|
+
/ccp:sessions aliases
|
|
298
303
|
```
|
|
299
304
|
|
|
300
305
|
## Notes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:set-profile
|
|
3
|
+
description: Switch model profile for CCP agents (quality/balanced/budget/inherit)
|
|
4
|
+
argument-hint: <profile (quality|balanced|budget|inherit)>
|
|
5
|
+
model: haiku
|
|
6
|
+
allowed-tools:
|
|
7
|
+
- Bash
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Show the following output to the user verbatim, with no extra commentary:
|
|
11
|
+
|
|
12
|
+
!`node "$HOME/.claude/pilot/bin/ccp-tools.cjs" config-set-model-profile $ARGUMENTS --raw`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: Configure
|
|
2
|
+
name: ccp:settings
|
|
3
|
+
description: Configure CCP workflow toggles and model profile
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Read
|
|
6
6
|
- Write
|
|
@@ -9,7 +9,7 @@ allowed-tools:
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
<objective>
|
|
12
|
-
Interactive configuration of
|
|
12
|
+
Interactive configuration of CCP workflow agents and model profile via multi-question prompt.
|
|
13
13
|
|
|
14
14
|
Routes to the settings workflow which handles:
|
|
15
15
|
- Config existence ensuring
|
|
@@ -20,11 +20,11 @@ Routes to the settings workflow which handles:
|
|
|
20
20
|
</objective>
|
|
21
21
|
|
|
22
22
|
<execution_context>
|
|
23
|
-
@~/.claude/
|
|
23
|
+
@~/.claude/pilot/workflows/settings.md
|
|
24
24
|
</execution_context>
|
|
25
25
|
|
|
26
26
|
<process>
|
|
27
|
-
**Follow the settings workflow** from `@~/.claude/
|
|
27
|
+
**Follow the settings workflow** from `@~/.claude/pilot/workflows/settings.md`.
|
|
28
28
|
|
|
29
29
|
The workflow handles all logic including:
|
|
30
30
|
1. Config file creation with defaults if missing
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccp:setup-pm
|
|
3
|
+
description: Configure your preferred package manager (npm/pnpm/yarn/bun)
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Package Manager Setup
|
|
8
|
+
|
|
9
|
+
Configure your preferred package manager for this project or globally.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Detect current package manager
|
|
15
|
+
node scripts/setup-package-manager.js --detect
|
|
16
|
+
|
|
17
|
+
# Set global preference
|
|
18
|
+
node scripts/setup-package-manager.js --global pnpm
|
|
19
|
+
|
|
20
|
+
# Set project preference
|
|
21
|
+
node scripts/setup-package-manager.js --project bun
|
|
22
|
+
|
|
23
|
+
# List available package managers
|
|
24
|
+
node scripts/setup-package-manager.js --list
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Detection Priority
|
|
28
|
+
|
|
29
|
+
When determining which package manager to use, the following order is checked:
|
|
30
|
+
|
|
31
|
+
1. **Environment variable**: `CLAUDE_PACKAGE_MANAGER`
|
|
32
|
+
2. **Project config**: `.claude/package-manager.json`
|
|
33
|
+
3. **package.json**: `packageManager` field
|
|
34
|
+
4. **Lock file**: Presence of package-lock.json, yarn.lock, pnpm-lock.yaml, or bun.lockb
|
|
35
|
+
5. **Global config**: `~/.claude/package-manager.json`
|
|
36
|
+
6. **Fallback**: First available package manager (pnpm > bun > yarn > npm)
|
|
37
|
+
|
|
38
|
+
## Configuration Files
|
|
39
|
+
|
|
40
|
+
### Global Configuration
|
|
41
|
+
```json
|
|
42
|
+
// ~/.claude/package-manager.json
|
|
43
|
+
{
|
|
44
|
+
"packageManager": "pnpm"
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Project Configuration
|
|
49
|
+
```json
|
|
50
|
+
// .claude/package-manager.json
|
|
51
|
+
{
|
|
52
|
+
"packageManager": "bun"
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### package.json
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"packageManager": "pnpm@8.6.0"
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Environment Variable
|
|
64
|
+
|
|
65
|
+
Set `CLAUDE_PACKAGE_MANAGER` to override all other detection methods:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Windows (PowerShell)
|
|
69
|
+
$env:CLAUDE_PACKAGE_MANAGER = "pnpm"
|
|
70
|
+
|
|
71
|
+
# macOS/Linux
|
|
72
|
+
export CLAUDE_PACKAGE_MANAGER=pnpm
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Run the Detection
|
|
76
|
+
|
|
77
|
+
To see current package manager detection results, run:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
node scripts/setup-package-manager.js --detect
|
|
81
|
+
```
|