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,419 @@
|
|
|
1
|
+
# Accessibility Violations
|
|
2
|
+
|
|
3
|
+
Extended violation patterns for accessibility reviews. Reference from main SKILL.md.
|
|
4
|
+
|
|
5
|
+
## Keyboard Navigation Violations
|
|
6
|
+
|
|
7
|
+
### No Keyboard Access
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
// VIOLATION: onClick without keyboard equivalent
|
|
11
|
+
<div onClick={handleClick} className="card">
|
|
12
|
+
Click me
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
// VIOLATION: Custom element not focusable
|
|
16
|
+
<span className="link" onClick={() => navigate('/page')}>
|
|
17
|
+
Go to page
|
|
18
|
+
</span>
|
|
19
|
+
|
|
20
|
+
// VIOLATION: Drag-only interaction
|
|
21
|
+
<div
|
|
22
|
+
draggable
|
|
23
|
+
onDragStart={handleDrag}
|
|
24
|
+
onDragEnd={handleDrop}
|
|
25
|
+
>
|
|
26
|
+
Drag me (no keyboard alternative)
|
|
27
|
+
</div>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Missing Focus Management
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
// VIOLATION: Modal doesn't trap focus
|
|
34
|
+
function Modal({ isOpen, children }) {
|
|
35
|
+
return isOpen ? (
|
|
36
|
+
<div className="modal-overlay">
|
|
37
|
+
<div className="modal-content">
|
|
38
|
+
{children}
|
|
39
|
+
<button onClick={onClose}>Close</button>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
) : null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// VIOLATION: Dropdown doesn't return focus on close
|
|
46
|
+
function Dropdown() {
|
|
47
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<div>
|
|
51
|
+
<button onClick={() => setIsOpen(true)}>Open</button>
|
|
52
|
+
{isOpen && (
|
|
53
|
+
<ul>
|
|
54
|
+
<li onClick={() => setIsOpen(false)}>Option 1</li>
|
|
55
|
+
{/* Focus lost when dropdown closes */}
|
|
56
|
+
</ul>
|
|
57
|
+
)}
|
|
58
|
+
</div>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Poor Focus Visibility
|
|
64
|
+
|
|
65
|
+
```css
|
|
66
|
+
/* VIOLATION: Focus removed entirely */
|
|
67
|
+
*:focus {
|
|
68
|
+
outline: none;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* VIOLATION: Focus invisible on dark backgrounds */
|
|
72
|
+
button:focus {
|
|
73
|
+
outline: 1px solid #333;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* VIOLATION: Focus style same as hover */
|
|
77
|
+
button:hover,
|
|
78
|
+
button:focus {
|
|
79
|
+
background: #eee;
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Illogical Tab Order
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
// VIOLATION: tabIndex breaks natural order
|
|
87
|
+
<div>
|
|
88
|
+
<input tabIndex={3} placeholder="Third" />
|
|
89
|
+
<input tabIndex={1} placeholder="First" />
|
|
90
|
+
<input tabIndex={2} placeholder="Second" />
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
// VIOLATION: Positive tabIndex on many elements
|
|
94
|
+
<nav>
|
|
95
|
+
<a href="/" tabIndex={1}>Home</a>
|
|
96
|
+
<a href="/about" tabIndex={2}>About</a>
|
|
97
|
+
<a href="/contact" tabIndex={3}>Contact</a>
|
|
98
|
+
</nav>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## ARIA Violations
|
|
104
|
+
|
|
105
|
+
### Missing Labels
|
|
106
|
+
|
|
107
|
+
```tsx
|
|
108
|
+
// VIOLATION: Icon button without accessible name
|
|
109
|
+
<button onClick={handleClose}>
|
|
110
|
+
<CloseIcon />
|
|
111
|
+
</button>
|
|
112
|
+
|
|
113
|
+
// VIOLATION: Input without label
|
|
114
|
+
<input type="text" placeholder="Search" />
|
|
115
|
+
|
|
116
|
+
// VIOLATION: Image without alt
|
|
117
|
+
<img src="/logo.png" />
|
|
118
|
+
|
|
119
|
+
// VIOLATION: Link without text
|
|
120
|
+
<a href="/profile">
|
|
121
|
+
<Avatar src={user.avatar} />
|
|
122
|
+
</a>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Incorrect ARIA Usage
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
// VIOLATION: role="button" on already-button element
|
|
129
|
+
<button role="button" onClick={handleClick}>Submit</button>
|
|
130
|
+
|
|
131
|
+
// VIOLATION: aria-hidden on focusable element
|
|
132
|
+
<button aria-hidden="true" onClick={handleClick}>
|
|
133
|
+
Hidden but focusable
|
|
134
|
+
</button>
|
|
135
|
+
|
|
136
|
+
// VIOLATION: Missing required ARIA attributes
|
|
137
|
+
<div role="slider">
|
|
138
|
+
{/* Missing aria-valuenow, aria-valuemin, aria-valuemax */}
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
// VIOLATION: aria-label duplicating visible text
|
|
142
|
+
<button aria-label="Submit form">Submit form</button>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Overuse of ARIA
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
// VIOLATION: ARIA where semantic HTML suffices
|
|
149
|
+
<div role="navigation" aria-label="Main navigation">
|
|
150
|
+
<div role="list">
|
|
151
|
+
<div role="listitem">
|
|
152
|
+
<div role="link" onClick={() => navigate('/')}>Home</div>
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
// Should be:
|
|
158
|
+
<nav aria-label="Main">
|
|
159
|
+
<ul>
|
|
160
|
+
<li><a href="/">Home</a></li>
|
|
161
|
+
</ul>
|
|
162
|
+
</nav>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Color and Contrast Violations
|
|
168
|
+
|
|
169
|
+
### Insufficient Contrast
|
|
170
|
+
|
|
171
|
+
```css
|
|
172
|
+
/* VIOLATION: Light gray on white (1.5:1 ratio) */
|
|
173
|
+
.muted-text {
|
|
174
|
+
color: #aaa;
|
|
175
|
+
background: #fff;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/* VIOLATION: Placeholder text too light */
|
|
179
|
+
input::placeholder {
|
|
180
|
+
color: #ccc;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* VIOLATION: Disabled state invisible */
|
|
184
|
+
button:disabled {
|
|
185
|
+
color: #eee;
|
|
186
|
+
background: #f5f5f5;
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Color-Only Information
|
|
191
|
+
|
|
192
|
+
```tsx
|
|
193
|
+
// VIOLATION: Status only indicated by color
|
|
194
|
+
<span style={{ color: status === 'error' ? 'red' : 'green' }}>
|
|
195
|
+
{status}
|
|
196
|
+
</span>
|
|
197
|
+
|
|
198
|
+
// VIOLATION: Required fields only marked red
|
|
199
|
+
<label style={{ color: required ? 'red' : 'inherit' }}>
|
|
200
|
+
{label}
|
|
201
|
+
</label>
|
|
202
|
+
|
|
203
|
+
// VIOLATION: Chart using only color to differentiate data
|
|
204
|
+
<LineChart>
|
|
205
|
+
<Line stroke="red" data={series1} />
|
|
206
|
+
<Line stroke="blue" data={series2} />
|
|
207
|
+
{/* No pattern, icon, or label differentiation */}
|
|
208
|
+
</LineChart>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Form Violations
|
|
214
|
+
|
|
215
|
+
### Missing Error Association
|
|
216
|
+
|
|
217
|
+
```tsx
|
|
218
|
+
// VIOLATION: Error not associated with input
|
|
219
|
+
<div>
|
|
220
|
+
<input id="email" type="email" />
|
|
221
|
+
{error && <span className="error">{error}</span>}
|
|
222
|
+
</div>
|
|
223
|
+
|
|
224
|
+
// VIOLATION: Error not announced to screen readers
|
|
225
|
+
<div>
|
|
226
|
+
<input aria-invalid={!!error} />
|
|
227
|
+
{error && <div className="error-message">{error}</div>}
|
|
228
|
+
</div>
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Placeholder as Label
|
|
232
|
+
|
|
233
|
+
```tsx
|
|
234
|
+
// VIOLATION: Placeholder disappears, no persistent label
|
|
235
|
+
<input placeholder="Email address" />
|
|
236
|
+
|
|
237
|
+
// VIOLATION: Floating label without visible label initially
|
|
238
|
+
function FloatingInput({ label }) {
|
|
239
|
+
const [value, setValue] = useState('');
|
|
240
|
+
return (
|
|
241
|
+
<div>
|
|
242
|
+
<input
|
|
243
|
+
value={value}
|
|
244
|
+
onChange={(e) => setValue(e.target.value)}
|
|
245
|
+
/>
|
|
246
|
+
<label className={value ? 'floating' : 'hidden'}>{label}</label>
|
|
247
|
+
</div>
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Form Not Keyboard Navigable
|
|
253
|
+
|
|
254
|
+
```tsx
|
|
255
|
+
// VIOLATION: Custom select not keyboard accessible
|
|
256
|
+
function CustomSelect({ options, value, onChange }) {
|
|
257
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
258
|
+
|
|
259
|
+
return (
|
|
260
|
+
<div className="select" onClick={() => setIsOpen(!isOpen)}>
|
|
261
|
+
<span>{value}</span>
|
|
262
|
+
{isOpen && (
|
|
263
|
+
<ul className="options">
|
|
264
|
+
{options.map(opt => (
|
|
265
|
+
<li onClick={() => onChange(opt)}>{opt}</li>
|
|
266
|
+
))}
|
|
267
|
+
</ul>
|
|
268
|
+
)}
|
|
269
|
+
</div>
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Motion and Animation Violations
|
|
277
|
+
|
|
278
|
+
### No Reduced Motion Support
|
|
279
|
+
|
|
280
|
+
```css
|
|
281
|
+
/* VIOLATION: Animation ignores user preference */
|
|
282
|
+
.hero {
|
|
283
|
+
animation: slideIn 1s ease-in-out;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
@keyframes slideIn {
|
|
287
|
+
from { transform: translateY(100%); }
|
|
288
|
+
to { transform: translateY(0); }
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Autoplay Without Pause
|
|
293
|
+
|
|
294
|
+
```tsx
|
|
295
|
+
// VIOLATION: Video autoplays without pause control
|
|
296
|
+
<video autoPlay loop muted>
|
|
297
|
+
<source src="/background.mp4" />
|
|
298
|
+
</video>
|
|
299
|
+
|
|
300
|
+
// VIOLATION: Carousel auto-advances without pause
|
|
301
|
+
function Carousel({ slides }) {
|
|
302
|
+
useEffect(() => {
|
|
303
|
+
const interval = setInterval(nextSlide, 3000);
|
|
304
|
+
return () => clearInterval(interval);
|
|
305
|
+
}, []);
|
|
306
|
+
// No pause on hover or focus
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Flashing Content
|
|
311
|
+
|
|
312
|
+
```css
|
|
313
|
+
/* VIOLATION: Flash rate > 3 per second */
|
|
314
|
+
@keyframes flash {
|
|
315
|
+
0%, 100% { opacity: 1; }
|
|
316
|
+
50% { opacity: 0; }
|
|
317
|
+
}
|
|
318
|
+
.alert {
|
|
319
|
+
animation: flash 0.2s infinite;
|
|
320
|
+
}
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## Touch Target Violations
|
|
326
|
+
|
|
327
|
+
### Small Touch Targets
|
|
328
|
+
|
|
329
|
+
```css
|
|
330
|
+
/* VIOLATION: Icon buttons too small */
|
|
331
|
+
.icon-btn {
|
|
332
|
+
width: 24px;
|
|
333
|
+
height: 24px;
|
|
334
|
+
padding: 4px;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/* VIOLATION: Inline links with no padding */
|
|
338
|
+
.inline-link {
|
|
339
|
+
/* Natural text height only */
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/* VIOLATION: Close button in corner */
|
|
343
|
+
.modal-close {
|
|
344
|
+
position: absolute;
|
|
345
|
+
top: 4px;
|
|
346
|
+
right: 4px;
|
|
347
|
+
width: 16px;
|
|
348
|
+
height: 16px;
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### Targets Too Close Together
|
|
353
|
+
|
|
354
|
+
```tsx
|
|
355
|
+
// VIOLATION: Adjacent small targets
|
|
356
|
+
<div className="button-group">
|
|
357
|
+
<button className="icon-btn">A</button>
|
|
358
|
+
<button className="icon-btn">B</button>
|
|
359
|
+
<button className="icon-btn">C</button>
|
|
360
|
+
{/* No spacing between 24px buttons */}
|
|
361
|
+
</div>
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## Screen Reader Violations
|
|
367
|
+
|
|
368
|
+
### Hidden Important Content
|
|
369
|
+
|
|
370
|
+
```tsx
|
|
371
|
+
// VIOLATION: Visually hidden but important content
|
|
372
|
+
<span className="sr-only">
|
|
373
|
+
Loading... {/* Never announced because sr-only wrong implementation */}
|
|
374
|
+
</span>
|
|
375
|
+
|
|
376
|
+
// VIOLATION: aria-hidden on important element
|
|
377
|
+
<main aria-hidden="true">
|
|
378
|
+
{/* Page content hidden from AT */}
|
|
379
|
+
</main>
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### Meaningless Link Text
|
|
383
|
+
|
|
384
|
+
```tsx
|
|
385
|
+
// VIOLATION: Generic link text
|
|
386
|
+
<p>
|
|
387
|
+
To learn more about our services, <a href="/services">click here</a>.
|
|
388
|
+
</p>
|
|
389
|
+
|
|
390
|
+
// VIOLATION: Repeated "Read more" links
|
|
391
|
+
{posts.map(post => (
|
|
392
|
+
<article>
|
|
393
|
+
<h2>{post.title}</h2>
|
|
394
|
+
<p>{post.excerpt}</p>
|
|
395
|
+
<a href={post.url}>Read more</a>
|
|
396
|
+
</article>
|
|
397
|
+
))}
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
### Missing Page Structure
|
|
401
|
+
|
|
402
|
+
```tsx
|
|
403
|
+
// VIOLATION: No landmark regions
|
|
404
|
+
function App() {
|
|
405
|
+
return (
|
|
406
|
+
<div>
|
|
407
|
+
<div className="header">...</div>
|
|
408
|
+
<div className="sidebar">...</div>
|
|
409
|
+
<div className="content">...</div>
|
|
410
|
+
<div className="footer">...</div>
|
|
411
|
+
</div>
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// VIOLATION: Skipped heading levels
|
|
416
|
+
<h1>Page Title</h1>
|
|
417
|
+
<h3>Section</h3> {/* h2 skipped */}
|
|
418
|
+
<h5>Subsection</h5> {/* h4 skipped */}
|
|
419
|
+
```
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: core-patterns
|
|
3
|
+
description: This skill should be used when the user asks to "handle errors", "inject dependencies", "return Result", "make it immutable", "compose with pipes", or implements business logic, error handling, or service composition. Provides Result type patterns, dependency injection, immutability by default, pipe composition, and structured logging for robust application architecture.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
allowed-tools: Read, Grep, Glob, AskUserQuestion
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Core Engineering Patterns
|
|
9
|
+
|
|
10
|
+
The canonical source of architectural patterns and principles for consistent, high-quality code.
|
|
11
|
+
|
|
12
|
+
## Iron Law
|
|
13
|
+
|
|
14
|
+
> **NEVER THROW IN BUSINESS LOGIC**
|
|
15
|
+
>
|
|
16
|
+
> All operations that can fail MUST return Result types. Exceptions are allowed
|
|
17
|
+
> ONLY at system boundaries (API handlers, database adapters). Any `throw` statement
|
|
18
|
+
> in business logic is a violation. No exceptions.
|
|
19
|
+
|
|
20
|
+
## Philosophy
|
|
21
|
+
|
|
22
|
+
1. **Type Safety First** - Strict type checking, avoid dynamic types
|
|
23
|
+
2. **Functional Core, Imperative Shell** - Business logic pure, side effects isolated
|
|
24
|
+
3. **Explicit Error Handling** - Result types instead of exceptions
|
|
25
|
+
4. **Immutability by Default** - Return new objects, don't mutate
|
|
26
|
+
5. **Dependency Injection** - Inject dependencies for testability
|
|
27
|
+
6. **Test Behaviors** - Simple tests that validate behavior, not implementation
|
|
28
|
+
7. **No Fake Solutions** - Be honest about limitations and workarounds
|
|
29
|
+
8. **Fix Root Causes** - Never work around bad architecture
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Pattern 1: Result Types
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
type Result<T, E = Error> = { ok: true; value: T } | { ok: false; error: E };
|
|
37
|
+
|
|
38
|
+
function createUser(data: unknown): Result<User, ValidationError> {
|
|
39
|
+
if (!valid(data)) return Err({ type: 'ValidationFailed', details: validate(data).errors });
|
|
40
|
+
return Ok(buildUser(data));
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Pattern 2: Dependency Injection
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
class UserService {
|
|
48
|
+
constructor(private db: Database, private emailer: EmailService) {}
|
|
49
|
+
}
|
|
50
|
+
// Easy to test: new UserService(mockDb, mockEmailer)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Never: `private db = new Database()` - can't mock.
|
|
54
|
+
|
|
55
|
+
## Pattern 3: Immutability
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
function updateUser(user: User, changes: Partial<User>): User {
|
|
59
|
+
return { ...user, ...changes }; // New object, no mutation
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Never mutate inputs. Copy before `.sort()`.
|
|
64
|
+
|
|
65
|
+
## Pattern 4: Pure Functions
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
function calculateTotal(items: Item[], taxRate: number): number {
|
|
69
|
+
return items.reduce((sum, i) => sum + i.price, 0) * (1 + taxRate);
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
No side effects in pure functions.
|
|
74
|
+
|
|
75
|
+
## Pattern 5: Type Safety
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
type Status = 'pending' | 'completed' | 'failed';
|
|
79
|
+
function handleStatus(status: Status): string {
|
|
80
|
+
switch (status) {
|
|
81
|
+
case 'pending': return 'Waiting';
|
|
82
|
+
case 'completed': return 'Done';
|
|
83
|
+
case 'failed': return 'Error';
|
|
84
|
+
} // Exhaustive - no default needed
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Pattern 6: Error Type Design
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
type UserError =
|
|
92
|
+
| { type: 'NotFound'; userId: string }
|
|
93
|
+
| { type: 'ValidationFailed'; field: string; message: string };
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Pattern 7: Resource Cleanup
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
const handle = await fs.open(path);
|
|
100
|
+
try {
|
|
101
|
+
return Ok(parse(await handle.readFile()));
|
|
102
|
+
} finally {
|
|
103
|
+
await handle.close();
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Pattern 8: Architecture Documentation
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
// ARCHITECTURE: Repository returns domain objects only
|
|
111
|
+
// ARCHITECTURE EXCEPTION: Direct DB for health check - must work if service layer down
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Pattern 9: Naming Conventions
|
|
115
|
+
|
|
116
|
+
- **Types/Classes**: PascalCase (`UserProfile`)
|
|
117
|
+
- **Functions/Variables**: camelCase (`calculateTotal`)
|
|
118
|
+
- **Constants**: SCREAMING_SNAKE_CASE (`MAX_RETRY`)
|
|
119
|
+
|
|
120
|
+
## Pattern 10: Performance Awareness
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
const customerMap = new Map(customers.map(c => [c.id, c])); // O(1) vs O(n)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Consistency Rules
|
|
129
|
+
|
|
130
|
+
- Result types: if one method returns Result, ALL must
|
|
131
|
+
- DI: apply consistently throughout
|
|
132
|
+
- Async: single pattern (don't mix callbacks/promises)
|
|
133
|
+
|
|
134
|
+
## Anti-Patterns
|
|
135
|
+
|
|
136
|
+
| Pattern | Description |
|
|
137
|
+
|---------|-------------|
|
|
138
|
+
| Fake Solutions | Hardcoded responses simulating functionality |
|
|
139
|
+
| Silent Failures | Catch blocks that swallow errors |
|
|
140
|
+
| Magic Values | Unlabeled constants with special meaning |
|
|
141
|
+
| Deceptive Code | Functions that pretend to work (e.g., `return true` with no logic) |
|
|
142
|
+
|
|
143
|
+
### Workaround Labeling (Required)
|
|
144
|
+
|
|
145
|
+
All workarounds, hacks, and temporary solutions MUST be labeled:
|
|
146
|
+
|
|
147
|
+
| Label | Use When |
|
|
148
|
+
|-------|----------|
|
|
149
|
+
| `HACK:` | Workaround for specific problem |
|
|
150
|
+
| `MOCK:` | Fake data for testing/development |
|
|
151
|
+
| `TODO:` | Work that needs to be done |
|
|
152
|
+
| `TEMPORARY:` | Short-term solution with deadline |
|
|
153
|
+
| `NOT-PRODUCTION:` | Code that should never ship |
|
|
154
|
+
| `ARCHITECTURE EXCEPTION:` | Violates pattern with justification |
|
|
155
|
+
|
|
156
|
+
Unlabeled workarounds, empty catch blocks, and early returns without rationale are violations. See `references/code-smell-violations.md` for extended examples.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Extended References
|
|
161
|
+
|
|
162
|
+
See `references/` for: violations.md, patterns.md, detection.md, checklist.md
|