# 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.
