Why you never see "diverged history"

The error TOVIO removed rather than reworded — and the one place it comes back.

Written By Dustin

Last updated 32 minutes ago

Git's "Your branch and 'origin/main' have diverged" is the canonical example of an accurate, useless error. TOVIO does not have a better version of it. On the native path it does not have it at all.

Why it cannot happen

Divergence is an error in Git because a branch is a single pointer that two people moved. In TOVIO a lane is a conflict-free replicated reference: concurrent advances merge deterministically, and both sides end up with the same result without anyone choosing a winner.

tovio sync

Pushes and pulls in one step. If the remote moved while you were working, that is not an exceptional case to recover from — it is the normal case, and it merges. tovio explain sync <lane> will show you each replica's clock-stamped candidate and which one the merge took, if you want to watch it happen.

What can still need your attention

Content conflicts. If you and a colleague edited the same lines, that is a real disagreement no data structure can resolve. TOVIO records it as a conflict object rather than failing the sync: your tree stays buildable and tovio conflicts lists what is open. That command exits 0 — a conflict is data, not a failure.

The distinction matters. Reference divergence is a design problem, and it was designed away. Content conflict is a genuine human disagreement, and it is surfaced as a first-class object instead of an error.

Where divergence does come back

Both places are the Git boundary, because Git's refs are not CRDTs and TOVIO cannot make them be.

SituationWhat happens
The bidirectional bridge cannot publish a laneThe remote refs/heads/tovio/* advanced since the last cycle, so publishing would be a non-fast-forward. Refused with TVO-MIG-006. The bridge never force-pushes; reconcile the two namespaces through your normal review and land flow.
A plain git push into a Forge is not a fast-forwardRefused with TVO-GHC-061 unless the pushing token carries branch authority. Git refs are not CRDTs, so the Forge's Git surface keeps Git's rules: fast-forward by default, force only for a token entitled to it.