ma-agents 3.12.0 → 3.12.2

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 (1310) hide show
  1. package/CONTRIBUTING.md +235 -235
  2. package/LICENSE +20 -20
  3. package/QUICK_START.md +154 -154
  4. package/README.md +731 -731
  5. package/SKILLS_STRUCTURE.md +392 -392
  6. package/bin/cli.js +1681 -1573
  7. package/docs/architecture.md +284 -284
  8. package/docs/deployment/vllm-nemotron.md +132 -132
  9. package/docs/development-guide.md +122 -122
  10. package/docs/index.md +48 -48
  11. package/docs/project-overview.md +56 -56
  12. package/docs/project-scan-report.json +50 -50
  13. package/docs/source-tree-analysis.md +84 -84
  14. package/docs/technical-notes/context-persistence-research.md +434 -434
  15. package/docs/validation/bundled-installation-validation.md +52 -52
  16. package/examples/programmatic-usage.js +62 -62
  17. package/index.js +22 -22
  18. package/lib/agents.js +370 -370
  19. package/lib/bmad-cache/bmb/.claude-plugin/marketplace.json +50 -50
  20. package/lib/bmad-cache/bmb/.markdownlint-cli2.yaml +36 -36
  21. package/lib/bmad-cache/bmb/.prettierignore +9 -9
  22. package/lib/bmad-cache/bmb/CNAME +1 -1
  23. package/lib/bmad-cache/bmb/LICENSE +30 -30
  24. package/lib/bmad-cache/bmb/README.md +75 -75
  25. package/lib/bmad-cache/bmb/_git_preserved/HEAD +1 -1
  26. package/lib/bmad-cache/bmb/_git_preserved/config +13 -13
  27. package/lib/bmad-cache/bmb/_git_preserved/description +1 -1
  28. package/lib/bmad-cache/bmb/_git_preserved/hooks/applypatch-msg.sample +15 -15
  29. package/lib/bmad-cache/bmb/_git_preserved/hooks/commit-msg.sample +24 -24
  30. package/lib/bmad-cache/bmb/_git_preserved/hooks/fsmonitor-watchman.sample +174 -174
  31. package/lib/bmad-cache/bmb/_git_preserved/hooks/post-update.sample +8 -8
  32. package/lib/bmad-cache/bmb/_git_preserved/hooks/pre-applypatch.sample +14 -14
  33. package/lib/bmad-cache/bmb/_git_preserved/hooks/pre-commit.sample +49 -49
  34. package/lib/bmad-cache/bmb/_git_preserved/hooks/pre-merge-commit.sample +13 -13
  35. package/lib/bmad-cache/bmb/_git_preserved/hooks/pre-push.sample +53 -53
  36. package/lib/bmad-cache/bmb/_git_preserved/hooks/pre-rebase.sample +169 -169
  37. package/lib/bmad-cache/bmb/_git_preserved/hooks/pre-receive.sample +24 -24
  38. package/lib/bmad-cache/bmb/_git_preserved/hooks/prepare-commit-msg.sample +42 -42
  39. package/lib/bmad-cache/bmb/_git_preserved/hooks/push-to-checkout.sample +78 -78
  40. package/lib/bmad-cache/bmb/_git_preserved/hooks/sendemail-validate.sample +77 -77
  41. package/lib/bmad-cache/bmb/_git_preserved/hooks/update.sample +128 -128
  42. package/lib/bmad-cache/bmb/_git_preserved/info/exclude +6 -6
  43. package/lib/bmad-cache/bmb/_git_preserved/packed-refs +2 -2
  44. package/lib/bmad-cache/bmb/_git_preserved/refs/heads/main +1 -1
  45. package/lib/bmad-cache/bmb/_git_preserved/refs/remotes/origin/HEAD +1 -1
  46. package/lib/bmad-cache/bmb/_git_preserved/refs/tags/v1.7.0 +1 -1
  47. package/lib/bmad-cache/bmb/_git_preserved/shallow +1 -1
  48. package/lib/bmad-cache/bmb/eslint.config.mjs +141 -141
  49. package/lib/bmad-cache/bmb/package-lock.json +15283 -15283
  50. package/lib/bmad-cache/bmb/package.json +86 -86
  51. package/lib/bmad-cache/bmb/prettier.config.mjs +32 -32
  52. package/lib/bmad-cache/bmb/samples/bmad-agent-code-coach/scripts/init-sanctum.py +288 -288
  53. package/lib/bmad-cache/bmb/samples/bmad-agent-creative-muse/scripts/init-sanctum.py +274 -274
  54. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/assets/module-help.csv +9 -9
  55. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/assets/module.yaml +8 -8
  56. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/merge-config.py +408 -408
  57. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/merge-help-csv.py +218 -218
  58. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/recall_metrics.py +229 -229
  59. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/seed_tracker.py +156 -156
  60. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/symbol_stats.py +162 -162
  61. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/tests/test_recall_metrics.py +115 -115
  62. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/tests/test_seed_tracker.py +140 -140
  63. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/tests/test_symbol_stats.py +113 -113
  64. package/lib/bmad-cache/bmb/samples/bmad-agent-sentinel/scripts/init-sanctum.py +285 -285
  65. package/lib/bmad-cache/bmb/samples/bmad-agent-sentinel/scripts/tests/test-init-sanctum.py +174 -174
  66. package/lib/bmad-cache/bmb/samples/bmad-excalidraw/scripts/generate_excalidraw.py +605 -605
  67. package/lib/bmad-cache/bmb/samples/bmad-excalidraw/scripts/tests/test_generate_excalidraw.py +360 -360
  68. package/lib/bmad-cache/bmb/samples/bmad-excalidraw/scripts/tests/test_validate_excalidraw.py +246 -246
  69. package/lib/bmad-cache/bmb/samples/bmad-excalidraw/scripts/validate_excalidraw.py +264 -264
  70. package/lib/bmad-cache/bmb/samples/sample-module-setup/assets/module-help.csv +16 -16
  71. package/lib/bmad-cache/bmb/samples/sample-module-setup/assets/module.yaml +13 -13
  72. package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/cleanup-legacy.py +259 -259
  73. package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/merge-config.py +408 -408
  74. package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/merge-help-csv.py +218 -218
  75. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/customize-template.toml +62 -62
  76. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/init-sanctum-template.py +277 -277
  77. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/assets/sample-customize-analyst.toml +87 -87
  78. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/references/sample-init-sanctum.py +274 -274
  79. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/generate-html-report.py +534 -534
  80. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-execution-deps.py +337 -337
  81. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-prompt-metrics.py +425 -425
  82. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-sanctum-architecture.py +385 -385
  83. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/prepass-structure-capabilities.py +482 -482
  84. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/process-template.py +190 -190
  85. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/scan-path-standards.py +324 -324
  86. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/scan-scripts.py +747 -747
  87. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/assets/module-help.csv +10 -10
  88. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/assets/module.yaml +20 -20
  89. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/cleanup-legacy.py +259 -259
  90. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/merge-config.py +408 -408
  91. package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/merge-help-csv.py +218 -218
  92. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/assets/module-help.csv +1 -1
  93. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/assets/module.yaml +6 -6
  94. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/cleanup-legacy.py +259 -259
  95. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/merge-config.py +408 -408
  96. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/merge-help-csv.py +218 -218
  97. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/standalone-module-template/merge-config.py +408 -408
  98. package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/standalone-module-template/merge-help-csv.py +218 -218
  99. package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/scaffold-setup-skill.py +124 -124
  100. package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/scaffold-standalone-module.py +190 -190
  101. package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/tests/test-scaffold-setup-skill.py +230 -230
  102. package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/tests/test-scaffold-standalone-module.py +266 -266
  103. package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/tests/test-validate-module.py +314 -314
  104. package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/validate-module.py +293 -293
  105. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/assets/customize-template.toml +56 -56
  106. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/assets/sample-customize-product-brief.toml +51 -51
  107. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-convert-report.py +406 -406
  108. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-html-report.py +539 -539
  109. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/prepass-execution-deps.py +288 -288
  110. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/prepass-prompt-metrics.py +285 -285
  111. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/prepass-workflow-integrity.py +475 -475
  112. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/scan-path-standards.py +298 -298
  113. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/scan-scripts.py +745 -745
  114. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/tests/test_generate_convert_report.py +243 -243
  115. package/lib/bmad-cache/bmb/skills/module-help.csv +11 -11
  116. package/lib/bmad-cache/bmb/skills/module.yaml +20 -20
  117. package/lib/bmad-cache/bmb/tools/build-docs.mjs +448 -448
  118. package/lib/bmad-cache/bmb/tools/validate-doc-links.cjs +412 -412
  119. package/lib/bmad-cache/bmb/tools/validate-file-refs.mjs +657 -657
  120. package/lib/bmad-cache/bmb/website/astro.config.mjs +142 -142
  121. package/lib/bmad-cache/bmb/website/src/components/Banner.astro +57 -57
  122. package/lib/bmad-cache/bmb/website/src/components/Header.astro +94 -94
  123. package/lib/bmad-cache/bmb/website/src/components/MobileMenuFooter.astro +33 -33
  124. package/lib/bmad-cache/bmb/website/src/content/config.ts +6 -6
  125. package/lib/bmad-cache/bmb/website/src/lib/site-url.mjs +25 -25
  126. package/lib/bmad-cache/bmb/website/src/rehype-base-paths.js +88 -88
  127. package/lib/bmad-cache/bmb/website/src/rehype-markdown-links.js +117 -117
  128. package/lib/bmad-cache/bmb/website/src/styles/custom.css +502 -502
  129. package/lib/bmad-cache/cache-manifest.json +37 -37
  130. package/lib/bmad-cache/cis/.claude-plugin/marketplace.json +33 -33
  131. package/lib/bmad-cache/cis/.markdownlint-cli2.yaml +35 -35
  132. package/lib/bmad-cache/cis/.prettierignore +9 -9
  133. package/lib/bmad-cache/cis/CNAME +1 -1
  134. package/lib/bmad-cache/cis/LICENSE +26 -26
  135. package/lib/bmad-cache/cis/README.md +114 -114
  136. package/lib/bmad-cache/cis/_git_preserved/HEAD +1 -1
  137. package/lib/bmad-cache/cis/_git_preserved/config +13 -13
  138. package/lib/bmad-cache/cis/_git_preserved/description +1 -1
  139. package/lib/bmad-cache/cis/_git_preserved/hooks/applypatch-msg.sample +15 -15
  140. package/lib/bmad-cache/cis/_git_preserved/hooks/commit-msg.sample +24 -24
  141. package/lib/bmad-cache/cis/_git_preserved/hooks/fsmonitor-watchman.sample +174 -174
  142. package/lib/bmad-cache/cis/_git_preserved/hooks/post-update.sample +8 -8
  143. package/lib/bmad-cache/cis/_git_preserved/hooks/pre-applypatch.sample +14 -14
  144. package/lib/bmad-cache/cis/_git_preserved/hooks/pre-commit.sample +49 -49
  145. package/lib/bmad-cache/cis/_git_preserved/hooks/pre-merge-commit.sample +13 -13
  146. package/lib/bmad-cache/cis/_git_preserved/hooks/pre-push.sample +53 -53
  147. package/lib/bmad-cache/cis/_git_preserved/hooks/pre-rebase.sample +169 -169
  148. package/lib/bmad-cache/cis/_git_preserved/hooks/pre-receive.sample +24 -24
  149. package/lib/bmad-cache/cis/_git_preserved/hooks/prepare-commit-msg.sample +42 -42
  150. package/lib/bmad-cache/cis/_git_preserved/hooks/push-to-checkout.sample +78 -78
  151. package/lib/bmad-cache/cis/_git_preserved/hooks/sendemail-validate.sample +77 -77
  152. package/lib/bmad-cache/cis/_git_preserved/hooks/update.sample +128 -128
  153. package/lib/bmad-cache/cis/_git_preserved/info/exclude +6 -6
  154. package/lib/bmad-cache/cis/_git_preserved/packed-refs +2 -2
  155. package/lib/bmad-cache/cis/_git_preserved/refs/heads/main +1 -1
  156. package/lib/bmad-cache/cis/_git_preserved/refs/remotes/origin/HEAD +1 -1
  157. package/lib/bmad-cache/cis/_git_preserved/shallow +1 -1
  158. package/lib/bmad-cache/cis/eslint.config.mjs +141 -141
  159. package/lib/bmad-cache/cis/package-lock.json +17015 -17015
  160. package/lib/bmad-cache/cis/package.json +91 -91
  161. package/lib/bmad-cache/cis/prettier.config.mjs +32 -32
  162. package/lib/bmad-cache/cis/src/module-help.csv +7 -7
  163. package/lib/bmad-cache/cis/src/module.yaml +76 -76
  164. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-brainstorming-coach/customize.toml +38 -38
  165. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-creative-problem-solver/customize.toml +38 -38
  166. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-design-thinking-coach/customize.toml +39 -39
  167. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-innovation-strategist/customize.toml +38 -38
  168. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-presentation-master/customize.toml +73 -73
  169. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-storyteller/customize.toml +60 -60
  170. package/lib/bmad-cache/cis/src/skills/bmad-cis-design-thinking/customize.toml +41 -41
  171. package/lib/bmad-cache/cis/src/skills/bmad-cis-design-thinking/design-methods.csv +30 -30
  172. package/lib/bmad-cache/cis/src/skills/bmad-cis-innovation-strategy/customize.toml +41 -41
  173. package/lib/bmad-cache/cis/src/skills/bmad-cis-innovation-strategy/innovation-frameworks.csv +30 -30
  174. package/lib/bmad-cache/cis/src/skills/bmad-cis-problem-solving/customize.toml +42 -42
  175. package/lib/bmad-cache/cis/src/skills/bmad-cis-problem-solving/solving-methods.csv +30 -30
  176. package/lib/bmad-cache/cis/src/skills/bmad-cis-storytelling/customize.toml +41 -41
  177. package/lib/bmad-cache/cis/src/skills/bmad-cis-storytelling/story-types.csv +25 -25
  178. package/lib/bmad-cache/cis/tools/build-docs.mjs +456 -456
  179. package/lib/bmad-cache/cis/website/astro.config.mjs +172 -172
  180. package/lib/bmad-cache/cis/website/src/components/Banner.astro +71 -71
  181. package/lib/bmad-cache/cis/website/src/components/Header.astro +94 -94
  182. package/lib/bmad-cache/cis/website/src/components/MobileMenuFooter.astro +33 -33
  183. package/lib/bmad-cache/cis/website/src/content/config.ts +7 -7
  184. package/lib/bmad-cache/cis/website/src/content/i18n/zh-CN.json +28 -28
  185. package/lib/bmad-cache/cis/website/src/lib/locales.mjs +27 -27
  186. package/lib/bmad-cache/cis/website/src/lib/site-url.mjs +25 -25
  187. package/lib/bmad-cache/cis/website/src/rehype-base-paths.js +88 -88
  188. package/lib/bmad-cache/cis/website/src/rehype-markdown-links.js +117 -117
  189. package/lib/bmad-cache/cis/website/src/styles/custom.css +503 -503
  190. package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +59 -59
  191. package/lib/bmad-cache/gds/.markdownlint-cli2.yaml +35 -35
  192. package/lib/bmad-cache/gds/.prettierignore +9 -9
  193. package/lib/bmad-cache/gds/CNAME +1 -1
  194. package/lib/bmad-cache/gds/LICENSE +26 -26
  195. package/lib/bmad-cache/gds/README.md +132 -132
  196. package/lib/bmad-cache/gds/_git_preserved/HEAD +1 -1
  197. package/lib/bmad-cache/gds/_git_preserved/config +13 -13
  198. package/lib/bmad-cache/gds/_git_preserved/description +1 -1
  199. package/lib/bmad-cache/gds/_git_preserved/hooks/applypatch-msg.sample +15 -15
  200. package/lib/bmad-cache/gds/_git_preserved/hooks/commit-msg.sample +24 -24
  201. package/lib/bmad-cache/gds/_git_preserved/hooks/fsmonitor-watchman.sample +174 -174
  202. package/lib/bmad-cache/gds/_git_preserved/hooks/post-update.sample +8 -8
  203. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-applypatch.sample +14 -14
  204. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-commit.sample +49 -49
  205. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-merge-commit.sample +13 -13
  206. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-push.sample +53 -53
  207. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-rebase.sample +169 -169
  208. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-receive.sample +24 -24
  209. package/lib/bmad-cache/gds/_git_preserved/hooks/prepare-commit-msg.sample +42 -42
  210. package/lib/bmad-cache/gds/_git_preserved/hooks/push-to-checkout.sample +78 -78
  211. package/lib/bmad-cache/gds/_git_preserved/hooks/sendemail-validate.sample +77 -77
  212. package/lib/bmad-cache/gds/_git_preserved/hooks/update.sample +128 -128
  213. package/lib/bmad-cache/gds/_git_preserved/info/exclude +6 -6
  214. package/lib/bmad-cache/gds/_git_preserved/packed-refs +2 -2
  215. package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +1 -1
  216. package/lib/bmad-cache/gds/_git_preserved/refs/remotes/origin/HEAD +1 -1
  217. package/lib/bmad-cache/gds/_git_preserved/shallow +1 -1
  218. package/lib/bmad-cache/gds/eslint.config.mjs +141 -141
  219. package/lib/bmad-cache/gds/package.json +91 -91
  220. package/lib/bmad-cache/gds/prettier.config.mjs +32 -32
  221. package/lib/bmad-cache/gds/src/agents/gds-agent-game-architect/customize.toml +57 -57
  222. package/lib/bmad-cache/gds/src/agents/gds-agent-game-designer/customize.toml +59 -59
  223. package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/customize.toml +129 -129
  224. package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/gametest/qa-index.csv +18 -18
  225. package/lib/bmad-cache/gds/src/agents/gds-agent-game-solo-dev/customize.toml +60 -60
  226. package/lib/bmad-cache/gds/src/agents/gds-agent-tech-writer/customize.toml +65 -65
  227. package/lib/bmad-cache/gds/src/module-help.csv +36 -36
  228. package/lib/bmad-cache/gds/src/module.yaml +113 -113
  229. package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/customize.toml +41 -41
  230. package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/game-brain-methods.csv +25 -25
  231. package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-create-game-brief/customize.toml +41 -41
  232. package/lib/bmad-cache/gds/src/workflows/1-preproduction/research/gds-domain-research/customize.toml +41 -41
  233. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-gdd/customize.toml +41 -41
  234. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-gdd/game-types.csv +24 -24
  235. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-narrative/customize.toml +41 -41
  236. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/customize.toml +41 -41
  237. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/data/domain-complexity.csv +14 -14
  238. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/data/project-types.csv +10 -10
  239. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-ux-design/customize.toml +41 -41
  240. package/lib/bmad-cache/gds/src/workflows/2-design/gds-edit-gdd/customize.toml +41 -41
  241. package/lib/bmad-cache/gds/src/workflows/2-design/gds-edit-prd/customize.toml +41 -41
  242. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-gdd/customize.toml +41 -41
  243. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-gdd/data/genre-complexity.csv +26 -26
  244. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/customize.toml +41 -41
  245. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/data/domain-complexity.csv +14 -14
  246. package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/data/project-types.csv +10 -10
  247. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-check-implementation-readiness/customize.toml +41 -41
  248. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-create-epics-and-stories/customize.toml +41 -41
  249. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/architecture-patterns.yaml +507 -507
  250. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/customize.toml +41 -41
  251. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/decision-catalog.yaml +340 -340
  252. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/engine-mcps.yaml +270 -270
  253. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/pattern-categories.csv +12 -12
  254. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-generate-project-context/customize.toml +41 -41
  255. package/lib/bmad-cache/gds/src/workflows/4-production/gds-code-review/customize.toml +41 -41
  256. package/lib/bmad-cache/gds/src/workflows/4-production/gds-correct-course/customize.toml +41 -41
  257. package/lib/bmad-cache/gds/src/workflows/4-production/gds-create-story/customize.toml +41 -41
  258. package/lib/bmad-cache/gds/src/workflows/4-production/gds-dev-story/customize.toml +41 -41
  259. package/lib/bmad-cache/gds/src/workflows/4-production/gds-retrospective/customize.toml +41 -41
  260. package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/customize.toml +41 -41
  261. package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/sprint-status-template.yaml +55 -55
  262. package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-status/customize.toml +41 -41
  263. package/lib/bmad-cache/gds/src/workflows/gametest/gds-e2e-scaffold/customize.toml +41 -41
  264. package/lib/bmad-cache/gds/src/workflows/gametest/gds-performance-test/customize.toml +41 -41
  265. package/lib/bmad-cache/gds/src/workflows/gametest/gds-playtest-plan/customize.toml +41 -41
  266. package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-automate/customize.toml +41 -41
  267. package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-design/customize.toml +41 -41
  268. package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-framework/customize.toml +41 -41
  269. package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-review/customize.toml +41 -41
  270. package/lib/bmad-cache/gds/src/workflows/gds-document-project/customize.toml +41 -41
  271. package/lib/bmad-cache/gds/src/workflows/gds-document-project/documentation-requirements.csv +12 -12
  272. package/lib/bmad-cache/gds/src/workflows/gds-document-project/templates/project-scan-report-schema.json +160 -160
  273. package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/gds-quick-dev/customize.toml +41 -41
  274. package/lib/bmad-cache/gds/tools/build-docs.mjs +450 -450
  275. package/lib/bmad-cache/gds/website/astro.config.mjs +142 -142
  276. package/lib/bmad-cache/gds/website/src/components/Banner.astro +71 -71
  277. package/lib/bmad-cache/gds/website/src/components/Header.astro +94 -94
  278. package/lib/bmad-cache/gds/website/src/components/MobileMenuFooter.astro +33 -33
  279. package/lib/bmad-cache/gds/website/src/content/config.ts +6 -6
  280. package/lib/bmad-cache/gds/website/src/lib/site-url.mjs +25 -25
  281. package/lib/bmad-cache/gds/website/src/rehype-base-paths.js +88 -88
  282. package/lib/bmad-cache/gds/website/src/rehype-markdown-links.js +117 -117
  283. package/lib/bmad-cache/gds/website/src/styles/custom.css +503 -503
  284. package/lib/bmad-cache/tea/.claude-plugin/marketplace.json +33 -33
  285. package/lib/bmad-cache/tea/.coderabbit.yaml +40 -40
  286. package/lib/bmad-cache/tea/.github/CODE_OF_CONDUCT.md +128 -128
  287. package/lib/bmad-cache/tea/.github/FUNDING.yaml +15 -15
  288. package/lib/bmad-cache/tea/.github/ISSUE_TEMPLATE/config.yaml +11 -11
  289. package/lib/bmad-cache/tea/.github/ISSUE_TEMPLATE/feature_request.md +70 -70
  290. package/lib/bmad-cache/tea/.github/ISSUE_TEMPLATE/issue.md +61 -61
  291. package/lib/bmad-cache/tea/.github/workflows/docs.yaml +66 -66
  292. package/lib/bmad-cache/tea/.github/workflows/quality.yaml +117 -117
  293. package/lib/bmad-cache/tea/.husky/pre-commit +20 -20
  294. package/lib/bmad-cache/tea/.markdownlint-cli2.yaml +36 -36
  295. package/lib/bmad-cache/tea/.prettierignore +9 -9
  296. package/lib/bmad-cache/tea/CHANGELOG.md +241 -241
  297. package/lib/bmad-cache/tea/CONTRIBUTING.md +268 -268
  298. package/lib/bmad-cache/tea/LICENSE +26 -26
  299. package/lib/bmad-cache/tea/README.md +416 -416
  300. package/lib/bmad-cache/tea/SECURITY.md +85 -85
  301. package/lib/bmad-cache/tea/_git_preserved/HEAD +1 -1
  302. package/lib/bmad-cache/tea/_git_preserved/config +13 -13
  303. package/lib/bmad-cache/tea/_git_preserved/description +1 -1
  304. package/lib/bmad-cache/tea/_git_preserved/hooks/applypatch-msg.sample +15 -15
  305. package/lib/bmad-cache/tea/_git_preserved/hooks/commit-msg.sample +24 -24
  306. package/lib/bmad-cache/tea/_git_preserved/hooks/fsmonitor-watchman.sample +174 -174
  307. package/lib/bmad-cache/tea/_git_preserved/hooks/post-update.sample +8 -8
  308. package/lib/bmad-cache/tea/_git_preserved/hooks/pre-applypatch.sample +14 -14
  309. package/lib/bmad-cache/tea/_git_preserved/hooks/pre-commit.sample +49 -49
  310. package/lib/bmad-cache/tea/_git_preserved/hooks/pre-merge-commit.sample +13 -13
  311. package/lib/bmad-cache/tea/_git_preserved/hooks/pre-push.sample +53 -53
  312. package/lib/bmad-cache/tea/_git_preserved/hooks/pre-rebase.sample +169 -169
  313. package/lib/bmad-cache/tea/_git_preserved/hooks/pre-receive.sample +24 -24
  314. package/lib/bmad-cache/tea/_git_preserved/hooks/prepare-commit-msg.sample +42 -42
  315. package/lib/bmad-cache/tea/_git_preserved/hooks/push-to-checkout.sample +78 -78
  316. package/lib/bmad-cache/tea/_git_preserved/hooks/sendemail-validate.sample +77 -77
  317. package/lib/bmad-cache/tea/_git_preserved/hooks/update.sample +128 -128
  318. package/lib/bmad-cache/tea/_git_preserved/info/exclude +6 -6
  319. package/lib/bmad-cache/tea/_git_preserved/packed-refs +2 -2
  320. package/lib/bmad-cache/tea/_git_preserved/refs/heads/main +1 -1
  321. package/lib/bmad-cache/tea/_git_preserved/refs/remotes/origin/HEAD +1 -1
  322. package/lib/bmad-cache/tea/_git_preserved/shallow +1 -1
  323. package/lib/bmad-cache/tea/docs/404.md +20 -20
  324. package/lib/bmad-cache/tea/docs/explanation/engagement-models.md +767 -767
  325. package/lib/bmad-cache/tea/docs/explanation/fixture-architecture.md +484 -484
  326. package/lib/bmad-cache/tea/docs/explanation/knowledge-base-system.md +601 -601
  327. package/lib/bmad-cache/tea/docs/explanation/network-first-patterns.md +884 -884
  328. package/lib/bmad-cache/tea/docs/explanation/risk-based-testing.md +628 -628
  329. package/lib/bmad-cache/tea/docs/explanation/step-file-architecture.md +599 -599
  330. package/lib/bmad-cache/tea/docs/explanation/subagent-architecture.md +189 -189
  331. package/lib/bmad-cache/tea/docs/explanation/tea-overview.md +474 -474
  332. package/lib/bmad-cache/tea/docs/explanation/test-quality-standards.md +965 -965
  333. package/lib/bmad-cache/tea/docs/explanation/testing-as-engineering.md +115 -115
  334. package/lib/bmad-cache/tea/docs/glossary/index.md +160 -160
  335. package/lib/bmad-cache/tea/docs/how-to/brownfield/use-tea-for-enterprise.md +571 -571
  336. package/lib/bmad-cache/tea/docs/how-to/brownfield/use-tea-with-existing-tests.md +631 -631
  337. package/lib/bmad-cache/tea/docs/how-to/customization/configure-browser-automation.md +243 -243
  338. package/lib/bmad-cache/tea/docs/how-to/customization/extend-tea-with-custom-workflows.md +102 -102
  339. package/lib/bmad-cache/tea/docs/how-to/customization/integrate-playwright-utils.md +846 -846
  340. package/lib/bmad-cache/tea/docs/how-to/workflows/run-atdd.md +462 -462
  341. package/lib/bmad-cache/tea/docs/how-to/workflows/run-automate.md +693 -693
  342. package/lib/bmad-cache/tea/docs/how-to/workflows/run-nfr-assess.md +731 -731
  343. package/lib/bmad-cache/tea/docs/how-to/workflows/run-test-design.md +144 -144
  344. package/lib/bmad-cache/tea/docs/how-to/workflows/run-test-review.md +634 -634
  345. package/lib/bmad-cache/tea/docs/how-to/workflows/run-trace.md +966 -966
  346. package/lib/bmad-cache/tea/docs/how-to/workflows/setup-ci.md +763 -763
  347. package/lib/bmad-cache/tea/docs/how-to/workflows/setup-test-framework.md +122 -122
  348. package/lib/bmad-cache/tea/docs/how-to/workflows/teach-me-testing.md +302 -302
  349. package/lib/bmad-cache/tea/docs/index.md +65 -65
  350. package/lib/bmad-cache/tea/docs/reference/commands.md +356 -356
  351. package/lib/bmad-cache/tea/docs/reference/configuration.md +1144 -1144
  352. package/lib/bmad-cache/tea/docs/reference/knowledge-base.md +406 -406
  353. package/lib/bmad-cache/tea/docs/reference/troubleshooting.md +837 -837
  354. package/lib/bmad-cache/tea/docs/tutorials/learn-testing-tea-academy.md +266 -266
  355. package/lib/bmad-cache/tea/docs/tutorials/tea-lite-quickstart.md +465 -465
  356. package/lib/bmad-cache/tea/eslint.config.mjs +141 -141
  357. package/lib/bmad-cache/tea/package-lock.json +16046 -16046
  358. package/lib/bmad-cache/tea/package.json +118 -118
  359. package/lib/bmad-cache/tea/prettier.config.mjs +32 -32
  360. package/lib/bmad-cache/tea/src/agents/bmad-tea/SKILL.md +80 -80
  361. package/lib/bmad-cache/tea/src/agents/bmad-tea/customize.toml +104 -104
  362. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/adr-quality-readiness-checklist.md +377 -377
  363. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/api-request.md +563 -563
  364. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/api-testing-patterns.md +915 -915
  365. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/auth-session.md +548 -548
  366. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/burn-in.md +273 -273
  367. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/ci-burn-in.md +717 -717
  368. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/component-tdd.md +486 -486
  369. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/contract-testing.md +1066 -1066
  370. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/data-factories.md +500 -500
  371. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/email-auth.md +721 -721
  372. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/error-handling.md +725 -725
  373. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/feature-flags.md +750 -750
  374. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/file-utils.md +456 -456
  375. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/fixture-architecture.md +401 -401
  376. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/fixtures-composition.md +382 -382
  377. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/intercept-network-call.md +426 -426
  378. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/log.md +426 -426
  379. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/network-error-monitor.md +401 -401
  380. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/network-first.md +486 -486
  381. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/network-recorder.md +527 -527
  382. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/nfr-criteria.md +670 -670
  383. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/overview.md +286 -286
  384. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pact-broker-webhooks.md +237 -237
  385. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pact-consumer-di.md +310 -310
  386. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pact-consumer-framework-setup.md +704 -704
  387. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pact-mcp.md +205 -205
  388. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-consumer-helpers.md +379 -379
  389. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-overview.md +219 -219
  390. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-provider-verifier.md +397 -397
  391. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-request-filter.md +224 -224
  392. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -262
  393. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/playwright-cli.md +280 -280
  394. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/playwright-config.md +734 -734
  395. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/probability-impact.md +601 -601
  396. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/recurse.md +421 -421
  397. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/risk-governance.md +615 -615
  398. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/selective-testing.md +732 -732
  399. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/selector-resilience.md +527 -527
  400. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/test-healing-patterns.md +644 -644
  401. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/test-levels-framework.md +473 -473
  402. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/test-priorities-matrix.md +373 -373
  403. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/test-quality.md +664 -664
  404. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/timing-debugging.md +372 -372
  405. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/visual-debugging.md +527 -527
  406. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-module-setup.md +122 -122
  407. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-providers.md +155 -155
  408. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-risk-guidance.md +114 -114
  409. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-template-matchers.md +160 -160
  410. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-testing-fundamentals.md +42 -42
  411. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-timeout-error.md +130 -130
  412. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/webhook-waiting-querying.md +167 -167
  413. package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/tea-index.csv +52 -52
  414. package/lib/bmad-cache/tea/src/module-help.csv +11 -11
  415. package/lib/bmad-cache/tea/src/module.yaml +307 -307
  416. package/lib/bmad-cache/tea/src/workflows/testarch/README.md +76 -76
  417. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/SKILL.md +129 -129
  418. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/checklist.md +198 -198
  419. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/customize.toml +40 -40
  420. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/curriculum.yaml +129 -129
  421. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/quiz-questions.yaml +206 -206
  422. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/role-paths.yaml +136 -136
  423. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/session-content-map.yaml +219 -219
  424. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/tea-resources-index.yaml +394 -394
  425. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/instructions.md +137 -137
  426. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-01-init.md +235 -235
  427. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-01b-continue.md +147 -147
  428. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-02-assess.md +258 -258
  429. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-03-session-menu.md +219 -219
  430. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-01.md +460 -460
  431. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-02.md +465 -465
  432. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-03.md +301 -301
  433. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-04.md +234 -234
  434. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-05.md +234 -234
  435. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-06.md +209 -209
  436. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-07.md +220 -220
  437. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-05-completion.md +347 -347
  438. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-e/step-e-01-assess-workflow.md +141 -141
  439. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-e/step-e-02-apply-edits.md +130 -130
  440. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-v/step-v-01-validate.md +272 -272
  441. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/templates/certificate-template.md +86 -86
  442. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/templates/progress-template.yaml +95 -95
  443. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/templates/session-notes-template.md +83 -83
  444. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/workflow-plan-teach-me-testing.md +950 -950
  445. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/SKILL.md +85 -85
  446. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/atdd-checklist-template.md +394 -394
  447. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/checklist.md +375 -375
  448. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/customize.toml +40 -40
  449. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/instructions.md +44 -44
  450. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/adr-quality-readiness-checklist.md +377 -377
  451. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/api-request.md +563 -563
  452. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/api-testing-patterns.md +915 -915
  453. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/auth-session.md +548 -548
  454. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/burn-in.md +273 -273
  455. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/ci-burn-in.md +717 -717
  456. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/component-tdd.md +486 -486
  457. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/contract-testing.md +1067 -1067
  458. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/data-factories.md +500 -500
  459. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/email-auth.md +721 -721
  460. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/error-handling.md +725 -725
  461. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/feature-flags.md +750 -750
  462. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/file-utils.md +456 -456
  463. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/fixture-architecture.md +401 -401
  464. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/fixtures-composition.md +382 -382
  465. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/intercept-network-call.md +426 -426
  466. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/log.md +426 -426
  467. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/network-error-monitor.md +401 -401
  468. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/network-first.md +486 -486
  469. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/network-recorder.md +527 -527
  470. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/nfr-criteria.md +670 -670
  471. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/overview.md +286 -286
  472. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pact-broker-webhooks.md +237 -237
  473. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pact-consumer-di.md +310 -310
  474. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pact-consumer-framework-setup.md +757 -757
  475. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pact-mcp.md +205 -205
  476. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -380
  477. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pactjs-utils-overview.md +219 -219
  478. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pactjs-utils-provider-verifier.md +397 -397
  479. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pactjs-utils-request-filter.md +224 -224
  480. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/pactjs-utils-zod-to-pact.md +262 -262
  481. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/playwright-cli.md +280 -280
  482. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/playwright-config.md +734 -734
  483. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/probability-impact.md +601 -601
  484. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/recurse.md +421 -421
  485. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/risk-governance.md +615 -615
  486. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/selective-testing.md +732 -732
  487. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/selector-resilience.md +527 -527
  488. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/test-healing-patterns.md +644 -644
  489. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/test-levels-framework.md +473 -473
  490. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/test-priorities-matrix.md +373 -373
  491. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/test-quality.md +664 -664
  492. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/timing-debugging.md +372 -372
  493. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/visual-debugging.md +527 -527
  494. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-module-setup.md +122 -122
  495. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-providers.md +155 -155
  496. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-risk-guidance.md +114 -114
  497. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-template-matchers.md +160 -160
  498. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-testing-fundamentals.md +42 -42
  499. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-timeout-error.md +130 -130
  500. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/knowledge/webhook-waiting-querying.md +167 -167
  501. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/resources/tea-index.csv +52 -52
  502. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-01-preflight-and-context.md +244 -244
  503. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-01b-resume.md +96 -96
  504. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-02-generation-mode.md +125 -125
  505. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-03-test-strategy.md +110 -110
  506. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04-generate-tests.md +335 -335
  507. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04a-subagent-api-failing.md +294 -294
  508. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04b-subagent-e2e-failing.md +244 -244
  509. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04c-aggregate.md +394 -394
  510. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-05-validate-and-complete.md +123 -123
  511. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-e/step-01-assess.md +65 -65
  512. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-e/step-02-apply-edit.md +68 -68
  513. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-v/step-01-validate.md +75 -75
  514. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/validation-report-20260127-095021.md +73 -73
  515. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/validation-report-20260127-102401.md +116 -116
  516. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/workflow-plan.md +21 -21
  517. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/workflow.yaml +46 -46
  518. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/SKILL.md +85 -85
  519. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/checklist.md +611 -611
  520. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/customize.toml +40 -40
  521. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/instructions.md +49 -49
  522. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/adr-quality-readiness-checklist.md +377 -377
  523. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/api-request.md +563 -563
  524. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/api-testing-patterns.md +915 -915
  525. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/auth-session.md +548 -548
  526. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/burn-in.md +273 -273
  527. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/ci-burn-in.md +717 -717
  528. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/component-tdd.md +486 -486
  529. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/contract-testing.md +1066 -1066
  530. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/data-factories.md +500 -500
  531. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/email-auth.md +721 -721
  532. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/error-handling.md +725 -725
  533. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/feature-flags.md +750 -750
  534. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/file-utils.md +456 -456
  535. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/fixture-architecture.md +401 -401
  536. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/fixtures-composition.md +382 -382
  537. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/intercept-network-call.md +426 -426
  538. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/log.md +426 -426
  539. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/network-error-monitor.md +401 -401
  540. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/network-first.md +486 -486
  541. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/network-recorder.md +527 -527
  542. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/nfr-criteria.md +670 -670
  543. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/overview.md +286 -286
  544. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pact-broker-webhooks.md +237 -237
  545. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pact-consumer-di.md +310 -310
  546. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pact-consumer-framework-setup.md +757 -757
  547. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pact-mcp.md +205 -205
  548. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -380
  549. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pactjs-utils-overview.md +216 -216
  550. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pactjs-utils-provider-verifier.md +397 -397
  551. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/pactjs-utils-request-filter.md +224 -224
  552. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/playwright-cli.md +280 -280
  553. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/playwright-config.md +734 -734
  554. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/probability-impact.md +601 -601
  555. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/recurse.md +421 -421
  556. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/risk-governance.md +615 -615
  557. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/selective-testing.md +732 -732
  558. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/selector-resilience.md +527 -527
  559. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/test-healing-patterns.md +644 -644
  560. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/test-levels-framework.md +473 -473
  561. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/test-priorities-matrix.md +373 -373
  562. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/test-quality.md +664 -664
  563. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/timing-debugging.md +372 -372
  564. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/visual-debugging.md +527 -527
  565. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-module-setup.md +122 -122
  566. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-providers.md +155 -155
  567. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-risk-guidance.md +114 -114
  568. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-template-matchers.md +160 -160
  569. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-testing-fundamentals.md +42 -42
  570. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-timeout-error.md +130 -130
  571. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/knowledge/webhook-waiting-querying.md +167 -167
  572. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/tea-index.csv +51 -51
  573. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-01-preflight-and-context.md +237 -237
  574. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-01b-resume.md +94 -94
  575. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-02-identify-targets.md +169 -169
  576. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-03-generate-tests.md +394 -394
  577. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-03a-subagent-api.md +271 -271
  578. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-03b-subagent-backend.md +246 -246
  579. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-03b-subagent-e2e.md +213 -213
  580. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-03c-aggregate.md +398 -398
  581. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-04-validate-and-summarize.md +114 -114
  582. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-e/step-01-assess.md +65 -65
  583. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-e/step-02-apply-edit.md +68 -68
  584. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-v/step-01-validate.md +75 -75
  585. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/validation-report-20260127-095021.md +72 -72
  586. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/validation-report-20260127-102401.md +114 -114
  587. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/workflow-plan.md +20 -20
  588. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/workflow.yaml +53 -53
  589. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/SKILL.md +85 -85
  590. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/azure-pipelines-template.yaml +155 -155
  591. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/checklist.md +289 -289
  592. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/customize.toml +40 -40
  593. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/github-actions-template.yaml +328 -328
  594. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/gitlab-ci-template.yaml +158 -158
  595. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/harness-pipeline-template.yaml +160 -160
  596. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/instructions.md +44 -44
  597. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/jenkins-pipeline-template.groovy +129 -129
  598. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/adr-quality-readiness-checklist.md +377 -377
  599. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/api-request.md +563 -563
  600. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/api-testing-patterns.md +915 -915
  601. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/auth-session.md +548 -548
  602. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/burn-in.md +273 -273
  603. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/ci-burn-in.md +717 -717
  604. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/component-tdd.md +486 -486
  605. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/contract-testing.md +1066 -1066
  606. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/data-factories.md +500 -500
  607. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/email-auth.md +721 -721
  608. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/error-handling.md +725 -725
  609. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/feature-flags.md +750 -750
  610. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/file-utils.md +456 -456
  611. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/fixture-architecture.md +401 -401
  612. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/fixtures-composition.md +382 -382
  613. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/intercept-network-call.md +426 -426
  614. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/log.md +426 -426
  615. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/network-error-monitor.md +401 -401
  616. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/network-first.md +486 -486
  617. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/network-recorder.md +527 -527
  618. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/nfr-criteria.md +670 -670
  619. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/overview.md +286 -286
  620. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pact-broker-webhooks.md +237 -237
  621. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pact-consumer-di.md +310 -310
  622. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pact-consumer-framework-setup.md +757 -757
  623. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pact-mcp.md +205 -205
  624. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -380
  625. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pactjs-utils-overview.md +216 -216
  626. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pactjs-utils-provider-verifier.md +397 -397
  627. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/pactjs-utils-request-filter.md +224 -224
  628. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/playwright-cli.md +280 -280
  629. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/playwright-config.md +734 -734
  630. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/probability-impact.md +601 -601
  631. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/recurse.md +421 -421
  632. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/risk-governance.md +615 -615
  633. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/selective-testing.md +732 -732
  634. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/selector-resilience.md +527 -527
  635. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/test-healing-patterns.md +644 -644
  636. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/test-levels-framework.md +473 -473
  637. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/test-priorities-matrix.md +373 -373
  638. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/test-quality.md +664 -664
  639. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/timing-debugging.md +372 -372
  640. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/visual-debugging.md +527 -527
  641. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-module-setup.md +122 -122
  642. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-providers.md +155 -155
  643. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-risk-guidance.md +114 -114
  644. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-template-matchers.md +160 -160
  645. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-testing-fundamentals.md +42 -42
  646. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-timeout-error.md +130 -130
  647. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/knowledge/webhook-waiting-querying.md +167 -167
  648. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/tea-index.csv +51 -51
  649. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-01-preflight.md +158 -158
  650. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-01b-resume.md +110 -110
  651. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-02-generate-pipeline.md +293 -293
  652. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-03-configure-quality-gates.md +145 -145
  653. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-04-validate-and-summary.md +100 -100
  654. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-e/step-01-assess.md +65 -65
  655. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-e/step-02-apply-edit.md +68 -68
  656. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-v/step-01-validate.md +89 -89
  657. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/validation-report-20260127-095021.md +72 -72
  658. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/validation-report-20260127-102401.md +114 -114
  659. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/workflow-plan.md +20 -20
  660. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/workflow.yaml +48 -48
  661. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/SKILL.md +85 -85
  662. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/checklist.md +345 -345
  663. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/customize.toml +40 -40
  664. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/instructions.md +44 -44
  665. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/adr-quality-readiness-checklist.md +377 -377
  666. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/api-request.md +563 -563
  667. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/api-testing-patterns.md +915 -915
  668. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/auth-session.md +548 -548
  669. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/burn-in.md +273 -273
  670. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/ci-burn-in.md +717 -717
  671. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/component-tdd.md +486 -486
  672. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/contract-testing.md +1066 -1066
  673. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/data-factories.md +500 -500
  674. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/email-auth.md +721 -721
  675. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/error-handling.md +725 -725
  676. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/feature-flags.md +750 -750
  677. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/file-utils.md +456 -456
  678. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/fixture-architecture.md +401 -401
  679. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/fixtures-composition.md +382 -382
  680. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/intercept-network-call.md +426 -426
  681. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/log.md +426 -426
  682. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/network-error-monitor.md +401 -401
  683. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/network-first.md +486 -486
  684. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/network-recorder.md +527 -527
  685. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/nfr-criteria.md +670 -670
  686. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/overview.md +286 -286
  687. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pact-broker-webhooks.md +237 -237
  688. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pact-consumer-di.md +310 -310
  689. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pact-consumer-framework-setup.md +757 -757
  690. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pact-mcp.md +205 -205
  691. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -380
  692. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pactjs-utils-overview.md +216 -216
  693. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pactjs-utils-provider-verifier.md +397 -397
  694. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/pactjs-utils-request-filter.md +224 -224
  695. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/playwright-cli.md +280 -280
  696. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/playwright-config.md +734 -734
  697. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/probability-impact.md +601 -601
  698. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/recurse.md +421 -421
  699. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/risk-governance.md +615 -615
  700. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/selective-testing.md +732 -732
  701. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/selector-resilience.md +527 -527
  702. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/test-healing-patterns.md +644 -644
  703. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/test-levels-framework.md +473 -473
  704. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/test-priorities-matrix.md +373 -373
  705. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/test-quality.md +664 -664
  706. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/timing-debugging.md +372 -372
  707. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/visual-debugging.md +527 -527
  708. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-module-setup.md +122 -122
  709. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-providers.md +155 -155
  710. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-risk-guidance.md +114 -114
  711. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-template-matchers.md +160 -160
  712. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-testing-fundamentals.md +42 -42
  713. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-timeout-error.md +130 -130
  714. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/knowledge/webhook-waiting-querying.md +167 -167
  715. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/tea-index.csv +51 -51
  716. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-01-preflight.md +132 -132
  717. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-01b-resume.md +116 -116
  718. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-02-select-framework.md +117 -117
  719. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-03-scaffold-framework.md +328 -328
  720. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-04-docs-and-scripts.md +105 -105
  721. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-05-validate-and-summary.md +101 -101
  722. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-e/step-01-assess.md +65 -65
  723. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-e/step-02-apply-edit.md +68 -68
  724. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-v/step-01-validate.md +75 -75
  725. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/validation-report-20260127-095021.md +73 -73
  726. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/validation-report-20260127-102401.md +116 -116
  727. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/workflow-plan.md +22 -22
  728. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/workflow.yaml +48 -48
  729. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/SKILL.md +85 -85
  730. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/checklist.md +407 -407
  731. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/customize.toml +40 -40
  732. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/instructions.md +43 -43
  733. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/nfr-report-template.md +470 -470
  734. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/adr-quality-readiness-checklist.md +377 -377
  735. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/api-request.md +563 -563
  736. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/api-testing-patterns.md +915 -915
  737. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/auth-session.md +548 -548
  738. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/burn-in.md +273 -273
  739. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/ci-burn-in.md +717 -717
  740. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/component-tdd.md +486 -486
  741. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/contract-testing.md +1066 -1066
  742. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/data-factories.md +500 -500
  743. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/email-auth.md +721 -721
  744. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/error-handling.md +725 -725
  745. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/feature-flags.md +750 -750
  746. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/file-utils.md +456 -456
  747. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/fixture-architecture.md +401 -401
  748. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/fixtures-composition.md +382 -382
  749. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/intercept-network-call.md +426 -426
  750. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/log.md +426 -426
  751. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/network-error-monitor.md +401 -401
  752. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/network-first.md +486 -486
  753. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/network-recorder.md +527 -527
  754. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/nfr-criteria.md +670 -670
  755. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/overview.md +286 -286
  756. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pact-broker-webhooks.md +237 -237
  757. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pact-consumer-di.md +310 -310
  758. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pact-consumer-framework-setup.md +757 -757
  759. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pact-mcp.md +205 -205
  760. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -380
  761. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pactjs-utils-overview.md +216 -216
  762. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pactjs-utils-provider-verifier.md +397 -397
  763. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/pactjs-utils-request-filter.md +224 -224
  764. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/playwright-cli.md +280 -280
  765. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/playwright-config.md +734 -734
  766. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/probability-impact.md +601 -601
  767. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/recurse.md +421 -421
  768. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/risk-governance.md +615 -615
  769. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/selective-testing.md +732 -732
  770. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/selector-resilience.md +527 -527
  771. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/test-healing-patterns.md +644 -644
  772. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/test-levels-framework.md +473 -473
  773. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/test-priorities-matrix.md +373 -373
  774. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/test-quality.md +664 -664
  775. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/timing-debugging.md +372 -372
  776. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/visual-debugging.md +527 -527
  777. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-module-setup.md +122 -122
  778. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-providers.md +155 -155
  779. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-risk-guidance.md +114 -114
  780. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-template-matchers.md +160 -160
  781. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-testing-fundamentals.md +42 -42
  782. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-timeout-error.md +130 -130
  783. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/knowledge/webhook-waiting-querying.md +167 -167
  784. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/tea-index.csv +51 -51
  785. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-01-load-context.md +138 -138
  786. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-01b-resume.md +106 -106
  787. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-02-define-thresholds.md +107 -107
  788. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-03-gather-evidence.md +108 -108
  789. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04-evaluate-and-score.md +254 -254
  790. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04a-subagent-security.md +138 -138
  791. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04b-subagent-performance.md +84 -84
  792. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04c-subagent-reliability.md +85 -85
  793. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04d-subagent-scalability.md +88 -88
  794. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04e-aggregate-nfr.md +264 -264
  795. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-05-generate-report.md +116 -116
  796. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-e/step-01-assess.md +65 -65
  797. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-e/step-02-apply-edit.md +68 -68
  798. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-v/step-01-validate.md +75 -75
  799. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/validation-report-20260127-095021.md +73 -73
  800. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/validation-report-20260127-102401.md +116 -116
  801. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/workflow-plan.md +19 -19
  802. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/workflow.yaml +48 -48
  803. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/SKILL.md +87 -87
  804. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/checklist.md +464 -464
  805. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/customize.toml +40 -40
  806. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/instructions.md +104 -104
  807. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/adr-quality-readiness-checklist.md +377 -377
  808. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/api-request.md +563 -563
  809. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/api-testing-patterns.md +915 -915
  810. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/auth-session.md +548 -548
  811. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/burn-in.md +273 -273
  812. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/ci-burn-in.md +717 -717
  813. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/component-tdd.md +486 -486
  814. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/contract-testing.md +1066 -1066
  815. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/data-factories.md +500 -500
  816. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/email-auth.md +721 -721
  817. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/error-handling.md +725 -725
  818. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/feature-flags.md +750 -750
  819. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/file-utils.md +456 -456
  820. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/fixture-architecture.md +401 -401
  821. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/fixtures-composition.md +382 -382
  822. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/intercept-network-call.md +426 -426
  823. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/log.md +426 -426
  824. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/network-error-monitor.md +401 -401
  825. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/network-first.md +486 -486
  826. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/network-recorder.md +527 -527
  827. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/nfr-criteria.md +670 -670
  828. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/overview.md +286 -286
  829. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pact-broker-webhooks.md +237 -237
  830. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pact-consumer-di.md +310 -310
  831. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pact-consumer-framework-setup.md +757 -757
  832. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pact-mcp.md +205 -205
  833. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -380
  834. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pactjs-utils-overview.md +216 -216
  835. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pactjs-utils-provider-verifier.md +397 -397
  836. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/pactjs-utils-request-filter.md +224 -224
  837. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/playwright-cli.md +280 -280
  838. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/playwright-config.md +734 -734
  839. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/probability-impact.md +601 -601
  840. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/recurse.md +421 -421
  841. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/risk-governance.md +615 -615
  842. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/selective-testing.md +732 -732
  843. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/selector-resilience.md +527 -527
  844. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/test-healing-patterns.md +644 -644
  845. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/test-levels-framework.md +473 -473
  846. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/test-priorities-matrix.md +373 -373
  847. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/test-quality.md +664 -664
  848. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/timing-debugging.md +372 -372
  849. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/visual-debugging.md +527 -527
  850. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-module-setup.md +122 -122
  851. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-providers.md +155 -155
  852. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-risk-guidance.md +114 -114
  853. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-template-matchers.md +160 -160
  854. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-testing-fundamentals.md +42 -42
  855. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-timeout-error.md +130 -130
  856. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/knowledge/webhook-waiting-querying.md +167 -167
  857. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/tea-index.csv +51 -51
  858. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-01-detect-mode.md +140 -140
  859. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-01b-resume.md +116 -116
  860. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-02-load-context.md +248 -248
  861. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-03-risk-and-testability.md +116 -116
  862. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-04-coverage-plan.md +129 -129
  863. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-05-generate-output.md +236 -236
  864. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-e/step-01-assess.md +65 -65
  865. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-e/step-02-apply-edit.md +68 -68
  866. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-v/step-01-validate.md +75 -75
  867. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-architecture-template.md +233 -233
  868. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-handoff-template.md +70 -70
  869. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-qa-template.md +399 -399
  870. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-template.md +347 -347
  871. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/validation-report-20260127-095021.md +73 -73
  872. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/validation-report-20260127-102401.md +116 -116
  873. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/workflow-plan.md +22 -22
  874. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/workflow.yaml +77 -77
  875. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/SKILL.md +85 -85
  876. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/checklist.md +475 -475
  877. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/customize.toml +40 -40
  878. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/instructions.md +45 -45
  879. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/adr-quality-readiness-checklist.md +377 -377
  880. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/api-request.md +563 -563
  881. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/api-testing-patterns.md +915 -915
  882. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/auth-session.md +548 -548
  883. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/burn-in.md +273 -273
  884. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/ci-burn-in.md +717 -717
  885. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/component-tdd.md +486 -486
  886. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/contract-testing.md +1066 -1066
  887. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/data-factories.md +500 -500
  888. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/email-auth.md +721 -721
  889. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/error-handling.md +725 -725
  890. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/feature-flags.md +750 -750
  891. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/file-utils.md +456 -456
  892. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/fixture-architecture.md +401 -401
  893. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/fixtures-composition.md +382 -382
  894. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/intercept-network-call.md +426 -426
  895. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/log.md +426 -426
  896. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/network-error-monitor.md +401 -401
  897. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/network-first.md +486 -486
  898. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/network-recorder.md +527 -527
  899. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/nfr-criteria.md +670 -670
  900. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/overview.md +286 -286
  901. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pact-broker-webhooks.md +237 -237
  902. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pact-consumer-di.md +310 -310
  903. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pact-consumer-framework-setup.md +757 -757
  904. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pact-mcp.md +205 -205
  905. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -380
  906. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pactjs-utils-overview.md +216 -216
  907. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pactjs-utils-provider-verifier.md +397 -397
  908. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/pactjs-utils-request-filter.md +224 -224
  909. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/playwright-cli.md +280 -280
  910. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/playwright-config.md +734 -734
  911. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/probability-impact.md +601 -601
  912. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/recurse.md +421 -421
  913. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/risk-governance.md +615 -615
  914. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/selective-testing.md +732 -732
  915. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/selector-resilience.md +527 -527
  916. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/test-healing-patterns.md +644 -644
  917. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/test-levels-framework.md +473 -473
  918. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/test-priorities-matrix.md +373 -373
  919. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/test-quality.md +664 -664
  920. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/timing-debugging.md +372 -372
  921. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/visual-debugging.md +527 -527
  922. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-module-setup.md +122 -122
  923. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-providers.md +155 -155
  924. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-risk-guidance.md +114 -114
  925. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-template-matchers.md +160 -160
  926. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-testing-fundamentals.md +42 -42
  927. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-timeout-error.md +130 -130
  928. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/knowledge/webhook-waiting-querying.md +167 -167
  929. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/tea-index.csv +51 -51
  930. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-01-load-context.md +197 -197
  931. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-01b-resume.md +104 -104
  932. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-02-discover-tests.md +120 -120
  933. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-03-quality-evaluation.md +274 -274
  934. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-03a-subagent-determinism.md +257 -257
  935. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-03b-subagent-isolation.md +125 -125
  936. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-03c-subagent-maintainability.md +102 -102
  937. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-03e-subagent-performance.md +117 -117
  938. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-03f-aggregate-scores.md +277 -277
  939. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-04-generate-report.md +119 -119
  940. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-e/step-01-assess.md +65 -65
  941. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-e/step-02-apply-edit.md +68 -68
  942. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-v/step-01-validate.md +75 -75
  943. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/test-review-template.md +387 -387
  944. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/validation-report-20260127-095021.md +72 -72
  945. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/validation-report-20260127-102401.md +114 -114
  946. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/workflow-plan.md +18 -18
  947. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/workflow.yaml +48 -48
  948. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/SKILL.md +87 -87
  949. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/checklist.md +671 -671
  950. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/customize.toml +40 -40
  951. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/instructions.md +45 -45
  952. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/adr-quality-readiness-checklist.md +377 -377
  953. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/api-request.md +563 -563
  954. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/api-testing-patterns.md +915 -915
  955. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/auth-session.md +548 -548
  956. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/burn-in.md +273 -273
  957. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/ci-burn-in.md +717 -717
  958. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/component-tdd.md +486 -486
  959. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/contract-testing.md +1066 -1066
  960. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/data-factories.md +500 -500
  961. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/email-auth.md +721 -721
  962. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/error-handling.md +725 -725
  963. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/feature-flags.md +750 -750
  964. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/file-utils.md +456 -456
  965. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/fixture-architecture.md +401 -401
  966. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/fixtures-composition.md +382 -382
  967. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/intercept-network-call.md +426 -426
  968. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/log.md +426 -426
  969. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/network-error-monitor.md +401 -401
  970. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/network-first.md +486 -486
  971. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/network-recorder.md +527 -527
  972. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/nfr-criteria.md +670 -670
  973. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/overview.md +286 -286
  974. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pact-broker-webhooks.md +237 -237
  975. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pact-consumer-di.md +310 -310
  976. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pact-consumer-framework-setup.md +757 -757
  977. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pact-mcp.md +205 -205
  978. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pactjs-utils-consumer-helpers.md +380 -380
  979. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pactjs-utils-overview.md +216 -216
  980. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pactjs-utils-provider-verifier.md +397 -397
  981. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/pactjs-utils-request-filter.md +224 -224
  982. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/playwright-cli.md +280 -280
  983. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/playwright-config.md +734 -734
  984. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/probability-impact.md +601 -601
  985. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/recurse.md +421 -421
  986. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/risk-governance.md +615 -615
  987. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/selective-testing.md +732 -732
  988. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/selector-resilience.md +527 -527
  989. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/test-healing-patterns.md +644 -644
  990. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/test-levels-framework.md +473 -473
  991. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/test-priorities-matrix.md +373 -373
  992. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/test-quality.md +664 -664
  993. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/timing-debugging.md +372 -372
  994. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/visual-debugging.md +527 -527
  995. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-module-setup.md +122 -122
  996. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-providers.md +155 -155
  997. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-risk-guidance.md +114 -114
  998. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-template-matchers.md +160 -160
  999. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-testing-fundamentals.md +42 -42
  1000. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-timeout-error.md +130 -130
  1001. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/knowledge/webhook-waiting-querying.md +167 -167
  1002. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/tea-index.csv +51 -51
  1003. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-01-load-context.md +166 -166
  1004. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-01b-resume.md +102 -102
  1005. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-02-discover-tests.md +132 -132
  1006. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-03-map-criteria.md +101 -101
  1007. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-04-analyze-gaps.md +628 -628
  1008. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-05-gate-decision.md +681 -681
  1009. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-e/step-01-assess.md +65 -65
  1010. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-e/step-02-apply-edit.md +68 -68
  1011. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-v/step-01-validate.md +75 -75
  1012. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/trace-template.md +716 -716
  1013. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/validation-report-20260127-095021.md +73 -73
  1014. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/validation-report-20260127-102401.md +116 -116
  1015. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/workflow-plan.md +24 -24
  1016. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/workflow.yaml +80 -80
  1017. package/lib/bmad-cache/tea/test/README.md +23 -23
  1018. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +27 -27
  1019. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +30 -30
  1020. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +22 -22
  1021. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +20 -20
  1022. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +25 -25
  1023. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +24 -24
  1024. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +25 -25
  1025. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -25
  1026. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -25
  1027. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +31 -31
  1028. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +25 -25
  1029. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +25 -25
  1030. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +25 -25
  1031. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +25 -25
  1032. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -26
  1033. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -24
  1034. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +27 -27
  1035. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -23
  1036. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +24 -24
  1037. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +27 -27
  1038. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +27 -27
  1039. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +24 -24
  1040. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +29 -29
  1041. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +31 -31
  1042. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +28 -28
  1043. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +28 -28
  1044. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -5
  1045. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +28 -28
  1046. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -11
  1047. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -19
  1048. package/lib/bmad-cache/tea/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -18
  1049. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +24 -24
  1050. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +22 -22
  1051. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +27 -27
  1052. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +31 -31
  1053. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +22 -22
  1054. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +37 -37
  1055. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +24 -24
  1056. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -31
  1057. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +34 -34
  1058. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -24
  1059. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +24 -24
  1060. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +24 -24
  1061. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +24 -24
  1062. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -23
  1063. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -24
  1064. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +24 -24
  1065. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +24 -24
  1066. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +22 -22
  1067. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +28 -28
  1068. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +30 -30
  1069. package/lib/bmad-cache/tea/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +24 -24
  1070. package/lib/bmad-cache/tea/test/schema/agent.js +491 -491
  1071. package/lib/bmad-cache/tea/test/test-agent-schema.js +387 -387
  1072. package/lib/bmad-cache/tea/test/test-installation-components.js +422 -422
  1073. package/lib/bmad-cache/tea/test/test-knowledge-base.js +213 -213
  1074. package/lib/bmad-cache/tea/test/test-release-metadata.js +71 -71
  1075. package/lib/bmad-cache/tea/test/unit-test-schema.js +133 -133
  1076. package/lib/bmad-cache/tea/test/validate-agent-schema.js +110 -110
  1077. package/lib/bmad-cache/tea/tools/build-docs.js +575 -575
  1078. package/lib/bmad-cache/tea/tools/fix-doc-links.js +288 -288
  1079. package/lib/bmad-cache/tea/tools/schema/agent.js +491 -491
  1080. package/lib/bmad-cache/tea/tools/validate-agent-schema.js +284 -284
  1081. package/lib/bmad-cache/tea/tools/validate-doc-links.js +371 -371
  1082. package/lib/bmad-cache/tea/tools/validate-tea-workflow-descriptions.js +122 -122
  1083. package/lib/bmad-cache/tea/tools/verify-paths.js +100 -100
  1084. package/lib/bmad-cache/tea/website/README.md +137 -137
  1085. package/lib/bmad-cache/tea/website/astro.config.mjs +183 -183
  1086. package/lib/bmad-cache/tea/website/package-lock.json +6856 -6856
  1087. package/lib/bmad-cache/tea/website/package.json +24 -24
  1088. package/lib/bmad-cache/tea/website/public/img/tea-logo.svg +7 -7
  1089. package/lib/bmad-cache/tea/website/public/robots.txt +37 -37
  1090. package/lib/bmad-cache/tea/website/src/components/Banner.astro +74 -74
  1091. package/lib/bmad-cache/tea/website/src/components/Header.astro +121 -121
  1092. package/lib/bmad-cache/tea/website/src/components/MobileMenuFooter.astro +53 -53
  1093. package/lib/bmad-cache/tea/website/src/content/config.ts +6 -6
  1094. package/lib/bmad-cache/tea/website/src/lib/site-url.js +25 -25
  1095. package/lib/bmad-cache/tea/website/src/pages/404.astro +11 -11
  1096. package/lib/bmad-cache/tea/website/src/rehype-base-paths.js +89 -89
  1097. package/lib/bmad-cache/tea/website/src/rehype-markdown-links.js +117 -117
  1098. package/lib/bmad-cache/tea/website/src/styles/custom.css +518 -518
  1099. package/lib/bmad-cache/tea/website/tsconfig.json +9 -9
  1100. package/lib/bmad-cache/wds/.claude-plugin/marketplace.json +35 -35
  1101. package/lib/bmad-cache/wds/.markdownlint-cli2.yaml +38 -38
  1102. package/lib/bmad-cache/wds/.prettierignore +9 -9
  1103. package/lib/bmad-cache/wds/LICENSE +27 -27
  1104. package/lib/bmad-cache/wds/README.md +139 -139
  1105. package/lib/bmad-cache/wds/_git_preserved/HEAD +1 -1
  1106. package/lib/bmad-cache/wds/_git_preserved/config +13 -13
  1107. package/lib/bmad-cache/wds/_git_preserved/description +1 -1
  1108. package/lib/bmad-cache/wds/_git_preserved/hooks/applypatch-msg.sample +15 -15
  1109. package/lib/bmad-cache/wds/_git_preserved/hooks/commit-msg.sample +24 -24
  1110. package/lib/bmad-cache/wds/_git_preserved/hooks/fsmonitor-watchman.sample +174 -174
  1111. package/lib/bmad-cache/wds/_git_preserved/hooks/post-update.sample +8 -8
  1112. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-applypatch.sample +14 -14
  1113. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-commit.sample +49 -49
  1114. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-merge-commit.sample +13 -13
  1115. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-push.sample +53 -53
  1116. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-rebase.sample +169 -169
  1117. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-receive.sample +24 -24
  1118. package/lib/bmad-cache/wds/_git_preserved/hooks/prepare-commit-msg.sample +42 -42
  1119. package/lib/bmad-cache/wds/_git_preserved/hooks/push-to-checkout.sample +78 -78
  1120. package/lib/bmad-cache/wds/_git_preserved/hooks/sendemail-validate.sample +77 -77
  1121. package/lib/bmad-cache/wds/_git_preserved/hooks/update.sample +128 -128
  1122. package/lib/bmad-cache/wds/_git_preserved/info/exclude +6 -6
  1123. package/lib/bmad-cache/wds/_git_preserved/packed-refs +2 -2
  1124. package/lib/bmad-cache/wds/_git_preserved/refs/heads/main +1 -1
  1125. package/lib/bmad-cache/wds/_git_preserved/refs/remotes/origin/HEAD +1 -1
  1126. package/lib/bmad-cache/wds/_git_preserved/shallow +1 -1
  1127. package/lib/bmad-cache/wds/eslint.config.mjs +152 -152
  1128. package/lib/bmad-cache/wds/package.json +82 -82
  1129. package/lib/bmad-cache/wds/prettier.config.mjs +32 -32
  1130. package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/bmad-skill-manifest.yaml +12 -12
  1131. package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/bmad-skill-manifest.yaml +12 -12
  1132. package/lib/bmad-cache/wds/src/module-help.csv +19 -19
  1133. package/lib/bmad-cache/wds/src/module.yaml +145 -145
  1134. package/lib/bmad-cache/wds/src/workflows/wds-0-alignment-signoff/bmad-skill-manifest.yaml +1 -1
  1135. package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/bmad-skill-manifest.yaml +1 -1
  1136. package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/resources/wds-1-project-brief/templates/platform-requirements.template.yaml +69 -69
  1137. package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/resources/wds-7-design-system/templates/catalog.template.html +363 -363
  1138. package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/bmad-skill-manifest.yaml +1 -1
  1139. package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/templates/platform-requirements.template.yaml +69 -69
  1140. package/lib/bmad-cache/wds/src/workflows/wds-2-trigger-mapping/bmad-skill-manifest.yaml +1 -1
  1141. package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/bmad-skill-manifest.yaml +1 -1
  1142. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/bmad-skill-manifest.yaml +1 -1
  1143. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/design-delivery.template.yaml +104 -104
  1144. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/test-scenario.template.yaml +192 -192
  1145. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/bmad-skill-manifest.yaml +1 -1
  1146. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.css +164 -164
  1147. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.html +18 -18
  1148. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.js +430 -430
  1149. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/demo-data-template.json +63 -63
  1150. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/page-template.html +465 -465
  1151. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/work-file-template.yaml +264 -264
  1152. package/lib/bmad-cache/wds/src/workflows/wds-6-asset-generation/bmad-skill-manifest.yaml +1 -1
  1153. package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/bmad-skill-manifest.yaml +1 -1
  1154. package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/templates/catalog.template.html +363 -363
  1155. package/lib/bmad-cache/wds/src/workflows/wds-8-product-evolution/bmad-skill-manifest.yaml +1 -1
  1156. package/lib/bmad-customize/bmm-analyst.customize.yaml +8 -8
  1157. package/lib/bmad-customize/bmm-architect.customize.yaml +8 -8
  1158. package/lib/bmad-customize/bmm-bmad-master.customize.yaml +6 -6
  1159. package/lib/bmad-customize/bmm-dev.customize.yaml +8 -8
  1160. package/lib/bmad-customize/bmm-pm.customize.yaml +8 -8
  1161. package/lib/bmad-customize/bmm-qa.customize.yaml +26 -26
  1162. package/lib/bmad-customize/bmm-sm.customize.yaml +8 -8
  1163. package/lib/bmad-customize/bmm-tech-writer.customize.yaml +8 -8
  1164. package/lib/bmad-customize/bmm-ux-designer.customize.yaml +8 -8
  1165. package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +1 -1
  1166. package/lib/bmad.js +191 -1
  1167. package/lib/installer.js +2024 -2024
  1168. package/lib/merge/roomodes.js +125 -125
  1169. package/lib/methodology/version.json +7 -7
  1170. package/lib/mil498-templates/OCD.md +169 -169
  1171. package/lib/mil498-templates/README.md +4 -4
  1172. package/lib/mil498-templates/SDD.md +163 -163
  1173. package/lib/mil498-templates/SDP.md +307 -307
  1174. package/lib/mil498-templates/SRS.md +219 -219
  1175. package/lib/mil498-templates/SSDD.md +154 -154
  1176. package/lib/mil498-templates/SSS.md +225 -225
  1177. package/lib/mil498-templates/STD.md +188 -188
  1178. package/lib/profile.js +130 -130
  1179. package/lib/reconfigure.js +334 -334
  1180. package/lib/skill-authoring.js +732 -732
  1181. package/lib/templates/agents-md.template.md +67 -67
  1182. package/lib/templates/clinerules.template.md +13 -13
  1183. package/lib/templates/instruction-block-onprem.template.md +86 -86
  1184. package/lib/templates/instruction-block-universal.template.md +29 -29
  1185. package/lib/templates/project-context.template.md +47 -47
  1186. package/lib/templates/roomodes.template.yaml +96 -96
  1187. package/lib/uninstall.js +314 -314
  1188. package/lib/warning-filter.js +245 -245
  1189. package/mil498/OCD.md +169 -169
  1190. package/mil498/README.md +4 -4
  1191. package/mil498/SDP.md +307 -307
  1192. package/mil498/SRS.md +219 -219
  1193. package/mil498/SSDD.md +154 -154
  1194. package/mil498/SSS.md +225 -225
  1195. package/mil498/STD.md +188 -188
  1196. package/package.json +57 -57
  1197. package/scripts/build-bmad-cache.js +494 -494
  1198. package/skills/README.md +473 -473
  1199. package/skills/add-sprint/SKILL.md +204 -204
  1200. package/skills/add-sprint/skill.json +7 -7
  1201. package/skills/add-to-sprint/SKILL.md +270 -270
  1202. package/skills/add-to-sprint/skill.json +7 -7
  1203. package/skills/ai-audit-trail/SKILL.md +19 -19
  1204. package/skills/ai-audit-trail/skill.json +20 -20
  1205. package/skills/auto-bug-detection/SKILL.md +165 -165
  1206. package/skills/auto-bug-detection/skill.json +8 -8
  1207. package/skills/bmad-sprint-planning/SKILL.md +362 -362
  1208. package/skills/bmad-sprint-planning/skill.json +7 -7
  1209. package/skills/bmad-sprint-status/SKILL.md +312 -312
  1210. package/skills/bmad-sprint-status/skill.json +7 -7
  1211. package/skills/cleanup-done/SKILL.md +242 -242
  1212. package/skills/cleanup-done/skill.json +7 -7
  1213. package/skills/close-sprint/SKILL.md +409 -409
  1214. package/skills/close-sprint/skill.json +7 -7
  1215. package/skills/code-review/SKILL.md +79 -79
  1216. package/skills/code-review/claude-code.md +64 -64
  1217. package/skills/code-review/cline.md +55 -55
  1218. package/skills/code-review/generic.md +39 -39
  1219. package/skills/code-review/skill.json +7 -7
  1220. package/skills/commit-message/SKILL.md +75 -75
  1221. package/skills/commit-message/generic.md +75 -75
  1222. package/skills/commit-message/skill.json +7 -7
  1223. package/skills/cpp-best-practices/SKILL.md +230 -230
  1224. package/skills/cpp-best-practices/examples/modern-idioms.md +189 -189
  1225. package/skills/cpp-best-practices/examples/naming-and-organization.md +102 -102
  1226. package/skills/cpp-best-practices/skill.json +25 -25
  1227. package/skills/create-hardened-docker-skill/README.md +85 -85
  1228. package/skills/create-hardened-docker-skill/SKILL.md +633 -633
  1229. package/skills/create-hardened-docker-skill/scripts/create-all.sh +489 -489
  1230. package/skills/create-hardened-docker-skill/skill.json +7 -7
  1231. package/skills/csharp-best-practices/SKILL.md +274 -274
  1232. package/skills/csharp-best-practices/skill.json +23 -23
  1233. package/skills/docker-hardening-verification/scripts/verify-hardening.sh +39 -39
  1234. package/skills/docker-image-signing/scripts/sign-image.sh +33 -33
  1235. package/skills/document-revision-history/SKILL.md +100 -100
  1236. package/skills/document-revision-history/skill.json +18 -18
  1237. package/skills/generate-backlog/SKILL.md +219 -219
  1238. package/skills/generate-backlog/skill.json +7 -7
  1239. package/skills/git-workflow-skill/README.md +135 -135
  1240. package/skills/git-workflow-skill/SKILL.md +190 -190
  1241. package/skills/git-workflow-skill/hooks/commit-msg +61 -61
  1242. package/skills/git-workflow-skill/hooks/pre-commit +38 -38
  1243. package/skills/git-workflow-skill/hooks/prepare-commit-msg +56 -56
  1244. package/skills/git-workflow-skill/scripts/finish-feature.sh +192 -192
  1245. package/skills/git-workflow-skill/scripts/install-hooks.sh +55 -55
  1246. package/skills/git-workflow-skill/scripts/start-feature.sh +110 -110
  1247. package/skills/git-workflow-skill/scripts/validate-workflow.sh +229 -229
  1248. package/skills/git-workflow-skill/skill.json +21 -21
  1249. package/skills/js-ts-security-skill/scripts/verify-security.sh +136 -136
  1250. package/skills/js-ts-security-skill/skill.json +17 -17
  1251. package/skills/modify-sprint/SKILL.md +341 -341
  1252. package/skills/modify-sprint/skill.json +7 -7
  1253. package/skills/open-presentation/SKILL.md +31 -31
  1254. package/skills/open-presentation/skill.json +11 -11
  1255. package/skills/prioritize-backlog/SKILL.md +242 -242
  1256. package/skills/prioritize-backlog/skill.json +7 -7
  1257. package/skills/python-best-practices/SKILL.md +381 -381
  1258. package/skills/python-best-practices/skill.json +26 -26
  1259. package/skills/remove-from-sprint/SKILL.md +213 -213
  1260. package/skills/remove-from-sprint/skill.json +7 -7
  1261. package/skills/self-signed-cert/scripts/generate-cert.sh +43 -43
  1262. package/skills/skill-creator/SKILL.md +211 -211
  1263. package/skills/skill-creator/claude-code.md +64 -64
  1264. package/skills/skill-creator/generic.md +192 -192
  1265. package/skills/skill-creator/references/output-patterns.md +82 -82
  1266. package/skills/skill-creator/references/workflows.md +28 -28
  1267. package/skills/skill-creator/scripts/init_skill.py +208 -208
  1268. package/skills/skill-creator/scripts/package_skill.py +99 -99
  1269. package/skills/skill-creator/scripts/quick_validate.py +113 -113
  1270. package/skills/skill-creator/skill.json +8 -8
  1271. package/skills/sprint-status-view/SKILL.md +212 -212
  1272. package/skills/sprint-status-view/skill.json +7 -7
  1273. package/skills/story-status-lookup/SKILL.md +106 -106
  1274. package/skills/story-status-lookup/skill.json +8 -8
  1275. package/skills/test-generator/SKILL.md +74 -74
  1276. package/skills/test-generator/claude-code.md +103 -103
  1277. package/skills/test-generator/cline.md +69 -69
  1278. package/skills/test-generator/generic.md +61 -61
  1279. package/skills/test-generator/skill.json +18 -18
  1280. package/skills/vercel-react-best-practices/SKILL.md +105 -105
  1281. package/skills/vercel-react-best-practices/claude-code.md +80 -80
  1282. package/skills/vercel-react-best-practices/generic.md +105 -105
  1283. package/skills/vercel-react-best-practices/skill.json +19 -19
  1284. package/skills/verify-hardened-docker-skill/README.md +85 -85
  1285. package/skills/verify-hardened-docker-skill/SKILL.md +438 -438
  1286. package/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +439 -439
  1287. package/skills/verify-hardened-docker-skill/skill.json +7 -7
  1288. package/lib/.bmad-extension-plugin.build-1264-1777348888201/.claude-plugin/marketplace.json +0 -109
  1289. package/lib/.bmad-extension-plugin.build-1264-1777348888201/skills/module-help.csv +0 -62
  1290. package/lib/.bmad-extension-plugin.build-1264-1777348888201/skills/module.yaml +0 -20
  1291. package/lib/.bmad-extension-plugin.build-24696-1777348768444/.claude-plugin/marketplace.json +0 -109
  1292. package/lib/.bmad-extension-plugin.build-24696-1777348768444/skills/module-help.csv +0 -62
  1293. package/lib/.bmad-extension-plugin.build-24696-1777348768444/skills/module.yaml +0 -20
  1294. package/lib/.bmad-extension-plugin.build-25428-1777348694953/.claude-plugin/marketplace.json +0 -109
  1295. package/lib/.bmad-extension-plugin.build-25428-1777348694953/skills/module-help.csv +0 -62
  1296. package/lib/.bmad-extension-plugin.build-25428-1777348694953/skills/module.yaml +0 -20
  1297. package/lib/bmad-cache/bmb/_git_preserved/logs/HEAD +0 -1
  1298. package/lib/bmad-cache/bmb/_git_preserved/logs/refs/heads/main +0 -1
  1299. package/lib/bmad-cache/bmb/_git_preserved/logs/refs/remotes/origin/HEAD +0 -1
  1300. package/lib/bmad-cache/cis/_git_preserved/logs/HEAD +0 -1
  1301. package/lib/bmad-cache/cis/_git_preserved/logs/refs/heads/main +0 -1
  1302. package/lib/bmad-cache/cis/_git_preserved/logs/refs/remotes/origin/HEAD +0 -1
  1303. package/lib/bmad-cache/gds/_git_preserved/logs/HEAD +0 -1
  1304. package/lib/bmad-cache/gds/_git_preserved/logs/refs/heads/main +0 -1
  1305. package/lib/bmad-cache/gds/_git_preserved/logs/refs/remotes/origin/HEAD +0 -1
  1306. package/lib/bmad-cache/tea/.github/workflows/publish.yaml +0 -168
  1307. package/lib/bmad-cache/tea/.vscode/settings.json +0 -47
  1308. package/lib/bmad-cache/wds/_git_preserved/logs/HEAD +0 -1
  1309. package/lib/bmad-cache/wds/_git_preserved/logs/refs/heads/main +0 -1
  1310. package/lib/bmad-cache/wds/_git_preserved/logs/refs/remotes/origin/HEAD +0 -1
