fix(installer): rename automator module code to baut

This commit is contained in:
bmad 2026-05-07 21:36:36 -03:00
parent a89b405008
commit 68f6bf223a
No known key found for this signature in database
GPG Key ID: D5BF902A907D3EB6
5 changed files with 16 additions and 16 deletions

View File

@ -31,7 +31,7 @@ npx bmad-method install
The interactive flow asks you five things: The interactive flow asks you five things:
1. Installation directory (defaults to the current working directory) 1. Installation directory (defaults to the current working directory)
2. Which modules to install (checkboxes for core, bmm, bmb, cis, gds, tea, bma) 2. Which modules to install (checkboxes for core, bmm, bmb, cis, gds, tea, baut)
3. **"Ready to install (all stable)?"** — Yes accepts the latest released tag for every external module 3. **"Ready to install (all stable)?"** — Yes accepts the latest released tag for every external module
4. Which AI tools/IDEs to integrate with (claude-code, cursor, and others) 4. Which AI tools/IDEs to integrate with (claude-code, cursor, and others)
5. Per-module config (name, language, output folder) 5. Per-module config (name, language, output folder)
@ -39,9 +39,9 @@ The interactive flow asks you five things:
Accept the defaults and you land on the latest stable release of every module, configured for your chosen tool. Accept the defaults and you land on the latest stable release of every module, configured for your chosen tool.
:::caution[BMad Automator constraints] :::caution[BMad Automator constraints]
`bma` installs runnable Automator skills only for the Claude Code entrypoint. Codex is supported as a worker target only, and worker sessions currently require `tmux` on macOS. `baut` installs runnable Automator skills only for the Claude Code entrypoint. Codex is supported as a worker target only, and worker sessions currently require `tmux` on macOS.
While experimental, `bma` defaults to the `next` channel so installs pick up the latest Automator payload compatibility fixes. While experimental, `baut` defaults to the `next` channel so installs pick up the latest Automator payload compatibility fixes.
::: :::
:::tip[Just want the newest prerelease?] :::tip[Just want the newest prerelease?]
@ -59,7 +59,7 @@ Two independent axes control what ends up on disk.
### Axis 1: external module channels ### Axis 1: external module channels
Every external module — bmb, cis, gds, tea, bma, and any community module — installs on one of three channels: Every external module — bmb, cis, gds, tea, baut, and any community module — installs on one of three channels:
| Channel | What gets installed | Who picks this | | Channel | What gets installed | Who picks this |
| ------------------ | ---------------------------------------------------------------------------- | --------------------------------------- | | ------------------ | ---------------------------------------------------------------------------- | --------------------------------------- |

View File

