Solid box = current checkpoint.
Dashed box = current visible state when it differs from the checkpoint.
Major change: Create a checkpoint.
Minor change: Create no checkpoint. Formally desynchronize history.
Ignored change: Create no checkpoint. Do not affect history.
Undo: By default, move to the previous checkpoint. If the current state is dirty, first add a just-in-time tail checkpoint for that state, then move to the previous (original) checkpoint.
Redo: Move to the next checkpoint, including a tail checkpoint when one is present. Not allowed from a dirty state.

Undo JIT Tail Demo

:
: