Yes, you are correct about SwitchS, Defer, and Split not actually causing a cycle. The implementation for these methods should avoid causing a cycle in the node graph.
I already wrote a test for SwitchS on a CellLoop which initially failed. I made a simple change to the implementation of SwitchS such that the Listen on the outer Cell has a target of a new node with rank 0 rather than the output node. This breaks the cycle and still has correct behavior.
I will do the same for Defer and Split.
The only remaining issues I see with loops are SwitchC on a CellLoop and the obvious case (feedback loops). Currently, these types of loops will not be supported by the C# implementation and will throw an exception when they are constructed. Transaction.Post (or Operational.Defer) must be used to emulate this type of logic. This route simplifies things (no changes to the implementation or possibly to the denotational semantics) and also has the advantage of making it obvious where in the code these cycles occur as the developer must be careful to ensure they eventually stabilize. The disadvantage is that they exhibit "glitch" behavior. Any dependency of a value involved in the cycle will see the intermediate steps of the recursion as each step is performed in its own transaction.
I believe that if we do wish to support these cycles, it would be possible, although not trivial. Graph loops could be treated in a special way in the prioritization code such that any nodes outside of the graph are given a higher rank than anything within the cycle to ensure the cycle terminates before any nodes depending upon values in the cycle execute.
I'd appreciate your opinion on what you believe to be the best way to proceed. Would supporting cycles be worth the extra effort (or even possible)?
Also, with respect to the denotational semantics, I am curious as to why you say the feedback loop is "illegal" according to the denotational semantics. It seems to me that it is simply a recursive composition of the primitives which has the same pitfalls as any other type of recursion (it needs to stabilize in a reasonable amount of steps or it will cause a stack overflow).