@mytechtoday/augment-extensions 0.5.0 → 1.2.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 (523) hide show
  1. package/AGENTS.md +265 -232
  2. package/README.md +956 -771
  3. package/augment-extensions/coding-standards/bash/README.md +196 -196
  4. package/augment-extensions/coding-standards/bash/module.json +163 -163
  5. package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -336
  6. package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -289
  7. package/augment-extensions/coding-standards/css/README.md +40 -40
  8. package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -550
  9. package/augment-extensions/coding-standards/css/module.json +44 -44
  10. package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -448
  11. package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -492
  12. package/augment-extensions/coding-standards/html/README.md +40 -40
  13. package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -267
  14. package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -505
  15. package/augment-extensions/coding-standards/html/module.json +44 -44
  16. package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -349
  17. package/augment-extensions/coding-standards/html-css-js/README.md +194 -194
  18. package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -487
  19. package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -550
  20. package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -667
  21. package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -267
  22. package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -612
  23. package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -505
  24. package/augment-extensions/coding-standards/html-css-js/module.json +48 -48
  25. package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -515
  26. package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -448
  27. package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -492
  28. package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -439
  29. package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -349
  30. package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -486
  31. package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -463
  32. package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -543
  33. package/augment-extensions/coding-standards/js/README.md +46 -46
  34. package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -487
  35. package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -667
  36. package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -612
  37. package/augment-extensions/coding-standards/js/module.json +49 -49
  38. package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -515
  39. package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -439
  40. package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -486
  41. package/augment-extensions/coding-standards/js/rules/performance.md +463 -463
  42. package/augment-extensions/coding-standards/js/rules/tooling.md +543 -543
  43. package/augment-extensions/coding-standards/php/README.md +248 -248
  44. package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -204
  45. package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -206
  46. package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -234
  47. package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -211
  48. package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -215
  49. package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -189
  50. package/augment-extensions/coding-standards/php/module.json +166 -166
  51. package/augment-extensions/coding-standards/php/rules/api-development.md +480 -480
  52. package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -332
  53. package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -472
  54. package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -561
  55. package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -402
  56. package/augment-extensions/coding-standards/php/rules/documentation.md +425 -425
  57. package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -627
  58. package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -336
  59. package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -677
  60. package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -279
  61. package/augment-extensions/coding-standards/php/rules/performance.md +392 -392
  62. package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -186
  63. package/augment-extensions/coding-standards/php/rules/security.md +358 -358
  64. package/augment-extensions/coding-standards/php/rules/testing.md +403 -403
  65. package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -331
  66. package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -426
  67. package/augment-extensions/coding-standards/powershell/README.md +154 -154
  68. package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -272
  69. package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -173
  70. package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -243
  71. package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -297
  72. package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -224
  73. package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -340
  74. package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -255
  75. package/augment-extensions/coding-standards/powershell/module.json +165 -165
  76. package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -439
  77. package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -240
  78. package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -384
  79. package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -383
  80. package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -482
  81. package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -296
  82. package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -314
  83. package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -466
  84. package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -244
  85. package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -266
  86. package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -209
  87. package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -314
  88. package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -268
  89. package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -197
  90. package/augment-extensions/coding-standards/python/README.md +48 -48
  91. package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -373
  92. package/augment-extensions/coding-standards/python/module.json +30 -30
  93. package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -884
  94. package/augment-extensions/coding-standards/python/rules/best-practices.md +232 -232
  95. package/augment-extensions/coding-standards/python/rules/code-organization.md +220 -220
  96. package/augment-extensions/coding-standards/python/rules/documentation.md +831 -831
  97. package/augment-extensions/coding-standards/python/rules/error-handling.md +1008 -1008
  98. package/augment-extensions/coding-standards/python/rules/naming-conventions.md +172 -172
  99. package/augment-extensions/coding-standards/python/rules/testing.md +409 -409
  100. package/augment-extensions/coding-standards/python/rules/tooling.md +446 -446
  101. package/augment-extensions/coding-standards/python/rules/type-hints.md +253 -253
  102. package/augment-extensions/coding-standards/react/README.md +45 -45
  103. package/augment-extensions/coding-standards/react/module.json +27 -27
  104. package/augment-extensions/coding-standards/react/rules/component-patterns.md +214 -214
  105. package/augment-extensions/coding-standards/react/rules/hooks-best-practices.md +235 -235
  106. package/augment-extensions/coding-standards/react/rules/performance.md +300 -300
  107. package/augment-extensions/coding-standards/react/rules/state-management.md +265 -265
  108. package/augment-extensions/coding-standards/react/rules/typescript-react.md +271 -271
  109. package/augment-extensions/coding-standards/typescript/README.md +45 -45
  110. package/augment-extensions/coding-standards/typescript/module.json +27 -27
  111. package/augment-extensions/coding-standards/typescript/rules/naming-conventions.md +225 -225
  112. package/augment-extensions/collections/html-css-js/README.md +82 -82
  113. package/augment-extensions/collections/html-css-js/collection.json +41 -41
  114. package/augment-extensions/domain-rules/api-design/README.md +41 -41
  115. package/augment-extensions/domain-rules/api-design/module.json +27 -27
  116. package/augment-extensions/domain-rules/api-design/rules/authentication.md +263 -263
  117. package/augment-extensions/domain-rules/api-design/rules/documentation.md +395 -395
  118. package/augment-extensions/domain-rules/api-design/rules/error-handling.md +290 -290
  119. package/augment-extensions/domain-rules/api-design/rules/graphql-api.md +313 -313
  120. package/augment-extensions/domain-rules/api-design/rules/rest-api.md +214 -214
  121. package/augment-extensions/domain-rules/api-design/rules/versioning.md +268 -268
  122. package/augment-extensions/domain-rules/database/README.md +161 -161
  123. package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -793
  124. package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -1132
  125. package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -868
  126. package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -805
  127. package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -621
  128. package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -965
  129. package/augment-extensions/domain-rules/database/module.json +28 -28
  130. package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -624
  131. package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -588
  132. package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -856
  133. package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -778
  134. package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -963
  135. package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -1076
  136. package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -697
  137. package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -671
  138. package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -607
  139. package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -907
  140. package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -783
  141. package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -980
  142. package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -485
  143. package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -521
  144. package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -858
  145. package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -934
  146. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -23
  147. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -26
  148. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -23
  149. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -26
  150. package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -23
  151. package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -26
  152. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -23
  153. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -26
  154. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -23
  155. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -26
  156. package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -27
  157. package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -26
  158. package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -23
  159. package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -26
  160. package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -23
  161. package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -26
  162. package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -23
  163. package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -26
  164. package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -23
  165. package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -26
  166. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -23
  167. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -26
  168. package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -23
  169. package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -26
  170. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -23
  171. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -26
  172. package/augment-extensions/domain-rules/mcp/README.md +150 -150
  173. package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -522
  174. package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -520
  175. package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -570
  176. package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -427
  177. package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -435
  178. package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -502
  179. package/augment-extensions/domain-rules/mcp/module.json +49 -49
  180. package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -595
  181. package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -345
  182. package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -687
  183. package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -636
  184. package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -484
  185. package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -360
  186. package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -393
  187. package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -194
  188. package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -625
  189. package/augment-extensions/domain-rules/security/README.md +41 -41
  190. package/augment-extensions/domain-rules/security/module.json +28 -28
  191. package/augment-extensions/domain-rules/security/rules/authentication-security.md +361 -361
  192. package/augment-extensions/domain-rules/security/rules/encryption.md +208 -208
  193. package/augment-extensions/domain-rules/security/rules/input-validation.md +294 -294
  194. package/augment-extensions/domain-rules/security/rules/owasp-top-10.md +339 -339
  195. package/augment-extensions/domain-rules/security/rules/secure-coding.md +293 -293
  196. package/augment-extensions/domain-rules/security/rules/web-security.md +268 -268
  197. package/augment-extensions/domain-rules/seo-sales-marketing/ANNOUNCEMENT.md +143 -0
  198. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/README.md +140 -136
  199. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/SCHEMA-VALIDATION-REPORT.md +216 -216
  200. package/augment-extensions/domain-rules/seo-sales-marketing/TEST-VALIDATION.md +129 -0
  201. package/augment-extensions/domain-rules/seo-sales-marketing/USAGE-GUIDES.md +254 -0
  202. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/brand-kit-example.yaml +292 -292
  203. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/campaign-brief-example.yaml +389 -389
  204. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/content-calendar-example.yaml +643 -643
  205. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/email-newsletter-example.md +376 -376
  206. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/landing-page-example.md +934 -934
  207. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/ppc-ad-copy-example.md +301 -301
  208. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/seo-blog-post-example.md +347 -347
  209. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/social-media-campaign-example.md +606 -606
  210. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/module.json +50 -50
  211. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/affiliate-influencer-marketing.md +593 -593
  212. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/asset-management.md +418 -418
  213. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/brand-consistency.md +210 -210
  214. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/content-marketing.md +337 -337
  215. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/conversion-optimization.md +455 -455
  216. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/direct-sales.md +499 -499
  217. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/email-marketing.md +439 -439
  218. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/legal-compliance.md +227 -227
  219. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/ppc-advertising.md +569 -569
  220. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/seo-optimization.md +470 -470
  221. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/social-media-marketing.md +414 -414
  222. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/universal-marketing.md +177 -177
  223. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/asset-inventory.schema.json +247 -247
  224. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/brand-kit.schema.json +326 -326
  225. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/campaign-brief.schema.json +342 -342
  226. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/color-palette.schema.json +223 -223
  227. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/content-template.schema.json +383 -383
  228. package/augment-extensions/domain-rules/wordpress/README.md +163 -163
  229. package/augment-extensions/domain-rules/wordpress/module.json +32 -32
  230. package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -617
  231. package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -270
  232. package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -423
  233. package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -493
  234. package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -568
  235. package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -510
  236. package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -251
  237. package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -501
  238. package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -564
  239. package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -388
  240. package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -441
  241. package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -139
  242. package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -1599
  243. package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -1727
  244. package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -428
  245. package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -422
  246. package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -1623
  247. package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -1343
  248. package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -734
  249. package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -1350
  250. package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -503
  251. package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -971
  252. package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -53
  253. package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -770
  254. package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -874
  255. package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -629
  256. package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -559
  257. package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -709
  258. package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -736
  259. package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -1057
  260. package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -463
  261. package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -478
  262. package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -818
  263. package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -416
  264. package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -667
  265. package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -878
  266. package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -693
  267. package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -352
  268. package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -818
  269. package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -624
  270. package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -866
  271. package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -1165
  272. package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -414
  273. package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -751
  274. package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -949
  275. package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -458
  276. package/augment-extensions/examples/design-patterns/README.md +37 -37
  277. package/augment-extensions/examples/design-patterns/examples/behavioral-patterns.md +370 -370
  278. package/augment-extensions/examples/design-patterns/examples/creational-patterns.md +250 -250
  279. package/augment-extensions/examples/design-patterns/examples/structural-patterns.md +264 -264
  280. package/augment-extensions/examples/design-patterns/module.json +27 -27
  281. package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -101
  282. package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -428
  283. package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -40
  284. package/augment-extensions/examples/rest-api-plugin/README.md +98 -98
  285. package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -1299
  286. package/augment-extensions/examples/rest-api-plugin/module.json +40 -40
  287. package/augment-extensions/examples/woocommerce-extension/README.md +98 -98
  288. package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -763
  289. package/augment-extensions/examples/woocommerce-extension/module.json +40 -40
  290. package/augment-extensions/workflows/beads/README.md +135 -135
  291. package/augment-extensions/workflows/beads/examples/complete-workflow-example.md +278 -278
  292. package/augment-extensions/workflows/beads/module.json +55 -55
  293. package/augment-extensions/workflows/beads/rules/best-practices.md +398 -398
  294. package/augment-extensions/workflows/beads/rules/file-format.md +327 -327
  295. package/augment-extensions/workflows/beads/rules/manual-setup.md +315 -315
  296. package/augment-extensions/workflows/beads/rules/workflow.md +326 -326
  297. package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -145
  298. package/augment-extensions/workflows/beads-integration/README.md +143 -143
  299. package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -32
  300. package/augment-extensions/workflows/beads-integration/config/schema.json +140 -140
  301. package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -293
  302. package/augment-extensions/workflows/beads-integration/module.json +75 -75
  303. package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -219
  304. package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -256
  305. package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -607
  306. package/augment-extensions/workflows/database/README.md +195 -195
  307. package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -295
  308. package/augment-extensions/workflows/database/examples/migration-example.md +498 -498
  309. package/augment-extensions/workflows/database/examples/optimization-example.md +496 -496
  310. package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -444
  311. package/augment-extensions/workflows/database/module.json +42 -42
  312. package/augment-extensions/workflows/database/rules/data-migration.md +249 -249
  313. package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -339
  314. package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -352
  315. package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -435
  316. package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -535
  317. package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -305
  318. package/augment-extensions/workflows/database/rules/workflow.md +458 -458
  319. package/augment-extensions/workflows/wordpress-plugin/README.md +232 -232
  320. package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -839
  321. package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -854
  322. package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -540
  323. package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -1083
  324. package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -669
  325. package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -597
  326. package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -925
  327. package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -752
  328. package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -773
  329. package/augment-extensions/workflows/wordpress-plugin/module.json +49 -49
  330. package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -942
  331. package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -702
  332. package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -728
  333. package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -775
  334. package/augment-extensions/writing-standards/screenplay/README.md +339 -300
  335. package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -121
  336. package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -153
  337. package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -243
  338. package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -213
  339. package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -164
  340. package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -95
  341. package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -116
  342. package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -151
  343. package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -67
  344. package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -142
  345. package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -184
  346. package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -204
  347. package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -181
  348. package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -2
  349. package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -70
  350. package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -2
  351. package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -399
  352. package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -407
  353. package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -293
  354. package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -293
  355. package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -401
  356. package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -293
  357. package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -409
  358. package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -293
  359. package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -293
  360. package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -268
  361. package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -294
  362. package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -293
  363. package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -294
  364. package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -293
  365. package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -289
  366. package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -293
  367. package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -294
  368. package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -293
  369. package/augment-extensions/writing-standards/screenplay/module.json +124 -124
  370. package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -339
  371. package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -329
  372. package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -169
  373. package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -437
  374. package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -263
  375. package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -261
  376. package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -315
  377. package/augment-extensions/writing-standards/screenplay/rules/file-organization.md +213 -0
  378. package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -413
  379. package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -372
  380. package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -374
  381. package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -443
  382. package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -207
  383. package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -444
  384. package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -331
  385. package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -334
  386. package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -299
  387. package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -263
  388. package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -412
  389. package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -370
  390. package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -374
  391. package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -339
  392. package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -277
  393. package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -393
  394. package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -332
  395. package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -247
  396. package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -200
  397. package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -233
  398. package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -245
  399. package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -221
  400. package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -159
  401. package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -2
  402. package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -1449
  403. package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -64
  404. package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -2
  405. package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -520
  406. package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -499
  407. package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -497
  408. package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -492
  409. package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -509
  410. package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -490
  411. package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -499
  412. package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -501
  413. package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -499
  414. package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -498
  415. package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -499
  416. package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -508
  417. package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -500
  418. package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -158
  419. package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -2
  420. package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -643
  421. package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -311
  422. package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -562
  423. package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -538
  424. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -432
  425. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -637
  426. package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -66
  427. package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -2
  428. package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -458
  429. package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -490
  430. package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -458
  431. package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -459
  432. package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -491
  433. package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -491
  434. package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -490
  435. package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -464
  436. package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -461
  437. package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -489
  438. package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -494
  439. package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -483
  440. package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -489
  441. package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -496
  442. package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -463
  443. package/augment-extensions/writing-standards/screenplay/utils/__tests__/file-organization.test.ts +169 -0
  444. package/augment-extensions/writing-standards/screenplay/utils/file-organization.ts +165 -0
  445. package/cli/MODULES.md +302 -302
  446. package/cli/dist/cli.js +113 -22
  447. package/cli/dist/cli.js.map +1 -1
  448. package/cli/dist/commands/gui.d.ts.map +1 -1
  449. package/cli/dist/commands/gui.js +54 -6
  450. package/cli/dist/commands/gui.js.map +1 -1
  451. package/cli/dist/commands/init.d.ts.map +1 -1
  452. package/cli/dist/commands/init.js +76 -23
  453. package/cli/dist/commands/init.js.map +1 -1
  454. package/cli/dist/commands/self-remove.d.ts.map +1 -1
  455. package/cli/dist/commands/self-remove.js +48 -74
  456. package/cli/dist/commands/self-remove.js.map +1 -1
  457. package/cli/dist/commands/show.d.ts +15 -0
  458. package/cli/dist/commands/show.d.ts.map +1 -1
  459. package/cli/dist/commands/show.js +576 -23
  460. package/cli/dist/commands/show.js.map +1 -1
  461. package/cli/dist/commands/showCompleted.d.ts +21 -0
  462. package/cli/dist/commands/showCompleted.d.ts.map +1 -0
  463. package/cli/dist/commands/showCompleted.js +225 -0
  464. package/cli/dist/commands/showCompleted.js.map +1 -0
  465. package/cli/dist/commands/skill.js +88 -88
  466. package/cli/dist/commands/update.d.ts +2 -0
  467. package/cli/dist/commands/update.d.ts.map +1 -1
  468. package/cli/dist/commands/update.js +67 -1
  469. package/cli/dist/commands/update.js.map +1 -1
  470. package/cli/dist/utils/beadsCompletedChecker.d.ts +72 -0
  471. package/cli/dist/utils/beadsCompletedChecker.d.ts.map +1 -0
  472. package/cli/dist/utils/beadsCompletedChecker.js +198 -0
  473. package/cli/dist/utils/beadsCompletedChecker.js.map +1 -0
  474. package/cli/dist/utils/catalog-sync.js +13 -13
  475. package/cli/dist/utils/config-system.d.ts +111 -0
  476. package/cli/dist/utils/config-system.d.ts.map +1 -0
  477. package/cli/dist/utils/config-system.js +239 -0
  478. package/cli/dist/utils/config-system.js.map +1 -0
  479. package/cli/dist/utils/extractCommandHelp.d.ts +51 -0
  480. package/cli/dist/utils/extractCommandHelp.d.ts.map +1 -0
  481. package/cli/dist/utils/extractCommandHelp.js +250 -0
  482. package/cli/dist/utils/extractCommandHelp.js.map +1 -0
  483. package/cli/dist/utils/hook-system.d.ts +84 -0
  484. package/cli/dist/utils/hook-system.d.ts.map +1 -0
  485. package/cli/dist/utils/hook-system.js +151 -0
  486. package/cli/dist/utils/hook-system.js.map +1 -0
  487. package/cli/dist/utils/inspection-cache.d.ts +56 -0
  488. package/cli/dist/utils/inspection-cache.d.ts.map +1 -0
  489. package/cli/dist/utils/inspection-cache.js +166 -0
  490. package/cli/dist/utils/inspection-cache.js.map +1 -0
  491. package/cli/dist/utils/inspection-handlers.d.ts +75 -0
  492. package/cli/dist/utils/inspection-handlers.d.ts.map +1 -0
  493. package/cli/dist/utils/inspection-handlers.js +171 -0
  494. package/cli/dist/utils/inspection-handlers.js.map +1 -0
  495. package/cli/dist/utils/install-rules.js +55 -55
  496. package/cli/dist/utils/mcp-integration.js +44 -44
  497. package/cli/dist/utils/module-system.d.ts +1 -0
  498. package/cli/dist/utils/module-system.d.ts.map +1 -1
  499. package/cli/dist/utils/module-system.js +8 -3
  500. package/cli/dist/utils/module-system.js.map +1 -1
  501. package/cli/dist/utils/plugin-system.d.ts +133 -0
  502. package/cli/dist/utils/plugin-system.d.ts.map +1 -0
  503. package/cli/dist/utils/plugin-system.js +210 -0
  504. package/cli/dist/utils/plugin-system.js.map +1 -0
  505. package/cli/dist/utils/progress.d.ts +67 -0
  506. package/cli/dist/utils/progress.d.ts.map +1 -0
  507. package/cli/dist/utils/progress.js +146 -0
  508. package/cli/dist/utils/progress.js.map +1 -0
  509. package/cli/dist/utils/rule-install-hooks.js +8 -8
  510. package/cli/dist/utils/stream-reader.d.ts +34 -0
  511. package/cli/dist/utils/stream-reader.d.ts.map +1 -0
  512. package/cli/dist/utils/stream-reader.js +147 -0
  513. package/cli/dist/utils/stream-reader.js.map +1 -0
  514. package/cli/dist/utils/vscode-editor.d.ts +45 -0
  515. package/cli/dist/utils/vscode-editor.d.ts.map +1 -0
  516. package/cli/dist/utils/vscode-editor.js +171 -0
  517. package/cli/dist/utils/vscode-editor.js.map +1 -0
  518. package/cli/dist/utils/vscode-links.d.ts +49 -0
  519. package/cli/dist/utils/vscode-links.d.ts.map +1 -0
  520. package/cli/dist/utils/vscode-links.js +167 -0
  521. package/cli/dist/utils/vscode-links.js.map +1 -0
  522. package/modules.md +667 -630
  523. package/package.json +85 -85
