# Correção da confirmação transacional x FRASEOLOGIA — 2026-08-21 ## Sintoma observado Para a entrada `quero cancelar o serviço TIM Fashion`, o fluxo entrava corretamente em `AWAITING_CONFIRMATION`, e o guardrail `AOFERTA` permitia a resposta. Porém a confirmação determinística era montada a partir do nome técnico da tool: `Você confirma cancelar vas avulso?` O guardrail `FRASEOLOGIA` bloqueava essa saída porque `vas avulso` é nomenclatura interna. ## Causa raiz `AgentRuntimeMixin.transaction_confirmation_message()` convertia o nome da tool com `tool_name.replace("_", " ")` quando não havia label explícito. Para `cancelar_vas_avulso`, isso vazava o identificador técnico para a resposta ao cliente. ## Correção Quando a tool representa cancelamento (`cancelar_*`) e os argumentos pendentes possuem `subject`, a confirmação passa a ser construída com o nome comercial do item: `Você confirma o cancelamento do serviço {subject}? Responda 'sim' para executar ou 'não' para cancelar.` Exemplo: `Você confirma o cancelamento do serviço TIM Fashion? Responda 'sim' para executar ou 'não' para cancelar.` A correção preserva o comportamento anterior das demais confirmações, como devolução e troca de pedidos. ## Teste de regressão Adicionado `agent_framework_oci/tests/test_transaction_confirmation_customer_facing.py`, garantindo que: - `cancelar_vas_avulso` com `subject=TIM Fashion` nunca exponha `vas avulso` nem `cancelar_vas_avulso`; - o nome comercial apareça na confirmação; - confirmações existentes de varejo continuem idênticas.