diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 6594d34..c135416 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -12,7 +12,7 @@ "name": "bauto", "source": "./src/automator/data/skills", "description": "Automation-mode skills driven by the bmad-auto orchestrator: interactive escalation resolution (bmad-auto-resolve) and deferred-work sweep triage (bmad-auto-sweep) — the inner dev primitive (which self-reviews and commits) is the upstream bmad-dev-auto skill", - "version": "0.7.5", + "version": "0.7.6", "author": { "name": "pinkyd" }, diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b33531..2bfacab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,38 @@ All notable changes to `bmad-auto` are documented here. The format is based on [Semantic Versioning](https://semver.org/spec/v2.0.0.html). While the project is pre-1.0, breaking changes may land in a minor release. +## [0.7.6] — 2026-06-28 + +### Changed + +- **The OS is now abstracted behind a registry of seams, so a non-tmux/native-Windows port is new + files plus one registration line each — no core edits.** The terminal multiplexer is selected + through a registry (`register_multiplexer`, by `sys.platform` with a `BMAD_AUTO_MUX_BACKEND` + override) rather than hardcoded in `get_multiplexer()`, and the tmux backend split into a reusable + `BaseTmuxBackend` extension point — every tmux invocation funnels through one overridable `_run()` + primitive — with `TmuxMultiplexer` as a thin POSIX leaf, so a tmux-family backend (an eventual + "psmux") overrides only the spawn primitive and the few divergent methods. +- **Process-lifecycle primitives moved behind a `ProcessHost` seam.** Politely-stop / force-kill / + liveness / PID-reuse-identity now route through `get_process_host()` (registered like the + multiplexer, with a `BMAD_AUTO_PROCESS_HOST` override); a `WindowsProcessHost` ships ready to + register. Hook registration no longer hardcodes `python3` — it takes the interpreter prefix from + `ProcessHost.hook_interpreter()` (POSIX `python3`; Windows `uv run --no-project python`), and + `bmad-auto validate` runs a platform preflight that reports the selected backend's readiness and + names the process host. Behavior on Linux/macOS/WSL is unchanged. +- **The bundled Unity plugin's teardown delegates pid lifecycle to `ProcessHost` and its helper + scripts run under the orchestrator's own interpreter.** Plugin helper scripts are spawned via + `sys.executable` (not a PATH-resolved `python3`), so a bundled script may import `automator` seams; + `unity_teardown.py` now reaps leaked Editor/MCP processes through `get_process_host()` instead of + re-implementing kill/liveness, gaining Windows behavior for free. + +### Added + +- **A consolidated [porting guide](docs/porting-to-a-new-os.md)** maps the four OS seams (terminal + multiplexer, process lifecycle, hook interpreter, validate preflight), their registries and + test-override env vars, and exactly what a native-Windows port costs end to end. The + adapter-/plugin-authoring guides, ROADMAP, README, and FEATURES are updated to the post-registry + world. + ## [0.7.5] — 2026-06-28 ### Added @@ -716,6 +748,7 @@ enforced in CI. implementation phase, driven by a Python control loop with hook-based session transport and resumable on-disk run state. +[0.7.6]: https://github.com/bmad-code-org/bmad-auto/releases/tag/v0.7.6 [0.7.5]: https://github.com/bmad-code-org/bmad-auto/releases/tag/v0.7.5 [0.7.4]: https://github.com/bmad-code-org/bmad-auto/releases/tag/v0.7.4 [0.7.3]: https://github.com/bmad-code-org/bmad-auto/releases/tag/v0.7.3 diff --git a/README.md b/README.md index cde2e2c..155e7f1 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ Inspired by the original [bmad-automator](https://github.com/bmad-code-org/bmad- ## Requirements - **Python 3.11+**, **tmux**, and a supported coding CLI — `claude` by default; `codex` and `gemini` via [profiles](#other-coding-clis). -- **Linux or macOS** (or **Windows via WSL**, which _is_ Linux — it runs as-is). tmux is the one terminal-multiplexer backend today, but it now sits behind a pluggable seam (`TerminalMultiplexer`), so a native-Windows backend can slot in later without touching the engine — see the [adapter authoring guide](docs/adapter-authoring-guide.md#two-axes-cli-vs-transport). Native Windows is not yet shipped. +- **Linux or macOS** (or **Windows via WSL**, which _is_ Linux — it runs as-is). tmux is the one terminal-multiplexer backend today, but it now sits behind a pluggable **registry** of OS seams (transport, process lifecycle, hook interpreter), so a native-Windows backend slots in as new files + a registration line each, with no engine edits — see [Porting bmad-auto to a new OS](docs/porting-to-a-new-os.md). Native Windows is not yet shipped. - A **BMAD v6 project** (`_bmad/bmm/config.yaml`, a `sprint-status.yaml` from `bmad-sprint-planning`) with the upstream `bmad-dev-auto` skill and the automator skill module from this repo installed (`bmad-auto-resolve`, `bmad-auto-sweep` — see [Installing the skill module](#installing-the-skill-module)). Standard BMAD skills stay untouched. ## Quick start @@ -62,7 +62,7 @@ bmad-auto tui # …or drive everything from the dashboard | Command | What it does | | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `bmad-auto init` | Install the bundled `bmad-auto-*` skills, the hook relay, `.automator/policy.toml`, and a runs-dir gitignore. `--cli ` (repeatable) targets specific agents; `--no-skills` / `--force-skills` control skill copying. | -| `bmad-auto validate` | Preflight every prerequisite: BMAD config, sprint-status, git, tmux, CLI binary, hook registration. | +| `bmad-auto validate` | Preflight every prerequisite: BMAD config, sprint-status, git, CLI binary, hook registration, and a platform check that reports the selected multiplexer's readiness and process host. | | `bmad-auto run` | Drive the dev → review → verify → commit loop. `--epic N`, `--story KEY`, `--max-stories N`, `--dry-run`. | | `bmad-auto sweep` | Triage + execute open `deferred-work.md` entries. `--no-prompt`, `--decisions-only`, `--max-bundles N`, `--repeat`, `--max-cycles N`, `--dry-run`. | | `bmad-auto resume ` | Continue a run paused at a gate, escalation, or interruption. | diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 1cb2174..f49011d 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -8,21 +8,21 @@ See [README.md](../README.md) for the narrative overview and [setup-guide.md](se ## Capability matrix (feature → problem addressed) -| Capability | What it does | Problem it addresses | -| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------- | -| Deterministic control loop | Story selection, retries, gates, completion checks run in plain Python | LLM-as-orchestrator is nondeterministic, hard to debug, and costs tokens for control flow | -| Trust-nothing verification | Checks on-disk artifacts (spec status, baseline-commit match, non-empty diff, sprint sync) + runs your test/lint commands before commit | Agents claim success without working code; broken builds slip through | -| Fresh-context adversarial review | Dev and review are separate sessions; review uses 2 parallel layers (Blind Hunter / Edge Case Hunter) | Self-review anchoring bias; implementer marks own work correct | -| Hook-based transport | Coding-agent hooks write structured event files; skills write `result.json` | Brittle terminal pane-scraping | -| Resumable state machine | Every run is on-disk state, resumable after gate/escalation/crash | Long unattended runs lost to interruptions | -| Plateau-defer | Stuck stories are skipped, stashed, and the run continues | One unconvergeable story blocking a whole sprint | -| Typed escalations + resolve workflow | CRITICAL pauses + notifies; interactive resolve agent re-arms the story | Ambiguous specs silently producing wrong code | -| Deferred-work sweeps | Triages an append-only ledger against real code, bundles + executes | Split-off goals and review findings get lost | -| Multi-CLI adapter + profiles | Generic driver runs claude/codex/gemini; per-stage overrides; TOML profiles; transport behind a pluggable multiplexer seam (tmux today) | Vendor lock-in; no way to mix models per stage; future non-tmux/Windows transport | -| Cost-weighted token budgets | Per-story budget counts cache reads at ~0.1x; raw totals displayed | Naive token caps misjudge real cost (cache reads dominate) | -| Non-invasive skill forks | Drives its own `bmad-auto-*` skill forks; reads `sprint-status.yaml` only | Modifying a user's standard BMAD install | -| Read-only TUI + launcher | Live dashboard over run-dir artifacts; launches detached runs | No visibility into what an unattended run is doing | -| Git worktree isolation (opt-in) | Each unit runs in its own worktree/branch (seeded with the adapters' gitignored MCP/CLI configs), merging back into the target locally; failed units kept for inspection | A long unattended run mutating the working tree you're actively using | +| Capability | What it does | Problem it addresses | +| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------- | +| Deterministic control loop | Story selection, retries, gates, completion checks run in plain Python | LLM-as-orchestrator is nondeterministic, hard to debug, and costs tokens for control flow | +| Trust-nothing verification | Checks on-disk artifacts (spec status, baseline-commit match, non-empty diff, sprint sync) + runs your test/lint commands before commit | Agents claim success without working code; broken builds slip through | +| Fresh-context adversarial review | Dev and review are separate sessions; review uses 2 parallel layers (Blind Hunter / Edge Case Hunter) | Self-review anchoring bias; implementer marks own work correct | +| Hook-based transport | Coding-agent hooks write structured event files; skills write `result.json` | Brittle terminal pane-scraping | +| Resumable state machine | Every run is on-disk state, resumable after gate/escalation/crash | Long unattended runs lost to interruptions | +| Plateau-defer | Stuck stories are skipped, stashed, and the run continues | One unconvergeable story blocking a whole sprint | +| Typed escalations + resolve workflow | CRITICAL pauses + notifies; interactive resolve agent re-arms the story | Ambiguous specs silently producing wrong code | +| Deferred-work sweeps | Triages an append-only ledger against real code, bundles + executes | Split-off goals and review findings get lost | +| Multi-CLI adapter + profiles | Generic driver runs claude/codex/gemini; per-stage overrides; TOML profiles; transport + process-lifecycle + hook-interpreter behind a pluggable OS-seam registry (tmux/POSIX today) | Vendor lock-in; no way to mix models per stage; future non-tmux/Windows transport | +| Cost-weighted token budgets | Per-story budget counts cache reads at ~0.1x; raw totals displayed | Naive token caps misjudge real cost (cache reads dominate) | +| Non-invasive skill forks | Drives its own `bmad-auto-*` skill forks; reads `sprint-status.yaml` only | Modifying a user's standard BMAD install | +| Read-only TUI + launcher | Live dashboard over run-dir artifacts; launches detached runs | No visibility into what an unattended run is doing | +| Git worktree isolation (opt-in) | Each unit runs in its own worktree/branch (seeded with the adapters' gitignored MCP/CLI configs), merging back into the target locally; failed units kept for inspection | A long unattended run mutating the working tree you're actively using | --- @@ -113,6 +113,7 @@ See [README.md](../README.md) for the narrative overview and [setup-guide.md](se ### Multi-CLI / multi-agent support - Generic adapter drives any CLI fitting the injection + hook-signal transport; CLI specifics live in declarative TOML profiles. Two independent axes: the **CLI** (`CodingCLIAdapter` + profile) and the **terminal transport** (`TerminalMultiplexer`) — tmux is the only backend today, behind a pluggable seam so a native-Windows backend can be added without touching the engine (see the [adapter authoring guide](adapter-authoring-guide.md#two-axes-cli-vs-transport)). +- The OS is abstracted by a **registry of seams**, each selecting an implementation by platform (with a test-override env var) and extended by a single registration line: the terminal multiplexer (`register_multiplexer`), the process-lifecycle `ProcessHost` (`register_process_host` — `terminate`/`force_kill`/`is_alive`/`identity`), and the hook interpreter (`ProcessHost.hook_interpreter()`); `bmad-auto validate` runs a platform preflight over them. Porting to a new OS is new files + registrations, no core edits — see [Porting bmad-auto to a new OS](porting-to-a-new-os.md). - Supported, E2E-verified: `claude` (reference), `codex` (≥ 0.139), `gemini` (≥ 0.46), `copilot` (GitHub Copilot CLI ≥ 2026-02 — the `copilot` binary, not the VS Code extension; `agentStop` turn-end, `-i` interactive launch, `--allow-all-tools`; pin a capable model — the free GPT-5 mini default is unreliable for multi-step skills). - Per-stage CLI/model overrides: run dev on one CLI/model, review on another (`[adapter.dev]`, `[adapter.review]`, `[adapter.triage]`). - Add a CLI without touching Python: drop a TOML profile in `.automator/profiles/.toml` (binary, prompt template, bypass flags, hook dialect, native→canonical event map). diff --git a/docs/README.md b/docs/README.md index 19b5e78..1c33d58 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,6 +15,7 @@ guides below go deeper, roughly in the order you'll need them. - **[Writing a bmad-auto plugin](plugin-authoring-guide.md)** — the plugin system: `plugin.toml` manifest, hooks, lifecycle stages, settings, the trust model, and workflow injection, with a worked walkthrough. - **[Writing a Game Engine plugin](game-engine-plugin-guide.md)** — the game-engine layer (built on the plugin system): driving a live engine Editor, the `editor_mode` ↔ `[scm] isolation` coupling, a minimal Godot example. - **[Writing a plugin for a specific Editor MCP](game-engine-mcp-guide.md)** — Editor-MCP specifics for the bundled Unity plugin: IvanMurzak vs CoplayDev, readiness probes, `per_worktree` isolation, and the full `BMAD_AUTO_*` env-var reference. +- **[Porting bmad-auto to a new OS](porting-to-a-new-os.md)** — the four OS seams (terminal multiplexer, process lifecycle, hook interpreter, validate preflight), their registries and override env vars, and what a native-Windows port costs end to end. - **[The Test Architect (TEA) plugin](tea-plugin-guide.md)** — the bundled `tea` plugin: installing TEA, the six advisory test-architecture steps it injects across runs and sweeps, the enable/blocking settings, and the escalate-on-gate behavior. ## Project direction diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 20082d0..fb6654d 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -9,25 +9,37 @@ Status legend: **planned** (agreed, not started) · **exploring** (shape still o ## Native Windows multiplexer backend -**Status:** planned · **Foundation:** multiplexer seam + portability hardening landed (v0.7.0) +**Status:** planned · **Foundation:** the full platform-seam series landed (multiplexer registry + `BaseTmuxBackend` + `ProcessHost` + hook interpreter + validate preflight, v0.7.6; original seam v0.7.0) The orchestrator no longer fuses tmux into the engine. All session/window/pane operations go through a single `TerminalMultiplexer` ABC (`src/automator/adapters/multiplexer.py`), -obtained from `get_multiplexer()`; `TmuxMultiplexer` (`adapters/tmux_backend.py`) is the -**only** file allowed to shell out to `tmux`, and it quarantines the POSIX `sh -c` -parked-window trailer. Alongside it, the scattered POSIX-isms were guarded behind a -platform-util seam (`terminate_pid`, detach kwargs, `SIGKILL` fallback, `os.devnull`) and -the Unity plugin's `/proc`/`/tmp`/`cp -a`/symlink primitives now degrade off Linux (with -`psutil` from the optional `windows` extra), all verified by a CI portability guard -(`tests/test_portability_guard.py`). **WSL already works today** — it _is_ Linux, so it -takes every fast path unchanged; this is purely about a future _native_ Windows host. +obtained from `get_multiplexer()`; the tmux backend — argv + spawn primitive in +`BaseTmuxBackend` (`adapters/tmux_base.py`), POSIX leaf `TmuxMultiplexer` +(`adapters/tmux_backend.py`) — is the **only** place allowed to shell out to `tmux`, and it +quarantines the POSIX `sh -c` parked-window trailer. Backends now self-**register** +(`register_multiplexer`, selected by platform with a `BMAD_AUTO_MUX_BACKEND` override) rather +than being hardcoded into `get_multiplexer()`. The process-lifecycle POSIX-isms moved behind a +matching seam, `ProcessHost` (`src/automator/process_host.py`): `terminate` / `force_kill` / +`is_alive` / `identity` (a PID-reuse guard) plus `hook_interpreter()` (so hook registration +never branches on platform), registered the same way (`register_process_host`, +`BMAD_AUTO_PROCESS_HOST`); `WindowsProcessHost` already ships. `bmad-auto validate` runs a +`_platform_preflight()` that reports the selected backend's readiness and names the process +host — so a new OS surfaces in preflight by registering, not by a `validate` edit. The Unity +plugin's `/proc`/`/tmp`/`cp -a`/symlink primitives degrade off Linux (with `psutil` from the +optional `non-linux` extra) and its pid lifecycle now delegates to `ProcessHost`; everything is +held by a CI portability guard (`tests/test_portability_guard.py`). **WSL already works today** +— it _is_ Linux, so it takes every fast path unchanged; this is purely about a future _native_ +Windows host. The remaining work is a real non-tmux backend (a "psmux"-style multiplexer) that implements -the `TerminalMultiplexer` contract on native Windows and is returned from `get_multiplexer()` -behind a platform/policy check. The seam is designed so this slots in with **no change to -the adapters, `runs.py`, `tui/launch.py`, `probe.py`, or `tui/data.py`** — a backend author -reads `multiplexer.py` for the contract and `tmux_backend.py` for the reference -implementation (see the [adapter authoring guide](adapter-authoring-guide.md#the-transport-contract-for-a-backend-author)). +the `TerminalMultiplexer` contract on native Windows and registers itself for `win32`. The +seams are designed so this slots in as **new files + one registration line each, with no +change to the adapters, `runs.py`, `tui/launch.py`, `probe.py`, `tui/data.py`, or +`cli.py`'s `validate`** (`WindowsProcessHost` and its hook interpreter are already in place +and registered). The end-to-end port path — both build options, the test-override env vars, +and exactly what a native-Windows port costs — is documented in +[Porting bmad-auto to a new OS](porting-to-a-new-os.md); the deep transport contract is in +the [adapter authoring guide](adapter-authoring-guide.md#the-transport-contract-for-a-backend-author). **Open questions:** what hosts the windows on native Windows (Windows Terminal panes, a ConPTY-based manager, a headless process supervisor?); how attach/detach and the parked diff --git a/docs/adapter-authoring-guide.md b/docs/adapter-authoring-guide.md index 3f2a46a..b9eddf7 100644 --- a/docs/adapter-authoring-guide.md +++ b/docs/adapter-authoring-guide.md @@ -26,13 +26,17 @@ These are independent and abstracted separately: - **Transport axis** — `TerminalMultiplexer` (`adapters/multiplexer.py`): how sessions, windows, and panes are created, observed, and torn down. The generic adapter never shells out itself — it goes through `self.mux`, obtained from - `get_multiplexer()`. The one backend today is tmux - (`adapters/tmux_backend.py`), which is the **only** file allowed to invoke - `tmux` (and the only place POSIX-shell trailers live). A future non-POSIX - backend (e.g. a native-Windows "psmux") implements the `TerminalMultiplexer` - contract and slots in behind `get_multiplexer()` with no change to the adapters. - A backend author reads `multiplexer.py` for the contract and `tmux_backend.py` - for the reference implementation. + `get_multiplexer()`. The one backend today is tmux: argv construction and the + single spawn primitive live in `BaseTmuxBackend` (`adapters/tmux_base.py`), with + the thin POSIX leaf `TmuxMultiplexer` (`adapters/tmux_backend.py`); together they + are the **only** files allowed to invoke `tmux` (and the only place POSIX-shell + trailers live). A future non-POSIX backend (e.g. a native-Windows "psmux") + registers itself via `register_multiplexer(...)` and slots in behind + `get_multiplexer()` with no change to the adapters. A backend author reads + `multiplexer.py` for the contract and `tmux_backend.py` / `tmux_base.py` for the + reference implementation. Transport is one of **four OS seams** — the others + (process lifecycle, hook interpreter, validate preflight) are mapped in + [Porting bmad-auto to a new OS](porting-to-a-new-os.md). ### The transport contract (for a backend author) @@ -40,12 +44,21 @@ Every part of the codebase that touches sessions, windows, or clients now goes through `get_multiplexer()` — not just the generic adapter but also `runs.py` (session listing/tagging, kill, attach argv), `tui/launch.py` (the control session and its parked orchestrator windows), `probe.py` (the throwaway probe -session), and `tui/data.py` (legacy-run liveness). A grep for `"tmux"` outside -`adapters/tmux_backend.py` should turn up only `shutil.which("tmux")` presence -checks, never an invocation. - -To add a backend, implement `TerminalMultiplexer` (`adapters/multiplexer.py`) and -return it from `get_multiplexer()`. The contract groups into: +session), and `tui/data.py` (legacy-run liveness). A grep for `"tmux"` outside the +tmux backend (`adapters/tmux_base.py` + `adapters/tmux_backend.py`) should turn up +only `shutil.which("tmux")` presence checks, never an invocation. + +To add a backend, build a `TerminalMultiplexer` (`adapters/multiplexer.py`) and +**register** it — `register_multiplexer(name, matches, factory)`, where +`matches(sys.platform)` decides automatic selection and `name` is the key the +`BMAD_AUTO_MUX_BACKEND` env var forces (for tests / overrides). `get_multiplexer()` +returns the first backend whose `matches` is true, with tmux as the default +fallback. There are two build paths: extend `BaseTmuxBackend` (`adapters/tmux_base.py`) +for a tmux-family backend — overriding only its single spawn primitive `_run()` +plus the few divergent methods (e.g. the parked-window trailer) — or implement +`TerminalMultiplexer` fresh for a host with no tmux-shaped CLI. The non-transport +seams of a full OS port are in +[Porting bmad-auto to a new OS](porting-to-a-new-os.md). The contract groups into: - **Sessions** — `has_session`, `new_session` (geometry is optional: agent sessions pin a fixed pane size because they are observed while detached; the diff --git a/docs/images/dashboard.png b/docs/images/dashboard.png index 75cb398..4fbdc8c 100644 Binary files a/docs/images/dashboard.png and b/docs/images/dashboard.png differ diff --git a/docs/images/dashboard.svg b/docs/images/dashboard.svg index 6cc46a1..8467f38 100644 --- a/docs/images/dashboard.svg +++ b/docs/images/dashboard.svg @@ -19,226 +19,226 @@ font-weight: 700; } - .terminal-1744094361-matrix { + .terminal-2535703537-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1744094361-title { + .terminal-2535703537-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1744094361-r1 { fill: #c5c8c6 } -.terminal-1744094361-r2 { fill: #e0e0e0 } -.terminal-1744094361-r3 { fill: #a0a3a6 } -.terminal-1744094361-r4 { fill: #0053aa } -.terminal-1744094361-r5 { fill: #e2e2e2;font-weight: bold } -.terminal-1744094361-r6 { fill: #e0e0e0;font-weight: bold } -.terminal-1744094361-r7 { fill: #98e024 } -.terminal-1744094361-r8 { fill: #9d9d9d } -.terminal-1744094361-r9 { fill: #fd971f } -.terminal-1744094361-r10 { fill: #a1a1a1 } -.terminal-1744094361-r11 { fill: #ddedf9;font-weight: bold } -.terminal-1744094361-r12 { fill: #797979 } -.terminal-1744094361-r13 { fill: #262626 } -.terminal-1744094361-r14 { fill: #0178d4 } -.terminal-1744094361-r15 { fill: #e1e1e1;font-weight: bold } -.terminal-1744094361-r16 { fill: #121212 } -.terminal-1744094361-r17 { fill: #191919 } -.terminal-1744094361-r18 { fill: #9e9e9e } -.terminal-1744094361-r19 { fill: #58d1eb } -.terminal-1744094361-r20 { fill: #3e3e3e } -.terminal-1744094361-r21 { fill: #f4005f } -.terminal-1744094361-r22 { fill: #f4005f;font-weight: bold } -.terminal-1744094361-r23 { fill: #ffa62b;font-weight: bold } -.terminal-1744094361-r24 { fill: #495259 } + .terminal-2535703537-r1 { fill: #c5c8c6 } +.terminal-2535703537-r2 { fill: #e0e0e0 } +.terminal-2535703537-r3 { fill: #a0a3a6 } +.terminal-2535703537-r4 { fill: #0053aa } +.terminal-2535703537-r5 { fill: #e2e2e2;font-weight: bold } +.terminal-2535703537-r6 { fill: #e0e0e0;font-weight: bold } +.terminal-2535703537-r7 { fill: #98e024 } +.terminal-2535703537-r8 { fill: #9d9d9d } +.terminal-2535703537-r9 { fill: #fd971f } +.terminal-2535703537-r10 { fill: #a1a1a1 } +.terminal-2535703537-r11 { fill: #ddedf9;font-weight: bold } +.terminal-2535703537-r12 { fill: #797979 } +.terminal-2535703537-r13 { fill: #262626 } +.terminal-2535703537-r14 { fill: #0178d4 } +.terminal-2535703537-r15 { fill: #e1e1e1;font-weight: bold } +.terminal-2535703537-r16 { fill: #121212 } +.terminal-2535703537-r17 { fill: #191919 } +.terminal-2535703537-r18 { fill: #9e9e9e } +.terminal-2535703537-r19 { fill: #58d1eb } +.terminal-2535703537-r20 { fill: #3e3e3e } +.terminal-2535703537-r21 { fill: #f4005f } +.terminal-2535703537-r22 { fill: #f4005f;font-weight: bold } +.terminal-2535703537-r23 { fill: #ffa62b;font-weight: bold } +.terminal-2535703537-r24 { fill: #495259 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - bmad-auto + bmad-auto - + - - bmad-auto — ~/code/acme-search -Runs────────────────────────────20260612-141000-e5f6▶ running  started 2026-06-12T14:10:00  epic 2 - st  run                   type  tasks 5  done 2  deferred 1  escalated 0  2,473,900 tokens - 20260610-090000-a1b2  story ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── - 20260611-101500-c3d4  sweep  story                           phase             dev    review  tokens        info                               - ▶   20260612-141000-e5f6  story  2-1-search-index                done              ×1     ×1      824,400       a1b2c3d4e5f6                       - 2-2-typeahead                   done              ×1     ×2      699,900       b2c3d4e5f607                       - 2-3-search-ranking              review-running    ×1     ×1      504,200       - 2-4-saved-searches              dev-running       ×1     ×0      168,300       - 2-5-search-analytics            deferred          ×2     ×1      277,100       dev budget exhausted (2 attempts)  -JournalLogAttention -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -Sprint──────────────────────────▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▼ Epic 1 · 3/3 ✓09:45:59 session-start            task_id=2-1-search-index  role=dev  story_key=2-1-search-index -├ ✓ 1-auth09:45:59 story-done               story_key=2-1-search-index  commit=a1b2c3d4e5f6 -├ ✓ 2-session-tokens09:45:59 session-start            task_id=2-2-typeahead  role=dev  story_key=2-2-typeahead -├ ✓ 3-password-reset09:45:59 review-cycle             story_key=2-2-typeahead  cycle=2  findings=3 -└ ✓ retrospective09:45:59 story-done               story_key=2-2-typeahead  commit=b2c3d4e5f607 -▼ Epic 2 · 2/509:45:59 story-start              story_key=2-3-search-ranking  epic=2 -├ ✓ 1-search-index09:45:59 spec-approved            story_key=2-3-search-ranking  tokens=1834 -├ ✓ 2-typeahead09:45:59 dev-done                 story_key=2-3-search-ranking  tasks_done=3  tasks_total=3 -├ ▶ 3-search-ranking09:45:59 verify-ok                story_key=2-3-search-ranking  commands=pytest -q, ruff check . -├ ◆ 4-saved-searches09:45:59 review-start             story_key=2-3-search-ranking  role=review -└ ○ 5-search-analytics09:45:59 escalation-preference    story_key=2-3-search-ranking  detail=reviewer used codex for the scoring math -▼ Epic 3 · 0/209:45:59 story-deferred           story_key=2-5-search-analytics  reason=dev budget exhausted -├ · 1-billing-portal -└ · 2-invoices - - -Deferred Work — 2 to answer (d) -DW-1 Harden the OAuth token refr… -DW-2 Add pagination to the searc… -DW-3 Replace the ad-hoc ranking … -DW-4 Flaky retry in the indexer … -DW-5 ✓ Polish the empty-state co… - - - - - -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - y copy  q quit  r run  s sweep  e resume  R resolve  d decisions  a attach  x stop  D delete  A archive  c cleanup  v validate  g setting^p palette + + bmad-auto — ~/code/acme-search +Runs────────────────────────────20260612-141000-e5f6▶ running  started 2026-06-12T14:10:00  epic 2 + st  run                   type  tasks 5  done 2  deferred 1  escalated 0  2,473,900 tokens + 20260610-090000-a1b2  story ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── + 20260611-101500-c3d4  sweep  story                           phase             dev    review  tokens        info                               + ▶   20260612-141000-e5f6  story  2-1-search-index                done              ×1     ×1      824,400       a1b2c3d4e5f6                       + 2-2-typeahead                   done              ×1     ×2      699,900       b2c3d4e5f607                       + 2-3-search-ranking              review-running    ×1     ×1      504,200       + 2-4-saved-searches              dev-running       ×1     ×0      168,300       + 2-5-search-analytics            deferred          ×2     ×1      277,100       dev budget exhausted (2 attempts)  +JournalLogAttention +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Sprint──────────────────────────▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▼ Epic 1 · 3/3 ✓14:50:17 session-start            task_id=2-1-search-index  role=dev  story_key=2-1-search-index +├ ✓ 1-auth14:50:17 story-done               story_key=2-1-search-index  commit=a1b2c3d4e5f6 +├ ✓ 2-session-tokens14:50:17 session-start            task_id=2-2-typeahead  role=dev  story_key=2-2-typeahead +├ ✓ 3-password-reset14:50:17 review-cycle             story_key=2-2-typeahead  cycle=2  findings=3 +└ ✓ retrospective14:50:17 story-done               story_key=2-2-typeahead  commit=b2c3d4e5f607 +▼ Epic 2 · 2/514:50:17 story-start              story_key=2-3-search-ranking  epic=2 +├ ✓ 1-search-index14:50:17 spec-approved            story_key=2-3-search-ranking  tokens=1834 +├ ✓ 2-typeahead14:50:17 dev-done                 story_key=2-3-search-ranking  tasks_done=3  tasks_total=3 +├ ▶ 3-search-ranking14:50:17 verify-ok                story_key=2-3-search-ranking  commands=pytest -q, ruff check . +├ ◆ 4-saved-searches14:50:17 review-start             story_key=2-3-search-ranking  role=review +└ ○ 5-search-analytics14:50:17 escalation-preference    story_key=2-3-search-ranking  detail=reviewer used codex for the scoring math +▼ Epic 3 · 0/214:50:17 story-deferred           story_key=2-5-search-analytics  reason=dev budget exhausted +├ · 1-billing-portal +└ · 2-invoices + + +Deferred Work — 2 to answer (d) +DW-1 Harden the OAuth token refr… +DW-2 Add pagination to the searc… +DW-3 Replace the ad-hoc ranking … +DW-4 Flaky retry in the indexer … +DW-5 ✓ Polish the empty-state co… + + + + + +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + y copy  q quit  r run  s sweep  e resume  R resolve  d decisions  a attach  x stop  D delete  A archive  c cleanup  v validate  g setting^p palette diff --git a/docs/images/demo.gif b/docs/images/demo.gif index 7f67d67..877e065 100644 Binary files a/docs/images/demo.gif and b/docs/images/demo.gif differ diff --git a/docs/images/settings.svg b/docs/images/settings.svg index ae9d405..75ae66d 100644 --- a/docs/images/settings.svg +++ b/docs/images/settings.svg @@ -19,209 +19,209 @@ font-weight: 700; } - .terminal-2898598440-matrix { + .terminal-2665618112-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2898598440-title { + .terminal-2665618112-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2898598440-r1 { fill: #c5c8c6 } -.terminal-2898598440-r2 { fill: #e0e0e0 } -.terminal-2898598440-r3 { fill: #a0a3a6 } -.terminal-2898598440-r4 { fill: #121212 } -.terminal-2898598440-r5 { fill: #6f6f6f } -.terminal-2898598440-r6 { fill: #ffa62b;font-weight: bold } -.terminal-2898598440-r7 { fill: #495259 } + .terminal-2665618112-r1 { fill: #c5c8c6 } +.terminal-2665618112-r2 { fill: #e0e0e0 } +.terminal-2665618112-r3 { fill: #a0a3a6 } +.terminal-2665618112-r4 { fill: #121212 } +.terminal-2665618112-r5 { fill: #6f6f6f } +.terminal-2665618112-r6 { fill: #ffa62b;font-weight: bold } +.terminal-2665618112-r7 { fill: #495259 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - bmad-auto + bmad-auto - + - - bmad-auto — ~/code/acme-search - -~/code/acme-search/.automator/policy.toml -running engines snapshot policy at start — changes apply to new runs and resumes -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▶ gates — approval gates, escalation & retrospective behavior - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▶ review — separate adversarial review session toggle - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▶ limits — cycle/attempt caps, timeout & token budget - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▶ verify — post-implementation verification commands - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▶ notify — desktop & file notifications - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▶ adapter — CLI client, model & bypass flags (base for all stages) - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▶ adapter.dev — dev-stage adapter overrides - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▶ adapter.review — review-stage adapter overrides - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▶ adapter.triage — triage-stage adapter overrides - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▶ sweep — deferred-work sweep automation - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▶ scm — git isolation, branching & merge-back - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▶ cleanup — disk reclamation for .automator/runs (terminal runs only) - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - esc back  ^s save  ^e expand/collapse all  q quit  r run  s sweep  e resume  R resolve  d decisions  a attach  x stop  D delete  A archiv^p palette + + bmad-auto — ~/code/acme-search + +~/code/acme-search/.automator/policy.toml +running engines snapshot policy at start — changes apply to new runs and resumes +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▶ gates — approval gates, escalation & retrospective behavior + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▶ review — separate adversarial review session toggle + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▶ limits — cycle/attempt caps, timeout & token budget + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▶ verify — post-implementation verification commands + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▶ notify — desktop & file notifications + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▶ adapter — CLI client, model & bypass flags (base for all stages) + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▶ adapter.dev — dev-stage adapter overrides + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▶ adapter.review — review-stage adapter overrides + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▶ adapter.triage — triage-stage adapter overrides + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▶ sweep — deferred-work sweep automation + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▶ scm — git isolation, branching & merge-back + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▶ cleanup — disk reclamation for .automator/runs (terminal runs only) + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + esc back  ^s save  ^e expand/collapse all  q quit  r run  s sweep  e resume  R resolve  d decisions  a attach  x stop  D delete  A archiv^p palette diff --git a/docs/images/start-run-modal.png b/docs/images/start-run-modal.png index 411eaba..dc929c2 100644 Binary files a/docs/images/start-run-modal.png and b/docs/images/start-run-modal.png differ diff --git a/docs/images/start-run-modal.svg b/docs/images/start-run-modal.svg index e6104a5..c1a2104 100644 --- a/docs/images/start-run-modal.svg +++ b/docs/images/start-run-modal.svg @@ -19,241 +19,241 @@ font-weight: 700; } - .terminal-418979429-matrix { + .terminal-383589941-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-418979429-title { + .terminal-383589941-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-418979429-r1 { fill: #e0e0e0 } -.terminal-418979429-r2 { fill: #646464 } -.terminal-418979429-r3 { fill: #4a4c4d } -.terminal-418979429-r4 { fill: #c5c8c6 } -.terminal-418979429-r5 { fill: #0a2c4e } -.terminal-418979429-r6 { fill: #646464;font-weight: bold } -.terminal-418979429-r7 { fill: #476419 } -.terminal-418979429-r8 { fill: #494949 } -.terminal-418979429-r9 { fill: #704717 } -.terminal-418979429-r10 { fill: #4a4a4a } -.terminal-418979429-r11 { fill: #704717;font-weight: bold } -.terminal-418979429-r12 { fill: #3b3b3b } -.terminal-418979429-r13 { fill: #1a1a1a } -.terminal-418979429-r14 { fill: #0b3a5f } -.terminal-418979429-r15 { fill: #121212 } -.terminal-418979429-r16 { fill: #141414 } -.terminal-418979429-r17 { fill: #0053aa } -.terminal-418979429-r18 { fill: #e0e0e0;font-weight: bold } -.terminal-418979429-r19 { fill: #232323 } -.terminal-418979429-r20 { fill: #1e1e1e } -.terminal-418979429-r21 { fill: #0178d4 } -.terminal-418979429-r22 { fill: #797979 } -.terminal-418979429-r23 { fill: #191919 } -.terminal-418979429-r24 { fill: #737373 } -.terminal-418979429-r25 { fill: #2e5e68 } -.terminal-418979429-r26 { fill: #6c0a30 } -.terminal-418979429-r27 { fill: #242f38 } -.terminal-418979429-r28 { fill: #000f18 } -.terminal-418979429-r29 { fill: #6db2ff } -.terminal-418979429-r30 { fill: #2d2d2d } -.terminal-418979429-r31 { fill: #ddedf9;font-weight: bold } -.terminal-418979429-r32 { fill: #656565;font-weight: bold } -.terminal-418979429-r33 { fill: #004295 } -.terminal-418979429-r34 { fill: #0d0d0d } -.terminal-418979429-r35 { fill: #455969;font-weight: bold } -.terminal-418979429-r36 { fill: #6c0a30;font-weight: bold } -.terminal-418979429-r37 { fill: #4b4b4b } -.terminal-418979429-r38 { fill: #704d1c;font-weight: bold } -.terminal-418979429-r39 { fill: #282b2e } + .terminal-383589941-r1 { fill: #e0e0e0 } +.terminal-383589941-r2 { fill: #646464 } +.terminal-383589941-r3 { fill: #4a4c4d } +.terminal-383589941-r4 { fill: #c5c8c6 } +.terminal-383589941-r5 { fill: #0a2c4e } +.terminal-383589941-r6 { fill: #646464;font-weight: bold } +.terminal-383589941-r7 { fill: #476419 } +.terminal-383589941-r8 { fill: #494949 } +.terminal-383589941-r9 { fill: #704717 } +.terminal-383589941-r10 { fill: #4a4a4a } +.terminal-383589941-r11 { fill: #704717;font-weight: bold } +.terminal-383589941-r12 { fill: #3b3b3b } +.terminal-383589941-r13 { fill: #1a1a1a } +.terminal-383589941-r14 { fill: #0b3a5f } +.terminal-383589941-r15 { fill: #121212 } +.terminal-383589941-r16 { fill: #141414 } +.terminal-383589941-r17 { fill: #0053aa } +.terminal-383589941-r18 { fill: #e0e0e0;font-weight: bold } +.terminal-383589941-r19 { fill: #232323 } +.terminal-383589941-r20 { fill: #1e1e1e } +.terminal-383589941-r21 { fill: #0178d4 } +.terminal-383589941-r22 { fill: #797979 } +.terminal-383589941-r23 { fill: #191919 } +.terminal-383589941-r24 { fill: #737373 } +.terminal-383589941-r25 { fill: #2e5e68 } +.terminal-383589941-r26 { fill: #6c0a30 } +.terminal-383589941-r27 { fill: #242f38 } +.terminal-383589941-r28 { fill: #000f18 } +.terminal-383589941-r29 { fill: #6db2ff } +.terminal-383589941-r30 { fill: #2d2d2d } +.terminal-383589941-r31 { fill: #ddedf9;font-weight: bold } +.terminal-383589941-r32 { fill: #656565;font-weight: bold } +.terminal-383589941-r33 { fill: #004295 } +.terminal-383589941-r34 { fill: #0d0d0d } +.terminal-383589941-r35 { fill: #455969;font-weight: bold } +.terminal-383589941-r36 { fill: #6c0a30;font-weight: bold } +.terminal-383589941-r37 { fill: #4b4b4b } +.terminal-383589941-r38 { fill: #704d1c;font-weight: bold } +.terminal-383589941-r39 { fill: #282b2e } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - bmad-auto + bmad-auto - + - - bmad-auto — ~/code/acme-search -Runs────────────────────────────20260611-101500-c3d4 [sweep]  ▶ running  started 2026-06-11T10:15:00  epic 2 - st  run                   type  tasks 1  done 1  deferred 0  escalated 0  369,300 tokens - 20260610-090000-a1b2  story ⚑ decision needed: DW-1 — Reopen the OAuth refresh race now, or hold it for the auth hardening epic? - ▶   20260611-101500-c3d4  sweep   press a to attach and answer - 20260612-141000-e5f6  story ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── - story                           phase             dev    review  tokens        info                               - dw-search-pagination            done              ×1     ×1      369,300       2b7f0a91c440                       -JournalLogAttention -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -▔▔▔▔▔▔▔▔▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -09:45:5 -Sprint──────────────────────────09:45:5start runons=2 -▼ Epic 1 · 3/3 ✓09:45:5 -├ ✓ 1-auth09:45:5▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ refresh race now, or hold it for the -├ ✓ 2-session-tokensauth …epic — blank for all -├ ✓ 3-password-reset▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -└ ✓ retrospective▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▼ Epic 2 · 2/5story — 3-1, 3.1, slug, or full key (blank for all) -├ ✓ 1-search-index▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -├ ✓ 2-typeahead▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -├ ▶ 3-search-rankingmax stories — blank for no limit -├ ◆ 4-saved-searches▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -└ ○ 5-search-analytics▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -▼ Epic 3 · 0/2X dry run (print the plan, spawn nothing)  -├ · 1-billing-portal▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -└ · 2-invoices -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - start  cancel  -Deferred Work — 2 to answer (d)▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -DW-1 Harden the OAuth token refr… -DW-2 Add pagination to the searc…▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ -DW-3 Replace the ad-hoc ranking … -DW-4 Flaky retry in the indexer … -DW-5 ✓ Polish the empty-state co… - - - - - -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - y copy  q quit  r run  s sweep  e resume  R resolve  d decisions  a attach  x stop  D delete  A archive  c cleanup  v validate  g setting^p palette + + bmad-auto — ~/code/acme-search +Runs────────────────────────────20260611-101500-c3d4 [sweep]  ▶ running  started 2026-06-11T10:15:00  epic 2 + st  run                   type  tasks 1  done 1  deferred 0  escalated 0  369,300 tokens + 20260610-090000-a1b2  story ⚑ decision needed: DW-1 — Reopen the OAuth refresh race now, or hold it for the auth hardening epic? + ▶   20260611-101500-c3d4  sweep   press a to attach and answer + 20260612-141000-e5f6  story ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── + story                           phase             dev    review  tokens        info                               + dw-search-pagination            done              ×1     ×1      369,300       2b7f0a91c440                       +JournalLogAttention +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +▔▔▔▔▔▔▔▔▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +14:50:1 +Sprint──────────────────────────14:50:1start runons=2 +▼ Epic 1 · 3/3 ✓14:50:1 +├ ✓ 1-auth14:50:1▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ refresh race now, or hold it for the +├ ✓ 2-session-tokensauth …epic — blank for all +├ ✓ 3-password-reset▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +└ ✓ retrospective▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▼ Epic 2 · 2/5story — 3-1, 3.1, slug, or full key (blank for all) +├ ✓ 1-search-index▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +├ ✓ 2-typeahead▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +├ ▶ 3-search-rankingmax stories — blank for no limit +├ ◆ 4-saved-searches▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +└ ○ 5-search-analytics▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +▼ Epic 3 · 0/2X dry run (print the plan, spawn nothing)  +├ · 1-billing-portal▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +└ · 2-invoices +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + start  cancel  +Deferred Work — 2 to answer (d)▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +DW-1 Harden the OAuth token refr… +DW-2 Add pagination to the searc…▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +DW-3 Replace the ad-hoc ranking … +DW-4 Flaky retry in the indexer … +DW-5 ✓ Polish the empty-state co… + + + + + +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + y copy  q quit  r run  s sweep  e resume  R resolve  d decisions  a attach  x stop  D delete  A archive  c cleanup  v validate  g setting^p palette diff --git a/docs/images/sweep-decision.png b/docs/images/sweep-decision.png index 077c112..05ee1ff 100644 Binary files a/docs/images/sweep-decision.png and b/docs/images/sweep-decision.png differ diff --git a/docs/images/sweep-decision.svg b/docs/images/sweep-decision.svg index 61c945e..42e565f 100644 --- a/docs/images/sweep-decision.svg +++ b/docs/images/sweep-decision.svg @@ -19,227 +19,227 @@ font-weight: 700; } - .terminal-3377084179-matrix { + .terminal-1190475483-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3377084179-title { + .terminal-1190475483-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3377084179-r1 { fill: #c5c8c6 } -.terminal-3377084179-r2 { fill: #e0e0e0 } -.terminal-3377084179-r3 { fill: #a0a3a6 } -.terminal-3377084179-r4 { fill: #0053aa } -.terminal-3377084179-r5 { fill: #e2e2e2;font-weight: bold } -.terminal-3377084179-r6 { fill: #e0e0e0;font-weight: bold } -.terminal-3377084179-r7 { fill: #98e024 } -.terminal-3377084179-r8 { fill: #9d9d9d } -.terminal-3377084179-r9 { fill: #fd971f } -.terminal-3377084179-r10 { fill: #a1a1a1 } -.terminal-3377084179-r11 { fill: #fd971f;font-weight: bold } -.terminal-3377084179-r12 { fill: #ddedf9;font-weight: bold } -.terminal-3377084179-r13 { fill: #797979 } -.terminal-3377084179-r14 { fill: #262626 } -.terminal-3377084179-r15 { fill: #0178d4 } -.terminal-3377084179-r16 { fill: #121212 } -.terminal-3377084179-r17 { fill: #191919 } -.terminal-3377084179-r18 { fill: #9e9e9e } -.terminal-3377084179-r19 { fill: #58d1eb } -.terminal-3377084179-r20 { fill: #e1e1e1;font-weight: bold } -.terminal-3377084179-r21 { fill: #3e3e3e } -.terminal-3377084179-r22 { fill: #f4005f } -.terminal-3377084179-r23 { fill: #f4005f;font-weight: bold } -.terminal-3377084179-r24 { fill: #ffa62b;font-weight: bold } -.terminal-3377084179-r25 { fill: #495259 } + .terminal-1190475483-r1 { fill: #c5c8c6 } +.terminal-1190475483-r2 { fill: #e0e0e0 } +.terminal-1190475483-r3 { fill: #a0a3a6 } +.terminal-1190475483-r4 { fill: #0053aa } +.terminal-1190475483-r5 { fill: #e2e2e2;font-weight: bold } +.terminal-1190475483-r6 { fill: #e0e0e0;font-weight: bold } +.terminal-1190475483-r7 { fill: #98e024 } +.terminal-1190475483-r8 { fill: #9d9d9d } +.terminal-1190475483-r9 { fill: #fd971f } +.terminal-1190475483-r10 { fill: #a1a1a1 } +.terminal-1190475483-r11 { fill: #fd971f;font-weight: bold } +.terminal-1190475483-r12 { fill: #ddedf9;font-weight: bold } +.terminal-1190475483-r13 { fill: #797979 } +.terminal-1190475483-r14 { fill: #262626 } +.terminal-1190475483-r15 { fill: #0178d4 } +.terminal-1190475483-r16 { fill: #121212 } +.terminal-1190475483-r17 { fill: #191919 } +.terminal-1190475483-r18 { fill: #9e9e9e } +.terminal-1190475483-r19 { fill: #58d1eb } +.terminal-1190475483-r20 { fill: #e1e1e1;font-weight: bold } +.terminal-1190475483-r21 { fill: #3e3e3e } +.terminal-1190475483-r22 { fill: #f4005f } +.terminal-1190475483-r23 { fill: #f4005f;font-weight: bold } +.terminal-1190475483-r24 { fill: #ffa62b;font-weight: bold } +.terminal-1190475483-r25 { fill: #495259 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - bmad-auto + bmad-auto - + - - bmad-auto — ~/code/acme-search -Runs────────────────────────────20260611-101500-c3d4 [sweep]  ▶ running  started 2026-06-11T10:15:00  epic 2 - st  run                   type  tasks 1  done 1  deferred 0  escalated 0  369,300 tokens - 20260610-090000-a1b2  story ⚑ decision needed: DW-1 — Reopen the OAuth refresh race now, or hold it for the auth hardening epic? - ▶   20260611-101500-c3d4  sweep   press a to attach and answer - 20260612-141000-e5f6  story ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── - story                           phase             dev    review  tokens        info                               - dw-search-pagination            done              ×1     ×1      369,300       2b7f0a91c440                       -JournalLogAttention -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -09:45:59 sweep-start              cycle=1 -Sprint──────────────────────────09:45:59 triage-done              bundles=1  already_resolved=1  decisions=2 -▼ Epic 1 · 3/3 ✓09:45:59 bundle-done              bundle=search-pagination  dw_ids=DW-2 -├ ✓ 1-auth09:45:59 decision-pending         dw_id=DW-1  question=Reopen the OAuth refresh race now, or hold it for the -├ ✓ 2-session-tokensauth … -├ ✓ 3-password-reset -└ ✓ retrospective -▼ Epic 2 · 2/5 -├ ✓ 1-search-index -├ ✓ 2-typeahead -├ ▶ 3-search-ranking -├ ◆ 4-saved-searches -└ ○ 5-search-analytics -▼ Epic 3 · 0/2 -├ · 1-billing-portal -└ · 2-invoices - - -Deferred Work — 2 to answer (d) -DW-1 Harden the OAuth token refr… -DW-2 Add pagination to the searc… -DW-3 Replace the ad-hoc ranking … -DW-4 Flaky retry in the indexer … -DW-5 ✓ Polish the empty-state co… - - - - - -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - y copy  q quit  r run  s sweep  e resume  R resolve  d decisions  a attach  x stop  D delete  A archive  c cleanup  v validate  g setting^p palette + + bmad-auto — ~/code/acme-search +Runs────────────────────────────20260611-101500-c3d4 [sweep]  ▶ running  started 2026-06-11T10:15:00  epic 2 + st  run                   type  tasks 1  done 1  deferred 0  escalated 0  369,300 tokens + 20260610-090000-a1b2  story ⚑ decision needed: DW-1 — Reopen the OAuth refresh race now, or hold it for the auth hardening epic? + ▶   20260611-101500-c3d4  sweep   press a to attach and answer + 20260612-141000-e5f6  story ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── + story                           phase             dev    review  tokens        info                               + dw-search-pagination            done              ×1     ×1      369,300       2b7f0a91c440                       +JournalLogAttention +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +14:50:17 sweep-start              cycle=1 +Sprint──────────────────────────14:50:17 triage-done              bundles=1  already_resolved=1  decisions=2 +▼ Epic 1 · 3/3 ✓14:50:17 bundle-done              bundle=search-pagination  dw_ids=DW-2 +├ ✓ 1-auth14:50:17 decision-pending         dw_id=DW-1  question=Reopen the OAuth refresh race now, or hold it for the +├ ✓ 2-session-tokensauth … +├ ✓ 3-password-reset +└ ✓ retrospective +▼ Epic 2 · 2/5 +├ ✓ 1-search-index +├ ✓ 2-typeahead +├ ▶ 3-search-ranking +├ ◆ 4-saved-searches +└ ○ 5-search-analytics +▼ Epic 3 · 0/2 +├ · 1-billing-portal +└ · 2-invoices + + +Deferred Work — 2 to answer (d) +DW-1 Harden the OAuth token refr… +DW-2 Add pagination to the searc… +DW-3 Replace the ad-hoc ranking … +DW-4 Flaky retry in the indexer … +DW-5 ✓ Polish the empty-state co… + + + + + +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + y copy  q quit  r run  s sweep  e resume  R resolve  d decisions  a attach  x stop  D delete  A archive  c cleanup  v validate  g setting^p palette diff --git a/docs/plugin-authoring-guide.md b/docs/plugin-authoring-guide.md index e9ba28e..fe44249 100644 --- a/docs/plugin-authoring-guide.md +++ b/docs/plugin-authoring-guide.md @@ -600,28 +600,51 @@ goes completely inert — proof of the trust gate. ## Platform portability -bmad-auto's core is portable Python and the tmux dependency is quarantined behind -the multiplexer seam (see the [adapter authoring guide](adapter-authoring-guide.md)). -Plugin **helper scripts** run as standalone `python3