incrementally update cycles in ViewUpdater to avoid need for extensive traverse, implement (and use) a seen-path tracker that's cycle aware...potentially this should be the default option, since otherwise it exposes the driver to infinite looping