ma-agents 3.4.9 → 3.5.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 (826) hide show
  1. package/AiAudit.md +7 -0
  2. package/README.md +78 -29
  3. package/_bmad-output/implementation-artifacts/17-10-rework-generate-backlog.md +237 -0
  4. package/_bmad-output/implementation-artifacts/17-11-rework-add-to-sprint.md +339 -0
  5. package/_bmad-output/implementation-artifacts/17-12-rework-remove-from-sprint.md +348 -0
  6. package/_bmad-output/implementation-artifacts/17-13-rework-sprint-status-view.md +383 -0
  7. package/_bmad-output/implementation-artifacts/17-14-rework-cleanup-done.md +348 -0
  8. package/_bmad-output/implementation-artifacts/17-15-rework-bmad-sprint-planning.md +385 -0
  9. package/_bmad-output/implementation-artifacts/17-16-rework-add-sprint.md +362 -0
  10. package/_bmad-output/implementation-artifacts/17-17-rework-modify-sprint.md +477 -0
  11. package/_bmad-output/implementation-artifacts/17-18-rework-bmad-dev-story.md +377 -0
  12. package/_bmad-output/implementation-artifacts/17-19-rework-story-status-lookup.md +301 -0
  13. package/_bmad-output/implementation-artifacts/17-20-rework-bmad-sprint-status.md +508 -0
  14. package/_bmad-output/implementation-artifacts/17-21-new-close-sprint.md +455 -0
  15. package/_bmad-output/implementation-artifacts/17-22-jira-adapter-pattern.md +325 -0
  16. package/_bmad-output/implementation-artifacts/17-23-migration-deprecation-old-files.md +403 -0
  17. package/_bmad-output/implementation-artifacts/17-24-rework-prioritize-backlog.md +344 -0
  18. package/_bmad-output/implementation-artifacts/17-9-unified-sprint-status-schema.md +279 -0
  19. package/_bmad-output/implementation-artifacts/4-1-vs-agent-registry-entry.md +173 -0
  20. package/_bmad-output/implementation-artifacts/4-2-vs-skill-template-format.md +129 -0
  21. package/_bmad-output/implementation-artifacts/5-5-explicit-parameter-passing.md +274 -0
  22. package/_bmad-output/implementation-artifacts/5-6-fix-space-in-path-bug.md +186 -0
  23. package/_bmad-output/implementation-artifacts/7-1-test-infrastructure-setup.md +144 -0
  24. package/_bmad-output/implementation-artifacts/7-2-installer-pipeline-tests.md +132 -0
  25. package/_bmad-output/implementation-artifacts/7-3-bmad-pipeline-tests.md +119 -0
  26. package/_bmad-output/implementation-artifacts/7-4-cli-command-routing-tests.md +162 -0
  27. package/_bmad-output/implementation-artifacts/deferred-work.md +9 -0
  28. package/_bmad-output/implementation-artifacts/done/1-1-ci-cd-yes-flag.md +200 -0
  29. package/_bmad-output/implementation-artifacts/done/10-1-ensure-bmad-output-not-gitignored.md +172 -0
  30. package/_bmad-output/implementation-artifacts/done/10-2-document-bmad-output-policy.md +102 -0
  31. package/_bmad-output/implementation-artifacts/done/11-1-auto-bug-detection-skill.md +119 -0
  32. package/_bmad-output/implementation-artifacts/done/11-2-bug-story-extension-workflow.md +132 -0
  33. package/_bmad-output/implementation-artifacts/done/11-3-integrate-bug-detection-code-review.md +111 -0
  34. package/_bmad-output/implementation-artifacts/done/12-1-add-sprint-workflow.md +126 -0
  35. package/_bmad-output/implementation-artifacts/done/12-2-add-to-sprint-workflow.md +137 -0
  36. package/_bmad-output/implementation-artifacts/done/12-3-modify-sprint-workflow.md +127 -0
  37. package/_bmad-output/implementation-artifacts/done/12-4-sprint-status-assigned-items.md +129 -0
  38. package/_bmad-output/implementation-artifacts/done/13-1-project-context-template-and-generator.md +179 -0
  39. package/_bmad-output/implementation-artifacts/done/13-2-install-pipeline-integration.md +138 -0
  40. package/_bmad-output/implementation-artifacts/done/13-3-bmad-critical-actions-update.md +150 -0
  41. package/_bmad-output/implementation-artifacts/done/13-4-retrospective-expansion-trigger.md +128 -0
  42. package/_bmad-output/implementation-artifacts/done/13-5-document-project-context-generation.md +118 -0
  43. package/_bmad-output/implementation-artifacts/done/15-1-bump-bmad-method-to-6-2-1.md +132 -0
  44. package/_bmad-output/implementation-artifacts/done/15-2-restructure-extension-module.md +174 -0
  45. package/_bmad-output/implementation-artifacts/done/15-3-convert-custom-agents-to-skill-folders.md +183 -0
  46. package/_bmad-output/implementation-artifacts/done/15-4-convert-mil498-workflows-to-skill-md.md +252 -0
  47. package/_bmad-output/implementation-artifacts/done/15-5-convert-sre-devops-cyber-workflows.md +232 -0
  48. package/_bmad-output/implementation-artifacts/done/15-6-separate-built-in-agent-customizations.md +163 -0
  49. package/_bmad-output/implementation-artifacts/done/15-7-migration-detection-and-upgrade-path.md +133 -0
  50. package/_bmad-output/implementation-artifacts/done/15-8-validate-migrated-agents-and-workflows.md +172 -0
  51. package/_bmad-output/implementation-artifacts/done/15-8-validation-report.md +342 -0
  52. package/_bmad-output/implementation-artifacts/done/16-1-repository-layout-wizard.md +223 -0
  53. package/_bmad-output/implementation-artifacts/done/16-2-config-storage-and-cross-reference.md +180 -0
  54. package/_bmad-output/implementation-artifacts/done/16-3-project-context-multi-repo-section.md +136 -0
  55. package/_bmad-output/implementation-artifacts/done/16-4-validate-cross-repo-path-resolution.md +137 -0
  56. package/_bmad-output/implementation-artifacts/done/16-4-validation-report.md +79 -0
  57. package/_bmad-output/implementation-artifacts/done/16-5-fix-config-lost-on-update.md +110 -0
  58. package/_bmad-output/implementation-artifacts/done/16-6-repo-sync-check-skill.md +116 -0
  59. package/_bmad-output/implementation-artifacts/done/16-7-portable-path-storage.md +109 -0
  60. package/_bmad-output/implementation-artifacts/done/16-8-cicd-remote-mode.md +97 -0
  61. package/_bmad-output/implementation-artifacts/done/16-9-reconfigure-layout-workflow.md +125 -0
  62. package/_bmad-output/implementation-artifacts/done/17-1-sprint-entity-model.md +322 -0
  63. package/_bmad-output/implementation-artifacts/done/17-2-flat-backlog-model.md +264 -0
  64. package/_bmad-output/implementation-artifacts/done/17-3-bug-as-story-type.md +208 -0
  65. package/_bmad-output/implementation-artifacts/done/17-4-backlog-to-sprint-workflow.md +209 -0
  66. package/_bmad-output/implementation-artifacts/done/17-5-sprint-to-backlog-workflow.md +221 -0
  67. package/_bmad-output/implementation-artifacts/done/17-6-done-item-cleanup.md +273 -0
  68. package/_bmad-output/implementation-artifacts/done/17-7-multi-criteria-prioritization.md +235 -0
  69. package/_bmad-output/implementation-artifacts/done/17-8-rework-sprint-status-display.md +285 -0
  70. package/_bmad-output/implementation-artifacts/done/2-1-cpp-coding-standards-skill.md +188 -0
  71. package/_bmad-output/implementation-artifacts/done/2-2-csharp-coding-standards-skill.md +211 -0
  72. package/_bmad-output/implementation-artifacts/done/2-3-python-coding-standards-skill.md +189 -0
  73. package/_bmad-output/implementation-artifacts/done/3-1-skill-scaffolding-tool.md +184 -0
  74. package/_bmad-output/implementation-artifacts/done/3-2-skill-validation-tool.md +178 -0
  75. package/_bmad-output/implementation-artifacts/done/3-3-mandatory-skill-designation.md +136 -0
  76. package/_bmad-output/implementation-artifacts/done/3-4-bmad-persona-customization-tooling.md +141 -0
  77. package/_bmad-output/implementation-artifacts/done/3-5-specialized-agent-development-tooling.md +145 -0
  78. package/_bmad-output/implementation-artifacts/done/5-1-bmad-method-direct-dependency.md +188 -0
  79. package/_bmad-output/implementation-artifacts/done/5-2-bmad-cache-build-script.md +219 -0
  80. package/_bmad-output/implementation-artifacts/done/5-3-pre-populate-bmad-cache.md +234 -0
  81. package/_bmad-output/implementation-artifacts/done/5-4-validate-bundled-installation.md +274 -0
  82. package/_bmad-output/implementation-artifacts/done/6-1-methodology-presentation-bundle.md +173 -0
  83. package/_bmad-output/implementation-artifacts/done/8-1-move-instruction-injection-to-top.md +131 -0
  84. package/_bmad-output/implementation-artifacts/done/8-2-agent-aware-injection-strategy.md +124 -0
  85. package/_bmad-output/implementation-artifacts/done/8-3-create-bmad-extension-module.md +187 -0
  86. package/_bmad-output/implementation-artifacts/done/8-4-integration-verification.md +102 -0
  87. package/_bmad-output/implementation-artifacts/done/8-5-per-agent-enforcement-hooks-research.md +126 -0
  88. package/_bmad-output/implementation-artifacts/done/8-6-context-persistence-research.md +101 -0
  89. package/_bmad-output/implementation-artifacts/done/9-1-register-opencode-agent.md +73 -0
  90. package/_bmad-output/implementation-artifacts/done/9-2-json-merge-injection.md +91 -0
  91. package/_bmad-output/implementation-artifacts/done/9-3-json-merge-existing.md +113 -0
  92. package/_bmad-output/implementation-artifacts/done/9-4-json-error-handling.md +90 -0
  93. package/_bmad-output/implementation-artifacts/epic-11-12-shared-guardrails.md +53 -0
  94. package/_bmad-output/implementation-artifacts/epic-15-adversarial-fixes.md +287 -0
  95. package/_bmad-output/implementation-artifacts/epic-16-adversarial-review.md +49 -0
  96. package/_bmad-output/implementation-artifacts/epic-16-edge-case-review.md +230 -0
  97. package/_bmad-output/implementation-artifacts/epic-17-adversarial-review.md +37 -0
  98. package/_bmad-output/implementation-artifacts/epic-17-edge-case-review.md +140 -0
  99. package/_bmad-output/implementation-artifacts/sprint-status.yaml +83 -0
  100. package/_bmad-output/methodology/BMAD_AI_Development_Training.pptx +0 -0
  101. package/_bmad-output/methodology/version.json +7 -0
  102. package/_bmad-output/planning-artifacts/adapter-pattern-spec.md +508 -0
  103. package/_bmad-output/planning-artifacts/architecture.md +1619 -0
  104. package/_bmad-output/planning-artifacts/domain-research-roocode-2026-03-31.md +295 -0
  105. package/_bmad-output/planning-artifacts/epics.md +3287 -0
  106. package/_bmad-output/planning-artifacts/mil498-workflow-audit.md +290 -0
  107. package/_bmad-output/planning-artifacts/prd.md +684 -0
  108. package/_bmad-output/planning-artifacts/product-brief-agents-2026-03-08.md +214 -0
  109. package/_bmad-output/planning-artifacts/sprint-status-schema.md +506 -0
  110. package/_bmad-output/project-context.md +47 -0
  111. package/lib/bmad-extension/module-help.csv +26 -4
  112. package/lib/bmad-extension/skills/add-sprint/SKILL.md +126 -72
  113. package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +124 -96
  114. package/{.opencode/skills/add-to-sprint → lib/bmad-extension/skills/bmad-dev-story}/bmad-skill-manifest.yaml +1 -1
  115. package/{.opencode → lib/bmad-extension}/skills/bmad-dev-story/checklist.md +13 -13
  116. package/{.opencode → lib/bmad-extension}/skills/bmad-dev-story/workflow.md +103 -44
  117. package/lib/bmad-extension/skills/bmad-ma-agent-mil498/SKILL.md +2 -1
  118. package/lib/bmad-extension/skills/bmad-sprint-planning/SKILL.md +6 -0
  119. package/lib/bmad-extension/skills/bmad-sprint-planning/bmad-skill-manifest.yaml +3 -0
  120. package/lib/bmad-extension/skills/bmad-sprint-planning/checklist.md +74 -0
  121. package/lib/bmad-extension/skills/bmad-sprint-planning/sprint-status-template.yaml +89 -0
  122. package/lib/bmad-extension/skills/bmad-sprint-planning/workflow.md +372 -0
  123. package/lib/bmad-extension/skills/bmad-sprint-status/SKILL.md +6 -0
  124. package/{.opencode/skills/create-bug-story → lib/bmad-extension/skills/bmad-sprint-status}/bmad-skill-manifest.yaml +1 -1
  125. package/lib/bmad-extension/skills/bmad-sprint-status/workflow.md +434 -0
  126. package/lib/bmad-extension/skills/cleanup-done/SKILL.md +215 -0
  127. package/lib/bmad-extension/skills/close-sprint/SKILL.md +379 -0
  128. package/{.opencode/skills/add-sprint → lib/bmad-extension/skills/close-sprint}/bmad-skill-manifest.yaml +1 -1
  129. package/lib/bmad-extension/skills/generate-backlog/SKILL.md +195 -0
  130. package/lib/bmad-extension/skills/mil498-requirement-quality/SKILL.md +105 -0
  131. package/lib/bmad-extension/skills/mil498-requirement-quality/bmad-skill-manifest.yaml +5 -0
  132. package/lib/bmad-extension/skills/mil498-ssdd/prompts/05-validate.md +4 -0
  133. package/lib/bmad-extension/skills/modify-sprint/SKILL.md +227 -175
  134. package/lib/bmad-extension/skills/prioritize-backlog/SKILL.md +217 -0
  135. package/lib/bmad-extension/skills/remove-from-sprint/SKILL.md +184 -0
  136. package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +165 -190
  137. package/lib/bmad-extension/workflows/add-sprint/workflow.md +125 -71
  138. package/lib/bmad-extension/workflows/add-to-sprint/workflow.md +123 -95
  139. package/lib/bmad-extension/workflows/modify-sprint/workflow.md +228 -176
  140. package/lib/bmad-extension/workflows/remove-from-sprint/workflow.md +164 -0
  141. package/lib/bmad-extension/workflows/sprint-status-view/workflow.md +162 -189
  142. package/mil498/README.md +4 -0
  143. package/out.txt +0 -0
  144. package/package.json +1 -1
  145. package/skills/add-sprint/SKILL.md +165 -0
  146. package/skills/add-sprint/skill.json +7 -0
  147. package/skills/add-to-sprint/SKILL.md +231 -0
  148. package/skills/add-to-sprint/skill.json +7 -0
  149. package/skills/bmad-sprint-planning/SKILL.md +321 -0
  150. package/skills/bmad-sprint-planning/skill.json +7 -0
  151. package/skills/bmad-sprint-status/SKILL.md +273 -0
  152. package/skills/bmad-sprint-status/skill.json +7 -0
  153. package/skills/cleanup-done/SKILL.md +203 -0
  154. package/skills/cleanup-done/skill.json +7 -0
  155. package/skills/close-sprint/SKILL.md +370 -0
  156. package/skills/close-sprint/skill.json +7 -0
  157. package/skills/generate-backlog/SKILL.md +178 -0
  158. package/skills/generate-backlog/skill.json +7 -0
  159. package/skills/modify-sprint/SKILL.md +302 -0
  160. package/skills/modify-sprint/skill.json +7 -0
  161. package/skills/prioritize-backlog/SKILL.md +203 -0
  162. package/skills/prioritize-backlog/skill.json +7 -0
  163. package/skills/remove-from-sprint/SKILL.md +174 -0
  164. package/skills/remove-from-sprint/skill.json +7 -0
  165. package/skills/sprint-status-view/SKILL.md +173 -0
  166. package/skills/sprint-status-view/skill.json +7 -0
  167. package/skills/story-status-lookup/SKILL.md +21 -6
  168. package/skills/story-status-lookup/skill.json +2 -2
  169. package/test/extension-module-restructure.test.js +12 -11
  170. package/test/migration-validation.test.js +10 -10
  171. package/.opencode/skills/.ma-agents.json +0 -241
  172. package/.opencode/skills/MANIFEST.yaml +0 -254
  173. package/.opencode/skills/add-sprint/SKILL.md +0 -207
  174. package/.opencode/skills/add-to-sprint/SKILL.md +0 -189
  175. package/.opencode/skills/ai-audit-trail/SKILL.md +0 -23
  176. package/.opencode/skills/auto-bug-detection/SKILL.md +0 -169
  177. package/.opencode/skills/bmad-advanced-elicitation/SKILL.md +0 -137
  178. package/.opencode/skills/bmad-advanced-elicitation/methods.csv +0 -51
  179. package/.opencode/skills/bmad-agent-analyst/SKILL.md +0 -56
  180. package/.opencode/skills/bmad-agent-analyst/bmad-skill-manifest.yaml +0 -11
  181. package/.opencode/skills/bmad-agent-architect/SKILL.md +0 -52
  182. package/.opencode/skills/bmad-agent-architect/bmad-skill-manifest.yaml +0 -11
  183. package/.opencode/skills/bmad-agent-dev/SKILL.md +0 -62
  184. package/.opencode/skills/bmad-agent-dev/bmad-skill-manifest.yaml +0 -11
  185. package/.opencode/skills/bmad-agent-pm/SKILL.md +0 -57
  186. package/.opencode/skills/bmad-agent-pm/bmad-skill-manifest.yaml +0 -11
  187. package/.opencode/skills/bmad-agent-qa/SKILL.md +0 -59
  188. package/.opencode/skills/bmad-agent-qa/bmad-skill-manifest.yaml +0 -11
  189. package/.opencode/skills/bmad-agent-quick-flow-solo-dev/SKILL.md +0 -51
  190. package/.opencode/skills/bmad-agent-quick-flow-solo-dev/bmad-skill-manifest.yaml +0 -11
  191. package/.opencode/skills/bmad-agent-sm/SKILL.md +0 -53
  192. package/.opencode/skills/bmad-agent-sm/bmad-skill-manifest.yaml +0 -11
  193. package/.opencode/skills/bmad-agent-tech-writer/SKILL.md +0 -55
  194. package/.opencode/skills/bmad-agent-tech-writer/bmad-skill-manifest.yaml +0 -11
  195. package/.opencode/skills/bmad-agent-tech-writer/explain-concept.md +0 -20
  196. package/.opencode/skills/bmad-agent-tech-writer/mermaid-gen.md +0 -20
  197. package/.opencode/skills/bmad-agent-tech-writer/validate-doc.md +0 -19
  198. package/.opencode/skills/bmad-agent-tech-writer/write-document.md +0 -20
  199. package/.opencode/skills/bmad-agent-ux-designer/SKILL.md +0 -53
  200. package/.opencode/skills/bmad-agent-ux-designer/bmad-skill-manifest.yaml +0 -11
  201. package/.opencode/skills/bmad-brainstorming/SKILL.md +0 -6
  202. package/.opencode/skills/bmad-brainstorming/brain-methods.csv +0 -62
  203. package/.opencode/skills/bmad-brainstorming/steps/step-01-session-setup.md +0 -214
  204. package/.opencode/skills/bmad-brainstorming/steps/step-01b-continue.md +0 -124
  205. package/.opencode/skills/bmad-brainstorming/steps/step-02a-user-selected.md +0 -229
  206. package/.opencode/skills/bmad-brainstorming/steps/step-02b-ai-recommended.md +0 -239
  207. package/.opencode/skills/bmad-brainstorming/steps/step-02c-random-selection.md +0 -211
  208. package/.opencode/skills/bmad-brainstorming/steps/step-02d-progressive-flow.md +0 -266
  209. package/.opencode/skills/bmad-brainstorming/steps/step-03-technique-execution.md +0 -401
  210. package/.opencode/skills/bmad-brainstorming/steps/step-04-idea-organization.md +0 -305
  211. package/.opencode/skills/bmad-brainstorming/template.md +0 -15
  212. package/.opencode/skills/bmad-brainstorming/workflow.md +0 -53
  213. package/.opencode/skills/bmad-check-implementation-readiness/SKILL.md +0 -6
  214. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +0 -179
  215. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +0 -168
  216. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +0 -169
  217. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +0 -129
  218. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +0 -241
  219. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +0 -126
  220. package/.opencode/skills/bmad-check-implementation-readiness/templates/readiness-report-template.md +0 -4
  221. package/.opencode/skills/bmad-check-implementation-readiness/workflow.md +0 -49
  222. package/.opencode/skills/bmad-cis-design-thinking/SKILL.md +0 -6
  223. package/.opencode/skills/bmad-cis-design-thinking/bmad-skill-manifest.yaml +0 -1
  224. package/.opencode/skills/bmad-cis-design-thinking/design-methods.csv +0 -31
  225. package/.opencode/skills/bmad-cis-design-thinking/template.md +0 -111
  226. package/.opencode/skills/bmad-cis-design-thinking/workflow.md +0 -242
  227. package/.opencode/skills/bmad-cis-innovation-strategy/SKILL.md +0 -6
  228. package/.opencode/skills/bmad-cis-innovation-strategy/bmad-skill-manifest.yaml +0 -1
  229. package/.opencode/skills/bmad-cis-innovation-strategy/innovation-frameworks.csv +0 -31
  230. package/.opencode/skills/bmad-cis-innovation-strategy/template.md +0 -189
  231. package/.opencode/skills/bmad-cis-innovation-strategy/workflow.md +0 -315
  232. package/.opencode/skills/bmad-cis-problem-solving/SKILL.md +0 -6
  233. package/.opencode/skills/bmad-cis-problem-solving/bmad-skill-manifest.yaml +0 -1
  234. package/.opencode/skills/bmad-cis-problem-solving/solving-methods.csv +0 -31
  235. package/.opencode/skills/bmad-cis-problem-solving/template.md +0 -165
  236. package/.opencode/skills/bmad-cis-problem-solving/workflow.md +0 -291
  237. package/.opencode/skills/bmad-cis-storytelling/SKILL.md +0 -6
  238. package/.opencode/skills/bmad-cis-storytelling/bmad-skill-manifest.yaml +0 -1
  239. package/.opencode/skills/bmad-cis-storytelling/story-types.csv +0 -26
  240. package/.opencode/skills/bmad-cis-storytelling/template.md +0 -113
  241. package/.opencode/skills/bmad-cis-storytelling/workflow.md +0 -321
  242. package/.opencode/skills/bmad-code-review/SKILL.md +0 -6
  243. package/.opencode/skills/bmad-code-review/steps/step-01-gather-context.md +0 -62
  244. package/.opencode/skills/bmad-code-review/steps/step-02-review.md +0 -34
  245. package/.opencode/skills/bmad-code-review/steps/step-03-triage.md +0 -49
  246. package/.opencode/skills/bmad-code-review/steps/step-04-present.md +0 -129
  247. package/.opencode/skills/bmad-code-review/workflow.md +0 -55
  248. package/.opencode/skills/bmad-correct-course/SKILL.md +0 -6
  249. package/.opencode/skills/bmad-correct-course/checklist.md +0 -288
  250. package/.opencode/skills/bmad-correct-course/workflow.md +0 -267
  251. package/.opencode/skills/bmad-create-architecture/SKILL.md +0 -6
  252. package/.opencode/skills/bmad-create-architecture/architecture-decision-template.md +0 -12
  253. package/.opencode/skills/bmad-create-architecture/data/domain-complexity.csv +0 -13
  254. package/.opencode/skills/bmad-create-architecture/data/project-types.csv +0 -7
  255. package/.opencode/skills/bmad-create-architecture/steps/step-01-init.md +0 -153
  256. package/.opencode/skills/bmad-create-architecture/steps/step-01b-continue.md +0 -173
  257. package/.opencode/skills/bmad-create-architecture/steps/step-02-context.md +0 -224
  258. package/.opencode/skills/bmad-create-architecture/steps/step-03-starter.md +0 -329
  259. package/.opencode/skills/bmad-create-architecture/steps/step-04-decisions.md +0 -318
  260. package/.opencode/skills/bmad-create-architecture/steps/step-05-patterns.md +0 -359
  261. package/.opencode/skills/bmad-create-architecture/steps/step-06-structure.md +0 -379
  262. package/.opencode/skills/bmad-create-architecture/steps/step-07-validation.md +0 -359
  263. package/.opencode/skills/bmad-create-architecture/steps/step-08-complete.md +0 -76
  264. package/.opencode/skills/bmad-create-architecture/workflow.md +0 -38
  265. package/.opencode/skills/bmad-create-epics-and-stories/SKILL.md +0 -6
  266. package/.opencode/skills/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +0 -255
  267. package/.opencode/skills/bmad-create-epics-and-stories/steps/step-02-design-epics.md +0 -212
  268. package/.opencode/skills/bmad-create-epics-and-stories/steps/step-03-create-stories.md +0 -255
  269. package/.opencode/skills/bmad-create-epics-and-stories/steps/step-04-final-validation.md +0 -131
  270. package/.opencode/skills/bmad-create-epics-and-stories/templates/epics-template.md +0 -61
  271. package/.opencode/skills/bmad-create-epics-and-stories/workflow.md +0 -53
  272. package/.opencode/skills/bmad-create-prd/SKILL.md +0 -6
  273. package/.opencode/skills/bmad-create-prd/data/domain-complexity.csv +0 -15
  274. package/.opencode/skills/bmad-create-prd/data/prd-purpose.md +0 -197
  275. package/.opencode/skills/bmad-create-prd/data/project-types.csv +0 -11
  276. package/.opencode/skills/bmad-create-prd/steps-c/step-01-init.md +0 -178
  277. package/.opencode/skills/bmad-create-prd/steps-c/step-01b-continue.md +0 -161
  278. package/.opencode/skills/bmad-create-prd/steps-c/step-02-discovery.md +0 -208
  279. package/.opencode/skills/bmad-create-prd/steps-c/step-02b-vision.md +0 -142
  280. package/.opencode/skills/bmad-create-prd/steps-c/step-02c-executive-summary.md +0 -158
  281. package/.opencode/skills/bmad-create-prd/steps-c/step-03-success.md +0 -214
  282. package/.opencode/skills/bmad-create-prd/steps-c/step-04-journeys.md +0 -201
  283. package/.opencode/skills/bmad-create-prd/steps-c/step-05-domain.md +0 -194
  284. package/.opencode/skills/bmad-create-prd/steps-c/step-06-innovation.md +0 -211
  285. package/.opencode/skills/bmad-create-prd/steps-c/step-07-project-type.md +0 -222
  286. package/.opencode/skills/bmad-create-prd/steps-c/step-08-scoping.md +0 -216
  287. package/.opencode/skills/bmad-create-prd/steps-c/step-09-functional.md +0 -219
  288. package/.opencode/skills/bmad-create-prd/steps-c/step-10-nonfunctional.md +0 -230
  289. package/.opencode/skills/bmad-create-prd/steps-c/step-11-polish.md +0 -221
  290. package/.opencode/skills/bmad-create-prd/steps-c/step-12-complete.md +0 -115
  291. package/.opencode/skills/bmad-create-prd/templates/prd-template.md +0 -10
  292. package/.opencode/skills/bmad-create-prd/workflow.md +0 -62
  293. package/.opencode/skills/bmad-create-story/SKILL.md +0 -6
  294. package/.opencode/skills/bmad-create-story/checklist.md +0 -357
  295. package/.opencode/skills/bmad-create-story/discover-inputs.md +0 -88
  296. package/.opencode/skills/bmad-create-story/template.md +0 -49
  297. package/.opencode/skills/bmad-create-story/workflow.md +0 -380
  298. package/.opencode/skills/bmad-create-ux-design/SKILL.md +0 -6
  299. package/.opencode/skills/bmad-create-ux-design/steps/step-01-init.md +0 -135
  300. package/.opencode/skills/bmad-create-ux-design/steps/step-01b-continue.md +0 -127
  301. package/.opencode/skills/bmad-create-ux-design/steps/step-02-discovery.md +0 -190
  302. package/.opencode/skills/bmad-create-ux-design/steps/step-03-core-experience.md +0 -217
  303. package/.opencode/skills/bmad-create-ux-design/steps/step-04-emotional-response.md +0 -220
  304. package/.opencode/skills/bmad-create-ux-design/steps/step-05-inspiration.md +0 -235
  305. package/.opencode/skills/bmad-create-ux-design/steps/step-06-design-system.md +0 -253
  306. package/.opencode/skills/bmad-create-ux-design/steps/step-07-defining-experience.md +0 -255
  307. package/.opencode/skills/bmad-create-ux-design/steps/step-08-visual-foundation.md +0 -225
  308. package/.opencode/skills/bmad-create-ux-design/steps/step-09-design-directions.md +0 -225
  309. package/.opencode/skills/bmad-create-ux-design/steps/step-10-user-journeys.md +0 -242
  310. package/.opencode/skills/bmad-create-ux-design/steps/step-11-component-strategy.md +0 -249
  311. package/.opencode/skills/bmad-create-ux-design/steps/step-12-ux-patterns.md +0 -238
  312. package/.opencode/skills/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +0 -265
  313. package/.opencode/skills/bmad-create-ux-design/steps/step-14-complete.md +0 -171
  314. package/.opencode/skills/bmad-create-ux-design/ux-design-template.md +0 -13
  315. package/.opencode/skills/bmad-create-ux-design/workflow.md +0 -36
  316. package/.opencode/skills/bmad-distillator/SKILL.md +0 -178
  317. package/.opencode/skills/bmad-distillator/agents/distillate-compressor.md +0 -116
  318. package/.opencode/skills/bmad-distillator/agents/round-trip-reconstructor.md +0 -68
  319. package/.opencode/skills/bmad-distillator/resources/compression-rules.md +0 -51
  320. package/.opencode/skills/bmad-distillator/resources/distillate-format-reference.md +0 -227
  321. package/.opencode/skills/bmad-distillator/resources/splitting-strategy.md +0 -78
  322. package/.opencode/skills/bmad-distillator/scripts/analyze_sources.py +0 -300
  323. package/.opencode/skills/bmad-distillator/scripts/tests/test_analyze_sources.py +0 -204
  324. package/.opencode/skills/bmad-document-project/SKILL.md +0 -6
  325. package/.opencode/skills/bmad-document-project/checklist.md +0 -245
  326. package/.opencode/skills/bmad-document-project/documentation-requirements.csv +0 -12
  327. package/.opencode/skills/bmad-document-project/instructions.md +0 -128
  328. package/.opencode/skills/bmad-document-project/templates/deep-dive-template.md +0 -345
  329. package/.opencode/skills/bmad-document-project/templates/index-template.md +0 -169
  330. package/.opencode/skills/bmad-document-project/templates/project-overview-template.md +0 -103
  331. package/.opencode/skills/bmad-document-project/templates/project-scan-report-schema.json +0 -160
  332. package/.opencode/skills/bmad-document-project/templates/source-tree-template.md +0 -135
  333. package/.opencode/skills/bmad-document-project/workflow.md +0 -27
  334. package/.opencode/skills/bmad-document-project/workflows/deep-dive-instructions.md +0 -299
  335. package/.opencode/skills/bmad-document-project/workflows/deep-dive-workflow.md +0 -34
  336. package/.opencode/skills/bmad-document-project/workflows/full-scan-instructions.md +0 -1107
  337. package/.opencode/skills/bmad-document-project/workflows/full-scan-workflow.md +0 -34
  338. package/.opencode/skills/bmad-domain-research/SKILL.md +0 -6
  339. package/.opencode/skills/bmad-domain-research/domain-steps/step-01-init.md +0 -137
  340. package/.opencode/skills/bmad-domain-research/domain-steps/step-02-domain-analysis.md +0 -229
  341. package/.opencode/skills/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +0 -238
  342. package/.opencode/skills/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +0 -206
  343. package/.opencode/skills/bmad-domain-research/domain-steps/step-05-technical-trends.md +0 -234
  344. package/.opencode/skills/bmad-domain-research/domain-steps/step-06-research-synthesis.md +0 -444
  345. package/.opencode/skills/bmad-domain-research/research.template.md +0 -29
  346. package/.opencode/skills/bmad-domain-research/workflow.md +0 -49
  347. package/.opencode/skills/bmad-edit-prd/SKILL.md +0 -6
  348. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-01-discovery.md +0 -242
  349. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-01b-legacy-conversion.md +0 -204
  350. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-02-review.md +0 -245
  351. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-03-edit.md +0 -250
  352. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-04-complete.md +0 -165
  353. package/.opencode/skills/bmad-edit-prd/workflow.md +0 -63
  354. package/.opencode/skills/bmad-editorial-review-prose/SKILL.md +0 -86
  355. package/.opencode/skills/bmad-editorial-review-structure/SKILL.md +0 -179
  356. package/.opencode/skills/bmad-generate-project-context/SKILL.md +0 -6
  357. package/.opencode/skills/bmad-generate-project-context/project-context-template.md +0 -21
  358. package/.opencode/skills/bmad-generate-project-context/steps/step-01-discover.md +0 -186
  359. package/.opencode/skills/bmad-generate-project-context/steps/step-02-generate.md +0 -321
  360. package/.opencode/skills/bmad-generate-project-context/steps/step-03-complete.md +0 -278
  361. package/.opencode/skills/bmad-generate-project-context/workflow.md +0 -43
  362. package/.opencode/skills/bmad-help/SKILL.md +0 -73
  363. package/.opencode/skills/bmad-index-docs/SKILL.md +0 -66
  364. package/.opencode/skills/bmad-init/SKILL.md +0 -100
  365. package/.opencode/skills/bmad-init/resources/core-module.yaml +0 -25
  366. package/.opencode/skills/bmad-init/scripts/bmad_init.py +0 -593
  367. package/.opencode/skills/bmad-init/scripts/tests/test_bmad_init.py +0 -329
  368. package/.opencode/skills/bmad-ma-agent-cyber/SKILL.md +0 -49
  369. package/.opencode/skills/bmad-ma-agent-cyber/bmad-skill-manifest.yaml +0 -11
  370. package/.opencode/skills/bmad-ma-agent-devops/SKILL.md +0 -49
  371. package/.opencode/skills/bmad-ma-agent-devops/bmad-skill-manifest.yaml +0 -11
  372. package/.opencode/skills/bmad-ma-agent-mil498/SKILL.md +0 -53
  373. package/.opencode/skills/bmad-ma-agent-mil498/bmad-skill-manifest.yaml +0 -11
  374. package/.opencode/skills/bmad-ma-agent-ml/SKILL.md +0 -59
  375. package/.opencode/skills/bmad-ma-agent-ml/bmad-skill-manifest.yaml +0 -11
  376. package/.opencode/skills/bmad-ma-agent-sre/SKILL.md +0 -49
  377. package/.opencode/skills/bmad-ma-agent-sre/bmad-skill-manifest.yaml +0 -11
  378. package/.opencode/skills/bmad-market-research/SKILL.md +0 -6
  379. package/.opencode/skills/bmad-market-research/research.template.md +0 -29
  380. package/.opencode/skills/bmad-market-research/steps/step-01-init.md +0 -184
  381. package/.opencode/skills/bmad-market-research/steps/step-02-customer-behavior.md +0 -239
  382. package/.opencode/skills/bmad-market-research/steps/step-03-customer-pain-points.md +0 -251
  383. package/.opencode/skills/bmad-market-research/steps/step-04-customer-decisions.md +0 -261
  384. package/.opencode/skills/bmad-market-research/steps/step-05-competitive-analysis.md +0 -173
  385. package/.opencode/skills/bmad-market-research/steps/step-06-research-completion.md +0 -478
  386. package/.opencode/skills/bmad-market-research/workflow.md +0 -49
  387. package/.opencode/skills/bmad-party-mode/SKILL.md +0 -6
  388. package/.opencode/skills/bmad-party-mode/steps/step-01-agent-loading.md +0 -138
  389. package/.opencode/skills/bmad-party-mode/steps/step-02-discussion-orchestration.md +0 -187
  390. package/.opencode/skills/bmad-party-mode/steps/step-03-graceful-exit.md +0 -167
  391. package/.opencode/skills/bmad-party-mode/workflow.md +0 -190
  392. package/.opencode/skills/bmad-product-brief/SKILL.md +0 -87
  393. package/.opencode/skills/bmad-product-brief/agents/artifact-analyzer.md +0 -60
  394. package/.opencode/skills/bmad-product-brief/agents/opportunity-reviewer.md +0 -44
  395. package/.opencode/skills/bmad-product-brief/agents/skeptic-reviewer.md +0 -44
  396. package/.opencode/skills/bmad-product-brief/agents/web-researcher.md +0 -49
  397. package/.opencode/skills/bmad-product-brief/bmad-manifest.json +0 -17
  398. package/.opencode/skills/bmad-product-brief/prompts/contextual-discovery.md +0 -57
  399. package/.opencode/skills/bmad-product-brief/prompts/draft-and-review.md +0 -86
  400. package/.opencode/skills/bmad-product-brief/prompts/finalize.md +0 -75
  401. package/.opencode/skills/bmad-product-brief/prompts/guided-elicitation.md +0 -70
  402. package/.opencode/skills/bmad-product-brief/resources/brief-template.md +0 -60
  403. package/.opencode/skills/bmad-qa-generate-e2e-tests/SKILL.md +0 -6
  404. package/.opencode/skills/bmad-qa-generate-e2e-tests/checklist.md +0 -33
  405. package/.opencode/skills/bmad-qa-generate-e2e-tests/workflow.md +0 -136
  406. package/.opencode/skills/bmad-quick-dev/SKILL.md +0 -6
  407. package/.opencode/skills/bmad-quick-dev/spec-template.md +0 -88
  408. package/.opencode/skills/bmad-quick-dev/step-01-clarify-and-route.md +0 -64
  409. package/.opencode/skills/bmad-quick-dev/step-02-plan.md +0 -35
  410. package/.opencode/skills/bmad-quick-dev/step-03-implement.md +0 -37
  411. package/.opencode/skills/bmad-quick-dev/step-04-review.md +0 -49
  412. package/.opencode/skills/bmad-quick-dev/step-05-present.md +0 -63
  413. package/.opencode/skills/bmad-quick-dev/step-oneshot.md +0 -49
  414. package/.opencode/skills/bmad-quick-dev/workflow.md +0 -79
  415. package/.opencode/skills/bmad-retrospective/SKILL.md +0 -6
  416. package/.opencode/skills/bmad-retrospective/workflow.md +0 -1479
  417. package/.opencode/skills/bmad-review-adversarial-general/SKILL.md +0 -37
  418. package/.opencode/skills/bmad-review-edge-case-hunter/SKILL.md +0 -67
  419. package/.opencode/skills/bmad-shard-doc/SKILL.md +0 -105
  420. package/.opencode/skills/bmad-sprint-planning/SKILL.md +0 -6
  421. package/.opencode/skills/bmad-sprint-planning/checklist.md +0 -33
  422. package/.opencode/skills/bmad-sprint-planning/sprint-status-template.yaml +0 -56
  423. package/.opencode/skills/bmad-sprint-planning/workflow.md +0 -263
  424. package/.opencode/skills/bmad-sprint-status/SKILL.md +0 -6
  425. package/.opencode/skills/bmad-sprint-status/workflow.md +0 -261
  426. package/.opencode/skills/bmad-technical-research/SKILL.md +0 -6
  427. package/.opencode/skills/bmad-technical-research/research.template.md +0 -29
  428. package/.opencode/skills/bmad-technical-research/technical-steps/step-01-init.md +0 -137
  429. package/.opencode/skills/bmad-technical-research/technical-steps/step-02-technical-overview.md +0 -239
  430. package/.opencode/skills/bmad-technical-research/technical-steps/step-03-integration-patterns.md +0 -248
  431. package/.opencode/skills/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +0 -202
  432. package/.opencode/skills/bmad-technical-research/technical-steps/step-05-implementation-research.md +0 -233
  433. package/.opencode/skills/bmad-technical-research/technical-steps/step-06-research-synthesis.md +0 -487
  434. package/.opencode/skills/bmad-technical-research/workflow.md +0 -50
  435. package/.opencode/skills/bmad-validate-prd/SKILL.md +0 -6
  436. package/.opencode/skills/bmad-validate-prd/data/domain-complexity.csv +0 -15
  437. package/.opencode/skills/bmad-validate-prd/data/prd-purpose.md +0 -197
  438. package/.opencode/skills/bmad-validate-prd/data/project-types.csv +0 -11
  439. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-01-discovery.md +0 -221
  440. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-02-format-detection.md +0 -188
  441. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +0 -206
  442. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-03-density-validation.md +0 -171
  443. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -211
  444. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +0 -225
  445. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +0 -214
  446. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -202
  447. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -240
  448. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +0 -260
  449. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +0 -206
  450. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -261
  451. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +0 -239
  452. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-13-report-complete.md +0 -229
  453. package/.opencode/skills/bmad-validate-prd/workflow.md +0 -62
  454. package/.opencode/skills/cleanup-done/SKILL.md +0 -159
  455. package/.opencode/skills/cmake-best-practices/SKILL.md +0 -64
  456. package/.opencode/skills/cmake-best-practices/examples/cmake.md +0 -59
  457. package/.opencode/skills/code-documentation/SKILL.md +0 -57
  458. package/.opencode/skills/code-documentation/examples/cpp.md +0 -29
  459. package/.opencode/skills/code-documentation/examples/csharp.md +0 -28
  460. package/.opencode/skills/code-documentation/examples/javascript_typescript.md +0 -28
  461. package/.opencode/skills/code-documentation/examples/python.md +0 -57
  462. package/.opencode/skills/code-review/SKILL.md +0 -43
  463. package/.opencode/skills/commit-message/SKILL.md +0 -79
  464. package/.opencode/skills/cpp-best-practices/SKILL.md +0 -234
  465. package/.opencode/skills/cpp-best-practices/examples/modern-idioms.md +0 -189
  466. package/.opencode/skills/cpp-best-practices/examples/naming-and-organization.md +0 -102
  467. package/.opencode/skills/cpp-concurrency-safety/SKILL.md +0 -60
  468. package/.opencode/skills/cpp-concurrency-safety/examples/concurrency.md +0 -73
  469. package/.opencode/skills/cpp-const-correctness/SKILL.md +0 -63
  470. package/.opencode/skills/cpp-const-correctness/examples/const_correctness.md +0 -54
  471. package/.opencode/skills/cpp-memory-handling/SKILL.md +0 -42
  472. package/.opencode/skills/cpp-memory-handling/examples/modern-cpp.md +0 -49
  473. package/.opencode/skills/cpp-memory-handling/examples/smart-pointers.md +0 -46
  474. package/.opencode/skills/cpp-modern-composition/SKILL.md +0 -64
  475. package/.opencode/skills/cpp-modern-composition/examples/composition.md +0 -51
  476. package/.opencode/skills/cpp-robust-interfaces/SKILL.md +0 -55
  477. package/.opencode/skills/cpp-robust-interfaces/examples/interfaces.md +0 -56
  478. package/.opencode/skills/create-bug-story/SKILL.md +0 -263
  479. package/.opencode/skills/create-hardened-docker-skill/SKILL.md +0 -637
  480. package/.opencode/skills/create-hardened-docker-skill/scripts/create-all.sh +0 -489
  481. package/.opencode/skills/csharp-best-practices/SKILL.md +0 -278
  482. package/.opencode/skills/cyber-generate-certs/.gitkeep +0 -0
  483. package/.opencode/skills/cyber-generate-certs/SKILL.md +0 -27
  484. package/.opencode/skills/cyber-generate-certs/bmad-skill-manifest.yaml +0 -3
  485. package/.opencode/skills/cyber-immunity-estimation/.gitkeep +0 -0
  486. package/.opencode/skills/cyber-immunity-estimation/SKILL.md +0 -29
  487. package/.opencode/skills/cyber-immunity-estimation/bmad-skill-manifest.yaml +0 -3
  488. package/.opencode/skills/cyber-security-audit/.gitkeep +0 -0
  489. package/.opencode/skills/cyber-security-audit/SKILL.md +0 -27
  490. package/.opencode/skills/cyber-security-audit/bmad-skill-manifest.yaml +0 -3
  491. package/.opencode/skills/cyber-vault-secrets/.gitkeep +0 -0
  492. package/.opencode/skills/cyber-vault-secrets/SKILL.md +0 -28
  493. package/.opencode/skills/cyber-vault-secrets/bmad-skill-manifest.yaml +0 -3
  494. package/.opencode/skills/cyber-verify-docker-users/.gitkeep +0 -0
  495. package/.opencode/skills/cyber-verify-docker-users/SKILL.md +0 -23
  496. package/.opencode/skills/cyber-verify-docker-users/bmad-skill-manifest.yaml +0 -3
  497. package/.opencode/skills/cyber-verify-image-signature/.gitkeep +0 -0
  498. package/.opencode/skills/cyber-verify-image-signature/SKILL.md +0 -22
  499. package/.opencode/skills/cyber-verify-image-signature/bmad-skill-manifest.yaml +0 -3
  500. package/.opencode/skills/cyber-vulnerability-scan/.gitkeep +0 -0
  501. package/.opencode/skills/cyber-vulnerability-scan/SKILL.md +0 -28
  502. package/.opencode/skills/cyber-vulnerability-scan/bmad-skill-manifest.yaml +0 -3
  503. package/.opencode/skills/devops-configure-infrastructure/.gitkeep +0 -0
  504. package/.opencode/skills/devops-configure-infrastructure/SKILL.md +0 -27
  505. package/.opencode/skills/devops-configure-infrastructure/bmad-skill-manifest.yaml +0 -3
  506. package/.opencode/skills/devops-disconnected-deployment/.gitkeep +0 -0
  507. package/.opencode/skills/devops-disconnected-deployment/SKILL.md +0 -27
  508. package/.opencode/skills/devops-disconnected-deployment/bmad-skill-manifest.yaml +0 -3
  509. package/.opencode/skills/devops-docker-compose-setup/.gitkeep +0 -0
  510. package/.opencode/skills/devops-docker-compose-setup/SKILL.md +0 -26
  511. package/.opencode/skills/devops-docker-compose-setup/bmad-skill-manifest.yaml +0 -3
  512. package/.opencode/skills/devops-manage-helm/.gitkeep +0 -0
  513. package/.opencode/skills/devops-manage-helm/SKILL.md +0 -28
  514. package/.opencode/skills/devops-manage-helm/bmad-skill-manifest.yaml +0 -3
  515. package/.opencode/skills/devops-sign-docker-image/.gitkeep +0 -0
  516. package/.opencode/skills/devops-sign-docker-image/SKILL.md +0 -24
  517. package/.opencode/skills/devops-sign-docker-image/bmad-skill-manifest.yaml +0 -3
  518. package/.opencode/skills/docker-hardening-verification/SKILL.md +0 -28
  519. package/.opencode/skills/docker-hardening-verification/scripts/verify-hardening.sh +0 -39
  520. package/.opencode/skills/docker-image-signing/SKILL.md +0 -28
  521. package/.opencode/skills/docker-image-signing/scripts/sign-image.sh +0 -33
  522. package/.opencode/skills/document-revision-history/SKILL.md +0 -104
  523. package/.opencode/skills/generate-backlog/.gitkeep +0 -0
  524. package/.opencode/skills/generate-backlog/SKILL.md +0 -183
  525. package/.opencode/skills/git-workflow-skill/SKILL.md +0 -194
  526. package/.opencode/skills/git-workflow-skill/hooks/commit-msg +0 -61
  527. package/.opencode/skills/git-workflow-skill/hooks/pre-commit +0 -38
  528. package/.opencode/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
  529. package/.opencode/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
  530. package/.opencode/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
  531. package/.opencode/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
  532. package/.opencode/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
  533. package/.opencode/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
  534. package/.opencode/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
  535. package/.opencode/skills/js-ts-security-skill/SKILL.md +0 -64
  536. package/.opencode/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
  537. package/.opencode/skills/logging-best-practices/SKILL.md +0 -50
  538. package/.opencode/skills/logging-best-practices/examples/cpp.md +0 -36
  539. package/.opencode/skills/logging-best-practices/examples/csharp.md +0 -49
  540. package/.opencode/skills/logging-best-practices/examples/javascript.md +0 -77
  541. package/.opencode/skills/logging-best-practices/examples/python.md +0 -57
  542. package/.opencode/skills/logging-best-practices/references/logging-standards.md +0 -29
  543. package/.opencode/skills/mil498-ocd/.gitkeep +0 -0
  544. package/.opencode/skills/mil498-ocd/SKILL.md +0 -30
  545. package/.opencode/skills/mil498-ocd/bmad-skill-manifest.yaml +0 -5
  546. package/.opencode/skills/mil498-ocd/prompts/01-discover-project-artifacts.md +0 -26
  547. package/.opencode/skills/mil498-ocd/prompts/02-load-template.md +0 -10
  548. package/.opencode/skills/mil498-ocd/prompts/03-generate-document.md +0 -90
  549. package/.opencode/skills/mil498-ocd/prompts/04-validate.md +0 -14
  550. package/.opencode/skills/mil498-ocd/prompts/05-review.md +0 -15
  551. package/.opencode/skills/mil498-ocd/prompts/06-save.md +0 -15
  552. package/.opencode/skills/mil498-sdd/.gitkeep +0 -0
  553. package/.opencode/skills/mil498-sdd/SKILL.md +0 -30
  554. package/.opencode/skills/mil498-sdd/bmad-skill-manifest.yaml +0 -5
  555. package/.opencode/skills/mil498-sdd/prompts/01-discover-project-artifacts.md +0 -50
  556. package/.opencode/skills/mil498-sdd/prompts/02-load-template.md +0 -10
  557. package/.opencode/skills/mil498-sdd/prompts/03-generate-document.md +0 -98
  558. package/.opencode/skills/mil498-sdd/prompts/04-validate.md +0 -16
  559. package/.opencode/skills/mil498-sdd/prompts/05-review.md +0 -15
  560. package/.opencode/skills/mil498-sdd/prompts/06-save.md +0 -19
  561. package/.opencode/skills/mil498-sdd/template.md +0 -163
  562. package/.opencode/skills/mil498-sdp/.gitkeep +0 -0
  563. package/.opencode/skills/mil498-sdp/SKILL.md +0 -30
  564. package/.opencode/skills/mil498-sdp/bmad-skill-manifest.yaml +0 -5
  565. package/.opencode/skills/mil498-sdp/prompts/01-discover-project-artifacts.md +0 -32
  566. package/.opencode/skills/mil498-sdp/prompts/02-load-template.md +0 -10
  567. package/.opencode/skills/mil498-sdp/prompts/03-generate-document.md +0 -187
  568. package/.opencode/skills/mil498-sdp/prompts/04-validate.md +0 -13
  569. package/.opencode/skills/mil498-sdp/prompts/05-review.md +0 -15
  570. package/.opencode/skills/mil498-sdp/prompts/06-save.md +0 -14
  571. package/.opencode/skills/mil498-srs/.gitkeep +0 -0
  572. package/.opencode/skills/mil498-srs/SKILL.md +0 -30
  573. package/.opencode/skills/mil498-srs/bmad-skill-manifest.yaml +0 -5
  574. package/.opencode/skills/mil498-srs/prompts/01-discover-project-artifacts.md +0 -42
  575. package/.opencode/skills/mil498-srs/prompts/02-load-template.md +0 -10
  576. package/.opencode/skills/mil498-srs/prompts/03-generate-document.md +0 -100
  577. package/.opencode/skills/mil498-srs/prompts/04-validate.md +0 -16
  578. package/.opencode/skills/mil498-srs/prompts/05-review.md +0 -15
  579. package/.opencode/skills/mil498-srs/prompts/06-save.md +0 -18
  580. package/.opencode/skills/mil498-ssdd/.gitkeep +0 -0
  581. package/.opencode/skills/mil498-ssdd/SKILL.md +0 -32
  582. package/.opencode/skills/mil498-ssdd/bmad-skill-manifest.yaml +0 -5
  583. package/.opencode/skills/mil498-ssdd/prompts/01-discover-project-artifacts.md +0 -32
  584. package/.opencode/skills/mil498-ssdd/prompts/02-load-template.md +0 -10
  585. package/.opencode/skills/mil498-ssdd/prompts/03-csci-discovery-interview.md +0 -43
  586. package/.opencode/skills/mil498-ssdd/prompts/04-generate-document.md +0 -96
  587. package/.opencode/skills/mil498-ssdd/prompts/05-validate.md +0 -14
  588. package/.opencode/skills/mil498-ssdd/prompts/06-review.md +0 -16
  589. package/.opencode/skills/mil498-ssdd/prompts/07-save.md +0 -16
  590. package/.opencode/skills/mil498-sss/.gitkeep +0 -0
  591. package/.opencode/skills/mil498-sss/SKILL.md +0 -31
  592. package/.opencode/skills/mil498-sss/bmad-skill-manifest.yaml +0 -5
  593. package/.opencode/skills/mil498-sss/prompts/01-discover-project-artifacts.md +0 -31
  594. package/.opencode/skills/mil498-sss/prompts/02-load-template.md +0 -10
  595. package/.opencode/skills/mil498-sss/prompts/03-generate-document.md +0 -108
  596. package/.opencode/skills/mil498-sss/prompts/04-validate.md +0 -16
  597. package/.opencode/skills/mil498-sss/prompts/05-review.md +0 -15
  598. package/.opencode/skills/mil498-sss/prompts/06-save.md +0 -15
  599. package/.opencode/skills/mil498-std/.gitkeep +0 -0
  600. package/.opencode/skills/mil498-std/SKILL.md +0 -30
  601. package/.opencode/skills/mil498-std/bmad-skill-manifest.yaml +0 -5
  602. package/.opencode/skills/mil498-std/prompts/01-discover-project-artifacts.md +0 -42
  603. package/.opencode/skills/mil498-std/prompts/02-load-template.md +0 -10
  604. package/.opencode/skills/mil498-std/prompts/03-generate-document.md +0 -117
  605. package/.opencode/skills/mil498-std/prompts/04-validate.md +0 -15
  606. package/.opencode/skills/mil498-std/prompts/05-review.md +0 -15
  607. package/.opencode/skills/mil498-std/prompts/06-save.md +0 -15
  608. package/.opencode/skills/ml-advise/.gitkeep +0 -0
  609. package/.opencode/skills/ml-advise/SKILL.md +0 -76
  610. package/.opencode/skills/ml-advise/bmad-skill-manifest.yaml +0 -3
  611. package/.opencode/skills/ml-advise/skill.json +0 -7
  612. package/.opencode/skills/ml-analysis/.gitkeep +0 -0
  613. package/.opencode/skills/ml-analysis/SKILL.md +0 -60
  614. package/.opencode/skills/ml-analysis/bmad-skill-manifest.yaml +0 -3
  615. package/.opencode/skills/ml-analysis/skill.json +0 -7
  616. package/.opencode/skills/ml-architecture/.gitkeep +0 -0
  617. package/.opencode/skills/ml-architecture/SKILL.md +0 -55
  618. package/.opencode/skills/ml-architecture/bmad-skill-manifest.yaml +0 -3
  619. package/.opencode/skills/ml-architecture/skill.json +0 -7
  620. package/.opencode/skills/ml-detailed-design/.gitkeep +0 -0
  621. package/.opencode/skills/ml-detailed-design/SKILL.md +0 -67
  622. package/.opencode/skills/ml-detailed-design/bmad-skill-manifest.yaml +0 -3
  623. package/.opencode/skills/ml-detailed-design/skill.json +0 -7
  624. package/.opencode/skills/ml-eda/.gitkeep +0 -0
  625. package/.opencode/skills/ml-eda/SKILL.md +0 -56
  626. package/.opencode/skills/ml-eda/bmad-skill-manifest.yaml +0 -3
  627. package/.opencode/skills/ml-eda/scripts/baseline_classifier.py +0 -522
  628. package/.opencode/skills/ml-eda/scripts/class_weights_calculator.py +0 -295
  629. package/.opencode/skills/ml-eda/scripts/clustering_explorer.py +0 -383
  630. package/.opencode/skills/ml-eda/scripts/eda_analyzer.py +0 -654
  631. package/.opencode/skills/ml-eda/skill.json +0 -7
  632. package/.opencode/skills/ml-experiment/.gitkeep +0 -0
  633. package/.opencode/skills/ml-experiment/SKILL.md +0 -74
  634. package/.opencode/skills/ml-experiment/assets/advanced_trainer_configs.py +0 -430
  635. package/.opencode/skills/ml-experiment/assets/quick_trainer_setup.py +0 -233
  636. package/.opencode/skills/ml-experiment/assets/template_datamodule.py +0 -219
  637. package/.opencode/skills/ml-experiment/assets/template_gnn_module.py +0 -341
  638. package/.opencode/skills/ml-experiment/assets/template_lightning_module.py +0 -158
  639. package/.opencode/skills/ml-experiment/bmad-skill-manifest.yaml +0 -3
  640. package/.opencode/skills/ml-experiment/skill.json +0 -7
  641. package/.opencode/skills/ml-hparam/.gitkeep +0 -0
  642. package/.opencode/skills/ml-hparam/SKILL.md +0 -81
  643. package/.opencode/skills/ml-hparam/bmad-skill-manifest.yaml +0 -3
  644. package/.opencode/skills/ml-hparam/skill.json +0 -7
  645. package/.opencode/skills/ml-ideation/.gitkeep +0 -0
  646. package/.opencode/skills/ml-ideation/SKILL.md +0 -50
  647. package/.opencode/skills/ml-ideation/bmad-skill-manifest.yaml +0 -3
  648. package/.opencode/skills/ml-ideation/scripts/validate_ml_prd.py +0 -287
  649. package/.opencode/skills/ml-ideation/skill.json +0 -7
  650. package/.opencode/skills/ml-infra/.gitkeep +0 -0
  651. package/.opencode/skills/ml-infra/SKILL.md +0 -58
  652. package/.opencode/skills/ml-infra/bmad-skill-manifest.yaml +0 -3
  653. package/.opencode/skills/ml-infra/skill.json +0 -7
  654. package/.opencode/skills/ml-retrospective/.gitkeep +0 -0
  655. package/.opencode/skills/ml-retrospective/SKILL.md +0 -63
  656. package/.opencode/skills/ml-retrospective/bmad-skill-manifest.yaml +0 -3
  657. package/.opencode/skills/ml-retrospective/skill.json +0 -7
  658. package/.opencode/skills/ml-revision/.gitkeep +0 -0
  659. package/.opencode/skills/ml-revision/SKILL.md +0 -82
  660. package/.opencode/skills/ml-revision/bmad-skill-manifest.yaml +0 -3
  661. package/.opencode/skills/ml-revision/skill.json +0 -7
  662. package/.opencode/skills/ml-techspec/.gitkeep +0 -0
  663. package/.opencode/skills/ml-techspec/SKILL.md +0 -80
  664. package/.opencode/skills/ml-techspec/bmad-skill-manifest.yaml +0 -3
  665. package/.opencode/skills/ml-techspec/skill.json +0 -7
  666. package/.opencode/skills/modify-sprint/.gitkeep +0 -0
  667. package/.opencode/skills/modify-sprint/SKILL.md +0 -322
  668. package/.opencode/skills/modify-sprint/bmad-skill-manifest.yaml +0 -3
  669. package/.opencode/skills/open-presentation/SKILL.md +0 -35
  670. package/.opencode/skills/opentelemetry-best-practices/SKILL.md +0 -34
  671. package/.opencode/skills/opentelemetry-best-practices/examples/go.md +0 -32
  672. package/.opencode/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
  673. package/.opencode/skills/opentelemetry-best-practices/examples/python.md +0 -37
  674. package/.opencode/skills/opentelemetry-best-practices/references/otel-standards.md +0 -37
  675. package/.opencode/skills/prioritize-backlog/.gitkeep +0 -0
  676. package/.opencode/skills/prioritize-backlog/SKILL.md +0 -195
  677. package/.opencode/skills/project-context-expansion/.gitkeep +0 -0
  678. package/.opencode/skills/project-context-expansion/SKILL.md +0 -238
  679. package/.opencode/skills/project-context-expansion/bmad-skill-manifest.yaml +0 -3
  680. package/.opencode/skills/python-best-practices/SKILL.md +0 -385
  681. package/.opencode/skills/python-dependency-mgmt/SKILL.md +0 -42
  682. package/.opencode/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
  683. package/.opencode/skills/python-security-skill/SKILL.md +0 -56
  684. package/.opencode/skills/python-security-skill/examples/security.md +0 -56
  685. package/.opencode/skills/remove-from-sprint/.gitkeep +0 -0
  686. package/.opencode/skills/remove-from-sprint/SKILL.md +0 -163
  687. package/.opencode/skills/self-signed-cert/SKILL.md +0 -42
  688. package/.opencode/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
  689. package/.opencode/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
  690. package/.opencode/skills/skill-creator/SKILL.md +0 -196
  691. package/.opencode/skills/skill-creator/references/output-patterns.md +0 -82
  692. package/.opencode/skills/skill-creator/references/workflows.md +0 -28
  693. package/.opencode/skills/skill-creator/scripts/init_skill.py +0 -208
  694. package/.opencode/skills/skill-creator/scripts/package_skill.py +0 -99
  695. package/.opencode/skills/skill-creator/scripts/quick_validate.py +0 -113
  696. package/.opencode/skills/sprint-status-view/.gitkeep +0 -0
  697. package/.opencode/skills/sprint-status-view/SKILL.md +0 -263
  698. package/.opencode/skills/sprint-status-view/bmad-skill-manifest.yaml +0 -3
  699. package/.opencode/skills/sre-check-deployment-status/.gitkeep +0 -0
  700. package/.opencode/skills/sre-check-deployment-status/SKILL.md +0 -32
  701. package/.opencode/skills/sre-check-deployment-status/bmad-skill-manifest.yaml +0 -3
  702. package/.opencode/skills/sre-check-secrets/.gitkeep +0 -0
  703. package/.opencode/skills/sre-check-secrets/SKILL.md +0 -23
  704. package/.opencode/skills/sre-check-secrets/bmad-skill-manifest.yaml +0 -3
  705. package/.opencode/skills/sre-check-system-status/.gitkeep +0 -0
  706. package/.opencode/skills/sre-check-system-status/SKILL.md +0 -27
  707. package/.opencode/skills/sre-check-system-status/bmad-skill-manifest.yaml +0 -3
  708. package/.opencode/skills/sre-day-2-ops/.gitkeep +0 -0
  709. package/.opencode/skills/sre-day-2-ops/SKILL.md +0 -26
  710. package/.opencode/skills/sre-day-2-ops/bmad-skill-manifest.yaml +0 -3
  711. package/.opencode/skills/sre-deployment-strategies/.gitkeep +0 -0
  712. package/.opencode/skills/sre-deployment-strategies/SKILL.md +0 -28
  713. package/.opencode/skills/sre-deployment-strategies/bmad-skill-manifest.yaml +0 -3
  714. package/.opencode/skills/sre-fix-deployments/.gitkeep +0 -0
  715. package/.opencode/skills/sre-fix-deployments/SKILL.md +0 -25
  716. package/.opencode/skills/sre-fix-deployments/bmad-skill-manifest.yaml +0 -3
  717. package/.opencode/skills/sre-gitops-status/.gitkeep +0 -0
  718. package/.opencode/skills/sre-gitops-status/SKILL.md +0 -25
  719. package/.opencode/skills/sre-gitops-status/bmad-skill-manifest.yaml +0 -3
  720. package/.opencode/skills/story-status-lookup/SKILL.md +0 -78
  721. package/.opencode/skills/test-accompanied-development/SKILL.md +0 -50
  722. package/.opencode/skills/test-generator/SKILL.md +0 -65
  723. package/.opencode/skills/vercel-react-best-practices/SKILL.md +0 -109
  724. package/.opencode/skills/verify-hardened-docker-skill/SKILL.md +0 -442
  725. package/.opencode/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
  726. package/.roo/rules/00-ma-agents.md +0 -13
  727. package/.roo/skills/.ma-agents.json +0 -241
  728. package/.roo/skills/MANIFEST.yaml +0 -254
  729. package/.roo/skills/ai-audit-trail/SKILL.md +0 -23
  730. package/.roo/skills/auto-bug-detection/SKILL.md +0 -169
  731. package/.roo/skills/cmake-best-practices/SKILL.md +0 -64
  732. package/.roo/skills/cmake-best-practices/examples/cmake.md +0 -59
  733. package/.roo/skills/code-documentation/SKILL.md +0 -57
  734. package/.roo/skills/code-documentation/examples/cpp.md +0 -29
  735. package/.roo/skills/code-documentation/examples/csharp.md +0 -28
  736. package/.roo/skills/code-documentation/examples/javascript_typescript.md +0 -28
  737. package/.roo/skills/code-documentation/examples/python.md +0 -57
  738. package/.roo/skills/code-review/SKILL.md +0 -43
  739. package/.roo/skills/commit-message/SKILL.md +0 -79
  740. package/.roo/skills/cpp-best-practices/SKILL.md +0 -234
  741. package/.roo/skills/cpp-best-practices/examples/modern-idioms.md +0 -189
  742. package/.roo/skills/cpp-best-practices/examples/naming-and-organization.md +0 -102
  743. package/.roo/skills/cpp-concurrency-safety/SKILL.md +0 -60
  744. package/.roo/skills/cpp-concurrency-safety/examples/concurrency.md +0 -73
  745. package/.roo/skills/cpp-const-correctness/SKILL.md +0 -63
  746. package/.roo/skills/cpp-const-correctness/examples/const_correctness.md +0 -54
  747. package/.roo/skills/cpp-memory-handling/SKILL.md +0 -42
  748. package/.roo/skills/cpp-memory-handling/examples/modern-cpp.md +0 -49
  749. package/.roo/skills/cpp-memory-handling/examples/smart-pointers.md +0 -46
  750. package/.roo/skills/cpp-modern-composition/SKILL.md +0 -64
  751. package/.roo/skills/cpp-modern-composition/examples/composition.md +0 -51
  752. package/.roo/skills/cpp-robust-interfaces/SKILL.md +0 -55
  753. package/.roo/skills/cpp-robust-interfaces/examples/interfaces.md +0 -56
  754. package/.roo/skills/create-hardened-docker-skill/SKILL.md +0 -637
  755. package/.roo/skills/create-hardened-docker-skill/scripts/create-all.sh +0 -489
  756. package/.roo/skills/csharp-best-practices/SKILL.md +0 -278
  757. package/.roo/skills/docker-hardening-verification/SKILL.md +0 -28
  758. package/.roo/skills/docker-hardening-verification/scripts/verify-hardening.sh +0 -39
  759. package/.roo/skills/docker-image-signing/SKILL.md +0 -28
  760. package/.roo/skills/docker-image-signing/scripts/sign-image.sh +0 -33
  761. package/.roo/skills/document-revision-history/SKILL.md +0 -104
  762. package/.roo/skills/git-workflow-skill/SKILL.md +0 -194
  763. package/.roo/skills/git-workflow-skill/hooks/commit-msg +0 -61
  764. package/.roo/skills/git-workflow-skill/hooks/pre-commit +0 -38
  765. package/.roo/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
  766. package/.roo/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
  767. package/.roo/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
  768. package/.roo/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
  769. package/.roo/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
  770. package/.roo/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
  771. package/.roo/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
  772. package/.roo/skills/js-ts-security-skill/SKILL.md +0 -64
  773. package/.roo/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
  774. package/.roo/skills/logging-best-practices/SKILL.md +0 -50
  775. package/.roo/skills/logging-best-practices/examples/cpp.md +0 -36
  776. package/.roo/skills/logging-best-practices/examples/csharp.md +0 -49
  777. package/.roo/skills/logging-best-practices/examples/javascript.md +0 -77
  778. package/.roo/skills/logging-best-practices/examples/python.md +0 -57
  779. package/.roo/skills/logging-best-practices/references/logging-standards.md +0 -29
  780. package/.roo/skills/open-presentation/SKILL.md +0 -35
  781. package/.roo/skills/opentelemetry-best-practices/SKILL.md +0 -34
  782. package/.roo/skills/opentelemetry-best-practices/examples/go.md +0 -32
  783. package/.roo/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
  784. package/.roo/skills/opentelemetry-best-practices/examples/python.md +0 -37
  785. package/.roo/skills/opentelemetry-best-practices/references/otel-standards.md +0 -37
  786. package/.roo/skills/python-best-practices/SKILL.md +0 -385
  787. package/.roo/skills/python-dependency-mgmt/SKILL.md +0 -42
  788. package/.roo/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
  789. package/.roo/skills/python-security-skill/SKILL.md +0 -56
  790. package/.roo/skills/python-security-skill/examples/security.md +0 -56
  791. package/.roo/skills/self-signed-cert/SKILL.md +0 -42
  792. package/.roo/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
  793. package/.roo/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
  794. package/.roo/skills/skill-creator/SKILL.md +0 -196
  795. package/.roo/skills/skill-creator/references/output-patterns.md +0 -82
  796. package/.roo/skills/skill-creator/references/workflows.md +0 -28
  797. package/.roo/skills/skill-creator/scripts/init_skill.py +0 -208
  798. package/.roo/skills/skill-creator/scripts/package_skill.py +0 -99
  799. package/.roo/skills/skill-creator/scripts/quick_validate.py +0 -113
  800. package/.roo/skills/story-status-lookup/SKILL.md +0 -78
  801. package/.roo/skills/test-accompanied-development/SKILL.md +0 -50
  802. package/.roo/skills/test-generator/SKILL.md +0 -65
  803. package/.roo/skills/vercel-react-best-practices/SKILL.md +0 -109
  804. package/.roo/skills/verify-hardened-docker-skill/SKILL.md +0 -442
  805. package/.roo/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
  806. package/opencode.json +0 -5
  807. /package/{.opencode/skills/add-sprint → lib/bmad-extension/skills/bmad-dev-story}/.gitkeep +0 -0
  808. /package/{.opencode → lib/bmad-extension}/skills/bmad-dev-story/SKILL.md +0 -0
  809. /package/{.opencode/skills/add-to-sprint → lib/bmad-extension/skills/bmad-sprint-planning}/.gitkeep +0 -0
  810. /package/{.opencode/skills/bmad-ma-agent-cyber → lib/bmad-extension/skills/bmad-sprint-status}/.gitkeep +0 -0
  811. /package/{.opencode/skills/bmad-ma-agent-devops → lib/bmad-extension/skills/cleanup-done}/.gitkeep +0 -0
  812. /package/{.opencode → lib/bmad-extension}/skills/cleanup-done/bmad-skill-manifest.yaml +0 -0
  813. /package/{.opencode/skills/bmad-ma-agent-mil498 → lib/bmad-extension/skills/close-sprint}/.gitkeep +0 -0
  814. /package/{.opencode/skills/bmad-ma-agent-ml → lib/bmad-extension/skills/generate-backlog}/.gitkeep +0 -0
  815. /package/{.opencode → lib/bmad-extension}/skills/generate-backlog/bmad-skill-manifest.yaml +0 -0
  816. /package/{.opencode/skills/bmad-ma-agent-sre → lib/bmad-extension/skills/mil498-requirement-quality}/.gitkeep +0 -0
  817. /package/{.opencode/skills/cleanup-done → lib/bmad-extension/skills/prioritize-backlog}/.gitkeep +0 -0
  818. /package/{.opencode → lib/bmad-extension}/skills/prioritize-backlog/bmad-skill-manifest.yaml +0 -0
  819. /package/{.opencode/skills/create-bug-story → lib/bmad-extension/skills/remove-from-sprint}/.gitkeep +0 -0
  820. /package/{.opencode → lib/bmad-extension}/skills/remove-from-sprint/bmad-skill-manifest.yaml +0 -0
  821. /package/{.opencode/skills/mil498-ocd/template.md → mil498/OCD.md} +0 -0
  822. /package/{.opencode/skills/mil498-sdp/template.md → mil498/SDP.md} +0 -0
  823. /package/{.opencode/skills/mil498-srs/template.md → mil498/SRS.md} +0 -0
  824. /package/{.opencode/skills/mil498-ssdd/template.md → mil498/SSDD.md} +0 -0
  825. /package/{.opencode/skills/mil498-sss/template.md → mil498/SSS.md} +0 -0
  826. /package/{.opencode/skills/mil498-std/template.md → mil498/STD.md} +0 -0
