Builds 287 and 290 failed TestBuildCancelRunning on the CI host: the clone and checkout phase was not cancellable, so a cancel during it waited for git. One runStep now drives every phase with the cancel signal and the deadline, and checks the signal before starting. The runner logs how a log session ended when it was not a cancel. Test budget is 60s against a 120s sleep.
Ref #90