# Handoff 2026-07-09: incidente pacs.008 resolvido + modelo canonico do PIX-in + deploys prod

## O que aconteceu e foi resolvido (tudo com prova empirica)

1. **Incidente money-path (pacs.008 recebida travada "Aguardando retorno")**: cadeia de 5 defeitos no `InboundProcessor` (AC04/FF01 fora do enum, E2E vazio na pacs.002, fail-closed em falha transiente, loop NAK ate poison, sem gate de codigo no build). Corrigida e deployada (`pix-api:19`, depois `:20`). Fonte unica do enum: `Shared.Bacen.Iso20022.RejectCodes` (44 codigos, gate `sanitize_pacs002/1`).
2. **A verdade BACEN**: consulta obrigatoria camt.060 respondeu camt.054 com CRDT R$4,54, ou seja, o BACEN LIQUIDOU (a conclusao inicial "AB03, nada a devolver" estava errada por olhar so os nossos registros). Cliente Marco Aurelio (conta 257-9) creditado pelo caminho provado `Wallet.deposit` + account_entry: TB 7100 para 52500 subcentavos, TB igual PG ao centavo, credito unico, zero pendencia Oban.
3. **Monitor "Aguardando retorno"**: raiz corrigida com TDD. Logica extraida para `pix/frontend/admin/src/views/monitor/flowStatus.ts` (+ teste): pacs.008 recebida confirmada por camt.054 de credito vira ACSC (Concluido).
4. **Audit-logs do coreadmin 100% funcional**: IP capture no plug, filtros, paginacao, export, labels, mapeamento snake_case para camelCase no front.
5. **Hardening pacs.002 recebida (fail-CLOSED)**: `publish_status_update`/`_for_tx` agora propagam `{:error, ...}` ate o BaseWorker (NAK, retry limitado, DLQ). Antes, excecao era engolida com warning e o settle/reject se perdia em silencio.

## Deploys de producao (todos COMPLETED, validados, 2026-07-09)

| Servico | Revisao | Conteudo | Rollback |
|---|---|---|---|
| pix-api | :20 (`main-pacs002harden-20260709`) | 5 defeitos + RejectCodes + fail-CLOSED pacs.002 | :19 |
| pix-admin-ui | :12 (`main-monitorfix-20260709`) | Monitor camt.054 = Concluido | :11 |
| core-api | :8 (`main-auditlogs-20260709`) | audit-logs backend | :7 |
| core-admin-ui | :4 (`main-auditlogs-20260709`) | audit-logs UI | :3 |

## MODELO CANONICO do PIX-in (matou duas inferencias antigas)

- **O BACEN real liquida ANTES de entregar a pacs.008 ao recebedor, e o recebedor NAO recebe pacs.002 de volta** (prova: incidente liquidou sem nunca respondermos; comentario no proprio codigo, inbound_processor ~L946).
- **O caminho de credito correto e o LEGADO (flag OFF, vivo em prod e HML)**: pacs.008 chega, cabine valida, credita PI, publica `transaction.created` (outbox), responde ACSP, avanca ACCC; Core `handle_transaction_ledger` credita TB + PG + extrato + tarifa.
- **PROIBIDO ligar `TWO_PHASE_PIX_IN`**: o gatilho de settled desse modo e uma pacs.002 STLD que so o SIMULADOR manda (teste de integracao e simulator-driven; o handler de camt.054 nao publica status). Ligar = cliente nunca mais creditado. Flags conferidas OFF nos 4 task-defs (prod e HML, core e pix).
- **pacs.002 recebidas em prod = 0 e o ESPERADO** (0 pacs.008 enviadas ate hoje). Nao ha defeito provavel de recepcao; a maquina ICOM esta viva (camt.054/053, admi.002, pibr.002 fluindo). Recepcao provada em HML em 03/07.
- **Varredura de creditos perdidos desde o go-live: escopo 1** (o incidente, remediado). Cadeia cabine para Core provada viva pelos 6 audits `PIX_TRANSACTION_REJECTED_UNTRACKED`.
- **NUNCA reprocessar a pacs.008 do incidente na DLQ** (duplo credito + pacs.002 atrasada).
- Seed COSIF owem em prod (21 aliased + hierarquia): inerte, zero codigo duplicado, mantido. HML nao tem (sem efeito em runtime).

## Regra do dono (nova)

**Em producao nao existe teste.** Validacao definitiva do money path = acompanhar o PRIMEIRO PIX real organico (in e out) perna a perna. Runbook com queries prontas: `docs/operator/2026-07-09-runbook-primeiro-pix-real-prod.md`.

## Tambem mesclado nesta main

Saneamento de testes do Core (729 para ~26 falhas, 96%), incluindo bugs reais de producao: upsert e-Financeira 42P10 (conflict_target), 2 defeitos e-Financeira schema/cripto, Fees enum/coalesce, modulos orfaos religados, Factory.generate_cpf/cnpj publicas.

## Proximo mandato (dono, registrado)

Mapeamento EXTENSO e EXAUSTIVO de `/Users/luizpenha/coreproviders/*` (AVIV) vs cabine Monetarie: como a AVIV recebe da OnZ vs cabine direta; PIX-in, PIX-out, MED, infracoes, PG, TigerBeetle e otimizacoes (ex.: `tb-gateway` em Go), money path completo. Contexto: AVIV bateu recorde de 1,53M transacoes em um dia (08/07); Monetarie aguenta mais com cabine propria e latencia 24-28ms vs 471ms do long-poll OnZ.

## Pendencias conhecidas

- Acompanhar o 1o PIX real organico em prod (runbook acima).
- Mandato do mapeamento AVIV (acima).
- Escrow PR6 (painel admin UI) e PR7 (eventos NATS) pendentes; ESCROW_ENABLED OFF.
- Branch `infra-prod` com 15 commits nao mesclados (Terraform prod da Fase 3, worktree `/Users/luizpenha/monetarie-infra-prod`), decisao de merge fora deste escopo.
- ~26 falhas residuais de teste (fixtures profundas), fora do money path.
