argv -> findings -> formatted output -> exit code. Injectable clock and IO.
@spec run( [String.t()], keyword() ) :: 0 | 1 | 2