When a sync is refused

Reading TVO-SYNC and connection errors, and what to do about each.

Written By Dustin

Last updated About 3 hours ago

Sync failures split into three kinds, and telling them apart is most of the diagnosis: the network did not work, the remote is not who you pinned, or the operation was deliberately declined. The third kind is the one people misread — it means the transfer worked and TOVIO chose not to proceed.

Every code below has its own page at https://tovio.dev/errors/<CODE>, and the error catalog on the documentation site is the canonical text. This article is the triage map, not a copy of it.

The network did not work

TVO-SYNC-001 (unreachable), TVO-SYNC-002 (wire-protocol version mismatch), and TVO-SYNC-003 (the connection, handshake, or transfer did not complete).

These are the retryable ones. Your commits are safe and unchanged — TOVIO is offline-first, so keep working and sync later. If a valid address keeps producing TVO-SYNC-003, suspect the pinned certificate rather than the network.

The remote is not who you pinned

TVO-SYNC-004 (the relay's serving identity changed), TVO-SYNC-007 (the repository owner identity changed), and TVO-SYNC-008 (the served policy manifest is unattested, or its version would move policy backwards).

All three fail closed, and none advances a ref. Do not work around them. The first two mean the other end proved itself and is not what you trusted before — confirm a deliberate re-key with the operator before re-pinning, because the alternative explanation is interception. The third is why an owner signature never expiring is safe: version ordering is what stops an old signed manifest being replayed to weaken policy, and the fix is for the owner to publish a newer one.

The operation was declined

TVO-SYNC-006 means a push-only sync would have orphaned a diverged remote tip. Nothing was uploaded. Run a full tovio sync to reconcile on-lane; the push is then a fast-forward.

TVO-SYNC-005 means a partial clone needed an object the promisor could not supply. See the article on filling in a partial clone.

TVO-CONFLICT-004 means the pull brought in a change you depend on that still holds unresolved conflicts, so the sync stopped before pushing. Resolve it, or re-run with --isolate to build against the last known clean version.

Refused at the door

These come from a Forge, before or instead of a transfer, and none of them is a transport problem.

TVO-NET-001 — the connection's source address is not permitted by the CIDR policy, evaluated at admission before the connection ACL and before authentication. This is a Forge feature; tovio serve has no such policy, so it never produces this.

TVO-FORGE-004 — the connection ACL denied you. Worth knowing that the same gate covers the Forge's metadata reads, so an ACL-enabled Forge will also refuse tovio forge lock list and friends to a non-member.

TVO-FORGE-080 — a direct push touched a change-controlled path. Open a proposal instead.

Before you share a failure

Sync errors are written to be safe to paste: they name codes, addresses, and workflow conditions, never file contents, path plaintext, or key material. Still read any terminal transcript you attach for repository paths, hostnames, and identifiers you would rather not publish, and never include the contents of .tovio/.

What is never lost

Every failure above leaves your local history untouched. Nothing in this list is a reason to re-clone, and none of them advances a ref on either side.