bmad-method 5.1.3 → 6.0.0-Beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (739) hide show
  1. package/.coderabbit.yaml +40 -0
  2. package/.github/CODE_OF_CONDUCT.md +128 -0
  3. package/.github/FUNDING.yaml +2 -2
  4. package/.github/ISSUE_TEMPLATE/config.yaml +8 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +11 -11
  6. package/.github/ISSUE_TEMPLATE/issue.md +32 -0
  7. package/.github/scripts/discord-helpers.sh +34 -0
  8. package/.github/workflows/discord.yaml +82 -17
  9. package/.github/workflows/docs.yaml +63 -0
  10. package/.github/workflows/manual-release.yaml +40 -20
  11. package/.github/workflows/quality.yaml +115 -0
  12. package/.husky/pre-commit +17 -0
  13. package/.markdownlint-cli2.yaml +41 -0
  14. package/.nvmrc +1 -0
  15. package/.prettierignore +9 -0
  16. package/.vscode/settings.json +38 -10
  17. package/CHANGELOG.md +1167 -372
  18. package/CNAME +1 -0
  19. package/CONTRIBUTING.md +100 -142
  20. package/CONTRIBUTORS.md +32 -0
  21. package/LICENSE +10 -1
  22. package/README.md +67 -170
  23. package/SECURITY.md +85 -0
  24. package/TRADEMARK.md +55 -0
  25. package/Wordmark.png +0 -0
  26. package/banner-bmad-method.png +0 -0
  27. package/docs/404.md +9 -0
  28. package/docs/_STYLE_GUIDE.md +367 -0
  29. package/docs/downloads.md +74 -0
  30. package/docs/explanation/advanced-elicitation.md +24 -0
  31. package/docs/explanation/adversarial-review.md +57 -0
  32. package/docs/explanation/brainstorming.md +31 -0
  33. package/docs/explanation/brownfield-faq.md +55 -0
  34. package/docs/explanation/party-mode.md +57 -0
  35. package/docs/explanation/preventing-agent-conflicts.md +110 -0
  36. package/docs/explanation/quick-flow.md +27 -0
  37. package/docs/explanation/why-solutioning-matters.md +75 -0
  38. package/docs/how-to/brownfield/index.md +84 -0
  39. package/docs/how-to/brownfield/quick-fix-in-brownfield.md +76 -0
  40. package/docs/how-to/customize-bmad.md +158 -0
  41. package/docs/how-to/get-answers-about-bmad.md +102 -0
  42. package/docs/how-to/install-bmad.md +82 -0
  43. package/docs/how-to/shard-large-documents.md +101 -0
  44. package/docs/how-to/upgrade-to-v6.md +131 -0
  45. package/docs/index.md +56 -0
  46. package/docs/reference/workflow-map.md +83 -0
  47. package/docs/tea/explanation/engagement-models.md +710 -0
  48. package/docs/tea/explanation/fixture-architecture.md +457 -0
  49. package/docs/tea/explanation/knowledge-base-system.md +554 -0
  50. package/docs/tea/explanation/network-first-patterns.md +853 -0
  51. package/docs/tea/explanation/risk-based-testing.md +586 -0
  52. package/docs/tea/explanation/tea-overview.md +410 -0
  53. package/docs/tea/explanation/test-quality-standards.md +907 -0
  54. package/docs/tea/explanation/testing-as-engineering.md +112 -0
  55. package/docs/tea/glossary/index.md +159 -0
  56. package/docs/tea/how-to/brownfield/use-tea-for-enterprise.md +525 -0
  57. package/docs/tea/how-to/brownfield/use-tea-with-existing-tests.md +577 -0
  58. package/docs/tea/how-to/customization/enable-tea-mcp-enhancements.md +424 -0
  59. package/docs/tea/how-to/customization/integrate-playwright-utils.md +813 -0
  60. package/docs/tea/how-to/workflows/run-atdd.md +436 -0
  61. package/docs/tea/how-to/workflows/run-automate.md +653 -0
  62. package/docs/tea/how-to/workflows/run-nfr-assess.md +679 -0
  63. package/docs/tea/how-to/workflows/run-test-design.md +135 -0
  64. package/docs/tea/how-to/workflows/run-test-review.md +605 -0
  65. package/docs/tea/how-to/workflows/run-trace.md +883 -0
  66. package/docs/tea/how-to/workflows/setup-ci.md +712 -0
  67. package/docs/tea/how-to/workflows/setup-test-framework.md +98 -0
  68. package/docs/tea/reference/commands.md +276 -0
  69. package/docs/tea/reference/configuration.md +678 -0
  70. package/docs/tea/reference/knowledge-base.md +340 -0
  71. package/docs/tea/tutorials/tea-lite-quickstart.md +444 -0
  72. package/docs/tutorials/getting-started.md +205 -0
  73. package/eslint.config.mjs +42 -9
  74. package/package.json +50 -38
  75. package/prettier.config.mjs +1 -1
  76. package/src/bmm/_module-installer/installer.js +48 -0
  77. package/src/bmm/agents/analyst.agent.yaml +36 -0
  78. package/src/bmm/agents/architect.agent.yaml +28 -0
  79. package/src/bmm/agents/dev.agent.yaml +38 -0
  80. package/src/bmm/agents/pm.agent.yaml +46 -0
  81. package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
  82. package/src/bmm/agents/sm.agent.yaml +36 -0
  83. package/src/bmm/agents/tea.agent.yaml +63 -0
  84. package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
  85. package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +45 -0
  86. package/src/bmm/agents/ux-designer.agent.yaml +26 -0
  87. package/src/bmm/data/project-context-template.md +26 -0
  88. package/src/bmm/module-help.csv +32 -0
  89. package/src/bmm/module.yaml +44 -0
  90. package/src/bmm/teams/default-party.csv +21 -0
  91. package/src/bmm/teams/team-fullstack.yaml +12 -0
  92. package/src/bmm/testarch/knowledge/adr-quality-readiness-checklist.md +350 -0
  93. package/src/bmm/testarch/knowledge/api-request.md +442 -0
  94. package/src/bmm/testarch/knowledge/api-testing-patterns.md +843 -0
  95. package/src/bmm/testarch/knowledge/auth-session.md +552 -0
  96. package/src/bmm/testarch/knowledge/burn-in.md +273 -0
  97. package/src/bmm/testarch/knowledge/ci-burn-in.md +675 -0
  98. package/src/bmm/testarch/knowledge/component-tdd.md +486 -0
  99. package/src/bmm/testarch/knowledge/contract-testing.md +957 -0
  100. package/src/bmm/testarch/knowledge/data-factories.md +500 -0
  101. package/src/bmm/testarch/knowledge/email-auth.md +721 -0
  102. package/src/bmm/testarch/knowledge/error-handling.md +725 -0
  103. package/src/bmm/testarch/knowledge/feature-flags.md +750 -0
  104. package/src/bmm/testarch/knowledge/file-utils.md +463 -0
  105. package/src/bmm/testarch/knowledge/fixture-architecture.md +401 -0
  106. package/src/bmm/testarch/knowledge/fixtures-composition.md +382 -0
  107. package/src/bmm/testarch/knowledge/intercept-network-call.md +430 -0
  108. package/src/bmm/testarch/knowledge/log.md +429 -0
  109. package/src/bmm/testarch/knowledge/network-error-monitor.md +405 -0
  110. package/src/bmm/testarch/knowledge/network-first.md +486 -0
  111. package/src/bmm/testarch/knowledge/network-recorder.md +527 -0
  112. package/src/bmm/testarch/knowledge/nfr-criteria.md +670 -0
  113. package/src/bmm/testarch/knowledge/overview.md +286 -0
  114. package/src/bmm/testarch/knowledge/playwright-config.md +730 -0
  115. package/src/bmm/testarch/knowledge/probability-impact.md +601 -0
  116. package/src/bmm/testarch/knowledge/recurse.md +421 -0
  117. package/src/bmm/testarch/knowledge/risk-governance.md +615 -0
  118. package/src/bmm/testarch/knowledge/selective-testing.md +732 -0
  119. package/src/bmm/testarch/knowledge/selector-resilience.md +527 -0
  120. package/src/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
  121. package/src/bmm/testarch/knowledge/test-levels-framework.md +473 -0
  122. package/src/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
  123. package/src/bmm/testarch/knowledge/test-quality.md +664 -0
  124. package/src/bmm/testarch/knowledge/timing-debugging.md +372 -0
  125. package/src/bmm/testarch/knowledge/visual-debugging.md +524 -0
  126. package/src/bmm/testarch/tea-index.csv +35 -0
  127. package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
  128. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
  129. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
  130. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
  131. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
  132. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
  133. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
  134. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
  135. package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +58 -0
  136. package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
  137. package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
  138. package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
  139. package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
  140. package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
  141. package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
  142. package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
  143. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
  144. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +200 -0
  145. package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
  146. package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
  147. package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
  148. package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
  149. package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
  150. package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
  151. package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
  152. package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
  153. package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
  154. package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +239 -0
  155. package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
  156. package/src/bmm/workflows/1-analysis/research/workflow.md +173 -0
  157. package/src/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +13 -0
  158. package/src/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
  159. package/src/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
  160. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
  161. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +153 -0
  162. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
  163. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
  164. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
  165. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
  166. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
  167. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
  168. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
  169. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
  170. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
  171. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
  172. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
  173. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
  174. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  175. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
  176. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
  177. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
  178. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +218 -0
  179. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
  180. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
  181. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
  182. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  183. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
  184. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
  185. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  186. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  187. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
  188. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
  189. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  190. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
  191. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
  192. package/src/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
  193. package/src/bmm/workflows/2-plan-workflows/create-prd/validation-report-prd-workflow.md +433 -0
  194. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow.md +150 -0
  195. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
  196. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
  197. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
  198. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
  199. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
  200. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
  201. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
  202. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
  203. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
  204. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
  205. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
  206. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
  207. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
  208. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
  209. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
  210. package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
  211. package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +43 -0
  212. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +190 -0
  213. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +178 -0
  214. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
  215. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +139 -0
  216. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
  217. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +135 -0
  218. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
  219. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +55 -0
  220. package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
  221. package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +11 -0
  222. package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
  223. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
  224. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -0
  225. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
  226. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -0
  227. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
  228. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
  229. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
  230. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
  231. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
  232. package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +50 -0
  233. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
  234. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
  235. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
  236. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
  237. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  238. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +59 -0
  239. package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
  240. package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
  241. package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +51 -0
  242. package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
  243. package/src/bmm/workflows/4-implementation/correct-course/instructions.md +206 -0
  244. package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +60 -0
  245. package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
  246. package/src/bmm/workflows/4-implementation/create-story/instructions.xml +345 -0
  247. package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
  248. package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +61 -0
  249. package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
  250. package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
  251. package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +27 -0
  252. package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1443 -0
  253. package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +58 -0
  254. package/src/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
  255. package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +225 -0
  256. package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  257. package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +54 -0
  258. package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +229 -0
  259. package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +36 -0
  260. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +176 -0
  261. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +120 -0
  262. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +113 -0
  263. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +113 -0
  264. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +106 -0
  265. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +149 -0
  266. package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -0
  267. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +192 -0
  268. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +145 -0
  269. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +128 -0
  270. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +201 -0
  271. package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
  272. package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
  273. package/src/bmm/workflows/document-project/checklist.md +245 -0
  274. package/src/bmm/workflows/document-project/documentation-requirements.csv +12 -0
  275. package/src/bmm/workflows/document-project/instructions.md +221 -0
  276. package/src/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
  277. package/src/bmm/workflows/document-project/templates/index-template.md +169 -0
  278. package/src/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
  279. package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  280. package/src/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
  281. package/src/bmm/workflows/document-project/workflow.yaml +30 -0
  282. package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  283. package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  284. package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  285. package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  286. package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +90 -0
  287. package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +127 -0
  288. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +39 -0
  289. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +130 -0
  290. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +27 -0
  291. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +43 -0
  292. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +141 -0
  293. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +27 -0
  294. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +49 -0
  295. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +241 -0
  296. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +27 -0
  297. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +38 -0
  298. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +133 -0
  299. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +27 -0
  300. package/src/bmm/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
  301. package/src/bmm/workflows/testarch/atdd/checklist.md +374 -0
  302. package/src/bmm/workflows/testarch/atdd/instructions.md +806 -0
  303. package/src/bmm/workflows/testarch/atdd/workflow.yaml +47 -0
  304. package/src/bmm/workflows/testarch/automate/checklist.md +582 -0
  305. package/src/bmm/workflows/testarch/automate/instructions.md +1324 -0
  306. package/src/bmm/workflows/testarch/automate/workflow.yaml +54 -0
  307. package/src/bmm/workflows/testarch/ci/checklist.md +247 -0
  308. package/src/bmm/workflows/testarch/ci/github-actions-template.yaml +198 -0
  309. package/src/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +149 -0
  310. package/src/bmm/workflows/testarch/ci/instructions.md +536 -0
  311. package/src/bmm/workflows/testarch/ci/workflow.yaml +47 -0
  312. package/src/bmm/workflows/testarch/framework/checklist.md +320 -0
  313. package/src/bmm/workflows/testarch/framework/instructions.md +481 -0
  314. package/src/bmm/workflows/testarch/framework/workflow.yaml +49 -0
  315. package/src/bmm/workflows/testarch/nfr-assess/checklist.md +407 -0
  316. package/src/bmm/workflows/testarch/nfr-assess/instructions.md +726 -0
  317. package/src/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +461 -0
  318. package/src/bmm/workflows/testarch/nfr-assess/workflow.yaml +49 -0
  319. package/src/bmm/workflows/testarch/test-design/checklist.md +407 -0
  320. package/src/bmm/workflows/testarch/test-design/instructions.md +1158 -0
  321. package/src/bmm/workflows/testarch/test-design/test-design-architecture-template.md +213 -0
  322. package/src/bmm/workflows/testarch/test-design/test-design-qa-template.md +286 -0
  323. package/src/bmm/workflows/testarch/test-design/test-design-template.md +294 -0
  324. package/src/bmm/workflows/testarch/test-design/workflow.yaml +71 -0
  325. package/src/bmm/workflows/testarch/test-review/checklist.md +472 -0
  326. package/src/bmm/workflows/testarch/test-review/instructions.md +628 -0
  327. package/src/bmm/workflows/testarch/test-review/test-review-template.md +390 -0
  328. package/src/bmm/workflows/testarch/test-review/workflow.yaml +48 -0
  329. package/src/bmm/workflows/testarch/trace/checklist.md +642 -0
  330. package/src/bmm/workflows/testarch/trace/instructions.md +1030 -0
  331. package/src/bmm/workflows/testarch/trace/trace-template.md +675 -0
  332. package/src/bmm/workflows/testarch/trace/workflow.yaml +57 -0
  333. package/src/core/_module-installer/installer.js +60 -0
  334. package/src/core/agents/bmad-master.agent.yaml +29 -0
  335. package/src/core/module-help.csv +9 -0
  336. package/src/core/module.yaml +25 -0
  337. package/src/core/resources/excalidraw/README.md +160 -0
  338. package/src/core/resources/excalidraw/excalidraw-helpers.md +127 -0
  339. package/src/core/resources/excalidraw/library-loader.md +50 -0
  340. package/src/core/resources/excalidraw/validate-json-instructions.md +79 -0
  341. package/src/core/tasks/editorial-review-prose.xml +100 -0
  342. package/src/core/tasks/editorial-review-structure.xml +209 -0
  343. package/src/core/tasks/help.md +62 -0
  344. package/src/core/tasks/index-docs.xml +65 -0
  345. package/src/core/tasks/review-adversarial-general.xml +48 -0
  346. package/src/core/tasks/shard-doc.xml +109 -0
  347. package/src/core/tasks/workflow.xml +235 -0
  348. package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
  349. package/src/core/workflows/advanced-elicitation/workflow.xml +117 -0
  350. package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
  351. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
  352. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
  353. package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
  354. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
  355. package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
  356. package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
  357. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
  358. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
  359. package/src/core/workflows/brainstorming/template.md +15 -0
  360. package/src/core/workflows/brainstorming/workflow.md +58 -0
  361. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
  362. package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
  363. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +157 -0
  364. package/src/core/workflows/party-mode/workflow.md +194 -0
  365. package/src/utility/agent-components/activation-rules.txt +6 -0
  366. package/src/utility/agent-components/activation-steps.txt +14 -0
  367. package/src/utility/agent-components/agent-command-header.md +1 -0
  368. package/src/utility/agent-components/agent.customize.template.yaml +41 -0
  369. package/src/utility/agent-components/handler-action.txt +4 -0
  370. package/src/utility/agent-components/handler-data.txt +5 -0
  371. package/src/utility/agent-components/handler-exec.txt +6 -0
  372. package/src/utility/agent-components/handler-multi.txt +14 -0
  373. package/src/utility/agent-components/handler-tmpl.txt +5 -0
  374. package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
  375. package/src/utility/agent-components/handler-workflow.txt +10 -0
  376. package/src/utility/agent-components/menu-handlers.txt +6 -0
  377. package/test/README.md +295 -0
  378. package/test/adversarial-review-tests/README.md +56 -0
  379. package/test/adversarial-review-tests/sample-content.md +46 -0
  380. package/test/adversarial-review-tests/test-cases.yaml +103 -0
  381. package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +27 -0
  382. package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +30 -0
  383. package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +22 -0
  384. package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +20 -0
  385. package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +25 -0
  386. package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +24 -0
  387. package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +25 -0
  388. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
  389. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
  390. package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +31 -0
  391. package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +25 -0
  392. package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +25 -0
  393. package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +25 -0
  394. package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +25 -0
  395. package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
  396. package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
  397. package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +27 -0
  398. package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
  399. package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +24 -0
  400. package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +27 -0
  401. package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +27 -0
  402. package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +24 -0
  403. package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +29 -0
  404. package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +31 -0
  405. package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +28 -0
  406. package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +28 -0
  407. package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
  408. package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +28 -0
  409. package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
  410. package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
  411. package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
  412. package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +24 -0
  413. package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +22 -0
  414. package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +27 -0
  415. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +31 -0
  416. package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +22 -0
  417. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +38 -0
  418. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +24 -0
  419. package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
  420. package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +34 -0
  421. package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
  422. package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +24 -0
  423. package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +24 -0
  424. package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +24 -0
  425. package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
  426. package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
  427. package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +24 -0
  428. package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +24 -0
  429. package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +22 -0
  430. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +28 -0
  431. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +30 -0
  432. package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +24 -0
  433. package/test/test-agent-schema.js +387 -0
  434. package/test/test-cli-integration.sh +159 -0
  435. package/test/test-installation-components.js +214 -0
  436. package/test/unit-test-schema.js +133 -0
  437. package/tools/bmad-npx-wrapper.js +11 -12
  438. package/tools/build-docs.js +577 -0
  439. package/tools/cli/README.md +7 -0
  440. package/tools/cli/bmad-cli.js +58 -0
  441. package/tools/cli/commands/install.js +87 -0
  442. package/tools/cli/commands/status.js +65 -0
  443. package/tools/cli/external-official-modules.yaml +44 -0
  444. package/tools/cli/installers/install-messages.yaml +58 -0
  445. package/tools/cli/installers/lib/core/config-collector.js +1079 -0
  446. package/tools/cli/installers/lib/core/custom-module-cache.js +259 -0
  447. package/tools/cli/installers/lib/core/dependency-resolver.js +739 -0
  448. package/tools/cli/installers/lib/core/detector.js +223 -0
  449. package/tools/cli/installers/lib/core/ide-config-manager.js +156 -0
  450. package/tools/cli/installers/lib/core/installer.js +2826 -0
  451. package/tools/cli/installers/lib/core/manifest-generator.js +1054 -0
  452. package/tools/cli/installers/lib/core/manifest.js +1036 -0
  453. package/tools/cli/installers/lib/custom/handler.js +363 -0
  454. package/tools/cli/installers/lib/ide/STANDARDIZATION_PLAN.md +208 -0
  455. package/tools/cli/installers/lib/ide/_base-ide.js +655 -0
  456. package/tools/cli/installers/lib/ide/antigravity.js +474 -0
  457. package/tools/cli/installers/lib/ide/auggie.js +244 -0
  458. package/tools/cli/installers/lib/ide/claude-code.js +506 -0
  459. package/tools/cli/installers/lib/ide/cline.js +272 -0
  460. package/tools/cli/installers/lib/ide/codex.js +412 -0
  461. package/tools/cli/installers/lib/ide/crush.js +149 -0
  462. package/tools/cli/installers/lib/ide/cursor.js +160 -0
  463. package/tools/cli/installers/lib/ide/gemini.js +301 -0
  464. package/tools/cli/installers/lib/ide/github-copilot.js +383 -0
  465. package/tools/cli/installers/lib/ide/iflow.js +191 -0
  466. package/tools/cli/installers/lib/ide/kilo.js +250 -0
  467. package/tools/cli/installers/lib/ide/kiro-cli.js +326 -0
  468. package/tools/cli/installers/lib/ide/manager.js +244 -0
  469. package/tools/cli/installers/lib/ide/opencode.js +257 -0
  470. package/tools/cli/installers/lib/ide/qwen.js +372 -0
  471. package/tools/cli/installers/lib/ide/roo.js +273 -0
  472. package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
  473. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +165 -0
  474. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +158 -0
  475. package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
  476. package/tools/cli/installers/lib/ide/shared/path-utils.js +165 -0
  477. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +268 -0
  478. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +293 -0
  479. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
  480. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
  481. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -0
  482. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +13 -0
  483. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
  484. package/tools/cli/installers/lib/ide/trae.js +313 -0
  485. package/tools/cli/installers/lib/ide/windsurf.js +258 -0
  486. package/tools/cli/installers/lib/message-loader.js +85 -0
  487. package/tools/cli/installers/lib/modules/external-manager.js +135 -0
  488. package/tools/cli/installers/lib/modules/manager.js +1375 -0
  489. package/tools/cli/lib/activation-builder.js +163 -0
  490. package/tools/cli/lib/agent/compiler.js +522 -0
  491. package/tools/cli/lib/agent/installer.js +716 -0
  492. package/tools/cli/lib/agent/template-engine.js +152 -0
  493. package/tools/cli/lib/agent-analyzer.js +109 -0
  494. package/tools/cli/lib/agent-party-generator.js +194 -0
  495. package/tools/cli/lib/cli-utils.js +227 -0
  496. package/tools/cli/lib/config.js +213 -0
  497. package/tools/cli/lib/file-ops.js +204 -0
  498. package/tools/cli/lib/platform-codes.js +116 -0
  499. package/tools/cli/lib/project-root.js +77 -0
  500. package/tools/cli/lib/prompts.js +433 -0
  501. package/tools/cli/lib/ui.js +1716 -0
  502. package/tools/cli/lib/xml-handler.js +177 -0
  503. package/tools/cli/lib/xml-to-markdown.js +82 -0
  504. package/tools/{yaml-format.js → cli/lib/yaml-format.js} +9 -17
  505. package/tools/cli/lib/yaml-xml-builder.js +587 -0
  506. package/tools/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
  507. package/tools/docs/fix-refs.md +91 -0
  508. package/tools/docs/index.md +2 -0
  509. package/tools/fix-doc-links.js +288 -0
  510. package/tools/flattener/ignoreRules.js +2 -6
  511. package/tools/flattener/main.js +31 -121
  512. package/tools/flattener/projectRoot.js +3 -8
  513. package/tools/flattener/stats.helpers.js +8 -35
  514. package/tools/flattener/stats.js +1 -6
  515. package/tools/flattener/test-matrix.js +1 -5
  516. package/tools/flattener/xml.js +1 -7
  517. package/tools/format-workflow-md.js +263 -0
  518. package/tools/lib/xml-utils.js +13 -0
  519. package/tools/maintainer/review-pr-README.md +55 -0
  520. package/tools/maintainer/review-pr.md +242 -0
  521. package/tools/migrate-custom-module-paths.js +124 -0
  522. package/tools/platform-codes.yaml +157 -0
  523. package/tools/schema/agent.js +491 -0
  524. package/tools/validate-agent-schema.js +110 -0
  525. package/tools/validate-doc-links.js +371 -0
  526. package/tools/validate-svg-changes.sh +356 -0
  527. package/website/README.md +76 -0
  528. package/website/_basement/components/WorkflowGuide.astro +444 -0
  529. package/website/_basement/pages/workflow-guide.astro +17 -0
  530. package/website/astro.config.mjs +169 -0
  531. package/website/public/favicon.ico +0 -0
  532. package/website/public/img/bmad-dark.png +0 -0
  533. package/website/public/img/bmad-light.png +0 -0
  534. package/website/public/img/logo.svg +4 -0
  535. package/website/public/img/workflow-map.png +0 -0
  536. package/website/public/robots.txt +37 -0
  537. package/website/public/workflow-map-diagram.html +361 -0
  538. package/website/src/components/Banner.astro +59 -0
  539. package/website/src/components/Header.astro +121 -0
  540. package/website/src/components/MobileMenuFooter.astro +53 -0
  541. package/website/src/content/config.ts +6 -0
  542. package/website/src/lib/site-url.js +25 -0
  543. package/website/src/pages/404.astro +11 -0
  544. package/website/src/rehype-base-paths.js +89 -0
  545. package/website/src/rehype-markdown-links.js +117 -0
  546. package/website/src/styles/custom.css +500 -0
  547. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -32
  548. package/.github/workflows/format-check.yaml +0 -42
  549. package/bmad-core/agent-teams/team-all.yaml +0 -14
  550. package/bmad-core/agent-teams/team-fullstack.yaml +0 -18
  551. package/bmad-core/agent-teams/team-ide-minimal.yaml +0 -10
  552. package/bmad-core/agent-teams/team-no-ui.yaml +0 -13
  553. package/bmad-core/agents/analyst.md +0 -81
  554. package/bmad-core/agents/architect.md +0 -83
  555. package/bmad-core/agents/bmad-master.md +0 -107
  556. package/bmad-core/agents/bmad-orchestrator.md +0 -149
  557. package/bmad-core/agents/dev.md +0 -75
  558. package/bmad-core/agents/pm.md +0 -81
  559. package/bmad-core/agents/po.md +0 -76
  560. package/bmad-core/agents/qa.md +0 -88
  561. package/bmad-core/agents/sm.md +0 -62
  562. package/bmad-core/agents/ux-expert.md +0 -66
  563. package/bmad-core/checklists/architect-checklist.md +0 -438
  564. package/bmad-core/checklists/change-checklist.md +0 -182
  565. package/bmad-core/checklists/pm-checklist.md +0 -370
  566. package/bmad-core/checklists/po-master-checklist.md +0 -432
  567. package/bmad-core/checklists/story-dod-checklist.md +0 -94
  568. package/bmad-core/checklists/story-draft-checklist.md +0 -153
  569. package/bmad-core/core-config.yaml +0 -20
  570. package/bmad-core/data/bmad-kb.md +0 -806
  571. package/bmad-core/data/brainstorming-techniques.md +0 -36
  572. package/bmad-core/data/elicitation-methods.md +0 -154
  573. package/bmad-core/data/technical-preferences.md +0 -3
  574. package/bmad-core/data/test-levels-framework.md +0 -146
  575. package/bmad-core/data/test-priorities-matrix.md +0 -172
  576. package/bmad-core/tasks/advanced-elicitation.md +0 -117
  577. package/bmad-core/tasks/brownfield-create-epic.md +0 -160
  578. package/bmad-core/tasks/brownfield-create-story.md +0 -147
  579. package/bmad-core/tasks/correct-course.md +0 -70
  580. package/bmad-core/tasks/create-brownfield-story.md +0 -312
  581. package/bmad-core/tasks/create-deep-research-prompt.md +0 -278
  582. package/bmad-core/tasks/create-next-story.md +0 -112
  583. package/bmad-core/tasks/document-project.md +0 -343
  584. package/bmad-core/tasks/facilitate-brainstorming-session.md +0 -136
  585. package/bmad-core/tasks/generate-ai-frontend-prompt.md +0 -51
  586. package/bmad-core/tasks/index-docs.md +0 -173
  587. package/bmad-core/tasks/kb-mode-interaction.md +0 -75
  588. package/bmad-core/tasks/nfr-assess.md +0 -343
  589. package/bmad-core/tasks/qa-gate.md +0 -159
  590. package/bmad-core/tasks/review-story.md +0 -314
  591. package/bmad-core/tasks/risk-profile.md +0 -353
  592. package/bmad-core/tasks/shard-doc.md +0 -185
  593. package/bmad-core/tasks/test-design.md +0 -174
  594. package/bmad-core/tasks/trace-requirements.md +0 -264
  595. package/bmad-core/tasks/validate-next-story.md +0 -134
  596. package/bmad-core/templates/architecture-tmpl.yaml +0 -650
  597. package/bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
  598. package/bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -476
  599. package/bmad-core/templates/brownfield-prd-tmpl.yaml +0 -280
  600. package/bmad-core/templates/competitor-analysis-tmpl.yaml +0 -306
  601. package/bmad-core/templates/front-end-architecture-tmpl.yaml +0 -218
  602. package/bmad-core/templates/front-end-spec-tmpl.yaml +0 -349
  603. package/bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -823
  604. package/bmad-core/templates/market-research-tmpl.yaml +0 -252
  605. package/bmad-core/templates/prd-tmpl.yaml +0 -202
  606. package/bmad-core/templates/project-brief-tmpl.yaml +0 -221
  607. package/bmad-core/templates/qa-gate-tmpl.yaml +0 -102
  608. package/bmad-core/templates/story-tmpl.yaml +0 -137
  609. package/bmad-core/workflows/brownfield-fullstack.yaml +0 -297
  610. package/bmad-core/workflows/brownfield-service.yaml +0 -187
  611. package/bmad-core/workflows/brownfield-ui.yaml +0 -197
  612. package/bmad-core/workflows/greenfield-fullstack.yaml +0 -240
  613. package/bmad-core/workflows/greenfield-service.yaml +0 -206
  614. package/bmad-core/workflows/greenfield-ui.yaml +0 -235
  615. package/common/tasks/create-doc.md +0 -101
  616. package/common/tasks/execute-checklist.md +0 -86
  617. package/common/utils/bmad-doc-template.md +0 -325
  618. package/common/utils/workflow-management.md +0 -69
  619. package/dist/agents/analyst.txt +0 -2889
  620. package/dist/agents/architect.txt +0 -3552
  621. package/dist/agents/bmad-master.txt +0 -8769
  622. package/dist/agents/bmad-orchestrator.txt +0 -1513
  623. package/dist/agents/dev.txt +0 -414
  624. package/dist/agents/pm.txt +0 -2204
  625. package/dist/agents/po.txt +0 -1346
  626. package/dist/agents/qa.txt +0 -1987
  627. package/dist/agents/sm.txt +0 -658
  628. package/dist/agents/ux-expert.txt +0 -694
  629. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +0 -2371
  630. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +0 -1620
  631. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +0 -815
  632. package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -10952
  633. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +0 -4012
  634. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +0 -3698
  635. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +0 -450
  636. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +0 -973
  637. package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +0 -15376
  638. package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +0 -2075
  639. package/dist/teams/team-all.txt +0 -12682
  640. package/dist/teams/team-fullstack.txt +0 -10421
  641. package/dist/teams/team-ide-minimal.txt +0 -5103
  642. package/dist/teams/team-no-ui.txt +0 -8980
  643. package/docs/GUIDING-PRINCIPLES.md +0 -91
  644. package/docs/core-architecture.md +0 -219
  645. package/docs/enhanced-ide-development-workflow.md +0 -248
  646. package/docs/expansion-packs.md +0 -280
  647. package/docs/how-to-contribute-with-pull-requests.md +0 -158
  648. package/docs/user-guide.md +0 -504
  649. package/docs/versioning-and-releases.md +0 -147
  650. package/docs/versions.md +0 -48
  651. package/docs/working-in-the-brownfield.md +0 -597
  652. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/Complete AI Agent System - Flowchart.svg +0 -102
  653. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash copy.txt +0 -13
  654. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash.txt +0 -13
  655. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.2 Agent Development Kit Installation/1.2.2 - Basic Project Structure - txt.txt +0 -25
  656. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.1 - settings.py +0 -34
  657. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.2 - main.py - Base Application.py +0 -70
  658. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.4 Deployment Configuration/1.4.2 - cloudbuild.yaml +0 -26
  659. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/README.md +0 -109
  660. package/expansion-packs/README.md +0 -3
  661. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +0 -13
  662. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +0 -71
  663. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +0 -78
  664. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +0 -64
  665. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +0 -201
  666. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +0 -160
  667. package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +0 -8
  668. package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +0 -250
  669. package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +0 -647
  670. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +0 -110
  671. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +0 -216
  672. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +0 -290
  673. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +0 -613
  674. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +0 -356
  675. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +0 -343
  676. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +0 -253
  677. package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
  678. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +0 -183
  679. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +0 -175
  680. package/expansion-packs/bmad-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +0 -14
  681. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.md +0 -80
  682. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.md +0 -77
  683. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +0 -78
  684. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.md +0 -65
  685. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +0 -391
  686. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +0 -203
  687. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +0 -201
  688. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +0 -124
  689. package/expansion-packs/bmad-2d-unity-game-dev/config.yaml +0 -6
  690. package/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +0 -769
  691. package/expansion-packs/bmad-2d-unity-game-dev/data/development-guidelines.md +0 -586
  692. package/expansion-packs/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +0 -110
  693. package/expansion-packs/bmad-2d-unity-game-dev/tasks/correct-course-game.md +0 -141
  694. package/expansion-packs/bmad-2d-unity-game-dev/tasks/create-game-story.md +0 -184
  695. package/expansion-packs/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +0 -290
  696. package/expansion-packs/bmad-2d-unity-game-dev/tasks/validate-game-story.md +0 -200
  697. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +0 -1030
  698. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +0 -356
  699. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +0 -705
  700. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +0 -256
  701. package/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
  702. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +0 -183
  703. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +0 -175
  704. package/expansion-packs/bmad-infrastructure-devops/README.md +0 -147
  705. package/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.md +0 -71
  706. package/expansion-packs/bmad-infrastructure-devops/checklists/infrastructure-checklist.md +0 -484
  707. package/expansion-packs/bmad-infrastructure-devops/config.yaml +0 -9
  708. package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +0 -305
  709. package/expansion-packs/bmad-infrastructure-devops/tasks/review-infrastructure.md +0 -159
  710. package/expansion-packs/bmad-infrastructure-devops/tasks/validate-infrastructure.md +0 -153
  711. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +0 -424
  712. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +0 -629
  713. package/release_notes.md +0 -33
  714. package/tools/builders/web-builder.js +0 -675
  715. package/tools/bump-all-versions.js +0 -115
  716. package/tools/bump-expansion-version.js +0 -90
  717. package/tools/cli.js +0 -152
  718. package/tools/installer/README.md +0 -8
  719. package/tools/installer/bin/bmad.js +0 -585
  720. package/tools/installer/config/ide-agent-config.yaml +0 -58
  721. package/tools/installer/config/install.config.yaml +0 -123
  722. package/tools/installer/lib/config-loader.js +0 -257
  723. package/tools/installer/lib/file-manager.js +0 -389
  724. package/tools/installer/lib/ide-base-setup.js +0 -228
  725. package/tools/installer/lib/ide-setup.js +0 -1441
  726. package/tools/installer/lib/installer.js +0 -1995
  727. package/tools/installer/lib/memory-profiler.js +0 -225
  728. package/tools/installer/lib/module-manager.js +0 -114
  729. package/tools/installer/lib/resource-locator.js +0 -308
  730. package/tools/installer/package.json +0 -44
  731. package/tools/lib/dependency-resolver.js +0 -175
  732. package/tools/lib/yaml-utils.js +0 -29
  733. package/tools/md-assets/web-agent-startup-instructions.md +0 -39
  734. package/tools/preview-release-notes.js +0 -66
  735. package/tools/shared/bannerArt.js +0 -105
  736. package/tools/sync-installer-version.js +0 -32
  737. package/tools/update-expansion-version.js +0 -53
  738. package/tools/upgraders/v3-to-v4-upgrader.js +0 -672
  739. package/tools/version-bump.js +0 -94
