Configuration watcher
Assertions requiring a service with name matching
ConfigWatcher cause the server to start a configuration watcher service monitoring files in
and subdirectories of the given path for changes:
ConfigWatcher = <config-watcher @path string @env ConfigEnv>.
ConfigEnv = { symbol: any ...:... }.
The path may name either a file or directory. Any time the configuration watcher finds a file
matching the glob *.pr within the tree rooted at path, it loads the file. Each time a
*.pr file is loaded, it is interpreted as a configuration scripting
language program, with a copy of env as the "initial environment" for the
script.
Whenever a change to a *.pr file is detected, the configuration watcher reloads the file,
discarding previous internal state related to the file.
Note that a quirk of the config language requires that there exist an entry in env with key
the symbol config and value an entity reference (usually
denoting a dataspace entity). However, the config entry need
not be the same as the surrounding $config! A useful pattern is to set up a new
ConfigWatcher with env containing a config binding pointing to an
attenuated reference to the current config dataspace, or
even an entirely fresh dataspace created specifically for the
task.