ma-agents 2.22.2 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. package/.opencode/skills/.ma-agents.json +99 -99
  2. package/lib/bmad-cache/bmb/.claude-plugin/marketplace.json +22 -0
  3. package/lib/bmad-cache/bmb/.markdownlint-cli2.yaml +1 -0
  4. package/lib/bmad-cache/bmb/_git_preserved/index +0 -0
  5. package/lib/bmad-cache/bmb/_git_preserved/logs/HEAD +1 -1
  6. package/lib/bmad-cache/bmb/_git_preserved/logs/refs/heads/main +1 -1
  7. package/lib/bmad-cache/bmb/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
  8. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-0de89e0854d5b2b3b3b0c1ee56eee73a739f15e7.idx +0 -0
  9. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-0de89e0854d5b2b3b3b0c1ee56eee73a739f15e7.pack +0 -0
  10. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-0de89e0854d5b2b3b3b0c1ee56eee73a739f15e7.rev +0 -0
  11. package/lib/bmad-cache/bmb/_git_preserved/packed-refs +1 -1
  12. package/lib/bmad-cache/bmb/_git_preserved/refs/heads/main +1 -1
  13. package/lib/bmad-cache/bmb/_git_preserved/shallow +1 -1
  14. package/lib/bmad-cache/bmb/package-lock.json +2 -2
  15. package/lib/bmad-cache/bmb/package.json +7 -4
  16. package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/generate-html-report.py +534 -0
  17. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/prepass-execution-deps.py +4 -35
  18. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/prepass-prompt-metrics.py +2 -75
  19. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/prepass-structure-capabilities.py +3 -194
  20. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/scan-path-standards.py +104 -18
  21. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/assets/module-help.csv +6 -0
  22. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/assets/module.yaml +20 -0
  23. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/cleanup-legacy.py +259 -0
  24. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/merge-config.py +408 -0
  25. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/merge-help-csv.py +220 -0
  26. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/tests/test-cleanup-legacy.py +429 -0
  27. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/tests/test-merge-config.py +644 -0
  28. package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/tests/test-merge-help-csv.py +237 -0
  29. package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-html-report.py +539 -0
  30. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/prepass-execution-deps.py +5 -30
  31. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/prepass-workflow-integrity.py +0 -5
  32. package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/scan-path-standards.py +103 -16
  33. package/lib/bmad-cache/bmb/skills/module-help.csv +6 -0
  34. package/lib/bmad-cache/bmb/skills/module.yaml +20 -0
  35. package/lib/bmad-cache/bmb/tools/validate-doc-links.cjs +407 -0
  36. package/lib/bmad-cache/bmb/tools/validate-file-refs.mjs +1 -1
  37. package/lib/bmad-cache/cache-manifest.json +16 -10
  38. package/lib/bmad-cache/cis/.claude-plugin/marketplace.json +33 -0
  39. package/lib/bmad-cache/cis/_git_preserved/index +0 -0
  40. package/lib/bmad-cache/cis/_git_preserved/logs/HEAD +1 -1
  41. package/lib/bmad-cache/cis/_git_preserved/logs/refs/heads/main +1 -1
  42. package/lib/bmad-cache/cis/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
  43. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-9d60aae6b09bbea0d0c5e79fdbe96e8f66de84e6.idx +0 -0
  44. package/lib/bmad-cache/cis/_git_preserved/objects/pack/{pack-157d7eb8d527233a8607d926fc74ebf87f2ae0d3.pack → pack-9d60aae6b09bbea0d0c5e79fdbe96e8f66de84e6.pack} +0 -0
  45. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-9d60aae6b09bbea0d0c5e79fdbe96e8f66de84e6.rev +0 -0
  46. package/lib/bmad-cache/cis/_git_preserved/packed-refs +1 -1
  47. package/lib/bmad-cache/cis/_git_preserved/refs/heads/main +1 -1
  48. package/lib/bmad-cache/cis/_git_preserved/shallow +1 -1
  49. package/lib/bmad-cache/cis/package-lock.json +17015 -0
  50. package/lib/bmad-cache/cis/package.json +3 -4
  51. package/lib/bmad-cache/cis/src/module-help.csv +6 -6
  52. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-brainstorming-coach/bmad-skill-manifest.yaml +11 -0
  53. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-creative-problem-solver/bmad-skill-manifest.yaml +11 -0
  54. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-design-thinking-coach/bmad-skill-manifest.yaml +11 -0
  55. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-innovation-strategist/bmad-skill-manifest.yaml +11 -0
  56. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-presentation-master/bmad-skill-manifest.yaml +11 -0
  57. package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-storyteller/bmad-skill-manifest.yaml +11 -0
  58. package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +58 -0
  59. package/lib/bmad-cache/gds/_git_preserved/index +0 -0
  60. package/lib/bmad-cache/gds/_git_preserved/logs/HEAD +1 -1
  61. package/lib/bmad-cache/gds/_git_preserved/logs/refs/heads/main +1 -1
  62. package/lib/bmad-cache/gds/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
  63. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-8099a88fca0ad946a573316a00887a2921ca1712.idx +0 -0
  64. package/lib/bmad-cache/gds/_git_preserved/objects/pack/{pack-44faafb9245b4ca17ad81bd6c9e6fc52fb5915a1.pack → pack-8099a88fca0ad946a573316a00887a2921ca1712.pack} +0 -0
  65. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-8099a88fca0ad946a573316a00887a2921ca1712.rev +0 -0
  66. package/lib/bmad-cache/gds/_git_preserved/packed-refs +1 -1
  67. package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +1 -1
  68. package/lib/bmad-cache/gds/_git_preserved/shallow +1 -1
  69. package/lib/bmad-cache/gds/package.json +1 -0
  70. package/lib/bmad-cache/gds/src/module-help.csv +35 -35
  71. package/lib/bmad-cache/tea/.claude-plugin/marketplace.json +33 -0
  72. package/lib/bmad-cache/tea/CHANGELOG.md +2 -14
  73. package/lib/bmad-cache/tea/README.md +31 -18
  74. package/lib/bmad-cache/tea/_git_preserved/index +0 -0
  75. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-d243f64f83b36190434d68872a69a40870c53030.idx +0 -0
  76. package/lib/bmad-cache/tea/_git_preserved/objects/pack/{pack-96ec1ce3a9ef4c891e00e060795b4434ba8f7163.pack → pack-d243f64f83b36190434d68872a69a40870c53030.pack} +0 -0
  77. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-d243f64f83b36190434d68872a69a40870c53030.rev +0 -0
  78. package/lib/bmad-cache/tea/_git_preserved/packed-refs +1 -1
  79. package/lib/bmad-cache/tea/_git_preserved/refs/heads/main +1 -1
  80. package/lib/bmad-cache/tea/_git_preserved/refs/tags/v1.7.3 +1 -0
  81. package/lib/bmad-cache/tea/_git_preserved/shallow +1 -1
  82. package/lib/bmad-cache/tea/docs/explanation/knowledge-base-system.md +5 -5
  83. package/lib/bmad-cache/tea/docs/explanation/step-file-architecture.md +2 -2
  84. package/lib/bmad-cache/tea/docs/explanation/tea-overview.md +3 -3
  85. package/lib/bmad-cache/tea/docs/glossary/index.md +1 -1
  86. package/lib/bmad-cache/tea/docs/how-to/customization/extend-tea-with-custom-workflows.md +73 -0
  87. package/lib/bmad-cache/tea/docs/how-to/workflows/teach-me-testing.md +7 -7
  88. package/lib/bmad-cache/tea/docs/index.md +2 -1
  89. package/lib/bmad-cache/tea/docs/reference/commands.md +4 -1
  90. package/lib/bmad-cache/tea/docs/reference/configuration.md +37 -15
  91. package/lib/bmad-cache/tea/docs/reference/knowledge-base.md +75 -73
  92. package/lib/bmad-cache/tea/docs/reference/troubleshooting.md +32 -19
  93. package/lib/bmad-cache/tea/docs/tutorials/learn-testing-tea-academy.md +3 -3
  94. package/lib/bmad-cache/tea/package-lock.json +2 -2
  95. package/lib/bmad-cache/tea/package.json +2 -1
  96. package/lib/bmad-cache/tea/src/agents/bmad-tea/SKILL.md +70 -0
  97. package/lib/bmad-cache/tea/src/agents/bmad-tea/bmad-skill-manifest.yaml +14 -0
  98. package/lib/bmad-cache/tea/src/module-help.csv +10 -10
  99. package/lib/bmad-cache/tea/src/module.yaml +8 -8
  100. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/checklist.md +1 -1
  101. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/curriculum.yaml +1 -1
  102. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/session-content-map.yaml +26 -14
  103. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/tea-resources-index.yaml +108 -73
  104. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/instructions.md +2 -2
  105. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-03-session-menu.md +1 -1
  106. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-01.md +3 -3
  107. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-07.md +14 -6
  108. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-05-completion.md +3 -3
  109. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/templates/certificate-template.md +1 -1
  110. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/workflow-plan-teach-me-testing.md +8 -8
  111. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/atdd-checklist-template.md +1 -1
  112. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-01-preflight-and-context.md +3 -3
  113. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04a-subagent-api-failing.md +9 -1
  114. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-01-preflight-and-context.md +1 -1
  115. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-03b-subagent-e2e.md +2 -2
  116. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-02-generate-pipeline.md +6 -0
  117. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-03-configure-quality-gates.md +6 -1
  118. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-03-scaffold-framework.md +3 -2
  119. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-01-load-context.md +1 -1
  120. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-02-load-context.md +1 -1
  121. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-01-load-context.md +1 -1
  122. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/test-review-template.md +11 -11
  123. package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-01-load-context.md +1 -1
  124. package/lib/bmad-cache/tea/test/test-installation-components.js +85 -21
  125. package/lib/bmad-cache/tea/test/test-knowledge-base.js +1 -1
  126. package/lib/bmad-cache/tea/tools/validate-agent-schema.js +105 -5
  127. package/lib/bmad-cache/wds/.claude-plugin/marketplace.json +35 -0
  128. package/lib/bmad-cache/wds/.markdownlint-cli2.yaml +38 -0
  129. package/lib/bmad-cache/wds/.nvmrc +1 -0
  130. package/lib/bmad-cache/wds/.prettierignore +9 -0
  131. package/lib/bmad-cache/wds/LICENSE +27 -0
  132. package/lib/bmad-cache/wds/README.md +126 -0
  133. package/lib/bmad-cache/wds/_git_preserved/HEAD +1 -0
  134. package/lib/bmad-cache/wds/_git_preserved/config +13 -0
  135. package/lib/bmad-cache/wds/_git_preserved/description +1 -0
  136. package/lib/bmad-cache/wds/_git_preserved/hooks/applypatch-msg.sample +15 -0
  137. package/lib/bmad-cache/wds/_git_preserved/hooks/commit-msg.sample +24 -0
  138. package/lib/bmad-cache/wds/_git_preserved/hooks/fsmonitor-watchman.sample +174 -0
  139. package/lib/bmad-cache/wds/_git_preserved/hooks/post-update.sample +8 -0
  140. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-applypatch.sample +14 -0
  141. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-commit.sample +49 -0
  142. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-merge-commit.sample +13 -0
  143. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-push.sample +53 -0
  144. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-rebase.sample +169 -0
  145. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-receive.sample +24 -0
  146. package/lib/bmad-cache/wds/_git_preserved/hooks/prepare-commit-msg.sample +42 -0
  147. package/lib/bmad-cache/wds/_git_preserved/hooks/push-to-checkout.sample +78 -0
  148. package/lib/bmad-cache/wds/_git_preserved/hooks/sendemail-validate.sample +77 -0
  149. package/lib/bmad-cache/wds/_git_preserved/hooks/update.sample +128 -0
  150. package/lib/bmad-cache/wds/_git_preserved/index +0 -0
  151. package/lib/bmad-cache/wds/_git_preserved/info/exclude +6 -0
  152. package/lib/bmad-cache/wds/_git_preserved/logs/HEAD +1 -0
  153. package/lib/bmad-cache/wds/_git_preserved/logs/refs/heads/main +1 -0
  154. package/lib/bmad-cache/wds/_git_preserved/logs/refs/remotes/origin/HEAD +1 -0
  155. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-92d32f26e3a97a0786dcea5cb2c24bf90384521c.idx +0 -0
  156. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-92d32f26e3a97a0786dcea5cb2c24bf90384521c.pack +0 -0
  157. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-92d32f26e3a97a0786dcea5cb2c24bf90384521c.rev +0 -0
  158. package/lib/bmad-cache/wds/_git_preserved/packed-refs +2 -0
  159. package/lib/bmad-cache/wds/_git_preserved/refs/heads/main +1 -0
  160. package/lib/bmad-cache/wds/_git_preserved/refs/remotes/origin/HEAD +1 -0
  161. package/lib/bmad-cache/wds/_git_preserved/shallow +1 -0
  162. package/lib/bmad-cache/wds/eslint.config.mjs +152 -0
  163. package/lib/bmad-cache/wds/package.json +82 -0
  164. package/lib/bmad-cache/wds/prettier.config.mjs +32 -0
  165. package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/bmad-skill-manifest.yaml +12 -0
  166. package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/bmad-skill-manifest.yaml +12 -0
  167. package/lib/bmad-cache/wds/src/module-help.csv +18 -0
  168. package/lib/bmad-cache/wds/src/module.yaml +148 -0
  169. package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/bmad-skill-manifest.yaml +1 -0
  170. package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/templates/platform-requirements.template.yaml +69 -0
  171. package/lib/bmad-cache/wds/src/workflows/wds-2-trigger-mapping/bmad-skill-manifest.yaml +1 -0
  172. package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/bmad-skill-manifest.yaml +1 -0
  173. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/bmad-skill-manifest.yaml +1 -0
  174. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/design-delivery.template.yaml +104 -0
  175. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/test-scenario.template.yaml +192 -0
  176. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/bmad-skill-manifest.yaml +1 -0
  177. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.css +164 -0
  178. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.html +18 -0
  179. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.js +430 -0
  180. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/demo-data-template.json +63 -0
  181. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/page-template.html +465 -0
  182. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/work-file-template.yaml +264 -0
  183. package/lib/bmad-cache/wds/src/workflows/wds-6-asset-generation/bmad-skill-manifest.yaml +1 -0
  184. package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/bmad-skill-manifest.yaml +1 -0
  185. package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/templates/catalog.template.html +363 -0
  186. package/lib/bmad-cache/wds/src/workflows/wds-8-product-evolution/bmad-skill-manifest.yaml +1 -0
  187. package/lib/bmad-customize/bmm-architect.customize.yaml +6 -0
  188. package/lib/bmad-customize/bmm-bmad-master.customize.yaml +6 -0
  189. package/lib/bmad-customize/bmm-dev.customize.yaml +6 -0
  190. package/lib/bmad-customize/bmm-pm.customize.yaml +6 -0
  191. package/lib/bmad-customize/bmm-qa.customize.yaml +6 -0
  192. package/lib/bmad-customize/bmm-sm.customize.yaml +6 -0
  193. package/lib/bmad-customize/bmm-tech-writer.customize.yaml +6 -0
  194. package/lib/bmad-customize/bmm-ux-designer.customize.yaml +6 -0
  195. package/lib/bmad-extension/module-help.csv +37 -7
  196. package/lib/bmad-extension/module.yaml +4 -2
  197. package/lib/bmad-extension/skills/add-sprint/.gitkeep +0 -0
  198. package/lib/bmad-extension/skills/add-sprint/SKILL.md +121 -0
  199. package/lib/bmad-extension/skills/add-sprint/bmad-skill-manifest.yaml +3 -0
  200. package/lib/bmad-extension/skills/add-to-sprint/.gitkeep +0 -0
  201. package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +215 -0
  202. package/lib/bmad-extension/skills/add-to-sprint/bmad-skill-manifest.yaml +3 -0
  203. package/lib/bmad-extension/skills/bmad-ma-agent-cyber/.gitkeep +0 -0
  204. package/lib/bmad-extension/skills/bmad-ma-agent-cyber/SKILL.md +49 -0
  205. package/lib/bmad-extension/skills/bmad-ma-agent-cyber/bmad-skill-manifest.yaml +11 -0
  206. package/lib/bmad-extension/skills/bmad-ma-agent-devops/.gitkeep +0 -0
  207. package/lib/bmad-extension/skills/bmad-ma-agent-devops/SKILL.md +49 -0
  208. package/lib/bmad-extension/skills/bmad-ma-agent-devops/bmad-skill-manifest.yaml +11 -0
  209. package/lib/bmad-extension/skills/bmad-ma-agent-mil498/.gitkeep +0 -0
  210. package/lib/bmad-extension/skills/bmad-ma-agent-mil498/SKILL.md +53 -0
  211. package/lib/bmad-extension/skills/bmad-ma-agent-mil498/bmad-skill-manifest.yaml +11 -0
  212. package/lib/bmad-extension/skills/bmad-ma-agent-sre/.gitkeep +0 -0
  213. package/lib/bmad-extension/skills/bmad-ma-agent-sre/SKILL.md +49 -0
  214. package/lib/bmad-extension/skills/bmad-ma-agent-sre/bmad-skill-manifest.yaml +11 -0
  215. package/lib/bmad-extension/skills/create-bug-story/.gitkeep +0 -0
  216. package/lib/bmad-extension/skills/create-bug-story/SKILL.md +195 -0
  217. package/lib/bmad-extension/skills/create-bug-story/bmad-skill-manifest.yaml +3 -0
  218. package/lib/bmad-extension/skills/cyber-generate-certs/.gitkeep +0 -0
  219. package/lib/bmad-extension/skills/cyber-generate-certs/SKILL.md +27 -0
  220. package/lib/bmad-extension/skills/cyber-generate-certs/bmad-skill-manifest.yaml +3 -0
  221. package/lib/bmad-extension/skills/cyber-immunity-estimation/.gitkeep +0 -0
  222. package/lib/bmad-extension/skills/cyber-immunity-estimation/SKILL.md +29 -0
  223. package/lib/bmad-extension/skills/cyber-immunity-estimation/bmad-skill-manifest.yaml +3 -0
  224. package/lib/bmad-extension/skills/cyber-security-audit/.gitkeep +0 -0
  225. package/lib/bmad-extension/skills/cyber-security-audit/SKILL.md +27 -0
  226. package/lib/bmad-extension/skills/cyber-security-audit/bmad-skill-manifest.yaml +3 -0
  227. package/lib/bmad-extension/skills/cyber-vault-secrets/.gitkeep +0 -0
  228. package/lib/bmad-extension/skills/cyber-vault-secrets/SKILL.md +28 -0
  229. package/lib/bmad-extension/skills/cyber-vault-secrets/bmad-skill-manifest.yaml +3 -0
  230. package/lib/bmad-extension/skills/cyber-verify-docker-users/.gitkeep +0 -0
  231. package/lib/bmad-extension/skills/cyber-verify-docker-users/SKILL.md +23 -0
  232. package/lib/bmad-extension/skills/cyber-verify-docker-users/bmad-skill-manifest.yaml +3 -0
  233. package/lib/bmad-extension/skills/cyber-verify-image-signature/.gitkeep +0 -0
  234. package/lib/bmad-extension/skills/cyber-verify-image-signature/SKILL.md +22 -0
  235. package/lib/bmad-extension/skills/cyber-verify-image-signature/bmad-skill-manifest.yaml +3 -0
  236. package/lib/bmad-extension/skills/cyber-vulnerability-scan/.gitkeep +0 -0
  237. package/lib/bmad-extension/skills/cyber-vulnerability-scan/SKILL.md +28 -0
  238. package/lib/bmad-extension/skills/cyber-vulnerability-scan/bmad-skill-manifest.yaml +3 -0
  239. package/lib/bmad-extension/skills/devops-configure-infrastructure/.gitkeep +0 -0
  240. package/lib/bmad-extension/skills/devops-configure-infrastructure/SKILL.md +27 -0
  241. package/lib/bmad-extension/skills/devops-configure-infrastructure/bmad-skill-manifest.yaml +3 -0
  242. package/lib/bmad-extension/skills/devops-disconnected-deployment/.gitkeep +0 -0
  243. package/lib/bmad-extension/skills/devops-disconnected-deployment/SKILL.md +27 -0
  244. package/lib/bmad-extension/skills/devops-disconnected-deployment/bmad-skill-manifest.yaml +3 -0
  245. package/lib/bmad-extension/skills/devops-docker-compose-setup/.gitkeep +0 -0
  246. package/lib/bmad-extension/skills/devops-docker-compose-setup/SKILL.md +26 -0
  247. package/lib/bmad-extension/skills/devops-docker-compose-setup/bmad-skill-manifest.yaml +3 -0
  248. package/lib/bmad-extension/skills/devops-manage-helm/.gitkeep +0 -0
  249. package/lib/bmad-extension/skills/devops-manage-helm/SKILL.md +28 -0
  250. package/lib/bmad-extension/skills/devops-manage-helm/bmad-skill-manifest.yaml +3 -0
  251. package/lib/bmad-extension/skills/devops-sign-docker-image/.gitkeep +0 -0
  252. package/lib/bmad-extension/skills/devops-sign-docker-image/SKILL.md +24 -0
  253. package/lib/bmad-extension/skills/devops-sign-docker-image/bmad-skill-manifest.yaml +3 -0
  254. package/lib/bmad-extension/skills/mil498-ocd/.gitkeep +0 -0
  255. package/lib/bmad-extension/skills/mil498-ocd/SKILL.md +30 -0
  256. package/lib/bmad-extension/skills/mil498-ocd/bmad-skill-manifest.yaml +5 -0
  257. package/lib/bmad-extension/skills/mil498-ocd/prompts/01-discover-project-artifacts.md +26 -0
  258. package/lib/bmad-extension/skills/mil498-ocd/prompts/02-load-template.md +10 -0
  259. package/lib/bmad-extension/skills/mil498-ocd/prompts/03-generate-document.md +90 -0
  260. package/lib/bmad-extension/skills/mil498-ocd/prompts/04-validate.md +14 -0
  261. package/lib/bmad-extension/skills/mil498-ocd/prompts/05-review.md +15 -0
  262. package/lib/bmad-extension/skills/mil498-ocd/prompts/06-save.md +15 -0
  263. package/lib/bmad-extension/skills/mil498-ocd/template.md +169 -0
  264. package/lib/bmad-extension/skills/mil498-sdd/.gitkeep +0 -0
  265. package/lib/bmad-extension/skills/mil498-sdd/SKILL.md +30 -0
  266. package/lib/bmad-extension/skills/mil498-sdd/bmad-skill-manifest.yaml +5 -0
  267. package/lib/bmad-extension/skills/mil498-sdd/prompts/01-discover-project-artifacts.md +50 -0
  268. package/lib/bmad-extension/skills/mil498-sdd/prompts/02-load-template.md +10 -0
  269. package/lib/bmad-extension/skills/mil498-sdd/prompts/03-generate-document.md +98 -0
  270. package/lib/bmad-extension/skills/mil498-sdd/prompts/04-validate.md +16 -0
  271. package/lib/bmad-extension/skills/mil498-sdd/prompts/05-review.md +15 -0
  272. package/lib/bmad-extension/skills/mil498-sdd/prompts/06-save.md +19 -0
  273. package/lib/bmad-extension/skills/mil498-sdd/template.md +163 -0
  274. package/lib/bmad-extension/skills/mil498-sdp/.gitkeep +0 -0
  275. package/lib/bmad-extension/skills/mil498-sdp/SKILL.md +30 -0
  276. package/lib/bmad-extension/skills/mil498-sdp/bmad-skill-manifest.yaml +5 -0
  277. package/lib/bmad-extension/skills/mil498-sdp/prompts/01-discover-project-artifacts.md +32 -0
  278. package/lib/bmad-extension/skills/mil498-sdp/prompts/02-load-template.md +10 -0
  279. package/lib/bmad-extension/skills/mil498-sdp/prompts/03-generate-document.md +187 -0
  280. package/lib/bmad-extension/skills/mil498-sdp/prompts/04-validate.md +13 -0
  281. package/lib/bmad-extension/skills/mil498-sdp/prompts/05-review.md +15 -0
  282. package/lib/bmad-extension/skills/mil498-sdp/prompts/06-save.md +14 -0
  283. package/lib/bmad-extension/skills/mil498-sdp/template.md +307 -0
  284. package/lib/bmad-extension/skills/mil498-srs/.gitkeep +0 -0
  285. package/lib/bmad-extension/skills/mil498-srs/SKILL.md +30 -0
  286. package/lib/bmad-extension/skills/mil498-srs/bmad-skill-manifest.yaml +5 -0
  287. package/lib/bmad-extension/skills/mil498-srs/prompts/01-discover-project-artifacts.md +42 -0
  288. package/lib/bmad-extension/skills/mil498-srs/prompts/02-load-template.md +10 -0
  289. package/lib/bmad-extension/skills/mil498-srs/prompts/03-generate-document.md +100 -0
  290. package/lib/bmad-extension/skills/mil498-srs/prompts/04-validate.md +16 -0
  291. package/lib/bmad-extension/skills/mil498-srs/prompts/05-review.md +15 -0
  292. package/lib/bmad-extension/skills/mil498-srs/prompts/06-save.md +18 -0
  293. package/lib/bmad-extension/skills/mil498-srs/template.md +219 -0
  294. package/lib/bmad-extension/skills/mil498-ssdd/.gitkeep +0 -0
  295. package/lib/bmad-extension/skills/mil498-ssdd/SKILL.md +32 -0
  296. package/lib/bmad-extension/skills/mil498-ssdd/bmad-skill-manifest.yaml +5 -0
  297. package/lib/bmad-extension/skills/mil498-ssdd/prompts/01-discover-project-artifacts.md +32 -0
  298. package/lib/bmad-extension/skills/mil498-ssdd/prompts/02-load-template.md +10 -0
  299. package/lib/bmad-extension/skills/mil498-ssdd/prompts/03-csci-discovery-interview.md +43 -0
  300. package/lib/bmad-extension/skills/mil498-ssdd/prompts/04-generate-document.md +96 -0
  301. package/lib/bmad-extension/skills/mil498-ssdd/prompts/05-validate.md +14 -0
  302. package/lib/bmad-extension/skills/mil498-ssdd/prompts/06-review.md +16 -0
  303. package/lib/bmad-extension/skills/mil498-ssdd/prompts/07-save.md +16 -0
  304. package/lib/bmad-extension/skills/mil498-ssdd/template.md +154 -0
  305. package/lib/bmad-extension/skills/mil498-sss/.gitkeep +0 -0
  306. package/lib/bmad-extension/skills/mil498-sss/SKILL.md +31 -0
  307. package/lib/bmad-extension/skills/mil498-sss/bmad-skill-manifest.yaml +5 -0
  308. package/lib/bmad-extension/skills/mil498-sss/prompts/01-discover-project-artifacts.md +31 -0
  309. package/lib/bmad-extension/skills/mil498-sss/prompts/02-load-template.md +10 -0
  310. package/lib/bmad-extension/skills/mil498-sss/prompts/03-generate-document.md +108 -0
  311. package/lib/bmad-extension/skills/mil498-sss/prompts/04-validate.md +16 -0
  312. package/lib/bmad-extension/skills/mil498-sss/prompts/05-review.md +15 -0
  313. package/lib/bmad-extension/skills/mil498-sss/prompts/06-save.md +15 -0
  314. package/lib/bmad-extension/skills/mil498-sss/template.md +225 -0
  315. package/lib/bmad-extension/skills/mil498-std/.gitkeep +0 -0
  316. package/lib/bmad-extension/skills/mil498-std/SKILL.md +30 -0
  317. package/lib/bmad-extension/skills/mil498-std/bmad-skill-manifest.yaml +5 -0
  318. package/lib/bmad-extension/skills/mil498-std/prompts/01-discover-project-artifacts.md +42 -0
  319. package/lib/bmad-extension/skills/mil498-std/prompts/02-load-template.md +10 -0
  320. package/lib/bmad-extension/skills/mil498-std/prompts/03-generate-document.md +117 -0
  321. package/lib/bmad-extension/skills/mil498-std/prompts/04-validate.md +15 -0
  322. package/lib/bmad-extension/skills/mil498-std/prompts/05-review.md +15 -0
  323. package/lib/bmad-extension/skills/mil498-std/prompts/06-save.md +15 -0
  324. package/lib/bmad-extension/skills/mil498-std/template.md +188 -0
  325. package/lib/bmad-extension/skills/modify-sprint/.gitkeep +0 -0
  326. package/lib/bmad-extension/skills/modify-sprint/SKILL.md +259 -0
  327. package/lib/bmad-extension/skills/modify-sprint/bmad-skill-manifest.yaml +3 -0
  328. package/lib/bmad-extension/skills/project-context-expansion/.gitkeep +0 -0
  329. package/lib/bmad-extension/skills/project-context-expansion/SKILL.md +238 -0
  330. package/lib/bmad-extension/skills/project-context-expansion/bmad-skill-manifest.yaml +3 -0
  331. package/lib/bmad-extension/skills/sprint-status-view/.gitkeep +0 -0
  332. package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +202 -0
  333. package/lib/bmad-extension/skills/sprint-status-view/bmad-skill-manifest.yaml +3 -0
  334. package/lib/bmad-extension/skills/sre-check-deployment-status/.gitkeep +0 -0
  335. package/lib/bmad-extension/skills/sre-check-deployment-status/SKILL.md +32 -0
  336. package/lib/bmad-extension/skills/sre-check-deployment-status/bmad-skill-manifest.yaml +3 -0
  337. package/lib/bmad-extension/skills/sre-check-secrets/.gitkeep +0 -0
  338. package/lib/bmad-extension/skills/sre-check-secrets/SKILL.md +23 -0
  339. package/lib/bmad-extension/skills/sre-check-secrets/bmad-skill-manifest.yaml +3 -0
  340. package/lib/bmad-extension/skills/sre-check-system-status/.gitkeep +0 -0
  341. package/lib/bmad-extension/skills/sre-check-system-status/SKILL.md +27 -0
  342. package/lib/bmad-extension/skills/sre-check-system-status/bmad-skill-manifest.yaml +3 -0
  343. package/lib/bmad-extension/skills/sre-day-2-ops/.gitkeep +0 -0
  344. package/lib/bmad-extension/skills/sre-day-2-ops/SKILL.md +26 -0
  345. package/lib/bmad-extension/skills/sre-day-2-ops/bmad-skill-manifest.yaml +3 -0
  346. package/lib/bmad-extension/skills/sre-deployment-strategies/.gitkeep +0 -0
  347. package/lib/bmad-extension/skills/sre-deployment-strategies/SKILL.md +28 -0
  348. package/lib/bmad-extension/skills/sre-deployment-strategies/bmad-skill-manifest.yaml +3 -0
  349. package/lib/bmad-extension/skills/sre-fix-deployments/.gitkeep +0 -0
  350. package/lib/bmad-extension/skills/sre-fix-deployments/SKILL.md +25 -0
  351. package/lib/bmad-extension/skills/sre-fix-deployments/bmad-skill-manifest.yaml +3 -0
  352. package/lib/bmad-extension/skills/sre-gitops-status/.gitkeep +0 -0
  353. package/lib/bmad-extension/skills/sre-gitops-status/SKILL.md +25 -0
  354. package/lib/bmad-extension/skills/sre-gitops-status/bmad-skill-manifest.yaml +3 -0
  355. package/lib/bmad.js +541 -1
  356. package/package.json +3 -3
  357. package/test/bmad-extension.test.js +115 -69
  358. package/test/bmad-version-bump.test.js +313 -0
  359. package/test/convert-agents-to-skills.test.js +245 -0
  360. package/test/extension-module-restructure.test.js +359 -0
  361. package/test/integration-verification.test.js +71 -40
  362. package/test/migration-validation.test.js +499 -0
  363. package/test/migration.test.js +832 -0
  364. package/test/story-15-5-workflow-skills.test.js +311 -0
  365. package/test/yes-flag.test.js +8 -1
  366. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-c6e539e2308f8ed764c5b54b6ab68a67f8a3796b.idx +0 -0
  367. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-c6e539e2308f8ed764c5b54b6ab68a67f8a3796b.pack +0 -0
  368. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-c6e539e2308f8ed764c5b54b6ab68a67f8a3796b.rev +0 -0
  369. package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/bmad-manifest.json +0 -62
  370. package/lib/bmad-cache/bmb/samples/bmad-excalidraw/bmad-manifest.json +0 -18
  371. package/lib/bmad-cache/bmb/src/module-help.csv +0 -7
  372. package/lib/bmad-cache/bmb/src/module.yaml +0 -20
  373. package/lib/bmad-cache/bmb/src/skills/bmad-agent-builder/bmad-manifest.json +0 -24
  374. package/lib/bmad-cache/bmb/src/skills/bmad-agent-builder/scripts/bmad-manifest-schema.json +0 -103
  375. package/lib/bmad-cache/bmb/src/skills/bmad-agent-builder/scripts/generate-html-report.py +0 -1002
  376. package/lib/bmad-cache/bmb/src/skills/bmad-agent-builder/scripts/manifest.py +0 -420
  377. package/lib/bmad-cache/bmb/src/skills/bmad-workflow-builder/bmad-manifest.json +0 -23
  378. package/lib/bmad-cache/bmb/src/skills/bmad-workflow-builder/scripts/bmad-manifest-schema.json +0 -103
  379. package/lib/bmad-cache/bmb/src/skills/bmad-workflow-builder/scripts/generate-html-report.py +0 -1002
  380. package/lib/bmad-cache/bmb/src/skills/bmad-workflow-builder/scripts/manifest.py +0 -420
  381. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-157d7eb8d527233a8607d926fc74ebf87f2ae0d3.idx +0 -0
  382. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-157d7eb8d527233a8607d926fc74ebf87f2ae0d3.rev +0 -0
  383. package/lib/bmad-cache/cis/src/agents/brainstorming-coach.agent.yaml +0 -21
  384. package/lib/bmad-cache/cis/src/agents/creative-problem-solver.agent.yaml +0 -21
  385. package/lib/bmad-cache/cis/src/agents/design-thinking-coach.agent.yaml +0 -21
  386. package/lib/bmad-cache/cis/src/agents/innovation-strategist.agent.yaml +0 -21
  387. package/lib/bmad-cache/cis/src/agents/presentation-master.agent.yaml +0 -53
  388. package/lib/bmad-cache/cis/src/agents/storyteller/storyteller.agent.yaml +0 -25
  389. package/lib/bmad-cache/cis/src/teams/creative-squad.yaml +0 -7
  390. package/lib/bmad-cache/cis/src/teams/default-party.csv +0 -12
  391. package/lib/bmad-cache/cis/src/workflows/README.md +0 -175
  392. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-44faafb9245b4ca17ad81bd6c9e6fc52fb5915a1.idx +0 -0
  393. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-44faafb9245b4ca17ad81bd6c9e6fc52fb5915a1.rev +0 -0
  394. package/lib/bmad-cache/gds/_git_preserved/refs/tags/v0.2.2 +0 -1
  395. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-96ec1ce3a9ef4c891e00e060795b4434ba8f7163.idx +0 -0
  396. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-96ec1ce3a9ef4c891e00e060795b4434ba8f7163.rev +0 -0
  397. package/lib/bmad-cache/tea/_git_preserved/refs/tags/v1.7.0 +0 -1
  398. package/lib/bmad-cache/tea/docs/MIGRATION.md +0 -488
  399. package/lib/bmad-cache/tea/src/agents/tea.agent.yaml +0 -67
  400. package/lib/bmad-cache/tea/src/teams/default-party.csv +0 -2
  401. package/lib/bmad-customizations/bmm-cyber.customize.yaml +0 -24
  402. package/lib/bmad-customizations/bmm-devops.customize.yaml +0 -24
  403. package/lib/bmad-customizations/bmm-mil498.customize.yaml +0 -36
  404. package/lib/bmad-customizations/bmm-sre.customize.yaml +0 -24
  405. package/lib/bmad-customizations/cyber.md +0 -71
  406. package/lib/bmad-customizations/devops.md +0 -71
  407. package/lib/bmad-customizations/mil498.md +0 -75
  408. package/lib/bmad-customizations/sre.md +0 -71
  409. package/lib/bmad-extension/agents/bmm-architect.customize.yaml +0 -5
  410. package/lib/bmad-extension/agents/bmm-bmad-master.customize.yaml +0 -5
  411. package/lib/bmad-extension/agents/bmm-cyber.customize.yaml +0 -30
  412. package/lib/bmad-extension/agents/bmm-dev.customize.yaml +0 -5
  413. package/lib/bmad-extension/agents/bmm-devops.customize.yaml +0 -30
  414. package/lib/bmad-extension/agents/bmm-mil498.customize.yaml +0 -42
  415. package/lib/bmad-extension/agents/bmm-pm.customize.yaml +0 -5
  416. package/lib/bmad-extension/agents/bmm-qa.customize.yaml +0 -5
  417. package/lib/bmad-extension/agents/bmm-sm.customize.yaml +0 -5
  418. package/lib/bmad-extension/agents/bmm-sre.customize.yaml +0 -30
  419. package/lib/bmad-extension/agents/bmm-tech-writer.customize.yaml +0 -5
  420. package/lib/bmad-extension/agents/bmm-ux-designer.customize.yaml +0 -5
  421. /package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/scan-scripts.py +0 -0
  422. /package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/prepass-prompt-metrics.py +0 -0
  423. /package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/scan-scripts.py +0 -0
  424. /package/lib/bmad-cache/{bmb/src/skills/bmad-agent-builder → cis/src/skills/bmad-cis-design-thinking}/bmad-skill-manifest.yaml +0 -0
  425. /package/lib/bmad-cache/cis/src/{workflows → skills}/bmad-cis-design-thinking/design-methods.csv +0 -0
  426. /package/lib/bmad-cache/{bmb/src/skills/bmad-workflow-builder → cis/src/skills/bmad-cis-innovation-strategy}/bmad-skill-manifest.yaml +0 -0
  427. /package/lib/bmad-cache/cis/src/{workflows → skills}/bmad-cis-innovation-strategy/innovation-frameworks.csv +0 -0
  428. /package/lib/bmad-cache/cis/src/{workflows/bmad-cis-design-thinking → skills/bmad-cis-problem-solving}/bmad-skill-manifest.yaml +0 -0
  429. /package/lib/bmad-cache/cis/src/{workflows → skills}/bmad-cis-problem-solving/solving-methods.csv +0 -0
  430. /package/lib/bmad-cache/cis/src/{workflows/bmad-cis-innovation-strategy → skills/bmad-cis-storytelling}/bmad-skill-manifest.yaml +0 -0
  431. /package/lib/bmad-cache/cis/src/{workflows → skills}/bmad-cis-storytelling/story-types.csv +0 -0
  432. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/adr-quality-readiness-checklist.md +0 -0
  433. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/api-request.md +0 -0
  434. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/api-testing-patterns.md +0 -0
  435. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/auth-session.md +0 -0
  436. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/burn-in.md +0 -0
  437. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/ci-burn-in.md +0 -0
  438. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/component-tdd.md +0 -0
  439. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/contract-testing.md +0 -0
  440. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/data-factories.md +0 -0
  441. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/email-auth.md +0 -0
  442. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/error-handling.md +0 -0
  443. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/feature-flags.md +0 -0
  444. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/file-utils.md +0 -0
  445. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/fixture-architecture.md +0 -0
  446. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/fixtures-composition.md +0 -0
  447. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/intercept-network-call.md +0 -0
  448. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/log.md +0 -0
  449. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/network-error-monitor.md +0 -0
  450. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/network-first.md +0 -0
  451. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/network-recorder.md +0 -0
  452. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/nfr-criteria.md +0 -0
  453. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/overview.md +0 -0
  454. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pact-consumer-di.md +0 -0
  455. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pact-consumer-framework-setup.md +0 -0
  456. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pact-mcp.md +0 -0
  457. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pactjs-utils-consumer-helpers.md +0 -0
  458. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pactjs-utils-overview.md +0 -0
  459. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pactjs-utils-provider-verifier.md +0 -0
  460. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pactjs-utils-request-filter.md +0 -0
  461. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/playwright-cli.md +0 -0
  462. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/playwright-config.md +0 -0
  463. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/probability-impact.md +0 -0
  464. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/recurse.md +0 -0
  465. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/risk-governance.md +0 -0
  466. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/selective-testing.md +0 -0
  467. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/selector-resilience.md +0 -0
  468. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/test-healing-patterns.md +0 -0
  469. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/test-levels-framework.md +0 -0
  470. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/test-priorities-matrix.md +0 -0
  471. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/test-quality.md +0 -0
  472. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/timing-debugging.md +0 -0
  473. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/visual-debugging.md +0 -0
  474. /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/tea-index.csv +0 -0
  475. /package/lib/bmad-cache/{cis/src/workflows/bmad-cis-problem-solving → wds/src/workflows/wds-0-alignment-signoff}/bmad-skill-manifest.yaml +0 -0
  476. /package/lib/bmad-cache/{cis/src/workflows/bmad-cis-storytelling → wds/src/workflows/wds-0-project-setup}/bmad-skill-manifest.yaml +0 -0
