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,237 @@
|
|
|
1
|
+
# Security Violation Examples
|
|
2
|
+
|
|
3
|
+
Extended violation patterns for security reviews. Reference from main SKILL.md.
|
|
4
|
+
|
|
5
|
+
## Injection Vulnerabilities
|
|
6
|
+
|
|
7
|
+
### SQL Injection
|
|
8
|
+
```typescript
|
|
9
|
+
// VULNERABLE: String interpolation in query
|
|
10
|
+
const user = await db.query(`SELECT * FROM users WHERE id = '${userId}'`);
|
|
11
|
+
const result = await db.query(`SELECT * FROM products WHERE name LIKE '%${search}%'`);
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### NoSQL Injection
|
|
15
|
+
```typescript
|
|
16
|
+
// VULNERABLE: Direct object from request
|
|
17
|
+
const user = await db.users.findOne({ username: req.body.username });
|
|
18
|
+
// Attacker sends: { username: { $gt: "" } }
|
|
19
|
+
|
|
20
|
+
// VULNERABLE: $where operator accepts arbitrary JS
|
|
21
|
+
db.users.find({ $where: `this.name === '${userInput}'` });
|
|
22
|
+
|
|
23
|
+
// VULNERABLE: regex injection
|
|
24
|
+
db.users.find({ name: { $regex: userInput } });
|
|
25
|
+
// Attacker sends: ".*" (matches everything)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Command Injection
|
|
29
|
+
```typescript
|
|
30
|
+
// VULNERABLE: User input in shell command
|
|
31
|
+
exec(`ls ${userInput}`);
|
|
32
|
+
exec(`convert ${filename} output.png`);
|
|
33
|
+
exec(`ping -c 4 ${hostname}`);
|
|
34
|
+
|
|
35
|
+
// Dangerous characters: ; | & $ ` ( ) < > \ ' "
|
|
36
|
+
// Example attack: userInput = "file.txt; rm -rf /"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Path Traversal
|
|
40
|
+
```typescript
|
|
41
|
+
// VULNERABLE: Direct path concatenation
|
|
42
|
+
const file = req.params.filename;
|
|
43
|
+
fs.readFile(`./uploads/${file}`); // Attacker: ../../../etc/passwd
|
|
44
|
+
|
|
45
|
+
// VULNERABLE: Encoded traversal
|
|
46
|
+
// Attacker sends: %2e%2e%2f%2e%2e%2fetc/passwd (URL encoded ../..)
|
|
47
|
+
const decoded = decodeURIComponent(req.params.filename);
|
|
48
|
+
fs.readFile(`./uploads/${decoded}`);
|
|
49
|
+
|
|
50
|
+
// VULNERABLE: Double encoding
|
|
51
|
+
// Attacker sends: %252e%252e%252f (double-encoded ../)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### LDAP Injection
|
|
55
|
+
```typescript
|
|
56
|
+
// VULNERABLE: Unescaped LDAP filter
|
|
57
|
+
const filter = `(uid=${username})`;
|
|
58
|
+
ldap.search(baseDN, filter);
|
|
59
|
+
// Attacker: username = "admin)(&(password=*)"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Template Injection (SSTI)
|
|
63
|
+
```typescript
|
|
64
|
+
// VULNERABLE: User input in template
|
|
65
|
+
const template = `Hello ${req.body.name}!`;
|
|
66
|
+
ejs.render(template);
|
|
67
|
+
// Attacker: name = "<%= process.env.SECRET %>"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Header Injection
|
|
71
|
+
```typescript
|
|
72
|
+
// VULNERABLE: CRLF injection
|
|
73
|
+
res.setHeader('Location', `/user/${userInput}`);
|
|
74
|
+
// Attacker: userInput = "test\r\nSet-Cookie: admin=true"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Authentication Vulnerabilities
|
|
80
|
+
|
|
81
|
+
### Weak Password Policies
|
|
82
|
+
```typescript
|
|
83
|
+
// VULNERABLE: Weak password requirements
|
|
84
|
+
if (password.length >= 6) { /* accept */ }
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Session Management Issues
|
|
88
|
+
```typescript
|
|
89
|
+
// VULNERABLE: Session ID in URL
|
|
90
|
+
app.get('/dashboard?session=abc123');
|
|
91
|
+
|
|
92
|
+
// VULNERABLE: Predictable session IDs
|
|
93
|
+
const sessionId = `user_${userId}`;
|
|
94
|
+
|
|
95
|
+
// VULNERABLE: No session timeout or rotation
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### JWT Misuse
|
|
99
|
+
```typescript
|
|
100
|
+
// VULNERABLE: Weak secret
|
|
101
|
+
jwt.sign(payload, 'secret123');
|
|
102
|
+
|
|
103
|
+
// VULNERABLE: No expiration
|
|
104
|
+
jwt.sign(payload, secret);
|
|
105
|
+
|
|
106
|
+
// VULNERABLE: Algorithm confusion (accepts 'none')
|
|
107
|
+
jwt.verify(token, secret); // Without algorithm specification
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Missing Authorization
|
|
111
|
+
```typescript
|
|
112
|
+
// VULNERABLE: No auth checks
|
|
113
|
+
app.delete('/api/users/:id', async (req, res) => {
|
|
114
|
+
await deleteUser(req.params.id); // No auth check!
|
|
115
|
+
});
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Cryptography Vulnerabilities
|
|
121
|
+
|
|
122
|
+
### Hardcoded Secrets
|
|
123
|
+
```typescript
|
|
124
|
+
// VULNERABLE: Secrets in code
|
|
125
|
+
const API_KEY = 'sk-abc123xyz789';
|
|
126
|
+
const dbPassword = 'admin123';
|
|
127
|
+
const jwtSecret = 'mysecret';
|
|
128
|
+
|
|
129
|
+
// VULNERABLE: Secrets in config files
|
|
130
|
+
const config = {
|
|
131
|
+
database: {
|
|
132
|
+
password: 'prod_password_123'
|
|
133
|
+
},
|
|
134
|
+
api: {
|
|
135
|
+
key: 'sk-live-abcdef123456'
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Weak Cryptography
|
|
141
|
+
```typescript
|
|
142
|
+
// VULNERABLE: Broken hash algorithms
|
|
143
|
+
crypto.createHash('md5').update(password); // MD5 is broken
|
|
144
|
+
crypto.createHash('sha1').update(password); // SHA1 weak for passwords
|
|
145
|
+
|
|
146
|
+
// VULNERABLE: Using password directly as key
|
|
147
|
+
const key = password;
|
|
148
|
+
crypto.createCipheriv('aes-256-gcm', key, iv);
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Insecure Random
|
|
152
|
+
```typescript
|
|
153
|
+
// VULNERABLE: Predictable random
|
|
154
|
+
const token = Math.random().toString(36); // Predictable!
|
|
155
|
+
const id = Date.now().toString();
|
|
156
|
+
const code = Math.floor(Math.random() * 1000000);
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Weak Encryption
|
|
160
|
+
```typescript
|
|
161
|
+
// VULNERABLE: ECB mode (patterns visible)
|
|
162
|
+
crypto.createCipheriv('aes-256-ecb', key, null);
|
|
163
|
+
|
|
164
|
+
// VULNERABLE: No authentication (CBC without HMAC)
|
|
165
|
+
crypto.createCipheriv('aes-256-cbc', key, iv);
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Timing Attacks
|
|
169
|
+
```typescript
|
|
170
|
+
// VULNERABLE: Early exit reveals length info
|
|
171
|
+
function verifyToken(provided: string, stored: string): boolean {
|
|
172
|
+
return provided === stored; // Early exit reveals info
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Detection Grep Commands
|
|
179
|
+
|
|
180
|
+
### Injection Detection
|
|
181
|
+
```bash
|
|
182
|
+
# SQL Injection
|
|
183
|
+
grep -rn "query.*\${" --include="*.ts" --include="*.js"
|
|
184
|
+
grep -rn "query.*+ " --include="*.ts" --include="*.js"
|
|
185
|
+
grep -rn "execute.*\`" --include="*.ts" --include="*.js"
|
|
186
|
+
|
|
187
|
+
# NoSQL Injection
|
|
188
|
+
grep -rn "findOne.*req\.\|find.*req\." --include="*.ts" --include="*.js"
|
|
189
|
+
grep -rn "\$where" --include="*.ts" --include="*.js"
|
|
190
|
+
|
|
191
|
+
# Command Injection
|
|
192
|
+
grep -rn "exec\s*\(" --include="*.ts" --include="*.js"
|
|
193
|
+
grep -rn "spawn.*\`\|execSync.*\`" --include="*.ts" --include="*.js"
|
|
194
|
+
|
|
195
|
+
# Path Traversal
|
|
196
|
+
grep -rn "readFile.*req\.\|readFileSync.*req\." --include="*.ts" --include="*.js"
|
|
197
|
+
grep -rn "path\.join.*req\." --include="*.ts" --include="*.js"
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Auth Detection
|
|
201
|
+
```bash
|
|
202
|
+
# Missing auth middleware
|
|
203
|
+
grep -rn "app\.\(get\|post\|put\|delete\).*async" --include="*.ts" --include="*.js" | \
|
|
204
|
+
grep -v "requireAuth\|isAuthenticated\|authorize"
|
|
205
|
+
|
|
206
|
+
# Weak JWT configuration
|
|
207
|
+
grep -rn "jwt\.sign\|jwt\.verify" --include="*.ts" --include="*.js" -A 5 | \
|
|
208
|
+
grep -v "algorithm\|expiresIn"
|
|
209
|
+
|
|
210
|
+
# Session issues
|
|
211
|
+
grep -rn "session\|cookie" --include="*.ts" --include="*.js" | \
|
|
212
|
+
grep -v "httpOnly\|secure\|sameSite"
|
|
213
|
+
|
|
214
|
+
# Password handling
|
|
215
|
+
grep -rn "password.*length" --include="*.ts" --include="*.js"
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Crypto Detection
|
|
219
|
+
```bash
|
|
220
|
+
# Hardcoded secrets
|
|
221
|
+
grep -rn "password.*=.*['\"]" --include="*.ts" --include="*.js"
|
|
222
|
+
grep -rn "api.key.*=.*['\"]" --include="*.ts" --include="*.js"
|
|
223
|
+
grep -rn "secret.*=.*['\"]" --include="*.ts" --include="*.js"
|
|
224
|
+
grep -rn "sk-\|pk-\|api_" --include="*.ts" --include="*.js"
|
|
225
|
+
|
|
226
|
+
# Weak crypto
|
|
227
|
+
grep -rn "createHash.*md5\|sha1" --include="*.ts" --include="*.js"
|
|
228
|
+
grep -rn "DES\|RC4\|Blowfish" --include="*.ts" --include="*.js"
|
|
229
|
+
grep -rn "aes-.*-ecb\|aes-.*-cbc" --include="*.ts" --include="*.js"
|
|
230
|
+
|
|
231
|
+
# Insecure random
|
|
232
|
+
grep -rn "Math.random" --include="*.ts" --include="*.js"
|
|
233
|
+
grep -rn "Date.now.*id\|Date.now.*token" --include="*.ts" --include="*.js"
|
|
234
|
+
|
|
235
|
+
# String comparison for secrets
|
|
236
|
+
grep -rn "token.*===\|secret.*===\|key.*===" --include="*.ts" --include="*.js"
|
|
237
|
+
```
|
|
@@ -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 |
|