ma-agents 2.22.2 → 3.0.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 (476) hide show
  1. package/.opencode/skills/.ma-agents.json +99 -99
  2. package/lib/bmad-cache/bmb/.claude-plugin/marketplace.json +22 -0
  3. package/lib/bmad-cache/bmb/.markdownlint-cli2.yaml +1 -0
  4. package/lib/bmad-cache/bmb/_git_preserved/index +0 -0
  5. package/lib/bmad-cache/bmb/_git_preserved/logs/HEAD +1 -1
  6. package/lib/bmad-cache/bmb/_git_preserved/logs/refs/heads/main +1 -1
  7. package/lib/bmad-cache/bmb/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
  8. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-0de89e0854d5b2b3b3b0c1ee56eee73a739f15e7.idx +0 -0
  9. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-0de89e0854d5b2b3b3b0c1ee56eee73a739f15e7.pack +0 -0
  10. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-0de89e0854d5b2b3b3b0c1ee56eee73a739f15e7.rev +0 -0
  11. package/lib/bmad-cache/bmb/_git_preserved/packed-refs +1 -1
  12. package/lib/bmad-cache/bmb/_git_preserved/refs/heads/main +1 -1
  13. package/lib/bmad-cache/bmb/_git_preserved/shallow +1 -1
  14. package/lib/bmad-cache/bmb/package-lock.json +2 -2
  15. package/lib/bmad-cache/bmb/package.json +7 -4
  16. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/generate-html-report.py +534 -0
  17. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/prepass-execution-deps.py +4 -35
  18. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/prepass-prompt-metrics.py +2 -75
  19. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/prepass-structure-capabilities.py +3 -194
  20. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/scan-path-standards.py +104 -18
  21. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/assets/module-help.csv +6 -0
  22. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/assets/module.yaml +20 -0
  23. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/cleanup-legacy.py +259 -0
  24. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/merge-config.py +408 -0
  25. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/merge-help-csv.py +220 -0
  26. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/tests/test-cleanup-legacy.py +429 -0
  27. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/tests/test-merge-config.py +644 -0
  28. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/tests/test-merge-help-csv.py +237 -0
  29. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-html-report.py +539 -0
  30. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/prepass-execution-deps.py +5 -30
  31. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/prepass-workflow-integrity.py +0 -5
  32. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/scan-path-standards.py +103 -16
  33. package/lib/bmad-cache/bmb/skills/module-help.csv +6 -0
  34. package/lib/bmad-cache/bmb/skills/module.yaml +20 -0
  35. package/lib/bmad-cache/bmb/tools/validate-doc-links.cjs +407 -0
  36. package/lib/bmad-cache/bmb/tools/validate-file-refs.mjs +1 -1
  37. package/lib/bmad-cache/cache-manifest.json +16 -10
  38. package/lib/bmad-cache/cis/.claude-plugin/marketplace.json +33 -0
  39. package/lib/bmad-cache/cis/_git_preserved/index +0 -0
  40. package/lib/bmad-cache/cis/_git_preserved/logs/HEAD +1 -1
  41. package/lib/bmad-cache/cis/_git_preserved/logs/refs/heads/main +1 -1
  42. package/lib/bmad-cache/cis/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
  43. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-9d60aae6b09bbea0d0c5e79fdbe96e8f66de84e6.idx +0 -0
  44. package/lib/bmad-cache/cis/_git_preserved/objects/pack/{pack-157d7eb8d527233a8607d926fc74ebf87f2ae0d3.pack → pack-9d60aae6b09bbea0d0c5e79fdbe96e8f66de84e6.pack} +0 -0
  45. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-9d60aae6b09bbea0d0c5e79fdbe96e8f66de84e6.rev +0 -0
  46. package/lib/bmad-cache/cis/_git_preserved/packed-refs +1 -1
  47. package/lib/bmad-cache/cis/_git_preserved/refs/heads/main +1 -1
  48. package/lib/bmad-cache/cis/_git_preserved/shallow +1 -1
  49. package/lib/bmad-cache/cis/package-lock.json +17015 -0
  50. package/lib/bmad-cache/cis/package.json +3 -4
  51. package/lib/bmad-cache/cis/src/module-help.csv +6 -6
  52. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-brainstorming-coach/bmad-skill-manifest.yaml +11 -0
  53. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-creative-problem-solver/bmad-skill-manifest.yaml +11 -0
  54. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-design-thinking-coach/bmad-skill-manifest.yaml +11 -0
  55. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-innovation-strategist/bmad-skill-manifest.yaml +11 -0
  56. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-presentation-master/bmad-skill-manifest.yaml +11 -0
  57. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-storyteller/bmad-skill-manifest.yaml +11 -0
  58. package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +58 -0
  59. package/lib/bmad-cache/gds/_git_preserved/index +0 -0
  60. package/lib/bmad-cache/gds/_git_preserved/logs/HEAD +1 -1
  61. package/lib/bmad-cache/gds/_git_preserved/logs/refs/heads/main +1 -1
  62. package/lib/bmad-cache/gds/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
  63. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-8099a88fca0ad946a573316a00887a2921ca1712.idx +0 -0
  64. package/lib/bmad-cache/gds/_git_preserved/objects/pack/{pack-44faafb9245b4ca17ad81bd6c9e6fc52fb5915a1.pack → pack-8099a88fca0ad946a573316a00887a2921ca1712.pack} +0 -0
  65. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-8099a88fca0ad946a573316a00887a2921ca1712.rev +0 -0
  66. package/lib/bmad-cache/gds/_git_preserved/packed-refs +1 -1
  67. package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +1 -1
  68. package/lib/bmad-cache/gds/_git_preserved/shallow +1 -1
  69. package/lib/bmad-cache/gds/package.json +1 -0
  70. package/lib/bmad-cache/gds/src/module-help.csv +35 -35
  71. package/lib/bmad-cache/tea/.claude-plugin/marketplace.json +33 -0
  72. package/lib/bmad-cache/tea/CHANGELOG.md +2 -14
  73. package/lib/bmad-cache/tea/README.md +31 -18
  74. package/lib/bmad-cache/tea/_git_preserved/index +0 -0
  75. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-d243f64f83b36190434d68872a69a40870c53030.idx +0 -0
  76. package/lib/bmad-cache/tea/_git_preserved/objects/pack/{pack-96ec1ce3a9ef4c891e00e060795b4434ba8f7163.pack → pack-d243f64f83b36190434d68872a69a40870c53030.pack} +0 -0
  77. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-d243f64f83b36190434d68872a69a40870c53030.rev +0 -0
  78. package/lib/bmad-cache/tea/_git_preserved/packed-refs +1 -1
  79. package/lib/bmad-cache/tea/_git_preserved/refs/heads/main +1 -1
  80. package/lib/bmad-cache/tea/_git_preserved/refs/tags/v1.7.3 +1 -0
  81. package/lib/bmad-cache/tea/_git_preserved/shallow +1 -1
  82. package/lib/bmad-cache/tea/docs/explanation/knowledge-base-system.md +5 -5
  83. package/lib/bmad-cache/tea/docs/explanation/step-file-architecture.md +2 -2
  84. package/lib/bmad-cache/tea/docs/explanation/tea-overview.md +3 -3
  85. package/lib/bmad-cache/tea/docs/glossary/index.md +1 -1
  86. package/lib/bmad-cache/tea/docs/how-to/customization/extend-tea-with-custom-workflows.md +73 -0
  87. package/lib/bmad-cache/tea/docs/how-to/workflows/teach-me-testing.md +7 -7
  88. package/lib/bmad-cache/tea/docs/index.md +2 -1
  89. package/lib/bmad-cache/tea/docs/reference/commands.md +4 -1
  90. package/lib/bmad-cache/tea/docs/reference/configuration.md +37 -15
  91. package/lib/bmad-cache/tea/docs/reference/knowledge-base.md +75 -73
  92. package/lib/bmad-cache/tea/docs/reference/troubleshooting.md +32 -19
  93. package/lib/bmad-cache/tea/docs/tutorials/learn-testing-tea-academy.md +3 -3
  94. package/lib/bmad-cache/tea/package-lock.json +2 -2
  95. package/lib/bmad-cache/tea/package.json +2 -1
  96. package/lib/bmad-cache/tea/src/agents/bmad-tea/SKILL.md +70 -0
  97. package/lib/bmad-cache/tea/src/agents/bmad-tea/bmad-skill-manifest.yaml +14 -0
  98. package/lib/bmad-cache/tea/src/module-help.csv +10 -10
  99. package/lib/bmad-cache/tea/src/module.yaml +8 -8
  100. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/checklist.md +1 -1
  101. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/curriculum.yaml +1 -1
  102. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/session-content-map.yaml +26 -14
  103. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/tea-resources-index.yaml +108 -73
  104. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/instructions.md +2 -2
  105. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-03-session-menu.md +1 -1
  106. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-01.md +3 -3
  107. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-07.md +14 -6
  108. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-05-completion.md +3 -3
  109. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/templates/certificate-template.md +1 -1
  110. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/workflow-plan-teach-me-testing.md +8 -8
  111. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/atdd-checklist-template.md +1 -1
  112. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-01-preflight-and-context.md +3 -3
  113. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04a-subagent-api-failing.md +9 -1
  114. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-01-preflight-and-context.md +1 -1
  115. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-03b-subagent-e2e.md +2 -2
  116. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-02-generate-pipeline.md +6 -0
  117. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-03-configure-quality-gates.md +6 -1
  118. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-03-scaffold-framework.md +3 -2
  119. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-01-load-context.md +1 -1
  120. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-02-load-context.md +1 -1
  121. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-01-load-context.md +1 -1
  122. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/test-review-template.md +11 -11
  123. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-01-load-context.md +1 -1
  124. package/lib/bmad-cache/tea/test/test-installation-components.js +85 -21
  125. package/lib/bmad-cache/tea/test/test-knowledge-base.js +1 -1
  126. package/lib/bmad-cache/tea/tools/validate-agent-schema.js +105 -5
  127. package/lib/bmad-cache/wds/.claude-plugin/marketplace.json +35 -0
  128. package/lib/bmad-cache/wds/.markdownlint-cli2.yaml +38 -0
  129. package/lib/bmad-cache/wds/.nvmrc +1 -0
  130. package/lib/bmad-cache/wds/.prettierignore +9 -0
  131. package/lib/bmad-cache/wds/LICENSE +27 -0
  132. package/lib/bmad-cache/wds/README.md +126 -0
  133. package/lib/bmad-cache/wds/_git_preserved/HEAD +1 -0
  134. package/lib/bmad-cache/wds/_git_preserved/config +13 -0
  135. package/lib/bmad-cache/wds/_git_preserved/description +1 -0
  136. package/lib/bmad-cache/wds/_git_preserved/hooks/applypatch-msg.sample +15 -0
  137. package/lib/bmad-cache/wds/_git_preserved/hooks/commit-msg.sample +24 -0
  138. package/lib/bmad-cache/wds/_git_preserved/hooks/fsmonitor-watchman.sample +174 -0
  139. package/lib/bmad-cache/wds/_git_preserved/hooks/post-update.sample +8 -0
  140. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-applypatch.sample +14 -0
  141. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-commit.sample +49 -0
  142. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-merge-commit.sample +13 -0
  143. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-push.sample +53 -0
  144. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-rebase.sample +169 -0
  145. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-receive.sample +24 -0
  146. package/lib/bmad-cache/wds/_git_preserved/hooks/prepare-commit-msg.sample +42 -0
  147. package/lib/bmad-cache/wds/_git_preserved/hooks/push-to-checkout.sample +78 -0
  148. package/lib/bmad-cache/wds/_git_preserved/hooks/sendemail-validate.sample +77 -0
  149. package/lib/bmad-cache/wds/_git_preserved/hooks/update.sample +128 -0
  150. package/lib/bmad-cache/wds/_git_preserved/index +0 -0
  151. package/lib/bmad-cache/wds/_git_preserved/info/exclude +6 -0
  152. package/lib/bmad-cache/wds/_git_preserved/logs/HEAD +1 -0
  153. package/lib/bmad-cache/wds/_git_preserved/logs/refs/heads/main +1 -0
  154. package/lib/bmad-cache/wds/_git_preserved/logs/refs/remotes/origin/HEAD +1 -0
  155. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-92d32f26e3a97a0786dcea5cb2c24bf90384521c.idx +0 -0
  156. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-92d32f26e3a97a0786dcea5cb2c24bf90384521c.pack +0 -0
  157. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-92d32f26e3a97a0786dcea5cb2c24bf90384521c.rev +0 -0
  158. package/lib/bmad-cache/wds/_git_preserved/packed-refs +2 -0
  159. package/lib/bmad-cache/wds/_git_preserved/refs/heads/main +1 -0
  160. package/lib/bmad-cache/wds/_git_preserved/refs/remotes/origin/HEAD +1 -0
  161. package/lib/bmad-cache/wds/_git_preserved/shallow +1 -0
  162. package/lib/bmad-cache/wds/eslint.config.mjs +152 -0
  163. package/lib/bmad-cache/wds/package.json +82 -0
  164. package/lib/bmad-cache/wds/prettier.config.mjs +32 -0
  165. package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/bmad-skill-manifest.yaml +12 -0
  166. package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/bmad-skill-manifest.yaml +12 -0
  167. package/lib/bmad-cache/wds/src/module-help.csv +18 -0
  168. package/lib/bmad-cache/wds/src/module.yaml +148 -0
  169. package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/bmad-skill-manifest.yaml +1 -0
  170. package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/templates/platform-requirements.template.yaml +69 -0
  171. package/lib/bmad-cache/wds/src/workflows/wds-2-trigger-mapping/bmad-skill-manifest.yaml +1 -0
  172. package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/bmad-skill-manifest.yaml +1 -0
  173. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/bmad-skill-manifest.yaml +1 -0
  174. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/design-delivery.template.yaml +104 -0
  175. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/test-scenario.template.yaml +192 -0
  176. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/bmad-skill-manifest.yaml +1 -0
  177. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.css +164 -0
  178. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.html +18 -0
  179. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.js +430 -0
  180. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/demo-data-template.json +63 -0
  181. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/page-template.html +465 -0
  182. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/work-file-template.yaml +264 -0
  183. package/lib/bmad-cache/wds/src/workflows/wds-6-asset-generation/bmad-skill-manifest.yaml +1 -0
  184. package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/bmad-skill-manifest.yaml +1 -0
  185. package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/templates/catalog.template.html +363 -0
  186. package/lib/bmad-cache/wds/src/workflows/wds-8-product-evolution/bmad-skill-manifest.yaml +1 -0
  187. package/lib/bmad-customize/bmm-architect.customize.yaml +6 -0
  188. package/lib/bmad-customize/bmm-bmad-master.customize.yaml +6 -0
  189. package/lib/bmad-customize/bmm-dev.customize.yaml +6 -0
  190. package/lib/bmad-customize/bmm-pm.customize.yaml +6 -0
  191. package/lib/bmad-customize/bmm-qa.customize.yaml +6 -0
  192. package/lib/bmad-customize/bmm-sm.customize.yaml +6 -0
  193. package/lib/bmad-customize/bmm-tech-writer.customize.yaml +6 -0
  194. package/lib/bmad-customize/bmm-ux-designer.customize.yaml +6 -0
  195. package/lib/bmad-extension/module-help.csv +37 -7
  196. package/lib/bmad-extension/module.yaml +4 -2
  197. package/lib/bmad-extension/skills/add-sprint/.gitkeep +0 -0
  198. package/lib/bmad-extension/skills/add-sprint/SKILL.md +121 -0
  199. package/lib/bmad-extension/skills/add-sprint/bmad-skill-manifest.yaml +3 -0
  200. package/lib/bmad-extension/skills/add-to-sprint/.gitkeep +0 -0
  201. package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +215 -0
  202. package/lib/bmad-extension/skills/add-to-sprint/bmad-skill-manifest.yaml +3 -0
  203. package/lib/bmad-extension/skills/bmad-ma-agent-cyber/.gitkeep +0 -0
  204. package/lib/bmad-extension/skills/bmad-ma-agent-cyber/SKILL.md +44 -0
  205. package/lib/bmad-extension/skills/bmad-ma-agent-cyber/bmad-skill-manifest.yaml +11 -0
  206. package/lib/bmad-extension/skills/bmad-ma-agent-devops/.gitkeep +0 -0
  207. package/lib/bmad-extension/skills/bmad-ma-agent-devops/SKILL.md +44 -0
  208. package/lib/bmad-extension/skills/bmad-ma-agent-devops/bmad-skill-manifest.yaml +11 -0
  209. package/lib/bmad-extension/skills/bmad-ma-agent-mil498/.gitkeep +0 -0
  210. package/lib/bmad-extension/skills/bmad-ma-agent-mil498/SKILL.md +48 -0
  211. package/lib/bmad-extension/skills/bmad-ma-agent-mil498/bmad-skill-manifest.yaml +11 -0
  212. package/lib/bmad-extension/skills/bmad-ma-agent-sre/.gitkeep +0 -0
  213. package/lib/bmad-extension/skills/bmad-ma-agent-sre/SKILL.md +44 -0
  214. package/lib/bmad-extension/skills/bmad-ma-agent-sre/bmad-skill-manifest.yaml +11 -0
  215. package/lib/bmad-extension/skills/create-bug-story/.gitkeep +0 -0
  216. package/lib/bmad-extension/skills/create-bug-story/SKILL.md +195 -0
  217. package/lib/bmad-extension/skills/create-bug-story/bmad-skill-manifest.yaml +3 -0
  218. package/lib/bmad-extension/skills/cyber-generate-certs/.gitkeep +0 -0
  219. package/lib/bmad-extension/skills/cyber-generate-certs/SKILL.md +27 -0
  220. package/lib/bmad-extension/skills/cyber-generate-certs/bmad-skill-manifest.yaml +3 -0
  221. package/lib/bmad-extension/skills/cyber-immunity-estimation/.gitkeep +0 -0
  222. package/lib/bmad-extension/skills/cyber-immunity-estimation/SKILL.md +29 -0
  223. package/lib/bmad-extension/skills/cyber-immunity-estimation/bmad-skill-manifest.yaml +3 -0
  224. package/lib/bmad-extension/skills/cyber-security-audit/.gitkeep +0 -0
  225. package/lib/bmad-extension/skills/cyber-security-audit/SKILL.md +27 -0
  226. package/lib/bmad-extension/skills/cyber-security-audit/bmad-skill-manifest.yaml +3 -0
  227. package/lib/bmad-extension/skills/cyber-vault-secrets/.gitkeep +0 -0
  228. package/lib/bmad-extension/skills/cyber-vault-secrets/SKILL.md +28 -0
  229. package/lib/bmad-extension/skills/cyber-vault-secrets/bmad-skill-manifest.yaml +3 -0
  230. package/lib/bmad-extension/skills/cyber-verify-docker-users/.gitkeep +0 -0
  231. package/lib/bmad-extension/skills/cyber-verify-docker-users/SKILL.md +23 -0
  232. package/lib/bmad-extension/skills/cyber-verify-docker-users/bmad-skill-manifest.yaml +3 -0
  233. package/lib/bmad-extension/skills/cyber-verify-image-signature/.gitkeep +0 -0
  234. package/lib/bmad-extension/skills/cyber-verify-image-signature/SKILL.md +22 -0
  235. package/lib/bmad-extension/skills/cyber-verify-image-signature/bmad-skill-manifest.yaml +3 -0
  236. package/lib/bmad-extension/skills/cyber-vulnerability-scan/.gitkeep +0 -0
  237. package/lib/bmad-extension/skills/cyber-vulnerability-scan/SKILL.md +28 -0
  238. package/lib/bmad-extension/skills/cyber-vulnerability-scan/bmad-skill-manifest.yaml +3 -0
  239. package/lib/bmad-extension/skills/devops-configure-infrastructure/.gitkeep +0 -0
  240. package/lib/bmad-extension/skills/devops-configure-infrastructure/SKILL.md +27 -0
  241. package/lib/bmad-extension/skills/devops-configure-infrastructure/bmad-skill-manifest.yaml +3 -0
  242. package/lib/bmad-extension/skills/devops-disconnected-deployment/.gitkeep +0 -0
  243. package/lib/bmad-extension/skills/devops-disconnected-deployment/SKILL.md +27 -0
  244. package/lib/bmad-extension/skills/devops-disconnected-deployment/bmad-skill-manifest.yaml +3 -0
  245. package/lib/bmad-extension/skills/devops-docker-compose-setup/.gitkeep +0 -0
  246. package/lib/bmad-extension/skills/devops-docker-compose-setup/SKILL.md +26 -0
  247. package/lib/bmad-extension/skills/devops-docker-compose-setup/bmad-skill-manifest.yaml +3 -0
  248. package/lib/bmad-extension/skills/devops-manage-helm/.gitkeep +0 -0
  249. package/lib/bmad-extension/skills/devops-manage-helm/SKILL.md +28 -0
  250. package/lib/bmad-extension/skills/devops-manage-helm/bmad-skill-manifest.yaml +3 -0
  251. package/lib/bmad-extension/skills/devops-sign-docker-image/.gitkeep +0 -0
  252. package/lib/bmad-extension/skills/devops-sign-docker-image/SKILL.md +24 -0
  253. package/lib/bmad-extension/skills/devops-sign-docker-image/bmad-skill-manifest.yaml +3 -0
  254. package/lib/bmad-extension/skills/mil498-ocd/.gitkeep +0 -0
  255. package/lib/bmad-extension/skills/mil498-ocd/SKILL.md +30 -0
  256. package/lib/bmad-extension/skills/mil498-ocd/bmad-skill-manifest.yaml +5 -0
  257. package/lib/bmad-extension/skills/mil498-ocd/prompts/01-discover-project-artifacts.md +26 -0
  258. package/lib/bmad-extension/skills/mil498-ocd/prompts/02-load-template.md +10 -0
  259. package/lib/bmad-extension/skills/mil498-ocd/prompts/03-generate-document.md +90 -0
  260. package/lib/bmad-extension/skills/mil498-ocd/prompts/04-validate.md +14 -0
  261. package/lib/bmad-extension/skills/mil498-ocd/prompts/05-review.md +15 -0
  262. package/lib/bmad-extension/skills/mil498-ocd/prompts/06-save.md +15 -0
  263. package/lib/bmad-extension/skills/mil498-ocd/template.md +169 -0
  264. package/lib/bmad-extension/skills/mil498-sdd/.gitkeep +0 -0
  265. package/lib/bmad-extension/skills/mil498-sdd/SKILL.md +30 -0
  266. package/lib/bmad-extension/skills/mil498-sdd/bmad-skill-manifest.yaml +5 -0
  267. package/lib/bmad-extension/skills/mil498-sdd/prompts/01-discover-project-artifacts.md +50 -0
  268. package/lib/bmad-extension/skills/mil498-sdd/prompts/02-load-template.md +10 -0
  269. package/lib/bmad-extension/skills/mil498-sdd/prompts/03-generate-document.md +98 -0
  270. package/lib/bmad-extension/skills/mil498-sdd/prompts/04-validate.md +16 -0
  271. package/lib/bmad-extension/skills/mil498-sdd/prompts/05-review.md +15 -0
  272. package/lib/bmad-extension/skills/mil498-sdd/prompts/06-save.md +19 -0
  273. package/lib/bmad-extension/skills/mil498-sdd/template.md +163 -0
  274. package/lib/bmad-extension/skills/mil498-sdp/.gitkeep +0 -0
  275. package/lib/bmad-extension/skills/mil498-sdp/SKILL.md +30 -0
  276. package/lib/bmad-extension/skills/mil498-sdp/bmad-skill-manifest.yaml +5 -0
  277. package/lib/bmad-extension/skills/mil498-sdp/prompts/01-discover-project-artifacts.md +32 -0
  278. package/lib/bmad-extension/skills/mil498-sdp/prompts/02-load-template.md +10 -0
  279. package/lib/bmad-extension/skills/mil498-sdp/prompts/03-generate-document.md +187 -0
  280. package/lib/bmad-extension/skills/mil498-sdp/prompts/04-validate.md +13 -0
  281. package/lib/bmad-extension/skills/mil498-sdp/prompts/05-review.md +15 -0
  282. package/lib/bmad-extension/skills/mil498-sdp/prompts/06-save.md +14 -0
  283. package/lib/bmad-extension/skills/mil498-sdp/template.md +307 -0
  284. package/lib/bmad-extension/skills/mil498-srs/.gitkeep +0 -0
  285. package/lib/bmad-extension/skills/mil498-srs/SKILL.md +30 -0
  286. package/lib/bmad-extension/skills/mil498-srs/bmad-skill-manifest.yaml +5 -0
  287. package/lib/bmad-extension/skills/mil498-srs/prompts/01-discover-project-artifacts.md +42 -0
  288. package/lib/bmad-extension/skills/mil498-srs/prompts/02-load-template.md +10 -0
  289. package/lib/bmad-extension/skills/mil498-srs/prompts/03-generate-document.md +100 -0
  290. package/lib/bmad-extension/skills/mil498-srs/prompts/04-validate.md +16 -0
  291. package/lib/bmad-extension/skills/mil498-srs/prompts/05-review.md +15 -0
  292. package/lib/bmad-extension/skills/mil498-srs/prompts/06-save.md +18 -0
  293. package/lib/bmad-extension/skills/mil498-srs/template.md +219 -0
  294. package/lib/bmad-extension/skills/mil498-ssdd/.gitkeep +0 -0
  295. package/lib/bmad-extension/skills/mil498-ssdd/SKILL.md +32 -0
  296. package/lib/bmad-extension/skills/mil498-ssdd/bmad-skill-manifest.yaml +5 -0
  297. package/lib/bmad-extension/skills/mil498-ssdd/prompts/01-discover-project-artifacts.md +32 -0
  298. package/lib/bmad-extension/skills/mil498-ssdd/prompts/02-load-template.md +10 -0
  299. package/lib/bmad-extension/skills/mil498-ssdd/prompts/03-csci-discovery-interview.md +43 -0
  300. package/lib/bmad-extension/skills/mil498-ssdd/prompts/04-generate-document.md +96 -0
  301. package/lib/bmad-extension/skills/mil498-ssdd/prompts/05-validate.md +14 -0
  302. package/lib/bmad-extension/skills/mil498-ssdd/prompts/06-review.md +16 -0
  303. package/lib/bmad-extension/skills/mil498-ssdd/prompts/07-save.md +16 -0
  304. package/lib/bmad-extension/skills/mil498-ssdd/template.md +154 -0
  305. package/lib/bmad-extension/skills/mil498-sss/.gitkeep +0 -0
  306. package/lib/bmad-extension/skills/mil498-sss/SKILL.md +31 -0
  307. package/lib/bmad-extension/skills/mil498-sss/bmad-skill-manifest.yaml +5 -0
  308. package/lib/bmad-extension/skills/mil498-sss/prompts/01-discover-project-artifacts.md +31 -0
  309. package/lib/bmad-extension/skills/mil498-sss/prompts/02-load-template.md +10 -0
  310. package/lib/bmad-extension/skills/mil498-sss/prompts/03-generate-document.md +108 -0
  311. package/lib/bmad-extension/skills/mil498-sss/prompts/04-validate.md +16 -0
  312. package/lib/bmad-extension/skills/mil498-sss/prompts/05-review.md +15 -0
  313. package/lib/bmad-extension/skills/mil498-sss/prompts/06-save.md +15 -0
  314. package/lib/bmad-extension/skills/mil498-sss/template.md +225 -0
  315. package/lib/bmad-extension/skills/mil498-std/.gitkeep +0 -0
  316. package/lib/bmad-extension/skills/mil498-std/SKILL.md +30 -0
  317. package/lib/bmad-extension/skills/mil498-std/bmad-skill-manifest.yaml +5 -0
  318. package/lib/bmad-extension/skills/mil498-std/prompts/01-discover-project-artifacts.md +42 -0
  319. package/lib/bmad-extension/skills/mil498-std/prompts/02-load-template.md +10 -0
  320. package/lib/bmad-extension/skills/mil498-std/prompts/03-generate-document.md +117 -0
  321. package/lib/bmad-extension/skills/mil498-std/prompts/04-validate.md +15 -0
  322. package/lib/bmad-extension/skills/mil498-std/prompts/05-review.md +15 -0
  323. package/lib/bmad-extension/skills/mil498-std/prompts/06-save.md +15 -0
  324. package/lib/bmad-extension/skills/mil498-std/template.md +188 -0
  325. package/lib/bmad-extension/skills/modify-sprint/.gitkeep +0 -0
  326. package/lib/bmad-extension/skills/modify-sprint/SKILL.md +259 -0
  327. package/lib/bmad-extension/skills/modify-sprint/bmad-skill-manifest.yaml +3 -0
  328. package/lib/bmad-extension/skills/project-context-expansion/.gitkeep +0 -0
  329. package/lib/bmad-extension/skills/project-context-expansion/SKILL.md +238 -0
  330. package/lib/bmad-extension/skills/project-context-expansion/bmad-skill-manifest.yaml +3 -0
  331. package/lib/bmad-extension/skills/sprint-status-view/.gitkeep +0 -0
  332. package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +202 -0
  333. package/lib/bmad-extension/skills/sprint-status-view/bmad-skill-manifest.yaml +3 -0
  334. package/lib/bmad-extension/skills/sre-check-deployment-status/.gitkeep +0 -0
  335. package/lib/bmad-extension/skills/sre-check-deployment-status/SKILL.md +32 -0
  336. package/lib/bmad-extension/skills/sre-check-deployment-status/bmad-skill-manifest.yaml +3 -0
  337. package/lib/bmad-extension/skills/sre-check-secrets/.gitkeep +0 -0
  338. package/lib/bmad-extension/skills/sre-check-secrets/SKILL.md +23 -0
  339. package/lib/bmad-extension/skills/sre-check-secrets/bmad-skill-manifest.yaml +3 -0
  340. package/lib/bmad-extension/skills/sre-check-system-status/.gitkeep +0 -0
  341. package/lib/bmad-extension/skills/sre-check-system-status/SKILL.md +27 -0
  342. package/lib/bmad-extension/skills/sre-check-system-status/bmad-skill-manifest.yaml +3 -0
  343. package/lib/bmad-extension/skills/sre-day-2-ops/.gitkeep +0 -0
  344. package/lib/bmad-extension/skills/sre-day-2-ops/SKILL.md +26 -0
  345. package/lib/bmad-extension/skills/sre-day-2-ops/bmad-skill-manifest.yaml +3 -0
  346. package/lib/bmad-extension/skills/sre-deployment-strategies/.gitkeep +0 -0
  347. package/lib/bmad-extension/skills/sre-deployment-strategies/SKILL.md +28 -0
  348. package/lib/bmad-extension/skills/sre-deployment-strategies/bmad-skill-manifest.yaml +3 -0
  349. package/lib/bmad-extension/skills/sre-fix-deployments/.gitkeep +0 -0
  350. package/lib/bmad-extension/skills/sre-fix-deployments/SKILL.md +25 -0
  351. package/lib/bmad-extension/skills/sre-fix-deployments/bmad-skill-manifest.yaml +3 -0
  352. package/lib/bmad-extension/skills/sre-gitops-status/.gitkeep +0 -0
  353. package/lib/bmad-extension/skills/sre-gitops-status/SKILL.md +25 -0
  354. package/lib/bmad-extension/skills/sre-gitops-status/bmad-skill-manifest.yaml +3 -0
  355. package/lib/bmad.js +541 -1
  356. package/package.json +3 -3
  357. package/test/bmad-extension.test.js +115 -69
  358. package/test/bmad-version-bump.test.js +313 -0
  359. package/test/convert-agents-to-skills.test.js +245 -0
  360. package/test/extension-module-restructure.test.js +359 -0
  361. package/test/integration-verification.test.js +71 -40
  362. package/test/migration-validation.test.js +499 -0
  363. package/test/migration.test.js +832 -0
  364. package/test/story-15-5-workflow-skills.test.js +311 -0
  365. package/test/yes-flag.test.js +8 -1
  366. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-c6e539e2308f8ed764c5b54b6ab68a67f8a3796b.idx +0 -0
  367. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-c6e539e2308f8ed764c5b54b6ab68a67f8a3796b.pack +0 -0
  368. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-c6e539e2308f8ed764c5b54b6ab68a67f8a3796b.rev +0 -0
  369. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/bmad-manifest.json +0 -62
  370. package/lib/bmad-cache/bmb/samples/bmad-excalidraw/bmad-manifest.json +0 -18
  371. package/lib/bmad-cache/bmb/src/module-help.csv +0 -7
  372. package/lib/bmad-cache/bmb/src/module.yaml +0 -20
  373. package/lib/bmad-cache/bmb/src/skills/bmad-agent-builder/bmad-manifest.json +0 -24
  374. package/lib/bmad-cache/bmb/src/skills/bmad-agent-builder/scripts/bmad-manifest-schema.json +0 -103
  375. package/lib/bmad-cache/bmb/src/skills/bmad-agent-builder/scripts/generate-html-report.py +0 -1002
  376. package/lib/bmad-cache/bmb/src/skills/bmad-agent-builder/scripts/manifest.py +0 -420
  377. package/lib/bmad-cache/bmb/src/skills/bmad-workflow-builder/bmad-manifest.json +0 -23
  378. package/lib/bmad-cache/bmb/src/skills/bmad-workflow-builder/scripts/bmad-manifest-schema.json +0 -103
  379. package/lib/bmad-cache/bmb/src/skills/bmad-workflow-builder/scripts/generate-html-report.py +0 -1002
  380. package/lib/bmad-cache/bmb/src/skills/bmad-workflow-builder/scripts/manifest.py +0 -420
  381. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-157d7eb8d527233a8607d926fc74ebf87f2ae0d3.idx +0 -0
  382. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-157d7eb8d527233a8607d926fc74ebf87f2ae0d3.rev +0 -0
  383. package/lib/bmad-cache/cis/src/agents/brainstorming-coach.agent.yaml +0 -21
  384. package/lib/bmad-cache/cis/src/agents/creative-problem-solver.agent.yaml +0 -21
  385. package/lib/bmad-cache/cis/src/agents/design-thinking-coach.agent.yaml +0 -21
  386. package/lib/bmad-cache/cis/src/agents/innovation-strategist.agent.yaml +0 -21
  387. package/lib/bmad-cache/cis/src/agents/presentation-master.agent.yaml +0 -53
  388. package/lib/bmad-cache/cis/src/agents/storyteller/storyteller.agent.yaml +0 -25
  389. package/lib/bmad-cache/cis/src/teams/creative-squad.yaml +0 -7
  390. package/lib/bmad-cache/cis/src/teams/default-party.csv +0 -12
  391. package/lib/bmad-cache/cis/src/workflows/README.md +0 -175
  392. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-44faafb9245b4ca17ad81bd6c9e6fc52fb5915a1.idx +0 -0
  393. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-44faafb9245b4ca17ad81bd6c9e6fc52fb5915a1.rev +0 -0
  394. package/lib/bmad-cache/gds/_git_preserved/refs/tags/v0.2.2 +0 -1
  395. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-96ec1ce3a9ef4c891e00e060795b4434ba8f7163.idx +0 -0
  396. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-96ec1ce3a9ef4c891e00e060795b4434ba8f7163.rev +0 -0
  397. package/lib/bmad-cache/tea/_git_preserved/refs/tags/v1.7.0 +0 -1
  398. package/lib/bmad-cache/tea/docs/MIGRATION.md +0 -488
  399. package/lib/bmad-cache/tea/src/agents/tea.agent.yaml +0 -67
  400. package/lib/bmad-cache/tea/src/teams/default-party.csv +0 -2
  401. package/lib/bmad-customizations/bmm-cyber.customize.yaml +0 -24
  402. package/lib/bmad-customizations/bmm-devops.customize.yaml +0 -24
  403. package/lib/bmad-customizations/bmm-mil498.customize.yaml +0 -36
  404. package/lib/bmad-customizations/bmm-sre.customize.yaml +0 -24
  405. package/lib/bmad-customizations/cyber.md +0 -71
  406. package/lib/bmad-customizations/devops.md +0 -71
  407. package/lib/bmad-customizations/mil498.md +0 -75
  408. package/lib/bmad-customizations/sre.md +0 -71
  409. package/lib/bmad-extension/agents/bmm-architect.customize.yaml +0 -5
  410. package/lib/bmad-extension/agents/bmm-bmad-master.customize.yaml +0 -5
  411. package/lib/bmad-extension/agents/bmm-cyber.customize.yaml +0 -30
  412. package/lib/bmad-extension/agents/bmm-dev.customize.yaml +0 -5
  413. package/lib/bmad-extension/agents/bmm-devops.customize.yaml +0 -30
  414. package/lib/bmad-extension/agents/bmm-mil498.customize.yaml +0 -42
  415. package/lib/bmad-extension/agents/bmm-pm.customize.yaml +0 -5
  416. package/lib/bmad-extension/agents/bmm-qa.customize.yaml +0 -5
  417. package/lib/bmad-extension/agents/bmm-sm.customize.yaml +0 -5
  418. package/lib/bmad-extension/agents/bmm-sre.customize.yaml +0 -30
  419. package/lib/bmad-extension/agents/bmm-tech-writer.customize.yaml +0 -5
  420. package/lib/bmad-extension/agents/bmm-ux-designer.customize.yaml +0 -5
  421. /package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/scan-scripts.py +0 -0
  422. /package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/prepass-prompt-metrics.py +0 -0
  423. /package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/scan-scripts.py +0 -0
  424. /package/lib/bmad-cache/{bmb/src/skills/bmad-agent-builder → cis/src/skills/bmad-cis-design-thinking}/bmad-skill-manifest.yaml +0 -0
  425. /package/lib/bmad-cache/cis/src/{workflows → skills}/bmad-cis-design-thinking/design-methods.csv +0 -0
  426. /package/lib/bmad-cache/{bmb/src/skills/bmad-workflow-builder → cis/src/skills/bmad-cis-innovation-strategy}/bmad-skill-manifest.yaml +0 -0
  427. /package/lib/bmad-cache/cis/src/{workflows → skills}/bmad-cis-innovation-strategy/innovation-frameworks.csv +0 -0
  428. /package/lib/bmad-cache/cis/src/{workflows/bmad-cis-design-thinking → skills/bmad-cis-problem-solving}/bmad-skill-manifest.yaml +0 -0
  429. /package/lib/bmad-cache/cis/src/{workflows → skills}/bmad-cis-problem-solving/solving-methods.csv +0 -0
  430. /package/lib/bmad-cache/cis/src/{workflows/bmad-cis-innovation-strategy → skills/bmad-cis-storytelling}/bmad-skill-manifest.yaml +0 -0
  431. /package/lib/bmad-cache/cis/src/{workflows → skills}/bmad-cis-storytelling/story-types.csv +0 -0
  432. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/adr-quality-readiness-checklist.md +0 -0
  433. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/api-request.md +0 -0
  434. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/api-testing-patterns.md +0 -0
  435. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/auth-session.md +0 -0
  436. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/burn-in.md +0 -0
  437. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/ci-burn-in.md +0 -0
  438. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/component-tdd.md +0 -0
  439. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/contract-testing.md +0 -0
  440. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/data-factories.md +0 -0
  441. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/email-auth.md +0 -0
  442. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/error-handling.md +0 -0
  443. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/feature-flags.md +0 -0
  444. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/file-utils.md +0 -0
  445. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/fixture-architecture.md +0 -0
  446. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/fixtures-composition.md +0 -0
  447. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/intercept-network-call.md +0 -0
  448. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/log.md +0 -0
  449. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/network-error-monitor.md +0 -0
  450. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/network-first.md +0 -0
  451. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/network-recorder.md +0 -0
  452. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/nfr-criteria.md +0 -0
  453. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/overview.md +0 -0
  454. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pact-consumer-di.md +0 -0
  455. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pact-consumer-framework-setup.md +0 -0
  456. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pact-mcp.md +0 -0
  457. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pactjs-utils-consumer-helpers.md +0 -0
  458. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pactjs-utils-overview.md +0 -0
  459. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pactjs-utils-provider-verifier.md +0 -0
  460. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pactjs-utils-request-filter.md +0 -0
  461. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/playwright-cli.md +0 -0
  462. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/playwright-config.md +0 -0
  463. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/probability-impact.md +0 -0
  464. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/recurse.md +0 -0
  465. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/risk-governance.md +0 -0
  466. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/selective-testing.md +0 -0
  467. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/selector-resilience.md +0 -0
  468. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/test-healing-patterns.md +0 -0
  469. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/test-levels-framework.md +0 -0
  470. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/test-priorities-matrix.md +0 -0
  471. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/test-quality.md +0 -0
  472. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/timing-debugging.md +0 -0
  473. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/visual-debugging.md +0 -0
  474. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/tea-index.csv +0 -0
  475. /package/lib/bmad-cache/{cis/src/workflows/bmad-cis-problem-solving → wds/src/workflows/wds-0-alignment-signoff}/bmad-skill-manifest.yaml +0 -0
  476. /package/lib/bmad-cache/{cis/src/workflows/bmad-cis-storytelling → wds/src/workflows/wds-0-project-setup}/bmad-skill-manifest.yaml +0 -0
