`ast#run` must not throw errors, must call cb or reject promise