Records editing changes as raw key sequences for dot repeat.
The phase carries exactly one active lifecycle, while replay can preserve a post-replay recording phase that is restored after the outermost replay returns normally.
Summary
Types
@type key() :: {non_neg_integer(), non_neg_integer()}
@type phase() :: :idle | {:recording, [key()]} | {:replaying, pos_integer(), post_phase()}
@type post_phase() :: :idle | {:recording, [key()]}