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,308 @@
|
|
|
1
|
+
# Self-Review Violations
|
|
2
|
+
|
|
3
|
+
Common anti-patterns and code violations organized by the 9 pillars.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Self-Review Process Violations
|
|
8
|
+
|
|
9
|
+
| Violation | Problem | Fix |
|
|
10
|
+
|-----------|---------|-----|
|
|
11
|
+
| Skipping pillars | Incomplete review | Check all 9 pillars |
|
|
12
|
+
| Ignoring P0/P1 issues | Returning broken code | Fix before returning |
|
|
13
|
+
| Surface-level review | Missing deep issues | Review each pillar thoroughly |
|
|
14
|
+
| No evidence | Unverifiable claims | Reference specific code |
|
|
15
|
+
| Deferring critical fixes | Technical debt | Fix CRITICAL/HIGH immediately |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## P0 Pillars (MUST Fix)
|
|
20
|
+
|
|
21
|
+
### 1. Design Violations
|
|
22
|
+
|
|
23
|
+
**Question**: Does the implementation fit the architecture?
|
|
24
|
+
|
|
25
|
+
**Red Flags**:
|
|
26
|
+
```typescript
|
|
27
|
+
// BAD: Direct database access in controller
|
|
28
|
+
class UserController {
|
|
29
|
+
async getUser(req, res) {
|
|
30
|
+
const user = await db.query('SELECT * FROM users WHERE id = ?', [req.params.id]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// BAD: God class doing everything
|
|
35
|
+
class ApplicationManager {
|
|
36
|
+
createUser() {}
|
|
37
|
+
processPayment() {}
|
|
38
|
+
sendEmail() {}
|
|
39
|
+
generateReport() {}
|
|
40
|
+
// 500 more methods...
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// BAD: Circular dependencies
|
|
44
|
+
// a.ts imports b.ts, b.ts imports a.ts
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Checklist**:
|
|
48
|
+
- [ ] Follows existing patterns in codebase
|
|
49
|
+
- [ ] Respects layer boundaries (controller/service/repository)
|
|
50
|
+
- [ ] Dependencies injected, not instantiated
|
|
51
|
+
- [ ] Not over-engineering (YAGNI)
|
|
52
|
+
- [ ] Not under-engineering (technical debt)
|
|
53
|
+
- [ ] Interactions with other components are sound
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
### 2. Functionality Violations
|
|
58
|
+
|
|
59
|
+
**Question**: Does the code work as intended?
|
|
60
|
+
|
|
61
|
+
**Red Flags**:
|
|
62
|
+
```typescript
|
|
63
|
+
// BAD: Missing null check
|
|
64
|
+
function getDisplayName(user: User) {
|
|
65
|
+
return user.profile.displayName; // user.profile could be undefined!
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// BAD: Race condition
|
|
69
|
+
let balance = await getBalance();
|
|
70
|
+
if (balance >= amount) {
|
|
71
|
+
await withdraw(amount); // Balance could change between check and withdraw!
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// BAD: Off-by-one error
|
|
75
|
+
for (let i = 0; i <= array.length; i++) { // Should be < not <=
|
|
76
|
+
process(array[i]);
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Checklist**:
|
|
81
|
+
- [ ] Happy path works correctly
|
|
82
|
+
- [ ] Edge cases handled (null, empty, boundary values)
|
|
83
|
+
- [ ] Error cases handled gracefully
|
|
84
|
+
- [ ] No race conditions in concurrent code
|
|
85
|
+
- [ ] No infinite loops or recursion without base case
|
|
86
|
+
- [ ] State mutations are intentional and correct
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### 3. Security Violations
|
|
91
|
+
|
|
92
|
+
**Question**: Are there security vulnerabilities?
|
|
93
|
+
|
|
94
|
+
**Red Flags**:
|
|
95
|
+
```typescript
|
|
96
|
+
// BAD: SQL injection
|
|
97
|
+
const query = `SELECT * FROM users WHERE email = '${email}'`;
|
|
98
|
+
|
|
99
|
+
// BAD: Command injection
|
|
100
|
+
exec(`ls ${userInput}`);
|
|
101
|
+
|
|
102
|
+
// BAD: Hardcoded secret
|
|
103
|
+
const API_KEY = 'sk-abc123xyz789';
|
|
104
|
+
|
|
105
|
+
// BAD: Missing auth check
|
|
106
|
+
app.delete('/api/users/:id', async (req, res) => {
|
|
107
|
+
await deleteUser(req.params.id); // No auth!
|
|
108
|
+
});
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Checklist**:
|
|
112
|
+
- [ ] No SQL/NoSQL injection
|
|
113
|
+
- [ ] No command injection
|
|
114
|
+
- [ ] No XSS vulnerabilities
|
|
115
|
+
- [ ] Input validated at boundaries
|
|
116
|
+
- [ ] No hardcoded secrets
|
|
117
|
+
- [ ] Authentication/authorization checked
|
|
118
|
+
- [ ] Sensitive data not logged
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## P1 Pillars (SHOULD Fix)
|
|
123
|
+
|
|
124
|
+
### 4. Complexity Violations
|
|
125
|
+
|
|
126
|
+
**Question**: Can a reader understand this in 5 minutes?
|
|
127
|
+
|
|
128
|
+
**Red Flags**:
|
|
129
|
+
```typescript
|
|
130
|
+
// BAD: Deep nesting
|
|
131
|
+
if (a) {
|
|
132
|
+
if (b) {
|
|
133
|
+
if (c) {
|
|
134
|
+
if (d) {
|
|
135
|
+
if (e) {
|
|
136
|
+
// actual logic buried here
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// BAD: Magic numbers
|
|
144
|
+
setTimeout(callback, 86400000);
|
|
145
|
+
if (status === 3) { }
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Checklist**:
|
|
149
|
+
- [ ] Functions are < 50 lines
|
|
150
|
+
- [ ] Nesting depth < 4 levels
|
|
151
|
+
- [ ] Cyclomatic complexity < 10
|
|
152
|
+
- [ ] No magic numbers/strings
|
|
153
|
+
- [ ] Single responsibility per function
|
|
154
|
+
- [ ] Complex logic has explanatory comments
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
### 5. Error Handling Violations
|
|
159
|
+
|
|
160
|
+
**Question**: Are errors handled explicitly and consistently?
|
|
161
|
+
|
|
162
|
+
**Red Flags**:
|
|
163
|
+
```typescript
|
|
164
|
+
// BAD: Swallowed exception
|
|
165
|
+
try {
|
|
166
|
+
await riskyOperation();
|
|
167
|
+
} catch (e) {
|
|
168
|
+
// silently ignored!
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// BAD: Generic error message
|
|
172
|
+
throw new Error('Something went wrong');
|
|
173
|
+
|
|
174
|
+
// BAD: Resource leak on error
|
|
175
|
+
const file = await openFile(path);
|
|
176
|
+
await processFile(file); // If this throws, file never closed!
|
|
177
|
+
await file.close();
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Checklist**:
|
|
181
|
+
- [ ] Errors are caught and handled appropriately
|
|
182
|
+
- [ ] Error messages are helpful (not generic)
|
|
183
|
+
- [ ] No silent failures (swallowed exceptions)
|
|
184
|
+
- [ ] Consistent error handling pattern (Result types or throws)
|
|
185
|
+
- [ ] Resources cleaned up in error paths
|
|
186
|
+
- [ ] Errors logged with context
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
### 6. Tests Violations
|
|
191
|
+
|
|
192
|
+
**Question**: Is the new functionality tested?
|
|
193
|
+
|
|
194
|
+
**Red Flags**:
|
|
195
|
+
```typescript
|
|
196
|
+
// BAD: No tests for new function
|
|
197
|
+
export function calculateDiscount(price, type) {
|
|
198
|
+
// 20 lines of logic with no tests
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// BAD: Test that doesn't verify behavior
|
|
202
|
+
it('creates user', async () => {
|
|
203
|
+
await createUser(data);
|
|
204
|
+
expect(mockDb.insert).toHaveBeenCalled(); // Only checks mock was called
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
// BAD: Missing edge case tests
|
|
208
|
+
describe('divide', () => {
|
|
209
|
+
it('divides numbers', () => {
|
|
210
|
+
expect(divide(10, 2)).toBe(5);
|
|
211
|
+
});
|
|
212
|
+
// No test for divide by zero!
|
|
213
|
+
});
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Checklist**:
|
|
217
|
+
- [ ] New code has corresponding tests
|
|
218
|
+
- [ ] Tests cover happy path
|
|
219
|
+
- [ ] Tests cover error cases
|
|
220
|
+
- [ ] Tests cover edge cases
|
|
221
|
+
- [ ] Tests are not brittle (test behavior, not implementation)
|
|
222
|
+
- [ ] Tests would fail if code breaks
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## P2 Pillars (FIX if Time Permits)
|
|
227
|
+
|
|
228
|
+
### 7. Naming Violations
|
|
229
|
+
|
|
230
|
+
**Question**: Are names clear and descriptive?
|
|
231
|
+
|
|
232
|
+
**Red Flags**:
|
|
233
|
+
```typescript
|
|
234
|
+
// BAD: Cryptic names
|
|
235
|
+
const d = new Date();
|
|
236
|
+
const r = items.filter(i => i.t > d);
|
|
237
|
+
const x = r.reduce((a, b) => a + b.p, 0);
|
|
238
|
+
|
|
239
|
+
// BAD: Misleading name
|
|
240
|
+
function getUser(id) {
|
|
241
|
+
return db.users.findAll(); // Returns ALL users, not one!
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Checklist**:
|
|
246
|
+
- [ ] Variable names describe content
|
|
247
|
+
- [ ] Function names describe action
|
|
248
|
+
- [ ] No single-letter names (except loop indices)
|
|
249
|
+
- [ ] No abbreviations that aren't universal
|
|
250
|
+
- [ ] Consistent naming style (camelCase/snake_case)
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
### 8. Consistency Violations
|
|
255
|
+
|
|
256
|
+
**Question**: Does this match existing patterns?
|
|
257
|
+
|
|
258
|
+
**Red Flags**:
|
|
259
|
+
```typescript
|
|
260
|
+
// BAD: Different style than rest of codebase
|
|
261
|
+
// Existing code uses Result types
|
|
262
|
+
function existingFunction(): Result<User, Error> { }
|
|
263
|
+
|
|
264
|
+
// Your code throws instead
|
|
265
|
+
function yourFunction(): User {
|
|
266
|
+
throw new Error('...'); // Inconsistent!
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Checklist**:
|
|
271
|
+
- [ ] Follows existing code style
|
|
272
|
+
- [ ] Uses same patterns as surrounding code
|
|
273
|
+
- [ ] Error handling matches project conventions
|
|
274
|
+
- [ ] Import organization matches existing files
|
|
275
|
+
- [ ] No unnecessary divergence from norms
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
### 9. Documentation Violations
|
|
280
|
+
|
|
281
|
+
**Question**: Will others understand this code?
|
|
282
|
+
|
|
283
|
+
**Red Flags**:
|
|
284
|
+
```typescript
|
|
285
|
+
// BAD: Missing docs on complex function
|
|
286
|
+
export function calculateProratedBilling(plan, start, end, previous) {
|
|
287
|
+
// 50 lines of complex billing logic with no explanation
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// BAD: Outdated comment
|
|
291
|
+
// Returns user's full name
|
|
292
|
+
function getDisplayName(user) {
|
|
293
|
+
return user.username; // Actually returns username!
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
**Checklist**:
|
|
298
|
+
- [ ] Complex logic has explanatory comments
|
|
299
|
+
- [ ] Public APIs have JSDoc/docstrings
|
|
300
|
+
- [ ] README updated if behavior changes
|
|
301
|
+
- [ ] No outdated comments
|
|
302
|
+
- [ ] Comments explain "why", not "what"
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## Quick Reference
|
|
307
|
+
|
|
308
|
+
See [patterns.md](patterns.md) for correct patterns and [report-template.md](report-template.md) for self-review format.
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-patterns
|
|
3
|
+
description: This skill should be used when the user asks to "write tests", "fix failing tests", "improve test coverage", "add integration tests", "debug a flaky test", or reviews test quality. Provides behavior-focused testing patterns, coverage analysis, and detection of brittle test anti-patterns like implementation coupling and non-deterministic assertions.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
allowed-tools: Read, Grep, Glob, AskUserQuestion
|
|
6
|
+
activation:
|
|
7
|
+
file-patterns:
|
|
8
|
+
- "**/*.test.*"
|
|
9
|
+
- "**/*.spec.*"
|
|
10
|
+
- "**/test/**"
|
|
11
|
+
- "**/tests/**"
|
|
12
|
+
- "**/__tests__/**"
|
|
13
|
+
exclude:
|
|
14
|
+
- "node_modules/**"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Test Patterns
|
|
18
|
+
|
|
19
|
+
## Iron Law
|
|
20
|
+
|
|
21
|
+
> **TESTS VALIDATE BEHAVIOR, NOT IMPLEMENTATION**
|
|
22
|
+
>
|
|
23
|
+
> A test should fail when behavior breaks, not when implementation changes. If refactoring
|
|
24
|
+
> breaks tests without changing behavior, the tests are wrong. Mock boundaries, not internals.
|
|
25
|
+
> Test the contract, not the code. If tests are hard to write, the design is wrong — fix the
|
|
26
|
+
> architecture, not the tests.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Test Design Red Flags
|
|
31
|
+
|
|
32
|
+
### 1. Complex Setup
|
|
33
|
+
|
|
34
|
+
**RED FLAG**: Test setup >10 lines means the design is wrong.
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
// VIOLATION: Too many dependencies
|
|
38
|
+
beforeEach(async () => {
|
|
39
|
+
mockDb = new MockDatabase();
|
|
40
|
+
await mockDb.connect();
|
|
41
|
+
mockCache = new MockCache();
|
|
42
|
+
// ... 10+ more lines
|
|
43
|
+
service = new UserService(mockDb, mockCache, mockLogger, mockConfig);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// CORRECT: Simple setup
|
|
47
|
+
it('should return Ok with valid data', () => {
|
|
48
|
+
const result = createUser({ name: 'test', email: 'test@example.com' });
|
|
49
|
+
expect(result.ok).toBe(true);
|
|
50
|
+
});
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Detection**: `beforeEach` >10 lines, multiple mocks, async setup, database seeding
|
|
54
|
+
|
|
55
|
+
### 2. Repetitive Boilerplate
|
|
56
|
+
|
|
57
|
+
**RED FLAG**: Same pattern repeated >3 times means the API is wrong.
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
// VIOLATION: Try/catch everywhere
|
|
61
|
+
try { await api.createUser(data); fail(); } catch (e) { expect(e.status).toBe(400); }
|
|
62
|
+
|
|
63
|
+
// CORRECT: Result types eliminate repetition
|
|
64
|
+
const result = createUser(invalidData);
|
|
65
|
+
expect(result.ok).toBe(false);
|
|
66
|
+
expect(result.error.type).toBe('ValidationError');
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 3. Difficult Mocking
|
|
70
|
+
|
|
71
|
+
**RED FLAG**: Mock setup >20 lines means dependencies are wrong.
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
// VIOLATION: Nested mock structures
|
|
75
|
+
mockDb = { transaction: jest.fn(), orders: { create: jest.fn(), update: jest.fn() } };
|
|
76
|
+
|
|
77
|
+
// CORRECT: Pure functions need no mocking
|
|
78
|
+
const result = processOrder(order);
|
|
79
|
+
expect(result.ok).toBe(true);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 4. Implementation Testing
|
|
83
|
+
|
|
84
|
+
**RED FLAG**: Testing internals means tests are fragile.
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
// VIOLATION: Spying on private methods
|
|
88
|
+
const spy = jest.spyOn(cart as any, 'updateTotal');
|
|
89
|
+
expect(spy).toHaveBeenCalled();
|
|
90
|
+
|
|
91
|
+
// CORRECT: Test observable behavior
|
|
92
|
+
expect(cart.getTotal()).toBe(10);
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Coverage & Review
|
|
98
|
+
|
|
99
|
+
### Coverage Issues
|
|
100
|
+
|
|
101
|
+
- **Untested new code**: New functions/branches without corresponding tests
|
|
102
|
+
- **Missing edge cases**: Only happy path tested, no error paths
|
|
103
|
+
- **Missing error paths**: `throw`/`reject` in source without matching test assertions
|
|
104
|
+
|
|
105
|
+
### Test Quality Issues
|
|
106
|
+
|
|
107
|
+
- **Brittle tests**: Testing HOW (mock call verification) not WHAT (outcome)
|
|
108
|
+
- **Unclear test names**: `it('test1')` instead of `it('validates email format on creation')`
|
|
109
|
+
- **Missing AAA structure**: Mixed arrange/act/assert without clear separation
|
|
110
|
+
|
|
111
|
+
### Mocking Issues
|
|
112
|
+
|
|
113
|
+
- **Over-mocking**: Everything mocked, nothing actually tested
|
|
114
|
+
- **Mocking third-party internals**: Mock at your own interface boundary instead
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Severity Guidelines
|
|
119
|
+
|
|
120
|
+
| Severity | Criteria |
|
|
121
|
+
|----------|----------|
|
|
122
|
+
| **CRITICAL** | Tests pass but don't verify behavior; critical paths untested; tests mock everything |
|
|
123
|
+
| **HIGH** | Missing error path coverage; flaky tests; extremely slow (>10s); >10 line setup |
|
|
124
|
+
| **MEDIUM** | Some edge cases missing; weak assertions; unclear structure |
|
|
125
|
+
| **LOW** | Organization could improve; naming could be clearer |
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Test Suite Safety
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
// vitest.config.ts / jest.config.js
|
|
133
|
+
{ fileParallelism: false, maxWorkers: 1, testTimeout: 10000 }
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
NODE_OPTIONS="--max-old-space-size=512" npm test
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Extended References
|
|
143
|
+
|
|
144
|
+
For comprehensive examples and detection patterns:
|
|
145
|
+
|
|
146
|
+
| Reference | Contents |
|
|
147
|
+
|-----------|----------|
|
|
148
|
+
| `references/violations.md` | Full violation examples for all categories |
|
|
149
|
+
| `references/patterns.md` | Correct test patterns and organization |
|
|
150
|
+
| `references/detection.md` | Bash commands for automated detection |
|
|
151
|
+
| `references/report-template.md` | Full report format for documenting issues |
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Quality Gates
|
|
156
|
+
|
|
157
|
+
Tests pass design review when:
|
|
158
|
+
- [ ] Setup code <10 lines per test file
|
|
159
|
+
- [ ] No repetitive try/catch or error handling patterns
|
|
160
|
+
- [ ] Mocking requires <5 lines of setup
|
|
161
|
+
- [ ] No spying on private methods or internal state
|
|
162
|
+
- [ ] Tests verify behavior, not implementation details
|
|
163
|
+
- [ ] Pure business logic testable without mocks
|
|
164
|
+
- [ ] New code has corresponding tests
|
|
165
|
+
- [ ] All branches covered (happy path + errors + edge cases)
|
|
166
|
+
- [ ] Test names describe expected behavior
|
|
167
|
+
- [ ] Tests follow Arrange-Act-Assert structure
|
|
168
|
+
- [ ] No real delays (use mocked timers)
|
|
169
|
+
- [ ] No flaky patterns (race conditions, timing dependencies)
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Review Checklist
|
|
174
|
+
|
|
175
|
+
- [ ] New code has corresponding tests
|
|
176
|
+
- [ ] All branches covered (happy path + errors + edge cases)
|
|
177
|
+
- [ ] Tests verify behavior, not implementation
|
|
178
|
+
- [ ] Test names describe expected behavior
|
|
179
|
+
- [ ] Tests follow Arrange-Act-Assert structure
|
|
180
|
+
- [ ] No real delays (use mocked timers)
|
|
181
|
+
- [ ] Assertions are specific and meaningful
|
|
182
|
+
- [ ] Mocking limited to boundaries (not internals)
|
|
183
|
+
- [ ] No flaky patterns (race conditions, timing dependencies)
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Test Issue Detection
|
|
2
|
+
|
|
3
|
+
Commands and patterns for detecting test quality issues.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Coverage Detection
|
|
8
|
+
|
|
9
|
+
### Find Untested Functions
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# List exported functions in source
|
|
13
|
+
grep -rn "export function\|export async function" --include="*.ts" src/ | cut -d: -f1,3 | sort
|
|
14
|
+
|
|
15
|
+
# List tested functions
|
|
16
|
+
grep -rn "describe\|it\(" --include="*.test.ts" | grep -oE "'[^']+'" | sort -u
|
|
17
|
+
|
|
18
|
+
# Compare to find gaps (manual comparison needed)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Find Missing Error Tests
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Count error-throwing code in source
|
|
25
|
+
grep -rn "throw\|reject\|Error" --include="*.ts" src/ | grep -v test | wc -l
|
|
26
|
+
|
|
27
|
+
# Count error test assertions
|
|
28
|
+
grep -rn "rejects.toThrow\|toThrow\|toThrowError" --include="*.test.ts" | wc -l
|
|
29
|
+
|
|
30
|
+
# Large discrepancy indicates missing error tests
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Quality Detection
|
|
36
|
+
|
|
37
|
+
### Tests Without Assertions
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Find test blocks that may lack assertions
|
|
41
|
+
grep -rn "it\(.*=>" --include="*.test.ts" -A20 | grep -v "expect" | head -50
|
|
42
|
+
|
|
43
|
+
# Find empty test blocks
|
|
44
|
+
grep -rn "it\(.*{\s*}\)" --include="*.test.ts"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Weak Assertions
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Find overly permissive assertions
|
|
51
|
+
grep -rn "toBeDefined\|toBeTruthy\|not.toBeNull\|not.toBeUndefined" --include="*.test.ts"
|
|
52
|
+
|
|
53
|
+
# Count for comparison with strong assertions
|
|
54
|
+
grep -rn "toEqual\|toMatchObject\|toHaveLength\|toBe(" --include="*.test.ts" | wc -l
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Implementation Testing
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Find tests that verify mock calls (may indicate implementation testing)
|
|
61
|
+
grep -rn "toHaveBeenCalledWith\|toHaveBeenCalled\|toHaveBeenCalledTimes" --include="*.test.ts"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Design Detection
|
|
67
|
+
|
|
68
|
+
### Slow Tests
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Find tests with long timeouts (>5000ms)
|
|
72
|
+
grep -rn "}, [0-9][0-9][0-9][0-9][0-9])" --include="*.test.ts"
|
|
73
|
+
|
|
74
|
+
# Find real delays in tests
|
|
75
|
+
grep -rn "setTimeout\|sleep\|delay" --include="*.test.ts"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Complex Setup
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Find tests with many mock objects
|
|
82
|
+
grep -rn "jest.fn\|sinon.stub\|mock" --include="*.test.ts" | cut -d: -f1 | uniq -c | sort -rn | head -10
|
|
83
|
+
|
|
84
|
+
# Find long beforeEach blocks
|
|
85
|
+
grep -rn "beforeEach" --include="*.test.ts" -A30 | head -100
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Mocking Detection
|
|
91
|
+
|
|
92
|
+
### Over-Mocking
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# Count mocks per test file
|
|
96
|
+
for f in $(find . -name "*.test.ts" -type f); do
|
|
97
|
+
count=$(grep -c "jest.fn\|mock" "$f" 2>/dev/null || echo 0)
|
|
98
|
+
echo "$count $f"
|
|
99
|
+
done | sort -rn | head -20
|
|
100
|
+
|
|
101
|
+
# Files with >20 mocks may be over-mocked
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Third-Party Library Mocking
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Find jest.mock of node_modules
|
|
108
|
+
grep -rn "jest.mock\(['\"]" --include="*.test.ts" | grep -v "\./" | grep -v "\.\./"
|
|
109
|
+
|
|
110
|
+
# These should be wrapped in interfaces instead
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Summary Report Script
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
#!/bin/bash
|
|
119
|
+
# test-health-check.sh - Quick test quality assessment
|
|
120
|
+
|
|
121
|
+
echo "=== Test Health Check ==="
|
|
122
|
+
echo ""
|
|
123
|
+
|
|
124
|
+
echo "Coverage Indicators:"
|
|
125
|
+
echo " Source functions: $(grep -rn 'export function' --include='*.ts' src/ 2>/dev/null | wc -l)"
|
|
126
|
+
echo " Test blocks: $(grep -rn 'it\(' --include='*.test.ts' 2>/dev/null | wc -l)"
|
|
127
|
+
echo ""
|
|
128
|
+
|
|
129
|
+
echo "Quality Indicators:"
|
|
130
|
+
echo " Strong assertions: $(grep -rn 'toEqual\|toMatchObject' --include='*.test.ts' 2>/dev/null | wc -l)"
|
|
131
|
+
echo " Weak assertions: $(grep -rn 'toBeDefined\|toBeTruthy' --include='*.test.ts' 2>/dev/null | wc -l)"
|
|
132
|
+
echo ""
|
|
133
|
+
|
|
134
|
+
echo "Design Indicators:"
|
|
135
|
+
echo " Long timeouts: $(grep -rn '}, [0-9]\{5,\})' --include='*.test.ts' 2>/dev/null | wc -l)"
|
|
136
|
+
echo " Mock count: $(grep -rn 'jest.fn\|mock' --include='*.test.ts' 2>/dev/null | wc -l)"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Test Coverage Guidelines
|
|
142
|
+
|
|
143
|
+
| Code Type | Required Coverage | Test Type |
|
|
144
|
+
|-----------|-------------------|-----------|
|
|
145
|
+
| Business logic | 90%+ | Unit tests |
|
|
146
|
+
| API endpoints | 80%+ | Integration tests |
|
|
147
|
+
| UI components | 70%+ | Component tests |
|
|
148
|
+
| Utilities | 100% | Unit tests |
|
|
149
|
+
| Error paths | 100% | Unit tests |
|