← Blog

bay 0.2.0: more merges, safer promotion

Gudjon Gudjonsson · Founder and CEO of OZ · 21 October 2026

bay 0.2.0 is out today. It is the first minor release since bay launched. It adds config tables, result fields and reason codes, so read the changelog before you turn anything on. 0.x means a minor release can still change a command, and the changelog names each change.

More merges a day

One queue checks one change at a time, so check time, not merging, sets the limit of a main branch. 0.2.0 adds four ways to get more merges from the same checks, and names flaky checks. Each of the four reuses evidence, so it needs evidence_reuse = "exact-inputs" in your config.

  • Checks ahead of the turn: [executor] ahead checks queued changes on the main they will most likely meet.
  • Path lanes: footprint_lanes checks a queued change beside the head when their paths do not overlap.
  • Carried results: with footprint_lanes on, a footprint = true check keeps its result when nothing it reads changed.
  • Batches: batch checks several queued changes as one tree, and bisects a batch that fails.
  • Flaky checks, named: retry_on_failure reruns a failed check, and a failure then a pass is flaky.

Changes still merge in queue order, and each keeps its own commit. A batch member stands on its batch's checked tree, and its record says so.

Safer paths to production

Main is rarely the last stop, so 0.2.0 looks after the branches that follow it.

  • Promotion targets: [[target]] names a branch such as staging, with its required checks and a soak time.
  • Freeze windows: [[freeze]] holds a target, and only a fix or an undo moves it until the window ends.
  • Held on a bay host: a host from bay host init refuses a push that moves a target to a failing commit.
  • Sandbox lanes: bay start --lane opens a change whose checks run, but which never merges into main.
  • No leaks: bay refuses a change that brings a lane's commits toward main, and names a merge elsewhere that did.
  • A person's approval: an approval check holds changes on risky paths until an enrolled approver signs a yes.

On another host, bay watch names a target that moves off its source line or fails its checks. Only a bay host judges soak and freeze.

Red main at scale

On a busy main, a post check often runs on only some merges. So 0.2.0 says what it knows, and what it does not.

  • A window you set: [red] window sets how many main commits bay reads to judge red.
  • Pending is not clear: a post check with no answer in the window shows as red_pending.
  • A suspect range: a red check names its last pass, its first failure, and the merges between.
  • The culprit: with bisect_post, the executor narrows that range to one merge, then reruns it once.

Who did what

When many agents share one main, you need to know who does what, and which executors run.

  • One key per agent: require_actor_proof refuses a merge while several agents share one agent key.
  • Overlaps up front: bay start and session start name the live changes that declare the same files.
  • Early conflicts reach the agent: a queued change's merge conflict reaches its agent once, with the paths.
  • Executor presence: each executor reports its version, machine and queue, and bay status warns when none is live.
  • Timing: every finished operation records its submit, queue, head, check and merge times.

Off until you turn it on

Every new rule and every new lever is off by default. With your current config, no new refusal applies to your changes. The new reports, such as timing, overlaps and executor presence, refuse nothing.

Upgrade

On a new machine, install bay with one command. On a machine with bay, run bay update, or let the daily check install it. Update a host from bay host init first, then the machines that push to it. An older bay refuses config keys it does not know. So merge a new table only after every machine runs 0.2.0.

sh
curl -fsSL https://getbay.io/install.sh | sh   # a new machine
bay update                                      # a machine with bay

The Update page and the changelog list each step and each change.

What we have not measured

These levers aim to get more merges from each check. We have not measured them on a real fleet yet, so every speed figure on this site stays a target. The new timing fields let you measure your own wait, before and after.

To teach your coding agent bay, add the skill: npx skills add gudjon/bay --skill bay -g. To help build bay, email the founders at hello@getbay.io.

Gudjon Gudjonsson · Founder and CEO of OZ