@@ -14,7 +14,6 @@ Covers:
14
14
  - Config header and progression condition presence per prompt
15
15
  - File-level token estimates (chars / 4 rough approximation)
16
16
  - Prompt frontmatter validation (name, description, menu-code)
17
- - Manifest alignment check (frontmatter vs bmad-manifest.json entries)
18
17
  - Wall-of-text detection
19
18
  - Suggestive loading grep
20
19
  """
@@ -197,69 +196,6 @@ def parse_prompt_frontmatter(filepath: Path) -> dict:
197
196
  return result
198
197
 
199
198
 
200
- def check_manifest_alignment(skill_path: Path, prompt_frontmatters: dict[str, dict]) -> dict:
201
- """Compare prompt frontmatter against bmad-manifest.json entries."""
202
- alignment = {
203
- 'manifest_found': False,
204
- 'mismatches': [],
205
- 'manifest_only': [],
206
- 'prompt_only': [],
207
- }
208
-
209
- manifest_path = skill_path / 'bmad-manifest.json'
210
- if not manifest_path.exists():
211
- return alignment
212
-
213
- try:
214
- data = json.loads(manifest_path.read_text(encoding='utf-8'))
215
- except (json.JSONDecodeError, OSError):
216
- return alignment
217
-
218
- alignment['manifest_found'] = True
219
-
220
- capabilities = data.get('capabilities', [])
221
- if not isinstance(capabilities, list):
222
- return alignment
223
-
224
- # Build manifest lookup by name
225
- manifest_caps = {}
226
- for cap in capabilities:
227
- if isinstance(cap, dict) and cap.get('name'):
228
- manifest_caps[cap['name']] = cap
229
-
230
- # Compare
231
- prompt_names = set(prompt_frontmatters.keys())
232
- manifest_names = set(manifest_caps.keys())
233
-
234
- alignment['manifest_only'] = sorted(manifest_names - prompt_names)
235
- alignment['prompt_only'] = sorted(prompt_names - manifest_names)
236
-
237
- # Check field mismatches for overlapping entries
238
- for name in sorted(prompt_names & manifest_names):
239
- pfm = prompt_frontmatters[name]
240
- mcap = manifest_caps[name]
241
-
242
- issues = []
243
- # Compare name field
244
- pfm_name = pfm.get('fields', {}).get('name')
245
- if pfm_name and pfm_name != mcap.get('name'):
246
- issues.append(f'name mismatch: frontmatter="{pfm_name}" manifest="{mcap.get("name")}"')
247
-
248
- # Compare menu-code
249
- pfm_mc = pfm.get('fields', {}).get('menu-code')
250
- mcap_mc = mcap.get('menu-code')
251
- if pfm_mc and mcap_mc and pfm_mc != mcap_mc:
252
- issues.append(f'menu-code mismatch: frontmatter="{pfm_mc}" manifest="{mcap_mc}"')
253
-
254
- if issues:
255
- alignment['mismatches'].append({
256
- 'name': name,
257
- 'issues': issues,
258
- })
259
-
260
- return alignment
261
-
262
-
263
199
  def scan_file_patterns(filepath: Path, rel_path: str) -> dict:
264
200
  """Extract metrics and pattern matches from a single file."""
265
201
  content = filepath.read_text(encoding='utf-8')
@@ -357,9 +293,8 @@ def scan_prompt_metrics(skill_path: Path) -> dict:
357
293
  data['is_skill_md'] = True
358
294
  files_data.append(data)
359
295
 
360
- # Prompt files at skill root — also extract frontmatter
361
- prompt_frontmatters: dict[str, dict] = {}
362
- skip_files = {'SKILL.md', 'bmad-manifest.json', 'bmad-skill-manifest.yaml'}
296
+ # Prompt files at skill root
297
+ skip_files = {'SKILL.md'}
363
298
 
364
299
  for f in sorted(skill_path.iterdir()):
365
300
  if f.is_file() and f.suffix == '.md' and f.name not in skip_files and f.name != 'SKILL.md':
@@ -370,10 +305,6 @@ def scan_prompt_metrics(skill_path: Path) -> dict:
370
305
  pfm = parse_prompt_frontmatter(f)
371
306
  data['prompt_frontmatter'] = pfm
372
307
 
373
- # Use stem as key for manifest alignment
374
- prompt_name = pfm.get('fields', {}).get('name', f.stem)
375
- prompt_frontmatters[prompt_name] = pfm
376
-
377
308
  files_data.append(data)
378
309
 
379
310
  # Resources (just sizes, for progressive disclosure assessment)
@@ -388,9 +319,6 @@ def scan_prompt_metrics(skill_path: Path) -> dict:
388
319
  'tokens': len(content) // 4,
389
320
  }
390
321
 
391
- # Manifest alignment
392
- manifest_alignment = check_manifest_alignment(skill_path, prompt_frontmatters)
393
-
394
322
  # Aggregate stats
395
323
  total_waste = sum(len(f['waste_patterns']) for f in files_data)
396
324
  total_backrefs = sum(len(f['back_references']) for f in files_data)
@@ -434,7 +362,6 @@ def scan_prompt_metrics(skill_path: Path) -> dict:
434
362
  'total_wall_of_text': total_walls,
435
363
  },
436
364
  'resource_sizes': resource_sizes,
437
- 'manifest_alignment': manifest_alignment,
438
365
  'files': files_data,
439
366
  }
440
367
 
@@ -8,8 +8,6 @@ can use instead of reading all files itself. Covers:
8
8
  - Template artifact detection
9
9
  - Agent name validation (bmad-{code}-agent-{name} or bmad-agent-{name})
10
10
  - Required agent sections (Overview, Identity, Communication Style, Principles, On Activation)
11
- - bmad-manifest.json validation (persona field for agent detection, capabilities)
12
- - Capability cross-referencing with prompt files at skill root
13
11
  - Memory path consistency checking
14
12
  - Language/directness pattern grep
15
13
  - On Exit / Exiting section detection (invalid)
@@ -214,190 +212,13 @@ def find_template_artifacts(filepath: Path, rel_path: str) -> list[dict]:
214
212
  return findings
215
213
 
216
214
 
217
- def validate_manifest(skill_path: Path) -> tuple[dict, list[dict]]:
218
- """Validate bmad-manifest.json for agent requirements."""
219
- findings = []
220
- validation = {
221
- 'found': False,
222
- 'valid_json': False,
223
- 'is_agent': False,
224
- 'has_capabilities': False,
225
- 'capability_count': 0,
226
- 'menu_codes': [],
227
- 'duplicate_menu_codes': [],
228
- 'capability_issues': [],
229
- }
230
-
231
- manifest_path = skill_path / 'bmad-manifest.json'
232
- if not manifest_path.exists():
233
- findings.append({
234
- 'file': 'bmad-manifest.json', 'line': 0,
235
- 'severity': 'high', 'category': 'manifest',
236
- 'issue': 'bmad-manifest.json not found at skill root',
237
- })
238
- return validation, findings
239
-
240
- validation['found'] = True
241
-
242
- try:
243
- data = json.loads(manifest_path.read_text(encoding='utf-8'))
244
- except json.JSONDecodeError as e:
245
- findings.append({
246
- 'file': 'bmad-manifest.json', 'line': 0,
247
- 'severity': 'critical', 'category': 'manifest',
248
- 'issue': f'Invalid JSON in bmad-manifest.json: {e}',
249
- })
250
- return validation, findings
251
-
252
- validation['valid_json'] = True
253
-
254
- # Check if this is an agent (agents have a persona field)
255
- has_persona = 'persona' in data
256
- validation['is_agent'] = has_persona
257
- if not has_persona:
258
- findings.append({
259
- 'file': 'bmad-manifest.json', 'line': 0,
260
- 'severity': 'high', 'category': 'manifest',
261
- 'issue': 'Missing "persona" field — agents are identified by having a persona field',
262
- })
263
-
264
- # Check capabilities
265
- capabilities = data.get('capabilities')
266
- if capabilities is None:
267
- findings.append({
268
- 'file': 'bmad-manifest.json', 'line': 0,
269
- 'severity': 'high', 'category': 'manifest',
270
- 'issue': 'Missing "capabilities" field',
271
- })
272
- return validation, findings
273
-
274
- if not isinstance(capabilities, list):
275
- findings.append({
276
- 'file': 'bmad-manifest.json', 'line': 0,
277
- 'severity': 'high', 'category': 'manifest',
278
- 'issue': '"capabilities" is not an array',
279
- })
280
- return validation, findings
281
-
282
- validation['has_capabilities'] = True
283
- validation['capability_count'] = len(capabilities)
284
-
285
- # Check each capability for required fields and unique menu codes
286
- required_fields = {'name', 'menu-code', 'description'}
287
- menu_codes = []
288
-
289
- for i, cap in enumerate(capabilities):
290
- if not isinstance(cap, dict):
291
- findings.append({
292
- 'file': 'bmad-manifest.json', 'line': 0,
293
- 'severity': 'high', 'category': 'manifest',
294
- 'issue': f'Capability at index {i} is not an object',
295
- })
296
- continue
297
-
298
- missing = required_fields - set(cap.keys())
299
- if missing:
300
- cap_name = cap.get('name', f'index-{i}')
301
- findings.append({
302
- 'file': 'bmad-manifest.json', 'line': 0,
303
- 'severity': 'high', 'category': 'manifest',
304
- 'issue': f'Capability "{cap_name}" missing required fields: {", ".join(sorted(missing))}',
305
- })
306
-
307
- mc = cap.get('menu-code')
308
- if mc:
309
- menu_codes.append(mc)
310
-
311
- validation['menu_codes'] = menu_codes
312
-
313
- # Check for duplicate menu codes
314
- seen = set()
315
- dupes = set()
316
- for mc in menu_codes:
317
- if mc in seen:
318
- dupes.add(mc)
319
- seen.add(mc)
320
-
321
- if dupes:
322
- validation['duplicate_menu_codes'] = sorted(dupes)
323
- findings.append({
324
- 'file': 'bmad-manifest.json', 'line': 0,
325
- 'severity': 'high', 'category': 'manifest',
326
- 'issue': f'Duplicate menu codes: {", ".join(sorted(dupes))}',
327
- })
328
-
329
- return validation, findings
330
-
331
-
332
- def cross_reference_capabilities(skill_path: Path) -> tuple[dict, list[dict]]:
333
- """Cross-reference manifest capabilities with prompt files."""
334
- findings = []
335
- crossref = {
336
- 'manifest_prompt_caps': [],
337
- 'missing_prompt_files': [],
338
- 'orphaned_prompt_files': [],
339
- }
340
-
341
- manifest_path = skill_path / 'bmad-manifest.json'
342
-
343
- if not manifest_path.exists():
344
- return crossref, findings
345
-
346
- try:
347
- data = json.loads(manifest_path.read_text(encoding='utf-8'))
348
- except (json.JSONDecodeError, OSError):
349
- return crossref, findings
350
-
351
- capabilities = data.get('capabilities', [])
352
- if not isinstance(capabilities, list):
353
- return crossref, findings
354
-
355
- # Get prompt-type capabilities from manifest
356
- prompt_cap_names = set()
357
- for cap in capabilities:
358
- if isinstance(cap, dict) and cap.get('type') == 'prompt':
359
- name = cap.get('name')
360
- if name:
361
- prompt_cap_names.add(name)
362
- crossref['manifest_prompt_caps'].append(name)
363
-
364
- # Get actual prompt files (at skill root, excluding SKILL.md and non-prompt files)
365
- actual_prompts = set()
366
- skip_files = {'SKILL.md', 'bmad-manifest.json', 'bmad-skill-manifest.yaml'}
367
- for f in skill_path.iterdir():
368
- if f.is_file() and f.suffix == '.md' and f.name not in skip_files:
369
- actual_prompts.add(f.stem)
370
-
371
- # Missing prompt files (in manifest but no file)
372
- missing = prompt_cap_names - actual_prompts
373
- for name in sorted(missing):
374
- crossref['missing_prompt_files'].append(name)
375
- findings.append({
376
- 'file': 'bmad-manifest.json', 'line': 0,
377
- 'severity': 'high', 'category': 'capability-crossref',
378
- 'issue': f'Prompt capability "{name}" has no matching file {name}.md at skill root',
379
- })
380
-
381
- # Orphaned prompt files (file exists but not in manifest)
382
- orphaned = actual_prompts - prompt_cap_names
383
- for name in sorted(orphaned):
384
- crossref['orphaned_prompt_files'].append(name)
385
- findings.append({
386
- 'file': f'{name}.md', 'line': 0,
387
- 'severity': 'medium', 'category': 'capability-crossref',
388
- 'issue': f'Prompt file {name}.md not referenced as a prompt capability in manifest',
389
- })
390
-
391
- return crossref, findings
392
-
393
-
394
215
  def extract_memory_paths(skill_path: Path) -> tuple[list[str], list[dict]]:
395
216
  """Extract all memory path references across files and check consistency."""
396
217
  findings = []
397
218
  memory_paths = set()
398
219
 
399
220
  # Memory path patterns
400
- mem_pattern = re.compile(r'(?:memory/|sidecar/|\.memory/|\.sidecar/)[\w\-/]+(?:\.\w+)?')
221
+ mem_pattern = re.compile(r'(?:memory/|sidecar/)[\w\-/]+(?:\.\w+)?')
401
222
 
402
223
  files_to_scan = []
403
224
 
@@ -419,7 +240,7 @@ def extract_memory_paths(skill_path: Path) -> tuple[list[str], list[dict]]:
419
240
 
420
241
  sorted_paths = sorted(memory_paths)
421
242
 
422
- # Check for inconsistent formats (e.g., mixing memory/ and .memory/)
243
+ # Check for inconsistent formats
423
244
  prefixes = set()
424
245
  for p in sorted_paths:
425
246
  prefix = p.split('/')[0]
@@ -449,7 +270,7 @@ def check_prompt_basics(skill_path: Path) -> tuple[list[dict], list[dict]]:
449
270
  """Check each prompt file for config header and progression conditions."""
450
271
  findings = []
451
272
  prompt_details = []
452
- skip_files = {'SKILL.md', 'bmad-manifest.json', 'bmad-skill-manifest.yaml'}
273
+ skip_files = {'SKILL.md'}
453
274
 
454
275
  prompt_files = [f for f in sorted(skill_path.iterdir())
455
276
  if f.is_file() and f.suffix == '.md' and f.name not in skip_files]
@@ -545,15 +366,6 @@ def scan_structure_capabilities(skill_path: Path) -> dict:
545
366
  'issue': message,
546
367
  })
547
368
 
548
- # Manifest validation
549
- manifest_validation, manifest_findings = validate_manifest(skill_path)
550
- all_findings.extend(manifest_findings)
551
- has_manifest = manifest_validation['found']
552
-
553
- # Capability cross-reference
554
- capability_crossref, crossref_findings = cross_reference_capabilities(skill_path)
555
- all_findings.extend(crossref_findings)
556
-
557
369
  # Memory path consistency
558
370
  memory_paths, memory_findings = extract_memory_paths(skill_path)
559
371
  all_findings.extend(memory_findings)
@@ -585,9 +397,6 @@ def scan_structure_capabilities(skill_path: Path) -> dict:
585
397
  'metadata': {
586
398
  'frontmatter': frontmatter,
587
399
  'sections': sections,
588
- 'has_manifest': has_manifest,
589
- 'manifest_validation': manifest_validation,
590
- 'capability_crossref': capability_crossref,
591
400
  },
592
401
  'prompt_details': prompt_details,
593
402
  'memory_paths': memory_paths,
@@ -5,9 +5,12 @@ Validates all .md and .json files against BMad path conventions:
5
5
  1. {project-root} only valid before /_bmad
6
6
  2. Bare _bmad references must have {project-root} prefix
7
7
  3. Config variables used directly (no double-prefix)
8
- 4. No ./ or ../ relative prefixes
9
- 5. No absolute paths
10
- 6. Memory paths must use {project-root}/_bmad/_memory/{skillName}-sidecar/
8
+ 4. Skill-internal paths must use ./ prefix (references/, scripts/, assets/)
9
+ 5. No ../ parent directory references
10
+ 6. No absolute paths
11
+ 7. Memory paths must use {project-root}/_bmad/memory/{skillName}-sidecar/
12
+ 8. Frontmatter allows only name and description
13
+ 9. No .md files at skill root except SKILL.md
11
14
  """
