ma-agents 3.18.0-beta.1 → 3.18.0-beta.3

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 (179) hide show
  1. package/README.md +17 -2
  2. package/bin/cli.js +78 -28
  3. package/docs/architecture.md +2 -2
  4. package/docs/technical-notes/enforcement-hooks-research.md +10 -1
  5. package/lib/agents.js +81 -3
  6. package/lib/bmad-cache/cache-manifest.json +0 -12
  7. package/lib/bmad-extension/skills/ma-agent-cyber/SKILL.md +2 -2
  8. package/lib/bmad-extension/skills/ma-agent-devops/SKILL.md +2 -2
  9. package/lib/bmad-extension/skills/ma-agent-sqa/SKILL.md +2 -2
  10. package/lib/bmad-extension/skills/ma-agent-sre/SKILL.md +2 -2
  11. package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +1 -1
  12. package/lib/bmad-extension-plugin/skills/ma-agent-cyber/SKILL.md +2 -2
  13. package/lib/bmad-extension-plugin/skills/ma-agent-devops/SKILL.md +2 -2
  14. package/lib/bmad-extension-plugin/skills/ma-agent-sqa/SKILL.md +2 -2
  15. package/lib/bmad-extension-plugin/skills/ma-agent-sre/SKILL.md +2 -2
  16. package/lib/bmad.js +267 -20
  17. package/lib/installer.js +132 -10
  18. package/package.json +1 -1
  19. package/scripts/build-bmad-cache.js +18 -9
  20. package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +0 -56
  21. package/lib/bmad-cache/gds/.markdownlint-cli2.yaml +0 -35
  22. package/lib/bmad-cache/gds/.nvmrc +0 -1
  23. package/lib/bmad-cache/gds/.prettierignore +0 -9
  24. package/lib/bmad-cache/gds/CNAME +0 -1
  25. package/lib/bmad-cache/gds/LICENSE +0 -26
  26. package/lib/bmad-cache/gds/README.md +0 -134
  27. package/lib/bmad-cache/gds/_git_preserved/HEAD +0 -1
  28. package/lib/bmad-cache/gds/_git_preserved/config +0 -13
  29. package/lib/bmad-cache/gds/_git_preserved/description +0 -1
  30. package/lib/bmad-cache/gds/_git_preserved/hooks/applypatch-msg.sample +0 -15
  31. package/lib/bmad-cache/gds/_git_preserved/hooks/commit-msg.sample +0 -74
  32. package/lib/bmad-cache/gds/_git_preserved/hooks/fsmonitor-watchman.sample +0 -168
  33. package/lib/bmad-cache/gds/_git_preserved/hooks/post-update.sample +0 -8
  34. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-applypatch.sample +0 -14
  35. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-commit.sample +0 -49
  36. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-merge-commit.sample +0 -13
  37. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-push.sample +0 -53
  38. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-rebase.sample +0 -169
  39. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-receive.sample +0 -24
  40. package/lib/bmad-cache/gds/_git_preserved/hooks/prepare-commit-msg.sample +0 -42
  41. package/lib/bmad-cache/gds/_git_preserved/hooks/push-to-checkout.sample +0 -78
  42. package/lib/bmad-cache/gds/_git_preserved/hooks/sendemail-validate.sample +0 -77
  43. package/lib/bmad-cache/gds/_git_preserved/hooks/update.sample +0 -128
  44. package/lib/bmad-cache/gds/_git_preserved/index +0 -0
  45. package/lib/bmad-cache/gds/_git_preserved/info/exclude +0 -6
  46. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.idx +0 -0
  47. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.pack +0 -0
  48. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.rev +0 -0
  49. package/lib/bmad-cache/gds/_git_preserved/packed-refs +0 -2
  50. package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +0 -1
  51. package/lib/bmad-cache/gds/_git_preserved/shallow +0 -1
  52. package/lib/bmad-cache/gds/eslint.config.mjs +0 -141
  53. package/lib/bmad-cache/gds/package.json +0 -91
  54. package/lib/bmad-cache/gds/prettier.config.mjs +0 -32
  55. package/lib/bmad-cache/gds/src/agents/gds-agent-game-architect/customize.toml +0 -57
  56. package/lib/bmad-cache/gds/src/agents/gds-agent-game-designer/customize.toml +0 -59
  57. package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/customize.toml +0 -129
  58. package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/gametest/qa-index.csv +0 -18
  59. package/lib/bmad-cache/gds/src/agents/gds-agent-game-solo-dev/customize.toml +0 -55
  60. package/lib/bmad-cache/gds/src/agents/gds-agent-tech-writer/customize.toml +0 -65
  61. package/lib/bmad-cache/gds/src/module-help.csv +0 -30
  62. package/lib/bmad-cache/gds/src/module.yaml +0 -113
  63. package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/customize.toml +0 -41
  64. package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/game-brain-methods.csv +0 -26
  65. package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-create-game-brief/customize.toml +0 -116
  66. package/lib/bmad-cache/gds/src/workflows/1-preproduction/research/gds-domain-research/customize.toml +0 -41
  67. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-narrative/customize.toml +0 -41
  68. package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/game-types.csv +0 -25
  69. package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/genre-complexity.csv +0 -26
  70. package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/validation-report-template.html +0 -190
  71. package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/customize.toml +0 -99
  72. package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/scripts/render-validation-html.py +0 -290
  73. package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/assets/validation-report-template.html +0 -190
  74. package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/customize.toml +0 -84
  75. package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/assets/validation-report-template.html +0 -319
  76. package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/customize.toml +0 -101
  77. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-check-implementation-readiness/customize.toml +0 -41
  78. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-create-epics-and-stories/customize.toml +0 -41
  79. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/architecture-patterns.yaml +0 -508
  80. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/customize.toml +0 -41
  81. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/decision-catalog.yaml +0 -428
  82. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/engine-mcps.yaml +0 -392
  83. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/pattern-categories.csv +0 -13
  84. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-generate-project-context/customize.toml +0 -41
  85. package/lib/bmad-cache/gds/src/workflows/4-production/gds-code-review/customize.toml +0 -41
  86. package/lib/bmad-cache/gds/src/workflows/4-production/gds-correct-course/customize.toml +0 -41
  87. package/lib/bmad-cache/gds/src/workflows/4-production/gds-create-story/customize.toml +0 -41
  88. package/lib/bmad-cache/gds/src/workflows/4-production/gds-dev-story/customize.toml +0 -41
  89. package/lib/bmad-cache/gds/src/workflows/4-production/gds-investigate/customize.toml +0 -62
  90. package/lib/bmad-cache/gds/src/workflows/4-production/gds-retrospective/customize.toml +0 -41
  91. package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/customize.toml +0 -41
  92. package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/sprint-status-template.yaml +0 -55
  93. package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-status/customize.toml +0 -41
  94. package/lib/bmad-cache/gds/src/workflows/gametest/gds-e2e-scaffold/customize.toml +0 -41
  95. package/lib/bmad-cache/gds/src/workflows/gametest/gds-performance-test/customize.toml +0 -41
  96. package/lib/bmad-cache/gds/src/workflows/gametest/gds-playtest-plan/customize.toml +0 -41
  97. package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-automate/customize.toml +0 -41
  98. package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-design/customize.toml +0 -41
  99. package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-framework/customize.toml +0 -41
  100. package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-review/customize.toml +0 -41
  101. package/lib/bmad-cache/gds/src/workflows/gds-document-project/customize.toml +0 -41
  102. package/lib/bmad-cache/gds/src/workflows/gds-document-project/documentation-requirements.csv +0 -12
  103. package/lib/bmad-cache/gds/src/workflows/gds-document-project/templates/project-scan-report-schema.json +0 -160
  104. package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/gds-quick-dev/customize.toml +0 -41
  105. package/lib/bmad-cache/gds/tools/build-docs.mjs +0 -450
  106. package/lib/bmad-cache/gds/website/astro.config.mjs +0 -142
  107. package/lib/bmad-cache/gds/website/public/favicon.ico +0 -0
  108. package/lib/bmad-cache/gds/website/public/img/bmad-dark.png +0 -0
  109. package/lib/bmad-cache/gds/website/public/img/bmad-light.png +0 -0
  110. package/lib/bmad-cache/gds/website/src/components/Banner.astro +0 -71
  111. package/lib/bmad-cache/gds/website/src/components/Header.astro +0 -94
  112. package/lib/bmad-cache/gds/website/src/components/MobileMenuFooter.astro +0 -33
  113. package/lib/bmad-cache/gds/website/src/content/config.ts +0 -6
  114. package/lib/bmad-cache/gds/website/src/content/docs +0 -1
  115. package/lib/bmad-cache/gds/website/src/lib/site-url.mjs +0 -25
  116. package/lib/bmad-cache/gds/website/src/rehype-base-paths.js +0 -88
  117. package/lib/bmad-cache/gds/website/src/rehype-markdown-links.js +0 -117
  118. package/lib/bmad-cache/gds/website/src/styles/custom.css +0 -503
  119. package/lib/bmad-cache/wds/.claude-plugin/marketplace.json +0 -35
  120. package/lib/bmad-cache/wds/.markdownlint-cli2.yaml +0 -38
  121. package/lib/bmad-cache/wds/.nvmrc +0 -1
  122. package/lib/bmad-cache/wds/.prettierignore +0 -9
  123. package/lib/bmad-cache/wds/LICENSE +0 -27
  124. package/lib/bmad-cache/wds/README.md +0 -139
  125. package/lib/bmad-cache/wds/_git_preserved/HEAD +0 -1
  126. package/lib/bmad-cache/wds/_git_preserved/config +0 -13
  127. package/lib/bmad-cache/wds/_git_preserved/description +0 -1
  128. package/lib/bmad-cache/wds/_git_preserved/hooks/applypatch-msg.sample +0 -15
  129. package/lib/bmad-cache/wds/_git_preserved/hooks/commit-msg.sample +0 -74
  130. package/lib/bmad-cache/wds/_git_preserved/hooks/fsmonitor-watchman.sample +0 -168
  131. package/lib/bmad-cache/wds/_git_preserved/hooks/post-update.sample +0 -8
  132. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-applypatch.sample +0 -14
  133. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-commit.sample +0 -49
  134. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-merge-commit.sample +0 -13
  135. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-push.sample +0 -53
  136. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-rebase.sample +0 -169
  137. package/lib/bmad-cache/wds/_git_preserved/hooks/pre-receive.sample +0 -24
  138. package/lib/bmad-cache/wds/_git_preserved/hooks/prepare-commit-msg.sample +0 -42
  139. package/lib/bmad-cache/wds/_git_preserved/hooks/push-to-checkout.sample +0 -78
  140. package/lib/bmad-cache/wds/_git_preserved/hooks/sendemail-validate.sample +0 -77
  141. package/lib/bmad-cache/wds/_git_preserved/hooks/update.sample +0 -128
  142. package/lib/bmad-cache/wds/_git_preserved/index +0 -0
  143. package/lib/bmad-cache/wds/_git_preserved/info/exclude +0 -6
  144. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.idx +0 -0
  145. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.pack +0 -0
  146. package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.rev +0 -0
  147. package/lib/bmad-cache/wds/_git_preserved/packed-refs +0 -2
  148. package/lib/bmad-cache/wds/_git_preserved/refs/heads/main +0 -1
  149. package/lib/bmad-cache/wds/_git_preserved/refs/tags/v0.4.3 +0 -1
  150. package/lib/bmad-cache/wds/_git_preserved/shallow +0 -1
  151. package/lib/bmad-cache/wds/eslint.config.mjs +0 -152
  152. package/lib/bmad-cache/wds/package.json +0 -82
  153. package/lib/bmad-cache/wds/prettier.config.mjs +0 -32
  154. package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/customize.toml +0 -80
  155. package/lib/bmad-cache/wds/src/agents/wds-agent-mimir-builder/customize.toml +0 -52
  156. package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/customize.toml +0 -70
  157. package/lib/bmad-cache/wds/src/module-help.csv +0 -19
  158. package/lib/bmad-cache/wds/src/module.yaml +0 -173
  159. package/lib/bmad-cache/wds/src/scripts/README.md +0 -155
  160. package/lib/bmad-cache/wds/src/scripts/wds-add-object.js +0 -202
  161. package/lib/bmad-cache/wds/src/scripts/wds-add-spacing.js +0 -158
  162. package/lib/bmad-cache/wds/src/scripts/wds-init-page.js +0 -229
  163. package/lib/bmad-cache/wds/src/scripts/wds-init-scenario.js +0 -120
  164. package/lib/bmad-cache/wds/src/scripts/wds-nav.js +0 -201
  165. package/lib/bmad-cache/wds/src/scripts/wds-validate.js +0 -301
  166. package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/resources/wds-1-project-brief/templates/platform-requirements.template.yaml +0 -69
  167. package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/resources/wds-7-design-system/templates/catalog.template.html +0 -363
  168. package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/templates/platform-requirements.template.yaml +0 -69
  169. package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/workflow.xml +0 -450
  170. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/design-delivery.template.yaml +0 -104
  171. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/test-scenario.template.yaml +0 -192
  172. package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/workflow-specify.xml +0 -387
  173. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.css +0 -164
  174. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.html +0 -18
  175. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.js +0 -430
  176. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/demo-data-template.json +0 -63
  177. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/page-template.html +0 -465
  178. package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/work-file-template.yaml +0 -264
  179. package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/templates/catalog.template.html +0 -363