@@ -0,0 +1,853 @@
1
+ ---
2
+ title: "Network-First Patterns Explained"
3
+ description: Understanding how TEA eliminates test flakiness by waiting for actual network responses
4
+ ---
5
+
6
+ # Network-First Patterns Explained
7
+
8
+ Network-first patterns are TEA's solution to test flakiness. Instead of guessing how long to wait with fixed timeouts, wait for the actual network event that causes UI changes.
9
+
10
+ ## Overview
11
+
12
+ **The Core Principle:**
13
+ UI changes because APIs respond. Wait for the API response, not an arbitrary timeout.
14
+
15
+ **Traditional approach:**
16
+ ```typescript
17
+ await page.click('button');
18
+ await page.waitForTimeout(3000); // Hope 3 seconds is enough
19
+ await expect(page.locator('.success')).toBeVisible();
20
+ ```
21
+
22
+ **Network-first approach:**
23
+ ```typescript
24
+ const responsePromise = page.waitForResponse(
25
+ resp => resp.url().includes('/api/submit') && resp.ok()
26
+ );
27
+ await page.click('button');
28
+ await responsePromise; // Wait for actual response
29
+ await expect(page.locator('.success')).toBeVisible();
30
+ ```
31
+
32
+ **Result:** Deterministic tests that wait exactly as long as needed.
33
+
34
+ ## The Problem
35
+
36
+ ### Hard Waits Create Flakiness
37
+
38
+ ```typescript
39
+ // ❌ The flaky test pattern
40
+ test('should submit form', async ({ page }) => {
41
+ await page.fill('#name', 'Test User');
42
+ await page.click('button[type="submit"]');
43
+
44
+ await page.waitForTimeout(2000); // Wait 2 seconds
45
+
46
+ await expect(page.locator('.success')).toBeVisible();
47
+ });
48
+ ```
49
+
50
+ **Why this fails:**
51
+ - **Fast network:** Wastes 1.5 seconds waiting
52
+ - **Slow network:** Not enough time, test fails
53
+ - **CI environment:** Slower than local, fails randomly
54
+ - **Under load:** API takes 3 seconds, test fails
55
+
56
+ **Result:** "Works on my machine" syndrome, flaky CI.
57
+
58
+ ### The Timeout Escalation Trap
59
+
60
+ ```typescript
61
+ // Developer sees flaky test
62
+ await page.waitForTimeout(2000); // Failed in CI
63
+
64
+ // Increases timeout
65
+ await page.waitForTimeout(5000); // Still fails sometimes
66
+
67
+ // Increases again
68
+ await page.waitForTimeout(10000); // Now it passes... slowly
69
+
70
+ // Problem: Now EVERY test waits 10 seconds
71
+ // Suite that took 5 minutes now takes 30 minutes
72
+ ```
73
+
74
+ **Result:** Slow, still-flaky tests.
75
+
76
+ ### Race Conditions
77
+
78
+ ```typescript
79
+ // ❌ Navigate-then-wait race condition
80
+ test('should load dashboard data', async ({ page }) => {
81
+ await page.goto('/dashboard'); // Navigation starts
82
+
83
+ // Race condition! API might not have responded yet
84
+ await expect(page.locator('.data-table')).toBeVisible();
85
+ });
86
+ ```
87
+
88
+ **What happens:**
89
+ 1. `goto()` starts navigation
90
+ 2. Page loads HTML
91
+ 3. JavaScript requests `/api/dashboard`
92
+ 4. Test checks for `.data-table` BEFORE API responds
93
+ 5. Test fails intermittently
94
+
95
+ **Result:** "Sometimes it works, sometimes it doesn't."
96
+
97
+ ## The Solution: Intercept-Before-Navigate
98
+
99
+ ### Wait for Response Before Asserting
100
+
101
+ ```typescript
102
+ // ✅ Good: Network-first pattern
103
+ test('should load dashboard data', async ({ page }) => {
104
+ // Set up promise BEFORE navigation
105
+ const dashboardPromise = page.waitForResponse(
106
+ resp => resp.url().includes('/api/dashboard') && resp.ok()
107
+ );
108
+
109
+ // Navigate
110
+ await page.goto('/dashboard');
111
+
112
+ // Wait for API response
113
+ const response = await dashboardPromise;
114
+ const data = await response.json();
115
+
116
+ // Now assert UI
117
+ await expect(page.locator('.data-table')).toBeVisible();
118
+ await expect(page.locator('.data-table tr')).toHaveCount(data.items.length);
119
+ });
120
+ ```
121
+
122
+ **Why this works:**
123
+ - Wait set up BEFORE navigation (no race)
124
+ - Wait for actual API response (deterministic)
125
+ - No fixed timeout (fast when API is fast)
126
+ - Validates API response (catch backend errors)
127
+
128
+ **With Playwright Utils (Even Cleaner):**
129
+ ```typescript
130
+ import { test } from '@seontechnologies/playwright-utils/fixtures';
131
+ import { expect } from '@playwright/test';
132
+
133
+ test('should load dashboard data', async ({ page, interceptNetworkCall }) => {
134
+ // Set up interception BEFORE navigation
135
+ const dashboardCall = interceptNetworkCall({
136
+ method: 'GET',
137
+ url: '**/api/dashboard'
138
+ });
139
+
140
+ // Navigate
141
+ await page.goto('/dashboard');
142
+
143
+ // Wait for API response (automatic JSON parsing)
144
+ const { status, responseJson: data } = await dashboardCall;
145
+
146
+ // Validate API response
147
+ expect(status).toBe(200);
148
+ expect(data.items).toBeDefined();
149
+
150
+ // Assert UI matches API data
151
+ await expect(page.locator('.data-table')).toBeVisible();
152
+ await expect(page.locator('.data-table tr')).toHaveCount(data.items.length);
153
+ });
154
+ ```
155
+
156
+ **Playwright Utils Benefits:**
157
+ - Automatic JSON parsing (no `await response.json()`)
158
+ - Returns `{ status, responseJson, requestJson }` structure
159
+ - Cleaner API (no need to check `resp.ok()`)
160
+ - Same intercept-before-navigate pattern
161
+
162
+ ### Intercept-Before-Navigate Pattern
163
+
164
+ **Key insight:** Set up wait BEFORE triggering the action.
165
+
166
+ ```typescript
167
+ // ✅ Pattern: Intercept → Action → Await
168
+
169
+ // 1. Intercept (set up wait)
170
+ const promise = page.waitForResponse(matcher);
171
+
172
+ // 2. Action (trigger request)
173
+ await page.click('button');
174
+
175
+ // 3. Await (wait for actual response)
176
+ await promise;
177
+ ```
178
+
179
+ **Why this order:**
180
+ - `waitForResponse()` starts listening immediately
181
+ - Then trigger the action that makes the request
182
+ - Then wait for the promise to resolve
183
+ - No race condition possible
184
+
185
+ #### Intercept-Before-Navigate Flow
186
+
187
+ ```mermaid
188
+ %%{init: {'theme':'base', 'themeVariables': { 'fontSize':'14px'}}}%%
189
+ sequenceDiagram
190
+ participant Test
191
+ participant Playwright
192
+ participant Browser
193
+ participant API
194
+
195
+ rect rgb(200, 230, 201)
196
+ Note over Test,Playwright: ✅ CORRECT: Intercept First
197
+ Test->>Playwright: 1. waitForResponse(matcher)
198
+ Note over Playwright: Starts listening for response
199
+ Test->>Browser: 2. click('button')
200
+ Browser->>API: 3. POST /api/submit
201
+ API-->>Browser: 4. 200 OK {success: true}
202
+ Browser-->>Playwright: 5. Response captured
203
+ Test->>Playwright: 6. await promise
204
+ Playwright-->>Test: 7. Returns response
205
+ Note over Test: No race condition!
206
+ end
207
+
208
+ rect rgb(255, 205, 210)
209
+ Note over Test,API: ❌ WRONG: Action First
210
+ Test->>Browser: 1. click('button')
211
+ Browser->>API: 2. POST /api/submit
212
+ API-->>Browser: 3. 200 OK (already happened!)
213
+ Test->>Playwright: 4. waitForResponse(matcher)
214
+ Note over Test,Playwright: Too late - response already occurred
215
+ Note over Test: Race condition! Test hangs or fails
216
+ end
217
+ ```
218
+
219
+ **Correct Order (Green):**
220
+ 1. Set up listener (`waitForResponse`)
221
+ 2. Trigger action (`click`)
222
+ 3. Wait for response (`await promise`)
223
+
224
+ **Wrong Order (Red):**
225
+ 1. Trigger action first
226
+ 2. Set up listener too late
227
+ 3. Response already happened - missed!
228
+
229
+ ## How It Works in TEA
230
+
231
+ ### TEA Generates Network-First Tests
232
+
233
+ **Vanilla Playwright:**
234
+ ```typescript
235
+ // When you run `atdd` or `automate`, TEA generates:
236
+
237
+ test('should create user', async ({ page }) => {
238
+ // TEA automatically includes network wait
239
+ const createUserPromise = page.waitForResponse(
240
+ resp => resp.url().includes('/api/users') &&
241
+ resp.request().method() === 'POST' &&
242
+ resp.ok()
243
+ );
244
+
245
+ await page.fill('#name', 'Test User');
246
+ await page.click('button[type="submit"]');
247
+
248
+ const response = await createUserPromise;
249
+ const user = await response.json();
250
+
251
+ // Validate both API and UI
252
+ expect(user.id).toBeDefined();
253
+ await expect(page.locator('.success')).toContainText(user.name);
254
+ });
255
+ ```
256
+
257
+ **With Playwright Utils (if `tea_use_playwright_utils: true`):**
258
+ ```typescript
259
+ import { test } from '@seontechnologies/playwright-utils/fixtures';
260
+ import { expect } from '@playwright/test';
261
+
262
+ test('should create user', async ({ page, interceptNetworkCall }) => {
263
+ // TEA uses interceptNetworkCall for cleaner interception
264
+ const createUserCall = interceptNetworkCall({
265
+ method: 'POST',
266
+ url: '**/api/users'
267
+ });
268
+
269
+ await page.getByLabel('Name').fill('Test User');
270
+ await page.getByRole('button', { name: 'Submit' }).click();
271
+
272
+ // Wait for response (automatic JSON parsing)
273
+ const { status, responseJson: user } = await createUserCall;
274
+
275
+ // Validate both API and UI
276
+ expect(status).toBe(201);
277
+ expect(user.id).toBeDefined();
278
+ await expect(page.locator('.success')).toContainText(user.name);
279
+ });
280
+ ```
281
+
282
+ **Playwright Utils Benefits:**
283
+ - Automatic JSON parsing (`responseJson` ready to use)
284
+ - No manual `await response.json()`
285
+ - Returns `{ status, responseJson }` structure
286
+ - Cleaner, more readable code
287
+
288
+ ### TEA Reviews for Hard Waits
289
+
290
+ When you run `test-review`:
291
+
292
+ ```markdown
293
+ ## Critical Issue: Hard Wait Detected
294
+
295
+ **File:** tests/e2e/submit.spec.ts:45
296
+ **Issue:** Using `page.waitForTimeout(3000)`
297
+ **Severity:** Critical (causes flakiness)
298
+
299
+ **Current Code:**
300
+ ```typescript
301
+ await page.click('button');
302
+ await page.waitForTimeout(3000); // ❌
303
+ ```
304
+
305
+ **Fix:**
306
+ ```typescript
307
+ const responsePromise = page.waitForResponse(
308
+ resp => resp.url().includes('/api/submit') && resp.ok()
309
+ );
310
+ await page.click('button');
311
+ await responsePromise; // ✅
312
+ ```
313
+
314
+ **Why:** Hard waits are non-deterministic. Use network-first patterns.
315
+ ```
316
+
317
+ ## Pattern Variations
318
+
319
+ ### Basic Response Wait
320
+
321
+ **Vanilla Playwright:**
322
+ ```typescript
323
+ // Wait for any successful response
324
+ const promise = page.waitForResponse(resp => resp.ok());
325
+ await page.click('button');
326
+ await promise;
327
+ ```
328
+
329
+ **With Playwright Utils:**
330
+ ```typescript
331
+ import { test } from '@seontechnologies/playwright-utils/fixtures';
332
+
333
+ test('basic wait', async ({ page, interceptNetworkCall }) => {
334
+ const responseCall = interceptNetworkCall({ url: '**' }); // Match any
335
+ await page.click('button');
336
+ const { status } = await responseCall;
337
+ expect(status).toBe(200);
338
+ });
339
+ ```
340
+
341
+ ---
342
+
343
+ ### Specific URL Match
344
+
345
+ **Vanilla Playwright:**
346
+ ```typescript
347
+ // Wait for specific endpoint
348
+ const promise = page.waitForResponse(
349
+ resp => resp.url().includes('/api/users/123')
350
+ );
351
+ await page.goto('/user/123');
352
+ await promise;
353
+ ```
354
+
355
+ **With Playwright Utils:**
356
+ ```typescript
357
+ test('specific URL', async ({ page, interceptNetworkCall }) => {
358
+ const userCall = interceptNetworkCall({ url: '**/api/users/123' });
359
+ await page.goto('/user/123');
360
+ const { status, responseJson } = await userCall;
361
+ expect(status).toBe(200);
362
+ });
363
+ ```
364
+
365
+ ---
366
+
367
+ ### Method + Status Match
368
+
369
+ **Vanilla Playwright:**
370
+ ```typescript
371
+ // Wait for POST that returns 201
372
+ const promise = page.waitForResponse(
373
+ resp =>
374
+ resp.url().includes('/api/users') &&
375
+ resp.request().method() === 'POST' &&
376
+ resp.status() === 201
377
+ );
378
+ await page.click('button[type="submit"]');
379
+ await promise;
380
+ ```
381
+
382
+ **With Playwright Utils:**
383
+ ```typescript
384
+ test('method and status', async ({ page, interceptNetworkCall }) => {
385
+ const createCall = interceptNetworkCall({
386
+ method: 'POST',
387
+ url: '**/api/users'
388
+ });
389
+ await page.click('button[type="submit"]');
390
+ const { status, responseJson } = await createCall;
391
+ expect(status).toBe(201); // Explicit status check
392
+ });
393
+ ```
394
+
395
+ ---
396
+
397
+ ### Multiple Responses
398
+
399
+ **Vanilla Playwright:**
400
+ ```typescript
401
+ // Wait for multiple API calls
402
+ const [usersResp, postsResp] = await Promise.all([
403
+ page.waitForResponse(resp => resp.url().includes('/api/users')),
404
+ page.waitForResponse(resp => resp.url().includes('/api/posts')),
405
+ page.goto('/dashboard') // Triggers both requests
406
+ ]);
407
+
408
+ const users = await usersResp.json();
409
+ const posts = await postsResp.json();
410
+ ```
411
+
412
+ **With Playwright Utils:**
413
+ ```typescript
414
+ test('multiple responses', async ({ page, interceptNetworkCall }) => {
415
+ const usersCall = interceptNetworkCall({ url: '**/api/users' });
416
+ const postsCall = interceptNetworkCall({ url: '**/api/posts' });
417
+
418
+ await page.goto('/dashboard'); // Triggers both
419
+
420
+ const [{ responseJson: users }, { responseJson: posts }] = await Promise.all([
421
+ usersCall,
422
+ postsCall
423
+ ]);
424
+
425
+ expect(users).toBeInstanceOf(Array);
426
+ expect(posts).toBeInstanceOf(Array);
427
+ });
428
+ ```
429
+
430
+ ---
431
+
432
+ ### Validate Response Data
433
+
434
+ **Vanilla Playwright:**
435
+ ```typescript
436
+ // Verify API response before asserting UI
437
+ const promise = page.waitForResponse(
438
+ resp => resp.url().includes('/api/checkout') && resp.ok()
439
+ );
440
+
441
+ await page.click('button:has-text("Complete Order")');
442
+
443
+ const response = await promise;
444
+ const order = await response.json();
445
+
446
+ // Response validation
447
+ expect(order.status).toBe('confirmed');
448
+ expect(order.total).toBeGreaterThan(0);
449
+
450
+ // UI validation
451
+ await expect(page.locator('.order-confirmation')).toContainText(order.id);
452
+ ```
453
+
454
+ **With Playwright Utils:**
455
+ ```typescript
456
+ test('validate response data', async ({ page, interceptNetworkCall }) => {
457
+ const checkoutCall = interceptNetworkCall({
458
+ method: 'POST',
459
+ url: '**/api/checkout'
460
+ });
461
+
462
+ await page.click('button:has-text("Complete Order")');
463
+
464
+ const { status, responseJson: order } = await checkoutCall;
465
+
466
+ // Response validation (automatic JSON parsing)
467
+ expect(status).toBe(200);
468
+ expect(order.status).toBe('confirmed');
469
+ expect(order.total).toBeGreaterThan(0);
470
+
471
+ // UI validation
472
+ await expect(page.locator('.order-confirmation')).toContainText(order.id);
473
+ });
474
+ ```
475
+
476
+ ## Advanced Patterns
477
+
478
+ ### HAR Recording for Offline Testing
479
+
480
+ **Vanilla Playwright (Manual HAR Handling):**
481
+
482
+ ```typescript
483
+ // First run: Record mode (saves HAR file)
484
+ test('offline testing - RECORD', async ({ page, context }) => {
485
+ // Record mode: Save network traffic to HAR
486
+ await context.routeFromHAR('./hars/dashboard.har', {
487
+ url: '**/api/**',
488
+ update: true // Update HAR file
489
+ });
490
+
491
+ await page.goto('/dashboard');
492
+ // All network traffic saved to dashboard.har
493
+ });
494
+
495
+ // Subsequent runs: Playback mode (uses saved HAR)
496
+ test('offline testing - PLAYBACK', async ({ page, context }) => {
497
+ // Playback mode: Use saved network traffic
498
+ await context.routeFromHAR('./hars/dashboard.har', {
499
+ url: '**/api/**',
500
+ update: false // Use existing HAR, no network calls
501
+ });
502
+
503
+ await page.goto('/dashboard');
504
+ // Uses recorded responses, no backend needed
505
+ });
506
+ ```
507
+
508
+ **With Playwright Utils (Automatic HAR Management):**
509
+ ```typescript
510
+ import { test } from '@seontechnologies/playwright-utils/network-recorder/fixtures';
511
+
512
+ // Record mode: Set environment variable
513
+ process.env.PW_NET_MODE = 'record';
514
+
515
+ test('should work offline', async ({ page, context, networkRecorder }) => {
516
+ await networkRecorder.setup(context); // Handles HAR automatically
517
+
518
+ await page.goto('/dashboard');
519
+ await page.click('#add-item');
520
+ // All network traffic recorded, CRUD operations detected
521
+ });
522
+ ```
523
+
524
+ **Switch to playback:**
525
+ ```bash
526
+ # Playback mode (offline)
527
+ PW_NET_MODE=playback npx playwright test
528
+ # Uses HAR file, no backend needed!
529
+ ```
530
+
531
+ **Playwright Utils Benefits:**
532
+ - Automatic HAR file management (naming, paths)
533
+ - CRUD operation detection (stateful mocking)
534
+ - Environment variable control (easy switching)
535
+ - Works for complex interactions (create, update, delete)
536
+ - No manual route configuration
537
+
538
+ ### Network Request Interception
539
+
540
+ **Vanilla Playwright:**
541
+ ```typescript
542
+ test('should handle API error', async ({ page }) => {
543
+ // Manual route setup
544
+ await page.route('**/api/users', (route) => {
545
+ route.fulfill({
546
+ status: 500,
547
+ body: JSON.stringify({ error: 'Internal server error' })
548
+ });
549
+ });
550
+
551
+ await page.goto('/users');
552
+
553
+ const response = await page.waitForResponse('**/api/users');
554
+ const error = await response.json();
555
+
556
+ expect(error.error).toContain('Internal server');
557
+ await expect(page.locator('.error-message')).toContainText('Server error');
558
+ });
559
+ ```
560
+
561
+ **With Playwright Utils:**
562
+ ```typescript
563
+ import { test } from '@seontechnologies/playwright-utils/fixtures';
564
+
565
+ test('should handle API error', async ({ page, interceptNetworkCall }) => {
566
+ // Stub API to return error (set up BEFORE navigation)
567
+ const usersCall = interceptNetworkCall({
568
+ method: 'GET',
569
+ url: '**/api/users',
570
+ fulfillResponse: {
571
+ status: 500,
572
+ body: { error: 'Internal server error' }
573
+ }
574
+ });
575
+
576
+ await page.goto('/users');
577
+
578
+ // Wait for mocked response and access parsed data
579
+ const { status, responseJson } = await usersCall;
580
+
581
+ expect(status).toBe(500);
582
+ expect(responseJson.error).toContain('Internal server');
583
+ await expect(page.locator('.error-message')).toContainText('Server error');
584
+ });
585
+ ```
586
+
587
+ **Playwright Utils Benefits:**
588
+ - Automatic JSON parsing (`responseJson` ready to use)
589
+ - Returns promise with `{ status, responseJson, requestJson }`
590
+ - No need to pass `page` (auto-injected by fixture)
591
+ - Glob pattern matching (simpler than regex)
592
+ - Single declarative call (setup + wait in one)
593
+
594
+ ## Comparison: Traditional vs Network-First
595
+
596
+ ### Loading Dashboard Data
597
+
598
+ **Traditional (Flaky):**
599
+ ```typescript
600
+ test('dashboard loads data', async ({ page }) => {
601
+ await page.goto('/dashboard');
602
+ await page.waitForTimeout(2000); // ❌ Magic number
603
+ await expect(page.locator('table tr')).toHaveCount(5);
604
+ });
605
+ ```
606
+
607
+ **Failure modes:**
608
+ - API takes 2.5s → test fails
609
+ - API returns 3 items not 5 → hard to debug (which issue?)
610
+ - CI slower than local → fails in CI only
611
+
612
+ **Network-First (Deterministic):**
613
+ ```typescript
614
+ test('dashboard loads data', async ({ page }) => {
615
+ const apiPromise = page.waitForResponse(
616
+ resp => resp.url().includes('/api/dashboard') && resp.ok()
617
+ );
618
+
619
+ await page.goto('/dashboard');
620
+
621
+ const response = await apiPromise;
622
+ const { items } = await response.json();
623
+
624
+ // Validate API response
625
+ expect(items).toHaveLength(5);
626
+
627
+ // Validate UI matches API
628
+ await expect(page.locator('table tr')).toHaveCount(items.length);
629
+ });
630
+ ```
631
+
632
+ **Benefits:**
633
+ - Waits exactly as long as needed (100ms or 5s, doesn't matter)
634
+ - Validates API response (catch backend errors)
635
+ - Validates UI matches API (catch frontend bugs)
636
+ - Works in any environment (local, CI, staging)
637
+
638
+ **With Playwright Utils (Even Better):**
639
+ ```typescript
640
+ import { test } from '@seontechnologies/playwright-utils/fixtures';
641
+
642
+ test('dashboard loads data', async ({ page, interceptNetworkCall }) => {
643
+ const dashboardCall = interceptNetworkCall({
644
+ method: 'GET',
645
+ url: '**/api/dashboard'
646
+ });
647
+
648
+ await page.goto('/dashboard');
649
+
650
+ const { status, responseJson: { items } } = await dashboardCall;
651
+
652
+ // Validate API response (automatic JSON parsing)
653
+ expect(status).toBe(200);
654
+ expect(items).toHaveLength(5);
655
+
656
+ // Validate UI matches API
657
+ await expect(page.locator('table tr')).toHaveCount(items.length);
658
+ });
659
+ ```
660
+
661
+ **Additional Benefits:**
662
+ - No manual `await response.json()` (automatic parsing)
663
+ - Cleaner destructuring of nested data
664
+ - Consistent API across all network calls
665
+
666
+ ---
667
+
668
+ ### Form Submission
669
+
670
+ **Traditional (Flaky):**
671
+ ```typescript
672
+ test('form submission', async ({ page }) => {
673
+ await page.fill('#email', 'test@example.com');
674
+ await page.click('button[type="submit"]');
675
+ await page.waitForTimeout(3000); // ❌ Hope it's enough
676
+ await expect(page.locator('.success')).toBeVisible();
677
+ });
678
+ ```
679
+
680
+ **Network-First (Deterministic):**
681
+ ```typescript
682
+ test('form submission', async ({ page }) => {
683
+ const submitPromise = page.waitForResponse(
684
+ resp => resp.url().includes('/api/submit') &&
685
+ resp.request().method() === 'POST' &&
686
+ resp.ok()
687
+ );
688
+
689
+ await page.fill('#email', 'test@example.com');
690
+ await page.click('button[type="submit"]');
691
+
692
+ const response = await submitPromise;
693
+ const result = await response.json();
694
+
695
+ expect(result.success).toBe(true);
696
+ await expect(page.locator('.success')).toBeVisible();
697
+ });
698
+ ```
699
+
700
+ **With Playwright Utils:**
701
+ ```typescript
702
+ import { test } from '@seontechnologies/playwright-utils/fixtures';
703
+
704
+ test('form submission', async ({ page, interceptNetworkCall }) => {
705
+ const submitCall = interceptNetworkCall({
706
+ method: 'POST',
707
+ url: '**/api/submit'
708
+ });
709
+
710
+ await page.getByLabel('Email').fill('test@example.com');
711
+ await page.getByRole('button', { name: 'Submit' }).click();
712
+
713
+ const { status, responseJson: result } = await submitCall;
714
+
715
+ // Automatic JSON parsing, no manual await
716
+ expect(status).toBe(200);
717
+ expect(result.success).toBe(true);
718
+ await expect(page.locator('.success')).toBeVisible();
719
+ });
720
+ ```
721
+
722
+ **Progression:**
723
+ - Traditional: Hard waits (flaky)
724
+ - Network-First (Vanilla): waitForResponse (deterministic)
725
+ - Network-First (PW-Utils): interceptNetworkCall (deterministic + cleaner API)
726
+
727
+ ---
728
+
729
+ ## Common Misconceptions
730
+
731
+ ### "I Already Use waitForSelector"
732
+
733
+ ```typescript
734
+ // This is still a hard wait in disguise
735
+ await page.click('button');
736
+ await page.waitForSelector('.success', { timeout: 5000 });
737
+ ```
738
+
739
+ **Problem:** Waiting for DOM, not for the API that caused DOM change.
740
+
741
+ **Better:**
742
+ ```typescript
743
+ await page.waitForResponse(matcher); // Wait for root cause
744
+ await page.waitForSelector('.success'); // Then validate UI
745
+ ```
746
+
747
+ ### "My Tests Are Fast, Why Add Complexity?"
748
+
749
+ **Short-term:** Tests are fast locally
750
+
751
+ **Long-term problems:**
752
+ - Different environments (CI slower)
753
+ - Under load (API slower)
754
+ - Network variability (random)
755
+ - Scaling test suite (100 → 1000 tests)
756
+
757
+ **Network-first prevents these issues before they appear.**
758
+
759
+ ### "Too Much Boilerplate"
760
+
761
+ **Problem:** `waitForResponse` is verbose, repeated in every test.
762
+
763
+ **Solution:** Use Playwright Utils `interceptNetworkCall` - built-in fixture that reduces boilerplate.
764
+
765
+ **Vanilla Playwright (Repetitive):**
766
+ ```typescript
767
+ test('test 1', async ({ page }) => {
768
+ const promise = page.waitForResponse(
769
+ resp => resp.url().includes('/api/submit') && resp.ok()
770
+ );
771
+ await page.click('button');
772
+ await promise;
773
+ });
774
+
775
+ test('test 2', async ({ page }) => {
776
+ const promise = page.waitForResponse(
777
+ resp => resp.url().includes('/api/load') && resp.ok()
778
+ );
779
+ await page.click('button');
780
+ await promise;
781
+ });
782
+ // Repeated pattern in every test
783
+ ```
784
+
785
+ **With Playwright Utils (Cleaner):**
786
+ ```typescript
787
+ import { test } from '@seontechnologies/playwright-utils/fixtures';
788
+
789
+ test('test 1', async ({ page, interceptNetworkCall }) => {
790
+ const submitCall = interceptNetworkCall({ url: '**/api/submit' });
791
+ await page.click('button');
792
+ const { status, responseJson } = await submitCall;
793
+ expect(status).toBe(200);
794
+ });
795
+
796
+ test('test 2', async ({ page, interceptNetworkCall }) => {
797
+ const loadCall = interceptNetworkCall({ url: '**/api/load' });
798
+ await page.click('button');
799
+ const { responseJson } = await loadCall;
800
+ // Automatic JSON parsing, cleaner API
801
+ });
802
+ ```
803
+
804
+ **Benefits:**
805
+ - Less boilerplate (fixture handles complexity)
806
+ - Automatic JSON parsing
807
+ - Glob pattern matching (`**/api/**`)
808
+ - Consistent API across all tests
809
+
810
+ See [Integrate Playwright Utils](/docs/tea/how-to/customization/integrate-playwright-utils.md#intercept-network-call) for setup.
811
+
812
+ ## Technical Implementation
813
+
814
+ For detailed network-first patterns, see the knowledge base:
815
+ - [Knowledge Base Index - Network & Reliability](/docs/tea/reference/knowledge-base.md)
816
+ - [Complete Knowledge Base Index](/docs/tea/reference/knowledge-base.md)
817
+
818
+ ## Related Concepts
819
+
820
+ **Core TEA Concepts:**
821
+ - [Test Quality Standards](/docs/tea/explanation/test-quality-standards.md) - Determinism requires network-first
822
+ - [Risk-Based Testing](/docs/tea/explanation/risk-based-testing.md) - High-risk features need reliable tests
823
+
824
+ **Technical Patterns:**
825
+ - [Fixture Architecture](/docs/tea/explanation/fixture-architecture.md) - Network utilities as fixtures
826
+ - [Knowledge Base System](/docs/tea/explanation/knowledge-base-system.md) - Network patterns in knowledge base
827
+
828
+ **Overview:**
829
+ - [TEA Overview](/docs/tea/explanation/tea-overview.md) - Network-first in workflows
830
+ - [Testing as Engineering](/docs/tea/explanation/testing-as-engineering.md) - Why flakiness matters
831
+
832
+ ## Practical Guides
833
+
834
+ **Workflow Guides:**
835
+ - [How to Run Test Review](/docs/tea/how-to/workflows/run-test-review.md) - Review for hard waits
836
+ - [How to Run ATDD](/docs/tea/how-to/workflows/run-atdd.md) - Generate network-first tests
837
+ - [How to Run Automate](/docs/tea/how-to/workflows/run-automate.md) - Expand with network patterns
838
+
839
+ **Use-Case Guides:**
840
+ - [Using TEA with Existing Tests](/docs/tea/how-to/brownfield/use-tea-with-existing-tests.md) - Fix flaky legacy tests
841
+
842
+ **Customization:**
843
+ - [Integrate Playwright Utils](/docs/tea/how-to/customization/integrate-playwright-utils.md) - Network utilities (recorder, interceptor, error monitor)
844
+
845
+ ## Reference
846
+
847
+ - [TEA Command Reference](/docs/tea/reference/commands.md) - All workflows use network-first
848
+ - [Knowledge Base Index](/docs/tea/reference/knowledge-base.md) - Network-first fragment
849
+ - [Glossary](/docs/tea/glossary/index.md#test-architect-tea-concepts) - Network-first pattern term
850
+
851
+ ---
852
+
853
+ Generated with [BMad Method](https://bmad-method.org) - TEA (Test Architect)