devflow-kit 0.9.0 → 1.1.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 +197 -29
- package/LICENSE +1 -1
- package/README.md +185 -309
- package/dist/cli.js +7 -1
- package/dist/commands/ambient.d.ts +18 -0
- package/dist/commands/ambient.js +136 -0
- package/dist/commands/init.d.ts +23 -0
- package/dist/commands/init.js +393 -571
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.js +20 -0
- package/dist/commands/memory.d.ts +22 -0
- package/dist/commands/memory.js +175 -0
- package/dist/commands/uninstall.d.ts +10 -0
- package/dist/commands/uninstall.js +418 -78
- package/dist/plugins.d.ts +46 -0
- package/dist/plugins.js +169 -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 +80 -0
- package/dist/utils/post-install.js +508 -0
- package/dist/utils/safe-delete-install.d.ts +29 -0
- package/dist/utils/safe-delete-install.js +191 -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-ambient/.claude-plugin/plugin.json +7 -0
- package/plugins/devflow-ambient/README.md +49 -0
- package/plugins/devflow-ambient/commands/ambient.md +110 -0
- package/plugins/devflow-ambient/skills/ambient-router/SKILL.md +89 -0
- package/plugins/devflow-ambient/skills/ambient-router/references/skill-catalog.md +64 -0
- 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 +28 -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 +138 -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-driven-development/SKILL.md +139 -0
- package/plugins/devflow-core-skills/skills/test-driven-development/references/rationalization-prevention.md +111 -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/ambient-prompt.sh +48 -0
- package/scripts/hooks/background-memory-update.sh +208 -0
- package/scripts/hooks/ensure-memory-gitignore.sh +17 -0
- package/scripts/hooks/pre-compact-memory.sh +87 -0
- package/scripts/hooks/session-start-memory.sh +126 -0
- package/scripts/hooks/stop-update-memory.sh +85 -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/ambient-router/SKILL.md +89 -0
- package/shared/skills/ambient-router/references/skill-catalog.md +64 -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 +138 -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-driven-development/SKILL.md +139 -0
- package/shared/skills/test-driven-development/references/rationalization-prevention.md +111 -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 +160 -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,237 @@
|
|
|
1
|
+
# Regression Detection Reference
|
|
2
|
+
|
|
3
|
+
Bash commands and techniques for detecting regressions during code review.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Export Comparison
|
|
8
|
+
|
|
9
|
+
### Compare Module Exports
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# List exports in main branch
|
|
13
|
+
git show main:src/index.ts | grep -E "^export" > /tmp/exports_before.txt
|
|
14
|
+
|
|
15
|
+
# List exports in current branch
|
|
16
|
+
grep -E "^export" src/index.ts > /tmp/exports_after.txt
|
|
17
|
+
|
|
18
|
+
# Find removed exports
|
|
19
|
+
diff /tmp/exports_before.txt /tmp/exports_after.txt | grep "^<"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Find All Removed Exports Across Files
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Get list of changed .ts files
|
|
26
|
+
git diff main...HEAD --name-only --diff-filter=M "*.ts" | while read file; do
|
|
27
|
+
echo "=== $file ==="
|
|
28
|
+
diff <(git show main:"$file" 2>/dev/null | grep "^export") \
|
|
29
|
+
<(cat "$file" | grep "^export") | grep "^<" || echo "(no removals)"
|
|
30
|
+
done
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Function Usage Analysis
|
|
36
|
+
|
|
37
|
+
### Find Removed Function Calls
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Check if function is still called
|
|
41
|
+
git show main:src/*.ts | grep "oldFunction" | wc -l # Before: 15
|
|
42
|
+
grep -r "oldFunction" src/*.ts | wc -l # After: 3 (12 removed!)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Verify All Consumers Updated
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Find all imports of changed module
|
|
49
|
+
grep -rn "from './changed-module'" --include="*.ts"
|
|
50
|
+
|
|
51
|
+
# Check each importer for usage of changed exports
|
|
52
|
+
for file in $(grep -l "from './changed-module'" src/**/*.ts); do
|
|
53
|
+
echo "=== $file ==="
|
|
54
|
+
grep -n "changedExport\|renamedFunction" "$file"
|
|
55
|
+
done
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Find Incomplete Migrations
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# Count usages of old vs new API
|
|
62
|
+
echo "Old API usages:"
|
|
63
|
+
grep -r "oldFunction" src/ --include="*.ts" | wc -l
|
|
64
|
+
|
|
65
|
+
echo "New API usages:"
|
|
66
|
+
grep -r "newFunction" src/ --include="*.ts" | wc -l
|
|
67
|
+
|
|
68
|
+
# List files still using old API
|
|
69
|
+
grep -rl "oldFunction" src/ --include="*.ts"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## File Structure Comparison
|
|
75
|
+
|
|
76
|
+
### Compare File Trees
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Compare file structure
|
|
80
|
+
diff <(git ls-tree -r --name-only main src/) \
|
|
81
|
+
<(git ls-tree -r --name-only HEAD src/)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Find Deleted Files
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# Find removed files
|
|
88
|
+
git diff main...HEAD --name-status | grep "^D"
|
|
89
|
+
|
|
90
|
+
# Find removed test files specifically
|
|
91
|
+
git diff main...HEAD --name-status | grep "^D.*test"
|
|
92
|
+
|
|
93
|
+
# Find removed type definition files
|
|
94
|
+
git diff main...HEAD --name-status | grep "^D.*\.d\.ts"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Change Analysis
|
|
100
|
+
|
|
101
|
+
### Find Large Deletions
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Find files with significant deletions
|
|
105
|
+
git diff main...HEAD --stat | grep -E "^\s+-" | head -20
|
|
106
|
+
|
|
107
|
+
# Show deletion-heavy changes
|
|
108
|
+
git diff main...HEAD --numstat | awk '$2 > 50 {print $3 ": +" $1 " -" $2}'
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Find TODO/FIXME Additions
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# Find incomplete work markers
|
|
115
|
+
git diff main...HEAD | grep "^\+.*TODO\|^\+.*FIXME"
|
|
116
|
+
|
|
117
|
+
# Count new vs resolved TODOs
|
|
118
|
+
echo "New TODOs:"
|
|
119
|
+
git diff main...HEAD | grep "^\+.*TODO" | wc -l
|
|
120
|
+
|
|
121
|
+
echo "Resolved TODOs:"
|
|
122
|
+
git diff main...HEAD | grep "^-.*TODO" | wc -l
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## API Endpoint Analysis
|
|
128
|
+
|
|
129
|
+
### Find Removed Routes
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# Compare route definitions
|
|
133
|
+
diff <(git show main:src/routes/*.ts | grep -E "app\.(get|post|put|delete|patch)") \
|
|
134
|
+
<(cat src/routes/*.ts | grep -E "app\.(get|post|put|delete|patch)")
|
|
135
|
+
|
|
136
|
+
# Find removed Express routes
|
|
137
|
+
git diff main...HEAD src/routes/ | grep "^-.*app\.\(get\|post\|put\|delete\)"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Find Removed Event Handlers
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# Compare event handlers
|
|
144
|
+
diff <(git show main:src/**/*.ts | grep -E "\.on\(|\.addEventListener\(") \
|
|
145
|
+
<(cat src/**/*.ts | grep -E "\.on\(|\.addEventListener\(") | grep "^<"
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## CLI Option Analysis
|
|
151
|
+
|
|
152
|
+
### Compare CLI Options
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Find commander/yargs options before
|
|
156
|
+
git show main:src/cli.ts | grep -E "\.option\(|\.command\(" > /tmp/cli_before.txt
|
|
157
|
+
|
|
158
|
+
# Find options after
|
|
159
|
+
grep -E "\.option\(|\.command\(" src/cli.ts > /tmp/cli_after.txt
|
|
160
|
+
|
|
161
|
+
# Compare
|
|
162
|
+
diff /tmp/cli_before.txt /tmp/cli_after.txt | grep "^<"
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Return Type Analysis
|
|
168
|
+
|
|
169
|
+
### Find Changed Return Types
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
# Extract function signatures
|
|
173
|
+
git show main:src/services/*.ts | grep -E "function.*\):" > /tmp/sigs_before.txt
|
|
174
|
+
grep -E "function.*\):" src/services/*.ts > /tmp/sigs_after.txt
|
|
175
|
+
|
|
176
|
+
# Compare (look for added | null, | undefined)
|
|
177
|
+
diff /tmp/sigs_before.txt /tmp/sigs_after.txt
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Side Effect Analysis
|
|
183
|
+
|
|
184
|
+
### Find Removed Logging
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
# Count logger calls before vs after
|
|
188
|
+
echo "Logging before:"
|
|
189
|
+
git show main:src/**/*.ts | grep -c "logger\.\|console\."
|
|
190
|
+
|
|
191
|
+
echo "Logging after:"
|
|
192
|
+
grep -rc "logger\.\|console\." src/**/*.ts | awk -F: '{sum += $2} END {print sum}'
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Find Removed Event Emissions
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# Count event emissions before vs after
|
|
199
|
+
echo "Events before:"
|
|
200
|
+
git show main:src/**/*.ts | grep -c "\.emit\("
|
|
201
|
+
|
|
202
|
+
echo "Events after:"
|
|
203
|
+
grep -rc "\.emit\(" src/**/*.ts | awk -F: '{sum += $2} END {print sum}'
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Quick Regression Checks
|
|
209
|
+
|
|
210
|
+
### All-in-One Regression Scan
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
#!/bin/bash
|
|
214
|
+
# regression-check.sh
|
|
215
|
+
|
|
216
|
+
echo "=== REGRESSION CHECK ==="
|
|
217
|
+
|
|
218
|
+
echo -e "\n1. Removed exports:"
|
|
219
|
+
git diff main...HEAD | grep "^-export" | head -10
|
|
220
|
+
|
|
221
|
+
echo -e "\n2. Removed files:"
|
|
222
|
+
git diff main...HEAD --name-status | grep "^D" | head -10
|
|
223
|
+
|
|
224
|
+
echo -e "\n3. Removed routes:"
|
|
225
|
+
git diff main...HEAD | grep "^-.*app\.\(get\|post\|put\|delete\)" | head -10
|
|
226
|
+
|
|
227
|
+
echo -e "\n4. Removed event handlers:"
|
|
228
|
+
git diff main...HEAD | grep "^-.*\.on\(" | head -10
|
|
229
|
+
|
|
230
|
+
echo -e "\n5. New TODOs (incomplete work):"
|
|
231
|
+
git diff main...HEAD | grep "^\+.*TODO" | head -10
|
|
232
|
+
|
|
233
|
+
echo -e "\n6. Type changes (potential breaks):"
|
|
234
|
+
git diff main...HEAD | grep "^\+.*| null\|^\+.*| undefined" | head -10
|
|
235
|
+
|
|
236
|
+
echo -e "\n=== END CHECK ==="
|
|
237
|
+
```
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Regression-Safe Patterns Reference
|
|
2
|
+
|
|
3
|
+
Correct patterns for avoiding regressions during code changes.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Safe Export Changes
|
|
8
|
+
|
|
9
|
+
### Deprecation Before Removal
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// Step 1: Deprecate (release v1.1)
|
|
13
|
+
/**
|
|
14
|
+
* @deprecated Use `createUserV2` instead. Will be removed in v2.0.
|
|
15
|
+
*/
|
|
16
|
+
export function createUser(data: UserData): User {
|
|
17
|
+
console.warn('createUser is deprecated. Use createUserV2.');
|
|
18
|
+
return createUserV2({ ...data, version: 1 });
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// New function
|
|
22
|
+
export function createUserV2(data: UserDataV2): User { }
|
|
23
|
+
|
|
24
|
+
// Step 2: Remove in next major version (v2.0)
|
|
25
|
+
// export function createUser - REMOVED with changelog entry
|
|
26
|
+
export function createUserV2(data: UserDataV2): User { }
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Additive Changes Only
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
// SAFE: Adding new exports
|
|
33
|
+
export function existingFunction() { } // Unchanged
|
|
34
|
+
export function newFunction() { } // Added - safe
|
|
35
|
+
export const NEW_CONSTANT = 'value'; // Added - safe
|
|
36
|
+
|
|
37
|
+
// SAFE: Adding optional parameters
|
|
38
|
+
function fetch(url: string, options?: FetchOptions): Promise<Response> { }
|
|
39
|
+
// Adding options parameter with default - safe for existing callers
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Safe Return Type Changes
|
|
45
|
+
|
|
46
|
+
### Widening with Type Guards
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
// BEFORE
|
|
50
|
+
function getUser(id: string): User { }
|
|
51
|
+
|
|
52
|
+
// AFTER: Widen return type safely
|
|
53
|
+
function getUser(id: string): User | null { }
|
|
54
|
+
|
|
55
|
+
// MIGRATION: Provide type guard for existing callers
|
|
56
|
+
function isUserFound(user: User | null): user is User {
|
|
57
|
+
return user !== null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Usage for existing code:
|
|
61
|
+
const user = getUser(id);
|
|
62
|
+
if (isUserFound(user)) {
|
|
63
|
+
console.log(user.name); // Safe - type narrowed
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Result Type Migration
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
// BEFORE: Throws
|
|
71
|
+
function parseConfig(json: string): Config {
|
|
72
|
+
if (!valid) throw new ConfigError('Invalid');
|
|
73
|
+
return config;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// AFTER: Returns Result
|
|
77
|
+
function parseConfig(json: string): Result<Config, ConfigError> {
|
|
78
|
+
if (!valid) return { ok: false, error: new ConfigError('Invalid') };
|
|
79
|
+
return { ok: true, value: config };
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// MIGRATION: Provide wrapper for existing callers
|
|
83
|
+
function parseConfigOrThrow(json: string): Config {
|
|
84
|
+
const result = parseConfig(json);
|
|
85
|
+
if (!result.ok) throw result.error;
|
|
86
|
+
return result.value;
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Safe Default Value Changes
|
|
93
|
+
|
|
94
|
+
### Explicit Override
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
// BEFORE
|
|
98
|
+
function fetch(url: string, timeout = 5000): Promise<Response> { }
|
|
99
|
+
|
|
100
|
+
// AFTER: New default with explicit legacy option
|
|
101
|
+
const LEGACY_TIMEOUT = 5000;
|
|
102
|
+
const NEW_TIMEOUT = 1000;
|
|
103
|
+
|
|
104
|
+
function fetch(
|
|
105
|
+
url: string,
|
|
106
|
+
timeout = NEW_TIMEOUT,
|
|
107
|
+
options?: { useLegacyTimeout?: boolean }
|
|
108
|
+
): Promise<Response> {
|
|
109
|
+
const actualTimeout = options?.useLegacyTimeout ? LEGACY_TIMEOUT : timeout;
|
|
110
|
+
// ...
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Existing code can opt-in to legacy behavior
|
|
114
|
+
fetch(url, undefined, { useLegacyTimeout: true });
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Safe API Changes
|
|
120
|
+
|
|
121
|
+
### Versioned Endpoints
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// Keep old endpoint, add new version
|
|
125
|
+
app.get('/api/v1/users/:id', getUserV1); // Unchanged
|
|
126
|
+
app.get('/api/v2/users/:id', getUserV2); // New version
|
|
127
|
+
|
|
128
|
+
// Document deprecation timeline
|
|
129
|
+
// v1 sunset: 2025-06-01
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Backward Compatible Response
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
// BEFORE response
|
|
136
|
+
{ id: '123', name: 'John' }
|
|
137
|
+
|
|
138
|
+
// AFTER: Add fields, don't remove
|
|
139
|
+
{ id: '123', name: 'John', displayName: 'John Doe', avatar: 'url' }
|
|
140
|
+
// name still present for backward compatibility
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Complete Migration Pattern
|
|
146
|
+
|
|
147
|
+
### Track Migration Progress
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
// migration-tracker.ts
|
|
151
|
+
const MIGRATION_STATUS = {
|
|
152
|
+
'src/api/users.ts': 'complete',
|
|
153
|
+
'src/api/orders.ts': 'complete',
|
|
154
|
+
'src/services/auth.ts': 'pending', // NOT YET MIGRATED
|
|
155
|
+
'src/utils/format.ts': 'pending', // NOT YET MIGRATED
|
|
156
|
+
} as const;
|
|
157
|
+
|
|
158
|
+
// Verify before merge
|
|
159
|
+
function assertMigrationComplete(): void {
|
|
160
|
+
const pending = Object.entries(MIGRATION_STATUS)
|
|
161
|
+
.filter(([_, status]) => status === 'pending');
|
|
162
|
+
|
|
163
|
+
if (pending.length > 0) {
|
|
164
|
+
throw new Error(`Migration incomplete: ${pending.map(([f]) => f).join(', ')}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Automated Consumer Updates
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
// codemod for migration
|
|
173
|
+
// jscodeshift transform
|
|
174
|
+
export default function transformer(file, api) {
|
|
175
|
+
const j = api.jscodeshift;
|
|
176
|
+
|
|
177
|
+
return j(file.source)
|
|
178
|
+
.find(j.CallExpression, { callee: { name: 'oldFunction' } })
|
|
179
|
+
.replaceWith(path => {
|
|
180
|
+
const [a, b] = path.node.arguments;
|
|
181
|
+
return j.callExpression(
|
|
182
|
+
j.identifier('newFunction'),
|
|
183
|
+
[j.objectExpression([
|
|
184
|
+
j.property('init', j.identifier('a'), a),
|
|
185
|
+
j.property('init', j.identifier('b'), b),
|
|
186
|
+
])]
|
|
187
|
+
);
|
|
188
|
+
})
|
|
189
|
+
.toSource();
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Event Handler Safety
|
|
196
|
+
|
|
197
|
+
### Preserve Side Effects
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
// When refactoring, preserve all side effects
|
|
201
|
+
function processOrder(order: Order): ProcessedOrder {
|
|
202
|
+
// PRESERVED: Logging for debugging
|
|
203
|
+
logger.info('Processing order', { orderId: order.id });
|
|
204
|
+
|
|
205
|
+
const result = doProcessing(order);
|
|
206
|
+
|
|
207
|
+
// PRESERVED: Event for downstream systems
|
|
208
|
+
events.emit('order.processed', result);
|
|
209
|
+
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Document Intentional Removal
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
// If side effect removal is intentional, document it
|
|
218
|
+
function processOrder(order: Order): ProcessedOrder {
|
|
219
|
+
// INTENTIONAL: Removed analytics event (tracked in ANALYTICS-123)
|
|
220
|
+
// Reason: Moving to dedicated analytics service
|
|
221
|
+
// Migration: Analytics service polls order database directly
|
|
222
|
+
|
|
223
|
+
const result = doProcessing(order);
|
|
224
|
+
return result;
|
|
225
|
+
}
|
|
226
|
+
```
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# Regression Violations Reference
|
|
2
|
+
|
|
3
|
+
Extended examples of regression patterns to detect during code review.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Lost Functionality Violations
|
|
8
|
+
|
|
9
|
+
### Removed Exports
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// BEFORE: module exports
|
|
13
|
+
export function createUser(data: UserData): User { }
|
|
14
|
+
export function deleteUser(id: string): void { }
|
|
15
|
+
export function updateUser(id: string, data: Partial<UserData>): User { }
|
|
16
|
+
export const USER_ROLES = ['admin', 'user', 'guest'] as const;
|
|
17
|
+
|
|
18
|
+
// AFTER: exports removed (REGRESSION!)
|
|
19
|
+
export function createUser(data: UserData): User { }
|
|
20
|
+
// deleteUser - REMOVED
|
|
21
|
+
// updateUser - REMOVED
|
|
22
|
+
// USER_ROLES - REMOVED
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Removed CLI Options
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
// BEFORE
|
|
29
|
+
program
|
|
30
|
+
.option('-v, --verbose', 'Verbose output')
|
|
31
|
+
.option('-q, --quiet', 'Quiet mode')
|
|
32
|
+
.option('-f, --force', 'Force operation')
|
|
33
|
+
.option('--dry-run', 'Preview changes');
|
|
34
|
+
|
|
35
|
+
// AFTER: options removed (REGRESSION!)
|
|
36
|
+
program
|
|
37
|
+
.option('-v, --verbose', 'Verbose output');
|
|
38
|
+
// --quiet, --force, --dry-run REMOVED
|
|
39
|
+
|
|
40
|
+
// Users with scripts using these flags will break!
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Removed API Endpoints
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
// BEFORE
|
|
47
|
+
app.get('/api/users', listUsers);
|
|
48
|
+
app.get('/api/users/:id', getUser);
|
|
49
|
+
app.post('/api/users', createUser);
|
|
50
|
+
app.delete('/api/users/:id', deleteUser); // REMOVED!
|
|
51
|
+
|
|
52
|
+
// AFTER
|
|
53
|
+
app.get('/api/users', listUsers);
|
|
54
|
+
app.get('/api/users/:id', getUser);
|
|
55
|
+
app.post('/api/users', createUser);
|
|
56
|
+
// DELETE endpoint removed - clients will get 404!
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Removed Event Handlers
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
// BEFORE
|
|
63
|
+
eventBus.on('user.created', sendWelcomeEmail);
|
|
64
|
+
eventBus.on('user.created', syncToAnalytics);
|
|
65
|
+
eventBus.on('order.completed', updateInventory);
|
|
66
|
+
|
|
67
|
+
// AFTER
|
|
68
|
+
eventBus.on('user.created', sendWelcomeEmail);
|
|
69
|
+
// syncToAnalytics handler REMOVED - analytics will be incomplete!
|
|
70
|
+
// updateInventory handler REMOVED - inventory won't update!
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Broken Behavior Violations
|
|
76
|
+
|
|
77
|
+
### Changed Return Types
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
// BEFORE
|
|
81
|
+
async function getUser(id: string): Promise<User> {
|
|
82
|
+
return user;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// AFTER: Return type changed (BREAKING!)
|
|
86
|
+
async function getUser(id: string): Promise<User | null> {
|
|
87
|
+
return user ?? null;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// All callers assuming non-null will break:
|
|
91
|
+
const user = await getUser(id);
|
|
92
|
+
console.log(user.name); // Potential null dereference!
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Changed Side Effects
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
// BEFORE: Function logs and emits event
|
|
99
|
+
function processOrder(order: Order): ProcessedOrder {
|
|
100
|
+
logger.info('Processing order', { orderId: order.id });
|
|
101
|
+
const result = doProcessing(order);
|
|
102
|
+
events.emit('order.processed', result);
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// AFTER: Side effects removed (REGRESSION!)
|
|
107
|
+
function processOrder(order: Order): ProcessedOrder {
|
|
108
|
+
const result = doProcessing(order);
|
|
109
|
+
return result;
|
|
110
|
+
// No logging - harder to debug production issues!
|
|
111
|
+
// No event - downstream systems won't be notified!
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Changed Default Values
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
// BEFORE
|
|
119
|
+
interface Options {
|
|
120
|
+
timeout?: number; // default: 5000
|
|
121
|
+
retries?: number; // default: 3
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function fetch(url: string, options: Options = { timeout: 5000, retries: 3 }) { }
|
|
125
|
+
|
|
126
|
+
// AFTER: Defaults changed (REGRESSION!)
|
|
127
|
+
function fetch(url: string, options: Options = { timeout: 1000, retries: 1 }) { }
|
|
128
|
+
// Existing code relying on 5s timeout may start failing!
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Changed Error Handling
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
// BEFORE: Throws specific error
|
|
135
|
+
async function authenticate(credentials: Credentials): Promise<User> {
|
|
136
|
+
if (!valid) throw new AuthenticationError('Invalid credentials');
|
|
137
|
+
return user;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// AFTER: Returns null instead (BREAKING!)
|
|
141
|
+
async function authenticate(credentials: Credentials): Promise<User | null> {
|
|
142
|
+
if (!valid) return null; // Callers catching AuthenticationError will miss this!
|
|
143
|
+
return user;
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Intent Mismatch Violations
|
|
150
|
+
|
|
151
|
+
### Commit Says X, Code Does Y
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
// Commit message: "Add retry logic to API calls"
|
|
155
|
+
|
|
156
|
+
// ACTUAL CODE: No retry logic!
|
|
157
|
+
async function fetchData(): Promise<Data> {
|
|
158
|
+
const response = await api.get('/data');
|
|
159
|
+
return response.data;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Expected: Retry on failure
|
|
163
|
+
// Reality: No retry implemented
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Partial Implementation
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
// Commit message: "Implement user preferences"
|
|
170
|
+
|
|
171
|
+
// ACTUAL CODE: Only partial implementation
|
|
172
|
+
interface UserPreferences {
|
|
173
|
+
theme: 'light' | 'dark';
|
|
174
|
+
language: string;
|
|
175
|
+
notifications: NotificationSettings; // Not implemented!
|
|
176
|
+
privacy: PrivacySettings; // Not implemented!
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function updatePreferences(prefs: Partial<UserPreferences>) {
|
|
180
|
+
if (prefs.theme) user.theme = prefs.theme;
|
|
181
|
+
if (prefs.language) user.language = prefs.language;
|
|
182
|
+
// notifications and privacy not handled!
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Incomplete Migration Violations
|
|
189
|
+
|
|
190
|
+
### Partial Call Site Updates
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
// OLD API
|
|
194
|
+
function oldFunction(a: string, b: number): Result { }
|
|
195
|
+
|
|
196
|
+
// NEW API
|
|
197
|
+
function newFunction(params: { a: string; b: number }): Result { }
|
|
198
|
+
|
|
199
|
+
// PARTIALLY MIGRATED:
|
|
200
|
+
// file1.ts - Updated
|
|
201
|
+
const result = newFunction({ a: 'test', b: 42 });
|
|
202
|
+
|
|
203
|
+
// file2.ts - NOT updated (REGRESSION!)
|
|
204
|
+
const result = oldFunction('test', 42); // Still using old API!
|
|
205
|
+
|
|
206
|
+
// file3.ts - NOT updated (REGRESSION!)
|
|
207
|
+
const result = oldFunction('other', 100); // Still using old API!
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Consumer Model Mismatch
|
|
211
|
+
|
|
212
|
+
```typescript
|
|
213
|
+
// CHANGED: User model
|
|
214
|
+
interface User {
|
|
215
|
+
id: string;
|
|
216
|
+
email: string;
|
|
217
|
+
// name: string; // REMOVED
|
|
218
|
+
displayName: string; // ADDED (replacement)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// CONSUMER NOT UPDATED (REGRESSION!)
|
|
222
|
+
function formatUserGreeting(user: User): string {
|
|
223
|
+
return `Hello, ${user.name}!`; // TypeScript error: 'name' doesn't exist
|
|
224
|
+
}
|
|
225
|
+
```
|