make sure we run cleanup phase if earlier series errors
always call done()