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,565 @@
1
+ # React Violation Examples
2
+
3
+ Extended violation patterns for React reviews. Reference from main SKILL.md.
4
+
5
+ ## Vercel Performance Violations
6
+
7
+ ### Sequential Fetches
8
+
9
+ ```tsx
10
+ // VIOLATION: Sequential fetches (waterfall)
11
+ async function loadDashboard(userId: string) {
12
+ const user = await fetchUser(userId);
13
+ const orders = await fetchOrders(userId); // Waits for user
14
+ const prefs = await fetchPreferences(userId); // Waits for orders
15
+ return { user, orders, prefs };
16
+ }
17
+ // Total time: T(user) + T(orders) + T(prefs)
18
+ // Should be: max(T(user), T(orders), T(prefs))
19
+
20
+ // VIOLATION: Sequential in useEffect
21
+ useEffect(() => {
22
+ async function load() {
23
+ setUser(await fetchUser(id));
24
+ setOrders(await fetchOrders(id)); // Sequential
25
+ setStats(await fetchStats(id)); // Sequential
26
+ }
27
+ load();
28
+ }, [id]);
29
+ ```
30
+
31
+ ### Barrel Import Anti-Patterns
32
+
33
+ ```tsx
34
+ // VIOLATION: Barrel import pulls entire library
35
+ import { Button } from '@/components';
36
+ import { formatDate, formatCurrency, formatNumber } from '@/utils';
37
+ import { IconHome, IconUser } from '@/icons';
38
+
39
+ // VIOLATION: Named imports from large packages
40
+ import { debounce } from 'lodash'; // Imports entire lodash
41
+ import { Button, Input, Select } from 'antd'; // Large bundle
42
+
43
+ // VIOLATION: Not lazy loading heavy dependencies
44
+ import Editor from '@monaco-editor/react'; // 2MB+ bundle
45
+ import { Chart } from 'chart.js'; // Heavy charting library
46
+
47
+ function Dashboard() {
48
+ const [showChart, setShowChart] = useState(false);
49
+ return (
50
+ <div>
51
+ {showChart && <Chart />} {/* Loaded even when not shown */}
52
+ </div>
53
+ );
54
+ }
55
+ ```
56
+
57
+ ### Re-render Causing Patterns
58
+
59
+ ```tsx
60
+ // VIOLATION: Object literal in deps (new ref every render)
61
+ useEffect(() => {
62
+ fetchData(config);
63
+ }, [{ page: 1, limit: 10 }]); // Always "changed"
64
+
65
+ // VIOLATION: Array in deps
66
+ useEffect(() => {
67
+ updateFilters(filters);
68
+ }, [[filter1, filter2, filter3]]); // New array every render
69
+
70
+ // VIOLATION: Inline callback to memoized child
71
+ const MemoChild = memo(Child);
72
+
73
+ function Parent() {
74
+ return (
75
+ <MemoChild
76
+ onClick={() => console.log('clicked')} // New fn = re-render
77
+ style={{ color: 'blue' }} // New object = re-render
78
+ />
79
+ );
80
+ }
81
+
82
+ // VIOLATION: Computed value in render without memo
83
+ function FilteredList({ items, filter }: Props) {
84
+ const filtered = items.filter(i => i.includes(filter)); // Every render
85
+ return <List items={filtered} />;
86
+ }
87
+ ```
88
+
89
+ ### Unoptimized Images
90
+
91
+ ```tsx
92
+ // VIOLATION: No dimensions (causes layout shift)
93
+ <img src={url} alt={alt} />
94
+
95
+ // VIOLATION: No lazy loading (loads all images immediately)
96
+ {images.map(img => <img src={img.src} alt={img.alt} />)}
97
+
98
+ // VIOLATION: No aspect ratio (jumps on load)
99
+ <img
100
+ src={url}
101
+ width={400}
102
+ height={300}
103
+ // Missing: style={{ aspectRatio: '4/3' }}
104
+ />
105
+
106
+ // VIOLATION: Eager loading below fold
107
+ <img
108
+ src={heroImage}
109
+ alt="Hero"
110
+ loading="eager" // Should be lazy for non-critical images
111
+ />
112
+ ```
113
+
114
+ ### Inefficient Data Structures
115
+
116
+ ```tsx
117
+ // VIOLATION: Array.includes for frequent checks (O(n))
118
+ function SelectableList({ items, selected }: Props) {
119
+ return (
120
+ <ul>
121
+ {items.map(item => (
122
+ <li className={selected.includes(item.id) ? 'selected' : ''}>
123
+ {/* O(n) check on every item render */}
124
+ {item.name}
125
+ </li>
126
+ ))}
127
+ </ul>
128
+ );
129
+ }
130
+
131
+ // VIOLATION: Array.find for lookups (O(n))
132
+ function UserDisplay({ userId, users }: Props) {
133
+ const user = users.find(u => u.id === userId); // O(n) every render
134
+ return <span>{user?.name}</span>;
135
+ }
136
+
137
+ // VIOLATION: Filter + map in render (double iteration)
138
+ function ActiveUsers({ users }: Props) {
139
+ return (
140
+ <ul>
141
+ {users
142
+ .filter(u => u.active)
143
+ .map(u => <li key={u.id}>{u.name}</li>)
144
+ }
145
+ </ul>
146
+ );
147
+ }
148
+
149
+ // VIOLATION: Recreating Set every render
150
+ function Tags({ tags, selected }: Props) {
151
+ const selectedSet = new Set(selected); // Created every render
152
+ return tags.map(tag => (
153
+ <Tag selected={selectedSet.has(tag)} />
154
+ ));
155
+ }
156
+ ```
157
+
158
+ ---
159
+
160
+ ## Component Violations
161
+
162
+ ### Prop Drilling
163
+
164
+ ```tsx
165
+ // VIOLATION: Passing data through multiple intermediate components
166
+ function App() {
167
+ const [user, setUser] = useState<User | null>(null);
168
+
169
+ return (
170
+ <Layout user={user}>
171
+ <Sidebar user={user}>
172
+ <Navigation user={user}>
173
+ <UserMenu user={user} /> {/* Props drilled through 3 levels */}
174
+ </Navigation>
175
+ </Sidebar>
176
+ </Layout>
177
+ );
178
+ }
179
+ ```
180
+
181
+ ### Rigid Component Structure
182
+
183
+ ```tsx
184
+ // VIOLATION: Too many props, no composition
185
+ function Card({
186
+ title,
187
+ subtitle,
188
+ content,
189
+ footer,
190
+ headerIcon,
191
+ showCloseButton,
192
+ onClose,
193
+ variant,
194
+ size,
195
+ className
196
+ }: CardProps) {
197
+ return (
198
+ <div className={className}>
199
+ <header>
200
+ {headerIcon && <Icon name={headerIcon} />}
201
+ <h2>{title}</h2>
202
+ <p>{subtitle}</p>
203
+ {showCloseButton && <button onClick={onClose}>X</button>}
204
+ </header>
205
+ <div>{content}</div>
206
+ <footer>{footer}</footer>
207
+ </div>
208
+ );
209
+ }
210
+ ```
211
+
212
+ ### Direct State Mutation
213
+
214
+ ```tsx
215
+ // VIOLATION: Mutating state directly
216
+ function UserList() {
217
+ const [users, setUsers] = useState<User[]>([]);
218
+
219
+ const updateUser = (index: number, name: string) => {
220
+ users[index].name = name; // BAD: Direct mutation
221
+ setUsers(users); // Won't trigger re-render
222
+ };
223
+ }
224
+ ```
225
+
226
+ ### Missing Keys
227
+
228
+ ```tsx
229
+ // VIOLATION: Index as key causes reconciliation issues
230
+ {items.map((item, index) => (
231
+ <Item key={index} {...item} /> // Index key breaks reordering
232
+ ))}
233
+
234
+ // VIOLATION: Missing key entirely
235
+ {items.map((item) => (
236
+ <Item {...item} /> // React warning, poor performance
237
+ ))}
238
+ ```
239
+
240
+ ---
241
+
242
+ ## Hooks Violations
243
+
244
+ ### Missing Dependencies
245
+
246
+ ```tsx
247
+ // VIOLATION: Missing dependency causes stale closure
248
+ function SearchResults({ query }: { query: string }) {
249
+ const [results, setResults] = useState<Result[]>([]);
250
+
251
+ useEffect(() => {
252
+ fetchResults(query).then(setResults);
253
+ }, []); // BAD: Missing 'query' dependency
254
+
255
+ return <ResultsList results={results} />;
256
+ }
257
+ ```
258
+
259
+ ### Conditional Hooks
260
+
261
+ ```tsx
262
+ // VIOLATION: Hook called conditionally
263
+ function UserProfile({ user }: { user: User | null }) {
264
+ if (!user) {
265
+ return <LoginPrompt />;
266
+ }
267
+
268
+ // BAD: Hook called after conditional return
269
+ const [isEditing, setIsEditing] = useState(false);
270
+
271
+ return <ProfileEditor user={user} isEditing={isEditing} />;
272
+ }
273
+ ```
274
+
275
+ ### Stale Closure in Callbacks
276
+
277
+ ```tsx
278
+ // VIOLATION: Callback captures stale state
279
+ function Counter() {
280
+ const [count, setCount] = useState(0);
281
+
282
+ useEffect(() => {
283
+ const interval = setInterval(() => {
284
+ setCount(count + 1); // BAD: Always references initial count (0)
285
+ }, 1000);
286
+
287
+ return () => clearInterval(interval);
288
+ }, []); // Missing count dependency
289
+
290
+ return <span>{count}</span>;
291
+ }
292
+ ```
293
+
294
+ ### Effects Without Cleanup
295
+
296
+ ```tsx
297
+ // VIOLATION: Event listener never removed
298
+ function WindowSize() {
299
+ const [size, setSize] = useState({ width: 0, height: 0 });
300
+
301
+ useEffect(() => {
302
+ const handleResize = () => {
303
+ setSize({ width: window.innerWidth, height: window.innerHeight });
304
+ };
305
+
306
+ window.addEventListener('resize', handleResize);
307
+ // BAD: Missing cleanup - memory leak
308
+ }, []);
309
+
310
+ return <span>{size.width} x {size.height}</span>;
311
+ }
312
+ ```
313
+
314
+ ### Derived State in useState
315
+
316
+ ```tsx
317
+ // VIOLATION: Storing computed value in state
318
+ function ProductList({ products, filter }: Props) {
319
+ const [filteredProducts, setFilteredProducts] = useState<Product[]>([]);
320
+
321
+ useEffect(() => {
322
+ setFilteredProducts(products.filter(p => p.category === filter));
323
+ }, [products, filter]); // BAD: Unnecessary state and effect
324
+
325
+ return <List items={filteredProducts} />;
326
+ }
327
+ ```
328
+
329
+ ---
330
+
331
+ ## Forms Violations
332
+
333
+ ### Uncontrolled to Controlled Switch
334
+
335
+ ```tsx
336
+ // VIOLATION: Switching from uncontrolled to controlled
337
+ function SearchInput() {
338
+ const [value, setValue] = useState<string>(); // undefined initially
339
+
340
+ return (
341
+ <input
342
+ value={value} // BAD: undefined -> string causes warning
343
+ onChange={(e) => setValue(e.target.value)}
344
+ />
345
+ );
346
+ }
347
+ ```
348
+
349
+ ### Missing Form Validation
350
+
351
+ ```tsx
352
+ // VIOLATION: No validation, direct submission
353
+ function LoginForm({ onSubmit }: Props) {
354
+ const [email, setEmail] = useState('');
355
+ const [password, setPassword] = useState('');
356
+
357
+ const handleSubmit = (e: React.FormEvent) => {
358
+ e.preventDefault();
359
+ onSubmit({ email, password }); // BAD: No validation
360
+ };
361
+
362
+ return (
363
+ <form onSubmit={handleSubmit}>
364
+ <input value={email} onChange={(e) => setEmail(e.target.value)} />
365
+ <input value={password} onChange={(e) => setPassword(e.target.value)} />
366
+ <button type="submit">Login</button>
367
+ </form>
368
+ );
369
+ }
370
+ ```
371
+
372
+ ### Missing Accessibility Attributes
373
+
374
+ ```tsx
375
+ // VIOLATION: Form inputs without proper accessibility
376
+ function ContactForm() {
377
+ return (
378
+ <form>
379
+ {/* BAD: No labels, no aria attributes, no error announcements */}
380
+ <input placeholder="Email" />
381
+ {error && <span style={{ color: 'red' }}>{error}</span>}
382
+ <button>Submit</button>
383
+ </form>
384
+ );
385
+ }
386
+ ```
387
+
388
+ ### Form State Not Reset After Submit
389
+
390
+ ```tsx
391
+ // VIOLATION: Form keeps stale data after successful submit
392
+ function CommentForm({ onSubmit }: Props) {
393
+ const [comment, setComment] = useState('');
394
+
395
+ const handleSubmit = async (e: React.FormEvent) => {
396
+ e.preventDefault();
397
+ await onSubmit(comment);
398
+ // BAD: Missing state reset after successful submit
399
+ };
400
+
401
+ return (
402
+ <form onSubmit={handleSubmit}>
403
+ <textarea value={comment} onChange={(e) => setComment(e.target.value)} />
404
+ <button type="submit">Post</button>
405
+ </form>
406
+ );
407
+ }
408
+ ```
409
+
410
+ ---
411
+
412
+ ## Error Handling Violations
413
+
414
+ ### Missing Error Boundaries
415
+
416
+ ```tsx
417
+ // VIOLATION: No error boundary around risky component
418
+ function App() {
419
+ return (
420
+ <div>
421
+ <Header />
422
+ <main>
423
+ <UserProfile userId={userId} /> {/* If this crashes, entire app crashes */}
424
+ <OrderHistory userId={userId} />
425
+ </main>
426
+ <Footer />
427
+ </div>
428
+ );
429
+ }
430
+ ```
431
+
432
+ ### Swallowed Errors
433
+
434
+ ```tsx
435
+ // VIOLATION: Error caught but not handled
436
+ function DataLoader({ url }: { url: string }) {
437
+ const [data, setData] = useState(null);
438
+
439
+ useEffect(() => {
440
+ fetch(url)
441
+ .then(res => res.json())
442
+ .then(setData)
443
+ .catch(() => {}); // BAD: Silently swallows error
444
+ }, [url]);
445
+
446
+ return data ? <DataDisplay data={data} /> : <Spinner />;
447
+ }
448
+ ```
449
+
450
+ ### No Loading/Error States
451
+
452
+ ```tsx
453
+ // VIOLATION: Only handles success case
454
+ function UserProfile({ userId }: { userId: string }) {
455
+ const [user, setUser] = useState<User | null>(null);
456
+
457
+ useEffect(() => {
458
+ fetchUser(userId).then(setUser);
459
+ }, [userId]);
460
+
461
+ // BAD: No loading spinner, no error handling
462
+ return user ? <Profile user={user} /> : null;
463
+ }
464
+ ```
465
+
466
+ ### Error State Not Cleared
467
+
468
+ ```tsx
469
+ // VIOLATION: Error persists after retry
470
+ function DataFetcher({ url }: { url: string }) {
471
+ const [data, setData] = useState(null);
472
+ const [error, setError] = useState<Error | null>(null);
473
+
474
+ const fetchData = async () => {
475
+ try {
476
+ const result = await fetch(url).then(r => r.json());
477
+ setData(result);
478
+ // BAD: Error state not cleared on success
479
+ } catch (e) {
480
+ setError(e as Error);
481
+ }
482
+ };
483
+
484
+ return (
485
+ <div>
486
+ {error && <ErrorMessage error={error} />}
487
+ <button onClick={fetchData}>Retry</button>
488
+ </div>
489
+ );
490
+ }
491
+ ```
492
+
493
+ ---
494
+
495
+ ## Performance Violations
496
+
497
+ ### Inline Objects in JSX
498
+
499
+ ```tsx
500
+ // VIOLATION: New reference every render
501
+ <Component
502
+ options={{ show: true, animate: false }} // New object each render
503
+ items={[1, 2, 3]} // New array each render
504
+ />
505
+ ```
506
+
507
+ ### Inline Arrow Functions in JSX
508
+
509
+ ```tsx
510
+ // VIOLATION: New function every render
511
+ <Button onClick={() => handleClick(item.id)} />
512
+
513
+ // Also creates new function each render
514
+ {items.map(item => (
515
+ <Item
516
+ key={item.id}
517
+ onClick={() => onSelect(item)} // New function per item per render
518
+ />
519
+ ))}
520
+ ```
521
+
522
+ ### Missing useMemo for Expensive Computations
523
+
524
+ ```tsx
525
+ // VIOLATION: Recalculates on every render
526
+ function Dashboard({ data }: { data: DataPoint[] }) {
527
+ const stats = computeExpensiveStats(data); // Runs every render
528
+ const chartData = transformForChart(data); // Also runs every render
529
+
530
+ return (
531
+ <div>
532
+ <Stats data={stats} />
533
+ <Chart data={chartData} />
534
+ </div>
535
+ );
536
+ }
537
+ ```
538
+
539
+ ### State Updates in Render
540
+
541
+ ```tsx
542
+ // VIOLATION: Causes infinite loop
543
+ function Sync({ value }: { value: string }) {
544
+ const [state, setState] = useState(value);
545
+
546
+ if (value !== state) {
547
+ setState(value); // BAD: State update during render
548
+ }
549
+
550
+ return <span>{state}</span>;
551
+ }
552
+ ```
553
+
554
+ ### Unthrottled Event Handlers
555
+
556
+ ```tsx
557
+ // VIOLATION: Fires on every scroll pixel
558
+ function ParallaxEffect() {
559
+ useEffect(() => {
560
+ window.addEventListener('scroll', () => {
561
+ updateParallax(); // 60+ calls per second
562
+ });
563
+ }, []);
564
+ }
565
+ ```
@@ -0,0 +1,139 @@
1
+ ---
2
+ name: test-driven-development
3
+ description: >-
4
+ Enforce RED-GREEN-REFACTOR cycle during implementation. Write failing tests before
5
+ production code. Distinct from test-patterns (which reviews test quality) — this
6
+ skill enforces the TDD workflow during code generation.
7
+ user-invocable: false
8
+ allowed-tools: Read, Grep, Glob
9
+ activation:
10
+ file-patterns:
11
+ - "**/*.ts"
12
+ - "**/*.tsx"
13
+ - "**/*.js"
14
+ - "**/*.jsx"
15
+ - "**/*.py"
16
+ exclude:
17
+ - "node_modules/**"
18
+ - "dist/**"
19
+ - "**/*.test.*"
20
+ - "**/*.spec.*"
21
+ ---
22
+
23
+ # Test-Driven Development
24
+
25
+ Enforce the RED-GREEN-REFACTOR cycle for all implementation work. Tests define the design. Code satisfies the tests. Refactoring improves the design without changing behavior.
26
+
27
+ ## Iron Law
28
+
29
+ > **TESTS FIRST, ALWAYS**
30
+ >
31
+ > Write the failing test before the production code. No exceptions. If you catch
32
+ > yourself writing production code without a failing test, stop immediately, delete
33
+ > the production code, write the test, watch it fail, then write the minimum code
34
+ > to make it pass. The test IS the specification.
35
+
36
+ ---
37
+
38
+ ## The Cycle
39
+
40
+ ### Step 1: RED — Write a Failing Test
41
+
42
+ Write a test that describes the behavior you want. Run it. Watch it fail. The failure message IS your specification.
43
+
44
+ ```
45
+ Describe what the code SHOULD do, not how it does it.
46
+ One behavior per test. One assertion per test (ideally).
47
+ Name tests as sentences: "returns error when email is invalid"
48
+ ```
49
+
50
+ **Checkpoint:** The test MUST fail before proceeding. A test that passes immediately proves nothing.
51
+
52
+ ### Step 2: GREEN — Write Minimum Code to Pass
53
+
54
+ Write the simplest production code that makes the failing test pass. No more, no less.
55
+
56
+ ```
57
+ Hardcode first if that's simplest. Generalize when the next test forces it.
58
+ Don't write code "you'll need later." Write code the test demands NOW.
59
+ Don't optimize. Don't refactor. Don't clean up. Just pass the test.
60
+ ```
61
+
62
+ **Checkpoint:** All tests pass. If any test fails, fix it before moving on.
63
+
64
+ ### Step 3: REFACTOR — Improve Without Changing Behavior
65
+
66
+ Now clean up. Extract helpers, rename variables, simplify logic. Tests stay green throughout.
67
+
68
+ ```
69
+ Run tests after every refactoring step.
70
+ If a test breaks during refactor, undo immediately — you changed behavior.
71
+ Apply DRY, extract patterns, improve readability.
72
+ ```
73
+
74
+ **Checkpoint:** All tests still pass. Code is clean. Repeat from Step 1 for next behavior.
75
+
76
+ ---
77
+
78
+ ## Rationalization Prevention
79
+
80
+ These are the excuses developers use to skip TDD. Recognize and reject them.
81
+
82
+ | Excuse | Why It Feels Right | Why It's Wrong | Correct Action |
83
+ |--------|-------------------|---------------|----------------|
84
+ | "I'll write tests after" | Need to see the shape first | Tests ARE the shape — they define the interface before implementation exists | Write the test first |
85
+ | "Too simple to test" | It's just a getter/setter | Getters break, defaults change, edge cases hide in "simple" code | Write it — takes 30 seconds |
86
+ | "I'll refactor later" | Just get it working now | "Later" never comes; technical debt compounds silently | Refactor now in Step 3 |
87
+ | "Test is too hard to write" | Setup is complex, mocking is painful | Hard-to-test code = bad design; the test is telling you the interface is wrong | Simplify the interface first |
88
+ | "Need to see the whole picture" | Can't test what I haven't designed yet | TDD IS design; each test reveals the next piece of the interface | Let the test guide the design |
89
+ | "Tests slow me down" | Faster to just write the code | Faster until the first regression; TDD is faster for anything > 50 lines | Trust the cycle |
90
+
91
+ See `references/rationalization-prevention.md` for extended examples with code.
92
+
93
+ ---
94
+
95
+ ## Process Enforcement
96
+
97
+ When implementing any feature under ambient BUILD/STANDARD:
98
+
99
+ 1. **Identify the first behavior** — What is the simplest thing this feature must do?
100
+ 2. **Write the test** — Describe that behavior as a failing test
101
+ 3. **Run the test** — Confirm it fails (RED)
102
+ 4. **Write minimum code** — Just enough to pass (GREEN)
103
+ 5. **Refactor** — Clean up while tests stay green (REFACTOR)
104
+ 6. **Repeat** — Next behavior, next test, next cycle
105
+
106
+ ### File Organization
107
+
108
+ - Test file lives next to production file: `user.ts` → `user.test.ts`
109
+ - Follow project's existing test conventions (Jest, Vitest, pytest, etc.)
110
+ - Import the module under test, not internal helpers
111
+
112
+ ### What to Test
113
+
114
+ | Test | Don't Test |
115
+ |------|-----------|
116
+ | Public API behavior | Private implementation details |
117
+ | Error conditions and edge cases | Framework internals |
118
+ | Integration points (boundaries) | Third-party library correctness |
119
+ | State transitions | Getter/setter plumbing (unless non-trivial) |
120
+
121
+ ---
122
+
123
+ ## When TDD Does Not Apply
124
+
125
+ - **QUICK depth** — Ambient classified as QUICK (chat, exploration, trivial edits)
126
+ - **Non-code tasks** — Documentation, configuration, CI changes
127
+ - **Exploratory prototyping** — User explicitly says "just spike this" or "prototype"
128
+ - **Existing test suite changes** — Modifying tests themselves (test-patterns skill applies instead)
129
+
130
+ When skipping TDD, never rationalize. State clearly: "Skipping TDD because: [specific reason from list above]."
131
+
132
+ ---
133
+
134
+ ## Integration with Ambient Mode
135
+
136
+ - **BUILD/STANDARD** → TDD enforced. Every new function/method gets test-first treatment.
137
+ - **BUILD/QUICK** → TDD skipped (trivial single-file edit).
138
+ - **BUILD/ESCALATE** → TDD mentioned in nudge toward `/implement`.
139
+ - **DEBUG/STANDARD** → TDD applies to the fix: write a test that reproduces the bug first, then fix.