devflow-kit 0.9.0 → 1.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/CHANGELOG.md +197 -29
- package/LICENSE +1 -1
- package/README.md +185 -309
- package/dist/cli.js +7 -1
- package/dist/commands/ambient.d.ts +18 -0
- package/dist/commands/ambient.js +136 -0
- package/dist/commands/init.d.ts +23 -0
- package/dist/commands/init.js +393 -571
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.js +20 -0
- package/dist/commands/memory.d.ts +22 -0
- package/dist/commands/memory.js +175 -0
- package/dist/commands/uninstall.d.ts +10 -0
- package/dist/commands/uninstall.js +418 -78
- package/dist/plugins.d.ts +46 -0
- package/dist/plugins.js +169 -0
- package/dist/utils/cli.d.ts +5 -0
- package/dist/utils/cli.js +14 -0
- package/dist/utils/installer.d.ts +41 -0
- package/dist/utils/installer.js +177 -0
- package/dist/utils/paths.d.ts +10 -0
- package/dist/utils/paths.js +23 -3
- package/dist/utils/post-install.d.ts +80 -0
- package/dist/utils/post-install.js +508 -0
- package/dist/utils/safe-delete-install.d.ts +29 -0
- package/dist/utils/safe-delete-install.js +191 -0
- package/dist/utils/safe-delete.d.ts +12 -0
- package/dist/utils/safe-delete.js +83 -0
- package/package.json +18 -8
- package/plugins/devflow-ambient/.claude-plugin/plugin.json +7 -0
- package/plugins/devflow-ambient/README.md +49 -0
- package/plugins/devflow-ambient/commands/ambient.md +110 -0
- package/plugins/devflow-ambient/skills/ambient-router/SKILL.md +89 -0
- package/plugins/devflow-ambient/skills/ambient-router/references/skill-catalog.md +64 -0
- package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +7 -0
- package/plugins/devflow-audit-claude/README.md +46 -0
- package/plugins/devflow-audit-claude/agents/claude-md-auditor.md +134 -0
- package/plugins/devflow-audit-claude/commands/audit-claude.md +85 -0
- package/plugins/devflow-code-review/.claude-plugin/plugin.json +31 -0
- package/plugins/devflow-code-review/README.md +73 -0
- package/plugins/devflow-code-review/agents/git.md +272 -0
- package/plugins/devflow-code-review/agents/reviewer.md +119 -0
- package/plugins/devflow-code-review/agents/synthesizer.md +204 -0
- package/plugins/devflow-code-review/commands/code-review-teams.md +262 -0
- package/plugins/devflow-code-review/commands/code-review.md +141 -0
- package/plugins/devflow-code-review/skills/accessibility/SKILL.md +229 -0
- package/plugins/devflow-code-review/skills/accessibility/references/detection.md +171 -0
- package/plugins/devflow-code-review/skills/accessibility/references/patterns.md +670 -0
- package/plugins/devflow-code-review/skills/accessibility/references/violations.md +419 -0
- package/plugins/devflow-code-review/skills/agent-teams/SKILL.md +124 -0
- package/plugins/devflow-code-review/skills/agent-teams/references/cleanup.md +104 -0
- package/plugins/devflow-code-review/skills/agent-teams/references/communication.md +122 -0
- package/plugins/devflow-code-review/skills/agent-teams/references/team-patterns.md +217 -0
- package/plugins/devflow-code-review/skills/architecture-patterns/SKILL.md +153 -0
- package/plugins/devflow-code-review/skills/architecture-patterns/references/detection.md +337 -0
- package/plugins/devflow-code-review/skills/architecture-patterns/references/patterns.md +873 -0
- package/plugins/devflow-code-review/skills/architecture-patterns/references/violations.md +575 -0
- package/plugins/devflow-code-review/skills/complexity-patterns/SKILL.md +143 -0
- package/plugins/devflow-code-review/skills/complexity-patterns/references/detection.md +264 -0
- package/plugins/devflow-code-review/skills/complexity-patterns/references/patterns.md +487 -0
- package/plugins/devflow-code-review/skills/complexity-patterns/references/violations.md +361 -0
- package/plugins/devflow-code-review/skills/consistency-patterns/SKILL.md +140 -0
- package/plugins/devflow-code-review/skills/consistency-patterns/references/detection.md +207 -0
- package/plugins/devflow-code-review/skills/consistency-patterns/references/patterns.md +202 -0
- package/plugins/devflow-code-review/skills/consistency-patterns/references/violations.md +213 -0
- package/plugins/devflow-code-review/skills/database-patterns/SKILL.md +134 -0
- package/plugins/devflow-code-review/skills/database-patterns/references/detection.md +208 -0
- package/plugins/devflow-code-review/skills/database-patterns/references/patterns.md +394 -0
- package/plugins/devflow-code-review/skills/database-patterns/references/violations.md +332 -0
- package/plugins/devflow-code-review/skills/dependencies-patterns/SKILL.md +141 -0
- package/plugins/devflow-code-review/skills/dependencies-patterns/references/detection.md +181 -0
- package/plugins/devflow-code-review/skills/dependencies-patterns/references/patterns.md +225 -0
- package/plugins/devflow-code-review/skills/dependencies-patterns/references/violations.md +247 -0
- package/plugins/devflow-code-review/skills/documentation-patterns/SKILL.md +125 -0
- package/plugins/devflow-code-review/skills/documentation-patterns/references/detection.md +190 -0
- package/plugins/devflow-code-review/skills/documentation-patterns/references/patterns.md +189 -0
- package/plugins/devflow-code-review/skills/documentation-patterns/references/violations.md +163 -0
- package/plugins/devflow-code-review/skills/frontend-design/SKILL.md +254 -0
- package/plugins/devflow-code-review/skills/frontend-design/references/detection.md +184 -0
- package/plugins/devflow-code-review/skills/frontend-design/references/patterns.md +511 -0
- package/plugins/devflow-code-review/skills/frontend-design/references/violations.md +453 -0
- package/plugins/devflow-code-review/skills/performance-patterns/SKILL.md +154 -0
- package/plugins/devflow-code-review/skills/performance-patterns/references/detection.md +351 -0
- package/plugins/devflow-code-review/skills/performance-patterns/references/patterns.md +503 -0
- package/plugins/devflow-code-review/skills/performance-patterns/references/violations.md +354 -0
- package/plugins/devflow-code-review/skills/react/SKILL.md +276 -0
- package/plugins/devflow-code-review/skills/react/references/patterns.md +1331 -0
- package/plugins/devflow-code-review/skills/react/references/violations.md +565 -0
- package/plugins/devflow-code-review/skills/regression-patterns/SKILL.md +146 -0
- package/plugins/devflow-code-review/skills/regression-patterns/references/detection.md +237 -0
- package/plugins/devflow-code-review/skills/regression-patterns/references/patterns.md +226 -0
- package/plugins/devflow-code-review/skills/regression-patterns/references/violations.md +225 -0
- package/plugins/devflow-code-review/skills/review-methodology/SKILL.md +119 -0
- package/plugins/devflow-code-review/skills/review-methodology/references/patterns.md +186 -0
- package/plugins/devflow-code-review/skills/review-methodology/references/report-template.md +142 -0
- package/plugins/devflow-code-review/skills/review-methodology/references/violations.md +125 -0
- package/plugins/devflow-code-review/skills/security-patterns/SKILL.md +156 -0
- package/plugins/devflow-code-review/skills/security-patterns/references/detection.md +287 -0
- package/plugins/devflow-code-review/skills/security-patterns/references/patterns.md +507 -0
- package/plugins/devflow-code-review/skills/security-patterns/references/violations.md +237 -0
- package/plugins/devflow-code-review/skills/test-patterns/SKILL.md +183 -0
- package/plugins/devflow-code-review/skills/test-patterns/references/detection.md +149 -0
- package/plugins/devflow-code-review/skills/test-patterns/references/patterns.md +220 -0
- package/plugins/devflow-code-review/skills/test-patterns/references/report-template.md +108 -0
- package/plugins/devflow-code-review/skills/test-patterns/references/violations.md +221 -0
- package/plugins/devflow-core-skills/.claude-plugin/plugin.json +28 -0
- package/plugins/devflow-core-skills/README.md +50 -0
- package/plugins/devflow-core-skills/skills/accessibility/SKILL.md +229 -0
- package/plugins/devflow-core-skills/skills/accessibility/references/detection.md +171 -0
- package/plugins/devflow-core-skills/skills/accessibility/references/patterns.md +670 -0
- package/plugins/devflow-core-skills/skills/accessibility/references/violations.md +419 -0
- package/plugins/devflow-core-skills/skills/core-patterns/SKILL.md +162 -0
- package/plugins/devflow-core-skills/skills/core-patterns/references/checklist.md +276 -0
- package/plugins/devflow-core-skills/skills/core-patterns/references/code-smell-violations.md +144 -0
- package/plugins/devflow-core-skills/skills/core-patterns/references/detection.md +303 -0
- package/plugins/devflow-core-skills/skills/core-patterns/references/patterns.md +576 -0
- package/plugins/devflow-core-skills/skills/core-patterns/references/violations.md +369 -0
- package/plugins/devflow-core-skills/skills/docs-framework/SKILL.md +138 -0
- package/plugins/devflow-core-skills/skills/docs-framework/references/patterns.md +346 -0
- package/plugins/devflow-core-skills/skills/docs-framework/references/violations.md +221 -0
- package/plugins/devflow-core-skills/skills/frontend-design/SKILL.md +254 -0
- package/plugins/devflow-core-skills/skills/frontend-design/references/detection.md +184 -0
- package/plugins/devflow-core-skills/skills/frontend-design/references/patterns.md +511 -0
- package/plugins/devflow-core-skills/skills/frontend-design/references/violations.md +453 -0
- package/plugins/devflow-core-skills/skills/git-safety/SKILL.md +122 -0
- package/plugins/devflow-core-skills/skills/git-safety/references/detection.md +290 -0
- package/plugins/devflow-core-skills/skills/git-safety/references/patterns.md +289 -0
- package/plugins/devflow-core-skills/skills/git-safety/references/violations.md +18 -0
- package/plugins/devflow-core-skills/skills/git-workflow/SKILL.md +158 -0
- package/plugins/devflow-core-skills/skills/git-workflow/references/commit-patterns.md +115 -0
- package/plugins/devflow-core-skills/skills/git-workflow/references/commit-violations.md +77 -0
- package/plugins/devflow-core-skills/skills/git-workflow/references/pr-patterns.md +127 -0
- package/plugins/devflow-core-skills/skills/git-workflow/references/pr-violations.md +96 -0
- package/plugins/devflow-core-skills/skills/github-patterns/SKILL.md +153 -0
- package/plugins/devflow-core-skills/skills/github-patterns/references/patterns.md +572 -0
- package/plugins/devflow-core-skills/skills/github-patterns/references/violations.md +298 -0
- package/plugins/devflow-core-skills/skills/input-validation/SKILL.md +148 -0
- package/plugins/devflow-core-skills/skills/input-validation/references/detection.md +283 -0
- package/plugins/devflow-core-skills/skills/input-validation/references/patterns.md +361 -0
- package/plugins/devflow-core-skills/skills/input-validation/references/violations.md +224 -0
- package/plugins/devflow-core-skills/skills/react/SKILL.md +276 -0
- package/plugins/devflow-core-skills/skills/react/references/patterns.md +1331 -0
- package/plugins/devflow-core-skills/skills/react/references/violations.md +565 -0
- package/plugins/devflow-core-skills/skills/test-driven-development/SKILL.md +139 -0
- package/plugins/devflow-core-skills/skills/test-driven-development/references/rationalization-prevention.md +111 -0
- package/plugins/devflow-core-skills/skills/test-patterns/SKILL.md +183 -0
- package/plugins/devflow-core-skills/skills/test-patterns/references/detection.md +149 -0
- package/plugins/devflow-core-skills/skills/test-patterns/references/patterns.md +220 -0
- package/plugins/devflow-core-skills/skills/test-patterns/references/report-template.md +108 -0
- package/plugins/devflow-core-skills/skills/test-patterns/references/violations.md +221 -0
- package/plugins/devflow-core-skills/skills/typescript/SKILL.md +176 -0
- package/plugins/devflow-core-skills/skills/typescript/references/patterns.md +1105 -0
- package/plugins/devflow-core-skills/skills/typescript/references/violations.md +433 -0
- package/plugins/devflow-debug/.claude-plugin/plugin.json +18 -0
- package/plugins/devflow-debug/README.md +65 -0
- package/plugins/devflow-debug/agents/git.md +272 -0
- package/plugins/devflow-debug/commands/debug-teams.md +231 -0
- package/plugins/devflow-debug/commands/debug.md +160 -0
- package/plugins/devflow-debug/skills/agent-teams/SKILL.md +124 -0
- package/plugins/devflow-debug/skills/agent-teams/references/cleanup.md +104 -0
- package/plugins/devflow-debug/skills/agent-teams/references/communication.md +122 -0
- package/plugins/devflow-debug/skills/agent-teams/references/team-patterns.md +217 -0
- package/plugins/devflow-debug/skills/git-safety/SKILL.md +122 -0
- package/plugins/devflow-debug/skills/git-safety/references/detection.md +290 -0
- package/plugins/devflow-debug/skills/git-safety/references/patterns.md +289 -0
- package/plugins/devflow-debug/skills/git-safety/references/violations.md +18 -0
- package/plugins/devflow-implement/.claude-plugin/plugin.json +21 -0
- package/plugins/devflow-implement/README.md +71 -0
- package/plugins/devflow-implement/agents/coder.md +122 -0
- package/plugins/devflow-implement/agents/git.md +272 -0
- package/plugins/devflow-implement/agents/scrutinizer.md +80 -0
- package/plugins/devflow-implement/agents/shepherd.md +94 -0
- package/plugins/devflow-implement/agents/simplifier.md +62 -0
- package/plugins/devflow-implement/agents/skimmer.md +88 -0
- package/plugins/devflow-implement/agents/synthesizer.md +204 -0
- package/plugins/devflow-implement/agents/validator.md +86 -0
- package/plugins/devflow-implement/commands/implement-teams.md +608 -0
- package/plugins/devflow-implement/commands/implement.md +426 -0
- package/plugins/devflow-implement/skills/accessibility/SKILL.md +229 -0
- package/plugins/devflow-implement/skills/accessibility/references/detection.md +171 -0
- package/plugins/devflow-implement/skills/accessibility/references/patterns.md +670 -0
- package/plugins/devflow-implement/skills/accessibility/references/violations.md +419 -0
- package/plugins/devflow-implement/skills/agent-teams/SKILL.md +124 -0
- package/plugins/devflow-implement/skills/agent-teams/references/cleanup.md +104 -0
- package/plugins/devflow-implement/skills/agent-teams/references/communication.md +122 -0
- package/plugins/devflow-implement/skills/agent-teams/references/team-patterns.md +217 -0
- package/plugins/devflow-implement/skills/frontend-design/SKILL.md +254 -0
- package/plugins/devflow-implement/skills/frontend-design/references/detection.md +184 -0
- package/plugins/devflow-implement/skills/frontend-design/references/patterns.md +511 -0
- package/plugins/devflow-implement/skills/frontend-design/references/violations.md +453 -0
- package/plugins/devflow-implement/skills/implementation-patterns/SKILL.md +162 -0
- package/plugins/devflow-implement/skills/implementation-patterns/references/patterns.md +1063 -0
- package/plugins/devflow-implement/skills/implementation-patterns/references/violations.md +483 -0
- package/plugins/devflow-implement/skills/self-review/SKILL.md +149 -0
- package/plugins/devflow-implement/skills/self-review/references/patterns.md +405 -0
- package/plugins/devflow-implement/skills/self-review/references/report-template.md +253 -0
- package/plugins/devflow-implement/skills/self-review/references/violations.md +308 -0
- package/plugins/devflow-resolve/.claude-plugin/plugin.json +19 -0
- package/plugins/devflow-resolve/README.md +65 -0
- package/plugins/devflow-resolve/agents/git.md +272 -0
- package/plugins/devflow-resolve/agents/resolver.md +131 -0
- package/plugins/devflow-resolve/agents/simplifier.md +62 -0
- package/plugins/devflow-resolve/commands/resolve-teams.md +298 -0
- package/plugins/devflow-resolve/commands/resolve.md +237 -0
- package/plugins/devflow-resolve/skills/agent-teams/SKILL.md +124 -0
- package/plugins/devflow-resolve/skills/agent-teams/references/cleanup.md +104 -0
- package/plugins/devflow-resolve/skills/agent-teams/references/communication.md +122 -0
- package/plugins/devflow-resolve/skills/agent-teams/references/team-patterns.md +217 -0
- package/plugins/devflow-resolve/skills/implementation-patterns/SKILL.md +162 -0
- package/plugins/devflow-resolve/skills/implementation-patterns/references/patterns.md +1063 -0
- package/plugins/devflow-resolve/skills/implementation-patterns/references/violations.md +483 -0
- package/plugins/devflow-resolve/skills/security-patterns/SKILL.md +156 -0
- package/plugins/devflow-resolve/skills/security-patterns/references/detection.md +287 -0
- package/plugins/devflow-resolve/skills/security-patterns/references/patterns.md +507 -0
- package/plugins/devflow-resolve/skills/security-patterns/references/violations.md +237 -0
- package/plugins/devflow-self-review/.claude-plugin/plugin.json +7 -0
- package/plugins/devflow-self-review/README.md +38 -0
- package/plugins/devflow-self-review/agents/scrutinizer.md +80 -0
- package/plugins/devflow-self-review/agents/simplifier.md +62 -0
- package/plugins/devflow-self-review/agents/validator.md +86 -0
- package/plugins/devflow-self-review/commands/self-review.md +126 -0
- package/plugins/devflow-self-review/skills/core-patterns/SKILL.md +162 -0
- package/plugins/devflow-self-review/skills/core-patterns/references/checklist.md +276 -0
- package/plugins/devflow-self-review/skills/core-patterns/references/code-smell-violations.md +144 -0
- package/plugins/devflow-self-review/skills/core-patterns/references/detection.md +303 -0
- package/plugins/devflow-self-review/skills/core-patterns/references/patterns.md +576 -0
- package/plugins/devflow-self-review/skills/core-patterns/references/violations.md +369 -0
- package/plugins/devflow-self-review/skills/self-review/SKILL.md +149 -0
- package/plugins/devflow-self-review/skills/self-review/references/patterns.md +405 -0
- package/plugins/devflow-self-review/skills/self-review/references/report-template.md +253 -0
- package/plugins/devflow-self-review/skills/self-review/references/violations.md +308 -0
- package/plugins/devflow-specify/.claude-plugin/plugin.json +15 -0
- package/plugins/devflow-specify/README.md +46 -0
- package/plugins/devflow-specify/agents/skimmer.md +88 -0
- package/plugins/devflow-specify/agents/synthesizer.md +204 -0
- package/plugins/devflow-specify/commands/specify-teams.md +314 -0
- package/plugins/devflow-specify/commands/specify.md +179 -0
- package/plugins/devflow-specify/skills/agent-teams/SKILL.md +124 -0
- package/plugins/devflow-specify/skills/agent-teams/references/cleanup.md +104 -0
- package/plugins/devflow-specify/skills/agent-teams/references/communication.md +122 -0
- package/plugins/devflow-specify/skills/agent-teams/references/team-patterns.md +217 -0
- package/scripts/hooks/ambient-prompt.sh +48 -0
- package/scripts/hooks/background-memory-update.sh +208 -0
- package/scripts/hooks/ensure-memory-gitignore.sh +17 -0
- package/scripts/hooks/pre-compact-memory.sh +87 -0
- package/scripts/hooks/session-start-memory.sh +126 -0
- package/scripts/hooks/stop-update-memory.sh +85 -0
- package/shared/agents/coder.md +122 -0
- package/shared/agents/git.md +272 -0
- package/shared/agents/resolver.md +131 -0
- package/shared/agents/reviewer.md +119 -0
- package/shared/agents/scrutinizer.md +80 -0
- package/shared/agents/shepherd.md +94 -0
- package/shared/agents/simplifier.md +62 -0
- package/shared/agents/skimmer.md +88 -0
- package/shared/agents/synthesizer.md +204 -0
- package/shared/agents/validator.md +86 -0
- package/shared/skills/accessibility/SKILL.md +229 -0
- package/shared/skills/accessibility/references/detection.md +171 -0
- package/shared/skills/accessibility/references/patterns.md +670 -0
- package/shared/skills/accessibility/references/violations.md +419 -0
- package/shared/skills/agent-teams/SKILL.md +124 -0
- package/shared/skills/agent-teams/references/cleanup.md +104 -0
- package/shared/skills/agent-teams/references/communication.md +122 -0
- package/shared/skills/agent-teams/references/team-patterns.md +217 -0
- package/shared/skills/ambient-router/SKILL.md +89 -0
- package/shared/skills/ambient-router/references/skill-catalog.md +64 -0
- package/shared/skills/architecture-patterns/SKILL.md +153 -0
- package/shared/skills/architecture-patterns/references/detection.md +337 -0
- package/shared/skills/architecture-patterns/references/patterns.md +873 -0
- package/shared/skills/architecture-patterns/references/violations.md +575 -0
- package/shared/skills/complexity-patterns/SKILL.md +143 -0
- package/shared/skills/complexity-patterns/references/detection.md +264 -0
- package/shared/skills/complexity-patterns/references/patterns.md +487 -0
- package/shared/skills/complexity-patterns/references/violations.md +361 -0
- package/shared/skills/consistency-patterns/SKILL.md +140 -0
- package/shared/skills/consistency-patterns/references/detection.md +207 -0
- package/shared/skills/consistency-patterns/references/patterns.md +202 -0
- package/shared/skills/consistency-patterns/references/violations.md +213 -0
- package/shared/skills/core-patterns/SKILL.md +162 -0
- package/shared/skills/core-patterns/references/checklist.md +276 -0
- package/shared/skills/core-patterns/references/code-smell-violations.md +144 -0
- package/shared/skills/core-patterns/references/detection.md +303 -0
- package/shared/skills/core-patterns/references/patterns.md +576 -0
- package/shared/skills/core-patterns/references/violations.md +369 -0
- package/shared/skills/database-patterns/SKILL.md +134 -0
- package/shared/skills/database-patterns/references/detection.md +208 -0
- package/shared/skills/database-patterns/references/patterns.md +394 -0
- package/shared/skills/database-patterns/references/violations.md +332 -0
- package/shared/skills/dependencies-patterns/SKILL.md +141 -0
- package/shared/skills/dependencies-patterns/references/detection.md +181 -0
- package/shared/skills/dependencies-patterns/references/patterns.md +225 -0
- package/shared/skills/dependencies-patterns/references/violations.md +247 -0
- package/shared/skills/docs-framework/SKILL.md +138 -0
- package/shared/skills/docs-framework/references/patterns.md +346 -0
- package/shared/skills/docs-framework/references/violations.md +221 -0
- package/shared/skills/documentation-patterns/SKILL.md +125 -0
- package/shared/skills/documentation-patterns/references/detection.md +190 -0
- package/shared/skills/documentation-patterns/references/patterns.md +189 -0
- package/shared/skills/documentation-patterns/references/violations.md +163 -0
- package/shared/skills/frontend-design/SKILL.md +254 -0
- package/shared/skills/frontend-design/references/detection.md +184 -0
- package/shared/skills/frontend-design/references/patterns.md +511 -0
- package/shared/skills/frontend-design/references/violations.md +453 -0
- package/shared/skills/git-safety/SKILL.md +122 -0
- package/shared/skills/git-safety/references/detection.md +290 -0
- package/shared/skills/git-safety/references/patterns.md +289 -0
- package/shared/skills/git-safety/references/violations.md +18 -0
- package/shared/skills/git-workflow/SKILL.md +158 -0
- package/shared/skills/git-workflow/references/commit-patterns.md +115 -0
- package/shared/skills/git-workflow/references/commit-violations.md +77 -0
- package/shared/skills/git-workflow/references/pr-patterns.md +127 -0
- package/shared/skills/git-workflow/references/pr-violations.md +96 -0
- package/shared/skills/github-patterns/SKILL.md +153 -0
- package/shared/skills/github-patterns/references/patterns.md +572 -0
- package/shared/skills/github-patterns/references/violations.md +298 -0
- package/shared/skills/implementation-patterns/SKILL.md +162 -0
- package/shared/skills/implementation-patterns/references/patterns.md +1063 -0
- package/shared/skills/implementation-patterns/references/violations.md +483 -0
- package/shared/skills/input-validation/SKILL.md +148 -0
- package/shared/skills/input-validation/references/detection.md +283 -0
- package/shared/skills/input-validation/references/patterns.md +361 -0
- package/shared/skills/input-validation/references/violations.md +224 -0
- package/shared/skills/performance-patterns/SKILL.md +154 -0
- package/shared/skills/performance-patterns/references/detection.md +351 -0
- package/shared/skills/performance-patterns/references/patterns.md +503 -0
- package/shared/skills/performance-patterns/references/violations.md +354 -0
- package/shared/skills/react/SKILL.md +276 -0
- package/shared/skills/react/references/patterns.md +1331 -0
- package/shared/skills/react/references/violations.md +565 -0
- package/shared/skills/regression-patterns/SKILL.md +146 -0
- package/shared/skills/regression-patterns/references/detection.md +237 -0
- package/shared/skills/regression-patterns/references/patterns.md +226 -0
- package/shared/skills/regression-patterns/references/violations.md +225 -0
- package/shared/skills/review-methodology/SKILL.md +119 -0
- package/shared/skills/review-methodology/references/patterns.md +186 -0
- package/shared/skills/review-methodology/references/report-template.md +142 -0
- package/shared/skills/review-methodology/references/violations.md +125 -0
- package/shared/skills/security-patterns/SKILL.md +156 -0
- package/shared/skills/security-patterns/references/detection.md +287 -0
- package/shared/skills/security-patterns/references/patterns.md +507 -0
- package/shared/skills/security-patterns/references/violations.md +237 -0
- package/shared/skills/self-review/SKILL.md +149 -0
- package/shared/skills/self-review/references/patterns.md +405 -0
- package/shared/skills/self-review/references/report-template.md +253 -0
- package/shared/skills/self-review/references/violations.md +308 -0
- package/shared/skills/test-driven-development/SKILL.md +139 -0
- package/shared/skills/test-driven-development/references/rationalization-prevention.md +111 -0
- package/shared/skills/test-patterns/SKILL.md +183 -0
- package/shared/skills/test-patterns/references/detection.md +149 -0
- package/shared/skills/test-patterns/references/patterns.md +220 -0
- package/shared/skills/test-patterns/references/report-template.md +108 -0
- package/shared/skills/test-patterns/references/violations.md +221 -0
- package/shared/skills/typescript/SKILL.md +176 -0
- package/shared/skills/typescript/references/patterns.md +1105 -0
- package/shared/skills/typescript/references/violations.md +433 -0
- package/src/templates/claudeignore.template +188 -0
- package/src/templates/managed-settings.json +160 -0
- package/src/templates/settings.json +59 -0
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/uninstall.d.ts.map +0 -1
- package/dist/commands/uninstall.js.map +0 -1
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/paths.d.ts.map +0 -1
- package/dist/utils/paths.js.map +0 -1
- package/src/claude/CLAUDE.md +0 -400
- package/src/claude/agents/devflow/audit-architecture.md +0 -132
- package/src/claude/agents/devflow/audit-complexity.md +0 -132
- package/src/claude/agents/devflow/audit-database.md +0 -132
- package/src/claude/agents/devflow/audit-dependencies.md +0 -132
- package/src/claude/agents/devflow/audit-documentation.md +0 -132
- package/src/claude/agents/devflow/audit-performance.md +0 -256
- package/src/claude/agents/devflow/audit-security.md +0 -259
- package/src/claude/agents/devflow/audit-tests.md +0 -132
- package/src/claude/agents/devflow/audit-typescript.md +0 -132
- package/src/claude/agents/devflow/brainstorm.md +0 -279
- package/src/claude/agents/devflow/catch-up.md +0 -345
- package/src/claude/agents/devflow/code-review.md +0 -307
- package/src/claude/agents/devflow/commit.md +0 -380
- package/src/claude/agents/devflow/debug.md +0 -476
- package/src/claude/agents/devflow/design.md +0 -491
- package/src/claude/agents/devflow/get-issue.md +0 -286
- package/src/claude/agents/devflow/pr-comments.md +0 -285
- package/src/claude/agents/devflow/project-state.md +0 -419
- package/src/claude/agents/devflow/pull-request.md +0 -493
- package/src/claude/agents/devflow/release.md +0 -1137
- package/src/claude/agents/devflow/tech-debt.md +0 -338
- package/src/claude/commands/devflow/brainstorm.md +0 -68
- package/src/claude/commands/devflow/breakdown.md +0 -125
- package/src/claude/commands/devflow/catch-up.md +0 -29
- package/src/claude/commands/devflow/code-review.md +0 -237
- package/src/claude/commands/devflow/commit.md +0 -17
- package/src/claude/commands/devflow/debug.md +0 -56
- package/src/claude/commands/devflow/design.md +0 -82
- package/src/claude/commands/devflow/devlog.md +0 -408
- package/src/claude/commands/devflow/get-issue.md +0 -16
- package/src/claude/commands/devflow/implement.md +0 -100
- package/src/claude/commands/devflow/plan.md +0 -223
- package/src/claude/commands/devflow/pull-request.md +0 -20
- package/src/claude/commands/devflow/release.md +0 -251
- package/src/claude/commands/devflow/resolve-comments.md +0 -583
- package/src/claude/scripts/statusline.sh +0 -47
- package/src/claude/settings.json +0 -6
- package/src/claude/skills/devflow/code-smell/SKILL.md +0 -428
- package/src/claude/skills/devflow/debug/SKILL.md +0 -119
- package/src/claude/skills/devflow/error-handling/SKILL.md +0 -597
- package/src/claude/skills/devflow/input-validation/SKILL.md +0 -514
- package/src/claude/skills/devflow/pattern-check/SKILL.md +0 -238
- package/src/claude/skills/devflow/research/SKILL.md +0 -138
- package/src/claude/skills/devflow/test-design/SKILL.md +0 -384
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Correct Consistency Patterns Reference
|
|
2
|
+
|
|
3
|
+
Extended examples of correct patterns to follow.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Naming Conventions
|
|
8
|
+
|
|
9
|
+
### Function Naming
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// EXISTING PATTERN: camelCase for functions
|
|
13
|
+
function getUserById(id: string) { }
|
|
14
|
+
function createOrder(data: OrderData) { }
|
|
15
|
+
function validateInput(input: string) { }
|
|
16
|
+
function processPayment(amount: number) { }
|
|
17
|
+
|
|
18
|
+
// All new functions MUST match this style
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Class Naming
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// EXISTING PATTERN: PascalCase for classes
|
|
25
|
+
class UserService { }
|
|
26
|
+
class OrderRepository { }
|
|
27
|
+
class PaymentGateway { }
|
|
28
|
+
class ValidationError extends Error { }
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Constant Naming
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
// EXISTING PATTERN: SCREAMING_SNAKE_CASE for true constants
|
|
35
|
+
const MAX_RETRY_ATTEMPTS = 3;
|
|
36
|
+
const API_BASE_URL = 'https://api.example.com';
|
|
37
|
+
const DEFAULT_TIMEOUT_MS = 5000;
|
|
38
|
+
|
|
39
|
+
// camelCase for configuration objects
|
|
40
|
+
const serverConfig = { port: 3000 };
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Error Handling
|
|
46
|
+
|
|
47
|
+
### Result Type Pattern
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
// EXISTING PATTERN: Result types
|
|
51
|
+
function existingFunction(): Result<User, Error> {
|
|
52
|
+
if (!valid) return Err(new ValidationError('Detailed message'));
|
|
53
|
+
return Ok(user);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// CORRECT: Match existing
|
|
57
|
+
function newFunction(): Result<Order, Error> {
|
|
58
|
+
if (!valid) return Err(new ValidationError('Detailed message'));
|
|
59
|
+
return Ok(order);
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Error Messages
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
// CORRECT: Informative error messages
|
|
67
|
+
throw new Error(`Failed to process order ${orderId}: ${reason}. Customer: ${customerId}. Items: ${itemCount}`);
|
|
68
|
+
|
|
69
|
+
// Include:
|
|
70
|
+
// - What failed
|
|
71
|
+
// - Why it failed (if known)
|
|
72
|
+
// - Context for debugging
|
|
73
|
+
// - Action the user can take (for user-facing)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Import Organization
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
// CORRECT ORDER:
|
|
82
|
+
// 1. Node built-ins
|
|
83
|
+
import fs from 'fs';
|
|
84
|
+
import path from 'path';
|
|
85
|
+
|
|
86
|
+
// 2. External packages
|
|
87
|
+
import express from 'express';
|
|
88
|
+
import { z } from 'zod';
|
|
89
|
+
|
|
90
|
+
// 3. Internal packages (@company/*)
|
|
91
|
+
import { Logger } from '@internal/logger';
|
|
92
|
+
import { Config } from '@internal/config';
|
|
93
|
+
|
|
94
|
+
// 4. Relative imports (parent directories first)
|
|
95
|
+
import { BaseService } from '../../base';
|
|
96
|
+
import { User } from '../models';
|
|
97
|
+
import { validate } from './utils';
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Export Patterns
|
|
103
|
+
|
|
104
|
+
### Named Exports (Preferred)
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
// Functions
|
|
108
|
+
export function createUser(data: UserInput): Result<User, Error> { }
|
|
109
|
+
export function deleteUser(id: string): Result<void, Error> { }
|
|
110
|
+
|
|
111
|
+
// Classes
|
|
112
|
+
export class UserService { }
|
|
113
|
+
export class UserRepository { }
|
|
114
|
+
|
|
115
|
+
// Types
|
|
116
|
+
export type UserId = string;
|
|
117
|
+
export interface UserConfig { }
|
|
118
|
+
|
|
119
|
+
// Constants
|
|
120
|
+
export const DEFAULT_PAGE_SIZE = 20;
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Barrel Exports
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
// src/services/index.ts
|
|
127
|
+
export { UserService } from './user-service';
|
|
128
|
+
export { OrderService } from './order-service';
|
|
129
|
+
export type { ServiceConfig } from './types';
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Configuration Preservation
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
// CORRECT: Maintain configuration flexibility
|
|
138
|
+
interface ServerConfig {
|
|
139
|
+
// Required
|
|
140
|
+
port: number;
|
|
141
|
+
host: string;
|
|
142
|
+
|
|
143
|
+
// Optional with defaults
|
|
144
|
+
timeout?: number;
|
|
145
|
+
maxConnections?: number;
|
|
146
|
+
|
|
147
|
+
// Nested configs
|
|
148
|
+
ssl?: SSLConfig;
|
|
149
|
+
logging?: LogConfig;
|
|
150
|
+
cors?: CorsConfig;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Deprecation notice when removing options
|
|
154
|
+
/**
|
|
155
|
+
* @deprecated Use `logging.level` instead. Will be removed in v3.0
|
|
156
|
+
*/
|
|
157
|
+
debugMode?: boolean;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Event Emission Preservation
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
// CORRECT: Maintain all event emissions
|
|
166
|
+
class OrderService {
|
|
167
|
+
async createOrder(data: OrderData) {
|
|
168
|
+
const order = await this.repository.create(data);
|
|
169
|
+
|
|
170
|
+
// All existing events preserved
|
|
171
|
+
this.events.emit('order.created', order);
|
|
172
|
+
this.events.emit('inventory.reserve', order.items);
|
|
173
|
+
this.events.emit('notification.send', {
|
|
174
|
+
type: 'order_confirmation',
|
|
175
|
+
userId: order.userId,
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
return order;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// If removing events, deprecate first:
|
|
183
|
+
// DEPRECATED: 'order.legacy' event will be removed in v3.0
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## CLI Option Preservation
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
// CORRECT: Maintain all CLI options
|
|
192
|
+
program
|
|
193
|
+
.option('-v, --verbose', 'Enable verbose output')
|
|
194
|
+
.option('-d, --debug', 'Enable debug mode')
|
|
195
|
+
.option('-c, --config <path>', 'Config file path')
|
|
196
|
+
.option('--dry-run', 'Preview without executing')
|
|
197
|
+
// New options add to existing, don't replace
|
|
198
|
+
.option('--json', 'Output in JSON format');
|
|
199
|
+
|
|
200
|
+
// If removing, add deprecation warning:
|
|
201
|
+
.option('--old-flag', '[DEPRECATED] Use --new-flag instead')
|
|
202
|
+
```
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# Consistency Violations Reference
|
|
2
|
+
|
|
3
|
+
Extended examples of consistency violations to detect.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Unnecessary Simplification
|
|
8
|
+
|
|
9
|
+
### Content Truncation
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// BEFORE (comprehensive)
|
|
13
|
+
const errorMessages = {
|
|
14
|
+
INVALID_EMAIL: 'Please enter a valid email address in the format user@domain.com',
|
|
15
|
+
PASSWORD_WEAK: 'Password must contain at least 8 characters, one uppercase, one lowercase, one number, and one special character',
|
|
16
|
+
USER_NOT_FOUND: 'We could not find an account with that email. Please check the email or create a new account.',
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// AFTER (over-simplified - PROBLEM)
|
|
20
|
+
const errorMessages = {
|
|
21
|
+
INVALID_EMAIL: 'Invalid email',
|
|
22
|
+
PASSWORD_WEAK: 'Password too weak',
|
|
23
|
+
USER_NOT_FOUND: 'Not found',
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// RED FLAG: User-facing messages should be helpful, not minimal
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Removed Error Context
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
// BEFORE (informative)
|
|
33
|
+
throw new Error(`Failed to process order ${orderId}: ${reason}. Customer: ${customerId}. Items: ${itemCount}`);
|
|
34
|
+
|
|
35
|
+
// AFTER (stripped - PROBLEM)
|
|
36
|
+
throw new Error('Order failed');
|
|
37
|
+
|
|
38
|
+
// RED FLAG: Debug info removed, harder to troubleshoot
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Stripped Configuration Options
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
// BEFORE (flexible)
|
|
45
|
+
interface ServerConfig {
|
|
46
|
+
port: number;
|
|
47
|
+
host: string;
|
|
48
|
+
timeout: number;
|
|
49
|
+
maxConnections: number;
|
|
50
|
+
ssl: SSLConfig;
|
|
51
|
+
logging: LogConfig;
|
|
52
|
+
cors: CorsConfig;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// AFTER (rigid - PROBLEM)
|
|
56
|
+
interface ServerConfig {
|
|
57
|
+
port: number;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// RED FLAG: Configuration flexibility removed
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Pattern Violations
|
|
66
|
+
|
|
67
|
+
### Import Organization Inconsistency
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
// EXISTING PATTERN: External, internal, relative
|
|
71
|
+
import express from 'express'; // External
|
|
72
|
+
import { Logger } from '@internal/logger'; // Internal
|
|
73
|
+
import { User } from './models'; // Relative
|
|
74
|
+
|
|
75
|
+
// VIOLATION: Mixed order
|
|
76
|
+
import { User } from './models';
|
|
77
|
+
import express from 'express';
|
|
78
|
+
import { Logger } from '@internal/logger';
|
|
79
|
+
|
|
80
|
+
// CORRECT: Match existing organization
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Export Pattern Mismatch
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
// EXISTING PATTERN: Named exports
|
|
87
|
+
export function createUser() { }
|
|
88
|
+
export function deleteUser() { }
|
|
89
|
+
export const UserSchema = z.object({ });
|
|
90
|
+
|
|
91
|
+
// VIOLATION: Default export
|
|
92
|
+
export default class UserService { // Different pattern!
|
|
93
|
+
create() { }
|
|
94
|
+
delete() { }
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// CORRECT: Match existing
|
|
98
|
+
export class UserService { }
|
|
99
|
+
export const userService = new UserService();
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Feature Regression
|
|
105
|
+
|
|
106
|
+
### Removed CLI Options
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
// BEFORE
|
|
110
|
+
program
|
|
111
|
+
.option('-v, --verbose', 'Enable verbose output')
|
|
112
|
+
.option('-d, --debug', 'Enable debug mode')
|
|
113
|
+
.option('-c, --config <path>', 'Config file path')
|
|
114
|
+
.option('--dry-run', 'Preview without executing');
|
|
115
|
+
|
|
116
|
+
// AFTER (PROBLEM)
|
|
117
|
+
program
|
|
118
|
+
.option('-c, --config <path>', 'Config file path');
|
|
119
|
+
|
|
120
|
+
// RED FLAG: Users relying on removed options will break
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Changed Return Types
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
// BEFORE
|
|
127
|
+
async function fetchUsers(): Promise<User[]> {
|
|
128
|
+
return users;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// AFTER (PROBLEM)
|
|
132
|
+
async function fetchUsers(): Promise<{ data: User[] }> {
|
|
133
|
+
return { data: users }; // Breaking change!
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// All callers expecting User[] will break
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Removed Event Emissions
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
// BEFORE
|
|
143
|
+
class OrderService {
|
|
144
|
+
async createOrder(data: OrderData) {
|
|
145
|
+
const order = await this.repository.create(data);
|
|
146
|
+
this.events.emit('order.created', order); // Other services listen
|
|
147
|
+
this.events.emit('inventory.reserve', order.items);
|
|
148
|
+
return order;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// AFTER (PROBLEM)
|
|
153
|
+
class OrderService {
|
|
154
|
+
async createOrder(data: OrderData) {
|
|
155
|
+
const order = await this.repository.create(data);
|
|
156
|
+
return order; // Events removed - listeners won't fire!
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Style Inconsistency
|
|
164
|
+
|
|
165
|
+
### Brace Style
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// EXISTING PATTERN: Same-line braces
|
|
169
|
+
function existing() {
|
|
170
|
+
if (condition) {
|
|
171
|
+
// ...
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// VIOLATION: Next-line braces
|
|
176
|
+
function newFunction()
|
|
177
|
+
{
|
|
178
|
+
if (condition)
|
|
179
|
+
{
|
|
180
|
+
// ...
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Quote Style
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
// EXISTING PATTERN: Single quotes
|
|
189
|
+
const name = 'John';
|
|
190
|
+
const message = 'Hello';
|
|
191
|
+
|
|
192
|
+
// VIOLATION: Double quotes
|
|
193
|
+
const name = "Jane"; // Inconsistent
|
|
194
|
+
|
|
195
|
+
// CORRECT: Match existing
|
|
196
|
+
const name = 'Jane';
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Trailing Commas
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
// EXISTING PATTERN: Trailing commas
|
|
203
|
+
const config = {
|
|
204
|
+
name: 'app',
|
|
205
|
+
version: '1.0',
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
// VIOLATION: No trailing comma
|
|
209
|
+
const newConfig = {
|
|
210
|
+
name: 'app',
|
|
211
|
+
version: '1.0' // Missing trailing comma
|
|
212
|
+
};
|
|
213
|
+
```
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: core-patterns
|
|
3
|
+
description: This skill should be used when the user asks to "handle errors", "inject dependencies", "return Result", "make it immutable", "compose with pipes", or implements business logic, error handling, or service composition. Provides Result type patterns, dependency injection, immutability by default, pipe composition, and structured logging for robust application architecture.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
allowed-tools: Read, Grep, Glob, AskUserQuestion
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Core Engineering Patterns
|
|
9
|
+
|
|
10
|
+
The canonical source of architectural patterns and principles for consistent, high-quality code.
|
|
11
|
+
|
|
12
|
+
## Iron Law
|
|
13
|
+
|
|
14
|
+
> **NEVER THROW IN BUSINESS LOGIC**
|
|
15
|
+
>
|
|
16
|
+
> All operations that can fail MUST return Result types. Exceptions are allowed
|
|
17
|
+
> ONLY at system boundaries (API handlers, database adapters). Any `throw` statement
|
|
18
|
+
> in business logic is a violation. No exceptions.
|
|
19
|
+
|
|
20
|
+
## Philosophy
|
|
21
|
+
|
|
22
|
+
1. **Type Safety First** - Strict type checking, avoid dynamic types
|
|
23
|
+
2. **Functional Core, Imperative Shell** - Business logic pure, side effects isolated
|
|
24
|
+
3. **Explicit Error Handling** - Result types instead of exceptions
|
|
25
|
+
4. **Immutability by Default** - Return new objects, don't mutate
|
|
26
|
+
5. **Dependency Injection** - Inject dependencies for testability
|
|
27
|
+
6. **Test Behaviors** - Simple tests that validate behavior, not implementation
|
|
28
|
+
7. **No Fake Solutions** - Be honest about limitations and workarounds
|
|
29
|
+
8. **Fix Root Causes** - Never work around bad architecture
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Pattern 1: Result Types
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
type Result<T, E = Error> = { ok: true; value: T } | { ok: false; error: E };
|
|
37
|
+
|
|
38
|
+
function createUser(data: unknown): Result<User, ValidationError> {
|
|
39
|
+
if (!valid(data)) return Err({ type: 'ValidationFailed', details: validate(data).errors });
|
|
40
|
+
return Ok(buildUser(data));
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Pattern 2: Dependency Injection
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
class UserService {
|
|
48
|
+
constructor(private db: Database, private emailer: EmailService) {}
|
|
49
|
+
}
|
|
50
|
+
// Easy to test: new UserService(mockDb, mockEmailer)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Never: `private db = new Database()` - can't mock.
|
|
54
|
+
|
|
55
|
+
## Pattern 3: Immutability
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
function updateUser(user: User, changes: Partial<User>): User {
|
|
59
|
+
return { ...user, ...changes }; // New object, no mutation
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Never mutate inputs. Copy before `.sort()`.
|
|
64
|
+
|
|
65
|
+
## Pattern 4: Pure Functions
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
function calculateTotal(items: Item[], taxRate: number): number {
|
|
69
|
+
return items.reduce((sum, i) => sum + i.price, 0) * (1 + taxRate);
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
No side effects in pure functions.
|
|
74
|
+
|
|
75
|
+
## Pattern 5: Type Safety
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
type Status = 'pending' | 'completed' | 'failed';
|
|
79
|
+
function handleStatus(status: Status): string {
|
|
80
|
+
switch (status) {
|
|
81
|
+
case 'pending': return 'Waiting';
|
|
82
|
+
case 'completed': return 'Done';
|
|
83
|
+
case 'failed': return 'Error';
|
|
84
|
+
} // Exhaustive - no default needed
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Pattern 6: Error Type Design
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
type UserError =
|
|
92
|
+
| { type: 'NotFound'; userId: string }
|
|
93
|
+
| { type: 'ValidationFailed'; field: string; message: string };
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Pattern 7: Resource Cleanup
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
const handle = await fs.open(path);
|
|
100
|
+
try {
|
|
101
|
+
return Ok(parse(await handle.readFile()));
|
|
102
|
+
} finally {
|
|
103
|
+
await handle.close();
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Pattern 8: Architecture Documentation
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
// ARCHITECTURE: Repository returns domain objects only
|
|
111
|
+
// ARCHITECTURE EXCEPTION: Direct DB for health check - must work if service layer down
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Pattern 9: Naming Conventions
|
|
115
|
+
|
|
116
|
+
- **Types/Classes**: PascalCase (`UserProfile`)
|
|
117
|
+
- **Functions/Variables**: camelCase (`calculateTotal`)
|
|
118
|
+
- **Constants**: SCREAMING_SNAKE_CASE (`MAX_RETRY`)
|
|
119
|
+
|
|
120
|
+
## Pattern 10: Performance Awareness
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
const customerMap = new Map(customers.map(c => [c.id, c])); // O(1) vs O(n)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Consistency Rules
|
|
129
|
+
|
|
130
|
+
- Result types: if one method returns Result, ALL must
|
|
131
|
+
- DI: apply consistently throughout
|
|
132
|
+
- Async: single pattern (don't mix callbacks/promises)
|
|
133
|
+
|
|
134
|
+
## Anti-Patterns
|
|
135
|
+
|
|
136
|
+
| Pattern | Description |
|
|
137
|
+
|---------|-------------|
|
|
138
|
+
| Fake Solutions | Hardcoded responses simulating functionality |
|
|
139
|
+
| Silent Failures | Catch blocks that swallow errors |
|
|
140
|
+
| Magic Values | Unlabeled constants with special meaning |
|
|
141
|
+
| Deceptive Code | Functions that pretend to work (e.g., `return true` with no logic) |
|
|
142
|
+
|
|
143
|
+
### Workaround Labeling (Required)
|
|
144
|
+
|
|
145
|
+
All workarounds, hacks, and temporary solutions MUST be labeled:
|
|
146
|
+
|
|
147
|
+
| Label | Use When |
|
|
148
|
+
|-------|----------|
|
|
149
|
+
| `HACK:` | Workaround for specific problem |
|
|
150
|
+
| `MOCK:` | Fake data for testing/development |
|
|
151
|
+
| `TODO:` | Work that needs to be done |
|
|
152
|
+
| `TEMPORARY:` | Short-term solution with deadline |
|
|
153
|
+
| `NOT-PRODUCTION:` | Code that should never ship |
|
|
154
|
+
| `ARCHITECTURE EXCEPTION:` | Violates pattern with justification |
|
|
155
|
+
|
|
156
|
+
Unlabeled workarounds, empty catch blocks, and early returns without rationale are violations. See `references/code-smell-violations.md` for extended examples.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Extended References
|
|
161
|
+
|
|
162
|
+
See `references/` for: violations.md, patterns.md, detection.md, checklist.md
|