bmad-method 6.0.3 → 6.0.5-next.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 (271) hide show
  1. package/.augment/code_review_guidelines.yaml +2 -42
  2. package/.claude/skills/bmad-os-findings-triage/SKILL.md +6 -0
  3. package/.claude/skills/bmad-os-findings-triage/prompts/agent-prompt.md +104 -0
  4. package/.claude/skills/bmad-os-findings-triage/prompts/instructions.md +286 -0
  5. package/.claude/skills/bmad-os-review-pr/SKILL.md +1 -1
  6. package/.claude/skills/bmad-os-review-pr/prompts/instructions.md +63 -6
  7. package/.claude/skills/bmad-os-review-prompt/SKILL.md +177 -0
  8. package/.claude/skills/bmad-os-root-cause-analysis/SKILL.md +12 -0
  9. package/.claude/skills/bmad-os-root-cause-analysis/prompts/instructions.md +74 -0
  10. package/.github/ISSUE_TEMPLATE/config.yaml +1 -1
  11. package/.github/ISSUE_TEMPLATE/documentation.yaml +1 -1
  12. package/.github/workflows/publish.yaml +243 -0
  13. package/CHANGELOG.md +32 -0
  14. package/CONTRIBUTING.md +1 -1
  15. package/README.md +8 -8
  16. package/README_CN.md +121 -0
  17. package/docs/_STYLE_GUIDE.md +10 -10
  18. package/docs/explanation/brainstorming.md +1 -1
  19. package/docs/explanation/party-mode.md +1 -1
  20. package/docs/explanation/preventing-agent-conflicts.md +1 -1
  21. package/docs/explanation/project-context.md +15 -15
  22. package/docs/explanation/quick-flow.md +9 -9
  23. package/docs/how-to/established-projects.md +7 -7
  24. package/docs/how-to/get-answers-about-bmad.md +2 -2
  25. package/docs/how-to/install-bmad.md +16 -6
  26. package/docs/how-to/project-context.md +2 -2
  27. package/docs/how-to/quick-fixes.md +5 -5
  28. package/docs/how-to/shard-large-documents.md +1 -1
  29. package/docs/how-to/upgrade-to-v6.md +8 -5
  30. package/docs/index.md +2 -2
  31. package/docs/reference/agents.md +14 -14
  32. package/docs/reference/commands.md +64 -70
  33. package/docs/reference/testing.md +1 -1
  34. package/docs/reference/workflow-map.md +19 -19
  35. package/docs/tutorials/getting-started.md +34 -34
  36. package/docs/zh-cn/404.md +9 -0
  37. package/docs/zh-cn/_STYLE_GUIDE.md +370 -0
  38. package/docs/zh-cn/explanation/advanced-elicitation.md +62 -0
  39. package/docs/zh-cn/explanation/adversarial-review.md +71 -0
  40. package/docs/zh-cn/explanation/brainstorming.md +43 -0
  41. package/docs/zh-cn/explanation/established-projects-faq.md +60 -0
  42. package/docs/zh-cn/explanation/party-mode.md +79 -0
  43. package/docs/zh-cn/explanation/preventing-agent-conflicts.md +137 -0
  44. package/docs/zh-cn/explanation/project-context.md +176 -0
  45. package/docs/zh-cn/explanation/quick-flow.md +93 -0
  46. package/docs/zh-cn/explanation/why-solutioning-matters.md +90 -0
  47. package/docs/zh-cn/how-to/customize-bmad.md +182 -0
  48. package/docs/zh-cn/how-to/established-projects.md +134 -0
  49. package/docs/zh-cn/how-to/get-answers-about-bmad.md +144 -0
  50. package/docs/zh-cn/how-to/install-bmad.md +105 -0
  51. package/docs/zh-cn/how-to/non-interactive-installation.md +181 -0
  52. package/docs/zh-cn/how-to/project-context.md +152 -0
  53. package/docs/zh-cn/how-to/quick-fixes.md +140 -0
  54. package/docs/zh-cn/how-to/shard-large-documents.md +86 -0
  55. package/docs/zh-cn/how-to/upgrade-to-v6.md +120 -0
  56. package/docs/zh-cn/index.md +69 -0
  57. package/docs/zh-cn/reference/agents.md +41 -0
  58. package/docs/zh-cn/reference/commands.md +166 -0
  59. package/docs/zh-cn/reference/modules.md +94 -0
  60. package/docs/zh-cn/reference/testing.md +122 -0
  61. package/docs/zh-cn/reference/workflow-map.md +104 -0
  62. package/docs/zh-cn/roadmap.mdx +152 -0
  63. package/docs/zh-cn/tutorials/getting-started.md +300 -0
  64. package/package.json +1 -1
  65. package/src/bmm/agents/analyst.agent.yaml +1 -1
  66. package/src/bmm/agents/bmad-skill-manifest.yaml +39 -0
  67. package/src/bmm/agents/dev.agent.yaml +2 -2
  68. package/src/bmm/agents/pm.agent.yaml +1 -1
  69. package/src/bmm/agents/qa.agent.yaml +1 -1
  70. package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +6 -2
  71. package/src/bmm/agents/sm.agent.yaml +4 -4
  72. package/src/bmm/agents/tech-writer/bmad-skill-manifest.yaml +3 -0
  73. package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +1 -1
  74. package/src/bmm/module-help.csv +11 -10
  75. package/src/bmm/workflows/1-analysis/create-product-brief/bmad-skill-manifest.yaml +3 -0
  76. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +1 -1
  77. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +1 -1
  78. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +1 -1
  79. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +1 -1
  80. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +1 -1
  81. package/src/bmm/workflows/1-analysis/research/bmad-skill-manifest.yaml +14 -0
  82. package/src/bmm/workflows/2-plan-workflows/create-prd/bmad-skill-manifest.yaml +14 -0
  83. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +1 -1
  84. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +1 -1
  85. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +1 -1
  86. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +1 -1
  87. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +1 -1
  88. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +1 -1
  89. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +1 -1
  90. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +1 -1
  91. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +1 -1
  92. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +1 -1
  93. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +1 -1
  94. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +1 -1
  95. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +1 -1
  96. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +1 -1
  97. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +1 -1
  98. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +1 -1
  99. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +1 -1
  100. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +1 -1
  101. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +1 -1
  102. package/src/bmm/workflows/2-plan-workflows/create-ux-design/bmad-skill-manifest.yaml +3 -0
  103. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +1 -1
  104. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +2 -2
  105. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +2 -2
  106. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +2 -2
  107. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +2 -2
  108. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +2 -2
  109. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +2 -2
  110. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +2 -2
  111. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +2 -2
  112. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +2 -2
  113. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +2 -2
  114. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +2 -2
  115. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +1 -1
  116. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/bmad-skill-manifest.yaml +3 -0
  117. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +1 -1
  118. package/src/bmm/workflows/3-solutioning/create-architecture/bmad-skill-manifest.yaml +3 -0
  119. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +2 -2
  120. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +2 -2
  121. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +2 -2
  122. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +2 -2
  123. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +2 -2
  124. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +2 -2
  125. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +1 -1
  126. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/bmad-skill-manifest.yaml +3 -0
  127. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +1 -1
  128. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +1 -1
  129. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +1 -1
  130. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +2 -2
  131. package/src/bmm/workflows/4-implementation/code-review/bmad-skill-manifest.yaml +3 -0
  132. package/src/bmm/workflows/4-implementation/code-review/discover-inputs.md +88 -0
  133. package/src/bmm/workflows/4-implementation/code-review/workflow.md +271 -0
  134. package/src/bmm/workflows/4-implementation/correct-course/bmad-skill-manifest.yaml +3 -0
  135. package/src/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
  136. package/src/bmm/workflows/4-implementation/correct-course/{instructions.md → workflow.md} +79 -12
  137. package/src/bmm/workflows/4-implementation/create-story/bmad-skill-manifest.yaml +3 -0
  138. package/src/bmm/workflows/4-implementation/create-story/checklist.md +9 -10
  139. package/src/bmm/workflows/4-implementation/create-story/discover-inputs.md +88 -0
  140. package/src/bmm/workflows/4-implementation/create-story/workflow.md +388 -0
  141. package/src/bmm/workflows/4-implementation/dev-story/bmad-skill-manifest.yaml +3 -0
  142. package/src/bmm/workflows/4-implementation/dev-story/{instructions.xml → workflow.md} +49 -2
  143. package/src/bmm/workflows/4-implementation/retrospective/bmad-skill-manifest.yaml +3 -0
  144. package/src/bmm/workflows/4-implementation/retrospective/{instructions.md → workflow.md} +64 -23
  145. package/src/bmm/workflows/4-implementation/sprint-planning/bmad-skill-manifest.yaml +3 -0
  146. package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +1 -0
  147. package/src/bmm/workflows/4-implementation/sprint-planning/{instructions.md → workflow.md} +55 -10
  148. package/src/bmm/workflows/4-implementation/sprint-status/bmad-skill-manifest.yaml +3 -0
  149. package/src/bmm/workflows/4-implementation/sprint-status/{instructions.md → workflow.md} +45 -8
  150. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/SKILL.md +6 -0
  151. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/bmad-skill-manifest.yaml +1 -0
  152. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-01-clarify-and-route.md +54 -0
  153. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-02-plan.md +39 -0
  154. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-03-implement.md +35 -0
  155. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-04-review.md +55 -0
  156. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-05-present.md +19 -0
  157. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/tech-spec-template.md +90 -0
  158. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/workflow.md +84 -0
  159. package/src/bmm/workflows/bmad-quick-flow/quick-dev/bmad-skill-manifest.yaml +3 -0
  160. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +8 -14
  161. package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +1 -1
  162. package/src/bmm/workflows/bmad-quick-flow/quick-spec/bmad-skill-manifest.yaml +3 -0
  163. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +4 -6
  164. package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +1 -1
  165. package/src/bmm/workflows/document-project/bmad-skill-manifest.yaml +3 -0
  166. package/src/bmm/workflows/document-project/instructions.md +5 -7
  167. package/src/bmm/workflows/document-project/workflow.md +39 -0
  168. package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +0 -1
  169. package/src/bmm/workflows/document-project/workflows/deep-dive-workflow.md +42 -0
  170. package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +0 -1
  171. package/src/bmm/workflows/document-project/workflows/full-scan-workflow.md +42 -0
  172. package/src/bmm/workflows/generate-project-context/bmad-skill-manifest.yaml +3 -0
  173. package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +2 -2
  174. package/src/bmm/workflows/qa-generate-e2e-tests/bmad-skill-manifest.yaml +3 -0
  175. package/src/bmm/workflows/qa-generate-e2e-tests/checklist.md +1 -1
  176. package/src/bmm/workflows/qa-generate-e2e-tests/{instructions.md → workflow.md} +40 -7
  177. package/src/core/agents/bmad-master.agent.yaml +1 -1
  178. package/src/core/agents/bmad-skill-manifest.yaml +3 -0
  179. package/src/core/module-help.csv +3 -2
  180. package/src/core/module.yaml +1 -1
  181. package/src/core/tasks/bmad-help/SKILL.md +6 -0
  182. package/src/core/tasks/bmad-help/bmad-skill-manifest.yaml +1 -0
  183. package/src/core/tasks/{help.md → bmad-help/workflow.md} +6 -4
  184. package/src/core/tasks/bmad-review-adversarial-general/SKILL.md +6 -0
  185. package/src/core/tasks/bmad-review-adversarial-general/bmad-skill-manifest.yaml +1 -0
  186. package/src/core/tasks/bmad-review-adversarial-general/workflow.md +32 -0
  187. package/src/core/tasks/bmad-review-edge-case-hunter/SKILL.md +6 -0
  188. package/src/core/tasks/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml +1 -0
  189. package/src/core/tasks/bmad-review-edge-case-hunter/workflow.md +62 -0
  190. package/src/core/tasks/bmad-skill-manifest.yaml +19 -0
  191. package/src/core/workflows/advanced-elicitation/bmad-skill-manifest.yaml +3 -0
  192. package/src/core/workflows/advanced-elicitation/workflow.md +138 -0
  193. package/src/core/workflows/brainstorming/bmad-skill-manifest.yaml +3 -0
  194. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +31 -18
  195. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +1 -1
  196. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +3 -3
  197. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +2 -2
  198. package/src/core/workflows/brainstorming/workflow.md +5 -3
  199. package/src/core/workflows/party-mode/bmad-skill-manifest.yaml +3 -0
  200. package/src/core/workflows/party-mode/workflow.md +1 -1
  201. package/src/utility/agent-components/activation-steps.txt +2 -2
  202. package/src/utility/agent-components/handler-multi.txt +1 -2
  203. package/test/adversarial-review-tests/README.md +3 -3
  204. package/test/adversarial-review-tests/test-cases.yaml +2 -2
  205. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +1 -1
  206. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +1 -1
  207. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +1 -2
  208. package/test/fixtures/file-refs-csv/valid/bmm-style.csv +1 -1
  209. package/test/test-file-refs-csv.js +1 -1
  210. package/test/test-install-to-bmad.js +154 -0
  211. package/test/test-installation-components.js +1586 -2
  212. package/test/test-workflow-path-regex.js +88 -0
  213. package/tools/cli/installers/install-messages.yaml +1 -1
  214. package/tools/cli/installers/lib/core/installer.js +34 -1
  215. package/tools/cli/installers/lib/core/manifest-generator.js +332 -41
  216. package/tools/cli/installers/lib/ide/_base-ide.js +24 -15
  217. package/tools/cli/installers/lib/ide/_config-driven.js +547 -53
  218. package/tools/cli/installers/lib/ide/manager.js +26 -62
  219. package/tools/cli/installers/lib/ide/platform-codes.yaml +116 -29
  220. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +1 -0
  221. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +7 -0
  222. package/tools/cli/installers/lib/ide/shared/path-utils.js +68 -3
  223. package/tools/cli/installers/lib/ide/shared/skill-manifest.js +90 -0
  224. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +2 -0
  225. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +6 -145
  226. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
  227. package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +1 -1
  228. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +1 -1
  229. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +1 -1
  230. package/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md +1 -1
  231. package/tools/cli/installers/lib/ide/templates/combined/opencode-task.md +0 -1
  232. package/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +0 -1
  233. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +0 -1
  234. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +0 -1
  235. package/tools/cli/installers/lib/modules/manager.js +9 -132
  236. package/tools/cli/lib/agent/compiler.js +1 -10
  237. package/tools/cli/lib/agent-analyzer.js +2 -14
  238. package/tools/cli/lib/yaml-xml-builder.js +1 -18
  239. package/tools/docs/native-skills-migration-checklist.md +281 -0
  240. package/tools/platform-codes.yaml +1 -1
  241. package/tools/schema/agent.js +1 -3
  242. package/tools/validate-file-refs.js +2 -0
  243. package/website/astro.config.mjs +24 -3
  244. package/website/src/content/config.ts +2 -1
  245. package/website/src/content/i18n/zh-CN.json +28 -0
  246. package/src/bmm/workflows/4-implementation/code-review/instructions.xml +0 -227
  247. package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -43
  248. package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -53
  249. package/src/bmm/workflows/4-implementation/create-story/instructions.xml +0 -346
  250. package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -52
  251. package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -20
  252. package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -52
  253. package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -47
  254. package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +0 -25
  255. package/src/bmm/workflows/document-project/workflow.yaml +0 -22
  256. package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  257. package/src/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  258. package/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +0 -42
  259. package/src/core/tasks/review-adversarial-general.xml +0 -49
  260. package/src/core/tasks/workflow.xml +0 -235
  261. package/src/core/workflows/advanced-elicitation/workflow.xml +0 -118
  262. package/src/utility/agent-components/handler-validate-workflow.txt +0 -7
  263. package/src/utility/agent-components/handler-workflow.txt +0 -10
  264. package/tools/cli/installers/lib/ide/codex.js +0 -440
  265. package/tools/cli/installers/lib/ide/github-copilot.js +0 -699
  266. package/tools/cli/installers/lib/ide/kilo.js +0 -269
  267. package/tools/cli/installers/lib/ide/rovodev.js +0 -257
  268. package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +0 -14
  269. package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow-yaml.md +0 -15
  270. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +0 -13
  271. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +0 -5
