snapshot · 2026-05-08 · ip 76.13.228.60 · srv1608561.hstgr.cloud · ubuntu 24.04 lts
Cobrança inteligente via WhatsApp com IA. Webhook do Twilio entra no FastAPI,
passa pelo Perception Layer (PII redact + Haiku 4.5 paralelo), e é roteado
determinísticamente para o handler de estado. O fluxo NEGOTIATION roda hoje no caminho
imperativo legacy por padrão; com a flag MIGRATE_NEGOTIATION_TO_LANGGRAPH=true
o mesmo turno é executado pelo StateGraph LangGraph validado em prod (CREWAI_TO_LANGGRAPH Fase 1).
Ctrl/Cmd + scroll para zoom · arraste para pan · ⛶ abre em nova aba · 1:1 reseta · ↻ smart fit
launch/v2: imperativo legacy. O flag
MIGRATE_NEGOTIATION_TO_LANGGRAPH=true liga o StateGraph para mensagens em estado
NEGOTIATION; rollback em ~50s via sed + force-recreate. Os 6 smoke tests
reais (FAQ hit + planner_sonnet) confirmaram paridade comportamental antes da Fase 2 começar.
Re-ingere o output do Perception Layer no estado do grafo. Idempotente por turno.
Não chama LLM — apenas hidrata state.intent, state.sentiment, state.pii_clean_text.
CrewAI domain_agent ainda vivo como fallback natural.
Roda em best-effort (templates ausentes não derrubam o turno). Será removido junto com
crewai>=0.22.5 ao final das Fases 2-5.
Monta PlannerContext com last_template_presented,
expected_inputs, is_deviation. É aqui que a heurística de desvio
decide se o plano Sonnet vai ser convocado.
Consulta FaqRetrievalService contra Qdrant 1.15.5 (catálogo de 30 entries).
Threshold real em prod = 0.60 (DESIGN tinha 0.85). Latência p50 ~290ms vs 3-4s do Sonnet.
Chama negotiation_planner com Claude Sonnet 4.6.
Retorna NegotiationResponse tipado. Falha → keep_domain_resp;
sucesso → apply_plan_resp.
Convergência única para END. Marca path_taken (faq · sonnet · domain),
empilha spans Langfuse e libera o estado para o caller persistir + pós-processar fora do grafo.
Database b2b_negotiation. Auth obrigatória habilitada (MELHORIA 1.4). Persiste
contractor, debtor, negotiation, audit_log v1.1, message templates. Bind em 127.0.0.1:27017.
AOF on, maxmemory 512mb, política allkeys-lru. Hospeda message_buffer, conversation locks,
e a soft retry queue ZSET do PAYMENT_FLOW_E2E Phase C (worker via supervisor).
Bump 1.12.4 → 1.15.5 em 2026-05-08 (AUDIT Action #7) silencia warning de skew com client 1.17.x
e libera hybrid search nativo (sparse vectors). Volume qdrant_storage compatível sem migration.
Projeto NEGOCIA SIMPLES (sa-east-1). Tabela debtor_interactions
com HNSW index. Validado em prod 2026-05-06: crm_search_miss → write → crm_search_hit
top_similarity=1.0.
MULTI_TENANT_ASAAS shipped 2026-05-03: _resolve_asaas_api_key + cross-check
account_id no webhook. Cobranças PIX nascem na subconta do Contractor,
não na conta master. Provisionamento automático (pix_key + webhook).
Billing da plataforma (assinatura SaaS para Contractors). Não passa por NEGOTIATION — flui
pelo módulo services/payment/stripe.py isolado dos webhooks de cobrança.
Modelo gpt-4o-mini-transcribe para transcrever áudios do WhatsApp antes do
Perception Layer. OPENAI_API_KEY foi exposta no chat — alvo prioritário da rotação.
Haiku 4.5 (claude-haiku-4-5-20251001) para perception + humanizer.
Sonnet 4.6 (claude-sonnet-4-6) para o planner. Override em prod via
DEFAULT_FAST_MODEL e DEFAULT_PLANNER_MODEL.
Spans em cada nó do grafo (perceive · faq_check · plan_sonnet · finalize_telemetry).
finalize_telemetry empilha o path_taken como score; golden suite
empurra LLM-as-Judge scores no CI.
Release tracking via RELEASE_SHA injetado no build. Captura no FastAPI bootstrap;
breadcrumbs incluem o conversation_id e contractor_id redactados.
76.13.228.60 · srv1608561.hstgr.cloud · Hostinger KVM 4 · Ubuntu 24.04 LTS/opt/app/ · env em /opt/app/.env-prod · supervisor + caddy + nginxMIGRATE_NEGOTIATION_TO_LANGGRAPH=false · rollback ~50s via sed + docker compose --force-recreateapp-v2.negociasimples.com.br · API api-v2.negociasimples.com.br/api · webhook /webhooklaunch/v2 → deploy automático · golden eval label-triggeredscp + docker cp + supervisorctl restart 'negocia:fastapi' (sem rebuild)crewai>=0.22.5. Pattern (perceive → branches → finalize) já estabelecido na Fase 1
e validado contra os 6 smoke tests reais — pronto pra ser replicado.