Skip to main content
Lanes, changes & history

Start a new change, parallel or draft

tovio change new, its two flags, and how to describe and promote what you started.

Written By Dustin

Last updated About 1 month ago

tovio change new
tovio change new "fix the parser"

Starts a new change and makes it current. With no --base the next commit stacks on the change you were on. The optional name is a description, not an identifier โ€” the id is minted for you.

Parallel work

tovio change new experiment --base main

--base <lane> starts an independent track on that lane instead of stacking, safely switching and materializing it first. Reach for it when a quick fix should not sit behind a long-running feature.

Either way the prior working state is snapshotted into the op-log first, so the whole new-change boundary is undoable and you never have to stash to cross it.

Draft changes

tovio change new spike --draft
tovio change promote chg:a3f7b2

A draft is private and not landable and not proposable. Attempting either is TVO-OP-012, refused before any ref advances or any Forge call is made. Promoting clears the flag. The draft state is local op-log state, not something baked into a commit.

Describing it

tovio change describe chg:a3f7b2 "Handle the empty-input case"

Both arguments are required: the change and the text. This sets a local description without committing anything, and it is what change list and change show display when a change has no commit yet.

Seeing what you have

tovio change list

Lists every change newest-first, marks the current one, labels drafts, and hides abandoned ones. A change with no commit yet shows (no commit yet) instead of a tip. Add the global --json for the machine-readable form, which includes the abandoned ones with their flags.