devflow-kit 0.9.0 → 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 +167 -29
- package/LICENSE +1 -1
- package/README.md +179 -310
- package/dist/cli.js +3 -1
- package/dist/commands/init.d.ts +21 -0
- package/dist/commands/init.js +311 -576
- 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/get-issue.md +0 -286
- package/src/claude/agents/devflow/pr-comments.md +0 -285
- package/src/claude/agents/devflow/project-state.md +0 -419
- package/src/claude/agents/devflow/pull-request.md +0 -493
- package/src/claude/agents/devflow/release.md +0 -1137
- package/src/claude/agents/devflow/tech-debt.md +0 -338
- package/src/claude/commands/devflow/brainstorm.md +0 -68
- package/src/claude/commands/devflow/breakdown.md +0 -125
- package/src/claude/commands/devflow/catch-up.md +0 -29
- package/src/claude/commands/devflow/code-review.md +0 -237
- package/src/claude/commands/devflow/commit.md +0 -17
- package/src/claude/commands/devflow/debug.md +0 -56
- package/src/claude/commands/devflow/design.md +0 -82
- package/src/claude/commands/devflow/devlog.md +0 -408
- package/src/claude/commands/devflow/get-issue.md +0 -16
- package/src/claude/commands/devflow/implement.md +0 -100
- package/src/claude/commands/devflow/plan.md +0 -223
- package/src/claude/commands/devflow/pull-request.md +0 -20
- package/src/claude/commands/devflow/release.md +0 -251
- package/src/claude/commands/devflow/resolve-comments.md +0 -583
- package/src/claude/scripts/statusline.sh +0 -47
- package/src/claude/settings.json +0 -6
- package/src/claude/skills/devflow/code-smell/SKILL.md +0 -428
- package/src/claude/skills/devflow/debug/SKILL.md +0 -119
- package/src/claude/skills/devflow/error-handling/SKILL.md +0 -597
- package/src/claude/skills/devflow/input-validation/SKILL.md +0 -514
- package/src/claude/skills/devflow/pattern-check/SKILL.md +0 -238
- package/src/claude/skills/devflow/research/SKILL.md +0 -138
- package/src/claude/skills/devflow/test-design/SKILL.md +0 -384
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
# Implementation Violation Examples
|
|
2
|
+
|
|
3
|
+
Extended violation patterns for implementation reviews. Reference from main SKILL.md.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## CRUD Violations
|
|
8
|
+
|
|
9
|
+
### Missing Validation
|
|
10
|
+
|
|
11
|
+
**No Input Validation Before Persist**
|
|
12
|
+
```typescript
|
|
13
|
+
// VIOLATION: Saving unvalidated data
|
|
14
|
+
async function createUser(input: any): Promise<User> {
|
|
15
|
+
const user = { id: generateId(), ...input }; // No validation!
|
|
16
|
+
return await userRepository.save(user);
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Trusting External Data**
|
|
21
|
+
```typescript
|
|
22
|
+
// VIOLATION: Using input directly without parsing
|
|
23
|
+
async function updateUser(id: string, body: any): Promise<User> {
|
|
24
|
+
return await db.users.update(id, body); // Body could have extra fields
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Inconsistent Error Handling
|
|
29
|
+
|
|
30
|
+
**Mixed Error Styles**
|
|
31
|
+
```typescript
|
|
32
|
+
// VIOLATION: Throws in some cases, returns null in others
|
|
33
|
+
async function getUser(id: string): Promise<User | null> {
|
|
34
|
+
if (!id) throw new Error('Invalid ID'); // Throws
|
|
35
|
+
const user = await db.users.findById(id);
|
|
36
|
+
return user || null; // Returns null for not found
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Silent Failures**
|
|
41
|
+
```typescript
|
|
42
|
+
// VIOLATION: Error swallowed with empty catch
|
|
43
|
+
async function deleteUser(id: string): Promise<void> {
|
|
44
|
+
try {
|
|
45
|
+
await userRepository.delete(id);
|
|
46
|
+
} catch (error) {
|
|
47
|
+
// Silently ignore deletion failures
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### N+1 Query Patterns
|
|
53
|
+
|
|
54
|
+
**Loop Query**
|
|
55
|
+
```typescript
|
|
56
|
+
// VIOLATION: N queries in loop
|
|
57
|
+
async function listUsersWithOrders(userIds: string[]): Promise<UserWithOrders[]> {
|
|
58
|
+
return Promise.all(
|
|
59
|
+
userIds.map(async (id) => {
|
|
60
|
+
const user = await db.users.findById(id);
|
|
61
|
+
const orders = await db.orders.findByUserId(id); // N queries!
|
|
62
|
+
return { ...user, orders };
|
|
63
|
+
})
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Missing Join/Include**
|
|
69
|
+
```typescript
|
|
70
|
+
// VIOLATION: Separate query for related data
|
|
71
|
+
async function getOrderDetails(orderId: string): Promise<OrderDetails> {
|
|
72
|
+
const order = await db.orders.findById(orderId);
|
|
73
|
+
const items = await db.orderItems.findByOrderId(orderId); // Second query
|
|
74
|
+
const customer = await db.customers.findById(order.customerId); // Third query
|
|
75
|
+
return { order, items, customer };
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Missing Existence Check
|
|
80
|
+
|
|
81
|
+
**Update Without Checking Exists**
|
|
82
|
+
```typescript
|
|
83
|
+
// VIOLATION: No existence check before update
|
|
84
|
+
async function updateUser(id: string, data: UpdateData): Promise<User> {
|
|
85
|
+
return await db.users.update(id, data); // Fails silently or throws generic error
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Delete Without Constraints Check**
|
|
90
|
+
```typescript
|
|
91
|
+
// VIOLATION: No cascade/constraint check
|
|
92
|
+
async function deleteCategory(id: string): Promise<void> {
|
|
93
|
+
await db.categories.delete(id); // Orphans products referencing this category
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## API Violations
|
|
100
|
+
|
|
101
|
+
### Missing Auth Checks
|
|
102
|
+
|
|
103
|
+
**No Authentication**
|
|
104
|
+
```typescript
|
|
105
|
+
// VIOLATION: Endpoint without auth
|
|
106
|
+
app.delete('/api/users/:id', async (req, res) => {
|
|
107
|
+
await deleteUser(req.params.id); // Anyone can delete users!
|
|
108
|
+
res.status(204).send();
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**No Authorization**
|
|
113
|
+
```typescript
|
|
114
|
+
// VIOLATION: Auth but no authorization check
|
|
115
|
+
app.put('/api/users/:id', authenticate, async (req, res) => {
|
|
116
|
+
const result = await updateUser(req.params.id, req.body); // Can update any user
|
|
117
|
+
res.json(result);
|
|
118
|
+
});
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Inconsistent Response Format
|
|
122
|
+
|
|
123
|
+
**Mixed Response Shapes**
|
|
124
|
+
```typescript
|
|
125
|
+
// VIOLATION: Different error formats across endpoints
|
|
126
|
+
app.get('/api/users/:id', async (req, res) => {
|
|
127
|
+
const user = await getUser(req.params.id);
|
|
128
|
+
if (!user) res.status(404).send('Not found'); // String
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
app.get('/api/orders/:id', async (req, res) => {
|
|
132
|
+
const order = await getOrder(req.params.id);
|
|
133
|
+
if (!order) res.status(404).json({ error: 'Order not found' }); // Object
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Leaking Internal Errors**
|
|
138
|
+
```typescript
|
|
139
|
+
// VIOLATION: Exposing stack traces
|
|
140
|
+
app.post('/api/users', async (req, res) => {
|
|
141
|
+
try {
|
|
142
|
+
const user = await createUser(req.body);
|
|
143
|
+
res.json(user);
|
|
144
|
+
} catch (error) {
|
|
145
|
+
res.status(500).json({ error: error.stack }); // Security risk!
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Poor Error Messages
|
|
151
|
+
|
|
152
|
+
**Generic Messages**
|
|
153
|
+
```typescript
|
|
154
|
+
// VIOLATION: Unhelpful error response
|
|
155
|
+
function handleError(error: Error, res: Response) {
|
|
156
|
+
res.status(400).json({ error: 'Something went wrong' }); // No actionable info
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Missing Field Context**
|
|
161
|
+
```typescript
|
|
162
|
+
// VIOLATION: No field-level validation errors
|
|
163
|
+
app.post('/api/users', async (req, res) => {
|
|
164
|
+
if (!req.body.email || !req.body.name) {
|
|
165
|
+
res.status(400).json({ error: 'Invalid request' }); // Which field?
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Missing Request Validation
|
|
171
|
+
|
|
172
|
+
**No Path Parameter Validation**
|
|
173
|
+
```typescript
|
|
174
|
+
// VIOLATION: Using params without validation
|
|
175
|
+
app.get('/api/users/:id', async (req, res) => {
|
|
176
|
+
const user = await db.query('SELECT * FROM users WHERE id = $1', [req.params.id]);
|
|
177
|
+
// id could be malformed or SQL injection
|
|
178
|
+
});
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**No Body Validation**
|
|
182
|
+
```typescript
|
|
183
|
+
// VIOLATION: No schema validation
|
|
184
|
+
app.post('/api/orders', async (req, res) => {
|
|
185
|
+
const order = await createOrder(req.body); // Could be anything
|
|
186
|
+
res.json(order);
|
|
187
|
+
});
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Event Handler Violations
|
|
193
|
+
|
|
194
|
+
### Lost Events
|
|
195
|
+
|
|
196
|
+
**Fire and Forget Without ACK**
|
|
197
|
+
```typescript
|
|
198
|
+
// VIOLATION: Processing not confirmed
|
|
199
|
+
async function handleMessage(message: Message): Promise<void> {
|
|
200
|
+
processMessage(message); // Not awaited!
|
|
201
|
+
// Message may not be processed but considered handled
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**No Retry Mechanism**
|
|
206
|
+
```typescript
|
|
207
|
+
// VIOLATION: Single attempt, then lost
|
|
208
|
+
async function handleOrderCreated(event: OrderEvent): Promise<void> {
|
|
209
|
+
try {
|
|
210
|
+
await notifyWarehouse(event);
|
|
211
|
+
} catch (error) {
|
|
212
|
+
console.error('Failed to notify', error);
|
|
213
|
+
// Event lost, no retry
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Race Conditions
|
|
219
|
+
|
|
220
|
+
**Concurrent Updates Without Locking**
|
|
221
|
+
```typescript
|
|
222
|
+
// VIOLATION: Read-modify-write without protection
|
|
223
|
+
async function handleInventoryUpdate(event: InventoryEvent): Promise<void> {
|
|
224
|
+
const current = await db.inventory.get(event.productId);
|
|
225
|
+
const newQuantity = current.quantity - event.quantity;
|
|
226
|
+
await db.inventory.update(event.productId, { quantity: newQuantity });
|
|
227
|
+
// Two concurrent events can read same quantity, lose an update
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Non-Idempotent Processing**
|
|
232
|
+
```typescript
|
|
233
|
+
// VIOLATION: No idempotency check
|
|
234
|
+
async function handlePaymentReceived(event: PaymentEvent): Promise<void> {
|
|
235
|
+
await creditUserAccount(event.userId, event.amount);
|
|
236
|
+
await sendReceipt(event.userId);
|
|
237
|
+
// Redelivery credits user twice!
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Missing Error Handling
|
|
242
|
+
|
|
243
|
+
**Unhandled Promise Rejection**
|
|
244
|
+
```typescript
|
|
245
|
+
// VIOLATION: No error handling in handler
|
|
246
|
+
eventBus.on('user.created', async (event) => {
|
|
247
|
+
await sendWelcomeEmail(event.user); // Unhandled rejection if email fails
|
|
248
|
+
await createAuditLog(event);
|
|
249
|
+
});
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Partial Processing**
|
|
253
|
+
```typescript
|
|
254
|
+
// VIOLATION: Stops on first error
|
|
255
|
+
async function handleBatchEvent(events: Event[]): Promise<void> {
|
|
256
|
+
for (const event of events) {
|
|
257
|
+
await processEvent(event); // One failure stops all remaining
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### Missing Event Context
|
|
263
|
+
|
|
264
|
+
**No Correlation ID**
|
|
265
|
+
```typescript
|
|
266
|
+
// VIOLATION: Can't trace event through system
|
|
267
|
+
async function publishEvent(type: string, payload: object): Promise<void> {
|
|
268
|
+
await eventBus.publish({
|
|
269
|
+
type,
|
|
270
|
+
payload,
|
|
271
|
+
timestamp: new Date(),
|
|
272
|
+
// No correlationId, requestId, or traceId
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Configuration Violations
|
|
280
|
+
|
|
281
|
+
### Hardcoded Values
|
|
282
|
+
|
|
283
|
+
**Magic Numbers/Strings**
|
|
284
|
+
```typescript
|
|
285
|
+
// VIOLATION: Hardcoded configuration
|
|
286
|
+
async function fetchWithRetry(url: string) {
|
|
287
|
+
const maxRetries = 3; // Magic number
|
|
288
|
+
const timeout = 5000; // Magic number
|
|
289
|
+
const apiKey = 'sk-abc123...'; // Hardcoded secret!
|
|
290
|
+
// ...
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**Environment-Specific Branching**
|
|
295
|
+
```typescript
|
|
296
|
+
// VIOLATION: Scattered environment checks
|
|
297
|
+
function getApiUrl(): string {
|
|
298
|
+
if (process.env.NODE_ENV === 'production') {
|
|
299
|
+
return 'https://api.example.com';
|
|
300
|
+
} else if (process.env.NODE_ENV === 'staging') {
|
|
301
|
+
return 'https://staging-api.example.com';
|
|
302
|
+
} else {
|
|
303
|
+
return 'http://localhost:3000';
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Missing Validation
|
|
309
|
+
|
|
310
|
+
**No Schema Validation**
|
|
311
|
+
```typescript
|
|
312
|
+
// VIOLATION: Trusting environment variables
|
|
313
|
+
const config = {
|
|
314
|
+
port: process.env.PORT, // Could be undefined or 'abc'
|
|
315
|
+
dbUrl: process.env.DATABASE_URL, // Could be malformed
|
|
316
|
+
timeout: process.env.TIMEOUT, // String, not number
|
|
317
|
+
};
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**Silent Defaults**
|
|
321
|
+
```typescript
|
|
322
|
+
// VIOLATION: Defaulting without warning
|
|
323
|
+
const port = process.env.PORT || 3000; // No indication of fallback
|
|
324
|
+
const dbUrl = process.env.DATABASE_URL || 'localhost:5432'; // Insecure default
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### Insecure Defaults
|
|
328
|
+
|
|
329
|
+
**Debug Mode in Production**
|
|
330
|
+
```typescript
|
|
331
|
+
// VIOLATION: Debug enabled by default
|
|
332
|
+
const config = {
|
|
333
|
+
debug: process.env.DEBUG !== 'false', // Default true!
|
|
334
|
+
verboseLogging: true, // Always verbose
|
|
335
|
+
};
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**Missing Required Secrets**
|
|
339
|
+
```typescript
|
|
340
|
+
// VIOLATION: Optional secret with fallback
|
|
341
|
+
const jwtSecret = process.env.JWT_SECRET || 'default-secret'; // Insecure!
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Mutable Configuration
|
|
345
|
+
|
|
346
|
+
**Writable Config Object**
|
|
347
|
+
```typescript
|
|
348
|
+
// VIOLATION: Config can be mutated at runtime
|
|
349
|
+
export const config = {
|
|
350
|
+
port: 3000,
|
|
351
|
+
debug: false,
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
// Elsewhere in code
|
|
355
|
+
config.debug = true; // Mutation!
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
## Logging Violations
|
|
361
|
+
|
|
362
|
+
### Missing Context
|
|
363
|
+
|
|
364
|
+
**No Request Identifier**
|
|
365
|
+
```typescript
|
|
366
|
+
// VIOLATION: Can't correlate logs
|
|
367
|
+
app.get('/api/users/:id', async (req, res) => {
|
|
368
|
+
console.log('Fetching user'); // Which request?
|
|
369
|
+
const user = await getUser(req.params.id);
|
|
370
|
+
console.log('User found'); // Can't trace to request
|
|
371
|
+
res.json(user);
|
|
372
|
+
});
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
**No Operation Context**
|
|
376
|
+
```typescript
|
|
377
|
+
// VIOLATION: Logs without context
|
|
378
|
+
async function processOrder(order: Order): Promise<void> {
|
|
379
|
+
console.log('Processing'); // What order? Who requested?
|
|
380
|
+
await validateOrder(order);
|
|
381
|
+
console.log('Validated');
|
|
382
|
+
await saveOrder(order);
|
|
383
|
+
console.log('Done');
|
|
384
|
+
}
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### Sensitive Data Exposure
|
|
388
|
+
|
|
389
|
+
**Logging Credentials**
|
|
390
|
+
```typescript
|
|
391
|
+
// VIOLATION: Passwords in logs
|
|
392
|
+
async function login(credentials: Credentials): Promise<Result<User, Error>> {
|
|
393
|
+
logger.info('Login attempt', { credentials }); // Logs password!
|
|
394
|
+
// ...
|
|
395
|
+
}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
**PII in Logs**
|
|
399
|
+
```typescript
|
|
400
|
+
// VIOLATION: Personal data exposed
|
|
401
|
+
async function createUser(user: UserInput): Promise<User> {
|
|
402
|
+
logger.info('Creating user', {
|
|
403
|
+
email: user.email,
|
|
404
|
+
ssn: user.ssn, // PII!
|
|
405
|
+
creditCard: user.paymentInfo, // PCI data!
|
|
406
|
+
});
|
|
407
|
+
// ...
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### Inconsistent Levels
|
|
412
|
+
|
|
413
|
+
**Wrong Log Levels**
|
|
414
|
+
```typescript
|
|
415
|
+
// VIOLATION: Using wrong severity
|
|
416
|
+
function processPayment(payment: Payment): void {
|
|
417
|
+
console.log('Payment failed!'); // Should be error
|
|
418
|
+
console.error('Processing payment'); // Not an error
|
|
419
|
+
console.warn('Payment successful'); // Not a warning
|
|
420
|
+
}
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
**Debug Logs in Production**
|
|
424
|
+
```typescript
|
|
425
|
+
// VIOLATION: Verbose logging without level check
|
|
426
|
+
function complexCalculation(data: Data): number {
|
|
427
|
+
console.log('Input:', JSON.stringify(data)); // Always logs, even in production
|
|
428
|
+
const result = calculate(data);
|
|
429
|
+
console.log('Intermediate:', intermediate); // Noise in production
|
|
430
|
+
console.log('Output:', result);
|
|
431
|
+
return result;
|
|
432
|
+
}
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### Unstructured Logging
|
|
436
|
+
|
|
437
|
+
**String Interpolation**
|
|
438
|
+
```typescript
|
|
439
|
+
// VIOLATION: Not machine-parseable
|
|
440
|
+
console.log(`User ${userId} created order ${orderId} at ${timestamp}`);
|
|
441
|
+
// Can't query or aggregate these logs
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
**Console.log in Production**
|
|
445
|
+
```typescript
|
|
446
|
+
// VIOLATION: No structured output
|
|
447
|
+
console.log('Error:', error); // Not JSON, no metadata
|
|
448
|
+
console.log('Request received'); // No timestamp, level, or context
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
### Missing Error Details
|
|
452
|
+
|
|
453
|
+
**Logging Without Stack**
|
|
454
|
+
```typescript
|
|
455
|
+
// VIOLATION: Lost debugging info
|
|
456
|
+
try {
|
|
457
|
+
await riskyOperation();
|
|
458
|
+
} catch (error) {
|
|
459
|
+
logger.error('Operation failed'); // No error details!
|
|
460
|
+
}
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
**Catching and Re-logging**
|
|
464
|
+
```typescript
|
|
465
|
+
// VIOLATION: Duplicate logs
|
|
466
|
+
async function outerFunction() {
|
|
467
|
+
try {
|
|
468
|
+
await innerFunction();
|
|
469
|
+
} catch (error) {
|
|
470
|
+
logger.error('Outer failed', { error }); // Double logged
|
|
471
|
+
throw error;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
async function innerFunction() {
|
|
476
|
+
try {
|
|
477
|
+
await riskyThing();
|
|
478
|
+
} catch (error) {
|
|
479
|
+
logger.error('Inner failed', { error }); // First log
|
|
480
|
+
throw error;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
```
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-patterns
|
|
3
|
+
description: Security vulnerability analysis patterns for code review. Detects injection flaws, authentication bypasses, insecure cryptography, hardcoded secrets, and missing input sanitization. Loaded by Reviewer agent when focus=security.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
allowed-tools: Read, Grep, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Security Patterns
|
|
9
|
+
|
|
10
|
+
Domain expertise for security vulnerability detection. Use alongside `review-methodology` for complete security reviews.
|
|
11
|
+
|
|
12
|
+
## Iron Law
|
|
13
|
+
|
|
14
|
+
> **ASSUME ALL INPUT IS MALICIOUS**
|
|
15
|
+
>
|
|
16
|
+
> Every user input, URL parameter, header, and cookie is an attack vector. Use parameterized
|
|
17
|
+
> queries always. Escape output always. Validate schemas always. "This field is internal"
|
|
18
|
+
> is not a defense. Defense in depth, not wishful thinking.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Vulnerability Categories
|
|
23
|
+
|
|
24
|
+
### 1. Input Validation & Injection
|
|
25
|
+
|
|
26
|
+
**SQL Injection**
|
|
27
|
+
```typescript
|
|
28
|
+
// VULNERABLE
|
|
29
|
+
const query = `SELECT * FROM users WHERE email = '${email}'`;
|
|
30
|
+
|
|
31
|
+
// SECURE
|
|
32
|
+
await db.execute("SELECT * FROM users WHERE email = ?", [email]);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**XSS (Cross-Site Scripting)**
|
|
36
|
+
```typescript
|
|
37
|
+
// VULNERABLE
|
|
38
|
+
element.innerHTML = userInput;
|
|
39
|
+
|
|
40
|
+
// SECURE
|
|
41
|
+
element.textContent = userInput;
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
> See `references/injection.md` for NoSQL, command injection, path traversal patterns.
|
|
45
|
+
|
|
46
|
+
### 2. Authentication & Authorization
|
|
47
|
+
|
|
48
|
+
**Missing Auth Checks**
|
|
49
|
+
```typescript
|
|
50
|
+
// VULNERABLE
|
|
51
|
+
app.delete('/api/users/:id', async (req, res) => {
|
|
52
|
+
await deleteUser(req.params.id); // No auth!
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// SECURE
|
|
56
|
+
app.delete('/api/users/:id', requireAuth, requireRole('admin'), handler);
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
> See `references/auth.md` for password policies, session management, JWT patterns.
|
|
60
|
+
|
|
61
|
+
### 3. Cryptography & Secrets
|
|
62
|
+
|
|
63
|
+
**Hardcoded Secrets**
|
|
64
|
+
```typescript
|
|
65
|
+
// VULNERABLE
|
|
66
|
+
const API_KEY = 'sk-abc123xyz789';
|
|
67
|
+
|
|
68
|
+
// SECURE
|
|
69
|
+
const API_KEY = process.env.API_KEY;
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Insecure Random**
|
|
73
|
+
```typescript
|
|
74
|
+
// VULNERABLE
|
|
75
|
+
const token = Math.random().toString(36);
|
|
76
|
+
|
|
77
|
+
// SECURE
|
|
78
|
+
const token = crypto.randomBytes(32).toString('hex');
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
> See `references/crypto.md` for weak crypto detection, encryption patterns.
|
|
82
|
+
|
|
83
|
+
### 4. Configuration & Headers
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
// REQUIRED: Use helmet or set manually
|
|
87
|
+
app.use(helmet());
|
|
88
|
+
res.setHeader('Content-Security-Policy', "default-src 'self'");
|
|
89
|
+
res.setHeader('X-Frame-Options', 'DENY');
|
|
90
|
+
res.setHeader('Strict-Transport-Security', 'max-age=31536000');
|
|
91
|
+
|
|
92
|
+
// CORS: Never use origin: '*'
|
|
93
|
+
app.use(cors({ origin: ['https://myapp.com'], credentials: true }));
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 5. Business Logic
|
|
97
|
+
|
|
98
|
+
**Race Conditions**
|
|
99
|
+
```typescript
|
|
100
|
+
// VULNERABLE
|
|
101
|
+
if (balance >= amount) await withdraw(userId, amount);
|
|
102
|
+
|
|
103
|
+
// SECURE: Use transactions with row locks
|
|
104
|
+
await db.transaction(async (tx) => {
|
|
105
|
+
const balance = await tx.getBalance(userId, { forUpdate: true });
|
|
106
|
+
if (balance >= amount) await tx.withdraw(userId, amount);
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Mass Assignment**
|
|
111
|
+
```typescript
|
|
112
|
+
// VULNERABLE
|
|
113
|
+
await User.create(req.body); // All fields accepted!
|
|
114
|
+
|
|
115
|
+
// SECURE: Explicitly list allowed fields
|
|
116
|
+
await User.create({ email: req.body.email, name: req.body.name });
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Extended References
|
|
122
|
+
|
|
123
|
+
| Reference | Content |
|
|
124
|
+
|-----------|---------|
|
|
125
|
+
| `references/injection.md` | NoSQL, command, path traversal, LDAP, template injection |
|
|
126
|
+
| `references/auth.md` | Password policy, session management, JWT, RBAC/ABAC |
|
|
127
|
+
| `references/crypto.md` | Secret management, weak crypto, encryption, timing attacks |
|
|
128
|
+
| `references/detection.md` | All grep patterns for automated scanning |
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Severity Guidelines
|
|
133
|
+
|
|
134
|
+
| Level | Criteria | Examples |
|
|
135
|
+
|-------|----------|----------|
|
|
136
|
+
| **CRITICAL** | Immediate exploitation | SQL injection in auth, RCE, hardcoded admin creds |
|
|
137
|
+
| **HIGH** | Significant risk | XSS, broken access control, weak crypto, CSRF |
|
|
138
|
+
| **MEDIUM** | Moderate with conditions | Missing headers, permissive CORS, missing rate limits |
|
|
139
|
+
| **LOW** | Minor improvement | Outdated deps (no CVE), suboptimal CSP |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## OWASP Reference
|
|
144
|
+
|
|
145
|
+
| ID | Category | Examples |
|
|
146
|
+
|----|----------|----------|
|
|
147
|
+
| A01 | Broken Access Control | Missing auth, IDOR, privilege escalation |
|
|
148
|
+
| A02 | Cryptographic Failures | Weak hashing, hardcoded secrets |
|
|
149
|
+
| A03 | Injection | SQL, NoSQL, command, XSS |
|
|
150
|
+
| A04 | Insecure Design | Missing rate limits, mass assignment |
|
|
151
|
+
| A05 | Security Misconfiguration | Debug enabled, missing headers |
|
|
152
|
+
| A06 | Vulnerable Components | Outdated deps with known CVEs |
|
|
153
|
+
| A07 | Auth Failures | Weak passwords, session issues |
|
|
154
|
+
| A08 | Data Integrity Failures | Untrusted deserialization |
|
|
155
|
+
| A09 | Logging Failures | Missing security logs |
|
|
156
|
+
| A10 | SSRF | Unvalidated URLs in server requests |
|