ensure step is always async, even if plugins are all sync