Skip to content

Rename bmad-auto → bmad-loop (full project rename) - #55

Merged
pbean merged 3 commits into
mainfrom
rename/bmad-loop
Jul 3, 2026
Merged

Rename bmad-auto → bmad-loop (full project rename)#55
pbean merged 3 commits into
mainfrom
rename/bmad-loop

Conversation

@pbean

@pbean pbean commented Jul 3, 2026

Copy link
Copy Markdown
Collaborator

Renames the project bmad-autobmad-loop end to end. Clean break, no compatibility shims — migration is handled by bmad-loop init and the setup skill.

What changed

  • Distribution + console script + CLI: bmad-autobmad-loop
  • Python package: src/automator/src/bmad_loop/
  • BMAD module code + marketplace plugin: bautobmad-loop
  • Per-project state dir: .automator/.bmad-loop/
  • Env vars: BMAD_AUTO_*BMAD_LOOP_*
  • Plugin entry-point group: bmad_auto.pluginsbmad_loop.plugins
  • Hook relays: bmad_auto_hook.py / bmad_auto_probe_hook.pybmad_loop_*
  • Skills: /bmad-auto-{setup,sweep,resolve}/bmad-loop-{setup,sweep,resolve}
  • tmux + worktree-branch prefixes: bmad-auto-* / automator/<run-id>bmad-loop-* / bmad-loop/<run-id>
  • TUI class: BmadAutoAppBmadLoopApp
  • All GitHub URLsgithub.com/bmad-code-org/bmad-loop

Untouched by design: the upstream bmad-dev-auto skill (+ review hunters), CHANGELOG history, and bmad-automator legacy-project mentions.

Commits

  1. Mechanical renamegit mv + ordered, guarded token sweep + regenerated module.yaml mirror / uv.lock (same version 0.7.12). Suite green on its own.
  2. Clean-break migration behavior + 0.8.0 CHANGELOGbmad-loop init now migrates a project renamed from bmad-auto (strips the old .automator/ hook across all four CLI dialects, removes bmad-auto-* skill dirs, carries .automator/policy.toml over, leaves the rest of .automator/ in place). The setup skill gains a "Migrating from bmad-auto (renamed)" section. Curated ## [0.8.0] CHANGELOG entry — no version bump (/bmad-release 0.8.0 cuts the release later).
  3. Regenerated assets — 7 TUI screenshots + demo.gif now show the bmad-loop title.

Migration for existing installs

uv tool uninstall bmad-auto
uv tool install "bmad-loop[tui] @ git+https://github.com/bmad-code-org/bmad-loop.git"

Then re-run /bmad-loop-setup (or bmad-loop init). Init migrates in place; legacy .automator/ is left for you to delete once confirmed.

Verification

  • Leftover-token greps clean (remaining old-name refs are the intentional legacy-migration code/docs); positive control bmad-dev-auto intact.
  • sync_version --check, uv sync --locked --all-extras, pytest -n auto (1340 passed), seed_skills --check, full trunk check — all green.
  • Wheel build + uv tool install smoke: bmad-loop 0.7.12; fresh and legacy-migration init exercised via the packaged tool (hook strip, skill removal, policy migration, idempotent re-run).

Operational note

The GitHub repo rename bmad-code-org/bmad-autobmad-code-org/bmad-loop is done separately at merge time (gh repo rename, needs repo admin). GitHub sets up permanent redirects, so any ordering is safe.

pbean and others added 3 commits July 3, 2026 10:36
Rename the project end to end:
- dist + console script `bmad-auto` → `bmad-loop`
- Python package `src/automator` → `src/bmad_loop`
- module code / marketplace plugin `bauto` → `bmad-loop`
- per-project state dir `.automator/` → `.bmad-loop/`
- env vars `BMAD_AUTO_*` → `BMAD_LOOP_*`
- plugin entry-point group `bmad_auto.plugins` → `bmad_loop.plugins`
- hook relays `bmad_auto_hook.py` / `bmad_auto_probe_hook.py` → `bmad_loop_*`
- tmux + worktree-branch prefixes `bmad-auto-*` / `automator/` → `bmad-loop-*` / `bmad-loop/`
- skills `/bmad-auto-{setup,sweep,resolve}` → `/bmad-loop-{setup,sweep,resolve}`
- TUI class `BmadAutoApp` → `BmadLoopApp`
- all GitHub URLs → github.com/bmad-code-org/bmad-loop

