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 25 minutes ago

tovio change newtovio 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 --drafttovio 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.