Goal
Collapse the launcher/agent sprawl into a minimal, config-driven pattern.
Target end state
- One poller —
bubo-poller; provider from [scm].provider / BUBO_PROVIDER.
- One agent path — the poller runs
[agents].reviewer_command directly from config; Codex is just another configured command (no bubo-codex / codex_runner special-casing). Bring-your-own-CLI: any agent with a CLI works.
- One bin dispatcher —
bin/bubo <subcommand> with functions; no wrapper-calling-wrapper.
- Kept behind the abstraction (real difference, not duplication): the
gitlab.py / github.py provider modules.
Stages (sequential — they share pyproject[project.scripts], test_deploy_layout, bin/, recipes; not cleanly parallelizable)
Decisions
- Clean-cut (no deprecated shims) — per "no loose ends in production code."
- Pre-1.0 (
major_version_zero): each stage is a ! minor bump with a CHANGELOG migration note.
Goal
Collapse the launcher/agent sprawl into a minimal, config-driven pattern.
Target end state
bubo-poller; provider from[scm].provider/BUBO_PROVIDER.[agents].reviewer_commanddirectly from config; Codex is just another configured command (nobubo-codex/codex_runnerspecial-casing). Bring-your-own-CLI: any agent with a CLI works.bin/bubo <subcommand>with functions; no wrapper-calling-wrapper.gitlab.py/github.pyprovider modules.Stages (sequential — they share
pyproject[project.scripts],test_deploy_layout,bin/, recipes; not cleanly parallelizable)bubo-gh-poller: refactor(A): drop the conveniencebubo-gh-pollerentry point (provider via config) #66bin/bubodispatcher (do LAST): refactor(C): collapse bin/ launchers into a singlebin/bubodispatcher #68Decisions
major_version_zero): each stage is a!minor bump with a CHANGELOG migration note.