Yeah it's more of a devel topic, but since we've started the thread, I'll share a bit.
I already have several things in mind - but they are hard to detail over text for me for an extent. While I generally want to make this project as maximally open to code review as possible, with some exception, reviewing outside refactorings is one of those things that I want to audit like a razor and I need to be really really really careful, so in general, unless discussed first, we /don't/ take outside refactoring requests because they are too dangerous. Some contributions are really easy - especially new things - to take in - and we have increasing test and integration coverage - though subtlety still lurks in places. So just saying that so someone doesn't try - refactoring changes in certain places can also invalidate a lot of pull requests, though Runner is not one of those things that are in major flux.
It's really something James and I have some plans for, and it's going to start being a major priority over the coming releases or two. It's also a bit more of a philosophy - when some code is touched, clean it up a bit and leave it more organized than it was originally.
I've also taken a few (aborted) stabs in this direction, so I have a feeling of where it needs to go. It will probably start with just breaking more things into smaller functions, for starters, but eventually I want to see task objects passed into Runner directly.
For new folk, I do want to stress though that the tree is in good shape - we just want to make it even easier to contribute to, and easier to stretch in new directions, without making it harder to follow.