client: correctly handle timeouts
client: implement RecursiveWatch