Seeing lanes diverge: the lane timeline¶
You've met lanes and how branching works. But when several are in flight at once, one question is hard to answer from a wall of text:
"Where did these lanes actually diverge — and where did they come back together?"
tovio explain lanes draws it. Every lane becomes a row, time runs left → right, and the
connectors show where each lane branched off and where a land merged it back.
What it looks like¶
Here is a repository with four lanes — main and three feature lanes. One (feature-a) has already
been landed back onto main; two are still diverged.
tovio explain lanes --format html renders, embedded here with this site's colour tokens.How to read it¶
- Each row is a lane.
mainis on top; the others are your work-in-flight. - A dot is a commit, placed by how deep it is in history — so older is left, newer is right.
- A dashed line is a recorded fork — where a lane branched off, read from the signed record TOVIO
wrote when the lane was created.
feature-cwas cut frommain, and TOVIO knows it. - A dotted line is an inferred fork — where a lane's history meets another's, worked out from the
commit graph because no record exists. That is the only answer Git can give, and TOVIO labels it as
one.
feature-aandfeature-bare inferred here. - A solid line is a merge — where a
landbrought a lane back. Herefeature-arejoinsmain. - A ring ⌾ is a merge commit (it has two parents, one from each lane); a glowing dot is a lane's current tip.
The whole picture answers "where did these diverge?" at a glance — the thing a flat list of commits, or
even the terminal's tovio log --graph, can only hint at.
Recorded or inferred?¶
A fork is recorded when the lane was created with tovio lane (or the Git-compatible checkout -b) in
a repository that has an identity. The signed audit entry for that creation carries the commit the lane was
cut from and the name of the lane it was cut from. A fork is inferred in every other case: a lane created
before origins were recorded, in a Simple repository, or on another machine.
That last case matters: audit entries do not sync, so a teammate's clone sees the forks of lanes you created as inferred. The record lives on the machine that made it.
tovio --json lane shows a recorded origin directly, including whether it still resolves. If the lane it
names has been deleted, or its name reused for a lane that no longer contains the fork commit, the origin
keeps its commit and reports that the name no longer resolves.
Try it on your own repository¶
That prints the same trace in your terminal — each lane, how far ahead / behind main it is, where it
was cut from when that is recorded, and its fork point inferred from the graph. To get the visual above as
a standalone, offline page you can open in a browser or share:
Focus on specific lanes, or widen the time window:
tovio explain lanes feature-a feature-b # just these two
tovio explain lanes --limit 80 # show more history
And for tooling, the same trace as structured data:
explain is a whole family
lanes is one lens of tovio explain. The others debug a single operation the same way —
tovio explain merge (how a land would resolve), explain sync (why a lane pointer moved),
explain deps, explain rerere, and more. Every one renders to your terminal, --json, or a
self-contained HTML page.
Why this is safe to stare at¶
TOVIO is built so that divergence is data, not danger — a sync you run reconciles a diverged
unprotected lane on the lane into a merge-or-conflict commit (both tips become parents, nothing stranded),
changes keep their identity through every rewrite, and conflicts are stored, not lost. So a busy timeline
with lots of forks isn't a warning sign; it's just parallel work, and the merges show it coming back
together. That's the fearlessness idea, made visible.
Related: Change vs lane · Branching workflows · Coming from Git
Last reviewed September 19, 2026
Suggest an improvement to this page Not for security reports — see disclosure