@@ -1,752 +1,752 @@
1
- # Security Audit Workflow Example
2
-
3
- This example demonstrates a complete security audit workflow for a WordPress plugin using OpenSpec and Beads.
4
-
5
- ## Scenario
6
-
7
- Performing a comprehensive security audit on the "Simple Contact Form" plugin before submitting to WordPress.org.
8
-
9
- ## Plugin Context
10
-
11
- **Plugin**: Simple Contact Form
12
- **Version**: 1.0.0
13
- **Features**:
14
- - Frontend contact form
15
- - Admin page to view submissions
16
- - Email notifications
17
- - AJAX form submission
18
- - Custom fields support
19
-
20
- **Security Concerns**:
21
- - Form submissions (CSRF, XSS)
22
- - Admin actions (capability checks)
23
- - Database operations (SQL injection)
24
- - File operations (if any)
25
- - AJAX handlers (authentication, authorization)
26
-
27
- ## Workflow Steps
28
-
29
- ### Step 1: Create OpenSpec Security Audit Spec
30
-
31
- **File**: `openspec/specs/security/contact-form-audit.md`
32
-
33
- ```markdown
34
- ---
35
- id: security/contact-form-audit
36
- status: active
37
- relatedTasks: []
38
- ---
39
-
40
- # Security Audit: Simple Contact Form
41
-
42
- ## Overview
43
- Comprehensive security audit to identify and fix vulnerabilities before WordPress.org submission.
44
-
45
- ## Audit Scope
46
-
47
- ### Areas to Audit
48
- 1. **CSRF Protection**: All forms and AJAX handlers
49
- 2. **XSS Prevention**: All output escaping
50
- 3. **SQL Injection**: All database queries
51
- 4. **Authentication**: User identity verification
52
- 5. **Authorization**: Capability checks
53
- 6. **Input Validation**: All user inputs
54
- 7. **File Operations**: File uploads/downloads (if applicable)
55
- 8. **API Security**: REST API endpoints (if applicable)
56
-
57
- ### Security Standards
58
- - OWASP Top 10 compliance
59
- - WordPress VIP coding standards
60
- - WordPress.org plugin guidelines
61
-
62
- ## Audit Requirements
63
-
64
- ### Requirement: CSRF Protection
65
- ALL forms and state-changing operations MUST be protected against CSRF attacks.
66
-
67
- #### Scenario: Form submission
68
- - GIVEN a form exists
69
- - WHEN the form is submitted
70
- - THEN a valid nonce MUST be present
71
- - AND the nonce MUST be verified before processing
72
-
73
- #### Scenario: AJAX request
74
- - GIVEN an AJAX handler exists
75
- - WHEN an AJAX request is made
76
- - THEN a valid nonce MUST be included
77
- - AND verified with `check_ajax_referer()`
78
-
79
- ### Requirement: XSS Prevention
80
- ALL output MUST be properly escaped based on context.
81
-
82
- #### Scenario: HTML output
83
- - WHEN outputting user data in HTML
84
- - THEN use `esc_html()` or `esc_attr()`
85
-
86
- #### Scenario: URL output
87
- - WHEN outputting URLs
88
- - THEN use `esc_url()`
89
-
90
- #### Scenario: JavaScript output
91
- - WHEN outputting data in JavaScript
92
- - THEN use `esc_js()` or `wp_json_encode()`
93
-
94
- ### Requirement: SQL Injection Prevention
95
- ALL database queries MUST use prepared statements.
96
-
97
- #### Scenario: Custom query
98
- - WHEN executing a custom database query
99
- - THEN use `$wpdb->prepare()` with placeholders
100
- - AND use correct placeholder types (%s, %d, %f)
101
-
102
- ### Requirement: Authorization
103
- ALL admin actions MUST check user capabilities.
104
-
105
- #### Scenario: Admin page access
106
- - WHEN rendering an admin page
107
- - THEN verify user has required capability
108
- - AND deny access if capability missing
109
-
110
- #### Scenario: Data modification
111
- - WHEN modifying data
112
- - THEN verify user has permission
113
- - AND log the action
114
-
115
- ## Testing Requirements
116
-
117
- ### Automated Testing
118
- - Run PHPCS with WordPress-VIP-Go standard
119
- - Run security scanner (e.g., WPScan)
120
- - Check for common vulnerability patterns
121
-
122
- ### Manual Testing
123
- - Review all forms for nonce verification
124
- - Review all output for escaping
125
- - Review all database queries for prepared statements
126
- - Review all admin actions for capability checks
127
- - Test with different user roles
128
-
129
- ## Remediation Requirements
130
-
131
- ### Critical Issues
132
- - MUST be fixed before submission
133
- - Examples: SQL injection, XSS, CSRF
134
-
135
- ### High Issues
136
- - SHOULD be fixed before submission
137
- - Examples: Missing capability checks, weak validation
138
-
139
- ### Medium Issues
140
- - SHOULD be fixed or documented
141
- - Examples: Suboptimal escaping, missing sanitization
142
-
143
- ### Low Issues
144
- - MAY be fixed or documented
145
- - Examples: Code style, minor improvements
146
- ```
147
-
148
- ### Step 2: Create Beads Tasks for Security Audit
149
-
150
- ```bash
151
- # Create epic for security audit
152
- bd create "Security Audit: Simple Contact Form" -p 0 --type epic --label security --label audit
153
- # Returns: bd-sa
154
-
155
- # Automated scanning
156
- bd create "Run PHPCS with WordPress-VIP-Go standard" -p 0 --parent bd-sa --label automated
157
- # Returns: bd-sa.1
158
-
159
- bd create "Run WPScan security scanner" -p 0 --parent bd-sa --label automated
160
- # Returns: bd-sa.2
161
-
162
- # Manual review - CSRF
163
- bd create "Audit all forms for nonce verification" -p 1 --parent bd-sa --label csrf --label manual
164
- # Returns: bd-sa.3
165
-
166
- bd create "Audit all AJAX handlers for nonce verification" -p 1 --parent bd-sa --label csrf --label manual
167
- # Returns: bd-sa.4
168
-
169
- # Manual review - XSS
170
- bd create "Audit all output for proper escaping" -p 1 --parent bd-sa --label xss --label manual
171
- # Returns: bd-sa.5
172
-
173
- bd create "Audit all admin pages for escaping" -p 1 --parent bd-sa --label xss --label manual
174
- # Returns: bd-sa.6
175
-
176
- # Manual review - SQL Injection
177
- bd create "Audit all database queries for prepared statements" -p 1 --parent bd-sa --label sql --label manual
178
- # Returns: bd-sa.7
179
-
180
- # Manual review - Authorization
181
- bd create "Audit all admin actions for capability checks" -p 1 --parent bd-sa --label authz --label manual
182
- # Returns: bd-sa.8
183
-
184
- bd create "Audit all data modifications for capability checks" -p 1 --parent bd-sa --label authz --label manual
185
- # Returns: bd-sa.9
186
-
187
- # Remediation
188
- bd create "Fix critical security issues" -p 0 --parent bd-sa --label remediation --label critical
189
- # Returns: bd-sa.10
190
-
191
- bd create "Fix high security issues" -p 1 --parent bd-sa --label remediation --label high
192
- # Returns: bd-sa.11
193
-
194
- bd create "Fix medium security issues" -p 2 --parent bd-sa --label remediation --label medium
195
- # Returns: bd-sa.12
196
-
197
- # Documentation
198
- bd create "Document security audit findings" -p 1 --parent bd-sa --label documentation
199
- # Returns: bd-sa.13
200
-
201
- bd create "Create security audit report" -p 1 --parent bd-sa --label documentation
202
- # Returns: bd-sa.14
203
- ```
204
-
205
- ### Step 3: Add Task Dependencies
206
-
207
- ```bash
208
- # Manual reviews can run in parallel after automated scans
209
- bd dep add bd-sa.3 bd-sa.1
210
- bd dep add bd-sa.4 bd-sa.1
211
- bd dep add bd-sa.5 bd-sa.1
212
- bd dep add bd-sa.6 bd-sa.1
213
- bd dep add bd-sa.7 bd-sa.1
214
- bd dep add bd-sa.8 bd-sa.1
215
- bd dep add bd-sa.9 bd-sa.1
216
-
217
- # Remediation depends on manual reviews
218
- bd dep add bd-sa.10 bd-sa.3
219
- bd dep add bd-sa.10 bd-sa.4
220
- bd dep add bd-sa.10 bd-sa.5
221
- bd dep add bd-sa.10 bd-sa.6
222
- bd dep add bd-sa.10 bd-sa.7
223
- bd dep add bd-sa.10 bd-sa.8
224
- bd dep add bd-sa.10 bd-sa.9
225
-
226
- bd dep add bd-sa.11 bd-sa.10
227
- bd dep add bd-sa.12 bd-sa.11
228
-
229
- # Documentation depends on remediation
230
- bd dep add bd-sa.13 bd-sa.12
231
- bd dep add bd-sa.14 bd-sa.13
232
- ```
233
-
234
- ### Step 4: Execute Security Audit
235
-
236
- #### Task bd-sa.1: Run PHPCS with WordPress-VIP-Go
237
-
238
- ```bash
239
- bd update bd-sa.1 --status in_progress
240
- ```
241
-
242
- **Install and run PHPCS**:
243
-
244
- ```bash
245
- # Install PHPCS and WordPress standards
246
- composer require --dev squizlabs/php_codesniffer
247
- composer require --dev wp-coding-standards/wpcs
248
- composer require --dev automattic/vipwpcs
249
-
250
- # Configure PHPCS
251
- vendor/bin/phpcs --config-set installed_paths vendor/wp-coding-standards/wpcs,vendor/automattic/vipwpcs
252
-
253
- # Run security scan
254
- vendor/bin/phpcs --standard=WordPress-VIP-Go --extensions=php --report=summary .
255
- ```
256
-
257
- **Output example**:
258
-
259
- ```
260
- FILE: /simple-contact-form/includes/class-contact-form.php
261
- ----------------------------------------------------------------------
262
- FOUND 3 ERRORS AND 2 WARNINGS AFFECTING 5 LINES
263
- ----------------------------------------------------------------------
264
- 45 | ERROR | Direct database query without prepare()
265
- 67 | WARNING | Possible XSS vulnerability - output not escaped
266
- 89 | ERROR | Missing nonce verification
267
- 102 | WARNING | Missing capability check
268
- 125 | ERROR | Unsanitized input from $_POST
269
- ----------------------------------------------------------------------
270
- ```
271
-
272
- ```bash
273
- bd comment bd-sa.1 "PHPCS scan completed. Found 3 errors and 2 warnings. Issues logged for remediation."
274
- bd close bd-sa.1
275
- ```
276
-
277
- #### Task bd-sa.2: Run WPScan
278
-
279
- ```bash
280
- bd update bd-sa.2 --status in_progress
281
- ```
282
-
283
- **Run WPScan** (if available):
284
-
285
- ```bash
286
- # Note: WPScan typically scans installed plugins, not source code
287
- # For source code scanning, use PHPCS or manual review
288
- ```
289
-
290
- ```bash
291
- bd comment bd-sa.2 "WPScan not applicable for source code. Using PHPCS results instead."
292
- bd close bd-sa.2
293
- ```
294
-
295
- #### Task bd-sa.3: Audit Forms for Nonce Verification
296
-
297
- ```bash
298
- bd ready # Shows bd-sa.3 is ready
299
- bd update bd-sa.3 --status in_progress
300
- ```
301
-
302
- **Manual review process**:
303
-
304
- 1. **Find all forms**:
305
- ```bash
306
- grep -r "<form" . --include="*.php"
307
- ```
308
-
309
- 2. **Check each form for nonce**:
310
-
311
- **File**: `admin/partials/settings-page.php`
312
-
313
- ```php
314
- <!-- BEFORE (VULNERABLE) -->
315
- <form method="post" action="">
316
- <input type="text" name="setting_value" />
317
- <input type="submit" value="Save" />
318
- </form>
319
-
320
- <!-- AFTER (SECURE) -->
321
- <form method="post" action="">
322
- <?php wp_nonce_field('simple_contact_form_settings', 'scf_settings_nonce'); ?>
323
- <input type="text" name="setting_value" />
324
- <input type="submit" value="Save" />
325
- </form>
326
- ```
327
-
328
- 3. **Check form handler for verification**:
329
-
330
- **File**: `admin/class-admin.php`
331
-
332
- ```php
333
- // BEFORE (VULNERABLE)
334
- public function save_settings() {
335
- if (isset($_POST['setting_value'])) {
336
- update_option('scf_setting', $_POST['setting_value']);
337
- }
338
- }
339
-
340
- // AFTER (SECURE)
341
- public function save_settings() {
342
- // Verify nonce
343
- if (!isset($_POST['scf_settings_nonce']) ||
344
- !wp_verify_nonce($_POST['scf_settings_nonce'], 'simple_contact_form_settings')) {
345
- wp_die(__('Security check failed', 'simple-contact-form'));
346
- }
347
-
348
- // Check capability
349
- if (!current_user_can('manage_options')) {
350
- wp_die(__('Insufficient permissions', 'simple-contact-form'));
351
- }
352
-
353
- // Sanitize and save
354
- if (isset($_POST['setting_value'])) {
355
- $value = sanitize_text_field($_POST['setting_value']);
356
- update_option('scf_setting', $value);
357
- }
358
- }
359
- ```
360
-
361
- **Audit findings**:
362
-
363
- ```bash
364
- bd comment bd-sa.3 "Audit completed. Found 2 forms:
365
- 1. Settings form - MISSING nonce (CRITICAL)
366
- 2. Contact form - Has nonce ✓
367
-
368
- Created remediation task for settings form."
369
- bd close bd-sa.3
370
- ```
371
-
372
- #### Task bd-sa.4: Audit AJAX Handlers for Nonce Verification
373
-
374
- ```bash
375
- bd update bd-sa.4 --status in_progress
376
- ```
377
-
378
- **Find all AJAX handlers**:
379
-
380
- ```bash
381
- grep -r "wp_ajax" . --include="*.php"
382
- ```
383
-
384
- **Check each handler**:
385
-
386
- **File**: `includes/class-contact-form.php`
387
-
388
- ```php
389
- // BEFORE (VULNERABLE)
390
- public function handle_submission() {
391
- $name = $_POST['name'];
392
- $email = $_POST['email'];
393
- // ... process submission
394
- }
395
-
396
- // AFTER (SECURE)
397
- public function handle_submission() {
398
- // Verify nonce
399
- if (!check_ajax_referer('simple_contact_form_nonce', 'nonce', false)) {
400
- wp_send_json_error(array('message' => 'Security check failed'));
401
- }
402
-
403
- // Sanitize inputs
404
- $name = sanitize_text_field($_POST['name']);
405
- $email = sanitize_email($_POST['email']);
406
-
407
- // ... process submission
408
- }
409
- ```
410
-
411
- **Check JavaScript nonce inclusion**:
412
-
413
- **File**: `public/js/public.js`
414
-
415
- ```javascript
416
- // BEFORE (VULNERABLE)
417
- jQuery.ajax({
418
- url: ajaxurl,
419
- type: 'POST',
420
- data: {
421
- action: 'simple_contact_form_submit',
422
- name: name,
423
- email: email
424
- }
425
- });
426
-
427
- // AFTER (SECURE)
428
- jQuery.ajax({
429
- url: scf_ajax.ajax_url,
430
- type: 'POST',
431
- data: {
432
- action: 'simple_contact_form_submit',
433
- nonce: scf_ajax.nonce, // Added nonce
434
- name: name,
435
- email: email
436
- }
437
- });
438
- ```
439
-
440
- **Ensure nonce is localized**:
441
-
442
- **File**: `public/class-public.php`
443
-
444
- ```php
445
- public function enqueue_scripts() {
446
- wp_enqueue_script('scf-public', plugin_dir_url(__FILE__) . 'js/public.js');
447
-
448
- wp_localize_script('scf-public', 'scf_ajax', array(
449
- 'ajax_url' => admin_url('admin-ajax.php'),
450
- 'nonce' => wp_create_nonce('simple_contact_form_nonce')
451
- ));
452
- }
453
- ```
454
-
455
- ```bash
456
- bd comment bd-sa.4 "Audit completed. Found 1 AJAX handler:
457
- 1. Form submission handler - Has nonce verification ✓
458
-
459
- All AJAX handlers properly secured."
460
- bd close bd-sa.4
461
- ```
462
-
463
- #### Task bd-sa.5: Audit Output for Escaping
464
-
465
- ```bash
466
- bd update bd-sa.5 --status in_progress
467
- ```
468
-
469
- **Find all echo/print statements**:
470
-
471
- ```bash
472
- grep -rn "echo " . --include="*.php" | grep -v "esc_"
473
- ```
474
-
475
- **Check each output**:
476
-
477
- **File**: `admin/partials/messages-list.php`
478
-
479
- ```php
480
- <!-- BEFORE (VULNERABLE) -->
481
- <td><?php echo $message->name; ?></td>
482
- <td><?php echo $message->email; ?></td>
483
- <td><?php echo $message->message; ?></td>
484
-
485
- <!-- AFTER (SECURE) -->
486
- <td><?php echo esc_html($message->name); ?></td>
487
- <td><?php echo esc_html($message->email); ?></td>
488
- <td><?php echo esc_html($message->message); ?></td>
489
- ```
490
-
491
- **URL escaping**:
492
-
493
- ```php
494
- <!-- BEFORE (VULNERABLE) -->
495
- <a href="<?php echo $delete_url; ?>">Delete</a>
496
-
497
- <!-- AFTER (SECURE) -->
498
- <a href="<?php echo esc_url($delete_url); ?>">Delete</a>
499
- ```
500
-
501
- **Attribute escaping**:
502
-
503
- ```php
504
- <!-- BEFORE (VULNERABLE) -->
505
- <input type="text" value="<?php echo $value; ?>" />
506
-
507
- <!-- AFTER (SECURE) -->
508
- <input type="text" value="<?php echo esc_attr($value); ?>" />
509
- ```
510
-
511
- ```bash
512
- bd comment bd-sa.5 "Audit completed. Found 12 unescaped outputs:
513
- - 8 in admin messages list (HIGH)
514
- - 3 in settings page (HIGH)
515
- - 1 in email template (MEDIUM)
516
-
517
- Created remediation tasks."
518
- bd close bd-sa.5
519
- ```
520
-
521
- #### Task bd-sa.7: Audit Database Queries
522
-
523
- ```bash
524
- bd update bd-sa.7 --status in_progress
525
- ```
526
-
527
- **Find all database queries**:
528
-
529
- ```bash
530
- grep -rn "\$wpdb->" . --include="*.php"
531
- ```
532
-
533
- **Check each query**:
534
-
535
- **File**: `includes/class-contact-message.php`
536
-
537
- ```php
538
- // BEFORE (VULNERABLE - SQL Injection)
539
- public function get_by_email($email) {
540
- global $wpdb;
541
- $table = $wpdb->prefix . 'simple_contact_messages';
542
- return $wpdb->get_results("SELECT * FROM $table WHERE email = '$email'");
543
- }
544
-
545
- // AFTER (SECURE)
546
- public function get_by_email($email) {
547
- global $wpdb;
548
- $table = $wpdb->prefix . 'simple_contact_messages';
549
- return $wpdb->get_results(
550
- $wpdb->prepare("SELECT * FROM $table WHERE email = %s", $email)
551
- );
552
- }
553
- ```
554
-
555
- **Check for correct placeholder types**:
556
-
557
- ```php
558
- // CORRECT
559
- $wpdb->prepare("SELECT * FROM $table WHERE id = %d", $id); // %d for integers
560
- $wpdb->prepare("SELECT * FROM $table WHERE name = %s", $name); // %s for strings
561
- $wpdb->prepare("SELECT * FROM $table WHERE price = %f", $price); // %f for floats
562
-
563
- // INCORRECT
564
- $wpdb->prepare("SELECT * FROM $table WHERE id = %s", $id); // Wrong type
565
- $wpdb->prepare("SELECT * FROM $table WHERE id = '$id'"); // No placeholder
566
- ```
567
-
568
- ```bash
569
- bd comment bd-sa.7 "Audit completed. Found 5 database queries:
570
- - 2 using prepare() correctly ✓
571
- - 3 missing prepare() (CRITICAL)
572
-
573
- Created remediation task for unprepared queries."
574
- bd close bd-sa.7
575
- ```
576
-
577
- ### Step 5: Remediation
578
-
579
- #### Task bd-sa.10: Fix Critical Issues
580
-
581
- ```bash
582
- bd ready # Shows bd-sa.10 is ready
583
- bd update bd-sa.10 --status in_progress
584
- ```
585
-
586
- **Critical issues to fix**:
587
-
588
- 1. ✅ Add nonce to settings form
589
- 2. ✅ Add nonce verification to settings handler
590
- 3. ✅ Add prepared statements to all database queries
591
-
592
- **Implementation**:
593
-
594
- ```bash
595
- # Fix settings form nonce
596
- # Fix database queries with prepare()
597
- # Test all fixes
598
- ```
599
-
600
- ```bash
601
- bd comment bd-sa.10 "Fixed all 3 critical issues:
602
- 1. Added nonce to settings form
603
- 2. Added nonce verification to settings handler
604
- 3. Converted all database queries to use prepare()
605
-
606
- All critical vulnerabilities resolved."
607
- bd close bd-sa.10
608
- ```
609
-
610
- ### Step 6: Create Security Audit Report
611
-
612
- #### Task bd-sa.14: Create Audit Report
613
-
614
- ```bash
615
- bd update bd-sa.14 --status in_progress
616
- ```
617
-
618
- **File**: `SECURITY-AUDIT-REPORT.md`
619
-
620
- ```markdown
621
- # Security Audit Report: Simple Contact Form
622
-
623
- **Date**: 2024-01-26
624
- **Version**: 1.0.0
625
- **Auditor**: AI Agent
626
-
627
- ## Executive Summary
628
-
629
- Comprehensive security audit completed. All critical and high-severity issues have been resolved. Plugin is ready for WordPress.org submission.
630
-
631
- ## Findings Summary
632
-
633
- | Severity | Found | Fixed | Remaining |
634
- |----------|-------|-------|-----------|
635
- | Critical | 3 | 3 | 0 |
636
- | High | 12 | 12 | 0 |
637
- | Medium | 1 | 1 | 0 |
638
- | Low | 0 | 0 | 0 |
639
-
640
- ## Critical Issues (All Fixed)
641
-
642
- ### 1. Missing Nonce Verification in Settings Form
643
- - **File**: `admin/partials/settings-page.php`
644
- - **Issue**: Form submission without CSRF protection
645
- - **Fix**: Added `wp_nonce_field()` and verification
646
- - **Status**: ✅ Fixed
647
-
648
- ### 2. SQL Injection in Email Query
649
- - **File**: `includes/class-contact-message.php`
650
- - **Issue**: Direct variable insertion in SQL query
651
- - **Fix**: Converted to `$wpdb->prepare()` with %s placeholder
652
- - **Status**: ✅ Fixed
653
-
654
- ### 3. SQL Injection in Date Range Query
655
- - **File**: `includes/class-contact-message.php`
656
- - **Issue**: Unprepared query with user input
657
- - **Fix**: Converted to `$wpdb->prepare()` with %s placeholders
658
- - **Status**: ✅ Fixed
659
-
660
- ## High Issues (All Fixed)
661
-
662
- ### 4-15. Unescaped Output in Admin Pages
663
- - **Files**: Various admin templates
664
- - **Issue**: XSS vulnerability from unescaped user data
665
- - **Fix**: Added appropriate escaping (`esc_html()`, `esc_attr()`, `esc_url()`)
666
- - **Status**: ✅ Fixed (all 12 instances)
667
-
668
- ## Medium Issues (All Fixed)
669
-
670
- ### 16. Unescaped Output in Email Template
671
- - **File**: `includes/class-email-handler.php`
672
- - **Issue**: Potential XSS in email content
673
- - **Fix**: Added `esc_html()` to email template
674
- - **Status**: ✅ Fixed
675
-
676
- ## Security Checklist
677
-
678
- - [x] All forms have nonce verification
679
- - [x] All AJAX handlers verify nonces
680
- - [x] All admin actions check capabilities
681
- - [x] All user input is sanitized
682
- - [x] All output is escaped
683
- - [x] All database queries use prepared statements
684
- - [x] No eval() or exec() usage
685
- - [x] No unserialize() on user input
686
- - [x] File uploads properly validated (N/A - no file uploads)
687
- - [x] No external API calls without validation
688
-
689
- ## Recommendations
690
-
691
- 1. ✅ Implement rate limiting for form submissions (already implemented)
692
- 2. ✅ Add input validation for email addresses (already implemented)
693
- 3. ✅ Log security events (already implemented)
694
- 4. Consider adding honeypot field for spam prevention
695
- 5. Consider implementing reCAPTCHA for additional protection
696
-
697
- ## Conclusion
698
-
699
- The Simple Contact Form plugin has passed comprehensive security audit. All critical and high-severity vulnerabilities have been resolved. The plugin follows WordPress security best practices and is ready for submission to WordPress.org.
700
- ```
701
-
702
- ```bash
703
- bd comment bd-sa.14 "Created comprehensive security audit report. All issues documented and resolved."
704
- bd close bd-sa.14
705
- bd close bd-sa
706
- ```
707
-
708
- ## AI Agent Workflow
709
-
710
- ### Initial Prompt
711
-
712
- ```
713
- Perform a comprehensive security audit on the Simple Contact Form plugin.
714
-
715
- Audit scope:
716
- - CSRF protection (nonces)
717
- - XSS prevention (output escaping)
718
- - SQL injection (prepared statements)
719
- - Authorization (capability checks)
720
- - Input validation and sanitization
721
-
722
- Process:
723
- 1. Run automated scans (PHPCS with WordPress-VIP-Go)
724
- 2. Manual review of all forms, AJAX handlers, database queries, and output
725
- 3. Document all findings with severity ratings
726
- 4. Fix all critical and high-severity issues
727
- 5. Create security audit report
728
-
729
- Provide detailed findings with file names, line numbers, and recommended fixes.
730
- ```
731
-
732
- ### Implementation Approach
733
-
734
- 1. **Create OpenSpec security audit spec** with requirements
735
- 2. **Break down into Beads tasks** for systematic review
736
- 3. **Run automated scans** to identify common issues
737
- 4. **Manual review** of critical security areas
738
- 5. **Prioritize remediation** (critical → high → medium → low)
739
- 6. **Fix all issues** with secure coding practices
740
- 7. **Document findings** in comprehensive report
741
- 8. **Verify fixes** with re-scan and testing
742
-
743
- ## Key Takeaways
744
-
745
- - **Automated scanning** catches many issues but manual review is essential
746
- - **Systematic approach** ensures no security areas are missed
747
- - **Prioritization** focuses effort on critical vulnerabilities first
748
- - **Documentation** provides audit trail and learning resource
749
- - **WordPress security functions** (nonces, escaping, prepare) are mandatory
750
- - **Security audit** should be performed before every release
751
- - **Beads tracking** ensures all findings are addressed
752
-
1
+ # Security Audit Workflow Example
2
+
3
+ This example demonstrates a complete security audit workflow for a WordPress plugin using OpenSpec and Beads.
4
+
5
+ ## Scenario
6
+
7
+ Performing a comprehensive security audit on the "Simple Contact Form" plugin before submitting to WordPress.org.
8
+
9
+ ## Plugin Context
10
+
11
+ **Plugin**: Simple Contact Form
12
+ **Version**: 1.0.0
13
+ **Features**:
14
+ - Frontend contact form
15
+ - Admin page to view submissions
16
+ - Email notifications
17
+ - AJAX form submission
18
+ - Custom fields support
19
+
20
+ **Security Concerns**:
21
+ - Form submissions (CSRF, XSS)
22
+ - Admin actions (capability checks)
23
+ - Database operations (SQL injection)
24
+ - File operations (if any)
25
+ - AJAX handlers (authentication, authorization)
26
+
27
+ ## Workflow Steps
28
+
29
+ ### Step 1: Create OpenSpec Security Audit Spec
30
+
31
+ **File**: `openspec/specs/security/contact-form-audit.md`
32
+
33
+ ```markdown
34
+ ---
35
+ id: security/contact-form-audit
36
+ status: active
37
+ relatedTasks: []
38
+ ---
39
+
40
+ # Security Audit: Simple Contact Form
41
+
42
+ ## Overview
43
+ Comprehensive security audit to identify and fix vulnerabilities before WordPress.org submission.
44
+
45
+ ## Audit Scope
46
+
47
+ ### Areas to Audit
48
+ 1. **CSRF Protection**: All forms and AJAX handlers
49
+ 2. **XSS Prevention**: All output escaping
50
+ 3. **SQL Injection**: All database queries
51
+ 4. **Authentication**: User identity verification
52
+ 5. **Authorization**: Capability checks
53
+ 6. **Input Validation**: All user inputs
54
+ 7. **File Operations**: File uploads/downloads (if applicable)
55
+ 8. **API Security**: REST API endpoints (if applicable)
56
+
57
+ ### Security Standards
58
+ - OWASP Top 10 compliance
59
+ - WordPress VIP coding standards
60
+ - WordPress.org plugin guidelines
61
+
62
+ ## Audit Requirements
63
+
64
+ ### Requirement: CSRF Protection
65
+ ALL forms and state-changing operations MUST be protected against CSRF attacks.
66
+
67
+ #### Scenario: Form submission
68
+ - GIVEN a form exists
69
+ - WHEN the form is submitted
70
+ - THEN a valid nonce MUST be present
71
+ - AND the nonce MUST be verified before processing
72
+
73
+ #### Scenario: AJAX request
74
+ - GIVEN an AJAX handler exists
75
+ - WHEN an AJAX request is made
76
+ - THEN a valid nonce MUST be included
77
+ - AND verified with `check_ajax_referer()`
78
+
79
+ ### Requirement: XSS Prevention
80
+ ALL output MUST be properly escaped based on context.
81
+
82
+ #### Scenario: HTML output
83
+ - WHEN outputting user data in HTML
84
+ - THEN use `esc_html()` or `esc_attr()`
85
+
86
+ #### Scenario: URL output
87
+ - WHEN outputting URLs
88
+ - THEN use `esc_url()`
89
+
90
+ #### Scenario: JavaScript output
91
+ - WHEN outputting data in JavaScript
92
+ - THEN use `esc_js()` or `wp_json_encode()`
93
+
94
+ ### Requirement: SQL Injection Prevention
95
+ ALL database queries MUST use prepared statements.
96
+
97
+ #### Scenario: Custom query
98
+ - WHEN executing a custom database query
99
+ - THEN use `$wpdb->prepare()` with placeholders
100
+ - AND use correct placeholder types (%s, %d, %f)
101
+
102
+ ### Requirement: Authorization
103
+ ALL admin actions MUST check user capabilities.
104
+
105
+ #### Scenario: Admin page access
106
+ - WHEN rendering an admin page
107
+ - THEN verify user has required capability
108
+ - AND deny access if capability missing
109
+
110
+ #### Scenario: Data modification
111
+ - WHEN modifying data
112
+ - THEN verify user has permission
113
+ - AND log the action
114
+
115
+ ## Testing Requirements
116
+
117
+ ### Automated Testing
118
+ - Run PHPCS with WordPress-VIP-Go standard
119
+ - Run security scanner (e.g., WPScan)
120
+ - Check for common vulnerability patterns
121
+
122
+ ### Manual Testing
123
+ - Review all forms for nonce verification
124
+ - Review all output for escaping
125
+ - Review all database queries for prepared statements
126
+ - Review all admin actions for capability checks
127
+ - Test with different user roles
128
+
129
+ ## Remediation Requirements
130
+
131
+ ### Critical Issues
132
+ - MUST be fixed before submission
133
+ - Examples: SQL injection, XSS, CSRF
134
+
135
+ ### High Issues
136
+ - SHOULD be fixed before submission
137
+ - Examples: Missing capability checks, weak validation
138
+
139
+ ### Medium Issues
140
+ - SHOULD be fixed or documented
141
+ - Examples: Suboptimal escaping, missing sanitization
142
+
143
+ ### Low Issues
144
+ - MAY be fixed or documented
145
+ - Examples: Code style, minor improvements
146
+ ```
147
+
148
+ ### Step 2: Create Beads Tasks for Security Audit
149
+
150
+ ```bash
151
+ # Create epic for security audit
152
+ bd create "Security Audit: Simple Contact Form" -p 0 --type epic --label security --label audit
153
+ # Returns: bd-sa
154
+
155
+ # Automated scanning
156
+ bd create "Run PHPCS with WordPress-VIP-Go standard" -p 0 --parent bd-sa --label automated
157
+ # Returns: bd-sa.1
158
+
159
+ bd create "Run WPScan security scanner" -p 0 --parent bd-sa --label automated
160
+ # Returns: bd-sa.2
161
+
162
+ # Manual review - CSRF
163
+ bd create "Audit all forms for nonce verification" -p 1 --parent bd-sa --label csrf --label manual
164
+ # Returns: bd-sa.3
165
+
166
+ bd create "Audit all AJAX handlers for nonce verification" -p 1 --parent bd-sa --label csrf --label manual
167
+ # Returns: bd-sa.4
168
+
169
+ # Manual review - XSS
170
+ bd create "Audit all output for proper escaping" -p 1 --parent bd-sa --label xss --label manual
171
+ # Returns: bd-sa.5
172
+
173
+ bd create "Audit all admin pages for escaping" -p 1 --parent bd-sa --label xss --label manual
174
+ # Returns: bd-sa.6
175
+
176
+ # Manual review - SQL Injection
177
+ bd create "Audit all database queries for prepared statements" -p 1 --parent bd-sa --label sql --label manual
178
+ # Returns: bd-sa.7
179
+
180
+ # Manual review - Authorization
181
+ bd create "Audit all admin actions for capability checks" -p 1 --parent bd-sa --label authz --label manual
182
+ # Returns: bd-sa.8
183
+
184
+ bd create "Audit all data modifications for capability checks" -p 1 --parent bd-sa --label authz --label manual
185
+ # Returns: bd-sa.9
186
+
187
+ # Remediation
188
+ bd create "Fix critical security issues" -p 0 --parent bd-sa --label remediation --label critical
189
+ # Returns: bd-sa.10
190
+
191
+ bd create "Fix high security issues" -p 1 --parent bd-sa --label remediation --label high
192
+ # Returns: bd-sa.11
193
+
194
+ bd create "Fix medium security issues" -p 2 --parent bd-sa --label remediation --label medium
195
+ # Returns: bd-sa.12
196
+
197
+ # Documentation
198
+ bd create "Document security audit findings" -p 1 --parent bd-sa --label documentation
199
+ # Returns: bd-sa.13
200
+
201
+ bd create "Create security audit report" -p 1 --parent bd-sa --label documentation
202
+ # Returns: bd-sa.14
203
+ ```
204
+
205
+ ### Step 3: Add Task Dependencies
206
+
207
+ ```bash
208
+ # Manual reviews can run in parallel after automated scans
209
+ bd dep add bd-sa.3 bd-sa.1
210
+ bd dep add bd-sa.4 bd-sa.1
211
+ bd dep add bd-sa.5 bd-sa.1
212
+ bd dep add bd-sa.6 bd-sa.1
213
+ bd dep add bd-sa.7 bd-sa.1
214
+ bd dep add bd-sa.8 bd-sa.1
215
+ bd dep add bd-sa.9 bd-sa.1
216
+
217
+ # Remediation depends on manual reviews
218
+ bd dep add bd-sa.10 bd-sa.3
219
+ bd dep add bd-sa.10 bd-sa.4
220
+ bd dep add bd-sa.10 bd-sa.5
221
+ bd dep add bd-sa.10 bd-sa.6
222
+ bd dep add bd-sa.10 bd-sa.7
223
+ bd dep add bd-sa.10 bd-sa.8
224
+ bd dep add bd-sa.10 bd-sa.9
225
+
226
+ bd dep add bd-sa.11 bd-sa.10
227
+ bd dep add bd-sa.12 bd-sa.11
228
+
229
+ # Documentation depends on remediation
230
+ bd dep add bd-sa.13 bd-sa.12
231
+ bd dep add bd-sa.14 bd-sa.13
232
+ ```
233
+
234
+ ### Step 4: Execute Security Audit
235
+
236
+ #### Task bd-sa.1: Run PHPCS with WordPress-VIP-Go
237
+
238
+ ```bash
239
+ bd update bd-sa.1 --status in_progress
240
+ ```
241
+
242
+ **Install and run PHPCS**:
243
+
244
+ ```bash
245
+ # Install PHPCS and WordPress standards
246
+ composer require --dev squizlabs/php_codesniffer
247
+ composer require --dev wp-coding-standards/wpcs
248
+ composer require --dev automattic/vipwpcs
249
+
250
+ # Configure PHPCS
251
+ vendor/bin/phpcs --config-set installed_paths vendor/wp-coding-standards/wpcs,vendor/automattic/vipwpcs
252
+
253
+ # Run security scan
254
+ vendor/bin/phpcs --standard=WordPress-VIP-Go --extensions=php --report=summary .
255
+ ```
256
+
257
+ **Output example**:
258
+
259
+ ```
260
+ FILE: /simple-contact-form/includes/class-contact-form.php
261
+ ----------------------------------------------------------------------
262
+ FOUND 3 ERRORS AND 2 WARNINGS AFFECTING 5 LINES
263
+ ----------------------------------------------------------------------
264
+ 45 | ERROR | Direct database query without prepare()
265
+ 67 | WARNING | Possible XSS vulnerability - output not escaped
266
+ 89 | ERROR | Missing nonce verification
267
+ 102 | WARNING | Missing capability check
268
+ 125 | ERROR | Unsanitized input from $_POST
269
+ ----------------------------------------------------------------------
270
+ ```
271
+
272
+ ```bash
273
+ bd comment bd-sa.1 "PHPCS scan completed. Found 3 errors and 2 warnings. Issues logged for remediation."
274
+ bd close bd-sa.1
275
+ ```
276
+
277
+ #### Task bd-sa.2: Run WPScan
278
+
279
+ ```bash
280
+ bd update bd-sa.2 --status in_progress
281
+ ```
282
+
283
+ **Run WPScan** (if available):
284
+
285
+ ```bash
286
+ # Note: WPScan typically scans installed plugins, not source code
287
+ # For source code scanning, use PHPCS or manual review
288
+ ```
289
+
290
+ ```bash
291
+ bd comment bd-sa.2 "WPScan not applicable for source code. Using PHPCS results instead."
292
+ bd close bd-sa.2
293
+ ```
294
+
295
+ #### Task bd-sa.3: Audit Forms for Nonce Verification
296
+
297
+ ```bash
298
+ bd ready # Shows bd-sa.3 is ready
299
+ bd update bd-sa.3 --status in_progress
300
+ ```
301
+
302
+ **Manual review process**:
303
+
304
+ 1. **Find all forms**:
305
+ ```bash
306
+ grep -r "<form" . --include="*.php"
307
+ ```
308
+
309
+ 2. **Check each form for nonce**:
310
+
311
+ **File**: `admin/partials/settings-page.php`
312
+
313
+ ```php
314
+ <!-- BEFORE (VULNERABLE) -->
315
+ <form method="post" action="">
316
+ <input type="text" name="setting_value" />
317
+ <input type="submit" value="Save" />
318
+ </form>
319
+
320
+ <!-- AFTER (SECURE) -->
321
+ <form method="post" action="">
322
+ <?php wp_nonce_field('simple_contact_form_settings', 'scf_settings_nonce'); ?>
323
+ <input type="text" name="setting_value" />
324
+ <input type="submit" value="Save" />
325
+ </form>
326
+ ```
327
+
328
+ 3. **Check form handler for verification**:
329
+
330
+ **File**: `admin/class-admin.php`
331
+
332
+ ```php
333
+ // BEFORE (VULNERABLE)
334
+ public function save_settings() {
335
+ if (isset($_POST['setting_value'])) {
336
+ update_option('scf_setting', $_POST['setting_value']);
337
+ }
338
+ }
339
+
340
+ // AFTER (SECURE)
341
+ public function save_settings() {
342
+ // Verify nonce
343
+ if (!isset($_POST['scf_settings_nonce']) ||
344
+ !wp_verify_nonce($_POST['scf_settings_nonce'], 'simple_contact_form_settings')) {
345
+ wp_die(__('Security check failed', 'simple-contact-form'));
346
+ }
347
+
348
+ // Check capability
349
+ if (!current_user_can('manage_options')) {
350
+ wp_die(__('Insufficient permissions', 'simple-contact-form'));
351
+ }
352
+
353
+ // Sanitize and save
354
+ if (isset($_POST['setting_value'])) {
355
+ $value = sanitize_text_field($_POST['setting_value']);
356
+ update_option('scf_setting', $value);
357
+ }
358
+ }
359
+ ```
360
+
361
+ **Audit findings**:
362
+
363
+ ```bash
364
+ bd comment bd-sa.3 "Audit completed. Found 2 forms:
365
+ 1. Settings form - MISSING nonce (CRITICAL)
366
+ 2. Contact form - Has nonce ✓
367
+
368
+ Created remediation task for settings form."
369
+ bd close bd-sa.3
370
+ ```
371
+
372
+ #### Task bd-sa.4: Audit AJAX Handlers for Nonce Verification
373
+
374
+ ```bash
375
+ bd update bd-sa.4 --status in_progress
376
+ ```
377
+
378
+ **Find all AJAX handlers**:
379
+
380
+ ```bash
381
+ grep -r "wp_ajax" . --include="*.php"
382
+ ```
383
+
384
+ **Check each handler**:
385
+
386
+ **File**: `includes/class-contact-form.php`
387
+
388
+ ```php
389
+ // BEFORE (VULNERABLE)
390
+ public function handle_submission() {
391
+ $name = $_POST['name'];
392
+ $email = $_POST['email'];
393
+ // ... process submission
394
+ }
395
+
396
+ // AFTER (SECURE)
397
+ public function handle_submission() {
398
+ // Verify nonce
399
+ if (!check_ajax_referer('simple_contact_form_nonce', 'nonce', false)) {
400
+ wp_send_json_error(array('message' => 'Security check failed'));
401
+ }
402
+
403
+ // Sanitize inputs
404
+ $name = sanitize_text_field($_POST['name']);
405
+ $email = sanitize_email($_POST['email']);
406
+
407
+ // ... process submission
408
+ }
409
+ ```
410
+
411
+ **Check JavaScript nonce inclusion**:
412
+
413
+ **File**: `public/js/public.js`
414
+
415
+ ```javascript
416
+ // BEFORE (VULNERABLE)
417
+ jQuery.ajax({
418
+ url: ajaxurl,
419
+ type: 'POST',
420
+ data: {
421
+ action: 'simple_contact_form_submit',
422
+ name: name,
423
+ email: email
424
+ }
425
+ });
426
+
427
+ // AFTER (SECURE)
428
+ jQuery.ajax({
429
+ url: scf_ajax.ajax_url,
430
+ type: 'POST',
431
+ data: {
432
+ action: 'simple_contact_form_submit',
433
+ nonce: scf_ajax.nonce, // Added nonce
434
+ name: name,
435
+ email: email
436
+ }
437
+ });
438
+ ```
439
+
440
+ **Ensure nonce is localized**:
441
+
442
+ **File**: `public/class-public.php`
443
+
444
+ ```php
445
+ public function enqueue_scripts() {
446
+ wp_enqueue_script('scf-public', plugin_dir_url(__FILE__) . 'js/public.js');
447
+
448
+ wp_localize_script('scf-public', 'scf_ajax', array(
449
+ 'ajax_url' => admin_url('admin-ajax.php'),
450
+ 'nonce' => wp_create_nonce('simple_contact_form_nonce')
451
+ ));
452
+ }
453
+ ```
454
+
455
+ ```bash
456
+ bd comment bd-sa.4 "Audit completed. Found 1 AJAX handler:
457
+ 1. Form submission handler - Has nonce verification ✓
458
+
459
+ All AJAX handlers properly secured."
460
+ bd close bd-sa.4
461
+ ```
462
+
463
+ #### Task bd-sa.5: Audit Output for Escaping
464
+
465
+ ```bash
466
+ bd update bd-sa.5 --status in_progress
467
+ ```
468
+
469
+ **Find all echo/print statements**:
470
+
471
+ ```bash
472
+ grep -rn "echo " . --include="*.php" | grep -v "esc_"
473
+ ```
474
+
475
+ **Check each output**:
476
+
477
+ **File**: `admin/partials/messages-list.php`
478
+
479
+ ```php
480
+ <!-- BEFORE (VULNERABLE) -->
481
+ <td><?php echo $message->name; ?></td>
482
+ <td><?php echo $message->email; ?></td>
483
+ <td><?php echo $message->message; ?></td>
484
+
485
+ <!-- AFTER (SECURE) -->
486
+ <td><?php echo esc_html($message->name); ?></td>
487
+ <td><?php echo esc_html($message->email); ?></td>
488
+ <td><?php echo esc_html($message->message); ?></td>
489
+ ```
490
+
491
+ **URL escaping**:
492
+
493
+ ```php
494
+ <!-- BEFORE (VULNERABLE) -->
495
+ <a href="<?php echo $delete_url; ?>">Delete</a>
496
+
497
+ <!-- AFTER (SECURE) -->
498
+ <a href="<?php echo esc_url($delete_url); ?>">Delete</a>
499
+ ```
500
+
501
+ **Attribute escaping**:
502
+
503
+ ```php
504
+ <!-- BEFORE (VULNERABLE) -->
505
+ <input type="text" value="<?php echo $value; ?>" />
506
+
507
+ <!-- AFTER (SECURE) -->
508
+ <input type="text" value="<?php echo esc_attr($value); ?>" />
509
+ ```
510
+
511
+ ```bash
512
+ bd comment bd-sa.5 "Audit completed. Found 12 unescaped outputs:
513
+ - 8 in admin messages list (HIGH)
514
+ - 3 in settings page (HIGH)
515
+ - 1 in email template (MEDIUM)
516
+
517
+ Created remediation tasks."
518
+ bd close bd-sa.5
519
+ ```
520
+
521
+ #### Task bd-sa.7: Audit Database Queries
522
+
523
+ ```bash
524
+ bd update bd-sa.7 --status in_progress
525
+ ```
526
+
527
+ **Find all database queries**:
528
+
529
+ ```bash
530
+ grep -rn "\$wpdb->" . --include="*.php"
531
+ ```
532
+
533
+ **Check each query**:
534
+
535
+ **File**: `includes/class-contact-message.php`
536
+
537
+ ```php
538
+ // BEFORE (VULNERABLE - SQL Injection)
539
+ public function get_by_email($email) {
540
+ global $wpdb;
541
+ $table = $wpdb->prefix . 'simple_contact_messages';
542
+ return $wpdb->get_results("SELECT * FROM $table WHERE email = '$email'");
543
+ }
544
+
545
+ // AFTER (SECURE)
546
+ public function get_by_email($email) {
547
+ global $wpdb;
548
+ $table = $wpdb->prefix . 'simple_contact_messages';
549
+ return $wpdb->get_results(
550
+ $wpdb->prepare("SELECT * FROM $table WHERE email = %s", $email)
551
+ );
552
+ }
553
+ ```
554
+
555
+ **Check for correct placeholder types**:
556
+
557
+ ```php
558
+ // CORRECT
559
+ $wpdb->prepare("SELECT * FROM $table WHERE id = %d", $id); // %d for integers
560
+ $wpdb->prepare("SELECT * FROM $table WHERE name = %s", $name); // %s for strings
561
+ $wpdb->prepare("SELECT * FROM $table WHERE price = %f", $price); // %f for floats
562
+
563
+ // INCORRECT
564
+ $wpdb->prepare("SELECT * FROM $table WHERE id = %s", $id); // Wrong type
565
+ $wpdb->prepare("SELECT * FROM $table WHERE id = '$id'"); // No placeholder
566
+ ```
567
+
568
+ ```bash
569
+ bd comment bd-sa.7 "Audit completed. Found 5 database queries:
570
+ - 2 using prepare() correctly ✓
571
+ - 3 missing prepare() (CRITICAL)
572
+
573
+ Created remediation task for unprepared queries."
574
+ bd close bd-sa.7
575
+ ```
576
+
577
+ ### Step 5: Remediation
578
+
579
+ #### Task bd-sa.10: Fix Critical Issues
580
+
581
+ ```bash
582
+ bd ready # Shows bd-sa.10 is ready
583
+ bd update bd-sa.10 --status in_progress
584
+ ```
585
+
586
+ **Critical issues to fix**:
587
+
588
+ 1. ✅ Add nonce to settings form
589
+ 2. ✅ Add nonce verification to settings handler
590
+ 3. ✅ Add prepared statements to all database queries
591
+
592
+ **Implementation**:
593
+
594
+ ```bash
595
+ # Fix settings form nonce
596
+ # Fix database queries with prepare()
597
+ # Test all fixes
598
+ ```
599
+
600
+ ```bash
601
+ bd comment bd-sa.10 "Fixed all 3 critical issues:
602
+ 1. Added nonce to settings form
603
+ 2. Added nonce verification to settings handler
604
+ 3. Converted all database queries to use prepare()
605
+
606
+ All critical vulnerabilities resolved."
607
+ bd close bd-sa.10
608
+ ```
609
+
610
+ ### Step 6: Create Security Audit Report
611
+
612
+ #### Task bd-sa.14: Create Audit Report
613
+
614
+ ```bash
615
+ bd update bd-sa.14 --status in_progress
616
+ ```
617
+
618
+ **File**: `SECURITY-AUDIT-REPORT.md`
619
+
620
+ ```markdown
621
+ # Security Audit Report: Simple Contact Form
622
+
623
+ **Date**: 2024-01-26
624
+ **Version**: 1.0.0
625
+ **Auditor**: AI Agent
626
+
627
+ ## Executive Summary
628
+
629
+ Comprehensive security audit completed. All critical and high-severity issues have been resolved. Plugin is ready for WordPress.org submission.
630
+
631
+ ## Findings Summary
632
+
633
+ | Severity | Found | Fixed | Remaining |
634
+ |----------|-------|-------|-----------|
635
+ | Critical | 3 | 3 | 0 |
636
+ | High | 12 | 12 | 0 |
637
+ | Medium | 1 | 1 | 0 |
638
+ | Low | 0 | 0 | 0 |
639
+
640
+ ## Critical Issues (All Fixed)
641
+
642
+ ### 1. Missing Nonce Verification in Settings Form
643
+ - **File**: `admin/partials/settings-page.php`
644
+ - **Issue**: Form submission without CSRF protection
645
+ - **Fix**: Added `wp_nonce_field()` and verification
646
+ - **Status**: ✅ Fixed
647
+
648
+ ### 2. SQL Injection in Email Query
649
+ - **File**: `includes/class-contact-message.php`
650
+ - **Issue**: Direct variable insertion in SQL query
651
+ - **Fix**: Converted to `$wpdb->prepare()` with %s placeholder
652
+ - **Status**: ✅ Fixed
653
+
654
+ ### 3. SQL Injection in Date Range Query
655
+ - **File**: `includes/class-contact-message.php`
656
+ - **Issue**: Unprepared query with user input
657
+ - **Fix**: Converted to `$wpdb->prepare()` with %s placeholders
658
+ - **Status**: ✅ Fixed
659
+
660
+ ## High Issues (All Fixed)
661
+
662
+ ### 4-15. Unescaped Output in Admin Pages
663
+ - **Files**: Various admin templates
664
+ - **Issue**: XSS vulnerability from unescaped user data
665
+ - **Fix**: Added appropriate escaping (`esc_html()`, `esc_attr()`, `esc_url()`)
666
+ - **Status**: ✅ Fixed (all 12 instances)
667
+
668
+ ## Medium Issues (All Fixed)
669
+
670
+ ### 16. Unescaped Output in Email Template
671
+ - **File**: `includes/class-email-handler.php`
672
+ - **Issue**: Potential XSS in email content
673
+ - **Fix**: Added `esc_html()` to email template
674
+ - **Status**: ✅ Fixed
675
+
676
+ ## Security Checklist
677
+
678
+ - [x] All forms have nonce verification
679
+ - [x] All AJAX handlers verify nonces
680
+ - [x] All admin actions check capabilities
681
+ - [x] All user input is sanitized
682
+ - [x] All output is escaped
683
+ - [x] All database queries use prepared statements
684
+ - [x] No eval() or exec() usage
685
+ - [x] No unserialize() on user input
686
+ - [x] File uploads properly validated (N/A - no file uploads)
687
+ - [x] No external API calls without validation
688
+
689
+ ## Recommendations
690
+
691
+ 1. ✅ Implement rate limiting for form submissions (already implemented)
692
+ 2. ✅ Add input validation for email addresses (already implemented)
693
+ 3. ✅ Log security events (already implemented)
694
+ 4. Consider adding honeypot field for spam prevention
695
+ 5. Consider implementing reCAPTCHA for additional protection
696
+
697
+ ## Conclusion
698
+
699
+ The Simple Contact Form plugin has passed comprehensive security audit. All critical and high-severity vulnerabilities have been resolved. The plugin follows WordPress security best practices and is ready for submission to WordPress.org.
700
+ ```
701
+
702
+ ```bash
703
+ bd comment bd-sa.14 "Created comprehensive security audit report. All issues documented and resolved."
704
+ bd close bd-sa.14
705
+ bd close bd-sa
706
+ ```
707
+
708
+ ## AI Agent Workflow
709
+
710
+ ### Initial Prompt
711
+
712
+ ```
713
+ Perform a comprehensive security audit on the Simple Contact Form plugin.
714
+
715
+ Audit scope:
716
+ - CSRF protection (nonces)
717
+ - XSS prevention (output escaping)
718
+ - SQL injection (prepared statements)
719
+ - Authorization (capability checks)
720
+ - Input validation and sanitization
721
+
722
+ Process:
723
+ 1. Run automated scans (PHPCS with WordPress-VIP-Go)
724
+ 2. Manual review of all forms, AJAX handlers, database queries, and output
725
+ 3. Document all findings with severity ratings
726
+ 4. Fix all critical and high-severity issues
727
+ 5. Create security audit report
728
+
729
+ Provide detailed findings with file names, line numbers, and recommended fixes.
730
+ ```
731
+
732
+ ### Implementation Approach
733
+
734
+ 1. **Create OpenSpec security audit spec** with requirements
735
+ 2. **Break down into Beads tasks** for systematic review
736
+ 3. **Run automated scans** to identify common issues
737
+ 4. **Manual review** of critical security areas
738
+ 5. **Prioritize remediation** (critical → high → medium → low)
739
+ 6. **Fix all issues** with secure coding practices
740
+ 7. **Document findings** in comprehensive report
741
+ 8. **Verify fixes** with re-scan and testing
742
+
743
+ ## Key Takeaways
744
+
745
+ - **Automated scanning** catches many issues but manual review is essential
746
+ - **Systematic approach** ensures no security areas are missed
747
+ - **Prioritization** focuses effort on critical vulnerabilities first
748
+ - **Documentation** provides audit trail and learning resource
749
+ - **WordPress security functions** (nonces, escaping, prepare) are mandatory
750
+ - **Security audit** should be performed before every release
751
+ - **Beads tracking** ensures all findings are addressed
752
+