!str #16069 disallows using one Keyed sink/source ambiguously (many times)

This can / should wait for Patrik's move-all-the-things PR.
Refs #16069 
ah, I missed that, anyway why all this collect and forall?
isn't it `require(!graph.contains(v)` ?
in the same way as we check `UndefinedSource` / `UndefinedSink` ?