claude-code-pilot 2.0.0 → 3.0.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/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/src/agents/docs-lookup.md +68 -0
- package/src/agents/flutter-reviewer.md +243 -0
- package/src/agents/go-build-resolver.md +94 -0
- package/src/agents/go-reviewer.md +76 -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/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/aside.md +164 -0
- package/src/commands/build-fix.md +62 -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/{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/{gsd/commands-gsd → src/commands/ccp}/check-todos.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/cleanup.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/complete-milestone.md +9 -9
- 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/execute-phase.md +59 -0
- package/src/commands/ccp/fast.md +30 -0
- package/src/commands/ccp/forensics.md +56 -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/{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/{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/{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/plant-seed.md +28 -0
- package/src/commands/ccp/pr-branch.md +25 -0
- package/{gsd/commands-gsd → src/commands/ccp}/progress.md +3 -3
- package/{gsd/commands-gsd → src/commands/ccp}/quick.md +10 -8
- 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/{gsd/commands-gsd → src/commands/ccp}/resume-work.md +3 -3
- package/src/commands/ccp/review-backlog.md +61 -0
- package/src/commands/ccp/session-report.md +19 -0
- package/src/commands/ccp/set-profile.md +12 -0
- package/{gsd/commands-gsd → src/commands/ccp}/settings.md +5 -5
- package/src/commands/ccp/ship.md +23 -0
- package/src/commands/ccp/stats.md +18 -0
- package/src/commands/ccp/thread.md +127 -0
- package/src/commands/ccp/ui-phase.md +34 -0
- package/src/commands/ccp/ui-review.md +32 -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/src/commands/code-review.md +40 -0
- package/src/commands/context-budget.md +29 -0
- package/src/commands/cpp-build.md +173 -0
- package/src/commands/cpp-review.md +132 -0
- package/src/commands/cpp-test.md +251 -0
- package/src/commands/docs.md +31 -0
- package/src/commands/e2e.md +364 -0
- package/src/commands/eval.md +120 -0
- package/{ecc → src}/commands/evolve.md +2 -2
- package/src/commands/go-build.md +183 -0
- package/src/commands/go-review.md +148 -0
- package/src/commands/go-test.md +268 -0
- package/src/commands/gradle-build.md +70 -0
- package/src/commands/harness-audit.md +71 -0
- package/src/commands/kotlin-build.md +174 -0
- package/src/commands/kotlin-review.md +140 -0
- package/src/commands/kotlin-test.md +312 -0
- package/src/commands/orchestrate.md +231 -0
- package/src/commands/plan.md +114 -0
- package/src/commands/prompt-optimize.md +38 -0
- package/src/commands/prune.md +25 -0
- package/src/commands/python-review.md +297 -0
- package/{ecc → src}/commands/quality-gate.md +1 -1
- package/src/commands/refactor-clean.md +80 -0
- package/src/commands/rules-distill.md +11 -0
- package/src/commands/rust-build.md +187 -0
- package/src/commands/rust-review.md +142 -0
- package/src/commands/rust-test.md +308 -0
- package/{ecc → src}/commands/sessions.md +10 -10
- package/src/commands/setup-pm.md +80 -0
- package/{kit → src}/commands/setup.md +45 -19
- package/src/commands/skill-create.md +172 -0
- package/src/commands/skill-health.md +51 -0
- package/src/commands/tdd.md +328 -0
- package/src/commands/test-coverage.md +69 -0
- package/src/commands/update-codemaps.md +72 -0
- package/src/commands/update-docs.md +84 -0
- 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 +75 -9
- 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/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 +775 -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/{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/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/{ecc → src}/rules/common/coding-style.md +21 -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/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/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/context-budget/SKILL.md +135 -0
- package/{ecc → src}/skills/continuous-learning-v2/SKILL.md +2 -2
- package/{ecc → src}/skills/continuous-learning-v2/agents/observer-loop.sh +1 -1
- 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/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/exa-search/SKILL.md +103 -0
- package/src/skills/frontend-patterns/SKILL.md +642 -0
- package/src/skills/golang-patterns/SKILL.md +674 -0
- package/src/skills/golang-testing/SKILL.md +720 -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-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/perl-patterns/SKILL.md +504 -0
- package/src/skills/perl-testing/SKILL.md +475 -0
- package/src/skills/postgres-patterns/SKILL.md +147 -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/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/tdd-workflow/SKILL.md +410 -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/doc-updater.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}/commands/checkpoint.md +0 -0
- /package/{ecc → src}/commands/learn.md +0 -0
- /package/{ecc → src}/commands/model-route.md +0 -0
- /package/{ecc → src}/commands/resume-session.md +0 -0
- /package/{ecc → src}/commands/save-session.md +0 -0
- /package/{kit → src}/commands/setup-refresh.md +0 -0
- /package/{kit → src}/commands/tool-guide.md +0 -0
- /package/{ecc → src}/commands/verify.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/CLAUDE.md +0 -0
- /package/{ecc → src}/examples/django-api-CLAUDE.md +0 -0
- /package/{ecc → src}/examples/go-microservice-CLAUDE.md +0 -0
- /package/{ecc → src}/examples/rust-api-CLAUDE.md +0 -0
- /package/{ecc → src}/examples/saas-nextjs-CLAUDE.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/observer.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
- /package/{ecc/skills/verification-loop-SKILL.md → src/skills/verification-loop/SKILL.md} +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cpp"
|
|
4
|
+
- "**/*.hpp"
|
|
5
|
+
- "**/*.cc"
|
|
6
|
+
- "**/*.hh"
|
|
7
|
+
- "**/*.cxx"
|
|
8
|
+
- "**/*.h"
|
|
9
|
+
- "**/CMakeLists.txt"
|
|
10
|
+
---
|
|
11
|
+
# C++ Coding Style
|
|
12
|
+
|
|
13
|
+
> This file extends [common/coding-style.md](../common/coding-style.md) with C++ specific content.
|
|
14
|
+
|
|
15
|
+
## Modern C++ (C++17/20/23)
|
|
16
|
+
|
|
17
|
+
- Prefer **modern C++ features** over C-style constructs
|
|
18
|
+
- Use `auto` when the type is obvious from context
|
|
19
|
+
- Use `constexpr` for compile-time constants
|
|
20
|
+
- Use structured bindings: `auto [key, value] = map_entry;`
|
|
21
|
+
|
|
22
|
+
## Resource Management
|
|
23
|
+
|
|
24
|
+
- **RAII everywhere** — no manual `new`/`delete`
|
|
25
|
+
- Use `std::unique_ptr` for exclusive ownership
|
|
26
|
+
- Use `std::shared_ptr` only when shared ownership is truly needed
|
|
27
|
+
- Use `std::make_unique` / `std::make_shared` over raw `new`
|
|
28
|
+
|
|
29
|
+
## Naming Conventions
|
|
30
|
+
|
|
31
|
+
- Types/Classes: `PascalCase`
|
|
32
|
+
- Functions/Methods: `snake_case` or `camelCase` (follow project convention)
|
|
33
|
+
- Constants: `kPascalCase` or `UPPER_SNAKE_CASE`
|
|
34
|
+
- Namespaces: `lowercase`
|
|
35
|
+
- Member variables: `snake_case_` (trailing underscore) or `m_` prefix
|
|
36
|
+
|
|
37
|
+
## Formatting
|
|
38
|
+
|
|
39
|
+
- Use **clang-format** — no style debates
|
|
40
|
+
- Run `clang-format -i <file>` before committing
|
|
41
|
+
|
|
42
|
+
## Reference
|
|
43
|
+
|
|
44
|
+
See skill: `cpp-coding-standards` for comprehensive C++ coding standards and guidelines.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cpp"
|
|
4
|
+
- "**/*.hpp"
|
|
5
|
+
- "**/*.cc"
|
|
6
|
+
- "**/*.hh"
|
|
7
|
+
- "**/*.cxx"
|
|
8
|
+
- "**/*.h"
|
|
9
|
+
- "**/CMakeLists.txt"
|
|
10
|
+
---
|
|
11
|
+
# C++ Hooks
|
|
12
|
+
|
|
13
|
+
> This file extends [common/hooks.md](../common/hooks.md) with C++ specific content.
|
|
14
|
+
|
|
15
|
+
## Build Hooks
|
|
16
|
+
|
|
17
|
+
Run these checks before committing C++ changes:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Format check
|
|
21
|
+
clang-format --dry-run --Werror src/*.cpp src/*.hpp
|
|
22
|
+
|
|
23
|
+
# Static analysis
|
|
24
|
+
clang-tidy src/*.cpp -- -std=c++17
|
|
25
|
+
|
|
26
|
+
# Build
|
|
27
|
+
cmake --build build
|
|
28
|
+
|
|
29
|
+
# Tests
|
|
30
|
+
ctest --test-dir build --output-on-failure
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Recommended CI Pipeline
|
|
34
|
+
|
|
35
|
+
1. **clang-format** — formatting check
|
|
36
|
+
2. **clang-tidy** — static analysis
|
|
37
|
+
3. **cppcheck** — additional analysis
|
|
38
|
+
4. **cmake build** — compilation
|
|
39
|
+
5. **ctest** — test execution with sanitizers
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cpp"
|
|
4
|
+
- "**/*.hpp"
|
|
5
|
+
- "**/*.cc"
|
|
6
|
+
- "**/*.hh"
|
|
7
|
+
- "**/*.cxx"
|
|
8
|
+
- "**/*.h"
|
|
9
|
+
- "**/CMakeLists.txt"
|
|
10
|
+
---
|
|
11
|
+
# C++ Patterns
|
|
12
|
+
|
|
13
|
+
> This file extends [common/patterns.md](../common/patterns.md) with C++ specific content.
|
|
14
|
+
|
|
15
|
+
## RAII (Resource Acquisition Is Initialization)
|
|
16
|
+
|
|
17
|
+
Tie resource lifetime to object lifetime:
|
|
18
|
+
|
|
19
|
+
```cpp
|
|
20
|
+
class FileHandle {
|
|
21
|
+
public:
|
|
22
|
+
explicit FileHandle(const std::string& path) : file_(std::fopen(path.c_str(), "r")) {}
|
|
23
|
+
~FileHandle() { if (file_) std::fclose(file_); }
|
|
24
|
+
FileHandle(const FileHandle&) = delete;
|
|
25
|
+
FileHandle& operator=(const FileHandle&) = delete;
|
|
26
|
+
private:
|
|
27
|
+
std::FILE* file_;
|
|
28
|
+
};
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Rule of Five/Zero
|
|
32
|
+
|
|
33
|
+
- **Rule of Zero**: Prefer classes that need no custom destructor, copy/move constructors, or assignments
|
|
34
|
+
- **Rule of Five**: If you define any of destructor/copy-ctor/copy-assign/move-ctor/move-assign, define all five
|
|
35
|
+
|
|
36
|
+
## Value Semantics
|
|
37
|
+
|
|
38
|
+
- Pass small/trivial types by value
|
|
39
|
+
- Pass large types by `const&`
|
|
40
|
+
- Return by value (rely on RVO/NRVO)
|
|
41
|
+
- Use move semantics for sink parameters
|
|
42
|
+
|
|
43
|
+
## Error Handling
|
|
44
|
+
|
|
45
|
+
- Use exceptions for exceptional conditions
|
|
46
|
+
- Use `std::optional` for values that may not exist
|
|
47
|
+
- Use `std::expected` (C++23) or result types for expected failures
|
|
48
|
+
|
|
49
|
+
## Reference
|
|
50
|
+
|
|
51
|
+
See skill: `cpp-coding-standards` for comprehensive C++ patterns and anti-patterns.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cpp"
|
|
4
|
+
- "**/*.hpp"
|
|
5
|
+
- "**/*.cc"
|
|
6
|
+
- "**/*.hh"
|
|
7
|
+
- "**/*.cxx"
|
|
8
|
+
- "**/*.h"
|
|
9
|
+
- "**/CMakeLists.txt"
|
|
10
|
+
---
|
|
11
|
+
# C++ Security
|
|
12
|
+
|
|
13
|
+
> This file extends [common/security.md](../common/security.md) with C++ specific content.
|
|
14
|
+
|
|
15
|
+
## Memory Safety
|
|
16
|
+
|
|
17
|
+
- Never use raw `new`/`delete` — use smart pointers
|
|
18
|
+
- Never use C-style arrays — use `std::array` or `std::vector`
|
|
19
|
+
- Never use `malloc`/`free` — use C++ allocation
|
|
20
|
+
- Avoid `reinterpret_cast` unless absolutely necessary
|
|
21
|
+
|
|
22
|
+
## Buffer Overflows
|
|
23
|
+
|
|
24
|
+
- Use `std::string` over `char*`
|
|
25
|
+
- Use `.at()` for bounds-checked access when safety matters
|
|
26
|
+
- Never use `strcpy`, `strcat`, `sprintf` — use `std::string` or `fmt::format`
|
|
27
|
+
|
|
28
|
+
## Undefined Behavior
|
|
29
|
+
|
|
30
|
+
- Always initialize variables
|
|
31
|
+
- Avoid signed integer overflow
|
|
32
|
+
- Never dereference null or dangling pointers
|
|
33
|
+
- Use sanitizers in CI:
|
|
34
|
+
```bash
|
|
35
|
+
cmake -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined" ..
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Static Analysis
|
|
39
|
+
|
|
40
|
+
- Use **clang-tidy** for automated checks:
|
|
41
|
+
```bash
|
|
42
|
+
clang-tidy --checks='*' src/*.cpp
|
|
43
|
+
```
|
|
44
|
+
- Use **cppcheck** for additional analysis:
|
|
45
|
+
```bash
|
|
46
|
+
cppcheck --enable=all src/
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Reference
|
|
50
|
+
|
|
51
|
+
See skill: `cpp-coding-standards` for detailed security guidelines.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cpp"
|
|
4
|
+
- "**/*.hpp"
|
|
5
|
+
- "**/*.cc"
|
|
6
|
+
- "**/*.hh"
|
|
7
|
+
- "**/*.cxx"
|
|
8
|
+
- "**/*.h"
|
|
9
|
+
- "**/CMakeLists.txt"
|
|
10
|
+
---
|
|
11
|
+
# C++ Testing
|
|
12
|
+
|
|
13
|
+
> This file extends [common/testing.md](../common/testing.md) with C++ specific content.
|
|
14
|
+
|
|
15
|
+
## Framework
|
|
16
|
+
|
|
17
|
+
Use **GoogleTest** (gtest/gmock) with **CMake/CTest**.
|
|
18
|
+
|
|
19
|
+
## Running Tests
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
cmake --build build && ctest --test-dir build --output-on-failure
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Coverage
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
cmake -DCMAKE_CXX_FLAGS="--coverage" -DCMAKE_EXE_LINKER_FLAGS="--coverage" ..
|
|
29
|
+
cmake --build .
|
|
30
|
+
ctest --output-on-failure
|
|
31
|
+
lcov --capture --directory . --output-file coverage.info
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Sanitizers
|
|
35
|
+
|
|
36
|
+
Always run tests with sanitizers in CI:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
cmake -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined" ..
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Reference
|
|
43
|
+
|
|
44
|
+
See skill: `cpp-testing` for detailed C++ testing patterns, TDD workflow, and GoogleTest/GMock usage.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cs"
|
|
4
|
+
- "**/*.csx"
|
|
5
|
+
---
|
|
6
|
+
# C# Coding Style
|
|
7
|
+
|
|
8
|
+
> This file extends [common/coding-style.md](../common/coding-style.md) with C#-specific content.
|
|
9
|
+
|
|
10
|
+
## Standards
|
|
11
|
+
|
|
12
|
+
- Follow current .NET conventions and enable nullable reference types
|
|
13
|
+
- Prefer explicit access modifiers on public and internal APIs
|
|
14
|
+
- Keep files aligned with the primary type they define
|
|
15
|
+
|
|
16
|
+
## Types and Models
|
|
17
|
+
|
|
18
|
+
- Prefer `record` or `record struct` for immutable value-like models
|
|
19
|
+
- Use `class` for entities or types with identity and lifecycle
|
|
20
|
+
- Use `interface` for service boundaries and abstractions
|
|
21
|
+
- Avoid `dynamic` in application code; prefer generics or explicit models
|
|
22
|
+
|
|
23
|
+
```csharp
|
|
24
|
+
public sealed record UserDto(Guid Id, string Email);
|
|
25
|
+
|
|
26
|
+
public interface IUserRepository
|
|
27
|
+
{
|
|
28
|
+
Task<UserDto?> FindByIdAsync(Guid id, CancellationToken cancellationToken);
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Immutability
|
|
33
|
+
|
|
34
|
+
- Prefer `init` setters, constructor parameters, and immutable collections for shared state
|
|
35
|
+
- Do not mutate input models in-place when producing updated state
|
|
36
|
+
|
|
37
|
+
```csharp
|
|
38
|
+
public sealed record UserProfile(string Name, string Email);
|
|
39
|
+
|
|
40
|
+
public static UserProfile Rename(UserProfile profile, string name) =>
|
|
41
|
+
profile with { Name = name };
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Async and Error Handling
|
|
45
|
+
|
|
46
|
+
- Prefer `async`/`await` over blocking calls like `.Result` or `.Wait()`
|
|
47
|
+
- Pass `CancellationToken` through public async APIs
|
|
48
|
+
- Throw specific exceptions and log with structured properties
|
|
49
|
+
|
|
50
|
+
```csharp
|
|
51
|
+
public async Task<Order> LoadOrderAsync(
|
|
52
|
+
Guid orderId,
|
|
53
|
+
CancellationToken cancellationToken)
|
|
54
|
+
{
|
|
55
|
+
try
|
|
56
|
+
{
|
|
57
|
+
return await repository.FindAsync(orderId, cancellationToken)
|
|
58
|
+
?? throw new InvalidOperationException($"Order {orderId} was not found.");
|
|
59
|
+
}
|
|
60
|
+
catch (Exception ex)
|
|
61
|
+
{
|
|
62
|
+
logger.LogError(ex, "Failed to load order {OrderId}", orderId);
|
|
63
|
+
throw;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Formatting
|
|
69
|
+
|
|
70
|
+
- Use `dotnet format` for formatting and analyzer fixes
|
|
71
|
+
- Keep `using` directives organized and remove unused imports
|
|
72
|
+
- Prefer expression-bodied members only when they stay readable
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cs"
|
|
4
|
+
- "**/*.csx"
|
|
5
|
+
- "**/*.csproj"
|
|
6
|
+
- "**/*.sln"
|
|
7
|
+
- "**/Directory.Build.props"
|
|
8
|
+
- "**/Directory.Build.targets"
|
|
9
|
+
---
|
|
10
|
+
# C# Hooks
|
|
11
|
+
|
|
12
|
+
> This file extends [common/hooks.md](../common/hooks.md) with C#-specific content.
|
|
13
|
+
|
|
14
|
+
## PostToolUse Hooks
|
|
15
|
+
|
|
16
|
+
Configure in `~/.claude/settings.json`:
|
|
17
|
+
|
|
18
|
+
- **dotnet format**: Auto-format edited C# files and apply analyzer fixes
|
|
19
|
+
- **dotnet build**: Verify the solution or project still compiles after edits
|
|
20
|
+
- **dotnet test --no-build**: Re-run the nearest relevant test project after behavior changes
|
|
21
|
+
|
|
22
|
+
## Stop Hooks
|
|
23
|
+
|
|
24
|
+
- Run a final `dotnet build` before ending a session with broad C# changes
|
|
25
|
+
- Warn on modified `appsettings*.json` files so secrets do not get committed
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cs"
|
|
4
|
+
- "**/*.csx"
|
|
5
|
+
---
|
|
6
|
+
# C# Patterns
|
|
7
|
+
|
|
8
|
+
> This file extends [common/patterns.md](../common/patterns.md) with C#-specific content.
|
|
9
|
+
|
|
10
|
+
## API Response Pattern
|
|
11
|
+
|
|
12
|
+
```csharp
|
|
13
|
+
public sealed record ApiResponse<T>(
|
|
14
|
+
bool Success,
|
|
15
|
+
T? Data = default,
|
|
16
|
+
string? Error = null,
|
|
17
|
+
object? Meta = null);
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Repository Pattern
|
|
21
|
+
|
|
22
|
+
```csharp
|
|
23
|
+
public interface IRepository<T>
|
|
24
|
+
{
|
|
25
|
+
Task<IReadOnlyList<T>> FindAllAsync(CancellationToken cancellationToken);
|
|
26
|
+
Task<T?> FindByIdAsync(Guid id, CancellationToken cancellationToken);
|
|
27
|
+
Task<T> CreateAsync(T entity, CancellationToken cancellationToken);
|
|
28
|
+
Task<T> UpdateAsync(T entity, CancellationToken cancellationToken);
|
|
29
|
+
Task DeleteAsync(Guid id, CancellationToken cancellationToken);
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Options Pattern
|
|
34
|
+
|
|
35
|
+
Use strongly typed options for config instead of reading raw strings throughout the codebase.
|
|
36
|
+
|
|
37
|
+
```csharp
|
|
38
|
+
public sealed class PaymentsOptions
|
|
39
|
+
{
|
|
40
|
+
public const string SectionName = "Payments";
|
|
41
|
+
public required string BaseUrl { get; init; }
|
|
42
|
+
public required string ApiKeySecretName { get; init; }
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Dependency Injection
|
|
47
|
+
|
|
48
|
+
- Depend on interfaces at service boundaries
|
|
49
|
+
- Keep constructors focused; if a service needs too many dependencies, split responsibilities
|
|
50
|
+
- Register lifetimes intentionally: singleton for stateless/shared services, scoped for request data, transient for lightweight pure workers
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cs"
|
|
4
|
+
- "**/*.csx"
|
|
5
|
+
- "**/*.csproj"
|
|
6
|
+
- "**/appsettings*.json"
|
|
7
|
+
---
|
|
8
|
+
# C# Security
|
|
9
|
+
|
|
10
|
+
> This file extends [common/security.md](../common/security.md) with C#-specific content.
|
|
11
|
+
|
|
12
|
+
## Secret Management
|
|
13
|
+
|
|
14
|
+
- Never hardcode API keys, tokens, or connection strings in source code
|
|
15
|
+
- Use environment variables, user secrets for local development, and a secret manager in production
|
|
16
|
+
- Keep `appsettings.*.json` free of real credentials
|
|
17
|
+
|
|
18
|
+
```csharp
|
|
19
|
+
// BAD
|
|
20
|
+
const string ApiKey = "sk-live-123";
|
|
21
|
+
|
|
22
|
+
// GOOD
|
|
23
|
+
var apiKey = builder.Configuration["OpenAI:ApiKey"]
|
|
24
|
+
?? throw new InvalidOperationException("OpenAI:ApiKey is not configured.");
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## SQL Injection Prevention
|
|
28
|
+
|
|
29
|
+
- Always use parameterized queries with ADO.NET, Dapper, or EF Core
|
|
30
|
+
- Never concatenate user input into SQL strings
|
|
31
|
+
- Validate sort fields and filter operators before using dynamic query composition
|
|
32
|
+
|
|
33
|
+
```csharp
|
|
34
|
+
const string sql = "SELECT * FROM Orders WHERE CustomerId = @customerId";
|
|
35
|
+
await connection.QueryAsync<Order>(sql, new { customerId });
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Input Validation
|
|
39
|
+
|
|
40
|
+
- Validate DTOs at the application boundary
|
|
41
|
+
- Use data annotations, FluentValidation, or explicit guard clauses
|
|
42
|
+
- Reject invalid model state before running business logic
|
|
43
|
+
|
|
44
|
+
## Authentication and Authorization
|
|
45
|
+
|
|
46
|
+
- Prefer framework auth handlers instead of custom token parsing
|
|
47
|
+
- Enforce authorization policies at endpoint or handler boundaries
|
|
48
|
+
- Never log raw tokens, passwords, or PII
|
|
49
|
+
|
|
50
|
+
## Error Handling
|
|
51
|
+
|
|
52
|
+
- Return safe client-facing messages
|
|
53
|
+
- Log detailed exceptions with structured context server-side
|
|
54
|
+
- Do not expose stack traces, SQL text, or filesystem paths in API responses
|
|
55
|
+
|
|
56
|
+
## References
|
|
57
|
+
|
|
58
|
+
See skill: `security-review` for broader application security review checklists.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cs"
|
|
4
|
+
- "**/*.csx"
|
|
5
|
+
- "**/*.csproj"
|
|
6
|
+
---
|
|
7
|
+
# C# Testing
|
|
8
|
+
|
|
9
|
+
> This file extends [common/testing.md](../common/testing.md) with C#-specific content.
|
|
10
|
+
|
|
11
|
+
## Test Framework
|
|
12
|
+
|
|
13
|
+
- Prefer **xUnit** for unit and integration tests
|
|
14
|
+
- Use **FluentAssertions** for readable assertions
|
|
15
|
+
- Use **Moq** or **NSubstitute** for mocking dependencies
|
|
16
|
+
- Use **Testcontainers** when integration tests need real infrastructure
|
|
17
|
+
|
|
18
|
+
## Test Organization
|
|
19
|
+
|
|
20
|
+
- Mirror `src/` structure under `tests/`
|
|
21
|
+
- Separate unit, integration, and end-to-end coverage clearly
|
|
22
|
+
- Name tests by behavior, not implementation details
|
|
23
|
+
|
|
24
|
+
```csharp
|
|
25
|
+
public sealed class OrderServiceTests
|
|
26
|
+
{
|
|
27
|
+
[Fact]
|
|
28
|
+
public async Task FindByIdAsync_ReturnsOrder_WhenOrderExists()
|
|
29
|
+
{
|
|
30
|
+
// Arrange
|
|
31
|
+
// Act
|
|
32
|
+
// Assert
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## ASP.NET Core Integration Tests
|
|
38
|
+
|
|
39
|
+
- Use `WebApplicationFactory<TEntryPoint>` for API integration coverage
|
|
40
|
+
- Test auth, validation, and serialization through HTTP, not by bypassing middleware
|
|
41
|
+
|
|
42
|
+
## Coverage
|
|
43
|
+
|
|
44
|
+
- Target 80%+ line coverage
|
|
45
|
+
- Focus coverage on domain logic, validation, auth, and failure paths
|
|
46
|
+
- Run `dotnet test` in CI with coverage collection enabled where available
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.java"
|
|
4
|
+
---
|
|
5
|
+
# Java Coding Style
|
|
6
|
+
|
|
7
|
+
> This file extends [common/coding-style.md](../common/coding-style.md) with Java-specific content.
|
|
8
|
+
|
|
9
|
+
## Formatting
|
|
10
|
+
|
|
11
|
+
- **google-java-format** or **Checkstyle** (Google or Sun style) for enforcement
|
|
12
|
+
- One public top-level type per file
|
|
13
|
+
- Consistent indent: 2 or 4 spaces (match project standard)
|
|
14
|
+
- Member order: constants, fields, constructors, public methods, protected, private
|
|
15
|
+
|
|
16
|
+
## Immutability
|
|
17
|
+
|
|
18
|
+
- Prefer `record` for value types (Java 16+)
|
|
19
|
+
- Mark fields `final` by default — use mutable state only when required
|
|
20
|
+
- Return defensive copies from public APIs: `List.copyOf()`, `Map.copyOf()`, `Set.copyOf()`
|
|
21
|
+
- Copy-on-write: return new instances rather than mutating existing ones
|
|
22
|
+
|
|
23
|
+
```java
|
|
24
|
+
// GOOD — immutable value type
|
|
25
|
+
public record OrderSummary(Long id, String customerName, BigDecimal total) {}
|
|
26
|
+
|
|
27
|
+
// GOOD — final fields, no setters
|
|
28
|
+
public class Order {
|
|
29
|
+
private final Long id;
|
|
30
|
+
private final List<LineItem> items;
|
|
31
|
+
|
|
32
|
+
public List<LineItem> getItems() {
|
|
33
|
+
return List.copyOf(items);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Naming
|
|
39
|
+
|
|
40
|
+
Follow standard Java conventions:
|
|
41
|
+
- `PascalCase` for classes, interfaces, records, enums
|
|
42
|
+
- `camelCase` for methods, fields, parameters, local variables
|
|
43
|
+
- `SCREAMING_SNAKE_CASE` for `static final` constants
|
|
44
|
+
- Packages: all lowercase, reverse domain (`com.example.app.service`)
|
|
45
|
+
|
|
46
|
+
## Modern Java Features
|
|
47
|
+
|
|
48
|
+
Use modern language features where they improve clarity:
|
|
49
|
+
- **Records** for DTOs and value types (Java 16+)
|
|
50
|
+
- **Sealed classes** for closed type hierarchies (Java 17+)
|
|
51
|
+
- **Pattern matching** with `instanceof` — no explicit cast (Java 16+)
|
|
52
|
+
- **Text blocks** for multi-line strings — SQL, JSON templates (Java 15+)
|
|
53
|
+
- **Switch expressions** with arrow syntax (Java 14+)
|
|
54
|
+
- **Pattern matching in switch** — exhaustive sealed type handling (Java 21+)
|
|
55
|
+
|
|
56
|
+
```java
|
|
57
|
+
// Pattern matching instanceof
|
|
58
|
+
if (shape instanceof Circle c) {
|
|
59
|
+
return Math.PI * c.radius() * c.radius();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Sealed type hierarchy
|
|
63
|
+
public sealed interface PaymentMethod permits CreditCard, BankTransfer, Wallet {}
|
|
64
|
+
|
|
65
|
+
// Switch expression
|
|
66
|
+
String label = switch (status) {
|
|
67
|
+
case ACTIVE -> "Active";
|
|
68
|
+
case SUSPENDED -> "Suspended";
|
|
69
|
+
case CLOSED -> "Closed";
|
|
70
|
+
};
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Optional Usage
|
|
74
|
+
|
|
75
|
+
- Return `Optional<T>` from finder methods that may have no result
|
|
76
|
+
- Use `map()`, `flatMap()`, `orElseThrow()` — never call `get()` without `isPresent()`
|
|
77
|
+
- Never use `Optional` as a field type or method parameter
|
|
78
|
+
|
|
79
|
+
```java
|
|
80
|
+
// GOOD
|
|
81
|
+
return repository.findById(id)
|
|
82
|
+
.map(ResponseDto::from)
|
|
83
|
+
.orElseThrow(() -> new OrderNotFoundException(id));
|
|
84
|
+
|
|
85
|
+
// BAD — Optional as parameter
|
|
86
|
+
public void process(Optional<String> name) {}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Error Handling
|
|
90
|
+
|
|
91
|
+
- Prefer unchecked exceptions for domain errors
|
|
92
|
+
- Create domain-specific exceptions extending `RuntimeException`
|
|
93
|
+
- Avoid broad `catch (Exception e)` unless at top-level handlers
|
|
94
|
+
- Include context in exception messages
|
|
95
|
+
|
|
96
|
+
```java
|
|
97
|
+
public class OrderNotFoundException extends RuntimeException {
|
|
98
|
+
public OrderNotFoundException(Long id) {
|
|
99
|
+
super("Order not found: id=" + id);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Streams
|
|
105
|
+
|
|
106
|
+
- Use streams for transformations; keep pipelines short (3-4 operations max)
|
|
107
|
+
- Prefer method references when readable: `.map(Order::getTotal)`
|
|
108
|
+
- Avoid side effects in stream operations
|
|
109
|
+
- For complex logic, prefer a loop over a convoluted stream pipeline
|
|
110
|
+
|
|
111
|
+
## References
|
|
112
|
+
|
|
113
|
+
See skill: `java-coding-standards` for full coding standards with examples.
|
|
114
|
+
See skill: `jpa-patterns` for JPA/Hibernate entity design patterns.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.java"
|
|
4
|
+
- "**/pom.xml"
|
|
5
|
+
- "**/build.gradle"
|
|
6
|
+
- "**/build.gradle.kts"
|
|
7
|
+
---
|
|
8
|
+
# Java Hooks
|
|
9
|
+
|
|
10
|
+
> This file extends [common/hooks.md](../common/hooks.md) with Java-specific content.
|
|
11
|
+
|
|
12
|
+
## PostToolUse Hooks
|
|
13
|
+
|
|
14
|
+
Configure in `~/.claude/settings.json`:
|
|
15
|
+
|
|
16
|
+
- **google-java-format**: Auto-format `.java` files after edit
|
|
17
|
+
- **checkstyle**: Run style checks after editing Java files
|
|
18
|
+
- **./mvnw compile** or **./gradlew compileJava**: Verify compilation after changes
|