@mytechtoday/augment-extensions 0.2.0 → 0.5.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 (420) hide show
  1. package/README.md +614 -39
  2. package/augment-extensions/coding-standards/bash/README.md +196 -0
  3. package/augment-extensions/coding-standards/bash/module.json +163 -0
  4. package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -0
  5. package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -0
  6. package/augment-extensions/coding-standards/css/README.md +40 -0
  7. package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -0
  8. package/augment-extensions/coding-standards/css/module.json +44 -0
  9. package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -0
  10. package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -0
  11. package/augment-extensions/coding-standards/html/README.md +40 -0
  12. package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -0
  13. package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -0
  14. package/augment-extensions/coding-standards/html/module.json +44 -0
  15. package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -0
  16. package/augment-extensions/coding-standards/html-css-js/README.md +194 -0
  17. package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -0
  18. package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -0
  19. package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -0
  20. package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -0
  21. package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -0
  22. package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -0
  23. package/augment-extensions/coding-standards/html-css-js/module.json +48 -0
  24. package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -0
  25. package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -0
  26. package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -0
  27. package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -0
  28. package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -0
  29. package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -0
  30. package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -0
  31. package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -0
  32. package/augment-extensions/coding-standards/js/README.md +46 -0
  33. package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -0
  34. package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -0
  35. package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -0
  36. package/augment-extensions/coding-standards/js/module.json +49 -0
  37. package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -0
  38. package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -0
  39. package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -0
  40. package/augment-extensions/coding-standards/js/rules/performance.md +463 -0
  41. package/augment-extensions/coding-standards/js/rules/tooling.md +543 -0
  42. package/augment-extensions/coding-standards/php/README.md +248 -0
  43. package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -0
  44. package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -0
  45. package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -0
  46. package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -0
  47. package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -0
  48. package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -0
  49. package/augment-extensions/coding-standards/php/module.json +166 -0
  50. package/augment-extensions/coding-standards/php/rules/api-development.md +480 -0
  51. package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -0
  52. package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -0
  53. package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -0
  54. package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -0
  55. package/augment-extensions/coding-standards/php/rules/documentation.md +425 -0
  56. package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -0
  57. package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -0
  58. package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -0
  59. package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -0
  60. package/augment-extensions/coding-standards/php/rules/performance.md +392 -0
  61. package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -0
  62. package/augment-extensions/coding-standards/php/rules/security.md +358 -0
  63. package/augment-extensions/coding-standards/php/rules/testing.md +403 -0
  64. package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -0
  65. package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -0
  66. package/augment-extensions/coding-standards/powershell/README.md +154 -0
  67. package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -0
  68. package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -0
  69. package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -0
  70. package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -0
  71. package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -0
  72. package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -0
  73. package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -0
  74. package/augment-extensions/coding-standards/powershell/module.json +165 -0
  75. package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -0
  76. package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -0
  77. package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -0
  78. package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -0
  79. package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -0
  80. package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -0
  81. package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -0
  82. package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -0
  83. package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -0
  84. package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -0
  85. package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -0
  86. package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -0
  87. package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -0
  88. package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -0
  89. package/augment-extensions/coding-standards/python/README.md +12 -8
  90. package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -0
  91. package/augment-extensions/coding-standards/python/module.json +8 -4
  92. package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -0
  93. package/augment-extensions/coding-standards/python/rules/documentation.md +831 -0
  94. package/augment-extensions/coding-standards/python/rules/error-handling.md +855 -68
  95. package/augment-extensions/coding-standards/python/rules/testing.md +409 -0
  96. package/augment-extensions/coding-standards/python/rules/tooling.md +446 -0
  97. package/augment-extensions/coding-standards/python/rules/type-hints.md +115 -50
  98. package/augment-extensions/collections/html-css-js/README.md +82 -0
  99. package/augment-extensions/collections/html-css-js/collection.json +41 -0
  100. package/augment-extensions/domain-rules/database/README.md +161 -0
  101. package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -0
  102. package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -0
  103. package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -0
  104. package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -0
  105. package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -0
  106. package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -0
  107. package/augment-extensions/domain-rules/database/module.json +28 -0
  108. package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -0
  109. package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -0
  110. package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -0
  111. package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -0
  112. package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -0
  113. package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -0
  114. package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -0
  115. package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -0
  116. package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -0
  117. package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -0
  118. package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -0
  119. package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -0
  120. package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -0
  121. package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -0
  122. package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -0
  123. package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -0
  124. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -0
  125. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -0
  126. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -0
  127. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -0
  128. package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -0
  129. package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -0
  130. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -0
  131. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -0
  132. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -0
  133. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -0
  134. package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -0
  135. package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -0
  136. package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -0
  137. package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -0
  138. package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -0
  139. package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -0
  140. package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -0
  141. package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -0
  142. package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -0
  143. package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -0
  144. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -0
  145. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -0
  146. package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -0
  147. package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -0
  148. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -0
  149. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -0
  150. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/README.md +136 -0
  151. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/SCHEMA-VALIDATION-REPORT.md +216 -0
  152. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/brand-kit-example.yaml +292 -0
  153. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/campaign-brief-example.yaml +389 -0
  154. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/content-calendar-example.yaml +643 -0
  155. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/email-newsletter-example.md +376 -0
  156. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/landing-page-example.md +934 -0
  157. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/ppc-ad-copy-example.md +301 -0
  158. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/seo-blog-post-example.md +347 -0
  159. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/examples/social-media-campaign-example.md +606 -0
  160. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/module.json +50 -0
  161. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/affiliate-influencer-marketing.md +593 -0
  162. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/asset-management.md +418 -0
  163. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/brand-consistency.md +210 -0
  164. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/content-marketing.md +337 -0
  165. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/conversion-optimization.md +455 -0
  166. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/direct-sales.md +499 -0
  167. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/email-marketing.md +439 -0
  168. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/legal-compliance.md +227 -0
  169. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/ppc-advertising.md +569 -0
  170. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/seo-optimization.md +470 -0
  171. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/social-media-marketing.md +414 -0
  172. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/rules/universal-marketing.md +177 -0
  173. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/asset-inventory.schema.json +247 -0
  174. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/brand-kit.schema.json +326 -0
  175. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/campaign-brief.schema.json +342 -0
  176. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/color-palette.schema.json +223 -0
  177. package/augment-extensions/domain-rules/marketing-standards/seo-sales-marketing/schemas/content-template.schema.json +383 -0
  178. package/augment-extensions/domain-rules/mcp/README.md +150 -0
  179. package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -0
  180. package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -0
  181. package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -0
  182. package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -0
  183. package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -0
  184. package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -0
  185. package/augment-extensions/domain-rules/mcp/module.json +49 -0
  186. package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -0
  187. package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -0
  188. package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -0
  189. package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -0
  190. package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -0
  191. package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -0
  192. package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -0
  193. package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -0
  194. package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -0
  195. package/augment-extensions/workflows/beads/module.json +4 -3
  196. package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -0
  197. package/augment-extensions/workflows/beads-integration/README.md +143 -0
  198. package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -0
  199. package/augment-extensions/workflows/beads-integration/config/schema.json +140 -0
  200. package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -0
  201. package/augment-extensions/workflows/beads-integration/module.json +75 -0
  202. package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -0
  203. package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -0
  204. package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -0
  205. package/augment-extensions/workflows/database/README.md +195 -0
  206. package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -0
  207. package/augment-extensions/workflows/database/examples/migration-example.md +498 -0
  208. package/augment-extensions/workflows/database/examples/optimization-example.md +496 -0
  209. package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -0
  210. package/augment-extensions/workflows/database/module.json +42 -0
  211. package/augment-extensions/workflows/database/rules/data-migration.md +249 -0
  212. package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -0
  213. package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -0
  214. package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -0
  215. package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -0
  216. package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -0
  217. package/augment-extensions/workflows/database/rules/workflow.md +458 -0
  218. package/augment-extensions/workflows/openspec/module.json +4 -3
  219. package/augment-extensions/writing-standards/screenplay/README.md +300 -0
  220. package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -0
  221. package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -0
  222. package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -0
  223. package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -0
  224. package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -0
  225. package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -0
  226. package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -0
  227. package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -0
  228. package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -0
  229. package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -0
  230. package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -0
  231. package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -0
  232. package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -0
  233. package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -0
  234. package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -0
  235. package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -0
  236. package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -0
  237. package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -0
  238. package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -0
  239. package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -0
  240. package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -0
  241. package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -0
  242. package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -0
  243. package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -0
  244. package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -0
  245. package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -0
  246. package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -0
  247. package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -0
  248. package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -0
  249. package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -0
  250. package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -0
  251. package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -0
  252. package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -0
  253. package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -0
  254. package/augment-extensions/writing-standards/screenplay/module.json +124 -0
  255. package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -0
  256. package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -0
  257. package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -0
  258. package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -0
  259. package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -0
  260. package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -0
  261. package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -0
  262. package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -0
  263. package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -0
  264. package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -0
  265. package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -0
  266. package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -0
  267. package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -0
  268. package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -0
  269. package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -0
  270. package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -0
  271. package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -0
  272. package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -0
  273. package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -0
  274. package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -0
  275. package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -0
  276. package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -0
  277. package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -0
  278. package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -0
  279. package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -0
  280. package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -0
  281. package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -0
  282. package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -0
  283. package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -0
  284. package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -0
  285. package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -0
  286. package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -0
  287. package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -0
  288. package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -0
  289. package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -0
  290. package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -0
  291. package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -0
  292. package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -0
  293. package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -0
  294. package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -0
  295. package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -0
  296. package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -0
  297. package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -0
  298. package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -0
  299. package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -0
  300. package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -0
  301. package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -0
  302. package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -0
  303. package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -0
  304. package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -0
  305. package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -0
  306. package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -0
  307. package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -0
  308. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -0
  309. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -0
  310. package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -0
  311. package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -0
  312. package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -0
  313. package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -0
  314. package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -0
  315. package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -0
  316. package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -0
  317. package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -0
  318. package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -0
  319. package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -0
  320. package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -0
  321. package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -0
  322. package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -0
  323. package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -0
  324. package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -0
  325. package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -0
  326. package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -0
  327. package/cli/MODULES.md +302 -0
  328. package/cli/dist/cli.js +168 -10
  329. package/cli/dist/cli.js.map +1 -1
  330. package/cli/dist/commands/catalog.d.ts +13 -0
  331. package/cli/dist/commands/catalog.d.ts.map +1 -0
  332. package/cli/dist/commands/catalog.js +104 -0
  333. package/cli/dist/commands/catalog.js.map +1 -0
  334. package/cli/dist/commands/gui.d.ts +6 -0
  335. package/cli/dist/commands/gui.d.ts.map +1 -0
  336. package/cli/dist/commands/gui.js +211 -0
  337. package/cli/dist/commands/gui.js.map +1 -0
  338. package/cli/dist/commands/init.d.ts.map +1 -1
  339. package/cli/dist/commands/init.js +12 -0
  340. package/cli/dist/commands/init.js.map +1 -1
  341. package/cli/dist/commands/install-rules.d.ts +14 -0
  342. package/cli/dist/commands/install-rules.d.ts.map +1 -0
  343. package/cli/dist/commands/install-rules.js +127 -0
  344. package/cli/dist/commands/install-rules.js.map +1 -0
  345. package/cli/dist/commands/link.d.ts.map +1 -1
  346. package/cli/dist/commands/link.js +9 -11
  347. package/cli/dist/commands/link.js.map +1 -1
  348. package/cli/dist/commands/list.d.ts.map +1 -1
  349. package/cli/dist/commands/list.js +11 -28
  350. package/cli/dist/commands/list.js.map +1 -1
  351. package/cli/dist/commands/mcp.d.ts +48 -0
  352. package/cli/dist/commands/mcp.d.ts.map +1 -0
  353. package/cli/dist/commands/mcp.js +229 -0
  354. package/cli/dist/commands/mcp.js.map +1 -0
  355. package/cli/dist/commands/self-remove.d.ts +7 -0
  356. package/cli/dist/commands/self-remove.d.ts.map +1 -0
  357. package/cli/dist/commands/self-remove.js +179 -0
  358. package/cli/dist/commands/self-remove.js.map +1 -0
  359. package/cli/dist/commands/show.d.ts +19 -0
  360. package/cli/dist/commands/show.d.ts.map +1 -1
  361. package/cli/dist/commands/show.js +478 -63
  362. package/cli/dist/commands/show.js.map +1 -1
  363. package/cli/dist/commands/skill.d.ts +67 -0
  364. package/cli/dist/commands/skill.d.ts.map +1 -0
  365. package/cli/dist/commands/skill.js +513 -0
  366. package/cli/dist/commands/skill.js.map +1 -0
  367. package/cli/dist/commands/unlink.d.ts +6 -0
  368. package/cli/dist/commands/unlink.d.ts.map +1 -0
  369. package/cli/dist/commands/unlink.js +115 -0
  370. package/cli/dist/commands/unlink.js.map +1 -0
  371. package/cli/dist/commands/validate.d.ts +6 -0
  372. package/cli/dist/commands/validate.d.ts.map +1 -0
  373. package/cli/dist/commands/validate.js +159 -0
  374. package/cli/dist/commands/validate.js.map +1 -0
  375. package/cli/dist/types/gui.d.ts +62 -0
  376. package/cli/dist/types/gui.d.ts.map +1 -0
  377. package/cli/dist/types/gui.js +30 -0
  378. package/cli/dist/types/gui.js.map +1 -0
  379. package/cli/dist/utils/catalog-sync.d.ts +22 -0
  380. package/cli/dist/utils/catalog-sync.d.ts.map +1 -0
  381. package/cli/dist/utils/catalog-sync.js +157 -0
  382. package/cli/dist/utils/catalog-sync.js.map +1 -0
  383. package/cli/dist/utils/character-count.d.ts +56 -0
  384. package/cli/dist/utils/character-count.d.ts.map +1 -0
  385. package/cli/dist/utils/character-count.js +190 -0
  386. package/cli/dist/utils/character-count.js.map +1 -0
  387. package/cli/dist/utils/documentation-validator.d.ts +18 -0
  388. package/cli/dist/utils/documentation-validator.d.ts.map +1 -0
  389. package/cli/dist/utils/documentation-validator.js +233 -0
  390. package/cli/dist/utils/documentation-validator.js.map +1 -0
  391. package/cli/dist/utils/gui-helpers.d.ts +23 -0
  392. package/cli/dist/utils/gui-helpers.d.ts.map +1 -0
  393. package/cli/dist/utils/gui-helpers.js +159 -0
  394. package/cli/dist/utils/gui-helpers.js.map +1 -0
  395. package/cli/dist/utils/install-rules.d.ts +32 -0
  396. package/cli/dist/utils/install-rules.d.ts.map +1 -0
  397. package/cli/dist/utils/install-rules.js +375 -0
  398. package/cli/dist/utils/install-rules.js.map +1 -0
  399. package/cli/dist/utils/mcp-integration.d.ts +70 -0
  400. package/cli/dist/utils/mcp-integration.d.ts.map +1 -0
  401. package/cli/dist/utils/mcp-integration.js +292 -0
  402. package/cli/dist/utils/mcp-integration.js.map +1 -0
  403. package/cli/dist/utils/module-system.d.ts +232 -0
  404. package/cli/dist/utils/module-system.d.ts.map +1 -0
  405. package/cli/dist/utils/module-system.js +900 -0
  406. package/cli/dist/utils/module-system.js.map +1 -0
  407. package/cli/dist/utils/modules-catalog.d.ts +33 -0
  408. package/cli/dist/utils/modules-catalog.d.ts.map +1 -0
  409. package/cli/dist/utils/modules-catalog.js +163 -0
  410. package/cli/dist/utils/modules-catalog.js.map +1 -0
  411. package/cli/dist/utils/rule-install-hooks.d.ts +19 -0
  412. package/cli/dist/utils/rule-install-hooks.d.ts.map +1 -0
  413. package/cli/dist/utils/rule-install-hooks.js +224 -0
  414. package/cli/dist/utils/rule-install-hooks.js.map +1 -0
  415. package/cli/dist/utils/skill-system.d.ts +95 -0
  416. package/cli/dist/utils/skill-system.d.ts.map +1 -0
  417. package/cli/dist/utils/skill-system.js +313 -0
  418. package/cli/dist/utils/skill-system.js.map +1 -0
  419. package/modules.md +559 -105
  420. package/package.json +17 -6