@ -75,7 +75,7 @@ Enterprise-grade test strategy, automation guidance, and release gate decisions
Automates the BMad story build loop with a pure skill bundle sourced from the separate Automator repository. Automates the BMad story build loop with a pure skill bundle sourced from the separate Automator repository.
- **Code:** `bma` - **Code:** `baut`
- **npm:** [`bmad-story-automator`](https://www.npmjs.com/package/bmad-story-automator) - **npm:** [`bmad-story-automator`](https://www.npmjs.com/package/bmad-story-automator)
- **GitHub:** [bmad-code-org/bmad-automator](https://github.com/bmad-code-org/bmad-automator) - **GitHub:** [bmad-code-org/bmad-automator](https://github.com/bmad-code-org/bmad-automator)
- **Default channel:** `next` while experimental, so installs receive the latest Automator payload compatibility fixes. - **Default channel:** `next` while experimental, so installs receive the latest Automator payload compatibility fixes.

View File

@ -96,8 +96,8 @@ async function createAutomatorBmadFixture() {
[ [
'canonicalId,name,description,module,path', 'canonicalId,name,description,module,path',
'"bmad-master","bmad-master","Minimal core skill","core","_bmad/core/bmad-master/SKILL.md"', '"bmad-master","bmad-master","Minimal core skill","core","_bmad/core/bmad-master/SKILL.md"',
'"bmad-story-automator","bmad-story-automator","Automator skill","bma","_bmad/bma/bmad-story-automator/SKILL.md"', '"bmad-story-automator","bmad-story-automator","Automator skill","baut","_bmad/baut/bmad-story-automator/SKILL.md"',
'"bmad-story-automator-review","bmad-story-automator-review","Automator review skill","bma","_bmad/bma/bmad-story-automator-review/SKILL.md"', '"bmad-story-automator-review","bmad-story-automator-review","Automator review skill","baut","_bmad/baut/bmad-story-automator-review/SKILL.md"',
'', '',
].join('\n'), ].join('\n'),
); );
@ -110,7 +110,7 @@ async function createAutomatorBmadFixture() {
); );
for (const skillName of ['bmad-story-automator', 'bmad-story-automator-review']) { for (const skillName of ['bmad-story-automator', 'bmad-story-automator-review']) {
const skillDir = path.join(fixtureDir, 'bma', skillName); const skillDir = path.join(fixtureDir, 'baut', skillName);
await fs.ensureDir(skillDir); await fs.ensureDir(skillDir);
await fs.writeFile( await fs.writeFile(
path.join(skillDir, 'SKILL.md'), path.join(skillDir, 'SKILL.md'),
@ -3589,7 +3589,7 @@ async function runTests() {
let runtimeTargetRoot42; let runtimeTargetRoot42;
try { try {
const externalManager42 = new ExternalModuleManager(); const externalManager42 = new ExternalModuleManager();
const automatorInfo42 = await externalManager42.getModuleByCode('bma'); const automatorInfo42 = await externalManager42.getModuleByCode('baut');
assert(automatorInfo42 !== null, 'BMad Automator is registered as an external module'); assert(automatorInfo42 !== null, 'BMad Automator is registered as an external module');
assert(automatorInfo42.type === 'experimental', 'BMad Automator is marked experimental'); assert(automatorInfo42.type === 'experimental', 'BMad Automator is marked experimental');
assert(automatorInfo42.sourceRoot === 'payload/.claude/skills', 'BMad Automator uses source-root for pure skill payload'); assert(automatorInfo42.sourceRoot === 'payload/.claude/skills', 'BMad Automator uses source-root for pure skill payload');
@ -3626,13 +3626,13 @@ async function runTests() {
const runtimeBmadDir42 = path.join(runtimeTargetRoot42, '_bmad'); const runtimeBmadDir42 = path.join(runtimeTargetRoot42, '_bmad');
const officialModules42 = new OfficialModules(); const officialModules42 = new OfficialModules();
officialModules42.findModuleSource = async () => automatorSourceFixture42.sourceRoot; officialModules42.findModuleSource = async () => automatorSourceFixture42.sourceRoot;
await officialModules42.install('bma', runtimeBmadDir42, null, { skipModuleInstaller: true, silent: true }); await officialModules42.install('baut', runtimeBmadDir42, null, { skipModuleInstaller: true, silent: true });
assert( assert(
await fs.pathExists(path.join(runtimeBmadDir42, 'bma', 'bmad-story-automator', 'scripts', 'story-automator')), await fs.pathExists(path.join(runtimeBmadDir42, 'baut', 'bmad-story-automator', 'scripts', 'story-automator')),
'BMad Automator source-root install includes runtime helper', 'BMad Automator source-root install includes runtime helper',
); );
assert( assert(
await fs.pathExists(path.join(runtimeBmadDir42, 'bma', 'bmad-story-automator', 'src', 'story_automator', 'cli.py')), await fs.pathExists(path.join(runtimeBmadDir42, 'baut', 'bmad-story-automator', 'src', 'story_automator', 'cli.py')),
'BMad Automator source-root install includes Python runtime source', 'BMad Automator source-root install includes Python runtime source',
); );
await fs.remove(runtimeTargetRoot42).catch(() => {}); await fs.remove(runtimeTargetRoot42).catch(() => {});
@ -3646,7 +3646,7 @@ async function runTests() {
const codexResult42 = await ideManager42.setup('codex', tempProjectDir42, installedBmadDir42, { const codexResult42 = await ideManager42.setup('codex', tempProjectDir42, installedBmadDir42, {
silent: true, silent: true,
selectedModules: ['core', 'bma'], selectedModules: ['core', 'baut'],
}); });
assert(codexResult42.success === true, 'Codex setup succeeds with automator module selected'); assert(codexResult42.success === true, 'Codex setup succeeds with automator module selected');
assert( assert(
@ -3684,7 +3684,7 @@ async function runTests() {
const claudeResult42 = await ideManager42.setup('claude-code', tempProjectDir42, installedBmadDir42, { const claudeResult42 = await ideManager42.setup('claude-code', tempProjectDir42, installedBmadDir42, {
silent: true, silent: true,
selectedModules: ['core', 'bma'], selectedModules: ['core', 'baut'],
}); });
assert(claudeResult42.success === true, 'Claude Code setup succeeds with automator module selected'); assert(claudeResult42.success === true, 'Claude Code setup succeeds with automator module selected');
assert( assert(

View File

@ -574,7 +574,7 @@ class OfficialModules {
} }
async copyAutomatorRuntimeIfNeeded(moduleName, sourcePath, targetPath, fileTrackingCallback = null) { async copyAutomatorRuntimeIfNeeded(moduleName, sourcePath, targetPath, fileTrackingCallback = null) {
if (moduleName !== 'bma') return; if (moduleName !== 'baut') return;
const storyTarget = path.join(targetPath, 'bmad-story-automator'); const storyTarget = path.join(targetPath, 'bmad-story-automator');
if (!(await fs.pathExists(path.join(storyTarget, 'SKILL.md')))) return; if (!(await fs.pathExists(path.join(storyTarget, 'SKILL.md')))) return;

View File

@ -54,7 +54,7 @@ modules:
bmad-automator: bmad-automator:
url: https://github.com/bmad-code-org/bmad-automator url: https://github.com/bmad-code-org/bmad-automator
source-root: payload/.claude/skills source-root: payload/.claude/skills
code: bma code: baut
name: "BMad Automator (Experimental)" name: "BMad Automator (Experimental)"
description: "Experimental pure-skill story automation. Runs only from Claude Code; supports Claude Code and Codex worker sessions; requires tmux on macOS." description: "Experimental pure-skill story automation. Runs only from Claude Code; supports Claude Code and Codex worker sessions; requires tmux on macOS."
defaultSelected: false defaultSelected: false