# Handoff: migração e-mail/SMS para Twilio — PARADO aguardando o cliente (2026-07-23)

Estado ao encerrar: TUDO implementado, testado e commitado LOCAL (sem push,
sem deploy). A frente retoma quando o cliente entregar a API key do Twilio
SendGrid e a autenticação do domínio. Pedido já enviado ao dono em tela
(texto na seção "Pedido ao cliente" do runbook).

## Documentos desta frente

- Runbook de deploy/flip (fonte de verdade da retomada):
  `docs/operator/2026-07-23-runbook-email-twilio-sendgrid-sms.md`
- Design: `docs/plans/2026-07-23-emails-twilio-sendgrid-sms-otp-design.md`
- Memórias: [[monetarie-email-twilio-sendgrid-sms-0723]] (estado) e
  [[monetarie-dominios-remetente-email]] (regras de domínio/remetente do dono)

## O que está pronto (commits locais `a07aa9bd` + `33a2ad4a`, SEM push)

- `EMAIL_TRANSPORT=sendgrid` no MailerConfig (fail-closed em SENDGRID_API_KEY;
  ses/smtp/logger preservados como rollback).
- `Auth.Notifier` entregando DE VERDADE via Monetarie.Mailer + layout
  `Monetarie.Emails.Branded` (antes era stub: reset de senha, ativação,
  código MFA por e-mail e alerta de cert NUNCA foram entregues).
- OTP de telefone do onboarding pelo funil Twilio real (antes: NATS sem
  consumidor, nunca entregue) + `normalize_msisdn/1` E.164 + marca do SMS de
  MFA corrigida ("Owem" → "Monetarie").
- Remetente canônico `noreply@monetarie.com`; `BANKING_BASE_URL` (default
  `https://ib.monetarie.com`); varredura completa de `vulci.com.br` e
  `.com.br` no código vivo.
- Gates: core full **8847/0**, review adversarial zero achados, vue-tsc STA
  0 erros, build do shared ok.
- AWS já provisionado: secrets `monetarie/{homolog,prod}/twilio/auth_token`
  (test/live) + ARNs já na whitelist das execution roles dos 2 ambientes.

## Checklist de retomada (na ordem)

1. Cliente entregou API key `SG.` + CNAMEs DKIM/SPF publicados para
   `monetarie.com` (ou nos mandou os 3 registros para publicar).
2. Pedir OK do dono para PUSH dos 2 commits.
3. Deploy core-api fase SMS (Passo 1 do runbook): envs `TWILIO_*`,
   `EMAIL_FROM=noreply@monetarie.com`, `BANKING_BASE_URL`, secret
   `TWILIO_AUTH_TOKEN`. HML = credencial TEST (zero SMS real, por design).
4. Flip do e-mail (Passo 2): criar secrets `monetarie/{env}/sendgrid/api_key`,
   adicionar ARNs nas policies `monetarie-ecs-secrets-{env}` (GOTCHA:
   whitelist de ARNs exatos), `EMAIL_TRANSPORT=sendgrid` + secret na MESMA
   revisão (sem a secret o boot cai de propósito).
5. Validações: HML log `[Notifier.Sms] Twilio SMS delivered`; PRD 1 SMS real
   no telefone do dono + 1 e-mail real (headers com DKIM/SPF pass, remetente
   noreply@monetarie.com).
6. Opcional junto do flip: alertas do SPB por relay SMTP do SendGrid (Passo 3
   do runbook; só env na task-def do spb-api; NUNCA durante operação
   money-path).
7. Recomendar rotação do auth token live no console Twilio (foi compartilhado
   em chat) e atualizar a secret de PRD.

## Follow-ups menores anotados (não bloqueiam)

- `core/e2e/playwright.config.ts` com hosts mortos `*-monetarie.vulci.com.br`
  (tooling de e2e; decidir hosts corretos com o time antes de trocar).
- Bundle legado commitado em `sta/backend/priv/static/assets/` contém o
  domínio antigo (candidato a remoção pelo time do STA).
- Deliverability SMS +55 saindo do número US +14143009694: ok para baixo
  volume; se escalar, Messaging Service com sender BR registrado.
