Hi Evan,
Yep, it must have been a while - #4 got fixed and released in April last year.
For the cycle detection, bug
https://github.com/ndmitchell/shake/issues/400 is the open issue.
Essentially there are two types of recursion that Shake detects. In
one case, it spots a recursive loop in the stack, and stops, quite
happily, with a good and precise error message. In the other case,
Shake uses multiple threads that race, and together they form a cycle
- but neither does on their own. In these cases Shake used to
terminate without completing and incorrectly declare success - I've
fixed that. Trying to get a better error message is much trickier, as
the stack isn't encoded explicitly anywhere I can access it, but the
ticket has a great suggestion of something that might work, which I'm
going to try. Hopefully in another year it will be improved too!
Thanks, Neil