Type annotations
They may not be very pretty, and there's still a lot of magic involved, but at least they can pass a typechecker...
Required some minor refactoring, and dead-code removal.
There are still more dicts in play than I'd really like. And the biggest untyped thing are the argparse Namespace objects that get passed almost everywhere.