Monitoring
Scheduled starts and stops
Set the window when you build the experiment, and stop relying on somebody remembering.
A schedule starts or stops one experiment without a person present. You set it when you build the test, which is the moment you actually know how long it should run, rather than at the end when the answer is whatever feels right.
The engine ticks every minute. A schedule waiting for its start time is armed; once it fires it is active until a stop condition is met. If the start time arrives but starting now would collide with something already running, the schedule is held rather than forced, re-evaluated on each tick, and fires as soon as the conflict clears.
Held and blocked are separate states because they need different responses. A held schedule clears itself; a blocked one never does and needs a person. Blocking happens when something unmodelled goes wrong, and it emits one alert rather than one a minute, because every action has already had its preconditions checked and repeating a failure every sixty seconds turns one problem into a thousand.
The time-based stop is deliberately not gated on anything. Ending an experiment is always safe, and leaving a broken one running past its planned end compounds one problem with another.