bugfix: route stickness precedences (transaction in the same intent)

This commit is contained in:
2026-08-20 09:22:03 -03:00
parent bb0ef019bf
commit 9df2467deb
434 changed files with 7098 additions and 281 deletions

7
.pytest_cache/v/cache/lastfailed vendored Normal file
View File

@@ -0,0 +1,7 @@
{
"agent_framework_oci/tests/unit/test_langgraph_checkpoint_saver.py::test_repository_checkpoint_saver_put_get": true,
"agent_framework_oci/tests/unit/test_resilient_checkpointer.py::test_integrity_envelope_and_recovery_skips_corrupt_latest": true,
"agent_framework_oci/tests/unit/test_resilient_checkpointer.py::test_compaction_keeps_last_n_checkpoints": true,
"agent_framework_oci/tests/unit/test_resilient_checkpointer.py::test_recovery_raises_when_only_corrupt_checkpoints_exist": true,
"agent_framework_oci/tests/unit/test_langgraph_checkpoint_saver.py::test_put_writes_does_not_restore_older_checkpoint": true
}

291
.pytest_cache/v/cache/nodeids vendored Normal file
View File

@@ -0,0 +1,291 @@
[
"agent_framework_oci/tests/test_generic_tool_response_presentation.py::test_generic_lines_mode_preserves_order_shape",
"agent_framework_oci/tests/test_generic_tool_response_presentation.py::test_generic_list_mode_supports_contas_multiple_plans_without_none",
"agent_framework_oci/tests/test_generic_tool_response_presentation.py::test_generic_template_mode_preserves_template_backend_plan_contract",
"agent_framework_oci/tests/test_generic_tool_response_presentation.py::test_missing_renderer_falls_back_without_breaking_runtime",
"agent_framework_oci/tests/test_generic_tool_response_presentation.py::test_no_declared_response_keeps_legacy_fallback",
"agent_framework_oci/tests/test_generic_tool_response_presentation.py::test_renderer_mode_uses_application_registered_renderer",
"agent_framework_oci/tests/test_mcp_parameter_extraction_runtime.py::test_collection_turn_reuses_declarative_parameter_extraction",
"agent_framework_oci/tests/test_mcp_parameter_extraction_runtime.py::test_explicit_order_id_has_precedence_over_contract_key",
"agent_framework_oci/tests/test_mcp_parameter_extraction_runtime.py::test_new_transaction_current_message_overrides_stale_subject_from_context",
"agent_framework_oci/tests/test_mcp_parameter_extraction_runtime.py::test_runtime_extracts_order_id_from_current_message",
"agent_framework_oci/tests/test_mcp_parameter_extraction_runtime.py::test_transaction_extracts_required_fields_before_first_missing_check",
"agent_framework_oci/tests/test_mcp_parameter_extraction_runtime.py::test_unique_transactional_tool_is_selected_after_routing_constrains_allowlist",
"agent_framework_oci/tests/test_route_stickiness_transaction_shift.py::test_explicit_keyword_shift_preempts_stickiness",
"agent_framework_oci/tests/test_route_stickiness_transaction_shift.py::test_same_agent_explicit_intent_shift_must_preempt_stickiness",
"agent_framework_oci/tests/test_route_stickiness_transaction_shift.py::test_same_agent_transaction_keyword_preempts_continuity",
"agent_framework_oci/tests/test_route_stickiness_transaction_shift.py::test_short_generic_keyword_does_not_preempt",
"agent_framework_oci/tests/test_transactional_tool_flow.py::test_closed_transaction_is_not_operational_context_for_next_turn",
"agent_framework_oci/tests/test_transactional_tool_flow.py::test_collecting_parameters_does_not_replace_collected_subject_with_stale_context",
"agent_framework_oci/tests/test_transactional_tool_flow.py::test_new_contestation_does_not_inherit_subject_or_value_from_previous_transaction",
"agent_framework_oci/tests/test_transactional_tool_flow.py::test_runtime_source_contains_persisted_confirmation_contract",
"agent_framework_oci/tests/test_transactional_tool_flow.py::test_terminal_confirmation_closes_active_transaction_and_clears_latches",
"agent_framework_oci/tests/test_transactional_tool_flow.py::test_tool_policy_registry_reads_transactional_confirmation",
"agent_framework_oci/tests/test_transactional_tool_flow.py::test_transaction_waits_then_executes_after_confirmation",
"agent_framework_oci/tests/unit/test_langgraph_checkpoint_saver.py::test_put_writes_does_not_restore_older_checkpoint",
"agent_framework_oci/tests/unit/test_langgraph_checkpoint_saver.py::test_repository_checkpoint_saver_put_get",
"agent_framework_oci/tests/unit/test_resilient_checkpointer.py::test_compaction_keeps_last_n_checkpoints",
"agent_framework_oci/tests/unit/test_resilient_checkpointer.py::test_integrity_envelope_and_recovery_skips_corrupt_latest",
"agent_framework_oci/tests/unit/test_resilient_checkpointer.py::test_recovery_raises_when_only_corrupt_checkpoints_exist",
"agent_framework_oci/tests/unit/test_semantic_route_stickiness.py::test_continue_bypasses_router_without_regex_rules",
"agent_framework_oci/tests/unit/test_semantic_route_stickiness.py::test_continue_without_active_agent_falls_back_to_router",
"agent_framework_oci/tests/unit/test_semantic_route_stickiness.py::test_end_session_is_returned_as_global_route",
"agent_framework_oci/tests/unit/test_semantic_route_stickiness.py::test_global_session_actions_work_without_active_agent",
"agent_framework_oci/tests/unit/test_semantic_route_stickiness.py::test_human_handoff_is_returned_as_global_route",
"agent_framework_oci/tests/unit/test_semantic_route_stickiness.py::test_invalid_output_falls_back_safely",
"agent_framework_oci/tests/unit/test_semantic_route_stickiness.py::test_low_confidence_continue_falls_back_safely",
"agent_framework_oci/tests/unit/test_semantic_route_stickiness.py::test_no_active_agent_still_classifies_global_session_actions",
"agent_framework_oci/tests/unit/test_semantic_route_stickiness.py::test_route_result_falls_back_to_enterprise_router",
"tests/migration/test_backend_wrapper_contract_parity.py::test_cancelamento_aceita_alias_itens_para_contestacao",
"tests/migration/test_backend_wrapper_contract_parity.py::test_cancelamento_aceita_cpf_como_alias_social_sec_no",
"tests/migration/test_backend_wrapper_contract_parity.py::test_cancelamento_falha_operacional_com_candidato_dispara_contestacao",
"tests/migration/test_backend_wrapper_contract_parity.py::test_cancelamento_falha_workflow_preserva_output_parcial_nao_cancelados",
"tests/migration/test_backend_wrapper_contract_parity.py::test_cancelamento_sem_candidatos_nao_dispara_contestacao",
"tests/migration/test_backend_wrapper_contract_parity.py::test_cancelamento_sms_falho_preserva_sucesso_e_flag",
"tests/migration/test_backend_wrapper_contract_parity.py::test_contestacao_wrapper_mapeia_falha_tecnica_como_sistemica",
"tests/migration/test_backend_wrapper_contract_parity.py::test_contestacao_wrapper_preserva_erro_de_negocio_e_protocolo",
"tests/migration/test_backend_wrapper_contract_parity.py::test_contestacao_wrapper_preserva_tipo_atendimento_e_contexto_do_turno",
"tests/migration/test_backend_wrapper_contract_parity.py::test_invoice_explanation_branch_devolver_orquestrador_nao_auto_finaliza",
"tests/migration/test_backend_wrapper_contract_parity.py::test_invoice_explanation_branch_nao_sem_vas_recomenda_nao_resolvido",
"tests/migration/test_backend_wrapper_contract_parity.py::test_invoice_explanation_service_failure_preserva_fraseologia_sem_auto_finalize",
"tests/migration/test_backend_wrapper_contract_parity.py::test_pro_rata_aceite_e_nao_controle_recomendam_resolvido",
"tests/migration/test_backend_wrapper_contract_parity.py::test_pro_rata_branch_devolver_orquestrador_nao_auto_finaliza",
"tests/migration/test_backend_wrapper_contract_parity.py::test_vas_estrategico_rejeitado_declara_rag_para_cada_servico_estrategico",
"tests/migration/test_backend_wrapper_contract_parity.py::test_vas_estrategico_workflow_payload_preserva_tres_itens_e_action_agrupa_duas_linhas",
"tests/migration/test_business_events_and_guardrails.py::test_business_events_are_published_recursively_once",
"tests/migration/test_business_events_and_guardrails.py::test_cached_tool_result_does_not_republish_business_events",
"tests/migration/test_contas_domain_mock.py::test_cancel_vas_is_domain_operation_not_conversation_engine",
"tests/migration/test_contas_domain_mock.py::test_cancelamento_batch_emite_vaa004_quando_falha_operacional",
"tests/migration/test_contas_domain_mock.py::test_cancelamento_batch_emite_vaa_caminho_feliz_uma_vez",
"tests/migration/test_contas_domain_mock.py::test_cancelamento_nao_recancela_servico_inativo_do_historico",
"tests/migration/test_contas_domain_mock.py::test_cancelamento_usa_historico_como_fallback_quando_ativo_nao_encontra",
"tests/migration/test_contas_domain_mock.py::test_contestation_mock",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_com_protocolo_existente_nao_cria_informacional",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_cria_protocolo_informacional_quando_invoice_explanation_executou",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_force_rt15_cria_novo_protocolo_mesmo_com_veb_fechado",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_cria_protocolo_fechado_sem_duplicar_status",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types0-Explica\\xe7\\xe3o de VAS Bundle]",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types1-Explica\\xe7\\xe3o de VAS Estrat\\xe9gico]",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types2-Explica\\xe7\\xe3o de VAS Avulso]",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types3-Explica\\xe7\\xe3o de VAS Bundle, VAS Estrat\\xe9gico]",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types4-Explica\\xe7\\xe3o de VAS Bundle, VAS Avulso]",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types5-Explica\\xe7\\xe3o de VAS Estrat\\xe9gico, VAS Avulso]",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_informacional_notas_canonicas[types6-Explica\\xe7\\xe3o de VAS Bundle, VAS Estrat\\xe9gico, VAS Avulso]",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_nao_cria_protocolo_apenas_por_prefetch_invoice_explanation",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_nao_duplica_protocolo_quando_contestacao_ja_existe",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_normaliza_status_invalido_e_summary",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_preserva_status_valido_e_prefixa_summary",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_reusa_protocolo_veb_ja_fechado_sem_abrir_outro",
"tests/migration/test_contas_domain_mock.py::test_finalizacao_veb_deferido_suprime_evento_cvn_de_protocolo",
"tests/migration/test_contas_domain_mock.py::test_invoice_explanation_converte_retry_transport_em_rct_por_tentativa",
"tests/migration/test_contas_domain_mock.py::test_invoice_explanation_falha_preserva_rct_das_tres_tentativas",
"tests/migration/test_contas_domain_mock.py::test_read_only_integrations_with_fixtures",
"tests/migration/test_contestation_business_rules_full.py::test_abrir_contestacao_deriva_refund_manual_e_normaliza_barcode_zero",
"tests/migration/test_contestation_business_rules_full.py::test_check_invoice_status_enriquece_prefetch_sem_nova_api",
"tests/migration/test_contestation_business_rules_full.py::test_check_invoice_status_falha_sem_prefetch",
"tests/migration/test_contestation_business_rules_full.py::test_cutdate_da_fatura_define_manual",
"tests/migration/test_contestation_business_rules_full.py::test_cutdate_regra_um_mes",
"tests/migration/test_contestation_business_rules_full.py::test_cutoff_referencia_corrige_bug_mes_seguinte",
"tests/migration/test_contestation_business_rules_full.py::test_dependente_forca_conta_certa_manual",
"tests/migration/test_contestation_business_rules_full.py::test_due_day_iso_e_br",
"tests/migration/test_contestation_business_rules_full.py::test_refund_boleto_para_fatura_em_aberto_com_fatura_normal",
"tests/migration/test_contestation_business_rules_full.py::test_refund_credito_para_dacc_cartao_ou_parcelamento",
"tests/migration/test_contestation_business_rules_full.py::test_refund_credito_para_fatura_paga_ou_ja_contestada",
"tests/migration/test_contestation_failure_mapping.py::test_contestacao_failed_preserva_provider_message_e_protocolo",
"tests/migration/test_contestation_failure_mapping.py::test_contestacao_failed_sem_mensagem_provider_vira_falha_sistemica",
"tests/migration/test_framework_native_structure.py::test_agent_workflow_init_realmente_inicializa_router_agentes_e_graph",
"tests/migration/test_framework_native_structure.py::test_all_active_workflow_actions_registered",
"tests/migration/test_framework_native_structure.py::test_contestacao_workflow_encerra_imediatamente_quando_cval_bloqueia",
"tests/migration/test_framework_native_structure.py::test_domain_does_not_import_langgraph_directly",
"tests/migration/test_framework_native_structure.py::test_guardrail_config_declares_all_execution_stages",
"tests/migration/test_framework_native_structure.py::test_official_templates_use_framework_state_graph",
"tests/migration/test_framework_native_structure.py::test_workflow_runtime_preserva_snapshot_parcial_quando_action_posterior_falha",
"tests/migration/test_mcp_contestation_subject_guard.py::test_correct_subject_is_preserved",
"tests/migration/test_mcp_contestation_subject_guard.py::test_preflight_does_not_replace_explicit_plan_with_vas",
"tests/migration/test_mcp_contestation_subject_guard.py::test_recovers_explicit_contestation_subject_from_original_text",
"tests/migration/test_original_contestation_validation.py::test_contestation_action_calculates_totals_only_for_items_actually_contested",
"tests/migration/test_original_contestation_validation.py::test_contestation_action_classifies_already_contested_and_missing_requested_item",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_aprova_quando_total_ajustes_dentro_do_limite",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_bloqueia_classe_estrategico_canonica",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_bloqueia_item_fora_da_secao_vas",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_bloqueia_item_inexistente",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_bloqueia_quando_total_ajustes_excede_fatura",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_bloqueia_valor_maior_que_o_item",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_bloqueia_vas_estrategico",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_emite_span_quando_aprova",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_emite_spans_quando_bloqueia",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_prefere_evidencia_vas_quando_item_aparece_em_multiplas_visoes",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_reconhece_vas_por_type_do_billing_analysis",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_span_blocked_inclui_contagens",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_usa_classe_avulso_canonica",
"tests/migration/test_original_contestation_validation.py::test_validate_contestation_items_valida_todos_antes_de_retornar",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A01-fluid-light-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A02-fluid-premium-x-light]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A03-aya-books-x-audiobooks]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A04-aya-ensinah-x-books]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A05-exa-seguranca-x-cloud]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A06-bancah-jornais-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A07-itgame-light-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A08-aluguel-filme-1-x-2]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A09-tim-games-mensal-x-semanal]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A10-kids-plus-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A11-exa-premium-x-protecao]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A12-tim-games-prefixo]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A13-fit-app-x-fit-me-app]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A14-tim-music-plus-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[A15-kids-prefixo]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B01-fitme-16.99-x-17.00]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B02-fitme-16.99-x-16.98]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B03-fluid-14.99-x-15.00]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B04-exa-9.99-x-9.98]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B05-fitme-prefixo-valor-errado]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B06-aya-24.90-x-24.91]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B07-itgame-12.90-x-12.09]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[B08-fitme-16.99-x-169.90]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C01-hbo-secao-terceiros]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C02-netflix-em-secao-avulsa]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C03-youtube-mis-bucket]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C04-deezer-em-secao-avulsa]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C05-apple-music-em-secao-avulsa]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C06-bundle-incluso]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[C07-fitme-classificado-estrategico]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D01-fitme-dois-candidatos]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D02-fitme-tres-candidatos]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D03-aya-tres-marcas]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D04-mesmo-nome-duas-linhas]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D05-duplicata-mesma-linha]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D06-fluid-familia]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D07-exa-familia]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[D08-bancah-familia]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[E01-prefixo-invertido]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[E02-substring-no-meio]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[E03-sufixo-games-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[E04-token-parcial-tube]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[E05-token-solto-app]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[E06-fitme-fail-closed-por-padrao]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[F01-msisdn-ausente]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[F02-item-na-linha-secundaria]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[F03-secao-sem-classe]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[F04-desc-vazia]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[F05-valor-nao-parseavel]",
"tests/migration/test_original_vas_variation_adversarial.py::test_explicacao_sem_data_nao_altera_nenhum_dos_50[F06-fatura-sem-o-item]",
"tests/migration/test_original_vas_variation_adversarial.py::test_flag_liga_a_segunda_passada_e_so_isso",
"tests/migration/test_original_vas_variation_adversarial.py::test_flag_ligada_nao_reabre_msisdn_nem_ambiguidade",
"tests/migration/test_original_vas_variation_adversarial.py::test_guards_de_prefixo_valem_com_a_flag_ligada[E01-prefixo-invertido]",
"tests/migration/test_original_vas_variation_adversarial.py::test_guards_de_prefixo_valem_com_a_flag_ligada[E02-substring-no-meio]",
"tests/migration/test_original_vas_variation_adversarial.py::test_guards_de_prefixo_valem_com_a_flag_ligada[E03-sufixo-games-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_guards_de_prefixo_valem_com_a_flag_ligada[E04-token-parcial-tube]",
"tests/migration/test_original_vas_variation_adversarial.py::test_guards_de_prefixo_valem_com_a_flag_ligada[E05-token-solto-app]",
"tests/migration/test_original_vas_variation_adversarial.py::test_guards_de_prefixo_valem_com_a_flag_ligada[E06-fitme-fail-closed-por-padrao]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A01-fluid-light-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A02-fluid-premium-x-light]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A03-aya-books-x-audiobooks]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A04-aya-ensinah-x-books]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A05-exa-seguranca-x-cloud]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A06-bancah-jornais-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A07-itgame-light-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A08-aluguel-filme-1-x-2]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A09-tim-games-mensal-x-semanal]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A10-kids-plus-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A11-exa-premium-x-protecao]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A12-tim-games-prefixo]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A13-fit-app-x-fit-me-app]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A14-tim-music-plus-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[A15-kids-prefixo]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B01-fitme-16.99-x-17.00]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B02-fitme-16.99-x-16.98]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B03-fluid-14.99-x-15.00]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B04-exa-9.99-x-9.98]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B05-fitme-prefixo-valor-errado]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B06-aya-24.90-x-24.91]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B07-itgame-12.90-x-12.09]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[B08-fitme-16.99-x-169.90]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C01-hbo-secao-terceiros]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C02-netflix-em-secao-avulsa]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C03-youtube-mis-bucket]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C04-deezer-em-secao-avulsa]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C05-apple-music-em-secao-avulsa]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C06-bundle-incluso]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[C07-fitme-classificado-estrategico]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D01-fitme-dois-candidatos]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D02-fitme-tres-candidatos]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D03-aya-tres-marcas]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D04-mesmo-nome-duas-linhas]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D05-duplicata-mesma-linha]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D06-fluid-familia]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D07-exa-familia]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[D08-bancah-familia]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[E01-prefixo-invertido]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[E02-substring-no-meio]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[E03-sufixo-games-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[E04-token-parcial-tube]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[E05-token-solto-app]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[E06-fitme-fail-closed-por-padrao]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[F01-msisdn-ausente]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[F02-item-na-linha-secundaria]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[F03-secao-sem-classe]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[F04-desc-vazia]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[F05-valor-nao-parseavel]",
"tests/migration/test_original_vas_variation_adversarial.py::test_matcher_determinístico_nao_produz_falso_positivo[F06-fatura-sem-o-item]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A01-fluid-light-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A02-fluid-premium-x-light]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A03-aya-books-x-audiobooks]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A04-aya-ensinah-x-books]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A05-exa-seguranca-x-cloud]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A06-bancah-jornais-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A07-itgame-light-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A08-aluguel-filme-1-x-2]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A09-tim-games-mensal-x-semanal]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A10-kids-plus-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A11-exa-premium-x-protecao]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A12-tim-games-prefixo]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A13-fit-app-x-fit-me-app]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A14-tim-music-plus-x-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[A15-kids-prefixo]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B01-fitme-16.99-x-17.00]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B02-fitme-16.99-x-16.98]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B03-fluid-14.99-x-15.00]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B04-exa-9.99-x-9.98]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B05-fitme-prefixo-valor-errado]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B06-aya-24.90-x-24.91]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B07-itgame-12.90-x-12.09]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[B08-fitme-16.99-x-169.90]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C01-hbo-secao-terceiros]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C02-netflix-em-secao-avulsa]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C03-youtube-mis-bucket]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C04-deezer-em-secao-avulsa]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C05-apple-music-em-secao-avulsa]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C06-bundle-incluso]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[C07-fitme-classificado-estrategico]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D01-fitme-dois-candidatos]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D02-fitme-tres-candidatos]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D03-aya-tres-marcas]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D04-mesmo-nome-duas-linhas]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D05-duplicata-mesma-linha]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D06-fluid-familia]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D07-exa-familia]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[D08-bancah-familia]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[E01-prefixo-invertido]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[E02-substring-no-meio]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[E03-sufixo-games-premium]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[E04-token-parcial-tube]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[E05-token-solto-app]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[E06-fitme-fail-closed-por-padrao]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[F01-msisdn-ausente]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[F02-item-na-linha-secundaria]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[F03-secao-sem-classe]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[F04-desc-vazia]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[F05-valor-nao-parseavel]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_item_devolvido_e_estrategico_ou_bundle[F06-fatura-sem-o-item]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_threshold_de_similaridade_zera_falso_positivo[0.85]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_threshold_de_similaridade_zera_falso_positivo[0.95]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_threshold_de_similaridade_zera_falso_positivo[0.97]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_threshold_de_similaridade_zera_falso_positivo[0.99]",
"tests/migration/test_original_vas_variation_adversarial.py::test_nenhum_threshold_de_similaridade_zera_falso_positivo[0.9]",
"tests/migration/test_original_vas_variation_adversarial.py::test_shadow_similaridade_tem_overlap_irremovivel",
"tests/migration/test_original_vas_variation_adversarial.py::test_suite_tem_exatamente_50_casos_com_a_distribuicao_exigida",
"tests/migration/test_original_vas_variation_adversarial.py::test_valores_sao_decimal_nunca_float",
"tests/migration/test_tool_policy_operation_types.py::test_contas_tool_policies_accept_all_operation_types",
"tests/migration/test_vas_response_renderer.py::test_vas_renderer_does_not_invent_missing_value",
"tests/migration/test_vas_response_renderer.py::test_vas_renderer_includes_available_values"
]