From 0d82162a0e68b8a7d63d1b44469144fec736b5d7 Mon Sep 17 00:00:00 2001 From: Esdras Renan Date: Sun, 19 Oct 2025 20:39:09 -0300 Subject: [PATCH] docs: registrar sincronizacao do cronometro --- docs/DEV.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/DEV.md b/docs/DEV.md index 9e79e79..d6fc8f9 100644 --- a/docs/DEV.md +++ b/docs/DEV.md @@ -153,6 +153,13 @@ Artefatos: `apps/desktop/src-tauri/target/release/bundle/`. | Vitest trava em modo watch | Script `pnpm test` sem `--run` e CI detecta TTY | Ajustado para `vitest --run --passWithNoTests`. Localmente, use `pnpm test -- --watch` se quiser. | | Desktop não encontra updater | Falta `latest.json` ou assinatura inválida | Publicar release com `*.sig` e `latest.json` apontando para os pacotes corretos. | +## Cronômetro dos tickets + +- A UI e o backend agora compartilham um relógio real alinhado via `serverNow`. Toda resposta de `tickets.workSummary`, listagens de tickets e mutations `startWork/pauseWork` envia `serverNow` (epoch UTC). +- O frontend (`ticket-summary-header` e tabela) calcula um deslocamento (`offset = Date.now() - serverNow`) e projeta `Date.now()` para a linha do tempo do servidor usando `toServerTimestamp`. Isso elimina drift quando o navegador está adiantado/atrasado. +- Durante o `startWork`, se a mutation retornar `status = already_started` sem `startedAt`, a UI usa `getServerNow()` como fallback, e assim que o Convex reenviar a sessão ativa, o reconciliador (`reconcileLocalSessionStart`) substitui o valor local. +- O tempo em execução exibido “ao vivo” torna-se idêntico ao acumulado após pausar, com tolerância de ±1 s por conta do tick do cronômetro. Ao depurar inconsistências, verifique se `serverNow` está chegando (painel de rede) e se o offset em `ticket-timer.utils.ts` está sendo calibrado. + ## Referências úteis - **Deploy (Swarm)**: veja `docs/DEPLOY-RUNBOOK.md`.