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,750 +1,750 @@
1
- # Feature Flag Governance
2
-
3
- ## Principle
4
-
5
- Feature flags enable controlled rollouts and A/B testing, but require disciplined testing governance. Centralize flag definitions in a frozen enum, test both enabled and disabled states, clean up targeting after each spec, and maintain a comprehensive flag lifecycle checklist. For LaunchDarkly-style systems, script API helpers to seed variations programmatically rather than manual UI mutations.
6
-
7
- ## Rationale
8
-
9
- Poorly managed feature flags become technical debt: untested variations ship broken code, forgotten flags clutter the codebase, and shared environments become unstable from leftover targeting rules. Structured governance ensures flags are testable, traceable, temporary, and safe. Testing both states prevents surprises when flags flip in production.
10
-
11
- ## Pattern Examples
12
-
13
- ### Example 1: Feature Flag Enum Pattern with Type Safety
14
-
15
- **Context**: Centralized flag management with TypeScript type safety and runtime validation.
16
-
17
- **Implementation**:
18
-
19
- ```typescript
20
- // src/utils/feature-flags.ts
21
- /**
22
- * Centralized feature flag definitions
23
- * - Object.freeze prevents runtime modifications
24
- * - TypeScript ensures compile-time type safety
25
- * - Single source of truth for all flag keys
26
- */
27
- export const FLAGS = Object.freeze({
28
- // User-facing features
29
- NEW_CHECKOUT_FLOW: 'new-checkout-flow',
30
- DARK_MODE: 'dark-mode',
31
- ENHANCED_SEARCH: 'enhanced-search',
32
-
33
- // Experiments
34
- PRICING_EXPERIMENT_A: 'pricing-experiment-a',
35
- HOMEPAGE_VARIANT_B: 'homepage-variant-b',
36
-
37
- // Infrastructure
38
- USE_NEW_API_ENDPOINT: 'use-new-api-endpoint',
39
- ENABLE_ANALYTICS_V2: 'enable-analytics-v2',
40
-
41
- // Killswitches (emergency disables)
42
- DISABLE_PAYMENT_PROCESSING: 'disable-payment-processing',
43
- DISABLE_EMAIL_NOTIFICATIONS: 'disable-email-notifications',
44
- } as const);
45
-
46
- /**
47
- * Type-safe flag keys
48
- * Prevents typos and ensures autocomplete in IDEs
49
- */
50
- export type FlagKey = (typeof FLAGS)[keyof typeof FLAGS];
51
-
52
- /**
53
- * Flag metadata for governance
54
- */
55
- type FlagMetadata = {
56
- key: FlagKey;
57
- name: string;
58
- owner: string;
59
- createdDate: string;
60
- expiryDate?: string;
61
- defaultState: boolean;
62
- requiresCleanup: boolean;
63
- dependencies?: FlagKey[];
64
- telemetryEvents?: string[];
65
- };
66
-
67
- /**
68
- * Flag registry with governance metadata
69
- * Used for flag lifecycle tracking and cleanup alerts
70
- */
71
- export const FLAG_REGISTRY: Record<FlagKey, FlagMetadata> = {
72
- [FLAGS.NEW_CHECKOUT_FLOW]: {
73
- key: FLAGS.NEW_CHECKOUT_FLOW,
74
- name: 'New Checkout Flow',
75
- owner: 'payments-team',
76
- createdDate: '2025-01-15',
77
- expiryDate: '2025-03-15',
78
- defaultState: false,
79
- requiresCleanup: true,
80
- dependencies: [FLAGS.USE_NEW_API_ENDPOINT],
81
- telemetryEvents: ['checkout_started', 'checkout_completed'],
82
- },
83
- [FLAGS.DARK_MODE]: {
84
- key: FLAGS.DARK_MODE,
85
- name: 'Dark Mode UI',
86
- owner: 'frontend-team',
87
- createdDate: '2025-01-10',
88
- defaultState: false,
89
- requiresCleanup: false, // Permanent feature toggle
90
- },
91
- // ... rest of registry
92
- };
93
-
94
- /**
95
- * Validate flag exists in registry
96
- * Throws at runtime if flag is unregistered
97
- */
98
- export function validateFlag(flag: string): asserts flag is FlagKey {
99
- if (!Object.values(FLAGS).includes(flag as FlagKey)) {
100
- throw new Error(`Unregistered feature flag: ${flag}`);
101
- }
102
- }
103
-
104
- /**
105
- * Check if flag is expired (needs removal)
106
- */
107
- export function isFlagExpired(flag: FlagKey): boolean {
108
- const metadata = FLAG_REGISTRY[flag];
109
- if (!metadata.expiryDate) return false;
110
-
111
- const expiry = new Date(metadata.expiryDate);
112
- return Date.now() > expiry.getTime();
113
- }
114
-
115
- /**
116
- * Get all expired flags requiring cleanup
117
- */
118
- export function getExpiredFlags(): FlagMetadata[] {
119
- return Object.values(FLAG_REGISTRY).filter((meta) => isFlagExpired(meta.key));
120
- }
121
- ```
122
-
123
- **Usage in application code**:
124
-
125
- ```typescript
126
- // components/Checkout.tsx
127
- import { FLAGS } from '@/utils/feature-flags';
128
- import { useFeatureFlag } from '@/hooks/useFeatureFlag';
129
-
130
- export function Checkout() {
131
- const isNewFlow = useFeatureFlag(FLAGS.NEW_CHECKOUT_FLOW);
132
-
133
- return isNewFlow ? <NewCheckoutFlow /> : <LegacyCheckoutFlow />;
134
- }
135
- ```
136
-
137
- **Key Points**:
138
-
139
- - **Type safety**: TypeScript catches typos at compile time
140
- - **Runtime validation**: validateFlag ensures only registered flags used
141
- - **Metadata tracking**: Owner, dates, dependencies documented
142
- - **Expiry alerts**: Automated detection of stale flags
143
- - **Single source of truth**: All flags defined in one place
144
-
145
- ---
146
-
147
- ### Example 2: Feature Flag Testing Pattern (Both States)
148
-
149
- **Context**: Comprehensive testing of feature flag variations with proper cleanup.
150
-
151
- **Implementation**:
152
-
153
- ```typescript
154
- // tests/e2e/checkout-feature-flag.spec.ts
155
- import { test, expect } from '@playwright/test';
156
- import { FLAGS } from '@/utils/feature-flags';
157
-
158
- /**
159
- * Feature Flag Testing Strategy:
160
- * 1. Test BOTH enabled and disabled states
161
- * 2. Clean up targeting after each test
162
- * 3. Use dedicated test users (not production data)
163
- * 4. Verify telemetry events fire correctly
164
- */
165
-
166
- test.describe('Checkout Flow - Feature Flag Variations', () => {
167
- let testUserId: string;
168
-
169
- test.beforeEach(async () => {
170
- // Generate unique test user ID
171
- testUserId = `test-user-${Date.now()}`;
172
- });
173
-
174
- test.afterEach(async ({ request }) => {
175
- // CRITICAL: Clean up flag targeting to prevent shared env pollution
176
- await request.post('/api/feature-flags/cleanup', {
177
- data: {
178
- flagKey: FLAGS.NEW_CHECKOUT_FLOW,
179
- userId: testUserId,
180
- },
181
- });
182
- });
183
-
184
- test('should use NEW checkout flow when flag is ENABLED', async ({ page, request }) => {
185
- // Arrange: Enable flag for test user
186
- await request.post('/api/feature-flags/target', {
187
- data: {
188
- flagKey: FLAGS.NEW_CHECKOUT_FLOW,
189
- userId: testUserId,
190
- variation: true, // ENABLED
191
- },
192
- });
193
-
194
- // Act: Navigate as targeted user
195
- await page.goto('/checkout', {
196
- extraHTTPHeaders: {
197
- 'X-Test-User-ID': testUserId,
198
- },
199
- });
200
-
201
- // Assert: New flow UI elements visible
202
- await expect(page.getByTestId('checkout-v2-container')).toBeVisible();
203
- await expect(page.getByTestId('express-payment-options')).toBeVisible();
204
- await expect(page.getByTestId('saved-addresses-dropdown')).toBeVisible();
205
-
206
- // Assert: Legacy flow NOT visible
207
- await expect(page.getByTestId('checkout-v1-container')).not.toBeVisible();
208
-
209
- // Assert: Telemetry event fired
210
- const analyticsEvents = await page.evaluate(() => (window as any).__ANALYTICS_EVENTS__ || []);
211
- expect(analyticsEvents).toContainEqual(
212
- expect.objectContaining({
213
- event: 'checkout_started',
214
- properties: expect.objectContaining({
215
- variant: 'new_flow',
216
- }),
217
- }),
218
- );
219
- });
220
-
221
- test('should use LEGACY checkout flow when flag is DISABLED', async ({ page, request }) => {
222
- // Arrange: Disable flag for test user (or don't target at all)
223
- await request.post('/api/feature-flags/target', {
224
- data: {
225
- flagKey: FLAGS.NEW_CHECKOUT_FLOW,
226
- userId: testUserId,
227
- variation: false, // DISABLED
228
- },
229
- });
230
-
231
- // Act: Navigate as targeted user
232
- await page.goto('/checkout', {
233
- extraHTTPHeaders: {
234
- 'X-Test-User-ID': testUserId,
235
- },
236
- });
237
-
238
- // Assert: Legacy flow UI elements visible
239
- await expect(page.getByTestId('checkout-v1-container')).toBeVisible();
240
- await expect(page.getByTestId('legacy-payment-form')).toBeVisible();
241
-
242
- // Assert: New flow NOT visible
243
- await expect(page.getByTestId('checkout-v2-container')).not.toBeVisible();
244
- await expect(page.getByTestId('express-payment-options')).not.toBeVisible();
245
-
246
- // Assert: Telemetry event fired with correct variant
247
- const analyticsEvents = await page.evaluate(() => (window as any).__ANALYTICS_EVENTS__ || []);
248
- expect(analyticsEvents).toContainEqual(
249
- expect.objectContaining({
250
- event: 'checkout_started',
251
- properties: expect.objectContaining({
252
- variant: 'legacy_flow',
253
- }),
254
- }),
255
- );
256
- });
257
-
258
- test('should handle flag evaluation errors gracefully', async ({ page, request }) => {
259
- // Arrange: Simulate flag service unavailable
260
- await page.route('**/api/feature-flags/evaluate', (route) => route.fulfill({ status: 500, body: 'Service Unavailable' }));
261
-
262
- // Act: Navigate (should fallback to default state)
263
- await page.goto('/checkout', {
264
- extraHTTPHeaders: {
265
- 'X-Test-User-ID': testUserId,
266
- },
267
- });
268
-
269
- // Assert: Fallback to safe default (legacy flow)
270
- await expect(page.getByTestId('checkout-v1-container')).toBeVisible();
271
-
272
- // Assert: Error logged but no user-facing error
273
- const consoleErrors = [];
274
- page.on('console', (msg) => {
275
- if (msg.type() === 'error') consoleErrors.push(msg.text());
276
- });
277
- expect(consoleErrors).toContain(expect.stringContaining('Feature flag evaluation failed'));
278
- });
279
- });
280
- ```
281
-
282
- **Cypress equivalent**:
283
-
284
- ```javascript
285
- // cypress/e2e/checkout-feature-flag.cy.ts
286
- import { FLAGS } from '@/utils/feature-flags';
287
-
288
- describe('Checkout Flow - Feature Flag Variations', () => {
289
- let testUserId;
290
-
291
- beforeEach(() => {
292
- testUserId = `test-user-${Date.now()}`;
293
- });
294
-
295
- afterEach(() => {
296
- // Clean up targeting
297
- cy.task('removeFeatureFlagTarget', {
298
- flagKey: FLAGS.NEW_CHECKOUT_FLOW,
299
- userId: testUserId,
300
- });
301
- });
302
-
303
- it('should use NEW checkout flow when flag is ENABLED', () => {
304
- // Arrange: Enable flag via Cypress task
305
- cy.task('setFeatureFlagVariation', {
306
- flagKey: FLAGS.NEW_CHECKOUT_FLOW,
307
- userId: testUserId,
308
- variation: true,
309
- });
310
-
311
- // Act
312
- cy.visit('/checkout', {
313
- headers: { 'X-Test-User-ID': testUserId },
314
- });
315
-
316
- // Assert
317
- cy.get('[data-testid="checkout-v2-container"]').should('be.visible');
318
- cy.get('[data-testid="checkout-v1-container"]').should('not.exist');
319
- });
320
-
321
- it('should use LEGACY checkout flow when flag is DISABLED', () => {
322
- // Arrange: Disable flag
323
- cy.task('setFeatureFlagVariation', {
324
- flagKey: FLAGS.NEW_CHECKOUT_FLOW,
325
- userId: testUserId,
326
- variation: false,
327
- });
328
-
329
- // Act
330
- cy.visit('/checkout', {
331
- headers: { 'X-Test-User-ID': testUserId },
332
- });
333
-
334
- // Assert
335
- cy.get('[data-testid="checkout-v1-container"]').should('be.visible');
336
- cy.get('[data-testid="checkout-v2-container"]').should('not.exist');
337
- });
338
- });
339
- ```
340
-
341
- **Key Points**:
342
-
343
- - **Test both states**: Enabled AND disabled variations
344
- - **Automatic cleanup**: afterEach removes targeting (prevent pollution)
345
- - **Unique test users**: Avoid conflicts with real user data
346
- - **Telemetry validation**: Verify analytics events fire correctly
347
- - **Graceful degradation**: Test fallback behavior on errors
348
-
349
- ---
350
-
351
- ### Example 3: Feature Flag Targeting Helper Pattern
352
-
353
- **Context**: Reusable helpers for programmatic flag control via LaunchDarkly/Split.io API.
354
-
355
- **Implementation**:
356
-
357
- ```typescript
358
- // tests/support/feature-flag-helpers.ts
359
- import { request as playwrightRequest } from '@playwright/test';
360
- import { FLAGS, FlagKey } from '@/utils/feature-flags';
361
-
362
- /**
363
- * LaunchDarkly API client configuration
364
- * Use test project SDK key (NOT production)
365
- */
366
- const LD_SDK_KEY = process.env.LD_SDK_KEY_TEST;
367
- const LD_API_BASE = 'https://app.launchdarkly.com/api/v2';
368
-
369
- type FlagVariation = boolean | string | number | object;
370
-
371
- /**
372
- * Set flag variation for specific user
373
- * Uses LaunchDarkly API to create user target
374
- */
375
- export async function setFlagForUser(flagKey: FlagKey, userId: string, variation: FlagVariation): Promise<void> {
376
- const response = await playwrightRequest.newContext().then((ctx) =>
377
- ctx.post(`${LD_API_BASE}/flags/${flagKey}/targeting`, {
378
- headers: {
379
- Authorization: LD_SDK_KEY!,
380
- 'Content-Type': 'application/json',
381
- },
382
- data: {
383
- targets: [
384
- {
385
- values: [userId],
386
- variation: variation ? 1 : 0, // 0 = off, 1 = on
387
- },
388
- ],
389
- },
390
- }),
391
- );
392
-
393
- if (!response.ok()) {
394
- throw new Error(`Failed to set flag ${flagKey} for user ${userId}: ${response.status()}`);
395
- }
396
- }
397
-
398
- /**
399
- * Remove user from flag targeting
400
- * CRITICAL for test cleanup
401
- */
402
- export async function removeFlagTarget(flagKey: FlagKey, userId: string): Promise<void> {
403
- const response = await playwrightRequest.newContext().then((ctx) =>
404
- ctx.delete(`${LD_API_BASE}/flags/${flagKey}/targeting/users/${userId}`, {
405
- headers: {
406
- Authorization: LD_SDK_KEY!,
407
- },
408
- }),
409
- );
410
-
411
- if (!response.ok() && response.status() !== 404) {
412
- // 404 is acceptable (user wasn't targeted)
413
- throw new Error(`Failed to remove flag ${flagKey} target for user ${userId}: ${response.status()}`);
414
- }
415
- }
416
-
417
- /**
418
- * Percentage rollout helper
419
- * Enable flag for N% of users
420
- */
421
- export async function setFlagRolloutPercentage(flagKey: FlagKey, percentage: number): Promise<void> {
422
- if (percentage < 0 || percentage > 100) {
423
- throw new Error('Percentage must be between 0 and 100');
424
- }
425
-
426
- const response = await playwrightRequest.newContext().then((ctx) =>
427
- ctx.patch(`${LD_API_BASE}/flags/${flagKey}`, {
428
- headers: {
429
- Authorization: LD_SDK_KEY!,
430
- 'Content-Type': 'application/json',
431
- },
432
- data: {
433
- rollout: {
434
- variations: [
435
- { variation: 0, weight: 100 - percentage }, // off
436
- { variation: 1, weight: percentage }, // on
437
- ],
438
- },
439
- },
440
- }),
441
- );
442
-
443
- if (!response.ok()) {
444
- throw new Error(`Failed to set rollout for flag ${flagKey}: ${response.status()}`);
445
- }
446
- }
447
-
448
- /**
449
- * Enable flag globally (100% rollout)
450
- */
451
- export async function enableFlagGlobally(flagKey: FlagKey): Promise<void> {
452
- await setFlagRolloutPercentage(flagKey, 100);
453
- }
454
-
455
- /**
456
- * Disable flag globally (0% rollout)
457
- */
458
- export async function disableFlagGlobally(flagKey: FlagKey): Promise<void> {
459
- await setFlagRolloutPercentage(flagKey, 0);
460
- }
461
-
462
- /**
463
- * Stub feature flags in local/test environments
464
- * Bypasses LaunchDarkly entirely
465
- */
466
- export function stubFeatureFlags(flags: Record<FlagKey, FlagVariation>): void {
467
- // Set flags in localStorage or inject into window
468
- if (typeof window !== 'undefined') {
469
- (window as any).__STUBBED_FLAGS__ = flags;
470
- }
471
- }
472
- ```
473
-
474
- **Usage in Playwright fixture**:
475
-
476
- ```typescript
477
- // playwright/fixtures/feature-flag-fixture.ts
478
- import { test as base } from '@playwright/test';
479
- import { setFlagForUser, removeFlagTarget } from '../support/feature-flag-helpers';
480
- import { FlagKey } from '@/utils/feature-flags';
481
-
482
- type FeatureFlagFixture = {
483
- featureFlags: {
484
- enable: (flag: FlagKey, userId: string) => Promise<void>;
485
- disable: (flag: FlagKey, userId: string) => Promise<void>;
486
- cleanup: (flag: FlagKey, userId: string) => Promise<void>;
487
- };
488
- };
489
-
490
- export const test = base.extend<FeatureFlagFixture>({
491
- featureFlags: async ({}, use) => {
492
- const cleanupQueue: Array<{ flag: FlagKey; userId: string }> = [];
493
-
494
- await use({
495
- enable: async (flag, userId) => {
496
- await setFlagForUser(flag, userId, true);
497
- cleanupQueue.push({ flag, userId });
498
- },
499
- disable: async (flag, userId) => {
500
- await setFlagForUser(flag, userId, false);
501
- cleanupQueue.push({ flag, userId });
502
- },
503
- cleanup: async (flag, userId) => {
504
- await removeFlagTarget(flag, userId);
505
- },
506
- });
507
-
508
- // Auto-cleanup after test
509
- for (const { flag, userId } of cleanupQueue) {
510
- await removeFlagTarget(flag, userId);
511
- }
512
- },
513
- });
514
- ```
515
-
516
- **Key Points**:
517
-
518
- - **API-driven control**: No manual UI clicks required
519
- - **Auto-cleanup**: Fixture tracks and removes targeting
520
- - **Percentage rollouts**: Test gradual feature releases
521
- - **Stubbing option**: Local development without LaunchDarkly
522
- - **Type-safe**: FlagKey prevents typos
523
-
524
- ---
525
-
526
- ### Example 4: Feature Flag Lifecycle Checklist & Cleanup Strategy
527
-
528
- **Context**: Governance checklist and automated cleanup detection for stale flags.
529
-
530
- **Implementation**:
531
-
532
- ```typescript
533
- // scripts/feature-flag-audit.ts
534
- /**
535
- * Feature Flag Lifecycle Audit Script
536
- * Run weekly to detect stale flags requiring cleanup
537
- */
538
-
539
- import { FLAG_REGISTRY, FLAGS, getExpiredFlags, FlagKey } from '../src/utils/feature-flags';
540
- import * as fs from 'fs';
541
- import * as path from 'path';
542
-
543
- type AuditResult = {
544
- totalFlags: number;
545
- expiredFlags: FlagKey[];
546
- missingOwners: FlagKey[];
547
- missingDates: FlagKey[];
548
- permanentFlags: FlagKey[];
549
- flagsNearingExpiry: FlagKey[];
550
- };
551
-
552
- /**
553
- * Audit all feature flags for governance compliance
554
- */
555
- function auditFeatureFlags(): AuditResult {
556
- const allFlags = Object.keys(FLAG_REGISTRY) as FlagKey[];
557
- const expiredFlags = getExpiredFlags().map((meta) => meta.key);
558
-
559
- // Flags expiring in next 30 days
560
- const thirtyDaysFromNow = Date.now() + 30 * 24 * 60 * 60 * 1000;
561
- const flagsNearingExpiry = allFlags.filter((flag) => {
562
- const meta = FLAG_REGISTRY[flag];
563
- if (!meta.expiryDate) return false;
564
- const expiry = new Date(meta.expiryDate).getTime();
565
- return expiry > Date.now() && expiry < thirtyDaysFromNow;
566
- });
567
-
568
- // Missing metadata
569
- const missingOwners = allFlags.filter((flag) => !FLAG_REGISTRY[flag].owner);
570
- const missingDates = allFlags.filter((flag) => !FLAG_REGISTRY[flag].createdDate);
571
-
572
- // Permanent flags (no expiry, requiresCleanup = false)
573
- const permanentFlags = allFlags.filter((flag) => {
574
- const meta = FLAG_REGISTRY[flag];
575
- return !meta.expiryDate && !meta.requiresCleanup;
576
- });
577
-
578
- return {
579
- totalFlags: allFlags.length,
580
- expiredFlags,
581
- missingOwners,
582
- missingDates,
583
- permanentFlags,
584
- flagsNearingExpiry,
585
- };
586
- }
587
-
588
- /**
589
- * Generate markdown report
590
- */
591
- function generateReport(audit: AuditResult): string {
592
- let report = `# Feature Flag Audit Report\n\n`;
593
- report += `**Date**: ${new Date().toISOString()}\n`;
594
- report += `**Total Flags**: ${audit.totalFlags}\n\n`;
595
-
596
- if (audit.expiredFlags.length > 0) {
597
- report += `## ⚠️ EXPIRED FLAGS - IMMEDIATE CLEANUP REQUIRED\n\n`;
598
- audit.expiredFlags.forEach((flag) => {
599
- const meta = FLAG_REGISTRY[flag];
600
- report += `- **${meta.name}** (\`${flag}\`)\n`;
601
- report += ` - Owner: ${meta.owner}\n`;
602
- report += ` - Expired: ${meta.expiryDate}\n`;
603
- report += ` - Action: Remove flag code, update tests, deploy\n\n`;
604
- });
605
- }
606
-
607
- if (audit.flagsNearingExpiry.length > 0) {
608
- report += `## ⏰ FLAGS EXPIRING SOON (Next 30 Days)\n\n`;
609
- audit.flagsNearingExpiry.forEach((flag) => {
610
- const meta = FLAG_REGISTRY[flag];
611
- report += `- **${meta.name}** (\`${flag}\`)\n`;
612
- report += ` - Owner: ${meta.owner}\n`;
613
- report += ` - Expires: ${meta.expiryDate}\n`;
614
- report += ` - Action: Plan cleanup or extend expiry\n\n`;
615
- });
616
- }
617
-
618
- if (audit.permanentFlags.length > 0) {
619
- report += `## 🔄 PERMANENT FLAGS (No Expiry)\n\n`;
620
- audit.permanentFlags.forEach((flag) => {
621
- const meta = FLAG_REGISTRY[flag];
622
- report += `- **${meta.name}** (\`${flag}\`) - Owner: ${meta.owner}\n`;
623
- });
624
- report += `\n`;
625
- }
626
-
627
- if (audit.missingOwners.length > 0 || audit.missingDates.length > 0) {
628
- report += `## ❌ GOVERNANCE ISSUES\n\n`;
629
- if (audit.missingOwners.length > 0) {
630
- report += `**Missing Owners**: ${audit.missingOwners.join(', ')}\n`;
631
- }
632
- if (audit.missingDates.length > 0) {
633
- report += `**Missing Created Dates**: ${audit.missingDates.join(', ')}\n`;
634
- }
635
- report += `\n`;
636
- }
637
-
638
- return report;
639
- }
640
-
641
- /**
642
- * Feature Flag Lifecycle Checklist
643
- */
644
- const FLAG_LIFECYCLE_CHECKLIST = `
645
- # Feature Flag Lifecycle Checklist
646
-
647
- ## Before Creating a New Flag
648
-
649
- - [ ] **Name**: Follow naming convention (kebab-case, descriptive)
650
- - [ ] **Owner**: Assign team/individual responsible
651
- - [ ] **Default State**: Determine safe default (usually false)
652
- - [ ] **Expiry Date**: Set removal date (30-90 days typical)
653
- - [ ] **Dependencies**: Document related flags
654
- - [ ] **Telemetry**: Plan analytics events to track
655
- - [ ] **Rollback Plan**: Define how to disable quickly
656
-
657
- ## During Development
658
-
659
- - [ ] **Code Paths**: Both enabled/disabled states implemented
660
- - [ ] **Tests**: Both variations tested in CI
661
- - [ ] **Documentation**: Flag purpose documented in code/PR
662
- - [ ] **Telemetry**: Analytics events instrumented
663
- - [ ] **Error Handling**: Graceful degradation on flag service failure
664
-
665
- ## Before Launch
666
-
667
- - [ ] **QA**: Both states tested in staging
668
- - [ ] **Rollout Plan**: Gradual rollout percentage defined
669
- - [ ] **Monitoring**: Dashboards/alerts for flag-related metrics
670
- - [ ] **Stakeholder Communication**: Product/design aligned
671
-
672
- ## After Launch (Monitoring)
673
-
674
- - [ ] **Metrics**: Success criteria tracked
675
- - [ ] **Error Rates**: No increase in errors
676
- - [ ] **Performance**: No degradation
677
- - [ ] **User Feedback**: Qualitative data collected
678
-
679
- ## Cleanup (Post-Launch)
680
-
681
- - [ ] **Remove Flag Code**: Delete if/else branches
682
- - [ ] **Update Tests**: Remove flag-specific tests
683
- - [ ] **Remove Targeting**: Clear all user targets
684
- - [ ] **Delete Flag Config**: Remove from LaunchDarkly/registry
685
- - [ ] **Update Documentation**: Remove references
686
- - [ ] **Deploy**: Ship cleanup changes
687
- `;
688
-
689
- // Run audit
690
- const audit = auditFeatureFlags();
691
- const report = generateReport(audit);
692
-
693
- // Save report
694
- const outputPath = path.join(__dirname, '../feature-flag-audit-report.md');
695
- fs.writeFileSync(outputPath, report);
696
- fs.writeFileSync(path.join(__dirname, '../FEATURE-FLAG-CHECKLIST.md'), FLAG_LIFECYCLE_CHECKLIST);
697
-
698
- console.log(`✅ Audit complete. Report saved to: ${outputPath}`);
699
- console.log(`Total flags: ${audit.totalFlags}`);
700
- console.log(`Expired flags: ${audit.expiredFlags.length}`);
701
- console.log(`Flags expiring soon: ${audit.flagsNearingExpiry.length}`);
702
-
703
- // Exit with error if expired flags exist
704
- if (audit.expiredFlags.length > 0) {
705
- console.error(`\n❌ EXPIRED FLAGS DETECTED - CLEANUP REQUIRED`);
706
- process.exit(1);
707
- }
708
- ```
709
-
710
- **package.json scripts**:
711
-
712
- ```json
713
- {
714
- "scripts": {
715
- "feature-flags:audit": "ts-node scripts/feature-flag-audit.ts",
716
- "feature-flags:audit:ci": "npm run feature-flags:audit || true"
717
- }
718
- }
719
- ```
720
-
721
- **Key Points**:
722
-
723
- - **Automated detection**: Weekly audit catches stale flags
724
- - **Lifecycle checklist**: Comprehensive governance guide
725
- - **Expiry tracking**: Flags auto-expire after defined date
726
- - **CI integration**: Audit runs in pipeline, warns on expiry
727
- - **Ownership clarity**: Every flag has assigned owner
728
-
729
- ---
730
-
731
- ## Feature Flag Testing Checklist
732
-
733
- Before merging flag-related code, verify:
734
-
735
- - [ ] **Both states tested**: Enabled AND disabled variations covered
736
- - [ ] **Cleanup automated**: afterEach removes targeting (no manual cleanup)
737
- - [ ] **Unique test data**: Test users don't collide with production
738
- - [ ] **Telemetry validated**: Analytics events fire for both variations
739
- - [ ] **Error handling**: Graceful fallback when flag service unavailable
740
- - [ ] **Flag metadata**: Owner, dates, dependencies documented in registry
741
- - [ ] **Rollback plan**: Clear steps to disable flag in production
742
- - [ ] **Expiry date set**: Removal date defined (or marked permanent)
743
-
744
- ## Integration Points
745
-
746
- - Used in workflows: `*automate` (test generation), `*framework` (flag setup)
747
- - Related fragments: `test-quality.md`, `selective-testing.md`
748
- - Flag services: LaunchDarkly, Split.io, Unleash, custom implementations
749
-
750
- _Source: LaunchDarkly strategy blog, Murat test architecture notes, enterprise feature flag governance_
1
+ # Feature Flag Governance
2
+
3
+ ## Principle
4
+
5
+ Feature flags enable controlled rollouts and A/B testing, but require disciplined testing governance. Centralize flag definitions in a frozen enum, test both enabled and disabled states, clean up targeting after each spec, and maintain a comprehensive flag lifecycle checklist. For LaunchDarkly-style systems, script API helpers to seed variations programmatically rather than manual UI mutations.
6
+
7
+ ## Rationale
8
+
9
+ Poorly managed feature flags become technical debt: untested variations ship broken code, forgotten flags clutter the codebase, and shared environments become unstable from leftover targeting rules. Structured governance ensures flags are testable, traceable, temporary, and safe. Testing both states prevents surprises when flags flip in production.
10
+
11
+ ## Pattern Examples
12
+
13
+ ### Example 1: Feature Flag Enum Pattern with Type Safety
14
+
15
+ **Context**: Centralized flag management with TypeScript type safety and runtime validation.
16
+
17
+ **Implementation**:
18
+
19
+ ```typescript
20
+ // src/utils/feature-flags.ts
21
+ /**
22
+ * Centralized feature flag definitions
23
+ * - Object.freeze prevents runtime modifications
24
+ * - TypeScript ensures compile-time type safety
25
+ * - Single source of truth for all flag keys
26
+ */
27
+ export const FLAGS = Object.freeze({
28
+ // User-facing features
29
+ NEW_CHECKOUT_FLOW: 'new-checkout-flow',
30
+ DARK_MODE: 'dark-mode',
31
+ ENHANCED_SEARCH: 'enhanced-search',
32
+
33
+ // Experiments
34
+ PRICING_EXPERIMENT_A: 'pricing-experiment-a',
35
+ HOMEPAGE_VARIANT_B: 'homepage-variant-b',
36
+
37
+ // Infrastructure
38
+ USE_NEW_API_ENDPOINT: 'use-new-api-endpoint',
39
+ ENABLE_ANALYTICS_V2: 'enable-analytics-v2',
40
+
41
+ // Killswitches (emergency disables)
42
+ DISABLE_PAYMENT_PROCESSING: 'disable-payment-processing',
43
+ DISABLE_EMAIL_NOTIFICATIONS: 'disable-email-notifications',
44
+ } as const);
45
+
46
+ /**
47
+ * Type-safe flag keys
48
+ * Prevents typos and ensures autocomplete in IDEs
49
+ */
50
+ export type FlagKey = (typeof FLAGS)[keyof typeof FLAGS];
51
+
52
+ /**
53
+ * Flag metadata for governance
54
+ */
55
+ type FlagMetadata = {
56
+ key: FlagKey;
57
+ name: string;
58
+ owner: string;
59
+ createdDate: string;
60
+ expiryDate?: string;
61
+ defaultState: boolean;
62
+ requiresCleanup: boolean;
63
+ dependencies?: FlagKey[];
64
+ telemetryEvents?: string[];
65
+ };
66
+
67
+ /**
68
+ * Flag registry with governance metadata
69
+ * Used for flag lifecycle tracking and cleanup alerts
70
+ */
71
+ export const FLAG_REGISTRY: Record<FlagKey, FlagMetadata> = {
72
+ [FLAGS.NEW_CHECKOUT_FLOW]: {
73
+ key: FLAGS.NEW_CHECKOUT_FLOW,
74
+ name: 'New Checkout Flow',
75
+ owner: 'payments-team',
76
+ createdDate: '2025-01-15',
77
+ expiryDate: '2025-03-15',
78
+ defaultState: false,
79
+ requiresCleanup: true,
80
+ dependencies: [FLAGS.USE_NEW_API_ENDPOINT],
81
+ telemetryEvents: ['checkout_started', 'checkout_completed'],
82
+ },
83
+ [FLAGS.DARK_MODE]: {
84
+ key: FLAGS.DARK_MODE,
85
+ name: 'Dark Mode UI',
86
+ owner: 'frontend-team',
87
+ createdDate: '2025-01-10',
88
+ defaultState: false,
89
+ requiresCleanup: false, // Permanent feature toggle
90
+ },
91
+ // ... rest of registry
92
+ };
93
+
94
+ /**
95
+ * Validate flag exists in registry
96
+ * Throws at runtime if flag is unregistered
97
+ */
98
+ export function validateFlag(flag: string): asserts flag is FlagKey {
99
+ if (!Object.values(FLAGS).includes(flag as FlagKey)) {
100
+ throw new Error(`Unregistered feature flag: ${flag}`);
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Check if flag is expired (needs removal)
106
+ */
107
+ export function isFlagExpired(flag: FlagKey): boolean {
108
+ const metadata = FLAG_REGISTRY[flag];
109
+ if (!metadata.expiryDate) return false;
110
+
111
+ const expiry = new Date(metadata.expiryDate);
112
+ return Date.now() > expiry.getTime();
113
+ }
114
+
115
+ /**
116
+ * Get all expired flags requiring cleanup
117
+ */
118
+ export function getExpiredFlags(): FlagMetadata[] {
119
+ return Object.values(FLAG_REGISTRY).filter((meta) => isFlagExpired(meta.key));
120
+ }
121
+ ```
122
+
123
+ **Usage in application code**:
124
+
125
+ ```typescript
126
+ // components/Checkout.tsx
127
+ import { FLAGS } from '@/utils/feature-flags';
128
+ import { useFeatureFlag } from '@/hooks/useFeatureFlag';
129
+
130
+ export function Checkout() {
131
+ const isNewFlow = useFeatureFlag(FLAGS.NEW_CHECKOUT_FLOW);
132
+
133
+ return isNewFlow ? <NewCheckoutFlow /> : <LegacyCheckoutFlow />;
134
+ }
135
+ ```
136
+
137
+ **Key Points**:
138
+
139
+ - **Type safety**: TypeScript catches typos at compile time
140
+ - **Runtime validation**: validateFlag ensures only registered flags used
141
+ - **Metadata tracking**: Owner, dates, dependencies documented
142
+ - **Expiry alerts**: Automated detection of stale flags
143
+ - **Single source of truth**: All flags defined in one place
144
+
145
+ ---
146
+
147
+ ### Example 2: Feature Flag Testing Pattern (Both States)
148
+
149
+ **Context**: Comprehensive testing of feature flag variations with proper cleanup.
150
+
151
+ **Implementation**:
152
+
153
+ ```typescript
154
+ // tests/e2e/checkout-feature-flag.spec.ts
155
+ import { test, expect } from '@playwright/test';
156
+ import { FLAGS } from '@/utils/feature-flags';
157
+
158
+ /**
159
+ * Feature Flag Testing Strategy:
160
+ * 1. Test BOTH enabled and disabled states
161
+ * 2. Clean up targeting after each test
162
+ * 3. Use dedicated test users (not production data)
163
+ * 4. Verify telemetry events fire correctly
164
+ */
165
+
166
+ test.describe('Checkout Flow - Feature Flag Variations', () => {
167
+ let testUserId: string;
168
+
169
+ test.beforeEach(async () => {
170
+ // Generate unique test user ID
171
+ testUserId = `test-user-${Date.now()}`;
172
+ });
173
+
174
+ test.afterEach(async ({ request }) => {
175
+ // CRITICAL: Clean up flag targeting to prevent shared env pollution
176
+ await request.post('/api/feature-flags/cleanup', {
177
+ data: {
178
+ flagKey: FLAGS.NEW_CHECKOUT_FLOW,
179
+ userId: testUserId,
180
+ },
181
+ });
182
+ });
183
+
184
+ test('should use NEW checkout flow when flag is ENABLED', async ({ page, request }) => {
185
+ // Arrange: Enable flag for test user
186
+ await request.post('/api/feature-flags/target', {
187
+ data: {
188
+ flagKey: FLAGS.NEW_CHECKOUT_FLOW,
189
+ userId: testUserId,
190
+ variation: true, // ENABLED
191
+ },
192
+ });
193
+
194
+ // Act: Navigate as targeted user
195
+ await page.goto('/checkout', {
196
+ extraHTTPHeaders: {
197
+ 'X-Test-User-ID': testUserId,
198
+ },
199
+ });
200
+
201
+ // Assert: New flow UI elements visible
202
+ await expect(page.getByTestId('checkout-v2-container')).toBeVisible();
203
+ await expect(page.getByTestId('express-payment-options')).toBeVisible();
204
+ await expect(page.getByTestId('saved-addresses-dropdown')).toBeVisible();
205
+
206
+ // Assert: Legacy flow NOT visible
207
+ await expect(page.getByTestId('checkout-v1-container')).not.toBeVisible();
208
+
209
+ // Assert: Telemetry event fired
210
+ const analyticsEvents = await page.evaluate(() => (window as any).__ANALYTICS_EVENTS__ || []);
211
+ expect(analyticsEvents).toContainEqual(
212
+ expect.objectContaining({
213
+ event: 'checkout_started',
214
+ properties: expect.objectContaining({
215
+ variant: 'new_flow',
216
+ }),
217
+ }),
218
+ );
219
+ });
220
+
221
+ test('should use LEGACY checkout flow when flag is DISABLED', async ({ page, request }) => {
222
+ // Arrange: Disable flag for test user (or don't target at all)
223
+ await request.post('/api/feature-flags/target', {
224
+ data: {
225
+ flagKey: FLAGS.NEW_CHECKOUT_FLOW,
226
+ userId: testUserId,
227
+ variation: false, // DISABLED
228
+ },
229
+ });
230
+
231
+ // Act: Navigate as targeted user
232
+ await page.goto('/checkout', {
233
+ extraHTTPHeaders: {
234
+ 'X-Test-User-ID': testUserId,
235
+ },
236
+ });
237
+
238
+ // Assert: Legacy flow UI elements visible
239
+ await expect(page.getByTestId('checkout-v1-container')).toBeVisible();
240
+ await expect(page.getByTestId('legacy-payment-form')).toBeVisible();
241
+
242
+ // Assert: New flow NOT visible
243
+ await expect(page.getByTestId('checkout-v2-container')).not.toBeVisible();
244
+ await expect(page.getByTestId('express-payment-options')).not.toBeVisible();
245
+
246
+ // Assert: Telemetry event fired with correct variant
247
+ const analyticsEvents = await page.evaluate(() => (window as any).__ANALYTICS_EVENTS__ || []);
248
+ expect(analyticsEvents).toContainEqual(
249
+ expect.objectContaining({
250
+ event: 'checkout_started',
251
+ properties: expect.objectContaining({
252
+ variant: 'legacy_flow',
253
+ }),
254
+ }),
255
+ );
256
+ });
257
+
258
+ test('should handle flag evaluation errors gracefully', async ({ page, request }) => {
259
+ // Arrange: Simulate flag service unavailable
260
+ await page.route('**/api/feature-flags/evaluate', (route) => route.fulfill({ status: 500, body: 'Service Unavailable' }));
261
+
262
+ // Act: Navigate (should fallback to default state)
263
+ await page.goto('/checkout', {
264
+ extraHTTPHeaders: {
265
+ 'X-Test-User-ID': testUserId,
266
+ },
267
+ });
268
+
269
+ // Assert: Fallback to safe default (legacy flow)
270
+ await expect(page.getByTestId('checkout-v1-container')).toBeVisible();
271
+
272
+ // Assert: Error logged but no user-facing error
273
+ const consoleErrors = [];
274
+ page.on('console', (msg) => {
275
+ if (msg.type() === 'error') consoleErrors.push(msg.text());
276
+ });
277
+ expect(consoleErrors).toContain(expect.stringContaining('Feature flag evaluation failed'));
278
+ });
279
+ });
280
+ ```
281
+
282
+ **Cypress equivalent**:
283
+
284
+ ```javascript
285
+ // cypress/e2e/checkout-feature-flag.cy.ts
286
+ import { FLAGS } from '@/utils/feature-flags';
287
+
288
+ describe('Checkout Flow - Feature Flag Variations', () => {
289
+ let testUserId;
290
+
291
+ beforeEach(() => {
292
+ testUserId = `test-user-${Date.now()}`;
293
+ });
294
+
295
+ afterEach(() => {
296
+ // Clean up targeting
297
+ cy.task('removeFeatureFlagTarget', {
298
+ flagKey: FLAGS.NEW_CHECKOUT_FLOW,
299
+ userId: testUserId,
300
+ });
301
+ });
302
+
303
+ it('should use NEW checkout flow when flag is ENABLED', () => {
304
+ // Arrange: Enable flag via Cypress task
305
+ cy.task('setFeatureFlagVariation', {
306
+ flagKey: FLAGS.NEW_CHECKOUT_FLOW,
307
+ userId: testUserId,
308
+ variation: true,
309
+ });
310
+
311
+ // Act
312
+ cy.visit('/checkout', {
313
+ headers: { 'X-Test-User-ID': testUserId },
314
+ });
315
+
316
+ // Assert
317
+ cy.get('[data-testid="checkout-v2-container"]').should('be.visible');
318
+ cy.get('[data-testid="checkout-v1-container"]').should('not.exist');
319
+ });
320
+
321
+ it('should use LEGACY checkout flow when flag is DISABLED', () => {
322
+ // Arrange: Disable flag
323
+ cy.task('setFeatureFlagVariation', {
324
+ flagKey: FLAGS.NEW_CHECKOUT_FLOW,
325
+ userId: testUserId,
326
+ variation: false,
327
+ });
328
+
329
+ // Act
330
+ cy.visit('/checkout', {
331
+ headers: { 'X-Test-User-ID': testUserId },
332
+ });
333
+
334
+ // Assert
335
+ cy.get('[data-testid="checkout-v1-container"]').should('be.visible');
336
+ cy.get('[data-testid="checkout-v2-container"]').should('not.exist');
337
+ });
338
+ });
339
+ ```
340
+
341
+ **Key Points**:
342
+
343
+ - **Test both states**: Enabled AND disabled variations
344
+ - **Automatic cleanup**: afterEach removes targeting (prevent pollution)
345
+ - **Unique test users**: Avoid conflicts with real user data
346
+ - **Telemetry validation**: Verify analytics events fire correctly
347
+ - **Graceful degradation**: Test fallback behavior on errors
348
+
349
+ ---
350
+
351
+ ### Example 3: Feature Flag Targeting Helper Pattern
352
+
353
+ **Context**: Reusable helpers for programmatic flag control via LaunchDarkly/Split.io API.
354
+
355
+ **Implementation**:
356
+
357
+ ```typescript
358
+ // tests/support/feature-flag-helpers.ts
359
+ import { request as playwrightRequest } from '@playwright/test';
360
+ import { FLAGS, FlagKey } from '@/utils/feature-flags';
361
+
362
+ /**
363
+ * LaunchDarkly API client configuration
364
+ * Use test project SDK key (NOT production)
365
+ */
366
+ const LD_SDK_KEY = process.env.LD_SDK_KEY_TEST;
367
+ const LD_API_BASE = 'https://app.launchdarkly.com/api/v2';
368
+
369
+ type FlagVariation = boolean | string | number | object;
370
+
371
+ /**
372
+ * Set flag variation for specific user
373
+ * Uses LaunchDarkly API to create user target
374
+ */
375
+ export async function setFlagForUser(flagKey: FlagKey, userId: string, variation: FlagVariation): Promise<void> {
376
+ const response = await playwrightRequest.newContext().then((ctx) =>
377
+ ctx.post(`${LD_API_BASE}/flags/${flagKey}/targeting`, {
378
+ headers: {
379
+ Authorization: LD_SDK_KEY!,
380
+ 'Content-Type': 'application/json',
381
+ },
382
+ data: {
383
+ targets: [
384
+ {
385
+ values: [userId],
386
+ variation: variation ? 1 : 0, // 0 = off, 1 = on
387
+ },
388
+ ],
389
+ },
390
+ }),
391
+ );
392
+
393
+ if (!response.ok()) {
394
+ throw new Error(`Failed to set flag ${flagKey} for user ${userId}: ${response.status()}`);
395
+ }
396
+ }
397
+
398
+ /**
399
+ * Remove user from flag targeting
400
+ * CRITICAL for test cleanup
401
+ */
402
+ export async function removeFlagTarget(flagKey: FlagKey, userId: string): Promise<void> {
403
+ const response = await playwrightRequest.newContext().then((ctx) =>
404
+ ctx.delete(`${LD_API_BASE}/flags/${flagKey}/targeting/users/${userId}`, {
405
+ headers: {
406
+ Authorization: LD_SDK_KEY!,
407
+ },
408
+ }),
409
+ );
410
+
411
+ if (!response.ok() && response.status() !== 404) {
412
+ // 404 is acceptable (user wasn't targeted)
413
+ throw new Error(`Failed to remove flag ${flagKey} target for user ${userId}: ${response.status()}`);
414
+ }
415
+ }
416
+
417
+ /**
418
+ * Percentage rollout helper
419
+ * Enable flag for N% of users
420
+ */
421
+ export async function setFlagRolloutPercentage(flagKey: FlagKey, percentage: number): Promise<void> {
422
+ if (percentage < 0 || percentage > 100) {
423
+ throw new Error('Percentage must be between 0 and 100');
424
+ }
425
+
426
+ const response = await playwrightRequest.newContext().then((ctx) =>
427
+ ctx.patch(`${LD_API_BASE}/flags/${flagKey}`, {
428
+ headers: {
429
+ Authorization: LD_SDK_KEY!,
430
+ 'Content-Type': 'application/json',
431
+ },
432
+ data: {
433
+ rollout: {
434
+ variations: [
435
+ { variation: 0, weight: 100 - percentage }, // off
436
+ { variation: 1, weight: percentage }, // on
437
+ ],
438
+ },
439
+ },
440
+ }),
441
+ );
442
+
443
+ if (!response.ok()) {
444
+ throw new Error(`Failed to set rollout for flag ${flagKey}: ${response.status()}`);
445
+ }
446
+ }
447
+
448
+ /**
449
+ * Enable flag globally (100% rollout)
450
+ */
451
+ export async function enableFlagGlobally(flagKey: FlagKey): Promise<void> {
452
+ await setFlagRolloutPercentage(flagKey, 100);
453
+ }
454
+
455
+ /**
456
+ * Disable flag globally (0% rollout)
457
+ */
458
+ export async function disableFlagGlobally(flagKey: FlagKey): Promise<void> {
459
+ await setFlagRolloutPercentage(flagKey, 0);
460
+ }
461
+
462
+ /**
463
+ * Stub feature flags in local/test environments
464
+ * Bypasses LaunchDarkly entirely
465
+ */
466
+ export function stubFeatureFlags(flags: Record<FlagKey, FlagVariation>): void {
467
+ // Set flags in localStorage or inject into window
468
+ if (typeof window !== 'undefined') {
469
+ (window as any).__STUBBED_FLAGS__ = flags;
470
+ }
471
+ }
472
+ ```
473
+
474
+ **Usage in Playwright fixture**:
475
+
476
+ ```typescript
477
+ // playwright/fixtures/feature-flag-fixture.ts
478
+ import { test as base } from '@playwright/test';
479
+ import { setFlagForUser, removeFlagTarget } from '../support/feature-flag-helpers';
480
+ import { FlagKey } from '@/utils/feature-flags';
481
+
482
+ type FeatureFlagFixture = {
483
+ featureFlags: {
484
+ enable: (flag: FlagKey, userId: string) => Promise<void>;
485
+ disable: (flag: FlagKey, userId: string) => Promise<void>;
486
+ cleanup: (flag: FlagKey, userId: string) => Promise<void>;
487
+ };
488
+ };
489
+
490
+ export const test = base.extend<FeatureFlagFixture>({
491
+ featureFlags: async ({}, use) => {
492
+ const cleanupQueue: Array<{ flag: FlagKey; userId: string }> = [];
493
+
494
+ await use({
495
+ enable: async (flag, userId) => {
496
+ await setFlagForUser(flag, userId, true);
497
+ cleanupQueue.push({ flag, userId });
498
+ },
499
+ disable: async (flag, userId) => {
500
+ await setFlagForUser(flag, userId, false);
501
+ cleanupQueue.push({ flag, userId });
502
+ },
503
+ cleanup: async (flag, userId) => {
504
+ await removeFlagTarget(flag, userId);
505
+ },
506
+ });
507
+
508
+ // Auto-cleanup after test
509
+ for (const { flag, userId } of cleanupQueue) {
510
+ await removeFlagTarget(flag, userId);
511
+ }
512
+ },
513
+ });
514
+ ```
515
+
516
+ **Key Points**:
517
+
518
+ - **API-driven control**: No manual UI clicks required
519
+ - **Auto-cleanup**: Fixture tracks and removes targeting
520
+ - **Percentage rollouts**: Test gradual feature releases
521
+ - **Stubbing option**: Local development without LaunchDarkly
522
+ - **Type-safe**: FlagKey prevents typos
523
+
524
+ ---
525
+
526
+ ### Example 4: Feature Flag Lifecycle Checklist & Cleanup Strategy
527
+
528
+ **Context**: Governance checklist and automated cleanup detection for stale flags.
529
+
530
+ **Implementation**:
531
+
532
+ ```typescript
533
+ // scripts/feature-flag-audit.ts
534
+ /**
535
+ * Feature Flag Lifecycle Audit Script
536
+ * Run weekly to detect stale flags requiring cleanup
537
+ */
538
+
539
+ import { FLAG_REGISTRY, FLAGS, getExpiredFlags, FlagKey } from '../src/utils/feature-flags';
540
+ import * as fs from 'fs';
541
+ import * as path from 'path';
542
+
543
+ type AuditResult = {
544
+ totalFlags: number;
545
+ expiredFlags: FlagKey[];
546
+ missingOwners: FlagKey[];
547
+ missingDates: FlagKey[];
548
+ permanentFlags: FlagKey[];
549
+ flagsNearingExpiry: FlagKey[];
550
+ };
551
+
552
+ /**
553
+ * Audit all feature flags for governance compliance
554
+ */
555
+ function auditFeatureFlags(): AuditResult {
556
+ const allFlags = Object.keys(FLAG_REGISTRY) as FlagKey[];
557
+ const expiredFlags = getExpiredFlags().map((meta) => meta.key);
558
+
559
+ // Flags expiring in next 30 days
560
+ const thirtyDaysFromNow = Date.now() + 30 * 24 * 60 * 60 * 1000;
561
+ const flagsNearingExpiry = allFlags.filter((flag) => {
562
+ const meta = FLAG_REGISTRY[flag];
563
+ if (!meta.expiryDate) return false;
564
+ const expiry = new Date(meta.expiryDate).getTime();
565
+ return expiry > Date.now() && expiry < thirtyDaysFromNow;
566
+ });
567
+
568
+ // Missing metadata
569
+ const missingOwners = allFlags.filter((flag) => !FLAG_REGISTRY[flag].owner);
570
+ const missingDates = allFlags.filter((flag) => !FLAG_REGISTRY[flag].createdDate);
571
+
572
+ // Permanent flags (no expiry, requiresCleanup = false)
573
+ const permanentFlags = allFlags.filter((flag) => {
574
+ const meta = FLAG_REGISTRY[flag];
575
+ return !meta.expiryDate && !meta.requiresCleanup;
576
+ });
577
+
578
+ return {
579
+ totalFlags: allFlags.length,
580
+ expiredFlags,
581
+ missingOwners,
582
+ missingDates,
583
+ permanentFlags,
584
+ flagsNearingExpiry,
585
+ };
586
+ }
587
+
588
+ /**
589
+ * Generate markdown report
590
+ */
591
+ function generateReport(audit: AuditResult): string {
592
+ let report = `# Feature Flag Audit Report\n\n`;
593
+ report += `**Date**: ${new Date().toISOString()}\n`;
594
+ report += `**Total Flags**: ${audit.totalFlags}\n\n`;
595
+
596
+ if (audit.expiredFlags.length > 0) {
597
+ report += `## ⚠️ EXPIRED FLAGS - IMMEDIATE CLEANUP REQUIRED\n\n`;
598
+ audit.expiredFlags.forEach((flag) => {
599
+ const meta = FLAG_REGISTRY[flag];
600
+ report += `- **${meta.name}** (\`${flag}\`)\n`;
601
+ report += ` - Owner: ${meta.owner}\n`;
602
+ report += ` - Expired: ${meta.expiryDate}\n`;
603
+ report += ` - Action: Remove flag code, update tests, deploy\n\n`;
604
+ });
605
+ }
606
+
607
+ if (audit.flagsNearingExpiry.length > 0) {
608
+ report += `## ⏰ FLAGS EXPIRING SOON (Next 30 Days)\n\n`;
609
+ audit.flagsNearingExpiry.forEach((flag) => {
610
+ const meta = FLAG_REGISTRY[flag];
611
+ report += `- **${meta.name}** (\`${flag}\`)\n`;
612
+ report += ` - Owner: ${meta.owner}\n`;
613
+ report += ` - Expires: ${meta.expiryDate}\n`;
614
+ report += ` - Action: Plan cleanup or extend expiry\n\n`;
615
+ });
616
+ }
617
+
618
+ if (audit.permanentFlags.length > 0) {
619
+ report += `## 🔄 PERMANENT FLAGS (No Expiry)\n\n`;
620
+ audit.permanentFlags.forEach((flag) => {
621
+ const meta = FLAG_REGISTRY[flag];
622
+ report += `- **${meta.name}** (\`${flag}\`) - Owner: ${meta.owner}\n`;
623
+ });
624
+ report += `\n`;
625
+ }
626
+
627
+ if (audit.missingOwners.length > 0 || audit.missingDates.length > 0) {
628
+ report += `## ❌ GOVERNANCE ISSUES\n\n`;
629
+ if (audit.missingOwners.length > 0) {
630
+ report += `**Missing Owners**: ${audit.missingOwners.join(', ')}\n`;
631
+ }
632
+ if (audit.missingDates.length > 0) {
633
+ report += `**Missing Created Dates**: ${audit.missingDates.join(', ')}\n`;
634
+ }
635
+ report += `\n`;
636
+ }
637
+
638
+ return report;
639
+ }
640
+
641
+ /**
642
+ * Feature Flag Lifecycle Checklist
643
+ */
644
+ const FLAG_LIFECYCLE_CHECKLIST = `
645
+ # Feature Flag Lifecycle Checklist
646
+
647
+ ## Before Creating a New Flag
648
+
649
+ - [ ] **Name**: Follow naming convention (kebab-case, descriptive)
650
+ - [ ] **Owner**: Assign team/individual responsible
651
+ - [ ] **Default State**: Determine safe default (usually false)
652
+ - [ ] **Expiry Date**: Set removal date (30-90 days typical)
653
+ - [ ] **Dependencies**: Document related flags
654
+ - [ ] **Telemetry**: Plan analytics events to track
655
+ - [ ] **Rollback Plan**: Define how to disable quickly
656
+
657
+ ## During Development
658
+
659
+ - [ ] **Code Paths**: Both enabled/disabled states implemented
660
+ - [ ] **Tests**: Both variations tested in CI
661
+ - [ ] **Documentation**: Flag purpose documented in code/PR
662
+ - [ ] **Telemetry**: Analytics events instrumented
663
+ - [ ] **Error Handling**: Graceful degradation on flag service failure
664
+
665
+ ## Before Launch
666
+
667
+ - [ ] **QA**: Both states tested in staging
668
+ - [ ] **Rollout Plan**: Gradual rollout percentage defined
669
+ - [ ] **Monitoring**: Dashboards/alerts for flag-related metrics
670
+ - [ ] **Stakeholder Communication**: Product/design aligned
671
+
672
+ ## After Launch (Monitoring)
673
+
674
+ - [ ] **Metrics**: Success criteria tracked
675
+ - [ ] **Error Rates**: No increase in errors
676
+ - [ ] **Performance**: No degradation
677
+ - [ ] **User Feedback**: Qualitative data collected
678
+
679
+ ## Cleanup (Post-Launch)
680
+
681
+ - [ ] **Remove Flag Code**: Delete if/else branches
682
+ - [ ] **Update Tests**: Remove flag-specific tests
683
+ - [ ] **Remove Targeting**: Clear all user targets
684
+ - [ ] **Delete Flag Config**: Remove from LaunchDarkly/registry
685
+ - [ ] **Update Documentation**: Remove references
686
+ - [ ] **Deploy**: Ship cleanup changes
687
+ `;
688
+
689
+ // Run audit
690
+ const audit = auditFeatureFlags();
691
+ const report = generateReport(audit);
692
+
693
+ // Save report
694
+ const outputPath = path.join(__dirname, '../feature-flag-audit-report.md');
695
+ fs.writeFileSync(outputPath, report);
696
+ fs.writeFileSync(path.join(__dirname, '../FEATURE-FLAG-CHECKLIST.md'), FLAG_LIFECYCLE_CHECKLIST);
697
+
698
+ console.log(`✅ Audit complete. Report saved to: ${outputPath}`);
699
+ console.log(`Total flags: ${audit.totalFlags}`);
700
+ console.log(`Expired flags: ${audit.expiredFlags.length}`);
701
+ console.log(`Flags expiring soon: ${audit.flagsNearingExpiry.length}`);
702
+
703
+ // Exit with error if expired flags exist
704
+ if (audit.expiredFlags.length > 0) {
705
+ console.error(`\n❌ EXPIRED FLAGS DETECTED - CLEANUP REQUIRED`);
706
+ process.exit(1);
707
+ }
708
+ ```
709
+
710
+ **package.json scripts**:
711
+
712
+ ```json
713
+ {
714
+ "scripts": {
715
+ "feature-flags:audit": "ts-node scripts/feature-flag-audit.ts",
716
+ "feature-flags:audit:ci": "npm run feature-flags:audit || true"
717
+ }
718
+ }
719
+ ```
720
+
721
+ **Key Points**:
722
+
723
+ - **Automated detection**: Weekly audit catches stale flags
724
+ - **Lifecycle checklist**: Comprehensive governance guide
725
+ - **Expiry tracking**: Flags auto-expire after defined date
726
+ - **CI integration**: Audit runs in pipeline, warns on expiry
727
+ - **Ownership clarity**: Every flag has assigned owner
728
+
729
+ ---
730
+
731
+ ## Feature Flag Testing Checklist
732
+
733
+ Before merging flag-related code, verify:
734
+
735
+ - [ ] **Both states tested**: Enabled AND disabled variations covered
736
+ - [ ] **Cleanup automated**: afterEach removes targeting (no manual cleanup)
737
+ - [ ] **Unique test data**: Test users don't collide with production
738
+ - [ ] **Telemetry validated**: Analytics events fire for both variations
739
+ - [ ] **Error handling**: Graceful fallback when flag service unavailable
740
+ - [ ] **Flag metadata**: Owner, dates, dependencies documented in registry
741
+ - [ ] **Rollback plan**: Clear steps to disable flag in production
742
+ - [ ] **Expiry date set**: Removal date defined (or marked permanent)
743
+
744
+ ## Integration Points
745
+
746
+ - Used in workflows: `*automate` (test generation), `*framework` (flag setup)
747
+ - Related fragments: `test-quality.md`, `selective-testing.md`
748
+ - Flag services: LaunchDarkly, Split.io, Unleash, custom implementations
749
+
750
+ _Source: LaunchDarkly strategy blog, Murat test architecture notes, enterprise feature flag governance_