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.
Files changed (414) hide show
  1. package/CHANGELOG.md +197 -29
  2. package/LICENSE +1 -1
  3. package/README.md +185 -309
  4. package/dist/cli.js +7 -1
  5. package/dist/commands/ambient.d.ts +18 -0
  6. package/dist/commands/ambient.js +136 -0
  7. package/dist/commands/init.d.ts +23 -0
  8. package/dist/commands/init.js +393 -571
  9. package/dist/commands/list.d.ts +3 -0
  10. package/dist/commands/list.js +20 -0
  11. package/dist/commands/memory.d.ts +22 -0
  12. package/dist/commands/memory.js +175 -0
  13. package/dist/commands/uninstall.d.ts +10 -0
  14. package/dist/commands/uninstall.js +418 -78
  15. package/dist/plugins.d.ts +46 -0
  16. package/dist/plugins.js +169 -0
  17. package/dist/utils/cli.d.ts +5 -0
  18. package/dist/utils/cli.js +14 -0
  19. package/dist/utils/installer.d.ts +41 -0
  20. package/dist/utils/installer.js +177 -0
  21. package/dist/utils/paths.d.ts +10 -0
  22. package/dist/utils/paths.js +23 -3
  23. package/dist/utils/post-install.d.ts +80 -0
  24. package/dist/utils/post-install.js +508 -0
  25. package/dist/utils/safe-delete-install.d.ts +29 -0
  26. package/dist/utils/safe-delete-install.js +191 -0
  27. package/dist/utils/safe-delete.d.ts +12 -0
  28. package/dist/utils/safe-delete.js +83 -0
  29. package/package.json +18 -8
  30. package/plugins/devflow-ambient/.claude-plugin/plugin.json +7 -0
  31. package/plugins/devflow-ambient/README.md +49 -0
  32. package/plugins/devflow-ambient/commands/ambient.md +110 -0
  33. package/plugins/devflow-ambient/skills/ambient-router/SKILL.md +89 -0
  34. package/plugins/devflow-ambient/skills/ambient-router/references/skill-catalog.md +64 -0
  35. package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +7 -0
  36. package/plugins/devflow-audit-claude/README.md +46 -0
  37. package/plugins/devflow-audit-claude/agents/claude-md-auditor.md +134 -0
  38. package/plugins/devflow-audit-claude/commands/audit-claude.md +85 -0
  39. package/plugins/devflow-code-review/.claude-plugin/plugin.json +31 -0
  40. package/plugins/devflow-code-review/README.md +73 -0
  41. package/plugins/devflow-code-review/agents/git.md +272 -0
  42. package/plugins/devflow-code-review/agents/reviewer.md +119 -0
  43. package/plugins/devflow-code-review/agents/synthesizer.md +204 -0
  44. package/plugins/devflow-code-review/commands/code-review-teams.md +262 -0
  45. package/plugins/devflow-code-review/commands/code-review.md +141 -0
  46. package/plugins/devflow-code-review/skills/accessibility/SKILL.md +229 -0
  47. package/plugins/devflow-code-review/skills/accessibility/references/detection.md +171 -0
  48. package/plugins/devflow-code-review/skills/accessibility/references/patterns.md +670 -0
  49. package/plugins/devflow-code-review/skills/accessibility/references/violations.md +419 -0
  50. package/plugins/devflow-code-review/skills/agent-teams/SKILL.md +124 -0
  51. package/plugins/devflow-code-review/skills/agent-teams/references/cleanup.md +104 -0
  52. package/plugins/devflow-code-review/skills/agent-teams/references/communication.md +122 -0
  53. package/plugins/devflow-code-review/skills/agent-teams/references/team-patterns.md +217 -0
  54. package/plugins/devflow-code-review/skills/architecture-patterns/SKILL.md +153 -0
  55. package/plugins/devflow-code-review/skills/architecture-patterns/references/detection.md +337 -0
  56. package/plugins/devflow-code-review/skills/architecture-patterns/references/patterns.md +873 -0
  57. package/plugins/devflow-code-review/skills/architecture-patterns/references/violations.md +575 -0
  58. package/plugins/devflow-code-review/skills/complexity-patterns/SKILL.md +143 -0
  59. package/plugins/devflow-code-review/skills/complexity-patterns/references/detection.md +264 -0
  60. package/plugins/devflow-code-review/skills/complexity-patterns/references/patterns.md +487 -0
  61. package/plugins/devflow-code-review/skills/complexity-patterns/references/violations.md +361 -0
  62. package/plugins/devflow-code-review/skills/consistency-patterns/SKILL.md +140 -0
  63. package/plugins/devflow-code-review/skills/consistency-patterns/references/detection.md +207 -0
  64. package/plugins/devflow-code-review/skills/consistency-patterns/references/patterns.md +202 -0
  65. package/plugins/devflow-code-review/skills/consistency-patterns/references/violations.md +213 -0
  66. package/plugins/devflow-code-review/skills/database-patterns/SKILL.md +134 -0
  67. package/plugins/devflow-code-review/skills/database-patterns/references/detection.md +208 -0
  68. package/plugins/devflow-code-review/skills/database-patterns/references/patterns.md +394 -0
  69. package/plugins/devflow-code-review/skills/database-patterns/references/violations.md +332 -0
  70. package/plugins/devflow-code-review/skills/dependencies-patterns/SKILL.md +141 -0
  71. package/plugins/devflow-code-review/skills/dependencies-patterns/references/detection.md +181 -0
  72. package/plugins/devflow-code-review/skills/dependencies-patterns/references/patterns.md +225 -0
  73. package/plugins/devflow-code-review/skills/dependencies-patterns/references/violations.md +247 -0
  74. package/plugins/devflow-code-review/skills/documentation-patterns/SKILL.md +125 -0
  75. package/plugins/devflow-code-review/skills/documentation-patterns/references/detection.md +190 -0
  76. package/plugins/devflow-code-review/skills/documentation-patterns/references/patterns.md +189 -0
  77. package/plugins/devflow-code-review/skills/documentation-patterns/references/violations.md +163 -0
  78. package/plugins/devflow-code-review/skills/frontend-design/SKILL.md +254 -0
  79. package/plugins/devflow-code-review/skills/frontend-design/references/detection.md +184 -0
  80. package/plugins/devflow-code-review/skills/frontend-design/references/patterns.md +511 -0
  81. package/plugins/devflow-code-review/skills/frontend-design/references/violations.md +453 -0
  82. package/plugins/devflow-code-review/skills/performance-patterns/SKILL.md +154 -0
  83. package/plugins/devflow-code-review/skills/performance-patterns/references/detection.md +351 -0
  84. package/plugins/devflow-code-review/skills/performance-patterns/references/patterns.md +503 -0
  85. package/plugins/devflow-code-review/skills/performance-patterns/references/violations.md +354 -0
  86. package/plugins/devflow-code-review/skills/react/SKILL.md +276 -0
  87. package/plugins/devflow-code-review/skills/react/references/patterns.md +1331 -0
  88. package/plugins/devflow-code-review/skills/react/references/violations.md +565 -0
  89. package/plugins/devflow-code-review/skills/regression-patterns/SKILL.md +146 -0
  90. package/plugins/devflow-code-review/skills/regression-patterns/references/detection.md +237 -0
  91. package/plugins/devflow-code-review/skills/regression-patterns/references/patterns.md +226 -0
  92. package/plugins/devflow-code-review/skills/regression-patterns/references/violations.md +225 -0
  93. package/plugins/devflow-code-review/skills/review-methodology/SKILL.md +119 -0
  94. package/plugins/devflow-code-review/skills/review-methodology/references/patterns.md +186 -0
  95. package/plugins/devflow-code-review/skills/review-methodology/references/report-template.md +142 -0
  96. package/plugins/devflow-code-review/skills/review-methodology/references/violations.md +125 -0
  97. package/plugins/devflow-code-review/skills/security-patterns/SKILL.md +156 -0
  98. package/plugins/devflow-code-review/skills/security-patterns/references/detection.md +287 -0
  99. package/plugins/devflow-code-review/skills/security-patterns/references/patterns.md +507 -0
  100. package/plugins/devflow-code-review/skills/security-patterns/references/violations.md +237 -0
  101. package/plugins/devflow-code-review/skills/test-patterns/SKILL.md +183 -0
  102. package/plugins/devflow-code-review/skills/test-patterns/references/detection.md +149 -0
  103. package/plugins/devflow-code-review/skills/test-patterns/references/patterns.md +220 -0
  104. package/plugins/devflow-code-review/skills/test-patterns/references/report-template.md +108 -0
  105. package/plugins/devflow-code-review/skills/test-patterns/references/violations.md +221 -0
  106. package/plugins/devflow-core-skills/.claude-plugin/plugin.json +28 -0
  107. package/plugins/devflow-core-skills/README.md +50 -0
  108. package/plugins/devflow-core-skills/skills/accessibility/SKILL.md +229 -0
  109. package/plugins/devflow-core-skills/skills/accessibility/references/detection.md +171 -0
  110. package/plugins/devflow-core-skills/skills/accessibility/references/patterns.md +670 -0
  111. package/plugins/devflow-core-skills/skills/accessibility/references/violations.md +419 -0
  112. package/plugins/devflow-core-skills/skills/core-patterns/SKILL.md +162 -0
  113. package/plugins/devflow-core-skills/skills/core-patterns/references/checklist.md +276 -0
  114. package/plugins/devflow-core-skills/skills/core-patterns/references/code-smell-violations.md +144 -0
  115. package/plugins/devflow-core-skills/skills/core-patterns/references/detection.md +303 -0
  116. package/plugins/devflow-core-skills/skills/core-patterns/references/patterns.md +576 -0
  117. package/plugins/devflow-core-skills/skills/core-patterns/references/violations.md +369 -0
  118. package/plugins/devflow-core-skills/skills/docs-framework/SKILL.md +138 -0
  119. package/plugins/devflow-core-skills/skills/docs-framework/references/patterns.md +346 -0
  120. package/plugins/devflow-core-skills/skills/docs-framework/references/violations.md +221 -0
  121. package/plugins/devflow-core-skills/skills/frontend-design/SKILL.md +254 -0
  122. package/plugins/devflow-core-skills/skills/frontend-design/references/detection.md +184 -0
  123. package/plugins/devflow-core-skills/skills/frontend-design/references/patterns.md +511 -0
  124. package/plugins/devflow-core-skills/skills/frontend-design/references/violations.md +453 -0
  125. package/plugins/devflow-core-skills/skills/git-safety/SKILL.md +122 -0
  126. package/plugins/devflow-core-skills/skills/git-safety/references/detection.md +290 -0
  127. package/plugins/devflow-core-skills/skills/git-safety/references/patterns.md +289 -0
  128. package/plugins/devflow-core-skills/skills/git-safety/references/violations.md +18 -0
  129. package/plugins/devflow-core-skills/skills/git-workflow/SKILL.md +158 -0
  130. package/plugins/devflow-core-skills/skills/git-workflow/references/commit-patterns.md +115 -0
  131. package/plugins/devflow-core-skills/skills/git-workflow/references/commit-violations.md +77 -0
  132. package/plugins/devflow-core-skills/skills/git-workflow/references/pr-patterns.md +127 -0
  133. package/plugins/devflow-core-skills/skills/git-workflow/references/pr-violations.md +96 -0
  134. package/plugins/devflow-core-skills/skills/github-patterns/SKILL.md +153 -0
  135. package/plugins/devflow-core-skills/skills/github-patterns/references/patterns.md +572 -0
  136. package/plugins/devflow-core-skills/skills/github-patterns/references/violations.md +298 -0
  137. package/plugins/devflow-core-skills/skills/input-validation/SKILL.md +148 -0
  138. package/plugins/devflow-core-skills/skills/input-validation/references/detection.md +283 -0
  139. package/plugins/devflow-core-skills/skills/input-validation/references/patterns.md +361 -0
  140. package/plugins/devflow-core-skills/skills/input-validation/references/violations.md +224 -0
  141. package/plugins/devflow-core-skills/skills/react/SKILL.md +276 -0
  142. package/plugins/devflow-core-skills/skills/react/references/patterns.md +1331 -0
  143. package/plugins/devflow-core-skills/skills/react/references/violations.md +565 -0
  144. package/plugins/devflow-core-skills/skills/test-driven-development/SKILL.md +139 -0
  145. package/plugins/devflow-core-skills/skills/test-driven-development/references/rationalization-prevention.md +111 -0
  146. package/plugins/devflow-core-skills/skills/test-patterns/SKILL.md +183 -0
  147. package/plugins/devflow-core-skills/skills/test-patterns/references/detection.md +149 -0
  148. package/plugins/devflow-core-skills/skills/test-patterns/references/patterns.md +220 -0
  149. package/plugins/devflow-core-skills/skills/test-patterns/references/report-template.md +108 -0
  150. package/plugins/devflow-core-skills/skills/test-patterns/references/violations.md +221 -0
  151. package/plugins/devflow-core-skills/skills/typescript/SKILL.md +176 -0
  152. package/plugins/devflow-core-skills/skills/typescript/references/patterns.md +1105 -0
  153. package/plugins/devflow-core-skills/skills/typescript/references/violations.md +433 -0
  154. package/plugins/devflow-debug/.claude-plugin/plugin.json +18 -0
  155. package/plugins/devflow-debug/README.md +65 -0
  156. package/plugins/devflow-debug/agents/git.md +272 -0
  157. package/plugins/devflow-debug/commands/debug-teams.md +231 -0
  158. package/plugins/devflow-debug/commands/debug.md +160 -0
  159. package/plugins/devflow-debug/skills/agent-teams/SKILL.md +124 -0
  160. package/plugins/devflow-debug/skills/agent-teams/references/cleanup.md +104 -0
  161. package/plugins/devflow-debug/skills/agent-teams/references/communication.md +122 -0
  162. package/plugins/devflow-debug/skills/agent-teams/references/team-patterns.md +217 -0
  163. package/plugins/devflow-debug/skills/git-safety/SKILL.md +122 -0
  164. package/plugins/devflow-debug/skills/git-safety/references/detection.md +290 -0
  165. package/plugins/devflow-debug/skills/git-safety/references/patterns.md +289 -0
  166. package/plugins/devflow-debug/skills/git-safety/references/violations.md +18 -0
  167. package/plugins/devflow-implement/.claude-plugin/plugin.json +21 -0
  168. package/plugins/devflow-implement/README.md +71 -0
  169. package/plugins/devflow-implement/agents/coder.md +122 -0
  170. package/plugins/devflow-implement/agents/git.md +272 -0
  171. package/plugins/devflow-implement/agents/scrutinizer.md +80 -0
  172. package/plugins/devflow-implement/agents/shepherd.md +94 -0
  173. package/plugins/devflow-implement/agents/simplifier.md +62 -0
  174. package/plugins/devflow-implement/agents/skimmer.md +88 -0
  175. package/plugins/devflow-implement/agents/synthesizer.md +204 -0
  176. package/plugins/devflow-implement/agents/validator.md +86 -0
  177. package/plugins/devflow-implement/commands/implement-teams.md +608 -0
  178. package/plugins/devflow-implement/commands/implement.md +426 -0
  179. package/plugins/devflow-implement/skills/accessibility/SKILL.md +229 -0
  180. package/plugins/devflow-implement/skills/accessibility/references/detection.md +171 -0
  181. package/plugins/devflow-implement/skills/accessibility/references/patterns.md +670 -0
  182. package/plugins/devflow-implement/skills/accessibility/references/violations.md +419 -0
  183. package/plugins/devflow-implement/skills/agent-teams/SKILL.md +124 -0
  184. package/plugins/devflow-implement/skills/agent-teams/references/cleanup.md +104 -0
  185. package/plugins/devflow-implement/skills/agent-teams/references/communication.md +122 -0
  186. package/plugins/devflow-implement/skills/agent-teams/references/team-patterns.md +217 -0
  187. package/plugins/devflow-implement/skills/frontend-design/SKILL.md +254 -0
  188. package/plugins/devflow-implement/skills/frontend-design/references/detection.md +184 -0
  189. package/plugins/devflow-implement/skills/frontend-design/references/patterns.md +511 -0
  190. package/plugins/devflow-implement/skills/frontend-design/references/violations.md +453 -0
  191. package/plugins/devflow-implement/skills/implementation-patterns/SKILL.md +162 -0
  192. package/plugins/devflow-implement/skills/implementation-patterns/references/patterns.md +1063 -0
  193. package/plugins/devflow-implement/skills/implementation-patterns/references/violations.md +483 -0
  194. package/plugins/devflow-implement/skills/self-review/SKILL.md +149 -0
  195. package/plugins/devflow-implement/skills/self-review/references/patterns.md +405 -0
  196. package/plugins/devflow-implement/skills/self-review/references/report-template.md +253 -0
  197. package/plugins/devflow-implement/skills/self-review/references/violations.md +308 -0
  198. package/plugins/devflow-resolve/.claude-plugin/plugin.json +19 -0
  199. package/plugins/devflow-resolve/README.md +65 -0
  200. package/plugins/devflow-resolve/agents/git.md +272 -0
  201. package/plugins/devflow-resolve/agents/resolver.md +131 -0
  202. package/plugins/devflow-resolve/agents/simplifier.md +62 -0
  203. package/plugins/devflow-resolve/commands/resolve-teams.md +298 -0
  204. package/plugins/devflow-resolve/commands/resolve.md +237 -0
  205. package/plugins/devflow-resolve/skills/agent-teams/SKILL.md +124 -0
  206. package/plugins/devflow-resolve/skills/agent-teams/references/cleanup.md +104 -0
  207. package/plugins/devflow-resolve/skills/agent-teams/references/communication.md +122 -0
  208. package/plugins/devflow-resolve/skills/agent-teams/references/team-patterns.md +217 -0
  209. package/plugins/devflow-resolve/skills/implementation-patterns/SKILL.md +162 -0
  210. package/plugins/devflow-resolve/skills/implementation-patterns/references/patterns.md +1063 -0
  211. package/plugins/devflow-resolve/skills/implementation-patterns/references/violations.md +483 -0
  212. package/plugins/devflow-resolve/skills/security-patterns/SKILL.md +156 -0
  213. package/plugins/devflow-resolve/skills/security-patterns/references/detection.md +287 -0
  214. package/plugins/devflow-resolve/skills/security-patterns/references/patterns.md +507 -0
  215. package/plugins/devflow-resolve/skills/security-patterns/references/violations.md +237 -0
  216. package/plugins/devflow-self-review/.claude-plugin/plugin.json +7 -0
  217. package/plugins/devflow-self-review/README.md +38 -0
  218. package/plugins/devflow-self-review/agents/scrutinizer.md +80 -0
  219. package/plugins/devflow-self-review/agents/simplifier.md +62 -0
  220. package/plugins/devflow-self-review/agents/validator.md +86 -0
  221. package/plugins/devflow-self-review/commands/self-review.md +126 -0
  222. package/plugins/devflow-self-review/skills/core-patterns/SKILL.md +162 -0
  223. package/plugins/devflow-self-review/skills/core-patterns/references/checklist.md +276 -0
  224. package/plugins/devflow-self-review/skills/core-patterns/references/code-smell-violations.md +144 -0
  225. package/plugins/devflow-self-review/skills/core-patterns/references/detection.md +303 -0
  226. package/plugins/devflow-self-review/skills/core-patterns/references/patterns.md +576 -0
  227. package/plugins/devflow-self-review/skills/core-patterns/references/violations.md +369 -0
  228. package/plugins/devflow-self-review/skills/self-review/SKILL.md +149 -0
  229. package/plugins/devflow-self-review/skills/self-review/references/patterns.md +405 -0
  230. package/plugins/devflow-self-review/skills/self-review/references/report-template.md +253 -0
  231. package/plugins/devflow-self-review/skills/self-review/references/violations.md +308 -0
  232. package/plugins/devflow-specify/.claude-plugin/plugin.json +15 -0
  233. package/plugins/devflow-specify/README.md +46 -0
  234. package/plugins/devflow-specify/agents/skimmer.md +88 -0
  235. package/plugins/devflow-specify/agents/synthesizer.md +204 -0
  236. package/plugins/devflow-specify/commands/specify-teams.md +314 -0
  237. package/plugins/devflow-specify/commands/specify.md +179 -0
  238. package/plugins/devflow-specify/skills/agent-teams/SKILL.md +124 -0
  239. package/plugins/devflow-specify/skills/agent-teams/references/cleanup.md +104 -0
  240. package/plugins/devflow-specify/skills/agent-teams/references/communication.md +122 -0
  241. package/plugins/devflow-specify/skills/agent-teams/references/team-patterns.md +217 -0
  242. package/scripts/hooks/ambient-prompt.sh +48 -0
  243. package/scripts/hooks/background-memory-update.sh +208 -0
  244. package/scripts/hooks/ensure-memory-gitignore.sh +17 -0
  245. package/scripts/hooks/pre-compact-memory.sh +87 -0
  246. package/scripts/hooks/session-start-memory.sh +126 -0
  247. package/scripts/hooks/stop-update-memory.sh +85 -0
  248. package/shared/agents/coder.md +122 -0
  249. package/shared/agents/git.md +272 -0
  250. package/shared/agents/resolver.md +131 -0
  251. package/shared/agents/reviewer.md +119 -0
  252. package/shared/agents/scrutinizer.md +80 -0
  253. package/shared/agents/shepherd.md +94 -0
  254. package/shared/agents/simplifier.md +62 -0
  255. package/shared/agents/skimmer.md +88 -0
  256. package/shared/agents/synthesizer.md +204 -0
  257. package/shared/agents/validator.md +86 -0
  258. package/shared/skills/accessibility/SKILL.md +229 -0
  259. package/shared/skills/accessibility/references/detection.md +171 -0
  260. package/shared/skills/accessibility/references/patterns.md +670 -0
  261. package/shared/skills/accessibility/references/violations.md +419 -0
  262. package/shared/skills/agent-teams/SKILL.md +124 -0
  263. package/shared/skills/agent-teams/references/cleanup.md +104 -0
  264. package/shared/skills/agent-teams/references/communication.md +122 -0
  265. package/shared/skills/agent-teams/references/team-patterns.md +217 -0
  266. package/shared/skills/ambient-router/SKILL.md +89 -0
  267. package/shared/skills/ambient-router/references/skill-catalog.md +64 -0
  268. package/shared/skills/architecture-patterns/SKILL.md +153 -0
  269. package/shared/skills/architecture-patterns/references/detection.md +337 -0
  270. package/shared/skills/architecture-patterns/references/patterns.md +873 -0
  271. package/shared/skills/architecture-patterns/references/violations.md +575 -0
  272. package/shared/skills/complexity-patterns/SKILL.md +143 -0
  273. package/shared/skills/complexity-patterns/references/detection.md +264 -0
  274. package/shared/skills/complexity-patterns/references/patterns.md +487 -0
  275. package/shared/skills/complexity-patterns/references/violations.md +361 -0
  276. package/shared/skills/consistency-patterns/SKILL.md +140 -0
  277. package/shared/skills/consistency-patterns/references/detection.md +207 -0
  278. package/shared/skills/consistency-patterns/references/patterns.md +202 -0
  279. package/shared/skills/consistency-patterns/references/violations.md +213 -0
  280. package/shared/skills/core-patterns/SKILL.md +162 -0
  281. package/shared/skills/core-patterns/references/checklist.md +276 -0
  282. package/shared/skills/core-patterns/references/code-smell-violations.md +144 -0
  283. package/shared/skills/core-patterns/references/detection.md +303 -0
  284. package/shared/skills/core-patterns/references/patterns.md +576 -0
  285. package/shared/skills/core-patterns/references/violations.md +369 -0
  286. package/shared/skills/database-patterns/SKILL.md +134 -0
  287. package/shared/skills/database-patterns/references/detection.md +208 -0
  288. package/shared/skills/database-patterns/references/patterns.md +394 -0
  289. package/shared/skills/database-patterns/references/violations.md +332 -0
  290. package/shared/skills/dependencies-patterns/SKILL.md +141 -0
  291. package/shared/skills/dependencies-patterns/references/detection.md +181 -0
  292. package/shared/skills/dependencies-patterns/references/patterns.md +225 -0
  293. package/shared/skills/dependencies-patterns/references/violations.md +247 -0
  294. package/shared/skills/docs-framework/SKILL.md +138 -0
  295. package/shared/skills/docs-framework/references/patterns.md +346 -0
  296. package/shared/skills/docs-framework/references/violations.md +221 -0
  297. package/shared/skills/documentation-patterns/SKILL.md +125 -0
  298. package/shared/skills/documentation-patterns/references/detection.md +190 -0
  299. package/shared/skills/documentation-patterns/references/patterns.md +189 -0
  300. package/shared/skills/documentation-patterns/references/violations.md +163 -0
  301. package/shared/skills/frontend-design/SKILL.md +254 -0
  302. package/shared/skills/frontend-design/references/detection.md +184 -0
  303. package/shared/skills/frontend-design/references/patterns.md +511 -0
  304. package/shared/skills/frontend-design/references/violations.md +453 -0
  305. package/shared/skills/git-safety/SKILL.md +122 -0
  306. package/shared/skills/git-safety/references/detection.md +290 -0
  307. package/shared/skills/git-safety/references/patterns.md +289 -0
  308. package/shared/skills/git-safety/references/violations.md +18 -0
  309. package/shared/skills/git-workflow/SKILL.md +158 -0
  310. package/shared/skills/git-workflow/references/commit-patterns.md +115 -0
  311. package/shared/skills/git-workflow/references/commit-violations.md +77 -0
  312. package/shared/skills/git-workflow/references/pr-patterns.md +127 -0
  313. package/shared/skills/git-workflow/references/pr-violations.md +96 -0
  314. package/shared/skills/github-patterns/SKILL.md +153 -0
  315. package/shared/skills/github-patterns/references/patterns.md +572 -0
  316. package/shared/skills/github-patterns/references/violations.md +298 -0
  317. package/shared/skills/implementation-patterns/SKILL.md +162 -0
  318. package/shared/skills/implementation-patterns/references/patterns.md +1063 -0
  319. package/shared/skills/implementation-patterns/references/violations.md +483 -0
  320. package/shared/skills/input-validation/SKILL.md +148 -0
  321. package/shared/skills/input-validation/references/detection.md +283 -0
  322. package/shared/skills/input-validation/references/patterns.md +361 -0
  323. package/shared/skills/input-validation/references/violations.md +224 -0
  324. package/shared/skills/performance-patterns/SKILL.md +154 -0
  325. package/shared/skills/performance-patterns/references/detection.md +351 -0
  326. package/shared/skills/performance-patterns/references/patterns.md +503 -0
  327. package/shared/skills/performance-patterns/references/violations.md +354 -0
  328. package/shared/skills/react/SKILL.md +276 -0
  329. package/shared/skills/react/references/patterns.md +1331 -0
  330. package/shared/skills/react/references/violations.md +565 -0
  331. package/shared/skills/regression-patterns/SKILL.md +146 -0
  332. package/shared/skills/regression-patterns/references/detection.md +237 -0
  333. package/shared/skills/regression-patterns/references/patterns.md +226 -0
  334. package/shared/skills/regression-patterns/references/violations.md +225 -0
  335. package/shared/skills/review-methodology/SKILL.md +119 -0
  336. package/shared/skills/review-methodology/references/patterns.md +186 -0
  337. package/shared/skills/review-methodology/references/report-template.md +142 -0
  338. package/shared/skills/review-methodology/references/violations.md +125 -0
  339. package/shared/skills/security-patterns/SKILL.md +156 -0
  340. package/shared/skills/security-patterns/references/detection.md +287 -0
  341. package/shared/skills/security-patterns/references/patterns.md +507 -0
  342. package/shared/skills/security-patterns/references/violations.md +237 -0
  343. package/shared/skills/self-review/SKILL.md +149 -0
  344. package/shared/skills/self-review/references/patterns.md +405 -0
  345. package/shared/skills/self-review/references/report-template.md +253 -0
  346. package/shared/skills/self-review/references/violations.md +308 -0
  347. package/shared/skills/test-driven-development/SKILL.md +139 -0
  348. package/shared/skills/test-driven-development/references/rationalization-prevention.md +111 -0
  349. package/shared/skills/test-patterns/SKILL.md +183 -0
  350. package/shared/skills/test-patterns/references/detection.md +149 -0
  351. package/shared/skills/test-patterns/references/patterns.md +220 -0
  352. package/shared/skills/test-patterns/references/report-template.md +108 -0
  353. package/shared/skills/test-patterns/references/violations.md +221 -0
  354. package/shared/skills/typescript/SKILL.md +176 -0
  355. package/shared/skills/typescript/references/patterns.md +1105 -0
  356. package/shared/skills/typescript/references/violations.md +433 -0
  357. package/src/templates/claudeignore.template +188 -0
  358. package/src/templates/managed-settings.json +160 -0
  359. package/src/templates/settings.json +59 -0
  360. package/dist/cli.d.ts.map +0 -1
  361. package/dist/cli.js.map +0 -1
  362. package/dist/commands/init.d.ts.map +0 -1
  363. package/dist/commands/init.js.map +0 -1
  364. package/dist/commands/uninstall.d.ts.map +0 -1
  365. package/dist/commands/uninstall.js.map +0 -1
  366. package/dist/utils/git.d.ts.map +0 -1
  367. package/dist/utils/git.js.map +0 -1
  368. package/dist/utils/paths.d.ts.map +0 -1
  369. package/dist/utils/paths.js.map +0 -1
  370. package/src/claude/CLAUDE.md +0 -400
  371. package/src/claude/agents/devflow/audit-architecture.md +0 -132
  372. package/src/claude/agents/devflow/audit-complexity.md +0 -132
  373. package/src/claude/agents/devflow/audit-database.md +0 -132
  374. package/src/claude/agents/devflow/audit-dependencies.md +0 -132
  375. package/src/claude/agents/devflow/audit-documentation.md +0 -132
  376. package/src/claude/agents/devflow/audit-performance.md +0 -256
  377. package/src/claude/agents/devflow/audit-security.md +0 -259
  378. package/src/claude/agents/devflow/audit-tests.md +0 -132
  379. package/src/claude/agents/devflow/audit-typescript.md +0 -132
  380. package/src/claude/agents/devflow/brainstorm.md +0 -279
  381. package/src/claude/agents/devflow/catch-up.md +0 -345
  382. package/src/claude/agents/devflow/code-review.md +0 -307
  383. package/src/claude/agents/devflow/commit.md +0 -380
  384. package/src/claude/agents/devflow/debug.md +0 -476
  385. package/src/claude/agents/devflow/design.md +0 -491
  386. package/src/claude/agents/devflow/get-issue.md +0 -286
  387. package/src/claude/agents/devflow/pr-comments.md +0 -285
  388. package/src/claude/agents/devflow/project-state.md +0 -419
  389. package/src/claude/agents/devflow/pull-request.md +0 -493
  390. package/src/claude/agents/devflow/release.md +0 -1137
  391. package/src/claude/agents/devflow/tech-debt.md +0 -338
  392. package/src/claude/commands/devflow/brainstorm.md +0 -68
  393. package/src/claude/commands/devflow/breakdown.md +0 -125
  394. package/src/claude/commands/devflow/catch-up.md +0 -29
  395. package/src/claude/commands/devflow/code-review.md +0 -237
  396. package/src/claude/commands/devflow/commit.md +0 -17
  397. package/src/claude/commands/devflow/debug.md +0 -56
  398. package/src/claude/commands/devflow/design.md +0 -82
  399. package/src/claude/commands/devflow/devlog.md +0 -408
  400. package/src/claude/commands/devflow/get-issue.md +0 -16
  401. package/src/claude/commands/devflow/implement.md +0 -100
  402. package/src/claude/commands/devflow/plan.md +0 -223
  403. package/src/claude/commands/devflow/pull-request.md +0 -20
  404. package/src/claude/commands/devflow/release.md +0 -251
  405. package/src/claude/commands/devflow/resolve-comments.md +0 -583
  406. package/src/claude/scripts/statusline.sh +0 -47
  407. package/src/claude/settings.json +0 -6
  408. package/src/claude/skills/devflow/code-smell/SKILL.md +0 -428
  409. package/src/claude/skills/devflow/debug/SKILL.md +0 -119
  410. package/src/claude/skills/devflow/error-handling/SKILL.md +0 -597
  411. package/src/claude/skills/devflow/input-validation/SKILL.md +0 -514
  412. package/src/claude/skills/devflow/pattern-check/SKILL.md +0 -238
  413. package/src/claude/skills/devflow/research/SKILL.md +0 -138
  414. package/src/claude/skills/devflow/test-design/SKILL.md +0 -384
