make outbound algorithm functions more robust

We weren't handling early failures properly. Fixes #2872.