@@ -1,965 +1,965 @@
1
- ---
2
- title: 'Test Quality Standards Explained'
3
- description: Understanding TEA's Definition of Done for deterministic, isolated, and maintainable tests
4
- ---
5
-
6
- # Test Quality Standards Explained
7
-
8
- Test quality standards define what makes a test "good" in TEA. These aren't suggestions - they're the Definition of Done that prevents tests from rotting in review.
9
-
10
- ## Overview
11
-
12
- **TEA's Quality Principles:**
13
-
14
- - **Deterministic** - Same result every run
15
- - **Isolated** - No dependencies on other tests
16
- - **Explicit** - Assertions visible in test body
17
- - **Focused** - Single responsibility, appropriate size
18
- - **Fast** - Execute in reasonable time
19
-
20
- **Why these matter:** Tests that violate these principles create maintenance burden, slow down development, and lose team trust.
21
-
22
- ## The Problem
23
-
24
- ### Tests That Rot in Review
25
-
26
- ```typescript
27
- // ❌ The anti-pattern: This test will rot
28
- test('user can do stuff', async ({ page }) => {
29
- await page.goto('/');
30
- await page.waitForTimeout(5000); // Non-deterministic
31
-
32
- if (await page.locator('.banner').isVisible()) {
33
- // Conditional
34
- await page.click('.dismiss');
35
- }
36
-
37
- try {
38
- // Try-catch for flow control
39
- await page.click('#load-more');
40
- } catch (e) {
41
- // Silently continue
42
- }
43
-
44
- // ... 300 more lines of test logic
45
- // ... no clear assertions
46
- });
47
- ```
48
-
49
- **What's wrong:**
50
-
51
- - **Hard wait** - Flaky, wastes time
52
- - **Conditional** - Non-deterministic behavior
53
- - **Try-catch** - Hides failures
54
- - **Too large** - Hard to maintain
55
- - **Vague name** - Unclear purpose
56
- - **No explicit assertions** - What's being tested?
57
-
58
- **Result:** PR review comments: "This test is flaky, please fix" → never merged → test deleted → coverage lost
59
-
60
- ### AI-Generated Tests Without Standards
61
-
62
- AI-generated tests without quality guardrails:
63
-
64
- ```typescript
65
- // AI generates 50 tests like this:
66
- test('test1', async ({ page }) => {
67
- await page.goto('/');
68
- await page.waitForTimeout(3000);
69
- // ... flaky, vague, redundant
70
- });
71
-
72
- test('test2', async ({ page }) => {
73
- await page.goto('/');
74
- await page.waitForTimeout(3000);
75
- // ... duplicates test1
76
- });
77
-
78
- // ... 48 more similar tests
79
- ```
80
-
81
- **Result:** 50 tests, 80% redundant, 90% flaky, 0% trusted by team - low-quality outputs that create maintenance burden.
82
-
83
- ## The Solution: TEA's Quality Standards
84
-
85
- ### 1. Determinism (No Flakiness)
86
-
87
- **Rule:** Test produces same result every run.
88
-
89
- **Requirements:**
90
-
91
- - ❌ No hard waits (`waitForTimeout`)
92
- - ❌ No conditionals for flow control (`if/else`)
93
- - ❌ No try-catch for flow control
94
- - ✅ Use network-first patterns (wait for responses)
95
- - ✅ Use explicit waits (waitForSelector, waitForResponse)
96
-
97
- **Bad Example:**
98
-
99
- ```typescript
100
- test('flaky test', async ({ page }) => {
101
- await page.click('button');
102
- await page.waitForTimeout(2000); // ❌ Might be too short
103
-
104
- if (await page.locator('.modal').isVisible()) {
105
- // ❌ Non-deterministic
106
- await page.click('.dismiss');
107
- }
108
-
109
- try {
110
- // ❌ Silently handles errors
111
- await expect(page.locator('.success')).toBeVisible();
112
- } catch (e) {
113
- // Test passes even if assertion fails!
114
- }
115
- });
116
- ```
117
-
118
- **Good Example (Vanilla Playwright):**
119
-
120
- ```typescript
121
- test('deterministic test', async ({ page }) => {
122
- const responsePromise = page.waitForResponse((resp) => resp.url().includes('/api/submit') && resp.ok());
123
-
124
- await page.click('button');
125
- await responsePromise; // ✅ Wait for actual response
126
-
127
- // Modal should ALWAYS show (make it deterministic)
128
- await expect(page.locator('.modal')).toBeVisible();
129
- await page.click('.dismiss');
130
-
131
- // Explicit assertion (fails if not visible)
132
- await expect(page.locator('.success')).toBeVisible();
133
- });
134
- ```
135
-
136
- **With Playwright Utils (Even Cleaner):**
137
-
138
- ```typescript
139
- import { test } from '@seontechnologies/playwright-utils/fixtures';
140
- import { expect } from '@playwright/test';
141
-
142
- test('deterministic test', async ({ page, interceptNetworkCall }) => {
143
- const submitCall = interceptNetworkCall({
144
- method: 'POST',
145
- url: '**/api/submit',
146
- });
147
-
148
- await page.click('button');
149
-
150
- // Wait for actual response (automatic JSON parsing)
151
- const { status, responseJson } = await submitCall;
152
- expect(status).toBe(200);
153
-
154
- // Modal should ALWAYS show (make it deterministic)
155
- await expect(page.locator('.modal')).toBeVisible();
156
- await page.click('.dismiss');
157
-
158
- // Explicit assertion (fails if not visible)
159
- await expect(page.locator('.success')).toBeVisible();
160
- });
161
- ```
162
-
163
- **Why both work:**
164
-
165
- - Waits for actual event (network response)
166
- - No conditionals (behavior is deterministic)
167
- - Assertions fail loudly (no silent failures)
168
- - Same result every run (deterministic)
169
-
170
- **Playwright Utils additional benefits:**
171
-
172
- - Automatic JSON parsing
173
- - `{ status, responseJson }` structure (can validate response data)
174
- - No manual `await response.json()`
175
-
176
- ### 2. Isolation (No Dependencies)
177
-
178
- **Rule:** Test runs independently, no shared state.
179
-
180
- **Requirements:**
181
-
182
- - ✅ Self-cleaning (cleanup after test)
183
- - ✅ No global state dependencies
184
- - ✅ Can run in parallel
185
- - ✅ Can run in any order
186
- - ✅ Use unique test data
187
-
188
- **Bad Example:**
189
-
190
- ```typescript
191
- // ❌ Tests depend on execution order
192
- let userId: string; // Shared global state
193
-
194
- test('create user', async ({ apiRequest }) => {
195
- const { body } = await apiRequest({
196
- method: 'POST',
197
- path: '/api/users',
198
- body: { email: 'test@example.com' }(hard - coded),
199
- });
200
- userId = body.id; // Store in global
201
- });
202
-
203
- test('update user', async ({ apiRequest }) => {
204
- // Depends on previous test setting userId
205
- await apiRequest({
206
- method: 'PATCH',
207
- path: `/api/users/${userId}`,
208
- body: { name: 'Updated' },
209
- });
210
- // No cleanup - leaves user in database
211
- });
212
- ```
213
-
214
- **Problems:**
215
-
216
- - Tests must run in order (can't parallelize)
217
- - Second test fails if first skipped (`.only`)
218
- - Hard-coded data causes conflicts
219
- - No cleanup (database fills with test data)
220
-
221
- **Good Example (Vanilla Playwright):**
222
-
223
- ```typescript
224
- test('should update user profile', async ({ request }) => {
225
- // Create unique test data
226
- const testEmail = `test-${Date.now()}@example.com`;
227
-
228
- // Setup: Create user
229
- const createResp = await request.post('/api/users', {
230
- data: { email: testEmail, name: 'Original' },
231
- });
232
- const user = await createResp.json();
233
-
234
- // Test: Update user
235
- const updateResp = await request.patch(`/api/users/${user.id}`, {
236
- data: { name: 'Updated' },
237
- });
238
- const updated = await updateResp.json();
239
-
240
- expect(updated.name).toBe('Updated');
241
-
242
- // Cleanup: Delete user
243
- await request.delete(`/api/users/${user.id}`);
244
- });
245
- ```
246
-
247
- **Even Better (With Playwright Utils):**
248
-
249
- ```typescript
250
- import { test } from '@seontechnologies/playwright-utils/api-request/fixtures';
251
- import { expect } from '@playwright/test';
252
- import { faker } from '@faker-js/faker';
253
-
254
- test('should update user profile', async ({ apiRequest }) => {
255
- // Dynamic unique test data
256
- const testEmail = faker.internet.email();
257
-
258
- // Setup: Create user
259
- const { status: createStatus, body: user } = await apiRequest({
260
- method: 'POST',
261
- path: '/api/users',
262
- body: { email: testEmail, name: faker.person.fullName() },
263
- });
264
-
265
- expect(createStatus).toBe(201);
266
-
267
- // Test: Update user
268
- const { status, body: updated } = await apiRequest({
269
- method: 'PATCH',
270
- path: `/api/users/${user.id}`,
271
- body: { name: 'Updated Name' },
272
- });
273
-
274
- expect(status).toBe(200);
275
- expect(updated.name).toBe('Updated Name');
276
-
277
- // Cleanup: Delete user
278
- await apiRequest({
279
- method: 'DELETE',
280
- path: `/api/users/${user.id}`,
281
- });
282
- });
283
- ```
284
-
285
- **Playwright Utils Benefits:**
286
-
287
- - `{ status, body }` destructuring (cleaner than `response.status()` + `await response.json()`)
288
- - No manual `await response.json()`
289
- - Automatic retry for 5xx errors
290
- - Optional schema validation with `.validateSchema()`
291
-
292
- **Why it works:**
293
-
294
- - No global state
295
- - Unique test data (no conflicts)
296
- - Self-cleaning (deletes user)
297
- - Can run in parallel
298
- - Can run in any order
299
-
300
- ### 3. Explicit Assertions (No Hidden Validation)
301
-
302
- **Rule:** Assertions visible in test body, not abstracted.
303
-
304
- **Requirements:**
305
-
306
- - ✅ Assertions in test code (not helper functions)
307
- - ✅ Specific assertions (not generic `toBeTruthy`)
308
- - ✅ Meaningful expectations (test actual behavior)
309
-
310
- **Bad Example:**
311
-
312
- ```typescript
313
- // ❌ Assertions hidden in helper
314
- async function verifyProfilePage(page: Page) {
315
- // Assertions buried in helper (not visible in test)
316
- await expect(page.locator('h1')).toBeVisible();
317
- await expect(page.locator('.email')).toContainText('@');
318
- await expect(page.locator('.name')).not.toBeEmpty();
319
- }
320
-
321
- test('profile page', async ({ page }) => {
322
- await page.goto('/profile');
323
- await verifyProfilePage(page); // What's being verified?
324
- });
325
- ```
326
-
327
- **Problems:**
328
-
329
- - Can't see what's tested (need to read helper)
330
- - Hard to debug failures (which assertion failed?)
331
- - Reduces test readability
332
- - Hides important validation
333
-
334
- **Good Example:**
335
-
336
- ```typescript
337
- // ✅ Assertions explicit in test
338
- test('should display profile with correct data', async ({ page }) => {
339
- await page.goto('/profile');
340
-
341
- // Explicit assertions - clear what's tested
342
- await expect(page.locator('h1')).toContainText('Test User');
343
- await expect(page.locator('.email')).toContainText('test@example.com');
344
- await expect(page.locator('.bio')).toContainText('Software Engineer');
345
- await expect(page.locator('img[alt="Avatar"]')).toBeVisible();
346
- });
347
- ```
348
-
349
- **Why it works:**
350
-
351
- - See what's tested at a glance
352
- - Debug failures easily (know which assertion failed)
353
- - Test is self-documenting
354
- - No hidden behavior
355
-
356
- **Exception:** Use helper for setup/cleanup, not assertions.
357
-
358
- ### 4. Focused Tests (Appropriate Size)
359
-
360
- **Rule:** Test has single responsibility, reasonable size.
361
-
362
- **Requirements:**
363
-
364
- - ✅ Test size < 300 lines
365
- - ✅ Single responsibility (test one thing well)
366
- - ✅ Clear describe/test names
367
- - ✅ Appropriate scope (not too granular, not too broad)
368
-
369
- **Bad Example:**
370
-
371
- ```typescript
372
- // ❌ 500-line test testing everything
373
- test('complete user flow', async ({ page }) => {
374
- // Registration (50 lines)
375
- await page.goto('/register');
376
- await page.fill('#email', 'test@example.com');
377
- // ... 48 more lines
378
-
379
- // Profile setup (100 lines)
380
- await page.goto('/profile');
381
- // ... 98 more lines
382
-
383
- // Settings configuration (150 lines)
384
- await page.goto('/settings');
385
- // ... 148 more lines
386
-
387
- // Data export (200 lines)
388
- await page.goto('/export');
389
- // ... 198 more lines
390
-
391
- // Total: 500 lines, testing 4 different features
392
- });
393
- ```
394
-
395
- **Problems:**
396
-
397
- - Failure in line 50 prevents testing lines 51-500
398
- - Hard to understand (what's being tested?)
399
- - Slow to execute (testing too much)
400
- - Hard to debug (which feature failed?)
401
-
402
- **Good Example:**
403
-
404
- ```typescript
405
- // ✅ Focused tests - one responsibility each
406
-
407
- test('should register new user', async ({ page }) => {
408
- await page.goto('/register');
409
- await page.fill('#email', 'test@example.com');
410
- await page.fill('#password', 'password123');
411
- await page.click('button[type="submit"]');
412
-
413
- await expect(page).toHaveURL('/welcome');
414
- await expect(page.locator('h1')).toContainText('Welcome');
415
- });
416
-
417
- test('should configure user profile', async ({ page, authSession }) => {
418
- await authSession.login({ email: 'test@example.com', password: 'pass' });
419
- await page.goto('/profile');
420
-
421
- await page.fill('#name', 'Test User');
422
- await page.fill('#bio', 'Software Engineer');
423
- await page.click('button:has-text("Save")');
424
-
425
- await expect(page.locator('.success')).toBeVisible();
426
- });
427
-
428
- // ... separate tests for settings, export (each < 50 lines)
429
- ```
430
-
431
- **Why it works:**
432
-
433
- - Each test has one responsibility
434
- - Failure is easy to diagnose
435
- - Can run tests independently
436
- - Test names describe exactly what's tested
437
-
438
- ### 5. Fast Execution (Performance Budget)
439
-
440
- **Rule:** Individual test executes in < 1.5 minutes.
441
-
442
- **Requirements:**
443
-
444
- - ✅ Test execution < 90 seconds
445
- - ✅ Efficient selectors (getByRole > XPath)
446
- - ✅ Minimal redundant actions
447
- - ✅ Parallel execution enabled
448
-
449
- **Bad Example:**
450
-
451
- ```typescript
452
- // ❌ Slow test (3+ minutes)
453
- test('slow test', async ({ page }) => {
454
- await page.goto('/');
455
- await page.waitForTimeout(10000); // 10s wasted
456
-
457
- // Navigate through 10 pages (2 minutes)
458
- for (let i = 1; i <= 10; i++) {
459
- await page.click(`a[href="/page-${i}"]`);
460
- await page.waitForTimeout(5000); // 5s per page = 50s wasted
461
- }
462
-
463
- // Complex XPath selector (slow)
464
- await page.locator('//div[@class="container"]/section[3]/div[2]/p').click();
465
-
466
- // More waiting
467
- await page.waitForTimeout(30000); // 30s wasted
468
-
469
- await expect(page.locator('.result')).toBeVisible();
470
- });
471
- ```
472
-
473
- **Total time:** 3+ minutes (95 seconds wasted on hard waits)
474
-
475
- **Good Example (Vanilla Playwright):**
476
-
477
- ```typescript
478
- // ✅ Fast test (< 10 seconds)
479
- test('fast test', async ({ page }) => {
480
- // Set up response wait
481
- const apiPromise = page.waitForResponse((resp) => resp.url().includes('/api/result') && resp.ok());
482
-
483
- await page.goto('/');
484
-
485
- // Direct navigation (skip intermediate pages)
486
- await page.goto('/page-10');
487
-
488
- // Efficient selector
489
- await page.getByRole('button', { name: 'Submit' }).click();
490
-
491
- // Wait for actual response (fast when API is fast)
492
- await apiPromise;
493
-
494
- await expect(page.locator('.result')).toBeVisible();
495
- });
496
- ```
497
-
498
- **With Playwright Utils:**
499
-
500
- ```typescript
501
- import { test } from '@seontechnologies/playwright-utils/fixtures';
502
- import { expect } from '@playwright/test';
503
-
504
- test('fast test', async ({ page, interceptNetworkCall }) => {
505
- // Set up interception
506
- const resultCall = interceptNetworkCall({
507
- method: 'GET',
508
- url: '**/api/result',
509
- });
510
-
511
- await page.goto('/');
512
-
513
- // Direct navigation (skip intermediate pages)
514
- await page.goto('/page-10');
515
-
516
- // Efficient selector
517
- await page.getByRole('button', { name: 'Submit' }).click();
518
-
519
- // Wait for actual response (automatic JSON parsing)
520
- const { status, responseJson } = await resultCall;
521
-
522
- expect(status).toBe(200);
523
- await expect(page.locator('.result')).toBeVisible();
524
-
525
- // Can also validate response data if needed
526
- // expect(responseJson.data).toBeDefined();
527
- });
528
- ```
529
-
530
- **Total time:** < 10 seconds (no wasted waits)
531
-
532
- **Both examples achieve:**
533
-
534
- - No hard waits (wait for actual events)
535
- - Direct navigation (skip unnecessary steps)
536
- - Efficient selectors (getByRole)
537
- - Fast execution
538
-
539
- **Playwright Utils bonus:**
540
-
541
- - Can validate API response data easily
542
- - Automatic JSON parsing
543
- - Cleaner API
544
-
545
- ## TEA's Quality Scoring
546
-
547
- TEA reviews tests against these standards in `test-review`:
548
-
549
- ### Scoring Categories (100 points total)
550
-
551
- **Determinism (35 points):**
552
-
553
- - No hard waits: 10 points
554
- - No conditionals: 10 points
555
- - No try-catch flow: 10 points
556
- - Network-first patterns: 5 points
557
-
558
- **Isolation (25 points):**
559
-
560
- - Self-cleaning: 15 points
561
- - No global state: 5 points
562
- - Parallel-safe: 5 points
563
-
564
- **Assertions (20 points):**
565
-
566
- - Explicit in test body: 10 points
567
- - Specific and meaningful: 10 points
568
-
569
- **Structure (10 points):**
570
-
571
- - Test size < 300 lines: 5 points
572
- - Clear naming: 5 points
573
-
574
- **Performance (10 points):**
575
-
576
- - Execution time < 1.5 min: 10 points
577
-
578
- #### Quality Scoring Breakdown
579
-
580
- ```mermaid
581
- %%{init: {'theme':'base', 'themeVariables': { 'fontSize':'14px'}}}%%
582
- pie title Test Quality Score (100 points)
583
- "Determinism" : 35
584
- "Isolation" : 25
585
- "Assertions" : 20
586
- "Structure" : 10
587
- "Performance" : 10
588
- ```
589
-
590
- ```mermaid
591
- %%{init: {'theme':'base', 'themeVariables': { 'fontSize':'13px'}}}%%
592
- flowchart LR
593
- subgraph Det[Determinism - 35 pts]
594
- D1[No hard waits<br/>10 pts]
595
- D2[No conditionals<br/>10 pts]
596
- D3[No try-catch flow<br/>10 pts]
597
- D4[Network-first<br/>5 pts]
598
- end
599
-
600
- subgraph Iso[Isolation - 25 pts]
601
- I1[Self-cleaning<br/>15 pts]
602
- I2[No global state<br/>5 pts]
603
- I3[Parallel-safe<br/>5 pts]
604
- end
605
-
606
- subgraph Assrt[Assertions - 20 pts]
607
- A1[Explicit in body<br/>10 pts]
608
- A2[Specific/meaningful<br/>10 pts]
609
- end
610
-
611
- subgraph Struct[Structure - 10 pts]
612
- S1[Size < 300 lines<br/>5 pts]
613
- S2[Clear naming<br/>5 pts]
614
- end
615
-
616
- subgraph Perf[Performance - 10 pts]
617
- P1[Time < 1.5 min<br/>10 pts]
618
- end
619
-
620
- Det --> Total([Total: 100 points])
621
- Iso --> Total
622
- Assrt --> Total
623
- Struct --> Total
624
- Perf --> Total
625
-
626
- style Det fill:#ffebee,stroke:#c62828,stroke-width:2px
627
- style Iso fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
628
- style Assrt fill:#f3e5f5,stroke:#6a1b9a,stroke-width:2px
629
- style Struct fill:#fff9c4,stroke:#f57f17,stroke-width:2px
630
- style Perf fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
631
- style Total fill:#fff,stroke:#000,stroke-width:3px
632
- ```
633
-
634
- ### Score Interpretation
635
-
636
- | Score | Interpretation | Action |
637
- | ---------- | -------------- | -------------------------------------- |
638
- | **90-100** | Excellent | Production-ready, minimal changes |
639
- | **80-89** | Good | Minor improvements recommended |
640
- | **70-79** | Acceptable | Address recommendations before release |
641
- | **60-69** | Needs Work | Fix critical issues |
642
- | **< 60** | Critical | Significant refactoring needed |
643
-
644
- ## Comparison: Good vs Bad Tests
645
-
646
- ### Example: User Login
647
-
648
- **Bad Test (Score: 45/100):**
649
-
650
- ```typescript
651
- test('login test', async ({ page }) => {
652
- // Vague name
653
- await page.goto('/login');
654
- await page.waitForTimeout(3000); // -10 (hard wait)
655
-
656
- await page.fill('[name="email"]', 'test@example.com');
657
- await page.fill('[name="password"]', 'password');
658
-
659
- if (await page.locator('.remember-me').isVisible()) {
660
- // -10 (conditional)
661
- await page.click('.remember-me');
662
- }
663
-
664
- await page.click('button');
665
-
666
- try {
667
- // -10 (try-catch flow)
668
- await page.waitForURL('/dashboard', { timeout: 5000 });
669
- } catch (e) {
670
- // Ignore navigation failure
671
- }
672
-
673
- // No assertions! -10
674
- // No cleanup! -10
675
- });
676
- ```
677
-
678
- **Issues:**
679
-
680
- - Determinism: 5/35 (hard wait, conditional, try-catch)
681
- - Isolation: 10/25 (no cleanup)
682
- - Assertions: 0/20 (no assertions!)
683
- - Structure: 15/10 (okay)
684
- - Performance: 5/10 (slow)
685
- - **Total: 45/100**
686
-
687
- **Good Test (Score: 95/100):**
688
-
689
- ```typescript
690
- test('should login with valid credentials and redirect to dashboard', async ({ page, authSession }) => {
691
- // Use fixture for deterministic auth
692
- const loginPromise = page.waitForResponse((resp) => resp.url().includes('/api/auth/login') && resp.ok());
693
-
694
- await page.goto('/login');
695
- await page.getByLabel('Email').fill('test@example.com');
696
- await page.getByLabel('Password').fill('password123');
697
- await page.getByRole('button', { name: 'Sign in' }).click();
698
-
699
- // Wait for actual API response
700
- const response = await loginPromise;
701
- const { token } = await response.json();
702
-
703
- // Explicit assertions
704
- expect(token).toBeDefined();
705
- await expect(page).toHaveURL('/dashboard');
706
- await expect(page.getByText('Welcome back')).toBeVisible();
707
-
708
- // Cleanup handled by authSession fixture
709
- });
710
- ```
711
-
712
- **Quality:**
713
-
714
- - Determinism: 35/35 (network-first, no conditionals)
715
- - Isolation: 25/25 (fixture handles cleanup)
716
- - Assertions: 20/20 (explicit and specific)
717
- - Structure: 10/10 (clear name, focused)
718
- - Performance: 5/10 (< 1 min)
719
- - **Total: 95/100**
720
-
721
- ### Example: API Testing
722
-
723
- **Bad Test (Score: 50/100):**
724
-
725
- ```typescript
726
- test('api test', async ({ request }) => {
727
- const response = await request.post('/api/users', {
728
- data: { email: 'test@example.com' }, // Hard-coded (conflicts)
729
- });
730
-
731
- if (response.ok()) {
732
- // Conditional
733
- const user = await response.json();
734
- // Weak assertion
735
- expect(user).toBeTruthy();
736
- }
737
-
738
- // No cleanup - user left in database
739
- });
740
- ```
741
-
742
- **Good Test (Score: 92/100):**
743
-
744
- ```typescript
745
- test('should create user with valid data', async ({ apiRequest }) => {
746
- // Unique test data
747
- const testEmail = `test-${Date.now()}@example.com`;
748
-
749
- // Create user
750
- const { status, body } = await apiRequest({
751
- method: 'POST',
752
- path: '/api/users',
753
- body: { email: testEmail, name: 'Test User' },
754
- });
755
-
756
- // Explicit assertions
757
- expect(status).toBe(201);
758
- expect(body.id).toBeDefined();
759
- expect(body.email).toBe(testEmail);
760
- expect(body.name).toBe('Test User');
761
-
762
- // Cleanup
763
- await apiRequest({
764
- method: 'DELETE',
765
- path: `/api/users/${body.id}`,
766
- });
767
- });
768
- ```
769
-
770
- ## How TEA Enforces Standards
771
-
772
- ### During Test Generation (`atdd`, `automate`)
773
-
774
- TEA generates tests following standards by default:
775
-
776
- ```typescript
777
- // TEA-generated test (automatically follows standards)
778
- test('should submit contact form', async ({ page }) => {
779
- // Network-first pattern (no hard waits)
780
- const submitPromise = page.waitForResponse((resp) => resp.url().includes('/api/contact') && resp.ok());
781
-
782
- // Accessible selectors (resilient)
783
- await page.getByLabel('Name').fill('Test User');
784
- await page.getByLabel('Email').fill('test@example.com');
785
- await page.getByLabel('Message').fill('Test message');
786
- await page.getByRole('button', { name: 'Send' }).click();
787
-
788
- const response = await submitPromise;
789
- const result = await response.json();
790
-
791
- // Explicit assertions
792
- expect(result.success).toBe(true);
793
- await expect(page.getByText('Message sent')).toBeVisible();
794
-
795
- // Size: 15 lines (< 300 ✓)
796
- // Execution: ~2 seconds (< 90s ✓)
797
- });
798
- ```
799
-
800
- ### During Test Review (`test-review`)
801
-
802
- TEA audits tests and flags violations:
803
-
804
- ```markdown
805
- ## Critical Issues
806
-
807
- ### Hard Wait Detected (tests/login.spec.ts:23)
808
-
809
- **Issue:** `await page.waitForTimeout(3000)`
810
- **Score Impact:** -10 (Determinism)
811
- **Fix:** Use network-first pattern
812
-
813
- ### Conditional Flow Control (tests/profile.spec.ts:45)
814
-
815
- **Issue:** `if (await page.locator('.banner').isVisible())`
816
- **Score Impact:** -10 (Determinism)
817
- **Fix:** Make banner presence deterministic
818
-
819
- ## Recommendations
820
-
821
- ### Extract Fixture (tests/auth.spec.ts)
822
-
823
- **Issue:** Login code repeated 5 times
824
- **Score Impact:** -3 (Structure)
825
- **Fix:** Extract to authSession fixture
826
- ```
827
-
828
- ## Definition of Done Checklist
829
-
830
- When is a test "done"?
831
-
832
- **Test Quality DoD:**
833
-
834
- - [ ] No hard waits (`waitForTimeout`)
835
- - [ ] No conditionals for flow control
836
- - [ ] No try-catch for flow control
837
- - [ ] Network-first patterns used
838
- - [ ] Assertions explicit in test body
839
- - [ ] Test size < 300 lines
840
- - [ ] Clear, descriptive test name
841
- - [ ] Self-cleaning (cleanup in afterEach or test)
842
- - [ ] Unique test data (no hard-coded values)
843
- - [ ] Execution time < 1.5 minutes
844
- - [ ] Can run in parallel
845
- - [ ] Can run in any order
846
-
847
- **Code Review DoD:**
848
-
849
- - [ ] Test quality score > 80
850
- - [ ] No critical issues from `test-review`
851
- - [ ] Follows project patterns (fixtures, selectors)
852
- - [ ] Test reviewed by team member
853
-
854
- ## Common Quality Issues
855
-
856
- ### Issue: "My test needs conditionals for optional elements"
857
-
858
- **Wrong approach:**
859
-
860
- ```typescript
861
- if (await page.locator('.banner').isVisible()) {
862
- await page.click('.dismiss');
863
- }
864
- ```
865
-
866
- **Right approach - Make it deterministic:**
867
-
868
- ```typescript
869
- // Option 1: Always expect banner
870
- await expect(page.locator('.banner')).toBeVisible();
871
- await page.click('.dismiss');
872
-
873
- // Option 2: Test both scenarios separately
874
- test('should show banner for new users', ...);
875
- test('should not show banner for returning users', ...);
876
- ```
877
-
878
- ### Issue: "My test needs try-catch for error handling"
879
-
880
- **Wrong approach:**
881
-
882
- ```typescript
883
- try {
884
- await page.click('#optional-button');
885
- } catch (e) {
886
- // Silently continue
887
- }
888
- ```
889
-
890
- **Right approach - Make failures explicit:**
891
-
892
- ```typescript
893
- // Option 1: Button should exist
894
- await page.click('#optional-button'); // Fails loudly if missing
895
-
896
- // Option 2: Button might not exist (test both)
897
- test('should work with optional button', async ({ page }) => {
898
- const hasButton = (await page.locator('#optional-button').count()) > 0;
899
- if (hasButton) {
900
- await page.click('#optional-button');
901
- }
902
- // But now you're testing optional behavior explicitly
903
- });
904
- ```
905
-
906
- ### Issue: "Hard waits are easier than network patterns"
907
-
908
- **Short-term:** Hard waits seem simpler
909
- **Long-term:** Flaky tests waste more time than learning network patterns
910
-
911
- **Investment:**
912
-
913
- - 30 minutes to learn network-first patterns
914
- - Prevents hundreds of hours debugging flaky tests
915
- - Tests run faster (no wasted waits)
916
- - Team trusts test suite
917
-
918
- ## Technical Implementation
919
-
920
- For detailed test quality patterns, see:
921
-
922
- - [Test Quality Fragment](/docs/reference/knowledge-base.md#quality-standards)
923
- - [Test Levels Framework Fragment](/docs/reference/knowledge-base.md#quality-standards)
924
- - [Complete Knowledge Base Index](/docs/reference/knowledge-base.md)
925
-
926
- ## Related Concepts
927
-
928
- **Core TEA Concepts:**
929
-
930
- - [Risk-Based Testing](/docs/explanation/risk-based-testing.md) - Quality scales with risk
931
- - [Knowledge Base System](/docs/explanation/knowledge-base-system.md) - How standards are enforced
932
- - [Engagement Models](/docs/explanation/engagement-models.md) - Quality in different models
933
-
934
- **Technical Patterns:**
935
-
936
- - [Network-First Patterns](/docs/explanation/network-first-patterns.md) - Determinism explained
937
- - [Fixture Architecture](/docs/explanation/fixture-architecture.md) - Isolation through fixtures
938
-
939
- **Overview:**
940
-
941
- - [TEA Overview](/docs/explanation/tea-overview.md) - Quality standards in lifecycle
942
- - [Testing as Engineering](/docs/explanation/testing-as-engineering.md) - Why quality matters
943
-
944
- ## Practical Guides
945
-
946
- **Workflow Guides:**
947
-
948
- - [How to Run Test Review](/docs/how-to/workflows/run-test-review.md) - Audit against these standards
949
- - [How to Run ATDD](/docs/how-to/workflows/run-atdd.md) - Generate quality tests
950
- - [How to Run Automate](/docs/how-to/workflows/run-automate.md) - Expand with quality
951
-
952
- **Use-Case Guides:**
953
-
954
- - [Using TEA with Existing Tests](/docs/how-to/brownfield/use-tea-with-existing-tests.md) - Improve legacy quality
955
- - [Running TEA for Enterprise](/docs/how-to/brownfield/use-tea-for-enterprise.md) - Enterprise quality thresholds
956
-
957
- ## Reference
958
-
959
- - [TEA Command Reference](/docs/reference/commands.md) - `test-review` command
960
- - [Knowledge Base Index](/docs/reference/knowledge-base.md) - Test quality fragment
961
- - [Glossary](/docs/glossary/index.md#test-architect-tea-concepts) - TEA terminology
962
-
963
- ---
964
-
965
- Generated with [BMad Method](https://bmad-method.org) - TEA (Test Engineering Architect)
1
+ ---
2
+ title: 'Test Quality Standards Explained'
3
+ description: Understanding TEA's Definition of Done for deterministic, isolated, and maintainable tests
4
+ ---
5
+
6
+ # Test Quality Standards Explained
7
+
8
+ Test quality standards define what makes a test "good" in TEA. These aren't suggestions - they're the Definition of Done that prevents tests from rotting in review.
9
+
10
+ ## Overview
11
+
12
+ **TEA's Quality Principles:**
13
+
14
+ - **Deterministic** - Same result every run
15
+ - **Isolated** - No dependencies on other tests
16
+ - **Explicit** - Assertions visible in test body
17
+ - **Focused** - Single responsibility, appropriate size
18
+ - **Fast** - Execute in reasonable time
19
+
20
+ **Why these matter:** Tests that violate these principles create maintenance burden, slow down development, and lose team trust.
21
+
22
+ ## The Problem
23
+
24
+ ### Tests That Rot in Review
25
+
26
+ ```typescript
27
+ // ❌ The anti-pattern: This test will rot
28
+ test('user can do stuff', async ({ page }) => {
29
+ await page.goto('/');
30
+ await page.waitForTimeout(5000); // Non-deterministic
31
+
32
+ if (await page.locator('.banner').isVisible()) {
33
+ // Conditional
34
+ await page.click('.dismiss');
35
+ }
36
+
37
+ try {
38
+ // Try-catch for flow control
39
+ await page.click('#load-more');
40
+ } catch (e) {
41
+ // Silently continue
42
+ }
43
+
44
+ // ... 300 more lines of test logic
45
+ // ... no clear assertions
46
+ });
47
+ ```
48
+
49
+ **What's wrong:**
50
+
51
+ - **Hard wait** - Flaky, wastes time
52
+ - **Conditional** - Non-deterministic behavior
53
+ - **Try-catch** - Hides failures
54
+ - **Too large** - Hard to maintain
55
+ - **Vague name** - Unclear purpose
56
+ - **No explicit assertions** - What's being tested?
57
+
58
+ **Result:** PR review comments: "This test is flaky, please fix" → never merged → test deleted → coverage lost
59
+
60
+ ### AI-Generated Tests Without Standards
61
+
62
+ AI-generated tests without quality guardrails:
63
+
64
+ ```typescript
65
+ // AI generates 50 tests like this:
66
+ test('test1', async ({ page }) => {
67
+ await page.goto('/');
68
+ await page.waitForTimeout(3000);
69
+ // ... flaky, vague, redundant
70
+ });
71
+
72
+ test('test2', async ({ page }) => {
73
+ await page.goto('/');
74
+ await page.waitForTimeout(3000);
75
+ // ... duplicates test1
76
+ });
77
+
78
+ // ... 48 more similar tests
79
+ ```
80
+
81
+ **Result:** 50 tests, 80% redundant, 90% flaky, 0% trusted by team - low-quality outputs that create maintenance burden.
82
+
83
+ ## The Solution: TEA's Quality Standards
84
+
85
+ ### 1. Determinism (No Flakiness)
86
+
87
+ **Rule:** Test produces same result every run.
88
+
89
+ **Requirements:**
90
+
91
+ - ❌ No hard waits (`waitForTimeout`)
92
+ - ❌ No conditionals for flow control (`if/else`)
93
+ - ❌ No try-catch for flow control
94
+ - ✅ Use network-first patterns (wait for responses)
95
+ - ✅ Use explicit waits (waitForSelector, waitForResponse)
96
+
97
+ **Bad Example:**
98
+
99
+ ```typescript
100
+ test('flaky test', async ({ page }) => {
101
+ await page.click('button');
102
+ await page.waitForTimeout(2000); // ❌ Might be too short
103
+
104
+ if (await page.locator('.modal').isVisible()) {
105
+ // ❌ Non-deterministic
106
+ await page.click('.dismiss');
107
+ }
108
+
109
+ try {
110
+ // ❌ Silently handles errors
111
+ await expect(page.locator('.success')).toBeVisible();
112
+ } catch (e) {
113
+ // Test passes even if assertion fails!
114
+ }
115
+ });
116
+ ```
117
+
118
+ **Good Example (Vanilla Playwright):**
119
+
120
+ ```typescript
121
+ test('deterministic test', async ({ page }) => {
122
+ const responsePromise = page.waitForResponse((resp) => resp.url().includes('/api/submit') && resp.ok());
123
+
124
+ await page.click('button');
125
+ await responsePromise; // ✅ Wait for actual response
126
+
127
+ // Modal should ALWAYS show (make it deterministic)
128
+ await expect(page.locator('.modal')).toBeVisible();
129
+ await page.click('.dismiss');
130
+
131
+ // Explicit assertion (fails if not visible)
132
+ await expect(page.locator('.success')).toBeVisible();
133
+ });
134
+ ```
135
+
136
+ **With Playwright Utils (Even Cleaner):**
137
+
138
+ ```typescript
139
+ import { test } from '@seontechnologies/playwright-utils/fixtures';
140
+ import { expect } from '@playwright/test';
141
+
142
+ test('deterministic test', async ({ page, interceptNetworkCall }) => {
143
+ const submitCall = interceptNetworkCall({
144
+ method: 'POST',
145
+ url: '**/api/submit',
146
+ });
147
+
148
+ await page.click('button');
149
+
150
+ // Wait for actual response (automatic JSON parsing)
151
+ const { status, responseJson } = await submitCall;
152
+ expect(status).toBe(200);
153
+
154
+ // Modal should ALWAYS show (make it deterministic)
155
+ await expect(page.locator('.modal')).toBeVisible();
156
+ await page.click('.dismiss');
157
+
158
+ // Explicit assertion (fails if not visible)
159
+ await expect(page.locator('.success')).toBeVisible();
160
+ });
161
+ ```
162
+
163
+ **Why both work:**
164
+
165
+ - Waits for actual event (network response)
166
+ - No conditionals (behavior is deterministic)
167
+ - Assertions fail loudly (no silent failures)
168
+ - Same result every run (deterministic)
169
+
170
+ **Playwright Utils additional benefits:**
171
+
172
+ - Automatic JSON parsing
173
+ - `{ status, responseJson }` structure (can validate response data)
174
+ - No manual `await response.json()`
175
+
176
+ ### 2. Isolation (No Dependencies)
177
+
178
+ **Rule:** Test runs independently, no shared state.
179
+
180
+ **Requirements:**
181
+
182
+ - ✅ Self-cleaning (cleanup after test)
183
+ - ✅ No global state dependencies
184
+ - ✅ Can run in parallel
185
+ - ✅ Can run in any order
186
+ - ✅ Use unique test data
187
+
188
+ **Bad Example:**
189
+
190
+ ```typescript
191
+ // ❌ Tests depend on execution order
192
+ let userId: string; // Shared global state
193
+
194
+ test('create user', async ({ apiRequest }) => {
195
+ const { body } = await apiRequest({
196
+ method: 'POST',
197
+ path: '/api/users',
198
+ body: { email: 'test@example.com' }(hard - coded),
199
+ });
200
+ userId = body.id; // Store in global
201
+ });
202
+
203
+ test('update user', async ({ apiRequest }) => {
204
+ // Depends on previous test setting userId
205
+ await apiRequest({
206
+ method: 'PATCH',
207
+ path: `/api/users/${userId}`,
208
+ body: { name: 'Updated' },
209
+ });
210
+ // No cleanup - leaves user in database
211
+ });
212
+ ```
213
+
214
+ **Problems:**
215
+
216
+ - Tests must run in order (can't parallelize)
217
+ - Second test fails if first skipped (`.only`)
218
+ - Hard-coded data causes conflicts
219
+ - No cleanup (database fills with test data)
220
+
221
+ **Good Example (Vanilla Playwright):**
222
+
223
+ ```typescript
224
+ test('should update user profile', async ({ request }) => {
225
+ // Create unique test data
226
+ const testEmail = `test-${Date.now()}@example.com`;
227
+
228
+ // Setup: Create user
229
+ const createResp = await request.post('/api/users', {
230
+ data: { email: testEmail, name: 'Original' },
231
+ });
232
+ const user = await createResp.json();
233
+
234
+ // Test: Update user
235
+ const updateResp = await request.patch(`/api/users/${user.id}`, {
236
+ data: { name: 'Updated' },
237
+ });
238
+ const updated = await updateResp.json();
239
+
240
+ expect(updated.name).toBe('Updated');
241
+
242
+ // Cleanup: Delete user
243
+ await request.delete(`/api/users/${user.id}`);
244
+ });
245
+ ```
246
+
247
+ **Even Better (With Playwright Utils):**
248
+
249
+ ```typescript
250
+ import { test } from '@seontechnologies/playwright-utils/api-request/fixtures';
251
+ import { expect } from '@playwright/test';
252
+ import { faker } from '@faker-js/faker';
253
+
254
+ test('should update user profile', async ({ apiRequest }) => {
255
+ // Dynamic unique test data
256
+ const testEmail = faker.internet.email();
257
+
258
+ // Setup: Create user
259
+ const { status: createStatus, body: user } = await apiRequest({
260
+ method: 'POST',
261
+ path: '/api/users',
262
+ body: { email: testEmail, name: faker.person.fullName() },
263
+ });
264
+
265
+ expect(createStatus).toBe(201);
266
+
267
+ // Test: Update user
268
+ const { status, body: updated } = await apiRequest({
269
+ method: 'PATCH',
270
+ path: `/api/users/${user.id}`,
271
+ body: { name: 'Updated Name' },
272
+ });
273
+
274
+ expect(status).toBe(200);
275
+ expect(updated.name).toBe('Updated Name');
276
+
277
+ // Cleanup: Delete user
278
+ await apiRequest({
279
+ method: 'DELETE',
280
+ path: `/api/users/${user.id}`,
281
+ });
282
+ });
283
+ ```
284
+
285
+ **Playwright Utils Benefits:**
286
+
287
+ - `{ status, body }` destructuring (cleaner than `response.status()` + `await response.json()`)
288
+ - No manual `await response.json()`
289
+ - Automatic retry for 5xx errors
290
+ - Optional schema validation with `.validateSchema()`
291
+
292
+ **Why it works:**
293
+
294
+ - No global state
295
+ - Unique test data (no conflicts)
296
+ - Self-cleaning (deletes user)
297
+ - Can run in parallel
298
+ - Can run in any order
299
+
300
+ ### 3. Explicit Assertions (No Hidden Validation)
301
+
302
+ **Rule:** Assertions visible in test body, not abstracted.
303
+
304
+ **Requirements:**
305
+
306
+ - ✅ Assertions in test code (not helper functions)
307
+ - ✅ Specific assertions (not generic `toBeTruthy`)
308
+ - ✅ Meaningful expectations (test actual behavior)
309
+
310
+ **Bad Example:**
311
+
312
+ ```typescript
313
+ // ❌ Assertions hidden in helper
314
+ async function verifyProfilePage(page: Page) {
315
+ // Assertions buried in helper (not visible in test)
316
+ await expect(page.locator('h1')).toBeVisible();
317
+ await expect(page.locator('.email')).toContainText('@');
318
+ await expect(page.locator('.name')).not.toBeEmpty();
319
+ }
320
+
321
+ test('profile page', async ({ page }) => {
322
+ await page.goto('/profile');
323
+ await verifyProfilePage(page); // What's being verified?
324
+ });
325
+ ```
326
+
327
+ **Problems:**
328
+
329
+ - Can't see what's tested (need to read helper)
330
+ - Hard to debug failures (which assertion failed?)
331
+ - Reduces test readability
332
+ - Hides important validation
333
+
334
+ **Good Example:**
335
+
336
+ ```typescript
337
+ // ✅ Assertions explicit in test
338
+ test('should display profile with correct data', async ({ page }) => {
339
+ await page.goto('/profile');
340
+
341
+ // Explicit assertions - clear what's tested
342
+ await expect(page.locator('h1')).toContainText('Test User');
343
+ await expect(page.locator('.email')).toContainText('test@example.com');
344
+ await expect(page.locator('.bio')).toContainText('Software Engineer');
345
+ await expect(page.locator('img[alt="Avatar"]')).toBeVisible();
346
+ });
347
+ ```
348
+
349
+ **Why it works:**
350
+
351
+ - See what's tested at a glance
352
+ - Debug failures easily (know which assertion failed)
353
+ - Test is self-documenting
354
+ - No hidden behavior
355
+
356
+ **Exception:** Use helper for setup/cleanup, not assertions.
357
+
358
+ ### 4. Focused Tests (Appropriate Size)
359
+
360
+ **Rule:** Test has single responsibility, reasonable size.
361
+
362
+ **Requirements:**
363
+
364
+ - ✅ Test size < 300 lines
365
+ - ✅ Single responsibility (test one thing well)
366
+ - ✅ Clear describe/test names
367
+ - ✅ Appropriate scope (not too granular, not too broad)
368
+
369
+ **Bad Example:**
370
+
371
+ ```typescript
372
+ // ❌ 500-line test testing everything
373
+ test('complete user flow', async ({ page }) => {
374
+ // Registration (50 lines)
375
+ await page.goto('/register');
376
+ await page.fill('#email', 'test@example.com');
377
+ // ... 48 more lines
378
+
379
+ // Profile setup (100 lines)
380
+ await page.goto('/profile');
381
+ // ... 98 more lines
382
+
383
+ // Settings configuration (150 lines)
384
+ await page.goto('/settings');
385
+ // ... 148 more lines
386
+
387
+ // Data export (200 lines)
388
+ await page.goto('/export');
389
+ // ... 198 more lines
390
+
391
+ // Total: 500 lines, testing 4 different features
392
+ });
393
+ ```
394
+
395
+ **Problems:**
396
+
397
+ - Failure in line 50 prevents testing lines 51-500
398
+ - Hard to understand (what's being tested?)
399
+ - Slow to execute (testing too much)
400
+ - Hard to debug (which feature failed?)
401
+
402
+ **Good Example:**
403
+
404
+ ```typescript
405
+ // ✅ Focused tests - one responsibility each
406
+
407
+ test('should register new user', async ({ page }) => {
408
+ await page.goto('/register');
409
+ await page.fill('#email', 'test@example.com');
410
+ await page.fill('#password', 'password123');
411
+ await page.click('button[type="submit"]');
412
+
413
+ await expect(page).toHaveURL('/welcome');
414
+ await expect(page.locator('h1')).toContainText('Welcome');
415
+ });
416
+
417
+ test('should configure user profile', async ({ page, authSession }) => {
418
+ await authSession.login({ email: 'test@example.com', password: 'pass' });
419
+ await page.goto('/profile');
420
+
421
+ await page.fill('#name', 'Test User');
422
+ await page.fill('#bio', 'Software Engineer');
423
+ await page.click('button:has-text("Save")');
424
+
425
+ await expect(page.locator('.success')).toBeVisible();
426
+ });
427
+
428
+ // ... separate tests for settings, export (each < 50 lines)
429
+ ```
430
+
431
+ **Why it works:**
432
+
433
+ - Each test has one responsibility
434
+ - Failure is easy to diagnose
435
+ - Can run tests independently
436
+ - Test names describe exactly what's tested
437
+
438
+ ### 5. Fast Execution (Performance Budget)
439
+
440
+ **Rule:** Individual test executes in < 1.5 minutes.
441
+
442
+ **Requirements:**
443
+
444
+ - ✅ Test execution < 90 seconds
445
+ - ✅ Efficient selectors (getByRole > XPath)
446
+ - ✅ Minimal redundant actions
447
+ - ✅ Parallel execution enabled
448
+
449
+ **Bad Example:**
450
+
451
+ ```typescript
452
+ // ❌ Slow test (3+ minutes)
453
+ test('slow test', async ({ page }) => {
454
+ await page.goto('/');
455
+ await page.waitForTimeout(10000); // 10s wasted
456
+
457
+ // Navigate through 10 pages (2 minutes)
458
+ for (let i = 1; i <= 10; i++) {
459
+ await page.click(`a[href="/page-${i}"]`);
460
+ await page.waitForTimeout(5000); // 5s per page = 50s wasted
461
+ }
462
+
463
+ // Complex XPath selector (slow)
464
+ await page.locator('//div[@class="container"]/section[3]/div[2]/p').click();
465
+
466
+ // More waiting
467
+ await page.waitForTimeout(30000); // 30s wasted
468
+
469
+ await expect(page.locator('.result')).toBeVisible();
470
+ });
471
+ ```
472
+
473
+ **Total time:** 3+ minutes (95 seconds wasted on hard waits)
474
+
475
+ **Good Example (Vanilla Playwright):**
476
+
477
+ ```typescript
478
+ // ✅ Fast test (< 10 seconds)
479
+ test('fast test', async ({ page }) => {
480
+ // Set up response wait
481
+ const apiPromise = page.waitForResponse((resp) => resp.url().includes('/api/result') && resp.ok());
482
+
483
+ await page.goto('/');
484
+
485
+ // Direct navigation (skip intermediate pages)
486
+ await page.goto('/page-10');
487
+
488
+ // Efficient selector
489
+ await page.getByRole('button', { name: 'Submit' }).click();
490
+
491
+ // Wait for actual response (fast when API is fast)
492
+ await apiPromise;
493
+
494
+ await expect(page.locator('.result')).toBeVisible();
495
+ });
496
+ ```
497
+
498
+ **With Playwright Utils:**
499
+
500
+ ```typescript
501
+ import { test } from '@seontechnologies/playwright-utils/fixtures';
502
+ import { expect } from '@playwright/test';
503
+
504
+ test('fast test', async ({ page, interceptNetworkCall }) => {
505
+ // Set up interception
506
+ const resultCall = interceptNetworkCall({
507
+ method: 'GET',
508
+ url: '**/api/result',
509
+ });
510
+
511
+ await page.goto('/');
512
+
513
+ // Direct navigation (skip intermediate pages)
514
+ await page.goto('/page-10');
515
+
516
+ // Efficient selector
517
+ await page.getByRole('button', { name: 'Submit' }).click();
518
+
519
+ // Wait for actual response (automatic JSON parsing)
520
+ const { status, responseJson } = await resultCall;
521
+
522
+ expect(status).toBe(200);
523
+ await expect(page.locator('.result')).toBeVisible();
524
+
525
+ // Can also validate response data if needed
526
+ // expect(responseJson.data).toBeDefined();
527
+ });
528
+ ```
529
+
530
+ **Total time:** < 10 seconds (no wasted waits)
531
+
532
+ **Both examples achieve:**
533
+
534
+ - No hard waits (wait for actual events)
535
+ - Direct navigation (skip unnecessary steps)
536
+ - Efficient selectors (getByRole)
537
+ - Fast execution
538
+
539
+ **Playwright Utils bonus:**
540
+
541
+ - Can validate API response data easily
542
+ - Automatic JSON parsing
543
+ - Cleaner API
544
+
545
+ ## TEA's Quality Scoring
546
+
547
+ TEA reviews tests against these standards in `test-review`:
548
+
549
+ ### Scoring Categories (100 points total)
550
+
551
+ **Determinism (35 points):**
552
+
553
+ - No hard waits: 10 points
554
+ - No conditionals: 10 points
555
+ - No try-catch flow: 10 points
556
+ - Network-first patterns: 5 points
557
+
558
+ **Isolation (25 points):**
559
+
560
+ - Self-cleaning: 15 points
561
+ - No global state: 5 points
562
+ - Parallel-safe: 5 points
563
+
564
+ **Assertions (20 points):**
565
+
566
+ - Explicit in test body: 10 points
567
+ - Specific and meaningful: 10 points
568
+
569
+ **Structure (10 points):**
570
+
571
+ - Test size < 300 lines: 5 points
572
+ - Clear naming: 5 points
573
+
574
+ **Performance (10 points):**
575
+
576
+ - Execution time < 1.5 min: 10 points
577
+
578
+ #### Quality Scoring Breakdown
579
+
580
+ ```mermaid
581
+ %%{init: {'theme':'base', 'themeVariables': { 'fontSize':'14px'}}}%%
582
+ pie title Test Quality Score (100 points)
583
+ "Determinism" : 35
584
+ "Isolation" : 25
585
+ "Assertions" : 20
586
+ "Structure" : 10
587
+ "Performance" : 10
588
+ ```
589
+
590
+ ```mermaid
591
+ %%{init: {'theme':'base', 'themeVariables': { 'fontSize':'13px'}}}%%
592
+ flowchart LR
593
+ subgraph Det[Determinism - 35 pts]
594
+ D1[No hard waits<br/>10 pts]
595
+ D2[No conditionals<br/>10 pts]
596
+ D3[No try-catch flow<br/>10 pts]
597
+ D4[Network-first<br/>5 pts]
598
+ end
599
+
600
+ subgraph Iso[Isolation - 25 pts]
601
+ I1[Self-cleaning<br/>15 pts]
602
+ I2[No global state<br/>5 pts]
603
+ I3[Parallel-safe<br/>5 pts]
604
+ end
605
+
606
+ subgraph Assrt[Assertions - 20 pts]
607
+ A1[Explicit in body<br/>10 pts]
608
+ A2[Specific/meaningful<br/>10 pts]
609
+ end
610
+
611
+ subgraph Struct[Structure - 10 pts]
612
+ S1[Size < 300 lines<br/>5 pts]
613
+ S2[Clear naming<br/>5 pts]
614
+ end
615
+
616
+ subgraph Perf[Performance - 10 pts]
617
+ P1[Time < 1.5 min<br/>10 pts]
618
+ end
619
+
620
+ Det --> Total([Total: 100 points])
621
+ Iso --> Total
622
+ Assrt --> Total
623
+ Struct --> Total
624
+ Perf --> Total
625
+
626
+ style Det fill:#ffebee,stroke:#c62828,stroke-width:2px
627
+ style Iso fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
628
+ style Assrt fill:#f3e5f5,stroke:#6a1b9a,stroke-width:2px
629
+ style Struct fill:#fff9c4,stroke:#f57f17,stroke-width:2px
630
+ style Perf fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
631
+ style Total fill:#fff,stroke:#000,stroke-width:3px
632
+ ```
633
+
634
+ ### Score Interpretation
635
+
636
+ | Score | Interpretation | Action |
637
+ | ---------- | -------------- | -------------------------------------- |
638
+ | **90-100** | Excellent | Production-ready, minimal changes |
639
+ | **80-89** | Good | Minor improvements recommended |
640
+ | **70-79** | Acceptable | Address recommendations before release |
641
+ | **60-69** | Needs Work | Fix critical issues |
642
+ | **< 60** | Critical | Significant refactoring needed |
643
+
644
+ ## Comparison: Good vs Bad Tests
645
+
646
+ ### Example: User Login
647
+
648
+ **Bad Test (Score: 45/100):**
649
+
650
+ ```typescript
651
+ test('login test', async ({ page }) => {
652
+ // Vague name
653
+ await page.goto('/login');
654
+ await page.waitForTimeout(3000); // -10 (hard wait)
655
+
656
+ await page.fill('[name="email"]', 'test@example.com');
657
+ await page.fill('[name="password"]', 'password');
658
+
659
+ if (await page.locator('.remember-me').isVisible()) {
660
+ // -10 (conditional)
661
+ await page.click('.remember-me');
662
+ }
663
+
664
+ await page.click('button');
665
+
666
+ try {
667
+ // -10 (try-catch flow)
668
+ await page.waitForURL('/dashboard', { timeout: 5000 });
669
+ } catch (e) {
670
+ // Ignore navigation failure
671
+ }
672
+
673
+ // No assertions! -10
674
+ // No cleanup! -10
675
+ });
676
+ ```
677
+
678
+ **Issues:**
679
+
680
+ - Determinism: 5/35 (hard wait, conditional, try-catch)
681
+ - Isolation: 10/25 (no cleanup)
682
+ - Assertions: 0/20 (no assertions!)
683
+ - Structure: 15/10 (okay)
684
+ - Performance: 5/10 (slow)
685
+ - **Total: 45/100**
686
+
687
+ **Good Test (Score: 95/100):**
688
+
689
+ ```typescript
690
+ test('should login with valid credentials and redirect to dashboard', async ({ page, authSession }) => {
691
+ // Use fixture for deterministic auth
692
+ const loginPromise = page.waitForResponse((resp) => resp.url().includes('/api/auth/login') && resp.ok());
693
+
694
+ await page.goto('/login');
695
+ await page.getByLabel('Email').fill('test@example.com');
696
+ await page.getByLabel('Password').fill('password123');
697
+ await page.getByRole('button', { name: 'Sign in' }).click();
698
+
699
+ // Wait for actual API response
700
+ const response = await loginPromise;
701
+ const { token } = await response.json();
702
+
703
+ // Explicit assertions
704
+ expect(token).toBeDefined();
705
+ await expect(page).toHaveURL('/dashboard');
706
+ await expect(page.getByText('Welcome back')).toBeVisible();
707
+
708
+ // Cleanup handled by authSession fixture
709
+ });
710
+ ```
711
+
712
+ **Quality:**
713
+
714
+ - Determinism: 35/35 (network-first, no conditionals)
715
+ - Isolation: 25/25 (fixture handles cleanup)
716
+ - Assertions: 20/20 (explicit and specific)
717
+ - Structure: 10/10 (clear name, focused)
718
+ - Performance: 5/10 (< 1 min)
719
+ - **Total: 95/100**
720
+
721
+ ### Example: API Testing
722
+
723
+ **Bad Test (Score: 50/100):**
724
+
725
+ ```typescript
726
+ test('api test', async ({ request }) => {
727
+ const response = await request.post('/api/users', {
728
+ data: { email: 'test@example.com' }, // Hard-coded (conflicts)
729
+ });
730
+
731
+ if (response.ok()) {
732
+ // Conditional
733
+ const user = await response.json();
734
+ // Weak assertion
735
+ expect(user).toBeTruthy();
736
+ }
737
+
738
+ // No cleanup - user left in database
739
+ });
740
+ ```
741
+
742
+ **Good Test (Score: 92/100):**
743
+
744
+ ```typescript
745
+ test('should create user with valid data', async ({ apiRequest }) => {
746
+ // Unique test data
747
+ const testEmail = `test-${Date.now()}@example.com`;
748
+
749
+ // Create user
750
+ const { status, body } = await apiRequest({
751
+ method: 'POST',
752
+ path: '/api/users',
753
+ body: { email: testEmail, name: 'Test User' },
754
+ });
755
+
756
+ // Explicit assertions
757
+ expect(status).toBe(201);
758
+ expect(body.id).toBeDefined();
759
+ expect(body.email).toBe(testEmail);
760
+ expect(body.name).toBe('Test User');
761
+
762
+ // Cleanup
763
+ await apiRequest({
764
+ method: 'DELETE',
765
+ path: `/api/users/${body.id}`,
766
+ });
767
+ });
768
+ ```
769
+
770
+ ## How TEA Enforces Standards
771
+
772
+ ### During Test Generation (`atdd`, `automate`)
773
+
774
+ TEA generates tests following standards by default:
775
+
776
+ ```typescript
777
+ // TEA-generated test (automatically follows standards)
778
+ test('should submit contact form', async ({ page }) => {
779
+ // Network-first pattern (no hard waits)
780
+ const submitPromise = page.waitForResponse((resp) => resp.url().includes('/api/contact') && resp.ok());
781
+
782
+ // Accessible selectors (resilient)
783
+ await page.getByLabel('Name').fill('Test User');
784
+ await page.getByLabel('Email').fill('test@example.com');
785
+ await page.getByLabel('Message').fill('Test message');
786
+ await page.getByRole('button', { name: 'Send' }).click();
787
+
788
+ const response = await submitPromise;
789
+ const result = await response.json();
790
+
791
+ // Explicit assertions
792
+ expect(result.success).toBe(true);
793
+ await expect(page.getByText('Message sent')).toBeVisible();
794
+
795
+ // Size: 15 lines (< 300 ✓)
796
+ // Execution: ~2 seconds (< 90s ✓)
797
+ });
798
+ ```
799
+
800
+ ### During Test Review (`test-review`)
801
+
802
+ TEA audits tests and flags violations:
803
+
804
+ ```markdown
805
+ ## Critical Issues
806
+
807
+ ### Hard Wait Detected (tests/login.spec.ts:23)
808
+
809
+ **Issue:** `await page.waitForTimeout(3000)`
810
+ **Score Impact:** -10 (Determinism)
811
+ **Fix:** Use network-first pattern
812
+
813
+ ### Conditional Flow Control (tests/profile.spec.ts:45)
814
+
815
+ **Issue:** `if (await page.locator('.banner').isVisible())`
816
+ **Score Impact:** -10 (Determinism)
817
+ **Fix:** Make banner presence deterministic
818
+
819
+ ## Recommendations
820
+
821
+ ### Extract Fixture (tests/auth.spec.ts)
822
+
823
+ **Issue:** Login code repeated 5 times
824
+ **Score Impact:** -3 (Structure)
825
+ **Fix:** Extract to authSession fixture
826
+ ```
827
+
828
+ ## Definition of Done Checklist
829
+
830
+ When is a test "done"?
831
+
832
+ **Test Quality DoD:**
833
+
834
+ - [ ] No hard waits (`waitForTimeout`)
835
+ - [ ] No conditionals for flow control
836
+ - [ ] No try-catch for flow control
837
+ - [ ] Network-first patterns used
838
+ - [ ] Assertions explicit in test body
839
+ - [ ] Test size < 300 lines
840
+ - [ ] Clear, descriptive test name
841
+ - [ ] Self-cleaning (cleanup in afterEach or test)
842
+ - [ ] Unique test data (no hard-coded values)
843
+ - [ ] Execution time < 1.5 minutes
844
+ - [ ] Can run in parallel
845
+ - [ ] Can run in any order
846
+
847
+ **Code Review DoD:**
848
+
849
+ - [ ] Test quality score > 80
850
+ - [ ] No critical issues from `test-review`
851
+ - [ ] Follows project patterns (fixtures, selectors)
852
+ - [ ] Test reviewed by team member
853
+
854
+ ## Common Quality Issues
855
+
856
+ ### Issue: "My test needs conditionals for optional elements"
857
+
858
+ **Wrong approach:**
859
+
860
+ ```typescript
861
+ if (await page.locator('.banner').isVisible()) {
862
+ await page.click('.dismiss');
863
+ }
864
+ ```
865
+
866
+ **Right approach - Make it deterministic:**
867
+
868
+ ```typescript
869
+ // Option 1: Always expect banner
870
+ await expect(page.locator('.banner')).toBeVisible();
871
+ await page.click('.dismiss');
872
+
873
+ // Option 2: Test both scenarios separately
874
+ test('should show banner for new users', ...);
875
+ test('should not show banner for returning users', ...);
876
+ ```
877
+
878
+ ### Issue: "My test needs try-catch for error handling"
879
+
880
+ **Wrong approach:**
881
+
882
+ ```typescript
883
+ try {
884
+ await page.click('#optional-button');
885
+ } catch (e) {
886
+ // Silently continue
887
+ }
888
+ ```
889
+
890
+ **Right approach - Make failures explicit:**
891
+
892
+ ```typescript
893
+ // Option 1: Button should exist
894
+ await page.click('#optional-button'); // Fails loudly if missing
895
+
896
+ // Option 2: Button might not exist (test both)
897
+ test('should work with optional button', async ({ page }) => {
898
+ const hasButton = (await page.locator('#optional-button').count()) > 0;
899
+ if (hasButton) {
900
+ await page.click('#optional-button');
901
+ }
902
+ // But now you're testing optional behavior explicitly
903
+ });
904
+ ```
905
+
906
+ ### Issue: "Hard waits are easier than network patterns"
907
+
908
+ **Short-term:** Hard waits seem simpler
909
+ **Long-term:** Flaky tests waste more time than learning network patterns
910
+
911
+ **Investment:**
912
+
913
+ - 30 minutes to learn network-first patterns
914
+ - Prevents hundreds of hours debugging flaky tests
915
+ - Tests run faster (no wasted waits)
916
+ - Team trusts test suite
917
+
918
+ ## Technical Implementation
919
+
920
+ For detailed test quality patterns, see:
921
+
922
+ - [Test Quality Fragment](/docs/reference/knowledge-base.md#quality-standards)
923
+ - [Test Levels Framework Fragment](/docs/reference/knowledge-base.md#quality-standards)
924
+ - [Complete Knowledge Base Index](/docs/reference/knowledge-base.md)
925
+
926
+ ## Related Concepts
927
+
928
+ **Core TEA Concepts:**
929
+
930
+ - [Risk-Based Testing](/docs/explanation/risk-based-testing.md) - Quality scales with risk
931
+ - [Knowledge Base System](/docs/explanation/knowledge-base-system.md) - How standards are enforced
932
+ - [Engagement Models](/docs/explanation/engagement-models.md) - Quality in different models
933
+
934
+ **Technical Patterns:**
935
+
936
+ - [Network-First Patterns](/docs/explanation/network-first-patterns.md) - Determinism explained
937
+ - [Fixture Architecture](/docs/explanation/fixture-architecture.md) - Isolation through fixtures
938
+
939
+ **Overview:**
940
+
941
+ - [TEA Overview](/docs/explanation/tea-overview.md) - Quality standards in lifecycle
942
+ - [Testing as Engineering](/docs/explanation/testing-as-engineering.md) - Why quality matters
943
+
944
+ ## Practical Guides
945
+
946
+ **Workflow Guides:**
947
+
948
+ - [How to Run Test Review](/docs/how-to/workflows/run-test-review.md) - Audit against these standards
949
+ - [How to Run ATDD](/docs/how-to/workflows/run-atdd.md) - Generate quality tests
950
+ - [How to Run Automate](/docs/how-to/workflows/run-automate.md) - Expand with quality
951
+
952
+ **Use-Case Guides:**
953
+
954
+ - [Using TEA with Existing Tests](/docs/how-to/brownfield/use-tea-with-existing-tests.md) - Improve legacy quality
955
+ - [Running TEA for Enterprise](/docs/how-to/brownfield/use-tea-for-enterprise.md) - Enterprise quality thresholds
956
+
957
+ ## Reference
958
+
959
+ - [TEA Command Reference](/docs/reference/commands.md) - `test-review` command
960
+ - [Knowledge Base Index](/docs/reference/knowledge-base.md) - Test quality fragment
961
+ - [Glossary](/docs/glossary/index.md#test-architect-tea-concepts) - TEA terminology
962
+
963
+ ---
964
+
965
+ Generated with [BMad Method](https://bmad-method.org) - TEA (Test Engineering Architect)