@@ -1,9 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Tests for Story 8.3: Create BMAD Extension Module Structure
3
+ * Tests for BMAD Extension Module and Built-in Agent Customizations
4
4
  *
5
- * Validates extension module files, directory structure, customize.yaml contents,
6
- * and deployment logic in bmad.js.
5
+ * Story 8.3: Extension module structure (module.yaml, module-help.csv, workflows)
6
+ * Story 15.6: Built-in agent customizations separated to lib/bmad-customize/
7
+ *
8
+ * Validates extension module files, directory structure, built-in customize.yaml
9
+ * contents, and deployment logic in bmad.js.
7
10
  */
8
11
  'use strict';
9
12
 
@@ -28,9 +31,9 @@ function test(name, fn) {
28
31
  }
29
32
 
30
33
  const extDir = path.join(__dirname, '..', 'lib', 'bmad-extension');
31
- const agentsDir = path.join(extDir, 'agents');
34
+ const customizeDir = path.join(__dirname, '..', 'lib', 'bmad-customize');
32
35
 
33
- // ─── AC #1: module.yaml, module-help.csv, and 11 agent files exist ──────────
36
+ // ─── AC #1: Extension module structure (module.yaml, module-help.csv, workflows) ──
34
37
 
35
38
  console.log('\nAC #1 — Extension module structure');
