# Full audit do trilho IBM MQ do SPB (2026-07-20) — lastro interno

PDF entregue ao dono: `~/Desktop/Monetarie-SPB-MQ-Full-Audit-Correcao-2026-07-20.pdf`
(gerador: `scripts/spb_mq_audit_0720/gen_relatorio_pdf.py`, regerar = rodar).

## Estado final

- Commit do pacote: `9ded2ae6` (main, pushado).
- Deploys: HML `monetarie-spb-api-homolog:70` (rollback :69), PRD `monetarie-spb-api-prod:40` (rollback :39).
- Imagens (digest MATCH homolog↔prod): spb-api `sha256:b980007b...`, spb-mq-sidecar `sha256:29a0b1ec...` (tags `*-9ded2ae6-mqfull-20260720`).
- Migração `20260720130000` (índice único parcial `uq_bacen_messages_str0008_dispatch`) aplicada por rpc ANTES do swap nos 2 ambientes, zero duplicatas vivas conferidas antes.
- Cutover do durable `MONETARIE_CORE/bacen-core-event-processor`: removido pré-swap nos 2 (HML estava `Deliver Policy: All` com **13 não processadas** — o replay teria acontecido; PRD All com 0). Recriado no boot com `deliver_policy :new` + reconcile automático no StreamManager.
- Validação viva pós-deploy: GEN0001 real ao BACEN → R1 ingerido em **~2s** (HML 12:59:54→12:59:56Z; PRD 13:05:23Z→+2,0s), `r1_confirmed` limpo, `r1_received_at` carimbado. Antes: p50 12s, zero respostas <2s (14 dias de acervo).
- Suíte: 17.910 testes / 0 falhas; sidecar JUnit verde; 94+ testes novos (RED provado).

## Reparos de dados (com eventos de auditoria STALE_REPAIR/DISPATCH_FAIL_REPAIR/STATE_SYNC_REPAIR)

- PRD: slot MES01 desativado (1); 5 ops confirmadas limpas do veredito STALE; 5 msgs curadas; 14 created→error DISPATCH_FAILED; 5 sent→r1_confirmed sincronizadas.
- HML: 7 created→error; slot MES01 inexistente.

## Vigias de amanhã (21/07, cliente operando)

- 06:30 BRT: sem PUT MES01, sem congelamento, sem falso STALE. Se aparecer STALE em qualquer op, a resposta tardia CURA (verificar error_code nulo pós-confirmação).
- 10:20 BRT: CIR0008 deve passar a ser ACEITO (ISPBIF agora presente). Conferir `scheduled_query_runs`.
- Alertas outbox: critério novo por staleness real; `outbox_morto`/`outbox_parado` agora saem por e-mail (whitelist).

## Follow-ups enfileirados (P2/menores, sem perda silenciosa de dinheiro)

Janela de e-mail de alertas × fim de semana; MessageWatch notify_email inerte; monitor de profundidade da BACEN_DLQ; MQBridge GenServer único para todo inbound; ambiguidade do timeout HTTP do PUT no executor agendado; fail-opens análogos em check_duplicate_ctrl (RSTR); fallbacks Decimal 0 no cir_handler; TES grupo 50 vs 24; cobrar RTM a porta MES01 :12522.
