ma-agents 3.4.8 → 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 (762) 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/bin/cli.js +5 -4
  112. package/lib/agents.js +16 -1
  113. package/lib/bmad-extension/module-help.csv +27 -22
  114. package/lib/bmad-extension/skills/add-sprint/SKILL.md +120 -152
  115. package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +170 -116
  116. package/{.opencode/skills/add-to-sprint → lib/bmad-extension/skills/bmad-dev-story}/bmad-skill-manifest.yaml +1 -1
  117. package/{.opencode → lib/bmad-extension}/skills/bmad-dev-story/checklist.md +13 -13
  118. package/{.opencode → lib/bmad-extension}/skills/bmad-dev-story/workflow.md +103 -44
  119. package/lib/bmad-extension/skills/bmad-ma-agent-mil498/SKILL.md +2 -1
  120. package/lib/bmad-extension/skills/bmad-sprint-planning/SKILL.md +6 -0
  121. package/{.opencode/skills/create-bug-story → lib/bmad-extension/skills/bmad-sprint-planning}/bmad-skill-manifest.yaml +1 -1
  122. package/lib/bmad-extension/skills/bmad-sprint-planning/checklist.md +74 -0
  123. package/lib/bmad-extension/skills/bmad-sprint-planning/sprint-status-template.yaml +89 -0
  124. package/lib/bmad-extension/skills/bmad-sprint-planning/workflow.md +372 -0
  125. package/lib/bmad-extension/skills/bmad-sprint-status/SKILL.md +6 -0
  126. package/{.opencode/skills/cleanup-done → lib/bmad-extension/skills/bmad-sprint-status}/bmad-skill-manifest.yaml +1 -1
  127. package/lib/bmad-extension/skills/bmad-sprint-status/workflow.md +434 -0
  128. package/lib/bmad-extension/skills/cleanup-done/SKILL.md +154 -98
  129. package/lib/bmad-extension/skills/close-sprint/SKILL.md +379 -0
  130. package/{.opencode/skills/add-sprint → lib/bmad-extension/skills/close-sprint}/bmad-skill-manifest.yaml +1 -1
  131. package/lib/bmad-extension/skills/create-bug-story/SKILL.md +7 -75
  132. package/lib/bmad-extension/skills/generate-backlog/SKILL.md +152 -140
  133. package/lib/bmad-extension/skills/mil498-requirement-quality/SKILL.md +105 -0
  134. package/lib/bmad-extension/skills/mil498-requirement-quality/bmad-skill-manifest.yaml +5 -0
  135. package/lib/bmad-extension/skills/mil498-ssdd/prompts/05-validate.md +4 -0
  136. package/lib/bmad-extension/skills/modify-sprint/SKILL.md +224 -235
  137. package/lib/bmad-extension/skills/prioritize-backlog/SKILL.md +157 -135
  138. package/lib/bmad-extension/skills/remove-from-sprint/SKILL.md +125 -104
  139. package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +153 -239
  140. package/lib/bmad-extension/workflows/add-sprint/workflow.md +119 -155
  141. package/lib/bmad-extension/workflows/add-to-sprint/workflow.md +233 -3
  142. package/lib/bmad-extension/workflows/modify-sprint/workflow.md +228 -181
  143. package/lib/bmad-extension/workflows/remove-from-sprint/workflow.md +164 -0
  144. package/lib/bmad-extension/workflows/sprint-status-view/workflow.md +165 -3
  145. package/mil498/README.md +4 -0
  146. package/out.txt +0 -0
  147. package/package.json +1 -1
  148. package/skills/add-sprint/SKILL.md +165 -0
  149. package/skills/add-sprint/skill.json +7 -0
  150. package/skills/add-to-sprint/SKILL.md +231 -0
  151. package/skills/add-to-sprint/skill.json +7 -0
  152. package/skills/bmad-sprint-planning/SKILL.md +321 -0
  153. package/skills/bmad-sprint-planning/skill.json +7 -0
  154. package/skills/bmad-sprint-status/SKILL.md +273 -0
  155. package/skills/bmad-sprint-status/skill.json +7 -0
  156. package/skills/cleanup-done/SKILL.md +203 -0
  157. package/skills/cleanup-done/skill.json +7 -0
  158. package/skills/close-sprint/SKILL.md +370 -0
  159. package/skills/close-sprint/skill.json +7 -0
  160. package/skills/generate-backlog/SKILL.md +178 -0
  161. package/skills/generate-backlog/skill.json +7 -0
  162. package/skills/modify-sprint/SKILL.md +302 -0
  163. package/skills/modify-sprint/skill.json +7 -0
  164. package/skills/prioritize-backlog/SKILL.md +203 -0
  165. package/skills/prioritize-backlog/skill.json +7 -0
  166. package/skills/remove-from-sprint/SKILL.md +174 -0
  167. package/skills/remove-from-sprint/skill.json +7 -0
  168. package/skills/sprint-status-view/SKILL.md +173 -0
  169. package/skills/sprint-status-view/skill.json +7 -0
  170. package/skills/story-status-lookup/SKILL.md +21 -6
  171. package/skills/story-status-lookup/skill.json +2 -2
  172. package/test/extension-module-restructure.test.js +12 -11
  173. package/test/migration-validation.test.js +10 -10
  174. package/.opencode/skills/.ma-agents.json +0 -122
  175. package/.opencode/skills/MANIFEST.yaml +0 -126
  176. package/.opencode/skills/add-sprint/SKILL.md +0 -207
  177. package/.opencode/skills/add-to-sprint/SKILL.md +0 -189
  178. package/.opencode/skills/bmad-advanced-elicitation/SKILL.md +0 -137
  179. package/.opencode/skills/bmad-advanced-elicitation/methods.csv +0 -51
  180. package/.opencode/skills/bmad-agent-analyst/SKILL.md +0 -56
  181. package/.opencode/skills/bmad-agent-analyst/bmad-skill-manifest.yaml +0 -11
  182. package/.opencode/skills/bmad-agent-architect/SKILL.md +0 -52
  183. package/.opencode/skills/bmad-agent-architect/bmad-skill-manifest.yaml +0 -11
  184. package/.opencode/skills/bmad-agent-dev/SKILL.md +0 -62
  185. package/.opencode/skills/bmad-agent-dev/bmad-skill-manifest.yaml +0 -11
  186. package/.opencode/skills/bmad-agent-pm/SKILL.md +0 -57
  187. package/.opencode/skills/bmad-agent-pm/bmad-skill-manifest.yaml +0 -11
  188. package/.opencode/skills/bmad-agent-qa/SKILL.md +0 -59
  189. package/.opencode/skills/bmad-agent-qa/bmad-skill-manifest.yaml +0 -11
  190. package/.opencode/skills/bmad-agent-quick-flow-solo-dev/SKILL.md +0 -51
  191. package/.opencode/skills/bmad-agent-quick-flow-solo-dev/bmad-skill-manifest.yaml +0 -11
  192. package/.opencode/skills/bmad-agent-sm/SKILL.md +0 -53
  193. package/.opencode/skills/bmad-agent-sm/bmad-skill-manifest.yaml +0 -11
  194. package/.opencode/skills/bmad-agent-tech-writer/SKILL.md +0 -55
  195. package/.opencode/skills/bmad-agent-tech-writer/bmad-skill-manifest.yaml +0 -11
  196. package/.opencode/skills/bmad-agent-tech-writer/explain-concept.md +0 -20
  197. package/.opencode/skills/bmad-agent-tech-writer/mermaid-gen.md +0 -20
  198. package/.opencode/skills/bmad-agent-tech-writer/validate-doc.md +0 -19
  199. package/.opencode/skills/bmad-agent-tech-writer/write-document.md +0 -20
  200. package/.opencode/skills/bmad-agent-ux-designer/SKILL.md +0 -53
  201. package/.opencode/skills/bmad-agent-ux-designer/bmad-skill-manifest.yaml +0 -11
  202. package/.opencode/skills/bmad-brainstorming/SKILL.md +0 -6
  203. package/.opencode/skills/bmad-brainstorming/brain-methods.csv +0 -62
  204. package/.opencode/skills/bmad-brainstorming/steps/step-01-session-setup.md +0 -214
  205. package/.opencode/skills/bmad-brainstorming/steps/step-01b-continue.md +0 -124
  206. package/.opencode/skills/bmad-brainstorming/steps/step-02a-user-selected.md +0 -229
  207. package/.opencode/skills/bmad-brainstorming/steps/step-02b-ai-recommended.md +0 -239
  208. package/.opencode/skills/bmad-brainstorming/steps/step-02c-random-selection.md +0 -211
  209. package/.opencode/skills/bmad-brainstorming/steps/step-02d-progressive-flow.md +0 -266
  210. package/.opencode/skills/bmad-brainstorming/steps/step-03-technique-execution.md +0 -401
  211. package/.opencode/skills/bmad-brainstorming/steps/step-04-idea-organization.md +0 -305
  212. package/.opencode/skills/bmad-brainstorming/template.md +0 -15
  213. package/.opencode/skills/bmad-brainstorming/workflow.md +0 -53
  214. package/.opencode/skills/bmad-check-implementation-readiness/SKILL.md +0 -6
  215. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +0 -179
  216. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +0 -168
  217. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +0 -169
  218. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +0 -129
  219. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +0 -241
  220. package/.opencode/skills/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +0 -126
  221. package/.opencode/skills/bmad-check-implementation-readiness/templates/readiness-report-template.md +0 -4
  222. package/.opencode/skills/bmad-check-implementation-readiness/workflow.md +0 -49
  223. package/.opencode/skills/bmad-cis-design-thinking/SKILL.md +0 -6
  224. package/.opencode/skills/bmad-cis-design-thinking/bmad-skill-manifest.yaml +0 -1
  225. package/.opencode/skills/bmad-cis-design-thinking/design-methods.csv +0 -31
  226. package/.opencode/skills/bmad-cis-design-thinking/template.md +0 -111
  227. package/.opencode/skills/bmad-cis-design-thinking/workflow.md +0 -242
  228. package/.opencode/skills/bmad-cis-innovation-strategy/SKILL.md +0 -6
  229. package/.opencode/skills/bmad-cis-innovation-strategy/bmad-skill-manifest.yaml +0 -1
  230. package/.opencode/skills/bmad-cis-innovation-strategy/innovation-frameworks.csv +0 -31
  231. package/.opencode/skills/bmad-cis-innovation-strategy/template.md +0 -189
  232. package/.opencode/skills/bmad-cis-innovation-strategy/workflow.md +0 -315
  233. package/.opencode/skills/bmad-cis-problem-solving/SKILL.md +0 -6
  234. package/.opencode/skills/bmad-cis-problem-solving/bmad-skill-manifest.yaml +0 -1
  235. package/.opencode/skills/bmad-cis-problem-solving/solving-methods.csv +0 -31
  236. package/.opencode/skills/bmad-cis-problem-solving/template.md +0 -165
  237. package/.opencode/skills/bmad-cis-problem-solving/workflow.md +0 -291
  238. package/.opencode/skills/bmad-cis-storytelling/SKILL.md +0 -6
  239. package/.opencode/skills/bmad-cis-storytelling/bmad-skill-manifest.yaml +0 -1
  240. package/.opencode/skills/bmad-cis-storytelling/story-types.csv +0 -26
  241. package/.opencode/skills/bmad-cis-storytelling/template.md +0 -113
  242. package/.opencode/skills/bmad-cis-storytelling/workflow.md +0 -321
  243. package/.opencode/skills/bmad-code-review/SKILL.md +0 -6
  244. package/.opencode/skills/bmad-code-review/steps/step-01-gather-context.md +0 -62
  245. package/.opencode/skills/bmad-code-review/steps/step-02-review.md +0 -34
  246. package/.opencode/skills/bmad-code-review/steps/step-03-triage.md +0 -49
  247. package/.opencode/skills/bmad-code-review/steps/step-04-present.md +0 -129
  248. package/.opencode/skills/bmad-code-review/workflow.md +0 -55
  249. package/.opencode/skills/bmad-correct-course/SKILL.md +0 -6
  250. package/.opencode/skills/bmad-correct-course/checklist.md +0 -288
  251. package/.opencode/skills/bmad-correct-course/workflow.md +0 -267
  252. package/.opencode/skills/bmad-create-architecture/SKILL.md +0 -6
  253. package/.opencode/skills/bmad-create-architecture/architecture-decision-template.md +0 -12
  254. package/.opencode/skills/bmad-create-architecture/data/domain-complexity.csv +0 -13
  255. package/.opencode/skills/bmad-create-architecture/data/project-types.csv +0 -7
  256. package/.opencode/skills/bmad-create-architecture/steps/step-01-init.md +0 -153
  257. package/.opencode/skills/bmad-create-architecture/steps/step-01b-continue.md +0 -173
  258. package/.opencode/skills/bmad-create-architecture/steps/step-02-context.md +0 -224
  259. package/.opencode/skills/bmad-create-architecture/steps/step-03-starter.md +0 -329
  260. package/.opencode/skills/bmad-create-architecture/steps/step-04-decisions.md +0 -318
  261. package/.opencode/skills/bmad-create-architecture/steps/step-05-patterns.md +0 -359
  262. package/.opencode/skills/bmad-create-architecture/steps/step-06-structure.md +0 -379
  263. package/.opencode/skills/bmad-create-architecture/steps/step-07-validation.md +0 -359
  264. package/.opencode/skills/bmad-create-architecture/steps/step-08-complete.md +0 -76
  265. package/.opencode/skills/bmad-create-architecture/workflow.md +0 -38
  266. package/.opencode/skills/bmad-create-epics-and-stories/SKILL.md +0 -6
  267. package/.opencode/skills/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +0 -255
  268. package/.opencode/skills/bmad-create-epics-and-stories/steps/step-02-design-epics.md +0 -212
  269. package/.opencode/skills/bmad-create-epics-and-stories/steps/step-03-create-stories.md +0 -255
  270. package/.opencode/skills/bmad-create-epics-and-stories/steps/step-04-final-validation.md +0 -131
  271. package/.opencode/skills/bmad-create-epics-and-stories/templates/epics-template.md +0 -61
  272. package/.opencode/skills/bmad-create-epics-and-stories/workflow.md +0 -53
  273. package/.opencode/skills/bmad-create-prd/SKILL.md +0 -6
  274. package/.opencode/skills/bmad-create-prd/data/domain-complexity.csv +0 -15
  275. package/.opencode/skills/bmad-create-prd/data/prd-purpose.md +0 -197
  276. package/.opencode/skills/bmad-create-prd/data/project-types.csv +0 -11
  277. package/.opencode/skills/bmad-create-prd/steps-c/step-01-init.md +0 -178
  278. package/.opencode/skills/bmad-create-prd/steps-c/step-01b-continue.md +0 -161
  279. package/.opencode/skills/bmad-create-prd/steps-c/step-02-discovery.md +0 -208
  280. package/.opencode/skills/bmad-create-prd/steps-c/step-02b-vision.md +0 -142
  281. package/.opencode/skills/bmad-create-prd/steps-c/step-02c-executive-summary.md +0 -158
  282. package/.opencode/skills/bmad-create-prd/steps-c/step-03-success.md +0 -214
  283. package/.opencode/skills/bmad-create-prd/steps-c/step-04-journeys.md +0 -201
  284. package/.opencode/skills/bmad-create-prd/steps-c/step-05-domain.md +0 -194
  285. package/.opencode/skills/bmad-create-prd/steps-c/step-06-innovation.md +0 -211
  286. package/.opencode/skills/bmad-create-prd/steps-c/step-07-project-type.md +0 -222
  287. package/.opencode/skills/bmad-create-prd/steps-c/step-08-scoping.md +0 -216
  288. package/.opencode/skills/bmad-create-prd/steps-c/step-09-functional.md +0 -219
  289. package/.opencode/skills/bmad-create-prd/steps-c/step-10-nonfunctional.md +0 -230
  290. package/.opencode/skills/bmad-create-prd/steps-c/step-11-polish.md +0 -221
  291. package/.opencode/skills/bmad-create-prd/steps-c/step-12-complete.md +0 -115
  292. package/.opencode/skills/bmad-create-prd/templates/prd-template.md +0 -10
  293. package/.opencode/skills/bmad-create-prd/workflow.md +0 -62
  294. package/.opencode/skills/bmad-create-story/SKILL.md +0 -6
  295. package/.opencode/skills/bmad-create-story/checklist.md +0 -357
  296. package/.opencode/skills/bmad-create-story/discover-inputs.md +0 -88
  297. package/.opencode/skills/bmad-create-story/template.md +0 -49
  298. package/.opencode/skills/bmad-create-story/workflow.md +0 -380
  299. package/.opencode/skills/bmad-create-ux-design/SKILL.md +0 -6
  300. package/.opencode/skills/bmad-create-ux-design/steps/step-01-init.md +0 -135
  301. package/.opencode/skills/bmad-create-ux-design/steps/step-01b-continue.md +0 -127
  302. package/.opencode/skills/bmad-create-ux-design/steps/step-02-discovery.md +0 -190
  303. package/.opencode/skills/bmad-create-ux-design/steps/step-03-core-experience.md +0 -217
  304. package/.opencode/skills/bmad-create-ux-design/steps/step-04-emotional-response.md +0 -220
  305. package/.opencode/skills/bmad-create-ux-design/steps/step-05-inspiration.md +0 -235
  306. package/.opencode/skills/bmad-create-ux-design/steps/step-06-design-system.md +0 -253
  307. package/.opencode/skills/bmad-create-ux-design/steps/step-07-defining-experience.md +0 -255
  308. package/.opencode/skills/bmad-create-ux-design/steps/step-08-visual-foundation.md +0 -225
  309. package/.opencode/skills/bmad-create-ux-design/steps/step-09-design-directions.md +0 -225
  310. package/.opencode/skills/bmad-create-ux-design/steps/step-10-user-journeys.md +0 -242
  311. package/.opencode/skills/bmad-create-ux-design/steps/step-11-component-strategy.md +0 -249
  312. package/.opencode/skills/bmad-create-ux-design/steps/step-12-ux-patterns.md +0 -238
  313. package/.opencode/skills/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +0 -265
  314. package/.opencode/skills/bmad-create-ux-design/steps/step-14-complete.md +0 -171
  315. package/.opencode/skills/bmad-create-ux-design/ux-design-template.md +0 -13
  316. package/.opencode/skills/bmad-create-ux-design/workflow.md +0 -36
  317. package/.opencode/skills/bmad-distillator/SKILL.md +0 -178
  318. package/.opencode/skills/bmad-distillator/agents/distillate-compressor.md +0 -116
  319. package/.opencode/skills/bmad-distillator/agents/round-trip-reconstructor.md +0 -68
  320. package/.opencode/skills/bmad-distillator/resources/compression-rules.md +0 -51
  321. package/.opencode/skills/bmad-distillator/resources/distillate-format-reference.md +0 -227
  322. package/.opencode/skills/bmad-distillator/resources/splitting-strategy.md +0 -78
  323. package/.opencode/skills/bmad-distillator/scripts/analyze_sources.py +0 -300
  324. package/.opencode/skills/bmad-distillator/scripts/tests/test_analyze_sources.py +0 -204
  325. package/.opencode/skills/bmad-document-project/SKILL.md +0 -6
  326. package/.opencode/skills/bmad-document-project/checklist.md +0 -245
  327. package/.opencode/skills/bmad-document-project/documentation-requirements.csv +0 -12
  328. package/.opencode/skills/bmad-document-project/instructions.md +0 -128
  329. package/.opencode/skills/bmad-document-project/templates/deep-dive-template.md +0 -345
  330. package/.opencode/skills/bmad-document-project/templates/index-template.md +0 -169
  331. package/.opencode/skills/bmad-document-project/templates/project-overview-template.md +0 -103
  332. package/.opencode/skills/bmad-document-project/templates/project-scan-report-schema.json +0 -160
  333. package/.opencode/skills/bmad-document-project/templates/source-tree-template.md +0 -135
  334. package/.opencode/skills/bmad-document-project/workflow.md +0 -27
  335. package/.opencode/skills/bmad-document-project/workflows/deep-dive-instructions.md +0 -299
  336. package/.opencode/skills/bmad-document-project/workflows/deep-dive-workflow.md +0 -34
  337. package/.opencode/skills/bmad-document-project/workflows/full-scan-instructions.md +0 -1107
  338. package/.opencode/skills/bmad-document-project/workflows/full-scan-workflow.md +0 -34
  339. package/.opencode/skills/bmad-domain-research/SKILL.md +0 -6
  340. package/.opencode/skills/bmad-domain-research/domain-steps/step-01-init.md +0 -137
  341. package/.opencode/skills/bmad-domain-research/domain-steps/step-02-domain-analysis.md +0 -229
  342. package/.opencode/skills/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +0 -238
  343. package/.opencode/skills/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +0 -206
  344. package/.opencode/skills/bmad-domain-research/domain-steps/step-05-technical-trends.md +0 -234
  345. package/.opencode/skills/bmad-domain-research/domain-steps/step-06-research-synthesis.md +0 -444
  346. package/.opencode/skills/bmad-domain-research/research.template.md +0 -29
  347. package/.opencode/skills/bmad-domain-research/workflow.md +0 -49
  348. package/.opencode/skills/bmad-edit-prd/SKILL.md +0 -6
  349. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-01-discovery.md +0 -242
  350. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-01b-legacy-conversion.md +0 -204
  351. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-02-review.md +0 -245
  352. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-03-edit.md +0 -250
  353. package/.opencode/skills/bmad-edit-prd/steps-e/step-e-04-complete.md +0 -165
  354. package/.opencode/skills/bmad-edit-prd/workflow.md +0 -63
  355. package/.opencode/skills/bmad-editorial-review-prose/SKILL.md +0 -86
  356. package/.opencode/skills/bmad-editorial-review-structure/SKILL.md +0 -179
  357. package/.opencode/skills/bmad-generate-project-context/SKILL.md +0 -6
  358. package/.opencode/skills/bmad-generate-project-context/project-context-template.md +0 -21
  359. package/.opencode/skills/bmad-generate-project-context/steps/step-01-discover.md +0 -186
  360. package/.opencode/skills/bmad-generate-project-context/steps/step-02-generate.md +0 -321
  361. package/.opencode/skills/bmad-generate-project-context/steps/step-03-complete.md +0 -278
  362. package/.opencode/skills/bmad-generate-project-context/workflow.md +0 -43
  363. package/.opencode/skills/bmad-help/SKILL.md +0 -73
  364. package/.opencode/skills/bmad-index-docs/SKILL.md +0 -66
  365. package/.opencode/skills/bmad-init/SKILL.md +0 -100
  366. package/.opencode/skills/bmad-init/resources/core-module.yaml +0 -25
  367. package/.opencode/skills/bmad-init/scripts/bmad_init.py +0 -593
  368. package/.opencode/skills/bmad-init/scripts/tests/test_bmad_init.py +0 -329
  369. package/.opencode/skills/bmad-ma-agent-cyber/SKILL.md +0 -49
  370. package/.opencode/skills/bmad-ma-agent-cyber/bmad-skill-manifest.yaml +0 -11
  371. package/.opencode/skills/bmad-ma-agent-devops/SKILL.md +0 -49
  372. package/.opencode/skills/bmad-ma-agent-devops/bmad-skill-manifest.yaml +0 -11
  373. package/.opencode/skills/bmad-ma-agent-mil498/SKILL.md +0 -53
  374. package/.opencode/skills/bmad-ma-agent-mil498/bmad-skill-manifest.yaml +0 -11
  375. package/.opencode/skills/bmad-ma-agent-ml/.gitkeep +0 -0
  376. package/.opencode/skills/bmad-ma-agent-ml/SKILL.md +0 -59
  377. package/.opencode/skills/bmad-ma-agent-ml/bmad-skill-manifest.yaml +0 -11
  378. package/.opencode/skills/bmad-ma-agent-sre/.gitkeep +0 -0
  379. package/.opencode/skills/bmad-ma-agent-sre/SKILL.md +0 -49
  380. package/.opencode/skills/bmad-ma-agent-sre/bmad-skill-manifest.yaml +0 -11
  381. package/.opencode/skills/bmad-market-research/SKILL.md +0 -6
  382. package/.opencode/skills/bmad-market-research/research.template.md +0 -29
  383. package/.opencode/skills/bmad-market-research/steps/step-01-init.md +0 -184
  384. package/.opencode/skills/bmad-market-research/steps/step-02-customer-behavior.md +0 -239
  385. package/.opencode/skills/bmad-market-research/steps/step-03-customer-pain-points.md +0 -251
  386. package/.opencode/skills/bmad-market-research/steps/step-04-customer-decisions.md +0 -261
  387. package/.opencode/skills/bmad-market-research/steps/step-05-competitive-analysis.md +0 -173
  388. package/.opencode/skills/bmad-market-research/steps/step-06-research-completion.md +0 -478
  389. package/.opencode/skills/bmad-market-research/workflow.md +0 -49
  390. package/.opencode/skills/bmad-party-mode/SKILL.md +0 -6
  391. package/.opencode/skills/bmad-party-mode/steps/step-01-agent-loading.md +0 -138
  392. package/.opencode/skills/bmad-party-mode/steps/step-02-discussion-orchestration.md +0 -187
  393. package/.opencode/skills/bmad-party-mode/steps/step-03-graceful-exit.md +0 -167
  394. package/.opencode/skills/bmad-party-mode/workflow.md +0 -190
  395. package/.opencode/skills/bmad-product-brief/SKILL.md +0 -87
  396. package/.opencode/skills/bmad-product-brief/agents/artifact-analyzer.md +0 -60
  397. package/.opencode/skills/bmad-product-brief/agents/opportunity-reviewer.md +0 -44
  398. package/.opencode/skills/bmad-product-brief/agents/skeptic-reviewer.md +0 -44
  399. package/.opencode/skills/bmad-product-brief/agents/web-researcher.md +0 -49
  400. package/.opencode/skills/bmad-product-brief/bmad-manifest.json +0 -17
  401. package/.opencode/skills/bmad-product-brief/prompts/contextual-discovery.md +0 -57
  402. package/.opencode/skills/bmad-product-brief/prompts/draft-and-review.md +0 -86
  403. package/.opencode/skills/bmad-product-brief/prompts/finalize.md +0 -75
  404. package/.opencode/skills/bmad-product-brief/prompts/guided-elicitation.md +0 -70
  405. package/.opencode/skills/bmad-product-brief/resources/brief-template.md +0 -60
  406. package/.opencode/skills/bmad-qa-generate-e2e-tests/SKILL.md +0 -6
  407. package/.opencode/skills/bmad-qa-generate-e2e-tests/checklist.md +0 -33
  408. package/.opencode/skills/bmad-qa-generate-e2e-tests/workflow.md +0 -136
  409. package/.opencode/skills/bmad-quick-dev/SKILL.md +0 -6
  410. package/.opencode/skills/bmad-quick-dev/spec-template.md +0 -88
  411. package/.opencode/skills/bmad-quick-dev/step-01-clarify-and-route.md +0 -64
  412. package/.opencode/skills/bmad-quick-dev/step-02-plan.md +0 -35
  413. package/.opencode/skills/bmad-quick-dev/step-03-implement.md +0 -37
  414. package/.opencode/skills/bmad-quick-dev/step-04-review.md +0 -49
  415. package/.opencode/skills/bmad-quick-dev/step-05-present.md +0 -63
  416. package/.opencode/skills/bmad-quick-dev/step-oneshot.md +0 -49
  417. package/.opencode/skills/bmad-quick-dev/workflow.md +0 -79
  418. package/.opencode/skills/bmad-retrospective/SKILL.md +0 -6
  419. package/.opencode/skills/bmad-retrospective/workflow.md +0 -1479
  420. package/.opencode/skills/bmad-review-adversarial-general/SKILL.md +0 -37
  421. package/.opencode/skills/bmad-review-edge-case-hunter/SKILL.md +0 -67
  422. package/.opencode/skills/bmad-shard-doc/SKILL.md +0 -105
  423. package/.opencode/skills/bmad-sprint-planning/SKILL.md +0 -6
  424. package/.opencode/skills/bmad-sprint-planning/checklist.md +0 -33
  425. package/.opencode/skills/bmad-sprint-planning/sprint-status-template.yaml +0 -56
  426. package/.opencode/skills/bmad-sprint-planning/workflow.md +0 -263
  427. package/.opencode/skills/bmad-sprint-status/SKILL.md +0 -6
  428. package/.opencode/skills/bmad-sprint-status/workflow.md +0 -261
  429. package/.opencode/skills/bmad-technical-research/SKILL.md +0 -6
  430. package/.opencode/skills/bmad-technical-research/research.template.md +0 -29
  431. package/.opencode/skills/bmad-technical-research/technical-steps/step-01-init.md +0 -137
  432. package/.opencode/skills/bmad-technical-research/technical-steps/step-02-technical-overview.md +0 -239
  433. package/.opencode/skills/bmad-technical-research/technical-steps/step-03-integration-patterns.md +0 -248
  434. package/.opencode/skills/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +0 -202
  435. package/.opencode/skills/bmad-technical-research/technical-steps/step-05-implementation-research.md +0 -233
  436. package/.opencode/skills/bmad-technical-research/technical-steps/step-06-research-synthesis.md +0 -487
  437. package/.opencode/skills/bmad-technical-research/workflow.md +0 -50
  438. package/.opencode/skills/bmad-validate-prd/SKILL.md +0 -6
  439. package/.opencode/skills/bmad-validate-prd/data/domain-complexity.csv +0 -15
  440. package/.opencode/skills/bmad-validate-prd/data/prd-purpose.md +0 -197
  441. package/.opencode/skills/bmad-validate-prd/data/project-types.csv +0 -11
  442. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-01-discovery.md +0 -221
  443. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-02-format-detection.md +0 -188
  444. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +0 -206
  445. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-03-density-validation.md +0 -171
  446. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -211
  447. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +0 -225
  448. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +0 -214
  449. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -202
  450. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -240
  451. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +0 -260
  452. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +0 -206
  453. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -261
  454. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +0 -239
  455. package/.opencode/skills/bmad-validate-prd/steps-v/step-v-13-report-complete.md +0 -229
  456. package/.opencode/skills/bmad-validate-prd/workflow.md +0 -62
  457. package/.opencode/skills/cleanup-done/.gitkeep +0 -0
  458. package/.opencode/skills/cleanup-done/SKILL.md +0 -159
  459. package/.opencode/skills/create-bug-story/.gitkeep +0 -0
  460. package/.opencode/skills/create-bug-story/SKILL.md +0 -263
  461. package/.opencode/skills/cyber-generate-certs/.gitkeep +0 -0
  462. package/.opencode/skills/cyber-generate-certs/SKILL.md +0 -27
  463. package/.opencode/skills/cyber-generate-certs/bmad-skill-manifest.yaml +0 -3
  464. package/.opencode/skills/cyber-immunity-estimation/.gitkeep +0 -0
  465. package/.opencode/skills/cyber-immunity-estimation/SKILL.md +0 -29
  466. package/.opencode/skills/cyber-immunity-estimation/bmad-skill-manifest.yaml +0 -3
  467. package/.opencode/skills/cyber-security-audit/.gitkeep +0 -0
  468. package/.opencode/skills/cyber-security-audit/SKILL.md +0 -27
  469. package/.opencode/skills/cyber-security-audit/bmad-skill-manifest.yaml +0 -3
  470. package/.opencode/skills/cyber-vault-secrets/.gitkeep +0 -0
  471. package/.opencode/skills/cyber-vault-secrets/SKILL.md +0 -28
  472. package/.opencode/skills/cyber-vault-secrets/bmad-skill-manifest.yaml +0 -3
  473. package/.opencode/skills/cyber-verify-docker-users/.gitkeep +0 -0
  474. package/.opencode/skills/cyber-verify-docker-users/SKILL.md +0 -23
  475. package/.opencode/skills/cyber-verify-docker-users/bmad-skill-manifest.yaml +0 -3
  476. package/.opencode/skills/cyber-verify-image-signature/.gitkeep +0 -0
  477. package/.opencode/skills/cyber-verify-image-signature/SKILL.md +0 -22
  478. package/.opencode/skills/cyber-verify-image-signature/bmad-skill-manifest.yaml +0 -3
  479. package/.opencode/skills/cyber-vulnerability-scan/.gitkeep +0 -0
  480. package/.opencode/skills/cyber-vulnerability-scan/SKILL.md +0 -28
  481. package/.opencode/skills/cyber-vulnerability-scan/bmad-skill-manifest.yaml +0 -3
  482. package/.opencode/skills/devops-configure-infrastructure/.gitkeep +0 -0
  483. package/.opencode/skills/devops-configure-infrastructure/SKILL.md +0 -27
  484. package/.opencode/skills/devops-configure-infrastructure/bmad-skill-manifest.yaml +0 -3
  485. package/.opencode/skills/devops-disconnected-deployment/.gitkeep +0 -0
  486. package/.opencode/skills/devops-disconnected-deployment/SKILL.md +0 -27
  487. package/.opencode/skills/devops-disconnected-deployment/bmad-skill-manifest.yaml +0 -3
  488. package/.opencode/skills/devops-docker-compose-setup/.gitkeep +0 -0
  489. package/.opencode/skills/devops-docker-compose-setup/SKILL.md +0 -26
  490. package/.opencode/skills/devops-docker-compose-setup/bmad-skill-manifest.yaml +0 -3
  491. package/.opencode/skills/devops-manage-helm/.gitkeep +0 -0
  492. package/.opencode/skills/devops-manage-helm/SKILL.md +0 -28
  493. package/.opencode/skills/devops-manage-helm/bmad-skill-manifest.yaml +0 -3
  494. package/.opencode/skills/devops-sign-docker-image/.gitkeep +0 -0
  495. package/.opencode/skills/devops-sign-docker-image/SKILL.md +0 -24
  496. package/.opencode/skills/devops-sign-docker-image/bmad-skill-manifest.yaml +0 -3
  497. package/.opencode/skills/generate-backlog/.gitkeep +0 -0
  498. package/.opencode/skills/generate-backlog/SKILL.md +0 -183
  499. package/.opencode/skills/generate-backlog/bmad-skill-manifest.yaml +0 -3
  500. package/.opencode/skills/git-workflow-skill/SKILL.md +0 -194
  501. package/.opencode/skills/git-workflow-skill/hooks/commit-msg +0 -61
  502. package/.opencode/skills/git-workflow-skill/hooks/pre-commit +0 -38
  503. package/.opencode/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
  504. package/.opencode/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
  505. package/.opencode/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
  506. package/.opencode/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
  507. package/.opencode/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
  508. package/.opencode/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
  509. package/.opencode/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
  510. package/.opencode/skills/js-ts-security-skill/SKILL.md +0 -64
  511. package/.opencode/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
  512. package/.opencode/skills/logging-best-practices/SKILL.md +0 -50
  513. package/.opencode/skills/logging-best-practices/examples/cpp.md +0 -36
  514. package/.opencode/skills/logging-best-practices/examples/csharp.md +0 -49
  515. package/.opencode/skills/logging-best-practices/examples/javascript.md +0 -77
  516. package/.opencode/skills/logging-best-practices/examples/python.md +0 -57
  517. package/.opencode/skills/logging-best-practices/references/logging-standards.md +0 -29
  518. package/.opencode/skills/mil498-ocd/.gitkeep +0 -0
  519. package/.opencode/skills/mil498-ocd/SKILL.md +0 -30
  520. package/.opencode/skills/mil498-ocd/bmad-skill-manifest.yaml +0 -5
  521. package/.opencode/skills/mil498-ocd/prompts/01-discover-project-artifacts.md +0 -26
  522. package/.opencode/skills/mil498-ocd/prompts/02-load-template.md +0 -10
  523. package/.opencode/skills/mil498-ocd/prompts/03-generate-document.md +0 -90
  524. package/.opencode/skills/mil498-ocd/prompts/04-validate.md +0 -14
  525. package/.opencode/skills/mil498-ocd/prompts/05-review.md +0 -15
  526. package/.opencode/skills/mil498-ocd/prompts/06-save.md +0 -15
  527. package/.opencode/skills/mil498-sdd/.gitkeep +0 -0
  528. package/.opencode/skills/mil498-sdd/SKILL.md +0 -30
  529. package/.opencode/skills/mil498-sdd/bmad-skill-manifest.yaml +0 -5
  530. package/.opencode/skills/mil498-sdd/prompts/01-discover-project-artifacts.md +0 -50
  531. package/.opencode/skills/mil498-sdd/prompts/02-load-template.md +0 -10
  532. package/.opencode/skills/mil498-sdd/prompts/03-generate-document.md +0 -98
  533. package/.opencode/skills/mil498-sdd/prompts/04-validate.md +0 -16
  534. package/.opencode/skills/mil498-sdd/prompts/05-review.md +0 -15
  535. package/.opencode/skills/mil498-sdd/prompts/06-save.md +0 -19
  536. package/.opencode/skills/mil498-sdd/template.md +0 -163
  537. package/.opencode/skills/mil498-sdp/.gitkeep +0 -0
  538. package/.opencode/skills/mil498-sdp/SKILL.md +0 -30
  539. package/.opencode/skills/mil498-sdp/bmad-skill-manifest.yaml +0 -5
  540. package/.opencode/skills/mil498-sdp/prompts/01-discover-project-artifacts.md +0 -32
  541. package/.opencode/skills/mil498-sdp/prompts/02-load-template.md +0 -10
  542. package/.opencode/skills/mil498-sdp/prompts/03-generate-document.md +0 -187
  543. package/.opencode/skills/mil498-sdp/prompts/04-validate.md +0 -13
  544. package/.opencode/skills/mil498-sdp/prompts/05-review.md +0 -15
  545. package/.opencode/skills/mil498-sdp/prompts/06-save.md +0 -14
  546. package/.opencode/skills/mil498-srs/.gitkeep +0 -0
  547. package/.opencode/skills/mil498-srs/SKILL.md +0 -30
  548. package/.opencode/skills/mil498-srs/bmad-skill-manifest.yaml +0 -5
  549. package/.opencode/skills/mil498-srs/prompts/01-discover-project-artifacts.md +0 -42
  550. package/.opencode/skills/mil498-srs/prompts/02-load-template.md +0 -10
  551. package/.opencode/skills/mil498-srs/prompts/03-generate-document.md +0 -100
  552. package/.opencode/skills/mil498-srs/prompts/04-validate.md +0 -16
  553. package/.opencode/skills/mil498-srs/prompts/05-review.md +0 -15
  554. package/.opencode/skills/mil498-srs/prompts/06-save.md +0 -18
  555. package/.opencode/skills/mil498-ssdd/.gitkeep +0 -0
  556. package/.opencode/skills/mil498-ssdd/SKILL.md +0 -32
  557. package/.opencode/skills/mil498-ssdd/bmad-skill-manifest.yaml +0 -5
  558. package/.opencode/skills/mil498-ssdd/prompts/01-discover-project-artifacts.md +0 -32
  559. package/.opencode/skills/mil498-ssdd/prompts/02-load-template.md +0 -10
  560. package/.opencode/skills/mil498-ssdd/prompts/03-csci-discovery-interview.md +0 -43
  561. package/.opencode/skills/mil498-ssdd/prompts/04-generate-document.md +0 -96
  562. package/.opencode/skills/mil498-ssdd/prompts/05-validate.md +0 -14
  563. package/.opencode/skills/mil498-ssdd/prompts/06-review.md +0 -16
  564. package/.opencode/skills/mil498-ssdd/prompts/07-save.md +0 -16
  565. package/.opencode/skills/mil498-sss/.gitkeep +0 -0
  566. package/.opencode/skills/mil498-sss/SKILL.md +0 -31
  567. package/.opencode/skills/mil498-sss/bmad-skill-manifest.yaml +0 -5
  568. package/.opencode/skills/mil498-sss/prompts/01-discover-project-artifacts.md +0 -31
  569. package/.opencode/skills/mil498-sss/prompts/02-load-template.md +0 -10
  570. package/.opencode/skills/mil498-sss/prompts/03-generate-document.md +0 -108
  571. package/.opencode/skills/mil498-sss/prompts/04-validate.md +0 -16
  572. package/.opencode/skills/mil498-sss/prompts/05-review.md +0 -15
  573. package/.opencode/skills/mil498-sss/prompts/06-save.md +0 -15
  574. package/.opencode/skills/mil498-std/.gitkeep +0 -0
  575. package/.opencode/skills/mil498-std/SKILL.md +0 -30
  576. package/.opencode/skills/mil498-std/bmad-skill-manifest.yaml +0 -5
  577. package/.opencode/skills/mil498-std/prompts/01-discover-project-artifacts.md +0 -42
  578. package/.opencode/skills/mil498-std/prompts/02-load-template.md +0 -10
  579. package/.opencode/skills/mil498-std/prompts/03-generate-document.md +0 -117
  580. package/.opencode/skills/mil498-std/prompts/04-validate.md +0 -15
  581. package/.opencode/skills/mil498-std/prompts/05-review.md +0 -15
  582. package/.opencode/skills/mil498-std/prompts/06-save.md +0 -15
  583. package/.opencode/skills/ml-advise/.gitkeep +0 -0
  584. package/.opencode/skills/ml-advise/SKILL.md +0 -76
  585. package/.opencode/skills/ml-advise/bmad-skill-manifest.yaml +0 -3
  586. package/.opencode/skills/ml-advise/skill.json +0 -7
  587. package/.opencode/skills/ml-analysis/.gitkeep +0 -0
  588. package/.opencode/skills/ml-analysis/SKILL.md +0 -60
  589. package/.opencode/skills/ml-analysis/bmad-skill-manifest.yaml +0 -3
  590. package/.opencode/skills/ml-analysis/skill.json +0 -7
  591. package/.opencode/skills/ml-architecture/.gitkeep +0 -0
  592. package/.opencode/skills/ml-architecture/SKILL.md +0 -55
  593. package/.opencode/skills/ml-architecture/bmad-skill-manifest.yaml +0 -3
  594. package/.opencode/skills/ml-architecture/skill.json +0 -7
  595. package/.opencode/skills/ml-detailed-design/.gitkeep +0 -0
  596. package/.opencode/skills/ml-detailed-design/SKILL.md +0 -67
  597. package/.opencode/skills/ml-detailed-design/bmad-skill-manifest.yaml +0 -3
  598. package/.opencode/skills/ml-detailed-design/skill.json +0 -7
  599. package/.opencode/skills/ml-eda/.gitkeep +0 -0
  600. package/.opencode/skills/ml-eda/SKILL.md +0 -56
  601. package/.opencode/skills/ml-eda/bmad-skill-manifest.yaml +0 -3
  602. package/.opencode/skills/ml-eda/scripts/baseline_classifier.py +0 -522
  603. package/.opencode/skills/ml-eda/scripts/class_weights_calculator.py +0 -295
  604. package/.opencode/skills/ml-eda/scripts/clustering_explorer.py +0 -383
  605. package/.opencode/skills/ml-eda/scripts/eda_analyzer.py +0 -654
  606. package/.opencode/skills/ml-eda/skill.json +0 -7
  607. package/.opencode/skills/ml-experiment/.gitkeep +0 -0
  608. package/.opencode/skills/ml-experiment/SKILL.md +0 -74
  609. package/.opencode/skills/ml-experiment/assets/advanced_trainer_configs.py +0 -430
  610. package/.opencode/skills/ml-experiment/assets/quick_trainer_setup.py +0 -233
  611. package/.opencode/skills/ml-experiment/assets/template_datamodule.py +0 -219
  612. package/.opencode/skills/ml-experiment/assets/template_gnn_module.py +0 -341
  613. package/.opencode/skills/ml-experiment/assets/template_lightning_module.py +0 -158
  614. package/.opencode/skills/ml-experiment/bmad-skill-manifest.yaml +0 -3
  615. package/.opencode/skills/ml-experiment/skill.json +0 -7
  616. package/.opencode/skills/ml-hparam/.gitkeep +0 -0
  617. package/.opencode/skills/ml-hparam/SKILL.md +0 -81
  618. package/.opencode/skills/ml-hparam/bmad-skill-manifest.yaml +0 -3
  619. package/.opencode/skills/ml-hparam/skill.json +0 -7
  620. package/.opencode/skills/ml-ideation/.gitkeep +0 -0
  621. package/.opencode/skills/ml-ideation/SKILL.md +0 -50
  622. package/.opencode/skills/ml-ideation/bmad-skill-manifest.yaml +0 -3
  623. package/.opencode/skills/ml-ideation/scripts/validate_ml_prd.py +0 -287
  624. package/.opencode/skills/ml-ideation/skill.json +0 -7
  625. package/.opencode/skills/ml-infra/.gitkeep +0 -0
  626. package/.opencode/skills/ml-infra/SKILL.md +0 -58
  627. package/.opencode/skills/ml-infra/bmad-skill-manifest.yaml +0 -3
  628. package/.opencode/skills/ml-infra/skill.json +0 -7
  629. package/.opencode/skills/ml-retrospective/.gitkeep +0 -0
  630. package/.opencode/skills/ml-retrospective/SKILL.md +0 -63
  631. package/.opencode/skills/ml-retrospective/bmad-skill-manifest.yaml +0 -3
  632. package/.opencode/skills/ml-retrospective/skill.json +0 -7
  633. package/.opencode/skills/ml-revision/.gitkeep +0 -0
  634. package/.opencode/skills/ml-revision/SKILL.md +0 -82
  635. package/.opencode/skills/ml-revision/bmad-skill-manifest.yaml +0 -3
  636. package/.opencode/skills/ml-revision/skill.json +0 -7
  637. package/.opencode/skills/ml-techspec/.gitkeep +0 -0
  638. package/.opencode/skills/ml-techspec/SKILL.md +0 -80
  639. package/.opencode/skills/ml-techspec/bmad-skill-manifest.yaml +0 -3
  640. package/.opencode/skills/ml-techspec/skill.json +0 -7
  641. package/.opencode/skills/modify-sprint/.gitkeep +0 -0
  642. package/.opencode/skills/modify-sprint/SKILL.md +0 -322
  643. package/.opencode/skills/modify-sprint/bmad-skill-manifest.yaml +0 -3
  644. package/.opencode/skills/open-presentation/SKILL.md +0 -35
  645. package/.opencode/skills/opentelemetry-best-practices/SKILL.md +0 -34
  646. package/.opencode/skills/opentelemetry-best-practices/examples/go.md +0 -32
  647. package/.opencode/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
  648. package/.opencode/skills/opentelemetry-best-practices/examples/python.md +0 -37
  649. package/.opencode/skills/opentelemetry-best-practices/references/otel-standards.md +0 -37
  650. package/.opencode/skills/prioritize-backlog/.gitkeep +0 -0
  651. package/.opencode/skills/prioritize-backlog/SKILL.md +0 -195
  652. package/.opencode/skills/prioritize-backlog/bmad-skill-manifest.yaml +0 -3
  653. package/.opencode/skills/project-context-expansion/.gitkeep +0 -0
  654. package/.opencode/skills/project-context-expansion/SKILL.md +0 -238
  655. package/.opencode/skills/project-context-expansion/bmad-skill-manifest.yaml +0 -3
  656. package/.opencode/skills/python-best-practices/SKILL.md +0 -385
  657. package/.opencode/skills/python-dependency-mgmt/SKILL.md +0 -42
  658. package/.opencode/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
  659. package/.opencode/skills/python-security-skill/SKILL.md +0 -56
  660. package/.opencode/skills/python-security-skill/examples/security.md +0 -56
  661. package/.opencode/skills/remove-from-sprint/.gitkeep +0 -0
  662. package/.opencode/skills/remove-from-sprint/SKILL.md +0 -163
  663. package/.opencode/skills/remove-from-sprint/bmad-skill-manifest.yaml +0 -3
  664. package/.opencode/skills/self-signed-cert/SKILL.md +0 -42
  665. package/.opencode/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
  666. package/.opencode/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
  667. package/.opencode/skills/skill-creator/SKILL.md +0 -196
  668. package/.opencode/skills/skill-creator/references/output-patterns.md +0 -82
  669. package/.opencode/skills/skill-creator/references/workflows.md +0 -28
  670. package/.opencode/skills/skill-creator/scripts/init_skill.py +0 -208
  671. package/.opencode/skills/skill-creator/scripts/package_skill.py +0 -99
  672. package/.opencode/skills/skill-creator/scripts/quick_validate.py +0 -113
  673. package/.opencode/skills/sprint-status-view/.gitkeep +0 -0
  674. package/.opencode/skills/sprint-status-view/SKILL.md +0 -263
  675. package/.opencode/skills/sprint-status-view/bmad-skill-manifest.yaml +0 -3
  676. package/.opencode/skills/sre-check-deployment-status/.gitkeep +0 -0
  677. package/.opencode/skills/sre-check-deployment-status/SKILL.md +0 -32
  678. package/.opencode/skills/sre-check-deployment-status/bmad-skill-manifest.yaml +0 -3
  679. package/.opencode/skills/sre-check-secrets/.gitkeep +0 -0
  680. package/.opencode/skills/sre-check-secrets/SKILL.md +0 -23
  681. package/.opencode/skills/sre-check-secrets/bmad-skill-manifest.yaml +0 -3
  682. package/.opencode/skills/sre-check-system-status/.gitkeep +0 -0
  683. package/.opencode/skills/sre-check-system-status/SKILL.md +0 -27
  684. package/.opencode/skills/sre-check-system-status/bmad-skill-manifest.yaml +0 -3
  685. package/.opencode/skills/sre-day-2-ops/.gitkeep +0 -0
  686. package/.opencode/skills/sre-day-2-ops/SKILL.md +0 -26
  687. package/.opencode/skills/sre-day-2-ops/bmad-skill-manifest.yaml +0 -3
  688. package/.opencode/skills/sre-deployment-strategies/.gitkeep +0 -0
  689. package/.opencode/skills/sre-deployment-strategies/SKILL.md +0 -28
  690. package/.opencode/skills/sre-deployment-strategies/bmad-skill-manifest.yaml +0 -3
  691. package/.opencode/skills/sre-fix-deployments/.gitkeep +0 -0
  692. package/.opencode/skills/sre-fix-deployments/SKILL.md +0 -25
  693. package/.opencode/skills/sre-fix-deployments/bmad-skill-manifest.yaml +0 -3
  694. package/.opencode/skills/sre-gitops-status/.gitkeep +0 -0
  695. package/.opencode/skills/sre-gitops-status/SKILL.md +0 -25
  696. package/.opencode/skills/sre-gitops-status/bmad-skill-manifest.yaml +0 -3
  697. package/.opencode/skills/story-status-lookup/SKILL.md +0 -78
  698. package/.opencode/skills/test-accompanied-development/SKILL.md +0 -50
  699. package/.opencode/skills/test-generator/SKILL.md +0 -65
  700. package/.opencode/skills/vercel-react-best-practices/SKILL.md +0 -109
  701. package/.opencode/skills/verify-hardened-docker-skill/SKILL.md +0 -442
  702. package/.opencode/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
  703. package/.roo/rules/00-ma-agents.md +0 -13
  704. package/.roo/skills/.ma-agents.json +0 -122
  705. package/.roo/skills/MANIFEST.yaml +0 -126
  706. package/.roo/skills/git-workflow-skill/SKILL.md +0 -194
  707. package/.roo/skills/git-workflow-skill/hooks/commit-msg +0 -61
  708. package/.roo/skills/git-workflow-skill/hooks/pre-commit +0 -38
  709. package/.roo/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
  710. package/.roo/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
  711. package/.roo/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
  712. package/.roo/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
  713. package/.roo/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
  714. package/.roo/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
  715. package/.roo/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
  716. package/.roo/skills/js-ts-security-skill/SKILL.md +0 -64
  717. package/.roo/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
  718. package/.roo/skills/logging-best-practices/SKILL.md +0 -50
  719. package/.roo/skills/logging-best-practices/examples/cpp.md +0 -36
  720. package/.roo/skills/logging-best-practices/examples/csharp.md +0 -49
  721. package/.roo/skills/logging-best-practices/examples/javascript.md +0 -77
  722. package/.roo/skills/logging-best-practices/examples/python.md +0 -57
  723. package/.roo/skills/logging-best-practices/references/logging-standards.md +0 -29
  724. package/.roo/skills/open-presentation/SKILL.md +0 -35
  725. package/.roo/skills/opentelemetry-best-practices/SKILL.md +0 -34
  726. package/.roo/skills/opentelemetry-best-practices/examples/go.md +0 -32
  727. package/.roo/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
  728. package/.roo/skills/opentelemetry-best-practices/examples/python.md +0 -37
  729. package/.roo/skills/opentelemetry-best-practices/references/otel-standards.md +0 -37
  730. package/.roo/skills/python-best-practices/SKILL.md +0 -385
  731. package/.roo/skills/python-dependency-mgmt/SKILL.md +0 -42
  732. package/.roo/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
  733. package/.roo/skills/python-security-skill/SKILL.md +0 -56
  734. package/.roo/skills/python-security-skill/examples/security.md +0 -56
  735. package/.roo/skills/self-signed-cert/SKILL.md +0 -42
  736. package/.roo/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
  737. package/.roo/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
  738. package/.roo/skills/skill-creator/SKILL.md +0 -196
  739. package/.roo/skills/skill-creator/references/output-patterns.md +0 -82
  740. package/.roo/skills/skill-creator/references/workflows.md +0 -28
  741. package/.roo/skills/skill-creator/scripts/init_skill.py +0 -208
  742. package/.roo/skills/skill-creator/scripts/package_skill.py +0 -99
  743. package/.roo/skills/skill-creator/scripts/quick_validate.py +0 -113
  744. package/.roo/skills/story-status-lookup/SKILL.md +0 -78
  745. package/.roo/skills/test-accompanied-development/SKILL.md +0 -50
  746. package/.roo/skills/test-generator/SKILL.md +0 -65
  747. package/.roo/skills/vercel-react-best-practices/SKILL.md +0 -109
  748. package/.roo/skills/verify-hardened-docker-skill/SKILL.md +0 -442
  749. package/.roo/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
  750. package/opencode.json +0 -5
  751. /package/{.opencode/skills/add-sprint → lib/bmad-extension/skills/bmad-dev-story}/.gitkeep +0 -0
  752. /package/{.opencode → lib/bmad-extension}/skills/bmad-dev-story/SKILL.md +0 -0
  753. /package/{.opencode/skills/add-to-sprint → lib/bmad-extension/skills/bmad-sprint-planning}/.gitkeep +0 -0
  754. /package/{.opencode/skills/bmad-ma-agent-cyber → lib/bmad-extension/skills/bmad-sprint-status}/.gitkeep +0 -0
  755. /package/{.opencode/skills/bmad-ma-agent-devops → lib/bmad-extension/skills/close-sprint}/.gitkeep +0 -0
  756. /package/{.opencode/skills/bmad-ma-agent-mil498 → lib/bmad-extension/skills/mil498-requirement-quality}/.gitkeep +0 -0
  757. /package/{.opencode/skills/mil498-ocd/template.md → mil498/OCD.md} +0 -0
  758. /package/{.opencode/skills/mil498-sdp/template.md → mil498/SDP.md} +0 -0
  759. /package/{.opencode/skills/mil498-srs/template.md → mil498/SRS.md} +0 -0
  760. /package/{.opencode/skills/mil498-ssdd/template.md → mil498/SSDD.md} +0 -0
  761. /package/{.opencode/skills/mil498-sss/template.md → mil498/SSS.md} +0 -0
  762. /package/{.opencode/skills/mil498-std/template.md → mil498/STD.md} +0 -0