@@ -0,0 +1,111 @@
1
+ # TDD Rationalization Prevention — Extended Examples
2
+
3
+ Detailed code examples showing how each rationalization leads to worse outcomes.
4
+
5
+ ## "I'll write tests after"
6
+
7
+ ### What happens:
8
+
9
+ ```typescript
10
+ // Developer writes production code first
11
+ function calculateDiscount(price: number, tier: string): number {
12
+ if (tier === 'gold') return price * 0.8;
13
+ if (tier === 'silver') return price * 0.9;
14
+ return price;
15
+ }
16
+
17
+ // Then "writes tests after" — but only for the happy path they remember
18
+ test('gold tier gets 20% off', () => {
19
+ expect(calculateDiscount(100, 'gold')).toBe(80);
20
+ });
21
+ // Missing: negative prices, unknown tiers, zero prices, NaN handling
22
+ ```
23
+
24
+ ### What TDD would have caught:
25
+
26
+ ```typescript
27
+ // Test first — forces you to think about the contract
28
+ test('returns error for negative price', () => {
29
+ expect(calculateDiscount(-100, 'gold')).toEqual({ ok: false, error: 'NEGATIVE_PRICE' });
30
+ });
31
+ // Now the interface includes error handling from the start
32
+ ```
33
+
34
+ ## "Too simple to test"
35
+
36
+ ### What happens:
37
+
38
+ ```typescript
39
+ // "It's just a config getter, no test needed"
40
+ function getMaxRetries(): number {
41
+ return parseInt(process.env.MAX_RETRIES || '3');
42
+ }
43
+ // 6 months later: someone sets MAX_RETRIES="three" and prod crashes with NaN retries
44
+ ```
45
+
46
+ ### What TDD would have caught:
47
+
48
+ ```typescript
49
+ test('returns default when env var is not a number', () => {
50
+ process.env.MAX_RETRIES = 'three';
51
+ expect(getMaxRetries()).toBe(3); // Forces validation logic
52
+ });
53
+ ```
54
+
55
+ ## "Test is too hard to write"
56
+
57
+ ### What happens:
58
+
59
+ ```typescript
60
+ // "I can't test this easily because it needs database + email + filesystem"
61
+ async function processOrder(orderId: string) {
62
+ const db = new Database();
63
+ const order = await db.find(orderId);
64
+ await sendEmail(order.customerEmail, 'Your order is processing');
65
+ await fs.writeFile(`/invoices/${orderId}.pdf`, generateInvoice(order));
66
+ await db.update(orderId, { status: 'processing' });
67
+ }
68
+ // Result: untestable monolith, test would need real DB + email + filesystem
69
+ ```
70
+
71
+ ### What TDD forces:
72
+
73
+ ```typescript
74
+ // Hard-to-test = bad design. TDD forces dependency injection:
75
+ async function processOrder(
76
+ orderId: string,
77
+ deps: { db: OrderRepository; emailer: Emailer; invoices: InvoiceStore }
78
+ ): Promise<Result<void, OrderError>> {
79
+ // Now trivially testable with mocks
80
+ }
81
+ ```
82
+
83
+ ## "I'll refactor later"
84
+
85
+ ### What happens:
86
+
87
+ ```typescript
88
+ // Sprint 1: "just get it working"
89
+ function handleRequest(req: any) {
90
+ if (req.type === 'create') { /* 50 lines */ }
91
+ else if (req.type === 'update') { /* 50 lines */ }
92
+ else if (req.type === 'delete') { /* 30 lines */ }
93
+ // Sprint 2-10: more conditions added, function grows to 500 lines
94
+ // "Refactor later" never comes because nobody wants to touch it
95
+ }
96
+ ```
97
+
98
+ ### What TDD enforces:
99
+
100
+ Step 3 (REFACTOR) happens every cycle. The function never grows beyond what's clean because you clean it every 5-10 minutes.
101
+
102
+ ## "Tests slow me down"
103
+
104
+ ### The math:
105
+
106
+ | Approach | Time to write | Time to first bug | Time to fix bug | Total (1 month) |
107
+ |----------|:---:|:---:|:---:|:---:|
108
+ | No TDD | 2h | 4h | 3h (no repro test) | 9h+ |
109
+ | TDD | 3h | Caught in test | 15min (test pinpoints) | 3h 15min |
110
+
111
+ TDD is slower for the first 30 minutes. It's faster for everything after that.
@@ -0,0 +1,183 @@
1
+ ---
2
+ name: test-patterns
3
+ description: This skill should be used when the user asks to "write tests", "fix failing tests", "improve test coverage", "add integration tests", "debug a flaky test", or reviews test quality. Provides behavior-focused testing patterns, coverage analysis, and detection of brittle test anti-patterns like implementation coupling and non-deterministic assertions.
4
+ user-invocable: false
5
+ allowed-tools: Read, Grep, Glob, AskUserQuestion
6
+ activation:
7
+ file-patterns:
8
+ - "**/*.test.*"
9
+ - "**/*.spec.*"
10
+ - "**/test/**"
11
+ - "**/tests/**"
12
+ - "**/__tests__/**"
13
+ exclude:
14
+ - "node_modules/**"
15
+ ---
16
+
17
+ # Test Patterns
18
+
19
+ ## Iron Law
20
+
21
+ > **TESTS VALIDATE BEHAVIOR, NOT IMPLEMENTATION**
22
+ >
23
+ > A test should fail when behavior breaks, not when implementation changes. If refactoring
24
+ > breaks tests without changing behavior, the tests are wrong. Mock boundaries, not internals.
25
+ > Test the contract, not the code. If tests are hard to write, the design is wrong — fix the
26
+ > architecture, not the tests.
27
+
28
+ ---
29
+
30
+ ## Test Design Red Flags
31
+
32
+ ### 1. Complex Setup
33
+
34
+ **RED FLAG**: Test setup >10 lines means the design is wrong.
35
+
36
+ ```typescript
37
+ // VIOLATION: Too many dependencies
38
+ beforeEach(async () => {
39
+ mockDb = new MockDatabase();
40
+ await mockDb.connect();
41
+ mockCache = new MockCache();
42
+ // ... 10+ more lines
43
+ service = new UserService(mockDb, mockCache, mockLogger, mockConfig);
44
+ });
45
+
46
+ // CORRECT: Simple setup
47
+ it('should return Ok with valid data', () => {
48
+ const result = createUser({ name: 'test', email: 'test@example.com' });
49
+ expect(result.ok).toBe(true);
50
+ });
51
+ ```
52
+
53
+ **Detection**: `beforeEach` >10 lines, multiple mocks, async setup, database seeding
54
+
55
+ ### 2. Repetitive Boilerplate
56
+
57
+ **RED FLAG**: Same pattern repeated >3 times means the API is wrong.
58
+
59
+ ```typescript
60
+ // VIOLATION: Try/catch everywhere
61
+ try { await api.createUser(data); fail(); } catch (e) { expect(e.status).toBe(400); }
62
+
63
+ // CORRECT: Result types eliminate repetition
64
+ const result = createUser(invalidData);
65
+ expect(result.ok).toBe(false);
66
+ expect(result.error.type).toBe('ValidationError');
67
+ ```
68
+
69
+ ### 3. Difficult Mocking
70
+
71
+ **RED FLAG**: Mock setup >20 lines means dependencies are wrong.
72
+
73
+ ```typescript
74
+ // VIOLATION: Nested mock structures
75
+ mockDb = { transaction: jest.fn(), orders: { create: jest.fn(), update: jest.fn() } };
76
+
77
+ // CORRECT: Pure functions need no mocking
78
+ const result = processOrder(order);
79
+ expect(result.ok).toBe(true);
80
+ ```
81
+
82
+ ### 4. Implementation Testing
83
+
84
+ **RED FLAG**: Testing internals means tests are fragile.
85
+
86
+ ```typescript
87
+ // VIOLATION: Spying on private methods
88
+ const spy = jest.spyOn(cart as any, 'updateTotal');
89
+ expect(spy).toHaveBeenCalled();
90
+
91
+ // CORRECT: Test observable behavior
92
+ expect(cart.getTotal()).toBe(10);
93
+ ```
94
+
95
+ ---
96
+
97
+ ## Coverage & Review
98
+
99
+ ### Coverage Issues
100
+
101
+ - **Untested new code**: New functions/branches without corresponding tests
102
+ - **Missing edge cases**: Only happy path tested, no error paths
103
+ - **Missing error paths**: `throw`/`reject` in source without matching test assertions
104
+
105
+ ### Test Quality Issues
106
+
107
+ - **Brittle tests**: Testing HOW (mock call verification) not WHAT (outcome)
108
+ - **Unclear test names**: `it('test1')` instead of `it('validates email format on creation')`
109
+ - **Missing AAA structure**: Mixed arrange/act/assert without clear separation
110
+
111
+ ### Mocking Issues
112
+
113
+ - **Over-mocking**: Everything mocked, nothing actually tested
114
+ - **Mocking third-party internals**: Mock at your own interface boundary instead
115
+
116
+ ---
117
+
118
+ ## Severity Guidelines
119
+
120
+ | Severity | Criteria |
121
+ |----------|----------|
122
+ | **CRITICAL** | Tests pass but don't verify behavior; critical paths untested; tests mock everything |
123
+ | **HIGH** | Missing error path coverage; flaky tests; extremely slow (>10s); >10 line setup |
124
+ | **MEDIUM** | Some edge cases missing; weak assertions; unclear structure |
125
+ | **LOW** | Organization could improve; naming could be clearer |
126
+
127
+ ---
128
+
129
+ ## Test Suite Safety
130
+
131
+ ```typescript
132
+ // vitest.config.ts / jest.config.js
133
+ { fileParallelism: false, maxWorkers: 1, testTimeout: 10000 }
134
+ ```
135
+
136
+ ```bash
137
+ NODE_OPTIONS="--max-old-space-size=512" npm test
138
+ ```
139
+
140
+ ---
141
+
142
+ ## Extended References
143
+
144
+ For comprehensive examples and detection patterns:
145
+
146
+ | Reference | Contents |
147
+ |-----------|----------|
148
+ | `references/violations.md` | Full violation examples for all categories |
149
+ | `references/patterns.md` | Correct test patterns and organization |
150
+ | `references/detection.md` | Bash commands for automated detection |
151
+ | `references/report-template.md` | Full report format for documenting issues |
152
+
153
+ ---
154
+
155
+ ## Quality Gates
156
+
157
+ Tests pass design review when:
158
+ - [ ] Setup code <10 lines per test file
159
+ - [ ] No repetitive try/catch or error handling patterns
160
+ - [ ] Mocking requires <5 lines of setup
161
+ - [ ] No spying on private methods or internal state
162
+ - [ ] Tests verify behavior, not implementation details
163
+ - [ ] Pure business logic testable without mocks
164
+ - [ ] New code has corresponding tests
165
+ - [ ] All branches covered (happy path + errors + edge cases)
166
+ - [ ] Test names describe expected behavior
167
+ - [ ] Tests follow Arrange-Act-Assert structure
168
+ - [ ] No real delays (use mocked timers)
169
+ - [ ] No flaky patterns (race conditions, timing dependencies)
170
+
171
+ ---
172
+
173
+ ## Review Checklist
174
+
175
+ - [ ] New code has corresponding tests
176
+ - [ ] All branches covered (happy path + errors + edge cases)
177
+ - [ ] Tests verify behavior, not implementation
178
+ - [ ] Test names describe expected behavior
179
+ - [ ] Tests follow Arrange-Act-Assert structure
180
+ - [ ] No real delays (use mocked timers)
181
+ - [ ] Assertions are specific and meaningful
182
+ - [ ] Mocking limited to boundaries (not internals)
183
+ - [ ] No flaky patterns (race conditions, timing dependencies)
@@ -0,0 +1,149 @@
1
+ # Test Issue Detection
2
+
3
+ Commands and patterns for detecting test quality issues.
4
+
5
+ ---
6
+
7
+ ## Coverage Detection
8
+
9
+ ### Find Untested Functions
10
+
11
+ ```bash
12
+ # List exported functions in source
13
+ grep -rn "export function\|export async function" --include="*.ts" src/ | cut -d: -f1,3 | sort
14
+
15
+ # List tested functions
16
+ grep -rn "describe\|it\(" --include="*.test.ts" | grep -oE "'[^']+'" | sort -u
17
+
18
+ # Compare to find gaps (manual comparison needed)
19
+ ```
20
+
21
+ ### Find Missing Error Tests
22
+
23
+ ```bash
24
+ # Count error-throwing code in source
25
+ grep -rn "throw\|reject\|Error" --include="*.ts" src/ | grep -v test | wc -l
26
+
27
+ # Count error test assertions
28
+ grep -rn "rejects.toThrow\|toThrow\|toThrowError" --include="*.test.ts" | wc -l
29
+
30
+ # Large discrepancy indicates missing error tests
31
+ ```
32
+
33
+ ---
34
+
35
+ ## Quality Detection
36
+
37
+ ### Tests Without Assertions
38
+
39
+ ```bash
40
+ # Find test blocks that may lack assertions
41
+ grep -rn "it\(.*=>" --include="*.test.ts" -A20 | grep -v "expect" | head -50
42
+
43
+ # Find empty test blocks
44
+ grep -rn "it\(.*{\s*}\)" --include="*.test.ts"
45
+ ```
46
+
47
+ ### Weak Assertions
48
+
49
+ ```bash
50
+ # Find overly permissive assertions
51
+ grep -rn "toBeDefined\|toBeTruthy\|not.toBeNull\|not.toBeUndefined" --include="*.test.ts"
52
+
53
+ # Count for comparison with strong assertions
54
+ grep -rn "toEqual\|toMatchObject\|toHaveLength\|toBe(" --include="*.test.ts" | wc -l
55
+ ```
56
+
57
+ ### Implementation Testing
58
+
59
+ ```bash
60
+ # Find tests that verify mock calls (may indicate implementation testing)
61
+ grep -rn "toHaveBeenCalledWith\|toHaveBeenCalled\|toHaveBeenCalledTimes" --include="*.test.ts"
62
+ ```
63
+
64
+ ---
65
+
66
+ ## Design Detection
67
+
68
+ ### Slow Tests
69
+
70
+ ```bash
71
+ # Find tests with long timeouts (>5000ms)
72
+ grep -rn "}, [0-9][0-9][0-9][0-9][0-9])" --include="*.test.ts"
73
+
74
+ # Find real delays in tests
75
+ grep -rn "setTimeout\|sleep\|delay" --include="*.test.ts"
76
+ ```
77
+
78
+ ### Complex Setup
79
+
80
+ ```bash
81
+ # Find tests with many mock objects
82
+ grep -rn "jest.fn\|sinon.stub\|mock" --include="*.test.ts" | cut -d: -f1 | uniq -c | sort -rn | head -10
83
+
84
+ # Find long beforeEach blocks
85
+ grep -rn "beforeEach" --include="*.test.ts" -A30 | head -100
86
+ ```
87
+
88
+ ---
89
+
90
+ ## Mocking Detection
91
+
92
+ ### Over-Mocking
93
+
94
+ ```bash
95
+ # Count mocks per test file
96
+ for f in $(find . -name "*.test.ts" -type f); do
97
+ count=$(grep -c "jest.fn\|mock" "$f" 2>/dev/null || echo 0)
98
+ echo "$count $f"
99
+ done | sort -rn | head -20
100
+
101
+ # Files with >20 mocks may be over-mocked
102
+ ```
103
+
104
+ ### Third-Party Library Mocking
105
+
106
+ ```bash
107
+ # Find jest.mock of node_modules
108
+ grep -rn "jest.mock\(['\"]" --include="*.test.ts" | grep -v "\./" | grep -v "\.\./"
109
+
110
+ # These should be wrapped in interfaces instead
111
+ ```
112
+
113
+ ---
114
+
115
+ ## Summary Report Script
116
+
117
+ ```bash
118
+ #!/bin/bash
119
+ # test-health-check.sh - Quick test quality assessment
120
+
121
+ echo "=== Test Health Check ==="
122
+ echo ""
123
+
124
+ echo "Coverage Indicators:"
125
+ echo " Source functions: $(grep -rn 'export function' --include='*.ts' src/ 2>/dev/null | wc -l)"
126
+ echo " Test blocks: $(grep -rn 'it\(' --include='*.test.ts' 2>/dev/null | wc -l)"
127
+ echo ""
128
+
129
+ echo "Quality Indicators:"
130
+ echo " Strong assertions: $(grep -rn 'toEqual\|toMatchObject' --include='*.test.ts' 2>/dev/null | wc -l)"
131
+ echo " Weak assertions: $(grep -rn 'toBeDefined\|toBeTruthy' --include='*.test.ts' 2>/dev/null | wc -l)"
132
+ echo ""
133
+
134
+ echo "Design Indicators:"
135
+ echo " Long timeouts: $(grep -rn '}, [0-9]\{5,\})' --include='*.test.ts' 2>/dev/null | wc -l)"
136
+ echo " Mock count: $(grep -rn 'jest.fn\|mock' --include='*.test.ts' 2>/dev/null | wc -l)"
137
+ ```
138
+
139
+ ---
140
+
141
+ ## Test Coverage Guidelines
142
+
143
+ | Code Type | Required Coverage | Test Type |
144
+ |-----------|-------------------|-----------|
145
+ | Business logic | 90%+ | Unit tests |
146
+ | API endpoints | 80%+ | Integration tests |
147
+ | UI components | 70%+ | Component tests |
148
+ | Utilities | 100% | Unit tests |
149
+ | Error paths | 100% | Unit tests |
@@ -0,0 +1,220 @@
1
+ # Test Patterns - Correct Examples
2
+
3
+ Reference for proper test patterns and approaches.
4
+
5
+ ---
6
+
7
+ ## Simple Setup Patterns
8
+
9
+ ### Pure Function Testing
10
+
11
+ ```typescript
12
+ // CORRECT: Simple setup indicates good design
13
+ describe('createUser', () => {
14
+ it('should return Ok with valid data', () => {
15
+ const result = createUser({ name: 'test', email: 'test@example.com' });
16
+ expect(result.ok).toBe(true);
17
+ expect(result.value.name).toBe('test');
18
+ });
19
+
20
+ it('should return Err with invalid email', () => {
21
+ const result = createUser({ name: 'test', email: 'invalid' });
22
+ expect(result.ok).toBe(false);
23
+ expect(result.error.type).toBe('ValidationError');
24
+ });
25
+ });
26
+ ```
27
+
28
+ ---
29
+
30
+ ## Minimal Mocking Patterns
31
+
32
+ ### Single Dependency Injection
33
+
34
+ ```typescript
35
+ // CORRECT: Single mock for focused test
36
+ describe('OrderCalculator', () => {
37
+ it('should calculate total with tax', () => {
38
+ const taxService = { getRate: () => 0.1 }; // Simple mock
39
+ const calculator = new OrderCalculator(taxService);
40
+ const result = calculator.calculateTotal([
41
+ { price: 100, quantity: 2 },
42
+ { price: 50, quantity: 1 },
43
+ ]);
44
+ expect(result).toBe(275);
45
+ });
46
+ });
47
+ ```
48
+
49
+ ---
50
+
51
+ ## Behavior-Focused Testing
52
+
53
+ ```typescript
54
+ // CORRECT: Testing behavior, not implementation
55
+ describe('ShoppingCart', () => {
56
+ it('should calculate correct total after adding items', () => {
57
+ const cart = new ShoppingCart();
58
+ cart.addItem({ id: '1', price: 10 });
59
+ cart.addItem({ id: '2', price: 20 });
60
+ expect(cart.getTotal()).toBe(30);
61
+ });
62
+
63
+ it('should be empty after clearing', () => {
64
+ const cart = new ShoppingCart();
65
+ cart.addItem({ id: '1', price: 10 });
66
+ cart.clear();
67
+ expect(cart.getItems()).toEqual([]);
68
+ expect(cart.getTotal()).toBe(0);
69
+ });
70
+ });
71
+ ```
72
+
73
+ ---
74
+
75
+ ## Coverage Patterns
76
+
77
+ ### Branch Coverage
78
+
79
+ ```typescript
80
+ describe('calculateDiscount', () => {
81
+ it('returns 10% for regular customers', () => {
82
+ expect(calculateDiscount(100, 'regular')).toBe(10);
83
+ });
84
+ it('returns 20% for premium customers', () => {
85
+ expect(calculateDiscount(100, 'premium')).toBe(20);
86
+ });
87
+ it('returns 30% for VIP customers', () => {
88
+ expect(calculateDiscount(100, 'vip')).toBe(30);
89
+ });
90
+ });
91
+ ```
92
+
93
+ ### Error Path Coverage
94
+
95
+ ```typescript
96
+ describe('fetchUser', () => {
97
+ it('returns user data on success', async () => { /* ... */ });
98
+ it('throws ApiError on 404', async () => {
99
+ api.get.mockResolvedValue({ ok: false, status: 404 });
100
+ await expect(fetchUser('123')).rejects.toThrow(ApiError);
101
+ });
102
+ it('handles network errors', async () => {
103
+ api.get.mockRejectedValue(new Error('Network error'));
104
+ await expect(fetchUser('123')).rejects.toThrow('Network error');
105
+ });
106
+ });
107
+ ```
108
+
109
+ ---
110
+
111
+ ## Separation of Concerns Testing
112
+
113
+ ```typescript
114
+ // CORRECT: Business logic tested without I/O
115
+ describe('OrderPricing (pure logic)', () => {
116
+ it('should calculate subtotal', () => {
117
+ const items = [{ price: 100, quantity: 2 }, { price: 50, quantity: 1 }];
118
+ expect(calculateSubtotal(items)).toBe(250);
119
+ });
120
+ it('should apply percentage discount', () => {
121
+ expect(applyDiscount(100, { type: 'percent', value: 20 })).toBe(80);
122
+ });
123
+ });
124
+
125
+ // Integration test for I/O wrapper
126
+ describe('OrderService (integration)', () => {
127
+ it('should persist order and return result', async () => {
128
+ const mockRepo = { save: jest.fn().mockResolvedValue({ id: '1' }) };
129
+ const service = new OrderService(mockRepo);
130
+ const result = await service.createOrder({ items: [{ price: 100, quantity: 1 }] });
131
+ expect(result.ok).toBe(true);
132
+ });
133
+ });
134
+ ```
135
+
136
+ ---
137
+
138
+ ## Parameterized Testing
139
+
140
+ ```typescript
141
+ describe('validateEmail', () => {
142
+ const validEmails = ['test@example.com', 'user.name@domain.org', 'user+tag@example.co.uk'];
143
+ const invalidEmails = ['', 'invalid', '@nodomain.com', 'spaces in@email.com'];
144
+
145
+ test.each(validEmails)('should accept valid email: %s', (email) => {
146
+ expect(validateEmail(email).ok).toBe(true);
147
+ });
148
+
149
+ test.each(invalidEmails)('should reject invalid email: %s', (email) => {
150
+ expect(validateEmail(email).ok).toBe(false);
151
+ });
152
+ });
153
+ ```
154
+
155
+ ---
156
+
157
+ ## Boundary Mocking
158
+
159
+ ```typescript
160
+ // CORRECT: Wrap third-party libraries in your own interface
161
+ interface HttpClient {
162
+ get<T>(url: string): Promise<T>;
163
+ }
164
+
165
+ class MockHttpClient implements HttpClient {
166
+ private responses: Map<string, any> = new Map();
167
+ mockResponse(url: string, data: any) { this.responses.set(url, data); }
168
+ async get<T>(url: string): Promise<T> { return this.responses.get(url); }
169
+ }
170
+
171
+ // Tests use MockHttpClient, production uses AxiosHttpClient
172
+ ```
173
+
174
+ ---
175
+
176
+ ## Test Organization
177
+
178
+ ```typescript
179
+ describe('UserService', () => {
180
+ let service: UserService;
181
+ let repo: InMemoryUserRepo;
182
+
183
+ beforeEach(() => {
184
+ repo = new InMemoryUserRepo();
185
+ service = new UserService(repo);
186
+ });
187
+
188
+ describe('create', () => {
189
+ it('creates user with valid data', async () => { /* ... */ });
190
+ it('rejects invalid email', async () => { /* ... */ });
191
+ });
192
+
193
+ describe('update', () => {
194
+ it('updates existing user', async () => { /* ... */ });
195
+ it('returns error for non-existent user', async () => { /* ... */ });
196
+ });
197
+ });
198
+ ```
199
+
200
+ ---
201
+
202
+ ## Test Data Factories
203
+
204
+ ```typescript
205
+ // CORRECT: Factories for test data, not test setup
206
+ const createTestUser = (overrides = {}): User => ({
207
+ id: 'test-id',
208
+ name: 'Test User',
209
+ email: 'test@example.com',
210
+ role: 'user',
211
+ ...overrides,
212
+ });
213
+
214
+ describe('UserPermissions', () => {
215
+ it('should allow admin to delete users', () => {
216
+ const admin = createTestUser({ role: 'admin' });
217
+ expect(canDeleteUser(admin)).toBe(true);
218
+ });
219
+ });
220
+ ```