Without explanation, a non-best efforts plan with an Observation having "lots" of repeats quits early with a message ***Running Plan xxx (best efforts) completed early: Obs yyy would not meet constraints. This is bogus.
Step 9 needs better error messages in case it is tripped as an assert instead of working for Best Efforts.
Caused by the "Step 9" check in the observation set count loop. The call to TestConstraints() does not take into account the number of repeat sets that have been completed!! It is available in the Observation's SetsCompleted property.