Whoops! The Python API actually adds rules one at a time which is something we probably want to maintain the ability to do. This means we can't analyze the whole AST to determine cyclefreeness (and other static analysis things) since we'll throw that away once we build the spec :(
Right now, it is safe since cyclefreeness isn't assumed and we only actually use exclusive rules (and possibly new end points) to possibly throw warnings. However, we need to fix it so it works as expected.
There is really only one way to do this, which is to rework static analysis to operate on specs instead of ASTs. It might be easier anyway, but this is annoying since I already did that work
Again, though, this is safe, so not a high priority.