@@ -0,0 +1,3287 @@
1
+ ---
2
+ stepsCompleted: [1, 2, 3, 4, 'phase2-step-01', 'phase2-step-02', 'phase2-step-03', 'phase2-step-04']
3
+ workflowStatus: 'complete'
4
+ completedDate: '2026-03-08'
5
+ lastEdited: '2026-04-03'
6
+ phase2EditHistory:
7
+ - date: '2026-04-03'
8
+ changes: 'Major rework of Epic 17: Sprint Management Model Rework. Replaced 3-file model (backlog.yaml, sprints/sprint-N.yaml, sprint-status.yaml) with unified single sprint-status.yaml approach. Stories rewritten: 17.9 (unified schema), 17.10 (generate-backlog rework), 17.11 (add-to-sprint movement semantics), 17.12 (remove-from-sprint movement semantics), 17.13 (sprint-status-view single-source read), 17.14 (cleanup-done single-source), 17.15 (bmad-sprint-planning bootstrap), 17.16 (add-sprint section-based), 17.17 (modify-sprint section-based), 17.18 (bmad-dev-story cross-section update), 17.19 (story-status-lookup cross-section search), 17.20 (bmad-sprint-status structured sections), 17.21 (close-sprint new skill), 17.22 (Jira adapter pattern), 17.23 (migration/deprecation of old files). Added FR133-FR140. Updated FR Coverage Map. Updated Epic 17 description in Epic List. Updated Development Execution Order.'
9
+ - date: '2026-03-26'
10
+ changes: 'Added Stories 5.5 (explicit parameter passing) and 5.6 (space-in-path fix) to Epic 5. Added Epic 15: BMAD 6.2.1 Agent Architecture Migration (8 stories: version bump, module restructure, 4 agent conversions, 11 MIL-498 workflow conversions, 23 SRE/DevOps/Cyber conversions, built-in agent separation, migration detection, validation). Added Epic 16: Multi-Repository Project Layout (4 stories: wizard, config+cross-ref, project-context section, validation). Updated FR coverage map with FR87-FR127. Updated development execution order with Phase A/B/C priority grouping. Updated cross-epic bmad.js coordination for 4 epics.'
11
+ - date: '2026-03-20'
12
+ changes: 'Added Epic 14: External Tooling Integration (Phase 3). 5 stories: analyst research for Jira (14.1) and Confluence/knowledge (14.2), architect abstraction layer design (14.3), and stub stories for Jira (14.4) and Confluence (14.5) implementations blocked on 14.3. Proposed FRs to be added to PRD after architecture is approved.'
13
+ - date: '2026-03-19'
14
+ changes: 'Added Epic 13: Project Context Auto-Generation (FR77-FR84, NFR22-NFR24). 4 stories: template+generator, install pipeline integration, BMAD critical_actions update, retrospective expansion trigger. Added FR77-FR84 to FR Coverage Map.'
15
+ - date: '2026-03-15'
16
+ changes: 'Adversarial review fixes: Removed deleted FR77/FR78 strikethrough lines and standalone binary strikethrough. Added FR44/FR45 to FR Coverage Map. Updated Epic 6 dependency note to reference Epic 5. Added determinism/git-fetch acceptance criteria and technical note to Story 5.3.'
17
+ - date: '2026-03-15'
18
+ changes: 'Deleted old Epic 5 (Self-Contained Installer / standalone binary). Renumbered Epic 13 (Self-Contained BMAD Installation) to Epic 5, renamed to Bundled BMAD Installation. Removed --offline flag story (13.4). Reordered remaining stories to fix circular dependency. Added cross-epic bmad.js coordination and development execution order sections. Updated FR Coverage Map.'
19
+ - date: '2026-03-15'
20
+ changes: 'Adding Epic 13: Self-Contained BMAD Installation (FR74-FR78, NFR20-NFR21). Marked as highest priority — first epic to develop.'
21
+ - date: '2026-03-12'
22
+ changes: 'Adding Phase 2 epics for FR51-FR71 (Skill Enforcement, OpenCode, Project Knowledge, Bug Management, Sprint Management)'
23
+ inputDocuments: ['_bmad-output/planning-artifacts/prd.md', '_bmad-output/planning-artifacts/architecture.md', '_bmad-output/planning-artifacts/implementation-readiness-report-2026-03-11.md']
24
+ ---
25
+
26
+ # agents - Epic Breakdown
27
+
28
+ ## Overview
29
+
30
+ This document provides the complete epic and story breakdown for agents, decomposing the requirements from the PRD and Architecture into implementable stories. Focus: implementation gaps identified in v2.19.2 gap analysis — Phase 1 remaining work and Phase 2 planned features.
31
+
32
+ ## Requirements Inventory
33
+
34
+ ### Functional Requirements
35
+
36
+ - FR1: Engineers can install one or more skills into any supported AI agent with a single command
37
+ - FR2: Engineers can uninstall previously installed skills from an agent
38
+ - FR3: Engineers can view the list of all available skills with descriptions and categories
39
+ - FR4: Engineers can view the installation status of skills for a specific agent
40
+ - FR5: Engineers can upgrade skills when a newer version is available, with upgrade detection
41
+ - FR6: Engineers can install skills in non-interactive mode for CI/CD pipeline automation
42
+ - FR7: Engineers can install skills across multiple agents simultaneously from one manifest
43
+ - FR8: Engineers can install the BMAD-METHOD framework alongside skills in a single workflow
44
+ - FR9: Engineers can update an existing BMAD installation to a newer version
45
+ - FR10: Engineers can apply organization-specific customizations to BMAD that persist across updates
46
+ - FR11: Engineers can register MIL-STD-498 workflows into an existing BMAD installation
47
+ - FR12: Engineers can trigger BMAD recompile after customization changes
48
+ - FR13: Systems engineers can generate SSS (System/Subsystem Specification) documents from project artifacts
49
+ - FR14: Systems engineers can generate SSDD (System/Subsystem Design Description) documents
50
+ - FR15: Systems engineers can generate OCD (Operational Concept Description) documents
51
+ - FR16: Project managers can generate SDP (Software Development Plan) documents
52
+ - FR17: Product managers can generate SRS (Software Requirements Specification) documents
53
+ - FR18: Product managers can generate SDD (Software Design Description) documents
54
+ - FR19: Architects can generate IDD (Interface Design Description) documents
55
+ - FR20: Architects can generate IRS (Interface Requirements Specification) documents
56
+ - FR21: Architects can generate HRS (Hardware Requirements Specification) documents
57
+ - FR22: Test engineers can generate STD (Software Test Description) documents
58
+ - FR23: Test engineers can generate STR (Software Test Report) documents
59
+ - FR24: Product managers can create PRDs through guided collaborative workflows
60
+ - FR25: Product managers can break PRDs into epics and user stories
61
+ - FR26: Product managers can run sprint planning from epics
62
+ - FR27: Architects can create architecture documents through guided workflows
63
+ - FR28: Architects can create UX design specifications
64
+ - FR29: Engineers can check implementation readiness across PRD, architecture, and epics
65
+ - FR30: Engineers can run code reviews against established standards
66
+ - FR31: Test engineers can generate automated E2E tests from feature specifications
67
+ - FR32: Project managers can track sprint status and surface risks
68
+ - FR33: Teams can run retrospectives at epic boundaries
69
+ - FR34: Engineers can target any of the supported IDE agents (Claude Code, Cursor, Cline, Copilot, Gemini, Kilocode, OpenCode) for skill installation
70
+ - FR35: Engineers can target BMAD specialized agents (SRE, DevOps, Cyber, MIL-STD-498) for persona installation
71
+ - FR36: Skills produce functionally equivalent behavior regardless of which agent they are installed into
72
+ - FR37: Engineers can switch between AI agents and retain the same methodology framework
73
+ - FR38: The system translates skill content into each agent's native configuration format automatically
74
+ - FR39: The Chief Architect can author new skills using the skill format (skill.json + SKILL.md + agent templates)
75
+ - FR40: The Chief Architect can designate skills as mandatory (`always_load: true`) for organizational enforcement
76
+ - FR41: The Chief Architect can customize BMAD agent personas to fit organizational processes
77
+ - FR42: The Chief Architect can develop new specialized agent personas for enterprise-specific roles
78
+ - FR43: The system generates MANIFEST.yaml from installed skills for agent consumption
79
+ - FR44: Engineers can install and use skills in air-gapped environments without internet access
80
+ - FR45: Engineers can use ma-agents on Windows, macOS, and Linux
81
+ - FR46: Engineers can use ma-agents with on-premise AI agents running against local models
82
+ - FR47: The system tracks installed skill versions per agent via manifest for upgrade/downgrade detection
83
+ - FR48: The system maintains an audit trail of AI agent activities via the ai-audit-trail skill
84
+ - FR49: Document generation workflows maintain traceability across inter-role handoffs (SSS → SRS → SDD → STD)
85
+ - FR50: Engineers can validate PRDs and other documents against established standards
86
+
87
+ ### Functional Requirements (Phase 2 — added 2026-03-12)
88
+
89
+ - FR51: The installer injects the planning instruction at the TOP of agent instruction files, not the bottom — ensuring highest priority during LLM context processing
90
+ - FR52: The installer deploys a BMAD extension module (`extends-module: bmm`) that injects skill-loading `critical_actions` into BMAD agents — skills are loaded before any menu or workflow executes
91
+ - FR53: All 11 BMAD agents (4 custom + 7 built-in) include skill-loading `critical_actions` in their `.customize.yaml` files
92
+ - FR54: Per-agent enforcement mechanisms are implemented where the agent supports them (e.g., Claude Code hooks that verify manifest was read)
93
+ - FR55: Context persistence strategies ensure skills survive LLM context compression and session restoration (via BMAD sidecar memory or equivalent)
94
+ - FR56: Engineers can target OpenCode for skill installation with skills placed in `.opencode/skills/`
95
+ - FR57: The installer injects skill references into `opencode.json` via the instructions array using JSON config merging (not replacement)
96
+ - FR58: The installer does not add `_bmad-output` to `.gitignore` — this folder is tracked as version-controlled project knowledge
97
+ - FR59: The `_bmad-output` policy is documented in README and installation guidance
98
+ - FR60: Bugs are structured entities with required fields: problem description, reproduction steps, bug type, version found, environment constraints, severity, and status
99
+ - FR61: A BMAD extension workflow (deployed via `extends-module: bmm`) generates a structured bug story from a bug report
100
+ - FR62: The `auto-bug-detection` skill instructs coding agents to propose a bug issue to the user when they detect a problem in already-delivered code
101
+ - FR63: During BMAD code-review workflows, agents suggest generating bug issues when relevant problems are found in delivered features
102
+ - FR64: Bugs exist in the backlog as standalone items — never assigned to an epic
103
+ - FR65: The backlog is a flat list containing both stories and bugs, not grouped by epic
104
+ - FR66: Sprint capacity is defined by number of items (stories + bugs), configured by the Scrum Master during sprint planning
105
+ - FR67: Story/bug prioritization supports multiple criteria beyond epic precedence
106
+ - FR68: A BMAD extension workflow enables adding a new sprint with defined capacity and iteration identifier
107
+ - FR69: A BMAD extension workflow enables adding stories and bugs to a sprint from the backlog
108
+ - FR70: A BMAD extension workflow enables changing/modifying a sprint (reorder items, swap items, adjust capacity)
109
+ - FR71: Sprint status displays real sprint definitions with assigned items, not just a list of epics
110
+
111
+ ### Functional Requirements (Phase 2 — added 2026-03-15)
112
+
113
+ - FR74: The ma-agents npm package bundles bmad-method v6.0.4 as a direct dependency — no `npx` download at install time
114
+ - FR75: The ma-agents npm package bundles pre-cloned BMAD external modules (bmb, cis, tea, gds) under `lib/bmad-cache/` — no git clone at install time
115
+ - FR76: Before invoking bmad-method install, the installer pre-populates `~/.bmad/cache/external-modules/` from the bundled cache so bmad-method finds modules locally
116
+
117
+ ### Functional Requirements (Phase 2 — added 2026-03-26)
118
+
119
+ #### Bundled Installation Update (FR123-FR127)
120
+ - FR123: The installer passes all collected config to bmad-method as explicit CLI flags (`--tools`, `--modules`, `--directory`, `--user-name`, etc.)
121
+ - FR124: bmad-method performs full configuration using explicit parameters — `--yes` suppresses prompts for already-supplied flags only
122
+ - FR125: When bmad-method introduces new CLI params that ma-agents hasn't mapped, `--yes` causes bmad-method to apply defaults
123
+ - FR126: Single unified wizard — no separate BMAD interactive prompt
124
+ - FR127: CI/CD mode uses same explicit flag mechanism with pre-determined answers
125
+
126
+ #### BMAD 6.2.0 Agent Architecture Migration (FR94-FR110)
127
+ - FR94: Each custom agent (SRE, DevOps, Cyber, MIL-498) rebuilt as BMAD 6.2.0 skill-based agent (SKILL.md + bmad-skill-manifest.yaml)
128
+ - FR95: Agent capabilities migrated from `.customize.yaml` critical_actions to internal commands in agent SKILL.md
129
+ - FR96: Agent persona/identity defined in SKILL.md — replacing legacy XML `<agent>` definitions
130
+ - FR97: Agent menu/routing via SKILL.md triggers and dynamic routing — replacing XML `<menu-handlers>`
131
+ - FR98: All 11 MIL-498 DID workflows converted from YAML to SKILL.md Complex Workflow packages
132
+ - FR99: MIL-498 instructions restructured as progressive disclosure step files in prompts/
133
+ - FR100: MIL-498 template output checkpoints reimplemented as skill-level confirmation gates
134
+ - FR101: 9 SRE playbooks packaged as SKILL.md skill packages
135
+ - FR102: 6 DevOps playbooks packaged as SKILL.md skill packages
136
+ - FR103: 8 Cyber playbooks packaged as SKILL.md skill packages
137
+ - FR104: Extension module restructured with module.yaml `code` field
138
+ - FR105: Module setup skill created for config management (anti-zombie pattern)
139
+ - FR106: Dual-layer agent definition consolidated into single agent skill folder
140
+ - FR107: Installer detects BMAD version and performs in-place migration during normal installation
141
+ - FR108: Migration preserves user customizations
142
+ - FR109: Legacy artifacts removed after successful migration
143
+ - FR110: Fresh installations deploy directly in 6.2.0 format
144
+
145
+ #### Multi-Repository Project Layout (FR111-FR122)
146
+ - FR111: Installer asks where knowledgebase is managed (current repo / local / remote)
147
+ - FR112: Installer asks where sprint management is managed
148
+ - FR113: Remote option: ask git URL + local destination, confirm if exists
149
+ - FR114: Remote: clone if destination doesn't exist
150
+ - FR115: Local: validate path exists, alert if not
151
+ - FR116: Same-repo default: no additional config
152
+ - FR117: Paths stored in config.yaml (`knowledgebase_path`, `sprint_management_path`)
153
+ - FR118: project-context.md includes configured paths as mandatory agent rules
154
+ - FR119: Planning workflows resolve output from `{knowledgebase_path}`
155
+ - FR120: Sprint workflows resolve paths from `{sprint_management_path}`
156
+ - FR121: Dashboard (Phase 3) resolves from `{sprint_management_path}`
157
+ - FR122: Multi-repo mode creates `project-layout.yaml` cross-reference file
158
+
159
+ ### Functional Requirements (Phase 2 — added 2026-04-03)
160
+
161
+ #### Unified Sprint-Status Management (FR133-FR140)
162
+ - FR133: Sprint management uses a single unified `sprint-status.yaml` with three sections: `epics` (reference), `backlog` (unassigned items), and `sprints` (sprint definitions with assigned items)
163
+ - FR134: Stories and bugs MOVE between the `backlog` and `sprints` sections — an item exists in exactly one location at any time
164
+ - FR135: Each item carries its own `status` field, updated in-place within the section where it resides
165
+ - FR136: Items reaching `done` status are removed from `sprint-status.yaml` and archived to `done/` folder
166
+ - FR137: A close-sprint workflow transitions a sprint from `active` to `closed`, archiving all done items and returning incomplete items to backlog
167
+ - FR138: When `tracking_system` is configured as `jira`, sprint management skills read/write from Jira API using the same data model (adapter pattern)
168
+ - FR139: The unified schema replaces the previous three-file model (`backlog.yaml`, `sprints/sprint-N.yaml`, `sprint-status.yaml`) — deprecated files are migrated or removed
169
+ - FR140: All 12 sprint-related skills are reworked to operate against the single unified file
170
+
171
+ ### NonFunctional Requirements
172
+
173
+ - NFR1: Skills must not transmit project data externally — all content is static instruction delivery, not data collection
174
+ - NFR2: Installation process must function fully offline for air-gapped environments
175
+ - NFR3: Skill content must be inspectable (plain text markdown/JSON) — no obfuscated or compiled instructions
176
+ - NFR4: BMAD customizations must not be overwritten by updates without explicit user action
177
+ - NFR5: Skill installation must not corrupt or remove existing agent configurations — additive-only operations
178
+ - NFR6: Agent format translation must produce valid configuration for each target agent's expected format
179
+ - NFR7: Manifest operations (read/write/update) must be atomic — no partial manifest states on failure
180
+ - NFR8: BMAD install/update/customize pipeline must execute steps in strict order with rollback on failure
181
+ - NFR9: CLI must produce identical results on Windows, macOS, and Linux for the same inputs
182
+ - NFR10: Skills authored once must install without modification across all supported agents
183
+ - NFR11: Adding a new agent target must not require changes to existing skills — only a new template mapping
184
+ - NFR12: The tool must function with Node.js LTS versions (current and previous)
185
+ - NFR13: Adding a new agent to the registry must require only a configuration entry, not code changes to the installer core
186
+ - NFR14: Adding a new skill must require only the skill package files (skill.json + SKILL.md + templates), not installer modifications
187
+ - NFR15: Skill format must remain backward-compatible — older skills must install correctly with newer tool versions
188
+
189
+ ### NonFunctional Requirements (Phase 2 — added 2026-03-12)
190
+
191
+ - NFR16: The BMAD extension module must survive `npx bmad-method install --action update` without losing functionality
192
+ - NFR17: All BMAD-facing changes must use official BMAD Builder extension APIs only — zero bmad-method core modifications
193
+ - NFR18: OpenCode JSON instruction injection must not corrupt existing `opencode.json` configuration — additive-only
194
+ - NFR19: Bug and sprint extension workflows must function identically whether invoked via BMAD agent menu or direct slash command
195
+ - NFR20: The bundled BMAD cache must be version-pinned (v6.0.4 initial) — upgrading the bundled version is a deliberate, tested release operation
196
+ - NFR21: The bundled installation must produce a complete, deterministic `_bmad/` output from the bundled npm package
197
+
198
+ ### NonFunctional Requirements (Phase 2 — added 2026-03-26)
199
+
200
+ - NFR29: Migration from 6.0.4 to 6.2.0 must be atomic — all succeed or rollback
201
+ - NFR30: Migrated agents must produce functionally equivalent behavior
202
+ - NFR31: Migrated agent skill folders must pass BMAD Builder lint gate
203
+ - NFR32: All 34 converted workflows must produce identical output artifacts
204
+ - NFR33: Module setup skill anti-zombie cleanup must be idempotent
205
+ - NFR34: Multi-repo config must be backward-compatible with single-repo mode
206
+ - NFR35: Remote repo cloning must work with internal git URLs (air-gapped)
207
+ - NFR36: project-layout.yaml must be deterministic
208
+ - NFR37: All BMAD workflows must resolve paths through config, no hardcoded `_bmad-output/`
209
+
210
+ ### Additional Requirements
211
+
212
+ - Testing framework needs formalization — Node.js built-in test runner recommended per architecture
213
+ - Visual Studio agent integration mechanism needs investigation (VS Copilot Chat, .vs/ directory)
214
+ - Error code catalog — standardize currently ad-hoc error strings
215
+ - Structured logging for diagnostic purposes beyond console output
216
+ - Methodology presentation to be bundled with installation for team onboarding
217
+ - `--yes` flag support for non-interactive CI/CD mode (currently only `--force` exists)
218
+
219
+ ### FR Coverage Map
220
+
221
+ | FR | Epic | Description |
222
+ |----|------|-------------|
223
+ | FR6 | Epic 1 | `--yes` flag for non-interactive CI/CD mode |
224
+ | FR36 | Epic 2 | Equivalent behavior for new language skills across agents |
225
+ | FR39 | Epic 2 & 3 | Skill authoring for new language skills + tooling |
226
+ | FR10 | Epic 2 | New language skills install across all agents |
227
+ | FR40 | Epic 3 | Mandatory skill designation for authored skills |
228
+ | FR41 | Epic 3 | BMAD persona customization tooling |
229
+ | FR42 | Epic 3 | Specialized agent development tooling |
230
+ | FR43 | Epic 3 | MANIFEST.yaml generation validation |
231
+ | FR34 (VS gap) | Epic 4 | Visual Studio agent target |
232
+ | FR38 (VS) | Epic 4 | VS format translation |
233
+ | All other Phase 1 FRs | Implemented | v2.19.2 baseline — no epic needed |
234
+ | FR51 | Epic 8 | TOP injection placement |
235
+ | FR52 | Epic 8 | BMAD extension module with critical_actions |
236
+ | FR53 | Epic 8 | All 11 BMAD agent critical_actions |
237
+ | FR54 | Epic 8 | Per-agent enforcement (Claude Code hooks) |
238
+ | FR55 | Epic 8 | Context persistence research |
239
+ | FR56 | Epic 9 | OpenCode skill installation path |
240
+ | FR57 | Epic 9 | OpenCode JSON injection |
241
+ | FR58 | Epic 10 | _bmad-output not gitignored |
242
+ | FR59 | Epic 10 | _bmad-output policy documentation |
243
+ | FR60 | Epic 11 | Bug entity structure |
244
+ | FR61 | Epic 11 | Bug story workflow |
245
+ | FR62 | Epic 11 | auto-bug-detection skill |
246
+ | FR63 | Epic 11 | Code-review bug detection |
247
+ | FR64 | Epic 11 | Bugs as standalone backlog items |
248
+ | FR65 | Epic 12 | Flat backlog (stories + bugs) |
249
+ | FR66 | Epic 12 | Sprint capacity by item count |
250
+ | FR67 | Epic 12 | Multi-criteria prioritization |
251
+ | FR68 | Epic 12 | Add sprint workflow |
252
+ | FR69 | Epic 12 | Add to sprint workflow |
253
+ | FR70 | Epic 12 | Modify sprint workflow |
254
+ | FR71 | Epic 12 | Sprint status with assigned items |
255
+ | FR72 | Epic 6 | Methodology presentation bundled with BMAD install |
256
+ | FR73 | Epic 7 | Automated regression tests for 4 core modules |
257
+ | FR74 | Epic 5 | Bundle bmad-method as dependency |
258
+ | FR75 | Epic 5 | Bundle pre-cloned external modules |
259
+ | FR76 | Epic 5 | Pre-populate bmad cache before install |
260
+ | FR44 | Epic 5 | Air-gapped environment support via bundled installation |
261
+ | FR45 | Implemented | Cross-platform support (Windows, macOS, Linux) |
262
+ | FR79 | Epic 13 | Generate project-context.md at project-level install |
263
+ | FR80 | Epic 13 | Mandatory rules: MANIFEST, always_load skills, git worktrees |
264
+ | FR81 | Epic 13 | Platform-aware manifest path resolution (from full manifest) |
265
+ | FR82 | Epic 13 | Multi-platform manifest path listing |
266
+ | FR83 | Epic 13 | Full 8-step agent mission lifecycle documented |
267
+ | FR84 | Epic 13 | Idempotent generation — skip if exists |
268
+ | FR85 | Epic 13 | Inline expansion comments + template version comment |
269
+ | FR86 | Epic 13 | BMAD critical_actions updated for 12 BMM+master agents |
270
+ | FR87-FR93 | Phase 3 | Agent Activity Dashboard (deferred) |
271
+ | FR94-FR97 | Epic 15 | Custom agent conversion to SKILL.md skill folders |
272
+ | FR98-FR100 | Epic 15 | MIL-498 workflow conversion to SKILL.md |
273
+ | FR101-FR103 | Epic 15 | SRE/DevOps/Cyber workflow conversion to SKILL.md |
274
+ | FR104-FR106 | Epic 15 | Module architecture update (module.yaml code field, setup skill) |
275
+ | FR107-FR110 | Epic 15 | Migration detection, upgrade path, legacy cleanup |
276
+ | FR111-FR116 | Epic 16 | Multi-repo wizard (local/remote/same prompts) |
277
+ | FR117-FR118 | Epic 16 | Config storage + project-context stamping |
278
+ | FR119-FR122 | Epic 16 | Cross-repo path resolution + project-layout.yaml |
279
+ | FR123-FR127 | Epic 5 | Explicit parameter passing replacing silent install |
280
+ | FR65 (rework) | Epic 17 | Flat backlog model (not epic-grouped) |
281
+ | FR66 (rework) | Epic 17 | Sprint capacity with first-class sprint entity |
282
+ | FR67 (rework) | Epic 17 | Multi-criteria prioritization |
283
+ | FR128 | Epic 17 | Bug as story type in backlog |
284
+ | FR129 | Epic 17 | Move items from sprint back to backlog |
285
+ | FR130 | Epic 17 | Done items removed from sprint status file |
286
+ | FR131 | Epic 17 | Done story files moved to done/ subfolder |
287
+ | FR132 | Epic 17 | Sprints as first-class YAML entities |
288
+ | FR133 | Epic 17 | Unified sprint-status.yaml with three sections |
289
+ | FR134 | Epic 17 | Movement semantics — items move between backlog and sprint sections |
290
+ | FR135 | Epic 17 | In-place status updates on each item |
291
+ | FR136 | Epic 17 | Done items removed from file, archived to done/ |
292
+ | FR137 | Epic 17 | Close-sprint workflow for sprint lifecycle closure |
293
+ | FR138 | Epic 17 / Epic 14 | Jira adapter pattern (tracking_system switch) |
294
+ | FR139 | Epic 17 | Migration/removal of deprecated 3-file model |
295
+ | FR140 | Epic 17 | All 12 sprint skills reworked for unified file |
296
+ | FR141 | Epic 17 | Remove items from sprint back to backlog (remove-from-sprint skill) |
297
+ | FR142 | Epic 18 | Roo Code custom modes from BMAD agents |
298
+ | FR143 | Epic 18 | Roo Code rules from BMAD instructions |
299
+ | FR144 | Epic 18 | Roo Code slash commands from BMAD workflows |
300
+ | FR145 | Epic 18 | Cline-to-Roo Code migration |
301
+
302
+ ## Epic List
303
+
304
+ ### Epic 1: CI/CD Non-Interactive Mode
305
+ Engineers can run `npx ma-agents install --yes` for fully automated, non-interactive skill installation in CI/CD pipelines without human prompts.
306
+ **FRs covered:** FR6
307
+ **NFRs addressed:** NFR9 (cross-platform identical results)
308
+
309
+ ### Epic 2: Language-Specific Skill Expansion
310
+ Engineers working in C++, C#, and Python have dedicated coding standards and best practices skills installed through ma-agents, expanding the skill library with language-specific methodology content.
311
+ **FRs covered:** FR36, FR39, FR10
312
+ **NFRs addressed:** NFR10 (write-once skills), NFR14 (no installer changes for new skills)
313
+
314
+ ### Epic 3: Skill Authoring Tooling
315
+ The Chief Architect has tooling to scaffold, validate, and test new skills, lowering the barrier for organizational skill creators and ensuring consistency across the skill library.
316
+ **FRs covered:** FR39, FR40, FR41, FR42, FR43
317
+ **NFRs addressed:** NFR14 (skill format contract), NFR15 (backward compatibility)
318
+
319
+ ### Epic 4: Visual Studio Agent Integration
320
+ Engineers can target Visual Studio's AI assistant for skill installation, expanding agent coverage to the VS ecosystem and closing the last major agent gap.
321
+ **FRs covered:** FR34 (VS gap), FR38 (VS format translation)
322
+ **NFRs addressed:** NFR11 (new agent = template mapping only), NFR13 (config-driven registry)
323
+
324
+ ### Epic 5: Bundled BMAD Installation
325
+ The ma-agents npm package bundles bmad-method and all external BMAD modules (bmb, cis, tea, gds) so that `npx ma-agents install` never performs runtime git clone or npm registry fetch for BMAD components. Installation is deterministic and works in air-gapped environments where the npm package is available.
326
+ **FRs covered:** FR74, FR75, FR76
327
+ **NFRs addressed:** NFR2 (offline operation), NFR20 (version pinning), NFR21 (deterministic output)
328
+ **Dependencies:** Coordination with Epics 6, 8 (shared `bmad.js` modifications). Epic 8 creates extension module deployment in `bmad.js`. Epic 6 adds methodology deployment step. All three epics modify `bmad.js` — implementation must coordinate merge order.
329
+ **Version pin:** bmad-method v6.0.4
330
+
331
+ ### Epic 6: Methodology Onboarding Package
332
+ Teams receive a methodology presentation bundled with installation, enabling organizational onboarding to BMAD-METHOD without separate training materials.
333
+ **FRs covered:** FR72
334
+ **Standalone:** Adds content to existing install pipeline
335
+ **Phase 2 dependencies:** Epic 5 modifies `bmad.js` invocation pattern (must ship first). Epic 8 modifies `bmad.js` for extension module deployment — coordinate insertion point for methodology deployment step.
336
+
337
+ ### Epic 7: Test Suite Foundation
338
+ Contributors have automated regression tests verifying architectural contracts across the 4 core modules (cli.js, installer.js, agents.js, bmad.js), catching pipeline ordering violations, registry inconsistencies, and template resolution bugs before release.
339
+ **FRs covered:** FR73 (developer infrastructure)
340
+ **NFRs verified:** NFR5 (additive-only), NFR7 (atomic manifests), NFR8 (strict pipeline ordering), NFR9 (cross-platform)
341
+ **Dependencies:** Testing framework architectural decision must be finalized before Story 7.1
342
+ **Test isolation:** All stories use temp directories for file operations; module-level tests use dependency injection or function-level mocking to avoid triggering real installs, BMAD operations, or file system side effects
343
+ **Coverage targets:** All public functions in the 4 modules; minimum one happy-path and one error-path test per function; template resolution edge cases (missing template, all fallbacks fail)
344
+
345
+ ### Epic 8: Skill Enforcement Architecture (Phase 2)
346
+ Engineers' installed skills are reliably enforced by all agents — agents load and follow skills automatically without user reminders (zero-reminder workflow).
347
+ **FRs covered:** FR51, FR52, FR53, FR54, FR55
348
+ **NFRs addressed:** NFR16 (extension survives updates), NFR17 (zero core modifications)
349
+ **Note:** FR53 scope is all 11 BMAD agents per architecture decision P2-4 (4 custom full + 7 built-in minimal)
350
+
351
+ ### Epic 9: OpenCode Agent Support (Phase 2)
352
+ Engineers can target OpenCode as the 12th supported agent for skill installation, with JSON-based instruction injection.
353
+ **FRs covered:** FR56, FR57
354
+ **NFRs addressed:** NFR18 (additive-only JSON merge), NFR13 (config-driven registry)
355
+
356
+ ### Epic 10: Project Knowledge Preservation (Phase 2)
357
+ Engineers' planning and implementation artifacts (`_bmad-output`) are version-controlled project knowledge, never gitignored.
358
+ **FRs covered:** FR58, FR59
359
+
360
+ ### Epic 11: Bug Management System (Phase 2)
361
+ Agents detect defects in already-delivered code and generate structured bug reports that enter the backlog for sprint prioritization.
362
+ **FRs covered:** FR60, FR61, FR62, FR63, FR64
363
+ **NFRs addressed:** NFR19 (menu + slash command invocation)
364
+ **Dependency:** Uses extension module from Epic 8 for workflow deployment
365
+
366
+ ### Epic 12: Realistic Sprint Management (Phase 2) **[SUPERSEDED by Epic 17]**
367
+ Project managers work with flat backlogs containing stories and bugs, capacity-based sprints, and multi-criteria prioritization.
368
+ **FRs covered:** FR65, FR66, FR67, FR68, FR69, FR70, FR71
369
+ **NFRs addressed:** NFR19 (menu + slash command invocation)
370
+
371
+ ### Epic 13: Project Context Auto-Generation (Phase 2)
372
+ At project-level installation, ma-agents generates `_bmad-output/project-context.md` — a platform-agnostic constitutional document that mandates skill loading, fresh-worktree git workflow, and the full agent mission lifecycle for all installed agents and BMAD workflows.
373
+ **FRs covered:** FR79, FR80, FR81, FR82, FR83, FR84, FR85, FR86
374
+ **NFRs addressed:** NFR22 (template has no hardcoded paths), NFR23 (additive-only), NFR24 (template as separate file), NFR25 (version comment for upgrade detection)
375
+ **Dependency:** Uses extension module from Epic 8 for critical_actions update; `_bmad-output/` policy from Epic 10
376
+ **Dependency:** Uses extension module from Epic 8 for workflow deployment
377
+
378
+ ### Epic 17: Sprint Management Model Rework (Phase 2)
379
+ Sprint management is redesigned around a **single unified `sprint-status.yaml`** file with three sections: `epics` (reference), `backlog` (unassigned items), and `sprints` (sprint definitions with assigned items). Stories and bugs MOVE between sections using movement semantics. Each item carries its own status, updated in-place. Done items are removed from the file and archived. A new close-sprint skill handles sprint lifecycle closure. A Jira adapter pattern enables the same data model to read/write from Jira API when `tracking_system` is configured as `jira`. All 12 sprint-related skills are reworked for the unified file, and the deprecated 3-file model is migrated/removed.
380
+ **FRs covered:** FR65, FR66, FR67, FR128, FR129, FR130, FR131, FR132, FR133, FR134, FR135, FR136, FR137, FR138, FR139, FR140 (plus rework of FR68-FR71 workflows to work with new model)
381
+ **NFRs addressed:** NFR19 (menu + slash command invocation)
382
+ **Dependencies:** Epic 11 (bug entity structure). Reworks Epic 12's workflow shells to use the new model. Epic 14 (Jira adapter architecture — Story 14.3 must be approved before Story 17.22 implementation).
383
+ **Note:** Epic 12 delivered workflow files but not the underlying sprint data model. This epic builds the unified model, rewires all workflows, and provides the Jira adapter pattern.
384
+ **Skills affected:** Heavy rework (6): generate-backlog, add-to-sprint, remove-from-sprint, sprint-status-view, cleanup-done, bmad-sprint-planning. Moderate rework (3): add-sprint, modify-sprint, bmad-dev-story. Light rework (3): story-status-lookup, bmad-sprint-status, prioritize-backlog. New skill (1): close-sprint.
385
+
386
+ ### Epic 15: BMAD 6.2.1 Agent Architecture Migration (Phase 2)
387
+ ma-agents upgrades from bmad-method 6.0.4 to 6.2.1, restructures the extension module to follow BMAD 6.2.0 module conventions (agents as skill folders, workflows as skill folders, module.yaml with code field), and provides an installer-driven migration path for existing installations.
388
+ **FRs covered:** FR94, FR95, FR96, FR97, FR98, FR99, FR100, FR101, FR102, FR103, FR104, FR105, FR106, FR107, FR108, FR109, FR110
389
+ **NFRs addressed:** NFR29 (atomic migration), NFR30 (functional equivalence), NFR31 (lint gate), NFR32 (output equivalence), NFR33 (anti-zombie idempotency)
390
+ **Dependencies:** Epic 5 must be complete first (explicit param passing is the foundation). Epic 8's extension module concept is restructured by this epic.
391
+
392
+ ### Epic 16: Multi-Repository Project Layout (Phase 2)
393
+ Enterprise projects that separate planning knowledge, sprint management, and code across repositories are fully supported. The installer discovers repo locations, stores paths in config, and stamps them into project-context.md so agents resolve artifacts to the correct repository.
394
+ **FRs covered:** FR111, FR112, FR113, FR114, FR115, FR116, FR117, FR118, FR119, FR120, FR121, FR122
395
+ **NFRs addressed:** NFR34 (backward compat), NFR35 (air-gapped remote clone), NFR36 (deterministic), NFR37 (no hardcoded paths)
396
+ **Dependencies:** Epic 15 must be complete (module restructure). Epic 13 (project-context) provides the template that gains multi-repo section.
397
+
398
+ ### Cross-Epic Coordination: `bmad.js`
399
+
400
+ Four epics modify `bmad.js`. Implementation order matters:
401
+ 1. **Epic 5** (Bundled BMAD + Explicit Params) — changes invocation from `npx bmad-method` to vendored `node <resolved-path>` with explicit CLI flags, adds cache pre-population
402
+ 2. **Epic 15** (6.2.1 Migration) — changes `--custom-content` deployment, adds migration detection, restructures extension module deployment
403
+ 3. **Epic 6** (Methodology Onboarding) — adds methodology deployment step
404
+ 4. **Epic 8** (Skill Enforcement) — adds extension module deployment (restructured by Epic 15)
405
+
406
+ Stories in Epics 6, 8, and 15 that touch `bmad.js` must build on Epic 5's vendored invocation + explicit parameter pattern.
407
+
408
+ ### Development Execution Order
409
+
410
+ **Phase A — Installation Fixes (release version after completion):**
411
+ 1. **Epic 5** (Bundled BMAD + Explicit Params) — fix installation bugs, explicit parameter passing → **release**
412
+
413
+ **Phase B — BMAD 6.2.1 Alignment (release version after completion):**
414
+ 2. **Epic 15** (BMAD 6.2.1 Migration) — version bump, module restructure, agent/workflow conversion → **release**
415
+
416
+ **Phase C — Remaining Features:**
417
+ 3. **Epic 17** (Sprint Management Model Rework) — unified sprint-status.yaml, reworks Epic 12 workflows, depends on Epic 11. Stories 17.9-17.24 can proceed independently (except 17.22). Story 17.22 (Jira adapter) blocked on Epic 14 Story 14.3 architecture approval.
418
+ 4. **Epic 16** (Multi-Repo Layout) — depends on Epic 15 module restructure
419
+ 5. **Epics 4, 7** (VS Integration, Test Suite) — on hold, can resume in parallel
420
+ 6. **Epic 14** (External Tooling) — Phase 3, depends on Epics 12, 13. Story 14.3 architecture is prerequisite for Epic 17 Story 17.22 (Jira adapter).
421
+
422
+ ---
423
+
424
+ ## Epic 5: Bundled BMAD Installation (Phase 2)
425
+
426
+ The ma-agents npm package bundles bmad-method and all external BMAD modules (bmb, cis, tea, gds) so that `npx ma-agents install` never performs runtime git clone or npm registry fetch for BMAD components. Installation is deterministic and works in air-gapped environments where the npm package is available.
427
+
428
+ ### Story 5.1: Add bmad-method as Direct Dependency
429
+
430
+ As a **DevOps engineer**,
431
+ I want bmad-method included as a direct npm dependency in ma-agents,
432
+ So that BMAD installation does not require fetching bmad-method from the npm registry at runtime.
433
+
434
+ **Acceptance Criteria:**
435
+
436
+ **Given** `package.json` includes `"bmad-method": "6.0.4"` as a dependency
437
+ **When** `npm install` or `npm pack` is run
438
+ **Then** bmad-method v6.0.4 is installed in `node_modules/bmad-method/`
439
+
440
+ **Given** bmad-method is available in `node_modules/`
441
+ **When** `bmad.js` needs to invoke bmad-method
442
+ **Then** it uses `require.resolve('bmad-method/tools/bmad-npx-wrapper.js')` to find the local copy
443
+ **And** invokes it via `execSync('node <resolved-path> install ...')` instead of `execSync('npx bmad-method install ...')`
444
+
445
+ **Given** the vendored bmad-method is used
446
+ **When** any install, update, or recompile operation runs
447
+ **Then** the behavior is identical to the previous `npx bmad-method` invocation
448
+ **And** no npm registry network call is made for bmad-method
449
+
450
+ **Given** a project with an existing BMAD installation (installed via previous ma-agents version using `npx bmad-method`),
451
+ **When** the project upgrades to this version and runs `npx ma-agents install` or update,
452
+ **Then** existing `_bmad/` content is preserved, BMAD workflows continue to function, and no corruption occurs.
453
+
454
+ **Technical notes:**
455
+ - All 3 `execSync('npx bmad-method ...')` calls in `bmad.js` (lines 14, 37, 112) must be updated
456
+ - The resolved path must work cross-platform (use `path.join()`)
457
+
458
+ ### Story 5.2: Create BMAD Cache Build Script
459
+
460
+ As a **Chief Architect**,
461
+ I want a build script that clones all BMAD external modules and their dependencies into `lib/bmad-cache/`,
462
+ So that the external modules can be bundled inside the ma-agents npm package for deterministic installation.
463
+
464
+ **Acceptance Criteria:**
465
+
466
+ **Given** the developer runs `npm run build:bmad-cache` on a connected machine
467
+ **When** the script executes
468
+ **Then** it clones each module listed in bmad-method's `external-official-modules.yaml` (bmb, cis, tea, gds) into `lib/bmad-cache/<module-code>/` using `git clone --depth 1`
469
+ **And** runs `npm install --omit=dev` inside each cloned module directory
470
+ **And** removes `.git/` directories from each cloned module to reduce package size
471
+ **And** creates a `lib/bmad-cache/cache-manifest.json` recording module versions, clone date, and source URLs
472
+
473
+ **Given** the script has already been run and `lib/bmad-cache/` exists
474
+ **When** the script is run again with `--force`
475
+ **Then** it removes the existing cache and rebuilds from scratch
476
+
477
+ **Given** the script is run without `--force` and `lib/bmad-cache/` exists
478
+ **When** a module's cached version matches the upstream HEAD
479
+ **Then** that module is skipped (incremental update)
480
+
481
+ **Given** the npm package is built with `npm pack`,
482
+ **When** the resulting tarball is inspected,
483
+ **Then** `lib/bmad-cache/` and all module directories are included in the package.
484
+
485
+ **Technical notes:**
486
+ - The script reads module definitions from bmad-method's `external-official-modules.yaml` (from the bmad-method npm dependency at `node_modules/bmad-method/`)
487
+ - The `.npmignore` or `package.json` `files` field must include `lib/bmad-cache/` to ensure it ships with the npm package
488
+ - Target bmad-method version: v6.0.4
489
+
490
+ ### Story 5.3: Pre-populate BMAD External Module Cache
491
+
492
+ As a **DevOps engineer**,
493
+ I want the installer to pre-populate `~/.bmad/cache/external-modules/` from the bundled cache before invoking bmad-method,
494
+ So that bmad-method finds the external modules locally and skips git clone.
495
+
496
+ **Acceptance Criteria:**
497
+
498
+ **Given** `lib/bmad-cache/` contains pre-cloned modules (bmb, cis, tea, gds)
499
+ **When** the installer runs BMAD installation (install or update)
500
+ **Then** before invoking bmad-method, it copies each module from `lib/bmad-cache/<code>/` to `~/.bmad/cache/external-modules/<code>/`
501
+ **And** only copies if the target directory does not already exist (or `--force` is set)
502
+
503
+ **Given** the target cache directory `~/.bmad/cache/external-modules/bmb/` already exists
504
+ **When** the installer runs without `--force`
505
+ **Then** the existing cache is preserved (no overwrite)
506
+ **And** bmad-method uses the existing cached copy
507
+
508
+ **Given** the target cache directory exists
509
+ **When** the installer runs with `--force`
510
+ **Then** the existing cache is replaced with the bundled version
511
+
512
+ **Given** the cache is pre-populated from the bundled copy
513
+ **When** bmad-method's `cloneExternalModule()` runs
514
+ **Then** the installer sets `GIT_TERMINAL_PROMPT=0` in the child process environment to prevent interactive git prompts
515
+ **And** even if `git fetch` succeeds on a connected machine, the installation result remains deterministic because bmad-method uses the existing cache directory without overwriting bundled content
516
+
517
+ **Given** the cache is pre-populated
518
+ **When** bmad-method's `cloneExternalModule()` runs
519
+ **Then** it detects `fs.pathExists(moduleCacheDir)` is true
520
+ **And** attempts `git fetch` internally (succeeds silently on connected machines, fails silently in air-gapped environments — either way, the pre-populated cache is used)
521
+ **And** proceeds with the cached copy
522
+
523
+ **Technical notes:**
524
+ - Cache pre-population runs BEFORE any `bmad.installBmad()` or `bmad.updateBmad()` call
525
+ - Use `fs.copy()` (from fs-extra) for directory copy
526
+ - Create `~/.bmad/cache/external-modules/` directory structure if it doesn't exist
527
+ - This is the critical step that makes air-gapped BMAD installation work
528
+ - Note: bmad-method's internal git fetch on existing cache directories does a `git fetch` + `git reset --hard origin/main` only if fetch succeeds. To guarantee deterministic output per NFR20/NFR21, the pre-population step should set the cache directories as read-only or the installer should re-copy bundled cache after bmad-method completes. This is a design decision to resolve during implementation.
529
+
530
+ ### Story 5.4: Validate Bundled Installation Completeness
531
+
532
+ As a **Chief Architect**,
533
+ I want to verify that installation from the bundled npm package produces a complete, functional BMAD environment,
534
+ So that deterministic installation is validated (NFR21).
535
+
536
+ **Acceptance Criteria:**
537
+
538
+ **Given** the ma-agents npm package is installed (via `npm install` or `npx`)
539
+ **When** `npx ma-agents install` is run with BMAD installation
540
+ **Then** the resulting `_bmad/` directory structure is complete
541
+ **And** all BMAD modules are present: core, bmm, bmb, cis, tea, gds
542
+ **And** all BMAD workflows, agents, and tasks function correctly
543
+ **And** all ma-agents customizations are applied (agent personas, MIL-STD-498 workflows, extension module)
544
+
545
+ **Given** the installation is complete
546
+ **When** the user runs any BMAD workflow (e.g., `/bmad-bmm-create-prd`)
547
+ **Then** the workflow executes correctly
548
+
549
+ **Given** the installation is complete
550
+ **When** the user runs `npx ma-agents status`
551
+ **Then** the status shows all installed skills and BMAD modules correctly
552
+
553
+ **Technical notes:**
554
+ - This is a validation/testing story, not a code implementation story
555
+ - Create a test procedure document verifying installation completeness
556
+ - Verify that no git clone or npm registry fetch occurs during BMAD installation
557
+ - Document any environment-specific considerations (e.g., cache-manifest.json dates)
558
+
559
+ ### Story 5.5: Explicit Parameter Passing to bmad-method
560
+
561
+ As a **DevOps engineer**,
562
+ I want ma-agents to pass all collected installation parameters to bmad-method as explicit CLI flags,
563
+ So that BMAD is fully configured for all selected platforms (including OpenCode) without relying on the broken silent install mode.
564
+
565
+ **Acceptance Criteria:**
566
+
567
+ **Given** the user selects platforms during the ma-agents wizard (e.g., claude-code, cursor, opencode)
568
+ **When** bmad.js invokes bmad-method
569
+ **Then** it passes `--tools claude-code,cursor,opencode` explicitly
570
+ **And** bmad-method configures all selected platforms correctly
571
+
572
+ **Given** the user provides their name and language preference during the ma-agents wizard
573
+ **When** bmad.js invokes bmad-method
574
+ **Then** it passes `--user-name`, `--communication-language`, `--document-output-language`, and `--output-folder` as explicit flags
575
+ **And** bmad-method uses these values without prompting
576
+
577
+ **Given** all BMAD-relevant parameters are passed as explicit CLI flags
578
+ **When** the `--yes` flag is also included
579
+ **Then** bmad-method skips prompts only for parameters already supplied via flags
580
+ **And** applies its own defaults for any new parameters ma-agents hasn't mapped (FR125)
581
+ **And** no interactive BMAD prompt appears to the user (FR126)
582
+
583
+ **Given** the installer runs in CI/CD mode (`--yes --force`)
584
+ **When** bmad.js constructs the bmad-method command
585
+ **Then** it uses the same `buildBmadArgs()` function with pre-determined default answers
586
+ **And** produces identical BMAD configuration as interactive mode (FR127)
587
+
588
+ **Given** the extension module exists at `lib/bmad-extension/`
589
+ **When** bmad.js invokes bmad-method
590
+ **Then** it passes `--custom-content` with the quoted path to the extension module
591
+ **And** bmad-method validates the module.yaml and deploys the extension
592
+
593
+ **Given** bmad-method is invoked with `--action update` for existing installations
594
+ **When** the update completes
595
+ **Then** all explicit parameters are applied to the update
596
+ **And** existing customizations are preserved per bmad-method's update behavior
597
+
598
+ **Technical notes:**
599
+ - Create `buildBmadArgs(installContext)` function in `bmad.js` that constructs the full parameter list
600
+ - All path arguments must be quoted: `--directory "${projectRoot}"` (fixes space-in-path bug)
601
+ - The `--modules` flag always passes the full set: `bmm,bmb,cis,tea,gds`
602
+ - The `--custom-content` flag points to the extension module: `lib/bmad-extension/`
603
+ - Replaces all 3 existing `execSync('npx bmad-method ...')` calls
604
+ - Must work with bmad-method v6.0.4 CLI flag interface
605
+
606
+ ### Story 5.6: Fix Space-in-Path Bug
607
+
608
+ As an **engineer**,
609
+ I want ma-agents installation to work in directories containing spaces,
610
+ So that I can install in any project location without path-related failures.
611
+
612
+ **Acceptance Criteria:**
613
+
614
+ **Given** the project is located at a path with spaces (e.g., `d:\My Projects\agents`)
615
+ **When** `npx ma-agents install` is run
616
+ **Then** the installation completes without errors
617
+ **And** all file paths are properly quoted in `execSync` calls
618
+
619
+ **Given** any `execSync` call in `bmad.js` that constructs shell commands with paths
620
+ **When** the path contains spaces, parentheses, or other shell-special characters
621
+ **Then** the path is enclosed in double quotes in the command string
622
+
623
+ **Given** `require.resolve()` returns a path with spaces
624
+ **When** the resolved path is used in an `execSync` call
625
+ **Then** the path is quoted: `execSync('node "${resolvedPath}" install ...')`
626
+
627
+ **Technical notes:**
628
+ - Audit all `execSync` calls in `bmad.js` for unquoted path interpolation
629
+ - The `buildBmadArgs()` function from Story 5.5 should handle quoting for all path arguments
630
+ - Test on Windows with paths like `C:\Users\John Smith\Documents\project`
631
+ - This is a bug fix — can be combined with Story 5.5 implementation since both touch the same code
632
+
633
+ ---
634
+
635
+ ## Epic 1: CI/CD Non-Interactive Mode
636
+
637
+ Engineers can run `npx ma-agents install --yes` for fully automated, non-interactive skill installation in CI/CD pipelines without human prompts.
638
+
639
+ ### Story 1.1: Add --yes Flag for Non-Interactive Skill Installation
640
+
641
+ As a **DevOps engineer**,
642
+ I want to run `npx ma-agents install --yes` to skip all interactive prompts,
643
+ So that I can automate skill installation in CI/CD pipelines without human intervention.
644
+
645
+ **Acceptance Criteria:**
646
+
647
+ **Given** the CLI is invoked with `--yes` flag
648
+ **When** the install command executes
649
+ **Then** all interactive prompts (skill selection, agent selection, confirmations) are bypassed with default selections
650
+ **And** the installation completes without requiring stdin input
651
+ **And** exit code 0 is returned on success, non-zero on failure
652
+
653
+ **Given** the CLI is invoked with `--yes --force` flags together
654
+ **When** the install command executes
655
+ **Then** prompts are skipped AND existing files are overwritten
656
+ **And** the behavior is equivalent to answering "yes" to every prompt plus forcing overwrites
657
+
658
+ **Given** the CLI is invoked with `--yes` and a specific agent target (e.g., `--agent claude-code`)
659
+ **When** the install command executes
660
+ **Then** only the specified agent is targeted without prompting for agent selection
661
+ **And** all skills are installed to that agent without skill selection prompts
662
+
663
+ ---
664
+
665
+ ## Epic 2: Language-Specific Skill Expansion
666
+
667
+ Engineers working in C++, C#, and Python have dedicated coding standards and best practices skills installed through ma-agents, expanding the skill library with language-specific methodology content.
668
+
669
+ ### Story 2.1: Create C++ Best Practices Skill
670
+
671
+ As a **C++ engineer**,
672
+ I want a C++ coding standards and best practices skill available in ma-agents,
673
+ So that my AI coding agent follows our organization's C++ methodology consistently.
674
+
675
+ **Acceptance Criteria:**
676
+
677
+ **Given** the C++ skill directory exists at `skills/cpp-best-practices/`
678
+ **When** the skill is listed via `npx ma-agents list`
679
+ **Then** it appears with category "language" and description referencing C++ standards
680
+
681
+ **Given** the C++ skill is installed to any supported agent
682
+ **When** the agent receives the skill content
683
+ **Then** it contains C++ coding standards, naming conventions, memory management patterns, and best practices
684
+ **And** the content is applicable to modern C++ (C++17/20/23)
685
+
686
+ **Given** the skill directory contains `skill.json`, `SKILL.md`, and optionally `templates/`
687
+ **When** no agent-specific template exists for a target agent
688
+ **Then** the `SKILL.md` canonical content is used as fallback per template resolution priority
689
+
690
+ ### Story 2.2: Create C# Best Practices Skill
691
+
692
+ As a **C# engineer**,
693
+ I want a C# coding standards and best practices skill available in ma-agents,
694
+ So that my AI coding agent follows our organization's C# methodology consistently.
695
+
696
+ **Acceptance Criteria:**
697
+
698
+ **Given** the C# skill directory exists at `skills/csharp-best-practices/`
699
+ **When** the skill is listed via `npx ma-agents list`
700
+ **Then** it appears with category "language" and description referencing C# standards
701
+
702
+ **Given** the C# skill is installed to any supported agent
703
+ **When** the agent receives the skill content
704
+ **Then** it contains C# coding standards, .NET patterns, async/await best practices, and LINQ guidelines
705
+ **And** the content covers .NET 8+ modern patterns
706
+
707
+ **Given** the skill follows the standard skill schema contract
708
+ **When** installed across multiple agents
709
+ **Then** it produces functionally equivalent behavior regardless of target agent (FR36)
710
+
711
+ ### Story 2.3: Create Python Best Practices Skill
712
+
713
+ As a **Python engineer**,
714
+ I want a Python coding standards and best practices skill available in ma-agents,
715
+ So that my AI coding agent follows our organization's Python methodology consistently.
716
+
717
+ **Acceptance Criteria:**
718
+
719
+ **Given** the Python skill directory exists at `skills/python-best-practices/`
720
+ **When** the skill is listed via `npx ma-agents list`
721
+ **Then** it appears with category "language" and description referencing Python standards
722
+
723
+ **Given** the Python skill is installed to any supported agent
724
+ **When** the agent receives the skill content
725
+ **Then** it contains Python coding standards, PEP 8 conventions, type hinting patterns, and packaging best practices
726
+ **And** the content covers Python 3.10+ modern patterns
727
+
728
+ **Given** all three language skills (C++, C#, Python) are installed
729
+ **When** the manifest is checked via `npx ma-agents status`
730
+ **Then** all three appear with correct versions and installation status per agent
731
+
732
+ ---
733
+
734
+ ## Epic 3: Skill Authoring Tooling
735
+
736
+ The Chief Architect has tooling to scaffold, validate, and test new skills, lowering the barrier for organizational skill creators and ensuring consistency across the skill library.
737
+
738
+ ### Story 3.1: Skill Scaffolding Command
739
+
740
+ As a **Chief Architect**,
741
+ I want to run `npx ma-agents create-skill <skill-name>` to generate a new skill directory with all required files,
742
+ So that I can author new skills quickly without manually creating the directory structure.
743
+
744
+ **Acceptance Criteria:**
745
+
746
+ **Given** the user runs `npx ma-agents create-skill my-new-skill`
747
+ **When** the command executes
748
+ **Then** a directory `skills/my-new-skill/` is created with:
749
+ - `skill.json` populated with name, version "1.0.0", empty description, default category, empty tags, `always_load: false`
750
+ - `SKILL.md` with a template structure including frontmatter and placeholder content sections
751
+ - `templates/` directory (empty, ready for agent-specific templates)
752
+ - `references/` directory (empty)
753
+ - `assets/` directory (empty)
754
+
755
+ **Given** a skill with the same name already exists
756
+ **When** the create-skill command is run
757
+ **Then** the command fails with an error message and does not overwrite the existing skill
758
+ **And** a hint suggests using a different name or removing the existing skill first
759
+
760
+ **Given** the skill name contains invalid characters (spaces, uppercase, special chars)
761
+ **When** the create-skill command is run
762
+ **Then** the command fails with an error explaining kebab-case naming requirement
763
+
764
+ ### Story 3.2: Skill Validation Command
765
+
766
+ As a **Chief Architect**,
767
+ I want to run `npx ma-agents validate-skill <skill-name>` to check a skill for schema compliance,
768
+ So that I can catch skill format errors before distribution.
769
+
770
+ **Acceptance Criteria:**
771
+
772
+ **Given** the user runs `npx ma-agents validate-skill my-skill`
773
+ **When** the skill directory exists and contains valid files
774
+ **Then** the command reports "VALID" with a summary of skill metadata
775
+
776
+ **Given** the skill is missing `skill.json`
777
+ **When** the validate command runs
778
+ **Then** it reports "INVALID: missing required file skill.json"
779
+
780
+ **Given** the skill is missing `SKILL.md`
781
+ **When** the validate command runs
782
+ **Then** it reports "INVALID: missing required file SKILL.md"
783
+
784
+ **Given** the `skill.json` has missing or invalid fields (no name, no version, invalid category)
785
+ **When** the validate command runs
786
+ **Then** it reports each validation error with the field name and expected format
787
+
788
+ **Given** the skill has agent-specific templates in `templates/`
789
+ **When** the validate command runs
790
+ **Then** it verifies each template filename matches a known agent registry key
791
+ **And** warns about templates targeting unknown agents
792
+
793
+ ### Story 3.3: Skill Test Install Command
794
+
795
+ As a **Chief Architect**,
796
+ I want to run `npx ma-agents test-skill <skill-name>` to perform a dry-run installation across all agents,
797
+ So that I can verify the skill installs correctly before publishing.
798
+
799
+ **Acceptance Criteria:**
800
+
801
+ **Given** the user runs `npx ma-agents test-skill my-skill`
802
+ **When** the command executes
803
+ **Then** it simulates installation to each supported agent without writing files
804
+ **And** reports which template would be used per agent (agent-specific, generic, or SKILL.md fallback)
805
+ **And** shows the resolved content that would be installed (with frontmatter injection)
806
+
807
+ **Given** a template has syntax errors or missing frontmatter
808
+ **When** the test-skill command runs
809
+ **Then** it reports the specific issue per agent target
810
+
811
+ **Given** the `--write` flag is provided
812
+ **When** the test-skill command runs
813
+ **Then** it writes the resolved output to a `test-output/` directory within the skill (gitignored) for manual review
814
+ **And** does NOT install to actual agent directories
815
+
816
+ ---
817
+
818
+ ## Epic 4: Visual Studio Agent Integration
819
+
820
+ Engineers can target Visual Studio's AI assistant for skill installation, expanding agent coverage to the VS ecosystem and closing the last major agent gap.
821
+
822
+ ### Story 4.1: Research Visual Studio AI Agent Configuration
823
+
824
+ As a **Chief Architect**,
825
+ I want to understand how Visual Studio exposes AI agent configuration,
826
+ So that we can determine the correct injection mechanism for skill installation.
827
+
828
+ **Acceptance Criteria:**
829
+
830
+ **Given** Visual Studio has GitHub Copilot integration
831
+ **When** the integration mechanism is investigated
832
+ **Then** a technical note is produced documenting:
833
+ - Where VS stores AI agent instructions (file paths, config directories)
834
+ - What format VS expects (markdown, JSON, YAML, or other)
835
+ - How VS Copilot Chat extensions handle custom instructions
836
+ - Whether `.vs/` directory, `.editorconfig`, or another mechanism is used
837
+ - Platform path differences (Windows-only or cross-platform VS Code distinction)
838
+
839
+ **Given** the research is complete
840
+ **When** the findings are documented
841
+ **Then** a clear recommendation exists for the agent registry configuration object fields
842
+
843
+ ### Story 4.2: Add Visual Studio Agent to Registry
844
+
845
+ As an **engineer**,
846
+ I want Visual Studio listed as a target agent in ma-agents,
847
+ So that I can install skills into Visual Studio's AI assistant.
848
+
849
+ **Acceptance Criteria:**
850
+
851
+ **Given** the VS agent configuration is understood from Story 4.1
852
+ **When** a new agent object is added to `lib/agents.js`
853
+ **Then** it includes: name, category, platform paths, instruction file, and resource map
854
+ **And** no changes are needed to `installer.js` or other modules (NFR13)
855
+
856
+ **Given** the VS agent is registered
857
+ **When** `npx ma-agents list --agents` is run
858
+ **Then** Visual Studio appears in the agent list
859
+
860
+ **Given** a skill is installed targeting the VS agent
861
+ **When** the install completes
862
+ **Then** skill content is placed in the correct VS configuration directory
863
+ **And** the manifest tracks the VS agent installation
864
+
865
+ ---
866
+
867
+ ## Epic 6: Methodology Onboarding Package
868
+
869
+ Teams receive a methodology presentation bundled with installation, enabling organizational onboarding to BMAD-METHOD without separate training materials.
870
+
871
+ ### Story 6.1: Bundle Methodology Presentation with Installation
872
+
873
+ As a **team lead**,
874
+ I want the BMAD-METHOD presentation included when ma-agents is installed,
875
+ So that new team members can learn the methodology without needing separate training materials.
876
+
877
+ **Acceptance Criteria:**
878
+
879
+ **Given** a methodology presentation file exists in the ma-agents package
880
+ **When** `npx ma-agents install` is run with BMAD installation
881
+ **Then** the presentation is copied to the project's BMAD output directory (e.g., `_bmad-output/methodology/`)
882
+ **And** the user is informed of the presentation location in the install summary
883
+
884
+ **Given** the presentation already exists in the target directory
885
+ **When** a subsequent install or update is run
886
+ **Then** the presentation is updated only if a newer version exists
887
+ **And** existing copies are not overwritten without the `--force` flag
888
+
889
+ ### Story 6.2: Add Methodology Overview Command
890
+
891
+ As an **engineer**,
892
+ I want to run `npx ma-agents methodology` to see an overview of the BMAD-METHOD,
893
+ So that I can quickly understand the methodology without opening the full presentation.
894
+
895
+ **Acceptance Criteria:**
896
+
897
+ **Given** the user runs `npx ma-agents methodology`
898
+ **When** the command executes
899
+ **Then** a concise CLI summary of BMAD-METHOD is displayed:
900
+ - What it is (one paragraph)
901
+ - The SDLC phases covered
902
+ - The agent personas available
903
+ - Where to find the full presentation
904
+
905
+ **Given** BMAD is not installed in the current project
906
+ **When** the methodology command is run
907
+ **Then** it still displays the overview (it's part of ma-agents, not dependent on BMAD install)
908
+ **And** suggests running `npx ma-agents install` to get started
909
+
910
+ **Status: DEFERRED** — Story 6.2 is not in the current sprint plan. Epic 6's MVP is deliverable with Story 6.1 alone (methodology content is deployed to a known location). Story 6.2 (discoverability command) can be added via correct-course if desired after 6.1 ships. No implementation artifact file exists for this story.
911
+
912
+ ---
913
+
914
+ ## Epic 7: Test Suite Foundation
915
+
916
+ Contributors have automated regression tests verifying architectural contracts across the 4 core modules (cli.js, installer.js, agents.js, bmad.js), catching pipeline ordering violations, registry inconsistencies, and template resolution bugs before release.
917
+
918
+ **FRs covered:** FR73
919
+ **Dependencies:** Testing framework decision (Architecture, Phase 2 Decisions table) must be finalized before Story 7.1 begins. Epic 9 (OpenCode) affects agent count — tests must use dynamic assertions.
920
+ **Test isolation strategy:** All stories use temp directories for file I/O. Module tests use dependency injection or function-level stubs to prevent real BMAD operations, real installs, or real file system writes outside temp. Each story must document its isolation approach in its acceptance criteria.
921
+ **Coverage targets:** All exported/public functions in the 4 modules. Minimum one happy-path and one error-path assertion per function. Template resolution priority chain requires dedicated edge-case coverage (missing agent template, missing generic template, all fallbacks exhausted).
922
+ **Audience:** Contributors and maintainers — not end users. This epic protects internal code quality.
923
+
924
+ ### Story 7.1: Set Up Test Framework and First Tests for agents.js
925
+
926
+ As a **contributor**,
927
+ I want a test framework configured with initial tests for the agent registry module,
928
+ So that agent configuration changes are verified automatically.
929
+
930
+ **Prerequisites:** Testing framework architectural decision finalized (Architecture, Phase 2 Decisions table). The chosen framework is used throughout — do not assume a specific framework in acceptance criteria.
931
+
932
+ **Acceptance Criteria:**
933
+
934
+ **Given** the chosen test framework is configured in `package.json`
935
+ **When** `npm test` is executed
936
+ **Then** tests run and report results with pass/fail counts
937
+
938
+ **Given** tests exist for `agents.js`
939
+ **When** the test suite runs
940
+ **Then** it verifies:
941
+ - All agents returned by the registry are present with required fields (name, category, paths, instruction file) — assert dynamically against the registry, not a hardcoded count
942
+ - Each agent has a valid `injectionStrategy` object with `position` defined
943
+ - Platform path resolution returns valid paths for the current OS
944
+ - Resource maps are defined for agents that need them (e.g., Cline)
945
+ - No duplicate agent names exist in the registry
946
+ - OpenCode agent (if registered) has `position: 'json-merge'` injection strategy
947
+
948
+ **Test isolation:** `agents.js` is a pure data + path module with no side effects — tests can call its functions directly without mocking. No file system writes occur.
949
+
950
+ ### Story 7.2: Add Tests for installer.js Core Operations
951
+
952
+ As a **contributor**,
953
+ I want tests covering the installer engine's core operations,
954
+ So that skill installation, manifest management, and MANIFEST.yaml generation are protected against regressions.
955
+
956
+ **Acceptance Criteria:**
957
+
958
+ **Given** tests exist for `installer.js`
959
+ **When** the test suite runs
960
+ **Then** it verifies:
961
+ - Skill discovery scans the `skills/` directory and finds all valid skills (assert count matches actual directory contents, not a hardcoded number)
962
+ - MANIFEST.yaml generation produces valid YAML from installed skills
963
+ - Manifest read/write operations are atomic (simulate write failure mid-operation — manifest remains in last valid state) (NFR7)
964
+
965
+ **Given** a test skill directory and a test agent config directory are set up in a temp directory
966
+ **When** install operations are tested
967
+ **Then** files are written to the temp directory, not actual agent config directories
968
+
969
+ **Template resolution priority chain (dedicated coverage):**
970
+
971
+ **Given** a test skill with all three template levels (agent-specific, generic, SKILL.md)
972
+ **When** resolution runs for an agent with an agent-specific template
973
+ **Then** the agent-specific template is selected
974
+
975
+ **Given** a test skill with only generic and SKILL.md (no agent-specific template)
976
+ **When** resolution runs
977
+ **Then** the generic template is selected
978
+
979
+ **Given** a test skill with only SKILL.md (no templates directory)
980
+ **When** resolution runs
981
+ **Then** SKILL.md is used as fallback
982
+
983
+ **Given** a test skill where SKILL.md is also missing or empty
984
+ **When** resolution runs
985
+ **Then** a clear error is raised (not a silent failure)
986
+
987
+ **Given** an agent that has no templates directory in the test skill
988
+ **When** resolution runs for that agent
989
+ **Then** the chain falls through correctly to generic → SKILL.md
990
+
991
+ **Additive-only verification (NFR5):**
992
+
993
+ **Given** a temp agent config directory with pre-existing files
994
+ **When** a skill install operation completes
995
+ **Then** all pre-existing files remain untouched — only new skill files are added
996
+ **And** no files are deleted or overwritten unless the same skill is being updated
997
+
998
+ **Test isolation:** All file operations target temp directories. Installer functions that call `agents.js` for path resolution are called with overridden paths pointing to temp. No real agent config directories are read or written.
999
+
1000
+ ### Story 7.3: Add Tests for bmad.js Pipeline Ordering
1001
+
1002
+ As a **contributor**,
1003
+ I want tests verifying the BMAD pipeline executes stages in strict order,
1004
+ So that customization ordering bugs are caught before release.
1005
+
1006
+ **Acceptance Criteria:**
1007
+
1008
+ **Stage ordering verification:**
1009
+
1010
+ **Given** `bmad.js` pipeline functions are instrumented with a call-order recorder (e.g., each stage function is wrapped to push its name onto an array)
1011
+ **When** the full pipeline executes against a temp directory
1012
+ **Then** the recorded call order is exactly:
1013
+ 1. Install BMAD core files
1014
+ 2. Apply YAML config customizations
1015
+ 3. Trigger recompile
1016
+ 4. Apply workflow customizations
1017
+ 5. Apply template customizations
1018
+ 6. Apply agent customizations
1019
+ **And** no stage is skipped or reordered
1020
+
1021
+ **Stage failure halts pipeline:**
1022
+
1023
+ **Given** stage 2 (Apply YAML configs) is stubbed to throw an error
1024
+ **When** the pipeline executes
1025
+ **Then** stages 3–6 do not execute
1026
+ **And** the error is propagated to the caller
1027
+
1028
+ **Given** stage 3 (Trigger recompile) is stubbed to throw an error
1029
+ **When** the pipeline executes
1030
+ **Then** stages 4–6 do not execute
1031
+ **And** the error is propagated to the caller
1032
+
1033
+ **Given** stage 5 (Apply template customizations) is stubbed to throw an error
1034
+ **When** the pipeline executes
1035
+ **Then** stage 6 does not execute
1036
+
1037
+ **Note:** Testing failure at stages 2, 3, and 5 covers all three boundary types: pre-recompile failure, recompile failure, and post-recompile failure. If the pipeline uses a sequential executor pattern, these three cases are sufficient to prove halt-on-failure behavior.
1038
+
1039
+ **Test isolation:** Pipeline functions that perform file system operations are stubbed or pointed at temp directories. The recompile step must NOT trigger an actual BMAD recompile — stub it to record the call and return success (or throw, for failure tests). No real BMAD installation is required.
1040
+
1041
+ ### Story 7.4: Add Tests for cli.js Command Routing
1042
+
1043
+ As a **contributor**,
1044
+ I want tests covering CLI command parsing and routing,
1045
+ So that command-line argument handling is verified automatically.
1046
+
1047
+ **Acceptance Criteria:**
1048
+
1049
+ **Command routing — dynamic verification:**
1050
+
1051
+ **Given** `cli.js` has a set of registered commands
1052
+ **When** the test suite runs
1053
+ **Then** every registered command routes to its expected handler function — assert against the actual command registry, not a hardcoded list
1054
+ **And** unknown commands produce a helpful error message suggesting valid commands
1055
+
1056
+ **BMAD-specific commands:**
1057
+
1058
+ **Given** BMAD commands exist (e.g., install-bmad, update-bmad, or equivalent routing through `bmad.js`)
1059
+ **When** BMAD commands are invoked
1060
+ **Then** they route to `bmad.js` handler functions correctly
1061
+ **Note:** Inspect `cli.js` to identify all command routes including BMAD-specific ones — do not assume only install/list/status/uninstall exist
1062
+
1063
+ **Flag parsing:**
1064
+
1065
+ **Given** CLI arguments include flags (`--yes`, `--force`, `--agent <name>`, `--help`, `--version`)
1066
+ **When** arguments are parsed
1067
+ **Then** boolean flags (`--yes`, `--force`) are extracted as `true`
1068
+ **And** value flags (`--agent`) capture their argument
1069
+ **And** `--help` triggers help output without executing a command
1070
+ **And** `--version` displays the version from `package.json`
1071
+
1072
+ **Interactive vs non-interactive boundary:**
1073
+
1074
+ **Given** no `--yes` flag is provided and stdin is a TTY
1075
+ **When** the CLI starts
1076
+ **Then** it enters interactive wizard mode (inquirer-based)
1077
+
1078
+ **Given** `--yes` flag is provided
1079
+ **When** the CLI starts
1080
+ **Then** it skips all interactive prompts and uses defaults (CI/CD mode per FR6)
1081
+
1082
+ **Note:** These tests verify the boundary detection logic, not the full wizard flow. Assert that the correct code path is selected, not that inquirer renders correctly.
1083
+
1084
+ **Test isolation:** CLI tests stub the handler functions (`installer.js`, `bmad.js`) so that command routing is tested without triggering real installs or BMAD operations. Stdin/TTY detection is stubbed to test both interactive and non-interactive paths.
1085
+
1086
+ ---
1087
+
1088
+ ## Epic 8: Skill Enforcement Architecture (Phase 2)
1089
+
1090
+ **Goal:** Engineers' installed skills are reliably enforced by all agents — zero-reminder workflow.
1091
+ **FRs covered:** FR51, FR52, FR53, FR54, FR55
1092
+ **NFRs addressed:** NFR16 (extension survives updates), NFR17 (zero core modifications)
1093
+
1094
+ ### Story 8.1: Move Instruction Injection to TOP Priority Position
1095
+
1096
+ As a **Chief Architect**,
1097
+ I want the `<!-- MA-AGENTS-START -->` instruction block injected at the TOP of agent instruction files (after any file headers),
1098
+ So that skills have the highest priority during LLM context processing and are not ignored.
1099
+
1100
+ **Acceptance Criteria:**
1101
+
1102
+ **Given** the installer runs for any markdown-based agent (Claude Code, Cursor, Copilot, etc.)
1103
+ **When** the instruction block is injected into the agent's instruction file
1104
+ **Then** the block is placed at the TOP of the file, after any file headers (e.g., YAML frontmatter delimited by `---`)
1105
+ **And** the `skipPatterns` from the agent's `injectionStrategy` in `agents.js` are respected
1106
+
1107
+ **Given** an instruction file already has an `<!-- MA-AGENTS-START -->` block
1108
+ **When** the installer runs again
1109
+ **Then** the existing block is found and replaced in-place at its current position
1110
+ **And** no duplicate blocks are created
1111
+
1112
+ **Given** an instruction file has no existing ma-agents block
1113
+ **When** the installer injects for the first time
1114
+ **Then** the block is inserted after skipped headers but before all other content
1115
+
1116
+ ### Story 8.2: Add Agent-Aware Injection Strategy to Registry
1117
+
1118
+ As a **Chief Architect**,
1119
+ I want each agent in `agents.js` to have an `injectionStrategy` property specifying format, position, and skip patterns,
1120
+ So that the installer can inject instructions correctly for each agent's file format without hardcoding per-agent logic in `installer.js`.
1121
+
1122
+ **Acceptance Criteria:**
1123
+
1124
+ **Given** the `agents.js` registry
1125
+ **When** any agent entry is reviewed
1126
+ **Then** each agent has an `injectionStrategy` object with `position` and optional `skipPatterns`
1127
+ **And** markdown agents have `position: 'top'` with appropriate skip patterns
1128
+
1129
+ **Given** `installer.js` performs injection
1130
+ **When** it processes any agent
1131
+ **Then** it reads `injectionStrategy` from the agent's registry entry
1132
+ **And** all format-awareness logic lives in `agents.js`, not in `installer.js`
1133
+
1134
+ ### Story 8.3: Create BMAD Extension Module Structure
1135
+
1136
+ As a **Chief Architect**,
1137
+ I want the installer to deploy a BMAD extension module (`extends-module: bmm`) with `critical_actions` for skill loading,
1138
+ So that all BMAD agents automatically load skills on activation before any menu or workflow executes.
1139
+
1140
+ **Acceptance Criteria:**
1141
+
1142
+ **Given** `npx ma-agents install` is run with BMAD installation
1143
+ **When** the BMAD pipeline completes
1144
+ **Then** `lib/bmad-extension/module.yaml` exists with `extends-module: bmm`
1145
+ **And** `lib/bmad-extension/module-help.csv` exists with registered phases
1146
+ **And** `lib/bmad-extension/agents/` contains 11 `.customize.yaml` files
1147
+
1148
+ **Given** the 4 custom agents (SRE, DevOps, Cyber, MIL-498)
1149
+ **When** their `.customize.yaml` files are deployed
1150
+ **Then** each contains full customization: persona, menu, and `critical_actions` steps 1-3 for skill loading
1151
+
1152
+ **Given** the 7 built-in BMM agents (PM, Architect, Dev, QA, SM, Tech Writer, UX Designer)
1153
+ **When** their `.customize.yaml` files are deployed
1154
+ **Then** each contains only `critical_actions` steps 1-3 for skill loading (no persona or menu overrides)
1155
+
1156
+ **Given** the extension module is deployed
1157
+ **When** `npx bmad-method install --action update` is run
1158
+ **Then** the extension module survives the update without losing functionality (NFR16)
1159
+
1160
+ ### Story 8.4: Integration Verification
1161
+
1162
+ As a **Chief Architect**,
1163
+ I want to verify that Stories 8.1, 8.2, and 8.3 work together end-to-end,
1164
+ So that the skill enforcement architecture is validated as a complete pipeline before research stories proceed.
1165
+
1166
+ **Acceptance Criteria:**
1167
+
1168
+ **Given** Stories 8.1, 8.2, and 8.3 are all implemented
1169
+ **When** `npx ma-agents install` runs for Claude Code
1170
+ **Then** the MA-AGENTS block is injected at TOP of `.claude/CLAUDE.md` (after frontmatter)
1171
+ **And** `injectionStrategy` from agents.js was read and used
1172
+
1173
+ **Given** install runs with BMAD
1174
+ **When** BMAD pipeline completes
1175
+ **Then** extension module is deployed with correct per-agent MANIFEST paths
1176
+ **And** MA-AGENTS block is injected at TOP of BMAD agent .md files
1177
+
1178
+ **Given** a second install runs (update scenario)
1179
+ **When** injection runs on files that already have MA-AGENTS blocks
1180
+ **Then** blocks are replaced in-place (no duplicates)
1181
+
1182
+ ### Story 8.5: Research and Implement Per-Agent Enforcement Hooks
1183
+
1184
+ As a **Chief Architect**,
1185
+ I want per-agent enforcement mechanisms researched and implemented where agents support them,
1186
+ So that skill compliance is enforced at multiple layers beyond instruction placement.
1187
+
1188
+ **Acceptance Criteria:**
1189
+
1190
+ **Given** Claude Code supports hooks (pre-tool-use, post-tool-use)
1191
+ **When** enforcement hooks are researched
1192
+ **Then** a technical note documents: hook types available, how they can verify manifest was read, implementation approach
1193
+ **And** if feasible, a Claude Code hook is implemented that checks skill loading
1194
+
1195
+ **Given** other agents may have enforcement mechanisms
1196
+ **When** the research is conducted
1197
+ **Then** findings document which agents support hooks/verification and which don't
1198
+ **And** recommendations for future implementation are provided
1199
+
1200
+ ### Story 8.6: Research Context Persistence Strategies
1201
+
1202
+ As a **Chief Architect**,
1203
+ I want context persistence strategies researched to ensure skills survive LLM context compression,
1204
+ So that long sessions don't lose skill directives.
1205
+
1206
+ **Acceptance Criteria:**
1207
+
1208
+ **Given** BMAD supports sidecar memory (`hasSidecar`/`sidecar-folder`)
1209
+ **When** context persistence is researched
1210
+ **Then** a technical note documents: how sidecar memory works, whether it can store skill state, restoration patterns
1211
+ **And** recommendations for implementation are provided
1212
+
1213
+ **Given** the research is complete
1214
+ **When** findings are documented
1215
+ **Then** a clear recommendation exists for whether to implement persistence now or defer to a future phase
1216
+
1217
+ ---
1218
+
1219
+ ## Epic 9: OpenCode Agent Support (Phase 2)
1220
+
1221
+ **Goal:** Engineers can target OpenCode as the 12th supported agent for skill installation with JSON-based instruction injection.
1222
+ **FRs covered:** FR56, FR57
1223
+ **NFRs addressed:** NFR18 (additive-only JSON merge), NFR13 (config-driven registry)
1224
+
1225
+ ### Story 9.1: Register OpenCode Agent in Registry
1226
+
1227
+ As a **Chief Architect**,
1228
+ I want OpenCode added to `agents.js` as the 12th agent with its configuration, skill directory, and JSON injection strategy,
1229
+ So that the installer can target OpenCode using the same config-driven pattern as all other agents.
1230
+
1231
+ **Acceptance Criteria:**
1232
+
1233
+ **Given** the `agents.js` registry
1234
+ **When** the OpenCode agent entry is added
1235
+ **Then** it includes: `name: 'opencode'`, `category: 'ide'`, `configDir: '.opencode'`, `skillsDir: '.opencode/skills'`, `instructionFile: 'opencode.json'`
1236
+ **And** `injectionStrategy` is `{ position: 'json-merge', targetKey: 'instructions' }`
1237
+
1238
+ **Given** the installer runs with `--agent opencode`
1239
+ **When** agent resolution occurs
1240
+ **Then** OpenCode is found in the registry and processed like any other agent
1241
+ **And** no code changes to `installer.js` were needed (NFR13)
1242
+
1243
+ ### Story 9.2: Implement JSON Merge Injection for OpenCode
1244
+
1245
+ As a **Chief Architect**,
1246
+ I want the installer to support JSON-merge injection that creates or additively merges `opencode.json`,
1247
+ So that skill instructions reach OpenCode without corrupting existing user configuration (NFR18).
1248
+
1249
+ **Acceptance Criteria:**
1250
+
1251
+ **Given** no `opencode.json` exists in the project
1252
+ **When** the installer runs for OpenCode
1253
+ **Then** a new `opencode.json` is created with the ma-agents `instructions` array entries tagged with `[ma-agents]`
1254
+
1255
+ **Given** an existing `opencode.json` with user-defined instructions and other configuration keys
1256
+ **When** the installer runs for OpenCode
1257
+ **Then** existing non-ma-agents instructions are preserved
1258
+ **And** existing ma-agents entries (identified by `[ma-agents]` tag) are replaced with fresh entries
1259
+ **And** all other JSON keys (not `instructions`) are preserved exactly as-is
1260
+
1261
+ **Given** an existing `opencode.json` with invalid JSON
1262
+ **When** the installer attempts injection
1263
+ **Then** a clear error message is displayed and the file is NOT modified
1264
+ **And** the installer continues with other agents (non-fatal)
1265
+
1266
+ ---
1267
+
1268
+ ## Epic 10: Project Knowledge Preservation (Phase 2)
1269
+
1270
+ **Goal:** `_bmad-output` is version-controlled project knowledge, never gitignored.
1271
+ **FRs covered:** FR58, FR59
1272
+
1273
+ ### Story 10.1: Ensure _bmad-output Is Not Gitignored
1274
+
1275
+ As a **Chief Architect**,
1276
+ I want the installer to remove `_bmad-output` from `.gitignore` if present and never add it,
1277
+ So that planning artifacts are tracked as version-controlled project knowledge.
1278
+
1279
+ **Acceptance Criteria:**
1280
+
1281
+ **Given** a project with `_bmad-output` listed in `.gitignore`
1282
+ **When** the installer runs (install or update)
1283
+ **Then** the `_bmad-output` line is removed from `.gitignore`
1284
+ **And** a message is displayed: `"_bmad-output is now tracked as project knowledge (not gitignored)"`
1285
+
1286
+ **Given** a project with no `_bmad-output` in `.gitignore`
1287
+ **When** the installer runs
1288
+ **Then** `.gitignore` is not modified for this concern
1289
+
1290
+ **Given** no `.gitignore` file exists
1291
+ **When** the installer runs
1292
+ **Then** no `.gitignore` is created for this purpose
1293
+
1294
+ **Given** the installer creates or updates `.gitignore` for other entries (e.g., `node_modules`, `_bmad/`)
1295
+ **When** it writes the file
1296
+ **Then** `_bmad-output` is never included in any gitignore entries
1297
+
1298
+ ### Story 10.2: Document _bmad-output Policy in README and Installation Guidance
1299
+
1300
+ As a **Chief Architect**,
1301
+ I want the `_bmad-output` folder policy documented in the README and installation guidance,
1302
+ So that developers understand why `_bmad-output` is version-controlled and do not add it back to `.gitignore`.
1303
+
1304
+ **Acceptance Criteria:**
1305
+
1306
+ **Given** the project README
1307
+ **When** a developer reads it
1308
+ **Then** it contains a section explaining that `_bmad-output/` is intentionally tracked in version control as project knowledge
1309
+ **And** the section explains what the folder contains (planning artifacts: PRDs, architecture, epics, stories, sprint plans)
1310
+ **And** the section explains why it is tracked (team alignment, AI context continuity, project history)
1311
+
1312
+ **Given** the installation or getting-started documentation
1313
+ **When** a developer sets up the tool
1314
+ **Then** the guidance explicitly states that `_bmad-output/` must not be added to `.gitignore` and explains that the installer will remove it if found
1315
+
1316
+ **Dependency:** Story 10.1 (documents the installer behavior introduced there)
1317
+
1318
+ ---
1319
+
1320
+ ## Epic 11: Bug Management System (Phase 2)
1321
+
1322
+ **Goal:** Agents detect defects in already-delivered code and generate structured bug reports that enter the backlog for sprint prioritization.
1323
+ **FRs covered:** FR60, FR61, FR62, FR63, FR64
1324
+ **NFRs addressed:** NFR19 (menu + slash command invocation)
1325
+ **Dependency:** Uses extension module from Epic 8 for workflow deployment
1326
+
1327
+ ### Story 11.1: Create auto-bug-detection Skill
1328
+
1329
+ As a **Chief Architect**,
1330
+ I want an `auto-bug-detection` skill that instructs agents to identify and report defects in already-delivered code,
1331
+ So that bugs are caught proactively during all agent sessions.
1332
+
1333
+ **Acceptance Criteria:**
1334
+
1335
+ **Given** the `auto-bug-detection` skill is authored
1336
+ **When** it is installed via ma-agents
1337
+ **Then** `skills/auto-bug-detection/skill.json` exists with `always_load: true`
1338
+ **And** `skills/auto-bug-detection/SKILL.md` contains detection criteria and reporting instructions
1339
+
1340
+ **Given** the skill is loaded by an agent via `critical_actions`
1341
+ **When** the agent encounters a defect in already-delivered code during any session
1342
+ **Then** the skill directives instruct the agent to report the defect using a structured format
1343
+ **And** the skill distinguishes between bugs in delivered code vs. work-in-progress
1344
+
1345
+ **Given** the skill follows standard skill schema
1346
+ **When** validated against skill.json contract
1347
+ **Then** it passes all existing skill validation rules
1348
+
1349
+ ### Story 11.2: Create Bug Story Extension Workflow
1350
+
1351
+ As a **Scrum Master**,
1352
+ I want a BMAD extension workflow that creates structured bug stories from detected defects,
1353
+ So that bugs enter the backlog with consistent format and are actionable for sprint planning.
1354
+
1355
+ **Acceptance Criteria:**
1356
+
1357
+ **Given** the `create-bug-story` workflow exists in `lib/bmad-extension/workflows/create-bug-story/workflow.md`
1358
+ **When** invoked via BMAD agent menu or slash command (NFR19)
1359
+ **Then** it guides the agent through creating a bug story with: title, reproduction steps, expected vs actual behavior, severity, affected component
1360
+
1361
+ **Given** a bug story is created
1362
+ **When** it is saved
1363
+ **Then** it exists as a standalone backlog item alongside user stories (FR64)
1364
+ **And** it follows a consistent template format
1365
+
1366
+ **Given** the workflow is registered in `module-help.csv`
1367
+ **When** a BMAD agent loads the extension module
1368
+ **Then** the workflow appears in the agent's available workflows
1369
+
1370
+ ### Story 11.3: Integrate Bug Detection into Code Review
1371
+
1372
+ As a **Developer**,
1373
+ I want the code review workflow to include explicit bug detection checks,
1374
+ So that defects in delivered code are caught during review and routed to the bug management system.
1375
+
1376
+ **Acceptance Criteria:**
1377
+
1378
+ **Given** a code review is in progress
1379
+ **When** the `auto-bug-detection` skill is loaded (via `critical_actions`)
1380
+ **Then** the reviewing agent evaluates delivered code for defects as part of the review
1381
+ **And** detected bugs are flagged separately from code review feedback
1382
+
1383
+ **Given** a bug is detected during code review
1384
+ **When** the reviewer documents it
1385
+ **Then** the reviewer recommends creating a bug story via the `create-bug-story` workflow
1386
+ **And** the bug is tracked independently from the story being reviewed
1387
+
1388
+ ---
1389
+
1390
+ ## Epic 12: Realistic Sprint Management (Phase 2) **[SUPERSEDED by Epic 17]**
1391
+
1392
+ > **DEPRECATION NOTICE:** Epic 12 delivered workflow shell files but NOT the underlying sprint data model. Epic 17 (Sprint Management Model Rework) builds the unified `sprint-status.yaml` model and rewires all workflows. All FR65-FR71 functionality is now delivered through Epic 17's reworked stories. Epic 12 stories below are retained for historical context only — do not implement them.
1393
+
1394
+ **Goal:** Project managers work with flat backlogs containing stories and bugs, capacity-based sprints, and multi-criteria prioritization.
1395
+ **FRs covered:** FR65, FR66, FR67, FR68, FR69, FR70, FR71
1396
+ **NFRs addressed:** NFR19 (menu + slash command invocation)
1397
+ **Dependency:** Uses extension module from Epic 8 for workflow deployment
1398
+
1399
+ ### Story 12.1: Create Add Sprint Extension Workflow
1400
+
1401
+ As a **Scrum Master**,
1402
+ I want an extension workflow to create new sprints with capacity limits,
1403
+ So that sprint planning uses realistic capacity-based constraints rather than unbounded scope.
1404
+
1405
+ **Acceptance Criteria:**
1406
+
1407
+ **Given** the `add-sprint` workflow exists in `lib/bmad-extension/workflows/add-sprint/workflow.md`
1408
+ **When** invoked via BMAD agent menu or slash command (NFR19)
1409
+ **Then** it guides creation of a sprint with: sprint name/number, capacity (item count), start/end context
1410
+ **And** the sprint is created as a trackable artifact
1411
+
1412
+ **Given** sprint capacity is defined by item count (FR66)
1413
+ **When** a sprint is created
1414
+ **Then** capacity is expressed as maximum number of items (stories + bugs)
1415
+ **And** the workflow validates capacity is a positive integer
1416
+
1417
+ ### Story 12.2: Create Add-to-Sprint Extension Workflow
1418
+
1419
+ As a **Scrum Master**,
1420
+ I want an extension workflow to assign backlog items to a sprint using multi-criteria prioritization,
1421
+ So that the highest-value items are selected within sprint capacity.
1422
+
1423
+ **Acceptance Criteria:**
1424
+
1425
+ **Given** the `add-to-sprint` workflow exists in `lib/bmad-extension/workflows/add-to-sprint/workflow.md`
1426
+ **When** invoked via BMAD agent menu or slash command (NFR19)
1427
+ **Then** it presents the flat backlog (stories + bugs) for selection (FR65)
1428
+ **And** items can be assigned to a sprint
1429
+
1430
+ **Given** items are being prioritized for sprint assignment (FR67)
1431
+ **When** the workflow guides prioritization
1432
+ **Then** multiple criteria are considered (business value, technical dependencies, severity for bugs)
1433
+ **And** the agent assists in ranking items within the sprint capacity
1434
+
1435
+ **Given** a sprint is at capacity
1436
+ **When** an attempt is made to add another item
1437
+ **Then** the workflow warns that capacity would be exceeded
1438
+ **And** suggests removing an item or increasing capacity
1439
+
1440
+ ### Story 12.3: Create Modify Sprint Extension Workflow
1441
+
1442
+ As a **Scrum Master**,
1443
+ I want an extension workflow to modify existing sprints,
1444
+ So that sprint scope can be adjusted when priorities change mid-sprint.
1445
+
1446
+ **Acceptance Criteria:**
1447
+
1448
+ **Given** the `modify-sprint` workflow exists in `lib/bmad-extension/workflows/modify-sprint/workflow.md`
1449
+ **When** invoked via BMAD agent menu or slash command (NFR19)
1450
+ **Then** it allows: adding items, removing items, changing capacity, updating sprint metadata
1451
+
1452
+ **Given** a sprint modification is requested
1453
+ **When** items are added or removed
1454
+ **Then** the sprint status reflects the updated item list and remaining capacity (FR71)
1455
+
1456
+ ### Story 12.4: Update Sprint Status with Assigned Items
1457
+
1458
+ As a **Scrum Master**,
1459
+ I want the sprint status workflow to show assigned items per sprint,
1460
+ So that sprint progress is visible with all stories and bugs listed.
1461
+
1462
+ **Acceptance Criteria:**
1463
+
1464
+ **Given** the existing sprint status workflow
1465
+ **When** it displays sprint information
1466
+ **Then** it shows all assigned items (stories + bugs) with their current status (FR71)
1467
+ **And** remaining capacity is visible
1468
+ **And** bugs and stories are distinguishable in the listing
1469
+
1470
+ ---
1471
+
1472
+ ## Epic 13: Project Context Auto-Generation (Phase 2)
1473
+
1474
+ **Goal:** Every ma-agents project-level installation produces a platform-agnostic `_bmad-output/project-context.md` that acts as a constitutional document — mandating skill loading, fresh-worktree git workflow, and full mission lifecycle for all agents and BMAD workflows.
1475
+ **FRs covered:** FR79, FR80, FR81, FR82, FR83, FR84, FR85, FR86
1476
+ **NFRs addressed:** NFR22 (template has no hardcoded paths), NFR23 (additive-only), NFR24 (template as separate file), NFR25 (version comment for upgrade detection)
1477
+ **Dependency:** Epic 8 (BMAD extension module with critical_actions infrastructure), Epic 10 (`_bmad-output/` version-controlled policy)
1478
+
1479
+ **Execution order:** 13.1 → 13.2 → 13.3 → 13.4 (prerequisite investigation required first) → 13.5
1480
+
1481
+ ### Story 13.1: Create Project-Context Template and Generator Function
1482
+
1483
+ As a **Chief Architect**,
1484
+ I want a standalone project-context template and a `generateProjectContext()` function in the installer,
1485
+ So that a constitutional document can be generated with correct platform-specific content at install time.
1486
+
1487
+ **Acceptance Criteria:**
1488
+
1489
+ **Given** `lib/templates/project-context.template.md` is created (NFR24)
1490
+ **When** a developer reads it
1491
+ **Then** it contains all mandatory rule sections: pre-task MANIFEST loading, git worktree workflow, and full 8-step mission lifecycle (FR80, FR83)
1492
+ **And** it contains a `{{MANIFEST_PATHS_LIST}}` placeholder — no hardcoded platform paths in the template source (NFR22)
1493
+ **And** it contains a machine-readable template version comment `<!-- ma-agents-template-version: 1.0 -->` (NFR25)
1494
+ **And** it contains inline expansion comments for `bmad-generate-project-context`, `bmad-retrospective`, and manual updates (FR85)
1495
+ **And** it contains empty `## Technology Stack` and `## Project-Specific Rules` placeholder sections
1496
+
1497
+ **Given** `generateProjectContext(projectRoot, installedAgents)` is implemented in `installer.js`
1498
+ **When** called with a project root and ALL agents from the project manifest (not just current-run agents)
1499
+ **Then** it reads the template from `lib/templates/project-context.template.md`
1500
+ **And** it resolves relative MANIFEST.yaml paths for each agent's `skillsDir` (relative to project root — no absolute paths)
1501
+ **And** it replaces `{{MANIFEST_PATHS_LIST}}` with a formatted markdown bullet list of all resolved paths (FR81, FR82)
1502
+ **And** it returns the stamped content string — it does NOT write any file (writing is Story 13.2's responsibility)
1503
+ **And** when the template file is missing or unreadable it throws a descriptive Error with the cause
1504
+
1505
+ **Given** only one platform is installed
1506
+ **When** paths are stamped
1507
+ **Then** one MANIFEST path appears in the list (FR81)
1508
+
1509
+ **Given** multiple platforms are installed
1510
+ **When** paths are stamped
1511
+ **Then** all platform MANIFEST paths from the manifest appear in the list (FR82)
1512
+
1513
+ ### Story 13.2: Integrate Generation into Install Pipeline
1514
+
1515
+ As a **DevOps Engineer**,
1516
+ I want project-context.md generated automatically at the end of every project-level skill installation,
1517
+ So that every ma-agents project has the constitutional document without any manual step.
1518
+
1519
+ **Acceptance Criteria:**
1520
+
1521
+ **Given** `npx ma-agents install` completes a project-level installation
1522
+ **When** skills and/or BMAD have been installed
1523
+ **Then** `generateProjectContext()` is called at the end of the install pipeline
1524
+ **And** `_bmad-output/project-context.md` exists after installation
1525
+
1526
+ **Given** `_bmad-output/project-context.md` does not exist before installation
1527
+ **When** the installer runs
1528
+ **Then** the file is created with correct platform-stamped content (FR77, FR79)
1529
+ **And** a success message is logged: `✓ project-context.md generated at _bmad-output/project-context.md`
1530
+
1531
+ **Given** `_bmad-output/project-context.md` already exists before installation (FR82, NFR23)
1532
+ **When** the installer runs
1533
+ **Then** the existing file is NOT modified or overwritten
1534
+ **And** an info message is logged: `ℹ project-context.md already exists — skipping generation`
1535
+
1536
+ **Given** the install is a global install (targeting `~/.config/<agent>/`)
1537
+ **When** the pipeline runs
1538
+ **Then** project-context generation is skipped — no file is created (generation is project-level only)
1539
+
1540
+ **Given** the install is non-interactive CI/CD mode (`--yes` flag)
1541
+ **When** the pipeline runs
1542
+ **Then** project-context generation behaves identically to interactive mode — no interactive prompts required
1543
+
1544
+ ### Story 13.3: Update BMAD Extension Critical_Actions to Load Project-Context
1545
+
1546
+ As a **Chief Architect**,
1547
+ I want all BMAD agent `critical_actions` to load `_bmad-output/project-context.md` at activation,
1548
+ So that BMAD workflow agents follow project-context rules in every session, not just IDE agents reading CLAUDE.md.
1549
+
1550
+ **Acceptance Criteria:**
1551
+
1552
+ **Given** all 11 agent `.customize.yaml` files in `lib/bmad-extension/agents/`
1553
+ **When** updated for this story
1554
+ **Then** each file's `critical_actions` includes a new step: `"If _bmad-output/project-context.md exists, read it completely"` — placed after the MANIFEST read step and before the skill-loading step (FR84)
1555
+
1556
+ **Given** a BMAD agent activates with the updated `critical_actions`
1557
+ **When** `_bmad-output/project-context.md` exists in the project
1558
+ **Then** the agent reads it as part of initialization and follows all rules therein
1559
+ **And** the agent applies the git worktree mandate, mission lifecycle, and skill-loading rules from the file
1560
+
1561
+ **Given** a BMAD agent activates with the updated `critical_actions`
1562
+ **When** `_bmad-output/project-context.md` does NOT exist (e.g., first install before generation, or global install)
1563
+ **Then** the agent skips that step gracefully — the `if exists` phrasing ensures no error
1564
+
1565
+ **Given** `bmad.js` deploys the updated extension module
1566
+ **When** `npx bmad-method install --action update` is run after deployment
1567
+ **Then** the updated `critical_actions` survive the BMAD update (NFR16 — extension module independence)
1568
+
1569
+ **Dev Note:** The 4 custom agent customize files (SRE, DevOps, Cyber, MIL-498) have full persona + menu + critical_actions. The 7 built-in agent files (PM, Architect, Dev, QA, SM, Tech Writer, UX Designer, BMad Master) have critical_actions only. All 11 must be updated.
1570
+
1571
+ ### Story 13.4: Add Project-Context Expansion Trigger to Retrospective Workflow
1572
+
1573
+ As a **Scrum Master**,
1574
+ I want the BMAD retrospective workflow to include a project-context update step,
1575
+ So that conventions and patterns discovered during a sprint are captured in the living document automatically.
1576
+
1577
+ **Acceptance Criteria:**
1578
+
1579
+ **Given** the retrospective workflow at `_bmad/bmm/workflows/bmad-retrospective/` (or equivalent extension path)
1580
+ **When** a retrospective completes
1581
+ **Then** the workflow includes a final step: *"Review `_bmad-output/project-context.md` — identify any new conventions, patterns, or agent failures from this sprint that should be captured. Propose specific additions to the `## Project-Specific Rules` section."*
1582
+
1583
+ **Given** the Scrum Master runs `/bmad-retrospective` after a sprint
1584
+ **When** the retrospective reaches the expansion step
1585
+ **Then** the agent presents the current `## Project-Specific Rules` section of project-context.md
1586
+ **And** proposes additions based on patterns observed during the sprint
1587
+ **And** waits for human confirmation before writing any changes to the file
1588
+
1589
+ **Given** `_bmad-output/project-context.md` does not exist when retrospective runs
1590
+ **When** the expansion step executes
1591
+ **Then** the step is skipped gracefully with a note: *"No project-context.md found — consider running the install or bmad-generate-project-context first."*
1592
+
1593
+ **Dev Note:** This story modifies a BMAD extension workflow. The retrospective workflow may live in `lib/bmad-extension/workflows/` (if it is a custom extension workflow) or in the installed `_bmad/bmm/workflows/` (if it is a built-in BMAD workflow). Investigate the actual location before implementation — if it is a built-in BMAD workflow, create an override or companion extension workflow rather than modifying the core. Never modify bmad-method core files (NFR17). **This story requires prerequisite investigation and should not be started until the workflow location is confirmed.**
1594
+
1595
+ ### Story 13.5: Document Project-Context Generation in README and Installation Guidance
1596
+
1597
+ As a **DevOps Engineer**,
1598
+ I want project-context generation documented in the README and QUICK_START guide,
1599
+ So that users understand what the generated file is, why it appeared, and how to expand it over time.
1600
+
1601
+ **Acceptance Criteria:**
1602
+
1603
+ **Given** the README.md at project root
1604
+ **When** updated for this story
1605
+ **Then** it includes a "Project Context" section explaining: what `_bmad-output/project-context.md` is, when it is generated (project-level install only), that it is intentionally not overwritten on reinstall, and how to expand it (via `/bmad-generate-project-context` and retrospectives)
1606
+
1607
+ **Given** a user runs `npx ma-agents install` and sees `_bmad-output/project-context.md` appear
1608
+ **When** they check the README
1609
+ **Then** they find an explanation of the file without needing to search elsewhere
1610
+
1611
+ **Given** the QUICK_START.md guide
1612
+ **When** updated
1613
+ **Then** it mentions project-context.md as a post-install artifact with a pointer to the README for details
1614
+
1615
+ **Given** the generated project-context.md template (Story 13.1)
1616
+ **When** reviewed alongside the README section
1617
+ **Then** the expansion instructions in the README match the inline comments in the file — no contradictions between the two
1618
+
1619
+ ---
1620
+
1621
+ ## Epic 14: External Tooling Integration (Phase 3)
1622
+
1623
+ **Goal:** ma-agents can connect to external project management and knowledge management platforms (Jira, Confluence) as alternatives to the default file-system backends. The backend is configured at installation time via `project-context.md` or the root directives file (`CLAUDE.md` / equivalent), so agents and skills resolve data against the configured system without code changes.
1624
+ **FRs covered:** Proposed — to be formally added to PRD after Story 14.3 architecture is approved
1625
+ **Dependency:** Epic 12 (Sprint Management workflows), Epic 10 (Project Knowledge Preservation), Epic 13 (Project Context Auto-Generation — provides the config schema and installation pipeline)
1626
+ **Phase:** 3 — analyst research and architecture design must complete before any implementation story is detailed
1627
+ **Analyst + Architect required:** Yes — Stories 14.1, 14.2, and 14.3 are prerequisites for all implementation work
1628
+
1629
+ ---
1630
+
1631
+ ### Story 14.1: Analyst Research — Jira Sprint Management Integration
1632
+
1633
+ As a **Product Manager / Analyst**,
1634
+ I want a research report on integrating Jira as a sprint management backend for ma-agents,
1635
+ So that the architect has clear requirements before designing the abstraction layer.
1636
+
1637
+ **Acceptance Criteria:**
1638
+
1639
+ **Given** the current file-system sprint management model (`sprint-status.yaml`, story files)
1640
+ **When** the analyst completes the research report
1641
+ **Then** it documents: Jira REST API capabilities, authentication models (API token, OAuth, service account), field mapping (Jira status → ma-agents story status), rate limits, and offline/air-gapped scenarios
1642
+ **And** it defines the proposed configuration schema to be set in `project-context.md` at installation time
1643
+ **And** it identifies the minimum viable Jira integration scope (read story status) vs full bidirectional sync (write back story state)
1644
+ **And** it covers both Jira Cloud and Jira Server/Data Center
1645
+
1646
+ **Given** the `story-status-lookup` skill (implemented in Epic 11 review cycle) has a reserved Jira extension point
1647
+ **When** the report addresses credential handling
1648
+ **Then** it proposes how credentials are stored (env vars vs `project-context.md` vs OS keychain)
1649
+ **And** it clarifies what must be configured at install time vs at runtime
1650
+
1651
+ **Technical notes:**
1652
+ - Output artifact: `_bmad-output/planning-artifacts/research-external-tooling-sprint-management.md`
1653
+ - This report is the primary input for Story 14.3 (architecture design)
1654
+ - Consider: what happens if Jira is unavailable mid-session (network failure, rate limit)?
1655
+
1656
+ ---
1657
+
1658
+ ### Story 14.2: Analyst Research — Knowledge Management Integration (Confluence)
1659
+
1660
+ As a **Product Manager / Analyst**,
1661
+ I want a research report on integrating Confluence (and similar tools) as a knowledge management backend for ma-agents,
1662
+ So that the architect can design a unified external tooling abstraction that covers both sprint and knowledge management.
1663
+
1664
+ **Acceptance Criteria:**
1665
+
1666
+ **Given** the current file-system knowledge model (markdown files in `_bmad-output/`)
1667
+ **When** the analyst completes the research report
1668
+ **Then** it documents: Confluence REST API capabilities, space/page model mapping to ma-agents artifact types (PRD, architecture, epics, retrospectives), read vs write requirements, and versioning model
1669
+ **And** it identifies which ma-agents artifacts benefit most from Confluence sync and which should remain file-system-only
1670
+ **And** it flags risks: bidirectional sync conflicts, Confluence markup vs markdown conversion, large attachment handling
1671
+
1672
+ **Given** agents read from knowledge artifacts during sessions
1673
+ **When** the report covers the user experience
1674
+ **Then** it proposes how agents know to read from Confluence vs the local file system
1675
+ **And** it clarifies whether the integration is read-only, write-only, or bidirectional
1676
+
1677
+ **Technical notes:**
1678
+ - Output artifact: `_bmad-output/planning-artifacts/research-external-tooling-knowledge-management.md`
1679
+ - Input for Story 14.3 (architecture design)
1680
+ - Consider other platforms (Notion, Obsidian vaults, SharePoint) — flag capability gaps vs Confluence
1681
+
1682
+ ---
1683
+
1684
+ ### Story 14.3: Architecture Design — External Tooling Abstraction Layer
1685
+
1686
+ As an **Architect**,
1687
+ I want to design the abstraction layer that decouples ma-agents sprint and knowledge operations from their backend implementation,
1688
+ So that future backends (Jira, Confluence, Linear, Notion) can be added without changing core workflows or skills.
1689
+
1690
+ **Acceptance Criteria:**
1691
+
1692
+ **Given** the research reports from Stories 14.1 and 14.2
1693
+ **When** the architecture design is complete
1694
+ **Then** it defines: backend interface contracts, the configuration schema in `project-context.md`, credential handling pattern, and how skills resolve their configured backend at runtime
1695
+ **And** it specifies exactly how the `story-status-lookup` skill's Jira extension point (reserved during implementation) is fulfilled — including the configuration key names that `project-context.md` / root directives must contain
1696
+ **And** it addresses: offline/air-gapped scenarios, partial configuration (only sprint management configured, or only knowledge management), and graceful degradation to file-system defaults
1697
+
1698
+ **Given** the installation pipeline (Epic 13)
1699
+ **When** the architecture covers installation-time configuration
1700
+ **Then** it defines which configuration questions are asked at install time vs deferred to first use
1701
+ **And** it specifies how the installer writes the backend configuration into `project-context.md`
1702
+
1703
+ **Technical notes:**
1704
+ - Output artifact: ADR in `_bmad-output/planning-artifacts/adr-external-tooling-abstraction.md`
1705
+ - Stories 14.4 and 14.5 are fully blocked on this story
1706
+ - After this story is approved, add formal FRs to the PRD and create detailed implementation stories for 14.4 and 14.5
1707
+
1708
+ ---
1709
+
1710
+ ### Story 14.4: Implement Jira Sprint Management Backend
1711
+
1712
+ *(Blocked on Stories 14.1 + 14.3 — full story spec to be written after architecture ADR is approved and FRs are added to PRD)*
1713
+
1714
+ ---
1715
+
1716
+ ### Story 14.5: Implement Confluence Knowledge Management Backend
1717
+
1718
+ *(Blocked on Stories 14.2 + 14.3 — full story spec to be written after architecture ADR is approved and FRs are added to PRD)*
1719
+
1720
+ ---
1721
+
1722
+ ## Epic 15: BMAD 6.2.1 Agent Architecture Migration (Phase 2)
1723
+
1724
+ ma-agents upgrades from bmad-method 6.0.4 to 6.2.1, restructures the extension module to follow BMAD 6.2.0 module conventions (agents as skill folders, workflows as skill folders, module.yaml with code field), converts all 34 operational workflows to SKILL.md packages, and provides an installer-driven migration path for existing installations.
1725
+
1726
+ ### Story 15.1: Bump bmad-method to 6.2.1 and Update Cache
1727
+
1728
+ As a **Chief Architect**,
1729
+ I want bmad-method updated from 6.0.4 to 6.2.1 and the cache build script updated to include wds,
1730
+ So that the bundled BMAD installation uses the current stable version with all official modules.
1731
+
1732
+ **Acceptance Criteria:**
1733
+
1734
+ **Given** `package.json` currently pins `"bmad-method": "6.0.4"`
1735
+ **When** the version is updated to `"6.2.1"`
1736
+ **Then** `npm install` fetches bmad-method v6.2.1 into `node_modules/`
1737
+ **And** `require.resolve('bmad-method/tools/bmad-npx-wrapper.js')` resolves correctly
1738
+
1739
+ **Given** the cache build script (`npm run build:bmad-cache`) currently clones 4 modules (bmb, cis, tea, gds)
1740
+ **When** the script is updated
1741
+ **Then** it clones 5 modules: bmb, cis, tea, gds, **wds** (bmad-whiteport-design-studio)
1742
+ **And** `lib/bmad-cache/wds/` is populated with the cloned module and pre-installed dependencies
1743
+
1744
+ **Given** the bundled installation runs with bmad-method 6.2.1
1745
+ **When** `npx ma-agents install` completes
1746
+ **Then** the resulting `_bmad/` directory structure is valid for 6.2.1
1747
+ **And** all BMAD workflows execute correctly against the 6.2.1 core
1748
+
1749
+ **Given** a project previously installed with bmad-method 6.0.4
1750
+ **When** the new version runs `npx ma-agents install`
1751
+ **Then** `buildBmadArgs()` passes `--action update` (detected from existing `_bmad/`)
1752
+ **And** bmad-method 6.2.1 handles the upgrade from 6.0.4
1753
+
1754
+ **Technical notes:**
1755
+ - Update `package.json`: `"bmad-method": "6.2.1"`
1756
+ - Update `build:bmad-cache` script to read the updated `external-official-modules.yaml` from bmad-method 6.2.1 (which includes wds)
1757
+ - Verify that bmad-method 6.2.1's CLI accepts the same flags used in `buildBmadArgs()` (Story 5.5)
1758
+ - Test that `--custom-content` validation still works with our module.yaml
1759
+
1760
+ ### Story 15.2: Restructure Extension Module for 6.2.0 Conventions
1761
+
1762
+ As a **Chief Architect**,
1763
+ I want the extension module restructured to follow the BMAD 6.2.0 module pattern (verified from CIS module source),
1764
+ So that `--custom-content` deployment works correctly and the module integrates natively with BMAD's module system.
1765
+
1766
+ **Acceptance Criteria:**
1767
+
1768
+ **Given** the current `lib/bmad-extension/module.yaml` contains `extends-module: bmm` but no `code` field
1769
+ **When** the module.yaml is updated
1770
+ **Then** it contains: `code: ma-skills`, `name`, `description`, and optionally `extends-module: bmm`
1771
+ **And** `--custom-content lib/bmad-extension/` passes bmad-method's validation (requires `module.yaml` with `code` field)
1772
+
1773
+ **Given** the current module has `agents/*.customize.yaml` and `workflows/*/workflow.md`
1774
+ **When** the module is restructured
1775
+ **Then** all content moves under a `skills/` directory following the CIS pattern
1776
+ **And** the old `agents/` and `workflows/` directories are removed from the module
1777
+
1778
+ **Given** the restructured module contains `module-help.csv`
1779
+ **When** bmad-method processes the module
1780
+ **Then** all 42 skills (4 agents + 38 workflows) are registered in the capability system
1781
+
1782
+ **Technical notes:**
1783
+ - Create `lib/bmad-extension/skills/` directory
1784
+ - Move and convert content in subsequent stories (15.3-15.5)
1785
+ - The `module-help.csv` must list all skills with their type and trigger information
1786
+ - Verify `--custom-content` deployment with the new structure by running a test installation
1787
+
1788
+ ### Story 15.3: Convert 4 Custom Agents to Skill Folders
1789
+
1790
+ As a **Chief Architect**,
1791
+ I want the 4 custom agents (SRE, DevOps, Cyber, MIL-498) converted from `.customize.yaml` files to BMAD 6.2.0 agent skill folders,
1792
+ So that they are delivered as native module agents following the verified CIS pattern.
1793
+
1794
+ **Acceptance Criteria:**
1795
+
1796
+ **Given** each agent currently exists as a `.customize.yaml` file with persona, menu, and critical_actions
1797
+ **When** the agent is converted
1798
+ **Then** a skill folder is created at `lib/bmad-extension/skills/bmad-ma-agent-{role}/`
1799
+ **And** it contains `SKILL.md` with the full agent definition (persona, menu, activation, critical_actions)
1800
+ **And** it contains `bmad-skill-manifest.yaml` with `type: agent`, `name`, `displayName`, `role`, `identity`, `communicationStyle`, `principles`, `module: ma-skills`
1801
+
1802
+ **Given** the SRE agent (Alex) has persona fields, 9 menu items referencing SRE playbooks, and skill-loading critical_actions
1803
+ **When** converted to `bmad-ma-agent-sre/SKILL.md`
1804
+ **Then** the SKILL.md contains the complete persona, all menu items with trigger phrases, activation sequence, and critical_actions
1805
+ **And** menu items reference the SRE workflow skills by their new skill names (e.g., `sre-health-check`)
1806
+
1807
+ **Given** the same conversion for DevOps (Amit), Cyber (Yael), and MIL-498 (Joseph)
1808
+ **When** all 4 agents are converted
1809
+ **Then** each has a valid skill folder under `lib/bmad-extension/skills/`
1810
+ **And** the `bmad-skill-manifest.yaml` fields match the agent's established persona
1811
+
1812
+ **Given** the converted agents are deployed via `--custom-content`
1813
+ **When** a user activates any of the 4 agents
1814
+ **Then** the agent behaves identically to its pre-conversion behavior — same persona, same menu, same workflows (NFR30)
1815
+
1816
+ **Technical notes:**
1817
+ - Source material: `lib/bmad-customizations/bmm-{agent}.customize.yaml` (base) + `lib/bmad-extension/agents/bmm-{agent}.customize.yaml` (extended) + `_bmad/custom/agents/{agent}.md` (XML definition)
1818
+ - Consolidate all three sources into a single SKILL.md per agent
1819
+ - Critical_actions in SKILL.md should use the BMAD 6.2.0 format observed in the customize docs
1820
+ - After conversion, the old `.customize.yaml` files for custom agents are no longer needed (removed in Story 15.6)
1821
+
1822
+ ### Story 15.4: Convert 11 MIL-498 Workflows to SKILL.md Packages
1823
+
1824
+ As a **MIL-STD-498 expert**,
1825
+ I want all 11 DID workflows converted from legacy YAML format to BMAD 6.2.0 SKILL.md packages,
1826
+ So that they function without the removed legacy workflow engine.
1827
+
1828
+ **Acceptance Criteria:**
1829
+
1830
+ **Given** each MIL-498 workflow currently exists as `workflow.yaml` + `instructions.md` in `lib/bmad-workflows/mil498/`
1831
+ **When** converted to a SKILL.md package
1832
+ **Then** a skill folder is created at `lib/bmad-extension/skills/mil498-{did}/` (e.g., `mil498-srs/`)
1833
+ **And** it contains `SKILL.md` (workflow entrypoint with routing logic), `bmad-skill-manifest.yaml` (type: skill), `template.md` (DID output template), and `prompts/` (step files for progressive disclosure)
1834
+
1835
+ **Given** a MIL-498 workflow has sequential steps that must execute in strict order (compliance-critical)
1836
+ **When** the workflow is converted
1837
+ **Then** each step becomes a separate file in `prompts/` (Layer 4 progressive disclosure)
1838
+ **And** the step files preserve the exact same sequence and content as the original instructions.md
1839
+ **And** template output checkpoints (previously `<template-output>` XML tags) become explicit user confirmation gates in step files
1840
+
1841
+ **Given** all 11 DID workflows (SSS, SSDD, OCD, SDP, SRS, SDD, STD, STR, IDD, IRS, HRS) are converted
1842
+ **When** a user invokes any DID workflow
1843
+ **Then** it produces the same document output as before conversion (NFR32)
1844
+ **And** the same pause-and-confirm behavior for document section approval is preserved
1845
+
1846
+ **Technical notes:**
1847
+ - 11 workflows: mil498-sss, mil498-ssdd, mil498-ocd, mil498-sdp, mil498-srs, mil498-sdd, mil498-std, mil498-str, mil498-idd, mil498-irs, mil498-hrs
1848
+ - These are Complex Workflow skill type — the most structured form in BMAD 6.2.0
1849
+ - The step file naming should follow a consistent pattern: `01-discovery.md`, `02-requirements.md`, etc.
1850
+ - Templates must be carried over verbatim — no content changes during conversion
1851
+
1852
+ ### Story 15.5: Convert 23 SRE/DevOps/Cyber Workflows to SKILL.md Packages
1853
+
1854
+ As a **Chief Architect**,
1855
+ I want all SRE, DevOps, and Cyber operational playbooks converted to SKILL.md skill packages,
1856
+ So that they integrate with the BMAD 6.2.0 skill system consistently.
1857
+
1858
+ **Acceptance Criteria:**
1859
+
1860
+ **Given** SRE playbooks currently exist as standalone `.md` files in `lib/bmad-workflows/sre/` (9 workflows)
1861
+ **When** each is converted to a SKILL.md package
1862
+ **Then** a skill folder is created at `lib/bmad-extension/skills/sre-{workflow}/`
1863
+ **And** it contains `SKILL.md` (wrapping the existing workflow content with proper frontmatter) and `bmad-skill-manifest.yaml` (type: skill)
1864
+
1865
+ **Given** DevOps playbooks in `lib/bmad-workflows/devops/` (6 workflows) and Cyber playbooks in `lib/bmad-workflows/cyber/` (8 workflows)
1866
+ **When** converted following the same pattern
1867
+ **Then** each gets its own skill folder under `lib/bmad-extension/skills/`
1868
+
1869
+ **Given** a multi-step workflow (e.g., `sre-health-check` with discovery → diagnosis → remediation)
1870
+ **When** it is complex enough to benefit from progressive disclosure
1871
+ **Then** it uses `prompts/` for step files (Complex Workflow type)
1872
+ **Otherwise** single-pass playbooks remain as simple `SKILL.md` files (Simple Workflow type)
1873
+
1874
+ **Given** all 23 workflows are converted
1875
+ **When** the agent menu references them
1876
+ **Then** agents can invoke them by the new skill name
1877
+ **And** the workflow behavior is identical to pre-conversion (NFR32)
1878
+
1879
+ **Technical notes:**
1880
+ - 9 SRE: health-check, fix-deployments, performance-opt, check-deployment-status, check-secrets, day-2-ops, deployment-strategies, gitops-status, + 1 more
1881
+ - 6 DevOps: configure-infrastructure, optimize-pipelines, manage-helm, disconnected-deployment, docker-compose-setup, sign-docker-image
1882
+ - 8 Cyber: vulnerability-scan, security-audit, threat-modeling, generate-certs, immunity-estimation, vault-secrets, verify-docker-users, verify-image-signature
1883
+ - Conversion is lighter than MIL-498 — existing .md content wraps into SKILL.md with frontmatter
1884
+ - Also convert the 4 extension workflows (create-bug-story, add-sprint, modify-sprint, add-to-sprint) to skill format
1885
+
1886
+ ### Story 15.6: Separate Built-in Agent Customizations
1887
+
1888
+ As a **Chief Architect**,
1889
+ I want the `.customize.yaml` files for 8 built-in BMM agents moved from `lib/bmad-extension/agents/` to `lib/bmad-customize/`,
1890
+ So that module-owned agents (in skill folders) are cleanly separated from customizations of other modules' agents.
1891
+
1892
+ **Acceptance Criteria:**
1893
+
1894
+ **Given** the 8 built-in agent `.customize.yaml` files (bmm-pm, bmm-architect, bmm-dev, bmm-qa, bmm-sm, bmm-tech-writer, bmm-ux-designer, core-bmad-master)
1895
+ **When** moved to `lib/bmad-customize/`
1896
+ **Then** each file contains only `critical_actions` (skill loading + project-context loading)
1897
+ **And** no persona, menu, or other overrides are present
1898
+
1899
+ **Given** the `.customize.yaml` files use BMAD 6.2.0 syntax
1900
+ **When** the critical_actions are written
1901
+ **Then** they use array syntax (list of strings) per current BMAD documentation:
1902
+ ```yaml
1903
+ critical_actions:
1904
+ - "Read the skills MANIFEST at {project-root}/skills/MANIFEST.yaml"
1905
+ - "For each skill marked always_load: true, read the skill file completely"
1906
+ - "If _bmad-output/project-context.md exists, read it completely"
1907
+ - "Follow all skill directives and project-context rules during this session"
1908
+ ```
1909
+
1910
+ **Given** `bmad.js` deploys these files
1911
+ **When** installation runs
1912
+ **Then** files are copied from `lib/bmad-customize/` to `_bmad/_config/agents/` AFTER `--custom-content` deploys the extension module
1913
+
1914
+ **Given** the old `lib/bmad-extension/agents/` directory contained both custom and built-in agent files
1915
+ **When** the separation is complete
1916
+ **Then** `lib/bmad-extension/agents/` no longer exists (custom agents are now in `skills/`, built-ins are in `lib/bmad-customize/`)
1917
+
1918
+ **Technical notes:**
1919
+ - `bmad.js` needs two deployment steps: (1) `--custom-content lib/bmad-extension/` for the module, (2) file copy from `lib/bmad-customize/*.customize.yaml` to `_bmad/_config/agents/`
1920
+ - The old `lib/bmad-customizations/` directory (base configs) is also eliminated — its content was merged into agent skill folders in Story 15.3
1921
+
1922
+ ### Story 15.7: Migration Detection and Upgrade Path
1923
+
1924
+ As a **DevOps engineer**,
1925
+ I want the installer to automatically detect and upgrade from 6.0.4 to 6.2.1 during normal installation,
1926
+ So that I don't need a separate upgrade command and my existing customizations are preserved.
1927
+
1928
+ **Acceptance Criteria:**
1929
+
1930
+ **Given** an existing project with bmad-method 6.0.4 installed (detected from `_bmad/core/config.yaml` version field)
1931
+ **When** `npx ma-agents install` runs with the new version
1932
+ **Then** the installer detects the old version and logs: `"Upgrading BMAD from 6.0.4 to 6.2.1..."`
1933
+ **And** passes `--action update` to bmad-method
1934
+
1935
+ **Given** the user had customized agent personas (e.g., changed SRE agent's name from Alex to Sasha)
1936
+ **When** the migration runs
1937
+ **Then** the installer backs up existing `_bmad/_config/agents/*.customize.yaml` before updating
1938
+ **And** after the module deploys, it checks backed-up files for user-added `memories`, extra `critical_actions`, or persona overrides
1939
+ **And** carries forward user customizations that don't conflict with the new structure
1940
+
1941
+ **Given** legacy artifacts exist (old `.customize.yaml` for custom agents in `_bmad/_config/agents/`, XML agent definitions in `_bmad/custom/agents/`, YAML workflow files)
1942
+ **When** migration completes successfully
1943
+ **Then** legacy artifacts are removed
1944
+ **And** a migration log is printed listing what was cleaned up
1945
+
1946
+ **Given** the bmad-method update fails (e.g., file permission error, corrupted state)
1947
+ **When** the error is caught
1948
+ **Then** the installer restores backed-up `.customize.yaml` files
1949
+ **And** logs the error with a recovery suggestion
1950
+ **And** the project remains functional on the old version (NFR29)
1951
+
1952
+ **Given** a fresh project with no existing BMAD installation
1953
+ **When** `npx ma-agents install` runs
1954
+ **Then** it deploys directly in 6.2.1 format with skill-based agents and workflows
1955
+ **And** no migration logic executes (FR110)
1956
+
1957
+ **Technical notes:**
1958
+ - `detectMigrationNeed()` function reads `_bmad/core/config.yaml` for version
1959
+ - Backup directory: `_bmad/_config/agents/.backup-pre-migration/`
1960
+ - Customization merge is best-effort — if a user customized something that no longer exists in the new format, log a warning
1961
+ - The migration sequence: back up → invoke bmad-method update → deploy new extension module → deploy built-in customizes → merge user customizations → clean up legacy
1962
+
1963
+ ### Story 15.8: Validate Migrated Agents and Workflows
1964
+
1965
+ As a **Chief Architect**,
1966
+ I want to verify that all migrated agents and workflows function identically to their pre-migration behavior,
1967
+ So that functional equivalence (NFR30) and output equivalence (NFR32) are confirmed.
1968
+
1969
+ **Acceptance Criteria:**
1970
+
1971
+ **Given** all 4 custom agents have been converted to skill folders
1972
+ **When** each agent is activated
1973
+ **Then** the agent displays the same persona, same greeting, and same menu items as before
1974
+ **And** every menu item routes to the correct workflow
1975
+
1976
+ **Given** all 11 MIL-498 workflows have been converted
1977
+ **When** each DID workflow is invoked
1978
+ **Then** it produces the same document structure with the same template sections
1979
+ **And** the progressive disclosure step files execute in the same order
1980
+
1981
+ **Given** all 23 SRE/DevOps/Cyber workflows have been converted
1982
+ **When** each playbook is invoked
1983
+ **Then** it produces the same output as the pre-conversion `.md` version
1984
+
1985
+ **Given** the migrated extension module is deployed
1986
+ **When** BMAD Builder lint gate scripts are run against the skill folders
1987
+ **Then** `scan-path-standards.py` passes without critical violations
1988
+ **And** `scan-scripts.py` passes without critical violations (NFR31)
1989
+
1990
+ **Technical notes:**
1991
+ - This is a validation/testing story
1992
+ - Create a checklist document: each agent menu item → expected behavior → actual behavior
1993
+ - Compare MIL-498 DID output before/after conversion using diff
1994
+ - Run BMAD Builder QO (Quality Optimize) if available against the module
1995
+
1996
+ ---
1997
+
1998
+ ## Epic 16: Multi-Repository Project Layout (Phase 2)
1999
+
2000
+ Enterprise projects that separate planning knowledge, sprint management, and code across repositories are fully supported. The installer discovers repo locations, stores paths in config, and stamps them into project-context.md so agents resolve artifacts to the correct repository.
2001
+
2002
+ ### Story 16.1: Repository Layout Wizard
2003
+
2004
+ As a **Chief Architect**,
2005
+ I want the installer to ask where the knowledgebase and sprint management are managed during installation,
2006
+ So that the project layout is configured correctly for multi-repo environments.
2007
+
2008
+ **Acceptance Criteria:**
2009
+
2010
+ **Given** the user runs `npx ma-agents install`
2011
+ **When** the wizard reaches the repository layout section
2012
+ **Then** it asks: "Where is your knowledgebase managed?" with options: Current repository (default), Local path, Remote git repository
2013
+ **And** it asks: "Where is your sprint management managed?" with the same options
2014
+
2015
+ **Given** the user selects "Remote git repository" for knowledgebase
2016
+ **When** prompted for details
2017
+ **Then** the wizard asks for the git URL
2018
+ **And** asks for the local destination path for cloning
2019
+ **And** if the destination already exists, displays its contents summary and asks the user to confirm (FR113)
2020
+ **And** if the destination does not exist, clones the repository to that path (FR114)
2021
+
2022
+ **Given** the user selects "Local path" for sprint management
2023
+ **When** prompted for the path
2024
+ **Then** the wizard validates the path exists
2025
+ **And** if it does not exist, alerts the user and asks to confirm or correct (FR115)
2026
+
2027
+ **Given** the user selects "Current repository" for both concerns
2028
+ **When** the wizard completes
2029
+ **Then** no additional configuration is needed — single-repo mode preserved (FR116)
2030
+
2031
+ **Given** the user runs with `--yes` flag (CI/CD mode)
2032
+ **When** the wizard reaches the repository layout section
2033
+ **Then** both concerns default to "Current repository" without prompting
2034
+
2035
+ **Technical notes:**
2036
+ - New section in `cli.js` wizard, after agent selection
2037
+ - Use existing inquirer prompts pattern
2038
+ - `git clone` command must quote the URL and destination path for space-safety
2039
+
2040
+ ### Story 16.2: Config Storage and Cross-Reference File
2041
+
2042
+ As a **DevOps engineer**,
2043
+ I want the configured repo paths stored persistently and a cross-reference file created in the code repo,
2044
+ So that agents and BMAD workflows can discover the correct paths without re-running installation.
2045
+
2046
+ **Acceptance Criteria:**
2047
+
2048
+ **Given** the user configured knowledgebase at `d:/Code/kb-repo` and sprint management at `d:/Code/sprint-repo`
2049
+ **When** the installation completes
2050
+ **Then** `_bmad/core/config.yaml` contains:
2051
+ ```yaml
2052
+ knowledgebase_path: "d:/Code/kb-repo"
2053
+ sprint_management_path: "d:/Code/sprint-repo"
2054
+ ```
2055
+
2056
+ **Given** multi-repo mode is configured
2057
+ **When** the installation completes
2058
+ **Then** `_bmad-output/project-layout.yaml` is created in the CODE repository containing:
2059
+ ```yaml
2060
+ generated: '2026-03-26'
2061
+ knowledgebase:
2062
+ mode: remote
2063
+ path: "d:/Code/kb-repo"
2064
+ gitUrl: "https://..."
2065
+ sprint_management:
2066
+ mode: local
2067
+ path: "d:/Code/sprint-repo"
2068
+ ```
2069
+
2070
+ **Given** single-repo mode is configured (both set to "current repository")
2071
+ **When** the installation completes
2072
+ **Then** config.yaml contains `knowledgebase_path: "."` and `sprint_management_path: "."`
2073
+ **And** no `project-layout.yaml` is created (NFR34)
2074
+
2075
+ **Given** the installation runs multiple times with the same multi-repo configuration
2076
+ **When** `project-layout.yaml` is regenerated
2077
+ **Then** the output is identical except for the `generated` date field (NFR36)
2078
+
2079
+ **Technical notes:**
2080
+ - Write config values after bmad-method installation completes
2081
+ - `project-layout.yaml` is generated by ma-agents installer, not by bmad-method
2082
+ - The file is created in `_bmad-output/` which is version-controlled (per F3)
2083
+
2084
+ ### Story 16.3: Project-Context Multi-Repo Section
2085
+
2086
+ As an **AI agent**,
2087
+ I want project-context.md to include the configured repository paths,
2088
+ So that I know where to read and write planning and sprint artifacts.
2089
+
2090
+ **Acceptance Criteria:**
2091
+
2092
+ **Given** multi-repo is configured with knowledgebase at `/path/to/kb` and sprint at `/path/to/sprint`
2093
+ **When** project-context.md is generated (or regenerated)
2094
+ **Then** it includes a "Repository Layout" section:
2095
+ ```markdown
2096
+ ### Repository Layout
2097
+ - **Knowledgebase:** /path/to/kb
2098
+ - **Sprint Management:** /path/to/sprint
2099
+ - When creating or reading planning artifacts, use the knowledgebase path
2100
+ - When creating or reading sprint/story artifacts, use the sprint management path
2101
+ ```
2102
+
2103
+ **Given** single-repo mode is configured
2104
+ **When** project-context.md is generated
2105
+ **Then** the "Repository Layout" section is omitted entirely (NFR34 backward compatibility)
2106
+
2107
+ **Given** project-context.md already exists when the installer runs
2108
+ **When** multi-repo is configured for the first time
2109
+ **Then** project-context.md is NOT modified (idempotency per FR84)
2110
+ **And** the installer logs: "project-context.md exists — add Repository Layout section manually or run /bmad-generate-project-context"
2111
+
2112
+ **Technical notes:**
2113
+ - Update `lib/templates/project-context.template.md` to include conditional multi-repo section
2114
+ - Add `{{REPO_LAYOUT_SECTION}}` placeholder that resolves to the section or empty string
2115
+ - The generator function needs the repo layout config as input alongside installedAgents
2116
+
2117
+ ### Story 16.4: Validate Cross-Repo Path Resolution
2118
+
2119
+ As a **Chief Architect**,
2120
+ I want to verify that BMAD workflows correctly resolve artifact paths from the configured repo layout,
2121
+ So that planning and sprint artifacts are read from and written to the correct repositories.
2122
+
2123
+ **Acceptance Criteria:**
2124
+
2125
+ **Given** a multi-repo configuration where knowledgebase is at a different path than the code repo
2126
+ **When** a BMAD planning workflow (e.g., `/bmad-bmm-create-prd`) runs
2127
+ **Then** it reads existing planning artifacts from `{knowledgebase_path}/_bmad-output/planning-artifacts/`
2128
+ **And** writes output to the same path
2129
+
2130
+ **Given** a multi-repo configuration where sprint management is at a different path
2131
+ **When** a BMAD sprint workflow (e.g., `/bmad-bmm-sprint-planning`) runs
2132
+ **Then** it reads/writes sprint artifacts from `{sprint_management_path}/_bmad-output/sprints/`
2133
+
2134
+ **Given** single-repo configuration
2135
+ **When** any BMAD workflow runs
2136
+ **Then** artifacts are read from and written to the current project's `_bmad-output/` as before (NFR34)
2137
+
2138
+ **Given** an agent is working in the code repository with multi-repo configured
2139
+ **When** the agent needs planning context (e.g., reading the PRD during story implementation)
2140
+ **Then** it discovers the knowledgebase path from `_bmad-output/project-layout.yaml` or `_bmad/core/config.yaml`
2141
+ **And** reads the PRD from the knowledgebase repository
2142
+
2143
+ **Technical notes:**
2144
+ - This is a validation/testing story
2145
+ - Verify that BMAD workflows use config values for path resolution, not hardcoded `_bmad-output/`
2146
+ - If BMAD workflows don't natively support configurable output paths, this story identifies the gap and documents what workflow changes are needed
2147
+ - Test both directions: writing artifacts to external repo AND reading artifacts from external repo
2148
+
2149
+ ### Story 16.5: Fix Config Lost on Update (Bug)
2150
+
2151
+ As a **user with a multi-repo layout configured**,
2152
+ I want my repo layout configuration to be preserved when I update ma-agents,
2153
+ So that I don't silently lose my multi-repo paths every time I add a skill or update agents.
2154
+
2155
+ **Acceptance Criteria:**
2156
+
2157
+ **Given** an existing installation with multi-repo layout configured in `project-layout.yaml`
2158
+ **When** the user runs `ma-agents` again and selects "Update"
2159
+ **Then** the repo layout prompts are pre-populated with the existing configuration
2160
+
2161
+ **Given** an update with `--yes` flag and no env vars
2162
+ **When** `project-layout.yaml` exists with multi-repo paths
2163
+ **Then** the existing layout is preserved instead of defaulting to single-repo
2164
+
2165
+ **Given** an update with `--yes` flag and env vars set
2166
+ **When** `project-layout.yaml` also exists
2167
+ **Then** the env vars take precedence over the file (explicit override wins)
2168
+
2169
+ **Technical notes:**
2170
+ - BUG: `collectRepoLayout()` runs unconditionally on every install/update — no `isUpdate` guard
2171
+ - Implement `readExistingLayout()` to parse `project-layout.yaml` and pre-populate prompts
2172
+ - In `--yes` mode without env vars, preserve existing config from file
2173
+ - Origin: Adversarial Review Finding #1
2174
+
2175
+ ### Story 16.6: Repository Sync Check Skill
2176
+
2177
+ As a **developer using multi-repo layout**,
2178
+ I want a skill that checks whether external repos are in sync and properly scaffolded,
2179
+ So that I catch stale clones and missing directory structures before agents fail at runtime.
2180
+
2181
+ **Acceptance Criteria:**
2182
+
2183
+ **Given** a multi-repo layout is configured
2184
+ **When** the user or agent runs the repo-sync-check skill
2185
+ **Then** it reads config.yaml, checks each external path exists, verifies expected directory structure, and checks git sync status
2186
+
2187
+ **Given** an external path missing `_bmad-output/planning-artifacts/`
2188
+ **When** the skill runs
2189
+ **Then** it reports the missing structure and offers to scaffold it
2190
+
2191
+ **Given** an external git repo where local is behind remote
2192
+ **When** the skill runs
2193
+ **Then** it reports how many commits behind and advises `git pull`
2194
+
2195
+ **Given** a single-repo layout
2196
+ **When** the skill runs
2197
+ **Then** it reports "no external repos to check" and exits cleanly
2198
+
2199
+ **Technical notes:**
2200
+ - Covers both scaffolding gap (external repo never initialized) and sync gap (no pull after clone)
2201
+ - Read-only git operations: `git fetch`, `git rev-list --count`, `git status --porcelain`
2202
+ - Implemented as a skill (not workflow) — short, self-contained check
2203
+ - Origin: Adversarial Review Findings #3 and #4
2204
+
2205
+ ### Story 16.7: Portable Path Storage
2206
+
2207
+ As a **team member cloning a project with multi-repo layout**,
2208
+ I want stored paths to be relative rather than absolute,
2209
+ So that `project-layout.yaml` and `config.yaml` work across different machines.
2210
+
2211
+ **Acceptance Criteria:**
2212
+
2213
+ **Given** a local multi-repo path that is relative to the project root
2214
+ **When** the config is written
2215
+ **Then** the path is stored as relative (e.g., `../kb-repo` instead of `d:/Code/kb-repo`)
2216
+
2217
+ **Given** a path that cannot be expressed as a relative path (cross-drive on Windows)
2218
+ **When** the config is written
2219
+ **Then** the absolute path is stored with a portability warning comment
2220
+
2221
+ **Given** stored relative paths
2222
+ **When** `readExistingLayout()` reads them back
2223
+ **Then** it resolves to absolute paths using `path.resolve(projectRoot, storedPath)`
2224
+
2225
+ **Technical notes:**
2226
+ - Add `toPortablePath(absolutePath, projectRoot)` utility using `path.relative()`
2227
+ - Update `writeProjectLayoutYaml()` and `writeRepoLayoutConfig()` to use portable paths
2228
+ - Backward compatible: existing absolute paths still work when read back
2229
+ - Origin: Adversarial Review Finding #7
2230
+
2231
+ ### Story 16.8: CI/CD Remote Repository Mode
2232
+
2233
+ As a **CI/CD pipeline operator**,
2234
+ I want to configure remote git repositories headlessly via env vars,
2235
+ So that automated pipelines can set up multi-repo remote layouts without prompts.
2236
+
2237
+ **Acceptance Criteria:**
2238
+
2239
+ **Given** `--yes` flag and `MA_KNOWLEDGEBASE_GIT_URL` env var set
2240
+ **When** `collectRepoLayout()` runs
2241
+ **Then** it clones the repo to `MA_KNOWLEDGEBASE_PATH` and returns `mode: 'remote'`
2242
+
2243
+ **Given** git URL env var set but corresponding path env var missing
2244
+ **When** `collectRepoLayout()` runs
2245
+ **Then** it exits with error: "MA_KNOWLEDGEBASE_GIT_URL requires MA_KNOWLEDGEBASE_PATH"
2246
+
2247
+ **Given** clone destination already exists with `.git` directory
2248
+ **When** clone is attempted
2249
+ **Then** it skips cloning (idempotent for CI re-runs)
2250
+
2251
+ **Given** clone failure in CI mode
2252
+ **When** the error occurs
2253
+ **Then** it exits non-zero with clear error (no silent fallback to same mode)
2254
+
2255
+ **Technical notes:**
2256
+ - New env vars: `MA_KNOWLEDGEBASE_GIT_URL`, `MA_SPRINT_GIT_URL`
2257
+ - CI mode must fail loudly — no fallback to `same` on error
2258
+ - Idempotent: existing valid clone at destination is reused
2259
+ - Origin: Adversarial Review Finding #8
2260
+
2261
+ ### Story 16.9: Reconfigure Layout Workflow
2262
+
2263
+ As a **user who needs to change repo layout after installation**,
2264
+ I want a dedicated command and workflow to reconfigure repo layout,
2265
+ So that I can change paths without re-running the full installer.
2266
+
2267
+ **Acceptance Criteria:**
2268
+
2269
+ **Given** the user runs `ma-agents config layout`
2270
+ **When** the command starts
2271
+ **Then** it displays current layout and presents the layout wizard pre-populated with current values
2272
+
2273
+ **Given** the user runs `ma-agents config layout --show`
2274
+ **Then** it displays current configuration in read-only mode (no prompts)
2275
+
2276
+ **Given** reconfiguration completes
2277
+ **When** new paths are confirmed
2278
+ **Then** `config.yaml`, `project-layout.yaml`, and `project-context.md` are all updated
2279
+
2280
+ **Given** reconfiguration from multi-repo to single-repo
2281
+ **When** update completes
2282
+ **Then** `project-layout.yaml` is deleted and config reverts to single-repo defaults
2283
+
2284
+ **Technical notes:**
2285
+ - Reuses all existing functions: `readExistingLayout()`, `collectRepoLayout()`, `writeRepoLayoutConfig()`, `writeProjectLayoutYaml()`, `updateProjectContextRepoLayout()`
2286
+ - Also create a BMAD skill so agents can guide users to the command
2287
+ - Depends on Stories 16.5, 16.7, 16.8
2288
+ - Origin: Adversarial Review Finding #10
2289
+
2290
+ ---
2291
+
2292
+ ## Epic 17: Sprint Management Model Rework (Phase 2)
2293
+
2294
+ Sprint management is redesigned around a **single unified `sprint-status.yaml`** file that replaces the previous three-file model (`backlog.yaml`, `sprints/sprint-N.yaml`, `sprint-status.yaml`). The unified file has three sections: `epics` (reference data from epics.md), `backlog` (unassigned items in priority order), and `sprints` (sprint definitions with their assigned items inline). Stories and bugs MOVE between the `backlog` and `sprints` sections — an item exists in exactly one location at any time. Each item carries its own `status` field, updated in-place. Done items are removed from the file and archived to `done/`. A new close-sprint skill handles sprint lifecycle closure. When `tracking_system` is `jira`, the same data model reads/writes from Jira API via an adapter pattern. All 12 sprint-related skills are reworked to operate against this single file. Epic 12 delivered workflow shells — this epic rebuilds the underlying model and rewires everything.
2295
+
2296
+ **Execution order:** 17.9 (schema) → 17.15 (bootstrap) → 17.10 (generate-backlog) → 17.16 (add-sprint) → 17.11 (add-to-sprint) → 17.12 (remove-from-sprint) → 17.13 (sprint-status-view) → 17.14 (cleanup-done) → 17.17 (modify-sprint) → 17.18 (bmad-dev-story) → 17.19 (story-status-lookup) → 17.20 (bmad-sprint-status) → 17.24 (prioritize-backlog rework) → 17.21 (close-sprint) → 17.22 (Jira adapter) → 17.23 (migration)
2297
+
2298
+ ### Story 17.9: Unified sprint-status.yaml Schema
2299
+
2300
+ As a **Scrum Master**,
2301
+ I want all sprint management data consolidated into a single `sprint-status.yaml` file with three structured sections,
2302
+ So that there is one source of truth for epics, backlog, and sprints — eliminating data duplication across multiple files.
2303
+
2304
+ **Acceptance Criteria:**
2305
+
2306
+ **Given** the unified schema is defined
2307
+ **When** `sprint-status.yaml` is created or updated
2308
+ **Then** it contains exactly three top-level sections:
2309
+ ```yaml
2310
+ epics:
2311
+ epic-5:
2312
+ status: in-progress
2313
+ retrospective: null
2314
+ epic-17:
2315
+ status: planning
2316
+ retrospective: null
2317
+
2318
+ backlog:
2319
+ - id: "15-2-restructure-extension-module"
2320
+ type: story
2321
+ epic: 15
2322
+ title: "Restructure Extension Module"
2323
+ priority: 1
2324
+ status: ready-for-dev
2325
+ - id: "BUG-path-spaces"
2326
+ type: bug
2327
+ epic: null
2328
+ title: "Fix space-in-path bug"
2329
+ priority: 2
2330
+ status: backlog
2331
+ severity: high
2332
+
2333
+ sprints:
2334
+ - id: sprint-3
2335
+ name: "Sprint 3"
2336
+ status: active # planning | active | closed
2337
+ capacity: 6 # max items (stories + bugs)
2338
+ start: "2026-04-01"
2339
+ end: "2026-04-14"
2340
+ items:
2341
+ - id: "5-5-explicit-parameter-passing"
2342
+ type: story
2343
+ epic: 5
2344
+ title: "Explicit Parameter Passing"
2345
+ status: in-progress
2346
+ - id: "5-6-fix-space-in-path-bug"
2347
+ type: story
2348
+ epic: 5
2349
+ title: "Fix Space-in-Path Bug"
2350
+ status: review
2351
+ ```
2352
+
2353
+ **Given** an item is in the `backlog` section
2354
+ **When** it is assigned to a sprint
2355
+ **Then** it is REMOVED from `backlog` and ADDED to the target sprint's `items` array (FR134 — movement semantics)
2356
+ **And** the item exists in exactly one location at any time
2357
+
2358
+ **Given** an item's status changes (e.g., `ready-for-dev` to `in-progress`)
2359
+ **When** the status is updated
2360
+ **Then** the `status` field is updated in-place on the item, wherever it currently resides (FR135)
2361
+
2362
+ **Given** an item reaches `done` status
2363
+ **When** cleanup runs
2364
+ **Then** the item is REMOVED from `sprint-status.yaml` entirely (FR136)
2365
+ **And** archived to the `done/` folder
2366
+
2367
+ **Given** a sprint transitions from `planning` to `active`
2368
+ **When** the sprint is activated
2369
+ **Then** only one sprint can have `status: active` at a time
2370
+ **And** the previous active sprint must be closed first
2371
+
2372
+ **Technical notes:**
2373
+ - File location: `{sprint_management_path}/sprint-status.yaml` (resolves via config, defaults to `_bmad-output/implementation-artifacts/sprint-status.yaml`)
2374
+ - The `epics` section is a MAP keyed by epic ID (e.g., `epic-5:`), with `status` and optional `retrospective` — derived data like title, story_count, done_count are computed from `backlog`/`sprints` sections at display time
2375
+ - The `epics` section is reference data — regenerated from `epics.md` by the sprint-planning skill
2376
+ - The `backlog` section contains ONLY items not assigned to any sprint
2377
+ - The `sprints` section contains sprint definitions with their assigned items inline (no separate sprint files)
2378
+ - Item schema: `id`, `type` (story|bug), `epic` (number|null), `title`, `status`, `priority` (in backlog only), plus optional `severity` for bugs
2379
+ - Sprint schema: `id`, `name`, `status`, `capacity`, `start`, `end`, `items` array
2380
+ - This replaces the old 3-file model: `backlog.yaml` (removed), `sprints/sprint-N.yaml` (removed), `sprint-status.yaml` (repurposed with new schema)
2381
+
2382
+ ### Story 17.10: Rework generate-backlog Skill (Heavy Rework)
2383
+
2384
+ As a **Scrum Master**,
2385
+ I want the `generate-backlog` skill to populate the `backlog` section of the unified `sprint-status.yaml`,
2386
+ So that all unassigned stories and bugs are maintained in a single file rather than a separate `backlog.yaml`.
2387
+
2388
+ **Acceptance Criteria:**
2389
+
2390
+ **Given** the `generate-backlog` skill is invoked
2391
+ **When** it parses the epics document
2392
+ **Then** it writes all unassigned stories and bugs to the `backlog` section of `sprint-status.yaml` in priority order
2393
+ **And** it updates the `epics` section with current epic metadata (title, status, story counts)
2394
+ **And** it does NOT touch the `sprints` section — sprint-assigned items are preserved
2395
+
2396
+ **Given** items already exist in the `sprints` section of `sprint-status.yaml`
2397
+ **When** the backlog is regenerated
2398
+ **Then** items currently assigned to sprints are NOT duplicated in the `backlog` section
2399
+ **And** new stories from `epics.md` that don't exist anywhere in `sprint-status.yaml` are added to `backlog`
2400
+
2401
+ **Given** a story exists in `backlog` but has been removed from `epics.md`
2402
+ **When** the backlog is regenerated
2403
+ **Then** the orphaned item is flagged with a warning but NOT automatically removed (human review required)
2404
+
2405
+ **Given** bugs exist as standalone story files (FR64)
2406
+ **When** the backlog is regenerated
2407
+ **Then** bugs are included in the `backlog` section with `type: bug` and `epic: null`
2408
+ **And** bug-specific fields (`severity`, `version_found`, `bug_type`) are preserved
2409
+
2410
+ **Technical notes:**
2411
+ - Reworks the existing `generate-backlog` skill to write to `sprint-status.yaml` `backlog` section instead of standalone `backlog.yaml`
2412
+ - Must merge with existing `sprint-status.yaml` content (preserve `sprints` section)
2413
+ - Priority ordering: bugs with `severity: critical` float to top, then by explicit `priority` field, then by epic order
2414
+ - Items with status `done` are excluded (they live in `done/` archive)
2415
+ - The old `backlog.yaml` file is no longer written (see Story 17.23 for migration)
2416
+
2417
+ ### Story 17.11: Rework add-to-sprint Skill (Heavy Rework — Movement Semantics)
2418
+
2419
+ As a **Scrum Master**,
2420
+ I want the `add-to-sprint` skill to MOVE items from the `backlog` section to a sprint's `items` array within the same file,
2421
+ So that sprint assignment is a single-file atomic operation with movement semantics.
2422
+
2423
+ **Acceptance Criteria:**
2424
+
2425
+ **Given** the `backlog` section contains unassigned items
2426
+ **When** the Scrum Master invokes `add-to-sprint`
2427
+ **Then** it displays the target sprint (active or planning) and its current capacity usage (items.length / capacity)
2428
+ **And** shows the top N unassigned items from the `backlog` section in priority order
2429
+ **And** the Scrum Master selects which items to add
2430
+
2431
+ **Given** the Scrum Master selects items for the sprint
2432
+ **When** the items are assigned
2433
+ **Then** each selected item is REMOVED from the `backlog` array (FR134)
2434
+ **And** ADDED to the target sprint's `items` array in the `sprints` section
2435
+ **And** the item's `priority` field is dropped (priority only applies in backlog)
2436
+ **And** the item's other fields (`id`, `type`, `epic`, `title`, `status`) are preserved
2437
+
2438
+ **Given** assigning items would exceed sprint capacity
2439
+ **When** the assignment is attempted
2440
+ **Then** the skill warns that capacity would be exceeded
2441
+ **And** suggests removing items or increasing capacity before proceeding
2442
+
2443
+ **Given** the skill is invoked via menu or slash command
2444
+ **When** it executes
2445
+ **Then** it works identically in both invocation modes (NFR19)
2446
+
2447
+ **Technical notes:**
2448
+ - Reworks the existing `add-to-sprint` skill (Story 12.2)
2449
+ - Single file read-modify-write on `sprint-status.yaml`
2450
+ - Must validate the target sprint exists and is in `planning` or `active` status
2451
+ - Atomic operation: both the removal from backlog and addition to sprint happen in one file write
2452
+
2453
+ ### Story 17.12: Rework remove-from-sprint Skill (Heavy Rework — Movement Semantics)
2454
+
2455
+ As a **Scrum Master**,
2456
+ I want the `remove-from-sprint` skill to MOVE items from a sprint's `items` array back to the `backlog` section,
2457
+ So that sprint scope adjustments are clean, reversible, single-file operations.
2458
+
2459
+ **Acceptance Criteria:**
2460
+
2461
+ **Given** a sprint has assigned items
2462
+ **When** the Scrum Master invokes `remove-from-sprint`
2463
+ **Then** it displays the sprint's currently assigned items with their statuses
2464
+ **And** the Scrum Master selects which items to remove
2465
+
2466
+ **Given** items are removed from the sprint
2467
+ **When** the removal completes
2468
+ **Then** each selected item is REMOVED from the sprint's `items` array (FR134)
2469
+ **And** ADDED back to the `backlog` array with a `priority` field set to position 1 (top of backlog — Scrum Master can reprioritize later)
2470
+ **And** the item's `status` is NOT changed — it retains its current status (e.g., stays `ready-for-dev`)
2471
+
2472
+ **Given** a sprint's capacity was full (e.g., 6/6 items)
2473
+ **When** an item is removed
2474
+ **Then** the sprint's effective capacity usage decreases (e.g., 5/6)
2475
+
2476
+ **Technical notes:**
2477
+ - Reworks the existing `remove-from-sprint` skill
2478
+ - Single file read-modify-write on `sprint-status.yaml`
2479
+ - This is the inverse of Story 17.11
2480
+ - Removed items re-enter backlog at priority 1 by default; the Scrum Master should reprioritize after bulk removals
2481
+
2482
+ ### Story 17.13: Rework sprint-status-view Skill (Heavy Rework — Single Source Read)
2483
+
2484
+ As a **Project Manager**,
2485
+ I want the `sprint-status-view` skill to read all sprint data from the single `sprint-status.yaml` file,
2486
+ So that sprint status display is fast and consistent with no cross-file reconciliation needed.
2487
+
2488
+ **Acceptance Criteria:**
2489
+
2490
+ **Given** the `sprint-status-view` skill is invoked
2491
+ **When** it reads `sprint-status.yaml`
2492
+ **Then** it displays a formatted view from the three sections:
2493
+ ```
2494
+ === Epics ===
2495
+ Epic 5: Bundled BMAD Installation [in-progress] (2/6 done)
2496
+ Epic 17: Sprint Management Model Rework [planning] (0/15 done)
2497
+
2498
+ === Sprint 3 (active) — 4/6 items ===
2499
+ * 5-5-explicit-parameter-passing [story] — in-progress
2500
+ * 5-6-fix-space-in-path-bug [story] — review
2501
+ * BUG-path-spaces [bug, high] — ready-for-dev
2502
+ * 15-1-bump-bmad-method [story] — backlog
2503
+
2504
+ === Backlog — 12 items ===
2505
+ 1. 15-2-restructure-extension-module [story] — ready-for-dev
2506
+ 2. 15-3-convert-custom-agents [story] — backlog
2507
+ ...
2508
+ ```
2509
+
2510
+ **Given** no `sprint-status.yaml` file exists
2511
+ **When** the skill is invoked
2512
+ **Then** it reports: "No sprint-status.yaml found. Run sprint planning to initialize."
2513
+
2514
+ **Given** the file contains multiple sprints (one active, others closed or planning)
2515
+ **When** the status is displayed
2516
+ **Then** the active sprint is shown first, followed by planning sprints, then a summary of closed sprints
2517
+
2518
+ **Technical notes:**
2519
+ - Reworks the existing `sprint-status-view` skill
2520
+ - Single file read — no cross-file reconciliation needed (previously had to merge backlog.yaml + sprint files + sprint-status.yaml)
2521
+ - The display format should work well for both human reading and LLM parsing
2522
+ - Does NOT write to the file — read-only operation
2523
+
2524
+ ### Story 17.14: Rework cleanup-done Skill (Heavy Rework — Single Source)
2525
+
2526
+ As a **Scrum Master**,
2527
+ I want the `cleanup-done` skill to scan the unified `sprint-status.yaml` for done items, remove them from the file, and archive their story files,
2528
+ So that the active sprint view stays clean and done work is preserved in the archive.
2529
+
2530
+ **Acceptance Criteria:**
2531
+
2532
+ **Given** items with `status: done` exist in the `sprints` section of `sprint-status.yaml`
2533
+ **When** the `cleanup-done` skill is invoked
2534
+ **Then** each done item is REMOVED from its sprint's `items` array (FR136)
2535
+ **And** the corresponding story/bug file is moved to `{implementation_artifacts}/done/` (FR131)
2536
+ **And** if the `done/` subfolder doesn't exist, it is created
2537
+
2538
+ **Given** items with `status: done` exist in the `backlog` section (edge case — done but never sprint-assigned)
2539
+ **When** the `cleanup-done` skill is invoked
2540
+ **Then** those items are also REMOVED from the `backlog` array and their files archived
2541
+
2542
+ **Given** a story file exists at `{implementation_artifacts}/{story-id}.md`
2543
+ **When** the story reaches `done` status and cleanup runs
2544
+ **Then** the file is moved to `{implementation_artifacts}/done/{story-id}.md`
2545
+
2546
+ **Given** a bug file exists at `{implementation_artifacts}/BUG-{title}.md`
2547
+ **When** the bug reaches `done` status and cleanup runs
2548
+ **Then** the file is moved to `{implementation_artifacts}/done/BUG-{title}.md`
2549
+
2550
+ **Given** all items in a sprint reach `done` status and are cleaned up
2551
+ **When** the sprint has zero remaining items
2552
+ **Then** the sprint's `items` array is empty but the sprint definition is preserved (historical record)
2553
+ **And** the skill suggests closing the sprint (see Story 17.21)
2554
+
2555
+ **Technical notes:**
2556
+ - Reworks the existing `cleanup-done` skill
2557
+ - Single file read-modify-write on `sprint-status.yaml`
2558
+ - File move uses `fs.rename()` — not copy+delete
2559
+ - The `done/` subfolder already exists at `_bmad-output/implementation-artifacts/done/` — this story formalizes its use
2560
+ - Cleanup can be triggered explicitly or as part of sprint-status-view and sprint-planning workflows
2561
+
2562
+ ### Story 17.15: Rework bmad-sprint-planning Skill (Heavy Rework — Bootstrap Unified File)
2563
+
2564
+ As a **Scrum Master**,
2565
+ I want the `bmad-sprint-planning` skill to bootstrap or update the unified `sprint-status.yaml` from the epics document,
2566
+ So that sprint planning always starts from a complete, consistent single file.
2567
+
2568
+ **Acceptance Criteria:**
2569
+
2570
+ **Given** no `sprint-status.yaml` exists (first-time setup)
2571
+ **When** the Scrum Master invokes `bmad-sprint-planning`
2572
+ **Then** it creates `sprint-status.yaml` with:
2573
+ - `epics` section populated from `epics.md` (all epics with title, status, story counts)
2574
+ - `backlog` section populated with all non-done stories and bugs in priority order
2575
+ - `sprints` section initialized as an empty array `[]`
2576
+
2577
+ **Given** `sprint-status.yaml` already exists
2578
+ **When** the Scrum Master invokes `bmad-sprint-planning`
2579
+ **Then** the `epics` section is refreshed from `epics.md` (new epics added, counts updated)
2580
+ **And** new stories from `epics.md` that don't exist in `backlog` or any `sprints` section are added to `backlog`
2581
+ **And** existing items in `backlog` and `sprints` sections are NOT modified (preserves status, priority, sprint assignments)
2582
+ **And** done items are NOT reintroduced (they stay in the `done/` archive)
2583
+
2584
+ **Given** the sprint-planning workflow includes cleanup
2585
+ **When** it detects items with `status: done` still in the file
2586
+ **Then** it runs the cleanup-done logic (Story 17.14) as part of the planning workflow
2587
+
2588
+ **Technical notes:**
2589
+ - Reworks the existing `bmad-sprint-planning` skill
2590
+ - This is the primary bootstrap entry point for the unified file
2591
+ - Must handle the merge carefully: new items go to backlog, existing items stay where they are
2592
+ - The `epics` section is always fully regenerated (it's reference data, not user-managed)
2593
+ - Should be run at the start of each sprint planning session
2594
+
2595
+ ### Story 17.16: Rework add-sprint Skill (Moderate Rework — Section-Based)
2596
+
2597
+ As a **Scrum Master**,
2598
+ I want the `add-sprint` skill to create a new sprint entry in the `sprints` section of `sprint-status.yaml`,
2599
+ So that new sprints are defined within the unified file rather than as separate files.
2600
+
2601
+ **Acceptance Criteria:**
2602
+
2603
+ **Given** the Scrum Master invokes `add-sprint`
2604
+ **When** the sprint details are provided (name, capacity, optional ISO start/end dates)
2605
+ **Then** a new sprint entry is appended to the `sprints` array in `sprint-status.yaml`:
2606
+ ```yaml
2607
+ sprints:
2608
+ - id: sprint-4
2609
+ name: "Sprint 4"
2610
+ status: planning
2611
+ capacity: 6
2612
+ start: "2026-04-15"
2613
+ end: "2026-04-28"
2614
+ items: []
2615
+ ```
2616
+ **And** the sprint ID is auto-incremented from the highest existing sprint ID
2617
+
2618
+ **Given** a sprint with `status: planning` already exists
2619
+ **When** a new sprint is created
2620
+ **Then** the new sprint is also created with `status: planning` (multiple planning sprints are allowed)
2621
+ **And** only one sprint can be `active` at a time
2622
+
2623
+ **Given** `sprint-status.yaml` does not exist
2624
+ **When** `add-sprint` is invoked
2625
+ **Then** the skill reports: "No sprint-status.yaml found. Run sprint planning first to initialize the file."
2626
+
2627
+ **Technical notes:**
2628
+ - Reworks the existing `add-sprint` skill (Story 12.1)
2629
+ - Writes to the `sprints` section of `sprint-status.yaml` instead of creating a separate `sprints/sprint-N.yaml` file
2630
+ - Sprint ID format: `sprint-{number}` (kebab-case, auto-incremented)
2631
+ - Capacity is defined by number of items (stories + bugs) per FR66
2632
+
2633
+ ### Story 17.17: Rework modify-sprint Skill (Moderate Rework — Section-Based)
2634
+
2635
+ As a **Scrum Master**,
2636
+ I want the `modify-sprint` skill to update sprint metadata within the `sprints` section of `sprint-status.yaml`,
2637
+ So that sprint adjustments (capacity, dates, name, status) are made in the unified file.
2638
+
2639
+ **Acceptance Criteria:**
2640
+
2641
+ **Given** the Scrum Master invokes `modify-sprint` with a target sprint ID
2642
+ **When** the sprint exists in the `sprints` section
2643
+ **Then** the skill allows modification of: `name`, `capacity`, `start`, `end`, `status`
2644
+ **And** the updated sprint is written back to `sprint-status.yaml`
2645
+
2646
+ **Given** the Scrum Master changes a sprint's `status` to `active`
2647
+ **When** another sprint is already `active`
2648
+ **Then** the skill warns that only one sprint can be active
2649
+ **And** requires the existing active sprint to be closed first (or offers to close it)
2650
+
2651
+ **Given** the Scrum Master reduces capacity below the current item count
2652
+ **When** the modification is attempted
2653
+ **Then** the skill warns: "Sprint has N items but new capacity is M (M < N). Remove items first."
2654
+ **And** does NOT apply the capacity change until items are removed
2655
+
2656
+ **Technical notes:**
2657
+ - Reworks the existing `modify-sprint` skill (Story 12.3)
2658
+ - Modifies the sprint entry in-place within the `sprints` array of `sprint-status.yaml`
2659
+ - Status transitions: `planning` -> `active` -> `closed`. No backward transitions except via the Scrum Master explicitly overriding.
2660
+
2661
+ ### Story 17.18: Rework bmad-dev-story Skill (Moderate Rework — Cross-Section Status Update)
2662
+
2663
+ As a **Developer**,
2664
+ I want the `bmad-dev-story` skill to update story status in-place within `sprint-status.yaml` regardless of which section the story resides in,
2665
+ So that development progress is reflected in the unified file without manual status updates.
2666
+
2667
+ **Acceptance Criteria:**
2668
+
2669
+ **Given** a developer starts working on a story via `bmad-dev-story`
2670
+ **When** the story transitions from `ready-for-dev` to `in-progress`
2671
+ **Then** the skill finds the item in `sprint-status.yaml` (searching both `backlog` and all `sprints[].items`)
2672
+ **And** updates the item's `status` field in-place (FR135)
2673
+
2674
+ **Given** a developer completes a story
2675
+ **When** the story transitions to `review` or `done`
2676
+ **Then** the status is updated in-place in whichever section the item currently resides
2677
+ **And** if the status becomes `done`, the cleanup-done logic can be triggered (or deferred to explicit cleanup)
2678
+
2679
+ **Given** the story ID is not found in `sprint-status.yaml`
2680
+ **When** the skill attempts to update status
2681
+ **Then** it reports: "Story {id} not found in sprint-status.yaml. It may have been archived to done/ or not yet added to the backlog."
2682
+
2683
+ **Technical notes:**
2684
+ - Reworks the existing `bmad-dev-story` skill
2685
+ - Must search across both `backlog` and all `sprints[].items` sections to find the item by `id`
2686
+ - Write is a targeted update — only the `status` field changes, all other fields preserved
2687
+ - Cross-section search is needed because a developer may work on a story whether or not it's sprint-assigned
2688
+
2689
+ ### Story 17.19: Rework story-status-lookup Skill (Light Rework — Cross-Section Search)
2690
+
2691
+ As a **Developer**,
2692
+ I want the `story-status-lookup` skill to search the unified `sprint-status.yaml` for any story's current status,
2693
+ So that code can be classified as delivered or work-in-progress from a single data source.
2694
+
2695
+ **Acceptance Criteria:**
2696
+
2697
+ **Given** the `story-status-lookup` skill is invoked with a story ID
2698
+ **When** the story exists in the `backlog` section of `sprint-status.yaml`
2699
+ **Then** it returns the item's status and notes it is "in backlog (unassigned)"
2700
+
2701
+ **Given** the story exists in a sprint's `items` array
2702
+ **When** the lookup completes
2703
+ **Then** it returns the item's status and notes which sprint it is assigned to (e.g., "in sprint-3")
2704
+
2705
+ **Given** the story is not found in `sprint-status.yaml`
2706
+ **When** the lookup checks the `done/` archive folder
2707
+ **Then** it reports: "Story {id} is archived (done)" if the file exists in `done/`
2708
+ **Or** reports: "Story {id} not found in sprint-status.yaml or done/ archive"
2709
+
2710
+ **Technical notes:**
2711
+ - Reworks the existing `story-status-lookup` skill
2712
+ - Single file search across `backlog` + all `sprints[].items` sections
2713
+ - Fallback: check `done/` folder for archived stories
2714
+ - The `always_load: true` flag in MANIFEST.yaml remains — this skill is loaded every session
2715
+ - The Jira extension point reserved in this skill is activated by Story 17.22
2716
+
2717
+ ### Story 17.20: Rework bmad-sprint-status Skill (Light Rework — Structured Sections)
2718
+
2719
+ As a **Project Manager**,
2720
+ I want the `bmad-sprint-status` skill to produce a concise risk-focused summary from the structured sections of `sprint-status.yaml`,
2721
+ So that sprint health and risks are surfaced quickly from the single source of truth.
2722
+
2723
+ **Acceptance Criteria:**
2724
+
2725
+ **Given** the `bmad-sprint-status` skill is invoked
2726
+ **When** it reads the `sprints` section of `sprint-status.yaml`
2727
+ **Then** it identifies the active sprint and calculates:
2728
+ - Items by status: how many `in-progress`, `review`, `ready-for-dev`, `backlog`
2729
+ - Capacity usage: items.length / capacity
2730
+ - Blocked items: items with `status: blocked` (if any)
2731
+
2732
+ **Given** the active sprint has items with concerning statuses
2733
+ **When** the summary is generated
2734
+ **Then** it flags risks:
2735
+ - "3 of 6 items still in `backlog` status — not yet started"
2736
+ - "Sprint at 100% capacity with 2 items in `ready-for-dev`"
2737
+ - "No items in `review` or `done` — sprint may be at risk"
2738
+
2739
+ **Given** the `epics` section contains epic-level data
2740
+ **When** the summary is generated
2741
+ **Then** it includes epic progress: "Epic 5: 2/6 done, Epic 17: 0/15 done"
2742
+
2743
+ **Technical notes:**
2744
+ - Reworks the existing `bmad-sprint-status` skill
2745
+ - Reads from the structured sections of `sprint-status.yaml` — no cross-file joins needed
2746
+ - Output is optimized for LLM context (concise, structured) and human readability
2747
+ - This is the quick-summary variant; `sprint-status-view` (Story 17.13) is the detailed view
2748
+
2749
+ ### Story 17.21: New close-sprint Skill
2750
+
2751
+ As a **Scrum Master**,
2752
+ I want a `close-sprint` skill that transitions a sprint from `active` to `closed`, archives all done items, and returns incomplete items to the backlog,
2753
+ So that sprint closure is a clean, well-defined workflow.
2754
+
2755
+ **Acceptance Criteria:**
2756
+
2757
+ **Given** the Scrum Master invokes `close-sprint`
2758
+ **When** an active sprint exists
2759
+ **Then** the skill displays the sprint summary: total items, done count, incomplete count
2760
+
2761
+ **Given** the sprint has items with `status: done`
2762
+ **When** the sprint is closed
2763
+ **Then** all done items are REMOVED from the sprint's `items` array
2764
+ **And** their story/bug files are moved to `{implementation_artifacts}/done/` (same as cleanup-done)
2765
+
2766
+ **Given** the sprint has incomplete items (status != `done`)
2767
+ **When** the sprint is closed
2768
+ **Then** the skill presents three options for handling incomplete items (FR137):
2769
+ (a) **Move all to the next sprint** — all incomplete items are MOVED from the current sprint's `items` array to the next sprint's `items` array (the next sprint must exist in `planning` status; if no next sprint exists, the skill prompts to create one or falls back to option b)
2770
+ (b) **Return all to backlog** — all incomplete items are MOVED from the sprint's `items` array back to the `backlog` section (FR134 — movement semantics), each receiving a `priority` value placing it at the top of the backlog (to be reprioritized)
2771
+ (c) **Decide per item** — the skill iterates through each incomplete item and asks whether to move it to the next sprint or return it to the backlog
2772
+ **And** regardless of option chosen, each item's status is preserved (e.g., `in-progress` items stay `in-progress`)
2773
+
2774
+ **Given** all items have been archived or returned to backlog
2775
+ **When** the sprint is fully processed
2776
+ **Then** the sprint's `status` is set to `closed`
2777
+ **And** the sprint's `items` array is empty `[]`
2778
+ **And** the sprint definition is preserved in the `sprints` section (historical record)
2779
+ **And** a summary is displayed: "Sprint N closed. X items archived, Y items returned to backlog."
2780
+
2781
+ **Given** no active sprint exists
2782
+ **When** `close-sprint` is invoked
2783
+ **Then** it reports: "No active sprint found. Nothing to close."
2784
+
2785
+ **Technical notes:**
2786
+ - NEW skill: `lib/bmad-extension/skills/close-sprint/`
2787
+ - Combines done-item archival (Story 17.14 logic) with incomplete-item return to backlog (Story 17.12 inverse)
2788
+ - Single file read-modify-write on `sprint-status.yaml` plus file moves for archived stories
2789
+ - After close-sprint, the Scrum Master typically runs `add-sprint` to create the next sprint
2790
+
2791
+ ### Story 17.22: Jira Adapter Pattern (tracking_system Switch)
2792
+
2793
+ As a **Project Manager**,
2794
+ I want sprint management skills to read/write from Jira when `tracking_system` is configured as `jira`,
2795
+ So that teams using Jira for project tracking can use the same BMAD sprint skills with their Jira instance.
2796
+
2797
+ **Acceptance Criteria:**
2798
+
2799
+ **Given** `project-context.md` (or root directives) contains `tracking_system: file-system` (default)
2800
+ **When** any sprint management skill is invoked
2801
+ **Then** it reads/writes `sprint-status.yaml` on the local file system (current behavior)
2802
+
2803
+ **Given** `project-context.md` contains `tracking_system: jira` with Jira connection config
2804
+ **When** any sprint management skill is invoked
2805
+ **Then** it reads/writes from the Jira API using the same data model (epics, backlog items, sprint items)
2806
+ **And** the Jira adapter maps: Jira Sprint -> `sprints[]` entries, Jira Backlog -> `backlog[]` entries, Jira Epic -> `epics[]` entries
2807
+ **And** Jira status fields are mapped to the same status vocabulary: `backlog`, `ready-for-dev`, `in-progress`, `review`, `done`
2808
+
2809
+ **Given** the Jira adapter is active
2810
+ **When** an item is moved from backlog to sprint (Story 17.11 logic)
2811
+ **Then** the adapter calls the Jira REST API to move the issue to the target sprint
2812
+ **And** the local `sprint-status.yaml` is NOT written (Jira is the source of truth)
2813
+
2814
+ **Given** the Jira connection fails (network error, auth failure, rate limit)
2815
+ **When** the skill detects the failure
2816
+ **Then** it reports the error clearly and suggests checking credentials/connectivity
2817
+ **And** does NOT fall back to file-system silently (explicit fail, no silent data divergence)
2818
+
2819
+ **Given** the adapter pattern is implemented
2820
+ **When** a new backend is added in the future (e.g., Linear, Azure DevOps)
2821
+ **Then** only a new adapter module is needed — no changes to skill logic
2822
+
2823
+ **Technical notes:**
2824
+ - Blocked on Epic 14 Story 14.3 (External Tooling Abstraction Layer architecture) — the adapter interface contract must be designed first
2825
+ - The adapter pattern uses a `resolveBackend(config)` function that returns either a `FilesystemBackend` or `JiraBackend` object implementing the same interface
2826
+ - Interface methods: `readSprintStatus()`, `writeSprintStatus(data)`, `moveItem(itemId, fromSection, toSection)`, `updateItemStatus(itemId, newStatus)`, `archiveItem(itemId)`
2827
+ - Credentials: environment variables (`JIRA_BASE_URL`, `JIRA_API_TOKEN`, `JIRA_USER_EMAIL`) as proposed by Epic 14 research
2828
+ - All 12 sprint skills call through the backend interface — they never read/write files directly
2829
+ - FR138 scope: same data model, different storage backend. Skills do NOT expose Jira-specific UI or fields.
2830
+
2831
+ ### Story 17.23: Migration and Deprecation of Old Files
2832
+
2833
+ As a **DevOps Engineer**,
2834
+ I want the old three-file sprint model (`backlog.yaml`, `sprints/sprint-N.yaml`, `sprint-status.yaml` with old schema) automatically migrated to the unified `sprint-status.yaml`,
2835
+ So that existing projects transition cleanly without data loss.
2836
+
2837
+ **Acceptance Criteria:**
2838
+
2839
+ **Given** a project has the old `backlog.yaml` file
2840
+ **When** `bmad-sprint-planning` is run (Story 17.15) and `sprint-status.yaml` does not yet exist (or has the old schema)
2841
+ **Then** the migration reads `backlog.yaml` and imports all items into the `backlog` section of the new unified `sprint-status.yaml`
2842
+ **And** priority ordering from the old file is preserved
2843
+
2844
+ **Given** a project has old `sprints/sprint-N.yaml` files
2845
+ **When** the migration runs
2846
+ **Then** each sprint file is imported as an entry in the `sprints` section of `sprint-status.yaml`
2847
+ **And** items referenced in old sprint files are matched to backlog items and moved to the sprint's `items` array
2848
+
2849
+ **Given** the old `sprint-status.yaml` exists with the old schema (flat `development_status` list)
2850
+ **When** the migration detects the old format
2851
+ **Then** it extracts item statuses from the old file and applies them to the corresponding items in the new schema
2852
+ **And** the old file is backed up to `sprint-status.yaml.bak` before overwriting with the new schema
2853
+
2854
+ **Given** the migration completes successfully
2855
+ **When** the new `sprint-status.yaml` is verified
2856
+ **Then** the old files are removed:
2857
+ - `backlog.yaml` is deleted
2858
+ - `sprints/` directory is deleted (if empty after migration)
2859
+ - `sprint-status.yaml.bak` is preserved for 1 sprint cycle (manual deletion)
2860
+
2861
+ **Given** the migration encounters conflicts (e.g., item in old backlog with different status than old sprint-status)
2862
+ **When** the conflict is detected
2863
+ **Then** the migration logs the conflict and uses the most recent status (from sprint-status.yaml or sprint file, whichever was modified last)
2864
+ **And** a migration report is generated listing all conflicts and resolutions
2865
+
2866
+ **Technical notes:**
2867
+ - Migration runs as part of `bmad-sprint-planning` (Story 17.15) — not a separate skill
2868
+ - Old schema detection: if `sprint-status.yaml` has a `development_status` top-level key (old) vs `epics`/`backlog`/`sprints` keys (new)
2869
+ - The migration is idempotent — running it twice produces the same result
2870
+ - After one successful migration, subsequent `bmad-sprint-planning` runs skip migration logic (new schema detected)
2871
+
2872
+ ### Story 17.24: Rework `prioritize-backlog` Skill for Unified File
2873
+
2874
+ As a **Scrum Master**,
2875
+ I want the `prioritize-backlog` skill to read and write the `backlog` section of the unified `sprint-status.yaml`,
2876
+ So that backlog reprioritization works against the single source of truth instead of the deprecated standalone `backlog.yaml` file.
2877
+
2878
+ **Acceptance Criteria:**
2879
+
2880
+ **Given** the `prioritize-backlog` skill is invoked
2881
+ **When** the unified `sprint-status.yaml` exists
2882
+ **Then** it reads items from the `backlog` section only (items already assigned to a sprint keep their priority and are NOT reprioritized)
2883
+
2884
+ **Given** the Scrum Master reorders or adjusts priority values
2885
+ **When** the reprioritization is applied
2886
+ **Then** the skill writes updated `priority` values back to the `backlog` section of `sprint-status.yaml`
2887
+ **And** all other sections (`epics`, `sprints`) are preserved unchanged
2888
+
2889
+ **Given** items exist in both `backlog` and `sprints` sections
2890
+ **When** the skill displays items for prioritization
2891
+ **Then** only `backlog` items are shown — sprint-assigned items are excluded from the prioritization view
2892
+
2893
+ **Given** the old `backlog.yaml` file exists but `sprint-status.yaml` also exists
2894
+ **When** the skill is invoked
2895
+ **Then** it operates on `sprint-status.yaml` only (the old file is ignored; see Story 17.23 for migration)
2896
+
2897
+ **Technical notes:**
2898
+ - Reworks the existing `prioritize-backlog` skill to read/write `sprint-status.yaml` `backlog` section instead of standalone `backlog.yaml`
2899
+ - Rework level: Light — the core prioritization logic (multi-criteria sorting, severity, business value, dependencies, type, age) remains unchanged; only the file I/O layer changes
2900
+ - Single file read-modify-write on `sprint-status.yaml`
2901
+ - Depends on Story 17.9 (unified schema definition)
2902
+ - FRs: FR133 (unified file), FR134 (movement semantics — prioritization respects section boundaries)
2903
+
2904
+ ---
2905
+
2906
+ ## Epic 18: Roo Code IDE Support (Phase 2)
2907
+
2908
+ **Goal:** Full Roo Code integration — ma-agents skill installation, BMAD agent personas as custom modes, planning instructions as rules, and BMAD workflows as slash commands.
2909
+ **FRs covered:** FR34 (extended to include Roo Code), FR36, FR38
2910
+ **Proposed FRs:** FR142 (Roo Code custom modes from BMAD agents), FR143 (Roo Code rules from BMAD instructions), FR144 (Roo Code slash commands from BMAD workflows), FR145 (Cline-to-Roo migration)
2911
+ **Research:** `_bmad-output/planning-artifacts/domain-research-roocode-2026-03-31.md`
2912
+ **Dependency:** None (can proceed independently; upstream `bmad-method` already has `roo` in `platform-codes.yaml`)
2913
+
2914
+ ### Story 18.1: Add Roo Code Agent Entry to ma-agents
2915
+
2916
+ As a **Chief Architect**,
2917
+ I want Roo Code registered as a supported IDE in `lib/agents.js`,
2918
+ So that ma-agents CLI can install skills into Roo Code's `.roo/skills/` directory.
2919
+
2920
+ **Acceptance Criteria:**
2921
+
2922
+ **Given** the `lib/agents.js` file
2923
+ **When** a developer adds Roo Code support
2924
+ **Then** a new entry is added with:
2925
+ ```javascript
2926
+ {
2927
+ id: 'roo-code',
2928
+ name: 'Roo Code',
2929
+ version: '1.0.0',
2930
+ category: 'ide',
2931
+ description: 'Roo Code AI Assistant (Enhanced Cline fork)',
2932
+ skillsDir: '.roo/skills',
2933
+ getProjectPath: () => path.join(process.cwd(), '.roo', 'skills'),
2934
+ getGlobalPath: () => { /* VS Code globalStorage: Code/User/globalStorage/rooveterinaryinc.roo-cline/skills */ },
2935
+ fileExtension: '.md',
2936
+ template: 'generic',
2937
+ instructionFiles: ['.roo/rules/00-ma-agents.md'],
2938
+ injectionStrategy: { position: 'top', skipPatterns: ['---'] }
2939
+ }
2940
+ ```
2941
+
2942
+ **Given** `ma-agents install --agent roo-code` is run
2943
+ **When** a skill is selected
2944
+ **Then** the skill is installed to `.roo/skills/{skill-id}/SKILL.md`
2945
+ **And** a `MANIFEST.yaml` is generated in `.roo/skills/`
2946
+
2947
+ **Given** `ma-agents list --agent roo-code` is run
2948
+ **When** the agent is targeted
2949
+ **Then** skills and their status are displayed correctly
2950
+
2951
+ **Technical notes:**
2952
+ - The `instructionFiles` points to `.roo/rules/00-ma-agents.md` (not a top-level instruction file) because Roo Code loads rules from the `.roo/rules/` directory, not a single instruction file
2953
+ - The `00-` prefix ensures the ma-agents planning instruction loads first (alphabetical order)
2954
+ - Unlike Cline, Roo Code does NOT use `.clinerules` as primary — it uses `.roo/rules/`
2955
+ - Global path should use `RooCode` (matching VS Code extension storage conventions)
2956
+
2957
+ ### Story 18.2: Create BMAD IDE Config and Manifest Entry
2958
+
2959
+ As a **Chief Architect**,
2960
+ I want Roo Code recognized in the BMAD configuration system,
2961
+ So that the BMAD installer includes Roo Code in IDE setup and customization flows.
2962
+
2963
+ **Acceptance Criteria:**
2964
+
2965
+ **Given** the BMAD configuration directory `_bmad/_config/ides/`
2966
+ **When** Roo Code is added
2967
+ **Then** a file `roo-code.yaml` is created:
2968
+ ```yaml
2969
+ ide: roo-code
2970
+ configured_date: 2026-03-31
2971
+ last_updated: 2026-03-31
2972
+ configuration:
2973
+ _noConfigNeeded: true
2974
+ ```
2975
+
2976
+ **Given** the BMAD manifest at `_bmad/_config/manifest.yaml`
2977
+ **When** Roo Code is added
2978
+ **Then** `roo-code` appears in the `ides` list:
2979
+ ```yaml
2980
+ ides:
2981
+ - claude-code
2982
+ - gemini
2983
+ - cline
2984
+ - cursor
2985
+ - antigravity
2986
+ - roo-code
2987
+ ```
2988
+
2989
+ **Given** the agent customization directory `_bmad/_config/agents/`
2990
+ **When** Roo Code is added
2991
+ **Then** a file `roo-code.customize.yaml` is created with the standard customization template (persona, principles, menu overrides)
2992
+
2993
+ **Technical notes:**
2994
+ - Follow the exact same pattern as existing IDE configs
2995
+ - The customize.yaml should have the same structure as `cline.customize.yaml`
2996
+
2997
+ ### Story 18.3: Update Installer to Handle Roo Code Rules Injection
2998
+
2999
+ As a **Chief Architect**,
3000
+ I want the ma-agents installer to inject planning instructions into Roo Code's `.roo/rules/` directory,
3001
+ So that the MANIFEST-based skill loading instruction is automatically applied when Roo Code starts.
3002
+
3003
+ **Acceptance Criteria:**
3004
+
3005
+ **Given** `ma-agents install --agent roo-code` runs
3006
+ **When** skills are installed
3007
+ **Then** a file `.roo/rules/00-ma-agents.md` is created with:
3008
+ ```markdown
3009
+ <!-- MA-AGENTS-START -->
3010
+ # AI Agent Skills - Planning Instruction
3011
+
3012
+ You have access to a library of skills in your skills directory. Before starting any task:
3013
+
3014
+ 1. Read the skill manifest at .roo/skills/MANIFEST.yaml
3015
+ 2. Based on the task description, select which skills are relevant
3016
+ 3. Read only the selected skill files
3017
+ 4. Then proceed with the task
3018
+
3019
+ Always load skills marked with always_load: true.
3020
+ Do not load skills that are not relevant to the current task.
3021
+ <!-- MA-AGENTS-END -->
3022
+ ```
3023
+
3024
+ **Given** the file `.roo/rules/00-ma-agents.md` already exists with MA-AGENTS markers
3025
+ **When** the installer runs again
3026
+ **Then** the content between markers is updated in place (idempotent)
3027
+
3028
+ **Given** `ma-agents uninstall --agent roo-code` runs
3029
+ **When** skills are removed
3030
+ **Then** the `00-ma-agents.md` file is removed from `.roo/rules/`
3031
+
3032
+ **Technical notes:**
3033
+ - The `updateAgentInstructions()` function in `installer.js` already handles marker-based injection — this story extends it to support directory-based instruction files (Roo Code puts rules in a directory, not a single file)
3034
+ - The `00-` prefix ensures this loads before any user rules (alphabetical order)
3035
+ - Must handle the case where `.roo/rules/` directory doesn't exist yet (create it)
3036
+
3037
+ ### Story 18.4: Generate .roomodes with BMAD Agent Personas
3038
+
3039
+ As a **Chief Architect**,
3040
+ I want the BMAD installer to generate a `.roomodes` file with BMAD agent personas as Roo Code custom modes,
3041
+ So that users can switch between BMAD roles (PM, Analyst, Architect, Dev, QA, SM) directly from the Roo Code mode selector.
3042
+
3043
+ **Acceptance Criteria:**
3044
+
3045
+ **Given** the BMAD installer runs `bmad install --ide roo`
3046
+ **When** agent artifacts are processed
3047
+ **Then** a `.roomodes` file is generated in YAML format with BMAD agents as custom modes:
3048
+ ```yaml
3049
+ customModes:
3050
+ - slug: bmad-analyst
3051
+ name: "Analyst (Mary)"
3052
+ description: "Strategic business analysis, market research, requirements elicitation"
3053
+ roleDefinition: |
3054
+ You are Mary, a Senior Business Analyst with deep expertise in market research,
3055
+ competitive analysis, and requirements elicitation...
3056
+ whenToUse: |
3057
+ Use this mode when conducting market research, creating product briefs,
3058
+ competitive analysis, or domain research.
3059
+ customInstructions: |
3060
+ Load and follow the BMAD agent activation protocol from
3061
+ {project-root}/_bmad/bmm/agents/analyst.md
3062
+ groups:
3063
+ - read
3064
+ - mcp
3065
+ - slug: bmad-pm
3066
+ name: "PM (Patricia)"
3067
+ ...
3068
+ ```
3069
+
3070
+ **Given** BMAD agent personas include tool restrictions
3071
+ **When** the mode is generated
3072
+ **Then** each mode's `groups` field reflects appropriate tool permissions:
3073
+ - Analyst/PM/SM: `[read, mcp]` (no edit, no command)
3074
+ - Architect: `[read, edit, mcp]` (can edit architecture docs)
3075
+ - Dev: `[read, edit, command, mcp]` (full access)
3076
+ - QA: `[read, edit, command, mcp]` (full access for test writing)
3077
+
3078
+ **Given** a `.roomodes` file already exists with user-defined modes
3079
+ **When** the installer runs
3080
+ **Then** BMAD modes (slug starting with `bmad-`) are replaced/updated
3081
+ **And** user-defined modes are preserved untouched
3082
+
3083
+ **Technical notes:**
3084
+ - This requires a new function in the Roo Code IDE handler (or config-driven installer extension)
3085
+ - BMAD agent slugs use `bmad-` prefix for safe identification and cleanup
3086
+ - The `roleDefinition` should be extracted from the agent's `<persona>` section
3087
+ - The `customInstructions` should reference the full agent file path for runtime loading
3088
+ - Read agent data from `_bmad/bmm/agents/*.md` at install time
3089
+ - `.roomodes` supports both YAML and JSON — prefer YAML for readability
3090
+
3091
+ ### Story 18.5: Deploy BMAD Workflows as Roo Code Slash Commands
3092
+
3093
+ As a **Chief Architect**,
3094
+ I want BMAD workflows deployed as Roo Code slash commands in `.roo/commands/`,
3095
+ So that users can trigger BMAD workflows (create-prd, sprint-planning, code-review, etc.) directly from the chat input.
3096
+
3097
+ **Acceptance Criteria:**
3098
+
3099
+ **Given** the BMAD installer runs for Roo Code
3100
+ **When** workflow artifacts are processed
3101
+ **Then** markdown files are created in `.roo/commands/` for each BMAD workflow:
3102
+ ```markdown
3103
+ ---
3104
+ description: Create a PRD from scratch through guided collaborative workflow
3105
+ mode: bmad-pm
3106
+ ---
3107
+ You must fully embody the PM agent persona and follow all activation instructions.
3108
+
3109
+ <agent-activation CRITICAL="TRUE">
3110
+ 1. LOAD the FULL agent file from {project-root}/_bmad/bmm/agents/pm.md
3111
+ 2. READ its entire contents
3112
+ 3. FOLLOW every step in the <activation> section precisely
3113
+ 4. Execute the Create PRD menu item
3114
+ </agent-activation>
3115
+ ```
3116
+
3117
+ **Given** a workflow has a natural target mode (e.g., create-prd → PM, create-architecture → Architect)
3118
+ **When** the slash command is generated
3119
+ **Then** the frontmatter `mode` field maps to the corresponding `bmad-*` custom mode (from Story 18.4)
3120
+
3121
+ **Given** slash commands are generated
3122
+ **When** they are listed
3123
+ **Then** all BMAD workflows appear as `/bmad-*` commands in Roo Code's command palette:
3124
+ - `/bmad-create-prd`
3125
+ - `/bmad-create-architecture`
3126
+ - `/bmad-sprint-planning`
3127
+ - `/bmad-code-review`
3128
+ - `/bmad-create-story`
3129
+ - `/bmad-dev-story`
3130
+ - etc.
3131
+
3132
+ **Given** BMAD agent launchers exist
3133
+ **When** slash commands are generated
3134
+ **Then** each BMAD agent also gets a launcher slash command:
3135
+ - `/bmad-analyst` → activates Analyst agent
3136
+ - `/bmad-pm` → activates PM agent
3137
+ - etc.
3138
+
3139
+ **Technical notes:**
3140
+ - Slash command filenames become the command name (auto-slugified)
3141
+ - Use `bmad-` prefix for all commands for clean namespacing
3142
+ - The `mode` field triggers automatic mode switching when the command is run
3143
+ - This leverages the same agent artifact data used by other IDEs (`.claude/commands/`, `.cursor/commands/`, etc.)
3144
+ - The config-driven installer's `cleanup()` already handles `legacy_targets: [.roo/commands]` for removing old artifacts
3145
+
3146
+ ### Story 18.6: Mode-Specific Rules for BMAD Agents
3147
+
3148
+ As a **Chief Architect**,
3149
+ I want mode-specific BMAD rules deployed to `.roo/rules-{bmad-modeSlug}/` directories,
3150
+ So that each BMAD agent mode receives its specific planning instructions and behavioral guidelines.
3151
+
3152
+ **Acceptance Criteria:**
3153
+
3154
+ **Given** the BMAD installer generates custom modes (Story 18.4)
3155
+ **When** mode-specific rules are deployed
3156
+ **Then** directories are created for each BMAD mode:
3157
+ ```
3158
+ .roo/
3159
+ ├── rules/
3160
+ │ └── 00-ma-agents.md (from Story 18.3)
3161
+ ├── rules-bmad-analyst/
3162
+ │ └── 01-analyst-instructions.md
3163
+ ├── rules-bmad-pm/
3164
+ │ └── 01-pm-instructions.md
3165
+ ├── rules-bmad-architect/
3166
+ │ └── 01-architect-instructions.md
3167
+ ├── rules-bmad-dev/
3168
+ │ └── 01-dev-instructions.md
3169
+ ├── rules-bmad-qa/
3170
+ │ └── 01-qa-instructions.md
3171
+ └── rules-bmad-sm/
3172
+ └── 01-sm-instructions.md
3173
+ ```
3174
+
3175
+ **Given** a BMAD mode is activated in Roo Code
3176
+ **When** the mode loads
3177
+ **Then** both the general rules (`.roo/rules/`) AND the mode-specific rules (`.roo/rules-bmad-{slug}/`) are loaded into the system prompt
3178
+
3179
+ **Given** mode-specific rules already exist
3180
+ **When** the installer re-runs
3181
+ **Then** BMAD-generated rule files are updated in place
3182
+ **And** user-added rule files in the same directory are preserved
3183
+
3184
+ **Technical notes:**
3185
+ - Mode-specific rules complement the `customInstructions` in `.roomodes` — they provide additional context without bloating the mode definition
3186
+ - Each rule file should contain the BMAD planning instruction specific to that agent's role
3187
+ - Use `01-` prefix for BMAD rules to allow users to add `00-` or `02-` for their own rules
3188
+ - Files should be prefixed with BMAD markers for clean identification and update
3189
+
3190
+ ### Story 18.7: Cline-to-Roo Code Migration Path
3191
+
3192
+ As a **Developer**,
3193
+ I want an automated migration from Cline to Roo Code configuration,
3194
+ So that my existing BMAD/Cline setup transfers seamlessly when I switch to Roo Code.
3195
+
3196
+ **Acceptance Criteria:**
3197
+
3198
+ **Given** a project has Cline configuration (`.cline/skills/`, `.clinerules/`)
3199
+ **When** the user runs `ma-agents migrate cline-to-roo`
3200
+ **Then** skills from `.cline/skills/` are copied to `.roo/skills/`
3201
+ **And** `.clinerules` content is converted to `.roo/rules/` files
3202
+ **And** MANIFEST.yaml is regenerated for `.roo/skills/`
3203
+ **And** a summary of migrated items is displayed
3204
+
3205
+ **Given** a project has both Cline and Roo Code configurations
3206
+ **When** migration is attempted
3207
+ **Then** the CLI warns about existing Roo Code config
3208
+ **And** prompts the user to confirm overwrite or skip
3209
+
3210
+ **Given** the migration completes
3211
+ **When** the user opens Roo Code
3212
+ **Then** all previously-installed BMAD skills are available
3213
+ **And** planning instructions are loaded from `.roo/rules/`
3214
+
3215
+ **Technical notes:**
3216
+ - Roo Code natively supports `.clinerules` fallback, but migrating explicitly to `.roo/` is cleaner
3217
+ - Migration should update the ma-agents manifest (`.ma-agents.json`) to replace `cline` with `roo-code` in the agents list
3218
+ - The `bmad-method` installer's cleanup for Cline already removes `.clinerules/workflows` — migration should run before cleanup
3219
+
3220
+ ### Story 18.8: End-to-End Validation and Test Coverage
3221
+
3222
+ As a **QA Engineer**,
3223
+ I want comprehensive test coverage for the Roo Code integration,
3224
+ So that all Roo Code integration points are validated and regression-protected.
3225
+
3226
+ **Acceptance Criteria:**
3227
+
3228
+ **Given** the Roo Code agent is registered in `agents.js`
3229
+ **When** unit tests run
3230
+ **Then** tests verify:
3231
+ - `getAgent('roo-code')` returns the correct agent object
3232
+ - `getProjectPath()` returns `.roo/skills` path
3233
+ - `getGlobalPath()` returns OS-specific paths
3234
+ - `fileExtension` is `.md`
3235
+ - `template` is `generic`
3236
+ - `instructionFiles` contains `.roo/rules/00-ma-agents.md`
3237
+
3238
+ **Given** the installer targets Roo Code
3239
+ **When** integration tests run
3240
+ **Then** tests verify:
3241
+ - Skills are installed to `.roo/skills/{id}/SKILL.md`
3242
+ - `MANIFEST.yaml` is generated in `.roo/skills/`
3243
+ - Planning instructions are written to `.roo/rules/00-ma-agents.md`
3244
+ - Idempotent re-runs update markers without duplicating content
3245
+ - Uninstall removes skill directories and the ma-agents rule file
3246
+
3247
+ **Given** the `.roomodes` generation runs
3248
+ **When** integration tests execute
3249
+ **Then** tests verify:
3250
+ - `.roomodes` is valid YAML
3251
+ - Each BMAD mode has required fields: `slug`, `name`, `roleDefinition`
3252
+ - BMAD mode slugs start with `bmad-`
3253
+ - User modes are preserved during regeneration
3254
+ - Tool group permissions match agent role expectations
3255
+
3256
+ **Given** slash commands are generated
3257
+ **When** integration tests execute
3258
+ **Then** tests verify:
3259
+ - Files exist in `.roo/commands/` with correct naming
3260
+ - Each file has valid YAML frontmatter
3261
+ - The `mode` field references a valid BMAD mode slug
3262
+ - Agent activation instructions reference valid agent file paths
3263
+
3264
+ **Technical notes:**
3265
+ - Follow the existing test patterns in the project
3266
+ - Tests should cover both install and uninstall flows
3267
+ - Mock the file system for unit tests, use temp directories for integration tests
3268
+
3269
+ ---
3270
+
3271
+ ### Epic 18 — Cross-Epic Notes
3272
+
3273
+ **Relationship to Cline (Epic N/A):**
3274
+ Roo Code is a fork of Cline. The existing Cline support (`id: 'cline'` in agents.js) should be preserved — they are separate IDEs. Story 18.7 provides an explicit migration path.
3275
+
3276
+ **Relationship to bmad-method upstream:**
3277
+ The `bmad-method` npm package already has `roo` in `platform-codes.yaml` and can generate skills to `.roo/skills/`. Stories 18.4-18.6 extend this with Roo-specific features (modes, rules, commands) that go beyond the standard skill format.
3278
+
3279
+ **Development Execution Order:**
3280
+ 1. Story 18.1 (agents.js) — no dependencies
3281
+ 2. Story 18.2 (BMAD config) — no dependencies
3282
+ 3. Story 18.3 (installer rules injection) — depends on 18.1
3283
+ 4. Story 18.4 (.roomodes generation) — depends on 18.2
3284
+ 5. Story 18.5 (slash commands) — depends on 18.4
3285
+ 6. Story 18.6 (mode-specific rules) — depends on 18.4
3286
+ 7. Story 18.7 (Cline migration) — depends on 18.1, 18.3
3287
+ 8. Story 18.8 (validation/tests) — depends on all above