Landing with a conflict open

What land actually refuses, and what it lets through.

Written By Dustin

Last updated About 3 hours ago

"Conflicts do not block you" is true, and it is not a slogan — but the exact boundary is worth knowing, because tovio land behaves three different ways depending on what is conflicted and what you are landing onto.

1. Landing from a tip that is already conflicted

Refused. If your lane, the target, or the merge base still carries unresolved conflicts, the land does not start. You are being asked to say what your own change means before it is merged into anyone else's.

tovio health
tovio resolve

2. Landing that produces conflicts, onto an ordinary lane

Succeeds. The lane advances, the conflicts are materialized into the resulting commit as objects, and the command exits 0 naming every conflicted path. This is the normal case and the one that most surprises people arriving from Git: the merge completed, and the conflicts are its output rather than its failure.

tovio conflicts

3. Landing that produces conflicts, onto a protected lane

Refused, with TVO-CONFLICT-003, and nothing is written. A protected lane must only ever point at a conflict-free commit — that is the whole point of protecting it. Resolve first, then land.

The same rule is enforced twice, deliberately: once by your client, and again by the relay when a push would advance a protected lane. A client that skipped the check does not get to slip a conflicted commit onto main.

On a Forge

A lane that requires review is advanced by the Forge rather than by a client, so it never travels the path where the relay does its checking. The Forge therefore re-runs the same conflict-free certification against the reviewed commit before it moves the ref.

A conflicted commit is refused there too, under TVO-CONFLICT-009. Over HTTP it comes back as 422: the ref does not advance and the proposal does not flip to landed. A merge queue applies the same rule to its speculative merges — a rederive that conflicts bounces instead of landing.

Three enforcement points, one rule. Protected means protected regardless of which path the change took to get there.

Landing several lanes at once

An n-way land merges every clean path in one commit. If several lanes changed the same path incompatibly and there is no terminal to resolve interactively, it stops with TVO-CONFLICT-016 and tells you to land them one at a time rather than picking a winner on your behalf.

Checking before you try

tovio health
tovio health --into <lane>
tovio status --conflicts

health reports whether the lane is landable and why not — and exits 0 either way, so it is safe in a script that is asking rather than asserting.