Clean break, no shims. Regenerated module.yaml mirror + uv.lock via
sync_version (same version 0.7.12). Upstream `bmad-dev-auto` skill and
CHANGELOG history untouched; `bmad-automator` legacy-project mentions kept.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
`bmad-loop init` now migrates a project renamed from bmad-auto, in place and
idempotently:
- strip_legacy_hooks() removes the old `.automator/` Stop hook from each CLI's
  settings across all four dialect shapes (copilot bare handler; claude/codex/
  gemini nested), dropping emptied matcher/event entries
- remove the pre-rename `bmad-auto-*` skill dirs (guarded on an inner SKILL.md)
- carry `.automator/policy.toml` over to `.bmad-loop/policy.toml` instead of
  writing the template; never clobber an existing `.bmad-loop/policy.toml`
- leave the rest of `.automator/` in place with a printed note

The bmad-loop-setup skill gains a "Migrating from bmad-auto (renamed)" section:
rename-upgrade detection (legacy `bauto` config section / `bmad-auto` in
`uv tool list`), tool uninstall+reinstall (uv can't rename in place), legacy
`bauto` config/help fallback + post-merge cleanup, and a separate cleanup-legacy
pass for `_bmad/bauto/` without `--skills-dir` (its old skills are gone by design).

Adds the curated 0.8.0 CHANGELOG section (rename, breaking identifiers, migration
notes). No version bump — /bmad-release cuts the release afterwards.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Re-render the 7 dashboard/modal SVGs (+PNGs via resvg) and the README demo.gif
so the window title and header show `bmad-loop` instead of the old name.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 167 files, which is 17 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7754584b-0d72-4808-a9ea-cbfcd2873e0e

📥 Commits

Reviewing files that changed from the base of the PR and between 3dc6e80 and 6cfa6ad.

⛔ Files ignored due to path filters (18)
  • docs/images/dashboard.png is excluded by !**/*.png
  • docs/images/dashboard.svg is excluded by !**/*.svg
  • docs/images/decision-answer.png is excluded by !**/*.png
  • docs/images/decision-answer.svg is excluded by !**/*.svg
  • docs/images/deferred-modal.png is excluded by !**/*.png
  • docs/images/deferred-modal.svg is excluded by !**/*.svg
  • docs/images/demo.gif is excluded by !**/*.gif
  • docs/images/settings-scm.png is excluded by !**/*.png
  • docs/images/settings-scm.svg is excluded by !**/*.svg
  • docs/images/settings.png is excluded by !**/*.png
  • docs/images/settings.svg is excluded by !**/*.svg
  • docs/images/start-run-modal.png is excluded by !**/*.png
  • docs/images/start-run-modal.svg is excluded by !**/*.svg
  • docs/images/sweep-decision.png is excluded by !**/*.png
  • docs/images/sweep-decision.svg is excluded by !**/*.svg
  • src/automator/data/skills/bmad-auto-setup/assets/module-help.csv is excluded by !**/*.csv
  • src/bmad_loop/data/skills/bmad-loop-setup/assets/module-help.csv is excluded by !**/*.csv
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (167)
  • .bandit
  • .claude-plugin/marketplace.json
  • .github/ISSUE_TEMPLATE/bug-report.yaml
  • .github/ISSUE_TEMPLATE/config.yaml
  • .github/ISSUE_TEMPLATE/documentation.yaml
  • .github/ISSUE_TEMPLATE/feature-request.md
  • .gitignore
  • CHANGELOG.md
  • CONTRIBUTING.md
  • CONTRIBUTORS.md
  • README.md
  • SECURITY.md
  • docs/FEATURES.md
  • docs/README.md
  • docs/ROADMAP.md
  • docs/adapter-authoring-guide.md
  • docs/game-engine-mcp-guide.md
  • docs/game-engine-plugin-guide.md
  • docs/plugin-authoring-guide.md
  • docs/porting-to-a-new-os.md
  • docs/setup-guide.md
  • docs/tea-plugin-guide.md
  • docs/tui-guide.md
  • examples/plugins/guardrails/guardrails.py
  • examples/plugins/guardrails/plugin.toml
  • module.yaml
  • pyproject.toml
  • scripts/gen_demo.py
  • scripts/gen_screenshots.py
  • scripts/record-demo.sh
  • scripts/release.py
  • scripts/seed_skills.py
  • scripts/sync_version.py
  • src/automator/data/skills/bmad-auto-setup/assets/module.yaml
  • src/automator/tui/screens/__init__.py
  • src/bmad_loop/__init__.py
  • src/bmad_loop/adapters/__init__.py
  • src/bmad_loop/adapters/base.py
  • src/bmad_loop/adapters/generic.py
  • src/bmad_loop/adapters/mock.py
  • src/bmad_loop/adapters/multiplexer.py
  • src/bmad_loop/adapters/opencode_http.py
  • src/bmad_loop/adapters/profile.py
  • src/bmad_loop/adapters/tmux_backend.py
  • src/bmad_loop/adapters/tmux_base.py
  • src/bmad_loop/bmadconfig.py
  • src/bmad_loop/cli.py
  • src/bmad_loop/data/__init__.py
  • src/bmad_loop/data/bmad_loop_hook.py
  • src/bmad_loop/data/bmad_loop_probe_hook.py
  • src/bmad_loop/data/plugins/example/plugin.toml
  • src/bmad_loop/data/plugins/tea/plugin.toml
  • src/bmad_loop/data/plugins/tea/tea_plugin.py
  • src/bmad_loop/data/plugins/unity/plugin.toml
  • src/bmad_loop/data/plugins/unity/unity_cleanup.py
  • src/bmad_loop/data/plugins/unity/unity_plugin.py
  • src/bmad_loop/data/plugins/unity/unity_ready.py
  • src/bmad_loop/data/plugins/unity/unity_setup.py
  • src/bmad_loop/data/plugins/unity/unity_teardown.py
  • src/bmad_loop/data/profiles/claude.toml
  • src/bmad_loop/data/profiles/codex.toml
  • src/bmad_loop/data/profiles/copilot.toml
  • src/bmad_loop/data/profiles/gemini.toml
  • src/bmad_loop/data/settings/core.toml
  • src/bmad_loop/data/skills/README.md
  • src/bmad_loop/data/skills/bmad-loop-resolve/SKILL.md
  • src/bmad_loop/data/skills/bmad-loop-setup/SKILL.md
  • src/bmad_loop/data/skills/bmad-loop-setup/assets/module.yaml
  • src/bmad_loop/data/skills/bmad-loop-setup/scripts/cleanup-legacy.py
  • src/bmad_loop/data/skills/bmad-loop-setup/scripts/merge-config.py
  • src/bmad_loop/data/skills/bmad-loop-setup/scripts/merge-help-csv.py
  • src/bmad_loop/data/skills/bmad-loop-sweep/SKILL.md
  • src/bmad_loop/data/skills/bmad-loop-sweep/automation-mode.md
  • src/bmad_loop/data/skills/bmad-loop-sweep/deferred-work-format.md
  • src/bmad_loop/data/skills/bmad-loop-sweep/migration-mode.md
  • src/bmad_loop/decisions.py
  • src/bmad_loop/deferredwork.py
  • src/bmad_loop/devcontract.py
  • src/bmad_loop/diagnostics.py
  • src/bmad_loop/engine.py
  • src/bmad_loop/escalation.py
  • src/bmad_loop/gates.py
  • src/bmad_loop/install.py
  • src/bmad_loop/journal.py
  • src/bmad_loop/model.py
  • src/bmad_loop/platform_util.py
  • src/bmad_loop/plugins/__init__.py
  • src/bmad_loop/plugins/bus.py
  • src/bmad_loop/plugins/context.py
  • src/bmad_loop/plugins/loader.py
  • src/bmad_loop/plugins/manifest.py
  • src/bmad_loop/plugins/model.py
  • src/bmad_loop/plugins/registry.py
  • src/bmad_loop/plugins/trust.py
  • src/bmad_loop/policy.py
  • src/bmad_loop/probe.py
  • src/bmad_loop/process_host.py
  • src/bmad_loop/resolve.py
  • src/bmad_loop/runs.py
  • src/bmad_loop/sanitize.py
  • src/bmad_loop/settings_schema.py
  • src/bmad_loop/signals.py
  • src/bmad_loop/sprintstatus.py
  • src/bmad_loop/statemachine.py
  • src/bmad_loop/sweep.py
  • src/bmad_loop/tokens.py
  • src/bmad_loop/tui/__init__.py
  • src/bmad_loop/tui/app.py
  • src/bmad_loop/tui/data.py
  • src/bmad_loop/tui/launch.py
  • src/bmad_loop/tui/screens/__init__.py
  • src/bmad_loop/tui/screens/dashboard.py
  • src/bmad_loop/tui/screens/modals.py
  • src/bmad_loop/tui/screens/settings_screen.py
  • src/bmad_loop/tui/settings.py
  • src/bmad_loop/tui/widgets.py
  • src/bmad_loop/verify.py
  • src/bmad_loop/workspace.py
  • tests/conftest.py
  • tests/test_backend_registry.py
  • tests/test_bmadconfig.py
  • tests/test_cleanup.py
  • tests/test_cli.py
  • tests/test_decisions.py
  • tests/test_deferredwork.py
  • tests/test_devcontract.py
  • tests/test_diagnostics.py
  • tests/test_engine.py
  • tests/test_engine_plugin.py
  • tests/test_engine_worktree.py
  • tests/test_escalation.py
  • tests/test_generic_tmux.py
  • tests/test_hook_bus.py
  • tests/test_hook_script.py
  • tests/test_install.py
  • tests/test_model.py
  • tests/test_module_skills_sync.py
  • tests/test_multiplexer.py
  • tests/test_platform_util.py
  • tests/test_plugin_loader.py
  • tests/test_plugin_tea.py
  • tests/test_plugin_trust.py
  • tests/test_plugin_workflows.py
  • tests/test_policy.py
  • tests/test_portability_guard.py
  • tests/test_probe.py
  • tests/test_probe_hook.py
  • tests/test_process_host.py
  • tests/test_profile.py
  • tests/test_release.py
  • tests/test_resolve.py
  • tests/test_runs.py
  • tests/test_sanitize.py
  • tests/test_seed_skills.py
  • tests/test_settings_schema.py
  • tests/test_signals.py
  • tests/test_sprintstatus.py
  • tests/test_sprintstatus_advance.py
  • tests/test_statemachine.py
  • tests/test_sweep.py
  • tests/test_tokens.py
  • tests/test_tui_app.py
  • tests/test_tui_data.py
  • tests/test_tui_launch.py
  • tests/test_tui_settings.py
  • tests/test_verify.py
  • tests/test_verify_worktree.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch rename/bmad-loop

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@augmentcode

augmentcode Bot commented Jul 3, 2026

Copy link
Copy Markdown

This pull request is abnormally large and would use a significant amount of tokens to review. If you still wish to review it, comment "augment review" and we will review it.

@pbean
pbean merged commit dff3620 into main Jul 3, 2026
9 checks passed
@pbean pbean mentioned this pull request Jul 3, 2026
@pbean
pbean deleted the rename/bmad-loop branch July 5, 2026 00:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant