How are you changing runtime.json?  I've found that if I do it in vi, it breaks the watch because vi doesn't overwrite - it moves the old file and creates a new file, then removes the moved file.

When you overwrite runtime.json it works as expected.  An alternative could be to put a heartbeat timeout watching for runtime.json having a different inode, but I think this is an edge case when hand editing runtime.json vs. anything happening out in the data centers - such as a node.js or python script overwriting it.