Files
agent_contas/docs/FIX_TRANSACTION_STATUS_AND_PREVALIDATED_VAS_20260901.md
2026-09-01 11:24:03 -03:00

1.9 KiB

Correção cirúrgica — status transacional e VAS pré-validado

Escopo

Esta correção parte da versão estável anterior à expansão de terminal outcomes e altera apenas dois contratos já existentes.

1. active_transaction e transaction_status não podem divergir

AgentRuntimeMixin._set_active_transaction() agora atualiza também state["transaction_status"] com o mesmo status da transação instalada.

Isso evita que um status terminal da operação anterior (COMPLETED, por exemplo) sobreviva à criação de uma nova transação em AWAITING_CONFIRMATION. Sem essa invariável, o boundary do turno seguinte pode interpretar a nova confirmação como resíduo da transação encerrada e limpar seus latches antes do roteamento.

Não foi criada regra para a palavra sim, nem bypass de roteamento.

2. VAS estratégico reutiliza resolução já validada

validar_vas_subject já é o resolver autoritativo side-effect-free na fronteira transacional. Quando ele resolve um VAS e redireciona a ação para tratar_vas_estrategico, os resolved_arguments agora carregam:

  • subject canônico;
  • _vas_subject_prevalidated=true;
  • type quando conhecido (bundle/estrategico).

Na execução da tool estratégica, _preflight_subject() não executa uma segunda resolução por invoice_evidence quando esse marcador está presente. Isso evita o caso em que Aya Audiobooks Premium era ELIGIBLE na pré-validação e depois virava NEEDS_PARAMETER / subject_not_resolved ao executar a tool efetiva.

O que não foi alterado

  • agent_graph e reset global de contexto;
  • route stickiness;
  • confirmation classifier;
  • estados terminais globais;
  • idempotência;
  • guardrails;
  • fluxo de múltiplos VAS.

Testes

  • testes direcionados novos + relacionados: 16 PASS;
  • VAS/transação/cancelamento/conversation policy: 420 PASS;
  • suíte tests/migration: 833 PASS / 2 FAIL históricos já existentes e não relacionados.