A rule ends up depending on its own output
The dependency graph must be acyclic. A cycle usually appears when a rule's input and output patterns can match the same filename, so the file is required in order to build itself.
Print the graph and look at where it loops: snakemake --dag | dot -Tsvg > dag.svg. The fix is nearly always to make the output name distinguishable from the input (a different suffix or directory) rather than to restructure the workflow.