Skip to content

v0.8.0

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Jul 18:54
648b407

Changed

  • BREAKING: the project is renamed bmad-autobmad-loop. The distribution, console script,
    and CLI are now bmad-loop; the Python package is bmad_loop (was automator); the BMAD module
    code and marketplace plugin are bmad-loop (was bauto); per-project state moves from
    .automator/ to .bmad-loop/. The GitHub repo is now
    bmad-code-org/bmad-loop — old web and git URLs
    redirect. Clean break: no compatibility shims.
  • BREAKING: renamed public identifiers. 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_hook.py / bmad_loop_probe_hook.py; skills
    /bmad-auto-{setup,sweep,resolve}/bmad-loop-{setup,sweep,resolve}; tmux session/window
    prefixes bmad-auto-*bmad-loop-*; worktree branches automator/<run-id>
    bmad-loop/<run-id>; TUI class BmadAutoAppBmadLoopApp. Custom plugins, CLI profiles, and
    policy files that reference any of these must be updated.

Added

  • New pre_commit_gate plugin workflow-injection stage. Gate workflows can bind to
    pre_commit_gate, which fires unconditionally just before every commit — on the review-converged,
    review-skipped, and review-budget-rescue paths alike — while the phase can still legally defer.
    TEA's trace/nfr/review gates rebind to it, fixing blocking gates that were previously inert
    whenever a dev session recommended no review follow-up (so on_pre_commit fail-opened on the
    missing artifacts).

Fixed

  • A workflow session that finishes its work but never writes a completion marker no longer
    livelocks the run.
    Each result-less Stop used to refill the stall-nudge budget, re-nudging a
    responsive-but-signal-less session until session_timeout_min. The engine now appends an explicit
    completion contract (absolute marker path + frontmatter shape) to every workflow-session prompt,
    and a new limits.workflow_stall_nudges_cap (default 3) caps the total nudges a workflow session
    may receive — degrading a still-missing marker to "stalled" in ~30 min instead of hours. Dev/review
    session nudging is unchanged.
  • On Windows, a live engine whose process identity can't be read now shows UNKNOWN instead of a
    false INTERRUPTED.
    psutil raises ERROR_ACCESS_DENIED for a process in another session or
    elevation, which the identity-aware liveness read had surfaced as dead — mislabeling running runs
    and weakening the resume/delete guards. Liveness is now tri-state (alive/dead/unknown) and
    biased away from false-dead; resume, resolve, delete, archive, and cleanup all surface and
    warn on unknown without ever letting an unverifiable pid block cleanup forever, and resolve
    gains --force to override a squatted-pid block.
  • A review session that appends to the deferred-work ledger no longer leaves a sweep bundle
    unclosed.
    The bundle ledger is reclosed after review (journaled distinctly as
    sweep-bundle-reclosed), and the review prompt now states the ledger is append-only for sessions.
  • Worktree git-exclude patterns now anchor correctly on native Windows. install.py normalizes
    backslashes in the per-worktree exclude paths so the ignore rules match (a no-op on POSIX).

Migration

  • Reinstall the tool under its new name — uv can't rename a package in place:
    uv tool uninstall bmad-auto, then
    uv tool install "bmad-loop[tui] @ git+https://github.com/bmad-code-org/bmad-loop.git".
  • Re-run /bmad-loop-setup (or bmad-loop init directly). init migrates a project in place:
    it strips the old .automator/ Stop hook from each CLI's settings, removes the bmad-auto-*
    skill dirs, and carries .automator/policy.toml over to .bmad-loop/policy.toml. Setup folds the
    old bauto config into bmad-loop and clears the leftover bauto config section, stale
    BMAD Automator Skills help rows, and the _bmad/bauto/ installer dir.
  • Legacy .automator/ is left in place (runs, archives, profiles, plugins) and can be deleted
    or hand-moved once the migration is confirmed; stale .automator/* gitignore lines are left
    untouched.