Record why you resolved it

--why and the rationale flags, so the next person is not guessing.

Written By Dustin

Last updated About 3 hours ago

A conflict resolution is a decision, and it is one of the few decisions in version control that leaves almost no trace of its reasoning. The diff shows what you chose. It never shows what you rejected, or why.

tovio resolve <path> --theirs --why "their retry loop handles the timeout case ours missed"

This attaches a rationale to the resolving commit, where tovio log --why can surface it later.

The fuller form

FlagRecords
--why <TEXT>A one-to-two-sentence summary. The anchor the others hang off.
--decision <TEXT>The decision and its governing reason. Defaults to --why.
--rejected "<option> :: <reason>"An alternative you considered and turned down. Repeatable.
--dead-end <TEXT>An approach you explored and abandoned. Repeatable.
--confidence <LEVEL>low, medium or high.
--ref <TOKEN>A cross-reference: an ADR id, a ticket, a chg: link. Repeatable.

Every one of these requires --why, and --why requires a strategy flag — so rationale attaches to a decision you actually made, never to a bare invocation.

tovio resolve src/auth.rs --ours --why "keep our session check; theirs drops the clock-skew tolerance" --rejected "take theirs :: simpler, but reintroduces the skew bug" --confidence high --ref chg:7f2a

Reusing a rationale you already wrote

tovio resolve <path> --ours --rationale-ref <addr>

Links an existing rationale object instead of authoring one inline. It is mutually exclusive with the inline flags — one source or the other, not both.

Protected paths

When the resolved path is policy-protected, the rationale is sealed automatically. Explaining why you chose one side over another can say as much about a secret as the secret does, so it gets the same protection the path has. Readers with a key see it; everyone else sees a locked marker, never a partial hint.

It does not change the resolution

Rationale is passive metadata. Two resolutions that differ only in their rationale are the same resolution: it does not enter the key used to replay recorded resolutions, and it does not alter what lands. You can be as thorough as you like without affecting the result.

Reading it back

tovio log --why
tovio blame <path> --why