Repository navigation
fix(mqtt): leva a correção da #56 para a develop (o #58 entrou numa branch já mergeada) - #71
Merged
Merged
Conversation
…stro do experimento (H1 não reproduzida)
…(A 5/5, C 3/3, B 0/3)
… confirmada, zona do connect)
… e reconexão com backoff (#56) O client.connect roda numa zona protegida a cada tentativa: o erro de E/S que completa o Socket.done sem ouvinte (errno 32/104) deixa de chegar à zona raiz e vira queda de conexão, com reconexão por backoff. Erro não previsto registra só o tipo e chama onFatal (padrão exit(70)). Callback de cliente obsoleto é ignorado. Teste com RST real (SO_LINGER 0) no broker falso falhava antes e passa depois.
…ue não morre na troca (#56) - Cada tentativa de conexão ganha uma zona própria, derivada da zona raiz, cujo handler conhece o cliente: erro tardio do socket antigo não derruba a conexão nova. - Erro assíncrono depois de close() só é registrado (tipo), nunca chama onFatal. - Uma queda na janela da troca de cliente, com o laço de reconexão ativo, zera _client e o laço tenta de novo, em vez de sair com cliente morto. - Log injetável (padrão stderr); testes gravam onFatal e falham na hora quando um erro escapa da zona guardada.
… (0 quedas em 11 execuções)
…eforço de 2026-10-12 (#56)
…pós a reconexão (#56) Dispatcher MQTT real contra o broker falso e o banco de teste: o alerta criado com o broker fora fica no outbox, o dispatcher reconecta na mesma porta e a varredura entrega uma vez só; o ACK continua funcionando. Inclui dois testes que documentam a lacuna H5 no comportamento atual (publicado no outbox sem PUBACK, sem retransmissão após a reconexão) e a opção dropOnPublish do broker falso.
…agem se perde na queda Registra o experimento da Tarefa 9 e a correção proposta (publish confirmado por PUBACK, outbox marcando só depois), não aplicada por mudar o contrato de AlertPublisher.
…o backend opcional (#56) mqtt_resiliencia_e2e.sh passa a rodar contra o banco de teste: cria um alerta vermelho pelo login OTP real do paciente da fixture durante a interrupção do broker (B: stop/start; C: fora da rede, um alerta no começo e outro no fim) e afirma, depois de restaurar, RestartCount 0 e StartedAt inalterado, outbox publicado (só contagem) e entrega pelo broker a um assinante QoS 1 de sessão persistente. A pausa do backend (A) fica atrás de --com-pausa-do-backend, como diagnóstico. admin_alertas_escalonar_e2e.sh também falha com RestartCount > 0.
…de os alertas (H5 no Docker/TLS) Boot real com a zona global confirmado (saudável, health 200). Na partição de rede o backend não percebe a queda (sem timeout de PINGRESP), o outbox marca publicado e o broker nunca entrega: 4/4 alertas perdidos, processo vivo e sem reinício. O escalonamento do admin com a regressão offline segue verde no emulador.
… H5) AlertPublisher.publish passa a Future<void>: completa no PUBACK do QoS 1 e falha com MqttUnavailableException sem conexão, com queda antes da confirmação ou no prazo (publishAckTimeout, padrão 10 s). No tempo limite o dispatcher dá a conexão como perdida, reconecta e as publicações seguintes falham na hora. O cliente passa a usar disconnectOnNoResponsePeriod = 10 s, para detectar partição sem FIN/RST em até keepalive + 10 s. Os dois testes H5 do ciclo de alerta foram invertidos e um terceiro cobre a conexão morta sem PUBACK (cenário C); o broker falso ganhou withholdPuback.
…NGRESP justificado
…rvador independente mostra as duas entregas
… registra entregas por alert_id (#56)
…pelas tarefas 9b e 9b-v
…a a develop O PR #58 foi mergeado em feat/issue-44-alertas-escalonar-tempo-real depois que o #57 já tinha levado essa branch para a develop, e os 24 commits da correção nunca chegaram à develop, embora a issue #56 esteja fechada. Conflito único em backend/CLAUDE.md: mantém o parágrafo novo "MQTT do backend e outbox (#56)" e a versão da develop do parágrafo de endpoints (atualizada pela #46). spec/lgpd_data_audit.md: a linha citada de lib/server.dart passa de 106 para 111, deslocada pelo laço de avisos da #46. Provas: dart analyze sem warnings; dart test -j 1 1355/1355 (inclui os 29 casos de resiliencia); mqtt_resiliencia_e2e_test.sh e admin_alertas_escalonar_e2e_test.sh verdes.
hbgit
added a commit
that referenced
this pull request
Oct 15, 2026
Diferenças em relação à previsão (três ci/* já removidas, lote 1 com 27), resultado (36 removidas, 4 no remoto) e pendências (PR #71, auto-delete, branches locais órfãs).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #56.
O PR #58 (correção da #56) foi mergeado em
feat/issue-44-alertas-escalonar-tempo-realàs 14:07 UTC de 2026-10-13, depois que o #57 já tinha levado essa branch para adevelop(13:24 UTC). Os 24 commits da correção nunca chegaram àdevelop, embora a issue #56 esteja fechada:git cherry origin/develop origin/fix/issue-56-mqtt-queda-processolista os 24 como+. Entre eles: zona por cliente noMqttAlertDispatcher, outbox que só marcapublishedAtdepois do PUBACK,runZonedGuardedglobal embin/main.darterestart: unless-stoppedno Compose.Este PR é um merge de
origin/fix/issue-56-mqtt-queda-processosobre adevelopatual (106 commits à frente da basedd28239), preservando os SHAs originais.backend/CLAUDE.md: mantém o parágrafo novo "MQTT do backend e outbox (backend: exceção SocketException (Broken pipe) do cliente MQTT não é tratada e derruba o processo #56)" e a versão dadevelopdo parágrafo de endpoints, atualizada pela admin: gestão de avisos à comunidade (RF14) e de versões dos termos de uso #46 (termsChangeNoticelendoterms_versions).spec/lgpd_data_audit.md: a linha citada delib/server.dartpassa de 106 para 111, deslocada pelo laço de avisos da admin: gestão de avisos à comunidade (RF14) e de versões dos termos de uso #46.6649c0d(o merge do fix(mqtt): backend não cai mais com a queda do socket MQTT; alertas só publicados após PUBACK (#56) #58 na issue-44) tem a mesma árvore do merge limpo dos seus dois pais, então não traz nada além do que já está aqui e nadevelop.Provas locais:
dart analyzesem warnings nem erros (87info);dart test -j 11355/1355, incluindo os 29 casos demqtt_alert_dispatcher_resilience_test.dart;scripts/qa/mqtt_resiliencia_e2e_test.shescripts/qa/admin_alertas_escalonar_e2e_test.shverdes. Não reexecutei o QA manual no Docker/TLS (scripts/qa/mqtt_resiliencia_e2e.sh); a evidência dele é a original, emdocs/superpowers/plans/2026-10-12-issue-56-evidencias.md, medida sobre a base antiga.Depois do merge,
feat/issue-44-alertas-escalonar-tempo-realefix/issue-56-mqtt-queda-processoficam contidas nadevelope podem ser removidas. Elas são as duas branches que sobraram da limpeza de 2026-10-15.