devflow-kit 0.9.0 → 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 (397) hide show
  1. package/CHANGELOG.md +167 -29
  2. package/LICENSE +1 -1
  3. package/README.md +179 -310
  4. package/dist/cli.js +3 -1
  5. package/dist/commands/init.d.ts +21 -0
  6. package/dist/commands/init.js +311 -576
  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/get-issue.md +0 -286
  370. package/src/claude/agents/devflow/pr-comments.md +0 -285
  371. package/src/claude/agents/devflow/project-state.md +0 -419
  372. package/src/claude/agents/devflow/pull-request.md +0 -493
  373. package/src/claude/agents/devflow/release.md +0 -1137
  374. package/src/claude/agents/devflow/tech-debt.md +0 -338
  375. package/src/claude/commands/devflow/brainstorm.md +0 -68
  376. package/src/claude/commands/devflow/breakdown.md +0 -125
  377. package/src/claude/commands/devflow/catch-up.md +0 -29
  378. package/src/claude/commands/devflow/code-review.md +0 -237
  379. package/src/claude/commands/devflow/commit.md +0 -17
  380. package/src/claude/commands/devflow/debug.md +0 -56
  381. package/src/claude/commands/devflow/design.md +0 -82
  382. package/src/claude/commands/devflow/devlog.md +0 -408
  383. package/src/claude/commands/devflow/get-issue.md +0 -16
  384. package/src/claude/commands/devflow/implement.md +0 -100
  385. package/src/claude/commands/devflow/plan.md +0 -223
  386. package/src/claude/commands/devflow/pull-request.md +0 -20
  387. package/src/claude/commands/devflow/release.md +0 -251
  388. package/src/claude/commands/devflow/resolve-comments.md +0 -583
  389. package/src/claude/scripts/statusline.sh +0 -47
  390. package/src/claude/settings.json +0 -6
  391. package/src/claude/skills/devflow/code-smell/SKILL.md +0 -428
  392. package/src/claude/skills/devflow/debug/SKILL.md +0 -119
  393. package/src/claude/skills/devflow/error-handling/SKILL.md +0 -597
  394. package/src/claude/skills/devflow/input-validation/SKILL.md +0 -514
  395. package/src/claude/skills/devflow/pattern-check/SKILL.md +0 -238
  396. package/src/claude/skills/devflow/research/SKILL.md +0 -138
  397. package/src/claude/skills/devflow/test-design/SKILL.md +0 -384
