bmad-method 6.0.0-alpha.22 → 6.0.0-alpha.23

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 (668) hide show
  1. package/.coderabbit.yaml +2 -2
  2. package/.github/workflows/docs.yaml +3 -12
  3. package/CHANGELOG.md +153 -0
  4. package/CNAME +1 -0
  5. package/CONTRIBUTING.md +9 -7
  6. package/README.md +40 -198
  7. package/docs/404.md +9 -0
  8. package/docs/{modules/bmm-bmad-method/images/README.md → _README_WORKFLOW_DIAGRAMS.md} +4 -1
  9. package/docs/_STYLE_GUIDE.md +347 -0
  10. package/docs/_archive/getting-started-bmadv4.md +247 -0
  11. package/{website/src/pages → docs}/downloads.md +17 -11
  12. package/docs/{modules/bmm-bmad-method/quick-flow-solo-dev.md → explanation/agents/barry-quick-flow.md} +18 -15
  13. package/docs/explanation/agents/index.md +28 -0
  14. package/docs/explanation/architecture/four-phases.md +126 -0
  15. package/docs/explanation/architecture/preventing-agent-conflicts.md +138 -0
  16. package/docs/explanation/architecture/why-solutioning-matters.md +91 -0
  17. package/docs/{modules/bmb-bmad-builder/custom-content.md → explanation/bmad-builder/custom-content-types.md} +17 -18
  18. package/docs/explanation/bmad-builder/index.md +66 -0
  19. package/docs/{modules/bmm-bmad-method → explanation/bmm}/index.md +27 -22
  20. package/docs/explanation/core/index.md +18 -0
  21. package/docs/explanation/core-concepts/agent-roles.md +204 -0
  22. package/docs/explanation/core-concepts/index.md +40 -0
  23. package/docs/{bmad-core-concepts/agents.md → explanation/core-concepts/what-are-agents.md} +8 -5
  24. package/docs/{bmad-core-concepts/modules.md → explanation/core-concepts/what-are-modules.md} +12 -9
  25. package/docs/explanation/core-concepts/what-are-workflows.md +217 -0
  26. package/docs/{modules/cis-creative-intelligence-suite → explanation/creative-intelligence}/index.md +26 -54
  27. package/docs/explanation/faq/brownfield-faq.md +73 -0
  28. package/docs/explanation/faq/getting-started-faq.md +62 -0
  29. package/docs/explanation/faq/implementation-faq.md +52 -0
  30. package/docs/explanation/faq/index.md +16 -0
  31. package/docs/explanation/faq/levels-and-tracks-faq.md +52 -0
  32. package/docs/explanation/faq/planning-faq.md +41 -0
  33. package/docs/explanation/faq/tools-faq.md +253 -0
  34. package/docs/explanation/faq/workflows-faq.md +61 -0
  35. package/docs/{modules/core → explanation/features}/advanced-elicitation.md +5 -2
  36. package/docs/{modules/core/brainstorming.md → explanation/features/brainstorming-techniques.md} +4 -1
  37. package/docs/{modules/bmm-bmad-method → explanation/features}/party-mode.md +7 -9
  38. package/docs/explanation/features/quick-flow.md +169 -0
  39. package/docs/{modules/bmm-bmad-method/test-architecture.md → explanation/features/tea-overview.md} +144 -98
  40. package/docs/{bmad-core-concepts/web-bundles/index.md → explanation/features/web-bundles.md} +6 -5
  41. package/docs/{modules/bmgd-bmad-game-dev/agents-guide.md → explanation/game-dev/agents.md} +8 -5
  42. package/docs/explanation/game-dev/bmgd-vs-bmm.md +150 -0
  43. package/docs/{modules/bmgd-bmad-game-dev/game-types-guide.md → explanation/game-dev/game-types.md} +7 -4
  44. package/docs/explanation/game-dev/index.md +85 -0
  45. package/docs/explanation/philosophy/facilitation-over-generation.md +121 -0
  46. package/docs/explanation/philosophy/testing-as-engineering.md +119 -0
  47. package/docs/how-to/brownfield/add-feature-to-existing.md +91 -0
  48. package/docs/how-to/brownfield/document-existing-project.md +84 -0
  49. package/docs/how-to/brownfield/index.md +102 -0
  50. package/docs/how-to/brownfield/quick-fix-in-brownfield.md +94 -0
  51. package/docs/{bmad-core-concepts/bmad-customization/agents.md → how-to/customization/customize-agents.md} +8 -10
  52. package/docs/{bmad-core-concepts/bmad-customization/workflows.md → how-to/customization/customize-workflows.md} +8 -5
  53. package/docs/how-to/customization/index.md +27 -0
  54. package/docs/{modules/core/document-sharding-guide.md → how-to/customization/shard-large-documents.md} +9 -17
  55. package/docs/{modules/bmb-bmad-builder/workflow-vendoring-customization-inheritance.md → how-to/customization/vendor-workflows.md} +4 -1
  56. package/docs/how-to/get-answers-about-bmad.md +98 -0
  57. package/docs/how-to/installation/index.md +15 -0
  58. package/docs/how-to/installation/install-bmad.md +138 -0
  59. package/docs/{modules/bmb-bmad-builder/custom-content-installation.md → how-to/installation/install-custom-modules.md} +12 -9
  60. package/docs/{bmad-core-concepts/installing/upgrading.md → how-to/installation/upgrade-to-v6.md} +6 -3
  61. package/docs/{modules/bmgd-bmad-game-dev/troubleshooting.md → how-to/troubleshooting/bmgd-troubleshooting.md} +7 -5
  62. package/docs/{modules/bmgd-bmad-game-dev/quick-flow-guide.md → how-to/workflows/bmgd-quick-flow.md} +8 -5
  63. package/docs/how-to/workflows/conduct-research.md +130 -0
  64. package/docs/how-to/workflows/create-architecture.md +147 -0
  65. package/docs/how-to/workflows/create-epics-and-stories.md +136 -0
  66. package/docs/how-to/workflows/create-prd.md +130 -0
  67. package/docs/how-to/workflows/create-product-brief.md +117 -0
  68. package/docs/how-to/workflows/create-story.md +119 -0
  69. package/docs/how-to/workflows/create-ux-design.md +117 -0
  70. package/docs/how-to/workflows/implement-story.md +127 -0
  71. package/docs/how-to/workflows/quick-spec.md +159 -0
  72. package/docs/how-to/workflows/run-brainstorming-session.md +94 -0
  73. package/docs/how-to/workflows/run-code-review.md +141 -0
  74. package/docs/how-to/workflows/run-implementation-readiness.md +162 -0
  75. package/docs/how-to/workflows/run-sprint-planning.md +111 -0
  76. package/docs/how-to/workflows/run-test-design.md +128 -0
  77. package/docs/how-to/workflows/setup-party-mode.md +117 -0
  78. package/docs/how-to/workflows/setup-test-framework.md +113 -0
  79. package/docs/index.md +35 -83
  80. package/docs/{modules/bmm-bmad-method/agents-guide.md → reference/agents/index.md} +36 -39
  81. package/docs/{modules/core → reference/configuration}/core-tasks.md +5 -2
  82. package/docs/{modules/core/global-core-config.md → reference/configuration/global-config.md} +4 -1
  83. package/docs/{modules/bmm-bmad-method/glossary.md → reference/glossary/index.md} +90 -24
  84. package/docs/{modules/bmgd-bmad-game-dev/workflows-guide.md → reference/workflows/bmgd-workflows.md} +11 -8
  85. package/docs/{modules/core → reference/workflows}/core-workflows.md +9 -6
  86. package/docs/{modules/bmm-bmad-method/workflow-document-project-reference.md → reference/workflows/document-project.md} +7 -4
  87. package/docs/reference/workflows/index.md +16 -0
  88. package/docs/tutorials/advanced/create-custom-agent.md +171 -0
  89. package/docs/tutorials/getting-started/getting-started-bmadv6.md +246 -0
  90. package/docs/tutorials/getting-started/quick-start-bmgd.md +260 -0
  91. package/docs/tutorials/getting-started/workflow-overview.jpg +0 -0
  92. package/eslint.config.mjs +2 -2
  93. package/package.json +10 -10
  94. package/samples/sample-custom-modules/sample-unitary-module/agents/commit-poet/commit-poet.agent.yaml +1 -0
  95. package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +1 -1
  96. package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +1 -1
  97. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-01-init.md +3 -3
  98. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-02-q1.md +3 -3
  99. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-03-q2.md +3 -3
  100. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-04-q3.md +3 -3
  101. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-05-q4.md +3 -3
  102. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-06-q5.md +3 -3
  103. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-07-q6.md +3 -3
  104. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-08-q7.md +3 -3
  105. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-09-q8.md +3 -3
  106. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-10-q9.md +3 -3
  107. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-11-q10.md +3 -3
  108. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-12-results.md +2 -2
  109. package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/workflow.md +1 -1
  110. package/samples/sample-custom-modules/sample-wellness-module/agents/meditation-guide.agent.yaml +1 -0
  111. package/src/core/agents/bmad-master.agent.yaml +1 -0
  112. package/src/core/tasks/shard-doc.xml +2 -2
  113. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +68 -9
  114. package/src/core/workflows/brainstorming/workflow.md +7 -0
  115. package/src/modules/bmb/agents/agent-builder.agent.yaml +5 -0
  116. package/src/modules/bmb/agents/module-builder.agent.yaml +5 -8
  117. package/src/modules/bmb/agents/workflow-builder.agent.yaml +16 -7
  118. package/src/modules/bmb/workflows/agent/data/agent-menu-patterns.md +5 -5
  119. package/src/modules/bmb/workflows/agent/data/critical-actions.md +2 -2
  120. package/src/modules/bmb/workflows/agent/data/expert-agent-architecture.md +1 -1
  121. package/src/modules/bmb/workflows/agent/data/expert-agent-validation.md +2 -1
  122. package/src/modules/bmb/workflows/agent/data/module-agent-validation.md +2 -0
  123. package/src/modules/bmb/workflows/agent/data/reference/expert-examples/journal-keeper/journal-keeper.agent.yaml +1 -0
  124. package/src/modules/bmb/workflows/agent/data/reference/module-examples/architect.agent.yaml +1 -0
  125. package/src/modules/bmb/workflows/agent/data/reference/module-examples/security-engineer.agent.yaml +1 -0
  126. package/src/modules/bmb/workflows/agent/data/reference/module-examples/trend-analyst.agent.yaml +1 -0
  127. package/src/modules/bmb/workflows/agent/data/reference/simple-examples/commit-poet.agent.yaml +1 -0
  128. package/src/modules/bmb/workflows/agent/data/simple-agent-validation.md +2 -1
  129. package/src/modules/bmb/workflows/agent/steps-c/step-01-brainstorm.md +3 -1
  130. package/src/modules/bmb/workflows/agent/steps-c/step-02-discovery.md +3 -1
  131. package/src/modules/bmb/workflows/agent/steps-c/step-03-type-metadata.md +6 -4
  132. package/src/modules/bmb/workflows/agent/steps-c/step-04-persona.md +4 -2
  133. package/src/modules/bmb/workflows/agent/steps-c/step-05-commands-menu.md +4 -2
  134. package/src/modules/bmb/workflows/agent/steps-c/step-06-activation.md +11 -7
  135. package/src/modules/bmb/workflows/agent/steps-c/step-07a-build-simple.md +7 -5
  136. package/src/modules/bmb/workflows/agent/steps-c/step-07b-build-expert.md +16 -16
  137. package/src/modules/bmb/workflows/agent/steps-c/step-07c-build-module.md +2 -2
  138. package/src/modules/bmb/workflows/agent/steps-c/{step-09-celebrate.md → step-08-celebrate.md} +14 -9
  139. package/src/modules/bmb/workflows/agent/steps-e/e-01-load-existing.md +12 -5
  140. package/src/modules/bmb/workflows/agent/steps-e/e-02-discover-edits.md +5 -3
  141. package/src/modules/bmb/workflows/agent/steps-e/e-03-placeholder.md +1 -0
  142. package/src/modules/bmb/workflows/agent/steps-e/e-04-type-metadata.md +3 -1
  143. package/src/modules/bmb/workflows/agent/steps-e/e-05-persona.md +3 -1
  144. package/src/modules/bmb/workflows/agent/steps-e/e-06-commands-menu.md +3 -1
  145. package/src/modules/bmb/workflows/agent/steps-e/e-07-activation.md +13 -10
  146. package/src/modules/bmb/workflows/agent/steps-e/e-08a-edit-simple.md +8 -5
  147. package/src/modules/bmb/workflows/agent/steps-e/e-08b-edit-expert.md +7 -5
  148. package/src/modules/bmb/workflows/agent/steps-e/e-08c-edit-module.md +8 -5
  149. package/src/modules/bmb/workflows/agent/steps-e/{e-10-celebrate.md → e-09-celebrate.md} +13 -8
  150. package/src/modules/bmb/workflows/agent/steps-v/v-01-load-review.md +14 -6
  151. package/src/modules/bmb/workflows/agent/steps-v/v-02a-validate-metadata.md +54 -11
  152. package/src/modules/bmb/workflows/agent/steps-v/v-02b-validate-persona.md +62 -10
  153. package/src/modules/bmb/workflows/agent/steps-v/v-02c-validate-menu.md +84 -10
  154. package/src/modules/bmb/workflows/agent/steps-v/v-02d-validate-structure.md +75 -10
  155. package/src/modules/bmb/workflows/agent/steps-v/v-02e-validate-sidecar.md +76 -16
  156. package/src/modules/bmb/workflows/agent/steps-v/v-03-summary.md +5 -1
  157. package/src/modules/bmb/workflows/agent/templates/expert-agent-template/expert-agent.template.md +1 -0
  158. package/src/modules/bmb/workflows/agent/templates/simple-agent.template.md +1 -0
  159. package/src/modules/bmb/workflows/module/data/agent-architecture.md +179 -0
  160. package/src/modules/bmb/workflows/module/data/agent-spec-template.md +79 -0
  161. package/src/modules/bmb/workflows/module/data/module-installer-standards.md +348 -0
  162. package/src/modules/bmb/workflows/module/data/module-standards.md +280 -0
  163. package/src/modules/bmb/workflows/module/data/module-yaml-conventions.md +392 -0
  164. package/src/modules/bmb/workflows/module/steps-b/step-01-welcome.md +147 -0
  165. package/src/modules/bmb/workflows/module/steps-b/step-02-spark.md +140 -0
  166. package/src/modules/bmb/workflows/module/steps-b/step-03-module-type.md +148 -0
  167. package/src/modules/bmb/workflows/module/steps-b/step-04-vision.md +82 -0
  168. package/src/modules/bmb/workflows/module/steps-b/step-05-identity.md +96 -0
  169. package/src/modules/bmb/workflows/module/steps-b/step-06-users.md +85 -0
  170. package/src/modules/bmb/workflows/module/steps-b/step-07-value.md +75 -0
  171. package/src/modules/bmb/workflows/module/steps-b/step-08-agents.md +96 -0
  172. package/src/modules/bmb/workflows/module/steps-b/step-09-workflows.md +82 -0
  173. package/src/modules/bmb/workflows/module/steps-b/step-10-tools.md +90 -0
  174. package/src/modules/bmb/workflows/module/steps-b/step-11-scenarios.md +83 -0
  175. package/src/modules/bmb/workflows/module/steps-b/step-12-creative.md +94 -0
  176. package/src/modules/bmb/workflows/module/steps-b/step-13-review.md +104 -0
  177. package/src/modules/bmb/workflows/module/steps-b/step-14-finalize.md +117 -0
  178. package/src/modules/bmb/workflows/module/steps-c/step-01-load-brief.md +178 -0
  179. package/src/modules/bmb/workflows/module/steps-c/step-01b-continue.md +83 -0
  180. package/src/modules/bmb/workflows/module/steps-c/step-02-structure.md +109 -0
  181. package/src/modules/bmb/workflows/module/steps-c/step-03-config.md +118 -0
  182. package/src/modules/bmb/workflows/module/steps-c/step-04-installer.md +160 -0
  183. package/src/modules/bmb/workflows/module/steps-c/step-05-agents.md +167 -0
  184. package/src/modules/bmb/workflows/module/steps-c/step-06-workflows.md +183 -0
  185. package/src/modules/bmb/workflows/module/steps-c/step-07-docs.md +402 -0
  186. package/src/modules/bmb/workflows/module/steps-c/step-08-complete.md +123 -0
  187. package/src/modules/bmb/workflows/module/steps-e/step-01-load-target.md +81 -0
  188. package/src/modules/bmb/workflows/module/steps-e/step-02-select-edit.md +77 -0
  189. package/src/modules/bmb/workflows/module/steps-e/step-03-apply-edit.md +77 -0
  190. package/src/modules/bmb/workflows/module/steps-e/step-04-review.md +80 -0
  191. package/src/modules/bmb/workflows/module/steps-e/step-05-confirm.md +75 -0
  192. package/src/modules/bmb/workflows/module/steps-v/step-01-load-target.md +96 -0
  193. package/src/modules/bmb/workflows/module/steps-v/step-02-file-structure.md +94 -0
  194. package/src/modules/bmb/workflows/module/steps-v/step-03-module-yaml.md +99 -0
  195. package/src/modules/bmb/workflows/module/steps-v/step-04-agent-specs.md +152 -0
  196. package/src/modules/bmb/workflows/module/steps-v/step-05-workflow-specs.md +152 -0
  197. package/src/modules/bmb/workflows/module/steps-v/step-06-documentation.md +143 -0
  198. package/src/modules/bmb/workflows/module/steps-v/step-07-installation.md +113 -0
  199. package/src/modules/bmb/workflows/module/steps-v/step-08-report.md +197 -0
  200. package/src/modules/bmb/workflows/module/templates/brief-template.md +154 -0
  201. package/src/modules/bmb/workflows/module/templates/workflow-spec-template.md +96 -0
  202. package/src/modules/bmb/workflows/module/workflow.md +100 -0
  203. package/src/modules/bmb/workflows/workflow/data/architecture.md +152 -0
  204. package/src/modules/bmb/workflows/workflow/data/csv-data-file-standards.md +81 -0
  205. package/src/modules/bmb/workflows/workflow/data/frontmatter-standards.md +225 -0
  206. package/src/modules/bmb/workflows/workflow/data/input-discovery-standards.md +269 -0
  207. package/src/modules/bmb/workflows/workflow/data/intent-vs-prescriptive-spectrum.md +50 -0
  208. package/src/modules/bmb/workflows/workflow/data/menu-handling-standards.md +167 -0
  209. package/src/modules/bmb/workflows/workflow/data/output-format-standards.md +188 -0
  210. package/src/modules/bmb/workflows/workflow/data/step-file-rules.md +235 -0
  211. package/src/modules/bmb/workflows/workflow/data/step-type-patterns.md +311 -0
  212. package/src/modules/bmb/workflows/workflow/data/subprocess-optimization-patterns.md +386 -0
  213. package/src/modules/bmb/workflows/workflow/data/trimodal-workflow-structure.md +209 -0
  214. package/src/modules/bmb/workflows/workflow/data/workflow-chaining-standards.md +271 -0
  215. package/src/modules/bmb/workflows/workflow/data/workflow-examples.md +276 -0
  216. package/src/modules/bmb/workflows/workflow/data/workflow-type-criteria.md +172 -0
  217. package/src/modules/bmb/workflows/workflow/steps-c/step-00-conversion.md +262 -0
  218. package/src/modules/bmb/workflows/workflow/steps-c/step-01-discovery.md +194 -0
  219. package/src/modules/bmb/workflows/workflow/steps-c/step-01b-continuation.md +3 -0
  220. package/src/modules/bmb/workflows/workflow/steps-c/step-02-classification.md +269 -0
  221. package/src/modules/bmb/workflows/workflow/steps-c/step-03-requirements.md +282 -0
  222. package/src/modules/bmb/workflows/workflow/steps-c/step-04-tools.md +281 -0
  223. package/src/modules/bmb/workflows/workflow/steps-c/step-05-plan-review.md +242 -0
  224. package/src/modules/bmb/workflows/{create-workflow/steps → workflow/steps-c}/step-06-design.md +92 -35
  225. package/src/modules/bmb/workflows/workflow/steps-c/step-07-foundation.md +238 -0
  226. package/src/modules/bmb/workflows/workflow/steps-c/step-08-build-step-01.md +377 -0
  227. package/src/modules/bmb/workflows/workflow/steps-c/step-09-build-next-step.md +350 -0
  228. package/src/modules/bmb/workflows/workflow/steps-c/step-10-confirmation.md +320 -0
  229. package/src/modules/bmb/workflows/workflow/steps-c/step-11-completion.md +191 -0
  230. package/src/modules/bmb/workflows/workflow/steps-e/step-e-01-assess-workflow.md +237 -0
  231. package/src/modules/bmb/workflows/workflow/steps-e/step-e-02-discover-edits.md +248 -0
  232. package/src/modules/bmb/workflows/workflow/steps-e/step-e-03-fix-validation.md +252 -0
  233. package/src/modules/bmb/workflows/workflow/steps-e/step-e-04-direct-edit.md +275 -0
  234. package/src/modules/bmb/workflows/workflow/steps-e/step-e-05-apply-edit.md +154 -0
  235. package/src/modules/bmb/workflows/workflow/steps-e/step-e-06-validate-after.md +190 -0
  236. package/src/modules/bmb/workflows/workflow/steps-e/step-e-07-complete.md +206 -0
  237. package/src/modules/bmb/workflows/workflow/steps-v/step-01-validate-max-mode.md +109 -0
  238. package/src/modules/bmb/workflows/workflow/steps-v/step-01-validate.md +221 -0
  239. package/src/modules/bmb/workflows/workflow/steps-v/step-01b-structure.md +152 -0
  240. package/src/modules/bmb/workflows/workflow/steps-v/step-02-frontmatter-validation.md +199 -0
  241. package/src/modules/bmb/workflows/workflow/steps-v/step-02b-path-violations.md +265 -0
  242. package/src/modules/bmb/workflows/workflow/steps-v/step-03-menu-validation.md +164 -0
  243. package/src/modules/bmb/workflows/workflow/steps-v/step-04-step-type-validation.md +211 -0
  244. package/src/modules/bmb/workflows/workflow/steps-v/step-05-output-format-validation.md +200 -0
  245. package/src/modules/bmb/workflows/workflow/steps-v/step-06-validation-design-check.md +195 -0
  246. package/src/modules/bmb/workflows/workflow/steps-v/step-07-instruction-style-check.md +209 -0
  247. package/src/modules/bmb/workflows/workflow/steps-v/step-08-collaborative-experience-check.md +199 -0
  248. package/src/modules/bmb/workflows/workflow/steps-v/step-08b-subprocess-optimization.md +179 -0
  249. package/src/modules/bmb/workflows/workflow/steps-v/step-09-cohesive-review.md +186 -0
  250. package/src/modules/bmb/workflows/workflow/steps-v/step-10-report-complete.md +154 -0
  251. package/src/modules/bmb/workflows/workflow/steps-v/step-11-plan-validation.md +237 -0
  252. package/src/modules/bmb/workflows/workflow/templates/minimal-output-template.md +11 -0
  253. package/src/modules/bmb/{docs/workflows → workflows/workflow}/templates/step-01-init-continuable-template.md +3 -3
  254. package/src/modules/bmb/{docs/workflows → workflows/workflow}/templates/step-1b-template.md +1 -1
  255. package/src/modules/bmb/{docs/workflows → workflows/workflow}/templates/step-template.md +14 -14
  256. package/src/modules/bmb/{docs/workflows → workflows/workflow}/templates/workflow-template.md +2 -4
  257. package/src/modules/bmb/workflows/workflow/workflow.md +109 -0
  258. package/src/modules/bmgd/agents/game-architect.agent.yaml +1 -0
  259. package/src/modules/bmgd/agents/game-designer.agent.yaml +1 -0
  260. package/src/modules/bmgd/agents/game-dev.agent.yaml +1 -0
  261. package/src/modules/bmgd/agents/game-qa.agent.yaml +1 -0
  262. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +1 -0
  263. package/src/modules/bmgd/agents/game-solo-dev.agent.yaml +2 -1
  264. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +1 -1
  265. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-01-init.md +4 -3
  266. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-02-context.md +3 -3
  267. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-03-ideation.md +50 -45
  268. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-04-complete.md +1 -1
  269. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.md +4 -1
  270. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +3 -3
  271. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01-init.md +3 -3
  272. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01b-continue.md +1 -1
  273. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-02-vision.md +2 -2
  274. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-03-market.md +2 -2
  275. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-04-fundamentals.md +2 -2
  276. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-05-scope.md +2 -2
  277. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-06-references.md +2 -2
  278. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-07-content.md +2 -2
  279. package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-08-complete.md +1 -1
  280. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-01-init.md +3 -3
  281. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-01b-continue.md +1 -1
  282. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-02-context.md +2 -2
  283. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-03-platforms.md +2 -2
  284. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-04-vision.md +2 -2
  285. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-05-core-gameplay.md +2 -2
  286. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-06-mechanics.md +2 -2
  287. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-07-game-type.md +2 -2
  288. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-08-progression.md +2 -2
  289. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-09-levels.md +2 -2
  290. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-10-art-audio.md +2 -2
  291. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-11-technical.md +2 -2
  292. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-12-epics.md +2 -2
  293. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-13-metrics.md +2 -2
  294. package/src/modules/bmgd/workflows/2-design/gdd/steps/step-14-complete.md +1 -1
  295. package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +1 -1
  296. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-01-init.md +3 -3
  297. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-01b-continue.md +11 -11
  298. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-02-foundation.md +2 -2
  299. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-03-story.md +2 -2
  300. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-04-characters.md +2 -2
  301. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-05-world.md +2 -2
  302. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-06-dialogue.md +2 -2
  303. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-07-environmental.md +2 -2
  304. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-08-delivery.md +2 -2
  305. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-09-integration.md +2 -2
  306. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-10-production.md +2 -2
  307. package/src/modules/bmgd/workflows/2-design/narrative/steps/step-11-complete.md +1 -1
  308. package/src/modules/bmgd/workflows/2-design/narrative/workflow.md +1 -1
  309. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01-init.md +3 -3
  310. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01b-continue.md +9 -9
  311. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-02-context.md +2 -2
  312. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-03-starter.md +2 -2
  313. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-04-decisions.md +2 -2
  314. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-05-crosscutting.md +2 -2
  315. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-06-structure.md +2 -2
  316. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-07-patterns.md +2 -2
  317. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-08-validation.md +2 -2
  318. package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-09-complete.md +1 -1
  319. package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.md +1 -1
  320. package/src/modules/bmgd/workflows/4-production/code-review/instructions.xml +1 -0
  321. package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +1 -1
  322. package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +1 -1
  323. package/src/modules/bmgd/workflows/4-production/create-story/checklist.md +2 -2
  324. package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +1 -1
  325. package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +1 -1
  326. package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +1 -1
  327. package/src/modules/bmgd/workflows/4-production/sprint-status/workflow.yaml +2 -2
  328. package/src/modules/bmgd/workflows/bmgd-quick-flow/{create-tech-spec → quick-spec}/workflow.yaml +2 -2
  329. package/src/modules/bmgd/workflows/workflow-status/paths/quickflow-brownfield.yaml +2 -2
  330. package/src/modules/bmm/agents/analyst.agent.yaml +3 -2
  331. package/src/modules/bmm/agents/architect.agent.yaml +3 -1
  332. package/src/modules/bmm/agents/dev.agent.yaml +4 -3
  333. package/src/modules/bmm/agents/pm.agent.yaml +11 -2
  334. package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +3 -2
  335. package/src/modules/bmm/agents/sm.agent.yaml +1 -0
  336. package/src/modules/bmm/agents/tea.agent.yaml +6 -3
  337. package/src/modules/bmm/agents/tech-writer.agent.yaml +1 -0
  338. package/src/modules/bmm/agents/ux-designer.agent.yaml +1 -0
  339. package/src/modules/bmm/module.yaml +1 -1
  340. package/src/modules/bmm/testarch/knowledge/api-request.md +155 -16
  341. package/src/modules/bmm/testarch/knowledge/api-testing-patterns.md +843 -0
  342. package/src/modules/bmm/testarch/knowledge/auth-session.md +197 -1
  343. package/src/modules/bmm/testarch/knowledge/file-utils.md +257 -54
  344. package/src/modules/bmm/testarch/knowledge/intercept-network-call.md +159 -9
  345. package/src/modules/bmm/testarch/knowledge/log.md +170 -35
  346. package/src/modules/bmm/testarch/knowledge/network-error-monitor.md +228 -95
  347. package/src/modules/bmm/testarch/knowledge/network-recorder.md +314 -52
  348. package/src/modules/bmm/testarch/knowledge/overview.md +15 -12
  349. package/src/modules/bmm/testarch/knowledge/recurse.md +173 -48
  350. package/src/modules/bmm/testarch/tea-index.csv +19 -18
  351. package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +3 -8
  352. package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +0 -5
  353. package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +1 -6
  354. package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +1 -6
  355. package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +1 -6
  356. package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +1 -6
  357. package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +0 -5
  358. package/src/modules/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md +197 -0
  359. package/src/modules/bmm/workflows/2-plan-workflows/prd/{steps → steps-c}/step-01-init.md +7 -13
  360. package/src/modules/bmm/workflows/2-plan-workflows/prd/{steps → steps-c}/step-01b-continue.md +36 -49
  361. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-02-discovery.md +224 -0
  362. package/src/modules/bmm/workflows/2-plan-workflows/prd/{steps → steps-c}/step-03-success.md +50 -114
  363. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-04-journeys.md +213 -0
  364. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-05-domain.md +207 -0
  365. package/src/modules/bmm/workflows/2-plan-workflows/prd/{steps → steps-c}/step-06-innovation.md +43 -79
  366. package/src/modules/bmm/workflows/2-plan-workflows/prd/{steps → steps-c}/step-07-project-type.md +37 -58
  367. package/src/modules/bmm/workflows/2-plan-workflows/prd/{steps → steps-c}/step-08-scoping.md +43 -114
  368. package/src/modules/bmm/workflows/2-plan-workflows/prd/{steps → steps-c}/step-09-functional.md +21 -60
  369. package/src/modules/bmm/workflows/2-plan-workflows/prd/{steps → steps-c}/step-10-nonfunctional.md +32 -84
  370. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-11-polish.md +217 -0
  371. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-c/step-12-complete.md +180 -0
  372. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01-discovery.md +247 -0
  373. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  374. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-02-review.md +249 -0
  375. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-03-edit.md +253 -0
  376. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-04-complete.md +168 -0
  377. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-01-discovery.md +218 -0
  378. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02-format-detection.md +191 -0
  379. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02b-parity-check.md +209 -0
  380. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-03-density-validation.md +174 -0
  381. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  382. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-05-measurability-validation.md +228 -0
  383. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-06-traceability-validation.md +217 -0
  384. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  385. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  386. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-09-project-type-validation.md +263 -0
  387. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-10-smart-validation.md +209 -0
  388. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  389. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-12-completeness-validation.md +242 -0
  390. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-13-report-complete.md +232 -0
  391. package/src/modules/bmm/workflows/2-plan-workflows/prd/{prd-template.md → templates/prd-template.md} +0 -1
  392. package/src/modules/bmm/workflows/2-plan-workflows/prd/validation-report-prd-workflow.md +433 -0
  393. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +96 -9
  394. package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +2 -2
  395. package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +2 -2
  396. package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +2 -2
  397. package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +2 -2
  398. package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +2 -2
  399. package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +1 -1
  400. package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +1 -1
  401. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +2 -2
  402. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +2 -2
  403. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +2 -2
  404. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +1 -1
  405. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +2 -0
  406. package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +1 -1
  407. package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +2 -2
  408. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +2 -1
  409. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +1 -1
  410. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +2 -1
  411. package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +2 -2
  412. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +6 -6
  413. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +2 -2
  414. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +2 -2
  415. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +2 -2
  416. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +2 -2
  417. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +1 -1
  418. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +1 -1
  419. package/src/modules/bmm/workflows/bmad-quick-flow/{create-tech-spec → quick-spec}/steps/step-01-understand.md +3 -3
  420. package/src/modules/bmm/workflows/bmad-quick-flow/{create-tech-spec → quick-spec}/steps/step-02-investigate.md +1 -1
  421. package/src/modules/bmm/workflows/bmad-quick-flow/{create-tech-spec → quick-spec}/steps/step-03-generate.md +1 -1
  422. package/src/modules/bmm/workflows/bmad-quick-flow/{create-tech-spec → quick-spec}/steps/step-04-review.md +1 -1
  423. package/src/modules/bmm/workflows/bmad-quick-flow/{create-tech-spec → quick-spec}/workflow.md +2 -2
  424. package/src/modules/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +1 -1
  425. package/src/modules/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +1 -1
  426. package/src/modules/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +1 -1
  427. package/src/modules/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +1 -1
  428. package/src/modules/bmm/workflows/testarch/test-design/instructions.md +2 -2
  429. package/src/modules/bmm/workflows/workflow-status/instructions.md +4 -4
  430. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +2 -1
  431. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +1 -0
  432. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +1 -0
  433. package/src/modules/cis/agents/innovation-strategist.agent.yaml +1 -0
  434. package/src/modules/cis/agents/presentation-master.agent.yaml +1 -0
  435. package/src/modules/cis/module.yaml +1 -0
  436. package/src/modules/cis/workflows/design-thinking/instructions.md +2 -2
  437. package/src/modules/cis/workflows/innovation-strategy/instructions.md +2 -2
  438. package/src/modules/cis/workflows/problem-solving/instructions.md +2 -2
  439. package/src/modules/cis/workflows/storytelling/instructions.md +2 -2
  440. package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +1 -0
  441. package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +1 -0
  442. package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +1 -0
  443. package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +1 -0
  444. package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +1 -0
  445. package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +1 -0
  446. package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +1 -0
  447. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +1 -0
  448. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +1 -0
  449. package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +1 -0
  450. package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +1 -0
  451. package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +1 -0
  452. package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +1 -0
  453. package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +1 -0
  454. package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +1 -0
  455. package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +1 -0
  456. package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +1 -0
  457. package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +1 -0
  458. package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +1 -0
  459. package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +1 -0
  460. package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +1 -0
  461. package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +1 -0
  462. package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +1 -0
  463. package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +1 -0
  464. package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +1 -0
  465. package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +1 -0
  466. package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +1 -0
  467. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +1 -0
  468. package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +1 -0
  469. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +1 -0
  470. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +1 -0
  471. package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +1 -0
  472. package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +1 -0
  473. package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +1 -0
  474. package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +1 -0
  475. package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +1 -0
  476. package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +1 -0
  477. package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +1 -0
  478. package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +1 -0
  479. package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +1 -0
  480. package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +1 -0
  481. package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +1 -0
  482. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +1 -0
  483. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +1 -0
  484. package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +1 -0
  485. package/tools/build-docs.js +200 -271
  486. package/tools/cli/commands/install.js +8 -2
  487. package/tools/cli/installers/install-messages.yaml +36 -36
  488. package/tools/cli/installers/lib/core/config-collector.js +11 -1
  489. package/tools/cli/installers/lib/core/installer.js +3 -4
  490. package/tools/cli/installers/lib/core/manifest-generator.js +46 -2
  491. package/tools/cli/installers/lib/ide/antigravity.js +3 -3
  492. package/tools/cli/installers/lib/ide/claude-code.js +3 -3
  493. package/tools/cli/installers/lib/ide/codex.js +1 -1
  494. package/tools/cli/installers/lib/ide/cursor.js +57 -304
  495. package/tools/cli/installers/lib/ide/github-copilot.js +1 -1
  496. package/tools/cli/lib/ui.js +22 -1
  497. package/tools/fix-doc-links.js +288 -0
  498. package/tools/schema/agent.js +1 -0
  499. package/tools/validate-doc-links.js +363 -0
  500. package/website/README.md +76 -0
  501. package/website/astro.config.mjs +218 -0
  502. package/website/src/components/Banner.astro +59 -0
  503. package/website/src/components/Header.astro +121 -0
  504. package/website/src/components/MobileMenuFooter.astro +53 -0
  505. package/website/src/content/config.ts +6 -0
  506. package/website/src/lib/site-url.js +25 -0
  507. package/website/src/rehype-markdown-links.js +102 -0
  508. package/website/src/styles/custom.css +483 -0
  509. package/docs/bmad-core-concepts/bmad-customization/index.md +0 -26
  510. package/docs/bmad-core-concepts/index.md +0 -37
  511. package/docs/bmad-core-concepts/installing/index.md +0 -77
  512. package/docs/bmad-core-concepts/workflows.md +0 -89
  513. package/docs/modules/bmb-bmad-builder/agent-creation-guide.md +0 -166
  514. package/docs/modules/bmb-bmad-builder/index.md +0 -60
  515. package/docs/modules/bmgd-bmad-game-dev/glossary.md +0 -293
  516. package/docs/modules/bmgd-bmad-game-dev/index.md +0 -175
  517. package/docs/modules/bmgd-bmad-game-dev/quick-start.md +0 -250
  518. package/docs/modules/bmm-bmad-method/bmad-quick-flow.md +0 -506
  519. package/docs/modules/bmm-bmad-method/brownfield-guide.md +0 -747
  520. package/docs/modules/bmm-bmad-method/faq.md +0 -540
  521. package/docs/modules/bmm-bmad-method/quick-spec-flow.md +0 -622
  522. package/docs/modules/bmm-bmad-method/quick-start.md +0 -363
  523. package/docs/modules/bmm-bmad-method/troubleshooting.md +0 -3
  524. package/docs/modules/bmm-bmad-method/workflows-analysis.md +0 -199
  525. package/docs/modules/bmm-bmad-method/workflows-implementation.md +0 -210
  526. package/docs/modules/bmm-bmad-method/workflows-planning.md +0 -89
  527. package/docs/modules/bmm-bmad-method/workflows-solutioning.md +0 -509
  528. package/docs/modules/core/index.md +0 -15
  529. package/docs/modules/core/party-mode.md +0 -50
  530. package/src/core/tasks/validate-workflow.xml +0 -89
  531. package/src/modules/bmb/docs/workflows/architecture.md +0 -220
  532. package/src/modules/bmb/docs/workflows/csv-data-file-standards.md +0 -206
  533. package/src/modules/bmb/docs/workflows/intent-vs-prescriptive-spectrum.md +0 -220
  534. package/src/modules/bmb/docs/workflows/step-file-rules.md +0 -469
  535. package/src/modules/bmb/docs/workflows/templates/step-file.md +0 -139
  536. package/src/modules/bmb/docs/workflows/templates/workflow.md +0 -58
  537. package/src/modules/bmb/docs/workflows/terms.md +0 -97
  538. package/src/modules/bmb/reference/agents/simple-examples/README.md +0 -223
  539. package/src/modules/bmb/reference/readme.md +0 -3
  540. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +0 -18
  541. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +0 -16
  542. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +0 -28
  543. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +0 -177
  544. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +0 -121
  545. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +0 -165
  546. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +0 -154
  547. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +0 -183
  548. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +0 -168
  549. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +0 -195
  550. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +0 -25
  551. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +0 -68
  552. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +0 -29
  553. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/profile-section.md +0 -47
  554. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +0 -37
  555. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +0 -18
  556. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +0 -59
  557. package/src/modules/bmb/workflows/agent/steps-c/step-08a-plan-traceability.md +0 -203
  558. package/src/modules/bmb/workflows/agent/steps-c/step-08b-metadata-validation.md +0 -135
  559. package/src/modules/bmb/workflows/agent/steps-c/step-08c-persona-validation.md +0 -161
  560. package/src/modules/bmb/workflows/agent/steps-c/step-08d-menu-validation.md +0 -158
  561. package/src/modules/bmb/workflows/agent/steps-c/step-08e-structure-validation.md +0 -306
  562. package/src/modules/bmb/workflows/agent/steps-c/step-08f-sidecar-validation.md +0 -462
  563. package/src/modules/bmb/workflows/agent/steps-e/e-03a-validate-metadata.md +0 -78
  564. package/src/modules/bmb/workflows/agent/steps-e/e-03b-validate-persona.md +0 -76
  565. package/src/modules/bmb/workflows/agent/steps-e/e-03c-validate-menu.md +0 -75
  566. package/src/modules/bmb/workflows/agent/steps-e/e-03d-validate-structure.md +0 -75
  567. package/src/modules/bmb/workflows/agent/steps-e/e-03e-validate-sidecar.md +0 -78
  568. package/src/modules/bmb/workflows/agent/steps-e/e-03f-validation-summary.md +0 -119
  569. package/src/modules/bmb/workflows/agent/steps-e/e-09a-validate-metadata.md +0 -70
  570. package/src/modules/bmb/workflows/agent/steps-e/e-09b-validate-persona.md +0 -70
  571. package/src/modules/bmb/workflows/agent/steps-e/e-09c-validate-menu.md +0 -69
  572. package/src/modules/bmb/workflows/agent/steps-e/e-09d-validate-structure.md +0 -69
  573. package/src/modules/bmb/workflows/agent/steps-e/e-09e-validate-sidecar.md +0 -70
  574. package/src/modules/bmb/workflows/agent/steps-e/e-09f-validation-summary.md +0 -111
  575. package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +0 -156
  576. package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +0 -170
  577. package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +0 -218
  578. package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +0 -268
  579. package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +0 -229
  580. package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +0 -234
  581. package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +0 -297
  582. package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +0 -229
  583. package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +0 -187
  584. package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +0 -310
  585. package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +0 -338
  586. package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +0 -336
  587. package/src/modules/bmb/workflows/create-module/templates/agent.template.md +0 -313
  588. package/src/modules/bmb/workflows/create-module/templates/installer.template.js +0 -47
  589. package/src/modules/bmb/workflows/create-module/templates/module-plan.template.md +0 -5
  590. package/src/modules/bmb/workflows/create-module/templates/module.template.yaml +0 -53
  591. package/src/modules/bmb/workflows/create-module/templates/workflow-plan-template.md +0 -23
  592. package/src/modules/bmb/workflows/create-module/validation.md +0 -126
  593. package/src/modules/bmb/workflows/create-module/workflow.md +0 -56
  594. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/data/dietary-restrictions.csv +0 -18
  595. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/data/macro-calculator.csv +0 -16
  596. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/data/recipe-database.csv +0 -28
  597. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-01-init.md +0 -177
  598. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-01b-continue.md +0 -150
  599. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-02-profile.md +0 -164
  600. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-03-assessment.md +0 -152
  601. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-04-strategy.md +0 -182
  602. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-05-shopping.md +0 -167
  603. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/steps/step-06-prep-schedule.md +0 -194
  604. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/templates/assessment-section.md +0 -25
  605. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/templates/nutrition-plan.md +0 -68
  606. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/templates/prep-schedule-section.md +0 -29
  607. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/templates/profile-section.md +0 -47
  608. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/templates/shopping-section.md +0 -37
  609. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/templates/strategy-section.md +0 -18
  610. package/src/modules/bmb/workflows/create-workflow/data/examples/meal-prep-nutrition/workflow.md +0 -58
  611. package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +0 -158
  612. package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +0 -212
  613. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +0 -251
  614. package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +0 -217
  615. package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +0 -290
  616. package/src/modules/bmb/workflows/create-workflow/steps/step-07-build.md +0 -323
  617. package/src/modules/bmb/workflows/create-workflow/steps/step-08-review.md +0 -285
  618. package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +0 -188
  619. package/src/modules/bmb/workflows/create-workflow/workflow.md +0 -59
  620. package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +0 -217
  621. package/src/modules/bmb/workflows/edit-workflow/steps/step-02-discover.md +0 -254
  622. package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +0 -218
  623. package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +0 -194
  624. package/src/modules/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +0 -246
  625. package/src/modules/bmb/workflows/edit-workflow/templates/completion-summary.md +0 -75
  626. package/src/modules/bmb/workflows/edit-workflow/templates/improvement-goals.md +0 -68
  627. package/src/modules/bmb/workflows/edit-workflow/templates/improvement-log.md +0 -40
  628. package/src/modules/bmb/workflows/edit-workflow/templates/validation-results.md +0 -51
  629. package/src/modules/bmb/workflows/edit-workflow/templates/workflow-analysis.md +0 -56
  630. package/src/modules/bmb/workflows/edit-workflow/workflow.md +0 -59
  631. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +0 -153
  632. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +0 -244
  633. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +0 -275
  634. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +0 -296
  635. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +0 -265
  636. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +0 -361
  637. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +0 -259
  638. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +0 -302
  639. package/src/modules/bmb/workflows/workflow-compliance-check/templates/compliance-report.md +0 -140
  640. package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +0 -59
  641. package/src/modules/bmb/workflows-legacy/edit-module/README.md +0 -171
  642. package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +0 -163
  643. package/src/modules/bmb/workflows-legacy/edit-module/instructions.md +0 -340
  644. package/src/modules/bmb/workflows-legacy/edit-module/workflow.yaml +0 -34
  645. package/src/modules/bmb/workflows-legacy/module-brief/README.md +0 -264
  646. package/src/modules/bmb/workflows-legacy/module-brief/checklist.md +0 -116
  647. package/src/modules/bmb/workflows-legacy/module-brief/instructions.md +0 -268
  648. package/src/modules/bmb/workflows-legacy/module-brief/template.md +0 -275
  649. package/src/modules/bmb/workflows-legacy/module-brief/workflow.yaml +0 -36
  650. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +0 -421
  651. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +0 -291
  652. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +0 -271
  653. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +0 -186
  654. package/website/css/custom.css +0 -52
  655. package/website/docusaurus.config.js +0 -179
  656. package/website/sidebars.js +0 -139
  657. package/website/src/pages/index.js +0 -50
  658. /package/docs/{modules/bmm-bmad-method → tutorials/getting-started}/images/workflow-method-greenfield.excalidraw +0 -0
  659. /package/docs/{modules/bmm-bmad-method → tutorials/getting-started}/images/workflow-method-greenfield.svg +0 -0
  660. /package/docs/{modules/bmgd-bmad-game-dev → tutorials/getting-started/images}/workflow-overview.jpg +0 -0
  661. /package/src/modules/bmb/{docs/workflows → workflows/workflow/data}/common-workflow-tools.csv +0 -0
  662. /package/src/modules/bmgd/workflows/bmgd-quick-flow/{create-tech-spec → quick-spec}/instructions.md +0 -0
  663. /package/src/modules/bmm/workflows/2-plan-workflows/prd/{domain-complexity.csv → data/domain-complexity.csv} +0 -0
  664. /package/src/modules/bmm/workflows/2-plan-workflows/prd/{project-types.csv → data/project-types.csv} +0 -0
  665. /package/src/modules/bmm/workflows/bmad-quick-flow/{create-tech-spec → quick-spec}/tech-spec-template.md +0 -0
  666. /package/website/{static → public}/favicon.ico +0 -0
  667. /package/website/{static → public}/img/logo.svg +0 -0
  668. /package/website/{static → public}/robots.txt +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Principle