12
15
 
13
16
  # /// script
@@ -33,17 +36,22 @@ BARE_BMAD_RE = re.compile(r'(?<!\{project-root\}/)_bmad[/\s]')
33
36
  # Absolute paths
34
37
  ABSOLUTE_PATH_RE = re.compile(r'(?:^|[\s"`\'(])(/(?:Users|home|opt|var|tmp|etc|usr)/\S+)', re.MULTILINE)
35
38
  HOME_PATH_RE = re.compile(r'(?:^|[\s"`\'(])(~/\S+)', re.MULTILINE)
36
- # Relative prefixes
39
+ # Parent directory reference (still invalid)
37
40
  RELATIVE_DOT_RE = re.compile(r'(?:^|[\s"`\'(])(\.\./\S+)', re.MULTILINE)
38
- RELATIVE_DOTSLASH_RE = re.compile(r'(?:^|[\s"`\'(])(\./\S+)', re.MULTILINE)
41
+ # Bare skill-internal paths without ./ prefix
42
+ # Match references/, scripts/, assets/ when NOT preceded by ./
43
+ BARE_INTERNAL_RE = re.compile(r'(?:^|[\s"`\'(])(?<!\./)((?:references|scripts|assets)/\S+)', re.MULTILINE)
39
44
 
40
- # Memory path pattern: should use {project-root}/_bmad/_memory/
41
- MEMORY_PATH_RE = re.compile(r'_bmad/_memory/\S+')
42
- VALID_MEMORY_PATH_RE = re.compile(r'\{project-root\}/_bmad/_memory/\S+-sidecar/')
45
+ # Memory path pattern: should use {project-root}/_bmad/memory/
46
+ MEMORY_PATH_RE = re.compile(r'_bmad/memory/\S+')
47
+ VALID_MEMORY_PATH_RE = re.compile(r'\{project-root\}/_bmad/memory/\S+-sidecar/')
43
48
 
