Positional arguments with underscores are flagged as positional by storing the
name *with* the underscore in a list. However, the flag is set somewhere else
in the code, where the underscore has been replaced for a dash. Hence, the
positional test fails and the task argument is left in a weird limbo of not
being neither positional nor optional.
The fix is easy: simply move the positional and optional tests to before the
name change happens :)