From c66a863263f6652cfdae58cdc02e65da5f076c8d Mon Sep 17 00:00:00 2001 From: Francisco Solla Date: Mon, 24 Aug 2026 17:37:58 -0300 Subject: [PATCH] style(changelog): prettier no registro B160 --- docs/changelog/2026-08-24-b160.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog/2026-08-24-b160.md b/docs/changelog/2026-08-24-b160.md index 9dcd8311..7a6f51ce 100644 --- a/docs/changelog/2026-08-24-b160.md +++ b/docs/changelog/2026-08-24-b160.md @@ -1 +1 @@ -**B160 — serializar mutações do editor de relações por célula (2026-08-24):** o editor compartilhado (`MunicipalityRelationEditor`, B159) disparava `onToggle`/`onCreate` em paralelo e reconciliava por "última confirmação vence" (`requestSeqRef`/`latestConfirmedRef`), então duas mutações rápidas da mesma célula podiam terminar no banco em ordem diferente da intenção, e a falha revertia só o delta local — podendo apagar alteração posterior válida. **Fila encadeada por instância do editor:** cada toggle/create aplica o delta otimista imediato e enfileira o transporte (`queueRef` + pump serializado com `drainingRef`); o próximo transport só dispara quando o anterior assenta, células/linhas diferentes seguem em paralelo (fila por instância, nunca global). Falha reverte somente o delta do próprio elo (closure) e a fila segue; busy deriva da fila (decrementado em `finally`, nunca preso); no drain o último `selectedIDs` confirmado substitui o estado local só quando a resposta final o trouxe (JSON de assessores/lideranças) — sem ele (dobradinhas) o estado otimista permanece e o RSC reconcilia (`latestConfirmedRef.current = result.selectedIDs ?? null`). Substituída a máquina de sequência: `requestSeqRef` removido (respostas em ordem tornam a comparação de sequência obsoleta), `pendingCountRef` → tamanho da fila, `tempID` de criação desacoplado num contador próprio (`nextCreateTempIDRef`). Contratos `MunicipalityRelationTriggerProps`/`MunicipalityRelationMutationResult`, wrappers e call sites intactos (zero diff); sem migration/access/rotas; UI Impeccable A. Testes: teste que pinava settle fora-de-ordem reescrito para a nova premissa no mesmo commit (B só dispara após A; falha de A não reverte B; busy nunca preso; drain sem `selectedIDs` confia no RSC; paralelismo entre duas instâncias), mantidos dedupe create×RSC e known-entries; suíte unit completa verde (257 arquivos/2460 testes) + int da superfície (30 testes) + e2e smoke `campaignHomeActions` (18 testes, prod mode). Impl plan `docs/plans/serializar-mutacoes-editor-relacao-municipios-impl.md` (self-score 4/5). \ No newline at end of file +**B160 — serializar mutações do editor de relações por célula (2026-08-24):** o editor compartilhado (`MunicipalityRelationEditor`, B159) disparava `onToggle`/`onCreate` em paralelo e reconciliava por "última confirmação vence" (`requestSeqRef`/`latestConfirmedRef`), então duas mutações rápidas da mesma célula podiam terminar no banco em ordem diferente da intenção, e a falha revertia só o delta local — podendo apagar alteração posterior válida. **Fila encadeada por instância do editor:** cada toggle/create aplica o delta otimista imediato e enfileira o transporte (`queueRef` + pump serializado com `drainingRef`); o próximo transport só dispara quando o anterior assenta, células/linhas diferentes seguem em paralelo (fila por instância, nunca global). Falha reverte somente o delta do próprio elo (closure) e a fila segue; busy deriva da fila (decrementado em `finally`, nunca preso); no drain o último `selectedIDs` confirmado substitui o estado local só quando a resposta final o trouxe (JSON de assessores/lideranças) — sem ele (dobradinhas) o estado otimista permanece e o RSC reconcilia (`latestConfirmedRef.current = result.selectedIDs ?? null`). Substituída a máquina de sequência: `requestSeqRef` removido (respostas em ordem tornam a comparação de sequência obsoleta), `pendingCountRef` → tamanho da fila, `tempID` de criação desacoplado num contador próprio (`nextCreateTempIDRef`). Contratos `MunicipalityRelationTriggerProps`/`MunicipalityRelationMutationResult`, wrappers e call sites intactos (zero diff); sem migration/access/rotas; UI Impeccable A. Testes: teste que pinava settle fora-de-ordem reescrito para a nova premissa no mesmo commit (B só dispara após A; falha de A não reverte B; busy nunca preso; drain sem `selectedIDs` confia no RSC; paralelismo entre duas instâncias), mantidos dedupe create×RSC e known-entries; suíte unit completa verde (257 arquivos/2460 testes) + int da superfície (30 testes) + e2e smoke `campaignHomeActions` (18 testes, prod mode). Impl plan `docs/plans/serializar-mutacoes-editor-relacao-municipios-impl.md` (self-score 4/5).