Para 1:Como é, você não tem garantia de que
syncProcess
será executado no momento em que o cliente for exportado. Em vez disso, você deve fazer algo como em esta resposta
e exporte uma promessa em vez disso. Para 2:Com a solução que vinculei na pergunta acima, isso seria resolvido.
Para 3:Uma tabela de atualizações também capturaria exclusões de registros, enquanto simplesmente selecionar no banco de dados não faria isso, pois você não sabe quais registros desapareceram.
Para 4:O segundo comentário após o artigo ao qual você vinculou fornece a resposta (dica:timestamps não são estritamente monotônicos).