44
49
  # Fenced code block detection (to skip examples showing wrong patterns)
45
50
  FENCE_RE = re.compile(r'^```', re.MULTILINE)
46
51
 
52
+ # Valid frontmatter keys
53
+ VALID_FRONTMATTER_KEYS = {'name', 'description'}
54
+
47
55
 
48
56
  def is_in_fenced_block(content: str, pos: int) -> bool:
49
57
  """Check if a position is inside a fenced code block."""
@@ -57,6 +65,76 @@ def get_line_number(content: str, pos: int) -> int:
57
65
  return content[:pos].count('\n') + 1
58
66
 
59
67
 
68
+ def check_frontmatter(content: str, filepath: Path) -> list[dict]:
69
+ """Validate SKILL.md frontmatter contains only allowed keys."""
70
+ findings = []
71
+ if filepath.name != 'SKILL.md':
72
+ return findings
73
+
74
+ if not content.startswith('---'):
75
+ findings.append({
76
+ 'file': filepath.name,
77
+ 'line': 1,
78
+ 'severity': 'critical',
79
+ 'category': 'frontmatter',
80
+ 'title': 'SKILL.md missing frontmatter block',
81
+ 'detail': 'SKILL.md must start with --- frontmatter containing name and description',
82
+ 'action': 'Add frontmatter with name and description fields',
83
+ })
84
+ return findings
85
+
86
+ # Find closing ---
87
+ end = content.find('\n---', 3)
88
+ if end == -1:
89
+ findings.append({
90
+ 'file': filepath.name,
91
+ 'line': 1,
92
+ 'severity': 'critical',
93
+ 'category': 'frontmatter',
94
+ 'title': 'SKILL.md frontmatter block not closed',
95
+ 'detail': 'Missing closing --- for frontmatter',
96
+ 'action': 'Add closing --- after frontmatter fields',
97
+ })
98
+ return findings
99
+
100
+ frontmatter = content[4:end]
101
+ for i, line in enumerate(frontmatter.split('\n'), start=2):
102
+ line = line.strip()
103
+ if not line or line.startswith('#'):
104
+ continue
105
+ if ':' in line:
106
+ key = line.split(':', 1)[0].strip()
107
+ if key not in VALID_FRONTMATTER_KEYS:
108
+ findings.append({
109
+ 'file': filepath.name,
110
+ 'line': i,
111
+ 'severity': 'high',
112
+ 'category': 'frontmatter',
113
+ 'title': f'Invalid frontmatter key: {key}',
114
+ 'detail': f'Only {", ".join(sorted(VALID_FRONTMATTER_KEYS))} are allowed in frontmatter',
115
+ 'action': f'Remove {key} from frontmatter — use as content field in SKILL.md body instead',
116
+ })
117
+
118
+ return findings
119
+
120
+
121
+ def check_root_md_files(skill_path: Path) -> list[dict]:
122
+ """Check that no .md files exist at skill root except SKILL.md."""
123
+ findings = []
124
+ for md_file in skill_path.glob('*.md'):
125
+ if md_file.name != 'SKILL.md':
126
+ findings.append({
127
+ 'file': md_file.name,
128
+ 'line': 0,
129
+ 'severity': 'high',
130
+ 'category': 'structure',
131
+ 'title': f'Prompt file at skill root: {md_file.name}',
132
+ 'detail': 'All progressive disclosure content must be in ./references/ — only SKILL.md belongs at root',
133
+ 'action': f'Move {md_file.name} to references/{md_file.name}',
134
+ })
135
+ return findings
136
+
137
+
60
138
  def scan_file(filepath: Path, skip_fenced: bool = True) -> list[dict]:
61
139
  """Scan a single file for path standard violations."""
62
140
  findings = []
@@ -70,10 +148,10 @@ def scan_file(filepath: Path, skip_fenced: bool = True) -> list[dict]:
70
148
  'Absolute path found — not portable across machines'),
71
149
  (HOME_PATH_RE, 'absolute-path', 'high',
72
150
  'Home directory path (~/) found — environment-specific'),
73
- (RELATIVE_DOT_RE, 'relative-prefix', 'medium',
151
+ (RELATIVE_DOT_RE, 'relative-prefix', 'high',
74
152
  'Parent directory reference (../) found — fragile, breaks with reorganization'),
75
- (RELATIVE_DOTSLASH_RE, 'relative-prefix', 'medium',
76
- 'Relative prefix (./) foundbreaks when execution directory changes'),
153
+ (BARE_INTERNAL_RE, 'bare-internal-path', 'high',
154
+ 'Bare skill-internal path without ./ prefixuse ./references/, ./scripts/, ./assets/ to distinguish from {project-root} paths'),
77
155
  ]
78
156
 
79
157
  for pattern, category, severity, message in checks:
@@ -99,9 +177,6 @@ def scan_file(filepath: Path, skip_fenced: bool = True) -> list[dict]:
99
177
  pos = match.start()