@@ -0,0 +1,138 @@
1
+ ---
2
+ name: advanced-elicitation
3
+ description: 'Push the LLM to reconsider refine and improve its recent output. Use when the user asks for advanced elicitation.'
4
+ methods: '{project-root}/_bmad/core/workflows/advanced-elicitation/methods.csv'
5
+ agent_party: '{project-root}/_bmad/_config/agent-manifest.csv'
6
+ ---
7
+
8
+ # Advanced Elicitation Workflow
9
+
10
+ **Goal:** Push the LLM to reconsider, refine, and improve its recent output. Use when the user asks for advanced elicitation.
11
+
12
+ ---
13
+
14
+ ## CRITICAL LLM INSTRUCTIONS
15
+
16
+ - **MANDATORY:** Execute ALL steps in the flow section IN EXACT ORDER
17
+ - DO NOT skip steps or change the sequence
18
+ - HALT immediately when halt-conditions are met
19
+ - Each action within a step is a REQUIRED action to complete that step
20
+ - Sections outside flow (validation, output, critical-context) provide essential context - review and apply throughout execution
21
+ - **YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the `communication_language`**
22
+
23
+ ---
24
+
25
+ ## INTEGRATION (When Called from Workflow)
26
+
27
+ When called during template workflow processing:
28
+
29
+ 1. Receive or review the current section content that was just generated
30
+ 2. Apply elicitation methods iteratively to enhance that specific content
31
+ 3. Return the enhanced version back when user selects 'x' to proceed and return back
32
+ 4. The enhanced content replaces the original section content in the output document
33
+
34
+ ---
35
+
36
+ ## FLOW
37
+
38
+ ### Step 1: Method Registry Loading
39
+
40
+ **Action:** Load and read `{methods}` and `{agent_party}`
41
+
42
+ #### CSV Structure
43
+
44
+ - **category:** Method grouping (core, structural, risk, etc.)
45
+ - **method_name:** Display name for the method
46
+ - **description:** Rich explanation of what the method does, when to use it, and why it's valuable
47
+ - **output_pattern:** Flexible flow guide using arrows (e.g., "analysis -> insights -> action")
48
+
49
+ #### Context Analysis
50
+
51
+ - Use conversation history
52
+ - Analyze: content type, complexity, stakeholder needs, risk level, and creative potential
53
+
54
+ #### Smart Selection
55
+
56
+ 1. Analyze context: Content type, complexity, stakeholder needs, risk level, creative potential
57
+ 2. Parse descriptions: Understand each method's purpose from the rich descriptions in CSV
58
+ 3. Select 5 methods: Choose methods that best match the context based on their descriptions
59
+ 4. Balance approach: Include mix of foundational and specialized techniques as appropriate
60
+
61
+ ---
62
+
63
+ ### Step 2: Present Options and Handle Responses
64
+
65
+ #### Display Format
66
+
67
+ ```
68
+ **Advanced Elicitation Options**
69
+ _If party mode is active, agents will join in._
70
+ Choose a number (1-5), [r] to Reshuffle, [a] List All, or [x] to Proceed:
71
+
72
+ 1. [Method Name]
73
+ 2. [Method Name]
74
+ 3. [Method Name]
75
+ 4. [Method Name]
76
+ 5. [Method Name]
77
+ r. Reshuffle the list with 5 new options
78
+ a. List all methods with descriptions
79
+ x. Proceed / No Further Actions
80
+ ```
81
+
82
+ #### Response Handling
83
+
84
+ **Case 1-5 (User selects a numbered method):**
85
+
86
+ - Execute the selected method using its description from the CSV
87
+ - Adapt the method's complexity and output format based on the current context
88
+ - Apply the method creatively to the current section content being enhanced
89
+ - Display the enhanced version showing what the method revealed or improved
90
+ - **CRITICAL:** Ask the user if they would like to apply the changes to the doc (y/n/other) and HALT to await response.
91
+ - **CRITICAL:** ONLY if Yes, apply the changes. IF No, discard your memory of the proposed changes. If any other reply, try best to follow the instructions given by the user.
92
+ - **CRITICAL:** Re-present the same 1-5,r,x prompt to allow additional elicitations
93
+
94
+ **Case r (Reshuffle):**
95
+
96
+ - Select 5 random methods from methods.csv, present new list with same prompt format
97
+ - When selecting, try to think and pick a diverse set of methods covering different categories and approaches, with 1 and 2 being potentially the most useful for the document or section being discovered
98
+
99
+ **Case x (Proceed):**
100
+
101
+ - Complete elicitation and proceed
102
+ - Return the fully enhanced content back to create-doc.md
103
+ - The enhanced content becomes the final version for that section
104
+ - Signal completion back to create-doc.md to continue with next section
105
+
106
+ **Case a (List All):**
107
+
108
+ - List all methods with their descriptions from the CSV in a compact table
109
+ - Allow user to select any method by name or number from the full list
110
+ - After selection, execute the method as described in the Case 1-5 above
111
+
112
+ **Case: Direct Feedback:**
113
+
114
+ - Apply changes to current section content and re-present choices
115
+
116
+ **Case: Multiple Numbers:**
117
+
118
+ - Execute methods in sequence on the content, then re-offer choices
119
+
120
+ ---
121
+
122
+ ### Step 3: Execution Guidelines
123
+
124
+ - **Method execution:** Use the description from CSV to understand and apply each method
125
+ - **Output pattern:** Use the pattern as a flexible guide (e.g., "paths -> evaluation -> selection")
126
+ - **Dynamic adaptation:** Adjust complexity based on content needs (simple to sophisticated)
127
+ - **Creative application:** Interpret methods flexibly based on context while maintaining pattern consistency
128
+ - Focus on actionable insights
129
+ - **Stay relevant:** Tie elicitation to specific content being analyzed (the current section from the document being created unless user indicates otherwise)
130
+ - **Identify personas:** For single or multi-persona methods, clearly identify viewpoints, and use party members if available in memory already
131
+ - **Critical loop behavior:** Always re-offer the 1-5,r,a,x choices after each method execution
132
+ - Continue until user selects 'x' to proceed with enhanced content, confirm or ask the user what should be accepted from the session
133
+ - Each method application builds upon previous enhancements
134
+ - **Content preservation:** Track all enhancements made during elicitation
135
+ - **Iterative enhancement:** Each selected method (1-5) should:
136
+ 1. Apply to the current enhanced version of the content
137
+ 2. Show the improvements made
138
+ 3. Return to the prompt for additional elicitations or completion
@@ -0,0 +1,3 @@
1
+ canonicalId: bmad-brainstorming
2
+ type: workflow
3
+ description: "Facilitate interactive brainstorming sessions using diverse creative techniques and ideation methods"
@@ -29,23 +29,30 @@ Initialize the brainstorming workflow by detecting continuation state and settin
29
29
 