package/README.md CHANGED
@@ -277,6 +277,21 @@ Both messages end by stating that nothing was read or written on your behalf.
277
277
  These are stated here, in the shipped documentation, rather than only in the
278
278
  repository's changelog — which is **not** part of the npm package.
279
279
 
280
+ - **Versions 3.7.0 through 3.17.1 could silently delete hand-authored skills.**
281
+ When a tool's skills directory moved between versions, the installer removed
282
+ the old directory recursively once the new one had content, destroying any
283
+ skill you had written there yourself and reporting it as a successful
284
+ cleanup. This affected `.github/copilot/skills`, `.github/skills`,
285
+ `.roo/skills` and `.kilocode/skills`. **It is fixed in this version** — the
286
+ sweep now removes only what ma-agents installed and preserves the directory
287
+ if anything else remains — but deletions already made are not recoverable
288
+ from ma-agents: no backup was written and nothing but the directory name was
289
+ recorded. Check your version control if you kept such skills.
290
+ - **A file placed inside a skill directory ma-agents installed is still removed
291
+ with it.** The sweep's unit is the skill directory, not the file. If you have
292
+ edited a shipped skill in place, that edit is lost when the directory is
293
+ swept. Keep your own skills in their own directories, which are preserved.
294
+
280
295
  - **Every claim in this release about behaviour with a Confluence MCP *present*