100
178
  if skip_fenced and is_in_fenced_block(content, pos):
101
179
  continue
102
- # Check that this isn't part of {project-root}/_bmad
103
- # The negative lookbehind handles this, but double-check
104
- # the broader context
105
180
  start = max(0, pos - 30)
106
181
  before = content[start:pos]
107
182
  if '{project-root}/' in before:
@@ -118,12 +193,11 @@ def scan_file(filepath: Path, skip_fenced: bool = True) -> list[dict]:
118
193
  'action': '',
119
194
  })
120
195
 
121
- # Memory path check — memory paths should use {project-root}/_bmad/_memory/{skillName}-sidecar/
196
+ # Memory path check — memory paths should use {project-root}/_bmad/memory/{skillName}-sidecar/
122
197
  for match in MEMORY_PATH_RE.finditer(content):
123
198
  pos = match.start()
124
199
  if skip_fenced and is_in_fenced_block(content, pos):
125
200
  continue
126
- # Check if properly prefixed
127
201
  start = max(0, pos - 20)
128
202
  before = content[start:pos]
129
203
  matched_text = match.group()
@@ -135,7 +209,7 @@ def scan_file(filepath: Path, skip_fenced: bool = True) -> list[dict]:
135
209
  'line': line_num,
136
210
  'severity': 'high',
