We have a static analyzer that runs when we submit a diff yes or try to commit, but in our "require_module" we also check for circular dependencies at run time. If you create one you get the module stack dumped into your log and promptly exited with an error message.
Do you have a static analyzer or something like it that enforces the no-circular-dependencies rule, or is it just a procedural thing?