devflow-kit 0.8.1 → 1.0.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 (395) hide show
  1. package/CHANGELOG.md +185 -29
  2. package/LICENSE +1 -1
  3. package/README.md +179 -308
  4. package/dist/cli.js +3 -1
  5. package/dist/commands/init.d.ts +21 -0
  6. package/dist/commands/init.js +311 -575
  7. package/dist/commands/list.d.ts +3 -0
  8. package/dist/commands/list.js +20 -0
  9. package/dist/commands/uninstall.d.ts +10 -0
  10. package/dist/commands/uninstall.js +351 -78
  11. package/dist/plugins.d.ts +46 -0
  12. package/dist/plugins.js +162 -0
  13. package/dist/utils/cli.d.ts +5 -0
  14. package/dist/utils/cli.js +14 -0
  15. package/dist/utils/installer.d.ts +41 -0
  16. package/dist/utils/installer.js +177 -0
  17. package/dist/utils/paths.d.ts +10 -0
  18. package/dist/utils/paths.js +23 -3
  19. package/dist/utils/post-install.d.ts +68 -0
  20. package/dist/utils/post-install.js +427 -0
  21. package/dist/utils/safe-delete-install.d.ts +22 -0
  22. package/dist/utils/safe-delete-install.js +156 -0
  23. package/dist/utils/safe-delete.d.ts +12 -0
  24. package/dist/utils/safe-delete.js +83 -0
  25. package/package.json +18 -8
  26. package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +7 -0
  27. package/plugins/devflow-audit-claude/README.md +46 -0
  28. package/plugins/devflow-audit-claude/agents/claude-md-auditor.md +134 -0
  29. package/plugins/devflow-audit-claude/commands/audit-claude.md +85 -0
  30. package/plugins/devflow-code-review/.claude-plugin/plugin.json +31 -0
  31. package/plugins/devflow-code-review/README.md +73 -0
  32. package/plugins/devflow-code-review/agents/git.md +272 -0
  33. package/plugins/devflow-code-review/agents/reviewer.md +119 -0
  34. package/plugins/devflow-code-review/agents/synthesizer.md +204 -0
  35. package/plugins/devflow-code-review/commands/code-review-teams.md +262 -0
  36. package/plugins/devflow-code-review/commands/code-review.md +141 -0
  37. package/plugins/devflow-code-review/skills/accessibility/SKILL.md +229 -0
  38. package/plugins/devflow-code-review/skills/accessibility/references/detection.md +171 -0
  39. package/plugins/devflow-code-review/skills/accessibility/references/patterns.md +670 -0
  40. package/plugins/devflow-code-review/skills/accessibility/references/violations.md +419 -0
  41. package/plugins/devflow-code-review/skills/agent-teams/SKILL.md +124 -0
  42. package/plugins/devflow-code-review/skills/agent-teams/references/cleanup.md +104 -0
  43. package/plugins/devflow-code-review/skills/agent-teams/references/communication.md +122 -0
  44. package/plugins/devflow-code-review/skills/agent-teams/references/team-patterns.md +217 -0
  45. package/plugins/devflow-code-review/skills/architecture-patterns/SKILL.md +153 -0
  46. package/plugins/devflow-code-review/skills/architecture-patterns/references/detection.md +337 -0
  47. package/plugins/devflow-code-review/skills/architecture-patterns/references/patterns.md +873 -0
  48. package/plugins/devflow-code-review/skills/architecture-patterns/references/violations.md +575 -0
  49. package/plugins/devflow-code-review/skills/complexity-patterns/SKILL.md +143 -0
  50. package/plugins/devflow-code-review/skills/complexity-patterns/references/detection.md +264 -0
  51. package/plugins/devflow-code-review/skills/complexity-patterns/references/patterns.md +487 -0
  52. package/plugins/devflow-code-review/skills/complexity-patterns/references/violations.md +361 -0
  53. package/plugins/devflow-code-review/skills/consistency-patterns/SKILL.md +140 -0
  54. package/plugins/devflow-code-review/skills/consistency-patterns/references/detection.md +207 -0
  55. package/plugins/devflow-code-review/skills/consistency-patterns/references/patterns.md +202 -0
  56. package/plugins/devflow-code-review/skills/consistency-patterns/references/violations.md +213 -0
  57. package/plugins/devflow-code-review/skills/database-patterns/SKILL.md +134 -0
  58. package/plugins/devflow-code-review/skills/database-patterns/references/detection.md +208 -0
  59. package/plugins/devflow-code-review/skills/database-patterns/references/patterns.md +394 -0
  60. package/plugins/devflow-code-review/skills/database-patterns/references/violations.md +332 -0
  61. package/plugins/devflow-code-review/skills/dependencies-patterns/SKILL.md +141 -0
  62. package/plugins/devflow-code-review/skills/dependencies-patterns/references/detection.md +181 -0
  63. package/plugins/devflow-code-review/skills/dependencies-patterns/references/patterns.md +225 -0
  64. package/plugins/devflow-code-review/skills/dependencies-patterns/references/violations.md +247 -0
  65. package/plugins/devflow-code-review/skills/documentation-patterns/SKILL.md +125 -0
  66. package/plugins/devflow-code-review/skills/documentation-patterns/references/detection.md +190 -0
  67. package/plugins/devflow-code-review/skills/documentation-patterns/references/patterns.md +189 -0
  68. package/plugins/devflow-code-review/skills/documentation-patterns/references/violations.md +163 -0
  69. package/plugins/devflow-code-review/skills/frontend-design/SKILL.md +254 -0
  70. package/plugins/devflow-code-review/skills/frontend-design/references/detection.md +184 -0
  71. package/plugins/devflow-code-review/skills/frontend-design/references/patterns.md +511 -0
  72. package/plugins/devflow-code-review/skills/frontend-design/references/violations.md +453 -0
  73. package/plugins/devflow-code-review/skills/performance-patterns/SKILL.md +154 -0
  74. package/plugins/devflow-code-review/skills/performance-patterns/references/detection.md +351 -0
  75. package/plugins/devflow-code-review/skills/performance-patterns/references/patterns.md +503 -0
  76. package/plugins/devflow-code-review/skills/performance-patterns/references/violations.md +354 -0
  77. package/plugins/devflow-code-review/skills/react/SKILL.md +276 -0
  78. package/plugins/devflow-code-review/skills/react/references/patterns.md +1331 -0
  79. package/plugins/devflow-code-review/skills/react/references/violations.md +565 -0
  80. package/plugins/devflow-code-review/skills/regression-patterns/SKILL.md +146 -0
  81. package/plugins/devflow-code-review/skills/regression-patterns/references/detection.md +237 -0
  82. package/plugins/devflow-code-review/skills/regression-patterns/references/patterns.md +226 -0
  83. package/plugins/devflow-code-review/skills/regression-patterns/references/violations.md +225 -0
  84. package/plugins/devflow-code-review/skills/review-methodology/SKILL.md +119 -0
  85. package/plugins/devflow-code-review/skills/review-methodology/references/patterns.md +186 -0
  86. package/plugins/devflow-code-review/skills/review-methodology/references/report-template.md +142 -0
  87. package/plugins/devflow-code-review/skills/review-methodology/references/violations.md +125 -0
  88. package/plugins/devflow-code-review/skills/security-patterns/SKILL.md +156 -0
  89. package/plugins/devflow-code-review/skills/security-patterns/references/detection.md +287 -0
  90. package/plugins/devflow-code-review/skills/security-patterns/references/patterns.md +507 -0
  91. package/plugins/devflow-code-review/skills/security-patterns/references/violations.md +237 -0
  92. package/plugins/devflow-code-review/skills/test-patterns/SKILL.md +183 -0
  93. package/plugins/devflow-code-review/skills/test-patterns/references/detection.md +149 -0
  94. package/plugins/devflow-code-review/skills/test-patterns/references/patterns.md +220 -0
  95. package/plugins/devflow-code-review/skills/test-patterns/references/report-template.md +108 -0
  96. package/plugins/devflow-code-review/skills/test-patterns/references/violations.md +221 -0
  97. package/plugins/devflow-core-skills/.claude-plugin/plugin.json +27 -0
  98. package/plugins/devflow-core-skills/README.md +50 -0
  99. package/plugins/devflow-core-skills/skills/accessibility/SKILL.md +229 -0
  100. package/plugins/devflow-core-skills/skills/accessibility/references/detection.md +171 -0
  101. package/plugins/devflow-core-skills/skills/accessibility/references/patterns.md +670 -0
  102. package/plugins/devflow-core-skills/skills/accessibility/references/violations.md +419 -0
  103. package/plugins/devflow-core-skills/skills/core-patterns/SKILL.md +162 -0
  104. package/plugins/devflow-core-skills/skills/core-patterns/references/checklist.md +276 -0
  105. package/plugins/devflow-core-skills/skills/core-patterns/references/code-smell-violations.md +144 -0
  106. package/plugins/devflow-core-skills/skills/core-patterns/references/detection.md +303 -0
  107. package/plugins/devflow-core-skills/skills/core-patterns/references/patterns.md +576 -0
  108. package/plugins/devflow-core-skills/skills/core-patterns/references/violations.md +369 -0
  109. package/plugins/devflow-core-skills/skills/docs-framework/SKILL.md +134 -0
  110. package/plugins/devflow-core-skills/skills/docs-framework/references/patterns.md +346 -0
  111. package/plugins/devflow-core-skills/skills/docs-framework/references/violations.md +221 -0
  112. package/plugins/devflow-core-skills/skills/frontend-design/SKILL.md +254 -0
  113. package/plugins/devflow-core-skills/skills/frontend-design/references/detection.md +184 -0
  114. package/plugins/devflow-core-skills/skills/frontend-design/references/patterns.md +511 -0
  115. package/plugins/devflow-core-skills/skills/frontend-design/references/violations.md +453 -0
  116. package/plugins/devflow-core-skills/skills/git-safety/SKILL.md +122 -0
  117. package/plugins/devflow-core-skills/skills/git-safety/references/detection.md +290 -0
  118. package/plugins/devflow-core-skills/skills/git-safety/references/patterns.md +289 -0
  119. package/plugins/devflow-core-skills/skills/git-safety/references/violations.md +18 -0
  120. package/plugins/devflow-core-skills/skills/git-workflow/SKILL.md +158 -0
  121. package/plugins/devflow-core-skills/skills/git-workflow/references/commit-patterns.md +115 -0
  122. package/plugins/devflow-core-skills/skills/git-workflow/references/commit-violations.md +77 -0
  123. package/plugins/devflow-core-skills/skills/git-workflow/references/pr-patterns.md +127 -0
  124. package/plugins/devflow-core-skills/skills/git-workflow/references/pr-violations.md +96 -0
  125. package/plugins/devflow-core-skills/skills/github-patterns/SKILL.md +153 -0
  126. package/plugins/devflow-core-skills/skills/github-patterns/references/patterns.md +572 -0
  127. package/plugins/devflow-core-skills/skills/github-patterns/references/violations.md +298 -0
  128. package/plugins/devflow-core-skills/skills/input-validation/SKILL.md +148 -0
  129. package/plugins/devflow-core-skills/skills/input-validation/references/detection.md +283 -0
  130. package/plugins/devflow-core-skills/skills/input-validation/references/patterns.md +361 -0
  131. package/plugins/devflow-core-skills/skills/input-validation/references/violations.md +224 -0
  132. package/plugins/devflow-core-skills/skills/react/SKILL.md +276 -0
  133. package/plugins/devflow-core-skills/skills/react/references/patterns.md +1331 -0
  134. package/plugins/devflow-core-skills/skills/react/references/violations.md +565 -0
  135. package/plugins/devflow-core-skills/skills/test-patterns/SKILL.md +183 -0
  136. package/plugins/devflow-core-skills/skills/test-patterns/references/detection.md +149 -0
  137. package/plugins/devflow-core-skills/skills/test-patterns/references/patterns.md +220 -0
  138. package/plugins/devflow-core-skills/skills/test-patterns/references/report-template.md +108 -0
  139. package/plugins/devflow-core-skills/skills/test-patterns/references/violations.md +221 -0
  140. package/plugins/devflow-core-skills/skills/typescript/SKILL.md +176 -0
  141. package/plugins/devflow-core-skills/skills/typescript/references/patterns.md +1105 -0
  142. package/plugins/devflow-core-skills/skills/typescript/references/violations.md +433 -0
  143. package/plugins/devflow-debug/.claude-plugin/plugin.json +18 -0
  144. package/plugins/devflow-debug/README.md +65 -0
  145. package/plugins/devflow-debug/agents/git.md +272 -0
  146. package/plugins/devflow-debug/commands/debug-teams.md +231 -0
  147. package/plugins/devflow-debug/commands/debug.md +160 -0
  148. package/plugins/devflow-debug/skills/agent-teams/SKILL.md +124 -0
  149. package/plugins/devflow-debug/skills/agent-teams/references/cleanup.md +104 -0
  150. package/plugins/devflow-debug/skills/agent-teams/references/communication.md +122 -0
  151. package/plugins/devflow-debug/skills/agent-teams/references/team-patterns.md +217 -0
  152. package/plugins/devflow-debug/skills/git-safety/SKILL.md +122 -0
  153. package/plugins/devflow-debug/skills/git-safety/references/detection.md +290 -0
  154. package/plugins/devflow-debug/skills/git-safety/references/patterns.md +289 -0
  155. package/plugins/devflow-debug/skills/git-safety/references/violations.md +18 -0
  156. package/plugins/devflow-implement/.claude-plugin/plugin.json +21 -0
  157. package/plugins/devflow-implement/README.md +71 -0
  158. package/plugins/devflow-implement/agents/coder.md +122 -0
  159. package/plugins/devflow-implement/agents/git.md +272 -0
  160. package/plugins/devflow-implement/agents/scrutinizer.md +80 -0
  161. package/plugins/devflow-implement/agents/shepherd.md +94 -0
  162. package/plugins/devflow-implement/agents/simplifier.md +62 -0
  163. package/plugins/devflow-implement/agents/skimmer.md +88 -0
  164. package/plugins/devflow-implement/agents/synthesizer.md +204 -0
  165. package/plugins/devflow-implement/agents/validator.md +86 -0
  166. package/plugins/devflow-implement/commands/implement-teams.md +608 -0
  167. package/plugins/devflow-implement/commands/implement.md +426 -0
  168. package/plugins/devflow-implement/skills/accessibility/SKILL.md +229 -0
  169. package/plugins/devflow-implement/skills/accessibility/references/detection.md +171 -0
  170. package/plugins/devflow-implement/skills/accessibility/references/patterns.md +670 -0
  171. package/plugins/devflow-implement/skills/accessibility/references/violations.md +419 -0
  172. package/plugins/devflow-implement/skills/agent-teams/SKILL.md +124 -0
  173. package/plugins/devflow-implement/skills/agent-teams/references/cleanup.md +104 -0
  174. package/plugins/devflow-implement/skills/agent-teams/references/communication.md +122 -0
  175. package/plugins/devflow-implement/skills/agent-teams/references/team-patterns.md +217 -0
  176. package/plugins/devflow-implement/skills/frontend-design/SKILL.md +254 -0
  177. package/plugins/devflow-implement/skills/frontend-design/references/detection.md +184 -0
  178. package/plugins/devflow-implement/skills/frontend-design/references/patterns.md +511 -0
  179. package/plugins/devflow-implement/skills/frontend-design/references/violations.md +453 -0
  180. package/plugins/devflow-implement/skills/implementation-patterns/SKILL.md +162 -0
  181. package/plugins/devflow-implement/skills/implementation-patterns/references/patterns.md +1063 -0
  182. package/plugins/devflow-implement/skills/implementation-patterns/references/violations.md +483 -0
  183. package/plugins/devflow-implement/skills/self-review/SKILL.md +149 -0
  184. package/plugins/devflow-implement/skills/self-review/references/patterns.md +405 -0
  185. package/plugins/devflow-implement/skills/self-review/references/report-template.md +253 -0
  186. package/plugins/devflow-implement/skills/self-review/references/violations.md +308 -0
  187. package/plugins/devflow-resolve/.claude-plugin/plugin.json +19 -0
  188. package/plugins/devflow-resolve/README.md +65 -0
  189. package/plugins/devflow-resolve/agents/git.md +272 -0
  190. package/plugins/devflow-resolve/agents/resolver.md +131 -0
  191. package/plugins/devflow-resolve/agents/simplifier.md +62 -0
  192. package/plugins/devflow-resolve/commands/resolve-teams.md +298 -0
  193. package/plugins/devflow-resolve/commands/resolve.md +237 -0
  194. package/plugins/devflow-resolve/skills/agent-teams/SKILL.md +124 -0
  195. package/plugins/devflow-resolve/skills/agent-teams/references/cleanup.md +104 -0
  196. package/plugins/devflow-resolve/skills/agent-teams/references/communication.md +122 -0
  197. package/plugins/devflow-resolve/skills/agent-teams/references/team-patterns.md +217 -0
  198. package/plugins/devflow-resolve/skills/implementation-patterns/SKILL.md +162 -0
  199. package/plugins/devflow-resolve/skills/implementation-patterns/references/patterns.md +1063 -0
  200. package/plugins/devflow-resolve/skills/implementation-patterns/references/violations.md +483 -0
  201. package/plugins/devflow-resolve/skills/security-patterns/SKILL.md +156 -0
  202. package/plugins/devflow-resolve/skills/security-patterns/references/detection.md +287 -0
  203. package/plugins/devflow-resolve/skills/security-patterns/references/patterns.md +507 -0
  204. package/plugins/devflow-resolve/skills/security-patterns/references/violations.md +237 -0
  205. package/plugins/devflow-self-review/.claude-plugin/plugin.json +7 -0
  206. package/plugins/devflow-self-review/README.md +38 -0
  207. package/plugins/devflow-self-review/agents/scrutinizer.md +80 -0
  208. package/plugins/devflow-self-review/agents/simplifier.md +62 -0
  209. package/plugins/devflow-self-review/agents/validator.md +86 -0
  210. package/plugins/devflow-self-review/commands/self-review.md +126 -0
  211. package/plugins/devflow-self-review/skills/core-patterns/SKILL.md +162 -0
  212. package/plugins/devflow-self-review/skills/core-patterns/references/checklist.md +276 -0
  213. package/plugins/devflow-self-review/skills/core-patterns/references/code-smell-violations.md +144 -0
  214. package/plugins/devflow-self-review/skills/core-patterns/references/detection.md +303 -0
  215. package/plugins/devflow-self-review/skills/core-patterns/references/patterns.md +576 -0
  216. package/plugins/devflow-self-review/skills/core-patterns/references/violations.md +369 -0
  217. package/plugins/devflow-self-review/skills/self-review/SKILL.md +149 -0
  218. package/plugins/devflow-self-review/skills/self-review/references/patterns.md +405 -0
  219. package/plugins/devflow-self-review/skills/self-review/references/report-template.md +253 -0
  220. package/plugins/devflow-self-review/skills/self-review/references/violations.md +308 -0
  221. package/plugins/devflow-specify/.claude-plugin/plugin.json +15 -0
  222. package/plugins/devflow-specify/README.md +46 -0
  223. package/plugins/devflow-specify/agents/skimmer.md +88 -0
  224. package/plugins/devflow-specify/agents/synthesizer.md +204 -0
  225. package/plugins/devflow-specify/commands/specify-teams.md +314 -0
  226. package/plugins/devflow-specify/commands/specify.md +179 -0
  227. package/plugins/devflow-specify/skills/agent-teams/SKILL.md +124 -0
  228. package/plugins/devflow-specify/skills/agent-teams/references/cleanup.md +104 -0
  229. package/plugins/devflow-specify/skills/agent-teams/references/communication.md +122 -0
  230. package/plugins/devflow-specify/skills/agent-teams/references/team-patterns.md +217 -0
  231. package/scripts/hooks/background-memory-update.sh +167 -0
  232. package/scripts/hooks/pre-compact-memory.sh +81 -0
  233. package/scripts/hooks/session-start-memory.sh +84 -0
  234. package/scripts/hooks/stop-update-memory.sh +81 -0
  235. package/shared/agents/coder.md +122 -0
  236. package/shared/agents/git.md +272 -0
  237. package/shared/agents/resolver.md +131 -0
  238. package/shared/agents/reviewer.md +119 -0
  239. package/shared/agents/scrutinizer.md +80 -0
  240. package/shared/agents/shepherd.md +94 -0
  241. package/shared/agents/simplifier.md +62 -0
  242. package/shared/agents/skimmer.md +88 -0
  243. package/shared/agents/synthesizer.md +204 -0
  244. package/shared/agents/validator.md +86 -0
  245. package/shared/skills/accessibility/SKILL.md +229 -0
  246. package/shared/skills/accessibility/references/detection.md +171 -0
  247. package/shared/skills/accessibility/references/patterns.md +670 -0
  248. package/shared/skills/accessibility/references/violations.md +419 -0
  249. package/shared/skills/agent-teams/SKILL.md +124 -0
  250. package/shared/skills/agent-teams/references/cleanup.md +104 -0
  251. package/shared/skills/agent-teams/references/communication.md +122 -0
  252. package/shared/skills/agent-teams/references/team-patterns.md +217 -0
  253. package/shared/skills/architecture-patterns/SKILL.md +153 -0
  254. package/shared/skills/architecture-patterns/references/detection.md +337 -0
  255. package/shared/skills/architecture-patterns/references/patterns.md +873 -0
  256. package/shared/skills/architecture-patterns/references/violations.md +575 -0
  257. package/shared/skills/complexity-patterns/SKILL.md +143 -0
  258. package/shared/skills/complexity-patterns/references/detection.md +264 -0
  259. package/shared/skills/complexity-patterns/references/patterns.md +487 -0
  260. package/shared/skills/complexity-patterns/references/violations.md +361 -0
  261. package/shared/skills/consistency-patterns/SKILL.md +140 -0
  262. package/shared/skills/consistency-patterns/references/detection.md +207 -0
  263. package/shared/skills/consistency-patterns/references/patterns.md +202 -0
  264. package/shared/skills/consistency-patterns/references/violations.md +213 -0
  265. package/shared/skills/core-patterns/SKILL.md +162 -0
  266. package/shared/skills/core-patterns/references/checklist.md +276 -0
  267. package/shared/skills/core-patterns/references/code-smell-violations.md +144 -0
  268. package/shared/skills/core-patterns/references/detection.md +303 -0
  269. package/shared/skills/core-patterns/references/patterns.md +576 -0
  270. package/shared/skills/core-patterns/references/violations.md +369 -0
  271. package/shared/skills/database-patterns/SKILL.md +134 -0
  272. package/shared/skills/database-patterns/references/detection.md +208 -0
  273. package/shared/skills/database-patterns/references/patterns.md +394 -0
  274. package/shared/skills/database-patterns/references/violations.md +332 -0
  275. package/shared/skills/dependencies-patterns/SKILL.md +141 -0
  276. package/shared/skills/dependencies-patterns/references/detection.md +181 -0
  277. package/shared/skills/dependencies-patterns/references/patterns.md +225 -0
  278. package/shared/skills/dependencies-patterns/references/violations.md +247 -0
  279. package/shared/skills/docs-framework/SKILL.md +134 -0
  280. package/shared/skills/docs-framework/references/patterns.md +346 -0
  281. package/shared/skills/docs-framework/references/violations.md +221 -0
  282. package/shared/skills/documentation-patterns/SKILL.md +125 -0
  283. package/shared/skills/documentation-patterns/references/detection.md +190 -0
  284. package/shared/skills/documentation-patterns/references/patterns.md +189 -0
  285. package/shared/skills/documentation-patterns/references/violations.md +163 -0
  286. package/shared/skills/frontend-design/SKILL.md +254 -0
  287. package/shared/skills/frontend-design/references/detection.md +184 -0
  288. package/shared/skills/frontend-design/references/patterns.md +511 -0
  289. package/shared/skills/frontend-design/references/violations.md +453 -0
  290. package/shared/skills/git-safety/SKILL.md +122 -0
  291. package/shared/skills/git-safety/references/detection.md +290 -0
  292. package/shared/skills/git-safety/references/patterns.md +289 -0
  293. package/shared/skills/git-safety/references/violations.md +18 -0
  294. package/shared/skills/git-workflow/SKILL.md +158 -0
  295. package/shared/skills/git-workflow/references/commit-patterns.md +115 -0
  296. package/shared/skills/git-workflow/references/commit-violations.md +77 -0
  297. package/shared/skills/git-workflow/references/pr-patterns.md +127 -0
  298. package/shared/skills/git-workflow/references/pr-violations.md +96 -0
  299. package/shared/skills/github-patterns/SKILL.md +153 -0
  300. package/shared/skills/github-patterns/references/patterns.md +572 -0
  301. package/shared/skills/github-patterns/references/violations.md +298 -0
  302. package/shared/skills/implementation-patterns/SKILL.md +162 -0
  303. package/shared/skills/implementation-patterns/references/patterns.md +1063 -0
  304. package/shared/skills/implementation-patterns/references/violations.md +483 -0
  305. package/shared/skills/input-validation/SKILL.md +148 -0
  306. package/shared/skills/input-validation/references/detection.md +283 -0
  307. package/shared/skills/input-validation/references/patterns.md +361 -0
  308. package/shared/skills/input-validation/references/violations.md +224 -0
  309. package/shared/skills/performance-patterns/SKILL.md +154 -0
  310. package/shared/skills/performance-patterns/references/detection.md +351 -0
  311. package/shared/skills/performance-patterns/references/patterns.md +503 -0
  312. package/shared/skills/performance-patterns/references/violations.md +354 -0
  313. package/shared/skills/react/SKILL.md +276 -0
  314. package/shared/skills/react/references/patterns.md +1331 -0
  315. package/shared/skills/react/references/violations.md +565 -0
  316. package/shared/skills/regression-patterns/SKILL.md +146 -0
  317. package/shared/skills/regression-patterns/references/detection.md +237 -0
  318. package/shared/skills/regression-patterns/references/patterns.md +226 -0
  319. package/shared/skills/regression-patterns/references/violations.md +225 -0
  320. package/shared/skills/review-methodology/SKILL.md +119 -0
  321. package/shared/skills/review-methodology/references/patterns.md +186 -0
  322. package/shared/skills/review-methodology/references/report-template.md +142 -0
  323. package/shared/skills/review-methodology/references/violations.md +125 -0
  324. package/shared/skills/security-patterns/SKILL.md +156 -0
  325. package/shared/skills/security-patterns/references/detection.md +287 -0
  326. package/shared/skills/security-patterns/references/patterns.md +507 -0
  327. package/shared/skills/security-patterns/references/violations.md +237 -0
  328. package/shared/skills/self-review/SKILL.md +149 -0
  329. package/shared/skills/self-review/references/patterns.md +405 -0
  330. package/shared/skills/self-review/references/report-template.md +253 -0
  331. package/shared/skills/self-review/references/violations.md +308 -0
  332. package/shared/skills/test-patterns/SKILL.md +183 -0
  333. package/shared/skills/test-patterns/references/detection.md +149 -0
  334. package/shared/skills/test-patterns/references/patterns.md +220 -0
  335. package/shared/skills/test-patterns/references/report-template.md +108 -0
  336. package/shared/skills/test-patterns/references/violations.md +221 -0
  337. package/shared/skills/typescript/SKILL.md +176 -0
  338. package/shared/skills/typescript/references/patterns.md +1105 -0
  339. package/shared/skills/typescript/references/violations.md +433 -0
  340. package/src/templates/claudeignore.template +188 -0
  341. package/src/templates/managed-settings.json +146 -0
  342. package/src/templates/settings.json +59 -0
  343. package/dist/cli.d.ts.map +0 -1
  344. package/dist/cli.js.map +0 -1
  345. package/dist/commands/init.d.ts.map +0 -1
  346. package/dist/commands/init.js.map +0 -1
  347. package/dist/commands/uninstall.d.ts.map +0 -1
  348. package/dist/commands/uninstall.js.map +0 -1
  349. package/dist/utils/git.d.ts.map +0 -1
  350. package/dist/utils/git.js.map +0 -1
  351. package/dist/utils/paths.d.ts.map +0 -1
  352. package/dist/utils/paths.js.map +0 -1
  353. package/src/claude/CLAUDE.md +0 -400
  354. package/src/claude/agents/devflow/audit-architecture.md +0 -132
  355. package/src/claude/agents/devflow/audit-complexity.md +0 -132
  356. package/src/claude/agents/devflow/audit-database.md +0 -132
  357. package/src/claude/agents/devflow/audit-dependencies.md +0 -132
  358. package/src/claude/agents/devflow/audit-documentation.md +0 -132
  359. package/src/claude/agents/devflow/audit-performance.md +0 -256
  360. package/src/claude/agents/devflow/audit-security.md +0 -259
  361. package/src/claude/agents/devflow/audit-tests.md +0 -132
  362. package/src/claude/agents/devflow/audit-typescript.md +0 -132
  363. package/src/claude/agents/devflow/brainstorm.md +0 -279
  364. package/src/claude/agents/devflow/catch-up.md +0 -345
  365. package/src/claude/agents/devflow/code-review.md +0 -307
  366. package/src/claude/agents/devflow/commit.md +0 -380
  367. package/src/claude/agents/devflow/debug.md +0 -476
  368. package/src/claude/agents/devflow/design.md +0 -491
  369. package/src/claude/agents/devflow/pr-comments.md +0 -285
  370. package/src/claude/agents/devflow/project-state.md +0 -419
  371. package/src/claude/agents/devflow/pull-request.md +0 -423
  372. package/src/claude/agents/devflow/release.md +0 -1137
  373. package/src/claude/agents/devflow/tech-debt.md +0 -338
  374. package/src/claude/commands/devflow/brainstorm.md +0 -68
  375. package/src/claude/commands/devflow/breakdown.md +0 -125
  376. package/src/claude/commands/devflow/catch-up.md +0 -29
  377. package/src/claude/commands/devflow/code-review.md +0 -237
  378. package/src/claude/commands/devflow/commit.md +0 -17
  379. package/src/claude/commands/devflow/debug.md +0 -56
  380. package/src/claude/commands/devflow/design.md +0 -82
  381. package/src/claude/commands/devflow/devlog.md +0 -408
  382. package/src/claude/commands/devflow/implement.md +0 -100
  383. package/src/claude/commands/devflow/plan.md +0 -223
  384. package/src/claude/commands/devflow/pull-request.md +0 -269
  385. package/src/claude/commands/devflow/release.md +0 -251
  386. package/src/claude/commands/devflow/resolve-comments.md +0 -583
  387. package/src/claude/scripts/statusline.sh +0 -47
  388. package/src/claude/settings.json +0 -6
  389. package/src/claude/skills/devflow/code-smell/SKILL.md +0 -428
  390. package/src/claude/skills/devflow/debug/SKILL.md +0 -119
  391. package/src/claude/skills/devflow/error-handling/SKILL.md +0 -597
  392. package/src/claude/skills/devflow/input-validation/SKILL.md +0 -514
  393. package/src/claude/skills/devflow/pattern-check/SKILL.md +0 -238
  394. package/src/claude/skills/devflow/research/SKILL.md +0 -138
  395. package/src/claude/skills/devflow/test-design/SKILL.md +0 -384