36
39
 
@@ -38,8 +41,15 @@ test('1.1: lib/bmad-extension/ directory exists', () => {
38
41
  assert.ok(fs.existsSync(extDir), 'lib/bmad-extension/ must exist');
39
42
  });
40
43
 
41
- test('1.2: lib/bmad-extension/agents/ directory exists', () => {
42
- assert.ok(fs.existsSync(agentsDir), 'lib/bmad-extension/agents/ must exist');
44
+ test('1.2: lib/bmad-extension/agents/ has no .customize.yaml files (Story 15.6)', () => {
45
+ const agentsDir = path.join(extDir, 'agents');
46
+ // bmad-method may recreate an empty agents/ dir when processing --custom-content,
47
+ // so we check for absence of customize files, not absence of the directory itself.
48
+ if (fs.existsSync(agentsDir)) {
49
+ const files = fs.readdirSync(agentsDir).filter(f => f.endsWith('.customize.yaml'));
50
+ assert.strictEqual(files.length, 0, `agents/ must have 0 .customize.yaml files, found ${files.length}`);
51
+ }
52
+ // If directory doesn't exist, that's also correct
43
53
  });
44
54
 
45
55
  test('1.3: module.yaml exists with extends-module: bmm', () => {
@@ -47,7 +57,7 @@ test('1.3: module.yaml exists with extends-module: bmm', () => {
47
57
  assert.ok(fs.existsSync(filePath), 'module.yaml must exist');
48
58
  const content = fs.readFileSync(filePath, 'utf-8');
49
59
  assert.ok(content.includes('extends-module: bmm'), 'module.yaml must declare extends-module: bmm');
50
- assert.ok(content.includes('name: ma-agents-skills'), 'module.yaml must have name: ma-agents-skills');
60
+ assert.ok(content.includes('name: "MA-Agents Skills & Agents"'), 'module.yaml must have name: "MA-Agents Skills & Agents"');
51
61
  });
52
62
 
53
63
  test('1.4: module-help.csv exists', () => {
@@ -55,81 +65,79 @@ test('1.4: module-help.csv exists', () => {
55
65
  assert.ok(fs.existsSync(filePath), 'module-help.csv must exist');
56
66
  });
57
67
 
58
- test('1.5: agents/ contains exactly 11 .customize.yaml files', () => {
59
- const files = fs.readdirSync(agentsDir).filter(f => f.endsWith('.customize.yaml'));
60
- assert.strictEqual(files.length, 11, `Expected 11 .customize.yaml files, found ${files.length}`);
68
+ test('1.5: workflows/ directory exists in extension module', () => {
69
+ const workflowsDir = path.join(extDir, 'workflows');
70
+ assert.ok(fs.existsSync(workflowsDir), 'lib/bmad-extension/workflows/ must exist');
61
71
  });
62
72
 
63
- // ─── AC #2: 4 custom agents have full customization + critical_actions ──────
64
-
65
- console.log('\nAC #2 — Custom agents: persona + menu + critical_actions');
66
-
67
- const customAgents = [
68
- { id: 'bmm-sre', slug: 'sre' },
69
- { id: 'bmm-devops', slug: 'devops' },
70
- { id: 'bmm-cyber', slug: 'cyber' },
71
- { id: 'bmm-mil498', slug: 'mil498' }
72
- ];
73
+ // ─── AC #2: 8 built-in agents in lib/bmad-customize/ with critical_actions only ──
73
74
 
74
- for (const agent of customAgents) {
75
- test(`2.${customAgents.indexOf(agent) + 1}: ${agent.id}.customize.yaml has persona, menu, AND critical_actions`, () => {
76
- const filePath = path.join(agentsDir, `${agent.id}.customize.yaml`);
77
- assert.ok(fs.existsSync(filePath), `${agent.id}.customize.yaml must exist`);
78
- const content = fs.readFileSync(filePath, 'utf-8');
79
-
80
- assert.ok(content.includes('persona:'), `${agent.id} must have persona section`);
81
- assert.ok(content.includes('menu:'), `${agent.id} must have menu section`);
82
- assert.ok(content.includes('critical_actions:'), `${agent.id} must have critical_actions section`);
83
- assert.ok(content.includes(`skills/${agent.slug}/MANIFEST.yaml`),
84
- `${agent.id} critical_actions must reference skills/${agent.slug}/MANIFEST.yaml`);
85
- });
86
- }
75
+ console.log('\nAC #2 — Built-in agent customizations in lib/bmad-customize/');
87
76
 
88
- test('2.5: custom agent critical_actions have all 3 steps', () => {
89
- for (const agent of customAgents) {
90
- const content = fs.readFileSync(path.join(agentsDir, `${agent.id}.customize.yaml`), 'utf-8');
91
- assert.ok(content.includes('1:'), `${agent.id} must have step 1`);
92
- assert.ok(content.includes('2:'), `${agent.id} must have step 2`);
93
- assert.ok(content.includes('3:'), `${agent.id} must have step 3`);
94
- assert.ok(content.includes('always_load: true'), `${agent.id} step 2 must reference always_load`);
95
- assert.ok(content.includes('Follow all skill directives'), `${agent.id} step 3 must follow directives`);
96
- }
77
+ test('2.1: lib/bmad-customize/ directory exists', () => {
78
+ assert.ok(fs.existsSync(customizeDir), 'lib/bmad-customize/ must exist');
97
79
  });
98
80
 
99
- // ─── AC #3: 7 built-in agents have ONLY critical_actions ────────────────────
100
-
101
- console.log('\nAC #3 — Built-in agents: critical_actions only');
102
-
103
81
  const builtinAgents = [
104
82
  'bmm-pm', 'bmm-architect', 'bmm-dev', 'bmm-qa',
105
- 'bmm-sm', 'bmm-tech-writer', 'bmm-ux-designer'
83
+ 'bmm-sm', 'bmm-tech-writer', 'bmm-ux-designer', 'bmm-bmad-master'
106
84
  ];
107
85
 
86
+ test('2.2: lib/bmad-customize/ contains exactly 8 .customize.yaml files', () => {
87
+ const files = fs.readdirSync(customizeDir).filter(f => f.endsWith('.customize.yaml'));
88
+ assert.strictEqual(files.length, 8, `Expected 8 .customize.yaml files, found ${files.length}`);
89
+ });
90
+
108
91
  for (const agentId of builtinAgents) {
109
- test(`3.${builtinAgents.indexOf(agentId) + 1}: ${agentId}.customize.yaml has ONLY critical_actions (no persona/menu)`, () => {
110
- const filePath = path.join(agentsDir, `${agentId}.customize.yaml`);
92
+ test(`2.3-${agentId}: ${agentId}.customize.yaml exists with correct content`, () => {
93
+ const filePath = path.join(customizeDir, `${agentId}.customize.yaml`);
111
94
  assert.ok(fs.existsSync(filePath), `${agentId}.customize.yaml must exist`);
112
95
  const content = fs.readFileSync(filePath, 'utf-8');
113
96
 
97
+ // Must have critical_actions
114
98
  assert.ok(content.includes('critical_actions:'), `${agentId} must have critical_actions`);
99
+
100
+ // Must use 6.2.0 array syntax (- "...") not numbered keys (1: "...")
101
+ assert.ok(content.includes(' - "'), `${agentId} must use array syntax (- "...")`);
102
+ assert.ok(!content.match(/^\s+\d+:/m), `${agentId} must NOT use numbered key syntax`);
103
+
104
+ // Must NOT have persona or menu
115
105
  assert.ok(!content.includes('persona:'), `${agentId} must NOT have persona section`);
116
106
  assert.ok(!content.includes('menu:'), `${agentId} must NOT have menu section`);
107
+
108
+ // Must reference project-level skills/MANIFEST.yaml
117
109
  assert.ok(content.includes('skills/MANIFEST.yaml'), `${agentId} must reference project-level skills/MANIFEST.yaml`);
110
+
111
+ // Must have all 4 critical actions
112
+ assert.ok(content.includes('Read the skills MANIFEST'), `${agentId} must have MANIFEST read action`);
113
+ assert.ok(content.includes('always_load: true'), `${agentId} must reference always_load`);
114
+ assert.ok(content.includes('project-context.md'), `${agentId} must reference project-context.md`);
115
+ assert.ok(content.includes('Follow all skill directives'), `${agentId} must have follow directives action`);
116
+
117
+ // Must have agent-specific comment header
118
+ assert.ok(content.includes(`MA-AGENTS: skill enforcement for ${agentId}`),
119
+ `${agentId} must have agent-specific comment header`);
118
120
  });
119
121
  }
120
122
 
121
- // ─── AC #4: bmad.js has extension deployment stage ──────────────────────────
123
+ // ─── AC #3: bmad.js has extension and customize deployment stages ─────────
122
124
 
123
- console.log('\nAC #4 — bmad.js extension deployment');
125
+ console.log('\nAC #3 — bmad.js deployment logic');
124
126
 
125
- test('4.1: bmad.js contains extension deployment code', () => {
127
+ test('3.1: bmad.js contains extension deployment code', () => {
126
128
  const bmadSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'bmad.js'), 'utf-8');
127
129
  assert.ok(bmadSrc.includes("'bmad-extension'"), 'bmad.js must reference bmad-extension source dir');
128
130
  assert.ok(bmadSrc.includes("'extensions'"), 'bmad.js must reference extensions target dir');
129
131
  assert.ok(bmadSrc.includes("'ma-agents-skills'"), 'bmad.js must reference ma-agents-skills');
130
132
  });
131
133
 
132
- test('4.2: extension deployment uses path.join for all paths', () => {
134
+ test('3.2: bmad.js contains customize deployment code', () => {
135
+ const bmadSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'bmad.js'), 'utf-8');
136
+ assert.ok(bmadSrc.includes("'bmad-customize'"), 'bmad.js must reference bmad-customize source dir');
137
+ assert.ok(bmadSrc.includes('Applied built-in customization'), 'bmad.js must log built-in customization deployment');
138
+ });
139
+
140
+ test('3.3: extension deployment uses path.join for all paths', () => {
133
141
  const bmadSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'bmad.js'), 'utf-8');
134
142
  assert.ok(bmadSrc.includes("path.join(__dirname, 'bmad-extension')"),
135
143
  'extensionSource must use path.join');
@@ -137,37 +145,53 @@ test('4.2: extension deployment uses path.join for all paths', () => {
137
145
  'extensionTarget must use path.join');
138
146
  });
139
147
 
140
- test('4.3: extension deployment is AFTER recompile and BEFORE workflows', () => {
141
- // Uses STAGE: markers in bmad.js comments — these are test-coupled anchors (see M2 review)
148
+ test('3.4: customize deployment uses path.join for source', () => {
149
+ const bmadSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'bmad.js'), 'utf-8');
150
+ assert.ok(bmadSrc.includes("path.join(__dirname, 'bmad-customize')"),
151
+ 'customizeSource must use path.join');
152
+ });
153
+
154
+ test('3.5: deployment order is RECOMPILE > EXTENSION > CUSTOMIZE > WORKFLOWS', () => {
142
155
  const bmadSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'bmad.js'), 'utf-8');
143
156
  const recompileIdx = bmadSrc.indexOf('STAGE:RECOMPILE');
144
157
  const extensionIdx = bmadSrc.indexOf('STAGE:EXTENSION');
158
+ const customizeIdx = bmadSrc.indexOf('STAGE:CUSTOMIZE');
145
159
  const workflowIdx = bmadSrc.indexOf('STAGE:WORKFLOWS');
146
160
 
147
161
  assert.ok(recompileIdx > 0, 'STAGE:RECOMPILE marker must exist');
148
162
  assert.ok(extensionIdx > 0, 'STAGE:EXTENSION marker must exist');
163
+ assert.ok(customizeIdx > 0, 'STAGE:CUSTOMIZE marker must exist');
149
164
  assert.ok(workflowIdx > 0, 'STAGE:WORKFLOWS marker must exist');
150
165
  assert.ok(extensionIdx > recompileIdx, 'extension deployment must come after recompile');
151
- assert.ok(extensionIdx < workflowIdx, 'extension deployment must come before workflows');
166
+ assert.ok(customizeIdx > extensionIdx, 'customize deployment must come after extension');
167
+ assert.ok(customizeIdx < workflowIdx, 'customize deployment must come before workflows');
152
168
  });
153
169
 
154
- test('4.4: extension deployment logs with chalk.cyan', () => {
170
+ test('3.6: extension deployment logs with chalk.cyan', () => {
155
171
  const bmadSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'bmad.js'), 'utf-8');
156
172
  assert.ok(bmadSrc.includes("chalk.cyan(' + Deployed BMAD extension module: ma-agents-skills')"),
157
173
  'must log deployment with chalk.cyan');
158
174
  });
159
175
 
160
- test('4.5: existing bmad-customizations files are preserved (backward compatibility)', () => {
176
+ test('3.7: bmad-customizations retains platform and generic files (agent files removed in Epic 15)', () => {
161
177
  const customDir = path.join(__dirname, '..', 'lib', 'bmad-customizations');
162
- for (const agent of customAgents) {
163
- const filePath = path.join(customDir, `${agent.id}.customize.yaml`);
164
- assert.ok(fs.existsSync(filePath), `${agent.id}.customize.yaml must still exist in bmad-customizations/`);
178
+ // Platform-specific and generic files must still exist
179
+ const expectedFiles = ['claude-code', 'cursor', 'cline', 'gemini', 'generic', 'antigravity'];
180
+ for (const name of expectedFiles) {
181
+ const filePath = path.join(customDir, `${name}.customize.yaml`);
182
+ assert.ok(fs.existsSync(filePath), `${name}.customize.yaml must still exist in bmad-customizations/`);
183
+ }
184
+ // Custom agent files (bmm-sre, bmm-devops, etc.) were removed — now in skill folders
185
+ const removedAgents = ['bmm-sre', 'bmm-devops', 'bmm-cyber', 'bmm-mil498'];
186
+ for (const id of removedAgents) {
187
+ const filePath = path.join(customDir, `${id}.customize.yaml`);
188
+ assert.ok(!fs.existsSync(filePath), `${id}.customize.yaml should NOT exist in bmad-customizations/ (moved to skill folders)`);
165
189
  }
166
190
  });
167
191
 
168
- // ─── M3: Integration test — actual fs.copy deployment ───────────────────────
192
+ // ─── Integration tests — actual fs.copy deployment ───────────────────────
169
193
 
170
- console.log('\nIntegration — applyCustomizations() deploys extension');
194
+ console.log('\nIntegration — applyCustomizations() deployment');
171
195
 
172
196
  const fsExtra = require('fs-extra');
173
197
  const os = require('os');
@@ -206,12 +230,34 @@ async function runIntegrationTests() {
206
230
  const content = fsExtra.readFileSync(deployedModule, 'utf-8');
207
231
  assert.ok(content.includes('extends-module: bmm'),
208
232
  'deployed module.yaml must contain extends-module: bmm');
233
+ });
234
+
235
+ await asyncTest('INT-2: applyCustomizations deploys built-in customizations to _bmad/_config/agents/', async () => {
236
+ // Verify built-in customizations were deployed to config dir
237
+ const configAgentsDir = path.join(tmpDir, '_bmad', '_config', 'agents');
238
+
239
+ for (const agentId of builtinAgents) {
240
+ const deployedFile = path.join(configAgentsDir, `${agentId}.customize.yaml`);
241
+ assert.ok(fsExtra.existsSync(deployedFile),
242
+ `${agentId}.customize.yaml must be deployed to _bmad/_config/agents/`);
243
+
244
+ const content = fsExtra.readFileSync(deployedFile, 'utf-8');
245
+ assert.ok(content.includes('critical_actions:'),
246
+ `deployed ${agentId}.customize.yaml must contain critical_actions`);
247
+ assert.ok(content.includes('skills/MANIFEST.yaml'),
248
+ `deployed ${agentId}.customize.yaml must reference skills/MANIFEST.yaml`);
249
+ }
250
+ });
209
251
 
210
- // Verify agent files deployed
211
- const deployedAgents = path.join(tmpDir, '_bmad', 'extensions', 'ma-agents-skills', 'agents');
212
- assert.ok(fsExtra.existsSync(deployedAgents), 'agents/ directory must be deployed');
213
- const files = fsExtra.readdirSync(deployedAgents).filter(f => f.endsWith('.customize.yaml'));
214
- assert.strictEqual(files.length, 11, `Expected 11 deployed agent files, found ${files.length}`);
252
+ await asyncTest('INT-3: deployed customizations use array syntax not numbered keys', async () => {
253
+ const configAgentsDir = path.join(tmpDir, '_bmad', '_config', 'agents');
254
+
255
+ for (const agentId of builtinAgents) {
256
+ const deployedFile = path.join(configAgentsDir, `${agentId}.customize.yaml`);
257
+ const content = fsExtra.readFileSync(deployedFile, 'utf-8');
258
+ assert.ok(content.includes(' - "'), `deployed ${agentId} must use array syntax`);
259
+ assert.ok(!content.match(/^\s+\d+:/m), `deployed ${agentId} must NOT use numbered keys`);
260
+ }
215
261
  });
216
262
 
217
263
  // Cleanup
@@ -0,0 +1,313 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tests for Story 15.1: Bump bmad-method to 6.2.1 and Update Cache
4
+ *
5
+ * Task 1: Verify package.json dependency updated
6
+ * Task 2: Verify build:bmad-cache compatibility
7
+ * Task 3: Verify bmad.js CLI compatibility
8
+ * Task 4: Verify prePopulateBmadCache compatibility
9
+ */
10
+ 'use strict';
11
+
12
+ const assert = require('assert');
13
+ const fs = require('fs-extra');
14
+ const path = require('path');
15
+
16
+ let passed = 0;
17
+ let failed = 0;
18
+ const errors = [];
19
+
20
+ function test(name, fn) {
21
+ try {
22
+ fn();
23
+ console.log(` \u2713 ${name}`);
24
+ passed++;
25
+ } catch (err) {
26
+ console.error(` \u2717 ${name}: ${err.message}`);
27
+ failed++;
28
+ errors.push({ name, err });
29
+ }
30
+ }
31
+
32
+ const projectRoot = path.resolve(__dirname, '..');
33
+
34
+ console.log('\nStory 15.1: Bump bmad-method to 6.2.1 and Update Cache\n');
35
+
36
+ // ---- Task 1: package.json dependency ----
37
+
38
+ console.log('Task 1: package.json dependency');
39
+
40
+ test('package.json pins bmad-method at 6.2.1', () => {
41
+ const pkg = JSON.parse(fs.readFileSync(path.join(projectRoot, 'package.json'), 'utf8'));
42
+ assert.strictEqual(pkg.dependencies['bmad-method'], '6.2.1');
43
+ });
44
+
45
+ test('installed bmad-method is version 6.2.1', () => {
46
+ const bmadPkg = JSON.parse(
47
+ fs.readFileSync(path.join(projectRoot, 'node_modules', 'bmad-method', 'package.json'), 'utf8')
48
+ );
49
+ assert.strictEqual(bmadPkg.version, '6.2.1');
50
+ });
51
+
52
+ test('require.resolve finds bmad-npx-wrapper.js', () => {
53
+ const resolved = require.resolve('bmad-method/tools/bmad-npx-wrapper.js');
54
+ assert.ok(resolved.includes('bmad-npx-wrapper.js'), `Unexpected path: ${resolved}`);
55
+ assert.ok(fs.existsSync(resolved), `File does not exist: ${resolved}`);
56
+ });
57
+
58
+ // ---- Task 2: build:bmad-cache compatibility ----
59
+
60
+ console.log('\nTask 2: build:bmad-cache compatibility');
61
+
62
+ test('external-official-modules.yaml exists in 6.2.1', () => {
63
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
64
+ const yamlPath = path.join(bmadDir, 'tools', 'cli', 'external-official-modules.yaml');
65
+ assert.ok(fs.existsSync(yamlPath), `YAML not found at ${yamlPath}`);
66
+ });
67
+
68
+ test('YAML parser extracts 5 modules from 6.2.1', () => {
69
+ // Import the parser from build-bmad-cache.js by reading and evaluating it
70
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
71
+ const yamlPath = path.join(bmadDir, 'tools', 'cli', 'external-official-modules.yaml');
72
+ const content = fs.readFileSync(yamlPath, 'utf8');
73
+
74
+ // Replicate the parser logic
75
+ const modules = [];
76
+ const lines = content.split('\n');
77
+ let inModules = false;
78
+ let currentModule = null;
79
+
80
+ for (const line of lines) {
81
+ const trimmed = line.trimEnd();
82
+ if (trimmed === '' || trimmed.match(/^\s*#/)) continue;
83
+ if (trimmed === 'modules:') { inModules = true; continue; }
84
+ if (!inModules) continue;
85
+
86
+ const moduleKeyMatch = trimmed.match(/^\s{1,4}([a-zA-Z0-9_-]+):\s*$/);
87
+ if (moduleKeyMatch) {
88
+ if (currentModule) modules.push(currentModule);
89
+ currentModule = { key: moduleKeyMatch[1] };
90
+ continue;
91
+ }
92
+
93
+ if (currentModule) {
94
+ const propMatch = trimmed.match(/^\s{2,8}([a-zA-Z0-9_-]+):\s+"([^"]*)"$/);
95
+ if (propMatch) {
96
+ currentModule[propMatch[1]] = propMatch[2];
97
+ } else {
98
+ const unquotedMatch = trimmed.match(/^\s{2,8}([a-zA-Z0-9_-]+):\s+(.+)$/);
99
+ if (unquotedMatch) {
100
+ currentModule[unquotedMatch[1]] = unquotedMatch[2].trim();
101
+ }
102
+ }
103
+ }
104
+ }
105
+ if (currentModule) modules.push(currentModule);
106
+
107
+ const parsed = modules.filter(m => m.code && m.url).map(m => ({
108
+ code: m.code,
109
+ url: m.url,
110
+ name: m.name || m.key,
111
+ branch: m.branch || 'main'
112
+ }));
113
+
114
+ assert.strictEqual(parsed.length, 5, `Expected 5 modules, got ${parsed.length}`);
115
+ const codes = parsed.map(m => m.code).sort();
116
+ assert.deepStrictEqual(codes, ['bmb', 'cis', 'gds', 'tea', 'wds']);
117
+ });
118
+
119
+ test('wds module is present in parsed YAML', () => {
120
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
121
+ const yamlPath = path.join(bmadDir, 'tools', 'cli', 'external-official-modules.yaml');
122
+ const content = fs.readFileSync(yamlPath, 'utf8');
123
+ assert.ok(content.includes('code: wds'), 'wds module code not found in YAML');
124
+ assert.ok(content.includes('bmad-method-wds-expansion'), 'wds repo URL not found in YAML');
125
+ });
126
+
127
+ test('cache-manifest.json exists and lists 5 modules', () => {
128
+ const manifestPath = path.join(projectRoot, 'lib', 'bmad-cache', 'cache-manifest.json');
129
+ assert.ok(fs.existsSync(manifestPath), `Manifest not found at ${manifestPath}`);
130
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
131
+ const moduleCodes = Object.keys(manifest.modules);
132
+ assert.strictEqual(moduleCodes.length, 5, `Expected 5 modules in manifest, got ${moduleCodes.length}`);
133
+ assert.deepStrictEqual(moduleCodes.sort(), ['bmb', 'cis', 'gds', 'tea', 'wds']);
134
+ });
135
+
136
+ test('cache-manifest.json records bmadMethodVersion as 6.2.1', () => {
137
+ const manifestPath = path.join(projectRoot, 'lib', 'bmad-cache', 'cache-manifest.json');
138
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
139
+ assert.strictEqual(manifest.bmadMethodVersion, '6.2.1');
140
+ });
141
+
142
+ test('each cached module has a commit SHA in manifest', () => {
143
+ const manifestPath = path.join(projectRoot, 'lib', 'bmad-cache', 'cache-manifest.json');
144
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
145
+ for (const [code, info] of Object.entries(manifest.modules)) {
146
+ assert.ok(info.commitSha, `Module ${code} missing commitSha`);
147
+ assert.ok(info.commitSha.match(/^[a-f0-9]+$/), `Module ${code} has invalid SHA: ${info.commitSha}`);
148
+ }
149
+ });
150
+
151
+ test('lib/bmad-cache/wds/ directory exists with content', () => {
152
+ const wdsDir = path.join(projectRoot, 'lib', 'bmad-cache', 'wds');
153
+ assert.ok(fs.existsSync(wdsDir), `wds cache dir not found at ${wdsDir}`);
154
+ const entries = fs.readdirSync(wdsDir);
155
+ assert.ok(entries.length > 0, 'wds cache directory is empty');
156
+ assert.ok(entries.includes('_git_preserved'), 'wds missing _git_preserved directory');
157
+ });
158
+
159
+ test('all 5 cached modules have _git_preserved directory', () => {
160
+ const cacheDir = path.join(projectRoot, 'lib', 'bmad-cache');
161
+ const expected = ['bmb', 'cis', 'gds', 'tea', 'wds'];
162
+ for (const mod of expected) {
163
+ const preserved = path.join(cacheDir, mod, '_git_preserved');
164
+ assert.ok(fs.existsSync(preserved), `${mod} missing _git_preserved at ${preserved}`);
165
+ }
166
+ });
167
+
168
+ // ---- Task 3: bmad.js CLI compatibility ----
169
+
170
+ console.log('\nTask 3: bmad.js CLI compatibility');
171
+
172
+ const bmad = require('../lib/bmad');
173
+
174
+ test('getBmadCommand resolves bmad-npx-wrapper.js from 6.2.1', () => {
175
+ const result = bmad.buildBmadArgs({
176
+ projectRoot: '/test',
177
+ modules: ['bmm'],
178
+ tools: [],
179
+ action: 'install',
180
+ });
181
+ assert.ok(result.includes('bmad-npx-wrapper.js'), `Expected wrapper path in: ${result}`);
182
+ assert.ok(result.startsWith('node "'), `Expected node command prefix: ${result}`);
183
+ });
184
+
185
+ test('buildBmadArgs generates valid --action update flag', () => {
186
+ const result = bmad.buildBmadArgs({
187
+ projectRoot: '/test',
188
+ modules: ['bmm', 'bmb'],
189
+ tools: ['claude-code'],
190
+ action: 'update',
191
+ });
192
+ assert.ok(result.includes('--action update'), `Expected --action update in: ${result}`);
193
+ });
194
+
195
+ test('6.2.1 CLI accepts --directory flag', () => {
196
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
197
+ const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
198
+ const content = fs.readFileSync(installCmd, 'utf8');
199
+ assert.ok(content.includes('--directory'), '6.2.1 install.js missing --directory flag');
200
+ });
201
+
202
+ test('6.2.1 CLI accepts --modules flag', () => {
203
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
204
+ const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
205
+ const content = fs.readFileSync(installCmd, 'utf8');
206
+ assert.ok(content.includes('--modules'), '6.2.1 install.js missing --modules flag');
207
+ });
208
+
209
+ test('6.2.1 CLI accepts --tools flag', () => {
210
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
211
+ const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
212
+ const content = fs.readFileSync(installCmd, 'utf8');
213
+ assert.ok(content.includes('--tools'), '6.2.1 install.js missing --tools flag');
214
+ });
215
+
216
+ test('6.2.1 CLI accepts --custom-content flag', () => {
217
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
218
+ const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
219
+ const content = fs.readFileSync(installCmd, 'utf8');
220
+ assert.ok(content.includes('--custom-content'), '6.2.1 install.js missing --custom-content flag');
221
+ });
222
+
223
+ test('6.2.1 CLI accepts --action flag', () => {
224
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
225
+ const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
226
+ const content = fs.readFileSync(installCmd, 'utf8');
227
+ assert.ok(content.includes('--action'), '6.2.1 install.js missing --action flag');
228
+ });
229
+
230
+ test('6.2.1 CLI accepts --yes flag', () => {
231
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
232
+ const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
233
+ const content = fs.readFileSync(installCmd, 'utf8');
234
+ assert.ok(content.includes('--yes'), '6.2.1 install.js missing --yes flag');
235
+ });
236
+
237
+ test('6.2.1 CLI accepts --user-name flag', () => {
238
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
239
+ const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
240
+ const content = fs.readFileSync(installCmd, 'utf8');
241
+ assert.ok(content.includes('--user-name'), '6.2.1 install.js missing --user-name flag');
242
+ });
243
+
244
+ test('6.2.1 CLI accepts --communication-language flag', () => {
245
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
246
+ const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
247
+ const content = fs.readFileSync(installCmd, 'utf8');
248
+ assert.ok(content.includes('--communication-language'), '6.2.1 install.js missing --communication-language flag');
249
+ });
250
+
251
+ test('6.2.1 CLI accepts --document-output-language flag', () => {
252
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
253
+ const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
254
+ const content = fs.readFileSync(installCmd, 'utf8');
255
+ assert.ok(content.includes('--document-output-language'), '6.2.1 install.js missing --document-output-language flag');
256
+ });
257
+
258
+ test('6.2.1 CLI accepts --output-folder flag', () => {
259
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
260
+ const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
261
+ const content = fs.readFileSync(installCmd, 'utf8');
262
+ assert.ok(content.includes('--output-folder'), '6.2.1 install.js missing --output-folder flag');
263
+ });
264
+
265
+ test('module.yaml custom-content format is accepted by 6.2.1', () => {
266
+ const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
267
+ const handlerPath = path.join(bmadDir, 'tools', 'cli', 'installers', 'lib', 'custom', 'handler.js');
268
+ const content = fs.readFileSync(handlerPath, 'utf8');
269
+ // 6.2.1 still looks for module.yaml files
270
+ assert.ok(content.includes('module.yaml'), '6.2.1 handler.js no longer references module.yaml');
271
+ });
272
+
273
+ // ---- Task 4: prePopulateBmadCache compatibility ----
274
+
275
+ console.log('\nTask 4: prePopulateBmadCache compatibility');
276
+
277
+ test('prePopulateBmadCache is exported', () => {
278
+ assert.strictEqual(typeof bmad.prePopulateBmadCache, 'function');
279
+ });
280
+
281
+ test('prePopulateBmadCache source handles all cache modules dynamically', () => {
282
+ // The function iterates fs.readdir(cacheSource) and handles any number of modules
283
+ // No hardcoded module list = automatically handles 5 modules including wds
284
+ const bmadSource = fs.readFileSync(path.join(projectRoot, 'lib', 'bmad.js'), 'utf8');
285
+ assert.ok(bmadSource.includes('fs.readdir(cacheSource)'), 'prePopulateBmadCache should iterate cache directory');
286
+ assert.ok(!bmadSource.includes("'bmb'") || !bmadSource.includes("['bmb',"), 'prePopulateBmadCache should not hardcode module list');
287
+ });
288
+
289
+ test('restoreGitDir logic exists in bmad.js', () => {
290
+ const bmadSource = fs.readFileSync(path.join(projectRoot, 'lib', 'bmad.js'), 'utf8');
291
+ assert.ok(bmadSource.includes('restoreGitDir'), 'Missing restoreGitDir function');
292
+ assert.ok(bmadSource.includes('_git_preserved'), 'Missing _git_preserved reference');
293
+ assert.ok(bmadSource.includes('file://'), 'Missing file:// URL for offline fetch');
294
+ });
295
+
296
+ test('wds cache directory has src/ with module content', () => {
297
+ const wdsSrc = path.join(projectRoot, 'lib', 'bmad-cache', 'wds', 'src');
298
+ assert.ok(fs.existsSync(wdsSrc), `wds/src/ not found at ${wdsSrc}`);
299
+ const entries = fs.readdirSync(wdsSrc);
300
+ assert.ok(entries.length > 0, 'wds/src/ is empty');
301
+ });
302
+
303
+ // ---- Summary ----
304
+
305
+ console.log(`\n${passed} passed, ${failed} failed`);
306
+ if (errors.length > 0) {
307
+ console.log('\nFailures:');
308
+ errors.forEach(({ name, err }) => {
309
+ console.log(` ${name}:`);
310
+ console.log(` ${err.message}`);
311
+ });
312
+ }
313
+ process.exit(failed > 0 ? 1 : 0);