Push refused: the remote lane has diverged
TVO-SYNC-006 — why a push-only sync is the one thing that will not auto-reconcile.
Written By Dustin
Last updated About 3 hours ago
TVO-SYNC-006 means a push-only sync — tovio push, or tovio sync --push — would advance a lane whose remote tip is not an ancestor of your local tip. The two tips have diverged.
Why this one is refused when nothing else is
Divergence is normally not an error. A full tovio sync reconciles the two tips on the lane into a two-parent merge-or-conflict commit and reports success, which is why there is deliberately no code for "diverged history".
A push-only sync cannot do that, because it never pulls. Pushing anyway would leave the relay’s tip orphaned off the lane and effectively discard whatever it pointed at. So it is refused client-side, before any object is streamed — nothing was uploaded and no ref moved on either side.
The fix
tovio synctovio sync --pushThe full sync joins the tips on the lane; the push then goes through as a fast-forward. If the reconciliation produced conflicts, resolve them first — a protected lane will not adopt a conflicted tip either.
Use
tovio sync --push, which resolves the origin you cloned from. A baretovio pushwith no arguments does not push — it prints a hint showing the real form and exits0, which is easy to misread as success. The explicit form istovio push <relay> <repo> --cert <file>.
What is not affected
- A genuine fast-forward is admitted normally.
- A first push to a lane the relay does not have is admitted.
- Protected and review-required lanes are excluded from this guard entirely, because they are Forge-advanced rather than pushed.
If it keeps happening
Repeated divergence on one lane usually means two people or two agents are both pushing to it. That is what lanes are for — give the second worker its own lane and land it, rather than racing on a shared one. An agent that pushes on a loop is a common cause.
Reporting it
The code, and whether the lane is shared between people or agents. Not the lane name, the repo id, or the commit addresses.