30
30
  ## INITIALIZATION SEQUENCE:
31
31
 
32
- ### 1. Check for Existing Workflow
32
+ ### 1. Check for Existing Sessions
33
33
 
34
- First, check if the output document already exists:
34
+ First, check the brainstorming sessions folder for existing sessions:
35
35
 
36
- - Look for file at `{output_folder}/brainstorming/brainstorming-session-{{date}}.md`
37
- - If exists, read the complete file including frontmatter
38
- - If not exists, this is a fresh workflow
36
+ - List all files in `{output_folder}/brainstorming/`
37
+ - **DO NOT read any file contents** - only list filenames
38
+ - If files exist, identify the most recent by date/time in the filename
39
+ - If no files exist, this is a fresh workflow
39
40
 
40
- ### 2. Handle Continuation (If Document Exists)
41
+ ### 2. Handle Existing Sessions (If Files Found)
41
42
 
42
- If the document exists and has frontmatter with `stepsCompleted`:
43
+ If existing session files are found:
43
44
 
44
- - **STOP here** and load `./step-01b-continue.md` immediately
45
- - Do not proceed with any initialization tasks
46
- - Let step-01b handle the continuation logic
45
+ - Display the most recent session filename (do NOT read its content)
46
+ - Ask the user: "Found existing session: `[filename]`. Would you like to:
47
+ **[1]** Continue this session
48
+ **[2]** Start a new session
49
+ **[3]** See all existing sessions"
47
50
 
