devflow-kit 0.8.1 → 1.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/CHANGELOG.md +185 -29
- package/LICENSE +1 -1
- package/README.md +179 -308
- package/dist/cli.js +3 -1
- package/dist/commands/init.d.ts +21 -0
- package/dist/commands/init.js +311 -575
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.js +20 -0
- package/dist/commands/uninstall.d.ts +10 -0
- package/dist/commands/uninstall.js +351 -78
- package/dist/plugins.d.ts +46 -0
- package/dist/plugins.js +162 -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 +68 -0
- package/dist/utils/post-install.js +427 -0
- package/dist/utils/safe-delete-install.d.ts +22 -0
- package/dist/utils/safe-delete-install.js +156 -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-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 +27 -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 +134 -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-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/background-memory-update.sh +167 -0
- package/scripts/hooks/pre-compact-memory.sh +81 -0
- package/scripts/hooks/session-start-memory.sh +84 -0
- package/scripts/hooks/stop-update-memory.sh +81 -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/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 +134 -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-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 +146 -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/pr-comments.md +0 -285
- package/src/claude/agents/devflow/project-state.md +0 -419
- package/src/claude/agents/devflow/pull-request.md +0 -423
- 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/implement.md +0 -100
- package/src/claude/commands/devflow/plan.md +0 -223
- package/src/claude/commands/devflow/pull-request.md +0 -269
- 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,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
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
# Validation Checklist
|
|
2
|
+
|
|
3
|
+
Comprehensive checklist for code review and validation against core engineering patterns.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Pre-Implementation Checklist
|
|
8
|
+
|
|
9
|
+
Before writing code, verify:
|
|
10
|
+
|
|
11
|
+
- [ ] Understood the existing patterns in the codebase
|
|
12
|
+
- [ ] Identified similar implementations to follow
|
|
13
|
+
- [ ] Determined if Result types are used (and will follow same pattern)
|
|
14
|
+
- [ ] Identified dependencies that need injection
|
|
15
|
+
- [ ] Planned separation of pure logic from side effects
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Result Types Checklist
|
|
20
|
+
|
|
21
|
+
### Functions That Can Fail
|
|
22
|
+
|
|
23
|
+
- [ ] All business functions return `Result<T, E>` types
|
|
24
|
+
- [ ] No `throw` statements in business logic
|
|
25
|
+
- [ ] Error types are discriminated unions (not generic Error)
|
|
26
|
+
- [ ] Each error type has all context needed to handle it
|
|
27
|
+
- [ ] Async functions return `Promise<Result<T, E>>`
|
|
28
|
+
|
|
29
|
+
### Exception Boundaries
|
|
30
|
+
|
|
31
|
+
- [ ] Try/catch ONLY at system boundaries (API handlers, DB adapters)
|
|
32
|
+
- [ ] Boundaries convert exceptions to Result types
|
|
33
|
+
- [ ] HTTP responses derived from Result errors
|
|
34
|
+
- [ ] No silent error swallowing (empty catch blocks)
|
|
35
|
+
|
|
36
|
+
### Error Handling
|
|
37
|
+
|
|
38
|
+
- [ ] All Result errors are handled explicitly
|
|
39
|
+
- [ ] No `if (!result.ok) return;` without proper handling
|
|
40
|
+
- [ ] Error propagation preserves context
|
|
41
|
+
- [ ] Logging happens before converting errors
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Dependency Injection Checklist
|
|
46
|
+
|
|
47
|
+
### Constructor Injection
|
|
48
|
+
|
|
49
|
+
- [ ] All dependencies passed through constructor
|
|
50
|
+
- [ ] No `new` keyword for dependencies inside classes
|
|
51
|
+
- [ ] No imported singletons used directly
|
|
52
|
+
- [ ] No static method calls on external services
|
|
53
|
+
|
|
54
|
+
### Interfaces
|
|
55
|
+
|
|
56
|
+
- [ ] Dependencies typed as interfaces, not implementations
|
|
57
|
+
- [ ] Interfaces are small and focused (ISP)
|
|
58
|
+
- [ ] Mock implementations easy to create
|
|
59
|
+
- [ ] No concrete class imports in business logic
|
|
60
|
+
|
|
61
|
+
### Testing
|
|
62
|
+
|
|
63
|
+
- [ ] Can instantiate class with mock dependencies
|
|
64
|
+
- [ ] No test requires real database/network
|
|
65
|
+
- [ ] No environment manipulation in tests
|
|
66
|
+
- [ ] Test setup is < 10 lines
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Immutability Checklist
|
|
71
|
+
|
|
72
|
+
### Objects
|
|
73
|
+
|
|
74
|
+
- [ ] All updates return new objects (spread operator)
|
|
75
|
+
- [ ] No direct property assignment on inputs
|
|
76
|
+
- [ ] No `delete` operator on inputs
|
|
77
|
+
- [ ] Nested updates also create new objects
|
|
78
|
+
|
|
79
|
+
### Arrays
|
|
80
|
+
|
|
81
|
+
- [ ] No `.push()`, `.pop()`, `.shift()`, `.unshift()`
|
|
82
|
+
- [ ] No `.splice()`, `.reverse()`, `.sort()` on originals
|
|
83
|
+
- [ ] Use `.map()`, `.filter()`, `.reduce()` for transformations
|
|
84
|
+
- [ ] Copy before sorting: `[...arr].sort()`
|
|
85
|
+
|
|
86
|
+
### State
|
|
87
|
+
|
|
88
|
+
- [ ] No module-level `let` or `var`
|
|
89
|
+
- [ ] No global mutable state
|
|
90
|
+
- [ ] Configuration is frozen after initialization
|
|
91
|
+
- [ ] Caches use immutable entries
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Pure Functions Checklist
|
|
96
|
+
|
|
97
|
+
### Business Logic
|
|
98
|
+
|
|
99
|
+
- [ ] Pure functions have no side effects
|
|
100
|
+
- [ ] Same input always produces same output
|
|
101
|
+
- [ ] No date/time access (inject clock)
|
|
102
|
+
- [ ] No random values (inject generator)
|
|
103
|
+
- [ ] No environment variable access
|
|
104
|
+
|
|
105
|
+
### Side Effect Isolation
|
|
106
|
+
|
|
107
|
+
- [ ] I/O operations in wrapper functions
|
|
108
|
+
- [ ] Pure calculations extracted and tested separately
|
|
109
|
+
- [ ] Side effects clearly documented
|
|
110
|
+
- [ ] Logging/metrics in wrappers, not core logic
|
|
111
|
+
|
|
112
|
+
### Dependencies
|
|
113
|
+
|
|
114
|
+
- [ ] Time/random injected as dependencies
|
|
115
|
+
- [ ] Environment config loaded once at startup
|
|
116
|
+
- [ ] File system access at boundaries only
|
|
117
|
+
- [ ] Network calls at boundaries only
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Type Safety Checklist
|
|
122
|
+
|
|
123
|
+
### Strict Types
|
|
124
|
+
|
|
125
|
+
- [ ] No `any` types (use `unknown` for dynamic data)
|
|
126
|
+
- [ ] All function parameters typed
|
|
127
|
+
- [ ] All return types explicit
|
|
128
|
+
- [ ] Strict null checks enabled
|
|
129
|
+
|
|
130
|
+
### Pattern Matching
|
|
131
|
+
|
|
132
|
+
- [ ] Switch statements are exhaustive
|
|
133
|
+
- [ ] Discriminated unions for state/variants
|
|
134
|
+
- [ ] No default case that hides missing patterns
|
|
135
|
+
- [ ] Type guards for runtime narrowing
|
|
136
|
+
|
|
137
|
+
### Type Design
|
|
138
|
+
|
|
139
|
+
- [ ] Domain types prevent primitive obsession
|
|
140
|
+
- [ ] Branded types for IDs that shouldn't mix
|
|
141
|
+
- [ ] Optional fields explicit (`field?: Type`)
|
|
142
|
+
- [ ] Readonly where appropriate
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Error Type Design Checklist
|
|
147
|
+
|
|
148
|
+
### Discriminated Unions
|
|
149
|
+
|
|
150
|
+
- [ ] Each error type has a `type` discriminator
|
|
151
|
+
- [ ] Error types include all context needed
|
|
152
|
+
- [ ] Related errors grouped in union types
|
|
153
|
+
- [ ] Error unions are exhaustive
|
|
154
|
+
|
|
155
|
+
### Error Information
|
|
156
|
+
|
|
157
|
+
- [ ] Error messages are actionable
|
|
158
|
+
- [ ] Technical details preserved for logging
|
|
159
|
+
- [ ] User-facing messages are sanitized
|
|
160
|
+
- [ ] Error codes are unique and documented
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Resource Cleanup Checklist
|
|
165
|
+
|
|
166
|
+
### File/Connection Handling
|
|
167
|
+
|
|
168
|
+
- [ ] All file handles closed in `finally`
|
|
169
|
+
- [ ] All connections released in `finally`
|
|
170
|
+
- [ ] Using context managers (Python) or `using` (TS)
|
|
171
|
+
- [ ] Pool resources released after use
|
|
172
|
+
|
|
173
|
+
### Subscriptions/Timers
|
|
174
|
+
|
|
175
|
+
- [ ] Event listeners removed on cleanup
|
|
176
|
+
- [ ] Intervals cleared when done
|
|
177
|
+
- [ ] Timeouts cleared if operation completes early
|
|
178
|
+
- [ ] Subscription manager for complex lifecycles
|
|
179
|
+
|
|
180
|
+
### Memory
|
|
181
|
+
|
|
182
|
+
- [ ] Large data structures released when done
|
|
183
|
+
- [ ] Caches have size limits or TTL
|
|
184
|
+
- [ ] Circular references avoided
|
|
185
|
+
- [ ] WeakMap/WeakSet for object keys
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## API Consistency Checklist
|
|
190
|
+
|
|
191
|
+
### Error Handling Pattern
|
|
192
|
+
|
|
193
|
+
- [ ] Same error handling pattern across module
|
|
194
|
+
- [ ] All methods return Result OR all throw (not mixed)
|
|
195
|
+
- [ ] Error types consistent across related methods
|
|
196
|
+
- [ ] HTTP error mapping centralized
|
|
197
|
+
|
|
198
|
+
### Async Pattern
|
|
199
|
+
|
|
200
|
+
- [ ] Single async pattern (async/await preferred)
|
|
201
|
+
- [ ] No mixing callbacks and promises
|
|
202
|
+
- [ ] All async calls awaited (no fire-and-forget)
|
|
203
|
+
- [ ] Promise.all for parallel operations
|
|
204
|
+
|
|
205
|
+
### Naming
|
|
206
|
+
|
|
207
|
+
- [ ] Consistent naming across codebase
|
|
208
|
+
- [ ] PascalCase for types/classes
|
|
209
|
+
- [ ] camelCase for functions/variables
|
|
210
|
+
- [ ] SCREAMING_SNAKE_CASE for constants
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Architecture Documentation Checklist
|
|
215
|
+
|
|
216
|
+
### Code Comments
|
|
217
|
+
|
|
218
|
+
- [ ] Public APIs have JSDoc/docstrings
|
|
219
|
+
- [ ] Complex algorithms explained
|
|
220
|
+
- [ ] Non-obvious decisions documented
|
|
221
|
+
- [ ] Architecture boundaries marked
|
|
222
|
+
|
|
223
|
+
### Exceptions/Workarounds
|
|
224
|
+
|
|
225
|
+
- [ ] All workarounds labeled (HACK:, TODO:, TEMPORARY:)
|
|
226
|
+
- [ ] Architecture exceptions have justification
|
|
227
|
+
- [ ] Technical debt has tracking ticket
|
|
228
|
+
- [ ] Deadlines on temporary solutions
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Performance Checklist
|
|
233
|
+
|
|
234
|
+
### Measurement
|
|
235
|
+
|
|
236
|
+
- [ ] Performance claims have benchmarks
|
|
237
|
+
- [ ] Hot paths identified and measured
|
|
238
|
+
- [ ] No premature optimization
|
|
239
|
+
- [ ] Trade-offs documented
|
|
240
|
+
|
|
241
|
+
### Common Issues
|
|
242
|
+
|
|
243
|
+
- [ ] No N+1 queries
|
|
244
|
+
- [ ] Appropriate data structures (Map vs Array)
|
|
245
|
+
- [ ] Lazy evaluation for expensive operations
|
|
246
|
+
- [ ] Batch operations where possible
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Anti-Pattern Checklist
|
|
251
|
+
|
|
252
|
+
Verify NONE of these exist:
|
|
253
|
+
|
|
254
|
+
- [ ] No hardcoded responses simulating functionality
|
|
255
|
+
- [ ] No silent error swallowing
|
|
256
|
+
- [ ] No unlabeled magic values
|
|
257
|
+
- [ ] No global mutable state
|
|
258
|
+
- [ ] No tight coupling to concrete implementations
|
|
259
|
+
- [ ] No mixing error handling patterns
|
|
260
|
+
- [ ] No fire-and-forget async calls
|
|
261
|
+
- [ ] No resource leaks
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Final Review Checklist
|
|
266
|
+
|
|
267
|
+
Before considering code complete:
|
|
268
|
+
|
|
269
|
+
- [ ] All tests pass
|
|
270
|
+
- [ ] No TypeScript errors
|
|
271
|
+
- [ ] No ESLint warnings
|
|
272
|
+
- [ ] Code matches existing patterns
|
|
273
|
+
- [ ] Documentation updated
|
|
274
|
+
- [ ] No TODO without ticket
|
|
275
|
+
- [ ] No console.log in production code
|
|
276
|
+
- [ ] No commented-out code
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Code Smell Violations Reference
|
|
2
|
+
|
|
3
|
+
Extended examples of fake solutions, unlabeled workarounds, deceptive code, and magic values. Absorbed from the former `code-smell` skill into `core-patterns`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Hardcoded Data (FAKE SOLUTIONS)
|
|
8
|
+
|
|
9
|
+
### Violation: Mock data masquerading as real functionality
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
async function fetchRecommendations(userId: string): Promise<Product[]> {
|
|
13
|
+
// TODO: Connect to recommendation engine
|
|
14
|
+
return [
|
|
15
|
+
{ id: "1", name: "Product 1", price: 99.99 },
|
|
16
|
+
{ id: "2", name: "Product 2", price: 149.99 }
|
|
17
|
+
];
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Problem**: Returns static data instead of fetching from actual service.
|
|
22
|
+
|
|
23
|
+
### Correct: Honest implementation with Result type
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
async function getUserProfile(userId: string): Promise<Result<UserProfile, Error>> {
|
|
27
|
+
try {
|
|
28
|
+
const response = await api.get(`/users/${userId}`);
|
|
29
|
+
return { ok: true, value: response.data };
|
|
30
|
+
} catch (error) {
|
|
31
|
+
return { ok: false, error };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Correct: Clearly labeled mock for testing
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
// MOCK: For development only, not production-ready
|
|
40
|
+
async function getUserProfileMock(userId: string): Promise<UserProfile> {
|
|
41
|
+
return { id: userId, name: "Test User", email: "test@example.com" };
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 2. Missing Labels (UNDOCUMENTED WORKAROUNDS)
|
|
48
|
+
|
|
49
|
+
### Violation: Temporary fix without documentation
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
async function syncData() {
|
|
53
|
+
await sleep(1000); // Wait for previous operation
|
|
54
|
+
await performSync();
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Correct: Clearly labeled workaround
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
function processPayment(amount: number): boolean {
|
|
62
|
+
// TEMPORARY: Validation disabled until payment gateway integration complete
|
|
63
|
+
// TODO: Add amount validation, currency checks, fraud detection
|
|
64
|
+
// Target: Sprint 23 (2025-11-15)
|
|
65
|
+
// Ticket: PAY-456
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Correct: Documented hack with rationale
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
async function syncData() {
|
|
74
|
+
// HACK: Sleep required due to race condition in legacy sync system
|
|
75
|
+
// Root cause: Event system doesn't guarantee order
|
|
76
|
+
// Proper fix: Implement event sequencing (3-week effort)
|
|
77
|
+
await sleep(1000);
|
|
78
|
+
await performSync();
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 3. Fake Functionality (DECEPTIVE CODE)
|
|
85
|
+
|
|
86
|
+
### Violation: Fake error handling
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
async function sendEmail(to: string, subject: string, body: string): Promise<void> {
|
|
90
|
+
try {
|
|
91
|
+
// TODO: Implement SMTP
|
|
92
|
+
console.log(`Email sent to ${to}`);
|
|
93
|
+
} catch (error) {
|
|
94
|
+
// Ignore errors
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Correct: Honest unimplemented function
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
function validateEmail(email: string): Result<boolean, Error> {
|
|
103
|
+
return {
|
|
104
|
+
ok: false,
|
|
105
|
+
error: new Error('NOT-IMPLEMENTED: Email validation pending regex pattern approval')
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 4. Magic Values (UNEXPLAINED CONSTANTS)
|
|
113
|
+
|
|
114
|
+
### Violation: Magic numbers
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
function calculateDiscount(price: number, userLevel: number): number {
|
|
118
|
+
if (userLevel >= 5) return price * 0.15;
|
|
119
|
+
return 0;
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Correct: Named constants with documentation
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
const USER_LEVEL_THRESHOLD = { PREMIUM: 5 } as const;
|
|
127
|
+
const DISCOUNT_RATE = { PREMIUM: 0.15 } as const;
|
|
128
|
+
|
|
129
|
+
function calculateDiscount(price: number, userLevel: number): number {
|
|
130
|
+
if (userLevel >= USER_LEVEL_THRESHOLD.PREMIUM) return price * DISCOUNT_RATE.PREMIUM;
|
|
131
|
+
return 0;
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Detection Quick Reference
|
|
138
|
+
|
|
139
|
+
Code passes smell check when:
|
|
140
|
+
- No hardcoded return data in business logic
|
|
141
|
+
- All workarounds have required labels (HACK:, MOCK:, TODO:, TEMPORARY:, NOT-PRODUCTION:, ARCHITECTURE EXCEPTION:)
|
|
142
|
+
- All fake/mock code clearly marked
|
|
143
|
+
- Magic values extracted to named constants
|
|
144
|
+
- Functions do what their names promise
|