extract $WatchProvider.WatchManager
fix one-time listener registration