281
296
  is mock-verified, not live.** No authorised Confluence MCP was available to
282
297
  the implementation or to any review, so the MCP-present branches were
@@ -554,7 +569,7 @@ Running `ma-agents` on a project where skills are already installed triggers the
554
569
  `ma-agents` ships with everything needed to install BMAD without any network access at install time:
555
570
 
556
571
  - **`bmad-method` is a direct npm dependency** — no runtime `npx bmad-method` fetch required. The correct version is pinned and bundled inside `node_modules/` when you `npm install ma-agents`.
557
- - **External modules pre-bundled** — `lib/bmad-cache/` ships exactly 5 optional BMAD modules (`bmb`, `cis`, `gds`, `tea`, `wds`) inside the package itself. They are pre-populated to `~/.bmad/cache/external-modules/` before any install runs, so BMAD never needs to clone them from GitHub. The bundled set is a **closed allowlist** — a build-time guard fails loud if the resolved set is ever smaller (a thin cache) *or* larger (a silent upstream addition) than these five, so a new upstream module can never be force-bundled or installed by default. `bmad-loop` (BMAD's own unattended-dev orchestrator, added upstream at v6.10.0) is deliberately **excluded** from this bundle — see "BMAD-loop and other opt-in modules" below.
572
+ - **External modules pre-bundled** — `lib/bmad-cache/` ships exactly 3 optional BMAD modules (`bmb`, `cis`, `tea`) inside the package itself. They are pre-populated to `~/.bmad/cache/external-modules/` before any install runs, so BMAD never needs to clone them from GitHub. The bundled set is a **closed allowlist** — a build-time guard fails loud if the resolved set is ever smaller (a thin cache) *or* larger (a silent upstream addition) than these three, so a new upstream module can never be force-bundled or installed by default. The two design-studio modules `gds` (Game Dev Studio) and `wds` (Whiteport Design Studio) are **not bundled and not installable by ma-agents** — they are not offered by the `--bmad-modules` multiselect, and obtaining either one requires network access to its upstream repository, so on an air-gapped machine neither is available. `bmad-loop` (BMAD's own unattended-dev orchestrator, added upstream at v6.10.0) is deliberately **excluded** from this bundle — see "BMAD-loop and other opt-in modules" below.
558
573
  - **Plugin bundle pre-built** — `lib/bmad-extension-plugin/` ships as a deterministic, byte-stable bundle (built from `lib/bmad-extension/` via `scripts/build-plugin.js`). At install time it is staged into `<project>/.ma-agents-plugin-stage/` and consumed by `bmad-method install --custom-source`, so the install never touches the network for plugin assembly.
559
574
  - **Deterministic installs** — same `ma-agents` version always produces the same `_bmad/` output, regardless of network conditions (NFR21). Bundle reproducibility is gated by a CI drift check.
560
575
  - **Air-gapped friendly** — install from a tarball (`npm install ./ma-agents-x.y.z.tgz`) and run `npx ma-agents install` completely offline. Every PR runs an offline-install gate (`--network none` Docker) to enforce this guarantee (NFR54).
@@ -937,7 +952,7 @@ ma-agents/
937
952
  │ │ ├── clinerules.template.md # .clinerules expansion for Cline
938
953
  │ │ └── project-context.template.md # project-context.md generation template
939
954
  │ ├── bmad-customize/ # Source-of-truth: per-persona phase / on_prem_phase_prefix YAML (consumed by the post-install marker-block injector)
940
- │ ├── bmad-cache/ # Pre-bundled BMAD external modules (bmb, cis, gds, tea)
955
+ │ ├── bmad-cache/ # Pre-bundled BMAD external modules (bmb, cis, tea)
941
956
  │ ├── bmad-customizations/ # BMAD persona templates (.md) and YAML configs
942
957
  │ ├── bmad-extension/ # Extension source: sprint management, bug tracking, agent skills (hand-edited)
943
958
  │ ├── bmad-extension-plugin/ # Generated plugin bundle (deterministic; built from bmad-extension/ via scripts/build-plugin.js)
package/bin/cli.js CHANGED
@@ -157,10 +157,14 @@ ${chalk.bold('Install options:')}
157
157
  ${chalk.cyan('--yes')} Skip all prompts, use defaults (for CI/CD)
158
158
  ${chalk.cyan('--agent <name>')} Target a specific agent (skip agent selection)
159
159
  ${chalk.cyan('--bmad-modules [csv]')} Control BMAD module selection.
160
- Bare: open a multiselect prompt
160
+ Bare: open a multiselect prompt (offers every
161
+ bundled module: bmm, tea, bmb, cis)
161
162
  With CSV: install exactly those (e.g. tea,bmb)
162
- Omitted: install every non-retired module (default)
163
- 'bmm' is always force-included.
163
+ Omitted: install bmm,tea,bmb,cis (default)
164
+ 'bmm' is always force-included. The design-studio
165
+ modules gds and wds are not bundled and cannot be
166
+ installed by ma-agents; getting either one needs
167
+ network access to its upstream repository.
164
168
  ${chalk.cyan('--bmad-custom-source <ref>')} Enumerate extensions from ONE custom
165
169
  marketplace repo (local path or Git URL containing
166
170
  .claude-plugin/marketplace.json) and offer them in
@@ -347,7 +351,7 @@ function parseFlags(args) {
347
351
  // --bmad-modules — controls BMad module selection. Optional-value flag:
348
352
  // bare → ask the user via multiselect prompt
349
353
  // with CSV → install exactly those (bmm force-prepended, unknowns rejected)
350
- // not present → install all non-retired modules (no prompt)
354
+ // not present → install FR123's default set, bmm+tea+bmb+cis (no prompt)
351
355
  // Force-prepending of `bmm` and validation of unknown ids is handled
352
356
  // centrally by lib/bmad.resolveBmadModules.
353
357
  let bmadModulesFlag = '';
@@ -3671,18 +3675,28 @@ async function collectSprintManagementLocation(concern, existingRecord) {
3671
3675
  *
3672
3676
  * Three branches:
3673
3677
  * 1. `--bmad-modules <csv>` → install exactly those (bmm force-prepended,
3674
- * unknowns rejected with a clear error)
3675
- * 2. `--bmad-modules` bare → multiselect prompt; bmm is required and
3676
- * pre-checked, others default-checked so a no-op confirmation matches
3677
- * the no-flag default
3678
- * 3. (no flag) → install every non-retired module from the
3679
- * cache manifest, no prompt — restores the originally-intended
3680
- * behavior that the hardcoded ['bmm'] literal had been suppressing
3678
+ * unknowns rejected with a clear error). `gds`/`wds` are not bundled
3679
+ * (FR75), so naming either one is an unknown-module error.
3680
+ * 2. `--bmad-modules` bare → multiselect prompt; EVERY bundled module is
3681
+ * offered, bmm is required and pre-checked, and the remaining initial
3682
+ * check state is the FR123 default set — so a no-op confirmation lands
3683
+ * on exactly the same modules as branch 3.
3684
+ * 3. (no flag) → no prompt. In order: a persisted selection
3685
+ * from a prior run (bug 27.13), else the modules already present under
3686
+ * `_bmad/`, else `bmad.getDefaultBmadModules()` — FR123's default set,
3687
+ * bmm + tea + bmb + cis.
3688
+ *
3689
+ * BRANCH 3 IS A NAMED LITERAL, NOT "EVERY NON-RETIRED MODULE" (FR123).
3690
+ * Deriving the default from the manifest made it grow silently every time a
3691
+ * module was bundled; naming the members means the next bundled module has to
3692
+ * be added on purpose. The bundled set and the default set currently coincide,
3693
+ * so branches 2 and 3 land on the same modules — but they are still two
3694
+ * different decisions and the literal keeps them apart.
3681
3695
  *
3682
3696
  * `bmm` is force-included in every path because the BMad core agents
3683
3697
  * (analyst, PM, dev, architect, ...) live there and downstream skills
3684
- * break without them. Retired modules (currently only `wds`) are filtered
3685
- * out unconditionally.
3698
+ * break without them. Retired modules (none at v6.10.0) are filtered out
3699
+ * unconditionally.
3686
3700
  */
3687
3701
  async function selectBmadModules({ bmadModulesFlag, bmadModulesPrompt, projectRoot } = {}) {
3688
3702
  const installable = bmad.getInstallableBmadModules().filter(m => !m.retired);
@@ -3712,15 +3726,22 @@ async function selectBmadModules({ bmadModulesFlag, bmadModulesPrompt, projectRo
3712
3726
 
3713
3727
  // Branch 2: bare --bmad-modules → multiselect prompt.
3714
3728
  if (bmadModulesPrompt) {
3729
+ // FR123: every bundled module is OFFERED, and the initial check state is
3730
+ // the default INSTALL set, so pressing Enter without touching anything
3731
+ // lands on the same modules as the no-flag branch below. The offered list
3732
+ // is `getInstallableBmadModules()`, i.e. the cache manifest — a module
3733
+ // that is not bundled (`gds`/`wds`, FR75) is not offered here, because
3734
+ // offering something this package cannot install would be a lie.
3735
+ const defaultIds = new Set(bmad.getDefaultBmadModules(installable));
3715
3736
  const choices = installable.map(m => {
3716
3737
  const isCore = m.id === 'bmm';
3717
3738
  const requiredTag = isCore ? chalk.yellow(' (required)') : '';
3718
3739
  return {
3719
3740
  title: chalk.white(m.id) + requiredTag + chalk.gray(` — ${m.description}`),
3720
3741
  value: m.id,
3721
- // Default-check everything so hitting Enter matches the no-flag
3722
- // "install all" default. Users uncheck what they want to skip.
3723
- selected: true,
3742
+ // bmm is force-included downstream regardless; pre-checking it keeps
3743
+ // the prompt honest about that.
3744
+ selected: isCore || defaultIds.has(m.id),
3724
3745
  };
3725
3746
  });
3726
3747
 
@@ -3740,22 +3761,52 @@ async function selectBmadModules({ bmadModulesFlag, bmadModulesPrompt, projectRo
3740
3761
  return persist(bmad.resolveBmadModules({ requested: chosenModules, available: installable }));
3741
3762
  }
3742
3763
 
3743
- // Branch 3: no flag → use the persisted selection from a prior run if present
3744
- // (bug 27.13 — a previous deselection must survive); otherwise fall back to
3745
- // the original "install every available module" default. The persisted set is
3746
- // intersected with the currently-installable set so a since-retired module
3747
- // does not resurface, and bmm is force-included via resolveBmadModules.
3764
+ // Branch 3: no flag. Three fallbacks, most-specific first.
3765
+ const availableIds = new Set(installable.map(m => m.id));
3766
+
3767
+ // 3a — a persisted selection from a prior run (bug 27.13): a previous
3768
+ // deselection must survive. Intersected with the currently-installable set so
3769
+ // a since-retired module does not resurface; bmm is force-included via
3770
+ // resolveBmadModules.
3748
3771
  const persisted = getBmadModules(root);
3749
3772
  if (persisted && persisted.length > 0) {
3750
- const availableIds = new Set(installable.map(m => m.id));
3751
3773
  const stillInstallable = persisted.filter(id => availableIds.has(id));
3752
3774
  try {
3753
3775
  return persist(bmad.resolveBmadModules({ requested: stillInstallable, available: installable }));
3754
3776
  } catch {
3755
- // If the persisted set somehow fails validation, fall through to default.
3777
+ // If the persisted set somehow fails validation, fall through.
3756
3778
  }
3757
3779
  }
3758
- return persist(installable.map(m => m.id));
3780
+
3781
+ // 3b — NON-DESTRUCTIVE MIGRATION. The narrowed default (FR123) is
3782
+ // behaviour-visible to projects that installed under an older, wider
3783
+ // default, and an update run passes this same resolved list to
3784
+ // `bmad.updateBmad`. A project that already has a module under `_bmad/`
3785
+ // must not have it dropped out of its own module list just because the
3786
+ // default moved — narrowing applies to NEW installs, not to existing ones.
3787
+ //
3788
+ // 3a covers projects installed since bug 27.13 landed persistence; this
3789
+ // covers the ones installed before it, where `.ma-agents.json` carries no
3790
+ // `bmadModules` field at all and disk is the only record of what was chosen.
3791
+ // A fresh project has no `_bmad/`, so this is inert for new installs — which
3792
+ // is exactly the "existing installs unchanged, only NEW installs get the
3793
+ // narrower default" posture NFR49 / Story 30.4 established for Demerzel.
3794
+ // Persisting the result also migrates the project onto 27.13's durable
3795
+ // record, so this disk probe is needed at most once per project.
3796
+ const alreadyInstalled = bmad.getInstalledBmadModules(root).filter(id => availableIds.has(id));
3797
+ if (alreadyInstalled.length > 0) {
3798
+ try {
3799
+ return persist(bmad.resolveBmadModules({ requested: alreadyInstalled, available: installable }));
3800
+ } catch {
3801
+ // Fall through to the default set.
3802
+ }
3803
+ }
3804
+
3805
+ // 3c — a genuinely fresh install: FR123's amended default set.
3806
+ return persist(bmad.resolveBmadModules({
3807
+ requested: bmad.getDefaultBmadModules(installable),
3808
+ available: installable,
3809
+ }));
3759
3810
  }
3760
3811
 
3761
3812
  // --- Custom marketplace source (Story 30.6a) ---
@@ -4408,10 +4459,9 @@ async function installWizard(preselectedSkill, preselectedAgents, customPath, fo
4408
4459
  // stage the plugin and invoke the installer in one pass.
4409
4460
  // v6.6.0: --tools none is rejected for fresh installs; skip BMAD entirely when no IDE tools selected.
4410
4461
  if (bmadTools.length > 0) {
4411
- // Resolve module set once per BMAD invocation. Default is "install
4412
- // every non-retired module"; users opt into a specific subset with
4413
- // --bmad-modules <csv> or open a multiselect prompt with --bmad-modules
4414
- // (bare).
4462
+ // Resolve module set once per BMAD invocation. Default (FR123) is
4463
+ // bmm+tea+bmb+cis, which is the whole bundled set; `--bmad-modules <csv>`
4464
+ // or the multiselect that bare --bmad-modules opens can narrow it.
4415
4465
  const bmadModules = await selectBmadModules({
4416
4466
  bmadModulesFlag,
4417
4467
  bmadModulesPrompt,
@@ -199,7 +199,7 @@ skills/<skill-name>/
199
199
 
200
200
  **Responsibility**: Pre-vendor BMAD's external modules so installs never touch the network.
201
201
 
202
- ma-agents bundles bmad-method as an npm dependency **and** pre-clones BMAD's external modules (`tea`, `bmb`, `cis`, `gds`) into `lib/bmad-cache/` at build time via `npm run build:bmad-cache` ([scripts/build-bmad-cache.js](../scripts/build-bmad-cache.js)). This is what lets `npx ma-agents install` run fully offline in air-gapped environments (NFR2/NFR50/NFR54) — the npm tarball already contains every module bmad-method would otherwise `git clone` from GitHub at install time.
202
+ ma-agents bundles bmad-method as an npm dependency **and** pre-clones BMAD's external modules (`tea`, `bmb`, `cis`) into `lib/bmad-cache/` at build time via `npm run build:bmad-cache` ([scripts/build-bmad-cache.js](../scripts/build-bmad-cache.js)). This is what lets `npx ma-agents install` run fully offline in air-gapped environments (NFR2/NFR50/NFR54) — the npm tarball already contains every module bmad-method would otherwise `git clone` from GitHub at install time.
203
203
 
204
204
  **Module discovery**: the builder reads BMAD's bundled module registry to learn which external modules to clone. **The registry source has moved across BMAD versions** and the reader must track it:
205
205
 
@@ -209,7 +209,7 @@ ma-agents bundles bmad-method as an npm dependency **and** pre-clones BMAD's ext
209
209
  | 6.3.0 – 6.6.x | `tools/installer/modules/registry-fallback.yaml` | YAML |
210
210
  | 6.8.0+ | `bmad-modules.yaml` (bmad-method **package root**) | YAML (`modules:` map; the in-package `registry-fallback.yaml` was retired in 6.7.0) |
211
211
 
212
- The registry has stayed **YAML** throughout — only its path has moved. (`tools/installer/modules/official-modules.js` is unchanged loader code that reads this YAML; it does not contain the module list.) Modules are classified by a `type` field: `type: bmad-org` modules are bundled (**tea, bmb, cis, gds, wds**) and `type: experimental` modules are excluded (currently `automator`). `bmm`/`core` are built-in (loaded from bmad-method's local `module.yaml`, absent from the registry) and are never cloned. The reader for the current pin and its fail-loud contract are defined by Architecture Decision **P5-5** (Epic 27) in `_bmad-output/planning-artifacts/architecture.md`. A companion build step, `npm run build:plugin` ([scripts/build-plugin.js](../scripts/build-plugin.js)), assembles the ma-agents extension plugin bundle (`lib/bmad-extension-plugin/`) deterministically; a CI Bundle Drift Guard enforces that the committed bundle matches a fresh build.
212
+ The registry has stayed **YAML** throughout — only its path has moved. (`tools/installer/modules/official-modules.js` is unchanged loader code that reads this YAML; it does not contain the module list.) The bundle is governed by a closed allowlist, `KNOWN_BUNDLED_MODULES` = **tea, bmb, cis** (FR235); every other registry entry is excluded whatever its `type`, including `type: experimental` (currently `automator`), the `marketplace-plugin` module `bmad-loop`, and the two design-studio modules `gds`/`wds`, which FR75 does not bundle. `bmm`/`core` are built-in (loaded from bmad-method's local `module.yaml`, absent from the registry) and are never cloned. The reader for the current pin and its fail-loud contract are defined by Architecture Decision **P5-5** (Epic 27) in `_bmad-output/planning-artifacts/architecture.md`. A companion build step, `npm run build:plugin` ([scripts/build-plugin.js](../scripts/build-plugin.js)), assembles the ma-agents extension plugin bundle (`lib/bmad-extension-plugin/`) deterministically; a CI Bundle Drift Guard enforces that the committed bundle matches a fresh build.
213
213
 
214
214
  > **Maintenance note:** because the registry path has now moved twice (YAML→YAML→YAML at three locations), the cache builder fails loud — if the resolved `type: bmad-org` set is smaller than the known bundled set, or no module source is found, it exits non-zero rather than producing a thin/empty cache, so a future BMAD registry move surfaces at build time, not as a broken air-gapped install.
215
215
 
@@ -294,11 +294,20 @@ All 11 BMAD agents have enforcement via `critical_actions` in `.customize.yaml`
294
294
  **Mechanism:**
295
295
  ```yaml
296
296
  critical_actions:
297
- 1: "Read the skills MANIFEST at {project-root}/_bmad/skills/MANIFEST.yaml"
297
+ 1: "Read the skills MANIFEST at {project-root}/_bmad/skills/<agent-slug>/MANIFEST.yaml if it exists"
298
298
  2: "For each skill marked always_load: true, read the skill file completely"
299
299
  3: "Follow all skill directives during this session"
300
300
  ```
301
301
 
302
+ > **Note (2026-09-12):** this snippet previously showed a bare
303
+ > `{project-root}/_bmad/skills/MANIFEST.yaml`. That path is not what Story 8.3
304
+ > specified — the manifest is per-agent-host, at
305
+ > `{project-root}/_bmad/skills/<agent-slug>/MANIFEST.yaml`, where `<agent-slug>`
306
+ > matches the `skillsDir` in `lib/agents.js` (`sre`, `devops`, `cyber`, `sqa`).
307
+ > The bare form leaked from here into `ma-agent-sqa`'s Critical Actions block and
308
+ > survived there until it was corrected. Keep the slug segment in any copy of this
309
+ > snippet.
310
+
302
311
  **Deployment:** Extension module at `_bmad/extensions/ma-agents-skills/` deployed during BMAD customization pipeline (Stage 3 in `bmad.js`).
303
312
 
304
313
  **Coverage:**
package/lib/agents.js CHANGED
@@ -242,8 +242,27 @@ const agents = [
242
242
  version: '1.0.0',
243
243
  category: 'ide',
244
244
  description: 'Google Deepmind Antigravity Agent',
245
- skillsDir: '.antigravity/skills',
246
- getProjectPath: () => path.join(process.cwd(), '.antigravity', 'skills'),
245
+ // Bug `antigravity-path-divergence`: this used to read `.antigravity/skills`,
246
+ // a path ma-agents invented from its own per-tool naming convention. Upstream
247
+ // bmad-method maps the SAME tool to `.agent/skills`
248
+ // (node_modules/bmad-method/tools/installer/ide/platform-codes.yaml, platform
249
+ // `antigravity`, in a file whose header records the paths as "verified against
250
+ // each tool's primary docs"; its global counterpart `~/.gemini/antigravity/skills`
251
+ // shows the entry was researched rather than guessed). Because ma-agents
252
+ // delegates part of the install to that installer, a single run produced TWO
253
+ // trees — and `.agent/skills`, the one Antigravity actually reads, was named by
254
+ // neither this registry nor lib/bmad.js, so every ma-agents post-deploy patch
255
+ // (the on-prem phase prefix among them) silently skipped it. Measured in a real
256
+ // on-prem project: .claude/.agents/.cline each carried the prefix on 6 personas,
257
+ // .agent/skills on 0.
258
+ // Upstream is the authority on which directory a tool reads, so we align —
259
+ // exactly as copilot/roo-code/kilocode were aligned to `.agents/skills` when
260
+ // bmad-method 6.5.0 moved them (see the copilot entry above). This is a
261
+ // per-tool decision on per-tool evidence: the other three divergences in the
262
+ // table are recorded in PLATFORM_PATH_DIVERGENCES below, deliberately unchanged.
263
+ // Existing installs migrate via OBSOLETE_TOOL_SKILL_DIRS in lib/installer.js.
264
+ skillsDir: '.agent/skills',
265
+ getProjectPath: () => path.join(process.cwd(), '.agent', 'skills'),
247
266
  getGlobalPath: () => {
248
267
  const platform = os.platform();
249
268
  if (platform === 'win32') {
@@ -356,6 +375,64 @@ const agents = [
356
375
  // Add them here in a dedicated future story if/when demand appears.
357
376
  ];
358
377
 
378
+ /**
379
+ * Declared, deliberate divergences between this registry's project `skillsDir`
380
+ * and bmad-method's `installer.target_dir` for the SAME tool
381
+ * (`node_modules/bmad-method/tools/installer/ide/platform-codes.yaml`).
382
+ * Keyed by bmad platform code (see `getBmadPlatformCode`).
383
+ *
384
+ * Why this exists (bug `antigravity-path-divergence`): the two tables had drifted
385
+ * apart for four tools and nothing compared them outside the five flagships, so a
386
+ * whole second skill tree appeared in real projects with no owner and no patcher.
387
+ * `test/routing-parity.test.js` (section 5) now enumerates EVERY tool in BOTH
388
+ * tables and fails on any divergence that is not declared here — and on any
389
+ * declaration whose recorded paths have gone stale, so an entry cannot rot into
390
+ * cover for a different divergence.
391
+ *
392
+ * Scope note — PROJECT paths only. `getGlobalPath()` follows a per-OS
393
+ * application-data convention that differs from upstream's `global_target_dir`
394
+ * for EVERY tool, claude-code included (`%APPDATA%/Claude/skills` vs
395
+ * `~/.claude/skills`). That is a whole-table convention difference, not a
396
+ * per-tool divergence, and is deliberately out of scope here.
397
+ *
398
+ * To add an entry you must record BOTH live paths and a real reason. To remove
399
+ * one, align the paths — the test fails on a declaration whose paths now agree.
400
+ */
401
+ const PLATFORM_PATH_DIVERGENCES = Object.freeze({
402
+ gemini: Object.freeze({
403
+ maSkillsDir: '.gemini/skills',
404
+ bmadTargetDir: '.agents/skills',
405
+ reason:
406
+ "Upstream's `gemini` platform is the Gemini CLI, which reads the shared " +
407
+ '`.agents/skills` tree; this registry entry targets Google Gemini Code Assist ' +
408
+ '(the IDE extension — note its instruction file `.gemini/gemini.md`), a ' +
409
+ 'different product sharing the same code. Contained: upstream writes ' +
410
+ '`.agents/skills`, which is already an IDE skillsDir in this registry, already ' +
411
+ 'a seed in lib/bmad.js TOOL_SKILL_DIRS, and already reconciled by bug 27.16 — ' +
412
+ 'so no tree goes unpatched. Realigning is a compatibility call for its own story.'
413
+ }),
414
+ cursor: Object.freeze({
415
+ maSkillsDir: '.cursor/skills',
416
+ bmadTargetDir: '.agents/skills',
417
+ reason:
418
+ 'Cursor reads its own `.cursor/` workspace directory (this registry also stamps ' +
419
+ '`.cursor/cursor.md` there); upstream routes it to the shared `.agents/skills` ' +
420
+ 'cross-tool tree instead. Contained for the same reason as `gemini`: upstream ' +
421
+ "'s target is already a known, patched and reconciled tree. Kept deliberately " +
422
+ 'so this bug fix changes the write path of exactly one tool, on that tool’s evidence.'
423
+ }),
424
+ opencode: Object.freeze({
425
+ maSkillsDir: '.opencode/skills',
426
+ bmadTargetDir: '.agents/skills',
427
+ reason:
428
+ 'OpenCode is wired here through `opencode.json::instructions[]` plus AGENTS.md ' +
429
+ '(Story 21.4) against its own `.opencode/` tree; upstream routes it to the shared ' +
430
+ '`.agents/skills`. Contained for the same reason as `gemini` and `cursor`: ' +
431
+ "upstream's target is already a known, patched and reconciled tree. Realignment " +
432
+ 'would also have to move the instruction wiring, so it belongs in its own story.'
433
+ })
434
+ });
435
+
359
436
  function getAgent(agentId) {
360
437
  return agents.find(a => a.id === agentId);
361
438
  }
@@ -383,5 +460,6 @@ module.exports = {
383
460
  getAgent,
384
461
  getAllAgents,
385
462
  getAgentsByCategory,
386
- getBmadPlatformCode
463
+ getBmadPlatformCode,
464
+ PLATFORM_PATH_DIVERGENCES
387
465
  };
@@ -20,18 +20,6 @@
20
20
  "branch": "main",
21
21
  "commitSha": "07a8dd03d196a762f21c241d985293fe5b0f90e7",
22
22
  "clonedAt": "2026-06-13T15:11:42.507Z"
23
- },
24
- "gds": {
25
- "url": "https://github.com/bmad-code-org/bmad-module-game-dev-studio.git",
26
- "branch": "main",
27
- "commitSha": "46c3a6cddf882af1f918187d6e5748c1edfd9c52",
28
- "clonedAt": "2026-06-13T15:11:43.930Z"
29
- },
30
- "wds": {
31
- "url": "https://github.com/bmad-code-org/bmad-method-wds-expansion",
32
- "branch": "main",
33
- "commitSha": "cc16f09fcfab26d35635af1491f36a38a8431c8d",
34
- "clonedAt": "2026-06-13T15:11:45.601Z"
35
23
  }
36
24
  }
37
25
  }
@@ -43,7 +43,7 @@ You must fully embody this agent's persona and follow all activation instruction
43
43
  | 6 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
44
44
 
45
45
  ## Critical Actions
46
- 1. Read the skills MANIFEST at {project-root}/_bmad/skills/cyber/MANIFEST.yaml
47
- 2. For each skill marked always_load: true, read the skill file completely
46
+ 1. Read the skills MANIFEST at {project-root}/_bmad/skills/cyber/MANIFEST.yaml if it exists
47
+ 2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
48
48
  3. If _bmad-output/project-context.md exists, read it completely
49
49
  4. Follow all skill directives and project-context rules during this session
@@ -43,7 +43,7 @@ You must fully embody this agent's persona and follow all activation instruction
43
43
  | 6 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
44
44
 
45
45
  ## Critical Actions
46
- 1. Read the skills MANIFEST at {project-root}/_bmad/skills/devops/MANIFEST.yaml
47
- 2. For each skill marked always_load: true, read the skill file completely
46
+ 1. Read the skills MANIFEST at {project-root}/_bmad/skills/devops/MANIFEST.yaml if it exists
47
+ 2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
48
48
  3. If _bmad-output/project-context.md exists, read it completely
49
49
  4. Follow all skill directives and project-context rules during this session
@@ -53,7 +53,7 @@ You must fully embody this agent's persona and follow all activation instruction
53
53
  | 14 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
54
54
 
55
55
  ## Critical Actions
56
- 1. Read the skills MANIFEST at {project-root}/_bmad/skills/MANIFEST.yaml
57
- 2. For each skill marked always_load: true, read the skill file completely
56
+ 1. Read the skills MANIFEST at {project-root}/_bmad/skills/sqa/MANIFEST.yaml if it exists
57
+ 2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
58
58
  3. If _bmad-output/project-context.md exists, read it completely
59
59
  4. Follow all skill directives and project-context rules during this session
@@ -43,7 +43,7 @@ You must fully embody this agent's persona and follow all activation instruction
43
43
  | 6 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
44
44
 
45
45
  ## Critical Actions
46
- 1. Read the skills MANIFEST at {project-root}/_bmad/skills/sre/MANIFEST.yaml
47
- 2. For each skill marked always_load: true, read the skill file completely
46
+ 1. Read the skills MANIFEST at {project-root}/_bmad/skills/sre/MANIFEST.yaml if it exists
47
+ 2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
48
48
  3. If _bmad-output/project-context.md exists, read it completely
49
49
  4. Follow all skill directives and project-context rules during this session
@@ -37,7 +37,7 @@
37
37
  "name": "ma-skills",
38
38
  "source": "./",
39
39
  "description": "ma-agents extension module providing enterprise SDLC personas and operational workflow skills.",
40
- "version": "3.18.0-beta.1",
40
+ "version": "3.18.0-beta.3",
41
41
  "author": {
42
42
  "name": "Alon Mayaffit"
43
43
  },
@@ -43,7 +43,7 @@ You must fully embody this agent's persona and follow all activation instruction
43
43
  | 6 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
44
44
 
45
45
  ## Critical Actions
46
- 1. Read the skills MANIFEST at {project-root}/_bmad/skills/cyber/MANIFEST.yaml
47
- 2. For each skill marked always_load: true, read the skill file completely
46
+ 1. Read the skills MANIFEST at {project-root}/_bmad/skills/cyber/MANIFEST.yaml if it exists
47
+ 2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
48
48
  3. If _bmad-output/project-context.md exists, read it completely
49
49
  4. Follow all skill directives and project-context rules during this session
@@ -43,7 +43,7 @@ You must fully embody this agent's persona and follow all activation instruction
43
43
  | 6 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
44
44
 
45
45
  ## Critical Actions
46
- 1. Read the skills MANIFEST at {project-root}/_bmad/skills/devops/MANIFEST.yaml
47
- 2. For each skill marked always_load: true, read the skill file completely
46
+ 1. Read the skills MANIFEST at {project-root}/_bmad/skills/devops/MANIFEST.yaml if it exists
47
+ 2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
48
48
  3. If _bmad-output/project-context.md exists, read it completely
49
49
  4. Follow all skill directives and project-context rules during this session
@@ -53,7 +53,7 @@ You must fully embody this agent's persona and follow all activation instruction
53
53
  | 14 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
54
54
 
55
55
  ## Critical Actions
56
- 1. Read the skills MANIFEST at {project-root}/_bmad/skills/MANIFEST.yaml
57
- 2. For each skill marked always_load: true, read the skill file completely
56
+ 1. Read the skills MANIFEST at {project-root}/_bmad/skills/sqa/MANIFEST.yaml if it exists
57
+ 2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
58
58
  3. If _bmad-output/project-context.md exists, read it completely
59
59
  4. Follow all skill directives and project-context rules during this session
@@ -43,7 +43,7 @@ You must fully embody this agent's persona and follow all activation instruction
43
43
  | 6 | DA | Dismiss Agent | "dismiss", "exit", "quit" | _(built-in)_ |
44
44
 
45
45
  ## Critical Actions
46
- 1. Read the skills MANIFEST at {project-root}/_bmad/skills/sre/MANIFEST.yaml
47
- 2. For each skill marked always_load: true, read the skill file completely
46
+ 1. Read the skills MANIFEST at {project-root}/_bmad/skills/sre/MANIFEST.yaml if it exists
47
+ 2. For each skill marked always_load: true, read the skill file completely (only if that MANIFEST was read; if it was not, skip this step)
48
48
  3. If _bmad-output/project-context.md exists, read it completely
49
49
  4. Follow all skill directives and project-context rules during this session