@@ -0,0 +1,208 @@
1
+ # Database Issue Detection
2
+
3
+ Commands and patterns for detecting database issues in code reviews.
4
+
5
+ ## Automated Detection Commands
6
+
7
+ ### SQL Injection Detection
8
+
9
+ ```bash
10
+ # String interpolation in queries (JavaScript/TypeScript)
11
+ grep -rn "query.*\`.*\${" --include="*.ts" --include="*.js"
12
+ grep -rn "query.*\(\`.*\${" --include="*.ts" --include="*.js"
13
+ grep -rn 'query.*".*\+' --include="*.ts" --include="*.js"
14
+ grep -rn "query.*'.*\+" --include="*.ts" --include="*.js"
15
+
16
+ # String formatting in queries (Python)
17
+ grep -rn 'execute.*f"' --include="*.py"
18
+ grep -rn 'execute.*%' --include="*.py"
19
+ grep -rn "execute.*\.format" --include="*.py"
20
+
21
+ # Raw SQL with variables (any language)
22
+ grep -rn "WHERE.*=.*'" --include="*.ts" --include="*.py" --include="*.go" | grep -v '\$'
23
+ ```
24
+
25
+ ### N+1 Query Detection
26
+
27
+ ```bash
28
+ # Queries inside loops (TypeScript/JavaScript)
29
+ grep -rn -A 5 "for.*of\|forEach\|\.map(" --include="*.ts" | grep -B 2 "await.*query\|await.*find"
30
+
31
+ # ORM patterns that suggest N+1
32
+ grep -rn "\.find.*{.*where" --include="*.ts" | grep -B 5 "for\|forEach\|map"
33
+
34
+ # Sequential awaits that might be batched
35
+ grep -rn "await.*await.*await" --include="*.ts"
36
+ ```
37
+
38
+ ### SELECT * Detection
39
+
40
+ ```bash
41
+ # Direct SELECT * usage
42
+ grep -rn "SELECT \*" --include="*.ts" --include="*.js" --include="*.sql"
43
+ grep -rn 'SELECT \*' --include="*.py"
44
+
45
+ # ORM patterns that select all columns
46
+ grep -rn "\.find\(\)\|\.findAll\(\)\|\.all\(\)" --include="*.ts"
47
+ ```
48
+
49
+ ### Missing Index Indicators
50
+
51
+ ```bash
52
+ # Queries with multiple WHERE conditions (potential composite index)
53
+ grep -rn "WHERE.*AND.*AND" --include="*.ts" --include="*.sql"
54
+
55
+ # Queries with ORDER BY (potential index needed)
56
+ grep -rn "ORDER BY" --include="*.ts" --include="*.sql"
57
+
58
+ # Queries with LIKE patterns
59
+ grep -rn "LIKE.*%" --include="*.ts" --include="*.sql"
60
+ ```
61
+
62
+ ### Migration Risk Detection
63
+
64
+ ```bash
65
+ # Dangerous migration operations
66
+ find . -path "*/migrations/*" -o -path "*/migrate/*" | xargs grep -l "DROP\|DELETE\|TRUNCATE\|ALTER.*DROP"
67
+
68
+ # Migrations without down method
69
+ find . -path "*/migrations/*" -name "*.ts" | xargs grep -L "down"
70
+
71
+ # NOT NULL additions (potential lock)
72
+ find . -path "*/migrations/*" | xargs grep -n "NOT NULL"
73
+
74
+ # Type changes
75
+ find . -path "*/migrations/*" | xargs grep -n "ALTER.*TYPE\|MODIFY.*COLUMN"
76
+ ```
77
+
78
+ ### Security Pattern Detection
79
+
80
+ ```bash
81
+ # Hardcoded credentials
82
+ grep -rn "password.*=\|PASSWORD.*=\|secret.*=\|SECRET.*=" --include="*.ts" --include="*.env*"
83
+
84
+ # Connection strings with credentials
85
+ grep -rn "postgresql://.*:.*@\|mysql://.*:.*@\|mongodb://.*:.*@" --include="*.ts" --include="*.js"
86
+
87
+ # Excessive privilege grants
88
+ grep -rn "GRANT ALL\|SUPERUSER\|WITH GRANT OPTION" --include="*.sql" --include="*.ts"
89
+ ```
90
+
91
+ ---
92
+
93
+ ## Manual Review Patterns
94
+
95
+ ### Schema Review Checklist
96
+
97
+ ```sql
98
+ -- Check for missing foreign keys
99
+ SELECT
100
+ tc.table_name,
101
+ kcu.column_name
102
+ FROM information_schema.table_constraints tc
103
+ JOIN information_schema.key_column_usage kcu
104
+ ON tc.constraint_name = kcu.constraint_name
105
+ WHERE tc.constraint_type = 'PRIMARY KEY'
106
+ AND kcu.column_name LIKE '%_id'
107
+ AND NOT EXISTS (
108
+ SELECT 1 FROM information_schema.referential_constraints rc
109
+ WHERE rc.constraint_name = tc.constraint_name
110
+ );
111
+
112
+ -- Check for missing NOT NULL on required fields
113
+ SELECT table_name, column_name, data_type
114
+ FROM information_schema.columns
115
+ WHERE is_nullable = 'YES'
116
+ AND column_name IN ('email', 'name', 'status', 'created_at')
117
+ ORDER BY table_name;
118
+
119
+ -- Check for VARCHAR without length limit
120
+ SELECT table_name, column_name
121
+ FROM information_schema.columns
122
+ WHERE data_type = 'character varying'
123
+ AND character_maximum_length IS NULL;
124
+ ```
125
+
126
+ ### Index Review Checklist
127
+
128
+ ```sql
129
+ -- Tables without primary key
130
+ SELECT table_name
131
+ FROM information_schema.tables t
132
+ WHERE table_type = 'BASE TABLE'
133
+ AND NOT EXISTS (
134
+ SELECT 1 FROM information_schema.table_constraints tc
135
+ WHERE tc.table_name = t.table_name
136
+ AND tc.constraint_type = 'PRIMARY KEY'
137
+ );
138
+
139
+ -- Foreign key columns without index
140
+ SELECT
141
+ tc.table_name,
142
+ kcu.column_name
143
+ FROM information_schema.table_constraints tc
144
+ JOIN information_schema.key_column_usage kcu
145
+ ON tc.constraint_name = kcu.constraint_name
146
+ WHERE tc.constraint_type = 'FOREIGN KEY'
147
+ AND NOT EXISTS (
148
+ SELECT 1 FROM pg_indexes
149
+ WHERE tablename = tc.table_name
150
+ AND indexdef LIKE '%' || kcu.column_name || '%'
151
+ );
152
+
153
+ -- Unused indexes (PostgreSQL)
154
+ SELECT
155
+ schemaname,
156
+ tablename,
157
+ indexname,
158
+ idx_scan
159
+ FROM pg_stat_user_indexes
160
+ WHERE idx_scan = 0
161
+ AND indexname NOT LIKE '%pkey%'
162
+ ORDER BY pg_relation_size(indexrelid) DESC;
163
+ ```
164
+
165
+ ### Query Performance Review
166
+
167
+ ```sql
168
+ -- Check execution plan for specific query
169
+ EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
170
+ SELECT * FROM orders WHERE customer_id = 123;
171
+
172
+ -- Expected good plan indicators:
173
+ -- - Index Scan or Index Only Scan
174
+ -- - Low cost estimates
175
+ -- - Small row estimates matching actual
176
+
177
+ -- Red flags in execution plans:
178
+ -- - Seq Scan on large tables
179
+ -- - Nested Loop with high row counts
180
+ -- - Sort operations without index
181
+ -- - Hash Join with large tables
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Code Review Triggers
187
+
188
+ When reviewing code, flag for database review if you see:
189
+
190
+ ### High Priority (Always Review)
191
+
192
+ 1. **New migration files** - Check for data loss risk, rollback strategy
193
+ 2. **Raw SQL queries** - Check for injection, parameterization
194
+ 3. **Loops with database calls** - Check for N+1 patterns
195
+ 4. **Schema changes** - Check for breaking changes, constraints
196
+
197
+ ### Medium Priority (Sample Review)
198
+
199
+ 1. **ORM model changes** - Verify schema alignment
200
+ 2. **New query methods** - Check for efficiency
201
+ 3. **Bulk operations** - Check for batching
202
+ 4. **Transaction usage** - Check for proper isolation
203
+
204
+ ### Low Priority (Spot Check)
205
+
206
+ 1. **Read-only queries** - Verify index usage
207
+ 2. **Logging of database data** - Check for sensitive data exposure
208
+ 3. **Error handling** - Check for proper connection cleanup
@@ -0,0 +1,394 @@
1
+ # Database Correct Patterns
2
+
3
+ Extended examples of correct database design and optimization patterns.
4
+
5
+ ## Schema Design Patterns
6
+
7
+ ### Proper Table Structure
8
+
9
+ ```sql
10
+ -- Well-designed table with all essential elements
11
+ CREATE TABLE orders (
12
+ -- Primary key: UUID for distributed systems, SERIAL for simpler cases
13
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
14
+
15
+ -- Foreign keys with appropriate actions
16
+ customer_id UUID NOT NULL REFERENCES customers(id) ON DELETE RESTRICT,
17
+
18
+ -- Appropriate data types
19
+ total DECIMAL(10, 2) NOT NULL CHECK (total >= 0),
20
+ status VARCHAR(20) NOT NULL DEFAULT 'pending',
21
+
22
+ -- Timestamps with timezone
23
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
24
+ updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
25
+
26
+ -- Constraints
27
+ CONSTRAINT valid_status CHECK (status IN ('pending', 'processing', 'completed', 'cancelled'))
28
+ );
29
+
30
+ -- Indexes for common queries
31
+ CREATE INDEX idx_orders_customer ON orders(customer_id);
32
+ CREATE INDEX idx_orders_status ON orders(status) WHERE status != 'completed';
33
+ CREATE INDEX idx_orders_created ON orders(created_at);
34
+ ```
35
+
36
+ ### Audit Trail Pattern
37
+
38
+ ```sql
39
+ -- Audit columns on every table
40
+ CREATE TABLE users (
41
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
42
+ email VARCHAR(255) NOT NULL UNIQUE,
43
+ name VARCHAR(100) NOT NULL,
44
+
45
+ -- Audit trail
46
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
47
+ created_by UUID REFERENCES users(id),
48
+ updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
49
+ updated_by UUID REFERENCES users(id),
50
+ deleted_at TIMESTAMP WITH TIME ZONE, -- Soft delete
51
+ deleted_by UUID REFERENCES users(id)
52
+ );
53
+
54
+ -- Trigger for automatic updated_at
55
+ CREATE OR REPLACE FUNCTION update_updated_at()
56
+ RETURNS TRIGGER AS $$
57
+ BEGIN
58
+ NEW.updated_at = NOW();
59
+ RETURN NEW;
60
+ END;
61
+ $$ LANGUAGE plpgsql;
62
+
63
+ CREATE TRIGGER users_updated_at
64
+ BEFORE UPDATE ON users
65
+ FOR EACH ROW
66
+ EXECUTE FUNCTION update_updated_at();
67
+ ```
68
+
69
+ ### Enum Pattern (Preferred over VARCHAR)
70
+
71
+ ```sql
72
+ -- Create enum type
73
+ CREATE TYPE order_status AS ENUM (
74
+ 'pending',
75
+ 'processing',
76
+ 'shipped',
77
+ 'delivered',
78
+ 'cancelled'
79
+ );
80
+
81
+ -- Use in table
82
+ CREATE TABLE orders (
83
+ id UUID PRIMARY KEY,
84
+ status order_status NOT NULL DEFAULT 'pending'
85
+ );
86
+
87
+ -- Benefits: type safety, storage efficiency, self-documenting
88
+ ```
89
+
90
+ ---
91
+
92
+ ## Query Optimization Patterns
93
+
94
+ ### Efficient Batch Loading
95
+
96
+ ```typescript
97
+ // Load related data efficiently
98
+ async function getUsersWithOrders(userIds: string[]): Promise<UserWithOrders[]> {
99
+ // Query 1: Get users
100
+ const users = await db.query(
101
+ 'SELECT * FROM users WHERE id = ANY($1)',
102
+ [userIds]
103
+ );
104
+
105
+ // Query 2: Get all orders for these users in one query
106
+ const orders = await db.query(
107
+ 'SELECT * FROM orders WHERE user_id = ANY($1)',
108
+ [userIds]
109
+ );
110
+
111
+ // Build lookup map
112
+ const ordersByUser = new Map<string, Order[]>();
113
+ for (const order of orders) {
114
+ const existing = ordersByUser.get(order.user_id) || [];
115
+ existing.push(order);
116
+ ordersByUser.set(order.user_id, existing);
117
+ }
118
+
119
+ // Combine
120
+ return users.map(user => ({
121
+ ...user,
122
+ orders: ordersByUser.get(user.id) || []
123
+ }));
124
+ }
125
+ // Total: 2 queries regardless of user count
126
+ ```
127
+
128
+ ### Pagination Pattern
129
+
130
+ ```typescript
131
+ // Cursor-based pagination (efficient for large datasets)
132
+ async function getOrdersPage(
133
+ customerId: string,
134
+ cursor?: string,
135
+ limit: number = 20
136
+ ): Promise<{ orders: Order[]; nextCursor: string | null }> {
137
+ const query = cursor
138
+ ? `SELECT * FROM orders
139
+ WHERE customer_id = $1 AND created_at < $2
140
+ ORDER BY created_at DESC
141
+ LIMIT $3`
142
+ : `SELECT * FROM orders
143
+ WHERE customer_id = $1
144
+ ORDER BY created_at DESC
145
+ LIMIT $2`;
146
+
147
+ const params = cursor
148
+ ? [customerId, new Date(cursor), limit + 1]
149
+ : [customerId, limit + 1];
150
+
151
+ const orders = await db.query(query, params);
152
+
153
+ const hasMore = orders.length > limit;
154
+ if (hasMore) orders.pop();
155
+
156
+ return {
157
+ orders,
158
+ nextCursor: hasMore ? orders[orders.length - 1].created_at.toISOString() : null
159
+ };
160
+ }
161
+ ```
162
+
163
+ ### Index Strategy
164
+
165
+ ```sql
166
+ -- Primary lookup index
167
+ CREATE INDEX idx_orders_customer ON orders(customer_id);
168
+
169
+ -- Composite index for common query pattern
170
+ -- Order matters: most selective first, or match query order
171
+ CREATE INDEX idx_orders_customer_status_date
172
+ ON orders(customer_id, status, created_at DESC);
173
+
174
+ -- Partial index for active records only
175
+ CREATE INDEX idx_orders_pending
176
+ ON orders(customer_id, created_at)
177
+ WHERE status = 'pending';
178
+
179
+ -- Covering index (includes all needed columns)
180
+ CREATE INDEX idx_orders_summary
181
+ ON orders(customer_id, status)
182
+ INCLUDE (total, created_at);
183
+ -- Query can be satisfied entirely from index
184
+ ```
185
+
186
+ ---
187
+
188
+ ## Migration Patterns
189
+
190
+ ### Safe Column Addition
191
+
192
+ ```typescript
193
+ // Migration: Add new required column safely
194
+ export async function up(db: Database): Promise<void> {
195
+ // Step 1: Add nullable column (instant, no lock)
196
+ await db.query(`
197
+ ALTER TABLE users ADD COLUMN phone VARCHAR(20)
198
+ `);
199
+
200
+ // Step 2: Backfill in batches
201
+ let processed = 0;
202
+ const batchSize = 1000;
203
+
204
+ while (true) {
205
+ const result = await db.query(`
206
+ UPDATE users
207
+ SET phone = 'UNKNOWN'
208
+ WHERE phone IS NULL
209
+ AND id IN (
210
+ SELECT id FROM users WHERE phone IS NULL LIMIT $1
211
+ )
212
+ RETURNING id
213
+ `, [batchSize]);
214
+
215
+ processed += result.rowCount;
216
+ if (result.rowCount < batchSize) break;
217
+
218
+ // Small delay to reduce load
219
+ await sleep(100);
220
+ }
221
+
222
+ // Step 3: Add NOT NULL constraint
223
+ await db.query(`
224
+ ALTER TABLE users ALTER COLUMN phone SET NOT NULL
225
+ `);
226
+ }
227
+
228
+ export async function down(db: Database): Promise<void> {
229
+ await db.query(`
230
+ ALTER TABLE users DROP COLUMN phone
231
+ `);
232
+ }
233
+ ```
234
+
235
+ ### Safe Column Rename
236
+
237
+ ```typescript
238
+ // Migration: Rename column without downtime
239
+ export async function up(db: Database): Promise<void> {
240
+ // Step 1: Add new column
241
+ await db.query(`
242
+ ALTER TABLE users ADD COLUMN full_name VARCHAR(200)
243
+ `);
244
+
245
+ // Step 2: Copy data
246
+ await db.query(`
247
+ UPDATE users SET full_name = name WHERE full_name IS NULL
248
+ `);
249
+
250
+ // Step 3: Create trigger for dual-write during transition
251
+ await db.query(`
252
+ CREATE OR REPLACE FUNCTION sync_name_columns()
253
+ RETURNS TRIGGER AS $$
254
+ BEGIN
255
+ IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
256
+ IF NEW.full_name IS NOT NULL AND NEW.name IS DISTINCT FROM NEW.full_name THEN
257
+ NEW.name = NEW.full_name;
258
+ ELSIF NEW.name IS NOT NULL AND NEW.full_name IS DISTINCT FROM NEW.name THEN
259
+ NEW.full_name = NEW.name;
260
+ END IF;
261
+ END IF;
262
+ RETURN NEW;
263
+ END;
264
+ $$ LANGUAGE plpgsql;
265
+
266
+ CREATE TRIGGER sync_names
267
+ BEFORE INSERT OR UPDATE ON users
268
+ FOR EACH ROW
269
+ EXECUTE FUNCTION sync_name_columns();
270
+ `);
271
+
272
+ // Step 4: Deploy code using new column
273
+ // Step 5: (separate migration) Drop old column and trigger
274
+ }
275
+ ```
276
+
277
+ ### Safe Table Restructure
278
+
279
+ ```typescript
280
+ // Migration: Restructure table without downtime
281
+ export async function up(db: Database): Promise<void> {
282
+ // Step 1: Create new table structure
283
+ await db.query(`
284
+ CREATE TABLE users_v2 (
285
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
286
+ email VARCHAR(255) NOT NULL UNIQUE,
287
+ -- new structure
288
+ profile JSONB NOT NULL DEFAULT '{}'::jsonb,
289
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
290
+ )
291
+ `);
292
+
293
+ // Step 2: Create insert trigger on old table
294
+ await db.query(`
295
+ CREATE OR REPLACE FUNCTION sync_to_users_v2()
296
+ RETURNS TRIGGER AS $$
297
+ BEGIN
298
+ INSERT INTO users_v2 (id, email, profile, created_at)
299
+ VALUES (
300
+ NEW.id,
301
+ NEW.email,
302
+ jsonb_build_object('name', NEW.name, 'phone', NEW.phone),
303
+ NEW.created_at
304
+ )
305
+ ON CONFLICT (id) DO UPDATE SET
306
+ email = EXCLUDED.email,
307
+ profile = EXCLUDED.profile;
308
+ RETURN NEW;
309
+ END;
310
+ $$ LANGUAGE plpgsql;
311
+
312
+ CREATE TRIGGER sync_users
313
+ AFTER INSERT OR UPDATE ON users
314
+ FOR EACH ROW
315
+ EXECUTE FUNCTION sync_to_users_v2();
316
+ `);
317
+
318
+ // Step 3: Backfill existing data
319
+ await db.query(`
320
+ INSERT INTO users_v2 (id, email, profile, created_at)
321
+ SELECT
322
+ id,
323
+ email,
324
+ jsonb_build_object('name', name, 'phone', phone),
325
+ created_at
326
+ FROM users
327
+ ON CONFLICT (id) DO NOTHING
328
+ `);
329
+
330
+ // Step 4: Switch reads to new table (code deployment)
331
+ // Step 5: (separate migration) Drop old table
332
+ }
333
+ ```
334
+
335
+ ---
336
+
337
+ ## Transaction Patterns
338
+
339
+ ### Proper Transaction Handling
340
+
341
+ ```typescript
342
+ // Transaction with proper error handling and isolation
343
+ async function transferFunds(
344
+ fromAccount: string,
345
+ toAccount: string,
346
+ amount: number
347
+ ): Promise<Result<void, TransferError>> {
348
+ const client = await db.pool.connect();
349
+
350
+ try {
351
+ await client.query('BEGIN');
352
+ await client.query('SET TRANSACTION ISOLATION LEVEL SERIALIZABLE');
353
+
354
+ // Lock rows in consistent order to prevent deadlocks
355
+ const accounts = [fromAccount, toAccount].sort();
356
+
357
+ const fromResult = await client.query(
358
+ 'SELECT balance FROM accounts WHERE id = $1 FOR UPDATE',
359
+ [accounts[0] === fromAccount ? fromAccount : toAccount]
360
+ );
361
+
362
+ const toResult = await client.query(
363
+ 'SELECT balance FROM accounts WHERE id = $1 FOR UPDATE',
364
+ [accounts[0] === fromAccount ? toAccount : fromAccount]
365
+ );
366
+
367
+ const fromBalance = fromResult.rows[0]?.balance;
368
+ if (!fromBalance || fromBalance < amount) {
369
+ await client.query('ROLLBACK');
370
+ return { ok: false, error: { type: 'insufficient_funds' } };
371
+ }
372
+
373
+ await client.query(
374
+ 'UPDATE accounts SET balance = balance - $1 WHERE id = $2',
375
+ [amount, fromAccount]
376
+ );
377
+
378
+ await client.query(
379
+ 'UPDATE accounts SET balance = balance + $1 WHERE id = $2',
380
+ [amount, toAccount]
381
+ );
382
+
383
+ await client.query('COMMIT');
384
+ return { ok: true, value: undefined };
385
+
386
+ } catch (error) {
387
+ await client.query('ROLLBACK');
388
+ return { ok: false, error: { type: 'transaction_failed', cause: error } };
389
+
390
+ } finally {
391
+ client.release();
392
+ }
393
+ }
394
+ ```