OK, just for fun I tweaked the fx/text widget to not work by having a child for the text content and, sure enough, no cycle was detected. Yay. But methinks a solution to the general case is worth finding, so still hacking on that.
fx/text