Records operation on the undo stack. The caller is expected to have already applied the change. Pushing always clears the redo branch. If the stack is at limit, the oldest entry is dropped to make room.