A burst of 200 operations within milliseconds sometimes made macOS coalesce events into a rescan,
which notify 4 does not deliver, failing the test about 4 times in 10 even with the fix. With a
5 ms pause per iteration the fixed code passed 20 of 20 runs; the unfixed code still loses about a
third of the creations (60-67 of 100).
Vfs::commit_event calls StdBackend::unwatch for every removed path, but only the roots passed to
watch() are watched. unwatch forwarded every path to notify anyway, and notify's FSEvents backend
handles an unwatch by tearing down and restarting its event stream; whatever changed during the
restart was never reported. Deleting files while others change (a git checkout, a branch switch)
therefore dropped events, and the served tree went stale without any error.
Only call the watcher's unwatch for paths that are actually watched. The new test deletes 100
files (calling unwatch on each, as commit_event does) while creating 100 others: before this
change macOS reported 1 of the 100 creations, now all 100.