SABOTAGEM: aviso movido para DEPOIS de performHumanHandoff (a inversão que o stopGate mata em silêncio)
Comando: pnpm test:db tests/invariants/handoff-avisa-o-lead.test.ts

⎯⎯⎯⎯⎯⎯⎯ Failed Tests 4 ⎯⎯⎯⎯⎯⎯⎯
 FAIL  tests/invariants/handoff-avisa-o-lead.test.ts > pedido explícito de atendente > o lead RECEBE uma resposta — e ela não é vazia
AssertionError: o defeito original: pedido explícito de humano e ZERO mensagens ao lead: expected [] to have a length of 1 but got +0
 FAIL  tests/invariants/handoff-avisa-o-lead.test.ts > pedido explícito de atendente > o aviso saiu ANTES de a trava ser armada
 FAIL  tests/invariants/handoff-avisa-o-lead.test.ts > pedido explícito de atendente > a Central registra que o cliente FOI avisado
AssertionError: expected 'Motivo: requested_human. Resumo da co…' to match /JÁ FOI avisado/u
 FAIL  tests/invariants/handoff-avisa-o-lead.test.ts > pedido explícito de atendente > lead já em handoff não recebe aviso de novo
AssertionError: expected [] to have a length of 1 but got +0
      Tests  4 failed | 4 passed (8)

--- o mecanismo, no log do turno sabotado ---
{"ts":"2026-08-26T18:49:31.708Z","level":"info","msg":"before_send gate avaliado","job_id":"a1b8b60c-18ee-4c20-aa65-5137e3cc7a3c","tenant_id":"eeee0000-0000-4000-8000-000000000001","lead_id":"eeee0000-0000-4000-8000-000000000002","channel_session_id":"eeee0000-0000-4000-8000-000000000003","gate":"stop","verdict":"veto","code":"contato_bloqueado"}
{"ts":"2026-08-26T18:49:32.272Z","level":"info","msg":"aviso de escalação vetado pela cadeia — a passagem acontece assim mesmo","job_id":"a1b8b60c-18ee-4c20-aa65-5137e3cc7a3c","tenant_id":"eeee0000-0000-4000-8000-000000000001","lead_id":"eeee0000-0000-4000-8000-000000000002","code":"contato_bloqueado"}

--- CONTROLE: mesmo arquivo, código íntegro ---
      Tests  8 passed (8)
