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,221 @@
|
|
|
1
|
+
# Test Pattern Violations - Extended Examples
|
|
2
|
+
|
|
3
|
+
Reference examples for common test quality violations across both design and review contexts.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Complex Setup Violations
|
|
8
|
+
|
|
9
|
+
### Multi-Dependency Service Setup
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// VIOLATION: Complex setup indicates design problem
|
|
13
|
+
describe('UserService', () => {
|
|
14
|
+
let service: UserService;
|
|
15
|
+
let mockDb: MockDatabase;
|
|
16
|
+
let mockCache: MockCache;
|
|
17
|
+
let mockLogger: MockLogger;
|
|
18
|
+
let mockConfig: MockConfig;
|
|
19
|
+
|
|
20
|
+
beforeEach(async () => {
|
|
21
|
+
mockDb = new MockDatabase();
|
|
22
|
+
await mockDb.connect();
|
|
23
|
+
await mockDb.seed();
|
|
24
|
+
mockCache = new MockCache();
|
|
25
|
+
mockCache.clear();
|
|
26
|
+
mockLogger = new MockLogger();
|
|
27
|
+
mockConfig = new MockConfig();
|
|
28
|
+
mockConfig.set('env', 'test');
|
|
29
|
+
// ... 10+ more lines
|
|
30
|
+
service = new UserService(mockDb, mockCache, mockLogger, mockConfig);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('should create user', async () => {
|
|
34
|
+
const result = await service.createUser({ name: 'test' });
|
|
35
|
+
expect(result.ok).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Root Cause**: UserService has too many dependencies (6+ injected services)
|
|
41
|
+
|
|
42
|
+
**Solution**: Split into focused services with single responsibility
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Repetitive Boilerplate Violations
|
|
47
|
+
|
|
48
|
+
### Try/Catch Pattern Repetition
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// VIOLATION: Repetitive error handling indicates API problem
|
|
52
|
+
describe('API endpoints', () => {
|
|
53
|
+
it('should handle user creation error', async () => {
|
|
54
|
+
try {
|
|
55
|
+
await api.createUser(invalidData);
|
|
56
|
+
fail('Should have thrown');
|
|
57
|
+
} catch (error) {
|
|
58
|
+
expect(error.status).toBe(400);
|
|
59
|
+
expect(error.message).toContain('validation');
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// ... repeated pattern 10+ times
|
|
64
|
+
});
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Root Cause**: API throws exceptions instead of returning Results
|
|
68
|
+
|
|
69
|
+
**Solution**: Migrate API to Result pattern
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Difficult Mocking Violations
|
|
74
|
+
|
|
75
|
+
### Nested Mock Object Structures
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
// VIOLATION: Complex mocking indicates tight coupling
|
|
79
|
+
beforeEach(() => {
|
|
80
|
+
mockDb = {
|
|
81
|
+
transaction: jest.fn((callback) => callback(mockDb)),
|
|
82
|
+
orders: { create: jest.fn(), update: jest.fn(), findById: jest.fn() },
|
|
83
|
+
users: { findById: jest.fn(), update: jest.fn() },
|
|
84
|
+
inventory: { decrement: jest.fn(), check: jest.fn(), reserve: jest.fn() }
|
|
85
|
+
};
|
|
86
|
+
// 5+ more mock objects...
|
|
87
|
+
});
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Root Cause**: OrderProcessor directly depends on too many external systems
|
|
91
|
+
|
|
92
|
+
**Solution**: Separate pure business logic from I/O; use composition
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Implementation Testing Violations
|
|
97
|
+
|
|
98
|
+
### Spying on Private Methods
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
// VIOLATION: Testing implementation details
|
|
102
|
+
it('should call updateTotal after addItem', () => {
|
|
103
|
+
const cart = new ShoppingCart();
|
|
104
|
+
const spy = jest.spyOn(cart as any, 'updateTotal');
|
|
105
|
+
cart.addItem({ id: '1', price: 10 });
|
|
106
|
+
expect(spy).toHaveBeenCalled(); // Testing implementation!
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Root Cause**: Tests coupled to implementation details
|
|
111
|
+
|
|
112
|
+
**Solution**: Test observable behavior only
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Coverage Violations
|
|
117
|
+
|
|
118
|
+
### Missing Edge Cases
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
// INCOMPLETE TESTS
|
|
122
|
+
describe('divide', () => {
|
|
123
|
+
it('divides two numbers', () => {
|
|
124
|
+
expect(divide(10, 2)).toBe(5); // Happy path only
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// COMPLETE TESTS
|
|
129
|
+
describe('divide', () => {
|
|
130
|
+
it('divides two positive numbers', () => { expect(divide(10, 2)).toBe(5); });
|
|
131
|
+
it('handles division by zero', () => { expect(divide(10, 0)).toBe(Infinity); });
|
|
132
|
+
it('handles negative numbers', () => { expect(divide(-10, 2)).toBe(-5); });
|
|
133
|
+
it('handles decimal results', () => { expect(divide(10, 3)).toBeCloseTo(3.333, 2); });
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Unclear Test Names
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
// UNCLEAR: What does this test?
|
|
141
|
+
it('test1', () => { /* ... */ });
|
|
142
|
+
it('should work', () => { /* ... */ });
|
|
143
|
+
|
|
144
|
+
// CLEAR: Describes behavior
|
|
145
|
+
it('validates email format on creation', () => { /* ... */ });
|
|
146
|
+
it('rejects passwords shorter than 8 characters', () => { /* ... */ });
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Test Design Violations
|
|
152
|
+
|
|
153
|
+
### Slow Tests (Real Delays)
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
// SLOW: Real delays
|
|
157
|
+
const result = await fetchWithRetry(); // Waits real 1000ms
|
|
158
|
+
|
|
159
|
+
// FAST: Mock timers
|
|
160
|
+
jest.useFakeTimers();
|
|
161
|
+
const promise = fetchWithRetry();
|
|
162
|
+
jest.advanceTimersByTime(1000);
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Flaky Tests (Timing Dependencies)
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// FLAKY: Race condition
|
|
169
|
+
subscribe(callback);
|
|
170
|
+
emit('update', { value: 1 });
|
|
171
|
+
expect(callback).toHaveBeenCalled(); // Might not have fired yet
|
|
172
|
+
|
|
173
|
+
// STABLE: Explicit waiting
|
|
174
|
+
const received = new Promise(resolve => { subscribe(data => resolve(data)); });
|
|
175
|
+
emit('update', { value: 1 });
|
|
176
|
+
const data = await received;
|
|
177
|
+
expect(data.value).toBe(1);
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Over-Mocking
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
// OVER-MOCKED: Tests nothing real
|
|
184
|
+
const mockValidator = { validate: jest.fn().mockReturnValue(true) };
|
|
185
|
+
const mockHasher = { hash: jest.fn().mockReturnValue('hashed') };
|
|
186
|
+
const mockRepo = { create: jest.fn().mockResolvedValue({ id: '1' }) };
|
|
187
|
+
// What did we actually test? Just that mocks were called.
|
|
188
|
+
|
|
189
|
+
// BETTER: Use real implementations where possible
|
|
190
|
+
const repo = new InMemoryUserRepo();
|
|
191
|
+
const service = new UserService(new RealValidator(), new RealHasher(), repo);
|
|
192
|
+
const saved = await repo.findByEmail('test@test.com');
|
|
193
|
+
expect(await bcrypt.compare('password', saved.password)).toBe(true);
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Environment & Database Violations
|
|
199
|
+
|
|
200
|
+
### Environment Manipulation
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
// VIOLATION: Tests modifying environment
|
|
204
|
+
beforeEach(() => {
|
|
205
|
+
process.env = { ...process.env, DATABASE_URL: 'postgres://test', API_KEY: 'test-key' };
|
|
206
|
+
});
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Solution**: Inject configuration as a dependency
|
|
210
|
+
|
|
211
|
+
### Database State Dependencies
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
// VIOLATION: Tests depend on specific seeded data
|
|
215
|
+
beforeAll(async () => {
|
|
216
|
+
await db.users.insert([/* ... */]);
|
|
217
|
+
await db.orders.insert([/* ... */]);
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Solution**: Separate data access from business logic; test calculation separately
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: typescript
|
|
3
|
+
description: This skill should be used when the user works with TypeScript files (.ts/.tsx), asks about "generics", "type guards", "utility types", "strict typing", "discriminated unions", or discusses type safety and inference. Provides patterns for Result types, exhaustive checks, branded types, and type-safe API contracts.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
allowed-tools: Read, Grep, Glob
|
|
6
|
+
activation:
|
|
7
|
+
file-patterns:
|
|
8
|
+
- "**/*.ts"
|
|
9
|
+
- "**/*.tsx"
|
|
10
|
+
exclude:
|
|
11
|
+
- "node_modules/**"
|
|
12
|
+
- "**/*.d.ts"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# TypeScript Patterns
|
|
16
|
+
|
|
17
|
+
Reference for TypeScript-specific patterns, type safety, and idioms.
|
|
18
|
+
|
|
19
|
+
## Iron Law
|
|
20
|
+
|
|
21
|
+
> **UNKNOWN OVER ANY**
|
|
22
|
+
>
|
|
23
|
+
> Never use `any`. Use `unknown` with type guards instead. `any` disables TypeScript's
|
|
24
|
+
> entire value proposition. If you need flexibility, use generics. If you need to handle
|
|
25
|
+
> arbitrary data, use `unknown` and validate. `any` is giving up.
|
|
26
|
+
|
|
27
|
+
## When This Skill Activates
|
|
28
|
+
|
|
29
|
+
- Working with TypeScript codebases
|
|
30
|
+
- Designing type-safe APIs
|
|
31
|
+
- Using generics and utility types
|
|
32
|
+
- Creating type guards
|
|
33
|
+
- Handling strict mode requirements
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Type Safety Fundamentals
|
|
38
|
+
|
|
39
|
+
### Prefer Unknown Over Any
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
// BAD: function parse(json: string): any { return JSON.parse(json); }
|
|
43
|
+
|
|
44
|
+
// GOOD: unknown requires type checking
|
|
45
|
+
function parse(json: string): unknown { return JSON.parse(json); }
|
|
46
|
+
if (isUser(data)) console.log(data.name); // Type-safe after guard
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Strict Null Checks
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
// BAD: function getName(user: User | null): string { return user.name; }
|
|
53
|
+
// GOOD: function getName(user: User | null): string { return user?.name ?? 'Anonymous'; }
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Exhaustive Checks
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
type Status = 'pending' | 'running' | 'completed' | 'failed';
|
|
60
|
+
function handleStatus(status: Status): string {
|
|
61
|
+
switch (status) {
|
|
62
|
+
case 'pending': return 'Waiting...';
|
|
63
|
+
case 'running': return 'In progress...';
|
|
64
|
+
case 'completed': return 'Done!';
|
|
65
|
+
case 'failed': return 'Error occurred';
|
|
66
|
+
default:
|
|
67
|
+
const _exhaustive: never = status;
|
|
68
|
+
throw new Error(`Unhandled: ${_exhaustive}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Generic Patterns
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
// Basic generic function
|
|
79
|
+
function first<T>(items: T[]): T | undefined { return items[0]; }
|
|
80
|
+
|
|
81
|
+
// With constraints
|
|
82
|
+
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; }
|
|
83
|
+
|
|
84
|
+
// Generic interface
|
|
85
|
+
interface Repository<T, ID = string> {
|
|
86
|
+
findById(id: ID): Promise<T | null>;
|
|
87
|
+
save(entity: T): Promise<T>;
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Utility Types
|
|
94
|
+
|
|
95
|
+
| Type | Usage |
|
|
96
|
+
|------|-------|
|
|
97
|
+
| `Partial<T>` | All properties optional |
|
|
98
|
+
| `Required<T>` | All properties required |
|
|
99
|
+
| `Pick<T, K>` | Select specific properties |
|
|
100
|
+
| `Omit<T, K>` | Exclude properties |
|
|
101
|
+
| `Record<K, V>` | Object with key/value types |
|
|
102
|
+
| `Readonly<T>` | Immutable properties |
|
|
103
|
+
| `NonNullable<T>` | Remove null/undefined |
|
|
104
|
+
| `ReturnType<F>` | Function return type |
|
|
105
|
+
| `Parameters<F>` | Function parameter types |
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Type Guards
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
// typeof guard
|
|
113
|
+
function process(value: string | number): string {
|
|
114
|
+
if (typeof value === 'string') return value.toUpperCase();
|
|
115
|
+
return value.toFixed(2);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Custom type guard
|
|
119
|
+
interface Admin { type: 'admin'; permissions: string[]; }
|
|
120
|
+
interface User { type: 'user'; }
|
|
121
|
+
type Person = User | Admin;
|
|
122
|
+
|
|
123
|
+
function isAdmin(person: Person): person is Admin {
|
|
124
|
+
return person.type === 'admin';
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Discriminated Unions
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
type Result<T, E> =
|
|
134
|
+
| { ok: true; value: T }
|
|
135
|
+
| { ok: false; error: E };
|
|
136
|
+
|
|
137
|
+
function handleResult<T>(result: Result<T, Error>): T {
|
|
138
|
+
if (result.ok) return result.value;
|
|
139
|
+
throw result.error;
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Anti-Patterns
|
|
146
|
+
|
|
147
|
+
| Pattern | Bad | Good |
|
|
148
|
+
|---------|-----|------|
|
|
149
|
+
| Using `any` | `data: any` | `data: unknown` or generics |
|
|
150
|
+
| Unsafe assertion | `data as User` | Type guard: `if (isUser(data))` |
|
|
151
|
+
| Non-null abuse | `user!.name!` | `user?.name` with check |
|
|
152
|
+
| Unsafe index | `obj[key]` | `obj[key as keyof typeof obj]` |
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Extended References
|
|
157
|
+
|
|
158
|
+
For additional patterns and examples:
|
|
159
|
+
- `references/patterns.md` - Extended TypeScript patterns
|
|
160
|
+
- `references/utility-types.md` - Custom utility type examples
|
|
161
|
+
- `references/type-guards.md` - Advanced type guard patterns
|
|
162
|
+
- `references/async.md` - Async TypeScript patterns
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Checklist
|
|
167
|
+
|
|
168
|
+
- [ ] No `any` types (use `unknown` or generics)
|
|
169
|
+
- [ ] All null/undefined handled explicitly
|
|
170
|
+
- [ ] Discriminated unions for state/variants
|
|
171
|
+
- [ ] Type guards for runtime type checking
|
|
172
|
+
- [ ] Exhaustive switch statements
|
|
173
|
+
- [ ] Proper generic constraints
|
|
174
|
+
- [ ] Type-only imports for types
|
|
175
|
+
- [ ] Readonly for immutable data
|
|
176
|
+
- [ ] Strict tsconfig options enabled
|