Files
DeskcommCRM/evidence/raio-board-MORTO.png
Rafael Melgaço c3b62599e4 test(crm-vivo): o raio do silêncio — a entrega morre e NENHUMA superfície avisa
Pergunta de produto, não de defeito: com a entrega de postgres_changes morta, o
que o usuário vê? Ela sobrevive a qualquer conserto da raiz de hoje.

INSTRUMENTO: proxy de WebSocket que engole SÓ os quadros de dados e deixa passar
join, phx_reply e heartbeat — o canal continua confirmando e o app continua
achando que está vivo. Fechar o socket seria outro defeito, visível, e mediria a
tela errada. Tudo rodado no pipeline SAUDÁVEL: medir no CRM Vivo empilharia as
duas mortes e a rodada de controle não teria como passar.

MEDIDO (controle positivo em toda superfície, na mesma execução):

  board   controle: muda em ~2-4s │ MORTA: 3/3 nunca em 30s, nem ao voltar à aba
  dossiê  controle: muda em ~2s   │ MORTA: 3/3 nunca em 30s, nem ao voltar à aba
  inbox   controle: muda em ~2s   │ MORTA: 2/4 nunca · 1/4 só ao voltar à aba · 1/4 sozinha em ~4s

AVISO AO USUÁRIO: NENHUM, em nenhuma superfície, em nenhuma rodada — procurando
por um vocabulário largo de propósito (offline, sem conexão, desatualizado,
reconectando, tempo real, pausado…). O critério é "a tela diz ALGUMA coisa", não
"a tela diz do meu jeito".

E O ESTADO EXPOSTO MENTE: board e dossiê publicam `data-realtime-status` e ele
diz `subscribed` com a entrega morta — porque descreve a ASSINATURA, não a
ENTREGA. É o não sei renderizado como saudável. O inbox nem expõe.

AUDITORIA DOS CONSUMIDORES (10 usos de useRealtimeChannel): 8 descartam o status;
2 capturam (useBoard, useLeadTimeline) e o depositam num atributo `data-*` que
existe para teste. Zero mostram qualquer coisa a um humano. A dívida herdada
falava em 7 de 9; o número medido é 8 de 10 ignorando, e os 2 que leem não
mostram — na prática, 10 de 10 invisíveis.

O INBOX É O PIOR CASO E NÃO O MELHOR: quatro rodadas idênticas deram três
resultados diferentes. Uma tela que às vezes se recupera é pior que uma que
nunca se recupera, porque o usuário não tem como saber em qual caso está.

SEGUNDA CORREÇÃO DO MESMO CONTADOR NO APARATO DA WAVE 6, e a primeira estava
errada também. Ele casava a substring "postgres_changes" e contava RECIBO de
inscrição como entrega; eu "consertei" exigindo `"event":"postgres_changes"` e
troquei falso positivo por falso NEGATIVO — o quadro do Phoenix é um ARRAY,
`[join_ref, ref, topic, event, payload]`, e não existe chave `"event":`. O
contador passou a marcar zero SEMPRE, inclusive onde a entrega funciona, e essa
linha estava dentro do vermelho do D21. Agora lê a posição.

Ressalva registrada: numa das três rodadas do board não houve quadro para
engolir (0 de 3). O resultado visto é o mesmo, mas aquela rodada não provou o
mecanismo — provou o efeito.
2026-07-25 14:20:07 -03:00

91 KiB
1440x900px