@@ -0,0 +1,283 @@
1
+ # Validation Issue Detection
2
+
3
+ Grep patterns and report templates for finding validation issues.
4
+
5
+ ## Quick Detection Commands
6
+
7
+ ### Find Unvalidated Request Body Usage
8
+
9
+ ```bash
10
+ # Express/Node.js
11
+ grep -rn "req\.body" --include="*.ts" --include="*.js" | grep -v "safeParse\|validate\|schema"
12
+
13
+ # Look for direct property access without validation
14
+ grep -rn "req\.body\.\w" --include="*.ts" --include="*.js"
15
+ ```
16
+
17
+ ### Find Unvalidated Parameters
18
+
19
+ ```bash
20
+ # Path parameters
21
+ grep -rn "req\.params\.\w" --include="*.ts" --include="*.js" | grep -v "safeParse\|validate"
22
+
23
+ # Query parameters
24
+ grep -rn "req\.query\.\w" --include="*.ts" --include="*.js" | grep -v "safeParse\|validate"
25
+ ```
26
+
27
+ ### Find SQL Injection Risks
28
+
29
+ ```bash
30
+ # Template literals with SQL
31
+ grep -rn '`.*SELECT.*\${' --include="*.ts" --include="*.js"
32
+ grep -rn '`.*INSERT.*\${' --include="*.ts" --include="*.js"
33
+ grep -rn '`.*UPDATE.*\${' --include="*.ts" --include="*.js"
34
+ grep -rn '`.*DELETE.*\${' --include="*.ts" --include="*.js"
35
+
36
+ # String concatenation in queries
37
+ grep -rn "'\s*\+\s*.*\+\s*'" --include="*.ts" --include="*.js" | grep -i "select\|insert\|update\|delete"
38
+ ```
39
+
40
+ ### Find Unvalidated External Data
41
+
42
+ ```bash
43
+ # JSON.parse without validation
44
+ grep -rn "JSON\.parse" --include="*.ts" --include="*.js" | grep -v "safeParse\|try"
45
+
46
+ # fetch responses used directly
47
+ grep -rn "\.json()" --include="*.ts" --include="*.js" | grep -v "safeParse\|schema\|validate"
48
+ ```
49
+
50
+ ### Find Unvalidated Environment Variables
51
+
52
+ ```bash
53
+ # Direct process.env usage
54
+ grep -rn "process\.env\.\w" --include="*.ts" --include="*.js" | grep -v "safeParse\|validate\|ConfigSchema"
55
+ ```
56
+
57
+ ### Find Dangerous Functions
58
+
59
+ ```bash
60
+ # eval and Function constructor
61
+ grep -rn "eval\s*(" --include="*.ts" --include="*.js"
62
+ grep -rn "new\s*Function\s*(" --include="*.ts" --include="*.js"
63
+
64
+ # JWT decode without verify
65
+ grep -rn "jwt\.decode" --include="*.ts" --include="*.js" | grep -v "jwt\.verify"
66
+ ```
67
+
68
+ ---
69
+
70
+ ## Validation Report Format
71
+
72
+ When validation issues detected:
73
+
74
+ ```markdown
75
+ # INPUT VALIDATION ISSUES DETECTED
76
+
77
+ ## CRITICAL - Missing Boundary Validation
78
+ **File**: src/api/routes/users.ts:45
79
+ **Issue**: API endpoint accepts unvalidated user input
80
+ **Security Risk**: HIGH - Injection attacks, data corruption possible
81
+
82
+ **Current Code**:
83
+ ```typescript
84
+ app.post('/api/users', async (req, res) => {
85
+ const user = await createUser(req.body); // NO VALIDATION
86
+ res.json(user);
87
+ });
88
+ ```
89
+
90
+ **Required Fix**:
91
+ ```typescript
92
+ const UserRequestSchema = z.object({
93
+ body: z.object({
94
+ email: z.string().email().max(255),
95
+ name: z.string().min(1).max(100),
96
+ age: z.number().int().min(0).max(150)
97
+ })
98
+ });
99
+
100
+ app.post('/api/users', async (req, res) => {
101
+ const validation = UserRequestSchema.safeParse(req);
102
+
103
+ if (!validation.success) {
104
+ return res.status(400).json({ error: validation.error });
105
+ }
106
+
107
+ const result = await createUser(validation.data.body);
108
+ // ... handle result
109
+ });
110
+ ```
111
+
112
+ **Impact**: Prevents malicious input, ensures data integrity
113
+
114
+ ## CRITICAL - Manual Validation Instead of Schema
115
+ **File**: src/services/validation.ts:23
116
+ **Issue**: Manual type checking instead of schema validation
117
+ **Problem**: Scattered validation logic, incomplete checks
118
+
119
+ **Current Code**:
120
+ ```typescript
121
+ if (!data.email || typeof data.email !== 'string') {
122
+ throw new Error('Invalid email');
123
+ }
124
+ if (!data.age || typeof data.age !== 'number') {
125
+ throw new Error('Invalid age');
126
+ }
127
+ // ... 15 more manual checks
128
+ ```
129
+
130
+ **Required Fix**:
131
+ ```typescript
132
+ const UserSchema = z.object({
133
+ email: z.string().email().max(255),
134
+ age: z.number().int().min(0).max(150),
135
+ name: z.string().min(1).max(100),
136
+ // All validation rules in one place
137
+ });
138
+
139
+ const validation = UserSchema.safeParse(data);
140
+ if (!validation.success) {
141
+ return { ok: false, error: validation.error };
142
+ }
143
+ ```
144
+
145
+ **Impact**: Centralized validation, type safety, better error messages
146
+
147
+ ## CRITICAL - SQL Injection Risk
148
+ **File**: src/database/queries.ts:67
149
+ **Issue**: String interpolation in SQL query
150
+ **Security Risk**: CRITICAL - SQL injection possible
151
+
152
+ **Current Code**:
153
+ ```typescript
154
+ const query = `SELECT * FROM users WHERE email = '${email}'`;
155
+ ```
156
+
157
+ **Required Fix**:
158
+ ```typescript
159
+ // 1. Validate input
160
+ const validation = EmailSchema.safeParse(email);
161
+ if (!validation.success) {
162
+ return { ok: false, error: new Error('Invalid email') };
163
+ }
164
+
165
+ // 2. Use parameterized query
166
+ const query = 'SELECT * FROM users WHERE email = $1';
167
+ const result = await db.query(query, [validation.data]);
168
+ ```
169
+
170
+ **Impact**: Prevents SQL injection attacks (critical security issue)
171
+
172
+ ## HIGH - External API Response Not Validated
173
+ **File**: src/integrations/payment.ts:89
174
+ **Issue**: Trusting external API response without validation
175
+ **Risk**: Application crash if API changes structure
176
+
177
+ **Current Code**:
178
+ ```typescript
179
+ const data = await response.json();
180
+ return data.amount; // No validation
181
+ ```
182
+
183
+ **Required Fix**:
184
+ ```typescript
185
+ const PaymentResponseSchema = z.object({
186
+ amount: z.number().positive(),
187
+ currency: z.string().length(3),
188
+ status: z.enum(['success', 'failed', 'pending'])
189
+ });
190
+
191
+ const validation = PaymentResponseSchema.safeParse(await response.json());
192
+ if (!validation.success) {
193
+ return { ok: false, error: new Error('Invalid payment response') };
194
+ }
195
+
196
+ return { ok: true, value: validation.data.amount };
197
+ ```
198
+
199
+ ## Summary
200
+ - **Critical**: X validation issues (Y missing, Z SQL injection risks)
201
+ - **High**: X external data issues
202
+ - **Security Risk**: CRITICAL/HIGH/MEDIUM
203
+ - **Files affected**: X
204
+
205
+ ## SECURITY GATE FAILED
206
+
207
+ These validation gaps create serious security vulnerabilities:
208
+ 1. SQL injection possible in X locations
209
+ 2. Unvalidated user input in Y API endpoints
210
+ 3. External data trusted without validation
211
+
212
+ **DO NOT deploy until these are fixed.**
213
+
214
+ ## Required Actions
215
+
216
+ 1. **Immediate** (Security Critical):
217
+ - Fix SQL injection risks
218
+ - Add validation to all API endpoints
219
+
220
+ 2. **High Priority**:
221
+ - Validate all external API responses
222
+ - Validate environment variables on startup
223
+
224
+ 3. **Standard**:
225
+ - Replace manual validation with schemas
226
+ - Add validation tests
227
+
228
+ ## Implementation Guide
229
+
230
+ **Step 1**: Install validation library
231
+ ```bash
232
+ npm install zod # or appropriate library
233
+ ```
234
+
235
+ **Step 2**: Define schemas for all boundaries
236
+ ```typescript
237
+ // src/validation/schemas.ts
238
+ export const schemas = {
239
+ createUser: UserSchema,
240
+ updateUser: UpdateUserSchema,
241
+ searchQuery: SearchQuerySchema,
242
+ // ... all input shapes
243
+ };
244
+ ```
245
+
246
+ **Step 3**: Apply at boundaries
247
+ ```typescript
248
+ // Validate at entry point
249
+ const validation = schema.safeParse(input);
250
+ // Check result and proceed
251
+ ```
252
+
253
+ **Step 4**: Add tests
254
+ ```typescript
255
+ // Verify validation catches invalid input
256
+ ```
257
+ ```
258
+
259
+ ---
260
+
261
+ ## Risk Classification
262
+
263
+ | Issue Type | Risk Level | Fix Priority |
264
+ |------------|------------|--------------|
265
+ | SQL injection | CRITICAL | Immediate |
266
+ | Command injection | CRITICAL | Immediate |
267
+ | Path traversal | CRITICAL | Immediate |
268
+ | Missing auth validation | CRITICAL | Immediate |
269
+ | Unvalidated API input | HIGH | Same day |
270
+ | Unvalidated external data | HIGH | Same day |
271
+ | Manual validation | MEDIUM | This sprint |
272
+ | Missing env validation | MEDIUM | This sprint |
273
+ | Incomplete schemas | LOW | Next sprint |
274
+
275
+ ---
276
+
277
+ ## Integration Points
278
+
279
+ This skill works with:
280
+
281
+ - **core-patterns**: Ensures validation uses Result types, catches fake/incomplete validation
282
+ - **test-patterns**: Validates boundary tests exist
283
+ - **security-patterns**: Broader security review context
@@ -0,0 +1,361 @@
1
+ # Input Validation Correct Patterns
2
+
3
+ Extended examples of proper validation patterns.
4
+
5
+ ## Schema Validation at Boundary
6
+
7
+ ```typescript
8
+ import { z } from 'zod';
9
+
10
+ const UserSchema = z.object({
11
+ email: z.string().email().max(255),
12
+ age: z.number().int().min(0).max(150),
13
+ name: z.string().min(1).max(100)
14
+ });
15
+
16
+ type User = z.infer<typeof UserSchema>;
17
+
18
+ function createUser(data: unknown): Result<User, ValidationError> {
19
+ const validation = UserSchema.safeParse(data);
20
+
21
+ if (!validation.success) {
22
+ return {
23
+ ok: false,
24
+ error: new ValidationError('Invalid user data', validation.error)
25
+ };
26
+ }
27
+
28
+ // After this point, data is guaranteed valid User type
29
+ return { ok: true, value: validation.data };
30
+ }
31
+ ```
32
+
33
+ ---
34
+
35
+ ## API Endpoint Validation
36
+
37
+ ```typescript
38
+ const CreateUserRequestSchema = z.object({
39
+ body: UserSchema
40
+ });
41
+
42
+ app.post('/api/users', async (req, res) => {
43
+ const validation = CreateUserRequestSchema.safeParse(req);
44
+
45
+ if (!validation.success) {
46
+ return res.status(400).json({
47
+ error: 'Validation failed',
48
+ details: validation.error.issues
49
+ });
50
+ }
51
+
52
+ // Now req.body is safely typed as User
53
+ const result = await createUser(validation.data.body);
54
+
55
+ if (!result.ok) {
56
+ return res.status(500).json({ error: result.error.message });
57
+ }
58
+
59
+ res.json(result.value);
60
+ });
61
+ ```
62
+
63
+ ---
64
+
65
+ ## External API Response Validation
66
+
67
+ ```typescript
68
+ const ExternalUserSchema = z.object({
69
+ id: z.string().uuid(),
70
+ name: z.string(),
71
+ email: z.string().email(),
72
+ // Define exact structure we expect
73
+ });
74
+
75
+ async function fetchUserData(userId: string): Promise<Result<UserData, Error>> {
76
+ try {
77
+ const response = await fetch(`https://api.example.com/users/${userId}`);
78
+ const rawData = await response.json();
79
+
80
+ const validation = ExternalUserSchema.safeParse(rawData);
81
+
82
+ if (!validation.success) {
83
+ return {
84
+ ok: false,
85
+ error: new Error('External API returned invalid data')
86
+ };
87
+ }
88
+
89
+ return { ok: true, value: validation.data };
90
+ } catch (error) {
91
+ return { ok: false, error: error as Error };
92
+ }
93
+ }
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Environment Variable Validation
99
+
100
+ ```typescript
101
+ const ConfigSchema = z.object({
102
+ port: z.string().regex(/^\d+$/).transform(Number).pipe(z.number().min(1).max(65535)),
103
+ dbUrl: z.string().url().startsWith('postgresql://'),
104
+ apiKey: z.string().min(32).max(128)
105
+ });
106
+
107
+ function loadConfig(): Result<Config, Error> {
108
+ const validation = ConfigSchema.safeParse({
109
+ port: process.env.PORT,
110
+ dbUrl: process.env.DATABASE_URL,
111
+ apiKey: process.env.API_KEY
112
+ });
113
+
114
+ if (!validation.success) {
115
+ return {
116
+ ok: false,
117
+ error: new Error(`Invalid configuration: ${validation.error.message}`)
118
+ };
119
+ }
120
+
121
+ return { ok: true, value: validation.data };
122
+ }
123
+
124
+ // Application initialization
125
+ const configResult = loadConfig();
126
+ if (!configResult.ok) {
127
+ console.error('Failed to load configuration:', configResult.error);
128
+ process.exit(1);
129
+ }
130
+
131
+ const config = configResult.value; // Type-safe, validated config
132
+ ```
133
+
134
+ ---
135
+
136
+ ## Database Query with Validation
137
+
138
+ ```typescript
139
+ const EmailSchema = z.string().email().max(255);
140
+ const SearchTermSchema = z.string().min(1).max(100).regex(/^[a-zA-Z0-9\s-]+$/);
141
+
142
+ async function getUserByEmail(email: unknown): Promise<Result<User, Error>> {
143
+ const validation = EmailSchema.safeParse(email);
144
+
145
+ if (!validation.success) {
146
+ return { ok: false, error: new Error('Invalid email format') };
147
+ }
148
+
149
+ try {
150
+ // Parameterized query prevents SQL injection
151
+ const user = await db.query('SELECT * FROM users WHERE email = $1', [validation.data]);
152
+ return { ok: true, value: user };
153
+ } catch (error) {
154
+ return { ok: false, error: error as Error };
155
+ }
156
+ }
157
+
158
+ async function searchUsers(searchTerm: unknown): Promise<Result<User[], Error>> {
159
+ const validation = SearchTermSchema.safeParse(searchTerm);
160
+
161
+ if (!validation.success) {
162
+ return { ok: false, error: new Error('Invalid search term') };
163
+ }
164
+
165
+ try {
166
+ const users = await db.query(
167
+ 'SELECT * FROM users WHERE name ILIKE $1',
168
+ [`%${validation.data}%`]
169
+ );
170
+ return { ok: true, value: users };
171
+ } catch (error) {
172
+ return { ok: false, error: error as Error };
173
+ }
174
+ }
175
+ ```
176
+
177
+ ---
178
+
179
+ ## File Upload Validation
180
+
181
+ ```typescript
182
+ const FileUploadSchema = z.object({
183
+ name: z.string().max(255).regex(/^[a-zA-Z0-9._-]+$/),
184
+ size: z.number().max(10 * 1024 * 1024), // 10MB max
185
+ mimetype: z.enum(['image/jpeg', 'image/png', 'application/pdf']),
186
+ });
187
+
188
+ async function handleUpload(file: unknown): Promise<Result<string, Error>> {
189
+ const validation = FileUploadSchema.safeParse(file);
190
+
191
+ if (!validation.success) {
192
+ return { ok: false, error: new Error('Invalid file') };
193
+ }
194
+
195
+ const { name, size, mimetype } = validation.data;
196
+
197
+ // Additional content validation
198
+ const buffer = await readFileBuffer(file);
199
+ const detectedType = await fileType.fromBuffer(buffer);
200
+
201
+ if (detectedType?.mime !== mimetype) {
202
+ return { ok: false, error: new Error('File type mismatch') };
203
+ }
204
+
205
+ // Safe filename generation
206
+ const safeFilename = `${uuid()}_${name}`;
207
+ const safePath = path.join(UPLOAD_DIR, safeFilename);
208
+
209
+ await fs.writeFile(safePath, buffer);
210
+ return { ok: true, value: safeFilename };
211
+ }
212
+ ```
213
+
214
+ ---
215
+
216
+ ## URL Parameter Validation
217
+
218
+ ```typescript
219
+ const UserIdSchema = z.string().uuid();
220
+
221
+ app.get('/users/:id', async (req, res) => {
222
+ const validation = UserIdSchema.safeParse(req.params.id);
223
+
224
+ if (!validation.success) {
225
+ return res.status(400).json({ error: 'Invalid user ID format' });
226
+ }
227
+
228
+ const result = await getUserById(validation.data);
229
+
230
+ if (!result.ok) {
231
+ return res.status(404).json({ error: 'User not found' });
232
+ }
233
+
234
+ res.json(result.value);
235
+ });
236
+ ```
237
+
238
+ ---
239
+
240
+ ## Query String Validation
241
+
242
+ ```typescript
243
+ const SearchQuerySchema = z.object({
244
+ q: z.string().min(1).max(100),
245
+ page: z.coerce.number().int().min(1).default(1),
246
+ limit: z.coerce.number().int().min(1).max(100).default(20),
247
+ sort: z.enum(['name', 'date', 'relevance']).default('relevance'),
248
+ });
249
+
250
+ app.get('/search', async (req, res) => {
251
+ const validation = SearchQuerySchema.safeParse(req.query);
252
+
253
+ if (!validation.success) {
254
+ return res.status(400).json({
255
+ error: 'Invalid query parameters',
256
+ details: validation.error.issues
257
+ });
258
+ }
259
+
260
+ const { q, page, limit, sort } = validation.data;
261
+ const results = await searchService.search(q, { page, limit, sort });
262
+
263
+ res.json(results);
264
+ });
265
+ ```
266
+
267
+ ---
268
+
269
+ ## Webhook Signature Verification
270
+
271
+ ```typescript
272
+ const WebhookPayloadSchema = z.object({
273
+ event: z.enum(['payment.completed', 'payment.failed', 'subscription.created']),
274
+ data: z.object({
275
+ id: z.string(),
276
+ amount: z.number().optional(),
277
+ status: z.string(),
278
+ }),
279
+ timestamp: z.number(),
280
+ });
281
+
282
+ app.post('/webhook', async (req, res) => {
283
+ // 1. Verify signature first
284
+ const signature = req.headers['x-webhook-signature'];
285
+ const expectedSignature = crypto
286
+ .createHmac('sha256', WEBHOOK_SECRET)
287
+ .update(JSON.stringify(req.body))
288
+ .digest('hex');
289
+
290
+ if (signature !== expectedSignature) {
291
+ return res.status(401).json({ error: 'Invalid signature' });
292
+ }
293
+
294
+ // 2. Then validate payload structure
295
+ const validation = WebhookPayloadSchema.safeParse(req.body);
296
+
297
+ if (!validation.success) {
298
+ return res.status(400).json({ error: 'Invalid payload' });
299
+ }
300
+
301
+ // 3. Process verified and validated event
302
+ await processWebhookEvent(validation.data);
303
+ res.sendStatus(200);
304
+ });
305
+ ```
306
+
307
+ ---
308
+
309
+ ## GraphQL Input Validation
310
+
311
+ ```typescript
312
+ const UserFilterSchema = z.object({
313
+ name: z.string().max(100).optional(),
314
+ email: z.string().email().optional(),
315
+ status: z.enum(['active', 'inactive']).optional(),
316
+ limit: z.number().int().min(1).max(100).default(20),
317
+ });
318
+
319
+ const resolvers = {
320
+ Query: {
321
+ users: async (_, { filter }) => {
322
+ const validation = UserFilterSchema.safeParse(filter);
323
+
324
+ if (!validation.success) {
325
+ throw new GraphQLError('Invalid filter', {
326
+ extensions: { code: 'BAD_USER_INPUT' }
327
+ });
328
+ }
329
+
330
+ return userService.findUsers(validation.data);
331
+ },
332
+ },
333
+ };
334
+ ```
335
+
336
+ ---
337
+
338
+ ## Form Data Sanitization
339
+
340
+ ```typescript
341
+ import DOMPurify from 'isomorphic-dompurify';
342
+
343
+ const ProfileUpdateSchema = z.object({
344
+ bio: z.string().max(500).transform(s => DOMPurify.sanitize(s)),
345
+ website: z.string().url().optional(),
346
+ displayName: z.string().min(1).max(50),
347
+ });
348
+
349
+ app.post('/profile', async (req, res) => {
350
+ const validation = ProfileUpdateSchema.safeParse(req.body);
351
+
352
+ if (!validation.success) {
353
+ return res.status(400).json({ error: validation.error });
354
+ }
355
+
356
+ // bio is already sanitized by the schema transform
357
+ await db.users.update(req.userId, validation.data);
358
+
359
+ res.json({ success: true });
360
+ });
361
+ ```