added a tick-bounded overload for runUntil()