bmad-method 6.0.0-alpha.5 → 6.0.0-alpha.7

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 (449) hide show
  1. package/.claude/settings.local.json +12 -6
  2. package/.github/workflows/{lint.yaml → quality.yaml} +19 -2
  3. package/.husky/pre-commit +4 -0
  4. package/CONTRIBUTING.md +1 -13
  5. package/README.md +59 -1
  6. package/bmad/_cfg/agent-manifest.csv +1 -13
  7. package/bmad/_cfg/files-manifest.csv +10 -256
  8. package/bmad/_cfg/ides/claude-code.yaml +2 -2
  9. package/bmad/_cfg/manifest.yaml +4 -5
  10. package/bmad/_cfg/task-manifest.csv +4 -1
  11. package/bmad/_cfg/tool-manifest.csv +1 -0
  12. package/bmad/_cfg/workflow-manifest.csv +2 -35
  13. package/bmad/bmb/config.yaml +2 -2
  14. package/bmad/bmb/workflows/audit-workflow/instructions.md +1 -1
  15. package/bmad/bmb/workflows/create-agent/instructions.md +25 -9
  16. package/bmad/bmb/workflows/create-module/module-structure.md +34 -0
  17. package/bmad/core/config.yaml +2 -2
  18. package/docs/installers-bundlers/installers-modules-platforms-reference.md +61 -0
  19. package/package.json +5 -3
  20. package/src/core/tasks/adv-elicit.xml +1 -1
  21. package/src/modules/bmb/workflows/create-agent/instructions.md +25 -9
  22. package/src/modules/bmb/workflows/create-module/module-structure.md +34 -0
  23. package/src/modules/bmgd/README.md +208 -0
  24. package/src/modules/bmgd/_module-installer/install-config.yaml +66 -0
  25. package/src/modules/{bmm → bmgd}/agents/game-architect.agent.yaml +5 -12
  26. package/src/modules/{bmm → bmgd}/agents/game-designer.agent.yaml +10 -22
  27. package/src/modules/{bmm → bmgd}/agents/game-dev.agent.yaml +9 -10
  28. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +70 -0
  29. package/{bmad/bmm → src/modules/bmgd}/teams/team-gamedev.yaml +3 -1
  30. package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/workflow.yaml +7 -7
  31. package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/workflow.yaml +9 -9
  32. package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +81 -0
  33. package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/narrative/workflow.yaml +6 -6
  34. package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/instructions.md +7 -18
  35. package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/workflow.yaml +16 -16
  36. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/code-review/workflow.yaml +3 -1
  37. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/correct-course/workflow.yaml +3 -1
  38. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/create-story/workflow.yaml +3 -1
  39. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/dev-story/workflow.yaml +3 -1
  40. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/epic-tech-context/workflow.yaml +3 -1
  41. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/retrospective/workflow.yaml +3 -1
  42. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/sprint-planning/workflow.yaml +3 -1
  43. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-context/workflow.yaml +3 -1
  44. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-done/workflow.yaml +3 -1
  45. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-ready/workflow.yaml +3 -1
  46. package/src/modules/bmm/_module-installer/install-config.yaml +5 -0
  47. package/src/modules/bmm/docs/README.md +18 -18
  48. package/src/modules/bmm/docs/agents-guide.md +1 -2
  49. package/src/modules/bmm/docs/brownfield-guide.md +10 -15
  50. package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
  51. package/src/modules/bmm/docs/faq.md +10 -12
  52. package/src/modules/bmm/docs/glossary.md +8 -9
  53. package/src/modules/bmm/docs/quick-spec-flow.md +7 -7
  54. package/src/modules/bmm/docs/quick-start.md +9 -9
  55. package/src/modules/bmm/docs/scale-adaptive-system.md +6 -6
  56. package/src/modules/bmm/docs/test-architecture.md +394 -0
  57. package/src/modules/bmm/docs/workflows-analysis.md +229 -529
  58. package/src/modules/bmm/docs/workflows-implementation.md +196 -1670
  59. package/src/modules/bmm/docs/workflows-planning.md +364 -849
  60. package/src/modules/bmm/docs/workflows-solutioning.md +268 -493
  61. package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +65 -32
  62. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +4 -0
  63. package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +1 -1
  64. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +34 -5
  65. package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +1 -1
  66. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +8 -0
  67. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +6 -0
  68. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +47 -0
  69. package/src/modules/bmm/workflows/techdoc/documentation-standards.md +24 -1
  70. package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +2 -2
  71. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +50 -0
  72. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +18 -11
  73. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +18 -11
  74. package/src/modules/bmm/workflows/workflow-status/paths/game-design.yaml +42 -65
  75. package/test/test-installation-components.js +214 -0
  76. package/tools/cli/bundlers/web-bundler.js +127 -8
  77. package/tools/cli/installers/lib/core/config-collector.js +39 -11
  78. package/tools/cli/installers/lib/core/ide-config-manager.js +3 -1
  79. package/tools/cli/installers/lib/core/installer.js +20 -9
  80. package/tools/cli/installers/lib/core/manifest-generator.js +3 -1
  81. package/tools/cli/installers/lib/core/manifest.js +6 -2
  82. package/tools/cli/installers/lib/ide/auggie.js +9 -20
  83. package/tools/cli/installers/lib/ide/claude-code.js +33 -3
  84. package/tools/cli/installers/lib/ide/cursor.js +17 -0
  85. package/tools/cli/installers/lib/modules/manager.js +134 -0
  86. package/tools/cli/lib/config.js +3 -1
  87. package/tools/cli/lib/ui.js +5 -5
  88. package/tools/cli/lib/yaml-format.js +2 -1
  89. package/tools/cli/lib/yaml-xml-builder.js +9 -1
  90. package/tools/schema/agent.js +3 -0
  91. package/v6-open-items.md +3 -9
  92. package/web-bundles/bmm/agents/analyst.xml +5028 -0
  93. package/web-bundles/bmm/agents/architect.xml +2047 -0
  94. package/web-bundles/bmm/agents/dev.xml +68 -0
  95. package/web-bundles/bmm/agents/pm.xml +3808 -0
  96. package/web-bundles/bmm/agents/sm.xml +77 -0
  97. package/web-bundles/bmm/agents/tea.xml +66 -0
  98. package/web-bundles/bmm/agents/tech-writer.xml +84 -0
  99. package/web-bundles/bmm/agents/ux-designer.xml +2018 -0
  100. package/web-bundles/bmm/teams/team-fullstack.xml +12039 -0
  101. package/.claude/commands/bmad/bmb/workflows/README.md +0 -67
  102. package/.claude/commands/bmad/bmm/agents/analyst.md +0 -67
  103. package/.claude/commands/bmad/bmm/agents/architect.md +0 -72
  104. package/.claude/commands/bmad/bmm/agents/dev.md +0 -69
  105. package/.claude/commands/bmad/bmm/agents/paige.md +0 -82
  106. package/.claude/commands/bmad/bmm/agents/pm.md +0 -76
  107. package/.claude/commands/bmad/bmm/agents/sm.md +0 -85
  108. package/.claude/commands/bmad/bmm/agents/tea.md +0 -72
  109. package/.claude/commands/bmad/bmm/agents/tech-writer.md +0 -82
  110. package/.claude/commands/bmad/bmm/agents/ux-designer.md +0 -71
  111. package/.claude/commands/bmad/bmm/workflows/README.md +0 -132
  112. package/.claude/commands/bmad/bmm/workflows/architecture.md +0 -15
  113. package/.claude/commands/bmad/bmm/workflows/brainstorm-project.md +0 -15
  114. package/.claude/commands/bmad/bmm/workflows/code-review.md +0 -15
  115. package/.claude/commands/bmad/bmm/workflows/correct-course.md +0 -15
  116. package/.claude/commands/bmad/bmm/workflows/create-epics-and-stories.md +0 -15
  117. package/.claude/commands/bmad/bmm/workflows/create-story.md +0 -15
  118. package/.claude/commands/bmad/bmm/workflows/create-ux-design.md +0 -15
  119. package/.claude/commands/bmad/bmm/workflows/dev-story.md +0 -15
  120. package/.claude/commands/bmad/bmm/workflows/document-project.md +0 -15
  121. package/.claude/commands/bmad/bmm/workflows/epic-tech-context.md +0 -15
  122. package/.claude/commands/bmad/bmm/workflows/narrative.md +0 -15
  123. package/.claude/commands/bmad/bmm/workflows/prd.md +0 -15
  124. package/.claude/commands/bmad/bmm/workflows/product-brief.md +0 -15
  125. package/.claude/commands/bmad/bmm/workflows/research.md +0 -15
  126. package/.claude/commands/bmad/bmm/workflows/retrospective.md +0 -15
  127. package/.claude/commands/bmad/bmm/workflows/solutioning-gate-check.md +0 -15
  128. package/.claude/commands/bmad/bmm/workflows/sprint-planning.md +0 -15
  129. package/.claude/commands/bmad/bmm/workflows/story-context.md +0 -15
  130. package/.claude/commands/bmad/bmm/workflows/story-done.md +0 -15
  131. package/.claude/commands/bmad/bmm/workflows/story-ready.md +0 -15
  132. package/.claude/commands/bmad/bmm/workflows/tech-spec-sm.md +0 -15
  133. package/.claude/commands/bmad/bmm/workflows/tech-spec.md +0 -15
  134. package/.claude/commands/bmad/bmm/workflows/workflow-init.md +0 -15
  135. package/.claude/commands/bmad/bmm/workflows/workflow-status.md +0 -15
  136. package/.claude/commands/bmad/cis/agents/README.md +0 -104
  137. package/.claude/commands/bmad/cis/agents/brainstorming-coach.md +0 -62
  138. package/.claude/commands/bmad/cis/agents/creative-problem-solver.md +0 -62
  139. package/.claude/commands/bmad/cis/agents/design-thinking-coach.md +0 -62
  140. package/.claude/commands/bmad/cis/agents/innovation-strategist.md +0 -62
  141. package/.claude/commands/bmad/cis/agents/storyteller.md +0 -59
  142. package/.claude/commands/bmad/cis/workflows/README.md +0 -37
  143. package/.claude/commands/bmad/cis/workflows/design-thinking.md +0 -15
  144. package/.claude/commands/bmad/cis/workflows/innovation-strategy.md +0 -15
  145. package/.claude/commands/bmad/cis/workflows/problem-solving.md +0 -15
  146. package/.claude/commands/bmad/cis/workflows/storytelling.md +0 -15
  147. package/.claude/commands/bmad/core/workflows/README.md +0 -37
  148. package/bmad/_cfg/agents/bmm-analyst.customize.yaml +0 -42
  149. package/bmad/_cfg/agents/bmm-architect.customize.yaml +0 -42
  150. package/bmad/_cfg/agents/bmm-dev.customize.yaml +0 -42
  151. package/bmad/_cfg/agents/bmm-paige.customize.yaml +0 -42
  152. package/bmad/_cfg/agents/bmm-pm.customize.yaml +0 -42
  153. package/bmad/_cfg/agents/bmm-sm.customize.yaml +0 -42
  154. package/bmad/_cfg/agents/bmm-tea.customize.yaml +0 -42
  155. package/bmad/_cfg/agents/bmm-tech-writer.customize.yaml +0 -42
  156. package/bmad/_cfg/agents/bmm-ux-designer.customize.yaml +0 -42
  157. package/bmad/_cfg/agents/cis-brainstorming-coach.customize.yaml +0 -42
  158. package/bmad/_cfg/agents/cis-creative-problem-solver.customize.yaml +0 -42
  159. package/bmad/_cfg/agents/cis-design-thinking-coach.customize.yaml +0 -42
  160. package/bmad/_cfg/agents/cis-innovation-strategist.customize.yaml +0 -42
  161. package/bmad/_cfg/agents/cis-storyteller.customize.yaml +0 -42
  162. package/bmad/bmb/agents/bmad-builder.md.bak +0 -70
  163. package/bmad/bmb/workflows/audit-workflow/workflow.yaml.bak +0 -23
  164. package/bmad/bmb/workflows/create-module/workflow.yaml.bak +0 -42
  165. package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml.bak +0 -39
  166. package/bmad/bmb/workflows/create-workflow/workflow.yaml.bak +0 -40
  167. package/bmad/bmb/workflows/edit-agent/workflow.yaml.bak +0 -33
  168. package/bmad/bmb/workflows/edit-module/workflow.yaml.bak +0 -34
  169. package/bmad/bmb/workflows/edit-workflow/workflow.yaml.bak +0 -27
  170. package/bmad/bmb/workflows/module-brief/workflow.yaml.bak +0 -29
  171. package/bmad/bmb/workflows/redoc/workflow.yaml.bak +0 -32
  172. package/bmad/bmm/README.md +0 -128
  173. package/bmad/bmm/README.md.bak +0 -169
  174. package/bmad/bmm/agents/analyst.md +0 -67
  175. package/bmad/bmm/agents/analyst.md.bak +0 -67
  176. package/bmad/bmm/agents/architect.md +0 -72
  177. package/bmad/bmm/agents/architect.md.bak +0 -73
  178. package/bmad/bmm/agents/dev.md +0 -69
  179. package/bmad/bmm/agents/dev.md.bak +0 -69
  180. package/bmad/bmm/agents/paige.md.bak +0 -82
  181. package/bmad/bmm/agents/pm.md +0 -76
  182. package/bmad/bmm/agents/pm.md.bak +0 -76
  183. package/bmad/bmm/agents/sm.md +0 -85
  184. package/bmad/bmm/agents/sm.md.bak +0 -85
  185. package/bmad/bmm/agents/tea.md +0 -72
  186. package/bmad/bmm/agents/tea.md.bak +0 -72
  187. package/bmad/bmm/agents/tech-writer.md +0 -82
  188. package/bmad/bmm/agents/ux-designer.md +0 -71
  189. package/bmad/bmm/agents/ux-designer.md.bak +0 -71
  190. package/bmad/bmm/config.yaml +0 -17
  191. package/bmad/bmm/docs/README.md +0 -235
  192. package/bmad/bmm/docs/agents-guide.md +0 -1057
  193. package/bmad/bmm/docs/brownfield-guide.md +0 -759
  194. package/bmad/bmm/docs/enterprise-agentic-development.md +0 -680
  195. package/bmad/bmm/docs/faq.md +0 -589
  196. package/bmad/bmm/docs/glossary.md +0 -321
  197. package/bmad/bmm/docs/party-mode.md +0 -224
  198. package/bmad/bmm/docs/quick-spec-flow.md +0 -652
  199. package/bmad/bmm/docs/quick-start.md +0 -366
  200. package/bmad/bmm/docs/scale-adaptive-system.md +0 -599
  201. package/bmad/bmm/docs/troubleshooting.md +0 -680
  202. package/bmad/bmm/docs/workflow-architecture-reference.md +0 -371
  203. package/bmad/bmm/docs/workflow-document-project-reference.md +0 -487
  204. package/bmad/bmm/docs/workflows-analysis.md +0 -670
  205. package/bmad/bmm/docs/workflows-implementation.md +0 -1758
  206. package/bmad/bmm/docs/workflows-planning.md +0 -1086
  207. package/bmad/bmm/docs/workflows-solutioning.md +0 -726
  208. package/bmad/bmm/tasks/daily-standup.xml +0 -85
  209. package/bmad/bmm/teams/team-fullstack.yaml +0 -11
  210. package/bmad/bmm/testarch/knowledge/ci-burn-in.md +0 -675
  211. package/bmad/bmm/testarch/knowledge/component-tdd.md +0 -486
  212. package/bmad/bmm/testarch/knowledge/contract-testing.md +0 -957
  213. package/bmad/bmm/testarch/knowledge/data-factories.md +0 -500
  214. package/bmad/bmm/testarch/knowledge/email-auth.md +0 -721
  215. package/bmad/bmm/testarch/knowledge/error-handling.md +0 -725
  216. package/bmad/bmm/testarch/knowledge/feature-flags.md +0 -750
  217. package/bmad/bmm/testarch/knowledge/fixture-architecture.md +0 -401
  218. package/bmad/bmm/testarch/knowledge/network-first.md +0 -486
  219. package/bmad/bmm/testarch/knowledge/nfr-criteria.md +0 -670
  220. package/bmad/bmm/testarch/knowledge/playwright-config.md +0 -730
  221. package/bmad/bmm/testarch/knowledge/probability-impact.md +0 -601
  222. package/bmad/bmm/testarch/knowledge/risk-governance.md +0 -615
  223. package/bmad/bmm/testarch/knowledge/selective-testing.md +0 -732
  224. package/bmad/bmm/testarch/knowledge/selector-resilience.md +0 -527
  225. package/bmad/bmm/testarch/knowledge/test-healing-patterns.md +0 -644
  226. package/bmad/bmm/testarch/knowledge/test-levels-framework.md +0 -473
  227. package/bmad/bmm/testarch/knowledge/test-priorities-matrix.md +0 -373
  228. package/bmad/bmm/testarch/knowledge/test-quality.md +0 -664
  229. package/bmad/bmm/testarch/knowledge/timing-debugging.md +0 -372
  230. package/bmad/bmm/testarch/knowledge/visual-debugging.md +0 -524
  231. package/bmad/bmm/testarch/tea-index.csv +0 -22
  232. package/bmad/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -110
  233. package/bmad/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
  234. package/bmad/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -26
  235. package/bmad/bmm/workflows/1-analysis/domain-research/instructions.md +0 -423
  236. package/bmad/bmm/workflows/1-analysis/domain-research/template.md +0 -180
  237. package/bmad/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -36
  238. package/bmad/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
  239. package/bmad/bmm/workflows/1-analysis/product-brief/instructions.md +0 -524
  240. package/bmad/bmm/workflows/1-analysis/product-brief/template.md +0 -181
  241. package/bmad/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -45
  242. package/bmad/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
  243. package/bmad/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
  244. package/bmad/bmm/workflows/1-analysis/research/checklist.md +0 -299
  245. package/bmad/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
  246. package/bmad/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -439
  247. package/bmad/bmm/workflows/1-analysis/research/instructions-market.md +0 -679
  248. package/bmad/bmm/workflows/1-analysis/research/instructions-router.md +0 -133
  249. package/bmad/bmm/workflows/1-analysis/research/instructions-technical.md +0 -538
  250. package/bmad/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
  251. package/bmad/bmm/workflows/1-analysis/research/template-market.md +0 -347
  252. package/bmad/bmm/workflows/1-analysis/research/template-technical.md +0 -245
  253. package/bmad/bmm/workflows/1-analysis/research/workflow.yaml +0 -44
  254. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
  255. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1319
  256. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +0 -145
  257. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -64
  258. package/bmad/bmm/workflows/2-plan-workflows/narrative/workflow.yaml +0 -29
  259. package/bmad/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -349
  260. package/bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/epics-template.md +0 -63
  261. package/bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +0 -395
  262. package/bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +0 -33
  263. package/bmad/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +0 -13
  264. package/bmad/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -423
  265. package/bmad/bmm/workflows/2-plan-workflows/prd/prd-template.md +0 -237
  266. package/bmad/bmm/workflows/2-plan-workflows/prd/project-types.csv +0 -11
  267. package/bmad/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -46
  268. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -214
  269. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -58
  270. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +0 -200
  271. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +0 -451
  272. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -1133
  273. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
  274. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -87
  275. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -60
  276. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml.bak +0 -60
  277. package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +0 -175
  278. package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +0 -322
  279. package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +0 -146
  280. package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/validation-criteria.yaml +0 -189
  281. package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +0 -64
  282. package/bmad/bmm/workflows/document-project/checklist.md +0 -245
  283. package/bmad/bmm/workflows/document-project/documentation-requirements.csv +0 -12
  284. package/bmad/bmm/workflows/document-project/instructions.md +0 -222
  285. package/bmad/bmm/workflows/document-project/templates/deep-dive-template.md +0 -345
  286. package/bmad/bmm/workflows/document-project/templates/index-template.md +0 -169
  287. package/bmad/bmm/workflows/document-project/templates/project-overview-template.md +0 -103
  288. package/bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +0 -160
  289. package/bmad/bmm/workflows/document-project/templates/source-tree-template.md +0 -135
  290. package/bmad/bmm/workflows/document-project/workflow.yaml +0 -34
  291. package/bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +0 -298
  292. package/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  293. package/bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +0 -1106
  294. package/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  295. package/bmad/bmm/workflows/techdoc/documentation-standards.md +0 -239
  296. package/bmad/bmm/workflows/techdoc/documentation-standards.md.bak +0 -238
  297. package/bmad/bmm/workflows/testarch/atdd/atdd-checklist-template.md +0 -363
  298. package/bmad/bmm/workflows/testarch/atdd/checklist.md +0 -373
  299. package/bmad/bmm/workflows/testarch/atdd/instructions.md +0 -785
  300. package/bmad/bmm/workflows/testarch/atdd/workflow.yaml +0 -52
  301. package/bmad/bmm/workflows/testarch/automate/checklist.md +0 -580
  302. package/bmad/bmm/workflows/testarch/automate/instructions.md +0 -1303
  303. package/bmad/bmm/workflows/testarch/automate/workflow.yaml +0 -61
  304. package/bmad/bmm/workflows/testarch/ci/checklist.md +0 -246
  305. package/bmad/bmm/workflows/testarch/ci/github-actions-template.yaml +0 -165
  306. package/bmad/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +0 -128
  307. package/bmad/bmm/workflows/testarch/ci/instructions.md +0 -517
  308. package/bmad/bmm/workflows/testarch/ci/workflow.yaml +0 -53
  309. package/bmad/bmm/workflows/testarch/framework/checklist.md +0 -321
  310. package/bmad/bmm/workflows/testarch/framework/instructions.md +0 -455
  311. package/bmad/bmm/workflows/testarch/framework/workflow.yaml +0 -53
  312. package/bmad/bmm/workflows/testarch/nfr-assess/checklist.md +0 -405
  313. package/bmad/bmm/workflows/testarch/nfr-assess/instructions.md +0 -722
  314. package/bmad/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +0 -443
  315. package/bmad/bmm/workflows/testarch/nfr-assess/workflow.yaml +0 -56
  316. package/bmad/bmm/workflows/testarch/test-design/checklist.md +0 -234
  317. package/bmad/bmm/workflows/testarch/test-design/instructions.md +0 -621
  318. package/bmad/bmm/workflows/testarch/test-design/test-design-template.md +0 -285
  319. package/bmad/bmm/workflows/testarch/test-design/workflow.yaml +0 -52
  320. package/bmad/bmm/workflows/testarch/test-review/checklist.md +0 -470
  321. package/bmad/bmm/workflows/testarch/test-review/instructions.md +0 -608
  322. package/bmad/bmm/workflows/testarch/test-review/test-review-template.md +0 -388
  323. package/bmad/bmm/workflows/testarch/test-review/workflow.yaml +0 -53
  324. package/bmad/bmm/workflows/testarch/trace/checklist.md +0 -654
  325. package/bmad/bmm/workflows/testarch/trace/instructions.md +0 -1045
  326. package/bmad/bmm/workflows/testarch/trace/trace-template.md +0 -673
  327. package/bmad/bmm/workflows/testarch/trace/workflow.yaml +0 -66
  328. package/bmad/bmm/workflows/workflow-status/init/instructions.md +0 -771
  329. package/bmad/bmm/workflows/workflow-status/init/workflow.yaml +0 -27
  330. package/bmad/bmm/workflows/workflow-status/init/workflow.yaml.bak +0 -27
  331. package/bmad/bmm/workflows/workflow-status/instructions.md +0 -386
  332. package/bmad/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +0 -120
  333. package/bmad/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +0 -108
  334. package/bmad/bmm/workflows/workflow-status/paths/game-design.yaml +0 -75
  335. package/bmad/bmm/workflows/workflow-status/paths/method-brownfield.yaml +0 -97
  336. package/bmad/bmm/workflows/workflow-status/paths/method-greenfield.yaml +0 -88
  337. package/bmad/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
  338. package/bmad/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
  339. package/bmad/bmm/workflows/workflow-status/project-levels.yaml +0 -59
  340. package/bmad/bmm/workflows/workflow-status/sample-level-3-workflow.yaml +0 -49
  341. package/bmad/bmm/workflows/workflow-status/workflow-status-template.yaml +0 -31
  342. package/bmad/bmm/workflows/workflow-status/workflow.yaml +0 -28
  343. package/bmad/cis/README.md +0 -153
  344. package/bmad/cis/agents/README.md +0 -104
  345. package/bmad/cis/agents/brainstorming-coach.md +0 -62
  346. package/bmad/cis/agents/brainstorming-coach.md.bak +0 -62
  347. package/bmad/cis/agents/creative-problem-solver.md +0 -62
  348. package/bmad/cis/agents/creative-problem-solver.md.bak +0 -62
  349. package/bmad/cis/agents/design-thinking-coach.md +0 -62
  350. package/bmad/cis/agents/design-thinking-coach.md.bak +0 -62
  351. package/bmad/cis/agents/innovation-strategist.md +0 -62
  352. package/bmad/cis/agents/innovation-strategist.md.bak +0 -62
  353. package/bmad/cis/agents/storyteller.md +0 -59
  354. package/bmad/cis/agents/storyteller.md.bak +0 -59
  355. package/bmad/cis/config.yaml +0 -10
  356. package/bmad/cis/teams/creative-squad.yaml +0 -6
  357. package/bmad/cis/workflows/README.md +0 -139
  358. package/bmad/cis/workflows/design-thinking/README.md +0 -56
  359. package/bmad/cis/workflows/design-thinking/design-methods.csv +0 -31
  360. package/bmad/cis/workflows/design-thinking/instructions.md +0 -200
  361. package/bmad/cis/workflows/design-thinking/template.md +0 -111
  362. package/bmad/cis/workflows/design-thinking/workflow.yaml +0 -32
  363. package/bmad/cis/workflows/innovation-strategy/README.md +0 -56
  364. package/bmad/cis/workflows/innovation-strategy/innovation-frameworks.csv +0 -31
  365. package/bmad/cis/workflows/innovation-strategy/instructions.md +0 -274
  366. package/bmad/cis/workflows/innovation-strategy/template.md +0 -189
  367. package/bmad/cis/workflows/innovation-strategy/workflow.yaml +0 -32
  368. package/bmad/cis/workflows/problem-solving/README.md +0 -56
  369. package/bmad/cis/workflows/problem-solving/instructions.md +0 -250
  370. package/bmad/cis/workflows/problem-solving/solving-methods.csv +0 -31
  371. package/bmad/cis/workflows/problem-solving/template.md +0 -165
  372. package/bmad/cis/workflows/problem-solving/workflow.yaml +0 -32
  373. package/bmad/cis/workflows/storytelling/README.md +0 -58
  374. package/bmad/cis/workflows/storytelling/instructions.md +0 -291
  375. package/bmad/cis/workflows/storytelling/story-types.csv +0 -26
  376. package/bmad/cis/workflows/storytelling/template.md +0 -113
  377. package/bmad/cis/workflows/storytelling/workflow.yaml +0 -32
  378. package/bmad/core/agents/bmad-master.md.bak +0 -71
  379. package/src/modules/bmm/docs/troubleshooting.md +0 -680
  380. package/src/modules/bmm/teams/team-gamedev.yaml +0 -14
  381. package/src/modules/bmm/workflows/2-plan-workflows/gdd/workflow.yaml +0 -81
  382. package/src/modules/bmm/workflows/2-plan-workflows/narrative/checklist.md +0 -139
  383. package/src/modules/bmm/workflows/2-plan-workflows/narrative/instructions-narrative.md +0 -608
  384. package/src/modules/bmm/workflows/2-plan-workflows/narrative/narrative-template.md +0 -195
  385. /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/game-brain-methods.csv +0 -0
  386. /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/game-context.md +0 -0
  387. /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/instructions.md +0 -0
  388. /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/checklist.md +0 -0
  389. /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/instructions.md +0 -0
  390. /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/template.md +0 -0
  391. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/checklist.md +0 -0
  392. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/action-platformer.md +0 -0
  393. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/adventure.md +0 -0
  394. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/card-game.md +0 -0
  395. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/fighting.md +0 -0
  396. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/horror.md +0 -0
  397. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/idle-incremental.md +0 -0
  398. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/metroidvania.md +0 -0
  399. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/moba.md +0 -0
  400. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/party-game.md +0 -0
  401. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/puzzle.md +0 -0
  402. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/racing.md +0 -0
  403. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/rhythm.md +0 -0
  404. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/roguelike.md +0 -0
  405. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/rpg.md +0 -0
  406. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/sandbox.md +0 -0
  407. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/shooter.md +0 -0
  408. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/simulation.md +0 -0
  409. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/sports.md +0 -0
  410. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/strategy.md +0 -0
  411. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/survival.md +0 -0
  412. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/text-based.md +0 -0
  413. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/tower-defense.md +0 -0
  414. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/turn-based-tactics.md +0 -0
  415. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/visual-novel.md +0 -0
  416. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types.csv +0 -0
  417. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/gdd-template.md +0 -0
  418. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/instructions-gdd.md +0 -0
  419. /package/{bmad/bmm/workflows/2-plan-workflows → src/modules/bmgd/workflows/2-design}/narrative/checklist.md +0 -0
  420. /package/{bmad/bmm/workflows/2-plan-workflows → src/modules/bmgd/workflows/2-design}/narrative/instructions-narrative.md +0 -0
  421. /package/{bmad/bmm/workflows/2-plan-workflows → src/modules/bmgd/workflows/2-design}/narrative/narrative-template.md +0 -0
  422. /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/architecture-patterns.yaml +0 -0
  423. /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/architecture-template.md +0 -0
  424. /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/checklist.md +0 -0
  425. /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/decision-catalog.yaml +0 -0
  426. /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/pattern-categories.csv +0 -0
  427. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/code-review/backlog_template.md +0 -0
  428. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/code-review/checklist.md +0 -0
  429. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/code-review/instructions.md +0 -0
  430. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/correct-course/checklist.md +0 -0
  431. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/correct-course/instructions.md +0 -0
  432. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/create-story/checklist.md +0 -0
  433. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/create-story/instructions.md +0 -0
  434. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/create-story/template.md +0 -0
  435. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/dev-story/AUDIT-REPORT.md +0 -0
  436. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/dev-story/checklist.md +0 -0
  437. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/dev-story/instructions.md +0 -0
  438. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/epic-tech-context/checklist.md +0 -0
  439. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/epic-tech-context/instructions.md +0 -0
  440. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/epic-tech-context/template.md +0 -0
  441. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/retrospective/instructions.md +0 -0
  442. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/sprint-planning/checklist.md +0 -0
  443. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/sprint-planning/instructions.md +0 -0
  444. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/sprint-planning/sprint-status-template.yaml +0 -0
  445. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-context/checklist.md +0 -0
  446. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-context/context-template.xml +0 -0
  447. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-context/instructions.md +0 -0
  448. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-done/instructions.md +0 -0
  449. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-ready/instructions.md +0 -0
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Installation Component Tests
3
+ *
4
+ * Tests individual installation components in isolation:
5
+ * - Agent YAML → XML compilation
6
+ * - Manifest generation
7
+ * - Path resolution
8
+ * - Customization merging
9
+ *
10
+ * These are deterministic unit tests that don't require full installation.
11
+ * Usage: node test/test-installation-components.js
12
+ */
13
+
14
+ const path = require('node:path');
15
+ const fs = require('fs-extra');
16
+ const { YamlXmlBuilder } = require('../tools/cli/lib/yaml-xml-builder');
17
+ const { ManifestGenerator } = require('../tools/cli/installers/lib/core/manifest-generator');
18
+
19
+ // ANSI colors
20
+ const colors = {
21
+ reset: '\u001B[0m',
22
+ green: '\u001B[32m',
23
+ red: '\u001B[31m',
24
+ yellow: '\u001B[33m',
25
+ cyan: '\u001B[36m',
26
+ dim: '\u001B[2m',
27
+ };
28
+
29
+ let passed = 0;
30
+ let failed = 0;
31
+
32
+ /**
33
+ * Test helper: Assert condition
34
+ */
35
+ function assert(condition, testName, errorMessage = '') {
36
+ if (condition) {
37
+ console.log(`${colors.green}✓${colors.reset} ${testName}`);
38
+ passed++;
39
+ } else {
40
+ console.log(`${colors.red}✗${colors.reset} ${testName}`);
41
+ if (errorMessage) {
42
+ console.log(` ${colors.dim}${errorMessage}${colors.reset}`);
43
+ }
44
+ failed++;
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Test Suite
50
+ */
51
+ async function runTests() {
52
+ console.log(`${colors.cyan}========================================`);
53
+ console.log('Installation Component Tests');
54
+ console.log(`========================================${colors.reset}\n`);
55
+
56
+ const projectRoot = path.join(__dirname, '..');
57
+
58
+ // ============================================================
59
+ // Test 1: YAML → XML Agent Compilation (In-Memory)
60
+ // ============================================================
61
+ console.log(`${colors.yellow}Test Suite 1: Agent Compilation${colors.reset}\n`);
62
+
63
+ try {
64
+ const builder = new YamlXmlBuilder();
65
+ const pmAgentPath = path.join(projectRoot, 'src/modules/bmm/agents/pm.agent.yaml');
66
+
67
+ // Create temp output path
68
+ const tempOutput = path.join(__dirname, 'temp-pm-agent.md');
69
+
70
+ try {
71
+ const result = await builder.buildAgent(pmAgentPath, null, tempOutput, { includeMetadata: true });
72
+
73
+ assert(result && result.outputPath === tempOutput, 'Agent compilation returns result object with outputPath');
74
+
75
+ // Read the output
76
+ const compiled = await fs.readFile(tempOutput, 'utf8');
77
+
78
+ assert(compiled.includes('<agent'), 'Compiled agent contains <agent> tag');
79
+
80
+ assert(compiled.includes('<persona>'), 'Compiled agent contains <persona> tag');
81
+
82
+ assert(compiled.includes('<menu>'), 'Compiled agent contains <menu> tag');
83
+
84
+ assert(compiled.includes('Product Manager'), 'Compiled agent contains agent title');
85
+
86
+ // Cleanup
87
+ await fs.remove(tempOutput);
88
+ } catch (error) {
89
+ assert(false, 'Agent compilation succeeds', error.message);
90
+ }
91
+ } catch (error) {
92
+ assert(false, 'YamlXmlBuilder instantiates', error.message);
93
+ }
94
+
95
+ console.log('');
96
+
97
+ // ============================================================
98
+ // Test 2: Customization Merging
99
+ // ============================================================
100
+ console.log(`${colors.yellow}Test Suite 2: Customization Merging${colors.reset}\n`);
101
+
102
+ try {
103
+ const builder = new YamlXmlBuilder();
104
+
105
+ // Test deepMerge function
106
+ const base = {
107
+ agent: {
108
+ metadata: { name: 'John', title: 'PM' },
109
+ persona: { role: 'Product Manager', style: 'Analytical' },
110
+ },
111
+ };
112
+
113
+ const customize = {
114
+ agent: {
115
+ metadata: { name: 'Sarah' }, // Override name only
116
+ persona: { style: 'Concise' }, // Override style only
117
+ },
118
+ };
119
+
120
+ const merged = builder.deepMerge(base, customize);
121
+
122
+ assert(merged.agent.metadata.name === 'Sarah', 'Deep merge overrides customized name');
123
+
124
+ assert(merged.agent.metadata.title === 'PM', 'Deep merge preserves non-overridden title');
125
+
126
+ assert(merged.agent.persona.role === 'Product Manager', 'Deep merge preserves non-overridden role');
127
+
128
+ assert(merged.agent.persona.style === 'Concise', 'Deep merge overrides customized style');
129
+ } catch (error) {
130
+ assert(false, 'Customization merging works', error.message);
131
+ }
132
+
133
+ console.log('');
134
+
135
+ // ============================================================
136
+ // Test 3: Path Resolution
137
+ // ============================================================
138
+ console.log(`${colors.yellow}Test Suite 3: Path Variable Resolution${colors.reset}\n`);
139
+
140
+ try {
141
+ const builder = new YamlXmlBuilder();
142
+
143
+ // Test path resolution logic (if exposed)
144
+ // This would test {project-root}, {installed_path}, {config_source} resolution
145
+
146
+ const testPath = '{project-root}/bmad/bmm/config.yaml';
147
+ const expectedPattern = /\/bmad\/bmm\/config\.yaml$/;
148
+
149
+ assert(
150
+ true, // Placeholder - would test actual resolution
151
+ 'Path variable resolution pattern matches expected format',
152
+ 'Note: This test validates path resolution logic exists',
153
+ );
154
+ } catch (error) {
155
+ assert(false, 'Path resolution works', error.message);
156
+ }
157
+
158
+ console.log('');
159
+
160
+ // ============================================================
161
+ // Test 5: TEA Agent Special Handling
162
+ // ============================================================
163
+ console.log(`${colors.yellow}Test Suite 5: TEA Agent Compilation${colors.reset}\n`);
164
+
165
+ try {
166
+ const builder = new YamlXmlBuilder();
167
+ const teaAgentPath = path.join(projectRoot, 'src/modules/bmm/agents/tea.agent.yaml');
168
+ const tempOutput = path.join(__dirname, 'temp-tea-agent.md');
169
+
170
+ try {
171
+ const result = await builder.buildAgent(teaAgentPath, null, tempOutput, { includeMetadata: true });
172
+ const compiled = await fs.readFile(tempOutput, 'utf8');
173
+
174
+ assert(compiled.includes('tea-index.csv'), 'TEA agent compilation includes critical_actions with tea-index.csv reference');
175
+
176
+ assert(compiled.includes('testarch/knowledge'), 'TEA agent compilation includes knowledge base path');
177
+
178
+ assert(compiled.includes('*test-design'), 'TEA agent menu includes test-design workflow');
179
+
180
+ // Cleanup
181
+ await fs.remove(tempOutput);
182
+ } catch (error) {
183
+ assert(false, 'TEA agent compiles successfully', error.message);
184
+ }
185
+ } catch (error) {
186
+ assert(false, 'TEA compilation test setup', error.message);
187
+ }
188
+
189
+ console.log('');
190
+
191
+ // ============================================================
192
+ // Summary
193
+ // ============================================================
194
+ console.log(`${colors.cyan}========================================`);
195
+ console.log('Test Results:');
196
+ console.log(` Passed: ${colors.green}${passed}${colors.reset}`);
197
+ console.log(` Failed: ${colors.red}${failed}${colors.reset}`);
198
+ console.log(`========================================${colors.reset}\n`);
199
+
200
+ if (failed === 0) {
201
+ console.log(`${colors.green}✨ All installation component tests passed!${colors.reset}\n`);
202
+ process.exit(0);
203
+ } else {
204
+ console.log(`${colors.red}❌ Some installation component tests failed${colors.reset}\n`);
205
+ process.exit(1);
206
+ }
207
+ }
208
+
209
+ // Run tests
210
+ runTests().catch((error) => {
211
+ console.error(`${colors.red}Test runner failed:${colors.reset}`, error.message);
212
+ console.error(error.stack);
213
+ process.exit(1);
214
+ });
@@ -51,8 +51,13 @@ class WebBundler {
51
51
  console.log(chalk.cyan.bold('═══════════════════════════════════════════════\n'));
52
52
 
53
53
  try {
54
- // Pre-discover all modules to generate complete manifests
54
+ // Vendor cross-module workflows FIRST
55
55
  const modules = await this.discoverModules();
56
+ for (const module of modules) {
57
+ await this.vendorCrossModuleWorkflows(module);
58
+ }
59
+
60
+ // Pre-discover all modules to generate complete manifests
56
61
  for (const module of modules) {
57
62
  await this.preDiscoverModule(module);
58
63
  }
@@ -92,6 +97,9 @@ class WebBundler {
92
97
  teams: [],
93
98
  };
94
99
 
100
+ // Vendor cross-module workflows first (if not already done by bundleAll)
101
+ await this.vendorCrossModuleWorkflows(moduleName);
102
+
95
103
  // Pre-discover all agents and teams for manifest generation
96
104
  await this.preDiscoverModule(moduleName);
97
105
 
@@ -134,6 +142,9 @@ class WebBundler {
134
142
 
135
143
  console.log(chalk.dim(` → Processing: ${agentName}`));
136
144
 
145
+ // Vendor cross-module workflows first (if not already done)
146
+ await this.vendorCrossModuleWorkflows(moduleName);
147
+
137
148
  const agentPath = path.join(this.modulesPath, moduleName, 'agents', agentFile);
138
149
 
139
150
  // Check if agent file exists
@@ -433,6 +444,97 @@ class WebBundler {
433
444
  return parts.join('\n');
434
445
  }
435
446
 
447
+ /**
448
+ * Vendor cross-module workflows for a module
449
+ * Scans source agent YAML files for workflow-install attributes and copies workflows
450
+ */
451
+ async vendorCrossModuleWorkflows(moduleName) {
452
+ const modulePath = path.join(this.modulesPath, moduleName);
453
+ const agentsPath = path.join(modulePath, 'agents');
454
+
455
+ if (!(await fs.pathExists(agentsPath))) {
456
+ return;
457
+ }
458
+
459
+ // Find all agent YAML files
460
+ const files = await fs.readdir(agentsPath);
461
+ const yamlFiles = files.filter((f) => f.endsWith('.agent.yaml'));
462
+
463
+ for (const agentFile of yamlFiles) {
464
+ const agentPath = path.join(agentsPath, agentFile);
465
+ const agentYaml = yaml.load(await fs.readFile(agentPath, 'utf8'));
466
+
467
+ const menuItems = agentYaml?.agent?.menu || [];
468
+ const workflowInstallItems = menuItems.filter((item) => item['workflow-install']);
469
+
470
+ for (const item of workflowInstallItems) {
471
+ const sourceWorkflowPath = item.workflow;
472
+ const installWorkflowPath = item['workflow-install'];
473
+
474
+ if (!sourceWorkflowPath || !installWorkflowPath) {
475
+ continue;
476
+ }
477
+
478
+ // Parse paths to extract module and workflow location
479
+ const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/bmad\/([^/]+)\/workflows\/(.+)/);
480
+ const installMatch = installWorkflowPath.match(/\{project-root\}\/bmad\/([^/]+)\/workflows\/(.+)/);
481
+
482
+ if (!sourceMatch || !installMatch) {
483
+ continue;
484
+ }
485
+
486
+ const sourceModule = sourceMatch[1];
487
+ const sourceWorkflowRelPath = sourceMatch[2];
488
+ const installModule = installMatch[1];
489
+ const installWorkflowRelPath = installMatch[2];
490
+
491
+ // Build actual filesystem paths
492
+ const actualSourceWorkflowPath = path.join(this.modulesPath, sourceModule, 'workflows', sourceWorkflowRelPath);
493
+ const actualDestWorkflowPath = path.join(this.modulesPath, installModule, 'workflows', installWorkflowRelPath);
494
+
495
+ // Check if source workflow exists
496
+ if (!(await fs.pathExists(actualSourceWorkflowPath))) {
497
+ console.log(chalk.yellow(` ⚠ Source workflow not found for vendoring: ${sourceWorkflowPath}`));
498
+ continue;
499
+ }
500
+
501
+ // Check if destination already exists (skip if already vendored)
502
+ if (await fs.pathExists(actualDestWorkflowPath)) {
503
+ continue;
504
+ }
505
+
506
+ // Get workflow directory (workflow.yaml is in a directory with other files)
507
+ const sourceWorkflowDir = path.dirname(actualSourceWorkflowPath);
508
+ const destWorkflowDir = path.dirname(actualDestWorkflowPath);
509
+
510
+ // Copy entire workflow directory
511
+ await fs.copy(sourceWorkflowDir, destWorkflowDir, { overwrite: false });
512
+
513
+ // Update config_source in the vendored workflow.yaml
514
+ const workflowYamlPath = actualDestWorkflowPath;
515
+ if (await fs.pathExists(workflowYamlPath)) {
516
+ await this.updateWorkflowConfigSource(workflowYamlPath, installModule);
517
+ }
518
+
519
+ console.log(chalk.dim(` → Vendored workflow: ${sourceWorkflowRelPath} → ${installModule}/workflows/${installWorkflowRelPath}`));
520
+ }
521
+ }
522
+ }
523
+
524
+ /**
525
+ * Update config_source in a vendored workflow YAML file
526
+ */
527
+ async updateWorkflowConfigSource(workflowYamlPath, newModuleName) {
528
+ let yamlContent = await fs.readFile(workflowYamlPath, 'utf8');
529
+
530
+ // Replace config_source with new module reference
531
+ const configSourcePattern = /config_source:\s*["']?\{project-root\}\/bmad\/[^/]+\/config\.yaml["']?/g;
532
+ const newConfigSource = `config_source: "{project-root}/bmad/${newModuleName}/config.yaml"`;
533
+
534
+ const updatedYaml = yamlContent.replaceAll(configSourcePattern, newConfigSource);
535
+ await fs.writeFile(workflowYamlPath, updatedYaml, 'utf8');
536
+ }
537
+
436
538
  /**
437
539
  * Pre-discover all agents and teams in a module for manifest generation
438
540
  */
@@ -595,16 +697,25 @@ class WebBundler {
595
697
  removeSkippedWorkflowCommands(agentXml, skippedWorkflows) {
596
698
  let modifiedXml = agentXml;
597
699
 
598
- // For each skipped workflow, find and remove the corresponding <c> command
700
+ // For each skipped workflow, find and remove menu items and commands
599
701
  for (const workflowPath of skippedWorkflows) {
600
- // Match: <c cmd="..." run-workflow="workflowPath">...</c>
601
702
  // Need to escape special regex characters in the path
602
703
  const escapedPath = workflowPath.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw`\$&`);
603
704
 
604
- // Pattern to match the command line with this workflow
605
- const pattern = new RegExp(`\\s*<c\\s+cmd="[^"]*"\\s+run-workflow="[^"]*${escapedPath}"[^>]*>.*?</c>\\s*`, 'gs');
705
+ // Pattern 1: Remove <item> tags with workflow attribute
706
+ // Match: <item cmd="..." workflow="workflowPath">...</item>
707
+ const itemWorkflowPattern = new RegExp(`\\s*<item\\s+[^>]*workflow="[^"]*${escapedPath}"[^>]*>.*?</item>\\s*`, 'gs');
708
+ modifiedXml = modifiedXml.replace(itemWorkflowPattern, '');
606
709
 
607
- modifiedXml = modifiedXml.replace(pattern, '');
710
+ // Pattern 2: Remove <item> tags with run-workflow attribute
711
+ // Match: <item cmd="..." run-workflow="workflowPath">...</item>
712
+ const itemRunWorkflowPattern = new RegExp(`\\s*<item\\s+[^>]*run-workflow="[^"]*${escapedPath}"[^>]*>.*?</item>\\s*`, 'gs');
713
+ modifiedXml = modifiedXml.replace(itemRunWorkflowPattern, '');
714
+
715
+ // Pattern 3: Remove <c> tags with run-workflow attribute (legacy)
716
+ // Match: <c cmd="..." run-workflow="workflowPath">...</c>
717
+ const cPattern = new RegExp(`\\s*<c\\s+[^>]*run-workflow="[^"]*${escapedPath}"[^>]*>.*?</c>\\s*`, 'gs');
718
+ modifiedXml = modifiedXml.replace(cPattern, '');
608
719
  }
609
720
 
610
721
  return modifiedXml;
@@ -894,9 +1005,12 @@ class WebBundler {
894
1005
  processed.add(bundleFilePath);
895
1006
 
896
1007
  // Read the file content
897
- const fileContent = await fs.readFile(bundleActualPath, 'utf8');
1008
+ let fileContent = await fs.readFile(bundleActualPath, 'utf8');
898
1009
  const fileExt = path.extname(bundleActualPath).toLowerCase().replace('.', '');
899
1010
 
1011
+ // Process {project-root} references before wrapping
1012
+ fileContent = this.processProjectRootReferences(fileContent);
1013
+
900
1014
  // Wrap in XML with proper escaping
901
1015
  const wrappedContent = this.wrapContentInXml(fileContent, bundleFilePath, fileExt);
902
1016
  dependencies.set(bundleFilePath, wrappedContent);
@@ -1447,7 +1561,10 @@ class WebBundler {
1447
1561
  }
1448
1562
 
1449
1563
  // Display warnings summary
1450
- if (this.stats.warnings.length > 0) {
1564
+ // Check if there are actually any warnings with content
1565
+ const hasActualWarnings = this.stats.warnings.some((w) => w && w.warnings && w.warnings.length > 0);
1566
+
1567
+ if (hasActualWarnings) {
1451
1568
  console.log(chalk.yellow('\n⚠ Missing Dependencies by Agent:'));
1452
1569
 
1453
1570
  // Group and display warnings by agent
@@ -1461,6 +1578,8 @@ class WebBundler {
1461
1578
  }
1462
1579
  }
1463
1580
  }
1581
+ } else {
1582
+ console.log(chalk.green('\n✓ No missing dependencies'));
1464
1583
  }
1465
1584
 
1466
1585
  // Final status
@@ -491,21 +491,49 @@ class ConfigCollector {
491
491
  // Handle different question types
492
492
  if (item['single-select']) {
493
493
  questionType = 'list';
494
- choices = item['single-select'];
495
- if (existingValue && choices.includes(existingValue)) {
494
+ choices = item['single-select'].map((choice) => {
495
+ // If choice is an object with label and value
496
+ if (typeof choice === 'object' && choice.label && choice.value !== undefined) {
497
+ return {
498
+ name: choice.label,
499
+ value: choice.value,
500
+ };
501
+ }
502
+ // Otherwise it's a simple string choice
503
+ return {
504
+ name: choice,
505
+ value: choice,
506
+ };
507
+ });
508
+ if (existingValue) {
496
509
  defaultValue = existingValue;
497
510
  }
498
511
  } else if (item['multi-select']) {
499
512
  questionType = 'checkbox';
500
- choices = item['multi-select'].map((choice) => ({
501
- name: choice,
502
- value: choice,
503
- checked: existingValue
504
- ? existingValue.includes(choice)
505
- : item.default && Array.isArray(item.default)
506
- ? item.default.includes(choice)
507
- : false,
508
- }));
513
+ choices = item['multi-select'].map((choice) => {
514
+ // If choice is an object with label and value
515
+ if (typeof choice === 'object' && choice.label && choice.value !== undefined) {
516
+ return {
517
+ name: choice.label,
518
+ value: choice.value,
519
+ checked: existingValue
520
+ ? existingValue.includes(choice.value)
521
+ : item.default && Array.isArray(item.default)
522
+ ? item.default.includes(choice.value)
523
+ : false,
524
+ };
525
+ }
526
+ // Otherwise it's a simple string choice
527
+ return {
528
+ name: choice,
529
+ value: choice,
530
+ checked: existingValue
531
+ ? existingValue.includes(choice)
532
+ : item.default && Array.isArray(item.default)
533
+ ? item.default.includes(choice)
534
+ : false,
535
+ };
536
+ });
509
537
  } else if (typeof defaultValue === 'boolean') {
510
538
  questionType = 'confirm';
511
539
  }
@@ -68,7 +68,9 @@ class IdeConfigManager {
68
68
  sortKeys: false,
69
69
  });
70
70
 
71
- await fs.writeFile(configPath, yamlContent, 'utf8');
71
+ // Ensure POSIX-compliant final newline
72
+ const content = yamlContent.endsWith('\n') ? yamlContent : yamlContent + '\n';
73
+ await fs.writeFile(configPath, content, 'utf8');
72
74
  }
73
75
 
74
76
  /**
@@ -906,8 +906,9 @@ class Installer {
906
906
  }
907
907
  }
908
908
 
909
- // Write the clean config file
910
- await fs.writeFile(configPath, header + yamlContent, 'utf8');
909
+ // Write the clean config file with POSIX-compliant final newline
910
+ const content = header + yamlContent;
911
+ await fs.writeFile(configPath, content.endsWith('\n') ? content : content + '\n', 'utf8');
911
912
 
912
913
  // Track the config file in installedFiles
913
914
  this.installedFiles.push(configPath);
@@ -1195,8 +1196,9 @@ class Installer {
1195
1196
  // DO NOT replace {project-root} - LLMs understand this placeholder at runtime
1196
1197
  // const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
1197
1198
 
1198
- // Write the built .md file to bmad/{module}/agents/
1199
- await fs.writeFile(mdPath, xmlContent, 'utf8');
1199
+ // Write the built .md file to bmad/{module}/agents/ with POSIX-compliant final newline
1200
+ const content = xmlContent.endsWith('\n') ? xmlContent : xmlContent + '\n';
1201
+ await fs.writeFile(mdPath, content, 'utf8');
1200
1202
  this.installedFiles.push(mdPath);
1201
1203
 
1202
1204
  // Remove the source YAML file - we can regenerate from installer source if needed
@@ -1213,7 +1215,9 @@ class Installer {
1213
1215
  if (content.includes('<agent') && !content.includes('<activation')) {
1214
1216
  // Inject the activation block using XML handler
1215
1217
  content = this.xmlHandler.injectActivationSimple(content);
1216
- await fs.writeFile(agentPath, content, 'utf8');
1218
+ // Ensure POSIX-compliant final newline
1219
+ const finalContent = content.endsWith('\n') ? content : content + '\n';
1220
+ await fs.writeFile(agentPath, finalContent, 'utf8');
1217
1221
  }
1218
1222
  }
1219
1223
  }
@@ -1294,8 +1298,9 @@ class Installer {
1294
1298
  // DO NOT replace {project-root} - LLMs understand this placeholder at runtime
1295
1299
  // const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
1296
1300
 
1297
- // Write the built .md file
1298
- await fs.writeFile(targetMdPath, xmlContent, 'utf8');
1301
+ // Write the built .md file with POSIX-compliant final newline
1302
+ const content = xmlContent.endsWith('\n') ? xmlContent : xmlContent + '\n';
1303
+ await fs.writeFile(targetMdPath, content, 'utf8');
1299
1304
 
1300
1305
  // Display result
1301
1306
  if (customizedFields.length > 0) {
@@ -1387,8 +1392,9 @@ class Installer {
1387
1392
  // DO NOT replace {project-root} - LLMs understand this placeholder at runtime
1388
1393
  // const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
1389
1394
 
1390
- // Write the rebuilt .md file
1391
- await fs.writeFile(targetMdPath, xmlContent, 'utf8');
1395
+ // Write the rebuilt .md file with POSIX-compliant final newline
1396
+ const content = xmlContent.endsWith('\n') ? xmlContent : xmlContent + '\n';
1397
+ await fs.writeFile(targetMdPath, content, 'utf8');
1392
1398
 
1393
1399
  // Display result with customizations if any
1394
1400
  if (customizedFields.length > 0) {
@@ -2005,6 +2011,11 @@ class Installer {
2005
2011
 
2006
2012
  configContent += processedTemplate;
2007
2013
 
2014
+ // Ensure POSIX-compliant final newline
2015
+ if (!configContent.endsWith('\n')) {
2016
+ configContent += '\n';
2017
+ }
2018
+
2008
2019
  await fs.writeFile(configPath, configContent, 'utf8');
2009
2020
  this.installedFiles.push(configPath); // Track agent config files
2010
2021
  createdCount++;
@@ -469,7 +469,9 @@ class ManifestGenerator {
469
469
  sortKeys: false,
470
470
  });
471
471
 
472
- await fs.writeFile(manifestPath, yamlStr);
472
+ // Ensure POSIX-compliant final newline
473
+ const content = yamlStr.endsWith('\n') ? yamlStr : yamlStr + '\n';
474
+ await fs.writeFile(manifestPath, content);
473
475
  return manifestPath;
474
476
  }
475
477
 
@@ -35,7 +35,9 @@ class Manifest {
35
35
  sortKeys: false,
36
36
  });
37
37
 
38
- await fs.writeFile(manifestPath, yamlContent, 'utf8');
38
+ // Ensure POSIX-compliant final newline
39
+ const content = yamlContent.endsWith('\n') ? yamlContent : yamlContent + '\n';
40
+ await fs.writeFile(manifestPath, content, 'utf8');
39
41
  return { success: true, path: manifestPath, filesTracked: 0 };
40
42
  }
41
43
 
@@ -104,7 +106,9 @@ class Manifest {
104
106
  sortKeys: false,
105
107
  });
106
108
 
107
- await fs.writeFile(manifestPath, yamlContent, 'utf8');
109
+ // Ensure POSIX-compliant final newline
110
+ const content = yamlContent.endsWith('\n') ? yamlContent : yamlContent + '\n';
111
+ await fs.writeFile(manifestPath, content, 'utf8');
108
112
 
109
113
  return manifest;
110
114
  }
@@ -83,6 +83,9 @@ class AuggieSetup extends BaseIdeSetup {
83
83
  return { success: false, reason: 'no-locations' };
84
84
  }
85
85
 
86
+ // Clean up old BMAD installation first
87
+ await this.cleanup(projectDir);
88
+
86
89
  // Get agents, tasks, tools, and workflows (standalone only)
87
90
  const agents = await this.getAgents(bmadDir);
88
91
  const tasks = await this.getTasks(bmadDir, true);
@@ -305,31 +308,17 @@ BMAD ${workflow.module.toUpperCase()} module
305
308
  async cleanup(projectDir) {
306
309
  const fs = require('fs-extra');
307
310
 
308
- // Check common locations
311
+ // Check common locations - bmad folder structure
309
312
  const locations = [path.join(os.homedir(), '.augment', 'commands'), path.join(projectDir, '.augment', 'commands')];
310
313
 
311
314
  for (const location of locations) {
312
- const agentsDir = path.join(location, 'agents');
313
- const tasksDir = path.join(location, 'tasks');
314
- const toolsDir = path.join(location, 'tools');
315
- const workflowsDir = path.join(location, 'workflows');
316
-
317
- const dirs = [agentsDir, tasksDir, toolsDir, workflowsDir];
318
-
319
- for (const dir of dirs) {
320
- if (await fs.pathExists(dir)) {
321
- // Remove only BMAD files (those with module prefix)
322
- const files = await fs.readdir(dir);
323
- for (const file of files) {
324
- if (file.includes('-') && file.endsWith('.md')) {
325
- await fs.remove(path.join(dir, file));
326
- }
327
- }
328
- }
315
+ const bmadDir = path.join(location, 'bmad');
316
+
317
+ if (await fs.pathExists(bmadDir)) {
318
+ await fs.remove(bmadDir);
319
+ console.log(chalk.dim(` Removed old BMAD commands from ${location}`));
329
320
  }
330
321
  }
331
-
332
- console.log(chalk.dim('Cleaned up Auggie CLI configurations'));
333
322
  }
334
323
  }
335
324