Snapshot of the undo half (oldest first, top-of-stack last). Used by
UndoLog to persist the stack for crash recovery.
Implementation
List<UndoFrame> get undoFrames => List.unmodifiable(
_undo.map((f) => UndoFrame._(f.forward, f.inverse, f.originator)),
);