I think there are some races that can happen here. It may be more complex to solve than I initially thought:

- Job removal triggers `rectify` via `watchHost`, which we don't want to happen until all jobs have been seen to prevent extra jobs from being scheduled.
- If we defer calling `watchHost` until after all jobs have been added, some of them might disappear and we'll miss the events.

I think the solution is to defer `watchHost` to the end of this loop and then do another full sync after all hosts are watched, but I haven't fully thought it through.