@@ -0,0 +1,783 @@
1
+ # Relational Transactions
2
+
3
+ ## Overview
4
+
5
+ This document covers transaction management in relational databases, including ACID properties, transaction isolation levels, deadlock prevention, locking strategies, savepoints, and distributed transactions.
6
+
7
+ ---
8
+
9
+ ## ACID Properties
10
+
11
+ ### Atomicity
12
+
13
+ **Definition**: All operations in a transaction succeed or all fail (all-or-nothing)
14
+
15
+ **Example: Bank Transfer**
16
+ ```sql
17
+ BEGIN TRANSACTION;
18
+
19
+ -- Deduct from account A
20
+ UPDATE accounts SET balance = balance - 100 WHERE id = 1;
21
+
22
+ -- Add to account B
23
+ UPDATE accounts SET balance = balance + 100 WHERE id = 2;
24
+
25
+ -- Both succeed or both fail
26
+ COMMIT;
27
+ ```
28
+
29
+ **If any operation fails:**
30
+ ```sql
31
+ BEGIN TRANSACTION;
32
+
33
+ UPDATE accounts SET balance = balance - 100 WHERE id = 1; -- Succeeds
34
+ UPDATE accounts SET balance = balance + 100 WHERE id = 999; -- Fails (account doesn't exist)
35
+
36
+ ROLLBACK; -- First update is rolled back
37
+ ```
38
+
39
+ ### Consistency
40
+
41
+ **Definition**: Database remains in a valid state before and after transaction
42
+
43
+ **Example: Constraints Ensure Consistency**
44
+ ```sql
45
+ -- Add constraint
46
+ ALTER TABLE accounts ADD CONSTRAINT check_balance CHECK (balance >= 0);
47
+
48
+ -- This transaction will fail if it violates the constraint
49
+ BEGIN TRANSACTION;
50
+ UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
51
+ COMMIT; -- Fails if balance would go negative
52
+ ```
53
+
54
+ **Example: Referential Integrity**
55
+ ```sql
56
+ -- Foreign key ensures consistency
57
+ CREATE TABLE orders (
58
+ id SERIAL PRIMARY KEY,
59
+ user_id INT NOT NULL REFERENCES users(id)
60
+ );
61
+
62
+ -- This will fail if user doesn't exist
63
+ INSERT INTO orders (user_id) VALUES (999); -- Error: foreign key violation
64
+ ```
65
+
66
+ ### Isolation
67
+
68
+ **Definition**: Concurrent transactions don't interfere with each other
69
+
70
+ **See "Transaction Isolation Levels" section for details**
71
+
72
+ ### Durability
73
+
74
+ **Definition**: Committed transactions persist even after system failure
75
+
76
+ **Implementation:**
77
+ - Write-ahead logging (WAL)
78
+ - Transaction logs
79
+ - Checkpoints
80
+ - Replication
81
+
82
+ **Example:**
83
+ ```sql
84
+ BEGIN TRANSACTION;
85
+ INSERT INTO orders (user_id, total) VALUES (1, 100.00);
86
+ COMMIT; -- Data is written to disk and persists even if system crashes
87
+ ```
88
+
89
+ ---
90
+
91
+ ## Transaction Isolation Levels
92
+
93
+ ### Overview
94
+
95
+ **Isolation levels** control how transactions interact with each other.
96
+
97
+ **Trade-off**: Higher isolation = more consistency, less concurrency
98
+
99
+ **Standard levels** (from least to most isolated):
100
+ 1. Read Uncommitted
101
+ 2. Read Committed (default in most databases)
102
+ 3. Repeatable Read
103
+ 4. Serializable
104
+
105
+ ### Read Uncommitted
106
+
107
+ **Allows**: Dirty reads, non-repeatable reads, phantom reads
108
+
109
+ **Use case**: Rarely used (only when performance is critical and dirty reads are acceptable)
110
+
111
+ ```sql
112
+ -- PostgreSQL (not supported, falls back to Read Committed)
113
+ SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
114
+
115
+ -- MySQL
116
+ SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
117
+ ```
118
+
119
+ **Dirty Read Example:**
120
+ ```sql
121
+ -- Transaction 1
122
+ BEGIN;
123
+ UPDATE accounts SET balance = 1000 WHERE id = 1;
124
+ -- Not committed yet
125
+
126
+ -- Transaction 2 (can see uncommitted changes)
127
+ BEGIN;
128
+ SELECT balance FROM accounts WHERE id = 1; -- Returns 1000 (dirty read)
129
+ COMMIT;
130
+
131
+ -- Transaction 1 rolls back
132
+ ROLLBACK; -- Balance is back to original value
133
+ ```
134
+
135
+ ### Read Committed
136
+
137
+ **Prevents**: Dirty reads
138
+ **Allows**: Non-repeatable reads, phantom reads
139
+
140
+ **Default in**: PostgreSQL, Oracle, SQL Server
141
+
142
+ ```sql
143
+ -- PostgreSQL
144
+ SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
145
+
146
+ -- MySQL
147
+ SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
148
+ ```
149
+
150
+ **Non-Repeatable Read Example:**
151
+ ```sql
152
+ -- Transaction 1
153
+ BEGIN;
154
+ SELECT balance FROM accounts WHERE id = 1; -- Returns 500
155
+
156
+ -- Transaction 2 (commits a change)
157
+ BEGIN;
158
+ UPDATE accounts SET balance = 1000 WHERE id = 1;
159
+ COMMIT;
160
+
161
+ -- Transaction 1 (reads again, sees different value)
162
+ SELECT balance FROM accounts WHERE id = 1; -- Returns 1000 (non-repeatable read)
163
+ COMMIT;
164
+ ```
165
+
166
+ ### Repeatable Read
167
+
168
+ **Prevents**: Dirty reads, non-repeatable reads
169
+ **Allows**: Phantom reads
170
+
171
+ **Default in**: MySQL (InnoDB)
172
+
173
+ ```sql
174
+ -- PostgreSQL
175
+ SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
176
+
177
+ -- MySQL
178
+ SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
179
+ ```
180
+
181
+ **Phantom Read Example:**
182
+ ```sql
183
+ -- Transaction 1
184
+ BEGIN;
185
+ SELECT COUNT(*) FROM orders WHERE user_id = 1; -- Returns 5
186
+
187
+ -- Transaction 2 (inserts a new row)
188
+ BEGIN;
189
+ INSERT INTO orders (user_id, total) VALUES (1, 100.00);
190
+ COMMIT;
191
+
192
+ -- Transaction 1 (counts again, may see different count)
193
+ SELECT COUNT(*) FROM orders WHERE user_id = 1; -- May return 6 (phantom read)
194
+ COMMIT;
195
+ ```
196
+
197
+ **Note**: PostgreSQL's Repeatable Read prevents phantom reads (behaves like Serializable for most cases)
198
+
199
+ ### Serializable
200
+
201
+ **Prevents**: Dirty reads, non-repeatable reads, phantom reads
202
+
203
+ **Use case**: When absolute consistency is required
204
+
205
+ ```sql
206
+ -- PostgreSQL
207
+ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
208
+
209
+ -- MySQL
210
+ SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
211
+ ```
212
+
213
+ **Trade-off**: Highest consistency, lowest concurrency (may cause serialization failures)
214
+
215
+ ### Isolation Level Comparison
216
+
217
+ | Level | Dirty Read | Non-Repeatable Read | Phantom Read | Performance |
218
+ |-------|------------|---------------------|--------------|-------------|
219
+ | Read Uncommitted | ✅ Possible | ✅ Possible | ✅ Possible | Highest |
220
+ | Read Committed | ❌ Prevented | ✅ Possible | ✅ Possible | High |
221
+ | Repeatable Read | ❌ Prevented | ❌ Prevented | ✅ Possible* | Medium |
222
+ | Serializable | ❌ Prevented | ❌ Prevented | ❌ Prevented | Lowest |
223
+
224
+ *PostgreSQL's Repeatable Read prevents phantom reads
225
+
226
+ ### Choosing Isolation Level
227
+
228
+ **Use Read Committed when:**
229
+ - ✅ Default for most applications
230
+ - ✅ Good balance of consistency and performance
231
+ - ✅ Dirty reads are unacceptable
232
+ - ✅ Non-repeatable reads are acceptable
233
+
234
+ **Use Repeatable Read when:**
235
+ - ✅ Consistent reads within transaction are required
236
+ - ✅ Reporting or analytics queries
237
+ - ✅ Batch processing
238
+
239
+ **Use Serializable when:**
240
+ - ✅ Absolute consistency is required
241
+ - ✅ Financial transactions
242
+ - ✅ Inventory management
243
+ - ✅ Low concurrency scenarios
244
+
245
+ ---
246
+
247
+ ## Locking Strategies
248
+
249
+ ### Optimistic Locking
250
+
251
+ **Principle**: Assume conflicts are rare, check before committing
252
+
253
+ **Implementation**: Use version column or timestamp
254
+
255
+ ```sql
256
+ -- Add version column
257
+ ALTER TABLE products ADD COLUMN version INT DEFAULT 0;
258
+
259
+ -- Read with version
260
+ SELECT id, name, price, version FROM products WHERE id = 1;
261
+ -- Returns: id=1, name='Widget', price=10.00, version=5
262
+
263
+ -- Update with version check
264
+ UPDATE products
265
+ SET price = 12.00, version = version + 1
266
+ WHERE id = 1 AND version = 5;
267
+
268
+ -- Check affected rows
269
+ -- If 0 rows affected, another transaction updated the record (conflict)
270
+ ```
271
+
272
+ **Application-level example:**
273
+ ```javascript
274
+ // Read product
275
+ const product = await db.query('SELECT * FROM products WHERE id = ?', [1]);
276
+
277
+ // User modifies price
278
+ product.price = 12.00;
279
+
280
+ // Update with version check
281
+ const result = await db.query(
282
+ 'UPDATE products SET price = ?, version = version + 1 WHERE id = ? AND version = ?',
283
+ [product.price, product.id, product.version]
284
+ );
285
+
286
+ if (result.affectedRows === 0) {
287
+ throw new Error('Product was modified by another user. Please refresh and try again.');
288
+ }
289
+ ```
290
+
291
+ **Benefits:**
292
+ - ✅ Better performance (no locks held)
293
+ - ✅ Better scalability
294
+ - ✅ No deadlocks
295
+
296
+ **Drawbacks:**
297
+ - ❌ Conflicts must be handled by application
298
+ - ❌ Not suitable for high-conflict scenarios
299
+
300
+ ### Pessimistic Locking
301
+
302
+ **Principle**: Lock rows before modifying to prevent conflicts
303
+
304
+ **Implementation**: Use SELECT FOR UPDATE
305
+
306
+ ```sql
307
+ -- Lock row for update
308
+ BEGIN;
309
+ SELECT * FROM products WHERE id = 1 FOR UPDATE;
310
+
311
+ -- Other transactions will wait here
312
+ UPDATE products SET price = 12.00 WHERE id = 1;
313
+
314
+ COMMIT; -- Lock is released
315
+ ```
316
+
317
+ **Lock types:**
318
+
319
+ ```sql
320
+ -- Exclusive lock (blocks all other locks)
321
+ SELECT * FROM products WHERE id = 1 FOR UPDATE;
322
+
323
+ -- Shared lock (blocks exclusive locks, allows other shared locks)
324
+ SELECT * FROM products WHERE id = 1 FOR SHARE; -- PostgreSQL
325
+ SELECT * FROM products WHERE id = 1 LOCK IN SHARE MODE; -- MySQL
326
+
327
+ -- Skip locked rows (don't wait)
328
+ SELECT * FROM products WHERE id = 1 FOR UPDATE SKIP LOCKED; -- PostgreSQL 9.5+
329
+
330
+ -- Fail immediately if locked
331
+ SELECT * FROM products WHERE id = 1 FOR UPDATE NOWAIT; -- PostgreSQL
332
+ ```
333
+
334
+ **Benefits:**
335
+ - ✅ Prevents conflicts
336
+ - ✅ Simpler application logic
337
+ - ✅ Suitable for high-conflict scenarios
338
+
339
+ **Drawbacks:**
340
+ - ❌ Lower performance (locks held during transaction)
341
+ - ❌ Potential for deadlocks
342
+ - ❌ Reduced concurrency
343
+
344
+ ---
345
+
346
+ ## Deadlock Prevention
347
+
348
+ ### What is a Deadlock?
349
+
350
+ **Definition**: Two or more transactions waiting for each other to release locks
351
+
352
+ **Example:**
353
+ ```sql
354
+ -- Transaction 1
355
+ BEGIN;
356
+ UPDATE accounts SET balance = balance - 100 WHERE id = 1; -- Locks account 1
357
+ -- Waiting to lock account 2...
358
+ UPDATE accounts SET balance = balance + 100 WHERE id = 2;
359
+
360
+ -- Transaction 2 (at the same time)
361
+ BEGIN;
362
+ UPDATE accounts SET balance = balance - 50 WHERE id = 2; -- Locks account 2
363
+ -- Waiting to lock account 1...
364
+ UPDATE accounts SET balance = balance + 50 WHERE id = 1;
365
+
366
+ -- DEADLOCK! Both transactions are waiting for each other
367
+ ```
368
+
369
+ ### Deadlock Prevention Strategies
370
+
371
+ #### 1. Lock Resources in Consistent Order
372
+
373
+ ```sql
374
+ -- ❌ BAD: Inconsistent lock order
375
+ -- Transaction 1: Lock A, then B
376
+ -- Transaction 2: Lock B, then A
377
+
378
+ -- ✅ GOOD: Consistent lock order (always lock lower ID first)
379
+ BEGIN;
380
+ UPDATE accounts SET balance = balance - 100 WHERE id = LEAST(1, 2);
381
+ UPDATE accounts SET balance = balance + 100 WHERE id = GREATEST(1, 2);
382
+ COMMIT;
383
+ ```
384
+
385
+ #### 2. Keep Transactions Short
386
+
387
+ ```sql
388
+ -- ❌ BAD: Long transaction holding locks
389
+ BEGIN;
390
+ SELECT * FROM products WHERE id = 1 FOR UPDATE;
391
+ -- ... complex business logic ...
392
+ -- ... external API call ...
393
+ UPDATE products SET price = 12.00 WHERE id = 1;
394
+ COMMIT;
395
+
396
+ -- ✅ GOOD: Short transaction
397
+ -- Do business logic first
398
+ const newPrice = calculatePrice();
399
+
400
+ BEGIN;
401
+ SELECT * FROM products WHERE id = 1 FOR UPDATE;
402
+ UPDATE products SET price = newPrice WHERE id = 1;
403
+ COMMIT;
404
+ ```
405
+
406
+ #### 3. Use Lower Isolation Levels
407
+
408
+ ```sql
409
+ -- ✅ GOOD: Use Read Committed instead of Serializable when possible
410
+ SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
411
+ ```
412
+
413
+ #### 4. Use Timeouts
414
+
415
+ ```sql
416
+ -- PostgreSQL: Set lock timeout
417
+ SET lock_timeout = '5s';
418
+
419
+ -- MySQL: Set lock wait timeout
420
+ SET innodb_lock_wait_timeout = 5;
421
+ ```
422
+
423
+ ### Handling Deadlocks
424
+
425
+ **Database automatically detects and resolves deadlocks by rolling back one transaction**
426
+
427
+ ```javascript
428
+ // Application should retry on deadlock
429
+ async function transferMoney(fromId, toId, amount, maxRetries = 3) {
430
+ for (let i = 0; i < maxRetries; i++) {
431
+ try {
432
+ await db.transaction(async (tx) => {
433
+ await tx.query('UPDATE accounts SET balance = balance - ? WHERE id = ?', [amount, fromId]);
434
+ await tx.query('UPDATE accounts SET balance = balance + ? WHERE id = ?', [amount, toId]);
435
+ });
436
+ return; // Success
437
+ } catch (error) {
438
+ if (error.code === 'DEADLOCK' && i < maxRetries - 1) {
439
+ // Wait and retry
440
+ await sleep(Math.random() * 100);
441
+ continue;
442
+ }
443
+ throw error;
444
+ }
445
+ }
446
+ }
447
+ ```
448
+
449
+ ---
450
+
451
+ ## Savepoints
452
+
453
+ ### What are Savepoints?
454
+
455
+ **Definition**: Markers within a transaction that allow partial rollback
456
+
457
+ **Use case**: Complex transactions with multiple steps where you want to rollback only part of the transaction
458
+
459
+ ### Using Savepoints
460
+
461
+ ```sql
462
+ -- PostgreSQL / MySQL
463
+ BEGIN;
464
+
465
+ INSERT INTO orders (user_id, total) VALUES (1, 100.00);
466
+
467
+ SAVEPOINT after_order;
468
+
469
+ INSERT INTO order_items (order_id, product_id, quantity) VALUES (1, 10, 2);
470
+ INSERT INTO order_items (order_id, product_id, quantity) VALUES (1, 20, 1);
471
+
472
+ -- Error occurs
473
+ INSERT INTO order_items (order_id, product_id, quantity) VALUES (1, 999, 1); -- Product doesn't exist
474
+
475
+ -- Rollback to savepoint (keeps order, removes order_items)
476
+ ROLLBACK TO SAVEPOINT after_order;
477
+
478
+ -- Continue transaction
479
+ INSERT INTO order_items (order_id, product_id, quantity) VALUES (1, 30, 1);
480
+
481
+ COMMIT;
482
+ ```
483
+
484
+ ### Nested Savepoints
485
+
486
+ ```sql
487
+ BEGIN;
488
+
489
+ INSERT INTO users (email) VALUES ('user@example.com');
490
+ SAVEPOINT user_created;
491
+
492
+ INSERT INTO profiles (user_id, name) VALUES (1, 'John');
493
+ SAVEPOINT profile_created;
494
+
495
+ INSERT INTO addresses (user_id, street) VALUES (1, '123 Main St');
496
+ SAVEPOINT address_created;
497
+
498
+ -- Rollback to specific savepoint
499
+ ROLLBACK TO SAVEPOINT profile_created; -- Removes addresses and profiles, keeps user
500
+
501
+ COMMIT;
502
+ ```
503
+
504
+ ### Application-Level Example
505
+
506
+ ```javascript
507
+ async function createOrderWithItems(userId, items) {
508
+ const client = await pool.connect();
509
+
510
+ try {
511
+ await client.query('BEGIN');
512
+
513
+ // Create order
514
+ const orderResult = await client.query(
515
+ 'INSERT INTO orders (user_id, total) VALUES ($1, $2) RETURNING id',
516
+ [userId, 0]
517
+ );
518
+ const orderId = orderResult.rows[0].id;
519
+
520
+ await client.query('SAVEPOINT after_order');
521
+
522
+ let total = 0;
523
+
524
+ // Add items
525
+ for (const item of items) {
526
+ try {
527
+ await client.query(
528
+ 'INSERT INTO order_items (order_id, product_id, quantity, price) VALUES ($1, $2, $3, $4)',
529
+ [orderId, item.productId, item.quantity, item.price]
530
+ );
531
+ total += item.price * item.quantity;
532
+ } catch (error) {
533
+ // Rollback to savepoint and continue with other items
534
+ await client.query('ROLLBACK TO SAVEPOINT after_order');
535
+ console.error(`Failed to add item ${item.productId}:`, error);
536
+ }
537
+ }
538
+
539
+ // Update order total
540
+ await client.query('UPDATE orders SET total = $1 WHERE id = $2', [total, orderId]);
541
+
542
+ await client.query('COMMIT');
543
+ return orderId;
544
+ } catch (error) {
545
+ await client.query('ROLLBACK');
546
+ throw error;
547
+ } finally {
548
+ client.release();
549
+ }
550
+ }
551
+ ```
552
+
553
+ ---
554
+
555
+ ## Two-Phase Commit (2PC)
556
+
557
+ ### What is Two-Phase Commit?
558
+
559
+ **Definition**: Protocol for coordinating distributed transactions across multiple databases
560
+
561
+ **Phases:**
562
+ 1. **Prepare phase**: All participants prepare to commit and vote yes/no
563
+ 2. **Commit phase**: If all vote yes, coordinator tells all to commit; otherwise, all rollback
564
+
565
+ ### Two-Phase Commit Example
566
+
567
+ ```sql
568
+ -- Coordinator
569
+ BEGIN;
570
+
571
+ -- Prepare phase
572
+ PREPARE TRANSACTION 'tx_123' ON database1;
573
+ PREPARE TRANSACTION 'tx_123' ON database2;
574
+
575
+ -- All participants voted yes
576
+ -- Commit phase
577
+ COMMIT PREPARED 'tx_123' ON database1;
578
+ COMMIT PREPARED 'tx_123' ON database2;
579
+
580
+ -- If any participant voted no
581
+ -- ROLLBACK PREPARED 'tx_123' ON database1;
582
+ -- ROLLBACK PREPARED 'tx_123' ON database2;
583
+ ```
584
+
585
+ ### Limitations
586
+
587
+ **Drawbacks:**
588
+ - ❌ Blocking protocol (participants wait for coordinator)
589
+ - ❌ Single point of failure (coordinator)
590
+ - ❌ Performance overhead
591
+ - ❌ Not supported by all databases
592
+
593
+ **Alternatives:**
594
+ - ✅ Saga pattern (compensating transactions)
595
+ - ✅ Event sourcing
596
+ - ✅ Eventual consistency
597
+
598
+ ---
599
+
600
+ ## Distributed Transactions
601
+
602
+ ### Saga Pattern
603
+
604
+ **Principle**: Break distributed transaction into local transactions with compensating actions
605
+
606
+ **Example: Order Processing**
607
+
608
+ ```javascript
609
+ // Saga: Create order, reserve inventory, charge payment
610
+ async function createOrderSaga(userId, items, paymentInfo) {
611
+ const compensations = [];
612
+
613
+ try {
614
+ // Step 1: Create order
615
+ const order = await createOrder(userId, items);
616
+ compensations.push(() => cancelOrder(order.id));
617
+
618
+ // Step 2: Reserve inventory
619
+ await reserveInventory(items);
620
+ compensations.push(() => releaseInventory(items));
621
+
622
+ // Step 3: Charge payment
623
+ await chargePayment(paymentInfo, order.total);
624
+ compensations.push(() => refundPayment(paymentInfo, order.total));
625
+
626
+ // All steps succeeded
627
+ return order;
628
+ } catch (error) {
629
+ // Execute compensations in reverse order
630
+ for (const compensate of compensations.reverse()) {
631
+ try {
632
+ await compensate();
633
+ } catch (compensationError) {
634
+ console.error('Compensation failed:', compensationError);
635
+ }
636
+ }
637
+ throw error;
638
+ }
639
+ }
640
+ ```
641
+
642
+ ### Event Sourcing
643
+
644
+ **Principle**: Store events instead of current state, rebuild state from events
645
+
646
+ ```javascript
647
+ // Event sourcing example
648
+ const events = [
649
+ { type: 'OrderCreated', orderId: 1, userId: 1, total: 100 },
650
+ { type: 'ItemAdded', orderId: 1, productId: 10, quantity: 2 },
651
+ { type: 'ItemAdded', orderId: 1, productId: 20, quantity: 1 },
652
+ { type: 'PaymentCharged', orderId: 1, amount: 100 },
653
+ { type: 'OrderShipped', orderId: 1, trackingNumber: 'ABC123' }
654
+ ];
655
+
656
+ // Rebuild state from events
657
+ function rebuildOrderState(events) {
658
+ const state = { items: [], payments: [], shipments: [] };
659
+
660
+ for (const event of events) {
661
+ switch (event.type) {
662
+ case 'OrderCreated':
663
+ state.id = event.orderId;
664
+ state.userId = event.userId;
665
+ state.total = event.total;
666
+ break;
667
+ case 'ItemAdded':
668
+ state.items.push({ productId: event.productId, quantity: event.quantity });
669
+ break;
670
+ case 'PaymentCharged':
671
+ state.payments.push({ amount: event.amount });
672
+ break;
673
+ case 'OrderShipped':
674
+ state.shipments.push({ trackingNumber: event.trackingNumber });
675
+ break;
676
+ }
677
+ }
678
+
679
+ return state;
680
+ }
681
+ ```
682
+
683
+ ---
684
+
685
+ ## Transaction Best Practices
686
+
687
+ ### DO
688
+
689
+ ✅ Keep transactions as short as possible
690
+ ✅ Use appropriate isolation level for your use case
691
+ ✅ Handle deadlocks with retries
692
+ ✅ Use optimistic locking for low-conflict scenarios
693
+ ✅ Use pessimistic locking for high-conflict scenarios
694
+ ✅ Lock resources in consistent order
695
+ ✅ Use savepoints for complex transactions
696
+ ✅ Set timeouts to prevent long-running transactions
697
+ ✅ Monitor transaction performance
698
+
699
+ ### DON'T
700
+
701
+ ❌ Hold locks during external API calls
702
+ ❌ Use Serializable isolation level unless necessary
703
+ ❌ Ignore deadlock errors
704
+ ❌ Use long-running transactions
705
+ ❌ Mix business logic with database transactions
706
+ ❌ Forget to commit or rollback transactions
707
+ ❌ Use distributed transactions unless absolutely necessary
708
+
709
+ ### Transaction Patterns
710
+
711
+ **Pattern 1: Unit of Work**
712
+ ```javascript
713
+ class UnitOfWork {
714
+ constructor(db) {
715
+ this.db = db;
716
+ }
717
+
718
+ async execute(work) {
719
+ const client = await this.db.connect();
720
+ try {
721
+ await client.query('BEGIN');
722
+ const result = await work(client);
723
+ await client.query('COMMIT');
724
+ return result;
725
+ } catch (error) {
726
+ await client.query('ROLLBACK');
727
+ throw error;
728
+ } finally {
729
+ client.release();
730
+ }
731
+ }
732
+ }
733
+
734
+ // Usage
735
+ const uow = new UnitOfWork(pool);
736
+ await uow.execute(async (client) => {
737
+ await client.query('INSERT INTO users (email) VALUES ($1)', ['user@example.com']);
738
+ await client.query('INSERT INTO profiles (user_id, name) VALUES ($1, $2)', [1, 'John']);
739
+ });
740
+ ```
741
+
742
+ **Pattern 2: Repository with Transactions**
743
+ ```javascript
744
+ class OrderRepository {
745
+ constructor(db) {
746
+ this.db = db;
747
+ }
748
+
749
+ async createWithItems(userId, items) {
750
+ return this.db.transaction(async (tx) => {
751
+ const order = await tx.query(
752
+ 'INSERT INTO orders (user_id, total) VALUES ($1, $2) RETURNING *',
753
+ [userId, 0]
754
+ );
755
+
756
+ let total = 0;
757
+ for (const item of items) {
758
+ await tx.query(
759
+ 'INSERT INTO order_items (order_id, product_id, quantity, price) VALUES ($1, $2, $3, $4)',
760
+ [order.id, item.productId, item.quantity, item.price]
761
+ );
762
+ total += item.price * item.quantity;
763
+ }
764
+
765
+ await tx.query('UPDATE orders SET total = $1 WHERE id = $2', [total, order.id]);
766
+
767
+ return order;
768
+ });
769
+ }
770
+ }
771
+ ```
772
+
773
+ ---
774
+
775
+ ## Related Documentation
776
+
777
+ - **relational-databases.md**: Relational database fundamentals
778
+ - **relational-schema-design.md**: Schema design and normalization
779
+ - **relational-query-optimization.md**: Query optimization
780
+ - **performance-optimization.md**: General performance optimization
781
+ - **security-standards.md**: Database security
782
+
783
+