@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,403 @@
1
+ # Testing Standards
2
+
3
+ ## Overview
4
+
5
+ Comprehensive testing is essential for maintaining code quality and preventing regressions. This document defines standards for unit testing, integration testing, and test organization using PHPUnit.
6
+
7
+ ---
8
+
9
+ ## Unit Testing
10
+
11
+ ### PHPUnit Setup
12
+
13
+ **Rules:**
14
+ - Use PHPUnit for all PHP testing
15
+ - Organize tests to mirror source code structure
16
+ - Aim for at least 80% code coverage
17
+
18
+ **Directory Structure:**
19
+ ```
20
+ project/
21
+ ├── src/
22
+ │ └── Services/
23
+ │ └── UserService.php
24
+ └── tests/
25
+ └── Unit/
26
+ └── Services/
27
+ └── UserServiceTest.php
28
+ ```
29
+
30
+ ### Test Class Structure
31
+
32
+ **Rules:**
33
+ - Test classes MUST extend `PHPUnit\Framework\TestCase`
34
+ - Test class names MUST end with `Test`
35
+ - Test method names MUST start with `test` or use `@test` annotation
36
+ - Use descriptive test method names
37
+
38
+ **Examples:**
39
+ ```php
40
+ // ✅ Good
41
+ use PHPUnit\Framework\TestCase;
42
+
43
+ class UserServiceTest extends TestCase
44
+ {
45
+ public function testCreateUserWithValidData(): void
46
+ {
47
+ // Test implementation
48
+ }
49
+
50
+ public function testCreateUserThrowsExceptionForInvalidEmail(): void
51
+ {
52
+ // Test implementation
53
+ }
54
+
55
+ /** @test */
56
+ public function it_updates_user_successfully(): void
57
+ {
58
+ // Test implementation
59
+ }
60
+ }
61
+
62
+ // ❌ Bad
63
+ class UserService extends TestCase // Missing 'Test' suffix
64
+ {
65
+ public function create_user(): void // Doesn't start with 'test'
66
+ {
67
+ // Test implementation
68
+ }
69
+ }
70
+ ```
71
+
72
+ ### AAA Pattern (Arrange-Act-Assert)
73
+
74
+ **Rules:**
75
+ - Structure tests using Arrange-Act-Assert pattern
76
+ - Keep tests focused on single behavior
77
+ - Use blank lines to separate AAA sections
78
+
79
+ **Examples:**
80
+ ```php
81
+ // ✅ Good
82
+ public function testCalculateTotalPrice(): void
83
+ {
84
+ // Arrange
85
+ $items = [
86
+ ['price' => 10.00, 'quantity' => 2],
87
+ ['price' => 5.00, 'quantity' => 3],
88
+ ];
89
+ $calculator = new PriceCalculator();
90
+
91
+ // Act
92
+ $total = $calculator->calculateTotal($items);
93
+
94
+ // Assert
95
+ $this->assertEquals(35.00, $total);
96
+ }
97
+
98
+ // ❌ Bad - Mixed concerns
99
+ public function testMultipleThings(): void
100
+ {
101
+ $calc = new PriceCalculator();
102
+ $this->assertEquals(35.00, $calc->calculateTotal($items1));
103
+ $this->assertEquals(50.00, $calc->calculateTotal($items2));
104
+ $this->assertTrue($calc->isValid());
105
+ }
106
+ ```
107
+
108
+ ### Assertions
109
+
110
+ **Rules:**
111
+ - Use specific assertions over generic ones
112
+ - Include meaningful assertion messages
113
+ - Use type-specific assertions
114
+
115
+ **Common Assertions:**
116
+ ```php
117
+ // ✅ Good - Specific assertions
118
+ $this->assertTrue($result);
119
+ $this->assertFalse($result);
120
+ $this->assertEquals($expected, $actual);
121
+ $this->assertSame($expected, $actual); // Strict comparison
122
+ $this->assertNull($value);
123
+ $this->assertNotNull($value);
124
+ $this->assertEmpty($array);
125
+ $this->assertCount(3, $array);
126
+ $this->assertInstanceOf(User::class, $user);
127
+ $this->assertStringContainsString('error', $message);
128
+ $this->assertArrayHasKey('email', $data);
129
+
130
+ // ✅ Good - With messages
131
+ $this->assertEquals(100, $total, 'Total price should be 100');
132
+
133
+ // ❌ Bad - Generic assertion
134
+ $this->assertTrue($user instanceof User); // Use assertInstanceOf instead
135
+ ```
136
+
137
+ ### Test Doubles (Mocks and Stubs)
138
+
139
+ **Rules:**
140
+ - Use mocks to verify behavior
141
+ - Use stubs to provide test data
142
+ - Mock external dependencies
143
+ - Don't mock the system under test
144
+
145
+ **Examples:**
146
+ ```php
147
+ // ✅ Good - Mock external dependency
148
+ public function testSendEmailNotification(): void
149
+ {
150
+ // Arrange
151
+ $mailer = $this->createMock(MailerInterface::class);
152
+ $mailer->expects($this->once())
153
+ ->method('send')
154
+ ->with($this->equalTo('user@example.com'));
155
+
156
+ $notifier = new EmailNotifier($mailer);
157
+
158
+ // Act
159
+ $notifier->notify('user@example.com', 'Test message');
160
+
161
+ // Assert - Verification happens via expects()
162
+ }
163
+
164
+ // ✅ Good - Stub for test data
165
+ public function testProcessUserData(): void
166
+ {
167
+ // Arrange
168
+ $repository = $this->createStub(UserRepositoryInterface::class);
169
+ $repository->method('findById')
170
+ ->willReturn(new User(1, 'John Doe'));
171
+
172
+ $service = new UserService($repository);
173
+
174
+ // Act
175
+ $result = $service->processUser(1);
176
+
177
+ // Assert
178
+ $this->assertEquals('John Doe', $result->name);
179
+ }
180
+ ```
181
+
182
+ ### Data Providers
183
+
184
+ **Rules:**
185
+ - Use data providers for testing multiple scenarios
186
+ - Keep data providers focused and readable
187
+ - Name data sets descriptively
188
+
189
+ **Examples:**
190
+ ```php
191
+ // ✅ Good
192
+ /**
193
+ * @dataProvider emailValidationProvider
194
+ */
195
+ public function testEmailValidation(string $email, bool $expected): void
196
+ {
197
+ $validator = new EmailValidator();
198
+ $result = $validator->isValid($email);
199
+ $this->assertEquals($expected, $result);
200
+ }
201
+
202
+ public function emailValidationProvider(): array
203
+ {
204
+ return [
205
+ 'valid email' => ['user@example.com', true],
206
+ 'invalid - no @' => ['userexample.com', false],
207
+ 'invalid - no domain' => ['user@', false],
208
+ 'invalid - empty' => ['', false],
209
+ ];
210
+ }
211
+ ```
212
+
213
+ ---
214
+
215
+ ## Integration Testing
216
+
217
+ ### Database Testing
218
+
219
+ **Rules:**
220
+ - Use transactions for test isolation
221
+ - Reset database state between tests
222
+ - Use test fixtures for consistent data
223
+
224
+ **Examples:**
225
+ ```php
226
+ // ✅ Good - Transaction-based test
227
+ use Illuminate\Foundation\Testing\RefreshDatabase;
228
+
229
+ class UserRepositoryTest extends TestCase
230
+ {
231
+ use RefreshDatabase;
232
+
233
+ public function testFindUserById(): void
234
+ {
235
+ // Arrange
236
+ $user = User::factory()->create([
237
+ 'email' => 'test@example.com'
238
+ ]);
239
+
240
+ $repository = new UserRepository();
241
+
242
+ // Act
243
+ $found = $repository->findById($user->id);
244
+
245
+ // Assert
246
+ $this->assertNotNull($found);
247
+ $this->assertEquals('test@example.com', $found->email);
248
+ }
249
+ }
250
+ ```
251
+
252
+ ### API Testing
253
+
254
+ **Rules:**
255
+ - Test request/response contracts
256
+ - Verify HTTP status codes
257
+ - Validate response structure
258
+ - Test authentication and authorization
259
+
260
+ **Examples:**
261
+ ```php
262
+ // ✅ Good - API endpoint test
263
+ public function testGetUserEndpoint(): void
264
+ {
265
+ // Arrange
266
+ $user = User::factory()->create();
267
+
268
+ // Act
269
+ $response = $this->getJson("/api/users/{$user->id}");
270
+
271
+ // Assert
272
+ $response->assertStatus(200)
273
+ ->assertJson([
274
+ 'id' => $user->id,
275
+ 'email' => $user->email,
276
+ ])
277
+ ->assertJsonStructure([
278
+ 'id',
279
+ 'email',
280
+ 'created_at',
281
+ 'updated_at',
282
+ ]);
283
+ }
284
+
285
+ public function testUnauthorizedAccess(): void
286
+ {
287
+ $response = $this->getJson('/api/admin/users');
288
+ $response->assertStatus(401);
289
+ }
290
+ ```
291
+
292
+ ---
293
+
294
+ ## Test Organization
295
+
296
+ ### Test Naming
297
+
298
+ **Rules:**
299
+ - Use descriptive test names that explain what is being tested
300
+ - Include the expected outcome in the name
301
+ - Use snake_case or camelCase consistently
302
+
303
+ **Examples:**
304
+ ```php
305
+ // ✅ Good - Descriptive names
306
+ public function testCreateUserWithValidDataReturnsUser(): void
307
+ public function testCreateUserWithInvalidEmailThrowsException(): void
308
+ public function testDeleteUserRemovesFromDatabase(): void
309
+
310
+ // ❌ Bad - Vague names
311
+ public function testUser(): void
312
+ public function testCreate(): void
313
+ ```
314
+
315
+ ### Test Coverage
316
+
317
+ **Rules:**
318
+ - Aim for at least 80% code coverage
319
+ - Focus on critical business logic
320
+ - Don't chase 100% coverage at the expense of test quality
321
+
322
+ **Generate Coverage Report:**
323
+ ```bash
324
+ # ✅ Good
325
+ ./vendor/bin/phpunit --coverage-html coverage/
326
+ ```
327
+
328
+ ### Setup and Teardown
329
+
330
+ **Rules:**
331
+ - Use `setUp()` for common test initialization
332
+ - Use `tearDown()` for cleanup
333
+ - Keep setup minimal and focused
334
+
335
+ **Examples:**
336
+ ```php
337
+ // ✅ Good
338
+ class UserServiceTest extends TestCase
339
+ {
340
+ private UserService $service;
341
+ private UserRepositoryInterface $repository;
342
+
343
+ protected function setUp(): void
344
+ {
345
+ parent::setUp();
346
+
347
+ $this->repository = $this->createMock(UserRepositoryInterface::class);
348
+ $this->service = new UserService($this->repository);
349
+ }
350
+
351
+ protected function tearDown(): void
352
+ {
353
+ parent::tearDown();
354
+ // Cleanup if needed
355
+ }
356
+
357
+ public function testSomething(): void
358
+ {
359
+ // Test uses $this->service
360
+ }
361
+ }
362
+ ```
363
+
364
+ ---
365
+
366
+ ## Best Practices
367
+
368
+ ### Test Independence
369
+
370
+ **Rules:**
371
+ - Tests MUST be independent of each other
372
+ - Tests MUST NOT rely on execution order
373
+ - Each test MUST set up its own state
374
+
375
+ ### Fast Tests
376
+
377
+ **Rules:**
378
+ - Keep unit tests fast (< 100ms each)
379
+ - Mock external services
380
+ - Use in-memory databases for integration tests when possible
381
+
382
+ ### Readable Tests
383
+
384
+ **Rules:**
385
+ - Tests should be easy to understand
386
+ - Use helper methods to reduce duplication
387
+ - Avoid complex logic in tests
388
+
389
+ **Examples:**
390
+ ```php
391
+ // ✅ Good - Helper method
392
+ private function createTestUser(array $attributes = []): User
393
+ {
394
+ return User::factory()->create($attributes);
395
+ }
396
+
397
+ public function testUserCreation(): void
398
+ {
399
+ $user = $this->createTestUser(['email' => 'test@example.com']);
400
+ $this->assertEquals('test@example.com', $user->email);
401
+ }
402
+ ```
403
+
@@ -0,0 +1,331 @@
1
+ # Type Declarations
2
+
3
+ ## Overview
4
+
5
+ Modern PHP (8.0+) provides robust type declaration features. This document defines standards for using type hints, return types, and strict typing to improve code safety and clarity.
6
+
7
+ ---
8
+
9
+ ## Strict Types
10
+
11
+ ### Enable Strict Types
12
+
13
+ **Rule:**
14
+ - All PHP files SHOULD declare strict types at the top
15
+ - Place immediately after opening `<?php` tag
16
+
17
+ **Example:**
18
+ ```php
19
+ <?php
20
+
21
+ declare(strict_types=1);
22
+
23
+ namespace App\Services;
24
+
25
+ class UserService
26
+ {
27
+ // ...
28
+ }
29
+ ```
30
+
31
+ **Benefits:**
32
+ - Prevents implicit type coercion
33
+ - Catches type errors early
34
+ - Improves code reliability
35
+
36
+ ---
37
+
38
+ ## Function and Method Type Hints
39
+
40
+ ### Parameter Type Declarations
41
+
42
+ **Rules:**
43
+ - Parameters SHOULD have type declarations
44
+ - Use scalar types: `int`, `float`, `string`, `bool`
45
+ - Use class/interface names for objects
46
+ - Use `array` for arrays (or specific array shapes in PHPDoc)
47
+ - Use `callable` for callbacks
48
+ - Use `iterable` for arrays or Traversable objects
49
+
50
+ **Examples:**
51
+ ```php
52
+ // ✅ Good
53
+ function processUser(int $id, string $name, bool $isActive): void
54
+ {
55
+ // ...
56
+ }
57
+
58
+ function saveOrder(Order $order, PaymentGatewayInterface $gateway): bool
59
+ {
60
+ // ...
61
+ }
62
+
63
+ function filterItems(array $items, callable $callback): array
64
+ {
65
+ return array_filter($items, $callback);
66
+ }
67
+
68
+ // ❌ Bad
69
+ function processUser($id, $name, $isActive) // No type hints
70
+ {
71
+ // ...
72
+ }
73
+ ```
74
+
75
+ ### Return Type Declarations
76
+
77
+ **Rules:**
78
+ - Return types SHOULD be declared for all methods
79
+ - Use `void` for methods that don't return a value
80
+ - Use specific types instead of `mixed` when possible
81
+ - Use `never` for methods that always throw or exit (PHP 8.1+)
82
+
83
+ **Examples:**
84
+ ```php
85
+ // ✅ Good
86
+ function getUserById(int $id): ?User
87
+ {
88
+ return User::find($id);
89
+ }
90
+
91
+ function calculateTotal(array $items): float
92
+ {
93
+ return array_sum(array_column($items, 'price'));
94
+ }
95
+
96
+ function logMessage(string $message): void
97
+ {
98
+ error_log($message);
99
+ }
100
+
101
+ function throwError(): never
102
+ {
103
+ throw new RuntimeException('Fatal error');
104
+ }
105
+
106
+ // ❌ Bad
107
+ function getUserById(int $id) // No return type
108
+ {
109
+ return User::find($id);
110
+ }
111
+ ```
112
+
113
+ ---
114
+
115
+ ## Nullable Types
116
+
117
+ ### Nullable Type Syntax
118
+
119
+ **Rules:**
120
+ - Use `?Type` syntax for nullable types
121
+ - Nullable types indicate the value can be `null`
122
+ - Place `?` before the type name
123
+
124
+ **Examples:**
125
+ ```php
126
+ // ✅ Good
127
+ function findUser(int $id): ?User
128
+ {
129
+ return User::find($id) ?: null;
130
+ }
131
+
132
+ function processData(?string $input): string
133
+ {
134
+ return $input ?? 'default';
135
+ }
136
+
137
+ class User
138
+ {
139
+ public function __construct(
140
+ public string $name,
141
+ public ?string $email = null,
142
+ public ?DateTime $birthDate = null
143
+ ) {}
144
+ }
145
+
146
+ // ❌ Bad
147
+ function findUser(int $id): User // Should be nullable
148
+ {
149
+ return User::find($id) ?: null; // Can return null
150
+ }
151
+ ```
152
+
153
+ ---
154
+
155
+ ## Union Types (PHP 8.0+)
156
+
157
+ ### Union Type Syntax
158
+
159
+ **Rules:**
160
+ - Use `Type1|Type2` syntax for union types
161
+ - Union types allow multiple possible types
162
+ - Order types from most specific to least specific
163
+ - Use when a parameter or return can be multiple types
164
+
165
+ **Examples:**
166
+ ```php
167
+ // ✅ Good
168
+ function formatValue(int|float $value): string
169
+ {
170
+ return number_format($value, 2);
171
+ }
172
+
173
+ function processInput(string|array $data): array
174
+ {
175
+ return is_array($data) ? $data : [$data];
176
+ }
177
+
178
+ function findRecord(int|string $identifier): ?User
179
+ {
180
+ return is_int($identifier)
181
+ ? User::find($identifier)
182
+ : User::where('email', $identifier)->first();
183
+ }
184
+
185
+ // Union with null (alternative to nullable syntax)
186
+ function getValue(): int|string|null
187
+ {
188
+ // ...
189
+ }
190
+
191
+ // ❌ Bad
192
+ function formatValue($value): string // Should specify int|float
193
+ {
194
+ return number_format($value, 2);
195
+ }
196
+ ```
197
+
198
+ ---
199
+
200
+ ## Intersection Types (PHP 8.1+)
201
+
202
+ ### Intersection Type Syntax
203
+
204
+ **Rules:**
205
+ - Use `Type1&Type2` syntax for intersection types
206
+ - Intersection types require all types to be satisfied
207
+ - Commonly used with interfaces
208
+
209
+ **Examples:**
210
+ ```php
211
+ // ✅ Good
212
+ interface Loggable
213
+ {
214
+ public function log(): void;
215
+ }
216
+
217
+ interface Cacheable
218
+ {
219
+ public function cache(): void;
220
+ }
221
+
222
+ function processEntity(Loggable&Cacheable $entity): void
223
+ {
224
+ $entity->log();
225
+ $entity->cache();
226
+ }
227
+ ```
228
+
229
+ ---
230
+
231
+ ## Property Type Declarations (PHP 7.4+)
232
+
233
+ ### Typed Properties
234
+
235
+ **Rules:**
236
+ - Class properties SHOULD have type declarations
237
+ - Typed properties enforce type at assignment
238
+ - Uninitialized typed properties throw error if accessed
239
+
240
+ **Examples:**
241
+ ```php
242
+ // ✅ Good
243
+ class User
244
+ {
245
+ private int $id;
246
+ private string $name;
247
+ private ?string $email = null;
248
+ private array $roles = [];
249
+ private DateTime $createdAt;
250
+
251
+ public function __construct(int $id, string $name)
252
+ {
253
+ $this->id = $id;
254
+ $this->name = $name;
255
+ $this->createdAt = new DateTime();
256
+ }
257
+ }
258
+
259
+ // ❌ Bad
260
+ class User
261
+ {
262
+ private $id; // No type
263
+ private $name; // No type
264
+ private $email; // No type
265
+ }
266
+ ```
267
+
268
+ ### Readonly Properties (PHP 8.1+)
269
+
270
+ **Rules:**
271
+ - Use `readonly` for properties that should not change after initialization
272
+ - Readonly properties can only be initialized once
273
+ - Readonly properties must have a type declaration
274
+
275
+ **Examples:**
276
+ ```php
277
+ // ✅ Good
278
+ class User
279
+ {
280
+ public function __construct(
281
+ public readonly int $id,
282
+ public readonly string $name,
283
+ public readonly DateTime $createdAt
284
+ ) {}
285
+ }
286
+
287
+ // ❌ Bad - trying to modify readonly
288
+ $user = new User(1, 'John', new DateTime());
289
+ $user->name = 'Jane'; // Error: Cannot modify readonly property
290
+ ```
291
+
292
+ ---
293
+
294
+ ## Constructor Property Promotion (PHP 8.0+)
295
+
296
+ **Rules:**
297
+ - Use promoted properties to reduce boilerplate
298
+ - Combine parameter declaration with property declaration
299
+ - Works with visibility modifiers and type declarations
300
+
301
+ **Examples:**
302
+ ```php
303
+ // ✅ Good (PHP 8.0+)
304
+ class User
305
+ {
306
+ public function __construct(
307
+ private int $id,
308
+ private string $name,
309
+ private ?string $email = null,
310
+ private array $roles = []
311
+ ) {}
312
+ }
313
+
314
+ // ❌ Verbose (old style)
315
+ class User
316
+ {
317
+ private int $id;
318
+ private string $name;
319
+ private ?string $email;
320
+ private array $roles;
321
+
322
+ public function __construct(int $id, string $name, ?string $email = null, array $roles = [])
323
+ {
324
+ $this->id = $id;
325
+ $this->name = $name;
326
+ $this->email = $email;
327
+ $this->roles = $roles;
328
+ }
329
+ }
330
+ ```
331
+