0010 — Sinal de reset do Powersync via bi_configuracao¶
Status: Aprovado · Responsável: Gustavo Madruga · Atualizado em: 2026-06-11 · Decidido em: 2026-05-26
Contexto¶
Depois de um reset do Powersync (ver decisão 0009), o cliente Dart
reaproveita o SQLite local e fica dessincronizado do servidor já zerado.
Precisa de um sinal que dispare disconnectAndClear no cliente.
Este sinal foi adicionado depois do primeiro reset real em produção (maio/2026): observou-se que o cliente Flutter não re-baixava os dados — o PowerSync só sincroniza deltas e o cliente não tinha como saber que o Mongo fora recriado.
Decisão¶
No STEP_FINALIZAR, o pipeline faz UPSERT em bi_configuracao.ultimo_nuke
(valor = NOW()::TEXT). O PowerSync replica essa linha; o cliente compara com o
último valor visto em SharedPreferences['ps.ultimo_nuke'] e dispara
disconnectAndClear quando muda.
Consequências¶
bi_configuracaoé uma tabela KV (id TEXT PK) sincronizada (streamrecent_data, priority 0); serve também para outras configs globais.- Backend consome via
ConfigService(cache in-memory, TTL 30 s). ultimo_nukeé chave de sistema (sistema=TRUE): read-only na tela/admin/configuracoes; POST manual retorna 403.
Alternativas consideradas¶
- Flag booleano (
reset=true) em vez de timestamp: entraria em loop infinito — o cliente lêreset=true, fazdisconnectAndClear, reconecta, lêreset=truede novo… O timestamp monotônico resolve: o cliente guarda o valor visto antes do clear e, ao reconectar, compara igual = igual → não redispara. Descartado. - Push notification ao cliente: exige infra de notificação extra; o sinal via tabela já replicada é mais simples. Descartado.
- Cliente detectar por heurística (ex. contagem de linhas): frágil e ambíguo. Descartado.