48
- ### 3. Fresh Workflow Setup (If No Document)
51
+ - If user selects **[1]** (continue): Set `{brainstorming_session_output_file}` to that file path and load `./step-01b-continue.md`
52
+ - If user selects **[2]** (new): Generate new filename with current date/time and proceed to step 3
53
+ - If user selects **[3]** (see all): List all session filenames and ask which to continue or if new
54
+
55
+ ### 3. Fresh Workflow Setup (If No Files or User Chooses New)
49
56
 
50
57
  If no document exists or no `stepsCompleted` in frontmatter:
51
58
 
@@ -55,10 +62,10 @@ Create the brainstorming session document:
55
62
 
56
63
  ```bash
57
64
  # Create directory if needed
58
- mkdir -p "$(dirname "{output_folder}/brainstorming/brainstorming-session-{{date}}.md")"
65
+ mkdir -p "$(dirname "{brainstorming_session_output_file}")"
59
66
 
60
67
  # Initialize from template
61
- cp "{template_path}" "{output_folder}/brainstorming/brainstorming-session-{{date}}.md"
68
+ cp "{template_path}" "{brainstorming_session_output_file}"
62
69
  ```
63
70
 
64
71
  #### B. Context File Check and Loading
@@ -134,7 +141,7 @@ _[Content based on conversation about session parameters and facilitator approac
134
141
 
135
142
  ## APPEND TO DOCUMENT:
136
143
 
137
- When user selects approach, append the session overview content directly to `{output_folder}/brainstorming/brainstorming-session-{{date}}.md` using the structure from above.
144
+ When user selects approach, append the session overview content directly to `{brainstorming_session_output_file}` using the structure from above.
138
145
 
139
146
  ### E. Continue to Technique Selection
140
147
 
@@ -152,7 +159,7 @@ Which approach appeals to you most? (Enter 1-4)"
152
159
 
153
160
  #### When user selects approach number:
154
161
 
155
- - **Append initial session overview to `{output_folder}/brainstorming/brainstorming-session-{{date}}.md`**
162
+ - **Append initial session overview to `{brainstorming_session_output_file}`**
156
163
  - **Update frontmatter:** `stepsCompleted: [1]`, `selected_approach: '[selected approach]'`
157
164
  - **Load the appropriate step-02 file** based on selection
158
165
 
@@ -167,7 +174,9 @@ After user selects approach number:
167
174
 
168
175
  ## SUCCESS METRICS:
169
176
 
170
- ✅ Existing workflow detected and continuation handled properly
177
+ ✅ Existing sessions detected without reading file contents
178
+ ✅ User prompted to continue existing session or start new
179
+ ✅ Correct session file selected for continuation
171
180
  ✅ Fresh workflow initialized with correct document structure
172
181
  ✅ Session context gathered and understood clearly
173
182
  ✅ User's approach selection captured and routed correctly
@@ -176,7 +185,9 @@ After user selects approach number:
176
185
 
177
186
  ## FAILURE MODES:
178
187
 
179
- Not checking for existing document before creating new one
188
+ Reading file contents during session detection (wastes context)
189
+ ❌ Not asking user before continuing existing session
190
+ ❌ Not properly routing user's continue/new session selection
180
191
  ❌ Missing continuation detection leading to duplicate work
181
192
  ❌ Insufficient session context gathering
182
193
  ❌ Not properly routing user's approach selection
@@ -184,7 +195,9 @@ After user selects approach number:
184
195
 
185
196
  ## SESSION SETUP PROTOCOLS:
186
197
 
187
- - Always verify document existence before initialization
198
+ - Always list sessions folder WITHOUT reading file contents
199
+ - Ask user before continuing any existing session
200
+ - Only load continue step after user confirms
188
201
  - Load brain techniques CSV only when needed for technique presentation
189
202
  - Use collaborative facilitation language throughout
190
203
  - Maintain psychological safety for creative exploration
@@ -35,7 +35,7 @@ Load existing document and analyze current state:
35
35
 
36
36
  **Document Analysis:**
37
37
 
38
- - Read existing `{output_folder}/brainstorming/brainstorming-session-{{date}}.md`
38
+ - Read existing `{brainstorming_session_output_file}`
39
39
  - Examine frontmatter for `stepsCompleted`, `session_topic`, `session_goals`
40
40
  - Review content to understand session progress and outcomes
41
41
  - Identify current stage and next logical steps
@@ -1,7 +1,7 @@
1
1
  # Step 3: Interactive Technique Execution and Facilitation
2
2
 
3
3
  ---
4
- advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml'
4
+ advancedElicitationTask: '{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.md'
5
5
  ---
6
6
 
7
7
  ## MANDATORY EXECUTION RULES (READ FIRST):
@@ -296,7 +296,7 @@ After final technique element:
296
296
 
297
297
  #### If 'C' (Move to organization):
298
298
 
299
- - **Append the technique execution content to `{output_folder}/brainstorming/brainstorming-session-{{date}}.md`**
299
+ - **Append the technique execution content to `{brainstorming_session_output_file}`**
300
300
  - **Update frontmatter:** `stepsCompleted: [1, 2, 3]`
301
301
  - **Load:** `./step-04-idea-organization.md`
302
302
 
@@ -356,7 +356,7 @@ _[Short narrative describing the user and AI collaboration journey - what made t
356
356
 
357
357
  ## APPEND TO DOCUMENT:
358
358
 
359
- When user selects 'C', append the content directly to `{output_folder}/brainstorming/brainstorming-session-{{date}}.md` using the structure from above.
359
+ When user selects 'C', append the content directly to `{brainstorming_session_output_file}` using the structure from above.
360
360
 
361
361
  ## SUCCESS METRICS:
362
362
 
@@ -253,14 +253,14 @@ Provide final session wrap-up and forward guidance:
253
253
 
254
254
  #### If [C] Complete:
255
255
 
256
- - **Append the final session content to `{output_folder}/brainstorming/brainstorming-session-{{date}}.md`**
256
+ - **Append the final session content to `{brainstorming_session_output_file}`**
257
257
  - Update frontmatter: `stepsCompleted: [1, 2, 3, 4]`
258
258
  - Set `session_active: false` and `workflow_completed: true`
259
259
  - Complete workflow with positive closure message
260
260
 
261
261
  ## APPEND TO DOCUMENT:
262
262
 
263
- When user selects 'C', append the content directly to `{output_folder}/brainstorming/brainstorming-session-{{date}}.md` using the structure from step 7.
263
+ When user selects 'C', append the content directly to `{brainstorming_session_output_file}` using the structure from step 7.
264
264
 
265
265
  ## SUCCESS METRICS:
266
266
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: brainstorming
3
- description: 'Facilitate interactive brainstorming sessions using diverse creative techniques and ideation methods. Use when the user says "help me brainstorm" or "help me ideate".'
3
+ description: 'Facilitate interactive brainstorming sessions using diverse creative techniques and ideation methods. Use when the user says help me brainstorm or help me ideate.'
4
4
  context_file: '' # Optional context file path for project-specific guidance
5
5
  ---
6
6
 
@@ -45,9 +45,11 @@ Load config from `{project-root}/_bmad/core/config.yaml` and resolve:
45
45
  - `installed_path` = `{project-root}/_bmad/core/workflows/brainstorming`
46
46
  - `template_path` = `{installed_path}/template.md`
47
47
  - `brain_techniques_path` = `{installed_path}/brain-methods.csv`
48
- - `default_output_file` = `{output_folder}/brainstorming/brainstorming-session-{{date}}.md`
48
+ - `brainstorming_session_output_file` = `{output_folder}/brainstorming/brainstorming-session-{{date}}-{{time}}.md` (evaluated once at workflow start)
49
+
50
+ All steps MUST reference `{brainstorming_session_output_file}` instead of the full path pattern.
49
51
  - `context_file` = Optional context file path from workflow invocation for project-specific guidance
50
- - `advancedElicitationTask` = `{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.xml`
52
+ - `advancedElicitationTask` = `{project-root}/_bmad/core/workflows/advanced-elicitation/workflow.md`
51
53
 
52
54
  ---
53
55
 
@@ -0,0 +1,3 @@
1
+ canonicalId: bmad-party-mode
2
+ type: workflow
3
+ description: "Orchestrates group discussions between all installed BMAD agents"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: party-mode
3
- description: 'Orchestrates group discussions between all installed BMAD agents, enabling natural multi-agent conversations. Use when user requests "party mode" only.'
3
+ description: 'Orchestrates group discussions between all installed BMAD agents, enabling natural multi-agent conversations. Use when user requests party mode.'
4
4
  ---
5
5
 
6
6
  # Party Mode Workflow
@@ -8,7 +8,7 @@
8
8
  <step n="3">Remember: user's name is {user_name}</step>
9
9
  {AGENT_SPECIFIC_STEPS}
10
10
  <step n="{MENU_STEP}">Show greeting using {user_name} from config, communicate in {communication_language}, then display numbered list of ALL menu items from menu section</step>
11
- <step n="{HELP_STEP}">Let {user_name} know they can type command `/bmad-help` at any time to get advice on what to do next, and that they can combine that with what they need help with <example>`/bmad-help where should I start with an idea I have that does XYZ`</example></step>
11
+ <step n="{HELP_STEP}">Let {user_name} know they can invoke the `bmad-help` skill at any time to get advice on what to do next, and that they can combine it with what they need help with <example>Invoke the `bmad-help` skill with a question like "where should I start with an idea I have that does XYZ?"</example></step>
12
12
  <step n="{HALT_STEP}">STOP and WAIT for user input - do NOT execute menu items automatically - accept number or cmd trigger or fuzzy command match</step>
13
13
  <step n="{INPUT_STEP}">On user input: Number → process menu item[n] | Text → case-insensitive substring match | Multiple matches → ask user to clarify | No match → show "Not recognized"</step>
14
- <step n="{EXECUTE_STEP}">When processing a menu item: Check menu-handlers section below - extract any attributes from the selected menu item (workflow, exec, tmpl, data, action, validate-workflow) and follow the corresponding handler instructions</step>
14
+ <step n="{EXECUTE_STEP}">When processing a menu item: Check menu-handlers section below - extract any attributes from the selected menu item (exec, tmpl, data, action, multi) and follow the corresponding handler instructions</step>
@@ -4,10 +4,9 @@
4
4
  2. Parse all nested handlers within the multi item
5
5
  3. For each nested handler:
6
6
  - Use the 'match' attribute for fuzzy matching user input (or Exact Match of character code in brackets [])
7
- - Process based on handler attributes (exec, workflow, action)
7
+ - Process based on handler attributes (exec, action)
8
8
  4. When user input matches a handler's 'match' pattern:
9
9
  - For exec="path/to/file.md": follow the `handler type="exec"` instructions
10
- - For workflow="path/to/workflow.yaml": follow the `handler type="workflow"` instructions
11
10
  - For action="...": Perform the specified action directly
12
11
  5. Support both exact matches and fuzzy matching based on the match attribute
13
12
  6. If no handler matches, prompt user to choose from available options
@@ -1,6 +1,6 @@
1
1
  # Adversarial Review Test Suite
2
2
 
3
- Tests for the `also_consider` optional input in `review-adversarial-general.xml`.
3
+ Tests for the `also_consider` optional input in the `bmad-review-adversarial-general` skill.
4
4
 
5
5
  ## Purpose
6
6
 
@@ -19,12 +19,12 @@ All tests use `sample-content.md` - a deliberately imperfect User Authentication
19
19
 
20
20
  ## Running Tests
21
21
 
22
- For each test case in `test-cases.yaml`, invoke the adversarial review task.
22
+ For each test case in `test-cases.yaml`, invoke the adversarial review skill.
23
23
 
24
24
  ### Manual Test Invocation
25
25
 
26
26
  ```
27
- Review this content using the adversarial review task:
27
+ Review this content using the adversarial review skill:
28
28
 
29
29
  <content>
30
30
  [paste sample-content.md]
@@ -1,9 +1,9 @@
1
- # Test Cases for review-adversarial-general.xml with also_consider input
1
+ # Test Cases for bmad-review-adversarial-general skill with also_consider input
2
2
  #
3
3
  # Purpose: Evaluate how the optional also_consider input influences review findings
4
4
  # Content: All tests use sample-content.md (User Authentication API docs)
5
5
  #
6
- # To run: Manually invoke the task with each configuration and compare outputs
6
+ # To run: Manually invoke the skill with each configuration and compare outputs
7
7
 
8
8
  test_cases:
9
9
  # BASELINE - No also_consider
@@ -22,7 +22,7 @@ agent:
22
22
  action: display_help
23
23
  - trigger: start-workflow
24
24
  description: Start a workflow
25
- workflow: path/to/workflow
25
+ exec: path/to/workflow
26
26
  - trigger: execute
27
27
  description: Execute command
28
28
  exec: npm test
@@ -19,7 +19,7 @@ agent:
19
19
  menu:
20
20
  - trigger: workflow-test
21
21
  description: Test workflow command
22
- workflow: path/to/workflow
22
+ exec: path/to/workflow
23
23
  - trigger: validate-test
24
24
  description: Test validate-workflow command
25
25
  validate-workflow: path/to/validation
@@ -19,6 +19,5 @@ agent:
19
19
  menu:
20
20
  - trigger: multi-command
21
21
  description: Menu item with multiple command targets
22
- workflow: path/to/workflow
23
- exec: npm test
22
+ exec: path/to/workflow
24
23
  action: perform_action
@@ -1,3 +1,3 @@
1
1
  module,phase,name,code,sequence,workflow-file,command,required,agent,options,description,output-location,outputs,
2
- bmm,anytime,Document Project,DP,,_bmad/bmm/workflows/document-project/workflow.yaml,bmad-bmm-document-project,false,analyst,Create Mode,"Analyze project",project-knowledge,*,
2
+ bmm,anytime,Document Project,DP,,_bmad/bmm/workflows/document-project/workflow.md,bmad-bmm-document-project,false,analyst,Create Mode,"Analyze project",project-knowledge,*,
3
3
  bmm,1-analysis,Brainstorm Project,BP,10,_bmad/core/workflows/brainstorming/workflow.md,bmad-brainstorming,false,analyst,data=template.md,"Brainstorming",planning_artifacts,"session",
@@ -58,7 +58,7 @@ test('bmm-style.csv: extracts workflow-file refs with trailing commas', () => {
58
58
  const { fullPath, content } = loadFixture('valid/bmm-style.csv');
59
59
  const refs = extractCsvRefs(fullPath, content);
60
60
  assert(refs.length === 2, `Expected 2 refs, got ${refs.length}`);
61
- assert(refs[0].raw === '_bmad/bmm/workflows/document-project/workflow.yaml', `Wrong raw[0]: ${refs[0].raw}`);
61
+ assert(refs[0].raw === '_bmad/bmm/workflows/document-project/workflow.md', `Wrong raw[0]: ${refs[0].raw}`);
62
62
  assert(refs[1].raw === '_bmad/core/workflows/brainstorming/workflow.md', `Wrong raw[1]: ${refs[1].raw}`);
63
63
  assert(refs[0].type === 'project-root', `Wrong type: ${refs[0].type}`);
64
64
  assert(refs[0].line === 2, `Wrong line for row 0: ${refs[0].line}`);
@@ -0,0 +1,154 @@
1
+ /**
2
+ * install_to_bmad Flag — Design Contract Tests
3
+ *
4
+ * Unit tests against the functions that implement the install_to_bmad flag.
5
+ * These nail down the 4 core design decisions:
6
+ *
7
+ * 1. true/omitted → skill stays in _bmad/ (default behavior)
8
+ * 2. false → skill removed from _bmad/ after IDE install
9
+ * 3. No platform → no cleanup runs (cleanup lives in installVerbatimSkills)
10
+ * 4. Mixed flags → each skill evaluated independently
11
+ *
12
+ * Usage: node test/test-install-to-bmad.js
13
+ */
14
+
15
+ const path = require('node:path');
16
+ const os = require('node:os');
17
+ const fs = require('fs-extra');
18
+ const { loadSkillManifest, getInstallToBmad } = require('../tools/cli/installers/lib/ide/shared/skill-manifest');
19
+
20
+ // ANSI colors
21
+ const colors = {
22
+ reset: '\u001B[0m',
23
+ green: '\u001B[32m',
24
+ red: '\u001B[31m',
25
+ yellow: '\u001B[33m',
26
+ cyan: '\u001B[36m',
27
+ dim: '\u001B[2m',
28
+ };
29
+
30
+ let passed = 0;
31
+ let failed = 0;
32
+
33
+ function assert(condition, testName, errorMessage = '') {
34
+ if (condition) {
35
+ console.log(`${colors.green}✓${colors.reset} ${testName}`);
36
+ passed++;
37
+ } else {
38
+ console.log(`${colors.red}✗${colors.reset} ${testName}`);
39
+ if (errorMessage) {
40
+ console.log(` ${colors.dim}${errorMessage}${colors.reset}`);
41
+ }
42
+ failed++;
43
+ }
44
+ }
45
+
46
+ async function runTests() {
47
+ console.log(`${colors.cyan}========================================`);
48
+ console.log('install_to_bmad — Design Contract Tests');
49
+ console.log(`========================================${colors.reset}\n`);
50
+
51
+ // ============================================================
52
+ // 1. true/omitted → getInstallToBmad returns true (keep in _bmad/)
53
+ // ============================================================
54
+ console.log(`${colors.yellow}Design decision 1: true or omitted → skill stays in _bmad/${colors.reset}\n`);
55
+
56
+ // Null manifest (no bmad-skill-manifest.yaml) → true
57
+ assert(getInstallToBmad(null, 'workflow.md') === true, 'null manifest defaults to true');
58
+
59
+ // Single-entry, flag omitted → true
60
+ assert(
61
+ getInstallToBmad({ __single: { type: 'skill' } }, 'workflow.md') === true,
62
+ 'single-entry manifest with flag omitted defaults to true',
63
+ );
64
+
65
+ // Single-entry, explicit true → true
66
+ assert(
67
+ getInstallToBmad({ __single: { type: 'skill', install_to_bmad: true } }, 'workflow.md') === true,
68
+ 'single-entry manifest with explicit true returns true',
69
+ );
70
+
71
+ console.log('');
72
+
73
+ // ============================================================
74
+ // 2. false → getInstallToBmad returns false (remove from _bmad/)
75
+ // ============================================================
76
+ console.log(`${colors.yellow}Design decision 2: false → skill removed from _bmad/${colors.reset}\n`);
77
+
78
+ // Single-entry, explicit false → false
79
+ assert(
80
+ getInstallToBmad({ __single: { type: 'skill', install_to_bmad: false } }, 'workflow.md') === false,
81
+ 'single-entry manifest with explicit false returns false',
82
+ );
83
+
84
+ // loadSkillManifest round-trip: YAML with false is preserved through load
85
+ {
86
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'bmad-itb-'));
87
+ await fs.writeFile(path.join(tmpDir, 'bmad-skill-manifest.yaml'), 'type: skill\ninstall_to_bmad: false\n');
88
+ const loaded = await loadSkillManifest(tmpDir);
89
+ assert(getInstallToBmad(loaded, 'workflow.md') === false, 'loadSkillManifest preserves install_to_bmad: false through round-trip');
90
+ await fs.remove(tmpDir);
91
+ }
92
+
93
+ console.log('');
94
+
95
+ // ============================================================
96
+ // 3. No platform → cleanup only runs inside installVerbatimSkills
97
+ // (This is a design invariant: getInstallToBmad is only consulted
98
+ // during IDE install. Without a platform, the flag has no effect.)
99
+ // ============================================================
100
+ console.log(`${colors.yellow}Design decision 3: flag is a per-skill property, not a pipeline gate${colors.reset}\n`);
101
+
102
+ // The flag value is stored but doesn't trigger any side effects by itself.
103
+ // Cleanup is driven by reading the CSV column inside installVerbatimSkills.
104
+ // We verify the flag is just data — getInstallToBmad doesn't touch the filesystem.
105
+ {
106
+ const manifest = { __single: { type: 'skill', install_to_bmad: false } };
107
+ const result = getInstallToBmad(manifest, 'workflow.md');
108
+ assert(typeof result === 'boolean', 'getInstallToBmad returns a boolean (pure data, no side effects)');
109
+ assert(result === false, 'false value is faithfully returned for consumer to act on');
110
+ }
111
+
112
+ console.log('');
113
+
114
+ // ============================================================
115
+ // 4. Mixed flags → each skill evaluated independently
116
+ // ============================================================
117
+ console.log(`${colors.yellow}Design decision 4: mixed flags — each skill independent${colors.reset}\n`);
118
+
119
+ // Multi-entry manifest: different files can have different flags
120
+ {
121
+ const manifest = {
122
+ 'workflow.md': { type: 'skill', install_to_bmad: false },
123
+ 'other.md': { type: 'skill', install_to_bmad: true },
124
+ };
125
+ assert(getInstallToBmad(manifest, 'workflow.md') === false, 'multi-entry: workflow.md with false returns false');
126
+ assert(getInstallToBmad(manifest, 'other.md') === true, 'multi-entry: other.md with true returns true');
127
+ assert(getInstallToBmad(manifest, 'unknown.md') === true, 'multi-entry: unknown file defaults to true');
128
+ }
129
+
130
+ console.log('');
131
+
132
+ // ============================================================
133
+ // Summary
134
+ // ============================================================
135
+ console.log(`${colors.cyan}========================================`);
136
+ console.log('Results:');
137
+ console.log(` Passed: ${colors.green}${passed}${colors.reset}`);
138
+ console.log(` Failed: ${colors.red}${failed}${colors.reset}`);
139
+ console.log(`========================================${colors.reset}\n`);
140
+
141
+ if (failed === 0) {
142
+ console.log(`${colors.green}All install_to_bmad contract tests passed!${colors.reset}\n`);
143
+ process.exit(0);
144
+ } else {
145
+ console.log(`${colors.red}Some install_to_bmad contract tests failed${colors.reset}\n`);
146
+ process.exit(1);
147
+ }
148
+ }
149
+
150
+ runTests().catch((error) => {
151
+ console.error(`${colors.red}Test runner failed:${colors.reset}`, error.message);
152
+ console.error(error.stack);
153
+ process.exit(1);
154
+ });