137
211
  'category': 'memory-path',
138
- 'title': 'Memory path missing {project-root} prefix — use {project-root}/_bmad/_memory/',
212
+ 'title': 'Memory path missing {project-root} prefix — use {project-root}/_bmad/memory/',
139
213
  'detail': line_content[:120],
140
214
  'action': '',
141
215
  })
@@ -159,6 +233,15 @@ def scan_skill(skill_path: Path, skip_fenced: bool = True) -> dict:
159
233
  """Scan all .md and .json files in a skill directory."""
160
234
  all_findings = []
161
235
 
236
+ # Check for .md files at root that aren't SKILL.md
237
+ all_findings.extend(check_root_md_files(skill_path))
238
+
239
+ # Check SKILL.md frontmatter
240
+ skill_md = skill_path / 'SKILL.md'
241
+ if skill_md.exists():
242
+ content = skill_md.read_text(encoding='utf-8')
243
+ all_findings.extend(check_frontmatter(content, skill_md))
244
+
162
245
  # Find all .md and .json files
163
246
  md_files = sorted(list(skill_path.rglob('*.md')) + list(skill_path.rglob('*.json')))
164
247
  if not md_files:
@@ -181,7 +264,10 @@ def scan_skill(skill_path: Path, skip_fenced: bool = True) -> dict:
181
264
  'double_prefix': 0,
