v0.1.0b4 — 2026-04-27¶
Production-feedback cut. Two structural fixes prompted by observed gaps in the first Mini-local saturate run against the Contably codebase. Both increase how much oxi gets done per dollar.
Headline¶
saturate now closes the loop on shipped work. The continuous-dispatch supervisor was missing two flow steps that oxi v3 tick already ran: pr_watcher.watch (stamps PRs onto tasks, transitions merged/closed) and auto_merge.run (critic-gated auto-merge). Without them, saturate dispatched forever without ever closing the loop — operators had to manually merge every PR even when the critic would have approved it. New iteration body: ingest → auto_observe → seed → dispatch_loop → pr_watcher → auto_merge. (#211)
What else changed¶
-
ship_recoveryrescues failed-task work. The candidate filter wasstatus = 'dispatched' AND pr_number IS NULL. After a worker crashed (SIGTERM, turn-budget exhaustion, rate-limit timeout), dispatch classified it asfailedbefore ship_recovery saw it. The work — real commits in the worktree — got silently discarded. New filter:status IN ('dispatched', 'failed'), plus a newpush_onlymode for the case where the worker committed real work but exited before reaching the push step. Observed in production: $4.24 of T0-1/T0-3 commits would have been auto-recovered by this. (#210) -
No adapter changes.
0.1.0b4is engine-only. Adapters that work on0.1.0b3work on0.1.0b4unchanged.
Observed impact (first Mini-local saturate run, 2026-04-27)¶
| Metric | b3 | b4 (predicted) |
|---|---|---|
| Hit rate | 1 of 3 dispatches → PR | 3 of 3 (T0-1 + T0-3 would auto-recover) |
| Cost per recoverable PR | $5.90 | ~$1.97 |
| Manual operator merges | All PRs | Only critic-rejected |
What "beta" means (unchanged)¶
- No breaking changes within
0.1.0b*. Adapters that work on0.1.0b1work on0.1.0b4. - Adapter protocol is frozen until
0.2.0a*. - Auto-merge defaults stay off. Operators opt in per
DispatchPolicy().auto_merge.
Install¶
--pre remains required.
What's next¶
0.1.0b5+: persist per-session dispatch logs to<oxi_dir>/dispatch-logs/<session_id>.logfor forensic-grade failure investigation0.1.0b5+: continue ratcheting v3/ modules into the mypy strict list
Audit trail¶
PRs merged into this cut: #210 (ship_recovery extension), #211 (saturate flow).