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:
subjectcanônico;_vas_subject_prevalidated=true;typequando 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_graphe 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.