182
265
  'absolute_path': 0,
183
266
  'relative_prefix': 0,
267
+ 'bare_internal_path': 0,
184
268
  'memory_path': 0,
269
+ 'frontmatter': 0,
270
+ 'structure': 0,
185
271
  }
186
272
 
187
273
  for f in all_findings:
@@ -195,7 +281,7 @@ def scan_skill(skill_path: Path, skip_fenced: bool = True) -> dict:
195
281
  return {
196
282
  'scanner': 'path-standards',
197
283
  'script': 'scan-path-standards.py',
198
- 'version': '1.0.0',
284
+ 'version': '2.0.0',
199
285
  'skill_path': str(skill_path),
200
286
  'timestamp': datetime.now(timezone.utc).isoformat(),
201
287
  'files_scanned': files_scanned,
@@ -0,0 +1,6 @@
1
+ module,skill,display-name,menu-code,description,action,args,phase,after,before,required,output-location,outputs
2
+ BMad Builder,bmad-builder-setup,Setup Builder Module,SB,"Install or update BMad Builder module config and help entries. Collects user preferences, writes config.yaml, and migrates legacy configs.",configure,,anytime,,,false,{project-root}/_bmad,config.yaml and config.user.yaml
3
+ BMad Builder,bmad-agent-builder,Build an Agent,BA,"Create, edit, convert, or fix an agent skill.",build-process,"[-H] [description | path]",anytime,,bmad-agent-builder:quality-optimizer,false,output_folder,agent skill
4
+ BMad Builder,bmad-agent-builder,Optimize an Agent,OA,Validate and optimize an existing agent skill. Produces a quality report.,quality-optimizer,[-H] [path],anytime,bmad-agent-builder:build-process,,false,bmad_builder_reports,quality report
5
+ BMad Builder,bmad-workflow-builder,Build a Workflow,BW,"Create, edit, convert, or fix a workflow or utility skill.",build-process,"[-H] [description | path]",anytime,,bmad-workflow-builder:quality-optimizer,false,output_folder,workflow skill
6
+ BMad Builder,bmad-workflow-builder,Optimize a Workflow,OW,Validate and optimize an existing workflow or utility skill. Produces a quality report.,quality-optimizer,[-H] [path],anytime,bmad-workflow-builder:build-process,,false,bmad_builder_reports,quality report
@@ -0,0 +1,20 @@
1
+ code: bmb
2
+ name: "BMad Builder"
3
+ description: "Standard Skill Compliant Factory for BMad Agents, Workflows and Modules"
4
+ module_version: 1.0.0
5
+ default_selected: false
6
+ module_greeting: >
7
+ Enjoy making your dream creations with the BMad Builder Module!
8
+ Run this again at any time if you want to reconfigure a setting or have updated the module, (or optionally just update _bmad/config.yaml and config.user.yaml to change existing values)
9
+
10
+ For questions, suggestions and support - check us on Discord at https://discord.gg/gk8jAdXWmj
11
+
12
+ bmad_builder_output_folder:
13
+ prompt: "Where should your custom output (agent, workflow, module config) be saved?"
14
+ default: "{project-root}/skills"
15
+ result: "{project-root}/{value}"
16
+
17
+ bmad_builder_reports:
18
+ prompt: "Output for Evals, Test, Quality and Planning Reports?"
19
+ default: "{project-root}/skills/reports"
20
+ result: "{project-root}/{value}"