public override void RecordFrame(int frame, IController source)
        {
            // RetroEdit: This check is questionable; recording at frame 0 is valid and should be reversible.
            // Also, frame - 1, why?
            // Is the precondition compensating for frame - 1 reindexing?
            if (frame != 0)
            {
                ChangeLog.AddGeneralUndo(frame - 1, frame - 1, $"Record Frame: {frame}");
            }

            var lg = LogGeneratorInstance(source);

            SetFrameAt(frame, lg.GenerateLogEntry());

            Changes = true;

            LagLog.RemoveFrom(frame);
            LagLog[frame] = _inputPollable.IsLagFrame;

            if (this.IsRecording())
            {
                TasStateManager.InvalidateAfter(frame);
                GreenzoneInvalidated(frame + 1);
            }

            if (frame != 0)
            {
                ChangeLog.SetGeneralRedo();
            }
        }
        public override void Truncate(int frame)
        {
            bool endBatch = ChangeLog.BeginNewBatch($"Truncate Movie: {frame}", true);

            ChangeLog.AddGeneralUndo(frame, InputLogLength - 1);

            if (frame < Log.Count - 1)
            {
                Changes = true;
            }

            base.Truncate(frame);

            LagLog.RemoveFrom(frame);
            TasStateManager.InvalidateAfter(frame);
            GreenzoneInvalidated(frame);
            Markers.TruncateAt(frame);

            ChangeLog.SetGeneralRedo();
            if (endBatch)
            {
                ChangeLog.EndBatch();
            }
        }