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,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
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# Detection Patterns
|
|
2
|
+
|
|
3
|
+
Grep patterns and code analysis techniques for detecting pattern violations.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Result Type Violations
|
|
8
|
+
|
|
9
|
+
### Detecting Throws in Business Logic
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Find throw statements (potential violations)
|
|
13
|
+
grep -rn "throw new\|throw Error\|throw \w" --include="*.ts" src/services/ src/domain/
|
|
14
|
+
|
|
15
|
+
# Find try/catch blocks (review for appropriateness)
|
|
16
|
+
grep -rn "try {" --include="*.ts" -A 5 src/services/ src/domain/
|
|
17
|
+
|
|
18
|
+
# Find functions that don't return Result but could fail
|
|
19
|
+
grep -rn "async function\|function" --include="*.ts" src/services/ | grep -v "Result<"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Detecting Silent Failures
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Empty catch blocks
|
|
26
|
+
grep -rn "catch.*{" --include="*.ts" -A 1 | grep -E "catch.*\{\s*\}"
|
|
27
|
+
|
|
28
|
+
# Catch blocks that return null/undefined
|
|
29
|
+
grep -rn "catch" --include="*.ts" -A 3 | grep -E "return (null|undefined|void 0);"
|
|
30
|
+
|
|
31
|
+
# Catch blocks with only console.log
|
|
32
|
+
grep -rn "catch" --include="*.ts" -A 3 | grep -E "^\s*console\.(log|error)"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Dependency Injection Violations
|
|
38
|
+
|
|
39
|
+
### Detecting Internal Instantiation
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Find 'new' keyword in class bodies (potential DI violation)
|
|
43
|
+
grep -rn "private.*= new\|this\.\w* = new" --include="*.ts" src/
|
|
44
|
+
|
|
45
|
+
# Find imported singletons
|
|
46
|
+
grep -rn "import.*from.*\./.*instance\|import.*from.*\./.*singleton" --include="*.ts"
|
|
47
|
+
|
|
48
|
+
# Find static method calls on external classes
|
|
49
|
+
grep -rn "\w+Service\.\w+(\|Calculator\.\w+(" --include="*.ts" src/services/
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Detecting Global State Access
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Find process.env access outside config
|
|
56
|
+
grep -rn "process\.env\." --include="*.ts" src/ | grep -v "config\|Config"
|
|
57
|
+
|
|
58
|
+
# Find global variable access
|
|
59
|
+
grep -rn "globalThis\.\|window\.\|global\." --include="*.ts" src/
|
|
60
|
+
|
|
61
|
+
# Find module-level let/var (mutable global state)
|
|
62
|
+
grep -rn "^let \|^var " --include="*.ts" src/
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Immutability Violations
|
|
68
|
+
|
|
69
|
+
### Detecting Array Mutations
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Array mutating methods
|
|
73
|
+
grep -rn "\.push(\|\.pop(\|\.shift(\|\.unshift(\|\.splice(\|\.reverse(\|\.sort(\|\.fill(" --include="*.ts" src/
|
|
74
|
+
|
|
75
|
+
# Assignment to array elements
|
|
76
|
+
grep -rn "\[\d+\]\s*=" --include="*.ts" src/
|
|
77
|
+
|
|
78
|
+
# forEach with mutations
|
|
79
|
+
grep -rn "\.forEach.*=>" --include="*.ts" -A 2 | grep -E "\.\w+\s*="
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Detecting Object Mutations
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Direct property assignment on parameters
|
|
86
|
+
grep -rn "function.*(\w+:" --include="*.ts" -A 10 | grep -E "^\s+\w+\.\w+\s*="
|
|
87
|
+
|
|
88
|
+
# delete operator
|
|
89
|
+
grep -rn "delete \w+\." --include="*.ts" src/
|
|
90
|
+
|
|
91
|
+
# Object.assign mutating first argument
|
|
92
|
+
grep -rn "Object\.assign(\w+," --include="*.ts" src/
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Pure Function Violations
|
|
98
|
+
|
|
99
|
+
### Detecting Side Effects
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# Console/logging in business logic
|
|
103
|
+
grep -rn "console\.\|logger\.\|log(" --include="*.ts" src/domain/ src/services/
|
|
104
|
+
|
|
105
|
+
# Date/time access (non-deterministic)
|
|
106
|
+
grep -rn "new Date(\|Date\.now(\|performance\.now(" --include="*.ts" src/domain/
|
|
107
|
+
|
|
108
|
+
# Random number generation
|
|
109
|
+
grep -rn "Math\.random(\|crypto\.random" --include="*.ts" src/domain/
|
|
110
|
+
|
|
111
|
+
# File system access
|
|
112
|
+
grep -rn "fs\.\|readFile\|writeFile" --include="*.ts" src/domain/
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Detecting External Dependencies
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Network calls
|
|
119
|
+
grep -rn "fetch(\|axios\.\|http\.\|https\." --include="*.ts" src/domain/
|
|
120
|
+
|
|
121
|
+
# Database calls
|
|
122
|
+
grep -rn "db\.\|prisma\.\|mongoose\.\|sequelize\." --include="*.ts" src/domain/
|
|
123
|
+
|
|
124
|
+
# Environment access
|
|
125
|
+
grep -rn "process\.env\|import\.meta\.env" --include="*.ts" src/domain/
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Type Safety Violations
|
|
131
|
+
|
|
132
|
+
### Detecting Any Types
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Explicit any
|
|
136
|
+
grep -rn ": any\|<any>\|as any" --include="*.ts" src/
|
|
137
|
+
|
|
138
|
+
# Implicit any (missing return types)
|
|
139
|
+
grep -rn "function \w+(" --include="*.ts" src/ | grep -v "): \w"
|
|
140
|
+
|
|
141
|
+
# Type assertions without guards
|
|
142
|
+
grep -rn "as \w+\[" --include="*.ts" src/ | grep -v "if.*typeof\|if.*instanceof"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Detecting Non-Exhaustive Patterns
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Switch without default that might need exhaustive check
|
|
149
|
+
grep -rn "switch.*{" --include="*.ts" -A 20 | grep -v "default:"
|
|
150
|
+
|
|
151
|
+
# If chains without else
|
|
152
|
+
grep -rn "if.*===.*'\\|if.*===.*\"" --include="*.ts" -A 5 | grep -v "else"
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Resource Cleanup Violations
|
|
158
|
+
|
|
159
|
+
### Detecting Missing Cleanup
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# File opens without close
|
|
163
|
+
grep -rn "fs\.open\|createReadStream\|createWriteStream" --include="*.ts" -A 10 | grep -v "close\|finally"
|
|
164
|
+
|
|
165
|
+
# Connection acquires without release
|
|
166
|
+
grep -rn "\.connect(\|getConnection(\|acquire(" --include="*.ts" -A 10 | grep -v "release\|close\|finally"
|
|
167
|
+
|
|
168
|
+
# Event listeners without removal
|
|
169
|
+
grep -rn "\.on(\|addEventListener(" --include="*.ts" | grep -v "removeEventListener\|off("
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Detecting Timer Leaks
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
# setInterval without clearInterval
|
|
176
|
+
grep -rn "setInterval(" --include="*.ts" -B 5 -A 5 | grep -v "clearInterval"
|
|
177
|
+
|
|
178
|
+
# setTimeout in loops without clear
|
|
179
|
+
grep -rn "setTimeout(" --include="*.ts" | grep -v "clearTimeout"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## API Consistency Violations
|
|
185
|
+
|
|
186
|
+
### Detecting Mixed Patterns
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# Functions returning different error patterns in same file
|
|
190
|
+
grep -rn "return null\|throw new\|return Err\|return { ok:" --include="*.ts" src/services/
|
|
191
|
+
|
|
192
|
+
# Mixed async patterns
|
|
193
|
+
grep -rn "callback\|\.then(\|async " --include="*.ts" src/services/
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Detecting Missing Awaits
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# Async calls without await (potential fire-and-forget)
|
|
200
|
+
grep -rn "async function" --include="*.ts" -A 20 | grep -E "^\s+\w+\.\w+\(" | grep -v "await\|return"
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Architecture Violations
|
|
206
|
+
|
|
207
|
+
### Detecting Layer Boundary Violations
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Domain importing from infrastructure
|
|
211
|
+
grep -rn "from.*\/infrastructure\|from.*\/adapters\|from.*\/repositories" --include="*.ts" src/domain/
|
|
212
|
+
|
|
213
|
+
# Controllers containing business logic (too many lines)
|
|
214
|
+
wc -l src/controllers/*.ts | sort -n | tail -10
|
|
215
|
+
|
|
216
|
+
# Services importing from controllers
|
|
217
|
+
grep -rn "from.*\/controllers\|from.*\/routes\|from.*\/handlers" --include="*.ts" src/services/
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Detecting Missing Documentation
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# Public functions without JSDoc
|
|
224
|
+
grep -rn "^export function\|^export async function" --include="*.ts" -B 1 | grep -v "/\*\*\|//\|@"
|
|
225
|
+
|
|
226
|
+
# Classes without documentation
|
|
227
|
+
grep -rn "^export class" --include="*.ts" -B 1 | grep -v "/\*\*\|//"
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Automated Detection Script
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
#!/bin/bash
|
|
236
|
+
# pattern-check.sh - Detect common pattern violations
|
|
237
|
+
|
|
238
|
+
echo "=== Pattern Violation Detection ==="
|
|
239
|
+
echo ""
|
|
240
|
+
|
|
241
|
+
echo "1. Checking for throws in business logic..."
|
|
242
|
+
THROWS=$(grep -rn "throw new\|throw Error" --include="*.ts" src/services/ src/domain/ 2>/dev/null | wc -l)
|
|
243
|
+
echo " Found: $THROWS potential violations"
|
|
244
|
+
|
|
245
|
+
echo ""
|
|
246
|
+
echo "2. Checking for any types..."
|
|
247
|
+
ANYS=$(grep -rn ": any\|<any>\|as any" --include="*.ts" src/ 2>/dev/null | wc -l)
|
|
248
|
+
echo " Found: $ANYS uses of 'any'"
|
|
249
|
+
|
|
250
|
+
echo ""
|
|
251
|
+
echo "3. Checking for array mutations..."
|
|
252
|
+
MUTATIONS=$(grep -rn "\.push(\|\.pop(\|\.splice(\|\.sort(" --include="*.ts" src/ 2>/dev/null | wc -l)
|
|
253
|
+
echo " Found: $MUTATIONS potential array mutations"
|
|
254
|
+
|
|
255
|
+
echo ""
|
|
256
|
+
echo "4. Checking for internal instantiation..."
|
|
257
|
+
INTERNAL=$(grep -rn "private.*= new\|this\.\w* = new" --include="*.ts" src/ 2>/dev/null | wc -l)
|
|
258
|
+
echo " Found: $INTERNAL internal instantiations (DI violations)"
|
|
259
|
+
|
|
260
|
+
echo ""
|
|
261
|
+
echo "5. Checking for console.log in business logic..."
|
|
262
|
+
CONSOLE=$(grep -rn "console\." --include="*.ts" src/services/ src/domain/ 2>/dev/null | wc -l)
|
|
263
|
+
echo " Found: $CONSOLE console statements"
|
|
264
|
+
|
|
265
|
+
echo ""
|
|
266
|
+
echo "=== Summary ==="
|
|
267
|
+
TOTAL=$((THROWS + ANYS + MUTATIONS + INTERNAL + CONSOLE))
|
|
268
|
+
echo "Total potential violations: $TOTAL"
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## IDE/Editor Integration
|
|
274
|
+
|
|
275
|
+
### ESLint Rules
|
|
276
|
+
|
|
277
|
+
```json
|
|
278
|
+
{
|
|
279
|
+
"rules": {
|
|
280
|
+
"@typescript-eslint/no-explicit-any": "error",
|
|
281
|
+
"@typescript-eslint/explicit-function-return-type": "error",
|
|
282
|
+
"@typescript-eslint/no-floating-promises": "error",
|
|
283
|
+
"@typescript-eslint/no-throw-literal": "error",
|
|
284
|
+
"no-console": ["error", { "allow": ["warn", "error"] }],
|
|
285
|
+
"no-param-reassign": "error"
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### TypeScript Compiler Options
|
|
291
|
+
|
|
292
|
+
```json
|
|
293
|
+
{
|
|
294
|
+
"compilerOptions": {
|
|
295
|
+
"strict": true,
|
|
296
|
+
"noImplicitAny": true,
|
|
297
|
+
"strictNullChecks": true,
|
|
298
|
+
"noImplicitReturns": true,
|
|
299
|
+
"noFallthroughCasesInSwitch": true,
|
|
300
|
+
"noUncheckedIndexedAccess": true
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
```
|