decoupled watcher so that only one is created per file, rather than one per connection