Systemd does detect and log cycles and breaks them by arbitrarily removing one dependency.
Thought in this case there is an invisible (to systemd) dependency where a service depends on a network interface, but that interface is created by an arbitrary other service.
So you have to manually create a dependency between these services to make it visible.