4
4
 
5
- Persist authentication tokens to disk and reuse across test runs. Support multiple user identifiers, ephemeral authentication, and worker-specific accounts for parallel execution. Fetch tokens once, use everywhere.
5
+ Persist authentication tokens to disk and reuse across test runs. Support multiple user identifiers, ephemeral authentication, and worker-specific accounts for parallel execution. Fetch tokens once, use everywhere. **Works for both API-only tests and browser tests.**
6
6
 
7
7
  ## Rationale
8
8
 
@@ -22,6 +22,7 @@ The `auth-session` utility provides:
22
22
  - **Worker-specific accounts**: Parallel execution with isolated user accounts
23
23
  - **Automatic token management**: Checks validity, renews if expired
24
24
  - **Flexible provider pattern**: Adapt to any auth system (OAuth2, JWT, custom)
25
+ - **API-first design**: Get tokens for API tests without browser overhead
25
26
 
26
27
  ## Pattern Examples
27
28
 
@@ -244,6 +245,200 @@ test('parallel test 2', async ({ page }) => {
244
245
  - Token management automatic per worker
245
246
  - Scales to any number of workers
246
247
 
248
+ ### Example 6: Pure API Authentication (No Browser)
249
+
250
+ **Context**: Get auth tokens for API-only tests using auth-session disk persistence.
251
+
252
+ **Implementation**:
253
+
254
+ ```typescript
255
+ // Step 1: Create API-only auth provider (no browser needed)
256
+ // playwright/support/api-auth-provider.ts
257
+ import { type AuthProvider } from '@seontechnologies/playwright-utils/auth-session';
258
+
259
+ const apiAuthProvider: AuthProvider = {
260
+ getEnvironment: (options) => options.environment || 'local',
261
+ getUserIdentifier: (options) => options.userIdentifier || 'api-user',
262
+
263
+ extractToken: (storageState) => {
264
+ // Token stored in localStorage format for disk persistence
265
+ const tokenEntry = storageState.origins?.[0]?.localStorage?.find(
266
+ (item) => item.name === 'auth_token'
267
+ );
268
+ return tokenEntry?.value;
269
+ },
270
+
271
+ isTokenExpired: (storageState) => {
272
+ const expiryEntry = storageState.origins?.[0]?.localStorage?.find(
273
+ (item) => item.name === 'token_expiry'
274
+ );
275
+ if (!expiryEntry) return true;
276
+ return Date.now() > parseInt(expiryEntry.value, 10);
277
+ },
278
+
279
+ manageAuthToken: async (request, options) => {
280
+ const email = process.env.TEST_USER_EMAIL;
281
+ const password = process.env.TEST_USER_PASSWORD;
282
+
283
+ if (!email || !password) {
284
+ throw new Error('TEST_USER_EMAIL and TEST_USER_PASSWORD must be set');
285
+ }
286
+
287
+ // Pure API login - no browser!
288
+ const response = await request.post('/api/auth/login', {
289
+ data: { email, password },
290
+ });
291
+
292
+ if (!response.ok()) {
293
+ throw new Error(`Auth failed: ${response.status()}`);
294
+ }
295
+
296
+ const { token, expiresIn } = await response.json();
297
+ const expiryTime = Date.now() + expiresIn * 1000;
298
+
299
+ // Return storage state format for disk persistence
300
+ return {
301
+ cookies: [],
302
+ origins: [
303
+ {
304
+ origin: process.env.API_BASE_URL || 'http://localhost:3000',
305
+ localStorage: [
306
+ { name: 'auth_token', value: token },
307
+ { name: 'token_expiry', value: String(expiryTime) },
308
+ ],
309
+ },
310
+ ],
311
+ };
312
+ },
313
+ };
314
+
315
+ export default apiAuthProvider;
316
+
317
+ // Step 2: Create auth fixture
318
+ // playwright/support/fixtures.ts
319
+ import { test as base } from '@playwright/test';
320
+ import { createAuthFixtures, setAuthProvider } from '@seontechnologies/playwright-utils/auth-session';
321
+ import apiAuthProvider from './api-auth-provider';
322
+
323
+ setAuthProvider(apiAuthProvider);
324
+
325
+ export const test = base.extend(createAuthFixtures());
326
+
327
+ // Step 3: Use in tests - token persisted to disk!
328
+ // tests/api/authenticated-api.spec.ts
329
+ import { test } from '../support/fixtures';
330
+ import { expect } from '@playwright/test';
331
+
332
+ test('should access protected endpoint', async ({ authToken, apiRequest }) => {
333
+ // authToken is automatically loaded from disk or fetched if expired
334
+ const { status, body } = await apiRequest({
335
+ method: 'GET',
336
+ path: '/api/me',
337
+ headers: { Authorization: `Bearer ${authToken}` },
338
+ });
339
+
340
+ expect(status).toBe(200);
341
+ });
342
+
343
+ test('should create resource with auth', async ({ authToken, apiRequest }) => {
344
+ const { status, body } = await apiRequest({
345
+ method: 'POST',
346
+ path: '/api/orders',
347
+ headers: { Authorization: `Bearer ${authToken}` },
348
+ body: { items: [{ productId: 'prod-1', quantity: 2 }] },
349
+ });
350
+
351
+ expect(status).toBe(201);
352
+ expect(body.id).toBeDefined();
353
+ });
354
+ ```
355
+
356
+ **Key Points**:
357
+
358
+ - Token persisted to disk (not in-memory) - survives test reruns
359
+ - Provider fetches token once, reuses until expired
360
+ - Pure API authentication - no browser context needed
361
+ - `authToken` fixture handles disk read/write automatically
362
+ - Environment variables validated with clear error message
363
+
364
+ ### Example 7: Service-to-Service Authentication
365
+
366
+ **Context**: Test microservice authentication patterns (API keys, service tokens) with proper environment validation.
367
+
368
+ **Implementation**:
369
+
370
+ ```typescript
371
+ // tests/api/service-auth.spec.ts
372
+ import { test as base, expect } from '@playwright/test';
373
+ import { test as apiFixture } from '@seontechnologies/playwright-utils/api-request/fixtures';
374
+ import { mergeTests } from '@playwright/test';
375
+
376
+ // Validate environment variables at module load
377
+ const SERVICE_API_KEY = process.env.SERVICE_API_KEY;
378
+ const INTERNAL_SERVICE_URL = process.env.INTERNAL_SERVICE_URL;
379
+
380
+ if (!SERVICE_API_KEY) {
381
+ throw new Error('SERVICE_API_KEY environment variable is required');
382
+ }
383
+ if (!INTERNAL_SERVICE_URL) {
384
+ throw new Error('INTERNAL_SERVICE_URL environment variable is required');
385
+ }
386
+
387
+ const test = mergeTests(base, apiFixture);
388
+
389
+ test.describe('Service-to-Service Auth', () => {
390
+ test('should authenticate with API key', async ({ apiRequest }) => {
391
+ const { status, body } = await apiRequest({
392
+ method: 'GET',
393
+ path: '/internal/health',
394
+ baseUrl: INTERNAL_SERVICE_URL,
395
+ headers: { 'X-API-Key': SERVICE_API_KEY },
396
+ });
397
+
398
+ expect(status).toBe(200);
399
+ expect(body.status).toBe('healthy');
400
+ });
401
+
402
+ test('should reject invalid API key', async ({ apiRequest }) => {
403
+ const { status, body } = await apiRequest({
404
+ method: 'GET',
405
+ path: '/internal/health',
406
+ baseUrl: INTERNAL_SERVICE_URL,
407
+ headers: { 'X-API-Key': 'invalid-key' },
408
+ });
409
+
410
+ expect(status).toBe(401);
411
+ expect(body.code).toBe('INVALID_API_KEY');
412
+ });
413
+
414
+ test('should call downstream service with propagated auth', async ({ apiRequest }) => {
415
+ const { status, body } = await apiRequest({
416
+ method: 'POST',
417
+ path: '/internal/aggregate-data',
418
+ baseUrl: INTERNAL_SERVICE_URL,
419
+ headers: {
420
+ 'X-API-Key': SERVICE_API_KEY,
421
+ 'X-Request-ID': `test-${Date.now()}`,
422
+ },
423
+ body: { sources: ['users', 'orders', 'inventory'] },
424
+ });
425
+
426
+ expect(status).toBe(200);
427
+ expect(body.aggregatedFrom).toHaveLength(3);
428
+ });
429
+ });
430
+ ```
431
+
432
+ **Key Points**:
433
+
434
+ - Environment variables validated at module load with clear errors
435
+ - API key authentication (simpler than OAuth - no disk persistence needed)
436
+ - Test internal/service endpoints
437
+ - Validate auth rejection scenarios
438
+ - Correlation ID for request tracing
439
+
440
+ > **Note**: API keys are typically static secrets that don't expire, so disk persistence (auth-session) isn't needed. For rotating service tokens, use the auth-session provider pattern from Example 6.
441
+
247
442
  ## Custom Auth Provider Pattern
248
443
 
249
444
  **Context**: Adapt auth-session to your authentication system (OAuth2, JWT, SAML, custom).
@@ -310,6 +505,7 @@ test('authenticated API call', async ({ apiRequest, authToken }) => {
310
505
 
311
506
  ## Related Fragments
312
507
 
508
+ - `api-testing-patterns.md` - Pure API testing patterns (no browser)
313
509
  - `overview.md` - Installation and fixture composition
314
510
  - `api-request.md` - Authenticated API requests
315
511
  - `fixtures-composition.md` - Merging auth with other utilities
@@ -22,6 +22,16 @@ The `file-utils` module provides:
22
22
  - **Validation helpers**: Row count, header checks, content validation
23
23
  - **Format support**: Multiple sheet support (XLSX), text extraction (PDF), archive extraction (ZIP)
24
24
 
25
+ ## Why Use This Instead of Vanilla Playwright?
26
+
27
+ | Vanilla Playwright | File Utils |
28
+ | ------------------------------------------- | ------------------------------------------------ |
29
+ | ~80 lines per CSV flow (download + parse) | ~10 lines end-to-end |
30
+ | Manual event orchestration for downloads | Encapsulated in `handleDownload()` |
31
+ | Manual path handling and `saveAs` | Returns a ready-to-use file path |
32
+ | Manual existence checks and error handling | Centralized in one place via utility patterns |
33
+ | Manual CSV parsing config (headers, typing) | `readCSV()` returns `{ data, headers }` directly |
34
+
25
35
  ## Pattern Examples
26
36
 
27
37
  ### Example 1: UI-Triggered CSV Download
@@ -40,20 +50,18 @@ test('should download and validate CSV', async ({ page }) => {
40
50
  const downloadPath = await handleDownload({
41
51
  page,
42
52
  downloadDir: DOWNLOAD_DIR,
43
- trigger: () => page.click('[data-testid="export-csv"]'),
53
+ trigger: () => page.getByTestId('download-button-text/csv').click(),
44
54
  });
45
55
 
46
- const { content } = await readCSV({ filePath: downloadPath });
56
+ const csvResult = await readCSV({ filePath: downloadPath });
47
57
 
48
- // Validate headers
49
- expect(content.headers).toEqual(['ID', 'Name', 'Email', 'Role']);
50
-
51
- // Validate data
52
- expect(content.data).toHaveLength(10);
53
- expect(content.data[0]).toMatchObject({
58
+ // Access parsed data and headers
59
+ const { data, headers } = csvResult.content;
60
+ expect(headers).toEqual(['ID', 'Name', 'Email']);
61
+ expect(data[0]).toMatchObject({
54
62
  ID: expect.any(String),
55
63
  Name: expect.any(String),
56
- Email: expect.stringMatching(/@/),
64
+ Email: expect.any(String),
57
65
  });
58
66
  });
59
67
  ```
@@ -81,25 +89,27 @@ test('should read multi-sheet XLSX', async () => {
81
89
  trigger: () => page.click('[data-testid="export-xlsx"]'),
82
90
  });
83
91
 
84
- const { content } = await readXLSX({ filePath: downloadPath });
92
+ const xlsxResult = await readXLSX({ filePath: downloadPath });
85
93
 
86
- // Access specific sheets
87
- const summarySheet = content.sheets.find((s) => s.name === 'Summary');
88
- const detailsSheet = content.sheets.find((s) => s.name === 'Details');
94
+ // Verify worksheet structure
95
+ expect(xlsxResult.content.worksheets.length).toBeGreaterThan(0);
96
+ const worksheet = xlsxResult.content.worksheets[0];
97
+ expect(worksheet).toBeDefined();
98
+ expect(worksheet).toHaveProperty('name');
89
99
 
90
- // Validate summary
91
- expect(summarySheet.data).toHaveLength(1);
92
- expect(summarySheet.data[0].TotalRecords).toBe('150');
100
+ // Access sheet data
101
+ const sheetData = worksheet?.data;
102
+ expect(Array.isArray(sheetData)).toBe(true);
93
103
 
94
- // Validate details
95
- expect(detailsSheet.data).toHaveLength(150);
96
- expect(detailsSheet.headers).toContain('TransactionID');
104
+ // Use type assertion for type safety
105
+ const firstRow = sheetData![0] as Record<string, unknown>;
106
+ expect(firstRow).toHaveProperty('id');
97
107
  });
98
108
  ```
99
109
 
100
110
  **Key Points**:
101
111
 
102
- - `sheets` array with `name` and `data` properties
112
+ - `worksheets` array with `name` and `data` properties
103
113
  - Access sheets by name
104
114
  - Each sheet has its own headers and data
105
115
  - Type-safe sheet iteration
@@ -117,26 +127,48 @@ test('should validate PDF report', async () => {
117
127
  const downloadPath = await handleDownload({
118
128
  page,
119
129
  downloadDir: DOWNLOAD_DIR,
120
- trigger: () => page.click('[data-testid="download-report"]'),
130
+ trigger: () => page.getByTestId('download-button-Text-based PDF Document').click(),
121
131
  });
122
132
 
123
- const { content } = await readPDF({ filePath: downloadPath });
133
+ const pdfResult = await readPDF({ filePath: downloadPath });
124
134
 
125
- // content.text is extracted text from all pages
126
- expect(content.text).toContain('Financial Report Q4 2024');
127
- expect(content.text).toContain('Total Revenue:');
135
+ // content is extracted text from all pages
136
+ expect(pdfResult.pagesCount).toBe(1);
137
+ expect(pdfResult.fileName).toContain('.pdf');
138
+ expect(pdfResult.content).toContain('All you need is the free Adobe Acrobat Reader');
139
+ });
140
+ ```
141
+
142
+ **PDF Reader Options:**
128
143
 
129
- // Validate page count
130
- expect(content.numpages).toBeGreaterThan(10);
144
+ ```typescript
145
+ const result = await readPDF({
146
+ filePath: '/path/to/document.pdf',
147
+ mergePages: false, // Keep pages separate (default: true)
148
+ debug: true, // Enable debug logging
149
+ maxPages: 10, // Limit processing to first 10 pages
131
150
  });
132
151
  ```
133
152
 
134
- **Key Points**:
153
+ **Important Limitation - Vector-based PDFs:**
135
154
 
136
- - `content.text` contains all extracted text
137
- - `content.numpages` for page count
138
- - PDF parsing handles multi-page documents
139
- - Search for specific phrases
155
+ Text extraction may fail for PDFs that store text as vector graphics (e.g., those generated by jsPDF):
156
+
157
+ ```typescript
158
+ // Vector-based PDF example (extraction fails gracefully)
159
+ const pdfResult = await readPDF({ filePath: downloadPath });
160
+
161
+ expect(pdfResult.pagesCount).toBe(1);
162
+ expect(pdfResult.info.extractionNotes).toContain(
163
+ 'Text extraction from vector-based PDFs is not supported.'
164
+ );
165
+ ```
166
+
167
+ Such PDFs will have:
168
+
169
+ - `textExtractionSuccess: false`
170
+ - `isVectorBased: true`
171
+ - Explanatory message in `extractionNotes`
140
172
 
141
173
  ### Example 4: ZIP Archive Validation
142
174
 
@@ -154,25 +186,33 @@ test('should validate ZIP archive', async () => {
154
186
  trigger: () => page.click('[data-testid="download-backup"]'),
155
187
  });
156
188
 
157
- const { content } = await readZIP({ filePath: downloadPath });
189
+ const zipResult = await readZIP({ filePath: downloadPath });
158
190
 
159
191
  // Check file list
160
- expect(content.files).toContain('data.csv');
161
- expect(content.files).toContain('config.json');
162
- expect(content.files).toContain('readme.txt');
163
-
164
- // Read specific file from archive
165
- const configContent = content.zip.readAsText('config.json');
166
- const config = JSON.parse(configContent);
192
+ expect(Array.isArray(zipResult.content.entries)).toBe(true);
193
+ expect(zipResult.content.entries).toContain(
194
+ 'Case_53125_10-19-22_AM/Case_53125_10-19-22_AM_case_data.csv'
195
+ );
196
+
197
+ // Extract specific file
198
+ const targetFile = 'Case_53125_10-19-22_AM/Case_53125_10-19-22_AM_case_data.csv';
199
+ const zipWithExtraction = await readZIP({
200
+ filePath: downloadPath,
201
+ fileToExtract: targetFile,
202
+ });
167
203
 
168
- expect(config.version).toBe('2.0');
204
+ // Access extracted file buffer
205
+ const extractedFiles = zipWithExtraction.content.extractedFiles || {};
206
+ const fileBuffer = extractedFiles[targetFile];
207
+ expect(fileBuffer).toBeInstanceOf(Buffer);
208
+ expect(fileBuffer?.length).toBeGreaterThan(0);
169
209
  });
170
210
  ```
171
211
 
172
212
  **Key Points**:
173
213
 
174
- - `content.files` lists all files in archive
175
- - `content.zip.readAsText()` extracts specific files
214
+ - `content.entries` lists all files in archive
215
+ - `fileToExtract` extracts specific files to Buffer
176
216
  - Validate archive structure
177
217
  - Read and parse individual files from ZIP
178
218
 
@@ -185,7 +225,7 @@ test('should validate ZIP archive', async () => {
185
225
  ```typescript
186
226
  test('should download via API', async ({ page, request }) => {
187
227
  const downloadPath = await handleDownload({
188
- page,
228
+ page, // Still need page for download events
189
229
  downloadDir: DOWNLOAD_DIR,
190
230
  trigger: async () => {
191
231
  const response = await request.get('/api/export/csv', {
@@ -211,20 +251,123 @@ test('should download via API', async ({ page, request }) => {
211
251
  - Still need `page` for download events
212
252
  - Works with authenticated endpoints
213
253
 
214
- ## Validation Helpers
254
+ ### Example 6: Reading CSV from Buffer (ZIP extraction)
255
+
256
+ **Context**: Read CSV content directly from a Buffer (e.g., extracted from ZIP).
257
+
258
+ **Implementation**:
215
259
 
216
260
  ```typescript
217
- // CSV validation
218
- const { isValid, errors } = await validateCSV({
219
- filePath: downloadPath,
220
- expectedRowCount: 10,
221
- requiredHeaders: ['ID', 'Name', 'Email'],
261
+ // Read from a Buffer (e.g., extracted from a ZIP)
262
+ const zipResult = await readZIP({
263
+ filePath: 'archive.zip',
264
+ fileToExtract: 'data.csv',
222
265
  });
266
+ const fileBuffer = zipResult.content.extractedFiles?.['data.csv'];
267
+ const csvFromBuffer = await readCSV({ content: fileBuffer });
268
+
269
+ // Read from a string
270
+ const csvString = 'name,age\nJohn,30\nJane,25';
271
+ const csvFromString = await readCSV({ content: csvString });
272
+
273
+ const { data, headers } = csvFromString.content;
274
+ expect(headers).toContain('name');
275
+ expect(headers).toContain('age');
276
+ ```
277
+
278
+ ## API Reference
279
+
280
+ ### CSV Reader Options
281
+
282
+ | Option | Type | Default | Description |
283
+ | -------------- | ------------------ | -------- | -------------------------------------- |
284
+ | `filePath` | `string` | - | Path to CSV file (mutually exclusive) |
285
+ | `content` | `string \| Buffer` | - | Direct content (mutually exclusive) |
286
+ | `delimiter` | `string \| 'auto'` | `','` | Value separator, auto-detect if 'auto' |
287
+ | `encoding` | `string` | `'utf8'` | File encoding |
288
+ | `parseHeaders` | `boolean` | `true` | Use first row as headers |
289
+ | `trim` | `boolean` | `true` | Trim whitespace from values |
290
+
291
+ ### XLSX Reader Options
292
+
293
+ | Option | Type | Description |
294
+ | ----------- | -------- | ------------------------------ |
295
+ | `filePath` | `string` | Path to XLSX file |
296
+ | `sheetName` | `string` | Name of sheet to set as active |
297
+
298
+ ### PDF Reader Options
299
+
300
+ | Option | Type | Default | Description |
301
+ | ------------ | --------- | ------- | --------------------------- |
302
+ | `filePath` | `string` | - | Path to PDF file (required) |
303
+ | `mergePages` | `boolean` | `true` | Merge text from all pages |
304
+ | `maxPages` | `number` | - | Maximum pages to extract |
305
+ | `debug` | `boolean` | `false` | Enable debug logging |
306
+
307
+ ### ZIP Reader Options
308
+
309
+ | Option | Type | Description |
310
+ | --------------- | -------- | ---------------------------------- |
311
+ | `filePath` | `string` | Path to ZIP file |
312
+ | `fileToExtract` | `string` | Specific file to extract to Buffer |
313
+
314
+ ### Return Values
223
315
 
224
- expect(isValid).toBe(true);
225
- expect(errors).toHaveLength(0);
316
+ #### CSV Reader Return Value
317
+
318
+ ```typescript
319
+ {
320
+ content: {
321
+ data: Array<Array<string | number>>, // Parsed rows (excludes header row if parseHeaders: true)
322
+ headers: string[] | null // Column headers (null if parseHeaders: false)
323
+ }
324
+ }
226
325
  ```
227
326
 
327
+ #### XLSX Reader Return Value
328
+
329
+ ```typescript
330
+ {
331
+ content: {
332
+ worksheets: Array<{
333
+ name: string, // Sheet name
334
+ rows: Array<Array<any>>, // All rows including headers
335
+ headers?: string[] // First row as headers (if present)
336
+ }>
337
+ }
338
+ }
339
+ ```
340
+
341
+ #### PDF Reader Return Value
342
+
343
+ ```typescript
344
+ {
345
+ content: string, // Extracted text (merged or per-page based on mergePages)
346
+ pagesCount: number, // Total pages in PDF
347
+ fileName?: string, // Original filename if available
348
+ info?: Record<string, any> // PDF metadata (author, title, etc.)
349
+ }
350
+ ```
351
+
352
+ > **Note**: When `mergePages: false`, `content` is an array of strings (one per page). When `maxPages` is set, only that many pages are extracted.
353
+
354
+ #### ZIP Reader Return Value
355
+
356
+ ```typescript
357
+ {
358
+ content: {
359
+ entries: Array<{
360
+ name: string, // File/directory path within ZIP
361
+ size: number, // Uncompressed size in bytes
362
+ isDirectory: boolean // True for directories
363
+ }>,
364
+ extractedFiles: Record<string, Buffer | string> // Extracted file contents by path
365
+ }
366
+ }
367
+ ```
368
+
369
+ > **Note**: When `fileToExtract` is specified, only that file appears in `extractedFiles`.
370
+
228
371
  ## Download Cleanup Pattern
229
372
 
230
373
  ```typescript
@@ -234,6 +377,66 @@ test.afterEach(async () => {
234
377
  });
235
378
  ```
236
379
 
380
+ ## Comparison with Vanilla Playwright
381
+
382
+ Vanilla Playwright (real test) snippet:
383
+
384
+ ```typescript
385
+ // ~80 lines of boilerplate!
386
+ const [download] = await Promise.all([
387
+ page.waitForEvent('download'),
388
+ page.getByTestId('download-button-CSV Export').click(),
389
+ ]);
390
+
391
+ const failure = await download.failure();
392
+ expect(failure).toBeNull();
393
+
394
+ const filePath = testInfo.outputPath(download.suggestedFilename());
395
+ await download.saveAs(filePath);
396
+
397
+ await expect
398
+ .poll(
399
+ async () => {
400
+ try {
401
+ await fs.access(filePath);
402
+ return true;
403
+ } catch {
404
+ return false;
405
+ }
406
+ },
407
+ { timeout: 5000, intervals: [100, 200, 500] }
408
+ )
409
+ .toBe(true);
410
+
411
+ const csvContent = await fs.readFile(filePath, 'utf-8');
412
+
413
+ const parseResult = parse(csvContent, {
414
+ header: true,
415
+ skipEmptyLines: true,
416
+ dynamicTyping: true,
417
+ transformHeader: (header: string) => header.trim(),
418
+ });
419
+
420
+ if (parseResult.errors.length > 0) {
421
+ throw new Error(`CSV parsing errors: ${JSON.stringify(parseResult.errors)}`);
422
+ }
423
+
424
+ const data = parseResult.data as Array<Record<string, unknown>>;
425
+ const headers = parseResult.meta.fields || [];
426
+ ```
427
+
428
+ With File Utils, the same flow becomes:
429
+
430
+ ```typescript
431
+ const downloadPath = await handleDownload({
432
+ page,
433
+ downloadDir: DOWNLOAD_DIR,
434
+ trigger: () => page.getByTestId('download-button-text/csv').click(),
435
+ });
436
+
437
+ const { data, headers } = (await readCSV({ filePath: downloadPath })).content;
438
+ ```
439
+
237
440
  ## Related Fragments
238
441
 
239
442
  - `overview.md` - Installation and imports
@@ -242,7 +445,7 @@ test.afterEach(async () => {
242
445
 
243
446
  ## Anti-Patterns
244
447
 
245
- **❌ Not cleaning up downloads:**
448
+ **DON'T leave downloads in place:**
246
449
 
247
450
  ```typescript
248
451
  test('creates file', async () => {
@@ -251,7 +454,7 @@ test('creates file', async () => {
251
454
  })
252
455
  ```
253
456
 
254
- **✅ Clean up after tests:**
457
+ **DO clean up after tests:**
255
458
 
256
459
  ```typescript
257
460
  test.afterEach(async () => {