% Undo, redo and units of interaction
I don't think I'm doing anything revolutionary with my undo system, but hopefully making the reasoning behind it very explicit will elucidate any missing steps in the reader's or my thinking.
A large part of this is trying to define 'units of interaction' for the user and then matching that to what can be robustly determined and stored in the software.
I describe this here as a roughly linear sequence for the sake of clarity. In reality the process was more iterative, and broadly follows Casey Muratori's Semantic Compression approach.