@Override
			public TraceSchedule validate(Trace trace, TraceSchedule schedule) {
				if (!schedule.pSteps.isNop()) {
					return null;
				}
				List<Step> steps = schedule.steps.getSteps();
				if (steps.isEmpty()) {
					return schedule;
				}
				if (steps.size() != 1) {
					return null;
				}
				if (!(steps.getFirst() instanceof TickStep ticks)) {
					return null;
				}
				if (ticks.getThreadKey() == -1) {
					return schedule;
				}
				if (trace == null) {
					return null;
				}
				TraceThread eventThread = schedule.getEventThread(trace);
				TraceThread thread = ticks.getThread(trace.getThreadManager(), eventThread);
				if (eventThread != thread) {
					return null;
				}
				return TraceSchedule.snap(schedule.snap).steppedForward(null, ticks.getTickCount());
			}
The schedule consists of a snapshot and some number of instruction steps on the event
thread only.
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/time/schedule/TraceSchedule.java