mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 01:28:34 +08:00
A suspensão descarta o turno de envio `pending` e grava `turn_discarded`, que faz o motor enfileirar um turno novo na reativação. O turno que JÁ rodava naquele segundo seguia, tinha o envio barrado (OrgNaoOperanteError) e era cancelado sem o evento: na reativação os rechecks esgotavam o dead-man e a inscrição morria com `action_turn_never_completed` — um follow-up morto na Central com motivo falso, e o lead sem a mensagem. Uma regra só para "o turno saiu sem enviar": `fn_followup_turno_descartado (org, job)` (seção C0a da 0501, invoker, só service_role). A C0 passa a chamá-la em vez de repetir o INSERT, e os dois donos de turno em voo a chamam antes de devolver o job: o agent-worker (createFollowupTurnHandler, só purpose send_message) e o envio inline (enviarTextoFixoPendente). Erro que não é suspensão não grava nada — o dead-man segue valendo. Prova: tests/invariants/followup-org-suspensa.test.ts reproduz a sequência (turno running → suspende → cancela → reativa) com controle que mostra a morte sem o evento; tests/unit/turno-rodando-na-suspensao.test.ts e lib/followup/enviar-texto-fixo.test.ts cobrem as duas chamadas. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>