It feels this "weird" default is a property of the mix task, it feels weird to let it creep in into the internal API. I have two suggestions:

1. Make the direction explicit and required as argument
2. Require one of `:all`, `:step` or `:to` to be given, raises ArgumentError otherwise. Each task can set the appropriate default