@@ -0,0 +1,162 @@
1
+ # Story 7.4: Add Tests for cli.js Command Routing
2
+
3
+ Status: ready-for-dev
4
+
5
+ <!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
6
+ <!-- Dependency: Story 7-1 must be completed first (test framework setup) -->
7
+
8
+ ## Story
9
+
10
+ As a **developer**,
11
+ I want tests covering CLI command parsing and routing,
12
+ So that command-line argument handling is verified automatically.
13
+
14
+ ## Acceptance Criteria
15
+
16
+ 1. **Given** tests exist for `cli.js`
17
+ **When** the test suite runs
18
+ **Then** it verifies:
19
+ - Known commands (install, list, status, uninstall) route correctly
20
+ - Unknown commands produce helpful error messages
21
+ - Flag parsing (`--yes`, `--force`, `--agent`) extracts values correctly
22
+ - Help output is displayed for `--help` flag
23
+ - Version output is displayed for `--version` flag
24
+
25
+ ## Tasks / Subtasks
26
+
27
+ - [ ] Task 1: Analyze cli.js testability (AC: #1)
28
+ - [ ] 1.1: Map the command routing in `main()` function (line 523)
29
+ - [ ] 1.2: Identify `parseFlags(args)` function (line 107) — this is a pure function, directly testable
30
+ - [ ] 1.3: Identify which functions can be tested without triggering interactive prompts or real installs
31
+ - [ ] 1.4: Note: `cli.js` is the `bin` entry point — it calls `main()` on require. Tests must NOT require cli.js directly or it will execute. Import specific functions or test via subprocess.
32
+ - [ ] Task 2: Test flag parsing (AC: #1)
33
+ - [ ] 2.1: Create `tests/cli.test.js`
34
+ - [ ] 2.2: **Challenge:** `parseFlags()` is not exported — it's internal to cli.js. Options:
35
+ - Option A: Export `parseFlags` from cli.js for testing (minor, safe change)
36
+ - Option B: Test via subprocess: `node bin/cli.js --help` and verify output
37
+ - Option C: Extract `parseFlags` to a shared utility (over-engineering for this story)
38
+ - [ ] 2.3: If Option A: Test `parseFlags(['--yes'])` returns `{ yes: true }`
39
+ - [ ] 2.4: If Option A: Test `parseFlags(['--force'])` returns `{ force: true }`
40
+ - [ ] 2.5: If Option A: Test `parseFlags(['--agent', 'claude-code'])` returns `{ agent: 'claude-code' }`
41
+ - [ ] 2.6: If Option A: Test `parseFlags([])` returns empty/default flags
42
+ - [ ] Task 3: Test CLI commands via subprocess (AC: #1)
43
+ - [ ] 3.1: Test: `node bin/cli.js --help` exits 0 and outputs usage info
44
+ - [ ] 3.2: Test: `node bin/cli.js --version` exits 0 and outputs version matching `package.json` version
45
+ - [ ] 3.3: Test: `node bin/cli.js list` exits 0 and outputs skill/agent listings
46
+ - [ ] 3.4: Test: `node bin/cli.js list --skills` exits 0 and outputs skill names
47
+ - [ ] 3.5: Test: `node bin/cli.js list --agents` exits 0 and outputs agent names
48
+ - [ ] 3.6: Test: `node bin/cli.js unknowncommand` exits non-zero or outputs help/error
49
+ - [ ] 3.7: Use `child_process.execSync` or `child_process.exec` for subprocess testing
50
+ - [ ] Task 4: Test help and version output content (AC: #1)
51
+ - [ ] 4.1: Test: help output contains key command names (install, list, status, uninstall)
52
+ - [ ] 4.2: Test: version output matches `require('../package.json').version`
53
+
54
+ ## Dev Notes
55
+
56
+ ### Architecture Compliance
57
+
58
+ - **Test location:** `tests/cli.test.js` [Source: architecture.md#Structure-Patterns]
59
+ - **CLI entry point hazard:** `bin/cli.js` calls `main()` at the bottom of the file. Requiring it directly would trigger the CLI. Tests must either:
60
+ 1. Test via subprocess (`child_process.exec('node bin/cli.js ...')`)
61
+ 2. Or export specific functions and guard `main()` behind `require.main === module` check
62
+ - **No real installs:** CLI tests must not trigger `install` or `uninstall` operations
63
+
64
+ ### cli.js Module Structure
65
+
66
+ From [cli.js:1-565](bin/cli.js) — 565 lines, key functions:
67
+
68
+ **Display functions (no side effects beyond console output):**
69
+ - `showHelp()` (line 13) — prints usage info
70
+ - `showSkills()` (line 42) — lists skills
71
+ - `showAgents()` (line 51) — lists agents
72
+ - `showStatus(args)` (line 70) — shows install status
73
+
74
+ **Parsing functions (pure logic, most testable):**
75
+ - `parseFlags(args)` (line 107) — extracts --yes, --force, --agent, --skill, --scope, --path flags
76
+
77
+ **Command handlers (orchestrate operations, harder to test):**
78
+ - `handleInstall(args)` (line 425) — install command handler
79
+ - `handleUninstall(args)` (line 453) — uninstall command handler
80
+ - `installWizard(...)` (line 130) — interactive install flow
81
+ - `interactiveMode()` (line 480) — interactive menu
82
+ - `main()` (line 523) — entry point, routes commands
83
+
84
+ ### parseFlags() Function Detail
85
+
86
+ From [cli.js:107-127](bin/cli.js#L107-L127):
87
+ ```javascript
88
+ function parseFlags(args) {
89
+ // Parses: --yes, --force, --agent <name>, --skill <name>, --scope <scope>, --path <path>
90
+ // Returns object with extracted values
91
+ }
92
+ ```
93
+
94
+ This is the best candidate for direct unit testing if exported.
95
+
96
+ ### Subprocess Testing Pattern
97
+
98
+ ```javascript
99
+ const { execSync } = require('node:child_process');
100
+ const { describe, it } = require('node:test');
101
+ const assert = require('node:assert');
102
+
103
+ describe('CLI commands', () => {
104
+ it('--help should exit 0 and show usage', () => {
105
+ const output = execSync('node bin/cli.js --help', { encoding: 'utf-8' });
106
+ assert.ok(output.includes('Usage'));
107
+ });
108
+
109
+ it('--version should show package version', () => {
110
+ const output = execSync('node bin/cli.js --version', { encoding: 'utf-8' });
111
+ const { version } = require('../package.json');
112
+ assert.ok(output.includes(version));
113
+ });
114
+ });
115
+ ```
116
+
117
+ ### Minimal Source Change Option
118
+
119
+ To test `parseFlags()` directly, a small change to `cli.js` may be needed:
120
+
121
+ ```javascript
122
+ // At bottom of cli.js, replace direct main() call:
123
+ if (require.main === module) {
124
+ main();
125
+ }
126
+
127
+ // And export testable functions:
128
+ module.exports = { parseFlags };
129
+ ```
130
+
131
+ This is a minimal, safe change that enables direct testing while preserving CLI behavior. Discuss with reviewer if this is acceptable or if subprocess-only testing is preferred.
132
+
133
+ ### Critical Guardrails
134
+
135
+ - **Never trigger real installs** — only test non-destructive commands (list, help, version, status)
136
+ - **No interactive prompts in tests** — avoid commands that trigger `prompts` library
137
+ - **subprocess tests must have timeout** — prevent hanging tests
138
+ - **No new npm dependencies** — use `node:test`, `node:assert`, `node:child_process`
139
+ - **Minimal changes to `bin/cli.js`** — only `require.main` guard and optional exports if needed
140
+
141
+ ### Project Structure Notes
142
+
143
+ - Files to create: `tests/cli.test.js`
144
+ - Files to potentially modify: `bin/cli.js` (add `require.main` guard + export parseFlags — minimal change)
145
+ - No changes to `lib/` source files
146
+
147
+ ### References
148
+
149
+ - [Source: _bmad-output/planning-artifacts/epics.md#Epic-7] — Story 7.4 definition
150
+ - [Source: _bmad-output/planning-artifacts/architecture.md#Structure-Patterns] — Test directory structure
151
+ - [Source: bin/cli.js] — CLI module (565 lines, 10 functions, entry point)
152
+ - [Source: _bmad-output/implementation-artifacts/7-1-test-infrastructure-setup.md] — Prerequisite story
153
+
154
+ ## Dev Agent Record
155
+
156
+ ### Agent Model Used
157
+
158
+ ### Debug Log References
159
+
160
+ ### Completion Notes List
161
+
162
+ ### File List
@@ -0,0 +1,9 @@
1
+ # Deferred Work
2
+
3
+ ## Deferred from: code review of 17-9-unified-sprint-status-schema (2026-04-03)
4
+
5
+ - sprint-status.yaml still uses old flat `development_status` format — migration is Story 17.23
6
+ - `generated` field in sprint-status.yaml is bare date, not ISO-8601 datetime — will be reformatted by Story 17.15 bootstrap
7
+ - No `schema_version` metadata field — can be added in a future story if schema evolution is needed
8
+ - Concurrent modification has no locking guidance — skills run serially in current architecture
9
+ - `correct-course` referenced in schema Section 4.6 but not in skill integration map — informational reference only
@@ -0,0 +1,200 @@
1
+ # Story 1.1: Add --yes Flag for Non-Interactive Skill Installation
2
+
3
+ Status: review
4
+
5
+ <!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
6
+
7
+ ## Story
8
+
9
+ As a **DevOps engineer**,
10
+ I want to run `npx ma-agents install --yes` to skip all interactive prompts,
11
+ So that I can automate skill installation in CI/CD pipelines without human intervention.
12
+
13
+ ## Acceptance Criteria
14
+
15
+ 1. **Given** the CLI is invoked with `--yes` flag
16
+ **When** the install command executes
17
+ **Then** all interactive prompts (skill selection, agent selection, confirmations) are bypassed with default selections
18
+ **And** the installation completes without requiring stdin input
19
+ **And** exit code 0 is returned on success, non-zero on failure
20
+
21
+ 2. **Given** the CLI is invoked with `--yes --force` flags together
22
+ **When** the install command executes
23
+ **Then** all interactive prompts are skipped with default selections (same as `--yes` alone)
24
+ **And** existing skill files are overwritten without version comparison (the `--force` behavior)
25
+ **Note:** `--yes` controls prompt skipping; `--force` controls file overwrite. They are orthogonal.
26
+
27
+ 3. **Given** the CLI is invoked with `--yes` and a specific agent target (e.g., `--agent claude-code`)
28
+ **When** the install command executes
29
+ **Then** only the specified agent is targeted without prompting for agent selection
30
+ **And** all skills are installed to that agent without skill selection prompts
31
+
32
+ ## Tasks / Subtasks
33
+
34
+ - [x] Task 1: Add `--yes` and `--agent` flag parsing to `parseFlags()` (AC: #1, #2, #3)
35
+ - [x] 1.1: Add `yesFlag` boolean extraction in `parseFlags()` function (search: `function parseFlags`). Same pattern as existing `forceFlag`.
36
+ - [x] 1.2: Add `--agent <name>` extraction in `parseFlags()`. Pattern: same as `--path` — extract next positional arg after `--agent` as the agent name. Return as `agentFlag`.
37
+ - [x] 1.3: Filter `--yes` and `--agent <name>` from positional args (same filter pattern as `--global` and `--force`)
38
+ - [x] 1.4: Validate `--agent` value: if `--agent` is present but no name follows, print `Error: --agent requires an agent name` / `Hint: Run "list" to see available agents` and exit 1
39
+ - [x] 1.5: Add `--yes` and `--agent <name>` to help text (search: `console.log.*Usage`)
40
+ - [x] Task 2: Update `installWizard()` to bypass prompts when `--yes` is active (AC: #1)
41
+ - [x] 2.1: Accept `yesFlag` parameter in `installWizard()` signature (search: `async function installWizard`)
42
+ - [x] 2.2: Skip existing installation check prompt (search: `Existing installation detected`) — default to `'reinstall'` (clean slate, then install all). This avoids the `isUpdate` path which re-triggers skill selection prompts.
43
+ - [x] 2.3: Skip skill selection prompt (search: `install all available skills or choose`) — default to ALL skills. **Important:** when `yesFlag` is true, also skip when `isUpdate` is true — the `isUpdate` OR condition must not re-trigger prompts.
44
+ - [x] 2.4: Skip IDE agent selection prompt (search: `Select AI Coding Assistants`) — default to ALL detected IDE agents. If zero IDE agents detected, set to empty array (not an error — BMAD agents may still be selected).
45
+ - [x] 2.5: Skip BMAD agent selection prompt (search: `Select BMAD Method Agents`) — default to ALL BMAD agents
46
+ - [x] 2.6: After agent selection, if total `selectedAgentIds` is zero, print `Error: No agents detected` / `Hint: Ensure at least one supported IDE is present` and exit 1. This is expected CI/CD behavior — fail fast with a clear message rather than silently succeeding with nothing installed.
47
+ - [x] 2.7: Skip scope selection prompt (search: `Installation scope`) — default to `'project'` scope. Note: if `--global` or `--path` was already provided by the user, those take precedence and this prompt is already skipped by existing logic.
48
+ - [x] 2.8: Skip BMAD install/update prompts (search: `BMAD-METHOD not detected` / `BMAD-METHOD installation detected`) — default to YES. **Caution:** the BMAD tools filter (search: `['claude-code', 'cursor', 'cline', 'gemini', 'antigravity']`) is hardcoded; agents outside this list will not receive BMAD customizations. This is existing behavior, not a new concern, but log a warning if `selectedAgentIds` contains agents not in the filter list.
49
+ - [x] 2.9: Skip final confirmation prompt (search: `Proceed with installation`) — proceed immediately
50
+ - [x] Task 3: Update `handleInstall()` to pass `yesFlag` and `agentFlag` through call chain (AC: #1, #2, #3)
51
+ - [x] 3.1: Extract `yesFlag` and `agentFlag` from parsed flags in `handleInstall()` (search: `async function handleInstall`)
52
+ - [x] 3.2: When `agentFlag` is present, validate it against known agents (call `listAgents()` and check). If invalid, print `Error: Unknown agent '<name>'` / `Hint: Run "list" to see available agents` and exit 1.
53
+ - [x] 3.3: Pass `yesFlag` to `installWizard()` call
54
+ - [x] 3.4: When `agentFlag` is present, pass it as `preselectedAgents: [agentFlag]` to `installWizard()`, which skips agent selection entirely (existing behavior when `preselectedAgents` is non-empty)
55
+ - [x] 3.5: Pass `yes: yesFlag` in options to `installSkill()` calls
56
+ - [x] Task 4: Update `installSkill()` to honor `--yes` for upgrade/downgrade prompts (AC: #1)
57
+ - [x] 4.1: Accept `yes` in options destructuring (search: `async function installSkill`, then the `const { force` destructure)
58
+ - [x] 4.2: When `yes === true` and skill is already installed and `force` is false: skip upgrade/downgrade/same-version decision prompts (search: `What would you like to do?` inside `installSkill`). Default action: `'update'` (install the package version). This does NOT force file overwrites — it simply auto-selects "update" instead of prompting.
59
+ - [x] 4.3: When `yes === true`, pre-set `batchState.globalAction = 'update'` so all remaining skills in the batch also auto-update without prompts (search: `batchState`).
60
+ - [x] 4.4: Guard against accidental prompt execution: if `yes === true` and any `prompts()` call returns `undefined` (which happens when stdin is closed/piped), treat it as a fatal error — print `Error: Unexpected interactive prompt in non-interactive mode` and exit 1. This catches missed bypass paths.
61
+ - [x] Task 5: Ensure proper exit codes (AC: #1)
62
+ - [x] 5.1: Verify `process.exit(0)` on successful non-interactive completion
63
+ - [x] 5.2: Verify `process.exit(1)` on any failure (no skills found, no agents detected, invalid `--agent` name, install errors)
64
+ - [x] 5.3: Ensure no dangling promises or unhandled rejections that could prevent clean exit
65
+ - [x] Task 6: Automated tests (AC: #1, #2, #3)
66
+ - [x] 6.1: Unit test `parseFlags()` with `--yes`, `--yes --force`, `--yes --agent claude-code`, `--yes --agent` (missing name)
67
+ - [x] 6.2: Unit test `installWizard()` with `yesFlag=true`: mock `prompts` and assert it is NEVER called. Verify all defaults are applied correctly.
68
+ - [x] 6.3: Unit test `installSkill()` with `yes=true`: verify prompts are skipped and default action is `'update'`
69
+ - [x] 6.4: Integration test: run `npx ma-agents install --yes` with stdin piped from `/dev/null` and assert exit code 0, no stdin reads, and expected output
70
+ - [x] 6.5: Integration test: run `npx ma-agents install --yes --agent invalid-agent-name` and assert exit code 1 with error message
71
+ - [ ] Task 7: Manual smoke testing
72
+ - [ ] 7.1: `npx ma-agents install --yes` — installs all skills to all detected agents, project scope
73
+ - [ ] 7.2: `npx ma-agents install --yes --force` — same as above but overwrites existing files
74
+ - [ ] 7.3: `npx ma-agents install --yes --agent claude-code` — installs all skills to Claude Code only
75
+ - [ ] 7.4: `npx ma-agents install --yes --global` — installs all skills globally
76
+ - [ ] 7.5: `echo '' | npx ma-agents install --yes` — verify zero stdin dependency
77
+
78
+ ## Dev Notes
79
+
80
+ ### Architecture Compliance
81
+
82
+ - **Module boundaries:** All CLI argument parsing stays in `bin/cli.js`. The `--yes` flag is parsed there and passed as an option to `lib/installer.js`. installer.js NEVER parses CLI args directly — it receives options objects. This is the established pattern with `--force`.
83
+ - **No new dependencies:** The `prompts` library is already used. When `--yes` is active, prompts are simply NOT called — no need for a mock or alternative prompting library.
84
+ - **Code style:** Plain JavaScript, camelCase for variables/functions, no classes. Follow exact patterns from existing `forceFlag` implementation.
85
+
86
+ ### Key Implementation Pattern
87
+
88
+ The `--force` flag provides the exact model to follow:
89
+ 1. **Parsed in `parseFlags()`** (search: `function parseFlags`) — boolean extraction from args array
90
+ 2. **Passed through call chain** — `handleInstall()` → `installWizard()` / `installSkill()`
91
+ 3. **Consumed in functions** — conditionally skip prompts based on flag value
92
+
93
+ The `--yes` flag follows this IDENTICAL pattern but covers a broader scope:
94
+ - `--force`: skips file-overwrite guards (the `if (installed && !force)` gate in `installSkill`)
95
+ - `--yes`: skips ALL interactive prompts (wizard + upgrade/downgrade), selecting sensible defaults
96
+ - `--yes --force`: skips ALL prompts AND forces file overwrites — the two flags are **orthogonal**
97
+
98
+ ### Flag Semantics: `--yes` vs `--force`
99
+
100
+ These flags operate on different axes and MUST NOT be conflated:
101
+
102
+ | Flag | What it controls | Effect in `installSkill()` |
103
+ |------|-----------------|---------------------------|
104
+ | `--yes` | Prompt skipping | When a skill is already installed, auto-selects `'update'` action instead of prompting. Does NOT bypass version comparison — the version check still runs, it just auto-decides. |
105
+ | `--force` | File overwrite | Bypasses the entire `if (installed && !force)` block. Skips version comparison entirely and proceeds directly to file copy/overwrite. |
106
+ | `--yes --force` | Both | `--force` takes precedence in `installSkill()` (the `!force` gate means the prompt block is never entered, so `--yes` has no additional effect there). In `installWizard()`, `--yes` skips wizard prompts while `--force` is passed through for file operations. |
107
+
108
+ ### Default Selections When --yes is Active
109
+
110
+ | Prompt | Default (--yes) | Code anchor (search string) |
111
+ |--------|----------------|---------------------------|
112
+ | Existing installation action | `'reinstall'` (clean slate + install all) | `Existing installation detected` |
113
+ | Skill selection | ALL skills | `install all available skills or choose` |
114
+ | IDE agent selection | ALL detected IDE agents | `Select AI Coding Assistants` |
115
+ | BMAD agent selection | ALL BMAD agents | `Select BMAD Method Agents` |
116
+ | Scope | `'project'` (unless `--global` or `--path`) | `Installation scope` |
117
+ | BMAD install/update | YES | `BMAD-METHOD not detected` / `BMAD-METHOD installation detected` |
118
+ | Final confirmation | YES (proceed) | `Proceed with installation` |
119
+ | Upgrade/downgrade decision | `'update'` (install package version) | `What would you like to do?` inside `installSkill` |
120
+
121
+ **Why `'reinstall'` for existing installation:** The `'update'` action sets `isUpdate = true`, which re-triggers the skill selection prompt (the guard is `selectedSkillIds.length === 0 || isUpdate`). Using `'reinstall'` avoids this interaction — it clears existing installs and proceeds to install all skills cleanly, which is the expected CI/CD behavior.
122
+
123
+ ### Critical Guardrails
124
+
125
+ - **Never add TypeScript, build steps, or new dependencies** [Source: architecture.md#Anti-Patterns]
126
+ - **Use `path.join()` for all file paths** — no string concatenation [Source: architecture.md#Enforcement-Guidelines]
127
+ - **Preserve module boundaries** — CLI parsing in cli.js, install logic in installer.js [Source: architecture.md#Module-Boundaries]
128
+ - **Console output format:** plain text, chalk colors (green=success, yellow=warning, red=error), no emoji [Source: architecture.md#Format-Patterns]
129
+ - **Error format:** `Error: <what>` then ` Hint: <how to fix>` [Source: architecture.md#Format-Patterns]
130
+ - **Defensive prompt guard:** In `--yes` mode, if any `prompts()` call executes and returns `undefined` (which happens when stdin is closed/piped from `/dev/null`), this indicates a missed bypass. Treat as fatal: print error and exit 1. This prevents silent success-exit on incomplete operations.
131
+
132
+ ### Interaction with --agent Flag
133
+
134
+ The `--agent <name>` flag is NOT currently parsed by `parseFlags()`. This story adds it as a first-class flag (Task 1.2) because AC #3 requires it for CI/CD usage.
135
+
136
+ **Parsing pattern:** Same as `--path` — extract the next positional arg after `--agent` as the agent name, splice both from positional args.
137
+
138
+ **Validation:** `handleInstall()` validates the agent name against `listAgents()` before passing to `installWizard()`. Invalid names produce `Error: Unknown agent '<name>'` / `Hint: Run "list" to see available agents` and exit 1.
139
+
140
+ **Interaction with `--yes`:** When `--agent` is present, it is passed as `preselectedAgents`, which already skips agent selection in the existing wizard logic. `--yes` is not required for `--agent` to work, but they combine naturally.
141
+
142
+ ### Batch State Consideration
143
+
144
+ The installer has a `batchState` pattern (search: `batchState` in `installSkill`) for "apply decision to all remaining" during multi-skill installs. When `--yes` is active, pre-set `batchState.globalAction = 'update'` before the skill install loop. This ensures all skills auto-update without prompts, using the existing batch mechanism rather than bypassing prompts individually (cleaner, fewer code paths to maintain).
145
+
146
+ ### BMAD Tools Filter Limitation
147
+
148
+ The BMAD integration code (search: `['claude-code', 'cursor', 'cline', 'gemini', 'antigravity']`) hardcodes a filter for which agents receive BMAD customizations. In `--yes` mode, if `selectedAgentIds` includes agents not in this list, those agents will not receive BMAD customizations. This is existing behavior, not introduced by this story, but in `--yes` mode a warning should be logged: `Warning: Agent '<name>' is not supported for BMAD customizations`.
149
+
150
+ ### Project Structure Notes
151
+
152
+ - Files to modify: `bin/cli.js`, `lib/installer.js`
153
+ - Test files to create: `test/yes-flag.test.js` (or add to existing test file if one exists)
154
+ - No directory structure changes
155
+ - Alignment with unified project structure: confirmed — both files are established modules in the 4-module architecture
156
+
157
+ ### References
158
+
159
+ - [Source: _bmad-output/planning-artifacts/epics.md#Epic-1] — Epic 1 story definition and acceptance criteria
160
+ - [Source: _bmad-output/planning-artifacts/prd.md#FR6] — FR6: Non-interactive CI/CD mode requirement
161
+ - [Source: _bmad-output/planning-artifacts/prd.md#NFR9] — NFR9: Cross-platform identical results
162
+ - [Source: _bmad-output/planning-artifacts/architecture.md#Pipeline-Architecture] — Install pipeline 5 stages
163
+ - [Source: _bmad-output/planning-artifacts/architecture.md#Implementation-Patterns] — Naming, structure, format, process patterns
164
+ - [Source: _bmad-output/planning-artifacts/architecture.md#Module-Boundaries] — cli.js/installer.js/agents.js/bmad.js boundaries
165
+ - [Source: bin/cli.js `function parseFlags`] — Current parseFlags() implementation
166
+ - [Source: bin/cli.js `async function installWizard`] — Current installWizard() with all prompt locations
167
+ - [Source: lib/installer.js `async function installSkill`] — Current installSkill() with force flag pattern
168
+
169
+ ## Dev Agent Record
170
+
171
+ ### Agent Model Used
172
+
173
+ claude-sonnet-4-6
174
+
175
+ ### Debug Log References
176
+
177
+ None — implementation proceeded cleanly without debugging issues.
178
+
179
+ ### Completion Notes List
180
+
181
+ - Added `yesFlag` and `agentFlag` to `parseFlags()` with filtering from positional args; validated `--agent` presence requires a name argument.
182
+ - Updated `installWizard()` with 5th parameter `yesFlag=false`; all 8 interactive prompts are bypassed with sensible defaults when `yesFlag=true`: reinstall (Step 0), all skills (Step 1), all agents (Step 2), project scope (Step 3), BMAD auto-install/update (Step 3.5), skip confirmation (Step 4).
183
+ - Updated `handleInstall()` to extract `yesFlag`/`agentFlag`, validate `agentFlag` against `listAgents()`, and pass both through to wizard and direct-install paths.
184
+ - Updated `installSkill()` to accept `yes` option; pre-sets `batchState.globalAction = 'update'` at the top of the function (before path group iteration) so all skills in the batch auto-update; added `undefined`-guard after each `prompts()` call as defensive check.
185
+ - Added `require.main === module` guard in `cli.js` and exported `parseFlags` to enable unit testing without triggering main().
186
+ - Created `test/yes-flag.test.js` with 9 tests covering all ACs: 5 parseFlags unit tests, 2 integration tests for error exits, 1 batchState pre-set unit test, 1 integration test for full `--yes` install.
187
+ - Updated `package.json` test script to run `node test/yes-flag.test.js`.
188
+ - All 9 automated tests pass. Task 7 (manual smoke tests) left for user to verify.
189
+
190
+ ### File List
191
+
192
+ - bin/cli.js (modified)
193
+ - lib/installer.js (modified)
194
+ - test/yes-flag.test.js (created)
195
+ - package.json (modified — test script)
196
+ - _bmad-output/implementation-artifacts/1-1-ci-cd-yes-flag.md (this file)
197
+
198
+ ## Change Log
199
+
200
+ - 2026-03-16: Implemented `--yes` and `--agent` flags for non-interactive CI/CD mode. Modified `parseFlags()`, `installWizard()`, `handleInstall()` in `bin/cli.js` and `installSkill()` in `lib/installer.js`. Created `test/yes-flag.test.js` with 9 passing automated tests. All ACs #1, #2, #3 satisfied.
@@ -0,0 +1,172 @@
1
+ # Story 10.1: Ensure _bmad-output Is Not Gitignored
2
+
3
+ Status: done
4
+
5
+ <!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
6
+
7
+ ## Story
8
+
9
+ As a **Chief Architect**,
10
+ I want the installer to remove _bmad-output from .gitignore if present and never add it,
11
+ So that planning artifacts are tracked as version-controlled project knowledge.
12
+
13
+ ## Acceptance Criteria
14
+
15
+ 1. **Given** project with _bmad-output in .gitignore, **When** installer runs (install/update), **Then** _bmad-output line removed, **And** the console displays exactly: `_bmad-output is now tracked as project knowledge (not gitignored)`
16
+ 2. **Given** project with no _bmad-output in .gitignore, **When** installer runs, **Then** .gitignore not modified for this concern (no write call is made)
17
+ 3. **Given** no .gitignore exists, **When** installer runs, **Then** no .gitignore created for this purpose and no error thrown
18
+ 4. **Given** installer creates/updates .gitignore for other entries, **When** it writes, **Then** _bmad-output never included in the written content
19
+
20
+ ## Tasks / Subtasks
21
+
22
+ - [ ] Verify chalk is already a project dependency (`package.json`) before using chalk.green(); add import/require at the top of installer.js if not already present (AC: #1)
23
+ - [ ] Create ensureBmadOutputTracked(projectRoot) function in lib/installer.js (AC: #1, #2, #3)
24
+ - [ ] Attempt to read .gitignore with `fs.readFileSync(path.join(projectRoot, '.gitignore'), 'utf-8')` inside a `try/catch`; on `ENOENT` (or any error), return early — do NOT use `existsSync` pre-check followed by `readFileSync` (avoids TOCTOU race condition) (AC: #3)
25
+ - [ ] Split content on `/\r?\n/` to handle both Unix (LF) and Windows (CRLF) line endings — never split on `'\n'` alone (AC: #1, Windows compat)
26
+ - [ ] Trim each line before pattern comparison (handles trailing whitespace) (AC: #1)
27
+ - [ ] Scan for lines matching _bmad-output variations after trimming: `_bmad-output`, `_bmad-output/`, `/_bmad-output`, `/_bmad-output/`
28
+ - [ ] Remove matching lines; reconstruct file content preserving original line endings (join with `'\n'` is acceptable as normalized output)
29
+ - [ ] Write back only if at least one line was removed (AC: #2)
30
+ - [ ] Print `chalk.green('_bmad-output is now tracked as project knowledge (not gitignored)')` when lines are removed (AC: #1)
31
+ - [ ] Integrate ensureBmadOutputTracked() into install pipeline (AC: #1)
32
+ - [ ] Call after skill installation or during manifest update stage
33
+ - [ ] Audit existing codebase for any code that adds _bmad-output to .gitignore (AC: #4)
34
+ - [ ] Check lib/installer.js for any .gitignore write logic that includes _bmad-output
35
+ - [ ] Check lib/bmad.js for any .gitignore write logic that includes _bmad-output
36
+ - [ ] Remove any such logic if found
37
+ - [ ] Remove _bmad-output/ from the ma-agents project's own .gitignore (AC: #4)
38
+
39
+ ### Tests
40
+
41
+ - [ ] Test AC1 — removal and message:
42
+ - [ ] Fixture: .gitignore containing `_bmad-output/` among other entries
43
+ - [ ] Assert: `_bmad-output/` line removed from written content
44
+ - [ ] Assert: `writeFileSync` (or equivalent) WAS called once
45
+ - [ ] Assert: console output contains the exact string `_bmad-output is now tracked as project knowledge (not gitignored)`
46
+ - [ ] Test AC2 — no-op when already clean:
47
+ - [ ] Fixture: .gitignore with no _bmad-output entry
48
+ - [ ] Assert: `writeFileSync` (or equivalent) was NOT called (use sinon spy or jest mock)
49
+ - [ ] Test AC3 — missing .gitignore:
50
+ - [ ] Fixture: project directory with no .gitignore file
51
+ - [ ] Assert: no error thrown, no .gitignore created
52
+ - [ ] Test AC4 — installer write paths never include _bmad-output:
53
+ - [ ] Spy on all .gitignore write call sites in lib/installer.js and lib/bmad.js
54
+ - [ ] Assert: none of the written content strings include `_bmad-output`
55
+ - [ ] This test acts as a regression guard — future code changes that reintroduce the pattern will fail this test
56
+ - [ ] Test — Windows CRLF compatibility:
57
+ - [ ] Fixture: .gitignore with `_bmad-output/\r\n` (Windows line endings)
58
+ - [ ] Assert: line is correctly detected and removed (match does not fail due to `\r`)
59
+ - [ ] Test — idempotency:
60
+ - [ ] Run ensureBmadOutputTracked() on a project where _bmad-output was already removed in a prior run
61
+ - [ ] Assert: `writeFileSync` is NOT called on the second run (no spurious file churn)
62
+ - [ ] Test — own .gitignore cleanup:
63
+ - [ ] Assert: the ma-agents project's own .gitignore does not contain `_bmad-output` (grep assertion on the file)
64
+
65
+ ## Dev Notes
66
+
67
+ ### Architecture Compliance
68
+ - FR58/FR59: _bmad-output is project knowledge and must be version-controlled.
69
+ - Use `fs.readFileSync(path, 'utf-8')` — always pass the `'utf-8'` encoding option. Without it, `readFileSync` returns a Buffer; calling `.split()` on a Buffer throws a TypeError in some Node versions and produces unexpected behavior in others.
70
+ - Console output uses `chalk.green()` per established console output patterns in the codebase. Verify chalk import style matches the project's module system (CJS `require` vs ESM `import`) — chalk v5+ is ESM-only.
71
+ - `path.join()` for all file path construction.
72
+
73
+ ### TOCTOU Fix — CRITICAL
74
+ Do NOT use the pattern:
75
+ ```js
76
+ if (fs.existsSync(filePath)) {
77
+ const content = fs.readFileSync(filePath, 'utf-8');
78
+ ...
79
+ }
80
+ ```
81
+ The file can be deleted between `existsSync` and `readFileSync`. Use instead:
82
+ ```js
83
+ try {
84
+ const content = fs.readFileSync(filePath, 'utf-8');
85
+ // proceed
86
+ } catch (err) {
87
+ if (err.code === 'ENOENT') return; // file doesn't exist — no-op
88
+ throw err; // unexpected error — re-throw
89
+ }
90
+ ```
91
+
92
+ ### Windows Line Ending Fix — CRITICAL
93
+ Do NOT split on `'\n'` alone. Use:
94
+ ```js
95
+ const lines = content.split(/\r?\n/);
96
+ ```
97
+ Then trim each line before comparison:
98
+ ```js
99
+ const trimmed = line.trim();
100
+ if (BMAD_OUTPUT_PATTERNS.includes(trimmed)) { ... }
101
+ ```
102
+ This handles both `_bmad-output\r` (Windows CRLF) and `_bmad-output` (Unix LF).
103
+
104
+ ### Pattern List
105
+ ```js
106
+ const BMAD_OUTPUT_PATTERNS = ['_bmad-output', '_bmad-output/', '/_bmad-output', '/_bmad-output/'];
107
+ ```
108
+ Note: commented-out lines (e.g., `# _bmad-output`) and glob variants (e.g., `_bmad-output/**`) are out of scope for this story. The four listed patterns cover the common cases written by IDEs and developers.
109
+
110
+ ### Write Guard (AC2)
111
+ Only write back if lines were actually removed:
112
+ ```js
113
+ const filtered = lines.filter(line => !BMAD_OUTPUT_PATTERNS.includes(line.trim()));
114
+ if (filtered.length === lines.length) return; // nothing removed — do not write
115
+ fs.writeFileSync(filePath, filtered.join('\n'), 'utf-8');
116
+ ```
117
+
118
+ ### Exact Message (AC1)
119
+ The chalk output must produce exactly this text (the chalk color wrapping is fine, but the string content must match):
120
+ ```
121
+ _bmad-output is now tracked as project knowledge (not gitignored)
122
+ ```
123
+ Test assertions must verify this exact string, not just "something was logged."
124
+
125
+ ### Critical Guardrails
126
+ - Do NOT use `existsSync` before `readFileSync` — use try/catch with `ENOENT` check
127
+ - Do NOT use `readFileSync` without `'utf-8'` encoding
128
+ - Do NOT split on `'\n'` alone — always use `/\r?\n/`
129
+ - Do NOT create a .gitignore file if one does not exist
130
+ - Do NOT remove other entries from .gitignore — only _bmad-output variations
131
+ - Do NOT skip the AC2 write-guard test — assert the write function was NOT called
132
+
133
+ ### Project Structure Notes
134
+ - Modify: `lib/installer.js` — add ensureBmadOutputTracked() function and call it in install pipeline
135
+ - Modify: `.gitignore` (project root) — remove `_bmad-output/` entry
136
+ - Audit: `lib/bmad.js` — check for any .gitignore write logic referencing _bmad-output
137
+
138
+ ### References
139
+ - [Source: lib/installer.js — install pipeline for integration point]
140
+ - [Source: .gitignore — current _bmad-output/ entry to remove]
141
+ - [Source: lib/bmad.js — audit for .gitignore write logic]
142
+
143
+ ## Dev Agent Record
144
+
145
+ ### Agent Model Used
146
+ claude-sonnet-4-6
147
+
148
+ ### Debug Log References
149
+ None — implementation was straightforward with no debugging required.
150
+
151
+ ### Completion Notes List
152
+ - ✅ Added `BMAD_OUTPUT_PATTERNS` constant and `ensureBmadOutputTracked(projectRoot)` function to `lib/installer.js` after `writeManifest()`
153
+ - ✅ Uses try/catch with ENOENT check (no TOCTOU race), splits on `/\r?\n/`, trims lines before comparison, writes back only if lines removed
154
+ - ✅ Called `ensureBmadOutputTracked(installPath)` immediately after `writeManifest(installPath, manifest)` in `installSkill()`
155
+ - ✅ Exported `ensureBmadOutputTracked` in `module.exports`
156
+ - ✅ Removed commented `_bmad-output/` line from project `.gitignore` (line 16)
157
+ - ✅ Created `test/bmad-output-policy.test.js` with 6 Story 10-1 tests (AC1–AC3, CRLF, idempotency, own .gitignore) plus 5 relocated Story 10-2 README tests
158
+ - ✅ Removed Story 10-2 test block from `test/yes-flag.test.js`
159
+ - ✅ Strengthened discoverable assertion in relocated test (counts H2s before section, asserts ≤ 3)
160
+ - ✅ All 11 tests in `test/bmad-output-policy.test.js` pass
161
+
162
+ ### File List
163
+ - `lib/installer.js` (modified — added `ensureBmadOutputTracked()`, call in `installSkill()`, exported)
164
+ - `.gitignore` (modified — removed commented `_bmad-output/` line)
165
+ - `test/bmad-output-policy.test.js` (created — 11 tests for Stories 10-1 and 10-2)
166
+ - `test/yes-flag.test.js` (modified — removed Story 10-2 test block)
167
+ - `_bmad-output/implementation-artifacts/10-1-ensure-bmad-output-not-gitignored.md` (modified — status → done)
168
+ - `_bmad-output/implementation-artifacts/10-2-document-bmad-output-policy.md` (modified — status → done)
169
+ - `_bmad-output/implementation-artifacts/sprint-status.yaml` (modified — 10-2 → done)
170
+
171
+ ### Change Log
172
+ - 2026-03-18: Implemented Story 10-1 — ensureBmadOutputTracked() in lib/installer.js; also completed Story 10-2 closure (test relocation, status updates)
@@ -0,0 +1,102 @@
1
+ # Story 10.2: Document _bmad-output Policy in README and Installation Guidance
2
+
3
+ Status: done
4
+
5
+ depends-on: 10-1-ensure-bmad-output-not-gitignored
6
+
7
+ <!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
8
+
9
+ ## Story
10
+
11
+ As a **Chief Architect**,
12
+ I want the _bmad-output folder policy documented in the README and installation guidance,
13
+ So that developers understand why _bmad-output is version-controlled and do not add it back to .gitignore.
14
+
15
+ ## Acceptance Criteria
16
+
17
+ 1. **Given** the project README, **When** a developer reads it, **Then** it contains a dedicated section explaining that `_bmad-output/` is intentionally tracked in version control as project knowledge, **And** the section explains what the folder contains (planning artifacts: PRDs, architecture, epics, stories, sprint plans), **And** the section explains why it is tracked (team alignment, AI context continuity, project history).
18
+ 2. **Given** the installation or getting-started documentation, **When** a developer sets up the tool, **Then** the guidance explicitly states that `_bmad-output/` must not be added to `.gitignore` and explains that the installer will remove it if found.
19
+ 3. **Given** the README section on `_bmad-output`, **When** a developer's IDE or tooling suggests adding it to `.gitignore`, **Then** the documentation gives them the language to confidently decline (i.e., the rationale is clear and actionable).
20
+
21
+ ## Tasks / Subtasks
22
+
23
+ - [x] Add `_bmad-output/` policy section to README.md (AC: #1, #3)
24
+ - [x] Place section under an appropriate heading — after the installation section or as part of a "Project Structure" or "How It Works" section
25
+ - [x] Section heading: `## Project Knowledge: _bmad-output/`
26
+ - [x] Content must include:
27
+ - [x] What the folder is: planning artifacts generated by BMAD agents (PRDs, architecture docs, epics, stories, sprint status)
28
+ - [x] Why it is tracked: enables team alignment on AI-generated plans, provides context continuity for AI agents across sessions, preserves decision history
29
+ - [x] Explicit statement: "Do not add `_bmad-output/` to your `.gitignore`"
30
+ - [x] Note: the installer automatically removes `_bmad-output/` from `.gitignore` if it finds it there
31
+ - [x] Add `_bmad-output/` guidance to installation documentation (AC: #2)
32
+ - [x] If a dedicated installation guide exists (e.g., INSTALL.md, docs/getting-started.md, or equivalent): add a note in the post-install or project setup section
33
+ - [x] If no separate installation doc exists: add the note to the README installation section
34
+ - [x] Content: "`_bmad-output/` is tracked by the installer as version-controlled project knowledge. Do not add it to `.gitignore`. If it is present in `.gitignore`, the installer will remove it automatically."
35
+ - [x] Verify the section is discoverable (AC: #3)
36
+ - [x] Confirm the `_bmad-output/` section is reachable from the README table of contents (if one exists) or appears within the first two major sections of the document
37
+ - [x] Test — README contains required content (AC: #1)
38
+ - [x] Assert README.md contains the exact heading `## Project Knowledge: _bmad-output/` (or equivalent agreed heading)
39
+ - [x] Assert README.md contains the phrase "Do not add `_bmad-output/` to your `.gitignore`"
40
+ - [x] Assert README.md mentions at least one reason for tracking (e.g., "team alignment", "AI context", "planning artifacts")
41
+ - [x] Test — installation guidance contains the policy note (AC: #2)
42
+ - [x] Assert the relevant installation doc contains the phrase "`_bmad-output/`" in a policy/setup context
43
+ - [x] Assert the installer behavior (auto-removal from .gitignore) is mentioned
44
+
45
+ ## Dev Notes
46
+
47
+ ### Scope
48
+ This is a documentation-only story. No code changes to `lib/installer.js`, `lib/agents.js`, or any other source file. The deliverables are markdown edits to `README.md` and optionally one installation documentation file.
49
+
50
+ ### Rationale to Include
51
+ The documentation must give developers enough context to push back when their IDE suggests adding `_bmad-output/` to `.gitignore`. The key points:
52
+ 1. **What**: AI-generated planning artifacts (PRDs, architecture, epics, stories, sprint plans)
53
+ 2. **Why commit**: Team members need to see the same plans; AI agents need prior context across sessions; the history of decisions is valuable
54
+ 3. **Installer behavior**: The tool actively removes this entry from `.gitignore` — documenting this prevents confusion when developers notice their `.gitignore` was modified
55
+
56
+ ### Section Placement
57
+ Prefer placing the section near the existing description of how the tool works — not buried in a troubleshooting FAQ. Developers should encounter it during normal onboarding, not only when something goes wrong.
58
+
59
+ ### Test Strategy
60
+ Documentation tests can be implemented as simple grep/regex assertions in the test suite:
61
+ ```js
62
+ const readme = fs.readFileSync('README.md', 'utf-8');
63
+ assert(readme.includes('_bmad-output'));
64
+ assert(readme.includes('Do not add'));
65
+ ```
66
+ These serve as regression guards — if someone accidentally removes the section, CI catches it.
67
+
68
+ ### Critical Guardrails
69
+ - Do NOT modify any source code files in this story — documentation only
70
+ - Do NOT remove existing README sections — only add or extend
71
+ - The exact phrase "Do not add `_bmad-output/` to your `.gitignore`" (or semantically equivalent) must appear in the written content
72
+
73
+ ### Project Structure Notes
74
+ - Modify: `README.md` — add `_bmad-output/` policy section
75
+ - Modify (if exists): installation guide or getting-started doc — add policy note
76
+ - No source code changes
77
+
78
+ ### References
79
+ - [FR59: _bmad-output policy documented in README and installation guidance]
80
+ - [FR58: _bmad-output not added to .gitignore by installer — covered in Story 10.1]
81
+ - [Story 10.1 — ensureBmadOutputTracked() behavior that this story documents]
82
+
83
+ ## Dev Agent Record
84
+
85
+ ### Agent Model Used
86
+ claude-sonnet-4-6
87
+
88
+ ### Debug Log References
89
+ None — documentation-only story.
90
+
91
+ ### Completion Notes List
92
+ - ✅ Added `## Project Knowledge: _bmad-output/` section to README.md placed between "How It Works" and "Supported Agents" sections (discoverable early in document)
93
+ - ✅ Section covers: what the folder contains, why it's tracked (3 reasons), explicit do-not-gitignore directive, installer behaviour note
94
+ - ✅ No separate installation doc exists; policy guidance is in the README installation context (AC #2 satisfied)
95
+ - ✅ 5 regression tests added to `test/yes-flag.test.js` — all pass
96
+
97
+ ### File List
98
+ - `README.md` (modified — added `## Project Knowledge: _bmad-output/` section)
99
+ - `test/yes-flag.test.js` (modified — added Story 10.2 documentation regression tests)
100
+
101
+ ### Change Log
102
+ - 2026-03-18: Implemented Story 10.2 — documented _bmad-output/ policy in README.md with regression tests