seinfeld-email — geração e dispatch Resend¶
TL;DR¶
Gera email narrativo a partir de published_posts, agenda e envia via Resend para contatos assinantes do CRM Cadencia.
Identidade¶
- Path:
pipeline/seinfeld_generate.py - Modos:
--generatee--dispatch - Provider: Resend
- Contatos:
public.contacts,status=subscribed
Generate¶
- seleciona post elegível ainda não usado;
- gera assunto, corpo, CTA e preheader;
- encontra o próximo slot livre;
- grava
seinfeld_scheduled_ate conteúdo sem marcar envio.
Dispatch¶
- seleciona o item vencido mais antigo (
scheduled_at <= hoje, limite 1); - aplica cap de warm-up e priorização por engajamento;
- reserva dedup atômico por contato/post;
- envia HTML/texto via Resend com tags de tenant, contato e post;
- grava audit log e marca o post quando não há falha transitória pendente.
Invariantes¶
config.emailé a configuração canônica do sender.seinfeld_daily_sentimpede duplicação cross-day.- Falha técnica de dedup não autoriza envio.
- Bounce/complaint removem o contato dos próximos dispatches.
- Rodapé, endereço e
List-Unsubscribesão obrigatórios quando aplicáveis. - Backlog retoma um post por execução para evitar rajada.
Validação¶
pytest -q tests/test_seinfeld_classify_send.py \
tests/test_seinfeld_crossday_dedup.py \
tests/test_seinfeld_generate_gate.py \
tests/test_seinfeld_sb_insert.py \
tests/test_seinfeld_slots.py
Troubleshooting¶
| Sintoma | Verificar |
|---|---|
| não gera | post elegível, créditos, email_sending_enabled |
| não envia | contatos assinantes, cap diário, domínio/sender verificado |
| evento sem atribuição | tags e fallback GET /emails/{id} |
| duplicação | constraint/audit de seinfeld_daily_sent |