<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="59" tests="8221" time="550.705" timestamp="2026-08-17T03:34:26.583669+00:00" hostname="cube-B850M-AORUS-ELITE-WIFI6E-ICE"><testcase classname="" name="tests.gateway.test_discord_voice_mixer" time="0.000"><skipped message="collection skipped">('/home/cube/projects/richard/hermes-agent/tests/gateway/test_discord_voice_mixer.py', 18, "Skipped: could not import 'numpy': No module named 'numpy'")</skipped></testcase><testcase classname="" name="tests.gateway.test_matrix_voice" time="0.000"><skipped message="collection skipped">('/home/cube/projects/richard/hermes-agent/tests/gateway/test_matrix_voice.py', 17, 'Skipped: mautrix in sys.modules is a mock, not the real package')</skipped></testcase><testcase classname="tests.gateway.platforms.test_yuanbao_recall_db_only" name="test_recall_branch_a1_exact_id_match_round_trips_through_db" time="0.008" /><testcase classname="tests.gateway.platforms.test_yuanbao_recall_db_only" name="test_recall_branch_a2_content_match_when_no_platform_id" time="0.005" /><testcase classname="tests.gateway.relay.test_auth" name="test_token_round_trip_no_expiry" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_token_payload_may_contain_colons" time="0.004" /><testcase classname="tests.gateway.relay.test_auth" name="test_upgrade_token_is_make_token_of_gateway_id" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_token_wrong_secret_rejected" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_token_expired_rejected" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_token_rotation_verify_list" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_token_garbage_rejected" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_verify_signature_constant_time_multi_secret" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_delivery_signature_accepts_valid" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_delivery_signature_tamper_rejected" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_delivery_signature_skew_rejected" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_delivery_signature_missing_headers_rejected" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_delivery_headers_match_connector_names" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_python_make_token_matches_connector_byte_for_byte" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_python_verifies_connector_token" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_python_sign_matches_connector_delivery_sig" time="0.003" /><testcase classname="tests.gateway.relay.test_auth" name="test_python_verifies_connector_delivery_signature" time="0.003" /><testcase classname="tests.gateway.relay.test_contract_doc_conformance" name="test_descriptor_fields_match_contract_doc" time="0.003" /><testcase classname="tests.gateway.relay.test_contract_doc_conformance" name="test_session_source_wire_keys_documented_in_contract" time="0.003" /><testcase classname="tests.gateway.relay.test_contract_doc_conformance" name="test_internal_only_session_fields_stay_off_the_wire" time="0.003" /><testcase classname="tests.gateway.relay.test_contract_doc_conformance" name="test_discord_telegram_discriminator_columns_present[chat_id]" time="0.003" /><testcase classname="tests.gateway.relay.test_contract_doc_conformance" name="test_discord_telegram_discriminator_columns_present[chat_type]" time="0.003" /><testcase classname="tests.gateway.relay.test_contract_doc_conformance" name="test_discord_telegram_discriminator_columns_present[user_id]" time="0.003" /><testcase classname="tests.gateway.relay.test_contract_doc_conformance" name="test_discord_telegram_discriminator_columns_present[thread_id]" time="0.003" /><testcase classname="tests.gateway.relay.test_contract_doc_conformance" name="test_discord_telegram_discriminator_columns_present[guild_id]" time="0.003" /><testcase classname="tests.gateway.relay.test_descriptor" name="test_descriptor_roundtrips_json" time="0.003" /><testcase classname="tests.gateway.relay.test_descriptor" name="test_descriptor_is_frozen" time="0.003" /><testcase classname="tests.gateway.relay.test_descriptor" name="test_from_json_ignores_unknown_keys" time="0.003" /><testcase classname="tests.gateway.relay.test_descriptor" name="test_from_json_fills_optional_defaults" time="0.003" /><testcase classname="tests.gateway.relay.test_descriptor" name="test_module_is_marked_experimental" time="0.003" /><testcase classname="tests.gateway.relay.test_descriptor_from_entry" name="test_projection_carries_platform_entry_fields" time="0.003" /><testcase classname="tests.gateway.relay.test_descriptor_from_entry" name="test_zero_max_length_maps_to_4096_default" time="0.003" /><testcase classname="tests.gateway.relay.test_descriptor_from_entry" name="test_runtime_capabilities_supplied_by_caller" time="0.003" /><testcase classname="tests.gateway.relay.test_descriptor_from_entry" name="test_projection_roundtrips_through_json" time="0.003" /><testcase classname="tests.gateway.relay.test_no_stub_leak" name="test_stub_connector_does_not_leak_into_production_paths" time="0.124" /><testcase classname="tests.gateway.relay.test_relay_adapter" name="test_relay_platform_member_exists" time="0.005" /><testcase classname="tests.gateway.relay.test_relay_adapter" name="test_advertises_descriptor_max_length" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_adapter" name="test_supports_draft_streaming_follows_descriptor" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_adapter" name="test_len_fn_utf16_counts_code_units" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_adapter" name="test_len_fn_chars_uses_builtin_len" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_adapter" name="test_is_a_base_platform_adapter" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_adapter" name="test_connect_without_transport_raises" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_adapter" name="test_send_without_transport_returns_failure" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_adapter" name="test_send_reattaches_guild_id_from_inbound_scope" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_adapter" name="test_send_without_known_scope_omits_guild_id" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_adapter" name="test_send_preserves_explicit_guild_id" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_follow_up" name="test_follow_up_round_trips_without_a_token" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_follow_up" name="test_follow_up_wire_action_carries_no_credential" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_follow_up" name="test_follow_up_failure_surfaces_when_capability_unresolvable" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_follow_up" name="test_follow_up_without_transport_fails_cleanly" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_interrupt" name="test_interrupt_sets_only_target_session_event" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_interrupt" name="test_interrupt_unknown_session_is_noop" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_interrupt" name="test_outbound_interrupt_reaches_connector" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_interrupt" name="test_connect_wires_inbound_interrupt_over_ws" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_registration" name="test_off_when_no_url_configured" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_registration" name="test_registers_when_url_configured" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_registration" name="test_explicit_url_arg_registers" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_registration" name="test_force_registers_without_url" time="0.018" /><testcase classname="tests.gateway.relay.test_relay_registration" name="test_trailing_slash_stripped" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_registration" name="test_create_adapter_yields_relay_adapter" time="0.017" /><testcase classname="tests.gateway.relay.test_relay_roundtrip" name="test_connect_registers_inbound_handler" time="0.004" /><testcase classname="tests.gateway.relay.test_relay_roundtrip" name="test_inbound_event_reaches_adapter" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_roundtrip" name="test_two_guilds_isolate_into_distinct_session_keys" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_roundtrip" name="test_outbound_send_round_trips" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_roundtrip" name="test_get_chat_info_proxied_to_connector" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_roundtrip_telegram" name="test_telegram_descriptor_round_trips_through_stub" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_roundtrip_telegram" name="test_inbound_telegram_event_reaches_adapter" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_roundtrip_telegram" name="test_two_telegram_chats_isolate_by_chat_id" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_roundtrip_telegram" name="test_forum_topics_isolate_by_thread_id_within_one_chat" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_roundtrip_telegram" name="test_telegram_dm_isolates_by_chat_id" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_roundtrip_telegram" name="test_outbound_send_round_trips_telegram" time="0.003" /><testcase classname="tests.gateway.relay.test_relay_sheds_crypto" name="test_relay_package_imports_no_platform_crypto" time="0.008" /><testcase classname="tests.gateway.relay.test_relay_sheds_crypto" name="test_relay_package_calls_no_signature_verification" time="0.005" /><testcase classname="tests.gateway.relay.test_relay_sheds_crypto" name="test_channel_auth_uses_only_stdlib_crypto_not_platform_modules" time="0.004" /><testcase classname="tests.gateway.relay.test_self_provision" name="test_relay_endpoint_from_env" time="0.003" /><testcase classname="tests.gateway.relay.test_self_provision" name="test_relay_endpoint_absent_is_none" time="0.003" /><testcase classname="tests.gateway.relay.test_self_provision" name="test_relay_route_keys_csv" time="0.003" /><testcase classname="tests.gateway.relay.test_self_provision" name="test_relay_route_keys_empty" time="0.003" /><testcase classname="tests.gateway.relay.test_self_provision" name="test_provision_url_maps_ws_to_http" time="0.003" /><testcase classname="tests.gateway.relay.test_self_provision" name="test_provisions_on_nas_host_that_is_NOT_is_managed" time="0.003" /><testcase classname="tests.gateway.relay.test_self_provision" name="test_skips_when_relay_not_configured" time="0.003" /><testcase classname="tests.gateway.relay.test_self_provision" name="test_skips_when_secret_already_pinned" time="0.003" /><testcase classname="tests.gateway.relay.test_self_provision" name="test_provisions_and_sets_env_in_process" time="0.003" /><testcase classname="tests.gateway.relay.test_self_provision" name="test_outbound_only_when_no_endpoint" time="0.003" /><testcase classname="tests.gateway.relay.test_self_provision" name="test_no_nas_token_is_non_fatal" time="0.003" /><testcase classname="tests.gateway.relay.test_self_provision" name="test_connector_failure_is_non_fatal" time="0.003" /><testcase classname="tests.gateway.relay.test_ws_transport" name="test_handshake_negotiates_descriptor" time="0.005" /><testcase classname="tests.gateway.relay.test_ws_transport" name="test_inbound_frame_reaches_handler" time="0.055" /><testcase classname="tests.gateway.relay.test_ws_transport" name="test_outbound_round_trips_with_correlation" time="0.006" /><testcase classname="tests.gateway.relay.test_ws_transport" name="test_follow_up_round_trips" time="0.004" /><testcase classname="tests.gateway.relay.test_ws_transport" name="test_disconnect_fails_pending_waiters_cleanly" time="0.004" /><testcase classname="tests.gateway.relay.test_ws_transport" name="test_https_url_normalized_to_wss" time="0.003" /><testcase classname="tests.gateway.relay.test_ws_transport" name="test_ws_dial_url_idempotent_with_scheme_and_path" time="0.003" /><testcase classname="tests.gateway.test_35809_auto_reset_clean_context.TestAutoResetBlockReSyncsBinding" name="test_reset_session_return_is_captured" time="0.060" /><testcase classname="tests.gateway.test_35809_auto_reset_clean_context.TestAutoResetBlockReSyncsBinding" name="test_topic_binding_is_resynced_after_reset" time="0.056" /><testcase classname="tests.gateway.test_35809_auto_reset_clean_context.TestAutoResetLoadsCleanContext" name="test_next_turn_transcript_is_empty_after_auto_reset" time="0.016" /><testcase classname="tests.gateway.test_35809_auto_reset_clean_context.TestAutoResetLoadsCleanContext" name="test_clean_context_survives_gateway_restart" time="0.014" /><testcase classname="tests.gateway.test_42039_duplicate_user_message" name="test_agent_failed_early_skip_db_when_agent_has_session_db" time="0.122" /><testcase classname="tests.gateway.test_42039_duplicate_user_message" name="test_agent_failed_early_no_skip_db_when_no_session_db" time="0.118" /><testcase classname="tests.gateway.test_42039_duplicate_user_message" name="test_not_new_messages_skip_db_when_agent_has_session_db" time="0.119" /><testcase classname="tests.gateway.test_42039_duplicate_user_message" name="test_normal_path_skip_db_when_agent_has_session_db" time="0.218" /><testcase classname="tests.gateway.test_7100_transient_failure_transcript.TestContextOverflowStillSkipsTranscript" name="test_compression_exhausted_is_context_overflow" time="0.005" /><testcase classname="tests.gateway.test_7100_transient_failure_transcript.TestContextOverflowStillSkipsTranscript" name="test_explicit_context_length_error_is_context_overflow" time="0.003" /><testcase classname="tests.gateway.test_7100_transient_failure_transcript.TestContextOverflowStillSkipsTranscript" name="test_generic_400_on_large_session_is_context_overflow" time="0.003" /><testcase classname="tests.gateway.test_7100_transient_failure_transcript.TestTransientFailureKeepsUserMessage" name="test_rate_limit_429_is_not_context_overflow" time="0.003" /><testcase classname="tests.gateway.test_7100_transient_failure_transcript.TestTransientFailureKeepsUserMessage" name="test_read_timeout_is_not_context_overflow" time="0.003" /><testcase classname="tests.gateway.test_7100_transient_failure_transcript.TestTransientFailureKeepsUserMessage" name="test_connection_reset_is_not_context_overflow" time="0.003" /><testcase classname="tests.gateway.test_7100_transient_failure_transcript.TestTransientFailureKeepsUserMessage" name="test_provider_500_is_not_context_overflow" time="0.003" /><testcase classname="tests.gateway.test_7100_transient_failure_transcript.TestTransientFailureKeepsUserMessage" name="test_generic_400_on_short_session_is_not_context_overflow" time="0.003" /><testcase classname="tests.gateway.test_7100_transient_failure_transcript.TestSuccessfulResultUnaffected" name="test_successful_result_neither_failed_nor_overflow" time="0.003" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_rapid_text_followups_accumulate_instead_of_replacing" time="0.027" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_debounce_buffers_rapid_text_then_flushes_to_pending" time="0.155" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_debounce_resets_timer_on_new_arrival" time="0.206" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_active_drain_force_flushes_debounce_before_release" time="0.056" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_force_flush_cancels_timer_without_duplicate_processing" time="0.306" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_text_debounce_does_not_merge_different_senders" time="0.006" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_control_and_clarify_messages_bypass_text_debounce" time="0.005" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_debounce_skipped_when_busy_text_mode_not_queue" time="0.004" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_debounce_respects_env_var_override" time="0.004" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_debounce_cleanup_in_cancel_background_tasks" time="0.004" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_single_followup_is_stored_as_is" time="0.004" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_adapter_defaults_to_interrupt_mode" time="0.003" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_adapter_is_queue_text_debounce_candidate_when_queue_set" time="0.003" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_command_messages_bypass_debounce_even_in_queue_mode" time="0.003" /><testcase classname="tests.gateway.test_active_session_text_merge" name="test_busy_text_mode_respects_env_var_override" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_approved_plan_and_meal_constraints_drive_generated_proposal" time="2.755" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_customer_withdrawal_command_revokes_consent_and_reserves_route" time="0.083" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_empty_or_mismatched_journals_block_production" time="0.234" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_config_epoch_requires_exact_live_fanout_and_digest[duplicate_customer]" time="0.088" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_config_epoch_requires_exact_live_fanout_and_digest[extra_customer]" time="0.086" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_config_epoch_requires_exact_live_fanout_and_digest[omitted_enabled_customer]" time="0.124" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_config_epoch_requires_exact_live_fanout_and_digest[missing_digest]" time="0.088" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_config_epoch_requires_exact_live_fanout_and_digest[mismatched_digest]" time="0.087" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_source_day_mapping_identity_is_one_to_one[duplicate_root]" time="0.087" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_source_day_mapping_identity_is_one_to_one[duplicate_mapping_id]" time="0.086" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_source_day_mapping_identity_is_one_to_one[missing]" time="2.697" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_source_day_mapping_identity_is_one_to_one[unmapped]" time="0.088" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_proposal_uses_canonical_events_and_pins_artifacts" time="2.778" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_v1_production_does_not_project_external_activity_sessions" time="5.299" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_untyped_approved_schedule_fails_closed" time="0.118" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_journal_reload_uses_persisted_rows" time="2.662" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_reload_rejects_hash_consistent_persisted_explanation_and_body" time="2.680" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_reload_delivery_rejects_hash_consistent_noncanonical_customer_body" time="2.883" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_feature_config_digest_is_verified" time="0.086" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_d_plus_transport_gate_revalidates_feature_config_digest" time="0.005" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_real_adaptive_transport_window_covers_baseline_and_extension[0-None-True]" time="0.004" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_real_adaptive_transport_window_covers_baseline_and_extension[27-None-True]" time="0.004" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_real_adaptive_transport_window_covers_baseline_and_extension[28-None-False]" time="0.004" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_real_adaptive_transport_window_covers_baseline_and_extension[28-extended_through3-True]" time="0.004" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_real_adaptive_transport_window_covers_baseline_and_extension[83-extended_through4-True]" time="0.004" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_real_adaptive_transport_window_covers_baseline_and_extension[84-extended_through5-False]" time="0.004" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_owner_can_persist_and_revoke_delivery_capability" time="0.197" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_delivery_enable_does_not_rebind_after_document_digest_rotation" time="0.159" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_lifecycle_rejects_source_mutation_and_wrong_destination" time="3.200" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_revocation_matrix_fails_closed[consent-approve]" time="2.639" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_revocation_matrix_fails_closed[consent-activate]" time="2.762" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_revocation_matrix_fails_closed[consent-deliver]" time="2.878" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_revocation_matrix_fails_closed[safety-approve]" time="2.716" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_revocation_matrix_fails_closed[safety-activate]" time="2.768" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_revocation_matrix_fails_closed[safety-deliver]" time="2.875" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_revocation_matrix_fails_closed[owner-approve]" time="2.674" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_revocation_matrix_fails_closed[owner-activate]" time="2.777" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_revocation_matrix_fails_closed[owner-deliver]" time="2.892" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_revocation_matrix_fails_closed[destination-approve]" time="2.694" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_revocation_matrix_fails_closed[destination-activate]" time="2.684" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_revocation_matrix_fails_closed[destination-deliver]" time="2.813" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_lifecycle_requires_exact_configured_owner" time="2.807" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_public_shadow_constructor_flag_cannot_enable_raw_runtime_paths" time="0.005" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_forged_runtime_paths_fail_before_store_or_provider_mutation" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_shadow_factory_requires_the_exact_private_token" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_topic_59_only" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_missing_goal_prompts_and_never_sends" time="0.004" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_revision_requires_reapproval_and_exact_digest" time="0.006" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_low_adherence_and_safety_fail_closed" time="0.005" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_safety_callback_cannot_approve_or_activate" time="0.005" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_approved_delivery_calls_strict_sender_once_and_audits" time="0.006" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_unknown_delivery_is_never_retried" time="0.006" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_negative_provider_receipt_is_unknown_and_never_retried" time="0.006" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_adaptive_config_is_exact_topic_and_disabled_by_default" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_review_ingress_is_distinct_from_canonical_owner_and_sessions_are_exact" time="0.005" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_review_session_wrong_user_and_stale_duplicate_are_terminal" time="0.005" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_operator_sessions_bind_action_provenance_and_expiry" time="0.006" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_callback_claim_race_dispatches_create_once" time="0.354" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_operator_card_exposes_only_state_appropriate_primary_action" time="3.603" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_held_card_exposes_explicit_owner_risk_policy_approval" time="0.006" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_risk_policy_approval_rejects_non_owner_review_operator" time="0.004" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_safety_held_card_hides_impossible_hold_and_release_actions" time="0.075" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_releasable_operator_hold_restores_parent_target" time="3.168" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_terminal_delivery_card_removes_send_and_exposes_only_valid_recovery[sent_audited-None]" time="2.948" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_terminal_delivery_card_removes_send_and_exposes_only_valid_recovery[delivery_unknown-None]" time="3.017" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_terminal_delivery_card_removes_send_and_exposes_only_valid_recovery[duplicate-None]" time="2.962" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_terminal_delivery_card_removes_send_and_exposes_only_valid_recovery[audit_pending-\uac10\uc0ac \uae30\ub85d \ubcf5\uad6c]" time="3.007" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_callback_claim_race_dispatches_mutation_once" time="3.242" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_operator_edit_note_returns_identity_envelope" time="3.206" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_publish_pending_card_recovers_once" time="0.008" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_adaptive_delivery_result_text_is_safe[result0-\uc804\uc1a1 \uacb0\uacfc\ub97c \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \ubcf4\ub0b4\uc9c0 \ub9c8\uc138\uc694. \uc870\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.]" time="0.004" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_adaptive_delivery_result_text_is_safe[result1-\uace0\uac1d \uc804\uc1a1 \uc601\uc218\uc99d\uc740 \ud655\uc778\ub410\uc2b5\ub2c8\ub2e4. \uc7ac\uc804\uc1a1\ud558\uc9c0 \ub9d0\uace0 \uac10\uc0ac \uae30\ub85d\uc744 \ubcf5\uad6c\ud574 \uc8fc\uc138\uc694.]" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_adaptive_delivery_result_text_is_safe[result2-\uace0\uac1d \uc804\uc1a1\uacfc \uac10\uc0ac \uae30\ub85d\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.]" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_adaptive_delivery_result_text_is_safe[result3-\uc774\ubbf8 \ucc98\ub9ac\ub41c \uc804\uc1a1\uc785\ub2c8\ub2e4.]" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_owner_rotation_aborts_persisted_delivery_before_append" time="0.116" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_owner_rotation_aborts_activation_before_transition_append" time="2.744" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_owner_rotation_aborts_rollback_before_transition_append" time="2.826" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_rollback_accepts_verified_authority_only_registration_child" time="2.898" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_lifecycle_rejects_raw_operator_identity" time="0.076" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_opaque_adaptive_callbacks_are_bounded_and_stale_safe" time="0.007" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_telegram_adaptive_reply_confirms_same_card_update" time="0.004" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_telegram_adaptive_expired_ack_still_projects_committed_card" time="0.004" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_telegram_adaptive_callback_requires_exact_owner_topic" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_telegram_adaptive_view_preserves_existing_action_buttons" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_telegram_repeated_adaptive_view_keeps_buttons" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_telegram_summary_detail_round_trip" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_telegram_expired_refresh_reports_refresh_feedback" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_telegram_adaptive_view_treats_message_not_modified_as_success" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_telegram_adaptive_view_reports_distinct_edit_error" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_telegram_adaptive_view_respects_explicit_button_payloads" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_telegram_adaptive_callback_rejects_non_owner_or_wrong_space" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_live_telegram_adaptive_callback_requires_configured_review_space" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_telegram_registry_authority_is_configured_and_contained" time="0.003" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_async_registered_transport_success_is_audited" time="3.060" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_async_registered_transport_unknown_is_terminal" time="3.162" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_delivery_disabled_rejects_before_provider_call" time="2.967" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_adaptive_transport_rejects_raw_and_unreserved_calls" time="2.912" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_real_telegram_transport_checks_authority_before_consuming_reservation[positive]" time="3.113" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_real_telegram_transport_checks_authority_before_consuming_reservation[d_plus_85]" time="3.083" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_real_telegram_transport_checks_authority_before_consuming_reservation[revoked]" time="3.128" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_activation_crash_between_overlay_and_epoch_aborts_after_recovery" time="2.848" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_activation_recovery_rejects_document_digest_rotation" time="2.788" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_replacement_overlay_epoch_failure_aborts_and_restores_predecessor" time="5.690" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_base_rollback_crash_restores_prior_state_idempotently" time="2.913" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_replacement_rollback_crash_restores_prior_state_idempotently" time="5.692" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_activation_crash_before_receipt_commits_missing_receipt_on_recovery" time="2.789" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_concurrent_coordinators_reserve_once_before_async_provider_call" time="3.241" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_subprocess_shared_directory_reservation_race" time="0.166" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_provider_receipt_reconciles_missing_delivery_audit_without_resend" time="3.156" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_public_delivery_false_uses_persisted_enable_then_fresh_revoke_fails_closed" time="6.128" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_delivery_reservation_revalidation_records_unknown_for_each_authority_change[source]" time="3.087" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_delivery_reservation_revalidation_records_unknown_for_each_authority_change[registration]" time="3.094" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_delivery_reservation_revalidation_records_unknown_for_each_authority_change[consent]" time="2.960" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_delivery_reservation_revalidation_records_unknown_for_each_authority_change[owner]" time="3.087" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_approve_revalidation_rejects_source_or_registration_change_before_append[source]" time="2.612" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_approve_revalidation_rejects_source_or_registration_change_before_append[registration]" time="2.683" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_proposal_append_recheck_rejects_source_or_registration_change[source]" time="2.630" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_proposal_append_recheck_rejects_source_or_registration_change[registration]" time="2.643" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_competing_revision_children_leave_stale_child_unapprovable_and_undeliverable" time="2.871" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_p2_p6_fresh_revisions_have_exact_terminal_rows_and_provider_counts" time="36.661" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_missing_review_operator_version_is_rejected" time="0.005" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_forged_capability_without_durable_session_fails_before_mutation" time="0.075" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_profile_authority_flock_serializes_processes_and_owner_change_is_stale" time="0.230" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_adaptive_send_callback_duplicate_is_exact_and_does_not_retry" time="3.162" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_adaptive_reconcile_callback_completes_without_provider_retry" time="3.316" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_mutating_action_pin_toctou_rejects_before_downstream_mutation[hold]" time="3.926" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_mutating_action_pin_toctou_rejects_before_downstream_mutation[release]" time="3.937" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_mutating_action_pin_toctou_rejects_before_downstream_mutation[approve]" time="3.968" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_mutating_action_pin_toctou_rejects_before_downstream_mutation[activate]" time="4.029" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_mutating_action_pin_toctou_rejects_before_downstream_mutation[delivery_enable]" time="3.890" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_mutating_action_pin_toctou_rejects_before_downstream_mutation[delivery_revoke]" time="3.914" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_mutating_action_pin_toctou_rejects_before_downstream_mutation[send]" time="3.944" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_mutating_action_pin_toctou_rejects_before_downstream_mutation[reconcile]" time="3.941" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_publication_recovery_claims_once_across_services" time="0.008" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_receipt_only_audit_pending_recovery_survives_restart_without_provider" time="3.226" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_view_and_back_callbacks_replay_without_claiming_or_reissuing" time="3.160" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_approve_and_send_first_click_is_exact_read_only_preview" time="2.887" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_cancel_send_is_read_only_and_invalidates_confirmation" time="3.110" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_interrupted_cancel_claim_keeps_paired_confirmation_terminal" time="3.146" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_pause_change_between_preview_and_confirm_sends_nothing" time="3.082" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_confirm_send_runs_existing_composite_once" time="3.438" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_confirm_send_unknown_delivery_is_terminal_and_not_replayed" time="3.496" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_confirm_send_revalidates_stale_source_before_provider" time="3.184" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_operator_card_summary_detail_payloads" time="3.235" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_expired_operator_callback_refreshes_same_card_without_action" time="3.417" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_operator_card_hides_detail_toggle_without_unique_detail" time="3.125" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_view_callback_stale_forwarded_or_pinned_replay_rejects[message]" time="2.991" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_view_callback_stale_forwarded_or_pinned_replay_rejects[pins]" time="2.986" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_humanizer_adaptive_grounding_accepts_only_production_fact_schema" time="0.006" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_coaching_facts_reject_forged_digest_before_mutation" time="2.823" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_coaching_facts_binding_changes_for_omitted_projection_field_drift" time="2.866" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_current_coaching_facts_binding_match_and_mismatch_are_read_only" time="2.911" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_adaptive_coach_authority_persists_and_drives_approval" time="2.970" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_adaptive_coach_pipeline_reloads_without_provider_replay" time="2.698" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_telegram_adaptive_card_never_claims_or_invokes_provider_inline" time="0.005" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_adaptive_coach_generation_claim_is_cross_instance_single_winner" time="2.666" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_adaptive_coach_provider_failure_releases_generation_claim" time="2.725" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_publication_unknown_outcome_is_not_retried" time="0.007" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_expired_publication_claim_is_recovered_once_after_restart" time="0.007" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_locked_card_states_korean_cause_and_required_action" time="2.834" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_unlocked_card_omits_the_locked_reason_block" time="2.863" /><testcase classname="tests.gateway.test_adaptive_nutrition" name="test_production_proposal_hydrates_targets_for_raw_event_store" time="2.648" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_same_config_same_signature" time="0.005" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_model_change_different_signature" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_same_token_prefix_different_full_token_changes_signature" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_provider_change_different_signature" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_toolset_change_different_signature" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_reasoning_not_in_signature" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_cache_keys_default_omitted_matches_empty" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_context_length_change_busts_cache" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_max_tokens_change_busts_cache" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_compression_threshold_change_busts_cache" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_compression_enabled_toggle_busts_cache" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_cache_keys_key_order_does_not_matter" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignature" name="test_tool_registry_generation_change_busts_cache" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestExtractCacheBustingConfig" name="test_reads_model_context_length" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestExtractCacheBustingConfig" name="test_reads_compression_subkeys" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestExtractCacheBustingConfig" name="test_missing_keys_yield_none" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestExtractCacheBustingConfig" name="test_non_dict_section_treated_as_missing" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestExtractCacheBustingConfig" name="test_none_config_is_safe" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestExtractCacheBustingConfig" name="test_extract_includes_live_tool_registry_generation" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestExtractCacheBustingConfig" name="test_skips_honcho_config_read_when_provider_is_not_honcho" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestExtractCacheBustingConfig" name="test_reads_honcho_config_only_when_provider_is_honcho" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestExtractCacheBustingConfig" name="test_memory_provider_change_busts_signature" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestExtractCacheBustingConfig" name="test_honcho_cache_busting_config_memoized_by_mtime" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestExtractCacheBustingConfig" name="test_full_round_trip_busts_cache_on_real_edit" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheLifecycle" name="test_cache_hit_returns_same_agent" time="0.437" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheLifecycle" name="test_cache_miss_on_model_change" time="0.094" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheLifecycle" name="test_evict_on_session_reset" time="0.173" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheLifecycle" name="test_evict_does_not_affect_other_sessions" time="0.005" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheLifecycle" name="test_reasoning_config_updates_in_place" time="0.312" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheLifecycle" name="test_system_prompt_frozen_across_cache_reuse" time="0.095" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheLifecycle" name="test_callbacks_update_without_cache_eviction" time="0.091" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheBoundedGrowth" name="test_cap_evicts_lru_when_exceeded" time="0.007" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheBoundedGrowth" name="test_cap_respects_move_to_end" time="0.004" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheBoundedGrowth" name="test_cap_triggers_cleanup_thread" time="0.004" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheBoundedGrowth" name="test_idle_ttl_sweep_evicts_stale_agents" time="0.004" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheBoundedGrowth" name="test_idle_sweep_skips_agents_without_activity_ts" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheBoundedGrowth" name="test_plain_dict_cache_is_tolerated" time="0.008" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheBoundedGrowth" name="test_main_lookup_updates_lru_order" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheActiveSafety" name="test_cap_skips_active_lru_entry" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheActiveSafety" name="test_cap_evicts_when_multiple_excess_and_some_inactive" time="0.004" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheActiveSafety" name="test_cap_leaves_cache_over_limit_if_all_active" time="0.004" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheActiveSafety" name="test_cap_pending_sentinel_does_not_block_eviction" time="0.004" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheActiveSafety" name="test_idle_sweep_skips_active_agent" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheActiveSafety" name="test_eviction_does_not_close_active_agent_client" time="0.204" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheSpilloverLive" name="test_fill_to_cap_then_spillover" time="0.784" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheSpilloverLive" name="test_spillover_all_active_keeps_cache_over_cap" time="0.467" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheSpilloverLive" name="test_evicted_session_next_turn_gets_fresh_agent" time="0.639" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheIdleResume" name="test_release_clients_does_not_touch_process_registry" time="0.092" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheIdleResume" name="test_release_clients_does_not_touch_terminal_or_browser" time="0.090" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheIdleResume" name="test_release_clients_closes_llm_client" time="0.100" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheIdleResume" name="test_close_vs_release_full_teardown_difference" time="0.180" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheIdleResume" name="test_idle_evicted_session_rebuild_inherits_task_id" time="0.467" /><testcase classname="tests.gateway.test_agent_cache.TestCachedAgentInactivityReset" name="test_fresh_turn_resets_idle_clock" time="0.005" /><testcase classname="tests.gateway.test_agent_cache.TestCachedAgentInactivityReset" name="test_fresh_turn_resets_desc" time="0.005" /><testcase classname="tests.gateway.test_agent_cache.TestCachedAgentInactivityReset" name="test_interrupt_turn_preserves_idle_clock" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestCachedAgentInactivityReset" name="test_interrupt_turn_preserves_desc" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestCachedAgentInactivityReset" name="test_deep_interrupt_recursion_preserves_idle_clock" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestCachedAgentInactivityReset" name="test_fresh_turn_resets_flush_cursor" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestCachedAgentInactivityReset" name="test_interrupt_turn_preserves_flush_cursor" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestCachedAgentInactivityReset" name="test_api_call_count_reset_regardless_of_depth" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestCachedAgentInactivityReset" name="test_watchdog_accumulation_across_recursive_turns" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignatureUserId" name="test_signature_changes_with_user_id" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignatureUserId" name="test_signature_stable_with_same_user_id" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignatureUserId" name="test_signature_changes_with_user_id_alt" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentConfigSignatureUserId" name="test_signature_omits_user_id_when_absent" time="0.003" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheMessageCountRebaseline" name="test_same_process_turns_preserve_cached_agent" time="0.005" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheMessageCountRebaseline" name="test_cross_process_write_still_invalidates" time="0.005" /><testcase classname="tests.gateway.test_agent_cache.TestAgentCacheMessageCountRebaseline" name="test_rebaseline_is_fail_safe_and_skips_legacy_and_pending" time="0.005" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestTelegramAllowedChats" name="test_empty_is_no_restriction" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestTelegramAllowedChats" name="test_list_form" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestTelegramAllowedChats" name="test_csv_form" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestTelegramAllowedChats" name="test_env_var_fallback" time="0.004" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestTelegramAllowedChats" name="test_blocks_non_whitelisted_group" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestTelegramAllowedChats" name="test_permits_whitelisted_group" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestTelegramAllowedChats" name="test_mention_cannot_bypass_whitelist" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestTelegramAllowedChats" name="test_dms_unaffected" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestTelegramAllowedChats" name="test_config_bridge" time="0.051" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestTelegramAllowedChats" name="test_config_bridge_env_takes_precedence" time="0.050" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestDingTalkAllowedChats" name="test_empty_is_no_restriction" time="0.005" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestDingTalkAllowedChats" name="test_list_form" time="0.004" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestDingTalkAllowedChats" name="test_csv_form" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestDingTalkAllowedChats" name="test_env_var_fallback" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestDingTalkAllowedChats" name="test_blocks_non_whitelisted_group" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestDingTalkAllowedChats" name="test_dm_unaffected" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestDingTalkAllowedChats" name="test_config_bridge" time="0.048" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestMattermostAllowedChannels" name="test_empty_config_is_no_restriction" time="0.005" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestMattermostAllowedChannels" name="test_config_list_blocks_non_whitelisted_channel" time="0.004" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestMattermostAllowedChannels" name="test_config_list_permits_whitelisted_channel" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestMattermostAllowedChannels" name="test_env_var_fallback_when_no_config" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestMattermostAllowedChannels" name="test_dm_unaffected" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestMattermostAllowedChannels" name="test_config_bridge" time="0.048" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestMatrixAllowedRooms" name="test_empty_env_empty_set" time="0.005" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestMatrixAllowedRooms" name="test_env_var_parsed_to_set" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestMatrixAllowedRooms" name="test_block_logic" time="0.003" /><testcase classname="tests.gateway.test_allowed_channels_widening.TestMatrixAllowedRooms" name="test_config_bridge" time="0.047" /><testcase classname="tests.gateway.test_allowlist_startup_check.TestAllowlistStartupCheck" name="test_no_config_emits_warning" time="0.005" /><testcase classname="tests.gateway.test_allowlist_startup_check.TestAllowlistStartupCheck" name="test_signal_group_allowed_users_suppresses_warning" time="0.004" /><testcase classname="tests.gateway.test_allowlist_startup_check.TestAllowlistStartupCheck" name="test_telegram_allow_all_users_suppresses_warning" time="0.003" /><testcase classname="tests.gateway.test_allowlist_startup_check.TestAllowlistStartupCheck" name="test_gateway_allow_all_users_suppresses_warning" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestCheckRequirements" name="test_returns_true_when_aiohttp_available" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestCheckRequirements" name="test_returns_false_without_aiohttp" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestResponseStore" name="test_put_and_get" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestResponseStore" name="test_get_missing_returns_none" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestResponseStore" name="test_lru_eviction" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestResponseStore" name="test_access_refreshes_lru" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestResponseStore" name="test_update_existing_key" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestResponseStore" name="test_delete_existing" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestResponseStore" name="test_delete_missing" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestResponseStore" name="test_delete_clears_conversation_mapping" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestResponseStore" name="test_eviction_clears_conversation_mapping" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestResponseStore" name="test_file_store_created_owner_only_under_permissive_umask" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestIdempotencyCache" name="test_concurrent_same_key_and_fingerprint_runs_once" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestIdempotencyCache" name="test_different_fingerprint_does_not_reuse_inflight_task" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestIdempotencyCache" name="test_cancelled_waiter_does_not_drop_shared_inflight_task" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestAdapterInit" name="test_default_config" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestAdapterInit" name="test_custom_config_from_extra" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestAdapterInit" name="test_config_from_env" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestAdapterInit" name="test_invalid_port_from_env_falls_back_to_default" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestAdapterInit" name="test_create_agent_forwards_config_reasoning_effort" time="0.020" /><testcase classname="tests.gateway.test_api_server.TestAdapterInit" name="test_create_agent_refreshes_max_iterations_from_runtime_config" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestAuth" name="test_no_key_configured_allows_all" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestAuth" name="test_valid_key_passes" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestAuth" name="test_invalid_key_returns_401" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestAuth" name="test_missing_auth_header_returns_401" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestAuth" name="test_malformed_auth_header_returns_401" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestAgentExecution" name="test_run_agent_uses_session_id_as_task_id" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestHealthEndpoint" name="test_security_headers_present" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestHealthEndpoint" name="test_health_returns_ok" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestHealthEndpoint" name="test_health_reports_version" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestHealthEndpoint" name="test_v1_health_alias_returns_ok" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestHealthDetailedEndpoint" name="test_health_detailed_returns_ok" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestHealthDetailedEndpoint" name="test_health_detailed_no_runtime_status" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestHealthDetailedEndpoint" name="test_health_detailed_does_not_require_auth" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestModelsEndpoint" name="test_models_returns_hermes_agent" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestModelsEndpoint" name="test_models_returns_profile_name" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestModelsEndpoint" name="test_models_returns_explicit_model_name" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestModelsEndpoint" name="test_resolve_model_name_explicit" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestModelsEndpoint" name="test_resolve_model_name_default_profile" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestModelsEndpoint" name="test_resolve_model_name_named_profile" time="0.003" /><testcase classname="tests.gateway.test_api_server.TestModelsEndpoint" name="test_models_requires_auth" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestModelsEndpoint" name="test_models_with_valid_auth" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestCapabilitiesEndpoint" name="test_capabilities_advertises_plugin_safe_contract" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestCapabilitiesEndpoint" name="test_capabilities_requires_auth_when_key_configured" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSkillsEndpoint" name="test_skills_returns_list_envelope" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSkillsEndpoint" name="test_skills_handles_enumeration_failure" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestSkillsEndpoint" name="test_skills_requires_auth_when_key_configured" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestToolsetsEndpoint" name="test_toolsets_returns_resolved_tools" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestToolsetsEndpoint" name="test_toolsets_handles_resolution_failure_per_toolset" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestToolsetsEndpoint" name="test_toolsets_requires_auth_when_key_configured" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_invalid_json_returns_400" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_missing_messages_returns_400" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_empty_messages_returns_400" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_stream_true_returns_sse" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_stream_string_false_returns_json_completion" time="0.007" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_stream_task_done_callback_enqueues_eos_for_chat_completions" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_stream_sends_keepalive_during_quiet_tool_gap" time="0.659" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_stream_survives_tool_call_none_sentinel" time="0.112" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_stream_includes_tool_progress" time="0.061" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_stream_tool_progress_skips_internal_events" time="0.061" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_stream_emits_tool_lifecycle_with_call_id" time="0.061" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_stream_tool_lifecycle_skips_internal_and_orphan_completes" time="0.060" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_no_user_message_returns_400" time="0.009" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_successful_completion" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_system_prompt_extracted" time="0.007" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_conversation_history_passed" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_agent_error_returns_500" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_stable_session_id_across_turns" time="0.007" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsEndpoint" name="test_different_conversations_get_different_session_ids" time="0.009" /><testcase classname="tests.gateway.test_api_server.TestDeriveChatSessionId" name="test_deterministic" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestDeriveChatSessionId" name="test_prefix" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestDeriveChatSessionId" name="test_different_system_prompt" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestDeriveChatSessionId" name="test_different_first_message" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestDeriveChatSessionId" name="test_none_system_prompt" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_missing_input_returns_400" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_invalid_json_returns_400" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_successful_response_with_string_input" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_successful_response_with_array_input" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_instructions_as_ephemeral_prompt" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_previous_response_id_chaining" time="0.007" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_previous_response_id_stores_full_agent_transcript_once" time="0.007" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_previous_response_id_outputs_only_current_turn_items" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_previous_response_id_preserves_session" time="0.007" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_invalid_previous_response_id_returns_404" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_store_false_does_not_store" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_store_string_false_does_not_store" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_instructions_inherited_from_previous" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_agent_error_returns_500" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesEndpoint" name="test_invalid_input_type_returns_400" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestResponsesStreaming" name="test_stream_true_returns_responses_sse" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesStreaming" name="test_stream_string_false_returns_json_response" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesStreaming" name="test_stream_task_done_callback_enqueues_eos_for_responses" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestResponsesStreaming" name="test_stream_emits_function_call_and_output_items" time="0.007" /><testcase classname="tests.gateway.test_api_server.TestResponsesStreaming" name="test_streamed_response_is_stored_for_get" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesStreaming" name="test_streamed_previous_response_id_stores_full_agent_transcript_once" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestResponsesStreaming" name="test_stream_cancelled_persists_incomplete_snapshot" time="0.507" /><testcase classname="tests.gateway.test_api_server.TestResponsesStreaming" name="test_stream_client_disconnect_persists_incomplete_snapshot" time="0.010" /><testcase classname="tests.gateway.test_api_server.TestEndpointAuth" name="test_chat_completions_requires_auth" time="0.007" /><testcase classname="tests.gateway.test_api_server.TestEndpointAuth" name="test_responses_requires_auth" time="0.007" /><testcase classname="tests.gateway.test_api_server.TestEndpointAuth" name="test_models_requires_auth" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestEndpointAuth" name="test_health_does_not_require_auth" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestConfigIntegration" name="test_platform_enum_has_api_server" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestConfigIntegration" name="test_env_override_enables_api_server" time="0.061" /><testcase classname="tests.gateway.test_api_server.TestConfigIntegration" name="test_env_override_with_key" time="0.052" /><testcase classname="tests.gateway.test_api_server.TestConfigIntegration" name="test_env_override_port_and_host" time="0.050" /><testcase classname="tests.gateway.test_api_server.TestConfigIntegration" name="test_env_override_cors_origins" time="0.050" /><testcase classname="tests.gateway.test_api_server.TestConfigIntegration" name="test_api_server_in_connected_platforms" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestConfigIntegration" name="test_api_server_not_in_connected_when_disabled" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestMultipleSystemMessages" name="test_multiple_system_messages_concatenated" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSendMethod" name="test_send_returns_not_supported" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestGetResponse" name="test_get_stored_response" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestGetResponse" name="test_get_not_found" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestGetResponse" name="test_get_requires_auth" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestDeleteResponse" name="test_delete_stored_response" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestDeleteResponse" name="test_delete_not_found" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestDeleteResponse" name="test_delete_requires_auth" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestToolCallsInOutput" name="test_tool_calls_in_output" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestToolCallsInOutput" name="test_no_tool_calls_still_works" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestUsageCounting" name="test_responses_usage" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestUsageCounting" name="test_chat_completions_usage" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestTruncation" name="test_truncation_auto_limits_history" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestTruncation" name="test_no_truncation_keeps_full_history" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsAgentIncomplete" name="test_truncation_with_partial_text_uses_length_finish_reason" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsAgentIncomplete" name="test_failure_with_no_text_returns_502_error_envelope" time="0.027" /><testcase classname="tests.gateway.test_api_server.TestChatCompletionsAgentIncomplete" name="test_normal_completion_unchanged" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_origin_allowed_for_non_browser_client" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_origin_rejected_by_default" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_origin_allowed_for_allowlist_match" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_cors_headers_for_origin_disabled_by_default" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_cors_headers_for_origin_matches_allowlist" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_cors_headers_for_origin_rejects_unknown_origin" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_cors_headers_not_present_by_default" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_browser_origin_rejected_by_default" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_cors_options_preflight_rejected_by_default" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_cors_headers_present_for_allowed_origin" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_cors_allows_idempotency_key_header" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_cors_sets_vary_origin_header" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_cors_options_preflight_allowed_for_configured_origin" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestCORS" name="test_cors_preflight_sets_max_age" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestConversationParameter" name="test_conversation_creates_new" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestConversationParameter" name="test_conversation_chains_automatically" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestConversationParameter" name="test_conversation_and_previous_response_id_conflict" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestConversationParameter" name="test_separate_conversations_are_isolated" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestConversationParameter" name="test_conversation_store_false_no_mapping" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestConversationParameter" name="test_conversation_reuse_after_eviction_no_404" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestSessionIdHeader" name="test_new_session_response_includes_session_id_header" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSessionIdHeader" name="test_provided_session_id_is_used_and_echoed" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSessionIdHeader" name="test_provided_session_id_loads_history_from_db" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSessionIdHeader" name="test_db_failure_falls_back_to_empty_history" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSessionKeyHeader" name="test_session_key_passed_to_agent_and_echoed" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSessionKeyHeader" name="test_session_key_independent_of_session_id" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSessionKeyHeader" name="test_session_key_absent_yields_none" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSessionKeyHeader" name="test_session_key_rejected_without_api_key" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSessionKeyHeader" name="test_session_key_rejects_control_chars" time="0.004" /><testcase classname="tests.gateway.test_api_server.TestSessionKeyHeader" name="test_session_key_rejects_oversized" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSessionKeyHeader" name="test_session_key_threads_into_create_agent" time="0.006" /><testcase classname="tests.gateway.test_api_server.TestSessionKeyHeader" name="test_responses_endpoint_accepts_session_key" time="0.005" /><testcase classname="tests.gateway.test_api_server.TestSessionKeyHeader" name="test_capabilities_advertises_session_key_header" time="0.005" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_ipv4_loopback" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_ipv6_loopback" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_ipv4_mapped_loopback" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_ipv4_wildcard" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_ipv6_wildcard" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_ipv4_mapped_unspecified" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_private_ipv4" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_private_ipv4_class_c" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_public_ipv4" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_localhost_resolves_to_loopback" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_hostname_resolving_to_non_loopback" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_hostname_mixed_resolution" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestIsNetworkAccessible" name="test_dns_failure_fails_closed" time="0.003" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestConnectBindGuard" name="test_refuses_ipv4_wildcard_without_key" time="0.005" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestConnectBindGuard" name="test_refuses_ipv6_wildcard_without_key" time="0.004" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestConnectBindGuard" name="test_refuses_loopback_without_key" time="0.004" /><testcase classname="tests.gateway.test_api_server_bind_guard.TestConnectBindGuard" name="test_allows_wildcard_with_key" time="0.004" /><testcase classname="tests.gateway.test_api_server_jobs.TestListJobs" name="test_list_jobs" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestListJobs" name="test_list_jobs_include_disabled" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestListJobs" name="test_list_jobs_default_excludes_disabled" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCreateJob" name="test_create_job" time="0.006" /><testcase classname="tests.gateway.test_api_server_jobs.TestCreateJob" name="test_create_job_missing_name" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCreateJob" name="test_create_job_name_too_long" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCreateJob" name="test_create_job_prompt_too_long" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCreateJob" name="test_create_job_invalid_repeat" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCreateJob" name="test_create_job_missing_schedule" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestGetJob" name="test_get_job" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestGetJob" name="test_get_job_not_found" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestGetJob" name="test_get_job_invalid_id" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestGetJob" name="test_invalid_job_id_logs_source_context" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestUpdateJob" name="test_update_job" time="0.006" /><testcase classname="tests.gateway.test_api_server_jobs.TestUpdateJob" name="test_update_job_rejects_unknown_fields" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestUpdateJob" name="test_update_job_no_valid_fields" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestDeleteJob" name="test_delete_job" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestDeleteJob" name="test_delete_job_not_found" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestPauseJob" name="test_pause_job" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestResumeJob" name="test_resume_job" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestRunJob" name="test_run_job" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestAuthRequired" name="test_auth_required_list_jobs" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestAuthRequired" name="test_auth_required_create_job" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestAuthRequired" name="test_auth_required_get_job" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestAuthRequired" name="test_auth_required_delete_job" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestAuthRequired" name="test_auth_passes_with_valid_key" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronUnavailable" name="test_cron_unavailable_list" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronUnavailable" name="test_pause_handler_no_self_binding" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronUnavailable" name="test_list_handler_no_self_binding" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronUnavailable" name="test_update_handler_no_self_binding" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronUnavailable" name="test_cron_unavailable_create" time="0.004" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronUnavailable" name="test_cron_unavailable_get" time="0.004" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronUnavailable" name="test_cron_unavailable_delete" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronUnavailable" name="test_cron_unavailable_pause" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronUnavailable" name="test_cron_unavailable_resume" time="0.004" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronUnavailable" name="test_cron_unavailable_run" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronPromptScanParity" name="test_create_job_rejects_malicious_prompt" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronPromptScanParity" name="test_create_job_allows_benign_prompt" time="0.006" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronPromptScanParity" name="test_update_job_rejects_malicious_prompt" time="0.005" /><testcase classname="tests.gateway.test_api_server_jobs.TestCronPromptScanParity" name="test_update_job_allows_benign_prompt" time="0.005" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_string_passthrough" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_none_returns_empty_string" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_text_only_list_collapses_to_string" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_responses_input_text_canonicalized" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_image_url_preserved_with_text" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_input_image_converted_to_canonical_shape" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_data_image_url_accepted" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_non_image_data_url_rejected" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_file_part_rejected" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_input_file_part_rejected" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_missing_url_rejected" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_bad_scheme_rejected" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestNormalizeMultimodalContent" name="test_unknown_part_type_rejected" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestContentHasVisiblePayload" name="test_non_empty_string" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestContentHasVisiblePayload" name="test_whitespace_only_string" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestContentHasVisiblePayload" name="test_list_with_image_only" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestContentHasVisiblePayload" name="test_list_with_only_empty_text" time="0.003" /><testcase classname="tests.gateway.test_api_server_multimodal.TestChatCompletionsMultimodalHTTP" name="test_inline_image_preserved_to_run_agent" time="0.005" /><testcase classname="tests.gateway.test_api_server_multimodal.TestChatCompletionsMultimodalHTTP" name="test_text_only_array_collapses_to_string" time="0.005" /><testcase classname="tests.gateway.test_api_server_multimodal.TestChatCompletionsMultimodalHTTP" name="test_file_part_returns_400" time="0.005" /><testcase classname="tests.gateway.test_api_server_multimodal.TestChatCompletionsMultimodalHTTP" name="test_non_image_data_url_returns_400" time="0.004" /><testcase classname="tests.gateway.test_api_server_multimodal.TestResponsesMultimodalHTTP" name="test_input_image_canonicalized_and_forwarded" time="0.005" /><testcase classname="tests.gateway.test_api_server_multimodal.TestResponsesMultimodalHTTP" name="test_input_file_returns_400" time="0.004" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_none_returns_empty_string" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_plain_string_returned_as_is" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_empty_string_returned_as_is" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_text_content_part" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_input_text_content_part" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_output_text_content_part" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_multiple_text_parts_joined_with_newline" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_mixed_string_and_dict_parts" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_image_url_parts_silently_skipped" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_integer_content_converted" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_boolean_content_converted" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_deeply_nested_list_respects_depth_limit" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_large_list_capped" time="0.004" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_oversized_string_truncated" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_empty_text_parts_filtered" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_dict_without_type_skipped" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_empty_list_returns_empty" time="0.003" /><testcase classname="tests.gateway.test_api_server_normalize.TestNormalizeChatContent" name="test_many_small_parts_normalize_without_quadratic_rescan" time="0.003" /><testcase classname="tests.gateway.test_api_server_runs.TestStartRun" name="test_start_returns_202" time="0.006" /><testcase classname="tests.gateway.test_api_server_runs.TestStartRun" name="test_start_invalid_json_returns_400" time="0.005" /><testcase classname="tests.gateway.test_api_server_runs.TestStartRun" name="test_start_missing_input_returns_400" time="0.004" /><testcase classname="tests.gateway.test_api_server_runs.TestStartRun" name="test_start_empty_input_returns_400" time="0.005" /><testcase classname="tests.gateway.test_api_server_runs.TestStartRun" name="test_start_invalid_history_does_not_allocate_run" time="0.004" /><testcase classname="tests.gateway.test_api_server_runs.TestStartRun" name="test_start_requires_auth" time="0.005" /><testcase classname="tests.gateway.test_api_server_runs.TestStartRun" name="test_start_with_valid_auth" time="0.005" /><testcase classname="tests.gateway.test_api_server_runs.TestRunStatus" name="test_status_completed_run_includes_output_and_usage" time="0.007" /><testcase classname="tests.gateway.test_api_server_runs.TestRunStatus" name="test_status_reflects_explicit_session_id" time="0.007" /><testcase classname="tests.gateway.test_api_server_runs.TestRunStatus" name="test_status_not_found_returns_404" time="0.005" /><testcase classname="tests.gateway.test_api_server_runs.TestRunStatus" name="test_status_requires_auth" time="0.005" /><testcase classname="tests.gateway.test_api_server_runs.TestRunEvents" name="test_events_stream_returns_completed" time="0.006" /><testcase classname="tests.gateway.test_api_server_runs.TestRunEvents" name="test_approval_response_without_pending_returns_409" time="0.007" /><testcase classname="tests.gateway.test_api_server_runs.TestRunEvents" name="test_approval_string_false_does_not_resolve_all" time="0.005" /><testcase classname="tests.gateway.test_api_server_runs.TestRunEvents" name="test_events_not_found_returns_404" time="1.012" /><testcase classname="tests.gateway.test_api_server_runs.TestRunEvents" name="test_events_requires_auth" time="0.026" /><testcase classname="tests.gateway.test_api_server_runs.TestStopRun" name="test_stop_running_agent" time="0.610" /><testcase classname="tests.gateway.test_api_server_runs.TestStopRun" name="test_stop_nonexistent_run_returns_404" time="0.009" /><testcase classname="tests.gateway.test_api_server_runs.TestStopRun" name="test_stop_requires_auth" time="0.006" /><testcase classname="tests.gateway.test_api_server_runs.TestStopRun" name="test_stop_already_completed_run_returns_404" time="0.309" /><testcase classname="tests.gateway.test_api_server_runs.TestStopRun" name="test_stop_interrupt_exception_does_not_crash" time="0.112" /><testcase classname="tests.gateway.test_api_server_runs.TestStopRun" name="test_stop_sends_sentinel_to_events_stream" time="0.212" /><testcase classname="tests.gateway.test_api_server_toolset.TestHermesApiServerToolset" name="test_toolset_exists" time="0.006" /><testcase classname="tests.gateway.test_api_server_toolset.TestHermesApiServerToolset" name="test_toolset_validates" time="0.004" /><testcase classname="tests.gateway.test_api_server_toolset.TestHermesApiServerToolset" name="test_toolset_includes_web_tools" time="0.004" /><testcase classname="tests.gateway.test_api_server_toolset.TestHermesApiServerToolset" name="test_toolset_includes_core_tools" time="0.004" /><testcase classname="tests.gateway.test_api_server_toolset.TestHermesApiServerToolset" name="test_toolset_includes_browser_tools" time="0.004" /><testcase classname="tests.gateway.test_api_server_toolset.TestHermesApiServerToolset" name="test_toolset_includes_homeassistant_tools" time="0.005" /><testcase classname="tests.gateway.test_api_server_toolset.TestHermesApiServerToolset" name="test_toolset_excludes_clarify" time="0.004" /><testcase classname="tests.gateway.test_api_server_toolset.TestHermesApiServerToolset" name="test_toolset_excludes_send_message" time="0.004" /><testcase classname="tests.gateway.test_api_server_toolset.TestHermesApiServerToolset" name="test_toolset_excludes_text_to_speech" time="0.005" /><testcase classname="tests.gateway.test_api_server_toolset.TestApiServerPlatformConfig" name="test_platforms_dict_includes_api_server" time="0.004" /><testcase classname="tests.gateway.test_api_server_toolset.TestApiServerAdapterToolset" name="test_create_agent_reads_config_toolsets" time="0.254" /><testcase classname="tests.gateway.test_api_server_toolset.TestApiServerAdapterToolset" name="test_create_agent_respects_config_override" time="0.089" /><testcase classname="tests.gateway.test_approve_deny_commands.TestBlockingGatewayApproval" name="test_register_and_resolve_unblocks_entry" time="0.106" /><testcase classname="tests.gateway.test_approve_deny_commands.TestBlockingGatewayApproval" name="test_resolve_returns_zero_when_no_pending" time="0.006" /><testcase classname="tests.gateway.test_approve_deny_commands.TestBlockingGatewayApproval" name="test_resolve_all_unblocks_multiple_entries" time="0.003" /><testcase classname="tests.gateway.test_approve_deny_commands.TestBlockingGatewayApproval" name="test_resolve_single_pops_oldest_fifo" time="0.003" /><testcase classname="tests.gateway.test_approve_deny_commands.TestBlockingGatewayApproval" name="test_unregister_signals_all_entries" time="0.003" /><testcase classname="tests.gateway.test_approve_deny_commands.TestBlockingGatewayApproval" name="test_clear_session_denies_and_signals_all_entries" time="0.003" /><testcase classname="tests.gateway.test_approve_deny_commands.TestApproveCommand" name="test_approve_resolves_blocking_approval" time="0.015" /><testcase classname="tests.gateway.test_approve_deny_commands.TestApproveCommand" name="test_approve_all_resolves_multiple" time="0.004" /><testcase classname="tests.gateway.test_approve_deny_commands.TestApproveCommand" name="test_approve_all_session" time="0.004" /><testcase classname="tests.gateway.test_approve_deny_commands.TestApproveCommand" name="test_approve_no_pending" time="0.004" /><testcase classname="tests.gateway.test_approve_deny_commands.TestApproveCommand" name="test_approve_stale_old_style_pending" time="0.004" /><testcase classname="tests.gateway.test_approve_deny_commands.TestDenyCommand" name="test_deny_resolves_blocking_approval" time="0.004" /><testcase classname="tests.gateway.test_approve_deny_commands.TestDenyCommand" name="test_deny_all_resolves_all" time="0.004" /><testcase classname="tests.gateway.test_approve_deny_commands.TestDenyCommand" name="test_deny_no_pending" time="0.004" /><testcase classname="tests.gateway.test_approve_deny_commands.TestBareTextNoLongerApproves" name="test_yes_does_not_execute_pending_command" time="0.004" /><testcase classname="tests.gateway.test_approve_deny_commands.TestBlockingApprovalE2E" name="test_blocking_approval_approve_once" time="0.055" /><testcase classname="tests.gateway.test_approve_deny_commands.TestBlockingApprovalE2E" name="test_blocking_approval_deny" time="0.056" /><testcase classname="tests.gateway.test_approve_deny_commands.TestBlockingApprovalE2E" name="test_blocking_approval_timeout" time="1.008" /><testcase classname="tests.gateway.test_approve_deny_commands.TestBlockingApprovalE2E" name="test_parallel_subagent_approvals" time="0.058" /><testcase classname="tests.gateway.test_approve_deny_commands.TestBlockingApprovalE2E" name="test_parallel_mixed_approve_deny" time="0.058" /><testcase classname="tests.gateway.test_approve_deny_commands.TestFallbackNoCallback" name="test_no_callback_returns_approval_required" time="0.008" /><testcase classname="tests.gateway.test_auth_fallback.TestResolveRuntimeAgentKwargsAuthFallback" name="test_auth_error_tries_fallback" time="0.005" /><testcase classname="tests.gateway.test_auth_fallback.TestResolveRuntimeAgentKwargsAuthFallback" name="test_auth_error_no_fallback_raises" time="0.005" /><testcase classname="tests.gateway.test_auth_fallback.TestResolveRuntimeAgentKwargsAuthFallback" name="test_legacy_fallback_is_appended_after_fallback_providers" time="0.005" /><testcase classname="tests.gateway.test_auto_continue.TestAutoDetection" name="test_trailing_tool_result_triggers_note" time="0.004" /><testcase classname="tests.gateway.test_auto_continue.TestAutoDetection" name="test_trailing_assistant_message_no_note" time="0.004" /><testcase classname="tests.gateway.test_auto_continue.TestAutoDetection" name="test_empty_history_no_note" time="0.004" /><testcase classname="tests.gateway.test_auto_continue.TestAutoDetection" name="test_trailing_user_message_no_note" time="0.004" /><testcase classname="tests.gateway.test_auto_continue.TestAutoDetection" name="test_multiple_tool_results_still_triggers" time="0.004" /><testcase classname="tests.gateway.test_auto_continue.TestAutoDetection" name="test_original_message_preserved_after_note" time="0.004" /><testcase classname="tests.gateway.test_auto_continue.TestInterruptedReplayFiltering" name="test_interrupted_tool_tail_is_removed_from_agent_history" time="0.004" /><testcase classname="tests.gateway.test_auto_continue.TestInterruptedReplayFiltering" name="test_mixed_tail_with_one_interrupted_result_is_removed" time="0.004" /><testcase classname="tests.gateway.test_auto_continue.TestInterruptedReplayFiltering" name="test_successful_tool_tail_is_preserved" time="0.004" /><testcase classname="tests.gateway.test_auto_continue.TestInterruptedReplayFiltering" name="test_dangling_unanswered_tool_call_tail_is_removed" time="0.004" /><testcase classname="tests.gateway.test_auto_continue.TestInterruptedReplayFiltering" name="test_dangling_tail_after_completed_pair_is_removed_only_at_tail" time="0.004" /><testcase classname="tests.gateway.test_auto_continue.TestInterruptedReplayFiltering" name="test_persisted_auto_continue_note_is_not_replayed" time="0.004" /><testcase classname="tests.gateway.test_auto_voice_reply_format.TestAutoVoiceReplyFormat" name="test_telegram_auto_voice_reply_requests_ogg_for_native_voice_bubble" time="0.006" /><testcase classname="tests.gateway.test_auto_voice_reply_format.TestAutoVoiceReplyFormat" name="test_non_telegram_auto_voice_reply_keeps_mp3_default" time="0.006" /><testcase classname="tests.gateway.test_background_command.TestHandleBackgroundCommand" name="test_no_prompt_shows_usage" time="0.005" /><testcase classname="tests.gateway.test_background_command.TestHandleBackgroundCommand" name="test_bg_alias_no_prompt_shows_usage" time="0.005" /><testcase classname="tests.gateway.test_background_command.TestHandleBackgroundCommand" name="test_empty_prompt_shows_usage" time="0.005" /><testcase classname="tests.gateway.test_background_command.TestHandleBackgroundCommand" name="test_valid_prompt_starts_task" time="0.005" /><testcase classname="tests.gateway.test_background_command.TestHandleBackgroundCommand" name="test_telegram_dm_topic_passes_trigger_anchor_to_task" time="0.005" /><testcase classname="tests.gateway.test_background_command.TestHandleBackgroundCommand" name="test_prompt_truncated_in_preview" time="0.005" /><testcase classname="tests.gateway.test_background_command.TestHandleBackgroundCommand" name="test_task_id_is_unique" time="0.005" /><testcase classname="tests.gateway.test_background_command.TestHandleBackgroundCommand" name="test_works_across_platforms" time="0.005" /><testcase classname="tests.gateway.test_background_command.TestRunBackgroundTask" name="test_no_adapter_returns_silently" time="0.005" /><testcase classname="tests.gateway.test_background_command.TestRunBackgroundTask" name="test_no_credentials_sends_error" time="0.023" /><testcase classname="tests.gateway.test_background_command.TestRunBackgroundTask" name="test_successful_task_sends_result" time="0.110" /><testcase classname="tests.gateway.test_background_command.TestRunBackgroundTask" name="test_media_files_routed_by_type" time="0.075" /><testcase classname="tests.gateway.test_background_command.TestRunBackgroundTask" name="test_telegram_dm_topic_completion_preserves_reply_anchor_metadata" time="0.067" /><testcase classname="tests.gateway.test_background_command.TestRunBackgroundTask" name="test_agent_cleanup_runs_when_background_agent_raises" time="0.109" /><testcase classname="tests.gateway.test_background_command.TestRunBackgroundTask" name="test_exception_sends_error_message" time="0.021" /><testcase classname="tests.gateway.test_background_command.TestBackgroundInHelp" name="test_background_in_help_output" time="0.012" /><testcase classname="tests.gateway.test_background_command.TestBackgroundInHelp" name="test_background_is_known_command" time="0.004" /><testcase classname="tests.gateway.test_background_command.TestBackgroundInHelp" name="test_bg_alias_is_known_command" time="0.003" /><testcase classname="tests.gateway.test_background_command.TestBackgroundInCLICommands" name="test_background_in_commands_dict" time="0.003" /><testcase classname="tests.gateway.test_background_command.TestBackgroundInCLICommands" name="test_bg_alias_in_commands_dict" time="0.003" /><testcase classname="tests.gateway.test_background_command.TestBackgroundInCLICommands" name="test_background_in_session_category" time="0.003" /><testcase classname="tests.gateway.test_background_command.TestBackgroundInCLICommands" name="test_background_autocompletes" time="0.049" /><testcase classname="tests.gateway.test_background_process_notifications.TestLoadBackgroundNotificationsMode" name="test_defaults_to_all" time="0.005" /><testcase classname="tests.gateway.test_background_process_notifications.TestLoadBackgroundNotificationsMode" name="test_reads_config_yaml" time="0.004" /><testcase classname="tests.gateway.test_background_process_notifications.TestLoadBackgroundNotificationsMode" name="test_env_var_overrides_config" time="0.003" /><testcase classname="tests.gateway.test_background_process_notifications.TestLoadBackgroundNotificationsMode" name="test_false_value_maps_to_off" time="0.003" /><testcase classname="tests.gateway.test_background_process_notifications.TestLoadBackgroundNotificationsMode" name="test_invalid_value_defaults_to_all" time="0.004" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_run_process_watcher_respects_notification_mode[all-sessions0-1-is still running]" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_run_process_watcher_respects_notification_mode[result-sessions1-0-None]" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_run_process_watcher_respects_notification_mode[off-sessions2-0-None]" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_run_process_watcher_respects_notification_mode[result-sessions3-1-finished with exit code 0]" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_run_process_watcher_respects_notification_mode[error-sessions4-0-None]" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_run_process_watcher_respects_notification_mode[error-sessions5-1-finished with exit code 1]" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_run_process_watcher_respects_notification_mode[all-sessions6-1-finished with exit code 0]" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_thread_id_passed_to_send" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_no_thread_id_sends_no_metadata" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_inject_watch_notification_routes_from_session_store_origin" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_agent_notification_carries_message_id_reply_anchor" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_agent_notification_no_message_id_is_tolerated" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_inject_watch_notification_carries_message_id_reply_anchor" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_build_process_event_source_falls_back_to_session_key_chat_type" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_build_process_event_source_uses_cached_live_source_before_session_key_parse" time="0.008" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_inject_watch_notification_ignores_foreground_event_source" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_build_process_event_source_returns_none_for_empty_evt" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_build_process_event_source_returns_none_for_invalid_platform" time="0.009" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_build_process_event_source_returns_none_for_short_session_key" time="0.008" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_parse_session_key_valid" time="0.003" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_parse_session_key_with_extra_parts" time="0.003" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_parse_session_key_with_user_id_part" time="0.003" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_parse_session_key_dm_with_thread" time="0.003" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_parse_session_key_thread_chat_type" time="0.003" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_parse_session_key_too_short" time="0.003" /><testcase classname="tests.gateway.test_background_process_notifications" name="test_parse_session_key_wrong_prefix" time="0.003" /><testcase classname="tests.gateway.test_base_topic_sessions.TestBasePlatformTopicSessions" name="test_handle_message_does_not_interrupt_different_topic" time="0.003" /><testcase classname="tests.gateway.test_base_topic_sessions.TestBasePlatformTopicSessions" name="test_handle_message_interrupts_same_topic" time="0.003" /><testcase classname="tests.gateway.test_base_topic_sessions.TestBasePlatformTopicSessions" name="test_process_message_background_replies_in_same_topic" time="0.004" /><testcase classname="tests.gateway.test_base_topic_sessions.TestBasePlatformTopicSessions" name="test_process_message_background_marks_total_send_failure_unsuccessful" time="0.004" /><testcase classname="tests.gateway.test_base_topic_sessions.TestBasePlatformTopicSessions" name="test_process_message_background_marks_exception_unsuccessful" time="0.004" /><testcase classname="tests.gateway.test_base_topic_sessions.TestBasePlatformTopicSessions" name="test_process_message_background_marks_cancellation_unsuccessful" time="0.004" /><testcase classname="tests.gateway.test_base_topic_sessions.TestBasePlatformTopicSessions" name="test_cancel_background_tasks_marks_expected_cancellation_cancelled" time="0.003" /><testcase classname="tests.gateway.test_base_topic_sessions.TestTelegramAutoTtsCaptionDelivery" name="test_short_telegram_auto_tts_uses_caption_without_followup_text" time="0.005" /><testcase classname="tests.gateway.test_base_topic_sessions.TestTelegramAutoTtsCaptionDelivery" name="test_long_telegram_auto_tts_keeps_followup_text_when_caption_would_truncate" time="0.007" /><testcase classname="tests.gateway.test_base_topic_sessions.TestTelegramAutoTtsCaptionDelivery" name="test_telegram_auto_tts_send_failure_keeps_followup_text" time="0.005" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesConfigLoading" name="test_apply_env_overrides_bluebubbles" time="0.052" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesConfigLoading" name="test_home_channel_set_from_env" time="0.050" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesConfigLoading" name="test_not_connected_without_password" time="0.050" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_check_requirements" time="0.006" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_supports_message_editing_is_false" time="0.004" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_truncate_message_omits_pagination_suffixes" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_send_splits_paragraphs_into_multiple_bubbles" time="0.004" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_format_message_strips_markdown" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_format_message_preserves_underscores_in_identifiers" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_strip_markdown_headers" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_strip_markdown_links" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_init_normalizes_webhook_path" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_init_preserves_leading_slash" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_server_url_normalized" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_server_url_adds_scheme" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_default_mention_patterns_match_hermes_variants" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_custom_mention_patterns_override_defaults" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesHelpers" name="test_clean_mention_text_strips_leading_wake_word" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesMentionGating" name="test_group_message_without_mention_is_acknowledged_and_skipped" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesMentionGating" name="test_group_message_with_default_mention_is_dispatched_cleaned" time="0.004" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesMentionGating" name="test_dm_message_does_not_require_mention" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookParsing" name="test_webhook_prefers_chat_guid_over_message_guid" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookParsing" name="test_webhook_can_fall_back_to_sender_when_chat_fields_missing" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookParsing" name="test_webhook_extracts_chat_guid_from_chats_array_dm" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookParsing" name="test_webhook_extracts_chat_guid_from_chats_array_group" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookParsing" name="test_extract_payload_record_accepts_list_data" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookParsing" name="test_extract_payload_record_dict_data" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookParsing" name="test_extract_payload_record_fallback_to_message" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesGuidResolution" name="test_raw_guid_returned_as_is" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesGuidResolution" name="test_empty_target_returns_none" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesAttachmentDownload" name="test_download_image_uses_image_cache" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesAttachmentDownload" name="test_download_audio_uses_audio_cache" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesAttachmentDownload" name="test_download_document_uses_document_cache" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesAttachmentDownload" name="test_download_returns_none_without_client" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookUrl" name="test_default_host" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookUrl" name="test_local_hosts_normalized[0.0.0.0]" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookUrl" name="test_local_hosts_normalized[127.0.0.1]" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookUrl" name="test_local_hosts_normalized[localhost]" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookUrl" name="test_local_hosts_normalized[::]" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookUrl" name="test_custom_host_preserved" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookUrl" name="test_register_url_embeds_password" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookUrl" name="test_register_url_url_encodes_password" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookUrl" name="test_register_url_for_log_masks_password" time="0.004" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookUrl" name="test_register_url_omits_query_when_no_password" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookRegistration" name="test_find_registered_webhooks_returns_matches" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookRegistration" name="test_find_registered_webhooks_empty_when_none" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookRegistration" name="test_find_registered_webhooks_handles_api_error" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookRegistration" name="test_register_fresh" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookRegistration" name="test_register_accepts_201" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookRegistration" name="test_register_reuses_existing" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookRegistration" name="test_register_returns_false_without_client" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookRegistration" name="test_register_returns_false_on_server_error" time="0.004" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookRegistration" name="test_unregister_removes_matching" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookRegistration" name="test_unregister_removes_all_duplicates" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookRegistration" name="test_unregister_returns_false_without_client" time="0.003" /><testcase classname="tests.gateway.test_bluebubbles.TestBlueBubblesWebhookRegistration" name="test_unregister_handles_api_failure_gracefully" time="0.003" /><testcase classname="tests.gateway.test_bundles_command.TestHandleBundlesCommand" name="test_empty" time="0.004" /><testcase classname="tests.gateway.test_bundles_command.TestHandleBundlesCommand" name="test_with_bundles" time="0.004" /><testcase classname="tests.gateway.test_bundles_command.TestBundleResolutionPriority" name="test_bundle_resolves" time="0.004" /><testcase classname="tests.gateway.test_bundles_command.TestBundleResolutionPriority" name="test_underscore_alias" time="0.004" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_handle_message_queue_mode_queues_without_interrupt" time="0.004" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_telegram_grace_followups_respect_queue_fifo" time="0.005" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_sends_ack_when_agent_running" time="0.032" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_queue_mode_suppresses_interrupt_and_updates_ack" time="0.032" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_busy_text_mode_queue_delegates_to_adapter_handle_message" time="0.005" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_steer_mode_calls_agent_steer_no_interrupt_no_queue" time="0.032" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_steer_mode_falls_back_to_queue_when_agent_rejects" time="0.032" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_steer_mode_falls_back_to_queue_when_agent_pending" time="0.032" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_debounce_suppresses_rapid_acks" time="0.032" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_ack_after_cooldown_expires" time="0.059" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_includes_status_detail_when_opted_in" time="0.019" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_telegram_omits_status_detail_by_default" time="0.032" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_draining_still_works" time="0.004" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_pending_sentinel_no_interrupt" time="0.032" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionAck" name="test_no_adapter_falls_through" time="0.004" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionOnboardingHint" name="test_first_busy_ack_appends_interrupt_hint" time="0.005" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionOnboardingHint" name="test_second_busy_ack_omits_hint" time="0.005" /><testcase classname="tests.gateway.test_busy_session_ack.TestBusySessionOnboardingHint" name="test_queue_mode_hint_points_to_interrupt" time="0.005" /><testcase classname="tests.gateway.test_busy_session_auth_bypass.TestBusySessionAuthBypass" name="test_unauthorized_user_dropped_in_busy_path" time="0.004" /><testcase classname="tests.gateway.test_busy_session_auth_bypass.TestBusySessionAuthBypass" name="test_authorized_user_still_processed_in_busy_path" time="0.032" /><testcase classname="tests.gateway.test_busy_session_auth_bypass.TestBusySessionAuthBypass" name="test_unauthorized_user_during_drain_still_blocked" time="0.004" /><testcase classname="tests.gateway.test_busy_session_auth_bypass.TestBusySessionAuthBypass" name="test_unauthorized_user_cannot_steer_active_agent" time="0.004" /><testcase classname="tests.gateway.test_cached_agent_max_iterations" name="test_init_cached_agent_for_turn_does_not_touch_max_iterations" time="0.003" /><testcase classname="tests.gateway.test_cached_agent_max_iterations" name="test_init_cached_agent_preserves_max_iterations_on_interrupt_depth" time="0.003" /><testcase classname="tests.gateway.test_cached_agent_max_iterations" name="test_refreshed_max_iterations_propagates_to_turn_budget" time="0.003" /><testcase classname="tests.gateway.test_cancel_background_drain" name="test_cancel_background_tasks_drains_late_arrivals" time="0.204" /><testcase classname="tests.gateway.test_cancel_background_drain" name="test_cancel_background_tasks_handles_no_tasks" time="0.006" /><testcase classname="tests.gateway.test_cancel_background_drain" name="test_cancel_background_tasks_bounded_rounds" time="0.003" /><testcase classname="tests.gateway.test_channel_directory.TestLoadDirectory" name="test_missing_file" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestLoadDirectory" name="test_valid_file" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestLoadDirectory" name="test_corrupt_file" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildChannelDirectoryWrites" name="test_semantically_unchanged_rebuild_preserves_cache_inode" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildChannelDirectoryWrites" name="test_failed_write_preserves_previous_cache" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestResolveChannelName" name="test_exact_match" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestResolveChannelName" name="test_case_insensitive" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestResolveChannelName" name="test_guild_qualified_match" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestResolveChannelName" name="test_prefix_match_unambiguous" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestResolveChannelName" name="test_prefix_match_ambiguous_returns_none" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestResolveChannelName" name="test_no_channels_returns_none" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestResolveChannelName" name="test_no_match_returns_none" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestResolveChannelName" name="test_topic_name_resolves_to_composite_id" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestResolveChannelName" name="test_id_match_takes_precedence_over_name" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestResolveChannelName" name="test_display_label_with_type_suffix_resolves" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildFromSessions" name="test_builds_from_sessions_json" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildFromSessions" name="test_missing_sessions_file" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildFromSessions" name="test_deduplication_by_chat_id" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildFromSessions" name="test_keeps_distinct_topics_with_same_chat_id" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestFormatDirectoryForDisplay" name="test_empty_directory" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestFormatDirectoryForDisplay" name="test_telegram_display" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestFormatDirectoryForDisplay" name="test_discord_grouped_by_guild" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestLookupChannelType" name="test_forum_channel" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestLookupChannelType" name="test_regular_channel" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestLookupChannelType" name="test_unknown_chat_id_returns_none" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestLookupChannelType" name="test_unknown_platform_returns_none" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestLookupChannelType" name="test_channel_without_type_key_returns_none" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildSlack" name="test_no_team_clients_falls_back_to_sessions" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildSlack" name="test_lists_channels_from_users_conversations" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildSlack" name="test_paginates_via_response_metadata_cursor" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildSlack" name="test_per_workspace_error_does_not_block_others" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildSlack" name="test_session_dms_merged_when_not_in_api_results" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildSlack" name="test_skips_channels_with_no_id_or_name" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestBuildSlack" name="test_response_not_ok_breaks_pagination_for_that_workspace" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestChannelAliases" name="test_alias_renames_existing_entry_on_load" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestChannelAliases" name="test_alias_injects_undiscovered_group" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestChannelAliases" name="test_no_alias_file_is_noop" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestChannelAliases" name="test_corrupt_alias_file_is_ignored" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestChannelAliases" name="test_alias_persists_through_rebuild" time="0.004" /><testcase classname="tests.gateway.test_channel_directory.TestChannelAliases" name="test_apply_aliases_handles_malformed_map" time="0.004" /><testcase classname="tests.gateway.test_clean_shutdown_marker.TestSuspendRecentlyActive" name="test_suspends_recently_active_sessions" time="0.006" /><testcase classname="tests.gateway.test_clean_shutdown_marker.TestSuspendRecentlyActive" name="test_does_not_suspend_old_sessions" time="0.005" /><testcase classname="tests.gateway.test_clean_shutdown_marker.TestSuspendRecentlyActive" name="test_already_resume_pending_not_double_counted" time="0.006" /><testcase classname="tests.gateway.test_clean_shutdown_marker.TestCleanShutdownMarker" name="test_marker_written_on_graceful_stop" time="0.006" /><testcase classname="tests.gateway.test_clean_shutdown_marker.TestCleanShutdownMarker" name="test_marker_skips_suspension_on_startup" time="0.005" /><testcase classname="tests.gateway.test_clean_shutdown_marker.TestCleanShutdownMarker" name="test_no_marker_triggers_suspension" time="0.005" /><testcase classname="tests.gateway.test_clean_shutdown_marker.TestCleanShutdownMarker" name="test_marker_written_on_restart_stop" time="0.005" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_stop_bypasses_guard" time="0.004" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_new_bypasses_guard" time="0.004" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_reset_bypasses_guard" time="0.004" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_approve_bypasses_guard" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_deny_bypasses_guard" time="0.004" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_status_bypasses_guard" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_agents_bypasses_guard" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_tasks_alias_bypasses_guard" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_background_bypasses_guard" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_steer_bypasses_guard" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_help_bypasses_guard" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_update_bypasses_guard" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestCommandBypassActiveSession" name="test_queue_bypasses_guard" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/model claude-sonnet-4-model]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/model-model]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/reasoning high-reasoning]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/personality default-personality]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/voice on-voice]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/insights 7-insights]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/title my session-title]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/resume yesterday-resume]" time="0.004" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/retry-retry]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/undo-undo]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/compress-compress]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/usage-usage]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/reload-mcp-reload-mcp]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_command_bypasses_guard[/sethome-sethome]" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_should_bypass_returns_true_for_every_registered_command" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestAllResolvableCommandsBypassGuard" name="test_should_bypass_returns_false_for_unknown" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestNonBypassStillQueued" name="test_regular_text_queued" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestNonBypassStillQueued" name="test_unknown_command_queued" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestNonBypassStillQueued" name="test_file_path_not_treated_as_command" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestNoActiveSessionNormalDispatch" name="test_stop_when_no_session_active" time="0.004" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestPendingCommandSafetyNet" name="test_stop_command_detected" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestPendingCommandSafetyNet" name="test_new_command_detected" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestPendingCommandSafetyNet" name="test_reset_alias_detected" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestPendingCommandSafetyNet" name="test_unknown_command_not_detected" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestPendingCommandSafetyNet" name="test_file_path_not_detected_as_command" time="0.003" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestBypassWithBotnameSuffix" name="test_stop_with_botname" time="0.004" /><testcase classname="tests.gateway.test_command_bypass_active_session.TestBypassWithBotnameSuffix" name="test_new_with_botname" time="0.004" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_at_folder_colon_only_dirs" time="0.003" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_at_file_colon_only_files" time="0.003" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_at_folder_bare_without_colon_lists_dirs" time="0.003" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_at_file_bare_without_colon_lists_files" time="0.003" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_bare_at_still_shows_static_refs" time="0.003" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_fuzzy_at_finds_file_without_directory_prefix" time="0.006" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_fuzzy_ranks_exact_before_prefix_before_subseq" time="0.008" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_fuzzy_camelcase_word_boundary" time="0.007" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_fuzzy_subsequence_catches_sparse_queries" time="0.006" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_fuzzy_at_file_prefix_preserved" time="0.007" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_fuzzy_skipped_when_path_has_slash" time="0.005" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_fuzzy_skipped_when_folder_tag" time="0.004" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_fuzzy_hides_dotfiles_unless_asked" time="0.006" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_fuzzy_caps_results" time="0.007" /><testcase classname="tests.gateway.test_complete_path_at_filter" name="test_fuzzy_paths_relative_to_cwd_inside_subdir" time="0.024" /><testcase classname="tests.gateway.test_compress_command" name="test_compress_command_reports_noop_without_success_banner" time="0.007" /><testcase classname="tests.gateway.test_compress_command" name="test_compress_command_explains_when_token_estimate_rises" time="0.006" /><testcase classname="tests.gateway.test_compress_command" name="test_compress_command_appends_warning_when_compression_aborts" time="0.006" /><testcase classname="tests.gateway.test_compress_command" name="test_compress_command_surfaces_aux_model_failure_even_when_recovered" time="0.005" /><testcase classname="tests.gateway.test_compress_focus" name="test_compress_focus_topic_passed_to_agent" time="0.174" /><testcase classname="tests.gateway.test_compress_focus" name="test_compress_no_focus_passes_none" time="0.008" /><testcase classname="tests.gateway.test_compress_plugin_engine" name="test_compress_works_with_plugin_context_engine" time="0.007" /><testcase classname="tests.gateway.test_compress_plugin_engine" name="test_compress_respects_plugin_has_content_to_compress_false" time="0.005" /><testcase classname="tests.gateway.test_compression_concurrent_sessions" name="test_concurrent_compressions_do_not_alias_sessions" time="1.423" /><testcase classname="tests.gateway.test_compression_concurrent_sessions" name="test_concurrent_compressions_same_session_serialize" time="0.590" /><testcase classname="tests.gateway.test_compression_failure_session_sync" name="test_failed_turn_still_syncs_compression_session_split" time="0.058" /><testcase classname="tests.gateway.test_compression_session_id_persistence" name="test_every_post_compression_session_id_assignment_persists" time="0.088" /><testcase classname="tests.gateway.test_compression_session_id_persistence.TestCompressionSessionPropagation" name="test_gateway_session_entry_follows_compression_rotation" time="0.006" /><testcase classname="tests.gateway.test_compression_session_id_persistence.TestCompressionSessionPropagation" name="test_no_update_when_session_id_unchanged" time="0.005" /><testcase classname="tests.gateway.test_compression_session_id_persistence.TestCompressionSessionPropagation" name="test_contextvar_and_session_entry_agree_after_compression" time="0.004" /><testcase classname="tests.gateway.test_config.TestHomeChannelRoundtrip" name="test_to_dict_from_dict" time="0.003" /><testcase classname="tests.gateway.test_config.TestPlatformConfigRoundtrip" name="test_to_dict_from_dict" time="0.003" /><testcase classname="tests.gateway.test_config.TestPlatformConfigRoundtrip" name="test_disabled_no_token" time="0.003" /><testcase classname="tests.gateway.test_config.TestPlatformConfigRoundtrip" name="test_from_dict_coerces_quoted_false_enabled" time="0.003" /><testcase classname="tests.gateway.test_config.TestPlatformConfigRoundtrip" name="test_gateway_restart_notification_defaults_true" time="0.003" /><testcase classname="tests.gateway.test_config.TestPlatformConfigRoundtrip" name="test_gateway_restart_notification_roundtrip_false" time="0.003" /><testcase classname="tests.gateway.test_config.TestPlatformConfigRoundtrip" name="test_gateway_restart_notification_coerces_quoted_false" time="0.003" /><testcase classname="tests.gateway.test_config.TestGetConnectedPlatforms" name="test_returns_enabled_with_token" time="0.003" /><testcase classname="tests.gateway.test_config.TestGetConnectedPlatforms" name="test_empty_platforms" time="0.003" /><testcase classname="tests.gateway.test_config.TestGetConnectedPlatforms" name="test_dingtalk_recognised_via_extras" time="0.003" /><testcase classname="tests.gateway.test_config.TestGetConnectedPlatforms" name="test_dingtalk_recognised_via_env_vars" time="0.003" /><testcase classname="tests.gateway.test_config.TestGetConnectedPlatforms" name="test_dingtalk_missing_creds_not_connected" time="0.003" /><testcase classname="tests.gateway.test_config.TestGetConnectedPlatforms" name="test_dingtalk_disabled_not_connected" time="0.003" /><testcase classname="tests.gateway.test_config.TestSessionResetPolicy" name="test_roundtrip" time="0.003" /><testcase classname="tests.gateway.test_config.TestSessionResetPolicy" name="test_defaults" time="0.003" /><testcase classname="tests.gateway.test_config.TestSessionResetPolicy" name="test_from_dict_treats_null_values_as_defaults" time="0.003" /><testcase classname="tests.gateway.test_config.TestSessionResetPolicy" name="test_from_dict_coerces_quoted_false_notify" time="0.003" /><testcase classname="tests.gateway.test_config.TestStreamingConfig" name="test_defaults_to_auto_transport" time="0.003" /><testcase classname="tests.gateway.test_config.TestStreamingConfig" name="test_from_dict_coerces_quoted_false_enabled" time="0.003" /><testcase classname="tests.gateway.test_config.TestStreamingConfig" name="test_from_dict_malformed_numeric_values_fall_back_to_defaults" time="0.003" /><testcase classname="tests.gateway.test_config.TestGatewayConfigRoundtrip" name="test_full_roundtrip" time="0.003" /><testcase classname="tests.gateway.test_config.TestGatewayConfigRoundtrip" name="test_max_concurrent_sessions_from_dict_normalizes_disabled_values" time="0.004" /><testcase classname="tests.gateway.test_config.TestGatewayConfigRoundtrip" name="test_max_concurrent_sessions_from_dict_accepts_positive_integer" time="0.003" /><testcase classname="tests.gateway.test_config.TestGatewayConfigRoundtrip" name="test_max_concurrent_sessions_from_dict_ignores_invalid_values" time="0.004" /><testcase classname="tests.gateway.test_config.TestGatewayConfigRoundtrip" name="test_max_concurrent_sessions_from_dict_accepts_nested_fallback" time="0.003" /><testcase classname="tests.gateway.test_config.TestGatewayConfigRoundtrip" name="test_max_concurrent_sessions_top_level_overrides_nested" time="0.003" /><testcase classname="tests.gateway.test_config.TestGatewayConfigRoundtrip" name="test_roundtrip_preserves_unauthorized_dm_behavior" time="0.003" /><testcase classname="tests.gateway.test_config.TestGatewayConfigRoundtrip" name="test_from_dict_coerces_quoted_false_always_log_local" time="0.003" /><testcase classname="tests.gateway.test_config.TestGatewayConfigRoundtrip" name="test_get_notice_delivery_defaults_to_public" time="0.003" /><testcase classname="tests.gateway.test_config.TestGatewayConfigRoundtrip" name="test_get_notice_delivery_honors_platform_override" time="0.003" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_quick_commands_from_config_yaml" time="0.052" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_relay_platform_enabled_from_env_url" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_relay_platform_absent_when_url_unset" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_relay_platform_enabled_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_group_sessions_per_user_from_config_yaml" time="0.049" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_thread_sessions_per_user_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_thread_sessions_per_user_defaults_to_false" time="0.049" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_top_level_max_concurrent_sessions_from_config_yaml" time="0.049" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_nested_max_concurrent_sessions_from_config_yaml" time="0.051" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_top_level_max_concurrent_sessions_overrides_nested_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_discord_thread_require_mention_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_thread_require_mention_yaml_does_not_overwrite_env" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_discord_allow_from_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_discord_platform_extra_allow_from_to_env" time="0.051" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_quoted_false_platform_enabled_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_nested_gateway_platforms_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_top_level_platforms_override_nested_gateway_platforms" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_shared_key_loop_bridges_allow_from_from_nested_platforms" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_shared_key_loop_bridges_allow_from_from_nested_gateway_platforms" time="0.052" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_quoted_false_session_notify_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_quoted_false_always_log_local_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_discord_channel_prompts_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_discord_history_backfill_settings_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_telegram_channel_prompts_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_slack_channel_prompts_from_config_yaml" time="0.051" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_feishu_allow_bots_from_config_yaml_to_env" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_feishu_allow_bots_env_takes_precedence_over_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_invalid_quick_commands_in_config_yaml_are_ignored" time="0.049" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_unauthorized_dm_behavior_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_telegram_disable_link_previews_from_config_yaml" time="0.051" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_loads_telegram_rich_messages_from_gateway_platform_extra" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_load_config_default_enables_telegram_rich_messages" time="0.006" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_telegram_extra_base_url_from_config_yaml" time="0.049" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_notice_delivery_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_bridges_telegram_proxy_url_from_config_yaml" time="0.050" /><testcase classname="tests.gateway.test_config.TestLoadGatewayConfig" name="test_telegram_proxy_env_takes_precedence_over_config" time="0.051" /><testcase classname="tests.gateway.test_config.TestHomeChannelEnvOverrides" name="test_existing_platform_configs_accept_home_channel_env_overrides" time="0.055" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_top_level_cwd_sets_terminal_cwd" time="0.006" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_top_level_backend_sets_terminal_env" time="0.005" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_top_level_cwd_and_backend" time="0.004" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_nested_terminal_takes_precedence_over_top_level" time="0.004" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_nested_terminal_backend_takes_precedence" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_no_cwd_falls_back_to_messaging_cwd" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_no_cwd_no_messaging_cwd_falls_back_to_home" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_dot_cwd_triggers_messaging_fallback" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_auto_cwd_triggers_messaging_fallback" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_empty_cwd_ignored" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_whitespace_only_cwd_ignored" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_messaging_cwd_env_var_works" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTopLevelCwdAlias" name="test_top_level_cwd_beats_messaging_cwd" time="0.004" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestNestedTerminalCwdPlaceholderSkip" name="test_terminal_dot_cwd_does_not_clobber_env" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestNestedTerminalCwdPlaceholderSkip" name="test_terminal_auto_cwd_does_not_clobber_env" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestNestedTerminalCwdPlaceholderSkip" name="test_terminal_cwd_keyword_does_not_clobber_env" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestNestedTerminalCwdPlaceholderSkip" name="test_terminal_explicit_cwd_does_override" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestNestedTerminalCwdPlaceholderSkip" name="test_terminal_dot_cwd_falls_back_to_messaging_cwd" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestNestedTerminalCwdPlaceholderSkip" name="test_terminal_dot_cwd_and_messaging_cwd_both_set" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestNestedTerminalCwdPlaceholderSkip" name="test_non_cwd_terminal_keys_still_bridge" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestNestedTerminalCwdPlaceholderSkip" name="test_terminal_home_mode_bridges_to_env" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTildeExpansion" name="test_terminal_cwd_tilde_expanded" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTildeExpansion" name="test_top_level_cwd_tilde_expanded" time="0.003" /><testcase classname="tests.gateway.test_config_cwd_bridge.TestTildeExpansion" name="test_tilde_with_nested_precedence" time="0.003" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_base_adapter_defaults_to_not_owning_access_policy" time="0.003" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_adapters_declare_the_flag[gateway.platforms.wecom-WeComAdapter]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_adapters_declare_the_flag[gateway.platforms.weixin-WeixinAdapter]" time="0.003" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_adapters_declare_the_flag[gateway.platforms.yuanbao-YuanbaoAdapter]" time="0.003" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_adapters_declare_the_flag[gateway.platforms.qqbot.adapter-QQAdapter]" time="0.007" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_adapters_declare_the_flag[gateway.platforms.whatsapp-WhatsAppAdapter]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_allowlist_authorized_without_env_allowlist[Platform.WECOM]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_allowlist_authorized_without_env_allowlist[Platform.WEIXIN]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_allowlist_authorized_without_env_allowlist[Platform.YUANBAO]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_allowlist_authorized_without_env_allowlist[Platform.QQBOT]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_allowlist_authorized_without_env_allowlist[Platform.WHATSAPP]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_open_dm_not_authorized_without_allowlist[Platform.WECOM]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_open_dm_not_authorized_without_allowlist[Platform.WEIXIN]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_open_dm_not_authorized_without_allowlist[Platform.YUANBAO]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_open_dm_not_authorized_without_allowlist[Platform.QQBOT]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_open_dm_not_authorized_without_allowlist[Platform.WHATSAPP]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_default_open_dm_is_fail_closed[Platform.WECOM]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_default_open_dm_is_fail_closed[Platform.WEIXIN]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_default_open_dm_is_fail_closed[Platform.YUANBAO]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_default_open_dm_is_fail_closed[Platform.QQBOT]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_default_open_dm_is_fail_closed[Platform.WHATSAPP]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_allowlist_authorized_for_group_chat[Platform.WECOM]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_allowlist_authorized_for_group_chat[Platform.WEIXIN]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_allowlist_authorized_for_group_chat[Platform.YUANBAO]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_allowlist_authorized_for_group_chat[Platform.QQBOT]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_allowlist_authorized_for_group_chat[Platform.WHATSAPP]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_open_group_not_authorized_without_allowlist[Platform.WECOM]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_open_group_not_authorized_without_allowlist[Platform.WEIXIN]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_open_group_not_authorized_without_allowlist[Platform.YUANBAO]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_open_group_not_authorized_without_allowlist[Platform.QQBOT]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_own_policy_open_group_not_authorized_without_allowlist[Platform.WHATSAPP]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_wecom_open_group_with_per_group_sender_allowlist_is_authorized" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_wecom_open_group_with_wildcard_sender_allowlist_is_authorized" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_non_owning_platform_still_default_denies" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_env_allowlist_still_takes_precedence_for_own_policy_platform" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_unknown_adapter_does_not_crash_trust_check" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_pairing_dm_policy_not_blanket_authorized[Platform.WECOM]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_pairing_dm_policy_not_blanket_authorized[Platform.WEIXIN]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_pairing_dm_policy_authorizes_paired_user" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_pairing_carveout_reads_adapter_when_env_set" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_pairing_dm_policy_group_chat_still_trusted" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_unauthorized_dm_behavior_follows_config_dm_policy[allowlist-ignore]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_unauthorized_dm_behavior_follows_config_dm_policy[disabled-ignore]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_unauthorized_dm_behavior_follows_config_dm_policy[pairing-pair]" time="0.004" /><testcase classname="tests.gateway.test_config_driven_access_policy" name="test_unauthorized_dm_behavior_open_policy_keeps_default" time="0.004" /><testcase classname="tests.gateway.test_config_env_bridge_authority" name="test_config_max_turns_wins_over_stale_env" time="0.128" /><testcase classname="tests.gateway.test_config_env_bridge_authority" name="test_config_gateway_timeout_wins_over_stale_env" time="0.127" /><testcase classname="tests.gateway.test_config_env_bridge_authority" name="test_config_display_busy_input_mode_wins_over_stale_env" time="0.126" /><testcase classname="tests.gateway.test_config_env_bridge_authority" name="test_config_display_busy_text_mode_wins_over_stale_env" time="0.127" /><testcase classname="tests.gateway.test_config_env_bridge_authority" name="test_config_timezone_wins_over_stale_env" time="0.130" /><testcase classname="tests.gateway.test_config_env_bridge_authority" name="test_env_value_survives_when_config_omits_key" time="0.130" /><testcase classname="tests.gateway.test_cron_fire_webhook" name="test_valid_token_accepts_and_fires" time="0.010" /><testcase classname="tests.gateway.test_cron_fire_webhook" name="test_invalid_token_401_and_no_fire" time="0.059" /><testcase classname="tests.gateway.test_cron_fire_webhook" name="test_missing_token_401" time="0.010" /><testcase classname="tests.gateway.test_cron_fire_webhook" name="test_missing_job_id_400" time="0.007" /><testcase classname="tests.gateway.test_cron_fire_webhook" name="test_fire_does_not_require_api_server_key" time="0.006" /><testcase classname="tests.gateway.test_debug_command.TestHandleDebugCommand" name="test_debug_sweeps_expired_pastes_before_upload" time="0.007" /><testcase classname="tests.gateway.test_debug_command.TestHandleDebugCommand" name="test_debug_survives_sweep_failure" time="0.006" /><testcase classname="tests.gateway.test_delivery.TestParseTargetPlatformChat" name="test_explicit_telegram_chat" time="0.005" /><testcase classname="tests.gateway.test_delivery.TestParseTargetPlatformChat" name="test_platform_only_no_chat_id" time="0.003" /><testcase classname="tests.gateway.test_delivery.TestParseTargetPlatformChat" name="test_local_target" time="0.003" /><testcase classname="tests.gateway.test_delivery.TestParseTargetPlatformChat" name="test_origin_with_source" time="0.003" /><testcase classname="tests.gateway.test_delivery.TestParseTargetPlatformChat" name="test_origin_without_source" time="0.003" /><testcase classname="tests.gateway.test_delivery.TestParseTargetPlatformChat" name="test_unknown_platform" time="0.003" /><testcase classname="tests.gateway.test_delivery.TestTargetToStringRoundtrip" name="test_origin_roundtrip" time="0.003" /><testcase classname="tests.gateway.test_delivery.TestTargetToStringRoundtrip" name="test_local_roundtrip" time="0.003" /><testcase classname="tests.gateway.test_delivery.TestTargetToStringRoundtrip" name="test_platform_only_roundtrip" time="0.003" /><testcase classname="tests.gateway.test_delivery.TestTargetToStringRoundtrip" name="test_explicit_chat_roundtrip" time="0.003" /><testcase classname="tests.gateway.test_delivery.TestCaseSensitiveChatIdParsing" name="test_slack_uppercase_chat_id_preserved" time="0.003" /><testcase classname="tests.gateway.test_delivery.TestCaseSensitiveChatIdParsing" name="test_slack_chat_id_with_thread_preserved" time="0.004" /><testcase classname="tests.gateway.test_delivery.TestCaseSensitiveChatIdParsing" name="test_matrix_room_id_preserved" time="0.004" /><testcase classname="tests.gateway.test_delivery.TestCaseSensitiveChatIdParsing" name="test_mixed_case_chat_id_roundtrip" time="0.003" /><testcase classname="tests.gateway.test_delivery.TestPlatformNameCaseInsensitivity" name="test_uppercase_platform_name" time="0.003" /><testcase classname="tests.gateway.test_delivery.TestPlatformNameCaseInsensitivity" name="test_mixed_case_platform_name" time="0.003" /><testcase classname="tests.gateway.test_delivery" name="test_explicit_telegram_private_thread_requires_reply_anchor" time="0.004" /><testcase classname="tests.gateway.test_delivery" name="test_named_telegram_private_topic_is_created_before_delivery" time="0.004" /><testcase classname="tests.gateway.test_delivery" name="test_named_telegram_private_topic_refreshes_stale_thread_id" time="0.004" /><testcase classname="tests.gateway.test_delivery" name="test_explicit_telegram_private_thread_uses_reply_fallback_with_anchor" time="0.004" /><testcase classname="tests.gateway.test_delivery" name="test_explicit_telegram_direct_messages_topic_metadata_is_respected" time="0.004" /><testcase classname="tests.gateway.test_delivery" name="test_explicit_telegram_group_thread_does_not_mark_dm_fallback" time="0.004" /><testcase classname="tests.gateway.test_delivery" name="test_platform_send_failure_raises_for_delivery_result" time="0.004" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[*(silent)*]" time="0.004" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[*Silence.*]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[\U0001f507]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[.]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[\u2026]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[...]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[(silent)]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[_silent_]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[silent]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[ *(silent)* ]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[`silent`]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[~silent~]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[Silence]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[no response]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_positive[No Reply.]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_negative[Silence is golden \u2014 here is the plan...]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_negative[Silent install completed]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_negative[The deployment ran silently in the background]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_negative[ok]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_negative[\U0001f44d]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_negative[Here is the result:\n\n- item one\n- item two]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_negative[I have nothing to add, but here is why: the build is green.]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_negative[silently]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_negative[no responses were collected from the survey]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_negative[silent xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_negative[]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_negative[   ]" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_is_silence_narration_none_safe" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_length_guard_rejects_long_strings" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_silence_narration_dropped_pre_send" time="0.004" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_real_message_is_delivered" time="0.004" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_config_opt_out_lets_silence_through" time="0.004" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_env_override_disables_filter" time="0.004" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_env_override_enables_filter_over_config" time="0.004" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_local_delivery_not_filtered" time="0.004" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_config_flag_defaults_true" time="0.004" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_config_from_dict_parses_flag" time="0.003" /><testcase classname="tests.gateway.test_delivery_silence_filter" name="test_config_to_dict_roundtrip" time="0.003" /><testcase classname="tests.gateway.test_destructive_slash_confirm" name="test_gate_off_runs_execute_immediately" time="0.004" /><testcase classname="tests.gateway.test_destructive_slash_confirm" name="test_gate_on_text_fallback_returns_prompt_without_executing" time="0.004" /><testcase classname="tests.gateway.test_destructive_slash_confirm" name="test_gate_on_pending_confirm_registered" time="0.004" /><testcase classname="tests.gateway.test_destructive_slash_confirm" name="test_resolve_once_runs_execute_and_returns_result" time="0.005" /><testcase classname="tests.gateway.test_destructive_slash_confirm" name="test_resolve_cancel_does_not_run_execute" time="0.004" /><testcase classname="tests.gateway.test_destructive_slash_confirm" name="test_resolve_always_persists_opt_out_and_runs_execute" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_bootstrap_is_dormant_and_does_not_read_activation" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_pre_activation_delivery_fails_without_rows_or_provider" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_wrong_user_and_stale_generation_are_rejected_before_loader" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_restart_generation_cannot_activate_again" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_authenticated_activation_is_one_use_and_reaches_provider" time="0.007" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_spec_less_authority_is_rejected" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_public_generic_delivery_is_rejected_without_lifecycle" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_test_host_constructor_is_private_and_token_sealed" time="0.003" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_production_binding_rejects_untrusted_adapter_before_activation[none]" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_production_binding_rejects_untrusted_adapter_before_activation[simple_namespace]" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_production_binding_rejects_untrusted_adapter_before_activation[exact_adapter_fake_bot]" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_production_binding_rejects_untrusted_adapter_before_activation[subclass]" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_production_bootstrap_rejects_sealed_test_adapter" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_private_test_adapter_and_bootstrap_require_exact_token_and_type" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_diagnostic_controller_and_host_constructors_require_factory_tokens" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_transport_constructor_requires_factory_token_before_activation" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_untrusted_activate_argument_has_zero_routes_reservations_and_provider" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_activation_derives_customer_and_operator_routes_from_registered_runtime" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_activation_rejects_caller_supplied_routes_before_rows_or_provider" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_bootstrap_control_must_match_registered_owner_before_activation[8--100-59]" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_bootstrap_control_must_match_registered_owner_before_activation[7--101-59]" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_bootstrap_control_must_match_registered_owner_before_activation[7--100-60]" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_active_host_rejects_post_activation_route_injection" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_durable_detach_revokes_cached_routes_before_ingress" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_sealed_activation_delivery_records_exact_terminal_destination_and_body" time="0.007" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_malformed_or_missing_message_id_is_unknown_and_never_resends[missing]" time="0.008" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_malformed_or_missing_message_id_is_unknown_and_never_resends[none]" time="0.008" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_malformed_or_missing_message_id_is_unknown_and_never_resends[boolean]" time="0.008" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_malformed_or_missing_message_id_is_unknown_and_never_resends[blank]" time="0.008" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_timeout_persists_one_unknown_terminal_and_reraises" time="0.007" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_cancellation_persists_one_unknown_terminal_and_reraises" time="0.007" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_close_first_admission_race_has_zero_reservation_and_provider_calls[close]" time="0.006" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_close_first_admission_race_has_zero_reservation_and_provider_calls[expire]" time="0.006" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_close_first_admission_race_has_zero_reservation_and_provider_calls[stop]" time="0.006" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_provider_first_admission_race_terminalizes_before_detach[close]" time="0.007" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_provider_first_admission_race_terminalizes_before_detach[expire]" time="0.007" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_provider_first_admission_race_terminalizes_before_detach[stop]" time="0.007" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_detach_fence_failure_revokes_local_routes_and_provider[close]" time="0.006" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_detach_fence_failure_revokes_local_routes_and_provider[expire]" time="0.006" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_detach_fence_failure_revokes_local_routes_and_provider[stop]" time="0.006" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_transport_mutation_before_provider_is_terminal_unknown_and_provider_zero[adapter]" time="0.007" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_transport_mutation_before_provider_is_terminal_unknown_and_provider_zero[bot]" time="0.007" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_transport_mutation_before_provider_is_terminal_unknown_and_provider_zero[object]" time="0.006" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_transport_mutation_before_provider_is_terminal_unknown_and_provider_zero[destination]" time="0.007" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_transport_mutation_before_provider_is_terminal_unknown_and_provider_zero[binding]" time="0.007" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_unknown_duplicate_mapping_is_exact_in_process_and_after_restart" time="0.008" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_audit_pending_duplicate_mapping_and_reconcile_are_exact_after_restart" time="0.008" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_sent_audited_duplicate_mapping_is_exact_in_process_and_after_restart" time="0.009" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_activation_record_replacement_after_activation_has_zero_provider_and_rows" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_activation_pin_body_destination_mutation_after_activation_has_zero_provider_and_rows[pin]" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_activation_pin_body_destination_mutation_after_activation_has_zero_provider_and_rows[body]" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_activation_pin_body_destination_mutation_after_activation_has_zero_provider_and_rows[destination]" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_role_route_rejects_every_wrong_identity_component[user_id]" time="0.003" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_role_route_rejects_every_wrong_identity_component[chat_id]" time="0.003" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_role_route_rejects_every_wrong_identity_component[topic_id]" time="0.003" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_role_route_rejects_every_wrong_identity_component[generation]" time="0.003" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_wrong_user_message_and_callback_ingress_have_zero_downstream[message]" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_wrong_user_message_and_callback_ingress_have_zero_downstream[callback]" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_diagnostic_process_fence_blocks_lazy_generic_coordinator" time="0.004" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_detached_diagnostic_spaces_never_fall_through_to_generic_ingress[message]" time="0.005" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_detached_diagnostic_spaces_never_fall_through_to_generic_ingress[callback]" time="0.006" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_activated_coordinator_constructor_is_sealed_before_inputs" time="0.003" /><testcase classname="tests.gateway.test_diagnostic_isolation" name="test_candidate_provenance_requires_the_activated_child_instance" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestDingTalkRequirements" name="test_returns_false_when_sdk_missing" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestDingTalkRequirements" name="test_returns_false_when_env_vars_missing" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestDingTalkRequirements" name="test_returns_true_when_all_available" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestDingTalkAdapterInit" name="test_reads_config_from_extra" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestDingTalkAdapterInit" name="test_falls_back_to_env_vars" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestExtractText" name="test_text_as_dict_legacy" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestExtractText" name="test_text_as_textcontent_object" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestExtractText" name="test_text_content_attr_with_empty_string" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestExtractText" name="test_rich_text_content_new_shape" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestExtractText" name="test_rich_text_legacy_shape" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestExtractText" name="test_empty_message" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestDeduplication" name="test_first_message_not_duplicate" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestDeduplication" name="test_second_same_message_is_duplicate" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestDeduplication" name="test_different_messages_not_duplicate" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestDeduplication" name="test_cache_cleanup_on_overflow" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestSend" name="test_send_posts_to_webhook" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestSend" name="test_send_fails_without_webhook" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestSend" name="test_send_uses_cached_webhook" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestSend" name="test_send_handles_http_error" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestSend" name="test_send_image_renders_markdown_image" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestSend" name="test_send_image_file_returns_explicit_unsupported_error" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestSend" name="test_send_document_returns_explicit_unsupported_error" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestConnect" name="test_disconnect_closes_session_websocket" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestConnect" name="test_connect_fails_without_sdk" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestConnect" name="test_connect_fails_without_credentials" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestConnect" name="test_disconnect_cleans_up" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestConnect" name="test_disconnect_finalizes_open_streaming_cards" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestWebhookDomainAllowlist" name="test_api_domain_accepted" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestWebhookDomainAllowlist" name="test_oapi_domain_accepted" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestWebhookDomainAllowlist" name="test_http_rejected" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestWebhookDomainAllowlist" name="test_suffix_attack_rejected" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestWebhookDomainAllowlist" name="test_unsanctioned_subdomain_rejected" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestHandlerProcessIsAsync" name="test_process_is_coroutine_function" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestExtractMedia" name="test_voice_rich_text_item_classified_as_voice" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestExtractMedia" name="test_audio_rich_text_item_stays_audio" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestAllowedUsersGate" name="test_empty_allowlist_allows_everyone" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestAllowedUsersGate" name="test_wildcard_allowlist_allows_everyone" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestAllowedUsersGate" name="test_matches_sender_id_case_insensitive" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestAllowedUsersGate" name="test_matches_staff_id" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestAllowedUsersGate" name="test_rejects_unknown_user" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestAllowedUsersGate" name="test_env_var_csv_populates_allowlist" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestMentionPatterns" name="test_empty_patterns_list" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestMentionPatterns" name="test_pattern_matches_text" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestMentionPatterns" name="test_pattern_is_case_insensitive" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestMentionPatterns" name="test_invalid_regex_is_skipped_not_raised" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestMentionPatterns" name="test_env_var_json_populates_patterns" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestMentionPatterns" name="test_env_var_newline_fallback_when_not_json" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestShouldProcessMessage" name="test_dm_always_accepted" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestShouldProcessMessage" name="test_group_rejected_when_require_mention_and_no_trigger" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestShouldProcessMessage" name="test_group_accepted_when_require_mention_disabled" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestShouldProcessMessage" name="test_group_accepted_when_bot_is_mentioned" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestShouldProcessMessage" name="test_group_accepted_when_text_matches_wake_word" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestShouldProcessMessage" name="test_group_accepted_when_chat_in_free_response_list" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestIncomingHandlerProcess" name="test_process_extracts_session_webhook" time="0.054" /><testcase classname="tests.gateway.test_dingtalk.TestIncomingHandlerProcess" name="test_process_fallback_session_webhook_when_from_dict_misses_it" time="0.055" /><testcase classname="tests.gateway.test_dingtalk.TestIncomingHandlerProcess" name="test_process_returns_ack_immediately" time="0.057" /><testcase classname="tests.gateway.test_dingtalk.TestExtractTextMentions" name="test_preserves_at_mentions_in_text" time="0.006" /><testcase classname="tests.gateway.test_dingtalk.TestExtractTextMentions" name="test_dingtalk_in_platform_enum" time="0.003" /><testcase classname="tests.gateway.test_dingtalk.TestMessageContextIsolation" name="test_contexts_keyed_by_chat_id" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestCardLifecycle" name="test_final_reply_finalizes_card" time="0.005" /><testcase classname="tests.gateway.test_dingtalk.TestCardLifecycle" name="test_intermediate_send_stays_streaming" time="0.005" /><testcase classname="tests.gateway.test_dingtalk.TestCardLifecycle" name="test_done_fires_only_when_reply_to_is_set" time="0.005" /><testcase classname="tests.gateway.test_dingtalk.TestCardLifecycle" name="test_edit_message_finalize_fires_done" time="0.005" /><testcase classname="tests.gateway.test_dingtalk.TestCardLifecycle" name="test_edit_message_finalize_false_tracks_sibling" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestCardLifecycle" name="test_next_send_auto_closes_sibling_streaming_cards" time="0.005" /><testcase classname="tests.gateway.test_dingtalk.TestCardLifecycle" name="test_edit_message_requires_message_id" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestCardLifecycle" name="test_fire_done_reaction_is_idempotent" time="0.004" /><testcase classname="tests.gateway.test_dingtalk.TestDingTalkAdapterAICards" name="test_send_uses_ai_card_if_configured" time="0.005" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordAllowedChannelsWildcard" name="test_empty_allowlist_allows_all" time="0.004" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordAllowedChannelsWildcard" name="test_exact_match_allowed" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordAllowedChannelsWildcard" name="test_non_matching_channel_blocked" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordAllowedChannelsWildcard" name="test_whitespace_only_entry_ignored" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordAllowedChannelsWildcard" name="test_wildcard_allows_any_channel" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordAllowedChannelsWildcard" name="test_wildcard_in_list_allows_any_channel" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordIgnoredChannelsWildcard" name="test_empty_ignored_list_silences_nothing" time="0.004" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordIgnoredChannelsWildcard" name="test_exact_match_is_ignored" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordIgnoredChannelsWildcard" name="test_non_match_not_ignored" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordIgnoredChannelsWildcard" name="test_wildcard_silences_every_channel" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordFreeResponseChannelsWildcard" name="test_empty_list_no_free_response" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordFreeResponseChannelsWildcard" name="test_exact_match_is_free_response" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordFreeResponseChannelsWildcard" name="test_non_match_not_free_response" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordFreeResponseChannelsWildcard" name="test_wildcard_in_list_applies_everywhere" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_channels.TestDiscordFreeResponseChannelsWildcard" name="test_wildcard_makes_every_channel_free_response" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_safe_defaults_block_everyone_and_roles" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_env_var_opts_back_into_everyone" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_env_var_can_disable_users" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[true-True]" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[True-True]" time="0.004" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[TRUE-True]" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[1-True]" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[yes-True]" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[YES-True]" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[on-True]" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[false-False]" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[False-False]" time="0.004" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[0-False]" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[no-False]" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[off-False]" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[-False]" time="0.003" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[garbage-False]" time="0.004" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_everyone_boolean_parsing[ true -True]" time="0.004" /><testcase classname="tests.gateway.test_discord_allowed_mentions" name="test_all_four_knobs_together" time="0.003" /><testcase classname="tests.gateway.test_discord_attachment_download.TestReadAttachmentBytes" name="test_returns_bytes_on_successful_read" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestReadAttachmentBytes" name="test_returns_none_when_read_missing" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestReadAttachmentBytes" name="test_returns_none_when_read_raises" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestCacheDiscordImage" name="test_prefers_att_read_over_url" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestCacheDiscordImage" name="test_falls_back_to_url_when_no_read" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestCacheDiscordImage" name="test_falls_back_to_url_when_bytes_validator_rejects" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestCacheDiscordAudio" name="test_prefers_att_read_over_url" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestCacheDiscordAudio" name="test_falls_back_to_url_when_no_read" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestCacheDiscordDocument" name="test_prefers_att_read_returns_bytes_directly" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestCacheDiscordDocument" name="test_fallback_blocked_by_ssrf_guard" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestCacheDiscordDocument" name="test_fallback_aiohttp_when_safe_url" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestHandleMessageUsesAuthenticatedRead" name="test_image_downloads_via_att_read_not_url" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestHandleMessageUsesAuthenticatedRead" name="test_native_voice_note_is_classified_as_voice" time="0.004" /><testcase classname="tests.gateway.test_discord_attachment_download.TestHandleMessageUsesAuthenticatedRead" name="test_plain_audio_attachment_stays_audio" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_auth_bypass" name="test_discord_bot_authorized_when_allow_bots_mentions" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_auth_bypass" name="test_discord_bot_authorized_when_allow_bots_all" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_auth_bypass" name="test_discord_bot_NOT_authorized_when_allow_bots_none" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_auth_bypass" name="test_discord_bot_NOT_authorized_when_allow_bots_unset" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_auth_bypass" name="test_discord_human_still_checked_against_allowlist_when_bot_policy_set" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_auth_bypass" name="test_bot_bypass_does_not_leak_to_other_platforms" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_auth_bypass" name="test_discord_role_config_does_not_bypass_gateway_allowlist" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_auth_bypass" name="test_discord_user_allowlist_still_authorizes_when_role_is_also_configured" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_auth_bypass" name="test_discord_role_config_does_not_leak_to_other_platforms" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_filter.TestDiscordBotFilter" name="test_allow_bots_all_accepts_bots" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_filter.TestDiscordBotFilter" name="test_allow_bots_mentions_accepts_with_mention" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_filter.TestDiscordBotFilter" name="test_allow_bots_mentions_rejects_without_mention" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_filter.TestDiscordBotFilter" name="test_allow_bots_none_rejects_bots" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_filter.TestDiscordBotFilter" name="test_case_insensitive" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_filter.TestDiscordBotFilter" name="test_default_is_none" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_filter.TestDiscordBotFilter" name="test_human_messages_always_accepted" time="0.004" /><testcase classname="tests.gateway.test_discord_bot_filter.TestDiscordBotFilter" name="test_own_messages_always_ignored" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_ignored_channel_blocks_message" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_ignored_channel_blocks_even_with_mention" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_non_ignored_channel_processes_normally" time="0.005" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_ignored_channels_csv_parsing" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_ignored_channels_empty_string_ignores_nothing" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_ignored_channel_thread_parent_match" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_dms_unaffected_by_ignored_channels" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_no_thread_channel_skips_auto_thread" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_normal_channel_still_auto_threads" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_no_thread_channels_csv_parsing" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_no_thread_with_auto_thread_disabled_is_noop" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_config_bridges_ignored_channels" time="0.049" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_config_bridges_no_thread_channels" time="0.050" /><testcase classname="tests.gateway.test_discord_channel_controls" name="test_config_env_var_takes_precedence" time="0.050" /><testcase classname="tests.gateway.test_discord_channel_prompts.TestResolveChannelPrompts" name="test_no_prompt_returns_none" time="0.006" /><testcase classname="tests.gateway.test_discord_channel_prompts.TestResolveChannelPrompts" name="test_match_by_channel_id" time="0.005" /><testcase classname="tests.gateway.test_discord_channel_prompts.TestResolveChannelPrompts" name="test_numeric_yaml_keys_normalized_at_config_load" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_prompts.TestResolveChannelPrompts" name="test_match_by_parent_id" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_prompts.TestResolveChannelPrompts" name="test_exact_channel_overrides_parent" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_prompts.TestResolveChannelPrompts" name="test_build_message_event_sets_channel_prompt" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_prompts.TestResolveChannelPrompts" name="test_dispatch_thread_session_inherits_parent_channel_prompt" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_prompts.TestResolveChannelPrompts" name="test_blank_prompts_are_ignored" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_prompts" name="test_retry_preserves_channel_prompt" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_prompts" name="test_run_agent_appends_channel_prompt_to_ephemeral_system_prompt" time="0.006" /><testcase classname="tests.gateway.test_discord_channel_skills.TestResolveChannelSkills" name="test_no_bindings_returns_none" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_skills.TestResolveChannelSkills" name="test_match_by_channel_id" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_skills.TestResolveChannelSkills" name="test_match_by_parent_id" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_skills.TestResolveChannelSkills" name="test_no_match_returns_none" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_skills.TestResolveChannelSkills" name="test_single_skill_string" time="0.004" /><testcase classname="tests.gateway.test_discord_channel_skills.TestResolveChannelSkills" name="test_dedup_preserves_order" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestClarifyChoiceViewConstruction" name="test_renders_n_choice_buttons_plus_other" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestClarifyChoiceViewConstruction" name="test_caps_at_24_choices_plus_other" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestClarifyChoiceViewConstruction" name="test_truncates_long_choice_label" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestClarifyChoiceViewConstruction" name="test_truncates_long_choice_label_breaks_on_word_boundary" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestClarifyChoiceViewConstruction" name="test_truncates_long_no_space_choice_on_soft_boundary" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestClarifyChoiceResolve" name="test_choice_resolves_with_canonical_choice_text" time="0.005" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestClarifyChoiceResolve" name="test_choice_falls_back_to_label_text_when_entry_missing" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestClarifyChoiceResolve" name="test_already_resolved_sends_ephemeral_reply" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestClarifyChoiceResolve" name="test_unauthorized_user_rejected" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestClarifyOtherButton" name="test_other_flips_entry_to_awaiting_text" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestClarifyOtherButton" name="test_other_unauthorized_user_rejected" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestDiscordSendClarify" name="test_multi_choice_attaches_view" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestDiscordSendClarify" name="test_open_ended_omits_view" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestDiscordSendClarify" name="test_routes_to_thread_when_metadata_thread_id_set" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestDiscordSendClarify" name="test_not_connected_returns_failure" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestDiscordSendClarify" name="test_filters_empty_and_whitespace_choices" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestDiscordSendClarify" name="test_unwraps_dict_choices_to_description" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestDiscordSendClarify" name="test_unwrap_prefers_description_over_name_in_multi_key_dict" time="0.004" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestDiscordSendClarify" name="test_unwrap_prefers_label_over_description" time="0.005" /><testcase classname="tests.gateway.test_discord_clarify_buttons.TestDiscordSendClarify" name="test_unwrap_does_not_pick_value_or_name_alone" time="0.004" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_empty_allowlists_rejects_by_default" time="0.004" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_explicit_allow_all_passes[DISCORD_ALLOW_ALL_USERS-true]" time="0.004" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_explicit_allow_all_passes[GATEWAY_ALLOW_ALL_USERS-yes]" time="0.004" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_user_in_user_allowlist_passes" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_user_not_in_user_allowlist_rejected" time="0.004" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_user_in_global_allowlist_passes" time="0.004" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_global_allowlist_without_match_rejects" time="0.004" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_wildcard_user_allowlist_passes" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_role_only_user_with_matching_role_passes" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_accepts_role_allowlist_sequences" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_role_only_user_without_matching_role_rejected" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_user_or_role_user_match" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_user_or_role_role_match" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_user_or_role_neither_match" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_role_policy_with_no_roles_attr_rejects" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_component_check_missing_user_with_allowlist_rejects" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_exec_approval_view_accepts_role_allowlist" time="0.004" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_exec_approval_view_role_default_is_empty_set" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_slash_confirm_view_accepts_role_allowlist" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_update_prompt_view_accepts_role_allowlist" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_model_picker_view_accepts_role_allowlist" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_clarify_choice_view_accepts_role_allowlist" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_views_empty_allowlists_reject_by_default[&lt;lambda&gt;0]" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_views_empty_allowlists_reject_by_default[&lt;lambda&gt;1]" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_views_empty_allowlists_reject_by_default[&lt;lambda&gt;2]" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_views_empty_allowlists_reject_by_default[&lt;lambda&gt;3]" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_model_picker_view_empty_allowlists_reject_by_default" time="0.003" /><testcase classname="tests.gateway.test_discord_component_auth" name="test_view_empty_allowlists_allow_with_explicit_allow_all" time="0.003" /><testcase classname="tests.gateway.test_discord_connect" name="test_connect_only_requests_members_intent_when_needed[769524422783664158-False]" time="0.054" /><testcase classname="tests.gateway.test_discord_connect" name="test_connect_only_requests_members_intent_when_needed[abhey-gupta-True]" time="0.056" /><testcase classname="tests.gateway.test_discord_connect" name="test_connect_only_requests_members_intent_when_needed[769524422783664158,abhey-gupta-True]" time="0.056" /><testcase classname="tests.gateway.test_discord_connect" name="test_reconnect_closes_previous_client_to_prevent_zombie_websocket" time="0.061" /><testcase classname="tests.gateway.test_discord_connect" name="test_connect_releases_token_lock_on_timeout" time="0.056" /><testcase classname="tests.gateway.test_discord_connect" name="test_connect_timeout_cancels_bot_task" time="0.056" /><testcase classname="tests.gateway.test_discord_connect" name="test_disconnect_cancels_running_bot_task" time="0.006" /><testcase classname="tests.gateway.test_discord_connect" name="test_connect_does_not_wait_for_slash_sync" time="0.056" /><testcase classname="tests.gateway.test_discord_connect" name="test_connect_respects_slash_commands_opt_out" time="0.007" /><testcase classname="tests.gateway.test_discord_connect" name="test_safe_sync_slash_commands_only_mutates_diffs" time="0.005" /><testcase classname="tests.gateway.test_discord_connect" name="test_safe_sync_slash_commands_recreates_metadata_only_diffs" time="0.004" /><testcase classname="tests.gateway.test_discord_connect" name="test_post_connect_initialization_skips_sync_when_policy_off" time="0.004" /><testcase classname="tests.gateway.test_discord_connect" name="test_post_connect_initialization_skips_same_fingerprint_after_success" time="0.005" /><testcase classname="tests.gateway.test_discord_connect" name="test_post_connect_initialization_respects_discord_retry_after" time="0.005" /><testcase classname="tests.gateway.test_discord_connect" name="test_post_connect_initialization_reraises_non_rate_limit_exceptions" time="0.005" /><testcase classname="tests.gateway.test_discord_connect" name="test_safe_sync_slash_commands_paces_mutation_writes" time="0.004" /><testcase classname="tests.gateway.test_discord_connect" name="test_safe_sync_reads_permission_attrs_from_existing_command" time="0.004" /><testcase classname="tests.gateway.test_discord_connect" name="test_safe_sync_detects_contexts_drift" time="0.004" /><testcase classname="tests.gateway.test_discord_document_handling.TestIncomingDocumentHandling" name="test_pdf_document_cached" time="0.053" /><testcase classname="tests.gateway.test_discord_document_handling.TestIncomingDocumentHandling" name="test_txt_content_injected" time="0.040" /><testcase classname="tests.gateway.test_discord_document_handling.TestIncomingDocumentHandling" name="test_md_content_injected" time="0.047" /><testcase classname="tests.gateway.test_discord_document_handling.TestIncomingDocumentHandling" name="test_log_content_injected" time="0.041" /><testcase classname="tests.gateway.test_discord_document_handling.TestIncomingDocumentHandling" name="test_oversized_document_skipped" time="0.007" /><testcase classname="tests.gateway.test_discord_document_handling.TestIncomingDocumentHandling" name="test_mid_sized_zip_under_32mb_is_cached" time="0.041" /><testcase classname="tests.gateway.test_discord_document_handling.TestIncomingDocumentHandling" name="test_zip_document_cached" time="0.046" /><testcase classname="tests.gateway.test_discord_document_handling.TestIncomingDocumentHandling" name="test_download_error_handled" time="0.044" /><testcase classname="tests.gateway.test_discord_document_handling.TestIncomingDocumentHandling" name="test_large_txt_cached_not_injected" time="0.042" /><testcase classname="tests.gateway.test_discord_document_handling.TestIncomingDocumentHandling" name="test_multiple_text_files_both_injected" time="0.085" /><testcase classname="tests.gateway.test_discord_document_handling.TestIncomingDocumentHandling" name="test_image_attachment_unaffected" time="0.007" /><testcase classname="tests.gateway.test_discord_document_handling.TestAllowAnyAttachment" name="test_unknown_type_skipped_by_default" time="0.007" /><testcase classname="tests.gateway.test_discord_document_handling.TestAllowAnyAttachment" name="test_unknown_type_cached_when_flag_on" time="0.041" /><testcase classname="tests.gateway.test_discord_document_handling.TestAllowAnyAttachment" name="test_unknown_type_no_content_type_becomes_octet_stream" time="0.044" /><testcase classname="tests.gateway.test_discord_document_handling.TestAllowAnyAttachment" name="test_max_attachment_bytes_caps_uploads" time="0.007" /><testcase classname="tests.gateway.test_discord_document_handling.TestAllowAnyAttachment" name="test_max_attachment_bytes_zero_means_unlimited" time="0.043" /><testcase classname="tests.gateway.test_discord_document_handling.TestAllowAnyAttachment" name="test_allowlisted_doc_unchanged_when_flag_on" time="0.043" /><testcase classname="tests.gateway.test_discord_document_handling.TestAllowAnyAttachment" name="test_helper_reads_env_fallback" time="0.006" /><testcase classname="tests.gateway.test_discord_document_handling.TestAllowAnyAttachment" name="test_helper_config_overrides_env" time="0.004" /><testcase classname="tests.gateway.test_discord_document_handling.TestAllowAnyAttachment" name="test_max_bytes_helper_invalid_value_falls_back" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_defaults_to_require_mention" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_free_response_in_server_channels" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_free_response_in_threads" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_forum_threads_are_handled_as_threads" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_can_still_require_mentions_when_enabled" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_free_response_channel_overrides_mention_requirement" time="0.005" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_free_response_channel_can_come_from_config_extra" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_free_response_channels_bare_int" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_free_response_channels_int_list" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_forum_parent_in_free_response_list_allows_forum_thread" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_accepts_and_strips_bot_mentions_when_required" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_dms_ignore_mention_requirement" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_auto_thread_enabled_by_default" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_reply_message_skips_auto_thread" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_auto_thread_can_be_disabled" time="0.005" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_bot_thread_skips_mention_requirement" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_unknown_thread_still_requires_mention" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_auto_thread_tracks_participation" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_thread_participation_tracked_on_dispatch" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_voice_linked_channel_skips_mention_requirement_and_auto_thread" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_free_response_channel_skips_auto_thread" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_voice_linked_parent_thread_still_requires_mention" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_thread_default_keeps_responding_after_participation" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_thread_require_mention_gates_followups" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_thread_require_mention_still_responds_when_mentioned" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_thread_require_mention_via_config_extra" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_fetch_channel_context_stops_at_self_message_and_reverses_to_chronological_order" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_fetch_channel_context_skips_self_improvement_boundary_message" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_fetch_channel_context_hydrates_around_reply_target" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_fetch_channel_context_reply_target_in_primary_window_not_duplicated" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_nonconversational_fallback_requires_self_improvement_emoji" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_fetch_channel_context_skips_other_bots_when_allow_bots_none" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_fetch_channel_context_uses_cache_to_narrow_window" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_fetch_channel_context_cache_uses_latest_window_when_after_set" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_fetch_channel_context_ignores_stale_cache" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_send_does_not_cache_nonconversational_status_as_history_boundary" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_shared_channel_backfill_prepends_context" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_per_user_channel_backfills_too" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_participated_thread_backfills_without_mention" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_dm_does_not_backfill" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_auto_thread_skips_backfill" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_reply_in_free_channel_triggers_backfill" time="0.004" /><testcase classname="tests.gateway.test_discord_free_response" name="test_discord_non_reply_free_channel_skips_backfill" time="0.004" /><testcase classname="tests.gateway.test_discord_imports.TestDiscordImportSafety" name="test_module_imports_even_when_discord_dependency_is_missing" time="0.005" /><testcase classname="tests.gateway.test_discord_lazy_install_views.TestDefineDiscordViewClasses" name="test_registers_all_five_view_classes" time="0.004" /><testcase classname="tests.gateway.test_discord_lazy_install_views.TestDefineDiscordViewClasses" name="test_check_discord_requirements_calls_define_on_lazy_install" time="0.004" /><testcase classname="tests.gateway.test_discord_media_metadata" name="test_discord_media_methods_accept_metadata_kwarg" time="0.004" /><testcase classname="tests.gateway.test_discord_model_picker" name="test_model_picker_clears_controls_before_running_switch_callback" time="0.005" /><testcase classname="tests.gateway.test_discord_model_picker" name="test_expensive_model_requires_confirmation" time="0.005" /><testcase classname="tests.gateway.test_discord_opus.TestOpusFindLibrary" name="test_uses_find_library_first" time="0.005" /><testcase classname="tests.gateway.test_discord_opus.TestOpusFindLibrary" name="test_homebrew_fallback_is_conditional" time="0.005" /><testcase classname="tests.gateway.test_discord_opus.TestOpusFindLibrary" name="test_windows_bundled_discord_opus_dll_is_discovered" time="0.004" /><testcase classname="tests.gateway.test_discord_opus.TestOpusFindLibrary" name="test_opus_decode_error_logged" time="0.004" /><testcase classname="tests.gateway.test_discord_race_polish" name="test_concurrent_joins_do_not_double_connect" time="0.055" /><testcase classname="tests.gateway.test_discord_reactions" name="test_process_message_background_adds_and_swaps_reactions" time="0.007" /><testcase classname="tests.gateway.test_discord_reactions" name="test_interaction_backed_events_do_not_attempt_reactions" time="0.004" /><testcase classname="tests.gateway.test_discord_reactions" name="test_reaction_helper_failures_do_not_break_message_flow" time="0.005" /><testcase classname="tests.gateway.test_discord_reactions" name="test_reactions_disabled_via_env" time="0.004" /><testcase classname="tests.gateway.test_discord_reactions" name="test_reactions_disabled_via_env_zero" time="0.004" /><testcase classname="tests.gateway.test_discord_reactions" name="test_reactions_enabled_by_default" time="0.004" /><testcase classname="tests.gateway.test_discord_reactions" name="test_on_processing_complete_cancelled_removes_eyes_without_terminal_reaction" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestReplyToModeConfig" name="test_default_mode_is_first" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestReplyToModeConfig" name="test_off_mode" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestReplyToModeConfig" name="test_first_mode" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestReplyToModeConfig" name="test_all_mode" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestReplyToModeConfig" name="test_invalid_mode_stored_as_is" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestReplyToModeConfig" name="test_none_mode_defaults_to_first" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestReplyToModeConfig" name="test_empty_string_mode_defaults_to_first" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestSendWithReplyToMode" name="test_off_mode_no_reply_reference" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestSendWithReplyToMode" name="test_first_mode_only_first_chunk_references" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestSendWithReplyToMode" name="test_all_mode_all_chunks_reference" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestSendWithReplyToMode" name="test_no_reply_to_param_no_reference" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestSendWithReplyToMode" name="test_single_chunk_respects_first_mode" time="0.005" /><testcase classname="tests.gateway.test_discord_reply_mode.TestSendWithReplyToMode" name="test_single_chunk_off_mode" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestSendWithReplyToMode" name="test_invalid_mode_falls_back_to_first_behavior" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestConfigSerialization" name="test_to_dict_includes_reply_to_mode" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestConfigSerialization" name="test_from_dict_loads_reply_to_mode" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestConfigSerialization" name="test_from_dict_defaults_to_first" time="0.003" /><testcase classname="tests.gateway.test_discord_reply_mode.TestEnvVarOverride" name="test_env_var_sets_off_mode" time="0.050" /><testcase classname="tests.gateway.test_discord_reply_mode.TestEnvVarOverride" name="test_env_var_sets_all_mode" time="0.052" /><testcase classname="tests.gateway.test_discord_reply_mode.TestEnvVarOverride" name="test_env_var_case_insensitive" time="0.052" /><testcase classname="tests.gateway.test_discord_reply_mode.TestEnvVarOverride" name="test_env_var_invalid_value_ignored" time="0.052" /><testcase classname="tests.gateway.test_discord_reply_mode.TestEnvVarOverride" name="test_env_var_empty_value_ignored" time="0.051" /><testcase classname="tests.gateway.test_discord_reply_mode.TestEnvVarOverride" name="test_env_var_creates_platform_config_if_missing" time="0.052" /><testcase classname="tests.gateway.test_discord_reply_mode.TestReplyToText" name="test_no_reference_both_none" time="0.006" /><testcase classname="tests.gateway.test_discord_reply_mode.TestReplyToText" name="test_reference_without_resolved" time="0.005" /><testcase classname="tests.gateway.test_discord_reply_mode.TestReplyToText" name="test_reference_with_resolved_content" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestReplyToText" name="test_reference_with_empty_resolved_content" time="0.005" /><testcase classname="tests.gateway.test_discord_reply_mode.TestReplyToText" name="test_reference_with_deleted_message" time="0.004" /><testcase classname="tests.gateway.test_discord_reply_mode.TestYamlConfigLoading" name="test_top_level_reply_to_mode_off" time="0.049" /><testcase classname="tests.gateway.test_discord_reply_mode.TestYamlConfigLoading" name="test_top_level_reply_to_mode_all" time="0.050" /><testcase classname="tests.gateway.test_discord_reply_mode.TestYamlConfigLoading" name="test_extra_reply_to_mode_off" time="0.050" /><testcase classname="tests.gateway.test_discord_reply_mode.TestYamlConfigLoading" name="test_env_var_takes_precedence_over_yaml" time="0.050" /><testcase classname="tests.gateway.test_discord_reply_mode.TestYamlConfigLoading" name="test_top_level_takes_precedence_over_extra" time="0.054" /><testcase classname="tests.gateway.test_discord_roles_dm_scope" name="test_dm_rejects_role_held_in_other_guild" time="0.006" /><testcase classname="tests.gateway.test_discord_roles_dm_scope" name="test_dm_role_auth_requires_explicit_guild_optin" time="0.004" /><testcase classname="tests.gateway.test_discord_roles_dm_scope" name="test_dm_role_auth_optin_rejects_when_not_member" time="0.004" /><testcase classname="tests.gateway.test_discord_roles_dm_scope" name="test_guild_message_role_check_scoped_to_originating_guild" time="0.004" /><testcase classname="tests.gateway.test_discord_roles_dm_scope" name="test_guild_message_role_check_allows_when_role_in_same_guild" time="0.004" /><testcase classname="tests.gateway.test_discord_roles_dm_scope" name="test_guild_message_rejects_author_roles_from_different_guild" time="0.004" /><testcase classname="tests.gateway.test_discord_roles_dm_scope" name="test_user_id_allowlist_works_in_dm" time="0.004" /><testcase classname="tests.gateway.test_discord_roles_dm_scope" name="test_user_id_allowlist_works_in_guild" time="0.004" /><testcase classname="tests.gateway.test_discord_roles_dm_scope" name="test_empty_allowlists_allow_everyone" time="0.004" /><testcase classname="tests.gateway.test_discord_roles_dm_scope" name="test_slash_authorization_rejects_cross_guild_role_dm" time="0.004" /><testcase classname="tests.gateway.test_discord_roles_dm_scope" name="test_slash_authorization_rejects_cross_guild_role_in_guild" time="0.004" /><testcase classname="tests.gateway.test_discord_roles_dm_scope" name="test_slash_authorization_allows_in_scope_guild_role" time="0.004" /><testcase classname="tests.gateway.test_discord_send" name="test_send_retries_without_reference_when_reply_target_is_system_message" time="0.004" /><testcase classname="tests.gateway.test_discord_send" name="test_send_retries_without_reference_when_reply_target_is_deleted" time="0.004" /><testcase classname="tests.gateway.test_discord_send" name="test_send_does_not_retry_on_unrelated_errors" time="0.004" /><testcase classname="tests.gateway.test_discord_send.TestIsForumParent" name="test_none_returns_false" time="0.004" /><testcase classname="tests.gateway.test_discord_send.TestIsForumParent" name="test_forum_channel_class_instance" time="0.004" /><testcase classname="tests.gateway.test_discord_send.TestIsForumParent" name="test_type_value_15" time="0.004" /><testcase classname="tests.gateway.test_discord_send.TestIsForumParent" name="test_regular_channel_returns_false" time="0.004" /><testcase classname="tests.gateway.test_discord_send.TestIsForumParent" name="test_thread_returns_false" time="0.004" /><testcase classname="tests.gateway.test_discord_send" name="test_send_to_forum_creates_thread_post" time="0.004" /><testcase classname="tests.gateway.test_discord_send" name="test_send_to_forum_sends_remaining_chunks" time="0.004" /><testcase classname="tests.gateway.test_discord_send" name="test_send_to_forum_create_thread_failure" time="0.004" /><testcase classname="tests.gateway.test_discord_send" name="test_send_to_forum_follow_up_chunk_failures_collected_as_warnings" time="0.005" /><testcase classname="tests.gateway.test_discord_send" name="test_forum_post_file_creates_thread_with_attachment" time="0.004" /><testcase classname="tests.gateway.test_discord_send" name="test_forum_post_file_uses_filename_when_no_content" time="0.004" /><testcase classname="tests.gateway.test_discord_send" name="test_forum_post_file_creation_failure" time="0.004" /><testcase classname="tests.gateway.test_discord_send" name="test_typing_task_removed_after_api_error" time="0.105" /><testcase classname="tests.gateway.test_discord_send" name="test_typing_restartable_after_error" time="0.108" /><testcase classname="tests.gateway.test_discord_send" name="test_typing_stop_cleans_up" time="0.006" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_no_allowlist_allows_everyone" time="0.005" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_no_allowlist_dm_also_allowed" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_allowed_user_passes" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_disallowed_user_rejected_with_ephemeral" time="0.005" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_role_member_passes" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_role_non_member_rejected" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_channel_not_in_allowlist_rejected" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_channel_in_allowlist_passes" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_channel_allowlist_wildcard_passes" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_channel_allowlist_does_not_apply_to_dms" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_ignored_channel_rejected" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_ignored_channel_wildcard_blocks_all" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_unauthorized_attempt_notifies_telegram" time="0.005" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_notify_silently_no_ops_without_runner" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_notify_falls_back_to_slack_if_no_telegram" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_visibility_hide_off_by_default_is_noop" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_visibility_hide_helper_zeroes_perms" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_visibility_hide_tolerates_unsetable_command" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_missing_channel_id_rejected_when_channel_policy_configured" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_missing_channel_id_allowed_when_no_channel_policy" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_missing_user_rejected_when_allowlist_configured" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_missing_user_allowed_when_no_allowlist_configured" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_thread_parent_in_allowlist_passes" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_thread_parent_in_ignorelist_rejects" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_ignored_beats_allowed" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_notify_falls_back_to_slack_on_telegram_soft_fail" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_notify_returns_on_telegram_truthy_success" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_skill_autocomplete_returns_empty_for_unauthorized" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_skill_autocomplete_returns_choices_for_authorized" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_skill_handler_rejects_before_dispatch_for_unauthorized" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_skill_handler_known_and_unknown_produce_same_rejection" time="0.186" /><testcase classname="tests.gateway.test_discord_slash_auth" name="test_skill_handler_dispatches_for_authorized" time="0.007" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_registers_native_thread_slash_command" time="0.057" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_registers_native_restart_slash_command" time="0.055" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_registers_missing_gateway_commands" time="0.056" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_registered_command_dispatches_correctly" time="0.056" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_registered_command_with_args" time="0.058" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_registers_plugin_commands_for_discord" time="0.010" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_registered_plugin_command_without_args_hint" time="0.008" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_plugin_command_name_conflict_skipped" time="0.008" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_slash_command_registration_stays_under_discord_limit" time="0.008" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_handle_thread_create_slash_reports_success" time="0.005" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_handle_thread_create_slash_dispatches_session_when_message_provided" time="0.005" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_handle_thread_create_slash_no_dispatch_without_message" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_handle_thread_create_slash_falls_back_to_seed_message" time="0.005" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_handle_thread_create_slash_reports_failure" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_dispatch_thread_session_builds_thread_event" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_build_slash_event_preserves_thread_context" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_build_slash_event_uses_group_context_for_channels" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_create_thread_uses_message_content_as_name" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_create_thread_strips_mention_syntax_from_name" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_create_thread_falls_back_to_hermes_when_only_mentions" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_create_thread_truncates_long_names" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_create_thread_falls_back_to_seed_message" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_create_thread_returns_none_when_direct_and_fallback_fail" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_thread_creates_thread_and_redirects" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_thread_enabled_by_default_slash_commands" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_thread_can_be_disabled" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_auto_thread_skips_threads_and_dms" time="0.004" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_discord_auto_thread_config_bridge" time="0.049" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_register_skill_command_is_flat_not_nested" time="0.052" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_register_skill_command_empty_skills_no_command" time="0.053" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_register_skill_command_callback_dispatches_by_name" time="0.052" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_register_skill_command_handles_unknown_skill_gracefully" time="0.052" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_register_skill_command_payload_fits_discord_8kb_limit" time="0.051" /><testcase classname="tests.gateway.test_discord_slash_commands" name="test_register_skill_command_autocomplete_filters_by_name_and_description" time="0.052" /><testcase classname="tests.gateway.test_discord_system_messages.TestDiscordSystemMessageFilter" name="test_default_messages_accepted" time="0.006" /><testcase classname="tests.gateway.test_discord_system_messages.TestDiscordSystemMessageFilter" name="test_new_member_ignored" time="0.005" /><testcase classname="tests.gateway.test_discord_system_messages.TestDiscordSystemMessageFilter" name="test_own_default_messages_still_ignored" time="0.005" /><testcase classname="tests.gateway.test_discord_system_messages.TestDiscordSystemMessageFilter" name="test_pins_add_ignored" time="0.005" /><testcase classname="tests.gateway.test_discord_system_messages.TestDiscordSystemMessageFilter" name="test_premium_guild_subscription_ignored" time="0.004" /><testcase classname="tests.gateway.test_discord_system_messages.TestDiscordSystemMessageFilter" name="test_recipient_add_ignored" time="0.004" /><testcase classname="tests.gateway.test_discord_system_messages.TestDiscordSystemMessageFilter" name="test_reply_messages_accepted" time="0.004" /><testcase classname="tests.gateway.test_discord_system_messages.TestDiscordSystemMessageFilter" name="test_thread_rename_ignored" time="0.004" /><testcase classname="tests.gateway.test_discord_thread_persistence.TestDiscordThreadPersistence" name="test_starts_empty_when_no_state_file" time="0.004" /><testcase classname="tests.gateway.test_discord_thread_persistence.TestDiscordThreadPersistence" name="test_track_thread_persists_to_disk" time="0.004" /><testcase classname="tests.gateway.test_discord_thread_persistence.TestDiscordThreadPersistence" name="test_threads_survive_restart" time="0.005" /><testcase classname="tests.gateway.test_discord_thread_persistence.TestDiscordThreadPersistence" name="test_duplicate_track_does_not_double_save" time="0.004" /><testcase classname="tests.gateway.test_discord_thread_persistence.TestDiscordThreadPersistence" name="test_caps_at_max_tracked_threads" time="0.005" /><testcase classname="tests.gateway.test_discord_thread_persistence.TestDiscordThreadPersistence" name="test_capacity_keeps_newest_thread_when_existing_state_is_full" time="0.004" /><testcase classname="tests.gateway.test_discord_thread_persistence.TestDiscordThreadPersistence" name="test_corrupted_state_file_falls_back_to_empty" time="0.004" /><testcase classname="tests.gateway.test_discord_thread_persistence.TestDiscordThreadPersistence" name="test_missing_hermes_home_does_not_crash" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestResolveDisplaySetting" name="test_explicit_platform_override_wins" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestResolveDisplaySetting" name="test_global_setting_when_no_platform_override" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestResolveDisplaySetting" name="test_platform_default_when_no_user_config" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestResolveDisplaySetting" name="test_global_default_for_unknown_platform" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestResolveDisplaySetting" name="test_fallback_parameter_used_last" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestResolveDisplaySetting" name="test_platform_override_only_affects_that_platform" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestBackwardCompat" name="test_legacy_overrides_read" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestBackwardCompat" name="test_new_platforms_takes_precedence_over_legacy" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestBackwardCompat" name="test_legacy_overrides_only_for_tool_progress" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestYAMLNormalisation" name="test_tool_progress_false_normalised_to_off" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestYAMLNormalisation" name="test_tool_progress_true_normalised_to_all" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestYAMLNormalisation" name="test_show_reasoning_string_true" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestYAMLNormalisation" name="test_tool_preview_length_string" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestYAMLNormalisation" name="test_platform_override_false_tool_progress" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestPlatformDefaults" name="test_high_tier_platforms" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestPlatformDefaults" name="test_medium_tier_platforms" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestPlatformDefaults" name="test_slack_defaults_tool_progress_off" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestPlatformDefaults" name="test_low_tier_platforms" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestPlatformDefaults" name="test_whatsapp_cloud_locked_to_low_tier_until_edit_message_lands" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestPlatformDefaults" name="test_minimal_tier_platforms" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestPlatformDefaults" name="test_low_tier_streaming_defaults_to_false" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestPlatformDefaults" name="test_high_tier_streaming_defaults_to_none" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestPlatformDefaults" name="test_telegram_mobile_chatter_defaults" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestPlatformDefaults" name="test_telegram_mobile_chatter_can_opt_in" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestConfigMigration" name="test_migration_creates_platforms_entries" time="0.049" /><testcase classname="tests.gateway.test_display_config.TestConfigMigration" name="test_migration_preserves_existing_platforms_entries" time="0.045" /><testcase classname="tests.gateway.test_display_config.TestStreamingPerPlatform" name="test_none_means_follow_global" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestStreamingPerPlatform" name="test_global_display_streaming_is_cli_only" time="0.005" /><testcase classname="tests.gateway.test_display_config.TestStreamingPerPlatform" name="test_explicit_false_disables" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestStreamingPerPlatform" name="test_explicit_true_enables" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestCleanupProgress" name="test_default_off_for_all_platforms" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestCleanupProgress" name="test_global_true_applies_to_all_platforms" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestCleanupProgress" name="test_per_platform_override_wins" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestCleanupProgress" name="test_yaml_off_string_normalises_to_false" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestCleanupProgress" name="test_yaml_true_string_normalises_to_true" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestToolProgressGrouping" name="test_default_is_accumulate" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestToolProgressGrouping" name="test_global_separate" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestToolProgressGrouping" name="test_platform_override_wins" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestToolProgressGrouping" name="test_invalid_value_falls_back_to_accumulate" time="0.004" /><testcase classname="tests.gateway.test_display_config.TestToolProgressGrouping" name="test_case_insensitive" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_setup_dm_topics_loads_persisted_thread_ids" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_setup_dm_topics_creates_when_no_thread_id" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_setup_dm_topics_mixed_persisted_and_new" time="0.005" /><testcase classname="tests.gateway.test_dm_topics" name="test_setup_dm_topics_skips_empty_config" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_setup_dm_topics_no_config" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_create_dm_topic_handles_duplicate_error" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_create_dm_topic_handles_generic_error" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_create_dm_topic_returns_none_without_bot" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_ensure_dm_topic_creates_on_demand_and_persists" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_ensure_dm_topic_force_create_replaces_persisted_thread_id" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_persist_dm_topic_thread_id_writes_config" time="0.005" /><testcase classname="tests.gateway.test_dm_topics" name="test_persist_dm_topic_thread_id_skips_if_already_set" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_persist_dm_topic_thread_id_replaces_existing_when_requested" time="0.005" /><testcase classname="tests.gateway.test_dm_topics" name="test_persist_dm_topic_thread_id_preserves_config_on_write_failure" time="0.007" /><testcase classname="tests.gateway.test_dm_topics" name="test_get_dm_topic_info_finds_cached_topic" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_get_dm_topic_info_returns_none_for_unknown" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_get_dm_topic_info_returns_none_without_config" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_get_dm_topic_info_returns_none_for_none_thread" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_get_dm_topic_info_hot_reloads_from_config" time="0.005" /><testcase classname="tests.gateway.test_dm_topics" name="test_cache_dm_topic_from_message" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_cache_dm_topic_from_message_no_overwrite" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_build_message_event_sets_auto_skill" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_build_message_event_no_auto_skill_without_binding" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_build_message_event_no_auto_skill_without_thread" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_build_message_event_filters_non_topic_dm_thread_id" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_build_message_event_preserves_true_dm_topic_thread_id" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_group_topic_skill_binding" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_group_topic_skill_binding_second_topic" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_group_topic_no_skill_binding" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_group_topic_unmapped_thread_id" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_group_topic_unmapped_chat_id" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_group_topic_no_config" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_group_topic_chat_id_int_string_coercion" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_build_message_event_dm_from_user_none_falls_back_to_chat_id" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_build_message_event_group_from_user_none_stays_none" time="0.004" /><testcase classname="tests.gateway.test_dm_topics" name="test_build_message_event_dm_from_user_present_uses_user" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestGetDocumentCacheDir" name="test_creates_directory" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestGetDocumentCacheDir" name="test_returns_existing_directory" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheDocumentFromBytes" name="test_basic_caching" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheDocumentFromBytes" name="test_filename_preserved_in_path" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheDocumentFromBytes" name="test_empty_filename_uses_fallback" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheDocumentFromBytes" name="test_unique_filenames" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheDocumentFromBytes" name="test_path_traversal_blocked" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheDocumentFromBytes" name="test_null_bytes_stripped" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheDocumentFromBytes" name="test_dot_dot_filename_handled" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheDocumentFromBytes" name="test_none_filename_uses_fallback" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCleanupDocumentCache" name="test_removes_old_files" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCleanupDocumentCache" name="test_keeps_recent_files" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCleanupDocumentCache" name="test_returns_removed_count" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCleanupDocumentCache" name="test_empty_cache_dir" time="0.006" /><testcase classname="tests.gateway.test_document_cache.TestSupportedDocumentTypes" name="test_all_extensions_have_mime_types" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestSupportedDocumentTypes" name="test_expected_extensions_present[.pdf]" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestSupportedDocumentTypes" name="test_expected_extensions_present[.md]" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestSupportedDocumentTypes" name="test_expected_extensions_present[.txt]" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestSupportedDocumentTypes" name="test_expected_extensions_present[.zip]" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestSupportedDocumentTypes" name="test_expected_extensions_present[.doc]" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestSupportedDocumentTypes" name="test_expected_extensions_present[.docx]" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestSupportedDocumentTypes" name="test_expected_extensions_present[.xls]" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestSupportedDocumentTypes" name="test_expected_extensions_present[.xlsx]" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestSupportedDocumentTypes" name="test_expected_extensions_present[.ppt]" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestSupportedDocumentTypes" name="test_expected_extensions_present[.pptx]" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheMediaBytes" name="test_pdf_routes_to_document" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheMediaBytes" name="test_png_routes_to_image" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheMediaBytes" name="test_native_photo_without_filename_uses_default_kind" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheMediaBytes" name="test_mp4_routes_to_video" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheMediaBytes" name="test_mime_only_resolves_extension" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheMediaBytes" name="test_unsupported_document_returns_none" time="0.004" /><testcase classname="tests.gateway.test_document_cache.TestCacheMediaBytes" name="test_invalid_image_returns_none" time="0.004" /><testcase classname="tests.gateway.test_document_context_note.TestTextDocumentNote" name="test_text_note_mentions_included_content_and_path[text/plain]" time="0.004" /><testcase classname="tests.gateway.test_document_context_note.TestTextDocumentNote" name="test_text_note_mentions_included_content_and_path[text/markdown]" time="0.004" /><testcase classname="tests.gateway.test_document_context_note.TestTextDocumentNote" name="test_text_note_mentions_included_content_and_path[text/csv]" time="0.004" /><testcase classname="tests.gateway.test_document_context_note.TestBinaryDocumentNote" name="test_binary_note_guides_extraction[application/pdf]" time="0.004" /><testcase classname="tests.gateway.test_document_context_note.TestBinaryDocumentNote" name="test_binary_note_guides_extraction[application/vnd.openxmlformats-officedocument.wordprocessingml.document]" time="0.004" /><testcase classname="tests.gateway.test_document_context_note.TestBinaryDocumentNote" name="test_binary_note_guides_extraction[application/vnd.openxmlformats-officedocument.spreadsheetml.sheet]" time="0.004" /><testcase classname="tests.gateway.test_document_context_note.TestBinaryDocumentNote" name="test_binary_note_guides_extraction[application/octet-stream]" time="0.004" /><testcase classname="tests.gateway.test_document_context_note.TestBinaryDocumentNote" name="test_binary_note_distinct_from_text_note" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_activation_cutover" name="test_cli_activation_cutover_commits_active_and_is_idempotent" time="0.011" /><testcase classname="tests.gateway.test_dualcoach_activation_cutover" name="test_cli_reconciles_crash_after_customer_activation" time="0.009" /><testcase classname="tests.gateway.test_dualcoach_activation_cutover" name="test_cli_cutover_preflight_failure_does_not_activate[wrong_identity]" time="0.007" /><testcase classname="tests.gateway.test_dualcoach_activation_cutover" name="test_cli_cutover_preflight_failure_does_not_activate[stale_generation]" time="0.006" /><testcase classname="tests.gateway.test_dualcoach_activation_cutover" name="test_cli_cutover_preflight_failure_does_not_activate[missing_session]" time="0.006" /><testcase classname="tests.gateway.test_dualcoach_activation_cutover" name="test_cli_cutover_rejects_a_second_active_customer_lifecycle" time="0.007" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_provider_auth_uses_the_production_draft_model_default" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_configured_supported_provider_uses_production_resolution_and_models_probe" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_provider_auth_fails_closed_for_missing_and_unroutable_configuration[config0-config_missing-20]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_provider_auth_fails_closed_for_missing_and_unroutable_configuration[config1-credential_missing-22]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_provider_auth_fails_closed_for_missing_and_unroutable_configuration[config2-provider_unresolved-23]" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_provider_auth_fails_closed_for_missing_and_unroutable_configuration[config3-provider_unsupported-24]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_provider_auth_validates_real_custom_provider_secret_references_before_resolution[not/a/secret/reference-True-secret_reference_malformed-25]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_provider_auth_validates_real_custom_provider_secret_references_before_resolution[DUALCOACH_TEST_MISSING_SECRET-False-secret_source_unavailable-26]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_provider_auth_rejects_provider_authentication_response_without_error_prose" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_provider_auth_timeout_and_unknown_probe_responses_fail_closed[outcome0-probe_timeout-28]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_provider_auth_timeout_and_unknown_probe_responses_fail_closed[outcome1-probe_unknown-29]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_config_hash_excludes_secrets_and_cli_output_is_redacted" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_rejects_known_retired_model_before_any_request" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_real_sdk_fake_transport_proves_one_shot_success" time="0.236" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_real_sdk_fake_transport_classifies_retired_model_without_prose" time="0.008" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_requires_explicit_flag_and_closes_without_a_request" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_is_one_shot_nonpersistent_and_redacted" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_maps_failures_and_never_retries[outcome0-auth_rejected-27]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_maps_failures_and_never_retries[outcome1-probe_rate_limited-31]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_maps_failures_and_never_retries[outcome2-probe_timeout-28]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_maps_failures_and_never_retries[outcome3-probe_cancelled-33]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_maps_failures_and_never_retries[outcome4-active_probe_unknown-34]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_rejects_incomplete_or_malformed_response[response0]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_rejects_incomplete_or_malformed_response[response1]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_rejects_incomplete_or_malformed_response[response2]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_requires_local_auth_before_resolution[local_status0-credential_missing-22]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_requires_local_auth_before_resolution[local_status1-probe_rate_limited-31]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_requires_local_auth_before_resolution[local_status2-active_probe_unknown-34]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_rebinds_the_production_adapter_to_zero_sdk_retries" time="0.012" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_refuses_to_run_when_sdk_one_shot_cannot_be_attested" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_cli_flag_is_required_to_enable_the_codex_active_probe" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_fails_closed_on_profile_drift_after_one_request" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_admin_provider_auth" name="test_codex_active_probe_fails_closed_when_client_close_fails" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_arm_binds_all_prerequisites_without_service_or_telegram_actions" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_arm_fails_closed_when_a_prerequisite_is_not_satisfied[False-True-provider_auth_not_ready]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_arm_fails_closed_when_a_prerequisite_is_not_satisfied[True-False-service_not_inactive]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_controller_accepts_immutable_historical_workspace_inputs" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_controller_rejects_read_only_provider_receipts" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_arm_requires_the_v2_nonpersistent_active_probe_evidence" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_arm_rejects_repository_status_drift" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_arm_requires_a_durable_owner_review_to_recover" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_launch_refuses_to_start_without_a_durable_owner_review_to_recover" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_launch_refuses_to_start_a_runtime_not_bound_to_the_candidate" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_launch_requires_explicit_human_service_start_and_never_controls_telegram" time="0.005" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestBaseInterruptSuppression" name="test_stale_response_suppressed_when_interrupted" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestBaseInterruptSuppression" name="test_response_not_suppressed_without_interrupt" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestBaseInterruptSuppression" name="test_response_not_suppressed_with_interrupt_but_no_pending" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestOnlyFinalStreamDeliverySuppressesFinalSend" name="test_partial_stream_output_does_not_set_already_sent" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestOnlyFinalStreamDeliverySuppressesFinalSend" name="test_already_sent_not_set_when_nothing_sent" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestOnlyFinalStreamDeliverySuppressesFinalSend" name="test_already_sent_set_on_final_response_sent" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestOnlyFinalStreamDeliverySuppressesFinalSend" name="test_already_sent_not_set_on_failed_response" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestEmptyResponseNotSuppressed" name="test_empty_sentinel_not_suppressed_with_already_sent" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestEmptyResponseNotSuppressed" name="test_empty_string_not_suppressed_with_already_sent" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestEmptyResponseNotSuppressed" name="test_none_response_not_suppressed_with_already_sent" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestEmptyResponseNotSuppressed" name="test_real_response_still_suppressed_only_when_final_delivery_confirmed" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestEmptyResponseNotSuppressed" name="test_failed_empty_response_never_suppressed" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestQueuedMessageAlreadyStreamed" name="test_queued_path_only_skips_send_when_final_response_was_streamed" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestQueuedMessageAlreadyStreamed" name="test_queued_path_detects_confirmed_final_stream_delivery" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestQueuedMessageAlreadyStreamed" name="test_queued_path_detects_previewed_response_delivery" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestQueuedMessageAlreadyStreamed" name="test_queued_path_sends_when_not_streamed" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestQueuedMessageAlreadyStreamed" name="test_queued_path_with_no_stream_consumer" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestCancellationHandlerDeliveryConfirmation" name="test_partial_only_no_accumulated_stays_false" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestCancellationHandlerDeliveryConfirmation" name="test_best_effort_succeeds_sets_true" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestCancellationHandlerDeliveryConfirmation" name="test_best_effort_fails_stays_false" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestCancellationHandlerDeliveryConfirmation" name="test_preserves_existing_true" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestCancellationHandlerDeliveryConfirmation" name="test_old_behavior_would_have_promoted_partial" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestFinalContentDeliveredSuppression" name="test_content_delivered_but_final_edit_failed_suppresses" time="0.004" /><testcase classname="tests.gateway.test_duplicate_reply_suppression.TestFinalContentDeliveredSuppression" name="test_intermediate_text_only_does_not_suppress" time="0.004" /><testcase classname="tests.gateway.test_email.TestConfigEnvOverrides" name="test_email_config_loaded_from_env" time="0.050" /><testcase classname="tests.gateway.test_email.TestConfigEnvOverrides" name="test_email_home_channel_loaded" time="0.052" /><testcase classname="tests.gateway.test_email.TestConfigEnvOverrides" name="test_email_not_loaded_without_env" time="0.066" /><testcase classname="tests.gateway.test_email.TestCheckRequirements" name="test_requirements_empty_env" time="0.006" /><testcase classname="tests.gateway.test_email.TestCheckRequirements" name="test_requirements_met" time="0.006" /><testcase classname="tests.gateway.test_email.TestCheckRequirements" name="test_requirements_not_met" time="0.005" /><testcase classname="tests.gateway.test_email.TestHelperFunctions" name="test_decode_header_encoded" time="0.004" /><testcase classname="tests.gateway.test_email.TestHelperFunctions" name="test_decode_header_plain" time="0.004" /><testcase classname="tests.gateway.test_email.TestHelperFunctions" name="test_extract_email_address_bare" time="0.004" /><testcase classname="tests.gateway.test_email.TestHelperFunctions" name="test_extract_email_address_uppercase" time="0.004" /><testcase classname="tests.gateway.test_email.TestHelperFunctions" name="test_extract_email_address_with_name" time="0.004" /><testcase classname="tests.gateway.test_email.TestHelperFunctions" name="test_strip_html_basic" time="0.004" /><testcase classname="tests.gateway.test_email.TestHelperFunctions" name="test_strip_html_br_tags" time="0.004" /><testcase classname="tests.gateway.test_email.TestHelperFunctions" name="test_strip_html_entities" time="0.004" /><testcase classname="tests.gateway.test_email.TestExtractTextBody" name="test_empty_body" time="0.004" /><testcase classname="tests.gateway.test_email.TestExtractTextBody" name="test_html_body_fallback" time="0.004" /><testcase classname="tests.gateway.test_email.TestExtractTextBody" name="test_multipart_html_only" time="0.004" /><testcase classname="tests.gateway.test_email.TestExtractTextBody" name="test_multipart_prefers_plain" time="0.004" /><testcase classname="tests.gateway.test_email.TestExtractTextBody" name="test_plain_text_body" time="0.004" /><testcase classname="tests.gateway.test_email.TestExtractAttachments" name="test_document_attachment" time="0.004" /><testcase classname="tests.gateway.test_email.TestExtractAttachments" name="test_image_attachment" time="0.004" /><testcase classname="tests.gateway.test_email.TestExtractAttachments" name="test_no_attachments" time="0.004" /><testcase classname="tests.gateway.test_email.TestDispatchMessage" name="test_allowlisted_sender_proceeds" time="0.005" /><testcase classname="tests.gateway.test_email.TestDispatchMessage" name="test_document_attachment_sets_document_type" time="0.004" /><testcase classname="tests.gateway.test_email.TestDispatchMessage" name="test_empty_allowlist_allows_all" time="0.264" /><testcase classname="tests.gateway.test_email.TestDispatchMessage" name="test_empty_body_handled" time="0.007" /><testcase classname="tests.gateway.test_email.TestDispatchMessage" name="test_image_attachment_sets_photo_type" time="0.004" /><testcase classname="tests.gateway.test_email.TestDispatchMessage" name="test_mixed_image_and_document_prefers_document" time="0.004" /><testcase classname="tests.gateway.test_email.TestDispatchMessage" name="test_non_allowlisted_sender_dropped" time="0.005" /><testcase classname="tests.gateway.test_email.TestDispatchMessage" name="test_reply_subject_not_duplicated" time="0.004" /><testcase classname="tests.gateway.test_email.TestDispatchMessage" name="test_self_message_filtered" time="0.004" /><testcase classname="tests.gateway.test_email.TestDispatchMessage" name="test_source_built_correctly" time="0.004" /><testcase classname="tests.gateway.test_email.TestDispatchMessage" name="test_subject_included_in_text" time="0.004" /><testcase classname="tests.gateway.test_email.TestThreadContext" name="test_no_thread_context_uses_default_subject" time="0.012" /><testcase classname="tests.gateway.test_email.TestThreadContext" name="test_reply_does_not_double_re" time="0.013" /><testcase classname="tests.gateway.test_email.TestThreadContext" name="test_reply_uses_re_prefix" time="0.013" /><testcase classname="tests.gateway.test_email.TestThreadContext" name="test_thread_context_stored_after_dispatch" time="0.005" /><testcase classname="tests.gateway.test_email.TestSendMethods" name="test_get_chat_info" time="0.004" /><testcase classname="tests.gateway.test_email.TestSendMethods" name="test_send_calls_smtp" time="0.014" /><testcase classname="tests.gateway.test_email.TestSendMethods" name="test_send_document_with_attachment" time="0.013" /><testcase classname="tests.gateway.test_email.TestSendMethods" name="test_send_failure_returns_error" time="0.014" /><testcase classname="tests.gateway.test_email.TestSendMethods" name="test_send_image_includes_url" time="0.005" /><testcase classname="tests.gateway.test_email.TestSendMethods" name="test_send_typing_is_noop" time="0.004" /><testcase classname="tests.gateway.test_email.TestConnectDisconnect" name="test_connect_imap_failure" time="0.005" /><testcase classname="tests.gateway.test_email.TestConnectDisconnect" name="test_connect_smtp_failure" time="0.015" /><testcase classname="tests.gateway.test_email.TestConnectDisconnect" name="test_connect_success" time="0.014" /><testcase classname="tests.gateway.test_email.TestConnectDisconnect" name="test_disconnect_cancels_poll" time="0.007" /><testcase classname="tests.gateway.test_email.TestFetchNewMessages" name="test_fetch_extracts_sender_name" time="0.005" /><testcase classname="tests.gateway.test_email.TestFetchNewMessages" name="test_fetch_handles_imap_error" time="0.005" /><testcase classname="tests.gateway.test_email.TestFetchNewMessages" name="test_fetch_no_unseen_messages" time="0.006" /><testcase classname="tests.gateway.test_email.TestFetchNewMessages" name="test_fetch_skips_seen_uids" time="0.005" /><testcase classname="tests.gateway.test_email.TestPollLoop" name="test_check_inbox_dispatches_messages" time="0.006" /><testcase classname="tests.gateway.test_email.TestSendEmailStandalone" name="test_send_email_tool_failure" time="0.006" /><testcase classname="tests.gateway.test_email.TestSendEmailStandalone" name="test_send_email_tool_not_configured" time="0.004" /><testcase classname="tests.gateway.test_email.TestSendEmailStandalone" name="test_send_email_tool_success" time="0.013" /><testcase classname="tests.gateway.test_email.TestSmtpConnectionCleanup" name="test_smtp_close_called_when_quit_also_fails" time="0.014" /><testcase classname="tests.gateway.test_email.TestSmtpConnectionCleanup" name="test_smtp_quit_called_on_send_message_failure" time="0.014" /><testcase classname="tests.gateway.test_email.TestImapConnectionCleanup" name="test_imap_logout_called_on_early_return" time="0.006" /><testcase classname="tests.gateway.test_email.TestImapConnectionCleanup" name="test_imap_logout_called_on_uid_fetch_failure" time="0.005" /><testcase classname="tests.gateway.test_email.TestImapIdExtensionForNetEase" name="test_connect_sends_imap_id_after_login" time="0.014" /><testcase classname="tests.gateway.test_email.TestImapIdExtensionForNetEase" name="test_fetch_new_messages_sends_imap_id_after_login" time="0.006" /><testcase classname="tests.gateway.test_email.TestImapIdExtensionForNetEase" name="test_send_imap_id_swallows_errors_for_non_supporting_servers" time="0.004" /><testcase classname="tests.gateway.test_email.TestConnectSmtp" name="test_ipv4_connection_does_not_mutate_global_resolver" time="0.006" /><testcase classname="tests.gateway.test_email.TestConnectSmtp" name="test_ipv6_timeout_falls_back_to_ipv4" time="0.013" /><testcase classname="tests.gateway.test_email.TestConnectSmtp" name="test_port_465_ipv6_fallback" time="0.012" /><testcase classname="tests.gateway.test_email.TestConnectSmtp" name="test_port_465_uses_smtp_ssl" time="0.014" /><testcase classname="tests.gateway.test_email.TestConnectSmtp" name="test_port_587_uses_smtp_with_starttls" time="0.012" /><testcase classname="tests.gateway.test_email.TestConnectSmtp" name="test_tls_verification_error_does_not_retry_ipv4" time="0.012" /><testcase classname="tests.gateway.test_empty_model_recovery" name="test_normal_turn_caches_last_resolved_model" time="0.004" /><testcase classname="tests.gateway.test_empty_model_recovery" name="test_empty_model_recovers_session_last_good" time="0.004" /><testcase classname="tests.gateway.test_empty_model_recovery" name="test_empty_model_new_session_recovers_global_last_good" time="0.004" /><testcase classname="tests.gateway.test_empty_model_recovery" name="test_cold_start_empty_model_does_not_crash" time="0.004" /><testcase classname="tests.gateway.test_empty_model_recovery" name="test_bare_runner_without_cache_attr_does_not_crash" time="0.004" /><testcase classname="tests.gateway.test_empty_model_recovery" name="test_has_pending_fallback_empty_chain" time="0.004" /><testcase classname="tests.gateway.test_empty_model_recovery" name="test_has_pending_fallback_with_chain" time="0.004" /><testcase classname="tests.gateway.test_empty_model_recovery" name="test_has_pending_fallback_exhausted_chain" time="0.004" /><testcase classname="tests.gateway.test_empty_model_recovery" name="test_has_pending_fallback_missing_attrs" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_unwrap_plain_string_is_passthrough" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_unwrap_none_is_passthrough" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_unwrap_ephemeral_explicit_ttl_on_capable_adapter" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_unwrap_ephemeral_zeros_ttl_on_incapable_adapter" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_unwrap_ephemeral_default_ttl_from_config" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_unwrap_ephemeral_default_ttl_zero_disables" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_unwrap_ephemeral_handles_unreadable_config" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_schedule_ephemeral_delete_calls_delete_after_ttl" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_schedule_ephemeral_delete_swallows_errors" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_schedule_ephemeral_delete_outside_event_loop_is_noop" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_process_message_unwraps_ephemeral_before_send" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_process_message_ephemeral_reply_does_not_auto_upload_bare_paths" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_process_message_incapable_platform_does_not_schedule_delete" time="0.004" /><testcase classname="tests.gateway.test_ephemeral_reply" name="test_process_message_plain_string_behaves_unchanged" time="0.005" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_absolute_path_image" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_tilde_path_image" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_video_extensions" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_image_extensions" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_document_extensions" time="0.005" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_spreadsheet_and_data_extensions" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_presentation_extensions" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_audio_extensions" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_archive_extensions" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_html_extension" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_chart_pdf_path" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_case_insensitive_extension" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_multiple_paths" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_path_at_line_start" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_path_at_end_of_line" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_path_with_dots_in_directory" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestBasicDetection" name="test_path_with_hyphens" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestIsfileGuard" name="test_nonexistent_path_skipped" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestIsfileGuard" name="test_only_existing_paths_extracted" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestURLRejection" name="test_https_url_not_matched" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestURLRejection" name="test_http_url_not_matched" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestURLRejection" name="test_file_url_not_matched" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestCodeBlockExclusion" name="test_fenced_code_block_skipped" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestCodeBlockExclusion" name="test_inline_code_skipped" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestCodeBlockExclusion" name="test_path_outside_code_block_still_matched" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestCodeBlockExclusion" name="test_mixed_inline_code_and_bare_path" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestCodeBlockExclusion" name="test_multiline_fenced_block" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestDeduplication" name="test_duplicate_paths_deduplicated" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestDeduplication" name="test_tilde_and_expanded_same_file" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestTextCleanup" name="test_path_removed_from_text" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestTextCleanup" name="test_excessive_blank_lines_collapsed" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestTextCleanup" name="test_no_paths_text_unchanged" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestTextCleanup" name="test_tilde_form_cleaned_from_text" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestTextCleanup" name="test_only_path_in_text" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_empty_string" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_no_media_extensions" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_path_with_spaces_not_matched" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_windows_drive_letter_paths_matched[See C:\\Users\\test\\image.png here-C:\\Users\\test\\image.png]" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_windows_drive_letter_paths_matched[See C:/Users/test/image.png here-C:/Users/test/image.png]" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_windows_drive_letter_paths_matched[Video at D:/data/clip.mp4 ready-D:/data/clip.mp4]" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_windows_drive_letter_paths_matched[Path e:/audio/track.mp3 done-e:/audio/track.mp3]" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_relative_windows_path_not_matched" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_relative_path_not_matched" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_bare_filename_not_matched" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_path_followed_by_punctuation" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_path_in_parentheses" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_path_in_quotes" time="0.004" /><testcase classname="tests.gateway.test_extract_local_files.TestEdgeCases" name="test_deep_nested_path" time="0.004" /><testcase classname="tests.gateway.test_fallback_eviction.TestFallbackEvictionGating" name="test_failed_run_does_not_evict_cached_agent" time="0.004" /><testcase classname="tests.gateway.test_fallback_eviction.TestFallbackEvictionGating" name="test_successful_run_allows_eviction" time="0.004" /><testcase classname="tests.gateway.test_fallback_eviction.TestFallbackEvictionGating" name="test_none_result_treated_as_not_failed" time="0.004" /><testcase classname="tests.gateway.test_fallback_eviction.TestFallbackEvictionGating" name="test_missing_failed_key_treated_as_not_failed" time="0.004" /><testcase classname="tests.gateway.test_fast_command" name="test_turn_route_injects_priority_processing_without_changing_runtime" time="0.004" /><testcase classname="tests.gateway.test_fast_command" name="test_turn_route_skips_priority_processing_for_unsupported_models" time="0.004" /><testcase classname="tests.gateway.test_fast_command" name="test_handle_fast_command_persists_config" time="0.004" /><testcase classname="tests.gateway.test_fast_command" name="test_run_agent_passes_priority_processing_to_gateway_agent" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestConfigEnvOverrides" name="test_feishu_config_loaded_from_env" time="0.054" /><testcase classname="tests.gateway.test_feishu.TestConfigEnvOverrides" name="test_feishu_home_channel_loaded" time="0.051" /><testcase classname="tests.gateway.test_feishu.TestConfigEnvOverrides" name="test_feishu_in_connected_platforms" time="0.051" /><testcase classname="tests.gateway.test_feishu.TestFeishuMessageNormalization" name="test_normalize_interactive_card_preserves_title_body_and_actions" time="0.006" /><testcase classname="tests.gateway.test_feishu.TestFeishuMessageNormalization" name="test_normalize_merge_forward_preserves_summary_lines" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMessageNormalization" name="test_normalize_share_chat_exposes_summary_and_metadata" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuAdapterMessaging" name="test_connect_acquires_scoped_lock_and_disconnect_releases_it" time="0.009" /><testcase classname="tests.gateway.test_feishu.TestFeishuAdapterMessaging" name="test_connect_rejects_existing_app_lock" time="0.006" /><testcase classname="tests.gateway.test_feishu.TestFeishuAdapterMessaging" name="test_connect_retries_transient_startup_failure" time="0.007" /><testcase classname="tests.gateway.test_feishu.TestFeishuAdapterMessaging" name="test_connect_webhook_mode_starts_local_server" time="0.007" /><testcase classname="tests.gateway.test_feishu.TestFeishuAdapterMessaging" name="test_edit_message_falls_back_to_text_when_post_update_is_rejected" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestFeishuAdapterMessaging" name="test_edit_message_updates_existing_feishu_message" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuAdapterMessaging" name="test_get_chat_info_uses_real_feishu_chat_api" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterModule" name="test_load_settings_accepts_custom_ws_ping_values" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterModule" name="test_load_settings_accepts_custom_ws_reconnect_values" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterModule" name="test_load_settings_ignores_invalid_ws_ping_values" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterModule" name="test_load_settings_uses_sdk_defaults_for_invalid_ws_reconnect_values" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterModule" name="test_runtime_ws_overrides_reapply_after_sdk_configure" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_bot_origin_reactions_are_dropped_to_avoid_feedback_loops" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_build_event_handler_registers_reaction_and_card_processors" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_build_post_payload_extracts_title_and_links" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_build_post_payload_keeps_fence_like_code_lines_inside_code_block" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_build_post_payload_keeps_full_markdown_text" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_build_post_payload_preserves_trailing_spaces_in_code_block" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_build_post_payload_splits_multiple_fenced_code_blocks" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_build_post_payload_wraps_markdown_in_md_tag" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_dedup_state_persists_across_adapter_restart" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_default_group_policy_fallback_for_chats_without_explicit_rule" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_download_remote_document_reads_response_before_httpx_client_closes" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_audio_message_downloads_and_caches" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_file_message_downloads_and_caches" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_image_message_downloads_and_caches" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_interactive_message_as_text_summary" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_media_message_with_image_mime_becomes_photo" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_media_message_with_video_mime_becomes_video" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_merge_forward_message_as_text_summary" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_post_message_as_text" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_post_message_downloads_embedded_resources" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_post_message_uses_first_available_language_block" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_post_message_with_rich_elements_does_not_drop_content" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_share_chat_message_as_text_summary" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_text_file_injects_content" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_text_from_raw_content_uses_relation_message_fallbacks" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_extract_text_message_starting_with_slash_becomes_command" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_global_admins_bypass_all_group_rules" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_group_message_allowlist_and_mention_both_required" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_group_message_matches_bot_name_when_only_name_available" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_group_message_matches_bot_open_id_when_configured" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_group_message_requires_mentions_even_when_policy_open" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_group_message_with_other_user_mention_is_rejected_when_bot_identity_unknown" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_media_batch_merges_rapid_photo_messages" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_message_event_submits_to_adapter_loop" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_per_group_admin_only_policy_requires_admin" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_per_group_allowlist_policy_gates_by_sender" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_per_group_blacklist_policy_blocks_specific_users" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_per_group_disabled_policy_blocks_all" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_process_inbound_group_message_keeps_group_type_when_chat_lookup_falls_back" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_process_inbound_message_fetches_reply_to_text" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_process_inbound_message_uses_event_sender_identity_only" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_reaction_on_our_own_bot_message_is_routed" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_reaction_on_peer_bot_message_is_not_routed" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_animation_degrades_to_document_send" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_document_reply_uses_thread_flag" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_document_uploads_file_and_sends_file_message" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_document_with_caption_uses_single_post_message" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_does_not_retry_deterministic_api_failure" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_falls_back_to_text_when_post_payload_is_rejected" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_falls_back_to_text_when_post_response_is_unsuccessful" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_image_downloads_then_uses_native_image_send" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_image_file_uploads_image_and_sends_image_message" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_image_file_with_caption_uses_single_post_message" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_replies_in_thread_when_thread_metadata_present" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_retries_transient_failure" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_splits_fenced_code_blocks_into_separate_post_rows" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_uses_metadata_reply_target_for_threaded_feishu_topic" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_uses_post_for_advanced_markdown_lines" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_uses_post_for_inline_markdown" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_video_uploads_file_and_sends_media_message" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_send_voice_uploads_opus_and_sends_audio_message" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_text_batch_flushes_when_message_count_limit_is_hit" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_text_batch_merges_rapid_messages_into_single_event" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_url_verification_requires_configured_verification_token" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_user_reaction_with_managed_emoji_is_still_routed" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestAdapterBehavior" name="test_webhook_request_uses_same_message_dispatch_path" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestHydrateBotIdentity" name="test_hydration_overwrites_stale_env_open_id" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:2913: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestHydrateBotIdentity" name="test_hydration_populates_open_id_from_bot_info" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:2861: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestHydrateBotIdentity" name="test_hydration_preserves_env_values_when_bot_info_probe_fails" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:2934: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestHydrateBotIdentity" name="test_hydration_refreshes_env_values_when_bot_info_available" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:2882: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestHydrateBotIdentity" name="test_hydration_tolerates_probe_failure_and_falls_back_to_app_info" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:2952: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestPendingInboundQueue" name="test_drainer_drops_queue_when_adapter_shuts_down" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3044: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestPendingInboundQueue" name="test_drainer_replays_queued_events_when_loop_becomes_ready" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:2998: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestPendingInboundQueue" name="test_event_queued_when_loop_not_ready" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:2978: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestPendingInboundQueue" name="test_normal_path_unchanged_when_loop_ready" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3082: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestPendingInboundQueue" name="test_queue_cap_evicts_oldest_beyond_max_depth" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3064: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestWebhookSecurity" name="test_rate_limit_allows_requests_within_window" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3155: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestWebhookSecurity" name="test_rate_limit_blocks_after_exceeding_max" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3160: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestWebhookSecurity" name="test_rate_limit_resets_after_window_expires" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3167: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestWebhookSecurity" name="test_signature_invalid_rejected" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3142: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestWebhookSecurity" name="test_signature_missing_headers_rejected" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3151: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestWebhookSecurity" name="test_signature_valid_passes" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3129: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestWebhookSecurity" name="test_webhook_connect_requires_inbound_auth_secret" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3223: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestWebhookSecurity" name="test_webhook_loads_auth_secrets_from_platform_extra" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3236: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestWebhookSecurity" name="test_webhook_request_rejects_bad_signature" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3207: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestWebhookSecurity" name="test_webhook_request_rejects_invalid_json" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3193: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestWebhookSecurity" name="test_webhook_request_rejects_oversized_body" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3179: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestWebhookSecurity" name="test_webhook_url_verification_challenge_passes_without_signature" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3256: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestDedupTTL" name="test_duplicate_within_ttl_is_rejected" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestDedupTTL" name="test_expired_entry_is_not_considered_duplicate" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestDedupTTL" name="test_load_backward_compat_list_format" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestDedupTTL" name="test_load_tolerates_malformed_timestamp_values" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestDedupTTL" name="test_persist_saves_timestamps_as_dict" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestGroupMentionAtAll" name="test_at_all_in_content_accepts_without_explicit_bot_mention" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestGroupMentionAtAll" name="test_at_all_still_requires_policy_gate" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestSenderNameResolution" name="test_api_failure_returns_none_without_raising" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3477: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestSenderNameResolution" name="test_expired_cache_triggers_new_api_call" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3450: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestSenderNameResolution" name="test_fetches_and_caches_name_from_api" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3421: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestSenderNameResolution" name="test_returns_cached_name_within_ttl" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3409: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestSenderNameResolution" name="test_returns_none_when_client_is_none" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3399: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestBotNameResolution" name="test_api_failure_returns_none_and_does_not_poison_cache" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3558: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestBotNameResolution" name="test_bot_absent_from_response_is_not_cached" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3579: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestBotNameResolution" name="test_empty_name_in_response_is_negative_cached" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3594: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestBotNameResolution" name="test_fetches_and_caches_bot_name" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3541: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestBotNameResolution" name="test_non_zero_code_returns_none" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3611: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestBotNameResolution" name="test_returns_cached_bot_name_without_api_call" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3528: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestProcessingReactions" name="test_cache_evicts_oldest_entry_beyond_size_limit" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3829: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestProcessingReactions" name="test_cancelled_removes_typing_and_adds_nothing" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3748: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestProcessingReactions" name="test_delete_failure_on_failure_outcome_skips_cross_mark" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3781: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestProcessingReactions" name="test_delete_failure_on_success_outcome_retains_handle" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3800: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestProcessingReactions" name="test_env_disable_short_circuits_both_hooks" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3817: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestProcessingReactions" name="test_failure_removes_typing_then_adds_cross_mark" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3737: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestProcessingReactions" name="test_failure_without_preceding_start_still_adds_cross_mark" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3760: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestProcessingReactions" name="test_start_adds_typing_and_caches_reaction_id" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3700: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestProcessingReactions" name="test_start_does_not_cache_when_create_fails" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3716: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestProcessingReactions" name="test_start_is_idempotent_for_same_message_id" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3708: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestProcessingReactions" name="test_success_removes_typing_and_adds_nothing" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3725: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestProcessingReactions" name="test_success_without_preceding_start_is_full_noop" time="0.004"><skipped type="pytest.skip" message="lark-oapi not installed">/home/cube/projects/richard/hermes-agent/tests/gateway/test_feishu.py:3770: lark-oapi not installed</skipped></testcase><testcase classname="tests.gateway.test_feishu.TestFeishuMentionMap" name="test_build_mentions_map_falls_back_to_name_when_bot_open_id_not_hydrated" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionMap" name="test_build_mentions_map_handles_at_all" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionMap" name="test_build_mentions_map_marks_self_by_name_fallback" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionMap" name="test_build_mentions_map_marks_self_by_open_id" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionMap" name="test_build_mentions_map_name_match_does_not_override_mismatching_open_id" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionMap" name="test_build_mentions_map_non_self_user" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionMap" name="test_build_mentions_map_returns_empty_for_none_input" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionMap" name="test_build_mentions_map_tolerates_missing_id_object" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionHint" name="test_hint_at_all" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionHint" name="test_hint_dedupes_repeated_at_all" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionHint" name="test_hint_dedupes_repeated_user" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionHint" name="test_hint_falls_back_when_open_id_missing" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionHint" name="test_hint_filters_self_mentions" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionHint" name="test_hint_multiple_users" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionHint" name="test_hint_returns_empty_for_no_refs" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionHint" name="test_hint_returns_empty_when_only_self" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionHint" name="test_hint_single_user" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionHint" name="test_hint_uses_unknown_placeholder_when_name_missing" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuStripLeadingSelf" name="test_preserves_mid_text_self" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuStripLeadingSelf" name="test_preserves_trailing_self_before_non_terminal_char" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuStripLeadingSelf" name="test_returns_input_when_no_self_refs" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuStripLeadingSelf" name="test_returns_input_when_refs_empty" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuStripLeadingSelf" name="test_stops_at_first_non_self_token" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuStripLeadingSelf" name="test_strips_consecutive_leading_self" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuStripLeadingSelf" name="test_strips_leading_self" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuStripLeadingSelf" name="test_strips_trailing_self_at_end_of_text" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuStripLeadingSelf" name="test_strips_trailing_self_with_terminal_punct" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuStripLeadingSelf" name="test_uses_open_id_fallback_when_name_missing" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuStripLeadingSelf" name="test_word_boundary_prevents_prefix_collision" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeText" name="test_at_all_rendered_as_english_literal" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeText" name="test_backward_compatible_without_map" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeText" name="test_mention_for_missing_map_entry_degrades_to_space" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeText" name="test_renders_mention_with_display_name" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeText" name="test_renders_self_mention_with_name" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeText" name="test_unknown_placeholder_degrades_to_space" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuPostMentionParsing" name="test_post_at_all_tag_renders_as_at_all" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuPostMentionParsing" name="test_post_at_tag_falls_back_to_inline_user_name_when_map_misses" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuPostMentionParsing" name="test_post_at_tag_renders_via_mentions_map" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeWithMentions" name="test_post_message_marks_self_via_mentions_map_lookup" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeWithMentions" name="test_text_message_at_all_in_text_without_mentions_payload" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeWithMentions" name="test_text_message_at_all_not_synthesized_if_absent_from_text" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeWithMentions" name="test_text_message_at_all_surfaces_ref" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeWithMentions" name="test_text_message_marks_bot_self_mention" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeWithMentions" name="test_text_message_renders_mention_by_name" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuNormalizeWithMentions" name="test_text_message_without_mentions_param_is_backward_compatible" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuPostMentionsBot" name="test_post_mentions_bot_empty_returns_false" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuPostMentionsBot" name="test_post_mentions_bot_uses_is_self_flag" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuExtractMessageContent" name="test_returns_empty_mentions_when_missing" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuExtractMessageContent" name="test_returns_five_tuple_with_mentions" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuProcessInboundMessage" name="test_command_message_never_injects_hint" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuProcessInboundMessage" name="test_leading_self_mention_stripped_for_command" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestFeishuProcessInboundMessage" name="test_mid_text_self_mention_preserved" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuProcessInboundMessage" name="test_non_command_message_with_mentions_injects_hint" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestFeishuProcessInboundMessage" name="test_pure_self_mention_message_is_ignored" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuFetchMessageText" name="test_build_mentions_map_string_id_shape" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuFetchMessageText" name="test_extract_text_from_raw_content_accepts_mentions_kwarg" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuFetchMessageText" name="test_fetch_message_text_marks_is_self_via_string_id_shape" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestFeishuFetchMessageText" name="test_fetch_message_text_renders_mentions_without_hint_prefix" time="0.006" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionEndToEnd" name="test_scenario_at_all_announcement" time="0.006" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionEndToEnd" name="test_scenario_bot_plus_alice_plus_bob_build_group" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionEndToEnd" name="test_scenario_mid_text_self_mention_preserved" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionEndToEnd" name="test_scenario_no_mentions_zero_regression" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionEndToEnd" name="test_scenario_post_at_alice_exposes_open_id" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionEndToEnd" name="test_scenario_post_bot_plus_alice_filters_self_from_hint" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestFeishuMentionEndToEnd" name="test_scenario_trailing_self_mention_stripped" time="0.005" /><testcase classname="tests.gateway.test_feishu.TestChatLockEviction" name="test_chat_locks_is_ordered_dict" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestChatLockEviction" name="test_eviction_skips_held_locks" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestChatLockEviction" name="test_lru_eviction_respects_recent_access" time="0.004" /><testcase classname="tests.gateway.test_feishu.TestChatLockEviction" name="test_same_id_returns_same_lock_and_stays_bounded" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestFeishuExecApproval" name="test_sends_interactive_card" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestFeishuExecApproval" name="test_stores_approval_state" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestFeishuExecApproval" name="test_not_connected" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestFeishuExecApproval" name="test_truncates_long_command" time="0.005" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestFeishuExecApproval" name="test_multiple_approvals_get_unique_ids" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestFeishuUpdatePrompt" name="test_sends_interactive_card" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestFeishuUpdatePrompt" name="test_stores_prompt_state" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestFeishuUpdatePrompt" name="test_not_connected" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestFeishuUpdatePrompt" name="test_send_failure_returns_error" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestResolveApproval" name="test_resolves_once" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestResolveApproval" name="test_resolves_deny" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestResolveApproval" name="test_resolves_session" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestResolveApproval" name="test_resolves_always" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestResolveApproval" name="test_already_resolved_drops_silently" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestResolveApproval" name="test_unauthorized_click_does_not_resolve" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestResolveApproval" name="test_chat_mismatch_does_not_resolve" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestNonApprovalCardAction" name="test_routes_as_synthetic_command" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_drops_action_when_loop_not_ready" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_returns_card_for_approve_action" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_returns_card_for_deny_action" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_ignores_missing_approval_id" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_no_card_for_non_approval_action" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_falls_back_to_open_id_when_name_not_cached" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_ignores_expired_cached_name" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_rejects_approval_click_from_unauthorized_user" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_rejects_approval_click_when_callback_chat_mismatches" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_returns_card_for_update_prompt_yes" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_returns_card_for_update_prompt_no" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_ignores_missing_update_prompt_id" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_already_resolved_update_prompt_returns_no_card" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_update_prompt_schedule_failure_returns_no_card" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_update_prompt_unauthorized_operator_returns_no_card" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_update_prompt_empty_allowlists_fail_closed" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestCardActionCallbackResponse" name="test_update_prompt_chat_mismatch_returns_no_card" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestResolveUpdatePrompt" name="test_writes_response_file" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestResolveUpdatePrompt" name="test_overwrites_existing_response_file" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestResolveUpdatePrompt" name="test_unknown_prompt_id_drops_silently" time="0.004" /><testcase classname="tests.gateway.test_feishu_approval_buttons.TestResolveUpdatePrompt" name="test_chat_mismatch_does_not_write_response_file" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_populates_allow_bots[none-none]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_populates_allow_bots[mentions-mentions]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_populates_allow_bots[all-all]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_populates_allow_bots[  Mentions  -mentions]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_allow_bots_defaults_to_none" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_ignores_extra_allow_bots" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_falls_back_to_env_when_extra_missing" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_warns_on_unknown_allow_bots" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_require_mention[None-extra0-True]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_require_mention[false-extra1-False]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_require_mention[true-extra2-True]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_require_mention[true-extra3-False]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_feishu_load_settings_parses_per_group_require_mention" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_sender_identity_collects_every_non_empty_id_variant" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_sender_identity_handles_missing_sender_id" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_is_bot_sender_treats_bot_and_app_as_bot_origin[bot]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_is_bot_sender_treats_bot_and_app_as_bot_origin[app]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_is_bot_sender_rejects_non_bot_origin[user]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_is_bot_sender_rejects_non_bot_origin[]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_is_bot_sender_rejects_non_bot_origin[None]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[self_echo:open_id_under_all_mode]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[self_echo:user_id_only]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[self_echo:mixed_ids]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[self_echo:user_id_when_bot_user_id_set]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[bots_disabled:mode_none]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[bots_disabled:mode_empty]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[bots_disabled:mode_unknown_value]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[bots_disabled:wins_over_self_ids_unknown]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[self_ids_unknown:bot_sender_no_self_ids]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[self_ids_unknown:app_sender_no_self_ids]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[self_ids_unknown:no_sender_ids]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[mentions_mode:not_mentioned_dm]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[mentions_mode:mentioned_dm]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[all_mode:not_mentioned_dm]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[all_mode:mentioned_dm]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[human:dm_admitted_regardless_of_allow_bots]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[human:p2p_admitted]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[require_mention_false:group_human_no_mention_admitted]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[require_mention_false:group_bot_all_mode_admitted]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_pipeline[require_mention_false:group_bot_mentions_mode_still_gated]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_skips_mention_check_under_all_mode" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_group_mention_checked_once_per_call" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_per_group_require_mention_overrides_global" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_hydrate_bot_identity_populates_self_ids_from_bot_v3_info" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_resolve_sender_profile_uses_open_id_for_bot_name_lookup" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_allow_group_message_matrix[bot:bypasses_default_allowlist]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_allow_group_message_matrix[human:gated_by_default_allowlist]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_allow_group_message_matrix[bot:admin_short_circuit]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_allow_group_message_matrix[human:admin_via_user_id]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_allow_group_message_matrix[bot:allowlist_skipped]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_allow_group_message_matrix[app:allowlist_skipped]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_allow_group_message_channel_locks_apply_to_bots[bot:disabled_policy_blocks_even_with_bypass]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_allow_group_message_channel_locks_apply_to_bots[app:disabled_policy_blocks_even_with_bypass]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_allow_group_message_channel_locks_apply_to_bots[bot:admin_only_policy_blocks_non_admin]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_allow_group_message_channel_locks_apply_to_bots[app:admin_only_policy_blocks_non_admin]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_allow_group_message_blacklist_is_human_scope_only[bot]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_allow_group_message_blacklist_is_human_scope_only[app]" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_admit_accepts_realistic_bot_at_bot_group_event" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_handle_message_event_data_drops_bot_sender_by_default" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_admission" name="test_handle_message_event_data_forwards_sender_when_admitted" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_auth_bypass" name="test_feishu_bot_authorized_when_allow_bots_mentions" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_auth_bypass" name="test_feishu_bot_authorized_when_allow_bots_all" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_auth_bypass" name="test_feishu_bot_NOT_authorized_when_allow_bots_none" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_auth_bypass" name="test_feishu_bot_NOT_authorized_when_allow_bots_unset" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_auth_bypass" name="test_feishu_human_still_checked_against_allowlist_when_bot_policy_set" time="0.004" /><testcase classname="tests.gateway.test_feishu_bot_auth_bypass" name="test_feishu_bot_bypass_does_not_leak_to_other_platforms" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestParseEvent" name="test_parse_missing_event_attr" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestParseEvent" name="test_parse_none_event" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestParseEvent" name="test_parse_valid_event" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestEventFiltering" name="test_allowed_notice_types" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestEventFiltering" name="test_empty_to_open_id_filtered" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestEventFiltering" name="test_invalid_notice_type_filtered" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestEventFiltering" name="test_self_reply_filtered" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestEventFiltering" name="test_wrong_receiver_filtered" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestAccessControlIntegration" name="test_denied_user_no_side_effects" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestAccessControlIntegration" name="test_disabled_comment_skipped" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestSanitizeCommentText" name="test_ampersand_escaped_first" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestSanitizeCommentText" name="test_ampersand_not_double_escaped" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestSanitizeCommentText" name="test_angle_brackets_escaped" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestSanitizeCommentText" name="test_code_snippet" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestSanitizeCommentText" name="test_empty_string" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestSanitizeCommentText" name="test_plain_text_unchanged" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestWikiReverseLookup" name="test_reverse_lookup_not_wiki" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestWikiReverseLookup" name="test_reverse_lookup_service_error" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestWikiReverseLookup" name="test_reverse_lookup_success" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment.TestWikiReverseLookup" name="test_wiki_lookup_triggered_when_no_exact_match" time="0.005" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestCommentDocumentRuleParsing" name="test_invalid_policy_ignored" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestCommentDocumentRuleParsing" name="test_parse_empty_rule" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestCommentDocumentRuleParsing" name="test_parse_full_rule" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestCommentDocumentRuleParsing" name="test_parse_partial_rule" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestResolveRule" name="test_default_config" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestResolveRule" name="test_exact_match" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestResolveRule" name="test_exact_overrides_wildcard" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestResolveRule" name="test_exact_takes_priority_over_wiki" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestResolveRule" name="test_explicit_empty_allow_from_does_not_fall_through" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestResolveRule" name="test_field_by_field_fallback" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestResolveRule" name="test_top_level_fallback" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestResolveRule" name="test_wiki_token_match" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestResolveRule" name="test_wildcard_match" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestHasWikiKeys" name="test_empty_documents" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestHasWikiKeys" name="test_has_wiki_keys" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestHasWikiKeys" name="test_no_wiki_keys" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestIsUserAllowed" name="test_allowlist_allows_listed" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestIsUserAllowed" name="test_allowlist_denies_unlisted" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestIsUserAllowed" name="test_allowlist_empty_denies_all" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestIsUserAllowed" name="test_pairing_allows_in_allow_from" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestIsUserAllowed" name="test_pairing_checks_store" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestMtimeCache" name="test_reads_file_and_caches" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestMtimeCache" name="test_reloads_on_mtime_change" time="0.055" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestMtimeCache" name="test_returns_empty_dict_for_missing_file" time="0.007" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestLoadConfig" name="test_load_missing_file_returns_defaults" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestLoadConfig" name="test_load_with_documents" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestPairingStore" name="test_add_and_list" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestPairingStore" name="test_add_duplicate" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestPairingStore" name="test_remove" time="0.004" /><testcase classname="tests.gateway.test_feishu_comment_rules.TestPairingStore" name="test_remove_nonexistent" time="0.004" /><testcase classname="tests.gateway.test_feishu_meeting_invite.TestMeetingInviteParsing" name="test_parse_actual_payload_string_int64_fields" time="0.004" /><testcase classname="tests.gateway.test_feishu_meeting_invite.TestMeetingInviteParsing" name="test_parse_body_content_payload" time="0.004" /><testcase classname="tests.gateway.test_feishu_meeting_invite.TestMeetingInviteParsing" name="test_parse_requires_inviter" time="0.004" /><testcase classname="tests.gateway.test_feishu_meeting_invite.TestMeetingInviteParsing" name="test_parse_requires_meeting_no" time="0.004" /><testcase classname="tests.gateway.test_feishu_meeting_invite.TestMeetingInviteParsing" name="test_prompt_contains_meeting_and_inviter_context" time="0.004" /><testcase classname="tests.gateway.test_feishu_meeting_invite.TestMeetingInviteHandler" name="test_duplicate_event_is_dropped" time="0.004" /><testcase classname="tests.gateway.test_feishu_meeting_invite.TestMeetingInviteHandler" name="test_inviter_without_open_id_is_dropped" time="0.004" /><testcase classname="tests.gateway.test_feishu_meeting_invite.TestMeetingInviteHandler" name="test_routes_as_synthetic_message_to_inviter_open_id" time="0.004" /><testcase classname="tests.gateway.test_feishu_meeting_invite.TestMeetingInviteSendRouting" name="test_feishu_user_id_prefix_sends_with_user_id_receive_type" time="0.005" /><testcase classname="tests.gateway.test_feishu_onboard.TestPostRegistration" name="test_post_registration_returns_parsed_json" time="0.005" /><testcase classname="tests.gateway.test_feishu_onboard.TestPostRegistration" name="test_post_registration_sends_form_encoded_body" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestInitRegistration" name="test_init_succeeds_when_client_secret_supported" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestInitRegistration" name="test_init_raises_when_client_secret_not_supported" time="0.005" /><testcase classname="tests.gateway.test_feishu_onboard.TestInitRegistration" name="test_init_uses_lark_url_for_lark_domain" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestBeginRegistration" name="test_begin_returns_device_code_and_qr_url" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestBeginRegistration" name="test_begin_sends_correct_archetype" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestPollRegistration" name="test_poll_returns_credentials_on_success" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestPollRegistration" name="test_poll_switches_domain_on_lark_tenant_brand" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestPollRegistration" name="test_poll_success_with_lark_brand_in_same_response" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestPollRegistration" name="test_poll_returns_none_on_access_denied" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestPollRegistration" name="test_poll_returns_none_on_timeout" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestPollRegistration" name="test_poll_timeout_uses_monotonic_clock" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestRenderQr" name="test_render_qr_returns_true_on_success" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestRenderQr" name="test_render_qr_returns_false_when_qrcode_missing" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestProbeBot" name="test_probe_returns_bot_info_on_success" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestProbeBot" name="test_probe_returns_none_on_failure" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestProbeBot" name="test_http_fallback_when_sdk_unavailable" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestProbeBot" name="test_http_fallback_returns_none_on_network_error" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestQrRegister" name="test_qr_register_success_flow" time="0.005" /><testcase classname="tests.gateway.test_feishu_onboard.TestQrRegister" name="test_qr_register_returns_none_on_init_failure" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestQrRegister" name="test_qr_register_returns_none_on_poll_failure" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestQrRegister" name="test_qr_register_returns_none_on_network_error" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestQrRegister" name="test_qr_register_returns_none_on_json_error" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestQrRegister" name="test_qr_register_propagates_unexpected_errors" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestQrRegister" name="test_qr_register_returns_none_when_begin_missing_device_code" time="0.004" /><testcase classname="tests.gateway.test_feishu_onboard.TestQrRegister" name="test_qr_register_succeeds_even_when_probe_fails" time="0.004" /><testcase classname="tests.gateway.test_fresh_reset_skill_injection.TestResetSessionStampsFreshReset" name="test_reset_session_sets_is_fresh_reset_true" time="0.008" /><testcase classname="tests.gateway.test_fresh_reset_skill_injection.TestResetSessionStampsFreshReset" name="test_reset_session_unknown_key_returns_none" time="0.005" /><testcase classname="tests.gateway.test_fresh_reset_skill_injection.TestResetSessionStampsFreshReset" name="test_fresh_session_does_not_have_is_fresh_reset" time="0.005" /><testcase classname="tests.gateway.test_fresh_reset_skill_injection.TestIsNewSessionSurvivesUpdatedAtBump" name="test_is_new_session_true_after_reset_then_next_message" time="0.006" /><testcase classname="tests.gateway.test_fresh_reset_skill_injection.TestIsNewSessionSurvivesUpdatedAtBump" name="test_flag_consumed_after_first_read" time="0.007" /><testcase classname="tests.gateway.test_fresh_reset_skill_injection.TestVanillaBehaviorUnaffected" name="test_ongoing_session_not_flagged_as_new" time="0.005" /><testcase classname="tests.gateway.test_fresh_reset_skill_injection.TestVanillaBehaviorUnaffected" name="test_idle_auto_reset_does_not_set_is_fresh_reset" time="0.005" /><testcase classname="tests.gateway.test_fresh_reset_skill_injection.TestPersistence" name="test_is_fresh_reset_survives_to_dict_from_dict" time="0.007" /><testcase classname="tests.gateway.test_fresh_reset_skill_injection.TestPersistence" name="test_default_false_when_missing_from_dict" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_help" name="test_start_is_known_gateway_command" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_help" name="test_help_sanitizes_slash_command_mentions_for_telegram" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_help" name="test_commands_sanitizes_slash_command_mentions_for_telegram" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_help" name="test_help_keeps_non_telegram_slash_command_mentions_unchanged" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[pythonw.exe -m hermes_cli.main gateway run]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[C:\\Users\\me\\hermes\\venv\\Scripts\\pythonw.exe -m hermes_cli.main gateway run]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[python -m hermes_cli.main --profile work gateway run]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[python -m hermes_cli.main gateway run --replace]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[python -m hermes_cli/main.py gateway run]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[python gateway/run.py]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[hermes-gateway.exe]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[hermes gateway]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[hermes gateway run]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[hermes gateway --profile work run]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[python -m hermes_cli.main gateway -p work run]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[hermes gateway --profile=work run]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[hermes -p gateway gateway run]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[python -m hermes_cli.main --profile gateway gateway run]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[&quot;C:\\Program Files\\Hermes\\hermes-gateway.exe&quot;]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[&quot;C:\\Program Files\\Hermes\\gateway\\run.py&quot; run]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_accepts_real_gateway_run[&quot;C:\\Program Files\\Py\\pythonw.exe&quot; -m hermes_cli.main gateway run]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_rejects_non_gateway_run[python -m tui_gateway]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_rejects_non_gateway_run[python -m hermes_cli.main gateway status]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_rejects_non_gateway_run[python -m hermes_cli.main gateway restart]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_rejects_non_gateway_run[python -m hermes_cli.main gateway stop]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_rejects_non_gateway_run[python -m hermes_cli.main --profile x dashboard]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_rejects_non_gateway_run[some random python -m mygateway thing]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_rejects_non_gateway_run[]" time="0.004" /><testcase classname="tests.gateway.test_gateway_command_line_matcher" name="test_rejects_non_gateway_run[None]" time="0.004" /><testcase classname="tests.gateway.test_gateway_inactivity_timeout.TestStagedInactivityWarning" name="test_warning_fires_once_before_timeout" time="2.005" /><testcase classname="tests.gateway.test_gateway_inactivity_timeout.TestStagedInactivityWarning" name="test_warning_disabled_when_zero" time="2.009" /><testcase classname="tests.gateway.test_gateway_inactivity_timeout.TestStagedInactivityWarning" name="test_warning_fires_only_once" time="2.009" /><testcase classname="tests.gateway.test_gateway_inactivity_timeout.TestStagedInactivityWarning" name="test_full_timeout_still_fires_after_warning" time="1.115" /><testcase classname="tests.gateway.test_gateway_inactivity_timeout.TestStagedInactivityWarning" name="test_warning_env_var_respected" time="0.008" /><testcase classname="tests.gateway.test_gateway_inactivity_timeout.TestStagedInactivityWarning" name="test_warning_zero_means_disabled" time="0.005" /><testcase classname="tests.gateway.test_gateway_inactivity_timeout.TestStagedInactivityWarning" name="test_unlimited_timeout_no_warning" time="0.506" /><testcase classname="tests.gateway.test_gateway_inactivity_timeout.TestWarningThresholdBelowTimeout" name="test_warning_at_half_timeout" time="2.124" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_cancel_background_tasks_cancels_inflight_message_processing" time="0.009" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_cleanup_agent_resources_reaps_stale_aux_clients" time="0.007" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_signal_shutdown_wrapper_is_not_cancelled_by_inner_stop" time="0.007" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_gateway_stop_releases_dispatcher_lock_owned_by_runner" time="0.007" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_gateway_stop_awaits_tracked_background_task_cancellation" time="0.007" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_gateway_stop_interrupts_running_agents_and_cancels_adapter_tasks" time="5.039" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_gateway_stop_drains_running_agents_before_disconnect" time="0.113" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_gateway_stop_interrupts_after_drain_timeout" time="5.137" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_gateway_stop_systemd_service_restart_exits_cleanly" time="0.012" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_gateway_stop_launchd_service_restart_keeps_nonzero_exit" time="0.010" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_restart_shutdown_warning_uses_restart_command_reply_anchor_for_active_session" time="0.009" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_in_chat_restart_skips_home_shutdown_even_with_active_session" time="0.008" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_idle_in_chat_restart_does_not_send_interruption_warning" time="0.006" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_in_chat_restart_does_not_write_home_startup_marker" time="0.007" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_drain_active_agents_throttles_status_updates" time="0.307" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_gateway_stop_kills_tool_subprocesses_before_adapter_disconnect_on_timeout" time="5.135" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_gateway_stop_kills_tool_subprocesses_on_graceful_path" time="0.010" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_signal_initiated_shutdown_persists_stopped_terminal_state" time="0.007" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_operator_initiated_stop_persists_stopped" time="0.007" /><testcase classname="tests.gateway.test_gateway_shutdown" name="test_signal_initiated_restart_still_persists_stopped" time="0.008" /><testcase classname="tests.gateway.test_gateway_silence_tokens" name="test_exact_silence_tokens_are_intentional_silence" time="0.005" /><testcase classname="tests.gateway.test_gateway_silence_tokens" name="test_blank_and_prose_mentions_are_not_silence" time="0.005" /><testcase classname="tests.gateway.test_gateway_silence_tokens" name="test_failed_agent_result_never_counts_as_intentional_silence" time="0.005" /><testcase classname="tests.gateway.test_gateway_silence_tokens" name="test_silence_token_suppresses_delivery_but_preserves_transcript" time="0.362" /><testcase classname="tests.gateway.test_gateway_silence_tokens" name="test_empty_success_still_gets_empty_response_warning" time="0.124" /><testcase classname="tests.gateway.test_gateway_silence_tokens" name="test_prose_mentioning_silence_token_is_delivered" time="0.122" /><testcase classname="tests.gateway.test_goal_max_turns_config" name="test_gateway_goal_uses_goals_max_turns_from_full_config" time="0.010" /><testcase classname="tests.gateway.test_goal_status_notice" name="test_goal_status_notice_uses_adapter_send_with_thread_metadata" time="0.006" /><testcase classname="tests.gateway.test_goal_status_notice" name="test_goal_status_notice_defers_until_post_delivery_callback" time="0.004" /><testcase classname="tests.gateway.test_goal_status_notice" name="test_clear_goal_pending_continuations_removes_slot_and_overflow_only" time="0.004" /><testcase classname="tests.gateway.test_goal_verdict_send" name="test_goal_verdict_done_sent_via_adapter_send" time="0.058" /><testcase classname="tests.gateway.test_goal_verdict_send" name="test_goal_verdict_continue_enqueues_continuation" time="0.062" /><testcase classname="tests.gateway.test_goal_verdict_send" name="test_goal_verdict_budget_exhausted_sends_pause" time="0.062" /><testcase classname="tests.gateway.test_goal_verdict_send" name="test_goal_verdict_skipped_when_no_active_goal" time="0.060" /><testcase classname="tests.gateway.test_goal_verdict_send" name="test_goal_verdict_survives_adapter_without_send" time="0.062" /><testcase classname="tests.gateway.test_google_chat.TestPlatformRegistration" name="test_enum_value" time="0.007" /><testcase classname="tests.gateway.test_google_chat.TestPlatformRegistration" name="test_requirements_check_returns_true_when_available" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestEnvConfigLoading" name="test_missing_subscription_does_not_enable" time="0.050" /><testcase classname="tests.gateway.test_google_chat.TestEnvConfigLoading" name="test_missing_project_does_not_enable" time="0.054" /><testcase classname="tests.gateway.test_google_chat.TestHelpers" name="test_mime_image_maps_to_photo" time="0.007" /><testcase classname="tests.gateway.test_google_chat.TestHelpers" name="test_mime_audio_maps_to_audio" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestHelpers" name="test_mime_video_maps_to_video" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestHelpers" name="test_mime_other_maps_to_document" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestHelpers" name="test_mime_empty_maps_to_document" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestRedactSensitive" name="test_redacts_subscription_path" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestRedactSensitive" name="test_redacts_topic_path" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestRedactSensitive" name="test_redacts_service_account_email" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestRedactSensitive" name="test_empty_text_passes_through" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestGoogleOwnedHost" name="test_accepts_google_hosts[https://chat.googleapis.com/v1/x]" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestGoogleOwnedHost" name="test_accepts_google_hosts[https://www.googleapis.com/upload/chat/v1/x]" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestGoogleOwnedHost" name="test_accepts_google_hosts[https://drive.google.com/file/d/abc]" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestGoogleOwnedHost" name="test_accepts_google_hosts[https://lh3.googleusercontent.com/photo.jpg]" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestGoogleOwnedHost" name="test_rejects_non_google_or_insecure[https://evil.com/foo]" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestGoogleOwnedHost" name="test_rejects_non_google_or_insecure[https://169.254.169.254/latest/meta-data/]" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestGoogleOwnedHost" name="test_rejects_non_google_or_insecure[https://metadata.internal/computeMetadata/v1/]" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestGoogleOwnedHost" name="test_rejects_non_google_or_insecure[https://chat.google.com.attacker.example/]" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestGoogleOwnedHost" name="test_rejects_non_google_or_insecure[http://chat.googleapis.com/]" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestGoogleOwnedHost" name="test_rejects_non_google_or_insecure[ftp://drive.google.com/x]" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestGoogleOwnedHost" name="test_rejects_non_google_or_insecure[not a url]" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestValidateConfig" name="test_missing_project_raises" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestValidateConfig" name="test_missing_subscription_raises" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestValidateConfig" name="test_subscription_format_rejected" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestValidateConfig" name="test_subscription_project_mismatch_rejected" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestValidateConfig" name="test_validate_config_happy" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestChunkText" name="test_empty_returns_empty_list" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestChunkText" name="test_short_returns_single_chunk" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestChunkText" name="test_long_splits_into_multiple" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestChunkText" name="test_splits_on_newline_near_boundary" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestOnPubsubMessage" name="test_shutting_down_nacks" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestOnPubsubMessage" name="test_malformed_json_acks_without_dispatch" time="0.006" /><testcase classname="tests.gateway.test_google_chat.TestOnPubsubMessage" name="test_membership_created_caches_bot_user_id" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestOnPubsubMessage" name="test_membership_deleted_acks_no_dispatch" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestOnPubsubMessage" name="test_bot_sender_is_filtered" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestOnPubsubMessage" name="test_relay_flat_bot_sender_is_filtered_end_to_end" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestOnPubsubMessage" name="test_relay_flat_human_sender_dispatches" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestOnPubsubMessage" name="test_duplicate_message_dropped" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestOnPubsubMessage" name="test_text_message_submits_to_loop" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestOnPubsubMessage" name="test_callback_exception_does_not_escape" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestExtractMessagePayload" name="test_native_chat_api_format_extracts_msg_and_space" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestExtractMessagePayload" name="test_native_chat_api_format_drops_non_message_events" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestExtractMessagePayload" name="test_relay_flat_format_synthesizes_chat_api_shape" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestExtractMessagePayload" name="test_relay_flat_honors_declared_sender_type_bot" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestExtractMessagePayload" name="test_relay_flat_defaults_sender_type_human_when_absent" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestExtractMessagePayload" name="test_relay_flat_coerces_unknown_sender_type_to_human" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestExtractMessagePayload" name="test_unrecognized_envelope_returns_none" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestBuildMessageEvent" name="test_dm_first_message_in_thread_is_main_flow" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestBuildMessageEvent" name="test_dm_second_message_in_same_thread_is_side_thread" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestBuildMessageEvent" name="test_dm_side_thread_caches_thread_for_outbound" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestBuildMessageEvent" name="test_dm_main_flow_after_side_thread_clears_cache" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestBuildMessageEvent" name="test_dm_different_top_level_threads_share_session" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestBuildMessageEvent" name="test_group_keeps_thread_id_on_source" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestBuildMessageEvent" name="test_slash_command_yields_command_type" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestBuildMessageEvent" name="test_attachment_image_triggers_download" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestSend" name="test_text_send_creates_message" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestSend" name="test_create_message_passes_messageReplyOption_when_thread_set" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestSend" name="test_create_message_omits_messageReplyOption_when_no_thread" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestSend" name="test_with_typing_card_patches_instead_of_creating" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestSend" name="test_long_text_splits_and_sends_multiple" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestSend" name="test_403_sets_fatal_error" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestSend" name="test_404_returns_target_not_found" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestSend" name="test_429_increments_rate_limit_counter_and_raises" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestTypingLifecycle" name="test_send_typing_posts_and_tracks" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestTypingLifecycle" name="test_send_typing_skips_when_already_tracking" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestTypingLifecycle" name="test_send_typing_inherits_inbound_thread" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestTypingLifecycle" name="test_send_typing_no_thread_when_cache_empty" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestTypingLifecycle" name="test_send_typing_concurrent_calls_create_only_one_card" time="0.055" /><testcase classname="tests.gateway.test_google_chat.TestTypingLifecycle" name="test_send_typing_survives_caller_cancellation" time="0.058" /><testcase classname="tests.gateway.test_google_chat.TestTypingLifecycle" name="test_orphan_typing_cards_reaped_on_completion" time="0.008" /><testcase classname="tests.gateway.test_google_chat.TestTypingLifecycle" name="test_stop_typing_is_noop_for_live_card" time="0.006" /><testcase classname="tests.gateway.test_google_chat.TestTypingLifecycle" name="test_stop_typing_pops_sentinel" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestTypingLifecycle" name="test_stop_typing_noop_when_nothing_tracked" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestTypingLifecycle" name="test_on_processing_complete_pops_sentinel_on_success" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestTypingLifecycle" name="test_on_processing_complete_patches_stranded_card" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestEditMessage" name="test_edit_message_patches_via_messages_patch" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestEditMessage" name="test_edit_message_truncates_overlong_text" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestEditMessage" name="test_edit_message_missing_id_returns_failure" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestEditMessage" name="test_edit_message_429_increments_rate_limit_counter" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestEditMessage" name="test_edit_message_overrides_base_so_progress_pipeline_runs" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestDeleteMessage" name="test_delete_message_calls_api" time="0.006" /><testcase classname="tests.gateway.test_google_chat.TestDeleteMessage" name="test_delete_message_swallows_404" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestDeleteMessage" name="test_delete_message_missing_id_returns_false" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestNativeAttachmentDelivery" name="test_send_file_posts_setup_notice_when_no_user_oauth" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestNativeAttachmentDelivery" name="test_send_file_two_step_native_upload_when_user_oauth_ready" time="0.007" /><testcase classname="tests.gateway.test_google_chat.TestNativeAttachmentDelivery" name="test_send_file_falls_back_to_notice_on_401" time="0.006" /><testcase classname="tests.gateway.test_google_chat.TestNativeAttachmentDelivery" name="test_send_file_returns_error_on_unrelated_http_error" time="0.006" /><testcase classname="tests.gateway.test_google_chat.TestSetupFilesSlashCommand" name="test_slash_command_intercepted_before_agent" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestSetupFilesSlashCommand" name="test_no_arg_status_when_unconfigured" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestSetupFilesSlashCommand" name="test_revoke_clears_in_memory_creds" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestUserOAuthHelper" name="test_load_user_credentials_returns_none_when_no_token" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestUserOAuthHelper" name="test_load_user_credentials_returns_none_on_corrupt_token" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestUserOAuthHelper" name="test_scopes_are_minimal" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestUserOAuthHelper" name="test_sanitize_email_lowercases_and_replaces_unsafe_chars" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestUserOAuthHelper" name="test_per_user_token_path_isolated_from_legacy" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestUserOAuthHelper" name="test_load_user_credentials_per_email_returns_none_when_missing" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestUserOAuthHelper" name="test_list_authorized_emails_lists_per_user_files" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestUserOAuthHelper" name="test_list_authorized_emails_empty_when_dir_missing" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestUserOAuthHelper" name="test_pending_auth_path_is_per_user_when_email_given" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestUserOAuthHelper" name="test_persist_credentials_writes_private_json" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestUserOAuthHelper" name="test_store_client_secret_writes_private_json" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestUserOAuthHelper" name="test_save_pending_auth_writes_private_json" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestPerUserAttachmentRouting" name="test_build_message_event_caches_sender_email" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestPerUserAttachmentRouting" name="test_send_file_uses_per_user_token_when_sender_known" time="0.007" /><testcase classname="tests.gateway.test_google_chat.TestPerUserAttachmentRouting" name="test_send_file_falls_back_to_legacy_when_per_user_missing" time="0.007" /><testcase classname="tests.gateway.test_google_chat.TestPerUserAttachmentRouting" name="test_send_file_no_creds_anywhere_posts_setup_notice" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestPerUserAttachmentRouting" name="test_send_file_per_user_401_evicts_only_that_user" time="0.009" /><testcase classname="tests.gateway.test_google_chat.TestPerUserAttachmentRouting" name="test_setup_files_writes_to_per_user_path" time="0.006" /><testcase classname="tests.gateway.test_google_chat.TestPerUserAttachmentRouting" name="test_setup_files_revoke_drops_only_that_user" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestThreadCountStore" name="test_missing_file_returns_zero_counts" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestThreadCountStore" name="test_corrupt_json_treated_as_empty" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestThreadCountStore" name="test_incr_returns_pre_increment_value" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestThreadCountStore" name="test_round_trip_persists_across_load" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestThreadCountStore" name="test_invalid_shape_dropped_silently" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestThreadCountStore" name="test_outbound_thread_tracked_for_user_reply_in_bot_thread" time="0.008" /><testcase classname="tests.gateway.test_google_chat.TestThreadCountStore" name="test_side_thread_detection_survives_restart" time="0.007" /><testcase classname="tests.gateway.test_google_chat.TestAttachmentSSRFGuard" name="test_drive_picker_only_skipped_when_no_resource_name" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestAttachmentSSRFGuard" name="test_drive_file_with_resource_name_uses_bot_path" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestAttachmentSSRFGuard" name="test_rejects_non_google_host" time="0.006" /><testcase classname="tests.gateway.test_google_chat.TestAttachmentSSRFGuard" name="test_rejects_metadata_endpoint" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestOutboundThreadRouting" name="test_resolve_uses_metadata_thread_id" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestOutboundThreadRouting" name="test_resolve_falls_back_to_cached_thread_for_dm" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestOutboundThreadRouting" name="test_resolve_metadata_overrides_cache" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestOutboundThreadRouting" name="test_resolve_returns_none_when_no_inputs" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestMediaDelegation" name="test_send_voice_delegates_to_document_with_audio_mime" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestMediaDelegation" name="test_send_video_delegates_with_video_mime" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestMediaDelegation" name="test_send_animation_delegates_to_image" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestMediaDelegation" name="test_send_file_missing_path_returns_error" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestOutboundRetry" name="test_retries_on_503_then_succeeds" time="0.006" /><testcase classname="tests.gateway.test_google_chat.TestOutboundRetry" name="test_gives_up_after_max_attempts" time="0.008" /><testcase classname="tests.gateway.test_google_chat.TestOutboundRetry" name="test_does_not_retry_on_400" time="0.006" /><testcase classname="tests.gateway.test_google_chat.TestOutboundRetry" name="test_is_retryable_error_classifier" time="0.006" /><testcase classname="tests.gateway.test_google_chat.TestFormatMessage" name="test_bold_double_asterisk_to_single" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestFormatMessage" name="test_bold_italic_combo_to_chat_dialect" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestFormatMessage" name="test_markdown_link_to_chat_anglebracket" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestFormatMessage" name="test_header_to_bold_at_line_start_only" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestFormatMessage" name="test_fenced_code_block_protected" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestFormatMessage" name="test_inline_code_protected" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestFormatMessage" name="test_url_with_parens_in_path" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestFormatMessage" name="test_mixed_bold_italic_orderings" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestFormatMessage" name="test_strips_zwj_and_variation_selector" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestFormatMessage" name="test_strips_bom_and_bidi_marks" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestFormatMessage" name="test_empty_and_none_safe" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestFormatMessage" name="test_unmatched_asterisks_left_alone" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestADCFallback" name="test_load_credentials_uses_adc_when_no_sa_path" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestADCFallback" name="test_load_credentials_raises_when_no_sa_and_adc_unavailable" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestGoogleChatInteractiveSetup" name="test_interactive_setup_uses_shared_cli_prompt_helpers" time="0.004" /><testcase classname="tests.gateway.test_google_chat.TestSupervisorReconnect" name="test_fatal_after_max_retries" time="0.006" /><testcase classname="tests.gateway.test_google_chat.TestAuthorizationEmailMatch" name="test_allowlist_matches_when_user_id_is_email" time="0.121" /><testcase classname="tests.gateway.test_google_chat.TestAuthorizationEmailMatch" name="test_allowlist_denies_wrong_email" time="0.121" /><testcase classname="tests.gateway.test_google_chat.TestAuthorizationEmailMatch" name="test_allowlist_falls_back_to_resource_name_when_no_email" time="0.121" /><testcase classname="tests.gateway.test_google_chat.TestCronSchedulerRegistry" name="test_google_chat_is_known_delivery_platform" time="0.051" /><testcase classname="tests.gateway.test_google_chat.TestCronSchedulerRegistry" name="test_google_chat_home_env_var_resolves" time="0.051" /><testcase classname="tests.gateway.test_google_chat.TestGoogleChatStandaloneSend" name="test_standalone_send_refreshes_token_and_posts_message" time="0.007" /><testcase classname="tests.gateway.test_google_chat.TestGoogleChatStandaloneSend" name="test_standalone_send_returns_error_on_invalid_chat_id" time="0.006" /><testcase classname="tests.gateway.test_google_chat.TestGoogleChatStandaloneSend" name="test_standalone_send_propagates_api_failure" time="0.005" /><testcase classname="tests.gateway.test_google_chat.TestGoogleChatStandaloneSend" name="test_standalone_send_rejects_chat_id_with_path_traversal" time="0.004" /><testcase classname="tests.gateway.test_home_target_env_var" name="test_matrix_home_target_env_var_uses_home_room" time="0.006" /><testcase classname="tests.gateway.test_home_target_env_var" name="test_email_home_target_env_var_uses_home_address" time="0.005" /><testcase classname="tests.gateway.test_home_target_env_var" name="test_telegram_home_target_env_var_uses_home_channel" time="0.004" /><testcase classname="tests.gateway.test_home_target_env_var" name="test_discord_home_target_env_var_uses_home_channel" time="0.004" /><testcase classname="tests.gateway.test_home_target_env_var" name="test_unknown_platform_home_target_env_var_falls_back_to_home_channel" time="0.050" /><testcase classname="tests.gateway.test_home_target_env_var" name="test_case_insensitive_platform_name" time="0.006" /><testcase classname="tests.gateway.test_home_target_env_var" name="test_home_thread_env_var_uses_home_target_name_plus_thread_id" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestCheckRequirements" name="test_returns_false_without_token" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestCheckRequirements" name="test_returns_true_with_token" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestCheckRequirements" name="test_returns_false_without_aiohttp" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_climate_includes_temperatures" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_sensor_includes_unit" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_sensor_without_unit" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_binary_sensor_on" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_binary_sensor_off" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_light_turned_on" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_switch_turned_off" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_fan_domain_uses_light_switch_branch" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_alarm_panel" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_generic_domain_includes_entity_id" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_same_state_returns_none" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_empty_new_state_returns_none" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_no_old_state_uses_unknown" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestFormatStateChange" name="test_uses_entity_id_when_no_friendly_name" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestAdapterInit" name="test_url_and_token_from_config_extra" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestAdapterInit" name="test_url_fallback_to_env" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestAdapterInit" name="test_trailing_slash_stripped" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestAdapterInit" name="test_watch_filters_parsed" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestAdapterInit" name="test_watch_all_parsed" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestAdapterInit" name="test_defaults_when_no_extra" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestEventFilteringPipeline" name="test_ignored_entity_not_forwarded" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestEventFilteringPipeline" name="test_unwatched_domain_not_forwarded" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestEventFilteringPipeline" name="test_watched_domain_forwarded" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestEventFilteringPipeline" name="test_watched_entity_forwarded" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestEventFilteringPipeline" name="test_no_filters_blocks_everything" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestEventFilteringPipeline" name="test_watch_all_passes_everything" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestEventFilteringPipeline" name="test_same_state_not_forwarded" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestEventFilteringPipeline" name="test_empty_entity_id_skipped" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestEventFilteringPipeline" name="test_message_event_has_correct_source" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestCooldown" name="test_cooldown_blocks_rapid_events" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestCooldown" name="test_cooldown_expires" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestCooldown" name="test_different_entities_independent_cooldowns" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestCooldown" name="test_zero_cooldown_passes_all" time="0.005" /><testcase classname="tests.gateway.test_homeassistant.TestConfigIntegration" name="test_env_override_creates_ha_platform" time="0.050" /><testcase classname="tests.gateway.test_homeassistant.TestConfigIntegration" name="test_no_env_no_platform" time="0.053" /><testcase classname="tests.gateway.test_homeassistant.TestConfigIntegration" name="test_config_roundtrip_preserves_extra" time="0.007" /><testcase classname="tests.gateway.test_homeassistant.TestSendViaRestApi" name="test_send_success" time="0.006" /><testcase classname="tests.gateway.test_homeassistant.TestSendViaRestApi" name="test_send_http_error" time="0.005" /><testcase classname="tests.gateway.test_homeassistant.TestSendViaRestApi" name="test_send_truncates_long_message" time="0.005" /><testcase classname="tests.gateway.test_homeassistant.TestSendViaRestApi" name="test_send_does_not_use_websocket" time="0.005" /><testcase classname="tests.gateway.test_homeassistant.TestWsUrlConstruction" name="test_http_to_ws" time="0.004" /><testcase classname="tests.gateway.test_homeassistant.TestWsUrlConstruction" name="test_https_to_wss" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestHookRegistryInit" name="test_empty_registry" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestDiscoverAndLoad" name="test_loads_valid_hook" time="0.005" /><testcase classname="tests.gateway.test_hooks.TestDiscoverAndLoad" name="test_skips_missing_hook_yaml" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestDiscoverAndLoad" name="test_skips_missing_handler_py" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestDiscoverAndLoad" name="test_skips_no_events" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestDiscoverAndLoad" name="test_skips_no_handle_function" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestDiscoverAndLoad" name="test_nonexistent_hooks_dir" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestDiscoverAndLoad" name="test_multiple_hooks" time="0.006" /><testcase classname="tests.gateway.test_hooks.TestEmit" name="test_emit_calls_sync_handler" time="0.005" /><testcase classname="tests.gateway.test_hooks.TestEmit" name="test_emit_calls_async_handler" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestEmit" name="test_wildcard_matching" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestEmit" name="test_no_handlers_for_event" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestEmit" name="test_handler_error_does_not_propagate" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestEmit" name="test_emit_default_context" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestEmitCollect" name="test_collects_sync_return_values" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestEmitCollect" name="test_collects_async_return_values" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestEmitCollect" name="test_drops_none_return_values" time="0.005" /><testcase classname="tests.gateway.test_hooks.TestEmitCollect" name="test_handler_exception_does_not_abort_chain" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestEmitCollect" name="test_wildcard_match_also_collected" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestEmitCollect" name="test_no_handlers_returns_empty_list" time="0.004" /><testcase classname="tests.gateway.test_hooks.TestEmitCollect" name="test_default_context" time="0.004" /><testcase classname="tests.gateway.test_insights_unicode_flags.TestInsightsUnicodeDashFlags" name="test_unicode_dash_normalized[--days 7---days 7]" time="0.004" /><testcase classname="tests.gateway.test_insights_unicode_flags.TestInsightsUnicodeDashFlags" name="test_unicode_dash_normalized[--source telegram---source telegram]" time="0.004" /><testcase classname="tests.gateway.test_insights_unicode_flags.TestInsightsUnicodeDashFlags" name="test_unicode_dash_normalized[\u2014days 7---days 7]" time="0.004" /><testcase classname="tests.gateway.test_insights_unicode_flags.TestInsightsUnicodeDashFlags" name="test_unicode_dash_normalized[\u2014source telegram---source telegram]" time="0.004" /><testcase classname="tests.gateway.test_insights_unicode_flags.TestInsightsUnicodeDashFlags" name="test_unicode_dash_normalized[\u2013days 7---days 7]" time="0.004" /><testcase classname="tests.gateway.test_insights_unicode_flags.TestInsightsUnicodeDashFlags" name="test_unicode_dash_normalized[\u2013source telegram---source telegram]" time="0.004" /><testcase classname="tests.gateway.test_insights_unicode_flags.TestInsightsUnicodeDashFlags" name="test_unicode_dash_normalized[\u2012days 7---days 7]" time="0.004" /><testcase classname="tests.gateway.test_insights_unicode_flags.TestInsightsUnicodeDashFlags" name="test_unicode_dash_normalized[\u2015days 7---days 7]" time="0.004" /><testcase classname="tests.gateway.test_insights_unicode_flags.TestInsightsUnicodeDashFlags" name="test_unicode_dash_normalized[\u2014days 30 \u2014source cli---days 30 --source cli]" time="0.004" /><testcase classname="tests.gateway.test_insights_unicode_flags.TestInsightsUnicodeDashFlags" name="test_regular_hyphens_unaffected" time="0.004" /><testcase classname="tests.gateway.test_insights_unicode_flags.TestInsightsUnicodeDashFlags" name="test_bare_number_still_works" time="0.004" /><testcase classname="tests.gateway.test_insights_unicode_flags.TestInsightsUnicodeDashFlags" name="test_no_flags_unchanged" time="0.004" /><testcase classname="tests.gateway.test_internal_event_bypass_pairing" name="test_notify_on_complete_sets_internal_flag" time="0.010" /><testcase classname="tests.gateway.test_internal_event_bypass_pairing" name="test_internal_event_bypasses_authorization" time="0.009" /><testcase classname="tests.gateway.test_internal_event_bypass_pairing" name="test_internal_event_does_not_trigger_pairing" time="0.009" /><testcase classname="tests.gateway.test_internal_event_bypass_pairing" name="test_notify_on_complete_preserves_user_identity" time="0.010" /><testcase classname="tests.gateway.test_internal_event_bypass_pairing" name="test_notify_on_complete_uses_session_store_origin_for_group_topic" time="0.133" /><testcase classname="tests.gateway.test_internal_event_bypass_pairing" name="test_none_user_id_skips_pairing" time="0.010" /><testcase classname="tests.gateway.test_internal_event_bypass_pairing" name="test_none_user_id_does_not_generate_pairing_code" time="0.009" /><testcase classname="tests.gateway.test_internal_event_bypass_pairing" name="test_non_internal_event_without_user_triggers_pairing" time="0.009" /><testcase classname="tests.gateway.test_interrupt_key_match.TestInterruptKeyConsistency" name="test_session_key_differs_from_chat_id_for_dm" time="0.004" /><testcase classname="tests.gateway.test_interrupt_key_match.TestInterruptKeyConsistency" name="test_session_key_differs_from_chat_id_for_group" time="0.004" /><testcase classname="tests.gateway.test_interrupt_key_match.TestInterruptKeyConsistency" name="test_has_pending_interrupt_requires_session_key" time="0.004" /><testcase classname="tests.gateway.test_interrupt_key_match.TestInterruptKeyConsistency" name="test_get_pending_message_requires_session_key" time="0.004" /><testcase classname="tests.gateway.test_interrupt_key_match.TestInterruptKeyConsistency" name="test_handle_message_stores_under_session_key" time="0.004" /><testcase classname="tests.gateway.test_interrupt_key_match.TestInterruptKeyConsistency" name="test_photo_followup_is_queued_without_interrupt" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCProtocolHelpers" name="test_parse_simple_command" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCProtocolHelpers" name="test_parse_prefixed_message" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCProtocolHelpers" name="test_parse_numeric_reply" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCProtocolHelpers" name="test_parse_nick_collision" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCProtocolHelpers" name="test_extract_nick_full_prefix" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCProtocolHelpers" name="test_extract_nick_bare" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterInit" name="test_init_from_env" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterInit" name="test_init_from_config_extra" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterInit" name="test_env_overrides_config" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterSend" name="test_send_not_connected" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterSend" name="test_send_success" time="0.306" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterSend" name="test_send_splits_long_messages" time="0.909" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMessageParsing" name="test_handle_ping" time="0.009" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMessageParsing" name="test_handle_welcome" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMessageParsing" name="test_handle_nick_collision" time="0.006" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMessageParsing" name="test_handle_addressed_channel_message" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMessageParsing" name="test_ignores_unaddressed_channel_message" time="0.006" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMessageParsing" name="test_handle_dm" time="0.006" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMessageParsing" name="test_ignores_own_messages" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMessageParsing" name="test_ctcp_action_converted" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMessageParsing" name="test_allowed_users_case_insensitive" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMessageParsing" name="test_unauthorized_user_blocked" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMessageParsing" name="test_nick_collision_retry" time="0.006" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterSplitting" name="test_split_respects_byte_limit" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterSplitting" name="test_split_prefers_word_boundary" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCProtocolHelpersExtra" name="test_parse_malformed_no_space" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCProtocolHelpersExtra" name="test_parse_empty" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMarkdown" name="test_strip_bold" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMarkdown" name="test_strip_italic" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMarkdown" name="test_strip_code" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMarkdown" name="test_strip_link" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCAdapterMarkdown" name="test_strip_image" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCRequirements" name="test_check_requirements_with_env" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCRequirements" name="test_check_requirements_missing_server" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCRequirements" name="test_check_requirements_missing_channel" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCRequirements" name="test_validate_config_from_extra" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCRequirements" name="test_validate_config_missing" time="0.004" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCPluginRegistration" name="test_register_adds_to_registry" time="0.006" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCStandaloneSend" name="test_standalone_send_completes_handshake_and_sends_privmsg" time="0.305" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCStandaloneSend" name="test_standalone_send_returns_error_when_unconfigured" time="0.009" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCStandaloneSend" name="test_standalone_send_returns_error_on_registration_timeout" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCStandaloneSend" name="test_standalone_send_rejects_crlf_in_chat_id" time="0.005" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCStandaloneSend" name="test_standalone_send_strips_crlf_from_message_body" time="0.306" /><testcase classname="tests.gateway.test_irc_adapter.TestIRCStandaloneSend" name="test_standalone_send_joins_channel_before_privmsg" time="0.309" /><testcase classname="tests.gateway.test_kanban_notifier" name="test_kanban_notifier_dedupes_board_slugs_pointing_to_same_db" time="0.016" /><testcase classname="tests.gateway.test_kanban_notifier" name="test_kanban_notifier_claim_prevents_second_watcher_send" time="0.013" /><testcase classname="tests.gateway.test_kanban_notifier" name="test_kanban_notifier_rewinds_claim_if_adapter_disconnects" time="0.013" /><testcase classname="tests.gateway.test_kanban_notifier" name="test_kanban_db_path_is_test_isolated_from_real_home" time="0.009" /><testcase classname="tests.gateway.test_kanban_notifier" name="test_kanban_notifier_rewinds_claim_on_send_exception" time="0.011" /><testcase classname="tests.gateway.test_kanban_notifier" name="test_notifier_redelivers_same_kind_on_dispatch_cycle" time="0.013" /><testcase classname="tests.gateway.test_kanban_notifier_watcher_dispatch_gate" name="test_notifier_watcher_skips_when_dispatch_disabled" time="0.006" /><testcase classname="tests.gateway.test_kanban_notifier_watcher_dispatch_gate" name="test_notifier_watcher_env_override_disables" time="0.006" /><testcase classname="tests.gateway.test_kanban_notifier_watcher_dispatch_gate" name="test_notifier_watcher_runs_when_dispatch_enabled" time="0.006" /><testcase classname="tests.gateway.test_kanban_watchers_mixin" name="test_mixin_defines_kanban_methods" time="0.005" /><testcase classname="tests.gateway.test_kanban_watchers_mixin" name="test_gateway_runner_inherits_mixin" time="0.005" /><testcase classname="tests.gateway.test_kanban_watchers_mixin" name="test_watcher_loops_are_coroutines" time="0.005" /><testcase classname="tests.gateway.test_kanban_watchers_mixin" name="test_singleton_dispatcher_lock_is_exclusive" time="0.005" /><testcase classname="tests.gateway.test_keep_typing_timeout.TestKeepTypingTimeoutPerTick" name="test_slow_send_typing_does_not_block_cadence" time="3.010" /><testcase classname="tests.gateway.test_keep_typing_timeout.TestKeepTypingTimeoutPerTick" name="test_fast_send_typing_still_gets_awaited" time="1.293" /><testcase classname="tests.gateway.test_keep_typing_timeout.TestKeepTypingTimeoutPerTick" name="test_send_typing_exception_does_not_kill_loop" time="1.161" /><testcase classname="tests.gateway.test_keep_typing_timeout.TestKeepTypingTimeoutPerTick" name="test_paused_chat_skips_send_typing" time="1.162" /><testcase classname="tests.gateway.test_keep_typing_timeout.TestKeepTypingTimeoutPerTick" name="test_stop_typing_refresh_blocks_late_cancel_tick" time="0.009" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_daily_accepts_natural_prose_and_preserves_locked_copy" time="0.006" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_weekly_rewrites_only_interpretation_and_rationale" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_adaptive_rewrites_review_copy_but_not_decision_or_delivery_state" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_new_number_or_internal_code_rejects_the_whole_response" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_malformed_or_partial_response_falls_back_exactly" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_humanize_makes_one_request_and_provider_failure_is_canonical" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_validated_coach_uses_one_free_polish_call_and_keeps_guidance" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_validated_coach_survives_failed_polish_without_semantic_loss" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_validated_coach_rejects_stale_polish_binding" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_accepts_natural_korean_rewrite" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_rejects_finite_variant_selection" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_numeric_integrity_falls_back_on_new_polish_number" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_polish_rejects_same_numbers_reassigned_to_wrong_fields" time="0.006" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_polish_rejects_wrong_response_revision_identity" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_polish_rejects_invented_sensitive_fact" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_polish_rejects_introduced_identity" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_prohibited_content" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_medication_action_variants[\ubcf5\uc6a9 \uc911\uc778 \uc57d\uc740 \uc911\ub2e8\ud569\ub2c8\ub2e4.]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_medication_action_variants[\uc57d\uc744 \uc911\ub2e8\ud558\uc138\uc694.]" time="0.006" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_medication_action_variants[\uc778\uc290\ub9b0\uc744 \ud22c\uc5ec\ud558\uc138\uc694.]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_medication_action_variants[\ud608\uc555\uc57d\uc740 \ud53c\ud558\uc138\uc694.]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_medication_action_variants[\ucc98\ubc29\uc57d \uc6a9\ub7c9\uc744 \ub298\ub9ac\uc138\uc694.]" time="0.006" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_medication_action_variants[\ud638\ub974\ubaac\uc81c\ub97c \ub450 \ubc30\ub85c \ubcf5\uc6a9\ud558\uc138\uc694.]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_semantic_safety_bypasses[\ucc98\ubc29\ubc1b\uc740 \uac83\uc740 \uc624\ub298\ubd80\ud130 \ub4dc\uc2dc\uc9c0 \ub9c8\uc138\uc694.]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_semantic_safety_bypasses[\uc624\ub298\uc740 \uc544\ubb34\uac83\ub3c4 \uba39\uc9c0 \ub9c8\uc138\uc694.]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_semantic_safety_bypasses[\uc218\ubd84 \uc12d\ucde8\ub97c \ud558\uc9c0 \ub9c8\uc138\uc694.]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_semantic_safety_bypasses[\uac00\uc2b4 \ud1b5\uc99d\uc774 \uc788\uc5b4\ub3c4 119\uc5d0 \uc804\ud654\ud558\uc9c0 \ub9d0\uace0 \ubcd1\uc6d0\uc5d0 \uac00\uc9c0 \ub9c8\uc138\uc694.]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_unsupported_claims[\uac11\uc0c1\uc120 \uae30\ub2a5 \uc800\ud558\uc99d\uc774 \ud655\uc778\ub410\uc2b5\ub2c8\ub2e4.]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_unsupported_claims[\ud64d\uae38\ub3d9 \uace0\uac1d\ub2d8\uc758 \ud558\ub8e8 \ubaa9\ud45c\ub97c \uc870\uc815\ud569\ub2c8\ub2e4.]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_unsupported_claims[\uacc4\uc815 \ube44\ubc00\ubc88\ud638\ub97c \ucf54\uce58\uc5d0\uac8c \ubcf4\ub0b4\uc138\uc694.]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_coach_v2_free_polish_falls_back_on_emergency_care_bypass" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_finite_pipeline_allows_three_to_five_approved_principles[3]" time="0.006" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_finite_pipeline_allows_three_to_five_approved_principles[4]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_finite_pipeline_allows_three_to_five_approved_principles[5]" time="0.005" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_finite_pipeline_rejects_principle_counts_outside_bounds[2]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_finite_pipeline_rejects_principle_counts_outside_bounds[6]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_forged_finite_ids_fail_closed_without_retry[coach-atom_ids]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_forged_finite_ids_fail_closed_without_retry[coach-principle_ids]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_forged_finite_ids_fail_closed_without_retry[polish-variant_id]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_oversized_stage_json_fails_closed[coach]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_oversized_stage_json_fails_closed[polish]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_stage_one_exception_returns_canonical_without_retry" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_stage_two_exception_returns_validated_coach_without_retry" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_processing_gate_revocation_between_stages_returns_canonical" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_processing_gate_revocation_before_final_output_returns_canonical" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_pipeline_receipt_contains_only_opaque_ids_and_digests" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_stage_one_response_template_requires_exact_hard_identity_copy" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_stage_one_requires_exact_hard_identity_field[missing]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_stage_one_requires_exact_hard_identity_field[alias]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_stage_two_exception_rechecks_final_processing_gate" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_unbounded_receipt_ids_fail_before_model_calls" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_extra_stage_slot_is_rejected" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_mismatched_playbook_or_revision_is_zero_call_canonical[surface]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_mismatched_playbook_or_revision_is_zero_call_canonical[revision]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_malformed_surrogate_response_falls_back_without_raising" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_external_revision_binding_is_explicit_and_exact[None]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_external_revision_binding_is_explicit_and_exact[]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_external_revision_binding_is_explicit_and_exact[external_binding2]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_external_revision_binding_is_explicit_and_exact[1]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_external_revision_binding_is_explicit_and_exact[bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_malformed_grounding_fields_fail_closed_without_hashing_or_calls[approved_principles-None]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_malformed_grounding_fields_fail_closed_without_hashing_or_calls[verified_memory-None]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_malformed_grounding_fields_fail_closed_without_hashing_or_calls[source_cluster_ids-value2]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_malformed_grounding_fields_fail_closed_without_hashing_or_calls[excluded_risk_ids-None]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_malformed_grounding_fields_fail_closed_without_hashing_or_calls[revision_binding_digest-None]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_malformed_grounding_fields_fail_closed_without_hashing_or_calls[decision_id-customer_001]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_malformed_grounding_fields_fail_closed_without_hashing_or_calls[playbook_id-None]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_verified_memory_temporal_grammar_requires_real_iso_values[memory0]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_verified_memory_temporal_grammar_requires_real_iso_values[memory1]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_verified_memory_temporal_grammar_requires_real_iso_values[memory2]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_verified_memory_temporal_grammar_requires_real_iso_values[memory3]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_verified_memory_temporal_grammar_requires_real_iso_values[memory4]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_adaptive_projection_requires_the_exact_frozen_class_identity" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_adaptive_projection_allows_optional_averages_and_rate_to_be_none" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_adaptive_projection_rejects_forged_field_types_and_revision[updates0]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_adaptive_projection_rejects_forged_field_types_and_revision[updates1]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_adaptive_projection_rejects_forged_field_types_and_revision[updates2]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_adaptive_projection_rejects_forged_field_types_and_revision[updates3]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_adaptive_projection_rejects_forged_field_types_and_revision[updates4]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_adaptive_projection_rejects_forged_field_types_and_revision[updates5]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_adaptive_projection_rejects_forged_field_types_and_revision[updates6]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_invalid_surface_or_canonical_is_canonical_with_zero_calls[None-\uc624\ub298 \uccb4\ud06c\uc778 \uc644\ub8cc\n\n- \uccb4\uc911: 78.10kg\n- \uc12d\ucde8: 2,310kcal\n\n\uc800\uc7a5\ub41c \uc624\ub298 \uae30\ub85d\uc744 \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4.\n\n\uc624\ub298 \ud560 \uc77c\n\n- \ud604\uc7ac \uc2dd\uc0ac\ub7c9 \uc720\uc9c0]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_invalid_surface_or_canonical_is_canonical_with_zero_calls[daily-None]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_invalid_surface_or_canonical_is_canonical_with_zero_calls[daily-canonical2]" time="0.004" /><testcase classname="tests.gateway.test_korean_humanizer" name="test_invalid_surface_or_canonical_is_canonical_with_zero_calls[unknown-\uc624\ub298 \uccb4\ud06c\uc778 \uc644\ub8cc\n\n- \uccb4\uc911: 78.10kg\n- \uc12d\ucde8: 2,310kcal\n\n\uc800\uc7a5\ub41c \uc624\ub298 \uae30\ub85d\uc744 \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4.\n\n\uc624\ub298 \ud560 \uc77c\n\n- \ud604\uc7ac \uc2dd\uc0ac\ub7c9 \uc720\uc9c0]" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSignature" name="test_valid_signature_passes" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSignature" name="test_tampered_body_rejected" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSignature" name="test_wrong_secret_rejected" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSignature" name="test_empty_signature_rejected" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSignature" name="test_empty_secret_rejected" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSignature" name="test_garbage_signature_rejected" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSourceResolution" name="test_user_source" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSourceResolution" name="test_group_source" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSourceResolution" name="test_room_source" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSourceResolution" name="test_unknown_source_falls_back_to_dm" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSourceResolution" name="test_empty_source" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestAllowlist" name="test_allow_all_short_circuits" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestAllowlist" name="test_user_in_allowlist_passes" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestAllowlist" name="test_user_not_in_allowlist_rejected" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestAllowlist" name="test_group_uses_group_list_not_user_list" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestAllowlist" name="test_room_uses_room_list" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestAllowlist" name="test_unknown_type_rejected" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestDedup" name="test_first_event_not_duplicate" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestDedup" name="test_repeat_event_marked_duplicate" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestDedup" name="test_blank_id_not_treated_as_duplicate" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestDedup" name="test_lru_eviction_under_pressure" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRequestCache" name="test_register_pending_is_pending" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRequestCache" name="test_set_ready_transitions" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRequestCache" name="test_set_error_transitions" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRequestCache" name="test_mark_delivered_from_ready" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRequestCache" name="test_mark_delivered_from_error" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRequestCache" name="test_set_ready_on_delivered_is_noop" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRequestCache" name="test_find_pending_for_chat" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMarkdownAndChunking" name="test_bold_stripped" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMarkdownAndChunking" name="test_italic_stripped" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMarkdownAndChunking" name="test_inline_code_unfenced" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMarkdownAndChunking" name="test_link_preserved_with_url" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMarkdownAndChunking" name="test_heading_prefix_stripped" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMarkdownAndChunking" name="test_bullet_marker_replaced" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMarkdownAndChunking" name="test_code_fence_content_kept" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMarkdownAndChunking" name="test_split_short_returns_single_chunk" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMarkdownAndChunking" name="test_split_long_chunks_at_paragraph_boundary" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMarkdownAndChunking" name="test_split_caps_at_five_chunks" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSendRouting" name="test_system_bypass_recognized" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSendRouting" name="test_send_uses_reply_when_token_present" time="0.005" /><testcase classname="tests.gateway.test_line_plugin.TestSendRouting" name="test_send_falls_back_to_push_when_no_token" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSendRouting" name="test_send_falls_back_to_push_when_reply_fails" time="0.005" /><testcase classname="tests.gateway.test_line_plugin.TestSendRouting" name="test_send_returns_failure_when_push_fails" time="0.005" /><testcase classname="tests.gateway.test_line_plugin.TestSendRouting" name="test_send_pending_button_caches_response" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSendRouting" name="test_send_system_bypass_skips_postback_cache" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestSendRouting" name="test_send_caps_messages_per_call_at_five" time="0.005" /><testcase classname="tests.gateway.test_line_plugin.TestSendRouting" name="test_format_message_strips_markdown" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRegister" name="test_register_calls_register_platform" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRegister" name="test_register_advertises_required_env" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRegister" name="test_register_wires_allowlist_envs" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRegister" name="test_register_wires_cron_home_channel" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRegister" name="test_register_provides_standalone_sender" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRegister" name="test_register_provides_env_enablement" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRegister" name="test_register_factory_yields_line_adapter" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestRegister" name="test_max_message_length_below_line_per_bubble_limit" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestEnvEnablement" name="test_returns_none_without_credentials" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestEnvEnablement" name="test_returns_dict_with_credentials" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestEnvEnablement" name="test_seeds_port_from_env" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestEnvEnablement" name="test_seeds_public_url" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestStandaloneSend" name="test_missing_token_returns_error" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestStandaloneSend" name="test_missing_chat_id_returns_error" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestStandaloneSend" name="test_pushes_via_client_when_credentials_present" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestPostbackButtonShape" name="test_template_buttons_structure" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestPostbackButtonShape" name="test_text_truncated_to_160" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestPostbackButtonShape" name="test_alt_text_truncated_to_400" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestCheckRequirements" name="test_rejects_without_token" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestCheckRequirements" name="test_rejects_without_secret" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestValidateConfig" name="test_validates_from_extra" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestValidateConfig" name="test_rejects_empty_config" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestAdapterInit" name="test_init_from_config_extra" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestAdapterInit" name="test_env_overrides_extra" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestAdapterInit" name="test_csv_allowlist_parsed" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestAdapterInit" name="test_get_chat_info_infers_type_from_prefix" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMessageTypeMapping" name="test_image_event_not_attributeerror_regression" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMessageTypeMapping" name="test_every_line_type_maps_to_correct_enum" time="0.004" /><testcase classname="tests.gateway.test_line_plugin.TestMessageTypeMapping" name="test_unknown_type_falls_back_to_text" time="0.004" /><testcase classname="tests.gateway.test_load_transcript_db_only" name="test_load_transcript_returns_db_messages_when_no_jsonl" time="0.006" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_transient_classifier_matches_known_network_errors[TimedOut]" time="0.004" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_transient_classifier_matches_known_network_errors[NetworkError]" time="0.004" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_transient_classifier_matches_known_network_errors[ConnectError]" time="0.004" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_transient_classifier_matches_known_network_errors[ReadTimeout]" time="0.004" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_transient_classifier_matches_known_network_errors[PoolTimeout]" time="0.004" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_transient_classifier_matches_known_network_errors[ClientConnectorError]" time="0.004" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_transient_classifier_rejects_unrelated_errors" time="0.004" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_transient_classifier_unwraps_cause_chain" time="0.004" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_transient_classifier_unwraps_context_chain" time="0.004" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_transient_classifier_does_not_infinite_loop_on_cyclic_cause" time="0.004" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_handler_swallows_transient_error_and_logs_warning" time="0.005" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_handler_delegates_unknown_errors_to_default" time="0.004" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_handler_tolerates_missing_exception_key" time="0.004" /><testcase classname="tests.gateway.test_loop_exception_handler" name="test_unhandled_transient_error_in_task_does_not_propagate_to_loop" time="0.221" /><testcase classname="tests.gateway.test_matrix.TestMatrixConfigLoading" name="test_apply_env_overrides_with_access_token" time="0.053" /><testcase classname="tests.gateway.test_matrix.TestMatrixConfigLoading" name="test_apply_env_overrides_with_password" time="0.052" /><testcase classname="tests.gateway.test_matrix.TestMatrixConfigLoading" name="test_matrix_not_loaded_without_creds" time="0.053" /><testcase classname="tests.gateway.test_matrix.TestMatrixConfigLoading" name="test_matrix_encryption_flag" time="0.053" /><testcase classname="tests.gateway.test_matrix.TestMatrixConfigLoading" name="test_matrix_e2ee_mode_optional_sets_config" time="0.052" /><testcase classname="tests.gateway.test_matrix.TestMatrixConfigLoading" name="test_matrix_encryption_default_off" time="0.054" /><testcase classname="tests.gateway.test_matrix.TestMatrixConfigLoading" name="test_matrix_home_room" time="0.053" /><testcase classname="tests.gateway.test_matrix.TestMatrixConfigLoading" name="test_matrix_user_id_stored_in_extra" time="0.053" /><testcase classname="tests.gateway.test_matrix.TestMatrixTypingIndicator" name="test_stop_typing_clears_matrix_typing_state" time="0.008" /><testcase classname="tests.gateway.test_matrix.TestMatrixTypingIndicator" name="test_stop_typing_no_client_is_noop" time="0.008" /><testcase classname="tests.gateway.test_matrix.TestMatrixTypingIndicator" name="test_stop_typing_suppresses_exceptions" time="0.006" /><testcase classname="tests.gateway.test_matrix.TestMatrixMxcToHttp" name="test_basic_mxc_conversion" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixMxcToHttp" name="test_mxc_with_different_server" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMxcToHttp" name="test_non_mxc_url_passthrough" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMxcToHttp" name="test_mxc_uses_client_v1_endpoint" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDmDetection" name="test_room_in_m_direct_is_dm" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDmDetection" name="test_unknown_room_not_in_cache" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDmDetection" name="test_refresh_dm_cache_with_m_direct" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDmDetection" name="test_m_direct_room_is_dm" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixDmDetection" name="test_named_two_member_room_is_not_dm" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixDmDetection" name="test_named_room_overrides_stale_dm_cache" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixDmDetection" name="test_canonical_alias_used_when_name_missing" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixDmDetection" name="test_non_string_m_direct_entries_ignored" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixReplyFallbackStripping" name="test_simple_reply_fallback" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixReplyFallbackStripping" name="test_multiline_reply_fallback" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixReplyFallbackStripping" name="test_no_reply_fallback_preserved" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixReplyFallbackStripping" name="test_quote_without_reply_preserved" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixReplyFallbackStripping" name="test_empty_fallback_separator" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixReplyFallbackStripping" name="test_multiline_response_after_fallback" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixBangCommandAlias" name="test_known_bang_command_normalizes_to_slash_command" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixBangCommandAlias" name="test_unknown_bang_text_is_not_treated_as_command" time="0.051" /><testcase classname="tests.gateway.test_matrix.TestMatrixBangCommandAlias" name="test_bang_model_reaches_gateway_as_slash_command" time="0.008" /><testcase classname="tests.gateway.test_matrix.TestMatrixBangCommandAlias" name="test_bang_queue_preserves_arguments" time="0.006" /><testcase classname="tests.gateway.test_matrix.TestMatrixBangCommandAlias" name="test_unknown_bang_text_stays_normal_text" time="0.051" /><testcase classname="tests.gateway.test_matrix.TestMatrixBangCommandAlias" name="test_bang_command_bypasses_room_mention_requirement" time="0.007" /><testcase classname="tests.gateway.test_matrix.TestMatrixBangCommandAlias" name="test_slash_command_bypasses_room_mention_requirement" time="0.006" /><testcase classname="tests.gateway.test_matrix.TestMatrixBangCommandAlias" name="test_unknown_bang_text_does_not_bypass_room_mention_requirement" time="0.050" /><testcase classname="tests.gateway.test_matrix.TestMatrixBangCommandAlias" name="test_bang_alias_underscore_resolves_to_hyphen_form" time="0.054" /><testcase classname="tests.gateway.test_matrix.TestMatrixBangCommandAlias" name="test_bang_skill_command_normalizes" time="0.052" /><testcase classname="tests.gateway.test_matrix.TestMatrixBangCommandAlias" name="test_bang_command_in_quoted_reply_normalizes" time="0.007" /><testcase classname="tests.gateway.test_matrix.TestMatrixBangCommandAlias" name="test_slash_command_in_quoted_reply_normalizes" time="0.006" /><testcase classname="tests.gateway.test_matrix.TestMatrixThreadDetection" name="test_thread_id_from_m_relates_to" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixThreadDetection" name="test_no_thread_for_reply" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixThreadDetection" name="test_no_thread_for_edit" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixThreadDetection" name="test_empty_relates_to" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixFormatMessage" name="test_image_markdown_stripped" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixFormatMessage" name="test_regular_markdown_preserved" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixFormatMessage" name="test_plain_text_unchanged" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixFormatMessage" name="test_multiple_images_stripped" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRenderingPayloads" name="test_render_plain_and_html_body" time="0.014" /><testcase classname="tests.gateway.test_matrix.TestMatrixRenderingPayloads" name="test_thread_payload_uses_m_thread_with_reply_fallback" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixRenderingPayloads" name="test_thread_payload_preserves_explicit_reply_target" time="0.006" /><testcase classname="tests.gateway.test_matrix.TestMatrixRenderingPayloads" name="test_edit_payload_uses_m_replace" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixRenderingPayloads" name="test_long_response_split_preserves_thread_context" time="0.006" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_bold_conversion" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_italic_conversion" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_inline_code" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_plain_text_returns_html" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_matrix_markdown_strips_script_tag" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_matrix_markdown_strips_inline_event_handlers" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_matrix_markdown_rejects_javascript_links" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_matrix_markdown_rejects_file_links" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_matrix_markdown_rejects_ftp_links" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_matrix_markdown_rejects_blob_links" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_matrix_markdown_rejects_obfuscated_javascript_links" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_matrix_markdown_preserves_code_fences" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownToHtml" name="test_matrix_markdown_preserves_table_structure" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDisplayName" name="test_get_display_name_from_state_store" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixDisplayName" name="test_get_display_name_fallback_to_localpart" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixDisplayName" name="test_get_display_name_no_client" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixModuleImport" name="test_module_importable_without_mautrix" time="0.083" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequirements" name="test_check_requirements_with_token" time="0.007" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequirements" name="test_check_requirements_without_creds" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequirements" name="test_check_requirements_without_homeserver" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequirements" name="test_check_requirements_encryption_true_no_e2ee_deps" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequirements" name="test_check_requirements_e2ee_optional_no_deps_ok" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequirements" name="test_check_requirements_encryption_false_no_e2ee_deps_ok" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequirements" name="test_check_requirements_encryption_true_with_e2ee_deps" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequirements" name="test_check_e2ee_deps_requires_asyncpg" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequirements" name="test_check_e2ee_deps_requires_aiosqlite" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequirements" name="test_check_requirements_runs_lazy_install_when_partial" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixAccessTokenAuth" name="test_connect_with_access_token_and_encryption" time="0.008" /><testcase classname="tests.gateway.test_matrix.TestDeviceKeyReVerification" name="test_verify_fails_when_server_keys_mismatch_after_upload" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixE2EEHardFail" name="test_connect_fails_when_encryption_true_but_no_e2ee_deps" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixE2EEHardFail" name="test_connect_continues_when_e2ee_optional_but_no_deps" time="0.007" /><testcase classname="tests.gateway.test_matrix.TestMatrixE2EEHardFail" name="test_connect_fails_when_crypto_setup_raises" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixDeviceId" name="test_device_id_from_config_extra" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDeviceId" name="test_device_id_from_env" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDeviceId" name="test_device_id_config_takes_precedence_over_env" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDeviceId" name="test_connect_uses_configured_device_id_over_whoami" time="0.007" /><testcase classname="tests.gateway.test_matrix.TestMatrixPasswordLoginDeviceId" name="test_password_login_uses_device_id" time="0.007" /><testcase classname="tests.gateway.test_matrix.TestMatrixDeviceIdConfig" name="test_device_id_in_config_extra" time="0.050" /><testcase classname="tests.gateway.test_matrix.TestMatrixDeviceIdConfig" name="test_device_id_not_set_when_env_empty" time="0.051" /><testcase classname="tests.gateway.test_matrix.TestMatrixSyncLoop" name="test_sync_loop_dispatches_events_and_stores_token" time="0.007" /><testcase classname="tests.gateway.test_matrix.TestMatrixSyncLoop" name="test_sync_loop_reconciles_pending_invites" time="0.006" /><testcase classname="tests.gateway.test_matrix.TestMatrixSyncLoop" name="test_dispatch_sync_accepts_async_handle_sync" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixSyncLoop" name="test_sync_loop_dispatches_registered_room_message_handler" time="0.006" /><testcase classname="tests.gateway.test_matrix.TestMatrixSyncLoop" name="test_connect_receives_dm_from_initial_sync_dispatch" time="0.006" /><testcase classname="tests.gateway.test_matrix.TestMatrixSyncLoop" name="test_room_message_after_invite_join_is_received" time="0.006" /><testcase classname="tests.gateway.test_matrix.TestMatrixSyncLoop" name="test_seconds_timestamp_is_not_treated_as_milliseconds" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixUploadAndSend" name="test_upload_unencrypted_room_uses_plain_url" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixUploadAndSend" name="test_upload_encrypted_room_uses_file_payload" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixUploadAndSend" name="test_upload_rejects_oversized_file" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixUploadAndSend" name="test_media_preserves_caption_and_thread" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixUploadAndSend" name="test_send_multiple_images_preserves_logical_batch_order_and_thread" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixDiagnostics" name="test_diagnostics_redacts_credentials_and_reports_status" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDiagnostics" name="test_matrix_recovery_key_is_never_logged" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDiagnostics" name="test_matrix_recovery_key_output_file_is_0600" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDiagnostics" name="test_matrix_recovery_key_bootstrap_skips_without_output_file" time="0.007" /><testcase classname="tests.gateway.test_matrix.TestMatrixDiagnostics" name="test_matrix_recovery_key_bootstrap_skips_existing_output_file" time="0.008" /><testcase classname="tests.gateway.test_matrix.TestMatrixDiagnostics" name="test_matrix_diagnostics_redacts_recovery_key" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDiagnostics" name="test_capability_matrix_is_declared_for_docs" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDiagnostics" name="test_matrix_capability_claims_match_adapter_surfaces" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixDiagnostics" name="test_matrix_docs_capability_table_matches_declaration" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixEncryptedSendFallback" name="test_send_retries_after_e2ee_error" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestJoinedRoomsReference" name="test_joined_rooms_reference_preserved_after_reassignment" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixEncryptedEventHandler" name="test_connect_registers_encrypted_event_handler_when_encryption_on" time="0.008" /><testcase classname="tests.gateway.test_matrix.TestMatrixEncryptedEventHandler" name="test_connect_fails_on_stale_otk_conflict" time="0.006" /><testcase classname="tests.gateway.test_matrix.TestMatrixDisconnect" name="test_disconnect_closes_api_session" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixDisconnect" name="test_disconnect_handles_session_close_failure" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixDisconnect" name="test_disconnect_without_client" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlSecurity" name="test_script_injection_in_header" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlSecurity" name="test_script_injection_in_plain_text" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlSecurity" name="test_img_onerror_in_blockquote" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlSecurity" name="test_script_in_list_item" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlSecurity" name="test_script_in_ordered_list" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlSecurity" name="test_javascript_uri_blocked" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlSecurity" name="test_data_uri_blocked" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlSecurity" name="test_vbscript_uri_blocked" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlSecurity" name="test_link_text_html_injection" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlSecurity" name="test_link_href_attribute_breakout" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlSecurity" name="test_html_injection_in_bold" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlSecurity" name="test_html_injection_in_italic" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlFormatting" name="test_fenced_code_block" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlFormatting" name="test_fenced_code_block_no_lang" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlFormatting" name="test_code_block_html_escaped" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlFormatting" name="test_headers" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlFormatting" name="test_unordered_list" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlFormatting" name="test_ordered_list" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlFormatting" name="test_blockquote" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlFormatting" name="test_horizontal_rule" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlFormatting" name="test_strikethrough" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlFormatting" name="test_links_preserved" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixMarkdownHtmlFormatting" name="test_complex_mixed_document" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixLinkSanitization" name="test_safe_https_url" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixLinkSanitization" name="test_javascript_blocked" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixLinkSanitization" name="test_data_blocked" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixLinkSanitization" name="test_vbscript_blocked" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixLinkSanitization" name="test_quotes_escaped" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixReactions" name="test_send_reaction" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixReactions" name="test_send_reaction_no_client" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixReactions" name="test_on_processing_start_sends_eyes" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixReactions" name="test_on_processing_complete_sends_check" time="0.035" /><testcase classname="tests.gateway.test_matrix.TestMatrixReactions" name="test_on_processing_complete_sends_cross_on_failure" time="0.036" /><testcase classname="tests.gateway.test_matrix.TestMatrixReactions" name="test_on_processing_complete_cancelled_sends_no_terminal_reaction" time="0.007" /><testcase classname="tests.gateway.test_matrix.TestMatrixReactions" name="test_on_processing_complete_no_pending_reaction" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixReactions" name="test_approval_reaction_cleanup_is_delayed" time="0.035" /><testcase classname="tests.gateway.test_matrix.TestMatrixReactions" name="test_reactions_disabled" time="0.008" /><testcase classname="tests.gateway.test_matrix.TestMatrixReadReceipts" name="test_accepted_message_schedules_read_receipt" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixReadReceipts" name="test_send_read_receipt" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixReadReceipts" name="test_send_read_receipt_falls_back_to_receipt_only" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixReadReceipts" name="test_read_receipt_no_client" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_image_only_filename_body_is_not_forwarded_as_text" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_image_caption_text_is_preserved" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_inbound_oversized_media_is_rejected" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_external_media_download_rejects_oversized_content_length" time="0.046" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_external_media_download_rejects_oversized_stream" time="0.008" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_external_media_download_rejects_unsafe_redirect" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_external_media_download_rejects_unsafe_initial_url" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_external_media_download_rejects_non_image_content_type" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_send_image_failure_log_redacts_signed_url" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_send_image_failure_response_does_not_expose_signed_url_query" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_send_image_failure_response_does_not_expose_signed_url_fragment" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_send_image_failure_response_preserves_caption" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_send_image_failure_log_still_redacts_signed_url" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_inbound_non_mxc_media_url_is_rejected" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixImageOnlyMediaNormalization" name="test_inbound_encrypted_non_mxc_media_url_is_rejected" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixRedaction" name="test_redact_message" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixRedaction" name="test_redact_no_client" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRoomManagement" name="test_create_room" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRoomManagement" name="test_invite_user" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixRoomManagement" name="test_create_room_no_client" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixPresence" name="test_set_presence_valid" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixPresence" name="test_set_presence_invalid_state" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixPresence" name="test_set_presence_no_client" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixSelfSenderFilter" name="test_exact_match_is_self" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixSelfSenderFilter" name="test_case_insensitive_match_is_self" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixSelfSenderFilter" name="test_whitespace_trimmed" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixSelfSenderFilter" name="test_different_user_is_not_self" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixSelfSenderFilter" name="test_empty_user_id_is_treated_as_self" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixSystemBridgeFilter" name="test_appservice_underscore_prefix_is_bridge" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixSystemBridgeFilter" name="test_empty_localpart_is_system" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixSystemBridgeFilter" name="test_empty_sender_is_system" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixSystemBridgeFilter" name="test_regular_user_is_not_bridge" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixSystemBridgeFilter" name="test_bot_account_is_not_bridge" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_own_sender_case_insensitive_dropped" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_bridge_sender_dropped_before_pairing" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_empty_sender_dropped" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_self_with_unresolved_user_id_dropped" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_regular_user_reaches_text_handler" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_unauthorized_user_reaches_text_handler" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_authorized_user_reaches_text_handler" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_unauthorized_room_is_dropped" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_dm_room_bypasses_allowed_room_gate" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_configured_bridge_pattern_is_dropped" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_notice_message_is_dropped_by_default" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_notice_message_can_be_enabled" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_duplicate_event_id_dropped" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_old_startup_event_dropped" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixOnRoomMessageFilter" name="test_seconds_timestamp_reaches_text_handler" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequireMention" name="test_require_mention_from_config_extra_false" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequireMention" name="test_require_mention_from_env_when_extra_unset" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequireMention" name="test_require_mention_config_takes_precedence_over_env" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixRequireMention" name="test_require_mention_false_allows_unmentioned_group_message" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixFreeResponsePolicy" name="test_free_response_room_allows_unmentioned_message" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixFreeResponsePolicy" name="test_non_free_room_requires_mention" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixClockSkewWarning" name="test_late_drops_emit_one_shot_clock_skew_warning" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixClockSkewWarning" name="test_initial_sync_drops_do_not_warn" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixClockSkewWarning" name="test_fewer_than_three_late_drops_do_not_warn" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixClockSkewWarning" name="test_varied_backfill_skews_do_not_warn" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixClockSkewWarning" name="test_state_reset_allows_warning_to_fire_again" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixDmAutoThread" name="test_dm_auto_thread_enabled_creates_thread" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixDmAutoThread" name="test_dm_auto_thread_disabled_no_thread" time="0.005" /><testcase classname="tests.gateway.test_matrix.TestMatrixProxyConfig" name="test_no_proxy_by_default" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixProxyConfig" name="test_matrix_proxy_env_var" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixProxyConfig" name="test_generic_proxy_fallback" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestMatrixProxyConfig" name="test_matrix_proxy_takes_priority" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestCreateMatrixSession" name="test_no_proxy_returns_trust_env_session" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestCreateMatrixSession" name="test_http_proxy_sets_default_proxy" time="0.004" /><testcase classname="tests.gateway.test_matrix.TestCreateMatrixSession" name="test_socks_proxy_uses_connector" time="0.006" /><testcase classname="tests.gateway.test_matrix_approval_reaction_fail_closed.TestApprovalReactionFailClosed" name="test_no_allowlist_no_allow_all_denies" time="0.004" /><testcase classname="tests.gateway.test_matrix_approval_reaction_fail_closed.TestApprovalReactionFailClosed" name="test_no_allowlist_allow_all_permits" time="0.005" /><testcase classname="tests.gateway.test_matrix_approval_reaction_fail_closed.TestApprovalReactionFailClosed" name="test_listed_sender_permits" time="0.005" /><testcase classname="tests.gateway.test_matrix_approval_reaction_fail_closed.TestApprovalReactionFailClosed" name="test_unlisted_sender_denies" time="0.004" /><testcase classname="tests.gateway.test_matrix_exec_approval.TestMatrixExecApprovalReactions" name="test_send_exec_approval_registers_prompt_and_seeds_reactions" time="0.004" /><testcase classname="tests.gateway.test_matrix_exec_approval.TestMatrixExecApprovalReactions" name="test_reaction_resolves_pending_approval" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestIsBotMentioned" name="test_full_user_id_in_body" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestIsBotMentioned" name="test_localpart_in_body" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestIsBotMentioned" name="test_localpart_case_insensitive" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestIsBotMentioned" name="test_matrix_pill_in_formatted_body" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestIsBotMentioned" name="test_no_mention" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestIsBotMentioned" name="test_empty_body" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestIsBotMentioned" name="test_partial_localpart_no_match" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestIsBotMentioned" name="test_m_mentions_user_ids_authoritative" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestIsBotMentioned" name="test_m_mentions_user_ids_with_body_mention" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestIsBotMentioned" name="test_m_mentions_user_ids_other_user_only" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestIsBotMentioned" name="test_m_mentions_user_ids_empty_list" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestIsBotMentioned" name="test_m_mentions_user_ids_none" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestStripMention" name="test_strip_full_user_id" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestStripMention" name="test_localpart_preserved" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestStripMention" name="test_localpart_in_path_preserved" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestStripMention" name="test_strip_localpart_when_explicit_at_mention" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestStripMention" name="test_does_not_strip_bare_localpart_word" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestStripMention" name="test_strip_returns_empty_for_mention_only" time="0.005" /><testcase classname="tests.gateway.test_matrix_mention.TestOutboundMentions" name="test_send_adds_matrix_mentions_and_formatted_body" time="0.005" /><testcase classname="tests.gateway.test_matrix_mention.TestOutboundMentions" name="test_send_dedupes_mentions_and_ignores_code_spans" time="0.005" /><testcase classname="tests.gateway.test_matrix_mention.TestOutboundMentions" name="test_edit_message_preserves_mentions" time="0.005" /><testcase classname="tests.gateway.test_matrix_mention.TestOutboundMentions" name="test_send_simple_notice_adds_mentions" time="0.005" /><testcase classname="tests.gateway.test_matrix_mention" name="test_require_mention_default_ignores_unmentioned" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_require_mention_default_processes_mentioned" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_require_mention_html_pill" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_require_mention_m_mentions_user_ids" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_require_mention_m_mentions_other_user_ignored" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_require_mention_dm_always_responds" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_dm_strips_full_mxid" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_dm_preserves_localpart_in_body" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_bare_mention_passes_empty_string" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_require_mention_free_response_room" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_require_mention_bot_participated_thread" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_require_mention_disabled" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_require_mention_disabled_skips_stripping" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_auto_thread_default_creates_thread" time="0.005" /><testcase classname="tests.gateway.test_matrix_mention" name="test_auto_thread_preserves_existing_thread" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_auto_thread_skips_dm" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_auto_thread_disabled" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_auto_thread_tracks_participation" time="0.005" /><testcase classname="tests.gateway.test_matrix_mention.TestThreadPersistence" name="test_empty_state_file" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestThreadPersistence" name="test_track_thread_persists" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestThreadPersistence" name="test_threads_survive_reload" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestThreadPersistence" name="test_cap_max_tracked_threads" time="0.005" /><testcase classname="tests.gateway.test_matrix_mention" name="test_dm_mention_thread_disabled_by_default" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_dm_mention_thread_creates_thread" time="0.005" /><testcase classname="tests.gateway.test_matrix_mention" name="test_dm_mention_thread_no_mention_no_thread" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention" name="test_dm_mention_thread_preserves_existing_thread" time="0.005" /><testcase classname="tests.gateway.test_matrix_mention" name="test_dm_mention_thread_tracks_participation" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestMatrixConfigBridge" name="test_yaml_bridge_sets_env_vars" time="0.005" /><testcase classname="tests.gateway.test_matrix_mention.TestMatrixConfigBridge" name="test_yaml_bridge_sets_dm_mention_threads" time="0.004" /><testcase classname="tests.gateway.test_matrix_mention.TestMatrixConfigBridge" name="test_env_vars_take_precedence_over_yaml" time="0.004" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_source_includes_room_name_topic_and_message_id" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_project_a_and_project_b_have_distinct_session_keys" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_project_b_prompt_contains_project_b_not_project_a" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_project_context_survives_sequential_messages" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_session_scope_auto_and_thread_preserve_synthetic_threads" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_project_context_survives_concurrent_messages" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_inbound_handler_emits_project_b_metadata_not_project_a" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_inbound_handler_keeps_project_a_and_b_distinct" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_room_scope_group_sessions_per_user_true_separates_users" time="0.004" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_room_scope_group_sessions_per_user_false_shares_room" time="0.004" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_status_reports_current_matrix_room_scope" time="0.018" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_resume_does_not_cross_rooms_by_default" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_resume_allows_same_room_session" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_resume_quoted_title_same_room" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_resume_quoted_title_cross_room_blocked" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_resume_malformed_quote_returns_helpful_error" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_resume_cross_room_requires_explicit_flag_and_warns" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_resume_lists_only_current_room_by_default" time="0.005" /><testcase classname="tests.gateway.test_matrix_project_context_isolation" name="test_matrix_resume_all_lists_room_names" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostProgressThreadRouting" name="test_top_level_mattermost_progress_uses_event_message_id" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostProgressThreadRouting" name="test_threaded_mattermost_progress_prefers_existing_thread_root" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostProgressThreadRouting" name="test_telegram_progress_does_not_use_message_id_as_thread_id" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostDisplayHygiene" name="test_mattermost_requires_platform_opt_in_for_interim_assistant_messages" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostDisplayHygiene" name="test_mattermost_platform_opt_in_can_enable_interim_assistant_messages" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostDisplayHygiene" name="test_mattermost_requires_platform_opt_in_for_thinking_progress" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostDisplayHygiene" name="test_mattermost_requires_platform_opt_in_for_show_reasoning" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostDisplayHygiene" name="test_mattermost_platform_opt_in_can_enable_show_reasoning" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostDisplayHygiene" name="test_global_thinking_progress_still_applies_to_other_platforms" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostConfigLoading" name="test_apply_env_overrides_mattermost" time="0.051" /><testcase classname="tests.gateway.test_mattermost.TestMattermostConfigLoading" name="test_mattermost_not_loaded_without_token" time="0.051" /><testcase classname="tests.gateway.test_mattermost.TestMattermostConfigLoading" name="test_mattermost_home_channel" time="0.052" /><testcase classname="tests.gateway.test_mattermost.TestMattermostConfigLoading" name="test_mattermost_url_warning_without_url" time="0.052" /><testcase classname="tests.gateway.test_mattermost.TestMattermostFormatMessage" name="test_image_markdown_to_url" time="0.007" /><testcase classname="tests.gateway.test_mattermost.TestMattermostFormatMessage" name="test_image_markdown_strips_alt_text" time="0.006" /><testcase classname="tests.gateway.test_mattermost.TestMattermostFormatMessage" name="test_regular_markdown_preserved" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostFormatMessage" name="test_regular_links_preserved" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostFormatMessage" name="test_plain_text_unchanged" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostFormatMessage" name="test_multiple_images" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostTruncateMessage" name="test_short_message_single_chunk" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostTruncateMessage" name="test_long_message_splits" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostTruncateMessage" name="test_custom_max_length" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostTruncateMessage" name="test_exactly_at_limit" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostSend" name="test_send_calls_api_post" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostSend" name="test_send_empty_content_succeeds" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostSend" name="test_send_with_thread_reply" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostSend" name="test_send_without_thread_no_root_id" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostSend" name="test_send_uses_metadata_thread_id_for_progress_messages" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostSend" name="test_progress_send_with_invalid_thread_root_never_falls_back_flat" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostSend" name="test_notify_send_with_invalid_thread_root_falls_back_flat_with_warning" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostSend" name="test_notify_send_with_server_error_does_not_fall_back_flat" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostSend" name="test_send_api_failure" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostWebSocketParsing" name="test_parse_posted_event" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostWebSocketParsing" name="test_ignore_own_messages" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostWebSocketParsing" name="test_ignore_non_posted_events" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostWebSocketParsing" name="test_ignore_system_posts" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostWebSocketParsing" name="test_channel_type_mapping" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostWebSocketParsing" name="test_thread_id_from_root_id" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostWebSocketParsing" name="test_invalid_post_json_ignored" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostMentionBehavior" name="test_require_mention_true_skips_without_mention" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostMentionBehavior" name="test_require_mention_false_responds_to_all" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostMentionBehavior" name="test_free_response_channel_responds_without_mention" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostMentionBehavior" name="test_non_free_channel_still_requires_mention" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostMentionBehavior" name="test_dm_always_responds" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostMentionBehavior" name="test_mention_stripped_from_text" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostFileUpload" name="test_send_image_downloads_and_uploads" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostDedup" name="test_duplicate_post_ignored" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostDedup" name="test_different_post_ids_both_processed" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostDedup" name="test_prune_seen_clears_expired" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostDedup" name="test_seen_cache_tracks_post_ids" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostRequirements" name="test_check_requirements_with_token_and_url" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostRequirements" name="test_check_requirements_without_token" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostRequirements" name="test_check_requirements_without_url" time="0.004" /><testcase classname="tests.gateway.test_mattermost.TestMattermostMediaTypes" name="test_image_media_type_is_full_mime" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostMediaTypes" name="test_audio_media_type_is_full_mime" time="0.005" /><testcase classname="tests.gateway.test_mattermost.TestMattermostMediaTypes" name="test_document_media_type_is_full_mime" time="0.005" /><testcase classname="tests.gateway.test_mattermost" name="test_mattermost_top_level_channel_post_is_thread_root" time="0.004" /><testcase classname="tests.gateway.test_mattermost" name="test_mattermost_dm_post_does_not_seed_thread_root" time="0.004" /><testcase classname="tests.gateway.test_max_concurrent_sessions" name="test_new_session_gets_clean_error_at_active_session_limit" time="0.005" /><testcase classname="tests.gateway.test_max_concurrent_sessions" name="test_existing_active_session_uses_busy_handling_at_limit" time="0.005" /><testcase classname="tests.gateway.test_max_concurrent_sessions" name="test_new_session_can_start_after_active_session_released" time="0.007" /><testcase classname="tests.gateway.test_max_concurrent_sessions" name="test_status_command_bypasses_active_session_limit" time="0.005" /><testcase classname="tests.gateway.test_max_concurrent_sessions" name="test_skill_command_that_would_start_agent_is_blocked_at_limit" time="0.051" /><testcase classname="tests.gateway.test_max_tokens_propagation" name="test_top_level_max_tokens_propagates" time="0.036" /><testcase classname="tests.gateway.test_max_tokens_propagation" name="test_per_provider_max_output_tokens_fallback" time="0.035" /><testcase classname="tests.gateway.test_max_tokens_propagation" name="test_global_max_tokens_beats_per_provider" time="0.034" /><testcase classname="tests.gateway.test_max_tokens_propagation" name="test_env_override_beats_everything" time="0.033" /><testcase classname="tests.gateway.test_max_tokens_propagation" name="test_no_config_leaves_max_tokens_none" time="0.032" /><testcase classname="tests.gateway.test_max_tokens_propagation" name="test_lift_helper_accepts_alias_and_rejects_garbage" time="0.021" /><testcase classname="tests.gateway.test_mcp_reload_refreshes_cached_agents" name="test_reload_mcp_refreshes_cached_agent_tools" time="0.093" /><testcase classname="tests.gateway.test_mcp_reload_refreshes_cached_agents" name="test_reload_mcp_handles_empty_agent_cache" time="0.009" /><testcase classname="tests.gateway.test_mcp_reload_refreshes_cached_agents" name="test_reload_mcp_preserves_per_agent_toolset_overrides" time="0.008" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheImageFromBytes" name="test_caches_valid_jpeg" time="0.006" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheImageFromBytes" name="test_caches_valid_png" time="0.004" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheImageFromBytes" name="test_rejects_html_content" time="0.004" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheImageFromBytes" name="test_rejects_empty_data" time="0.004" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheImageFromBytes" name="test_rejects_plain_text" time="0.004" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheImageFromUrl" name="test_success_on_first_attempt" time="0.007" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheImageFromUrl" name="test_retries_on_timeout_then_succeeds" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheImageFromUrl" name="test_retries_on_429_then_succeeds" time="0.006" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheImageFromUrl" name="test_raises_after_max_retries_exhausted" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheImageFromUrl" name="test_non_retryable_4xx_raises_immediately" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheAudioFromUrl" name="test_success_on_first_attempt" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheAudioFromUrl" name="test_retries_on_timeout_then_succeeds" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheAudioFromUrl" name="test_retries_on_429_then_succeeds" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheAudioFromUrl" name="test_retries_on_500_then_succeeds" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheAudioFromUrl" name="test_raises_after_max_retries_exhausted" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestCacheAudioFromUrl" name="test_non_retryable_4xx_raises_immediately" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestSSRFRedirectGuard" name="test_image_blocks_private_redirect" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestSSRFRedirectGuard" name="test_audio_blocks_private_redirect" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestSSRFRedirectGuard" name="test_safe_redirect_allowed" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestSlackAttachmentDiagnostics" name="test_missing_scope_error_returns_actionable_notice" time="0.004" /><testcase classname="tests.gateway.test_media_download_retry.TestSlackAttachmentDiagnostics" name="test_download_failure_403_returns_permission_notice" time="0.004" /><testcase classname="tests.gateway.test_media_download_retry.TestSlackDownloadSlackFile" name="test_success_on_first_attempt" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestSlackDownloadSlackFile" name="test_rejects_html_response" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestSlackDownloadSlackFile" name="test_retries_on_timeout_then_succeeds" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestSlackDownloadSlackFile" name="test_raises_after_max_retries" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestSlackDownloadSlackFile" name="test_non_retryable_403_raises_immediately" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestSlackDownloadSlackFileBytes" name="test_success_returns_bytes" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestSlackDownloadSlackFileBytes" name="test_rejects_html_response" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestSlackDownloadSlackFileBytes" name="test_retries_on_429_then_succeeds" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestSlackDownloadSlackFileBytes" name="test_raises_after_max_retries" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestMattermostSendUrlAsFile" name="test_success_on_first_attempt" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestMattermostSendUrlAsFile" name="test_retries_on_429_then_succeeds" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestMattermostSendUrlAsFile" name="test_retries_on_500_then_succeeds" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestMattermostSendUrlAsFile" name="test_falls_back_to_text_after_max_retries_on_5xx" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestMattermostSendUrlAsFile" name="test_falls_back_on_client_error" time="0.005" /><testcase classname="tests.gateway.test_media_download_retry.TestMattermostSendUrlAsFile" name="test_non_retryable_404_falls_back_immediately" time="0.005" /><testcase classname="tests.gateway.test_media_extraction.TestMediaExtraction" name="test_gateway_auto_append_ignores_media_examples_in_skill_docs" time="0.004" /><testcase classname="tests.gateway.test_media_extraction.TestMediaExtraction" name="test_gateway_auto_append_keeps_real_tts_media_tag" time="0.004" /><testcase classname="tests.gateway.test_media_extraction.TestMediaExtraction" name="test_gateway_auto_append_image_generate_json_path" time="0.004" /><testcase classname="tests.gateway.test_media_extraction.TestMediaExtraction" name="test_gateway_auto_append_image_generate_prefers_host_path" time="0.004" /><testcase classname="tests.gateway.test_media_extraction.TestMediaExtraction" name="test_gateway_auto_append_image_generate_failure_and_url_ignored" time="0.004" /><testcase classname="tests.gateway.test_media_extraction.TestMediaExtraction" name="test_gateway_auto_append_image_generate_dedupes_history" time="0.004" /><testcase classname="tests.gateway.test_media_extraction.TestMediaExtraction" name="test_media_tags_not_extracted_from_history" time="0.004" /><testcase classname="tests.gateway.test_media_extraction.TestMediaExtraction" name="test_media_tags_extracted_from_current_turn" time="0.004" /><testcase classname="tests.gateway.test_media_extraction.TestMediaExtraction" name="test_multiple_tts_calls_in_history_not_accumulated" time="0.004" /><testcase classname="tests.gateway.test_media_extraction.TestMediaExtraction" name="test_deduplication_within_current_turn" time="0.004" /><testcase classname="tests.gateway.test_media_extraction.TestStaleToolMediaLeak" name="test_stale_execute_code_media_not_attached_to_text_only_reply" time="0.004" /><testcase classname="tests.gateway.test_media_extraction.TestStaleToolMediaLeak" name="test_current_turn_media_still_attached_when_dedup_set_empty" time="0.004" /><testcase classname="tests.gateway.test_media_extraction.TestStaleToolMediaLeak" name="test_compression_shrink_falls_back_to_path_dedup" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_send_image_accepts_metadata[gateway.platforms.whatsapp-WhatsAppAdapter]" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_send_image_accepts_metadata[gateway.platforms.email-EmailAdapter]" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.bluebubbles-BlueBubblesAdapter]" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.dingtalk-DingTalkAdapter]" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.discord-DiscordAdapter]" time="0.004"><skipped type="pytest.skip" message="gateway.platforms.discord not importable: No module named 'gateway.platforms.discord'">/home/cube/projects/richard/hermes-agent/tests/gateway/test_media_metadata_contract.py:74: gateway.platforms.discord not importable: No module named 'gateway.platforms.discord'</skipped></testcase><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.email-EmailAdapter]" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.feishu-FeishuAdapter]" time="0.005" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.matrix-MatrixAdapter]" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.mattermost-MattermostAdapter]" time="0.004"><skipped type="pytest.skip" message="gateway.platforms.mattermost not importable: No module named 'gateway.platforms.mattermost'">/home/cube/projects/richard/hermes-agent/tests/gateway/test_media_metadata_contract.py:74: gateway.platforms.mattermost not importable: No module named 'gateway.platforms.mattermost'</skipped></testcase><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.signal-SignalAdapter]" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.slack-SlackAdapter]" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.telegram-TelegramAdapter]" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.wecom-WeComAdapter]" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.weixin-WeixinAdapter]" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.whatsapp-WhatsAppAdapter]" time="0.004" /><testcase classname="tests.gateway.test_media_metadata_contract" name="test_all_adapters_send_image_metadata_sweep[gateway.platforms.yuanbao-YuanbaoAdapter]" time="0.004" /><testcase classname="tests.gateway.test_memory_monitor" name="test_log_memory_usage_emits_memory_line" time="0.005" /><testcase classname="tests.gateway.test_memory_monitor" name="test_log_memory_usage_has_grep_friendly_format" time="0.004" /><testcase classname="tests.gateway.test_memory_monitor" name="test_log_memory_usage_with_prefix" time="0.004" /><testcase classname="tests.gateway.test_memory_monitor" name="test_start_logs_baseline_and_returns_true" time="0.005" /><testcase classname="tests.gateway.test_memory_monitor" name="test_double_start_is_noop" time="0.004" /><testcase classname="tests.gateway.test_memory_monitor" name="test_stop_logs_shutdown_snapshot" time="0.005" /><testcase classname="tests.gateway.test_memory_monitor" name="test_stop_without_start_is_noop" time="0.004" /><testcase classname="tests.gateway.test_memory_monitor" name="test_periodic_timer_fires" time="0.455" /><testcase classname="tests.gateway.test_memory_monitor" name="test_thread_is_daemon" time="0.008" /><testcase classname="tests.gateway.test_memory_monitor" name="test_unavailable_rss_warns_and_does_not_start" time="0.004" /><testcase classname="tests.gateway.test_message_deduplicator.TestMessageDeduplicatorTTL" name="test_duplicate_within_ttl" time="0.004" /><testcase classname="tests.gateway.test_message_deduplicator.TestMessageDeduplicatorTTL" name="test_not_duplicate_after_ttl_expires" time="0.004" /><testcase classname="tests.gateway.test_message_deduplicator.TestMessageDeduplicatorTTL" name="test_expired_entry_gets_refreshed" time="0.004" /><testcase classname="tests.gateway.test_message_deduplicator.TestMessageDeduplicatorTTL" name="test_different_messages_not_confused" time="0.004" /><testcase classname="tests.gateway.test_message_deduplicator.TestMessageDeduplicatorTTL" name="test_empty_id_never_duplicate" time="0.004" /><testcase classname="tests.gateway.test_message_deduplicator.TestMessageDeduplicatorTTL" name="test_max_size_eviction_prunes_expired" time="0.004" /><testcase classname="tests.gateway.test_message_deduplicator.TestMessageDeduplicatorTTL" name="test_max_size_eviction_caps_fresh_entries" time="0.004" /><testcase classname="tests.gateway.test_message_deduplicator.TestMessageDeduplicatorTTL" name="test_ttl_zero_means_no_dedup" time="0.004" /><testcase classname="tests.gateway.test_message_timestamps" name="test_render_user_content_adds_single_context_timestamp" time="0.004" /><testcase classname="tests.gateway.test_message_timestamps" name="test_render_user_content_deduplicates_existing_timestamp_and_preserves_embedded_time" time="0.005" /><testcase classname="tests.gateway.test_message_timestamps" name="test_strip_leading_message_timestamps_removes_multiple_prefixes_and_prefers_inner_time" time="0.004" /><testcase classname="tests.gateway.test_message_timestamps" name="test_coerce_message_timestamp_accepts_datetime_and_epoch" time="0.004" /><testcase classname="tests.gateway.test_message_timestamps" name="test_persist_user_message_override_keeps_clean_content_and_timestamp_metadata" time="0.004" /><testcase classname="tests.gateway.test_message_timestamps" name="test_message_timestamps_enabled_defaults_off" time="0.004" /><testcase classname="tests.gateway.test_message_timestamps" name="test_message_timestamps_enabled_when_opted_in" time="0.004" /><testcase classname="tests.gateway.test_message_timestamps" name="test_build_history_injects_only_when_enabled" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestFindSessionId" name="test_finds_matching_session" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestFindSessionId" name="test_returns_most_recent" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestFindSessionId" name="test_thread_id_disambiguates_same_chat" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestFindSessionId" name="test_user_id_disambiguates_same_group_chat" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestFindSessionId" name="test_ambiguous_same_group_chat_without_user_id_returns_none" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestFindSessionId" name="test_no_match_returns_none" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestFindSessionId" name="test_missing_sessions_file" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestFindSessionId" name="test_platform_case_insensitive" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestMirrorToSession" name="test_successful_mirror" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestMirrorToSession" name="test_successful_mirror_uses_thread_id" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestMirrorToSession" name="test_successful_mirror_uses_user_id_for_group_session" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestMirrorToSession" name="test_no_matching_session" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestMirrorToSession" name="test_error_returns_false" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestAppendToSqlite" name="test_connection_is_closed_after_use" time="0.004" /><testcase classname="tests.gateway.test_mirror.TestAppendToSqlite" name="test_connection_closed_even_on_error" time="0.004" /><testcase classname="tests.gateway.test_model_command_custom_providers" name="test_handle_model_command_lists_saved_custom_provider" time="0.221" /><testcase classname="tests.gateway.test_model_command_expensive_confirm" name="test_typed_model_expensive_prompts_instead_of_switching" time="0.010" /><testcase classname="tests.gateway.test_model_command_expensive_confirm" name="test_typed_model_expensive_confirm_once_applies_switch" time="0.065" /><testcase classname="tests.gateway.test_model_command_expensive_confirm" name="test_typed_model_expensive_cancel_keeps_current_model" time="0.010" /><testcase classname="tests.gateway.test_model_command_expensive_confirm" name="test_typed_model_cheap_switches_without_prompt" time="0.064" /><testcase classname="tests.gateway.test_model_command_flat_string_config" name="test_model_global_persists_when_config_has_flat_string_model" time="0.061" /><testcase classname="tests.gateway.test_model_command_flat_string_config" name="test_model_global_persists_when_config_has_missing_model" time="0.060" /><testcase classname="tests.gateway.test_model_command_flat_string_config" name="test_model_global_persists_when_config_has_proper_dict_model" time="0.068" /><testcase classname="tests.gateway.test_model_command_flat_string_config" name="test_model_no_flag_persists_by_default" time="0.080" /><testcase classname="tests.gateway.test_model_command_flat_string_config" name="test_model_session_flag_does_not_persist" time="0.067" /><testcase classname="tests.gateway.test_model_picker_persist" name="test_picker_tap_persists_by_default[nested-dict]" time="0.012" /><testcase classname="tests.gateway.test_model_picker_persist" name="test_picker_tap_persists_by_default[flat-string]" time="0.007" /><testcase classname="tests.gateway.test_model_picker_persist" name="test_picker_tap_session_flag_does_not_persist" time="0.005" /><testcase classname="tests.gateway.test_model_switch_persistence.TestApplySessionModelOverride" name="test_override_replaces_all_fields" time="0.004" /><testcase classname="tests.gateway.test_model_switch_persistence.TestApplySessionModelOverride" name="test_no_override_returns_originals" time="0.004" /><testcase classname="tests.gateway.test_model_switch_persistence.TestApplySessionModelOverride" name="test_none_values_do_not_overwrite" time="0.004" /><testcase classname="tests.gateway.test_model_switch_persistence.TestApplySessionModelOverride" name="test_empty_string_overwrites" time="0.004" /><testcase classname="tests.gateway.test_model_switch_persistence.TestApplySessionModelOverride" name="test_different_session_key_not_affected" time="0.004" /><testcase classname="tests.gateway.test_model_switch_persistence.TestIsIntentionalModelSwitch" name="test_matches_override" time="0.004" /><testcase classname="tests.gateway.test_model_switch_persistence.TestIsIntentionalModelSwitch" name="test_no_override_returns_false" time="0.004" /><testcase classname="tests.gateway.test_model_switch_persistence.TestIsIntentionalModelSwitch" name="test_different_model_returns_false" time="0.004" /><testcase classname="tests.gateway.test_model_switch_persistence.TestIsIntentionalModelSwitch" name="test_wrong_session_key" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphWebhookConfig" name="test_gateway_config_accepts_msgraph_webhook_platform" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphWebhookConfig" name="test_env_overrides_apply_to_existing_msgraph_webhook_platform" time="0.051" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphValidationHandshake" name="test_connect_requires_client_state[asyncio]" time="0.007" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphValidationHandshake" name="test_connect_requires_source_allowlist_on_public_bind[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphValidationHandshake" name="test_connect_allows_loopback_without_source_allowlist[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphValidationHandshake" name="test_validation_token_echo_on_get[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphValidationHandshake" name="test_bare_get_without_validation_token_rejected[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphValidationHandshake" name="test_post_with_validation_token_still_echoes[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphNotifications" name="test_missing_client_state_is_auth_rejected[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphNotifications" name="test_valid_notification_accepted_and_scheduled[asyncio]" time="0.055" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphNotifications" name="test_bad_client_state_rejected_as_auth_failure[asyncio]" time="0.059" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphNotifications" name="test_client_state_compare_is_timing_safe[asyncio]" time="0.008" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphNotifications" name="test_duplicate_notification_deduped[asyncio]" time="0.055" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphNotifications" name="test_notifications_without_id_are_not_deduped[asyncio]" time="0.058" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphNotifications" name="test_resource_patterns_accept_leading_slash[asyncio]" time="0.008" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphNotifications" name="test_resource_not_in_allowlist_returns_400[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphNotifications" name="test_malformed_body_returns_400[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphNotifications" name="test_missing_value_array_returns_400[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphNotifications" name="test_seen_receipts_are_bounded[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphSourceIPAllowlist" name="test_public_bind_without_allowlist_fails_closed[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphSourceIPAllowlist" name="test_loopback_bind_without_allowlist_still_accepts_local_requests[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphSourceIPAllowlist" name="test_post_from_disallowed_ip_rejected[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphSourceIPAllowlist" name="test_post_from_allowed_ip_accepted[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphSourceIPAllowlist" name="test_validation_handshake_also_respects_allowlist[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphSourceIPAllowlist" name="test_health_endpoint_also_respects_allowlist[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphSourceIPAllowlist" name="test_invalid_cidr_entries_are_ignored_at_init[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_msgraph_webhook.TestMSGraphSourceIPAllowlist" name="test_cidr_list_accepts_comma_string[asyncio]" time="0.004" /><testcase classname="tests.gateway.test_multiplex_adapter_registry.TestCredentialFingerprint" name="test_none_without_token" time="0.004" /><testcase classname="tests.gateway.test_multiplex_adapter_registry.TestCredentialFingerprint" name="test_stable_and_log_safe" time="0.004" /><testcase classname="tests.gateway.test_multiplex_adapter_registry.TestCredentialFingerprint" name="test_distinct_tokens_distinct_fp" time="0.004" /><testcase classname="tests.gateway.test_multiplex_adapter_registry.TestCredentialFingerprint" name="test_reads_alt_attrs" time="0.004" /><testcase classname="tests.gateway.test_multiplex_adapter_registry.TestProfileMessageHandler" name="test_stamps_profile_on_unstamped_source" time="0.004" /><testcase classname="tests.gateway.test_multiplex_adapter_registry.TestProfileMessageHandler" name="test_does_not_override_existing_profile" time="0.004" /><testcase classname="tests.gateway.test_multiplex_adapter_registry.TestPortBindingHardError" name="test_secondary_webhook_raises" time="0.004" /><testcase classname="tests.gateway.test_multiplex_adapter_registry.TestPortBindingHardError" name="test_secondary_non_binding_platform_ok" time="0.004" /><testcase classname="tests.gateway.test_multiplex_adapter_registry.TestPortBindingHardError" name="test_port_binding_set_covers_known_listeners" time="0.004" /><testcase classname="tests.gateway.test_multiplex_credential_isolation.TestRuntimeProviderUsesScope" name="test_getenv_reads_scope_under_multiplex" time="0.004" /><testcase classname="tests.gateway.test_multiplex_credential_isolation.TestRuntimeProviderUsesScope" name="test_getenv_two_profiles_isolated" time="0.004" /><testcase classname="tests.gateway.test_multiplex_credential_isolation.TestRuntimeProviderUsesScope" name="test_getenv_fails_closed_unscoped" time="0.004" /><testcase classname="tests.gateway.test_multiplex_credential_isolation.TestRuntimeProviderUsesScope" name="test_getenv_global_var_still_reads_environ" time="0.004" /><testcase classname="tests.gateway.test_multiplex_credential_isolation.TestMcpInterpolationUsesScope" name="test_interpolation_reads_scope" time="0.004" /><testcase classname="tests.gateway.test_multiplex_credential_isolation.TestMcpInterpolationUsesScope" name="test_interpolation_unset_keeps_placeholder" time="0.004" /><testcase classname="tests.gateway.test_multiplex_credential_isolation.TestMcpInterpolationUsesScope" name="test_interpolation_off_reads_environ" time="0.004" /><testcase classname="tests.gateway.test_multiplex_http_routing.TestSessionSourceProfileField" name="test_profile_roundtrips" time="0.004" /><testcase classname="tests.gateway.test_multiplex_http_routing.TestSessionSourceProfileField" name="test_profile_absent_not_serialized" time="0.004" /><testcase classname="tests.gateway.test_multiplex_http_routing.TestSessionSourceProfileField" name="test_source_profile_drives_session_key_namespace" time="0.004" /><testcase classname="tests.gateway.test_multiplex_http_routing.TestWebhookProfileResolution" name="test_no_prefix_returns_none" time="0.005" /><testcase classname="tests.gateway.test_multiplex_http_routing.TestWebhookProfileResolution" name="test_prefix_ignored_when_multiplex_off" time="0.004" /><testcase classname="tests.gateway.test_multiplex_http_routing.TestWebhookProfileResolution" name="test_known_profile_accepted" time="0.004" /><testcase classname="tests.gateway.test_multiplex_http_routing.TestWebhookProfileResolution" name="test_unknown_profile_rejected" time="0.004" /><testcase classname="tests.gateway.test_multiplex_lifecycle.TestServedProfilesStatus" name="test_write_and_read_served_profiles" time="0.006" /><testcase classname="tests.gateway.test_multiplex_lifecycle.TestServedProfilesStatus" name="test_served_profiles_absent_by_default" time="0.006" /><testcase classname="tests.gateway.test_multiplex_lifecycle.TestNamedProfileMultiplexerGuard" name="test_inert_for_default_profile" time="0.004" /><testcase classname="tests.gateway.test_multiplex_lifecycle.TestNamedProfileMultiplexerGuard" name="test_force_bypasses" time="0.004" /><testcase classname="tests.gateway.test_multiplex_lifecycle.TestNamedProfileMultiplexerGuard" name="test_inert_when_no_default_gateway_running" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyByteIdenticalWhenOff" name="test_dm_with_chat_id[None]" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyByteIdenticalWhenOff" name="test_dm_with_chat_id[default]" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyByteIdenticalWhenOff" name="test_dm_with_thread[None]" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyByteIdenticalWhenOff" name="test_dm_with_thread[default]" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyByteIdenticalWhenOff" name="test_dm_without_chat_id_falls_back_to_user[None]" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyByteIdenticalWhenOff" name="test_dm_without_chat_id_falls_back_to_user[default]" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyByteIdenticalWhenOff" name="test_group_per_user[None]" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyByteIdenticalWhenOff" name="test_group_per_user[default]" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyByteIdenticalWhenOff" name="test_group_shared_when_disabled[None]" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyByteIdenticalWhenOff" name="test_group_shared_when_disabled[default]" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyNamespacedWhenOn" name="test_named_profile_dm" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyNamespacedWhenOn" name="test_named_profile_group_per_user" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyNamespacedWhenOn" name="test_two_profiles_same_chat_do_not_collide" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyNamespacedWhenOn" name="test_positional_layout_preserved_for_parsers" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionKeyNamespacedWhenOn" name="test_default_namespace_layout_matches_named" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestMultiplexConfigFlag" name="test_default_is_false" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestMultiplexConfigFlag" name="test_to_dict_includes_flag" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestMultiplexConfigFlag" name="test_from_dict_top_level" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestMultiplexConfigFlag" name="test_from_dict_nested_gateway" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestMultiplexConfigFlag" name="test_from_dict_coerces_truthy_string" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestMultiplexConfigFlag" name="test_roundtrip" time="0.004" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionStoreProfileResolution" name="test_flag_off_uses_legacy_namespace" time="0.005" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionStoreProfileResolution" name="test_flag_off_resolve_profile_is_none" time="0.005" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionStoreProfileResolution" name="test_flag_on_uses_active_profile_namespace" time="0.005" /><testcase classname="tests.gateway.test_multiplex_phase0.TestSessionStoreProfileResolution" name="test_flag_on_default_profile_stays_legacy" time="0.005" /><testcase classname="tests.gateway.test_native_image_buffer_isolation" name="test_native_image_buffer_isolated_per_session" time="0.005" /><testcase classname="tests.gateway.test_native_image_buffer_isolation" name="test_native_image_buffer_not_cleared_by_other_sessions_without_images" time="0.004" /><testcase classname="tests.gateway.test_notice_delivery" name="test_deliver_platform_notice_uses_private_delivery_when_configured" time="0.005" /><testcase classname="tests.gateway.test_notice_delivery" name="test_deliver_platform_notice_falls_back_to_public_when_private_fails" time="0.005" /><testcase classname="tests.gateway.test_notice_delivery" name="test_deliver_platform_notice_uses_public_delivery_by_default" time="0.005" /><testcase classname="tests.gateway.test_notice_rendering.TestRenderNoticeLine" name="test_returns_text_verbatim_with_its_baked_glyph" time="0.004" /><testcase classname="tests.gateway.test_notice_rendering.TestRenderNoticeLine" name="test_does_not_prepend_a_second_glyph" time="0.004" /><testcase classname="tests.gateway.test_notice_rendering.TestRenderNoticeLine" name="test_text_is_stripped" time="0.004" /><testcase classname="tests.gateway.test_notice_rendering.TestRenderNoticeLine" name="test_empty_text_returns_empty_string" time="0.004" /><testcase classname="tests.gateway.test_notice_rendering.TestRenderNoticeLine" name="test_malformed_notice_does_not_raise" time="0.004" /><testcase classname="tests.gateway.test_notice_rendering" name="test_real_policy_notices_render_without_doubling" time="0.004" /><testcase classname="tests.gateway.test_notice_rendering.TestDeliverNoticeLine" name="test_public_delivery_sends_rendered_line" time="0.005" /><testcase classname="tests.gateway.test_notice_rendering.TestDeliverNoticeLine" name="test_private_delivery_prefers_private_notice" time="0.005" /><testcase classname="tests.gateway.test_notice_rendering.TestDeliverNoticeLine" name="test_no_adapter_is_a_noop" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin" name="test_platform_enum_resolves_via_plugin_scan" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyRequirements" name="test_returns_false_when_httpx_unavailable" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyRequirements" name="test_returns_false_when_topic_not_set" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyRequirements" name="test_returns_true_when_topic_set_via_env" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyRequirements" name="test_validate_config_requires_topic" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyRequirements" name="test_is_connected_from_extra" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyRequirements" name="test_is_connected_from_env" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyAdapterInit" name="test_default_server_url" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyAdapterInit" name="test_topic_read_from_extra" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyAdapterInit" name="test_topic_read_from_env" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyAdapterInit" name="test_publish_topic_falls_back_to_topic" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyAdapterInit" name="test_publish_topic_uses_extra_value" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyAdapterInit" name="test_token_read_from_extra" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyAdapterInit" name="test_token_read_from_env" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyAdapterInit" name="test_server_trailing_slash_stripped" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestNtfyAdapterInit" name="test_initial_state" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestAuthHeaders" name="test_no_token_returns_empty_dict" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestAuthHeaders" name="test_bearer_token_for_plain_token" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestAuthHeaders" name="test_basic_auth_for_user_colon_password" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestAuthHeaders" name="test_bearer_token_used_when_no_colon" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestAuthHeaders" name="test_auth_header_key_is_authorization" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestDeduplication" name="test_first_message_not_duplicate" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestDeduplication" name="test_second_occurrence_is_duplicate" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestDeduplication" name="test_different_ids_not_duplicate" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestDeduplication" name="test_many_messages_recorded" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestDeduplication" name="test_cache_pruned_on_overflow" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestDeduplication" name="test_expired_id_can_be_seen_again" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestConnect" name="test_connect_fails_when_httpx_unavailable" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestConnect" name="test_connect_fails_when_no_topic" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestConnect" name="test_connect_starts_stream_task" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestConnect" name="test_disconnect_clears_state" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestConnect" name="test_disconnect_cancels_stream_task" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_send_fails_without_http_client" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_send_posts_to_publish_topic" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_send_falls_back_to_subscribe_topic" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_send_uses_metadata_publish_topic" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_send_handles_http_error_status" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_send_handles_timeout" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_send_truncates_to_max_length" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_send_typing_is_noop" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_get_chat_info_returns_dict" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_send_includes_bearer_auth_header" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_send_emits_markdown_header_when_enabled" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_send_omits_markdown_header_when_disabled" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestSend" name="test_send_emits_echo_tag_header" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestOnMessage" name="test_message_dispatched_to_handler" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestOnMessage" name="test_empty_message_skipped" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestOnMessage" name="test_duplicate_message_skipped" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestOnMessage" name="test_own_tagged_message_skipped" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestOnMessage" name="test_message_with_other_tags_still_dispatched" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestOnMessage" name="test_timestamp_parsed_from_event" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestOnMessage" name="test_message_id_set_from_event" time="0.006" /><testcase classname="tests.gateway.test_ntfy_plugin.TestOnMessage" name="test_title_not_used_as_user_id" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestOnMessage" name="test_unknown_publisher_cannot_impersonate_allowed_user" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestOnMessage" name="test_source_chat_id_is_topic" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestEnvEnablement" name="test_returns_none_without_topic" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestEnvEnablement" name="test_seeds_topic_and_server" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestEnvEnablement" name="test_custom_server_url" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestEnvEnablement" name="test_publish_topic_seeded" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestEnvEnablement" name="test_token_seeded" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestEnvEnablement" name="test_markdown_truthy_values" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestEnvEnablement" name="test_markdown_falsy_values" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestEnvEnablement" name="test_home_channel_defaults_to_topic" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestEnvEnablement" name="test_home_channel_override" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestStandaloneSend" name="test_errors_without_topic" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestStandaloneSend" name="test_posts_to_server" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestStandaloneSend" name="test_emits_echo_tag_header" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestStandaloneSend" name="test_emits_bearer_token_when_configured" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestStandaloneSend" name="test_basic_auth_when_token_has_colon" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestStandaloneSend" name="test_returns_error_on_http_failure" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin" name="test_register_calls_register_platform" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin" name="test_adapter_factory_returns_ntfy_adapter" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestTokenHygiene" name="test_trailing_whitespace_stripped" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestTokenHygiene" name="test_trailing_newline_stripped" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestTokenHygiene" name="test_whitespace_only_returns_empty" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestTokenHygiene" name="test_basic_auth_token_also_stripped" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestTokenHygiene" name="test_adapter_strips_token_via_helper" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestFatalErrorPropagation" name="test_401_sets_fatal_unauthorized" time="0.005" /><testcase classname="tests.gateway.test_ntfy_plugin.TestFatalErrorPropagation" name="test_404_sets_fatal_topic_not_found" time="0.006" /><testcase classname="tests.gateway.test_ntfy_plugin.TestTruncateHelper" name="test_short_message_passes_through" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestTruncateHelper" name="test_long_message_truncated" time="0.004" /><testcase classname="tests.gateway.test_ntfy_plugin.TestTruncateHelper" name="test_unicode_message_encoded" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_dualcoach_golden_path" time="0.149" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_missing_service_state_requires_typed_initialization" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_service_state_initializer_creates_private_ledger" time="0.076" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_service_state_rejects_symlinked_data_ancestor" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_pause_rejects_invalid_audit_date_without_mutating_state" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_pending_customer_can_withdraw_consent_before_activation" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_nutrition_startup_rejects_manual_enable_without_committed_receipt" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_nutrition_startup_accepts_committed_receipt_and_canonical_path" time="0.017" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_nutrition_live_reload_rejects_manual_enable_without_committed_receipt" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_nutrition_live_reload_keeps_disable_and_revoke_live" time="0.018" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_disabled_customer_is_not_routable" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_disabled_customer_onboarding_card_is_exact_route_bound" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_customer_consent_decision_is_idempotent_and_never_activates" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_customer_consent_decline_replay_and_wrong_route_are_safe" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_customer_pause_resume_is_durable_idempotent_and_authority_neutral" time="0.037" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_customer_pause_state_corruption_and_wrong_route_fail_closed" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coordinator_initializes_customer_service_state_store" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_customer_route_requires_exact_submitter_chat_and_topic" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_customer_space_is_reserved_even_for_an_unregistered_sender" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_saved_customer_checkin_creates_owner_only_draft_request" time="0.011" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_final_checkin_crash_before_journal_commit_leaves_no_final_or_job" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_final_checkin_recovers_one_pending_generation_after_request_write_crash" time="0.011" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_prepared_but_unfinalized_checkin_restart_creates_no_job" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_malformed_finalization_journal_fails_before_checkin_finalization" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_duplicate_final_checkin_has_one_generation_job_and_zero_delivery" time="0.012" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_typed_weekly_source_reuses_owner_draft_lifecycle" time="0.012" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_urgent_customer_note_notifies_owner_without_draft_token" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_gateway_ac21_safety_matrix[SF-S1-C]" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_gateway_ac21_safety_matrix[SF-S2-C]" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_gateway_ac21_safety_matrix[SF-S3-C]" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_gateway_ac21_safety_matrix[SF-S4-C]" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_gateway_ac21_safety_matrix[SF-S5-C]" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_gateway_ac21_safety_matrix[SF-S6-C]" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_safety_completion_is_sent_to_owner_without_draft_button" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_due_tick_sends_one_customer_launcher_and_claims_the_day" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_due_tick_sends_weekly_summary_only_to_owner_during_pilot" time="0.010" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coaching_id_command_reports_only_the_callers_current_address" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_review_persists_normalized_evidence_and_focus_ids" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_missing_targets_does_not_build_v1_request" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_request_strips_actions_and_bounds_history" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_request_scoped_coach_schema_structurally_blocks_live_failure_classes" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_response_schema_is_a_documented_portable_strict_subset" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_defers_removed_constraints_to_semantic_validation[customer_key-]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_defers_removed_constraints_to_semantic_validation[customer_key-kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_defers_removed_constraints_to_semantic_validation[evidence_ids-value2]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_defers_removed_constraints_to_semantic_validation[evidence_ids-value3]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_defers_removed_constraints_to_semantic_validation[evidence_ids-value4]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_defers_removed_constraints_to_semantic_validation[interpretation-]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_defers_removed_constraints_to_semantic_validation[interpretation-iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_defers_removed_constraints_to_semantic_validation[next_checkin_focus_ids-value7]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_defers_removed_constraints_to_semantic_validation[next_checkin_focus_ids-value8]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_defers_removed_constraints_to_semantic_validation[next_checkin_focus_ids-value9]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_defers_removed_constraints_to_semantic_validation[customer_draft-]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_defers_removed_constraints_to_semantic_validation[customer_draft-ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_portable_coach_schema_keeps_the_existing_accepted_fixture" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_revision_bound_draft_requires_validated_review" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_legacy_unbound_pending_draft_cannot_be_newly_approved" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_persists_one_grounded_draft_and_updates_card" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_preserves_claimed_replacement_lineage_and_projection" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_persists_safe_provider_audit_with_draft_receipt" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_allows_exactly_one_correction_attempt" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_one_correction_fixes_both_live_rule_classes" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_invalid_output_creates_no_draft" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_failure_preserves_safe_provider_usage_and_semantic_diagnostics" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_failure_persists_both_ordered_semantic_diagnostics_only" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_fails_closed_on_same_revision_request_fingerprint_drift" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_incomplete_provider_output_is_terminal_and_never_persists_raw_content" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_persists_redacted_bad_request_audit_without_retry" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_legacy_provider_failure_audit_preserves_draft_record_digest" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_terminal_invalid_model_output_repairs_the_existing_token_once_after_restart" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_card_route_recovery_never_retries_a_definitive_failure_on_the_same_route" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_verified_topic_rejection_is_durably_carried_to_explicit_owner_dm_route" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_card_updates_the_existing_owner_dm_message_after_terminal_repair" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_card_activation_treats_unchanged_message_as_success" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_auth_failure_is_retryable_without_receipt_deletion" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_draft_generation_recovery_plan_survives_restart" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_restart_reclaims_only_an_expired_lease" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_stale_provider_return_cannot_persist_over_reclaimed_claim" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_cancellation_releases_claim" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_rejects_revision_changed_during_provider_call" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_logs_ids_and_gates_without_customer_answers" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_gateway_startup_preflight_reports_safe_reauthentication_status" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_provider_auth_preflight_redacts_credential_exception" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_provider_auth_preflight_recovers_coaching_on_the_same_adapter" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_provider_auth_preflight_preserves_unrelated_coaching_error" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_gateway_connect_checks_provider_authentication_before_telegram_setup" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_provider_preflight_uses_the_configured_auxiliary_provider" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_generation_claim_is_durable_and_single_winner" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_draft_generation_state_machine_rejects_every_skipped_transition" time="0.012" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_draft_generation_schema_round_trips_every_state_deterministically" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_draft_generation_full_durable_lifecycle_reloads_and_audits_once" time="0.013" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_draft_generation_rejects_stale_card_cross_revision_and_invalid_payload" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_regenerate_control_issues_one_new_generation" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_regeneration_generation_write_failure_keeps_parent_created_and_retry_converges" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_regeneration_restart_recovers_projection_failure_without_duplicate_child" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_concurrent_regeneration_retries_converge_on_one_child" time="0.010" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_revision_binding_covers_targets_and_history" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_target_or_history_drift_rejects_approval[targets]" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_target_or_history_drift_rejects_approval[history]" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_target_or_history_drift_rejects_approval[principles]" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_target_or_history_drift_rejects_approval[evidence]" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_target_or_history_drift_rejects_approval[profile]" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_review_persists_and_revision_drift_rejects_approval" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_stage_artifacts_persist_in_private_draft_ledger" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_rejects_untrusted_review_metadata_before_persistence" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_hold_is_terminal_for_approval_and_customer_delivery" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_operator_target_edit_updates_review_and_requires_reapproval" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_operator_target_edit_rejects_zero_targets_without_corruption" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_owner_draft_lifecycle_is_canonical_and_preapproval_send_is_rejected" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_corrupt_draft_ledger_blocks_create_without_overwriting_the_file" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_non_customer_route_is_exactly_isolated_from_customer_and_reserved_spaces" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_role_boundaries_keep_customer_chat_human_and_owner_notes_internal" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_adaptive_request_uses_current_targets_without_action_choices" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_trainer_routes_and_private_access_are_unavailable_in_v1" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_approval_receipt_is_immutable_duplicate_idempotent_and_zero_delivery" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_revoke_approved_draft_prevents_delivery_reservation" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_revoke_projection_recovers_exact_partial_hold_without_delivery[False]" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_revoke_projection_recovers_exact_partial_hold_without_delivery[True]" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_fresh_coordinator_recovers_partial_hold_from_canonical_event_authority" time="0.065" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_partial_hold_recovery_rejects_forged_approval_projection" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_concurrent_send_after_hold_decision_cannot_reserve_delivery" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_concurrent_approve_and_send_never_uses_preapproval_card" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_delivery_intent_is_pending_before_transport_and_retry_never_resends" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_delivered_receipt_retries_audit_without_duplicate_transport" time="0.013" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_pending_delivery_requires_explicit_receipt_reconciliation" time="0.012" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_delivery_outbox_restart_and_unknown_outcome_crash_matrix" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_delivery_outbox_atomic_dispatch_claim_has_one_winner" time="0.012" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_delivery_outbox_provider_timeout_callback_never_resends" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_delivery_outbox_receipt_crash_requires_bounded_reconciliation" time="0.279" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_delivery_outbox_negative_reconciliation_is_the_only_safe_retry" time="0.018" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_corrupt_delivery_ledger_fails_closed_without_transport" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_approved_edit_creates_child_revision_and_requires_reapproval" time="0.011" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_sent_audit_write_failure_leaves_receipt_for_retry_without_resend" time="0.013" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_corrupt_request_ledger_blocks_delivery_preparation" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_telegram_customer_transport_rejects_wrong_customer_or_noncanonical_destination[user_id-other-user]" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_telegram_customer_transport_rejects_wrong_customer_or_noncanonical_destination[chat_id-other-chat]" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_telegram_customer_transport_rejects_wrong_customer_or_noncanonical_destination[topic_id-other-topic]" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_production_console_factory_wires_canonical_lifecycle_and_receipt_transport" time="0.525" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_consent_revocation_is_rechecked_at_draft_lifecycle_boundaries" time="0.023" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_safety_hold_on_existing_draft_blocks_delivery_reservation" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_approved_revision_and_canonical_evidence_are_required" time="0.011" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_concurrent_delivery_reservation_allows_only_one_transport" time="0.014" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_telegram_utf16_limit_is_checked_before_outbox_reservation[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-True]" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_telegram_utf16_limit_is_checked_before_outbox_reservation[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-False]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_telegram_utf16_limit_is_checked_before_outbox_reservation[\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600-True]" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_telegram_utf16_limit_is_checked_before_outbox_reservation[\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600\U0001f600a-False]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_console_transport_revalidates_after_reservation[consent-revoked]" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_console_transport_revalidates_after_reservation[safety-held]" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_customer_start_callback_is_stable_opaque_and_telegram_sized" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_customer_start_callback_resolves_only_exact_live_customer_route" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_manual_customer_aliases_render_one_reusable_card_with_stable_callback" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_customer_dm_fallback_preserves_private_topic_route" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_scheduled_customer_card_ignores_unavailable_optional_reminder_authority" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_customer_pause_callback_renders_resume_control" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_customer_start_callback_click_binds_clicked_card_and_resumes_open_draft" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_completed_customer_day_is_terminal_without_new_session_or_event" time="0.011" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_weekly_destination_pin_precedes_revision_authority_gate" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_adaptive_config_requires_explicit_schedule_confirmation_enablement" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_schedule_confirm_integration_gateway_request_replays_one_canonical_and_projection" time="0.049" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_schedule_confirm_integration_rejects_stale_reference_and_wrong_review_authority" time="0.033" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_approval_continuity_uses_authoritative_customer_body" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_approve_and_send_uses_fresh_action_capabilities_and_stops_on_failure" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_schedule_confirm_callback_claims_once_and_rejects_invalid_authority" time="0.095" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_schedule_confirm_replay_recovers_after_consume_before_confirm_crash" time="0.051" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_dual_coach_review_cards_are_customer_local_and_deterministic" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_dual_coach_review_journal_failure_returns_bounded_operator_diagnostic" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_dual_coach_review_publication_claim_is_append_only_across_restart" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[customer_key_bounded-contract.customer_key_bounded-$.customer_key]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[customer_key_exact-contract.customer_key_exact-$.customer_key]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[revision_binding_exact-contract.revision_binding_digest_exact-$.revision_binding_digest]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[interpretation_bounded-content.interpretation_bounded-$.interpretation]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[customer_draft_bounded-content.customer_draft_bounded-$.customer_draft]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[interpretation_prohibited-safety.interpretation_prohibited_guidance-$.interpretation]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[customer_draft_prohibited-safety.customer_draft_prohibited_guidance-$.customer_draft]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[safety_hold_required-safety.safety_hold_required-$.decision]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[evidence_ids_strict-ids.evidence_ids_strict-$.evidence_ids]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[focus_ids_strict-ids.next_checkin_focus_ids_strict-$.next_checkin_focus_ids]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[evidence_ids_offered-ids.evidence_ids_offered-$.evidence_ids]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[focus_ids_offered-ids.next_checkin_focus_ids_offered-$.next_checkin_focus_ids]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[recommendation_targets_valid-recommendation.targets_valid-$.recommendation]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[recommendation_energy-recommendation.energy_consistent-$.recommendation.calories]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[adjust_changes_targets-decision.adjust_changes_targets-$.recommendation]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[non_adjust_keeps_targets-decision.non_adjust_keeps_targets-$.recommendation]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[interpretation_numbers_grounded-copy.interpretation_numbers_grounded-$.interpretation]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[customer_draft_numbers_grounded-copy.customer_draft_numbers_grounded-$.customer_draft]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[interpretation_claims_match-copy.interpretation_recommendation_claims_match-$.interpretation]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[customer_draft_claims_match-copy.customer_draft_recommendation_claims_match-$.customer_draft]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[interpretation_sensitive_fact-grounding.interpretation_sensitive_fact_supported-$.interpretation]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_schema_valid_semantic_failures_have_allowlisted_diagnostics[customer_draft_sensitive_fact-grounding.customer_draft_sensitive_fact_supported-$.customer_draft]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_accepts_grounded_free_numeric_recommendation_and_draft" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_rejects_reassigned_numeric_labels" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_decision_matches_target_change[maintain-False-True]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_decision_matches_target_change[observe-False-True]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_decision_matches_target_change[safety_hold-False-True]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_decision_matches_target_change[adjust-True-True]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_decision_matches_target_change[maintain-True-False]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_decision_matches_target_change[observe-True-False]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_decision_matches_target_change[safety_hold-True-False]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_decision_matches_target_change[adjust-False-False]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_safety_held_input_rejects_ordinary_adjustment" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_allows_emergency_referral_guidance" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_wrong_customer]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_stale_revision]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_non_finite_target]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_negative_target]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_unsupported_unit]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_inconsistent_energy]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_unknown_evidence]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_unsafe_content]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_indirect_medication_stop]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_emergency_care_bypass]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_zero_targets]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_starvation_guidance]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_untrustworthy_recommendations[_unsupported_allergy_claim]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_medication_action_variants[\uc57d\uc744 \uc911\ub2e8\ud558\uc138\uc694.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_medication_action_variants[\uc778\uc290\ub9b0\uc744 \ud22c\uc5ec\ud558\uc138\uc694.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_medication_action_variants[\ud608\uc555\uc57d\uc740 \ud53c\ud558\uc138\uc694.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_medication_action_variants[\ucc98\ubc29\uc57d \uc6a9\ub7c9\uc744 \ub298\ub9ac\uc138\uc694.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_medication_action_variants[\ud638\ub974\ubaac\uc81c\ub97c \ub450 \ubc30\ub85c \ubcf5\uc6a9\ud558\uc138\uc694.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_allows_safe_medication_referral" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_safety_hold_always_creates_owner_review_notes" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_semantic_safety_bypasses[\ucc98\ubc29\ubc1b\uc740 \uac83\uc740 \uc624\ub298\ubd80\ud130 \ub4dc\uc2dc\uc9c0 \ub9c8\uc138\uc694.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_semantic_safety_bypasses[\uc624\ub298\uc740 \uc544\ubb34\uac83\ub3c4 \uba39\uc9c0 \ub9c8\uc138\uc694.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_semantic_safety_bypasses[\uc218\ubd84 \uc12d\ucde8\ub97c \ud558\uc9c0 \ub9c8\uc138\uc694.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_semantic_safety_bypasses[\uac00\uc2b4 \ud1b5\uc99d\uc774 \uc788\uc5b4\ub3c4 119\uc5d0 \uc804\ud654\ud558\uc9c0 \ub9d0\uace0 \ubcd1\uc6d0\uc5d0 \uac00\uc9c0 \ub9c8\uc138\uc694.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_semantic_safety_bypasses[\uc778 \uc290 \ub9b0\uc744 \ub04a\uace0 \ubb3c\uc740 \uc785\uc5d0 \ub300\uc9c0 \ub9c8\uc138\uc694. \uad6c\uae09\ub300\uc5d0\ub3c4 \uc5f0\ub77d\ud558\uc9c0 \ub9c8\uc138\uc694.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_semantic_safety_bypasses[Stop taking insulin, drink no water, and do not contact emergency services.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_semantic_safety_bypasses[S t o p taking i n s u l i n.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_semantic_safety_bypasses[\uc778\u200b\uc290\u200b\ub9b0\uc744 \ub04a\uc73c\uc138\uc694.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_rejects_unsupported_identity_and_instruction_claims[\uac11\uc0c1\uc120 \uae30\ub2a5 \uc800\ud558\uc99d\uc774 \ud655\uc778\ub410\uc2b5\ub2c8\ub2e4.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_rejects_unsupported_identity_and_instruction_claims[\ud64d\uae38\ub3d9 \uace0\uac1d\ub2d8\uc758 \ud558\ub8e8 \ubaa9\ud45c\ub97c \uc870\uc815\ud569\ub2c8\ub2e4.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_rejects_unsupported_identity_and_instruction_claims[\uacc4\uc815 \ube44\ubc00\ubc88\ud638\ub97c \ucf54\uce58\uc5d0\uac8c \ubcf4\ub0b4\uc138\uc694.]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_allows_generic_customer_address" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_malformed_responses[]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_malformed_responses[{not-json]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_malformed_responses[[]]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_hard_blocks_malformed_responses[{&quot;schema_version&quot;: &quot;nutrition-coach-response-v2&quot;}]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_adaptive_coach_requires_current_targets_instead_of_v1_fallback" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_adaptive_coach_request_omits_candidate_macro_targets" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching_judgment" name="test_coach_v2_soft_warnings_keep_aggressive_low_evidence_proposal_reviewable" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_authoritative_summary_renders_canonical_customer_values" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_authoritative_summary_renders_provided_items_as_customer_text" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_authoritative_summary_classifies_safety_review_inputs[conditions-value0]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_authoritative_summary_classifies_safety_review_inputs[medications-value1]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_authoritative_summary_classifies_safety_review_inputs[pregnancy_breastfeeding-True]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_authoritative_summary_classifies_safety_review_inputs[pregnancy_breastfeeding-None]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_authoritative_summary_classifies_safety_review_inputs[eating_disorder_risk-True]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_authoritative_summary_classifies_safety_review_inputs[eating_disorder_risk-None]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_accepts_exact_advisory_schema" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_accepts_field_keyed_clarification" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_normalizes_bounded_summary_lines" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_rejects_unsafe_or_empty_output[mutation0]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_rejects_unsafe_or_empty_output[mutation1]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_rejects_unsafe_or_empty_output[mutation2]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_rejects_unsafe_or_empty_output[mutation3]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_rejects_unsafe_or_empty_output[mutation4]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_rejects_unsafe_or_empty_output[mutation5]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_rejects_unsafe_or_empty_output[mutation6]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_rejects_unsafe_or_empty_output[mutation7]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_rejects_unsafe_or_empty_output[mutation8]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_rejects_unsafe_or_empty_output[mutation9]" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_parse_reconciliation_json_rejects_markdown_wrapping" time="0.004" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_reconciler_uses_configured_model_and_strict_response" time="0.005" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_reconciler_fails_closed_without_consent_or_client" time="0.006" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_production_attestation_card_includes_advisory_summary" time="0.006" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_resolved_clarification_discards_stale_advisory_sections" time="0.005" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_production_ambiguity_publishes_field_bound_force_reply" time="0.005" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_production_clarification_reply_revises_exact_field" time="0.006" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_production_reuses_persisted_next_clarification_after_restart" time="0.005" /><testcase classname="tests.gateway.test_nutrition_onboarding_reconciliation" name="test_exact_attestation_callback_retires_button_and_advances" time="0.007" /><testcase classname="tests.gateway.test_pairing.TestSecureWrite" name="test_creates_parent_dirs" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestSecureWrite" name="test_sets_file_permissions" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestCodeGeneration" name="test_code_format" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestCodeGeneration" name="test_code_uniqueness" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestCodeGeneration" name="test_stores_pending_entry" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestHashedStorage" name="test_pending_file_contains_hash_and_salt" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestHashedStorage" name="test_plaintext_code_not_stored" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestHashedStorage" name="test_valid_code_verifies_against_hash" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestHashedStorage" name="test_invalid_code_rejected" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestHashedStorage" name="test_different_salts_per_entry" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestHashedStorage" name="test_hash_code_static_method" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestLegacyPendingFileCompat" name="test_approve_code_ignores_legacy_entries" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestLegacyPendingFileCompat" name="test_list_pending_handles_legacy_entries" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestLegacyPendingFileCompat" name="test_cleanup_expired_removes_legacy_at_ttl" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestLegacyPendingFileCompat" name="test_cleanup_expired_handles_malformed_entries" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestLegacyPendingFileCompat" name="test_approve_code_skips_malformed_entries" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestRateLimiting" name="test_same_user_rate_limited" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestRateLimiting" name="test_different_users_not_rate_limited" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestRateLimiting" name="test_rate_limit_expires" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestRateLimiting" name="test_whatsapp_alias_flip_hits_same_rate_limit" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestMaxPending" name="test_max_pending_per_platform" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestMaxPending" name="test_different_platforms_independent" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestApprovalFlow" name="test_approve_valid_code" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestApprovalFlow" name="test_approved_user_is_approved" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestApprovalFlow" name="test_unapproved_user_not_approved" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestApprovalFlow" name="test_approve_removes_from_pending" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestApprovalFlow" name="test_approve_case_insensitive" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestApprovalFlow" name="test_approve_strips_whitespace" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestApprovalFlow" name="test_invalid_code_returns_none" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestApprovalFlow" name="test_whatsapp_approved_user_survives_alias_flip" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestApprovalFlow" name="test_whatsapp_legacy_raw_jid_approval_survives_alias_flip" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestLockout" name="test_lockout_after_max_failures" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestLockout" name="test_lockout_blocks_code_generation" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestLockout" name="test_lockout_blocks_code_approval" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestLockout" name="test_lockout_expires" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestCodeExpiry" name="test_expired_codes_cleaned_up" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestCodeExpiry" name="test_expired_code_cannot_be_approved" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestRevoke" name="test_revoke_approved_user" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestRevoke" name="test_revoke_nonexistent_returns_false" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestListAndClear" name="test_list_approved" time="0.004" /><testcase classname="tests.gateway.test_pairing.TestListAndClear" name="test_list_approved_all_platforms" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestListAndClear" name="test_clear_pending" time="0.005" /><testcase classname="tests.gateway.test_pairing.TestListAndClear" name="test_clear_pending_all_platforms" time="0.005" /><testcase classname="tests.gateway.test_pending_drain_no_recursion" name="test_in_band_drain_does_not_grow_stack" time="0.015" /><testcase classname="tests.gateway.test_pending_drain_no_recursion" name="test_in_band_drain_preserves_active_session_guard" time="0.015" /><testcase classname="tests.gateway.test_pending_drain_no_recursion" name="test_normal_path_releases_session_guard" time="0.015" /><testcase classname="tests.gateway.test_pending_drain_no_recursion" name="test_drain_task_cancellation_releases_session" time="0.015" /><testcase classname="tests.gateway.test_pending_drain_no_recursion" name="test_late_arrival_drain_still_fires_when_no_in_band_drain" time="4.394" /><testcase classname="tests.gateway.test_pending_drain_race" name="test_pending_drain_keeps_active_session_guard_live" time="0.110" /><testcase classname="tests.gateway.test_pending_drain_race" name="test_finally_cleanup_drains_late_arrival_pending" time="0.019" /><testcase classname="tests.gateway.test_pending_drain_race" name="test_no_pending_cleans_up_normally" time="0.015" /><testcase classname="tests.gateway.test_pending_event_none.TestPendingEventNoneChannelPrompt" name="test_none_pending_event_returns_none_channel_prompt" time="0.004" /><testcase classname="tests.gateway.test_pending_event_none.TestPendingEventNoneChannelPrompt" name="test_pending_event_with_channel_prompt_passes_through" time="0.004" /><testcase classname="tests.gateway.test_pending_event_none.TestPendingEventNoneChannelPrompt" name="test_pending_event_without_channel_prompt_returns_none" time="0.004" /><testcase classname="tests.gateway.test_pending_event_none.TestControlInterruptMessages" name="test_stop_requested_is_not_treated_as_pending_user_message" time="0.004" /><testcase classname="tests.gateway.test_pending_event_none.TestControlInterruptMessages" name="test_session_reset_requested_is_not_treated_as_pending_user_message" time="0.004" /><testcase classname="tests.gateway.test_pending_event_none.TestControlInterruptMessages" name="test_real_user_interrupt_message_still_requeues" time="0.004" /><testcase classname="tests.gateway.test_per_platform_streaming_defaults" name="test_default_per_platform_streaming_flags" time="0.004" /><testcase classname="tests.gateway.test_per_platform_streaming_defaults" name="test_resolver_telegram_on_discord_off_when_global_enabled" time="0.004" /><testcase classname="tests.gateway.test_per_platform_streaming_defaults" name="test_user_override_wins_over_default" time="0.004" /><testcase classname="tests.gateway.test_per_platform_streaming_defaults" name="test_dashboard_schema_exposes_per_platform_streaming" time="0.144" /><testcase classname="tests.gateway.test_pii_redaction.TestHashHelpers" name="test_hash_id_deterministic" time="0.008" /><testcase classname="tests.gateway.test_pii_redaction.TestHashHelpers" name="test_hash_id_12_hex_chars" time="0.007" /><testcase classname="tests.gateway.test_pii_redaction.TestHashHelpers" name="test_hash_sender_id_prefix" time="0.005" /><testcase classname="tests.gateway.test_pii_redaction.TestHashHelpers" name="test_hash_chat_id_preserves_prefix" time="0.004" /><testcase classname="tests.gateway.test_pii_redaction.TestHashHelpers" name="test_hash_chat_id_no_prefix" time="0.004" /><testcase classname="tests.gateway.test_pii_redaction.TestBuildSessionContextPromptRedaction" name="test_no_redaction_by_default" time="0.004" /><testcase classname="tests.gateway.test_pii_redaction.TestBuildSessionContextPromptRedaction" name="test_user_id_hashed_when_redact_pii" time="0.004" /><testcase classname="tests.gateway.test_pii_redaction.TestBuildSessionContextPromptRedaction" name="test_user_name_not_redacted" time="0.004" /><testcase classname="tests.gateway.test_pii_redaction.TestBuildSessionContextPromptRedaction" name="test_home_channel_id_hashed" time="0.004" /><testcase classname="tests.gateway.test_pii_redaction.TestBuildSessionContextPromptRedaction" name="test_home_channel_id_preserved_without_redaction" time="0.004" /><testcase classname="tests.gateway.test_pii_redaction.TestBuildSessionContextPromptRedaction" name="test_redaction_is_deterministic" time="0.004" /><testcase classname="tests.gateway.test_pii_redaction.TestBuildSessionContextPromptRedaction" name="test_different_ids_produce_different_hashes" time="0.004" /><testcase classname="tests.gateway.test_pii_redaction.TestBuildSessionContextPromptRedaction" name="test_discord_ids_not_redacted_even_with_flag" time="0.004" /><testcase classname="tests.gateway.test_pii_redaction.TestBuildSessionContextPromptRedaction" name="test_whatsapp_ids_redacted" time="0.004" /><testcase classname="tests.gateway.test_pii_redaction.TestBuildSessionContextPromptRedaction" name="test_signal_ids_redacted" time="0.004" /><testcase classname="tests.gateway.test_pii_redaction.TestBuildSessionContextPromptRedaction" name="test_slack_ids_not_redacted" time="0.004" /><testcase classname="tests.gateway.test_planned_stop_watcher" name="test_watcher_fires_shutdown_when_marker_appears" time="0.005" /><testcase classname="tests.gateway.test_planned_stop_watcher" name="test_watcher_does_not_fire_when_marker_absent" time="0.305" /><testcase classname="tests.gateway.test_planned_stop_watcher" name="test_watcher_skips_when_runner_already_draining" time="0.209" /><testcase classname="tests.gateway.test_planned_stop_watcher" name="test_watcher_skips_when_runner_not_started" time="0.208" /><testcase classname="tests.gateway.test_planned_stop_watcher" name="test_watcher_responds_to_stop_event_promptly" time="0.060" /><testcase classname="tests.gateway.test_planned_stop_watcher" name="test_watcher_fires_only_once_when_marker_persists" time="0.010" /><testcase classname="tests.gateway.test_planned_stop_watcher" name="test_watcher_tolerates_marker_path_resolution_errors" time="0.207" /><testcase classname="tests.gateway.test_planned_stop_watcher" name="test_watcher_does_not_fire_for_foreign_pid_marker" time="0.310" /><testcase classname="tests.gateway.test_planned_stop_watcher" name="test_watcher_cleans_up_stale_marker_and_keeps_running" time="0.310" /><testcase classname="tests.gateway.test_planned_stop_watcher" name="test_planned_stop_marker_targets_self_probe_is_non_destructive" time="0.009" /><testcase classname="tests.gateway.test_planned_stop_watcher" name="test_planned_stop_marker_targets_self_drops_malformed" time="0.006" /><testcase classname="tests.gateway.test_platform_base.TestSecretCaptureGuidance" name="test_gateway_secret_capture_message_points_to_local_setup" time="0.006" /><testcase classname="tests.gateway.test_platform_base.TestSafeUrlForLog" name="test_strips_query_fragment_and_userinfo" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestSafeUrlForLog" name="test_truncates_long_values" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestSafeUrlForLog" name="test_handles_small_and_non_positive_max_len" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventIsCommand" name="test_slash_command" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventIsCommand" name="test_regular_text" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventIsCommand" name="test_empty_text" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventIsCommand" name="test_slash_only" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventGetCommand" name="test_simple_command" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventGetCommand" name="test_command_with_args" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventGetCommand" name="test_not_a_command" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventGetCommand" name="test_command_is_lowercased" time="0.006" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventGetCommand" name="test_slash_only_returns_empty" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventGetCommand" name="test_command_with_at_botname" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventGetCommand" name="test_command_with_at_botname_and_args" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventGetCommand" name="test_command_mixed_case_with_at_botname" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventGetCommandArgs" name="test_command_with_args" time="0.006" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventGetCommandArgs" name="test_command_without_args" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMessageEventGetCommandArgs" name="test_not_a_command_returns_full_text" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_no_images" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_markdown_image_with_image_ext" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_markdown_image_jpg" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_markdown_image_jpeg" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_markdown_image_gif" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_markdown_image_webp" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_fal_media_cdn" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_fal_cdn_url" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_replicate_delivery" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_non_image_ext_not_extracted" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_html_img_tag" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_html_img_self_closing" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_html_img_with_closing_tag" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_multiple_images" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_mixed_markdown_and_html" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_cleaned_content_trims_excess_newlines" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_non_http_url_not_matched" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractImages" name="test_non_image_link_preserved_when_mixed_with_images" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_no_media" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_single_media_tag" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_with_voice_directive" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_multiple_media_tags" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_voice_directive_removed_from_content" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_with_text_before" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_cleaned_content_trims_excess_newlines" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_tag_allows_optional_whitespace_after_colon" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_tag_strips_wrapping_quotes_and_backticks" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_tag_supports_quoted_paths_with_spaces" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_tag_supports_unquoted_flac_paths_with_spaces" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_as_document_directive_stripped_from_cleaned_text" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_as_document_directive_alone_does_not_attach_voice_flag" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_both_directives_can_coexist" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_tag_windows_backslash_path" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_tag_windows_forward_slash_path" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_tag_windows_drive_root" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_tag_unix_paths_still_work" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_relative_path_still_ignored" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_in_fenced_code_block_ignored" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_in_inline_code_ignored" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_in_blockquote_ignored" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_outside_code_blocks_still_extracted" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_media_mixed_code_and_prose" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestExtractMedia" name="test_inline_code_survives_when_real_media_present" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaInsideSerializedJson" name="test_media_in_json_value_not_extracted" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaInsideSerializedJson" name="test_media_in_pretty_json_value_not_extracted" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaInsideSerializedJson" name="test_media_in_json_array_not_extracted" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaInsideSerializedJson" name="test_media_in_nested_json_value_not_extracted" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaInsideSerializedJson" name="test_media_in_embedded_serialized_reply_not_extracted" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaInsideSerializedJson" name="test_media_at_line_start_still_extracted" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaInsideSerializedJson" name="test_media_after_prose_same_line_still_extracted" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaInsideSerializedJson" name="test_media_indented_still_extracted" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaInsideSerializedJson" name="test_quoted_path_media_still_extracted" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaInsideSerializedJson" name="test_tts_two_line_still_extracted" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaInsideSerializedJson" name="test_json_embedded_media_kept_verbatim_in_cleaned_text" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaInsideSerializedJson" name="test_cleaned_text_after_directive_not_truncated" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaExtensionAllowlistParity" name="test_previously_dropped_extensions_now_extract" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaExtensionAllowlistParity" name="test_extract_media_and_local_files_share_one_extension_set" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaExtensionAllowlistParity" name="test_unknown_extension_not_black_holed_by_cleanup" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaExtensionAllowlistParity" name="test_known_extension_tag_is_stripped_from_body" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryPathValidation" name="test_allows_existing_file_inside_safe_root" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryPathValidation" name="test_rejects_existing_file_outside_safe_root" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryPathValidation" name="test_rejects_symlink_escape_from_safe_root" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryPathValidation" name="test_filter_keeps_safe_media_and_drops_unsafe" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryPathValidation" name="test_allows_operator_configured_extra_root" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryPathValidation" name="test_recency_trust_allows_freshly_produced_file" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryPathValidation" name="test_recency_trust_rejects_old_file" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryPathValidation" name="test_recency_trust_disabled_falls_back_to_pure_allowlist" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryPathValidation" name="test_recency_trust_denies_system_paths_even_when_fresh" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryPathValidation" name="test_recency_trust_allows_pdf_in_project_dir" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryPathValidation" name="test_filter_keeps_recently_produced_files" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_accepts_stale_file_outside_allowlist" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_accepts_any_extension_not_on_denylist" time="0.007" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_denylist_still_blocks_credentials" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_denylist_blocks_system_prefixes" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_denylist_blocks_hermes_credentials" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_denylist_blocks_hermes_config_in_active_profile" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_denylist_blocks_shared_hermes_root_config_for_profiles" time="0.006" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_strict_mode_envvar_restores_legacy_behavior" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_strict_mode_truthy_aliases" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_filter_passes_default_files_through" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_root_home_deliverable_is_accepted" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_root_home_credential_subdir_still_blocked" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_root_home_hermes_env_still_blocked" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_other_users_home_still_blocked_for_nonroot" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDefaultMode" name="test_root_home_workdir_symlink_to_credential_blocked" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestShouldSendMediaAsAudio" name="test_unknown_extension_returns_false" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestShouldSendMediaAsAudio" name="test_non_telegram_platforms_route_all_audio" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestShouldSendMediaAsAudio" name="test_telegram_mp3_and_m4a_route_to_audio" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestShouldSendMediaAsAudio" name="test_telegram_wav_and_flac_fall_through_to_document" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestShouldSendMediaAsAudio" name="test_telegram_ogg_opus_only_when_voice_flagged" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestShouldSendMediaAsAudio" name="test_accepts_platform_enum" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessage" name="test_short_message_single_chunk" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessage" name="test_exact_length_single_chunk" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessage" name="test_long_message_splits" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessage" name="test_chunks_have_indicators" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessage" name="test_code_block_first_chunk_closed" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessage" name="test_code_block_language_tag_carried" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessage" name="test_continuation_chunks_have_balanced_fences" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessage" name="test_each_chunk_under_max_length" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestGetHumanDelay" name="test_off_mode" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestGetHumanDelay" name="test_default_is_off" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestGetHumanDelay" name="test_natural_mode_range" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestGetHumanDelay" name="test_natural_mode_ignores_malformed_custom_env_vars" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestGetHumanDelay" name="test_custom_mode_uses_env_vars" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestGetHumanDelay" name="test_custom_mode_tolerates_malformed_env_vars" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestUtf16Len" name="test_ascii" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestUtf16Len" name="test_bmp_cjk" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestUtf16Len" name="test_emoji_surrogate_pair" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestUtf16Len" name="test_mixed" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestUtf16Len" name="test_musical_symbol" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestUtf16Len" name="test_empty" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestPrefixWithinUtf16Limit" name="test_fits_entirely" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestPrefixWithinUtf16Limit" name="test_ascii_truncation" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestPrefixWithinUtf16Limit" name="test_does_not_split_surrogate_pair" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestPrefixWithinUtf16Limit" name="test_emoji_at_limit" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestPrefixWithinUtf16Limit" name="test_all_emoji" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestPrefixWithinUtf16Limit" name="test_empty" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessageUtf16" name="test_short_emoji_message_no_split" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessageUtf16" name="test_emoji_near_limit_triggers_split" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessageUtf16" name="test_each_utf16_chunk_within_limit" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessageUtf16" name="test_all_content_preserved" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestTruncateMessageUtf16" name="test_code_blocks_preserved_with_utf16" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestProxyKwargsForAiohttp" name="test_none_returns_empty" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestProxyKwargsForAiohttp" name="test_http_proxy_uses_connector_when_aiohttp_socks_available" time="0.005"><skipped type="pytest.skip" message="could not import 'aiohttp_socks': No module named 'aiohttp_socks'">/home/cube/projects/richard/hermes-agent/tests/gateway/test_platform_base.py:1408: could not import 'aiohttp_socks': No module named 'aiohttp_socks'</skipped></testcase><testcase classname="tests.gateway.test_platform_base.TestProxyKwargsForAiohttp" name="test_socks_proxy_uses_connector" time="0.004"><skipped type="pytest.skip" message="could not import 'aiohttp_socks': No module named 'aiohttp_socks'">/home/cube/projects/richard/hermes-agent/tests/gateway/test_platform_base.py:1422: could not import 'aiohttp_socks': No module named 'aiohttp_socks'</skipped></testcase><testcase classname="tests.gateway.test_platform_base.TestProxyKwargsForAiohttp" name="test_http_proxy_falls_back_without_aiohttp_socks" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDiagnosability" name="test_rejected_path_appears_in_log" time="0.005" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDiagnosability" name="test_crafted_null_path_does_not_abort_batch" time="0.006" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDiagnosability" name="test_extract_media_tolerates_crafted_null_path" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDiagnosability" name="test_log_safe_path_neutralises_line_breaks" time="0.004" /><testcase classname="tests.gateway.test_platform_base.TestMediaDeliveryDiagnosability" name="test_canonical_cache_roots_present" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_all_builtins_have_checker_or_generic_token_path" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.WEIXIN-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.WHATSAPP-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.WHATSAPP_CLOUD-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.SIGNAL-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.EMAIL-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.SMS-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.API_SERVER-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.WEBHOOK-&lt;lambda&gt;]" time="0.005" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.MSGRAPH_WEBHOOK-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.FEISHU-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.WECOM-&lt;lambda&gt;]" time="0.005" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.WECOM_CALLBACK-&lt;lambda&gt;]" time="0.005" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.BLUEBUBBLES-&lt;lambda&gt;]" time="0.005" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.QQBOT-&lt;lambda&gt;]" time="0.005" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.YUANBAO-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.DINGTALK-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_handles_minimal_config[Platform.RELAY-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.WEIXIN-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.WHATSAPP-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.WHATSAPP_CLOUD-&lt;lambda&gt;]" time="0.004"><skipped type="pytest.skip" message="No synthetic config defined for whatsapp_cloud">/home/cube/projects/richard/hermes-agent/tests/gateway/test_platform_connected_checkers.py:104: No synthetic config defined for whatsapp_cloud</skipped></testcase><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.SIGNAL-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.EMAIL-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.SMS-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.API_SERVER-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.WEBHOOK-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.MSGRAPH_WEBHOOK-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.FEISHU-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.WECOM-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.WECOM_CALLBACK-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.BLUEBUBBLES-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.QQBOT-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.YUANBAO-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.DINGTALK-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_connected_checkers" name="test_checker_returns_true_when_configured[Platform.RELAY-&lt;lambda&gt;]" time="0.004" /><testcase classname="tests.gateway.test_platform_http_client_limits" name="test_returns_none_when_httpx_unavailable" time="0.004" /><testcase classname="tests.gateway.test_platform_http_client_limits" name="test_default_limits_tighten_keepalive_below_httpx_default" time="0.004" /><testcase classname="tests.gateway.test_platform_http_client_limits" name="test_env_override_keepalive_expiry" time="0.004" /><testcase classname="tests.gateway.test_platform_http_client_limits" name="test_env_override_max_keepalive" time="0.004" /><testcase classname="tests.gateway.test_platform_http_client_limits" name="test_env_override_rejects_garbage" time="0.004" /><testcase classname="tests.gateway.test_platform_http_client_limits" name="test_helper_is_importable_from_every_platform_that_uses_it" time="0.004" /><testcase classname="tests.gateway.test_platform_http_client_limits.TestWhatsappTypingLeakFix" name="test_bare_await_removed" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect.TestStartupPlatformIsolation" name="test_start_continues_after_platform_connect_timeout" time="1.041" /><testcase classname="tests.gateway.test_platform_reconnect.TestStartupPlatformIsolation" name="test_connect_adapter_timeout_raises_retryable_exception" time="0.011" /><testcase classname="tests.gateway.test_platform_reconnect.TestStartupFailureQueuing" name="test_failed_platform_queued_on_connect_failure" time="0.006" /><testcase classname="tests.gateway.test_platform_reconnect.TestStartupFailureQueuing" name="test_failed_platform_not_queued_for_nonretryable" time="0.006" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformReconnectWatcher" name="test_reconnect_succeeds_on_retry" time="0.008" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformReconnectWatcher" name="test_reconnect_retries_resume_pending_for_platform" time="0.007" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformReconnectWatcher" name="test_reconnect_nonretryable_removed_from_queue" time="0.007" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformReconnectWatcher" name="test_reconnect_retryable_stays_in_queue" time="0.008" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformReconnectWatcher" name="test_reconnect_never_auto_pauses_retryable_failures" time="0.007" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformReconnectWatcher" name="test_reconnect_skips_paused_platforms" time="0.006" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformReconnectWatcher" name="test_reconnect_skips_when_not_time_yet" time="0.006" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformReconnectWatcher" name="test_no_failed_platforms_watcher_idles" time="0.006" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformReconnectWatcher" name="test_adapter_create_returns_none" time="0.006" /><testcase classname="tests.gateway.test_platform_reconnect.TestRuntimeDisconnectQueuing" name="test_retryable_runtime_error_queued_for_reconnect" time="0.007" /><testcase classname="tests.gateway.test_platform_reconnect.TestRuntimeDisconnectQueuing" name="test_nonretryable_runtime_error_not_queued" time="0.007" /><testcase classname="tests.gateway.test_platform_reconnect.TestRuntimeDisconnectQueuing" name="test_retryable_error_keeps_gateway_alive_when_all_down" time="0.007" /><testcase classname="tests.gateway.test_platform_reconnect.TestRuntimeDisconnectQueuing" name="test_retryable_error_no_exit_when_other_adapters_still_connected" time="0.006" /><testcase classname="tests.gateway.test_platform_reconnect.TestRuntimeDisconnectQueuing" name="test_nonretryable_error_triggers_shutdown" time="0.006" /><testcase classname="tests.gateway.test_platform_reconnect.TestPauseResume" name="test_pause_marks_platform_paused" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect.TestPauseResume" name="test_pause_is_idempotent" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect.TestPauseResume" name="test_pause_no_op_when_platform_not_queued" time="0.004" /><testcase classname="tests.gateway.test_platform_reconnect.TestPauseResume" name="test_resume_clears_paused_and_resets_attempts" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect.TestPauseResume" name="test_resume_returns_false_when_not_paused" time="0.004" /><testcase classname="tests.gateway.test_platform_reconnect.TestPauseResume" name="test_resume_returns_false_when_not_queued" time="0.004" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformSlashCommand" name="test_list_shows_connected_and_paused" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformSlashCommand" name="test_pause_command_pauses_queued_platform" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformSlashCommand" name="test_pause_rejects_unqueued_platform" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformSlashCommand" name="test_resume_command_resumes_paused_platform" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformSlashCommand" name="test_unknown_platform_name" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect.TestPlatformSlashCommand" name="test_bare_platform_shows_usage_with_list" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect_fd_leak.TestReconnectFDLeakRegression" name="test_nonretryable_failure_disposes_unowned_adapter" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect_fd_leak.TestReconnectFDLeakRegression" name="test_retryable_failure_disposes_unowned_adapter" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect_fd_leak.TestReconnectFDLeakRegression" name="test_exception_during_connect_disposes_unowned_adapter" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect_fd_leak.TestReconnectFDLeakRegression" name="test_dispose_helper_handles_none" time="0.004" /><testcase classname="tests.gateway.test_platform_reconnect_fd_leak.TestReconnectFDLeakRegression" name="test_dispose_helper_swallows_disconnect_exception" time="0.004" /><testcase classname="tests.gateway.test_platform_reconnect_fd_leak.TestAPIServerDisconnectClosesResponseStore" name="test_disconnect_closes_response_store" time="0.005" /><testcase classname="tests.gateway.test_platform_reconnect_fd_leak.TestAPIServerDisconnectClosesResponseStore" name="test_disconnect_swallows_response_store_close_exception" time="0.005" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformEnumDynamic" name="test_builtin_members_still_work" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformEnumDynamic" name="test_dynamic_member_created" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformEnumDynamic" name="test_dynamic_member_identity_stable" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformEnumDynamic" name="test_dynamic_member_case_normalised" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformEnumDynamic" name="test_dynamic_member_with_hyphens" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformEnumDynamic" name="test_dynamic_member_rejects_unregistered" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformEnumDynamic" name="test_dynamic_member_rejects_non_string" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformEnumDynamic" name="test_dynamic_member_rejects_empty" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformEnumDynamic" name="test_dynamic_member_rejects_whitespace_only" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformRegistry" name="test_register_and_get" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformRegistry" name="test_get_unknown_returns_none" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformRegistry" name="test_unregister" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformRegistry" name="test_create_adapter_success" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformRegistry" name="test_create_adapter_unknown_name" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformRegistry" name="test_create_adapter_check_fails" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformRegistry" name="test_create_adapter_validate_fails" time="0.005" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformRegistry" name="test_create_adapter_factory_exception" time="0.005" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformRegistry" name="test_create_adapter_no_validate" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformRegistry" name="test_all_entries" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformRegistry" name="test_plugin_entries" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformRegistry" name="test_re_register_replaces" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestGatewayConfigPluginPlatform" name="test_from_dict_accepts_plugin_platform" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestGatewayConfigPluginPlatform" name="test_get_connected_platforms_includes_registered_plugin" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestGatewayConfigPluginPlatform" name="test_get_connected_platforms_excludes_unregistered_plugin" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestGatewayConfigPluginPlatform" name="test_get_connected_platforms_excludes_invalid_config" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformEntryExtendedFields" name="test_default_field_values" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformEntryExtendedFields" name="test_custom_auth_fields" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestCronPlatformResolution" name="test_builtin_platform_resolves" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestCronPlatformResolution" name="test_plugin_platform_resolves" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestCronPlatformResolution" name="test_invalid_platform_type_rejected" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformsMerge" name="test_get_all_platforms_includes_builtins" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformsMerge" name="test_get_all_platforms_includes_plugin" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestPlatformsMerge" name="test_platform_label_plugin_fallback" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestApplyYamlConfigFnField" name="test_default_is_none" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestApplyYamlConfigFnField" name="test_accepts_callable" time="0.004" /><testcase classname="tests.gateway.test_platform_registry.TestApplyYamlConfigFnDispatch" name="test_hook_can_mutate_environ" time="0.049" /><testcase classname="tests.gateway.test_platform_registry.TestApplyYamlConfigFnDispatch" name="test_hook_returned_dict_merges_into_extra" time="0.051" /><testcase classname="tests.gateway.test_platform_registry.TestApplyYamlConfigFnDispatch" name="test_hook_receives_full_yaml_and_platform_subdict" time="0.052" /><testcase classname="tests.gateway.test_platform_registry.TestApplyYamlConfigFnDispatch" name="test_hook_exception_swallowed" time="0.051" /><testcase classname="tests.gateway.test_platform_registry.TestApplyYamlConfigFnDispatch" name="test_hook_skipped_when_platform_section_missing" time="0.051" /><testcase classname="tests.gateway.test_platform_registry.TestApplyYamlConfigFnDispatch" name="test_hook_skipped_when_platform_section_not_dict" time="0.052" /><testcase classname="tests.gateway.test_platform_registry.TestApplyYamlConfigFnDispatch" name="test_env_var_takes_precedence_when_hook_uses_getenv_guard" time="0.052" /><testcase classname="tests.gateway.test_platform_registry.TestPluginPlatformSharedKeyBridge" name="test_shared_keys_bridged_for_plugin_platform" time="0.053" /><testcase classname="tests.gateway.test_platform_registry.TestPluginEnablementGate" name="test_plugin_with_is_connected_false_is_NOT_enabled" time="0.051" /><testcase classname="tests.gateway.test_platform_registry.TestPluginEnablementGate" name="test_plugin_with_is_connected_true_is_enabled" time="0.051" /><testcase classname="tests.gateway.test_platform_registry.TestPluginEnablementGate" name="test_plugin_without_is_connected_falls_back_to_check_fn" time="0.052" /><testcase classname="tests.gateway.test_platform_registry.TestPluginEnablementGate" name="test_is_connected_raises_does_not_enable" time="0.052" /><testcase classname="tests.gateway.test_platform_registry.TestPluginEnablementGate" name="test_yaml_enabled_true_overrides_is_connected_false" time="0.052" /><testcase classname="tests.gateway.test_platform_registry.TestPluginEnablementGate" name="test_is_connected_sees_env_seeded_extras" time="0.052" /><testcase classname="tests.gateway.test_platform_registry.TestPluginEnablementGate" name="test_is_connected_failed_gate_does_not_leak_extras" time="0.051" /><testcase classname="tests.gateway.test_plugin_platform_interface" name="test_plugin_exposes_register_function[NOTSET]" time="0.000"><skipped type="pytest.skip" message="got empty parameter set for (platform_name)">/home/cube/projects/richard/hermes-agent/tests/gateway/test_plugin_platform_interface.py:89: got empty parameter set for (platform_name)</skipped></testcase><testcase classname="tests.gateway.test_plugin_platform_interface" name="test_plugin_registers_valid_platform_entry[NOTSET]" time="0.000"><skipped type="pytest.skip" message="got empty parameter set for (platform_name)">/home/cube/projects/richard/hermes-agent/tests/gateway/test_plugin_platform_interface.py:97: got empty parameter set for (platform_name)</skipped></testcase><testcase classname="tests.gateway.test_plugin_platform_interface" name="test_platform_entry_has_required_fields[NOTSET]" time="0.000"><skipped type="pytest.skip" message="got empty parameter set for (platform_name)">/home/cube/projects/richard/hermes-agent/tests/gateway/test_plugin_platform_interface.py:115: got empty parameter set for (platform_name)</skipped></testcase><testcase classname="tests.gateway.test_plugin_platform_interface" name="test_adapter_factory_produces_valid_adapter[NOTSET]" time="0.000"><skipped type="pytest.skip" message="got empty parameter set for (platform_name)">/home/cube/projects/richard/hermes-agent/tests/gateway/test_plugin_platform_interface.py:141: got empty parameter set for (platform_name)</skipped></testcase><testcase classname="tests.gateway.test_plugin_platform_interface" name="test_check_fn_returns_bool[NOTSET]" time="0.000"><skipped type="pytest.skip" message="got empty parameter set for (platform_name)">/home/cube/projects/richard/hermes-agent/tests/gateway/test_plugin_platform_interface.py:178: got empty parameter set for (platform_name)</skipped></testcase><testcase classname="tests.gateway.test_plugin_platform_interface" name="test_validate_config_if_present[NOTSET]" time="0.000"><skipped type="pytest.skip" message="got empty parameter set for (platform_name)">/home/cube/projects/richard/hermes-agent/tests/gateway/test_plugin_platform_interface.py:193: got empty parameter set for (platform_name)</skipped></testcase><testcase classname="tests.gateway.test_plugin_platform_interface" name="test_is_connected_if_present[NOTSET]" time="0.000"><skipped type="pytest.skip" message="got empty parameter set for (platform_name)">/home/cube/projects/richard/hermes-agent/tests/gateway/test_plugin_platform_interface.py:213: got empty parameter set for (platform_name)</skipped></testcase><testcase classname="tests.gateway.test_post_delivery_callback_chaining.TestPostDeliveryCallbackChaining" name="test_single_callback_fires" time="0.007" /><testcase classname="tests.gateway.test_post_delivery_callback_chaining.TestPostDeliveryCallbackChaining" name="test_two_callbacks_chain_in_order" time="0.006" /><testcase classname="tests.gateway.test_post_delivery_callback_chaining.TestPostDeliveryCallbackChaining" name="test_three_callbacks_chain_in_order" time="0.006" /><testcase classname="tests.gateway.test_post_delivery_callback_chaining.TestPostDeliveryCallbackChaining" name="test_exception_in_one_callback_does_not_block_next" time="0.005" /><testcase classname="tests.gateway.test_post_delivery_callback_chaining.TestPostDeliveryCallbackChaining" name="test_same_generation_chains" time="0.004" /><testcase classname="tests.gateway.test_post_delivery_callback_chaining.TestPostDeliveryCallbackChaining" name="test_stale_generation_registration_rejected" time="0.004" /><testcase classname="tests.gateway.test_post_delivery_callback_chaining.TestPostDeliveryCallbackChaining" name="test_pop_at_wrong_generation_returns_none" time="0.004" /><testcase classname="tests.gateway.test_post_delivery_callback_chaining.TestPostDeliveryCallbackChaining" name="test_empty_session_key_is_noop" time="0.004" /><testcase classname="tests.gateway.test_post_delivery_callback_chaining.TestPostDeliveryCallbackChaining" name="test_non_callable_is_noop" time="0.004" /><testcase classname="tests.gateway.test_pre_gateway_dispatch" name="test_hook_skip_short_circuits_dispatch" time="0.005" /><testcase classname="tests.gateway.test_pre_gateway_dispatch" name="test_hook_rewrite_replaces_event_text" time="0.008" /><testcase classname="tests.gateway.test_pre_gateway_dispatch" name="test_hook_allow_falls_through_to_auth" time="0.005" /><testcase classname="tests.gateway.test_pre_gateway_dispatch" name="test_hook_exception_does_not_break_dispatch" time="0.005" /><testcase classname="tests.gateway.test_pre_gateway_dispatch" name="test_internal_events_bypass_hook" time="0.007" /><testcase classname="tests.gateway.test_proxy_mode.TestGetProxyUrl" name="test_returns_none_when_not_configured" time="0.005" /><testcase classname="tests.gateway.test_proxy_mode.TestGetProxyUrl" name="test_reads_from_env_var" time="0.004" /><testcase classname="tests.gateway.test_proxy_mode.TestGetProxyUrl" name="test_strips_trailing_slash" time="0.004" /><testcase classname="tests.gateway.test_proxy_mode.TestGetProxyUrl" name="test_reads_from_config_yaml" time="0.004" /><testcase classname="tests.gateway.test_proxy_mode.TestGetProxyUrl" name="test_env_var_overrides_config" time="0.004" /><testcase classname="tests.gateway.test_proxy_mode.TestGetProxyUrl" name="test_empty_string_treated_as_unset" time="0.004" /><testcase classname="tests.gateway.test_proxy_mode.TestResolveProxyUrl" name="test_normalizes_socks_alias_from_all_proxy" time="0.004" /><testcase classname="tests.gateway.test_proxy_mode.TestResolveProxyUrl" name="test_no_proxy_bypasses_matching_host" time="0.004" /><testcase classname="tests.gateway.test_proxy_mode.TestResolveProxyUrl" name="test_no_proxy_bypasses_cidr_target" time="0.004" /><testcase classname="tests.gateway.test_proxy_mode.TestResolveProxyUrl" name="test_no_proxy_ignored_without_target" time="0.004" /><testcase classname="tests.gateway.test_proxy_mode.TestRunAgentProxyDispatch" name="test_run_agent_delegates_to_proxy" time="0.005" /><testcase classname="tests.gateway.test_proxy_mode.TestRunAgentProxyDispatch" name="test_run_agent_skips_proxy_when_not_configured" time="0.052" /><testcase classname="tests.gateway.test_proxy_mode.TestRunAgentViaProxy" name="test_builds_correct_request" time="0.008" /><testcase classname="tests.gateway.test_proxy_mode.TestRunAgentViaProxy" name="test_handles_http_error" time="0.007" /><testcase classname="tests.gateway.test_proxy_mode.TestRunAgentViaProxy" name="test_handles_connection_error" time="0.005" /><testcase classname="tests.gateway.test_proxy_mode.TestRunAgentViaProxy" name="test_skips_tool_messages_in_history" time="0.005" /><testcase classname="tests.gateway.test_proxy_mode.TestRunAgentViaProxy" name="test_result_shape_matches_run_agent" time="0.005" /><testcase classname="tests.gateway.test_proxy_mode.TestRunAgentViaProxy" name="test_proxy_stale_generation_returns_empty_result" time="0.005" /><testcase classname="tests.gateway.test_proxy_mode.TestRunAgentViaProxy" name="test_no_auth_header_without_key" time="0.005" /><testcase classname="tests.gateway.test_proxy_mode.TestRunAgentViaProxy" name="test_no_system_message_when_context_empty" time="0.005" /><testcase classname="tests.gateway.test_proxy_mode.TestEnvVarRegistration" name="test_proxy_url_in_optional_env_vars" time="0.004" /><testcase classname="tests.gateway.test_proxy_mode.TestEnvVarRegistration" name="test_proxy_key_in_optional_env_vars" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQRequirements" name="test_returns_bool" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_basic_attributes" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_env_fallback" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_env_fallback_extra_wins" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_dm_policy_default" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_dm_policy_explicit" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_group_policy_default" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_allow_from_parsing_string" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_allow_from_parsing_list" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_allow_from_default_empty" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_group_allow_from" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_markdown_support_default" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_markdown_support_false" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQAdapterInit" name="test_name_property" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestCoerceList" name="test_none" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestCoerceList" name="test_string" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestCoerceList" name="test_list" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestCoerceList" name="test_empty_string" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestCoerceList" name="test_tuple" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestCoerceList" name="test_single_item_string" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestIsVoiceContentType" name="test_voice_content_type" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestIsVoiceContentType" name="test_audio_content_type" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestIsVoiceContentType" name="test_voice_extension" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestIsVoiceContentType" name="test_non_voice" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestIsVoiceContentType" name="test_audio_extension_amr" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestVoiceAttachmentSSRFProtection" name="test_stt_blocks_unsafe_download_url" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestVoiceAttachmentSSRFProtection" name="test_connect_uses_redirect_guard_hook" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestQQWebSocketProxy" name="test_open_ws_honors_proxy_env" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestStripAtMention" name="test_removes_mention" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestStripAtMention" name="test_no_mention" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestStripAtMention" name="test_empty_string" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestStripAtMention" name="test_only_mention" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDmAllowed" name="test_open_policy" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDmAllowed" name="test_disabled_policy" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDmAllowed" name="test_allowlist_match" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDmAllowed" name="test_allowlist_no_match" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDmAllowed" name="test_allowlist_wildcard" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestGroupAllowed" name="test_open_policy" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestGroupAllowed" name="test_allowlist_match" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestGroupAllowed" name="test_allowlist_no_match" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestResolveSTTConfig" name="test_no_config" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestResolveSTTConfig" name="test_env_config" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestResolveSTTConfig" name="test_extra_config" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestDetectMessageType" name="test_no_media" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDetectMessageType" name="test_image" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDetectMessageType" name="test_voice" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDetectMessageType" name="test_video" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQCloseError" name="test_attributes" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQCloseError" name="test_code_none" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQCloseError" name="test_string_to_int" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestQQCloseError" name="test_message_format" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDispatchPayload" name="test_unknown_op" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDispatchPayload" name="test_op10_updates_heartbeat_interval" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDispatchPayload" name="test_op11_heartbeat_ack" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDispatchPayload" name="test_seq_tracking" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestDispatchPayload" name="test_seq_increments" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestReadyHandling" name="test_ready_stores_session" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestReadyHandling" name="test_resumed_preserves_session" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestParseJson" name="test_valid_json" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestParseJson" name="test_invalid_json" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestParseJson" name="test_none_input" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestParseJson" name="test_non_dict_json" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestParseJson" name="test_empty_dict" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestBuildTextBody" name="test_plain_text" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestBuildTextBody" name="test_markdown_text" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestBuildTextBody" name="test_truncation" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestBuildTextBody" name="test_empty_string" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestBuildTextBody" name="test_reply_to" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestWaitForReconnection" name="test_send_waits_and_succeeds_on_reconnect" time="0.307" /><testcase classname="tests.gateway.test_qqbot.TestWaitForReconnection" name="test_send_returns_retryable_after_timeout" time="0.210" /><testcase classname="tests.gateway.test_qqbot.TestWaitForReconnection" name="test_send_succeeds_immediately_when_connected" time="0.008" /><testcase classname="tests.gateway.test_qqbot.TestWaitForReconnection" name="test_send_media_waits_for_reconnect" time="0.207" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadFormatSize" name="test_bytes" time="0.008" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadFormatSize" name="test_kilobytes" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadFormatSize" name="test_megabytes" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadFormatSize" name="test_gigabytes" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadErrors" name="test_daily_limit_has_human_size" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadErrors" name="test_too_large_includes_limit" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadErrors" name="test_too_large_unknown_limit" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadHelpers" name="test_read_chunk_exact_bytes" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadHelpers" name="test_read_chunk_short_read_raises" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadHelpers" name="test_compute_hashes_small_file" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadHelpers" name="test_compute_hashes_large_file_has_distinct_md5_10m" time="0.028" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadHelpers" name="test_parse_prepare_response_wrapped_in_data" time="0.007" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadHelpers" name="test_parse_prepare_response_missing_upload_id_raises" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploadHelpers" name="test_parse_prepare_response_missing_parts_raises" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploaderFlow" name="test_full_upload_two_parts_success" time="0.029" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploaderFlow" name="test_group_paths" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploaderFlow" name="test_daily_limit_raises_structured_error" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploaderFlow" name="test_part_finish_retries_on_40093001_then_succeeds" time="0.028" /><testcase classname="tests.gateway.test_qqbot.TestChunkedUploaderFlow" name="test_put_retries_transient_failure" time="1.008" /><testcase classname="tests.gateway.test_qqbot.TestApprovalButtonData" name="test_parse_allow_once" time="0.010" /><testcase classname="tests.gateway.test_qqbot.TestApprovalButtonData" name="test_parse_allow_always" time="0.009" /><testcase classname="tests.gateway.test_qqbot.TestApprovalButtonData" name="test_parse_deny" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestApprovalButtonData" name="test_parse_invalid_prefix_returns_none" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestApprovalButtonData" name="test_parse_unknown_decision_returns_none" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestApprovalButtonData" name="test_parse_empty_returns_none" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestUpdatePromptButtonData" name="test_parse_yes" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestUpdatePromptButtonData" name="test_parse_no" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestUpdatePromptButtonData" name="test_parse_unknown_returns_none" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestUpdatePromptButtonData" name="test_parse_wrong_prefix" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestBuildApprovalKeyboard" name="test_three_buttons_in_single_row" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestBuildApprovalKeyboard" name="test_button_data_embeds_session_key" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestBuildApprovalKeyboard" name="test_buttons_share_group_id_for_mutual_exclusion" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestBuildApprovalKeyboard" name="test_to_dict_has_expected_shape" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestBuildApprovalKeyboard" name="test_round_trip_parse_matches_build" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestBuildUpdatePromptKeyboard" name="test_two_buttons" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestBuildUpdatePromptKeyboard" name="test_button_data_shape" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestBuildApprovalText" name="test_exec_approval_includes_command_preview" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestBuildApprovalText" name="test_plugin_approval_uses_severity_icon" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestBuildApprovalText" name="test_truncates_long_commands" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestInteractionEventParsing" name="test_parse_c2c_interaction" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestInteractionEventParsing" name="test_parse_group_interaction" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestInteractionEventParsing" name="test_parse_missing_data_gracefully" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestAdapterInteractionDispatch" name="test_callback_invoked_with_parsed_event" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestAdapterInteractionDispatch" name="test_missing_id_skips_ack" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestAdapterInteractionDispatch" name="test_callback_exception_does_not_propagate" time="0.006" /><testcase classname="tests.gateway.test_qqbot.TestAdapterInteractionDispatch" name="test_explicit_no_callback_is_harmless" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestProcessQuotedContext" name="test_non_quote_message_returns_empty" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestProcessQuotedContext" name="test_quote_type_but_no_elements_returns_empty" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestProcessQuotedContext" name="test_quote_with_text_only" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestProcessQuotedContext" name="test_quote_with_voice_attachment_runs_stt" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestProcessQuotedContext" name="test_quote_with_file_preserves_filename" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestProcessQuotedContext" name="test_quote_with_image_returns_cached_paths" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestProcessQuotedContext" name="test_quote_with_image_only_no_text" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestProcessQuotedContext" name="test_multiple_elements_concatenated" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestProcessQuotedContext" name="test_invalid_message_type_string_returns_empty" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestMergeQuoteInto" name="test_empty_quote_returns_original" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestMergeQuoteInto" name="test_empty_text_returns_only_quote" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestMergeQuoteInto" name="test_both_present_joined_with_blank_line" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDefaultInteractionDispatch" name="test_default_callback_installed_on_init" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDefaultInteractionDispatch" name="test_send_exec_approval_is_a_class_method" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestDefaultInteractionDispatch" name="test_approval_click_once_maps_to_once" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestDefaultInteractionDispatch" name="test_approval_click_always_maps_to_always" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestDefaultInteractionDispatch" name="test_approval_click_deny_maps_to_deny" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestDefaultInteractionDispatch" name="test_approval_click_rejects_unauthorized_operator" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestDefaultInteractionDispatch" name="test_update_prompt_click_writes_response_file" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestDefaultInteractionDispatch" name="test_update_prompt_click_no_writes_n" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestDefaultInteractionDispatch" name="test_unknown_button_data_is_harmless" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestDefaultInteractionDispatch" name="test_empty_button_data_is_harmless" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestDefaultInteractionDispatch" name="test_resolve_exception_is_swallowed" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestSendExecApproval" name="test_delegates_to_send_approval_request" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestSendExecApproval" name="test_accepts_metadata_arg" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestSendUpdatePrompt" name="test_delegates_to_send_with_keyboard" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestSendUpdatePrompt" name="test_empty_default_has_no_hint" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestIdentifyIntents" name="test_intents_include_interaction_bit" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestProcessAttachmentsPathExposure" name="test_video_attachment_includes_path" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestProcessAttachmentsPathExposure" name="test_file_attachment_includes_path" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestProcessAttachmentsPathExposure" name="test_video_without_filename_falls_back_to_content_type" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestProcessAttachmentsPathExposure" name="test_download_failure_produces_no_attachment_info" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestProcessAttachmentsPathExposure" name="test_quoted_video_includes_path_in_quote_block" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestProcessAttachmentsPathExposure" name="test_quoted_file_includes_path_in_quote_block" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestOp7ServerReconnect" name="test_op7_closes_websocket" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestOp7ServerReconnect" name="test_op7_close_task_executes" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestOp9InvalidSession" name="test_op9_not_resumable_clears_session" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestOp9InvalidSession" name="test_op9_resumable_preserves_session" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestOp9InvalidSession" name="test_op9_non_resumable_triggers_ws_close" time="0.005" /><testcase classname="tests.gateway.test_qqbot.TestCloseCodeClassification" name="test_4009_preserves_session" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestCloseCodeClassification" name="test_fatal_codes_include_intent_errors" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestReadEventsClosedWsGuard" name="test_read_events_raises_when_ws_closed_on_entry" time="0.004" /><testcase classname="tests.gateway.test_qqbot.TestReadEventsClosedWsGuard" name="test_read_events_raises_when_ws_none" time="0.004" /><testcase classname="tests.gateway.test_queue_consumption.TestQueueMessageStorage" name="test_queue_stores_message_in_pending" time="0.004" /><testcase classname="tests.gateway.test_queue_consumption.TestQueueMessageStorage" name="test_get_pending_message_consumes_and_clears" time="0.005" /><testcase classname="tests.gateway.test_queue_consumption.TestQueueMessageStorage" name="test_dequeue_pending_event_preserves_voice_media_metadata" time="0.005" /><testcase classname="tests.gateway.test_queue_consumption.TestQueueMessageStorage" name="test_queue_does_not_set_interrupt_event" time="0.004" /><testcase classname="tests.gateway.test_queue_consumption.TestQueueMessageStorage" name="test_regular_message_sets_interrupt_event" time="0.004" /><testcase classname="tests.gateway.test_queue_consumption.TestQueueConsumptionAfterCompletion" name="test_pending_message_available_after_normal_completion" time="0.005" /><testcase classname="tests.gateway.test_queue_consumption.TestQueueConsumptionAfterCompletion" name="test_multiple_queues_overflow_fifo" time="0.005" /><testcase classname="tests.gateway.test_queue_consumption.TestQueueConsumptionAfterCompletion" name="test_promote_advances_queue_fifo" time="0.005" /><testcase classname="tests.gateway.test_queue_consumption.TestQueueConsumptionAfterCompletion" name="test_promote_stages_overflow_when_slot_already_populated" time="0.005" /><testcase classname="tests.gateway.test_queue_consumption.TestQueueConsumptionAfterCompletion" name="test_queue_depth_counts_slot_plus_overflow" time="0.004" /><testcase classname="tests.gateway.test_queue_consumption.TestQueueConsumptionAfterCompletion" name="test_enqueue_preserves_text_no_merging" time="0.005" /><testcase classname="tests.gateway.test_queue_consumption.TestBusyInputModeQueueFifo" name="test_rapid_text_followups_are_queued_in_fifo_order" time="0.005" /><testcase classname="tests.gateway.test_queue_consumption.TestBusyInputModeQueueFifo" name="test_queue_respects_bounded_cap" time="0.006" /><testcase classname="tests.gateway.test_queue_consumption.TestBusyInputModeQueueFifo" name="test_photo_burst_still_merges_in_head_slot" time="0.005" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftWakePayload" name="test_detects_content_fields" time="0.004" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftWakeHttp" name="test_send_is_noop_success" time="0.005" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftWakeHttp" name="test_rejects_missing_bridge_token" time="0.006" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftWakeHttp" name="test_rejects_content_bearing_payload" time="0.005" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftWakeHttp" name="test_returns_not_ready_without_gateway_handler" time="0.006" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftWakeHttp" name="test_accepts_content_free_wake_as_internal_event[raft-channel-wake.v1]" time="0.006" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftWakeHttp" name="test_accepts_content_free_wake_as_internal_event[raft-channel-wake.v2]" time="0.006" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftWakeHttp" name="test_busy_session_queues_without_interrupt" time="0.005" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftActivityHttp" name="test_activity_endpoint_auth_validation_and_drain" time="0.006" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftActivityHttp" name="test_hook_mapping_reports_only_raft_context" time="0.005" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftActivityHttp" name="test_session_start_registers_raft_profile_env_passthrough" time="0.005" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftActivityHttp" name="test_interrupted_turn_reports_error_stop" time="0.004" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftConfig" name="test_env_enablement_auto_enables_with_raft_profile" time="0.004" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftConfig" name="test_env_enablement_returns_none_without_profile" time="0.004" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftConfig" name="test_is_connected_checks_bridge_token_or_enabled" time="0.004" /><testcase classname="tests.gateway.test_raft_adapter.TestRaftConfig" name="test_register_calls_register_platform" time="0.004" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_reasoning_in_help_output" time="0.005" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_reasoning_is_known_command" time="0.008" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_parse_reasoning_command_args_accepts_ascii_and_smart_global_flags" time="0.004" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_reasoning_command_reloads_current_state_from_config" time="0.005" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_handle_reasoning_command_updates_config_and_cache" time="0.005" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_handle_reasoning_command_defaults_to_session_only" time="0.005" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_reasoning_global_clears_existing_session_override" time="0.005" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_reasoning_reset_clears_session_override_without_config_write" time="0.005" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_resolve_session_reasoning_prefers_session_override" time="0.005" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_run_agent_reloads_reasoning_config_per_message" time="0.053" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_run_agent_prefers_session_reasoning_override" time="0.058" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_run_agent_includes_enabled_mcp_servers_in_gateway_toolsets" time="0.056" /><testcase classname="tests.gateway.test_reasoning_command.TestReasoningCommand" name="test_run_agent_homeassistant_uses_default_platform_toolset" time="0.055" /><testcase classname="tests.gateway.test_reasoning_command.TestLoadShowReasoningCoercion" name="test_quoted_false_is_false" time="0.008" /><testcase classname="tests.gateway.test_reasoning_command.TestLoadShowReasoningCoercion" name="test_quoted_off_is_false" time="0.006" /><testcase classname="tests.gateway.test_reasoning_command.TestLoadShowReasoningCoercion" name="test_quoted_true_is_true" time="0.005" /><testcase classname="tests.gateway.test_reasoning_command.TestLoadShowReasoningCoercion" name="test_bare_true_is_true" time="0.005" /><testcase classname="tests.gateway.test_reasoning_command.TestLoadShowReasoningCoercion" name="test_missing_is_false" time="0.005" /><testcase classname="tests.gateway.test_relay_capability_surface" name="test_abstract_methods_are_the_known_set" time="0.004" /><testcase classname="tests.gateway.test_relay_capability_surface" name="test_message_len_fn_defaults_to_len" time="0.004" /><testcase classname="tests.gateway.test_relay_capability_surface" name="test_supports_draft_streaming_defaults_false" time="0.004" /><testcase classname="tests.gateway.test_relay_capability_surface" name="test_stream_consumer_reads_max_message_length_by_attribute" time="0.004" /><testcase classname="tests.gateway.test_reload_skills_command" name="test_reload_skills_handler_queues_note_on_diff" time="0.006" /><testcase classname="tests.gateway.test_reload_skills_command" name="test_reload_skills_handler_reports_no_changes" time="0.007" /><testcase classname="tests.gateway.test_reload_skills_command" name="test_dispatcher_routes_reload_skills" time="0.007" /><testcase classname="tests.gateway.test_reload_skills_command" name="test_underscored_alias_not_flagged_unknown" time="0.007" /><testcase classname="tests.gateway.test_reload_skills_discord_resync.TestRefreshSkillGroup" name="test_refresh_repopulates_entries_after_catalog_change" time="0.005" /><testcase classname="tests.gateway.test_reload_skills_discord_resync.TestRefreshSkillGroup" name="test_refresh_sorts_entries_alphabetically" time="0.005" /><testcase classname="tests.gateway.test_reload_skills_discord_resync.TestRefreshSkillGroup" name="test_refresh_handles_collector_exception_gracefully" time="0.005" /><testcase classname="tests.gateway.test_reload_skills_discord_resync.TestRegisterSkillGroupUsesInstanceState" name="test_refresh_catalog_state_populates_instance_attrs" time="0.004" /><testcase classname="tests.gateway.test_reload_skills_discord_resync.TestHandleReloadSkillsCallsRefreshSkillGroup" name="test_orchestrator_calls_refresh_skill_group_on_every_adapter" time="0.005" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_user_message_has_only_role_and_content" time="0.005" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_tool_message_has_only_role_and_content" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_assistant_minimal_has_only_role_and_content" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_assistant_preserves_reasoning" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_assistant_preserves_reasoning_content" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_assistant_preserves_reasoning_details" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_assistant_preserves_codex_reasoning_items" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_assistant_preserves_codex_message_items" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_assistant_preserves_finish_reason" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_assistant_drops_falsy_reasoning" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_assistant_preserves_empty_reasoning_content" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_assistant_drops_none_reasoning_content" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_assistant_preserves_all_six_fields_together" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_assistant_does_not_invent_keys" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_replay_fields_constant_is_stable" time="0.004" /><testcase classname="tests.gateway.test_replay_entry_fields.TestBuildReplayEntry" name="test_unrelated_keys_are_ignored" time="0.004" /><testcase classname="tests.gateway.test_reply_to_injection" name="test_reply_prefix_injected_when_text_absent_from_history" time="0.005" /><testcase classname="tests.gateway.test_reply_to_injection" name="test_reply_prefix_still_injected_when_text_in_history" time="0.005" /><testcase classname="tests.gateway.test_reply_to_injection" name="test_own_message_reply_prefix_marks_assistant_message" time="0.005" /><testcase classname="tests.gateway.test_reply_to_injection" name="test_no_prefix_without_reply_context" time="0.005" /><testcase classname="tests.gateway.test_reply_to_injection" name="test_no_prefix_when_reply_to_text_is_empty" time="0.005" /><testcase classname="tests.gateway.test_reply_to_injection" name="test_reply_snippet_truncated_to_500_chars" time="0.005" /><testcase classname="tests.gateway.test_response_filters" name="test_exact_silence_tokens_are_intentional_silence" time="0.004" /><testcase classname="tests.gateway.test_response_filters" name="test_blank_and_prose_mentions_are_not_silence" time="0.004" /><testcase classname="tests.gateway.test_response_filters" name="test_failed_agent_result_never_counts_as_intentional_silence" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_restart_command_while_busy_requests_drain_without_interrupt" time="0.007" /><testcase classname="tests.gateway.test_restart_drain" name="test_drain_queue_mode_queues_follow_up_without_interrupt" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_draining_rejects_new_session_messages" time="0.006" /><testcase classname="tests.gateway.test_restart_drain" name="test_load_busy_input_mode_prefers_env_then_config_then_default" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_load_busy_text_mode_follows_input_mode_and_honors_legacy" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_load_restart_drain_timeout_prefers_env_then_config_then_default" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_request_restart_is_idempotent" time="0.055" /><testcase classname="tests.gateway.test_restart_drain" name="test_launch_detached_restart_command_uses_setsid" time="0.007" /><testcase classname="tests.gateway.test_restart_drain" name="test_windows_gateway_venv_imports_add_site_packages" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_windows_detached_restart_scrubs_gateway_marker" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_shutdown_notification_sent_to_active_sessions" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_shutdown_notification_says_restarting_when_restart_requested" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_shutdown_notification_deduplicates_per_chat" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_shutdown_notification_skipped_when_no_active_agents" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_shutdown_notification_ignores_pending_sentinels" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_shutdown_notification_send_failure_does_not_block" time="0.006" /><testcase classname="tests.gateway.test_restart_drain" name="test_shutdown_notification_suppressed_when_flag_disabled" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_shutdown_notification_home_channel_suppressed_when_flag_disabled" time="0.005" /><testcase classname="tests.gateway.test_restart_drain" name="test_shutdown_notification_uses_persisted_origin_for_colon_ids" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_restart_notification_pending_false_without_marker" time="0.004" /><testcase classname="tests.gateway.test_restart_notification" name="test_restart_notification_pending_true_with_marker" time="0.004" /><testcase classname="tests.gateway.test_restart_notification" name="test_planned_restart_notification_pending_roundtrip" time="0.004" /><testcase classname="tests.gateway.test_restart_notification" name="test_restart_command_writes_notify_file" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_restart_command_uses_service_restart_under_systemd" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_restart_command_uses_detached_without_systemd" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_restart_command_preserves_thread_id" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_restart_command_uses_atomic_json_writes_for_marker_files" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_sethome_updates_running_config_for_same_process_restart" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_sethome_preserves_thread_target_for_same_process_restart" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_home_channel_startup_notification_to_configured_home" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_home_channel_startup_notification_preserves_thread_metadata" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_home_channel_startup_notification_skips_restart_target" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_home_channel_startup_notification_does_not_skip_different_thread" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_home_channel_startup_notification_ignores_false_send_result" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_restart_notification_delivers_and_cleans_up" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_restart_notification_with_thread" time="0.006" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_restart_notification_noop_when_no_file" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_restart_notification_skips_when_adapter_missing" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_restart_notification_cleans_up_on_send_failure" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_restart_notification_logs_warning_on_sendresult_failure" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_home_channel_startup_notification_skipped_when_flag_disabled" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_home_channel_startup_notification_default_flag_true" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_restart_notification_skipped_when_flag_disabled" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_send_restart_notification_logs_info_on_sendresult_success" time="0.005" /><testcase classname="tests.gateway.test_restart_notification" name="test_shutdown_notifications_use_cached_live_thread_source_when_origin_missing" time="0.006" /><testcase classname="tests.gateway.test_restart_notification" name="test_restart_shutdown_notification_anchors_telegram_dm_topic" time="0.005" /><testcase classname="tests.gateway.test_restart_redelivery_dedup" name="test_restart_handler_writes_dedup_marker_with_update_id" time="0.005" /><testcase classname="tests.gateway.test_restart_redelivery_dedup" name="test_redelivered_restart_with_same_update_id_is_ignored" time="0.005" /><testcase classname="tests.gateway.test_restart_redelivery_dedup" name="test_redelivered_restart_with_older_update_id_is_ignored" time="0.005" /><testcase classname="tests.gateway.test_restart_redelivery_dedup" name="test_fresh_restart_with_higher_update_id_is_processed" time="0.005" /><testcase classname="tests.gateway.test_restart_redelivery_dedup" name="test_stale_marker_older_than_5min_does_not_block" time="0.005" /><testcase classname="tests.gateway.test_restart_redelivery_dedup" name="test_no_marker_file_allows_restart" time="0.005" /><testcase classname="tests.gateway.test_restart_redelivery_dedup" name="test_corrupt_marker_file_is_treated_as_absent" time="0.005" /><testcase classname="tests.gateway.test_restart_redelivery_dedup" name="test_event_without_update_id_bypasses_dedup" time="0.006" /><testcase classname="tests.gateway.test_restart_redelivery_dedup" name="test_different_platform_bypasses_dedup" time="0.005" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_resume_pending_is_cleared_only_after_successful_turn" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestSessionEntryResumeFields" name="test_defaults" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestSessionEntryResumeFields" name="test_roundtrip_with_resume_fields" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestSessionEntryResumeFields" name="test_from_dict_legacy_without_resume_fields" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestSessionEntryResumeFields" name="test_malformed_timestamp_is_tolerated" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestMarkResumePending" name="test_marks_existing_session" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending.TestMarkResumePending" name="test_custom_reason_persists" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending.TestMarkResumePending" name="test_returns_false_for_unknown_key" time="0.005" /><testcase classname="tests.gateway.test_restart_resume_pending.TestMarkResumePending" name="test_does_not_override_suspended" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending.TestMarkResumePending" name="test_survives_roundtrip_through_json" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending.TestClearResumePending" name="test_clears_flag" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending.TestClearResumePending" name="test_returns_false_when_not_pending" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending.TestClearResumePending" name="test_returns_false_for_unknown_key" time="0.005" /><testcase classname="tests.gateway.test_restart_resume_pending.TestGetOrCreateResumePending" name="test_resume_pending_preserves_session_id" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending.TestGetOrCreateResumePending" name="test_suspended_still_creates_new_session" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending.TestGetOrCreateResumePending" name="test_suspended_overrides_resume_pending" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending.TestSuspendRecentlyActiveSkipsResumePending" name="test_resume_pending_entries_not_suspended" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending.TestSuspendRecentlyActiveSkipsResumePending" name="test_non_resume_pending_gets_resume_pending" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_resume_pending_restart_note_mentions_restart" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_resume_pending_shutdown_note_mentions_shutdown" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_resume_pending_fires_without_tool_tail" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_resume_pending_subsumes_tool_tail_note" time="0.005" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_no_resume_pending_preserves_tool_tail_note" time="0.005" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_stale_resume_pending_does_not_inject_restart_note" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_fresh_tool_tail_preserves_auto_continue_note" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_stale_tool_tail_does_not_inject_auto_continue_note" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_stale_tool_tail_with_production_data_shape" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_freshness_gate_disabled_via_zero_window" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_legacy_history_without_timestamps_still_injects" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_no_note_when_nothing_to_resume" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_resume_pending_note_warns_against_reexecuting_restart" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestResumePendingSystemNote" name="test_resume_pending_empty_message_reports_recovery" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_coerce_datetime" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_coerce_epoch_seconds" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_coerce_epoch_milliseconds" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_coerce_iso_string" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_coerce_iso_string_with_z_suffix" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_coerce_numeric_string" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_coerce_rejects_garbage" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_is_fresh_unknown_is_fresh" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_is_fresh_window_bounds" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_is_fresh_zero_window_always_fresh" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_last_transcript_timestamp_skips_meta" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_last_transcript_timestamp_empty" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_last_transcript_timestamp_row_without_timestamp" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_auto_continue_freshness_window_reads_env" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_auto_continue_freshness_window_default_when_unset" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_auto_continue_freshness_window_malformed_falls_back" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending.TestFreshnessHelpers" name="test_auto_continue_freshness_window_empty_falls_back" time="0.004" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_drain_timeout_marks_resume_pending" time="5.132" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_drain_timeout_uses_restart_reason_when_restarting" time="5.137" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_drain_timeout_skips_pending_sentinel_sessions" time="5.133" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_startup_auto_resume_schedules_fresh_pending_sessions" time="0.010" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_startup_auto_resume_includes_crash_recovery" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_startup_auto_resume_skips_stale_entries" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_startup_auto_resume_skips_suspended_and_originless" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_startup_auto_resume_skips_disallowed_reasons" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_startup_auto_resume_skips_when_adapter_unavailable" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_reconnect_reschedules_pending_after_late_platform_connect" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_reconnect_reschedule_is_platform_scoped" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_auto_resume_skips_sessions_with_running_agent" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_startup_restore_gate_queues_real_inbound_messages" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_startup_restore_waits_for_resume_before_draining_inbound" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_restart_banner_uses_try_to_resume_wording" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_restart_notifies_home_channel_even_without_active_sessions" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_restart_home_channel_notification_dedupes_active_chat" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_restart_home_channel_notification_not_deduped_across_threads" time="0.007" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_restart_home_channel_notification_ignores_false_send_result" time="0.006" /><testcase classname="tests.gateway.test_restart_resume_pending.TestStuckLoopEscalation" name="test_escalation_via_stuck_loop_counter_overrides_resume_pending" time="0.010" /><testcase classname="tests.gateway.test_restart_resume_pending.TestStuckLoopEscalation" name="test_successful_turn_flow_clears_both_counter_and_resume_pending" time="0.010" /><testcase classname="tests.gateway.test_restart_resume_pending.TestStuckLoopEscalation" name="test_increment_restart_failure_counts_uses_atomic_json_write" time="0.008" /><testcase classname="tests.gateway.test_restart_resume_pending.TestStuckLoopEscalation" name="test_clear_restart_failure_count_uses_atomic_json_write_when_entries_remain" time="0.008" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_auto_resume_sets_sentinel_before_task_execution" time="0.057" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_auto_resume_sentinel_cleaned_on_task_failure" time="0.061" /><testcase classname="tests.gateway.test_restart_resume_pending" name="test_auto_resume_runs_agent_exactly_once_through_full_path" time="0.417" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_no_session_db" time="0.010" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_list_named_sessions_when_no_arg" time="0.010" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_list_shows_usage_when_no_titled" time="0.009" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_resume_by_index" time="0.009" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_resume_index_out_of_range" time="0.008" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_resume_by_name" time="0.009" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_resume_nonexistent_name" time="0.008" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_resume_already_on_session" time="0.008" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_resume_auto_lineage" time="0.009" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_resume_follows_compression_continuation" time="0.009" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_resume_clears_running_agent" time="0.009" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_resume_evicts_cached_agent" time="0.010" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_resume_strips_outer_brackets" time="0.010" /><testcase classname="tests.gateway.test_resume_command.TestHandleResumeCommand" name="test_resume_resolves_by_session_id" time="0.009" /><testcase classname="tests.gateway.test_resume_command.TestHandleSessionsCommand" name="test_sessions_command_lists_current_platform_sessions" time="0.009" /><testcase classname="tests.gateway.test_resume_command.TestHandleSessionsCommand" name="test_sessions_all_full_lists_cross_platform_unnamed_sessions" time="0.009" /><testcase classname="tests.gateway.test_resume_command.TestHandleSessionsCommand" name="test_gateway_dispatches_sessions_command" time="0.008" /><testcase classname="tests.gateway.test_retry_replacement" name="test_gateway_retry_replaces_last_user_turn_in_transcript" time="0.008" /><testcase classname="tests.gateway.test_retry_replacement" name="test_gateway_retry_replays_original_text_not_retry_command" time="0.006" /><testcase classname="tests.gateway.test_retry_response" name="test_retry_returns_response_not_none" time="0.005" /><testcase classname="tests.gateway.test_retry_response" name="test_retry_no_previous_message" time="0.006" /><testcase classname="tests.gateway.test_run_cleanup_progress" name="test_cleanup_off_by_default_leaves_bubbles" time="0.661" /><testcase classname="tests.gateway.test_run_cleanup_progress" name="test_cleanup_registers_callback_and_deletes_on_success" time="0.585" /><testcase classname="tests.gateway.test_run_cleanup_progress" name="test_cleanup_skipped_on_failed_run" time="0.427" /><testcase classname="tests.gateway.test_run_cleanup_progress" name="test_cleanup_noop_on_adapter_without_delete_support" time="0.574" /><testcase classname="tests.gateway.test_run_cleanup_progress" name="test_cleanup_chains_with_existing_callback" time="0.585" /><testcase classname="tests.gateway.test_run_progress_interrupt" name="test_baseline_non_interrupted_agent_renders_progress" time="0.422" /><testcase classname="tests.gateway.test_run_progress_interrupt" name="test_progress_suppressed_when_agent_is_interrupted" time="0.422" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_progress_stays_in_originating_topic" time="0.777" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_progress_edits_keep_originating_topic_metadata" time="0.775" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_progress_does_not_use_event_message_id_for_telegram_dm" time="0.777" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_progress_uses_event_message_id_for_slack_dm" time="0.778" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_feishu_progress_replies_inside_existing_thread" time="0.778" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_all_mode_default_truncation_40_chars" time="0.425" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_all_mode_respects_custom_preview_length" time="0.473" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_all_mode_no_truncation_when_preview_fits" time="0.423" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_rolls_progress_bubble_before_platform_limit" time="0.522" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_surfaces_real_interim_commentary" time="0.224" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_surfaces_interim_commentary_by_default" time="0.173" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_suppresses_interim_commentary_when_disabled" time="0.168" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_tool_progress_does_not_control_interim_commentary" time="0.163" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_streaming_does_not_enable_completed_interim_commentary" time="0.211" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_display_streaming_does_not_enable_gateway_streaming" time="0.209" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_interim_commentary_works_with_tool_progress_off" time="0.210" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_bluebubbles_uses_commentary_send_path_for_quick_replies" time="0.158" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_previewed_final_marks_already_sent" time="0.160" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_matrix_streaming_omits_cursor" time="0.213" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_transformed_response_edits_streamed_message_in_place" time="0.111" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_queued_message_does_not_treat_commentary_as_final" time="0.211" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_defers_background_review_notification_until_release" time="0.109" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_base_processing_releases_post_delivery_callback_after_main_send" time="0.009" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_base_processing_stops_typing_before_hung_post_delivery_callback" time="0.015" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_drops_tool_progress_after_generation_invalidation" time="0.609" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_run_agent_drops_interim_commentary_after_generation_invalidation" time="0.625" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_keep_typing_stops_immediately_when_interrupt_event_is_set" time="0.261" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_verbose_mode_does_not_truncate_args_by_default" time="0.474" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_verbose_mode_respects_explicit_tool_preview_length" time="0.426" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_terminal_progress_renders_fenced_code_block" time="0.418" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_terminal_progress_verbose_shows_full_command" time="0.417" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_terminal_progress_no_bash_block_in_verbose_mode" time="0.422" /><testcase classname="tests.gateway.test_run_progress_topics" name="test_consecutive_terminal_progress_collapses_headers" time="0.424" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_windows_paths_match[MEDIA:C:\\Users\\test\\image.png-C:\\Users\\test\\image.png]" time="0.010" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_windows_paths_match[MEDIA:D:\\data\\report.pdf-D:\\data\\report.pdf]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_windows_paths_match[MEDIA:E:\\Photos\\vacation.jpg-E:\\Photos\\vacation.jpg]" time="0.007" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_windows_paths_match[MEDIA:C:/Users/test/image.png-C:/Users/test/image.png]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_windows_paths_match[MEDIA:D:/data/report.pdf-D:/data/report.pdf]" time="0.007" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_windows_paths_match[MEDIA:C:\\Users/test\\image.webp-C:\\Users/test\\image.webp]" time="0.009" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_windows_paths_match[MEDIA:F:\\videos\\clip.mp4-F:\\videos\\clip.mp4]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_windows_paths_match[MEDIA:G:\\audio\\song.mp3-G:\\audio\\song.mp3]" time="0.007" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_windows_paths_match[MEDIA:H:\\docs\\sheet.xlsx-H:\\docs\\sheet.xlsx]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_windows_paths_match[MEDIA:Z:\\archive\\backup.zip-Z:\\archive\\backup.zip]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_unix_paths_still_match[MEDIA:/tmp/output.png-/tmp/output.png]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_unix_paths_still_match[MEDIA:/var/log/report.pdf-/var/log/report.pdf]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_unix_paths_still_match[MEDIA:/home/user/docs/file.txt-/home/user/docs/file.txt]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_unix_paths_still_match[MEDIA:~/Downloads/image.jpg-~/Downloads/image.jpg]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_unix_paths_still_match[MEDIA:~/Documents/report.pdf-~/Documents/report.pdf]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_invalid_paths_dont_match[No MEDIA tag here]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_invalid_paths_dont_match[MEDIA:relative/path/file.png]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_invalid_paths_dont_match[MEDIA:file.png]" time="0.006" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_invalid_paths_dont_match[MEDIA:C:file.png]" time="0.005" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_invalid_paths_dont_match[MEDIA:/path/to/file.unknown]" time="0.005" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_invalid_paths_dont_match[MEDIA:/path/to/file]" time="0.005" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_invalid_paths_dont_match[MEDIA:]" time="0.004" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_pre_fix_pattern_rejects_windows[MEDIA:C:\\Users\\test\\image.png]" time="0.004" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_pre_fix_pattern_rejects_windows[MEDIA:D:/data/report.pdf]" time="0.005" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_pre_fix_pattern_rejects_windows[MEDIA:C:\\path\\file.jpg]" time="0.005" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_multiple_media_tags_in_content" time="0.004" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_case_insensitive_drive_letter" time="0.004" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_case_insensitive_extensions[MEDIA:C:\\path\\file.jpeg]" time="0.004" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_case_insensitive_extensions[MEDIA:C:\\path\\file.JPG]" time="0.004" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_case_insensitive_extensions[MEDIA:C:\\path\\file.GIF]" time="0.004" /><testcase classname="tests.gateway.test_run_tool_media_re.TestToolMediaReWindowsPaths" name="test_case_insensitive_extensions[MEDIA:C:\\path\\file.MP4]" time="0.004" /><testcase classname="tests.gateway.test_runner_fatal_adapter" name="test_runner_requests_clean_exit_for_nonretryable_startup_conflict" time="0.196" /><testcase classname="tests.gateway.test_runner_fatal_adapter" name="test_runner_fails_closed_when_telegram_fatal_status_update_fails" time="0.123" /><testcase classname="tests.gateway.test_runner_fatal_adapter" name="test_runner_queues_retryable_runtime_fatal_for_reconnection" time="0.122" /><testcase classname="tests.gateway.test_runner_startup_failures" name="test_runner_stays_alive_for_retryable_startup_errors" time="0.552" /><testcase classname="tests.gateway.test_runner_startup_failures" name="test_runner_fails_closed_when_initial_runtime_status_write_fails" time="0.122" /><testcase classname="tests.gateway.test_runner_startup_failures" name="test_runner_allows_cron_only_mode_when_no_platforms_are_enabled" time="0.200" /><testcase classname="tests.gateway.test_runner_startup_failures" name="test_runner_records_connected_platform_state_on_success" time="1.205" /><testcase classname="tests.gateway.test_runner_startup_failures" name="test_start_gateway_verbosity_imports_redacting_formatter" time="0.013" /><testcase classname="tests.gateway.test_runner_startup_failures" name="test_start_gateway_replace_force_uses_terminate_pid" time="0.010" /><testcase classname="tests.gateway.test_runner_startup_failures" name="test_start_gateway_replace_aborts_when_force_killed_pid_still_alive" time="0.007" /><testcase classname="tests.gateway.test_runner_startup_failures" name="test_start_gateway_replace_writes_takeover_marker_before_sigterm" time="0.009" /><testcase classname="tests.gateway.test_runner_startup_failures" name="test_start_gateway_replace_clears_marker_on_permission_denied" time="0.006" /><testcase classname="tests.gateway.test_runner_startup_failures" name="test_runner_degrades_gracefully_when_all_adapters_missing" time="0.204" /><testcase classname="tests.gateway.test_runner_startup_failures" name="test_runner_warns_when_docker_gateway_lacks_explicit_output_mount" time="0.122" /><testcase classname="tests.gateway.test_running_agent_session_toggles" name="test_yolo_dispatches_mid_run" time="0.008" /><testcase classname="tests.gateway.test_running_agent_session_toggles" name="test_verbose_dispatches_mid_run" time="0.007" /><testcase classname="tests.gateway.test_running_agent_session_toggles" name="test_fast_rejected_mid_run" time="0.006" /><testcase classname="tests.gateway.test_running_agent_session_toggles" name="test_reasoning_rejected_mid_run" time="0.006" /><testcase classname="tests.gateway.test_running_agent_session_toggles" name="test_btw_dispatches_mid_run" time="0.006" /><testcase classname="tests.gateway.test_runtime_config_env_expansion" name="test_load_prefill_messages_expands_env_var_path" time="0.005" /><testcase classname="tests.gateway.test_runtime_config_env_expansion" name="test_load_prefill_messages_accepts_legacy_agent_key" time="0.005" /><testcase classname="tests.gateway.test_runtime_config_env_expansion" name="test_load_prefill_messages_prefers_top_level_over_legacy" time="0.005" /><testcase classname="tests.gateway.test_runtime_config_env_expansion" name="test_gateway_runtime_loaders_expand_env_var_templates[agent:\n  system_prompt: ${GW_PROMPT}\n-GW_PROMPT-expanded prompt-_load_ephemeral_system_prompt-expanded prompt]" time="0.005" /><testcase classname="tests.gateway.test_runtime_config_env_expansion" name="test_gateway_runtime_loaders_expand_env_var_templates[agent:\n  reasoning_effort: ${REASONING_LEVEL}\n-REASONING_LEVEL-high-_load_reasoning_config-expected1]" time="0.005" /><testcase classname="tests.gateway.test_runtime_config_env_expansion" name="test_gateway_runtime_loaders_expand_env_var_templates[agent:\n  service_tier: ${SERVICE_TIER}\n-SERVICE_TIER-priority-_load_service_tier-priority]" time="0.005" /><testcase classname="tests.gateway.test_runtime_config_env_expansion" name="test_gateway_runtime_loaders_expand_env_var_templates[display:\n  busy_input_mode: ${BUSY_MODE}\n-BUSY_MODE-steer-_load_busy_input_mode-steer]" time="0.005" /><testcase classname="tests.gateway.test_runtime_config_env_expansion" name="test_gateway_runtime_loaders_expand_env_var_templates[agent:\n  restart_drain_timeout: ${DRAIN_TIMEOUT}\n-DRAIN_TIMEOUT-12-_load_restart_drain_timeout-12.0]" time="0.005" /><testcase classname="tests.gateway.test_runtime_config_env_expansion" name="test_gateway_runtime_loaders_expand_env_var_templates[display:\n  background_process_notifications: ${BG_MODE}\n-BG_MODE-error-_load_background_notifications_mode-error]" time="0.005" /><testcase classname="tests.gateway.test_runtime_env_reload_config_authority" name="test_reload_runtime_env_preserves_config_max_turns" time="0.005" /><testcase classname="tests.gateway.test_runtime_env_reload_config_authority" name="test_reload_runtime_env_keeps_env_max_iterations_when_config_omits_key" time="0.005" /><testcase classname="tests.gateway.test_runtime_env_reload_config_authority" name="test_current_max_iterations_reloads_before_reading" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_model_short_drops_vendor_prefix[openai/gpt-5.4-gpt-5.4]" time="0.005" /><testcase classname="tests.gateway.test_runtime_footer" name="test_model_short_drops_vendor_prefix[anthropic/claude-sonnet-4.6-claude-sonnet-4.6]" time="0.005" /><testcase classname="tests.gateway.test_runtime_footer" name="test_model_short_drops_vendor_prefix[gpt-5.4-gpt-5.4]" time="0.005" /><testcase classname="tests.gateway.test_runtime_footer" name="test_model_short_drops_vendor_prefix[-]" time="0.005" /><testcase classname="tests.gateway.test_runtime_footer" name="test_model_short_drops_vendor_prefix[None-]" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_home_relative_cwd_collapses_home" time="0.005" /><testcase classname="tests.gateway.test_runtime_footer" name="test_home_relative_cwd_leaves_abs_path_alone" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_home_relative_cwd_empty_returns_empty" time="0.005" /><testcase classname="tests.gateway.test_runtime_footer" name="test_format_footer_all_fields" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_format_footer_skips_missing_context_length" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_format_footer_context_pct_clamped_to_100" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_format_footer_context_pct_never_negative" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_format_footer_empty_fields_returns_empty" time="0.005" /><testcase classname="tests.gateway.test_runtime_footer" name="test_format_footer_drops_cwd_when_empty" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_format_footer_custom_field_order" time="0.005" /><testcase classname="tests.gateway.test_runtime_footer" name="test_format_footer_unknown_field_silently_ignored" time="0.005" /><testcase classname="tests.gateway.test_runtime_footer" name="test_resolve_defaults_off_empty_config" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_resolve_global_enable" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_resolve_platform_override_wins" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_resolve_platform_can_add_fields_only" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_resolve_ignores_malformed_config" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_build_footer_empty_when_disabled" time="0.005" /><testcase classname="tests.gateway.test_runtime_footer" name="test_build_footer_returns_rendered_when_enabled" time="0.005" /><testcase classname="tests.gateway.test_runtime_footer" name="test_build_footer_per_platform_off_suppresses" time="0.004" /><testcase classname="tests.gateway.test_runtime_footer" name="test_build_footer_no_data_returns_empty_even_when_enabled" time="0.005" /><testcase classname="tests.gateway.test_safe_adapter_disconnect" name="test_safe_disconnect_calls_adapter_disconnect" time="0.005" /><testcase classname="tests.gateway.test_safe_adapter_disconnect" name="test_safe_disconnect_swallows_exceptions" time="0.005" /><testcase classname="tests.gateway.test_safe_adapter_disconnect" name="test_safe_disconnect_handles_none_platform" time="0.005" /><testcase classname="tests.gateway.test_safe_adapter_disconnect" name="test_safe_disconnect_times_out_and_continues" time="0.006" /><testcase classname="tests.gateway.test_send_image_file.TestExtractMediaImages" name="test_png_image_extracted" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestExtractMediaImages" name="test_jpg_image_extracted" time="0.004" /><testcase classname="tests.gateway.test_send_image_file.TestExtractMediaImages" name="test_webp_image_extracted" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestExtractMediaImages" name="test_mixed_audio_and_image" time="0.004" /><testcase classname="tests.gateway.test_send_image_file.TestTelegramSendImageFile" name="test_sends_local_image_as_photo" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestTelegramSendImageFile" name="test_returns_error_when_file_missing" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestTelegramSendImageFile" name="test_returns_error_when_not_connected" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestTelegramSendImageFile" name="test_caption_truncated_to_1024" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestTelegramSendImageFile" name="test_thread_id_forwarded" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestDiscordSendImageFile" name="test_sends_local_image_as_attachment" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestDiscordSendImageFile" name="test_send_document_uploads_file_attachment" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestDiscordSendImageFile" name="test_send_video_uploads_file_attachment" time="0.006" /><testcase classname="tests.gateway.test_send_image_file.TestDiscordSendImageFile" name="test_returns_error_when_file_missing" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestDiscordSendImageFile" name="test_returns_error_when_not_connected" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestDiscordSendImageFile" name="test_handles_missing_channel" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestSlackSendImageFile" name="test_sends_local_image_via_upload" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestSlackSendImageFile" name="test_returns_error_when_file_missing" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestSlackSendImageFile" name="test_returns_error_when_not_connected" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestScreenshotCleanup" name="test_cleanup_removes_old_screenshots" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestScreenshotCleanup" name="test_cleanup_is_throttled_per_directory" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestScreenshotCleanup" name="test_cleanup_ignores_non_screenshot_files" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestScreenshotCleanup" name="test_cleanup_handles_empty_dir" time="0.005" /><testcase classname="tests.gateway.test_send_image_file.TestScreenshotCleanup" name="test_cleanup_handles_nonexistent_dir" time="0.005" /><testcase classname="tests.gateway.test_send_multiple_images.TestBaseDefaultLoop" name="test_loops_per_image_by_default" time="0.005" /><testcase classname="tests.gateway.test_send_multiple_images.TestBaseDefaultLoop" name="test_empty_batch_is_noop" time="0.005" /><testcase classname="tests.gateway.test_send_multiple_images.TestTelegramMultiImage" name="test_single_batch_under_10_calls_send_media_group_once" time="0.005" /><testcase classname="tests.gateway.test_send_multiple_images.TestTelegramMultiImage" name="test_batch_over_10_chunks" time="0.005" /><testcase classname="tests.gateway.test_send_multiple_images.TestTelegramMultiImage" name="test_animations_routed_to_send_animation" time="0.005" /><testcase classname="tests.gateway.test_send_multiple_images.TestTelegramMultiImage" name="test_fallback_to_per_image_on_send_media_group_failure" time="0.006" /><testcase classname="tests.gateway.test_send_multiple_images.TestTelegramMultiImage" name="test_empty_noop" time="0.005" /><testcase classname="tests.gateway.test_send_multiple_images.TestDiscordMultiImage" name="test_single_batch_of_local_files_sends_once" time="0.006" /><testcase classname="tests.gateway.test_send_multiple_images.TestDiscordMultiImage" name="test_batch_over_10_chunks_into_two_messages" time="0.007" /><testcase classname="tests.gateway.test_send_multiple_images.TestDiscordMultiImage" name="test_empty_noop" time="0.005" /><testcase classname="tests.gateway.test_send_multiple_images.TestSlackMultiImage" name="test_single_batch_of_local_files_sends_one_upload" time="0.013" /><testcase classname="tests.gateway.test_send_multiple_images.TestSlackMultiImage" name="test_batch_over_10_chunks" time="0.021" /><testcase classname="tests.gateway.test_send_multiple_images.TestSlackMultiImage" name="test_empty_noop" time="0.005" /><testcase classname="tests.gateway.test_send_multiple_images.TestMattermostMultiImage" name="test_local_files_uploaded_and_single_post" time="0.005" /><testcase classname="tests.gateway.test_send_multiple_images.TestMattermostMultiImage" name="test_batch_over_5_chunks" time="0.005" /><testcase classname="tests.gateway.test_send_multiple_images.TestMattermostMultiImage" name="test_empty_noop" time="0.005" /><testcase classname="tests.gateway.test_send_multiple_images.TestEmailMultiImage" name="test_local_files_attached_in_single_email" time="0.006" /><testcase classname="tests.gateway.test_send_multiple_images.TestEmailMultiImage" name="test_remote_urls_linked_in_body" time="0.010" /><testcase classname="tests.gateway.test_send_multiple_images.TestEmailMultiImage" name="test_empty_noop" time="0.006" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_none_is_not_retryable" time="0.007" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_empty_string_is_not_retryable" time="0.006" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_known_pattern_is_retryable[connecterror]" time="0.006" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_known_pattern_is_retryable[connectionerror]" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_known_pattern_is_retryable[connectionreset]" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_known_pattern_is_retryable[connectionrefused]" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_known_pattern_is_retryable[connecttimeout]" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_known_pattern_is_retryable[network]" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_known_pattern_is_retryable[broken pipe]" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_known_pattern_is_retryable[remotedisconnected]" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_known_pattern_is_retryable[eoferror]" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_permission_error_not_retryable" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_bad_request_not_retryable" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_case_insensitive" time="0.004" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_timeout_not_retryable" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_timed_out_not_retryable" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsRetryableError" name="test_connect_timeout_is_retryable" time="0.004" /><testcase classname="tests.gateway.test_send_retry.TestIsTimeoutError" name="test_none_is_not_timeout" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsTimeoutError" name="test_empty_is_not_timeout" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsTimeoutError" name="test_timed_out" time="0.004" /><testcase classname="tests.gateway.test_send_retry.TestIsTimeoutError" name="test_read_timeout" time="0.004" /><testcase classname="tests.gateway.test_send_retry.TestIsTimeoutError" name="test_write_timeout" time="0.004" /><testcase classname="tests.gateway.test_send_retry.TestIsTimeoutError" name="test_connect_timeout_not_flagged" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestIsTimeoutError" name="test_connection_error_not_timeout" time="0.004" /><testcase classname="tests.gateway.test_send_retry.TestSendWithRetrySuccess" name="test_success_first_attempt" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestSendWithRetrySuccess" name="test_returns_message_id" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestSendWithRetryNetworkRetry" name="test_retries_on_connect_error_and_succeeds" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestSendWithRetryNetworkRetry" name="test_timeout_not_retried_to_prevent_duplicates" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestSendWithRetryNetworkRetry" name="test_connect_timeout_still_retried" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestSendWithRetryNetworkRetry" name="test_retryable_flag_respected" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestSendWithRetryNetworkRetry" name="test_network_to_nonnetwork_transition_falls_back_to_plaintext" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestSendWithRetryExhausted" name="test_sends_user_notice_after_exhaustion" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestSendWithRetryExhausted" name="test_notice_send_exception_doesnt_propagate" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestSendWithRetryFallback" name="test_non_network_error_falls_back_immediately" time="0.005" /><testcase classname="tests.gateway.test_send_retry.TestSendWithRetryFallback" name="test_fallback_failure_logged_but_not_raised" time="0.006" /><testcase classname="tests.gateway.test_send_voice_reply_notify" name="test_voice_reply_marks_metadata_notify_true_for_dm" time="0.006" /><testcase classname="tests.gateway.test_send_voice_reply_notify" name="test_voice_reply_marks_existing_thread_metadata_without_mutation" time="0.006" /><testcase classname="tests.gateway.test_session.TestSessionSourceRoundtrip" name="test_full_roundtrip" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionSourceRoundtrip" name="test_full_roundtrip_with_chat_topic" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionSourceRoundtrip" name="test_minimal_roundtrip" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionSourceRoundtrip" name="test_chat_id_coerced_to_string" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionSourceRoundtrip" name="test_missing_optional_fields" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionSourceRoundtrip" name="test_unknown_platform_rejected_for_bad_names" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionSourceDescription" name="test_local_cli" time="0.004" /><testcase classname="tests.gateway.test_session.TestSessionSourceDescription" name="test_dm_with_username" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionSourceDescription" name="test_dm_without_username_falls_back_to_user_id" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionSourceDescription" name="test_group_shows_chat_name" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionSourceDescription" name="test_channel_type" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionSourceDescription" name="test_thread_id_appended" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionSourceDescription" name="test_unknown_chat_type_uses_name" time="0.005" /><testcase classname="tests.gateway.test_session.TestLocalCliFactory" name="test_local_cli_defaults" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_telegram_prompt_contains_platform_and_chat" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_bluebubbles_prompt_mentions_short_conversational_i_message_format" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_discord_prompt" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_slack_prompt_includes_platform_notes" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_discord_prompt_with_channel_topic" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_prompt_omits_channel_topic_when_none" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_local_prompt_mentions_machine" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_local_delivery_path_uses_display_hermes_home" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_whatsapp_prompt" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_multi_user_thread_prompt" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_non_thread_group_shows_user" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_shared_non_thread_group_prompt_hides_single_user" time="0.005" /><testcase classname="tests.gateway.test_session.TestBuildSessionContextPrompt" name="test_dm_thread_shows_user_not_multi" time="0.005" /><testcase classname="tests.gateway.test_session.TestSenderPrefixWithBackfill" name="test_plain_message_gets_prefix" time="0.005" /><testcase classname="tests.gateway.test_session.TestSenderPrefixWithBackfill" name="test_backfill_prefix_only_on_trigger" time="0.005" /><testcase classname="tests.gateway.test_session.TestSenderPrefixWithBackfill" name="test_backfill_preserves_context_block" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionStoreRewriteTranscript" name="test_rewrite_replaces_transcript" time="0.006" /><testcase classname="tests.gateway.test_session.TestSessionStoreRewriteTranscript" name="test_rewrite_with_empty_list" time="0.006" /><testcase classname="tests.gateway.test_session.TestLoadTranscriptDBOnly" name="test_db_only_returns_empty_for_nonexistent" time="0.006" /><testcase classname="tests.gateway.test_session.TestLoadTranscriptDBOnly" name="test_db_only_returns_messages" time="0.006" /><testcase classname="tests.gateway.test_session.TestSessionStoreSwitchSession" name="test_switch_session_reopens_target_session_in_db" time="0.007" /><testcase classname="tests.gateway.test_session.TestSessionStoreLookupBySessionId" name="test_returns_active_entry_for_persisted_session_id" time="0.006" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_whatsapp_dm_uses_canonical_identifier" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_whatsapp_dm_aliases_share_one_session_key" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_whatsapp_group_participant_aliases_share_session_key" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_whatsapp_group_shared_sessions_untouched_by_canonicalisation" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_store_delegates_to_build_session_key" time="0.006" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_store_creates_distinct_group_sessions_per_user" time="0.006" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_store_shares_group_sessions_when_disabled_in_config" time="0.006" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_telegram_dm_includes_chat_id" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_distinct_dm_chat_ids_get_distinct_session_keys" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_dm_without_chat_id_falls_back_to_user_id" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_dm_without_chat_id_distinct_users_do_not_collide" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_dm_without_chat_id_prefers_user_id_alt" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_dm_without_chat_id_or_user_id_falls_back_to_thread_then_sink" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_discord_group_includes_chat_id" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_group_sessions_are_isolated_per_user_when_user_id_present" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_group_sessions_can_be_shared_when_isolation_disabled" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_group_thread_includes_thread_id" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_group_thread_sessions_are_shared_by_default" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_group_thread_sessions_can_be_isolated_per_user" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_non_thread_group_sessions_still_isolated_per_user" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_discord_thread_sessions_shared_by_default" time="0.004" /><testcase classname="tests.gateway.test_session.TestWhatsAppSessionKeyConsistency" name="test_dm_thread_sessions_not_affected" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppIdentifierPublicHelpers" name="test_normalize_strips_jid_suffix" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppIdentifierPublicHelpers" name="test_normalize_strips_lid_suffix" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppIdentifierPublicHelpers" name="test_normalize_strips_device_suffix" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppIdentifierPublicHelpers" name="test_normalize_strips_leading_plus" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppIdentifierPublicHelpers" name="test_normalize_handles_bare_numeric" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppIdentifierPublicHelpers" name="test_normalize_handles_empty_and_none" time="0.004" /><testcase classname="tests.gateway.test_session.TestWhatsAppIdentifierPublicHelpers" name="test_canonical_without_mapping_returns_normalized" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppIdentifierPublicHelpers" name="test_canonical_walks_lid_mapping" time="0.005" /><testcase classname="tests.gateway.test_session.TestWhatsAppIdentifierPublicHelpers" name="test_canonical_empty_input" time="0.005" /><testcase classname="tests.gateway.test_session.TestSessionStoreEntriesAttribute" name="test_entries_attribute_exists" time="0.005" /><testcase classname="tests.gateway.test_session.TestHasAnySessions" name="test_uses_database_count_when_available" time="0.006" /><testcase classname="tests.gateway.test_session.TestHasAnySessions" name="test_first_session_ever_returns_false" time="0.006" /><testcase classname="tests.gateway.test_session.TestHasAnySessions" name="test_fallback_without_database" time="0.006" /><testcase classname="tests.gateway.test_session.TestLastPromptTokens" name="test_session_entry_default" time="0.005" /><testcase classname="tests.gateway.test_session.TestLastPromptTokens" name="test_session_entry_roundtrip" time="0.004" /><testcase classname="tests.gateway.test_session.TestLastPromptTokens" name="test_session_entry_from_old_data" time="0.004" /><testcase classname="tests.gateway.test_session.TestLastPromptTokens" name="test_update_session_sets_last_prompt_tokens" time="0.006" /><testcase classname="tests.gateway.test_session.TestLastPromptTokens" name="test_update_session_none_does_not_change" time="0.006" /><testcase classname="tests.gateway.test_session.TestLastPromptTokens" name="test_update_session_zero_resets" time="0.006" /><testcase classname="tests.gateway.test_session.TestRewriteTranscriptPreservesReasoning" name="test_reasoning_survives_rewrite" time="0.007" /><testcase classname="tests.gateway.test_session.TestRewriteTranscriptPreservesReasoning" name="test_db_rewrite_is_atomic_on_insert_failure" time="0.007" /><testcase classname="tests.gateway.test_session_api" name="test_capabilities_advertises_session_control_surface" time="0.008" /><testcase classname="tests.gateway.test_session_api" name="test_run_agent_binds_api_session_context_for_tool_env" time="0.008" /><testcase classname="tests.gateway.test_session_api" name="test_session_crud_and_message_history" time="0.011" /><testcase classname="tests.gateway.test_session_api" name="test_session_messages_follow_compression_tip" time="0.008" /><testcase classname="tests.gateway.test_session_api" name="test_session_fork_uses_current_sessiondb_branch_primitives" time="0.008" /><testcase classname="tests.gateway.test_session_api" name="test_session_chat_loads_history_and_preserves_session_headers" time="0.008" /><testcase classname="tests.gateway.test_session_api" name="test_session_chat_accepts_multimodal_message" time="0.008" /><testcase classname="tests.gateway.test_session_api" name="test_session_chat_stream_accepts_multimodal_message" time="0.008" /><testcase classname="tests.gateway.test_session_api" name="test_session_chat_stream_emits_lifecycle_events_and_keepalive_safe_shape" time="0.008" /><testcase classname="tests.gateway.test_session_api" name="test_session_chat_stream_run_completed_carries_turn_transcript" time="0.008" /><testcase classname="tests.gateway.test_session_api" name="test_session_endpoints_require_auth_when_key_configured" time="0.008" /><testcase classname="tests.gateway.test_session_api" name="test_session_header_rejected_without_api_key" time="0.008" /><testcase classname="tests.gateway.test_session_boundary_hooks" name="test_reset_fires_finalize_hook" time="0.006" /><testcase classname="tests.gateway.test_session_boundary_hooks" name="test_reset_fires_reset_hook" time="0.006" /><testcase classname="tests.gateway.test_session_boundary_hooks" name="test_finalize_before_reset" time="0.005" /><testcase classname="tests.gateway.test_session_boundary_hooks" name="test_shutdown_fires_finalize_for_active_agents" time="5.032" /><testcase classname="tests.gateway.test_session_boundary_hooks" name="test_hook_error_does_not_break_reset" time="0.010" /><testcase classname="tests.gateway.test_session_boundary_hooks" name="test_idle_expiry_fires_finalize_hook" time="0.009" /><testcase classname="tests.gateway.test_session_boundary_security_state" name="test_resume_clears_session_scoped_approval_and_yolo_state" time="0.008" /><testcase classname="tests.gateway.test_session_boundary_security_state" name="test_branch_clears_session_scoped_approval_and_yolo_state" time="0.007" /><testcase classname="tests.gateway.test_session_boundary_security_state" name="test_branch_preserves_persisted_assistant_metadata" time="0.008" /><testcase classname="tests.gateway.test_session_boundary_security_state" name="test_clear_session_boundary_security_state_is_scoped" time="0.006" /><testcase classname="tests.gateway.test_session_boundary_security_state" name="test_clear_session_boundary_security_state_wakes_blocked_approvals" time="0.006" /><testcase classname="tests.gateway.test_session_dm_thread_seeding.TestDMThreadIsolation" name="test_thread_session_starts_empty" time="0.008" /><testcase classname="tests.gateway.test_session_dm_thread_seeding.TestDMThreadIsolation" name="test_parent_transcript_unaffected_by_thread" time="0.008" /><testcase classname="tests.gateway.test_session_dm_thread_seeding.TestDMThreadIsolation" name="test_multiple_threads_are_independent" time="0.008" /><testcase classname="tests.gateway.test_session_dm_thread_seeding.TestDMThreadIsolation" name="test_existing_thread_session_preserved" time="0.009" /><testcase classname="tests.gateway.test_session_dm_thread_seeding.TestDMThreadIsolationEdgeCases" name="test_group_thread_starts_empty" time="0.008" /><testcase classname="tests.gateway.test_session_dm_thread_seeding.TestDMThreadIsolationEdgeCases" name="test_thread_without_parent_session_starts_empty" time="0.008" /><testcase classname="tests.gateway.test_session_dm_thread_seeding.TestDMThreadIsolationEdgeCases" name="test_dm_without_thread_starts_empty" time="0.008" /><testcase classname="tests.gateway.test_session_dm_thread_seeding.TestDMThreadIsolationCrossPlatform" name="test_thread_starts_empty_across_platforms[Platform.SLACK]" time="0.008" /><testcase classname="tests.gateway.test_session_dm_thread_seeding.TestDMThreadIsolationCrossPlatform" name="test_thread_starts_empty_across_platforms[Platform.TELEGRAM]" time="0.009" /><testcase classname="tests.gateway.test_session_dm_thread_seeding.TestDMThreadIsolationCrossPlatform" name="test_thread_starts_empty_across_platforms[Platform.DISCORD]" time="0.008" /><testcase classname="tests.gateway.test_session_env" name="test_set_session_env_sets_contextvars" time="0.006" /><testcase classname="tests.gateway.test_session_env" name="test_session_source_uses_contextvars" time="0.006" /><testcase classname="tests.gateway.test_session_env" name="test_clear_session_env_restores_previous_state" time="0.006" /><testcase classname="tests.gateway.test_session_env" name="test_get_session_env_falls_back_to_os_environ" time="0.006" /><testcase classname="tests.gateway.test_session_env" name="test_get_session_env_default_when_nothing_set" time="0.006" /><testcase classname="tests.gateway.test_session_env" name="test_set_session_env_handles_missing_optional_fields" time="0.006" /><testcase classname="tests.gateway.test_session_env" name="test_session_key_set_via_contextvars" time="0.006" /><testcase classname="tests.gateway.test_session_env" name="test_session_key_falls_back_to_os_environ" time="0.006" /><testcase classname="tests.gateway.test_session_env" name="test_session_id_set_via_contextvars" time="0.006" /><testcase classname="tests.gateway.test_session_env" name="test_set_session_env_includes_session_key" time="0.005" /><testcase classname="tests.gateway.test_session_env" name="test_session_key_no_race_condition_with_contextvars" time="0.156" /><testcase classname="tests.gateway.test_session_env" name="test_run_in_executor_with_context_preserves_session_env" time="0.011" /><testcase classname="tests.gateway.test_session_env" name="test_run_in_executor_with_context_forwards_args" time="0.011" /><testcase classname="tests.gateway.test_session_env" name="test_run_in_executor_with_context_propagates_exceptions" time="0.007" /><testcase classname="tests.gateway.test_session_hygiene.TestSessionHygieneThresholds" name="test_small_session_below_thresholds" time="0.008" /><testcase classname="tests.gateway.test_session_hygiene.TestSessionHygieneThresholds" name="test_large_token_count_triggers" time="0.006" /><testcase classname="tests.gateway.test_session_hygiene.TestSessionHygieneThresholds" name="test_under_threshold_no_trigger" time="0.006" /><testcase classname="tests.gateway.test_session_hygiene.TestSessionHygieneThresholds" name="test_message_count_alone_does_not_trigger" time="0.006" /><testcase classname="tests.gateway.test_session_hygiene.TestSessionHygieneThresholds" name="test_threshold_scales_with_model" time="0.006" /><testcase classname="tests.gateway.test_session_hygiene.TestSessionHygieneThresholds" name="test_custom_threshold_percentage" time="0.006" /><testcase classname="tests.gateway.test_session_hygiene.TestSessionHygieneThresholds" name="test_minimum_message_guard" time="0.005" /><testcase classname="tests.gateway.test_session_hygiene.TestSessionHygieneWarnThreshold" name="test_warn_when_still_large" time="0.005" /><testcase classname="tests.gateway.test_session_hygiene.TestSessionHygieneWarnThreshold" name="test_no_warn_when_under" time="0.004" /><testcase classname="tests.gateway.test_session_hygiene.TestEstimatedTokenThreshold" name="test_threshold_below_context_for_200k_model" time="0.004" /><testcase classname="tests.gateway.test_session_hygiene.TestEstimatedTokenThreshold" name="test_threshold_below_context_for_128k_model" time="0.004" /><testcase classname="tests.gateway.test_session_hygiene.TestEstimatedTokenThreshold" name="test_no_multiplier_means_same_threshold_for_estimated_and_actual" time="0.004" /><testcase classname="tests.gateway.test_session_hygiene.TestEstimatedTokenThreshold" name="test_warn_threshold_below_context" time="0.004" /><testcase classname="tests.gateway.test_session_hygiene.TestEstimatedTokenThreshold" name="test_overestimate_fires_early_but_safely" time="0.004" /><testcase classname="tests.gateway.test_session_hygiene.TestTokenEstimation" name="test_empty_history" time="0.004" /><testcase classname="tests.gateway.test_session_hygiene.TestTokenEstimation" name="test_proportional_to_content" time="0.005" /><testcase classname="tests.gateway.test_session_hygiene.TestTokenEstimation" name="test_proportional_to_count" time="0.005" /><testcase classname="tests.gateway.test_session_hygiene.TestTokenEstimation" name="test_pathological_session_detected" time="0.006" /><testcase classname="tests.gateway.test_session_hygiene" name="test_session_hygiene_messages_stay_in_originating_topic" time="0.009" /><testcase classname="tests.gateway.test_session_hygiene" name="test_session_hygiene_warns_user_when_compression_aborts" time="0.013" /><testcase classname="tests.gateway.test_session_hygiene" name="test_session_hygiene_informs_user_when_aux_model_fails_but_recovers" time="0.009" /><testcase classname="tests.gateway.test_session_hygiene" name="test_session_hygiene_honors_configurable_hard_message_limit" time="0.010" /><testcase classname="tests.gateway.test_session_hygiene" name="test_session_hygiene_default_hard_message_limit_does_not_fire_at_12_messages" time="0.009" /><testcase classname="tests.gateway.test_session_info.TestFormatSessionInfo" name="test_includes_model_name" time="0.067" /><testcase classname="tests.gateway.test_session_info.TestFormatSessionInfo" name="test_includes_provider" time="0.010" /><testcase classname="tests.gateway.test_session_info.TestFormatSessionInfo" name="test_config_context_length" time="0.005" /><testcase classname="tests.gateway.test_session_info.TestFormatSessionInfo" name="test_default_fallback_hint" time="0.005" /><testcase classname="tests.gateway.test_session_info.TestFormatSessionInfo" name="test_local_endpoint_shown" time="0.005" /><testcase classname="tests.gateway.test_session_info.TestFormatSessionInfo" name="test_cloud_endpoint_hidden" time="0.082" /><testcase classname="tests.gateway.test_session_info.TestFormatSessionInfo" name="test_million_context_format" time="0.009" /><testcase classname="tests.gateway.test_session_info.TestFormatSessionInfo" name="test_missing_config" time="0.005" /><testcase classname="tests.gateway.test_session_info.TestFormatSessionInfo" name="test_runtime_resolution_failure_doesnt_crash" time="0.005" /><testcase classname="tests.gateway.test_session_list_allowed_sources" name="test_session_list_surfaces_all_user_facing_sources" time="0.005" /><testcase classname="tests.gateway.test_session_list_allowed_sources" name="test_session_list_default_limit_is_200" time="0.005" /><testcase classname="tests.gateway.test_session_list_allowed_sources" name="test_session_list_respects_explicit_limit" time="0.005" /><testcase classname="tests.gateway.test_session_list_allowed_sources" name="test_session_list_preserves_ordering_after_filter" time="0.005" /><testcase classname="tests.gateway.test_session_model_override_routing" name="test_run_agent_prefers_session_override_over_global_runtime" time="0.069" /><testcase classname="tests.gateway.test_session_model_override_routing" name="test_background_task_prefers_session_override_over_global_runtime" time="0.083" /><testcase classname="tests.gateway.test_session_model_override_routing" name="test_gateway_auth_fallback_uses_fallback_model_from_config" time="0.009" /><testcase classname="tests.gateway.test_session_model_override_routing" name="test_gateway_auth_fallback_resolves_key_env_for_custom_provider" time="0.006" /><testcase classname="tests.gateway.test_session_model_reset" name="test_new_command_clears_session_model_override" time="0.006" /><testcase classname="tests.gateway.test_session_model_reset" name="test_new_command_no_override_is_noop" time="0.006" /><testcase classname="tests.gateway.test_session_model_reset" name="test_new_command_only_clears_own_session" time="0.005" /><testcase classname="tests.gateway.test_session_override_thread_recovery" name="test_normalize_rewrites_lobby_thread_to_bound_topic" time="0.005" /><testcase classname="tests.gateway.test_session_override_thread_recovery" name="test_normalize_passthrough_when_no_recovery" time="0.005" /><testcase classname="tests.gateway.test_session_override_thread_recovery" name="test_normalize_swallows_recovery_exceptions" time="0.005" /><testcase classname="tests.gateway.test_session_override_thread_recovery" name="test_override_key_matches_message_turn_key_after_recovery" time="0.005" /><testcase classname="tests.gateway.test_session_race_guard" name="test_sentinel_placed_before_agent_setup" time="0.007" /><testcase classname="tests.gateway.test_session_race_guard" name="test_sentinel_cleaned_up_after_handler_returns" time="0.007" /><testcase classname="tests.gateway.test_session_race_guard" name="test_sentinel_cleaned_up_on_exception" time="0.005" /><testcase classname="tests.gateway.test_session_race_guard" name="test_second_message_during_sentinel_queued_not_duplicate" time="0.007" /><testcase classname="tests.gateway.test_session_race_guard" name="test_merge_pending_message_event_merges_text_and_photo_followups" time="0.005" /><testcase classname="tests.gateway.test_session_race_guard" name="test_merge_pending_message_event_promotes_document_followups_over_text" time="0.005" /><testcase classname="tests.gateway.test_session_race_guard" name="test_recent_telegram_text_followup_is_queued_without_interrupt" time="0.005" /><testcase classname="tests.gateway.test_session_race_guard" name="test_recent_telegram_followups_append_in_pending_queue" time="0.005" /><testcase classname="tests.gateway.test_session_race_guard" name="test_command_messages_do_not_leave_sentinel" time="0.005" /><testcase classname="tests.gateway.test_session_race_guard" name="test_start_command_is_noop_and_does_not_show_help" time="0.006" /><testcase classname="tests.gateway.test_session_race_guard" name="test_start_command_is_noop_during_active_session" time="0.005" /><testcase classname="tests.gateway.test_session_race_guard" name="test_active_session_bypass_commands_dispatch_without_interrupt[/help-_handle_help_command-Help text]" time="0.006" /><testcase classname="tests.gateway.test_session_race_guard" name="test_active_session_bypass_commands_dispatch_without_interrupt[/commands-_handle_commands_command-Commands text]" time="0.005" /><testcase classname="tests.gateway.test_session_race_guard" name="test_active_session_bypass_commands_dispatch_without_interrupt[/update-_handle_update_command-Update text]" time="0.005" /><testcase classname="tests.gateway.test_session_race_guard" name="test_active_session_bypass_commands_dispatch_without_interrupt[/profile-_handle_profile_command-Profile text]" time="0.005" /><testcase classname="tests.gateway.test_session_race_guard" name="test_stop_during_sentinel_force_cleans_session" time="0.007" /><testcase classname="tests.gateway.test_session_race_guard" name="test_stop_hard_kills_running_agent" time="0.006" /><testcase classname="tests.gateway.test_session_race_guard" name="test_stop_clears_pending_messages" time="0.006" /><testcase classname="tests.gateway.test_session_race_guard" name="test_shutdown_skips_sentinel" time="5.031" /><testcase classname="tests.gateway.test_session_reset_notify.TestShouldResetReason" name="test_returns_none_when_not_expired" time="0.011" /><testcase classname="tests.gateway.test_session_reset_notify.TestShouldResetReason" name="test_returns_idle_when_idle_expired" time="0.007" /><testcase classname="tests.gateway.test_session_reset_notify.TestShouldResetReason" name="test_returns_daily_when_daily_boundary_crossed" time="0.008" /><testcase classname="tests.gateway.test_session_reset_notify.TestShouldResetReason" name="test_returns_none_when_mode_is_none" time="0.007" /><testcase classname="tests.gateway.test_session_reset_notify.TestSessionEntryReason" name="test_auto_reset_reason_stored" time="0.010" /><testcase classname="tests.gateway.test_session_reset_notify.TestSessionEntryReason" name="test_reset_had_activity_false_when_no_tokens" time="0.009" /><testcase classname="tests.gateway.test_session_reset_notify.TestSessionEntryReason" name="test_reset_had_activity_true_when_tokens_used" time="0.009" /><testcase classname="tests.gateway.test_session_reset_notify.TestResetPolicyNotify" name="test_notify_defaults_true" time="0.006" /><testcase classname="tests.gateway.test_session_reset_notify.TestResetPolicyNotify" name="test_notify_exclude_defaults" time="0.006" /><testcase classname="tests.gateway.test_session_reset_notify.TestResetPolicyNotify" name="test_from_dict_with_notify_false" time="0.010" /><testcase classname="tests.gateway.test_session_reset_notify.TestResetPolicyNotify" name="test_from_dict_with_custom_excludes" time="0.006" /><testcase classname="tests.gateway.test_session_reset_notify.TestResetPolicyNotify" name="test_from_dict_preserves_defaults_on_missing_keys" time="0.006" /><testcase classname="tests.gateway.test_session_reset_notify.TestResetPolicyNotify" name="test_to_dict_roundtrip" time="0.006" /><testcase classname="tests.gateway.test_session_reset_notify.TestSessionEntryAutoResetRoundtrip" name="test_was_auto_reset_persists_across_roundtrip" time="0.010" /><testcase classname="tests.gateway.test_session_reset_notify.TestSessionEntryAutoResetRoundtrip" name="test_reset_had_activity_persists_across_roundtrip" time="0.009" /><testcase classname="tests.gateway.test_session_reset_notify.TestSessionEntryAutoResetRoundtrip" name="test_auto_reset_reason_none_roundtrip" time="0.009" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestAdapterSessionCancellation" name="test_command_cancels_active_task_and_unblocks_follow_up[/stop]" time="0.008" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestAdapterSessionCancellation" name="test_command_cancels_active_task_and_unblocks_follow_up[/new]" time="0.007" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestAdapterSessionCancellation" name="test_command_cancels_active_task_and_unblocks_follow_up[/reset]" time="0.007" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestAdapterSessionCancellation" name="test_new_keeps_guard_until_command_finishes_then_runs_follow_up" time="0.007" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestStaleSessionLockSelfHeal" name="test_stale_lock_with_done_task_is_healed_on_next_message" time="0.007" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestStaleSessionLockSelfHeal" name="test_no_owner_task_is_not_treated_as_stale" time="0.006" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestStaleSessionLockSelfHeal" name="test_live_owner_task_is_not_stale" time="0.007" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestRunnerSessionGenerationGuard" name="test_release_without_generation_behaves_as_before" time="0.006" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestRunnerSessionGenerationGuard" name="test_release_with_current_generation_clears_slot" time="0.006" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestRunnerSessionGenerationGuard" name="test_release_with_stale_generation_blocks" time="0.006" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestRunnerSessionGenerationGuard" name="test_is_session_run_current_tracks_bumps" time="0.006" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestOldTaskCannotClobberNewerGuard" name="test_release_session_guard_matches_on_event_identity" time="0.006" /><testcase classname="tests.gateway.test_session_split_brain_11016.TestOldTaskCannotClobberNewerGuard" name="test_release_session_guard_without_guard_releases_unconditionally" time="0.005" /><testcase classname="tests.gateway.test_session_state_cleanup.TestReleaseRunningAgentStateUnit" name="test_pops_all_three_dicts" time="0.005" /><testcase classname="tests.gateway.test_session_state_cleanup.TestReleaseRunningAgentStateUnit" name="test_idempotent_on_missing_key" time="0.005" /><testcase classname="tests.gateway.test_session_state_cleanup.TestReleaseRunningAgentStateUnit" name="test_noop_on_empty_session_key" time="0.005" /><testcase classname="tests.gateway.test_session_state_cleanup.TestReleaseRunningAgentStateUnit" name="test_preserves_other_sessions" time="0.005" /><testcase classname="tests.gateway.test_session_state_cleanup.TestReleaseRunningAgentStateUnit" name="test_handles_missing_busy_ack_attribute" time="0.005" /><testcase classname="tests.gateway.test_session_state_cleanup.TestReleaseRunningAgentStateUnit" name="test_concurrent_release_is_safe" time="0.007" /><testcase classname="tests.gateway.test_session_state_cleanup.TestNoMoreBareDeleteSites" name="test_no_bare_del_of_running_agents_in_gateway_run" time="0.014" /><testcase classname="tests.gateway.test_session_state_cleanup.TestSessionDbCloseOnShutdown" name="test_stop_impl_closes_both_session_dbs" time="0.006" /><testcase classname="tests.gateway.test_session_state_cleanup.TestSessionDbCloseOnShutdown" name="test_shutdown_tolerates_missing_session_store" time="0.005" /><testcase classname="tests.gateway.test_session_state_cleanup.TestSessionDbCloseOnShutdown" name="test_shutdown_tolerates_close_raising" time="0.005" /><testcase classname="tests.gateway.test_session_state_cleanup.TestSessionResetZombieRace" name="test_generation_guard_blocks_then_unconditional_release_evicts" time="0.005" /><testcase classname="tests.gateway.test_session_state_cleanup.TestSessionResetZombieRace" name="test_normal_completion_is_not_evicted_by_outer_release" time="0.005" /><testcase classname="tests.gateway.test_session_store_prune.TestPruneBasics" name="test_prune_removes_entries_past_max_age" time="0.006" /><testcase classname="tests.gateway.test_session_store_prune.TestPruneBasics" name="test_prune_uses_updated_at_not_created_at" time="0.006" /><testcase classname="tests.gateway.test_session_store_prune.TestPruneBasics" name="test_prune_disabled_when_max_age_is_zero" time="0.005" /><testcase classname="tests.gateway.test_session_store_prune.TestPruneBasics" name="test_prune_disabled_when_max_age_is_negative" time="0.006" /><testcase classname="tests.gateway.test_session_store_prune.TestPruneBasics" name="test_prune_skips_suspended_entries" time="0.006" /><testcase classname="tests.gateway.test_session_store_prune.TestPruneBasics" name="test_prune_skips_entries_with_active_processes" time="0.006" /><testcase classname="tests.gateway.test_session_store_prune.TestPruneBasics" name="test_prune_active_check_uses_session_key_not_session_id" time="0.006" /><testcase classname="tests.gateway.test_session_store_prune.TestPruneBasics" name="test_prune_does_not_write_disk_when_no_removals" time="0.006" /><testcase classname="tests.gateway.test_session_store_prune.TestPruneBasics" name="test_prune_writes_disk_after_removal" time="0.006" /><testcase classname="tests.gateway.test_session_store_prune.TestPruneBasics" name="test_prune_is_thread_safe" time="0.007" /><testcase classname="tests.gateway.test_session_store_prune.TestPrunePersistsToDisk" name="test_prune_rewrites_sessions_json" time="0.006" /><testcase classname="tests.gateway.test_session_store_prune.TestGatewayConfigSerialization" name="test_session_store_max_age_days_defaults_to_90" time="0.005" /><testcase classname="tests.gateway.test_session_store_prune.TestGatewayConfigSerialization" name="test_session_store_max_age_days_roundtrips" time="0.005" /><testcase classname="tests.gateway.test_session_store_prune.TestGatewayConfigSerialization" name="test_session_store_max_age_days_missing_defaults_90" time="0.005" /><testcase classname="tests.gateway.test_session_store_prune.TestGatewayConfigSerialization" name="test_session_store_max_age_days_negative_coerced_to_zero" time="0.005" /><testcase classname="tests.gateway.test_session_store_prune.TestGatewayConfigSerialization" name="test_session_store_max_age_days_bad_type_falls_back" time="0.005" /><testcase classname="tests.gateway.test_session_store_prune.TestGatewayWatcherCallsPrune" name="test_prune_gate_fires_on_first_tick" time="0.005" /><testcase classname="tests.gateway.test_session_store_prune.TestGatewayWatcherCallsPrune" name="test_prune_gate_suppresses_within_interval" time="0.005" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuQrPath" name="test_qr_success_saves_core_credentials" time="0.005" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuQrPath" name="test_qr_success_does_not_persist_bot_identity" time="0.005" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuConnectionMode" name="test_qr_path_defaults_to_websocket" time="0.005" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuConnectionMode" name="test_manual_path_websocket" time="0.005" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuConnectionMode" name="test_manual_path_webhook" time="0.005" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuDmPolicy" name="test_pairing_sets_feishu_allow_all_false" time="0.006" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuDmPolicy" name="test_allow_all_sets_feishu_allow_all_true" time="0.005" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuDmPolicy" name="test_allowlist_sets_feishu_allow_all_false_with_list" time="0.006" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuDmPolicy" name="test_allowlist_prepopulates_with_scan_owner_open_id" time="0.005" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuGroupPolicy" name="test_open_with_mention" time="0.005" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuGroupPolicy" name="test_disabled" time="0.005" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuAdapterIntegration" name="test_qr_env_produces_valid_adapter_settings" time="0.006" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuAdapterIntegration" name="test_open_dm_env_sets_correct_adapter_state" time="0.006" /><testcase classname="tests.gateway.test_setup_feishu.TestSetupFeishuAdapterIntegration" name="test_group_open_env_sets_adapter_group_policy" time="0.006" /><testcase classname="tests.gateway.test_shared_group_sender_prefix" name="test_preprocess_prefixes_sender_for_shared_non_thread_group_session" time="0.005" /><testcase classname="tests.gateway.test_shared_group_sender_prefix" name="test_preprocess_keeps_plain_text_for_default_group_sessions" time="0.005" /><testcase classname="tests.gateway.test_shutdown_cache_cleanup.TestCachedAgentCleanupOnShutdown" name="test_cached_agent_memory_provider_shut_down" time="0.006" /><testcase classname="tests.gateway.test_shutdown_cache_cleanup.TestCachedAgentCleanupOnShutdown" name="test_cache_cleared_after_shutdown" time="0.006" /><testcase classname="tests.gateway.test_shutdown_cache_cleanup.TestCachedAgentCleanupOnShutdown" name="test_no_cached_agents_no_error" time="0.005" /><testcase classname="tests.gateway.test_shutdown_cache_cleanup.TestCachedAgentCleanupOnShutdown" name="test_multiple_cached_agents_all_cleaned" time="0.006" /><testcase classname="tests.gateway.test_shutdown_cache_cleanup.TestCachedAgentCleanupOnShutdown" name="test_cleanup_survives_agent_exception" time="0.006" /><testcase classname="tests.gateway.test_shutdown_cache_cleanup.TestCachedAgentCleanupOnShutdown" name="test_plain_agent_not_tuple" time="0.006" /><testcase classname="tests.gateway.test_shutdown_cache_cleanup.TestCachedAgentCleanupOnShutdown" name="test_none_entry_skipped" time="0.005" /><testcase classname="tests.gateway.test_shutdown_cache_cleanup.TestRunningAgentsNotDoubleCleaned" name="test_running_and_cached_agent_cleaned_at_least_once" time="0.006" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSignalName" name="test_known_signals_resolve_to_names" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSignalName" name="test_unknown_int_returns_signal_num_token" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSignalName" name="test_none_returns_unknown" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSignalName" name="test_non_integer_falls_back_to_str" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSnapshotShutdownContext" name="test_includes_self_pid_and_signal" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSnapshotShutdownContext" name="test_handles_none_signal" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSnapshotShutdownContext" name="test_includes_timestamps" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSnapshotShutdownContext" name="test_includes_parent_summary_on_linux" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSnapshotShutdownContext" name="test_under_systemd_flag_uses_invocation_id" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSnapshotShutdownContext" name="test_under_systemd_false_without_invocation_id_and_normal_ppid" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSnapshotShutdownContext" name="test_completes_quickly" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSnapshotShutdownContext" name="test_detects_takeover_marker_for_self" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSnapshotShutdownContext" name="test_detects_takeover_marker_for_other" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSnapshotShutdownContext" name="test_detects_planned_stop_marker" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestFormatters" name="test_format_context_for_log_includes_signal_and_parent" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestFormatters" name="test_context_as_json_round_trips" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestFormatters" name="test_context_as_json_handles_unserialisable_values" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSpawnAsyncDiagnostic" name="test_spawns_subprocess_and_writes_output" time="0.607" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSpawnAsyncDiagnostic" name="test_returns_none_on_windows" time="0.010" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSpawnAsyncDiagnostic" name="test_handles_unwritable_log_path_gracefully" time="0.006" /><testcase classname="tests.gateway.test_shutdown_forensics.TestSpawnAsyncDiagnostic" name="test_does_not_block_caller" time="0.008" /><testcase classname="tests.gateway.test_shutdown_forensics.TestParseSystemdDuration" name="test_seconds" time="0.006" /><testcase classname="tests.gateway.test_shutdown_forensics.TestParseSystemdDuration" name="test_minutes" time="0.006" /><testcase classname="tests.gateway.test_shutdown_forensics.TestParseSystemdDuration" name="test_combined_min_sec" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestParseSystemdDuration" name="test_hours" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestParseSystemdDuration" name="test_milliseconds" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestParseSystemdDuration" name="test_empty_returns_none" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestParseSystemdDuration" name="test_unknown_unit_returns_none" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestCheckSystemdTimingAlignment" name="test_returns_none_when_not_under_systemd" time="0.005" /><testcase classname="tests.gateway.test_shutdown_forensics.TestCheckSystemdTimingAlignment" name="test_returns_none_when_unit_undeterminable" time="0.009" /><testcase classname="tests.gateway.test_shutdown_memory_provider_messages.TestCleanupAgentResourcesPassesMessages" name="test_populated_messages_forwarded" time="0.006" /><testcase classname="tests.gateway.test_shutdown_memory_provider_messages.TestCleanupAgentResourcesPassesMessages" name="test_empty_list_still_forwarded" time="0.005" /><testcase classname="tests.gateway.test_shutdown_memory_provider_messages.TestCleanupAgentResourcesPassesMessages" name="test_missing_attribute_falls_back_to_no_arg" time="0.005" /><testcase classname="tests.gateway.test_shutdown_memory_provider_messages.TestCleanupAgentResourcesPassesMessages" name="test_non_list_attribute_falls_back_to_no_arg" time="0.005" /><testcase classname="tests.gateway.test_shutdown_memory_provider_messages.TestCleanupAgentResourcesPassesMessages" name="test_provider_exception_is_swallowed" time="0.005" /><testcase classname="tests.gateway.test_shutdown_memory_provider_messages.TestCleanupAgentResourcesPassesMessages" name="test_none_agent_is_noop" time="0.005" /><testcase classname="tests.gateway.test_shutdown_memory_provider_messages.TestCleanupAgentResourcesPassesMessages" name="test_agent_without_shutdown_method_is_tolerated" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalConfigLoading" name="test_apply_env_overrides_signal" time="0.051" /><testcase classname="tests.gateway.test_signal.TestSignalConfigLoading" name="test_signal_not_loaded_without_both_vars" time="0.054" /><testcase classname="tests.gateway.test_signal.TestSignalAdapterInit" name="test_init_parses_config" time="0.009" /><testcase classname="tests.gateway.test_signal.TestSignalAdapterInit" name="test_init_empty_allowlist" time="0.007" /><testcase classname="tests.gateway.test_signal.TestSignalAdapterInit" name="test_init_strips_trailing_slash" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalAdapterInit" name="test_self_message_filtering" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalConnectCleanup" name="test_releases_lock_and_closes_client_on_healthcheck_failure" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_redact_phone_long" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_redact_phone_short" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_redact_phone_empty" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_parse_comma_list" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_guess_extension_png" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_guess_extension_jpeg" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_guess_extension_pdf" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_guess_extension_zip" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_guess_extension_mp4" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_guess_extension_aac_adts_unprotected" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_guess_extension_aac_adts_protected" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_guess_extension_mp3_mpeg1_layer3" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_guess_extension_mp3_mpeg2_layer3" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_guess_extension_aac_routes_to_audio_cache" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_remux_aac_to_m4a_round_trip" time="0.017" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_remux_aac_to_m4a_handles_garbage" time="0.011" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_guess_extension_unknown" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_is_image_ext" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_is_audio_ext" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_check_requirements" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_render_mentions" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_render_mentions_no_mentions" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalHelpers" name="test_check_requirements_missing" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSSEUrlEncoding" name="test_sse_url_encodes_plus_in_account" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSSEUrlEncoding" name="test_sse_url_encoding_preserves_digits" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalAttachmentFetch" name="test_fetch_attachment_uses_id_parameter" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalAttachmentFetch" name="test_fetch_attachment_returns_none_on_empty" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalAttachmentFetch" name="test_fetch_attachment_handles_dict_response" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSessionSource" name="test_session_source_alt_fields" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSessionSource" name="test_session_source_roundtrip" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalPhoneRedaction" name="test_us_number" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalPhoneRedaction" name="test_uk_number" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalPhoneRedaction" name="test_multiple_numbers" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalPhoneRedaction" name="test_short_number_not_matched" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalAuthorization" name="test_signal_in_allowlist_maps" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalSendImageFile" name="test_send_image_file_sends_via_rpc" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendImageFile" name="test_send_image_file_to_group" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendImageFile" name="test_send_image_file_missing" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendImageFile" name="test_send_image_file_too_large" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendImageFile" name="test_send_image_file_rpc_failure" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRecipientResolution" name="test_send_prefers_cached_uuid_for_direct_messages" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalRecipientResolution" name="test_send_looks_up_uuid_via_list_contacts" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRecipientResolution" name="test_send_falls_back_to_phone_when_no_uuid_found" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRecipientResolution" name="test_send_typing_uses_cached_uuid" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendVoice" name="test_send_voice_sends_via_rpc" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendVoice" name="test_send_voice_missing_file" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalSendVoice" name="test_send_voice_to_group" time="0.008" /><testcase classname="tests.gateway.test_signal.TestSignalSendVoice" name="test_send_voice_too_large" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalSendVoice" name="test_send_voice_rpc_failure" time="0.008" /><testcase classname="tests.gateway.test_signal.TestSignalSendVideo" name="test_send_video_sends_via_rpc" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalSendVideo" name="test_send_video_missing_file" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalSendVideo" name="test_send_video_too_large" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendVideo" name="test_send_video_rpc_failure" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalMediaExtraction" name="test_extract_media_finds_image_tag" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalMediaExtraction" name="test_extract_media_finds_audio_tag" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalMediaExtraction" name="test_signal_has_all_media_methods" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalInboundMessageTypeClassification" name="test_pdf_attachment_sets_document_type" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalInboundMessageTypeClassification" name="test_text_plain_attachment_sets_document_type" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalInboundMessageTypeClassification" name="test_text_html_attachment_sets_document_type" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalInboundMessageTypeClassification" name="test_video_attachment_sets_video_type" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalInboundMessageTypeClassification" name="test_unknown_mime_attachment_falls_back_to_document" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendDocumentViaHelper" name="test_send_document_too_large" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendDocumentViaHelper" name="test_send_document_error_includes_path" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalStreamingCapabilities" name="test_signal_declares_no_message_editing" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendReturnsMessageId" name="test_send_returns_none_message_id_even_with_timestamp" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendReturnsMessageId" name="test_send_returns_none_message_id_when_no_timestamp" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendReturnsMessageId" name="test_send_returns_none_message_id_for_non_dict" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendResultValidation" name="test_send_success_when_results_has_success" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendResultValidation" name="test_send_failure_when_results_has_failure_type" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendResultValidation" name="test_send_failure_when_results_has_success_false" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendResultValidation" name="test_rpc_raises_rate_limit_on_results_failure" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalStopTyping" name="test_stop_typing_calls_private_method" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalTypingBackoff" name="test_first_failure_logs_at_warning_subsequent_at_debug" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalTypingBackoff" name="test_three_consecutive_failures_trigger_cooldown" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalTypingBackoff" name="test_cooldown_is_per_chat_not_global" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalTypingBackoff" name="test_success_resets_failure_counter_and_cooldown" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalTypingBackoff" name="test_stop_typing_indicator_clears_backoff_state" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalStopTypingExplicitRPC" name="test_stop_typing_indicator_sends_stop_rpc_for_dm" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalStopTypingExplicitRPC" name="test_stop_typing_indicator_sends_stop_rpc_for_group" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalStopTypingExplicitRPC" name="test_stop_typing_indicator_best_effort_on_rpc_failure" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalStopTypingExplicitRPC" name="test_stop_typing_indicator_best_effort_on_recipient_failure" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalQuoteExtraction" name="test_handle_envelope_sets_reply_context_from_quote" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalQuoteExtraction" name="test_handle_envelope_marks_quote_to_own_sent_timestamp" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalQuoteExtraction" name="test_handle_envelope_marks_quote_to_own_account_author" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalQuoteExtraction" name="test_track_sent_timestamp_keeps_reply_detection_cache_after_echo_discard" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalQuoteExtraction" name="test_handle_envelope_without_quote_leaves_reply_fields_none" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalQuoteExtraction" name="test_handle_envelope_quote_without_text_sets_only_reply_id" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRpcRateLimit" name="test_raises_on_429_when_opted_in" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRpcRateLimit" name="test_raises_on_rate_limit_exception_substring" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRpcRateLimit" name="test_default_swallows_rate_limit_returns_none" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRpcRateLimit" name="test_non_rate_limit_error_does_not_raise_when_opted_in" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRpcRateLimit" name="test_raises_with_retry_after_from_v0_14_3_payload" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRpcRateLimit" name="test_raises_with_retry_after_none_for_old_signal_cli" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRpcRateLimit" name="test_raises_on_retry_later_inside_attachment_invalid" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendMultipleImages" name="test_empty_list_is_noop" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendMultipleImages" name="test_all_bad_files_no_rpc" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalSendMultipleImages" name="test_single_batch_under_limit" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalSendMultipleImages" name="test_skips_bad_images_in_mixed_batch" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalSendMultipleImages" name="test_429_calibrates_scheduler_then_retries" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalSendMultipleImages" name="test_429_without_retry_after_uses_default_rate" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalSendMultipleImages" name="test_rate_limit_exhaust_continues_to_next_batch" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalSendMultipleImages" name="test_full_batch_emits_pacing_notice_for_followup" time="0.007" /><testcase classname="tests.gateway.test_signal.TestSignalSendMultipleImages" name="test_short_followup_wait_skips_pacing_notice" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalSendMultipleImages" name="test_single_batch_send_does_not_pace" time="0.006" /><testcase classname="tests.gateway.test_signal.TestSignalRateLimitDetection" name="test_detect_typed_code" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRateLimitDetection" name="test_detect_substring_fallback" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRateLimitDetection" name="test_detect_non_rate_limit" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRateLimitDetection" name="test_extract_retry_after_from_results" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRateLimitDetection" name="test_extract_retry_after_missing" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRateLimitDetection" name="test_detect_retry_later_exception_substring" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalRateLimitDetection" name="test_extract_retry_after_parses_message_string" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendTimeout" name="test_zero_attachments_uses_default" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendTimeout" name="test_floor_at_60s" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalSendTimeout" name="test_scales_with_batch_size" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalContentlessEnvelope" name="test_skips_profile_key_update_no_message_field" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalContentlessEnvelope" name="test_skips_empty_message" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalContentlessEnvelope" name="test_skips_whitespace_only_message" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalContentlessEnvelope" name="test_allows_message_with_attachment_no_text" time="0.005" /><testcase classname="tests.gateway.test_signal.TestSignalContentlessEnvelope" name="test_allows_normal_text_message" time="0.005" /><testcase classname="tests.gateway.test_signal_format" name="test_shared_helper_matches_signal_adapter_wrapper" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownToSignalBasic" name="test_bold_double_asterisk" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownToSignalBasic" name="test_bold_double_underscore" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownToSignalBasic" name="test_italic_single_asterisk" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownToSignalBasic" name="test_italic_single_underscore" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownToSignalBasic" name="test_strikethrough" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownToSignalBasic" name="test_inline_monospace" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownToSignalBasic" name="test_fenced_code_block" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownToSignalBasic" name="test_heading_becomes_bold" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownToSignalBasic" name="test_multiple_styles" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownToSignalBasic" name="test_plain_text_no_styles" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownToSignalBasic" name="test_empty_string" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_snake_case_not_italic" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_multiple_snake_case" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_snake_case_path" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_snake_case_between_words" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_bullet_list_not_italic" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_hyphen_bullet_list_uses_signal_safe_bullets" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_plus_bullet_list_uses_signal_safe_bullets" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_markdown_bullets_inside_fenced_code_are_preserved" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_bullet_list_with_content_before" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_bullet_list_file_paths" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_bullet_with_italic_inside" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_star_italic_no_cross_line" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_underscore_italic_no_cross_line" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_star_italic_multiline_response" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_star_italic_still_works" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_underscore_italic_still_works" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_multiple_italic_same_line" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_italic_single_word" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestItalicFalsePositives" name="test_italic_multi_word" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestStylePositions" name="test_bold_position" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestStylePositions" name="test_italic_position" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestStylePositions" name="test_multiple_styles_positions" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestStylePositions" name="test_emoji_utf16_offset" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestEdgeCases" name="test_bold_inside_bullet" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestEdgeCases" name="test_code_span_with_underscores" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestEdgeCases" name="test_bold_and_italic_nested" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestEdgeCases" name="test_lone_asterisk" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestEdgeCases" name="test_lone_underscore" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestEdgeCases" name="test_consecutive_underscored_words" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestEdgeCases" name="test_mixed_formatting_no_bleed" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownStripPatch" name="test_fenced_code_block_with_language_tag" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownStripPatch" name="test_fenced_code_block_multiline" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownStripPatch" name="test_links_preserved" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownStripPatch" name="test_heading_h1" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownStripPatch" name="test_heading_h3" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownStripPatch" name="test_multiple_headings" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownStripPatch" name="test_no_raw_markdown_markers_in_output" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownStripPatch" name="test_utf16_surrogate_pair_emoji" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownStripPatch" name="test_consecutive_newlines_collapsed" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestMarkdownStripPatch" name="test_empty_bold_not_crash" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestSignalStreamingPatch" name="test_signal_does_not_support_editing" time="0.005" /><testcase classname="tests.gateway.test_signal_format.TestSignalStreamingPatch" name="test_send_returns_no_message_id" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestSchedulerInitialState" name="test_default_capacity_matches_signal_cap" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestSchedulerInitialState" name="test_default_refill_rate_from_default_retry_after" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestSchedulerInitialState" name="test_starts_full" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestEstimateWait" name="test_zero_when_bucket_has_enough" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestEstimateWait" name="test_proportional_to_deficit_when_empty" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestAcquire" name="test_acquire_zero_is_noop" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestAcquire" name="test_acquire_within_capacity_no_sleep" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestAcquire" name="test_acquire_when_empty_sleeps_for_deficit" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestAcquire" name="test_back_to_back_acquires_drain_then_wait" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestAcquire" name="test_acquire_more_tokens_than_capacity" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestFeedback" name="test_calibrates_refill_rate_from_retry_after" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestFeedback" name="test_none_retry_after_leaves_rate" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestFeedback" name="test_zeros_tokens" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestFeedback" name="test_acquire_after_feedback_uses_calibrated_rate" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestRefillClamping" name="test_refill_does_not_exceed_capacity" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestFifoAcquire" name="test_concurrent_acquires_serialize" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestSingleton" name="test_get_scheduler_returns_same_instance" time="0.005" /><testcase classname="tests.gateway.test_signal_rate_limit.TestSingleton" name="test_reset_scheduler_yields_new_instance" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_platform_enum_resolves_via_plugin_scan" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_check_requirements_needs_url" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_check_requirements_true_when_configured" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_validate_config_uses_env_or_extra" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_is_connected_mirrors_validate" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_env_enablement_none_when_unset" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_env_enablement_seeds_ws_url" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_env_enablement_seeds_home_channel" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_env_enablement_home_channel_defaults_name_to_id" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_adapter_init_custom_url" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_adapter_init_default_url" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_adapter_platform_identity" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_guess_extension_png" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_guess_extension_jpg" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_guess_extension_ogg" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_guess_extension_unknown" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_is_image_ext" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_is_audio_ext" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_corr_id_starts_with_prefix_and_tracks_pending" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_corr_id_pending_set_self_trims" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_send_dm" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_send_group" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_send_when_ws_not_connected_does_not_crash" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_handle_event_filters_own_corr_id" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_standalone_send_missing_websockets" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_standalone_send_defaults_to_local_daemon" time="0.506" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_health_monitor_does_not_reconnect_quiet_healthy_ws" time="0.040" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_register_calls_register_platform" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_document_file_sets_document_type" time="0.005" /><testcase classname="tests.gateway.test_simplex_plugin" name="test_image_file_still_sets_photo_type" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSlashCommandSessionIsolation" name="test_channel_slash_command_uses_group_session_semantics" time="0.051" /><testcase classname="tests.gateway.test_slack.TestSlashCommandSessionIsolation" name="test_dm_slash_command_keeps_dm_session_semantics" time="0.054" /><testcase classname="tests.gateway.test_slack.TestAppMentionHandler" name="test_app_mention_registered_on_connect" time="0.055" /><testcase classname="tests.gateway.test_slack.TestSlackConnectCleanup" name="test_releases_platform_lock_when_auth_fails" time="0.010" /><testcase classname="tests.gateway.test_slack.TestSlackConnectCleanup" name="test_reconnect_closes_previous_handler_to_prevent_zombie_socket" time="0.056" /><testcase classname="tests.gateway.test_slack.TestSlackSocketWatchdog" name="test_watchdog_reconnects_when_socket_task_dies_unexpectedly" time="0.055" /><testcase classname="tests.gateway.test_slack.TestSlackSocketWatchdog" name="test_watchdog_reconnects_when_transport_reports_disconnected" time="0.077" /><testcase classname="tests.gateway.test_slack.TestSlackSocketWatchdog" name="test_disconnect_stops_watchdog_and_does_not_reconnect" time="0.159" /><testcase classname="tests.gateway.test_slack.TestSlackSocketWatchdog" name="test_watchdog_cancellation_does_not_respawn" time="0.068" /><testcase classname="tests.gateway.test_slack.TestSlackSocketWatchdog" name="test_watchdog_unexpected_exit_respawns_via_done_callback" time="0.066" /><testcase classname="tests.gateway.test_slack.TestSlackSocketWatchdog" name="test_connect_replaces_prior_watchdog_atomically" time="0.056" /><testcase classname="tests.gateway.test_slack.TestSlackSocketWatchdog" name="test_reconnect_refreshes_multi_workspace_state" time="0.056" /><testcase classname="tests.gateway.test_slack.TestSlackSocketWatchdog" name="test_reconnect_lock_prevents_concurrent_reconnects" time="0.056" /><testcase classname="tests.gateway.test_slack.TestSlackProxyBehavior" name="test_no_proxy_helper_matches_slack_hosts" time="0.009" /><testcase classname="tests.gateway.test_slack.TestSlackProxyBehavior" name="test_resolve_slack_proxy_url_ignores_unsupported_proxy_schemes" time="0.008" /><testcase classname="tests.gateway.test_slack.TestSlackProxyBehavior" name="test_resolve_slack_proxy_url_checks_all_slack_hosts" time="0.007" /><testcase classname="tests.gateway.test_slack.TestSlackProxyBehavior" name="test_connect_uses_proxy_when_not_bypassed" time="0.053" /><testcase classname="tests.gateway.test_slack.TestSlackProxyBehavior" name="test_connect_clears_proxy_when_no_proxy_matches_slack" time="0.055" /><testcase classname="tests.gateway.test_slack.TestSendDocument" name="test_send_document_success" time="0.009" /><testcase classname="tests.gateway.test_slack.TestSendDocument" name="test_send_document_custom_name" time="0.007" /><testcase classname="tests.gateway.test_slack.TestSendDocument" name="test_send_document_missing_file" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendDocument" name="test_send_document_not_connected" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendDocument" name="test_send_document_api_error_falls_back" time="0.006" /><testcase classname="tests.gateway.test_slack.TestSendDocument" name="test_send_document_with_thread" time="0.006" /><testcase classname="tests.gateway.test_slack.TestSendDocument" name="test_send_document_thread_upload_marks_bot_participation" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendDocument" name="test_send_document_retries_transient_upload_error" time="0.006" /><testcase classname="tests.gateway.test_slack.TestSendPrivateNotice" name="test_send_private_notice_uses_ephemeral_api" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendVideo" name="test_send_video_success" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendVideo" name="test_send_video_missing_file" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendVideo" name="test_send_video_not_connected" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendVideo" name="test_send_video_api_error_falls_back" time="0.006" /><testcase classname="tests.gateway.test_slack.TestBangPrefixCommands" name="test_bang_known_command_is_rewritten_to_slash" time="0.006" /><testcase classname="tests.gateway.test_slack.TestBangPrefixCommands" name="test_bang_command_with_args_preserved" time="0.006" /><testcase classname="tests.gateway.test_slack.TestBangPrefixCommands" name="test_bang_works_inside_thread" time="0.006" /><testcase classname="tests.gateway.test_slack.TestBangPrefixCommands" name="test_bang_unknown_token_passes_through_unchanged" time="0.052" /><testcase classname="tests.gateway.test_slack.TestBangPrefixCommands" name="test_bang_with_bot_suffix_resolves" time="0.009" /><testcase classname="tests.gateway.test_slack.TestBangPrefixCommands" name="test_plain_slash_still_works" time="0.007" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_pdf_document_cached" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_txt_document_injects_content" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_md_document_injects_content" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_json_snippet_injects_content" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_large_txt_not_injected" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_zip_file_cached" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_oversized_document_skipped" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_document_download_error_handled" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_image_still_handled" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_video_attachment_cached" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_file_shared_video_fallback_fetches_file_info" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_download_failure_is_surfaced_in_message_text" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_rich_text_blocks_do_not_duplicate_plain_text" time="0.005" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_rich_text_quotes_and_lists_are_extracted" time="0.005" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_attachments_unfurl_text_is_appended_even_when_url_is_in_message" time="0.005" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_message_unfurl_attachments_are_skipped" time="0.006" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_channel_routing_ignores_bot_mentions_inside_block_text" time="0.005" /><testcase classname="tests.gateway.test_slack.TestIncomingDocumentHandling" name="test_quoted_slash_command_text_does_not_change_message_type" time="0.005" /><testcase classname="tests.gateway.test_slack.TestMessageRouting" name="test_dm_processed_without_mention" time="0.005" /><testcase classname="tests.gateway.test_slack.TestMessageRouting" name="test_channel_message_requires_mention" time="0.005" /><testcase classname="tests.gateway.test_slack.TestMessageRouting" name="test_channel_mention_strips_bot_id" time="0.005" /><testcase classname="tests.gateway.test_slack.TestMessageRouting" name="test_bot_messages_ignored" time="0.005" /><testcase classname="tests.gateway.test_slack.TestMessageRouting" name="test_message_edits_ignored" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendTyping" name="test_sets_status_in_thread" time="0.006" /><testcase classname="tests.gateway.test_slack.TestSendTyping" name="test_noop_without_thread" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendTyping" name="test_handles_missing_scope_gracefully" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendTyping" name="test_uses_thread_ts_fallback" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendTyping" name="test_stop_typing_clears_tracked_thread" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendTyping" name="test_stop_typing_noop_without_tracked_thread" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendTyping" name="test_stop_typing_handles_api_error_gracefully" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendTyping" name="test_send_clears_status_after_final_post" time="0.006" /><testcase classname="tests.gateway.test_slack.TestSendTyping" name="test_streaming_final_edit_clears_status" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSendTyping" name="test_streaming_intermediate_edit_keeps_status" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_bold_conversion" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_italic_asterisk_conversion" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_italic_underscore_preserved" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_header_to_bold" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_header_with_bold_content" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_link_conversion" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_link_conversion_strips_markdown_angle_brackets" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_escapes_control_characters" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_preserves_existing_slack_entities" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_strikethrough" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_code_block_preserved" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_inline_code_preserved" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_mixed_content" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_empty_string" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_none_passthrough" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_blockquote_preserved" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_multiline_blockquote" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_blockquote_with_formatting" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_nested_blockquote" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_blockquote_mixed_with_plain" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_non_prefix_gt_still_escaped" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_blockquote_with_code" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_bold_italic_combined" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_bold_italic_with_surrounding_text" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_bold_italic_does_not_break_plain_bold" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_bold_italic_does_not_break_plain_italic" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_bold_italic_mixed_with_bold" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_pre_escaped_ampersand_not_double_escaped" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_pre_escaped_lt_not_double_escaped" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_pre_escaped_gt_not_double_escaped" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_mixed_raw_and_escaped_entities" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_link_with_parentheses_in_url" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_link_with_multiple_paren_pairs" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_link_without_parens_still_works" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_link_with_angle_brackets_and_parens" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_escaping_is_idempotent" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_channel_mention_preserved" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_everyone_mention_preserved" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_subteam_mention_preserved" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_date_formatting_preserved" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_channel_link_preserved" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_message_only_code_block" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_multiline_mixed_formatting" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_markdown_unordered_list_with_asterisk" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_nested_bold_in_link" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_url_with_query_string_and_ampersand" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_markdown_image_does_not_create_broken_slack_link" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_literal_asterisks_with_spaces_are_not_treated_as_italic" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFormatMessage" name="test_emoji_shortcodes_passthrough" time="0.005" /><testcase classname="tests.gateway.test_slack.TestEditMessage" name="test_edit_message_formats_bold" time="0.005" /><testcase classname="tests.gateway.test_slack.TestEditMessage" name="test_edit_message_formats_links" time="0.005" /><testcase classname="tests.gateway.test_slack.TestEditMessage" name="test_edit_message_preserves_blockquotes" time="0.005" /><testcase classname="tests.gateway.test_slack.TestEditMessage" name="test_edit_message_escapes_control_chars" time="0.005" /><testcase classname="tests.gateway.test_slack.TestEditMessageStreamingPipeline" name="test_edit_message_formats_streaming_updates" time="0.005" /><testcase classname="tests.gateway.test_slack.TestEditMessageStreamingPipeline" name="test_edit_message_formats_code_and_bold" time="0.005" /><testcase classname="tests.gateway.test_slack.TestEditMessageStreamingPipeline" name="test_edit_message_formats_blockquote_in_stream" time="0.005" /><testcase classname="tests.gateway.test_slack.TestEditMessageStreamingPipeline" name="test_edit_message_formats_progressive_accumulation" time="0.005" /><testcase classname="tests.gateway.test_slack.TestEditMessageStreamingPipeline" name="test_edit_message_formats_bold_italic" time="0.005" /><testcase classname="tests.gateway.test_slack.TestEditMessageStreamingPipeline" name="test_edit_message_does_not_double_escape" time="0.005" /><testcase classname="tests.gateway.test_slack.TestEditMessageStreamingPipeline" name="test_edit_message_formats_url_with_parens" time="0.005" /><testcase classname="tests.gateway.test_slack.TestEditMessageStreamingPipeline" name="test_edit_message_not_connected" time="0.005" /><testcase classname="tests.gateway.test_slack.TestReactions" name="test_add_reaction_calls_api" time="0.005" /><testcase classname="tests.gateway.test_slack.TestReactions" name="test_add_reaction_handles_error" time="0.005" /><testcase classname="tests.gateway.test_slack.TestReactions" name="test_remove_reaction_calls_api" time="0.005" /><testcase classname="tests.gateway.test_slack.TestReactions" name="test_reactions_in_message_flow" time="0.006" /><testcase classname="tests.gateway.test_slack.TestReactions" name="test_reactions_failure_outcome" time="0.005" /><testcase classname="tests.gateway.test_slack.TestReactions" name="test_reactions_skipped_for_non_dm_non_mention" time="0.005" /><testcase classname="tests.gateway.test_slack.TestReactions" name="test_reactions_disabled_via_env" time="0.005" /><testcase classname="tests.gateway.test_slack.TestReactions" name="test_reactions_enabled_by_default" time="0.005" /><testcase classname="tests.gateway.test_slack.TestThreadReplyHandling" name="test_thread_reply_without_mention_no_session_ignored" time="0.005" /><testcase classname="tests.gateway.test_slack.TestThreadReplyHandling" name="test_thread_reply_without_mention_with_session_processed" time="0.006" /><testcase classname="tests.gateway.test_slack.TestThreadReplyHandling" name="test_thread_reply_with_mention_strips_bot_id" time="0.007" /><testcase classname="tests.gateway.test_slack.TestThreadReplyHandling" name="test_top_level_message_requires_mention_even_with_session" time="0.005" /><testcase classname="tests.gateway.test_slack.TestThreadReplyHandling" name="test_no_session_store_ignores_thread_replies" time="0.005" /><testcase classname="tests.gateway.test_slack.TestAssistantThreadLifecycle" name="test_lifecycle_event_seeds_session_store" time="0.005" /><testcase classname="tests.gateway.test_slack.TestAssistantThreadLifecycle" name="test_message_uses_cached_assistant_thread_identity" time="0.006" /><testcase classname="tests.gateway.test_slack.TestAssistantThreadLifecycle" name="test_assistant_threads_cache_eviction" time="0.005" /><testcase classname="tests.gateway.test_slack.TestUserNameResolution" name="test_resolves_display_name" time="0.005" /><testcase classname="tests.gateway.test_slack.TestUserNameResolution" name="test_falls_back_to_real_name" time="0.005" /><testcase classname="tests.gateway.test_slack.TestUserNameResolution" name="test_caches_result" time="0.005" /><testcase classname="tests.gateway.test_slack.TestUserNameResolution" name="test_handles_api_error" time="0.005" /><testcase classname="tests.gateway.test_slack.TestUserNameResolution" name="test_user_name_in_message_source" time="0.006" /><testcase classname="tests.gateway.test_slack.TestSlashCommands" name="test_compact_maps_to_compress" time="0.052" /><testcase classname="tests.gateway.test_slack.TestSlashCommands" name="test_resume_command" time="0.055" /><testcase classname="tests.gateway.test_slack.TestSlashCommands" name="test_background_command" time="0.055" /><testcase classname="tests.gateway.test_slack.TestSlashCommands" name="test_usage_command" time="0.054" /><testcase classname="tests.gateway.test_slack.TestSlashCommands" name="test_reasoning_command" time="0.054" /><testcase classname="tests.gateway.test_slack.TestSlashCommands" name="test_native_btw_slash" time="0.009" /><testcase classname="tests.gateway.test_slack.TestSlashCommands" name="test_native_stop_slash_no_args" time="0.007" /><testcase classname="tests.gateway.test_slack.TestSlashCommands" name="test_native_model_slash_with_args" time="0.007" /><testcase classname="tests.gateway.test_slack.TestSlashCommands" name="test_legacy_hermes_prefix_still_works" time="0.052" /><testcase classname="tests.gateway.test_slack.TestSlashCommands" name="test_legacy_hermes_freeform_question" time="0.054" /><testcase classname="tests.gateway.test_slack.TestMessageSplitting" name="test_long_message_split_into_chunks" time="0.009" /><testcase classname="tests.gateway.test_slack.TestMessageSplitting" name="test_short_message_single_send" time="0.007" /><testcase classname="tests.gateway.test_slack.TestMessageSplitting" name="test_send_preserves_blockquote_formatting" time="0.006" /><testcase classname="tests.gateway.test_slack.TestMessageSplitting" name="test_send_formats_bold_italic" time="0.005" /><testcase classname="tests.gateway.test_slack.TestMessageSplitting" name="test_send_explicitly_enables_mrkdwn" time="0.005" /><testcase classname="tests.gateway.test_slack.TestMessageSplitting" name="test_send_does_not_double_escape_entities" time="0.005" /><testcase classname="tests.gateway.test_slack.TestMessageSplitting" name="test_send_formats_url_with_parens" time="0.006" /><testcase classname="tests.gateway.test_slack.TestReplyBroadcast" name="test_broadcast_disabled_by_default" time="0.005" /><testcase classname="tests.gateway.test_slack.TestReplyBroadcast" name="test_broadcast_enabled_via_config" time="0.005" /><testcase classname="tests.gateway.test_slack.TestFallbackPreservesThreadContext" name="test_send_image_file_fallback_preserves_thread" time="0.006" /><testcase classname="tests.gateway.test_slack.TestFallbackPreservesThreadContext" name="test_send_video_fallback_preserves_thread" time="0.006" /><testcase classname="tests.gateway.test_slack.TestFallbackPreservesThreadContext" name="test_send_document_fallback_preserves_thread" time="0.006" /><testcase classname="tests.gateway.test_slack.TestFallbackPreservesThreadContext" name="test_send_image_file_fallback_includes_caption" time="0.006" /><testcase classname="tests.gateway.test_slack.TestSendImageSSRFGuards" name="test_send_image_blocks_private_redirect_target" time="0.007" /><testcase classname="tests.gateway.test_slack.TestSendImageSSRFGuards" name="test_send_image_fallback_preserves_thread_metadata" time="0.007" /><testcase classname="tests.gateway.test_slack.TestProgressMessageThread" name="test_dm_toplevel_progress_uses_message_ts_as_thread" time="0.006" /><testcase classname="tests.gateway.test_slack.TestProgressMessageThread" name="test_dm_toplevel_shares_session_when_disabled" time="0.005" /><testcase classname="tests.gateway.test_slack.TestProgressMessageThread" name="test_channel_mention_progress_uses_thread_ts" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSlackReplyToText" name="test_slack_reply_to_text_set_on_thread_reply" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSlackReplyToText" name="test_slack_reply_to_text_none_for_top_level_message" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_slash_command_stashes_response_url" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_slash_command_without_response_url_does_not_stash" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_pop_slash_context_returns_and_removes" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_pop_slash_context_returns_none_for_no_match" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_pop_slash_context_discards_stale_entries" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_send_uses_response_url_when_context_exists" time="0.006" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_send_falls_through_without_context" time="0.006" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_send_slash_ephemeral_fallback_on_post_failure" time="0.006" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_send_slash_ephemeral_fallback_on_exception" time="0.006" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_native_slash_stashes_context_and_dispatches" time="0.005" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_legacy_hermes_slash_stashes_context" time="0.051" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_freeform_hermes_question_does_not_stash_context" time="0.054" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_concurrent_users_same_channel_isolates_contexts" time="0.009" /><testcase classname="tests.gateway.test_slack.TestSlashEphemeralAck" name="test_no_contextvar_does_not_match_any_context" time="0.008" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackExecApproval" name="test_sends_blocks_with_buttons" time="0.007" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackExecApproval" name="test_sends_in_thread" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackExecApproval" name="test_not_connected" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackExecApproval" name="test_truncates_long_command" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackApprovalAction" name="test_resolves_approval" time="0.006" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackApprovalAction" name="test_prevents_double_click" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackApprovalAction" name="test_deny_action" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackApprovalAction" name="test_global_allowlist_blocks_unauthorized_click" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackInteractiveAuth" name="test_delegates_to_gateway_runner_auth" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackSlashConfirmAction" name="test_global_allowlist_allows_authorized_click" time="0.006" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackThreadContext" name="test_fetches_and_formats_context" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackThreadContext" name="test_skips_bot_messages" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackThreadContext" name="test_empty_thread" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackThreadContext" name="test_api_failure_returns_empty" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackThreadContext" name="test_fetch_thread_context_includes_bot_parent" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackThreadContext" name="test_fetch_thread_context_excludes_self_bot_replies" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackThreadContext" name="test_fetch_thread_context_multi_workspace" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackThreadContext" name="test_fetch_thread_context_current_ts_excluded" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSlackThreadContext" name="test_fetch_thread_parent_text_from_cache" time="0.006" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSessionKeyFix" name="test_uses_build_session_key" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSessionKeyFix" name="test_no_session_returns_false" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestSessionKeyFix" name="test_no_session_store" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestThreadEngagement" name="test_send_tracks_bot_message_ts" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestThreadEngagement" name="test_bot_message_ts_cap" time="0.006" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestThreadEngagement" name="test_mentioned_threads_populated_on_mention" time="0.005" /><testcase classname="tests.gateway.test_slack_approval_buttons.TestThreadEngagement" name="test_mentioned_threads_cap" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_session_scope.TestChannelSessionScopeDefault" name="test_top_level_maps_to_ts_when_reply_in_thread_true" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_session_scope.TestChannelSessionScopeDefault" name="test_top_level_default_behaves_like_true" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_session_scope.TestChannelSessionScopeShared" name="test_top_level_maps_to_none_when_reply_in_thread_false" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_session_scope.TestChannelSessionScopeShared" name="test_top_level_reply_to_id_stays_none_when_shared" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_session_scope.TestChannelSessionScopeShared" name="test_thread_reply_scopes_by_thread_even_when_shared" time="0.006" /><testcase classname="tests.gateway.test_slack_channel_session_scope.TestThreadReplyAlwaysScopesByThread" name="test_thread_reply_keyed_by_thread_ts[True]" time="0.006" /><testcase classname="tests.gateway.test_slack_channel_session_scope.TestThreadReplyAlwaysScopesByThread" name="test_thread_reply_keyed_by_thread_ts[False]" time="0.006" /><testcase classname="tests.gateway.test_slack_channel_skills.TestSlackResolveChannelSkills" name="test_no_bindings_returns_none" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_skills.TestSlackResolveChannelSkills" name="test_match_by_dm_channel_id" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_skills.TestSlackResolveChannelSkills" name="test_match_by_parent_id_for_thread" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_skills.TestSlackResolveChannelSkills" name="test_no_match_returns_none" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_skills.TestSlackResolveChannelSkills" name="test_single_skill_string" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_skills.TestSlackResolveChannelSkills" name="test_dedup_preserves_order" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_skills.TestSlackResolveChannelSkills" name="test_multiple_bindings_pick_correct" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_skills.TestSlackResolveChannelSkills" name="test_malformed_entry_skipped" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_skills.TestSlackResolveChannelSkills" name="test_empty_skills_list_returns_none" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_skills.TestSlackResolveChannelSkills" name="test_empty_skill_string_returns_none" time="0.005" /><testcase classname="tests.gateway.test_slack_channel_skills.TestSlackMessageEventAutoSkill" name="test_message_event_carries_auto_skill" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_require_mention_defaults_to_true" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_require_mention_false" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_require_mention_true" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_require_mention_string_true" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_require_mention_string_false" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_require_mention_string_no" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_require_mention_string_yes" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_require_mention_empty_string_stays_true" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_require_mention_malformed_string_stays_true" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_require_mention_env_var_fallback" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_require_mention_env_var_default_true" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_strict_mention_defaults_to_false" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_strict_mention_true" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_strict_mention_false" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_strict_mention_string_true" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_strict_mention_string_off" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_strict_mention_malformed_stays_false" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_strict_mention_env_var_fallback" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_free_response_channels_default_empty" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_free_response_channels_list" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_free_response_channels_csv_string" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_free_response_channels_empty_string" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_free_response_channels_env_var_fallback" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_free_response_channels_bare_int" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_free_response_channels_int_list" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_default_require_mention_channel_without_mention_ignored" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_require_mention_false_channel_without_mention_processed" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_channel_in_free_response_processed_without_mention" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_other_channel_not_in_free_response_still_gated" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_dm_always_processed_regardless_of_setting" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_mentioned_message_always_processed" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_thread_reply_with_active_session_processed" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_thread_reply_without_active_session_ignored" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_bot_uid_none_processes_channel_message" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_config_bridges_slack_free_response_channels" time="0.050" /><testcase classname="tests.gateway.test_slack_mention" name="test_top_level_slack_settings_do_not_disable_env_token_setup" time="0.384" /><testcase classname="tests.gateway.test_slack_mention" name="test_explicit_top_level_slack_enabled_false_wins_over_env_token" time="0.054" /><testcase classname="tests.gateway.test_slack_mention" name="test_explicit_platforms_slack_enabled_false_wins_over_env_token" time="0.053" /><testcase classname="tests.gateway.test_slack_mention" name="test_config_bridges_slack_reply_in_thread" time="0.053" /><testcase classname="tests.gateway.test_slack_mention" name="test_config_bridges_slack_strict_mention" time="0.054" /><testcase classname="tests.gateway.test_slack_mention" name="test_mention_in_strict_mode_does_not_register_thread" time="0.008" /><testcase classname="tests.gateway.test_slack_mention" name="test_mention_outside_strict_mode_still_registers_thread" time="0.008" /><testcase classname="tests.gateway.test_slack_mention" name="test_allowed_channels_default_empty" time="0.007" /><testcase classname="tests.gateway.test_slack_mention" name="test_allowed_channels_list" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_allowed_channels_csv_string" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_allowed_channels_empty_string" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_allowed_channels_env_var_fallback" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_allowed_channels_blocks_non_whitelisted_channel" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_allowed_channels_permits_whitelisted_channel" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_allowed_channels_empty_no_restriction" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_allowed_channels_blocks_even_when_mentioned" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_allowed_channels_dm_unaffected" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_allowed_channels_env_var_blocks_channel" time="0.005" /><testcase classname="tests.gateway.test_slack_mention" name="test_config_bridges_slack_allowed_channels" time="0.050" /><testcase classname="tests.gateway.test_slack_mention" name="test_config_bridges_slack_allowed_channels_env_takes_precedence" time="0.053" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestRegisterSlackActionHandlerAPI" name="test_string_action_id_is_queued" time="0.008" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestRegisterSlackActionHandlerAPI" name="test_regex_action_id_is_accepted" time="0.006" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestRegisterSlackActionHandlerAPI" name="test_constraint_dict_action_id_is_accepted" time="0.005" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestRegisterSlackActionHandlerAPI" name="test_non_callable_callback_raises" time="0.005" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestRegisterSlackActionHandlerAPI" name="test_empty_string_action_id_raises" time="0.005" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestRegisterSlackActionHandlerAPI" name="test_none_action_id_raises" time="0.005" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestRegisterSlackActionHandlerAPI" name="test_get_slack_action_handlers_returns_copy" time="0.005" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestRegisterSlackActionHandlerAPI" name="test_multiple_plugins_each_recorded" time="0.005" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestSlackAdapterPluginActionWiring" name="test_plugin_handler_wired_into_app" time="0.007" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestSlackAdapterPluginActionWiring" name="test_no_plugin_handlers_does_not_break_connect" time="0.008" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestSlackAdapterPluginActionWiring" name="test_plugin_exception_does_not_propagate_to_slack" time="0.008" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestSlackAdapterPluginActionWiring" name="test_plugin_handler_invoked_with_slack_args" time="0.008" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestSlackAdapterPluginActionWiring" name="test_wrapper_signature_only_exposes_slack_bolt_args" time="0.007" /><testcase classname="tests.gateway.test_slack_plugin_action_handlers.TestSlackAdapterPluginActionWiring" name="test_plugin_loader_failure_does_not_break_connect" time="0.007" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_empty_extra_is_disabled" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_disabled_policy_treats_anyone_as_admin" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_dm_admin_list_only" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_admin_runs_anything" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_non_admin_runs_only_listed_commands" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_always_allowed_floor_for_non_admin" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_unknown_user_id_blocked" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_id_coercion_ints_become_strings" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_id_coercion_csv_string" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_command_coercion_strips_leading_slash_and_lowercases" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_command_coercion_csv_string" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_group_scope_uses_group_keys" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_dm_falls_back_to_group_user_commands_when_dm_unset" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyFromExtra" name="test_dm_admin_does_not_imply_group_admin" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyForSource" name="test_no_config_returns_disabled" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyForSource" name="test_no_platform_config_returns_disabled" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyForSource" name="test_dm_chat_type_resolves_to_dm_scope" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyForSource" name="test_group_chat_type_resolves_to_group_scope" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyForSource" name="test_channel_thread_chat_types_treated_as_group_scope" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyForSource" name="test_no_admin_list_for_dm_means_unrestricted_in_dm" time="0.005" /><testcase classname="tests.gateway.test_slash_access.TestPolicyForSource" name="test_per_platform_isolation" time="0.005" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_whoami_unrestricted_when_no_admin_list" time="0.007" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_whoami_admin_user" time="0.006" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_whoami_non_admin_lists_runnable_commands" time="0.006" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_non_admin_denied_for_unlisted_command" time="0.006" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_non_admin_with_empty_user_commands_gets_floor_only" time="0.006" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_admin_runs_unlisted_command" time="0.006" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_user_runs_listed_command" time="0.006" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_backward_compat_no_admin_list_means_no_gate" time="0.006" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_dm_admin_is_not_group_admin" time="0.006" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_group_only_gating_leaves_dm_unrestricted" time="0.006" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_plugin_registered_command_is_gated" time="0.007" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_running_agent_fastpath_blocks_non_admin_command" time="0.006" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_running_agent_fastpath_allows_admin_command" time="0.006" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_running_agent_fastpath_status_always_works" time="0.006" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_gate_uses_canonical_name_not_alias" time="0.056" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_gate_does_not_intercept_unknown_command" time="0.060" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_dm_admin_blocked_in_group_with_separate_admin_list" time="0.010" /><testcase classname="tests.gateway.test_slash_access_dispatch" name="test_gating_isolated_per_platform" time="0.010" /><testcase classname="tests.gateway.test_sms.TestSmsConfigLoading" name="test_env_overrides_create_sms_config" time="0.054" /><testcase classname="tests.gateway.test_sms.TestSmsConfigLoading" name="test_env_overrides_set_home_channel" time="0.055" /><testcase classname="tests.gateway.test_sms.TestSmsFormatAndTruncate" name="test_strips_bold" time="0.009" /><testcase classname="tests.gateway.test_sms.TestSmsFormatAndTruncate" name="test_strips_italic" time="0.008" /><testcase classname="tests.gateway.test_sms.TestSmsFormatAndTruncate" name="test_strips_code_blocks" time="0.007" /><testcase classname="tests.gateway.test_sms.TestSmsFormatAndTruncate" name="test_strips_inline_code" time="0.005" /><testcase classname="tests.gateway.test_sms.TestSmsFormatAndTruncate" name="test_strips_headers" time="0.005" /><testcase classname="tests.gateway.test_sms.TestSmsFormatAndTruncate" name="test_strips_links" time="0.005" /><testcase classname="tests.gateway.test_sms.TestSmsFormatAndTruncate" name="test_collapses_newlines" time="0.005" /><testcase classname="tests.gateway.test_sms.TestSmsEchoPrevention" name="test_own_number_detection" time="0.005" /><testcase classname="tests.gateway.test_sms.TestSmsRequirements" name="test_check_sms_requirements_missing_sid" time="0.005" /><testcase classname="tests.gateway.test_sms.TestSmsRequirements" name="test_check_sms_requirements_missing_token" time="0.005" /><testcase classname="tests.gateway.test_sms.TestSmsRequirements" name="test_check_sms_requirements_both_set" time="0.005" /><testcase classname="tests.gateway.test_sms.TestWebhookHostConfig" name="test_default_host_is_localhost" time="0.005" /><testcase classname="tests.gateway.test_sms.TestWebhookHostConfig" name="test_host_from_env" time="0.005" /><testcase classname="tests.gateway.test_sms.TestWebhookHostConfig" name="test_webhook_url_from_env" time="0.005" /><testcase classname="tests.gateway.test_sms.TestWebhookHostConfig" name="test_webhook_url_stripped" time="0.005" /><testcase classname="tests.gateway.test_sms.TestStartupGuard" name="test_refuses_start_without_webhook_url" time="0.006" /><testcase classname="tests.gateway.test_sms.TestStartupGuard" name="test_missing_webhook_url_is_non_retryable" time="0.006" /><testcase classname="tests.gateway.test_sms.TestStartupGuard" name="test_missing_phone_number_is_non_retryable" time="0.006" /><testcase classname="tests.gateway.test_sms.TestStartupGuard" name="test_insecure_flag_does_not_set_fatal_error" time="0.007" /><testcase classname="tests.gateway.test_sms.TestStartupGuard" name="test_insecure_flag_allows_start_without_url" time="0.008" /><testcase classname="tests.gateway.test_sms.TestStartupGuard" name="test_webhook_url_allows_start" time="0.006" /><testcase classname="tests.gateway.test_sms.TestTwilioSignatureValidation" name="test_valid_signature_accepted" time="0.005" /><testcase classname="tests.gateway.test_sms.TestTwilioSignatureValidation" name="test_invalid_signature_rejected" time="0.005" /><testcase classname="tests.gateway.test_sms.TestTwilioSignatureValidation" name="test_wrong_token_rejected" time="0.005" /><testcase classname="tests.gateway.test_sms.TestTwilioSignatureValidation" name="test_params_sorted_by_key" time="0.005" /><testcase classname="tests.gateway.test_sms.TestTwilioSignatureValidation" name="test_empty_param_values_included" time="0.005" /><testcase classname="tests.gateway.test_sms.TestTwilioSignatureValidation" name="test_url_matters" time="0.005" /><testcase classname="tests.gateway.test_sms.TestTwilioSignatureValidation" name="test_port_variant_443_matches_without_port" time="0.005" /><testcase classname="tests.gateway.test_sms.TestTwilioSignatureValidation" name="test_port_variant_without_port_matches_443" time="0.005" /><testcase classname="tests.gateway.test_sms.TestTwilioSignatureValidation" name="test_non_standard_port_no_variant" time="0.005" /><testcase classname="tests.gateway.test_sms.TestTwilioSignatureValidation" name="test_port_variant_http_80" time="0.005" /><testcase classname="tests.gateway.test_sms.TestWebhookSignatureEnforcement" name="test_insecure_flag_skips_validation" time="0.006" /><testcase classname="tests.gateway.test_sms.TestWebhookSignatureEnforcement" name="test_insecure_flag_with_url_still_validates" time="0.006" /><testcase classname="tests.gateway.test_sms.TestWebhookSignatureEnforcement" name="test_missing_signature_returns_403" time="0.006" /><testcase classname="tests.gateway.test_sms.TestWebhookSignatureEnforcement" name="test_invalid_signature_returns_403" time="0.006" /><testcase classname="tests.gateway.test_sms.TestWebhookSignatureEnforcement" name="test_valid_signature_returns_200" time="0.006" /><testcase classname="tests.gateway.test_sms.TestWebhookSignatureEnforcement" name="test_port_variant_signature_returns_200" time="0.006" /><testcase classname="tests.gateway.test_sse_agent_cancel.TestSSEAgentCancelOnDisconnect" name="test_agent_task_cancelled_on_client_disconnect" time="0.007" /><testcase classname="tests.gateway.test_sse_agent_cancel.TestSSEAgentCancelOnDisconnect" name="test_agent_task_not_cancelled_on_normal_completion" time="0.011" /><testcase classname="tests.gateway.test_sse_agent_cancel.TestSSEAgentCancelOnDisconnect" name="test_broken_pipe_also_cancels_agent" time="0.008" /><testcase classname="tests.gateway.test_sse_agent_cancel.TestSSEAgentCancelOnDisconnect" name="test_already_done_task_not_cancelled_on_disconnect" time="0.007" /><testcase classname="tests.gateway.test_sse_agent_cancel.TestSSEAgentCancelOnDisconnect" name="test_agent_interrupt_called_on_disconnect" time="0.010" /><testcase classname="tests.gateway.test_sse_agent_cancel.TestSSEAgentCancelOnDisconnect" name="test_agent_ref_none_still_cancels_task" time="0.008" /><testcase classname="tests.gateway.test_ssl_cert_detection" name="test_ensure_ssl_certs_ignores_stale_ssl_cert_file" time="0.005" /><testcase classname="tests.gateway.test_ssl_cert_detection" name="test_ensure_ssl_certs_keeps_existing_ssl_cert_file" time="0.005" /><testcase classname="tests.gateway.test_ssl_certs.TestEnsureSslCerts" name="test_respects_existing_env_var" time="0.006" /><testcase classname="tests.gateway.test_ssl_certs.TestEnsureSslCerts" name="test_sets_from_ssl_default_paths" time="0.006" /><testcase classname="tests.gateway.test_ssl_certs.TestEnsureSslCerts" name="test_no_op_when_nothing_found" time="0.006" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_write_pid_file_records_gateway_metadata" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_write_pid_file_is_atomic_against_concurrent_writers" time="0.006" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_rejects_live_non_gateway_pid" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_rejects_reused_pid_with_wrong_live_command" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_rejects_live_gateway_from_another_profile" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_runtime_status_rejects_symlinked_authority_file" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_runtime_status_rejects_symlinked_hermes_home" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_preserves_unverifiable_record_when_lock_is_inactive" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_open_running_process_refuses_different_expected_profile" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_open_running_process_refuses_pid_without_identity_match" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_pidfd_handle_signals_the_spawned_child" time="0.008" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_cleans_stale_record_from_dead_process" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_rejects_gateway_metadata_when_live_cmdline_is_unavailable" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_accepts_script_style_gateway_cmdline" time="0.006" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_accepts_explicit_pid_path_without_cleanup" time="0.008" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_runtime_lock_claims_and_releases_liveness" time="0.006" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_treats_pid_file_as_stale_without_runtime_lock" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_cleans_stale_metadata_from_dead_foreign_pid" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_falls_back_to_live_lock_record" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_write_json_file_uses_atomic_json_write" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_runtime_status_file_is_private" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_runtime_status_records_boot_and_profile_identity" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_unverifiable_live_identity_reports_degraded_without_mutation" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_dead_child_reconciles_runtime_status_once" time="0.009" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_dead_runtime_reconciliation_write_failure_is_visible" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_write_runtime_status_overwrites_stale_pid_on_restart" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_write_runtime_status_overwrites_stale_argv_on_restart" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_write_runtime_status_records_platform_failure" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_write_runtime_status_explicit_none_clears_stale_fields" time="0.005" /><testcase classname="tests.gateway.test_status.TestTerminatePid" name="test_force_uses_taskkill_on_windows" time="0.005" /><testcase classname="tests.gateway.test_status.TestTerminatePid" name="test_force_falls_back_to_sigterm_when_taskkill_missing" time="0.005" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_windows_file_lock_uses_high_offset" time="0.005" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_rejects_live_other_process" time="0.025" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_replaces_pid_reused_by_unrelated_process" time="0.006" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_keeps_lock_when_cmdline_unreadable_but_record_is_gateway" time="0.005" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_keeps_lock_when_pid_reused_by_gateway" time="0.005" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_replaces_stale_record" time="0.005" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_recovers_empty_lock_file" time="0.005" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_recovers_corrupt_lock_file" time="0.005" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_release_scoped_lock_only_removes_current_owner" time="0.005" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_release_all_scoped_locks_can_target_single_owner" time="0.005" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_release_all_scoped_locks_skips_pid_reuse_mismatch" time="0.005" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_replaces_reused_pid_even_with_matching_start_time" time="0.005" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_write_marker_records_target_identity" time="0.005" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_returns_true_when_marker_names_self" time="0.005" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_returns_false_for_different_pid" time="0.005" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_returns_false_on_start_time_mismatch" time="0.005" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_returns_true_on_windows_when_start_time_unavailable" time="0.005" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_returns_false_when_marker_missing" time="0.005" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_returns_false_for_stale_marker" time="0.005" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_handles_malformed_marker_gracefully" time="0.005" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_handles_marker_with_missing_fields" time="0.005" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_clear_takeover_marker_is_idempotent" time="0.005" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_write_marker_returns_false_on_write_failure" time="0.005" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_ignores_marker_for_different_process_and_prevents_stale_grief" time="0.005" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_write_marker_records_target_identity" time="0.005" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_returns_true_when_marker_names_self" time="0.005" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_returns_false_for_different_pid" time="0.005" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_rejects_marker_from_a_different_boot" time="0.005" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_returns_false_for_stale_marker" time="0.005" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_clear_planned_stop_marker_is_idempotent" time="0.005" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_write_marker_returns_false_on_write_failure" time="0.005" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_returns_true_on_windows_when_start_time_unavailable" time="0.005" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_still_rejects_foreign_pid_when_start_time_unavailable" time="0.005" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_still_rejects_start_time_mismatch_when_both_known" time="0.005" /><testcase classname="tests.gateway.test_status.TestReadProcessCmdlinePsFallback" name="test_ps_fallback_when_proc_unavailable" time="0.005" /><testcase classname="tests.gateway.test_status.TestReadProcessCmdlinePsFallback" name="test_ps_fallback_returns_none_on_failure" time="0.005" /><testcase classname="tests.gateway.test_status.TestReadProcessCmdlinePsFallback" name="test_proc_cmdline_takes_priority_over_ps" time="0.005" /><testcase classname="tests.gateway.test_status.TestReadProcessCmdlinePsFallback" name="test_ps_fallback_used_when_proc_returns_empty" time="0.005" /><testcase classname="tests.gateway.test_status.TestCorruptStatusFiles" name="test_read_json_file_returns_none_on_binary_garbage" time="0.005" /><testcase classname="tests.gateway.test_status.TestCorruptStatusFiles" name="test_read_json_file_still_parses_valid_json" time="0.005" /><testcase classname="tests.gateway.test_status.TestCorruptStatusFiles" name="test_read_pid_record_returns_none_on_binary_garbage" time="0.005" /><testcase classname="tests.gateway.test_status.TestCorruptStatusFiles" name="test_read_pid_record_still_parses_bare_pid" time="0.005" /><testcase classname="tests.gateway.test_status_command" name="test_status_command_reports_running_agent_without_interrupt" time="0.021" /><testcase classname="tests.gateway.test_status_command" name="test_status_command_includes_session_title_when_present" time="0.020" /><testcase classname="tests.gateway.test_status_command" name="test_status_command_reads_token_totals_from_session_db" time="0.020" /><testcase classname="tests.gateway.test_status_command" name="test_status_command_tokens_zero_when_session_db_row_missing" time="0.020" /><testcase classname="tests.gateway.test_status_command" name="test_status_command_includes_live_agent_model_and_context" time="0.006" /><testcase classname="tests.gateway.test_status_command" name="test_status_command_includes_persisted_model_and_context_when_agent_not_running" time="0.006" /><testcase classname="tests.gateway.test_status_command" name="test_status_command_includes_cached_agent_model_and_context" time="0.006" /><testcase classname="tests.gateway.test_status_command" name="test_agents_command_reports_active_agents_and_processes" time="0.006" /><testcase classname="tests.gateway.test_status_command" name="test_tasks_alias_routes_to_agents_command" time="0.006" /><testcase classname="tests.gateway.test_status_command" name="test_handle_message_persists_agent_token_counts" time="0.065" /><testcase classname="tests.gateway.test_status_command" name="test_first_run_slack_home_channel_onboarding_uses_parent_command" time="0.094" /><testcase classname="tests.gateway.test_status_command" name="test_first_run_non_slack_home_channel_onboarding_keeps_direct_command" time="0.094" /><testcase classname="tests.gateway.test_status_command" name="test_handle_message_discards_stale_result_after_session_invalidation" time="0.036" /><testcase classname="tests.gateway.test_status_command" name="test_handle_message_stale_result_keeps_newer_generation_callback" time="0.035" /><testcase classname="tests.gateway.test_status_command" name="test_status_command_bypasses_active_session_guard" time="0.006" /><testcase classname="tests.gateway.test_status_command" name="test_profile_command_reports_custom_root_profile" time="0.006" /><testcase classname="tests.gateway.test_status_command" name="test_post_delivery_callback_generation_snapshot_happens_after_bind" time="0.005" /><testcase classname="tests.gateway.test_steer_command" name="test_steer_calls_agent_steer_and_does_not_interrupt" time="0.006" /><testcase classname="tests.gateway.test_steer_command" name="test_steer_without_payload_returns_usage" time="0.006" /><testcase classname="tests.gateway.test_steer_command" name="test_steer_with_pending_sentinel_falls_back_to_queue" time="0.006" /><testcase classname="tests.gateway.test_steer_command" name="test_steer_agent_without_steer_method_falls_back" time="0.006" /><testcase classname="tests.gateway.test_steer_command" name="test_steer_rejected_payload_returns_rejection_message" time="0.006" /><testcase classname="tests.gateway.test_step_callback_compat.TestStepCallbackNormalization" name="test_dict_prev_tools_produce_string_tool_names" time="0.106" /><testcase classname="tests.gateway.test_step_callback_compat.TestStepCallbackNormalization" name="test_string_prev_tools_still_work" time="0.110" /><testcase classname="tests.gateway.test_step_callback_compat.TestStepCallbackNormalization" name="test_empty_prev_tools" time="0.110" /><testcase classname="tests.gateway.test_step_callback_compat.TestStepCallbackNormalization" name="test_joinable_for_hook_example" time="0.009" /><testcase classname="tests.gateway.test_sticker_cache.TestLoadSaveCache" name="test_load_missing_file" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestLoadSaveCache" name="test_load_corrupt_file" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestLoadSaveCache" name="test_save_and_load_roundtrip" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestLoadSaveCache" name="test_save_creates_parent_dirs" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestCacheSticker" name="test_cache_and_retrieve" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestCacheSticker" name="test_missing_sticker_returns_none" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestCacheSticker" name="test_overwrite_existing" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestCacheSticker" name="test_multiple_stickers" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestBuildStickerInjection" name="test_exact_format_no_context" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestBuildStickerInjection" name="test_exact_format_emoji_only" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestBuildStickerInjection" name="test_exact_format_emoji_and_set_name" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestBuildStickerInjection" name="test_set_name_without_emoji_ignored" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestBuildStickerInjection" name="test_description_with_quotes" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestBuildStickerInjection" name="test_empty_description" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestBuildAnimatedStickerInjection" name="test_exact_format_with_emoji" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestBuildAnimatedStickerInjection" name="test_exact_format_without_emoji" time="0.005" /><testcase classname="tests.gateway.test_sticker_cache.TestBuildAnimatedStickerInjection" name="test_empty_emoji_same_as_no_emoji" time="0.005" /><testcase classname="tests.gateway.test_stop_thread_sibling" name="test_sibling_finds_other_users_run_in_same_thread" time="0.005" /><testcase classname="tests.gateway.test_stop_thread_sibling" name="test_sibling_excludes_callers_own_key" time="0.005" /><testcase classname="tests.gateway.test_stop_thread_sibling" name="test_sibling_skips_pending_sentinel" time="0.005" /><testcase classname="tests.gateway.test_stop_thread_sibling" name="test_sibling_does_not_match_different_thread_same_chat" time="0.005" /><testcase classname="tests.gateway.test_stop_thread_sibling" name="test_sibling_returns_empty_for_non_thread_source" time="0.005" /><testcase classname="tests.gateway.test_stop_thread_sibling" name="test_stop_interrupts_sibling_thread_run_when_authorized" time="0.005" /><testcase classname="tests.gateway.test_stop_thread_sibling" name="test_stop_does_not_interrupt_sibling_when_unauthorized" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestCleanForDisplay" name="test_no_media_passthrough" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestCleanForDisplay" name="test_media_tag_stripped" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestCleanForDisplay" name="test_media_tag_with_space" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestCleanForDisplay" name="test_media_tag_with_quotes" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestCleanForDisplay" name="test_audio_as_voice_stripped" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestCleanForDisplay" name="test_multiple_media_tags" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestCleanForDisplay" name="test_excessive_newlines_collapsed" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestCleanForDisplay" name="test_media_only_response" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestCleanForDisplay" name="test_media_mid_sentence" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestCleanForDisplay" name="test_preserves_non_media_colons" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestFinalizeCapabilityGate" name="test_identical_text_skip_respects_adapter_flag" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestEditMessageFinalizeSignature" name="test_edit_message_accepts_finalize[gateway.platforms.telegram-TelegramAdapter]" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestEditMessageFinalizeSignature" name="test_edit_message_accepts_finalize[plugins.platforms.discord.adapter-DiscordAdapter]" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestEditMessageFinalizeSignature" name="test_edit_message_accepts_finalize[gateway.platforms.slack-SlackAdapter]" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestEditMessageFinalizeSignature" name="test_edit_message_accepts_finalize[gateway.platforms.matrix-MatrixAdapter]" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestEditMessageFinalizeSignature" name="test_edit_message_accepts_finalize[plugins.platforms.mattermost.adapter-MattermostAdapter]" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestEditMessageFinalizeSignature" name="test_edit_message_accepts_finalize[gateway.platforms.feishu-FeishuAdapter]" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestEditMessageFinalizeSignature" name="test_edit_message_accepts_finalize[gateway.platforms.whatsapp-WhatsAppAdapter]" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestEditMessageFinalizeSignature" name="test_edit_message_accepts_finalize[gateway.platforms.dingtalk-DingTalkAdapter]" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestSendOrEditMediaStripping" name="test_first_send_strips_media" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestSendOrEditMediaStripping" name="test_edit_strips_media" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestSendOrEditMediaStripping" name="test_media_only_skips_send" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestSendOrEditMediaStripping" name="test_cursor_only_update_skips_send" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestSendOrEditMediaStripping" name="test_short_text_with_cursor_skips_new_message" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestSendOrEditMediaStripping" name="test_longer_text_with_cursor_sends_new_message" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestSendOrEditMediaStripping" name="test_short_text_without_cursor_sends_normally" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestSendOrEditMediaStripping" name="test_short_text_cursor_edit_existing_message_allowed" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestStreamRunMediaStripping" name="test_stream_with_media_tag" time="0.005" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_segment_break_creates_new_message" time="0.056" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_segment_break_no_text_before" time="0.061" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_segment_break_removes_cursor" time="0.061" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_multiple_segment_breaks" time="0.111" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_already_sent_stays_true_after_segment" time="0.060" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_edit_failure_sends_only_unsent_tail_at_finish" time="0.213" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_segment_break_clears_failed_edit_fallback_state" time="0.264" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_segment_break_after_mid_stream_edit_failure_preserves_tail" time="0.315" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_no_message_id_enters_fallback_mode" time="0.214" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_no_message_id_single_delta_marks_already_sent" time="0.011" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_no_message_id_segment_breaks_do_not_resend" time="0.108" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_fallback_final_splits_long_continuation_without_dropping_text" time="0.214" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_fallback_final_sends_full_text_at_tool_boundary" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_fallback_final_deletes_partial_after_full_resend" time="0.012" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_fallback_final_keeps_partial_after_tail_only_send" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_fallback_final_does_not_delete_when_no_chunks_reach_user" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestSegmentBreakOnToolBoundary" name="test_fallback_final_skips_delete_when_adapter_lacks_method" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestFinalResponseDeliveryGuard" name="test_split_overflow_failed_send_does_not_mark_final_sent" time="0.058" /><testcase classname="tests.gateway.test_stream_consumer.TestFinalResponseDeliveryGuard" name="test_split_overflow_partial_send_marks_final_sent" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer.TestFinalContentDeliveredGuard" name="test_mid_stream_edit_success_does_not_mark_content_delivered" time="0.113" /><testcase classname="tests.gateway.test_stream_consumer.TestFinalContentDeliveredGuard" name="test_final_edit_success_does_mark_content_delivered" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer.TestFinalContentDeliveredGuard" name="test_fallback_partial_send_does_not_mark_final_sent" time="3.166" /><testcase classname="tests.gateway.test_stream_consumer.TestEditOverflowSplitAndDeliver" name="test_consumer_advances_message_id_on_split_and_deliver" time="0.011" /><testcase classname="tests.gateway.test_stream_consumer.TestInterimCommentaryMessages" name="test_commentary_message_stays_separate_from_final_stream" time="0.058" /><testcase classname="tests.gateway.test_stream_consumer.TestInterimCommentaryMessages" name="test_failed_final_send_does_not_mark_final_response_sent" time="0.011" /><testcase classname="tests.gateway.test_stream_consumer.TestInterimCommentaryMessages" name="test_success_without_message_id_marks_visible_and_sends_only_tail" time="0.211" /><testcase classname="tests.gateway.test_stream_consumer.TestCancelledConsumerSetsFlags" name="test_cancelled_with_already_sent_marks_final_response_sent" time="0.092" /><testcase classname="tests.gateway.test_stream_consumer.TestCancelledConsumerSetsFlags" name="test_cancelled_without_any_sends_does_not_mark_final" time="0.092" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_plain_text_passes_through" time="0.010" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_complete_think_block_stripped" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_think_block_in_middle" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_think_block_split_across_deltas" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_opening_tag_split_across_deltas" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_closing_tag_split_across_deltas" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_multiple_think_blocks" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_multiple_think_blocks_with_text_between" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_thinking_tag_variant" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_thought_tag_variant" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_reasoning_scratchpad_variant" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_case_insensitive_THINKING" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_prose_mention_not_stripped" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_prose_mention_after_text" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_think_at_line_start_is_stripped" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_think_with_only_whitespace_before" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_flush_think_buffer_on_non_tag" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_flush_think_buffer_when_inside_block" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_unclosed_think_block_suppresses" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_multiline_think_block" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulate" name="test_segment_reset_preserves_think_state" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer.TestFilterAndAccumulateIntegration" name="test_think_block_not_sent_to_platform" time="0.158" /><testcase classname="tests.gateway.test_stream_consumer.TestBufferOnlyMode" name="test_suppresses_intermediate_edits" time="0.011" /><testcase classname="tests.gateway.test_stream_consumer.TestBufferOnlyMode" name="test_flushes_on_segment_break" time="0.058" /><testcase classname="tests.gateway.test_stream_consumer.TestBufferOnlyMode" name="test_flushes_on_commentary" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer.TestBufferOnlyMode" name="test_default_mode_still_triggers_intermediate_edits" time="0.011" /><testcase classname="tests.gateway.test_stream_consumer.TestCursorStrippingOnFallback" name="test_cursor_stripped_when_continuation_empty" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestCursorStrippingOnFallback" name="test_cursor_not_stripped_when_no_cursor_configured" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestCursorStrippingOnFallback" name="test_cursor_strip_edit_failure_handled" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestOnNewMessageCallback" name="test_callback_fires_on_first_send" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestOnNewMessageCallback" name="test_callback_fires_once_per_segment" time="0.108" /><testcase classname="tests.gateway.test_stream_consumer.TestOnNewMessageCallback" name="test_callback_not_fired_on_edit" time="0.164" /><testcase classname="tests.gateway.test_stream_consumer.TestOnNewMessageCallback" name="test_callback_fires_on_commentary" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer.TestOnNewMessageCallback" name="test_callback_error_swallowed" time="0.011" /><testcase classname="tests.gateway.test_stream_consumer.TestOnNewMessageCallback" name="test_no_callback_when_none" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer.TestUtf16OverflowDetection" name="test_emoji_text_exceeding_utf16_limit_triggers_overflow_split" time="0.057" /><testcase classname="tests.gateway.test_stream_consumer.TestUtf16OverflowDetection" name="test_codepoint_only_adapter_falls_back_to_len" time="0.010" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestDraftTransportSelection" name="test_default_transport_stays_on_edit" time="0.008" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestDraftTransportSelection" name="test_auto_dm_with_draft_capable_adapter_picks_draft" time="0.008" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestDraftTransportSelection" name="test_auto_group_falls_back_to_edit" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestDraftTransportSelection" name="test_explicit_edit_never_uses_drafts" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestDraftTransportSelection" name="test_explicit_draft_unsupported_falls_back" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestDraftTransportSelection" name="test_magicmock_adapter_falls_back_to_edit" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestDraftStreamingHappyPath" name="test_dm_stream_animates_draft_then_finalizes_with_send" time="0.108" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestDraftStreamingHappyPath" name="test_group_chat_skips_draft_path" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestDraftFallbackOnFailure" name="test_first_draft_failure_disables_drafts_for_run" time="0.111" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestDraftIdLifecycle" name="test_consecutive_responses_use_distinct_draft_ids" time="0.112" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestDraftIdLifecycle" name="test_tool_boundary_bumps_draft_id" time="0.163" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestAlreadySentInDraftMode" name="test_drafts_do_not_set_already_sent_until_real_message" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestAdapterPrefersFreshFinal" name="test_edit_stream_finalizes_with_fresh_send_and_deletes_preview" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestRichAwareOverflow" name="test_raw_message_limit_uses_adapter_rich_cap" time="0.011" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestRichAwareOverflow" name="test_raw_message_limit_falls_back_to_max_length" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestRichAwareOverflow" name="test_raw_message_limit_mock_adapter_is_safe" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestRichAwareOverflow" name="test_long_rich_reply_not_split_and_final_is_whole" time="0.058" /><testcase classname="tests.gateway.test_stream_consumer_draft.TestRichAwareOverflow" name="test_fresh_final_deletes_all_preview_fragments" time="0.011" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestFreshFinalForLongLivedPreviews" name="test_disabled_by_default_still_edits_in_place" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestFreshFinalForLongLivedPreviews" name="test_short_lived_preview_edits_in_place" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestFreshFinalForLongLivedPreviews" name="test_long_lived_preview_sends_fresh_final" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestFreshFinalForLongLivedPreviews" name="test_fresh_final_without_delete_support_is_best_effort" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestFreshFinalForLongLivedPreviews" name="test_fresh_final_fallback_to_edit_on_send_failure" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestFreshFinalForLongLivedPreviews" name="test_only_finalize_triggers_fresh_final" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestFreshFinalForLongLivedPreviews" name="test_no_edit_sentinel_is_not_affected" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestSegmentBreakDoesNotMarkFinalSent" name="test_preamble_fresh_final_at_tool_boundary_does_not_mark_final" time="0.108" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestSegmentBreakDoesNotMarkFinalSent" name="test_final_answer_after_preamble_is_delivered_exactly_once" time="0.113" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestSegmentBreakDoesNotMarkFinalSent" name="test_genuine_final_answer_without_tools_marks_delivered" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestSegmentBreakDoesNotMarkFinalSent" name="test_no_edit_adapter_delivers_final_after_preamble" time="0.112" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestSegmentBreakDoesNotMarkFinalSent" name="test_multi_tool_call_turn_delivers_final_once" time="0.162" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestCancelledBestEffortDeliveryFinalizes" name="test_cancel_best_effort_edit_is_finalized" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestCancelledBestEffortDeliveryFinalizes" name="test_cancel_best_effort_failure_keeps_gateway_resend_possible" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestCancelledBestEffortDeliveryFinalizes" name="test_cancel_without_preview_makes_no_delivery_attempt" time="0.031" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestCancelledBestEffortDeliveryFinalizes" name="test_cancel_with_fresh_final_enabled_delivers_and_flags_via_handler" time="0.058" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestGotDoneOverflowSplitNotRefinalized" name="test_split_finalize_edit_is_not_refinalized" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestGotDoneOverflowSplitNotRefinalized" name="test_non_split_finalize_edit_still_gets_explicit_refinalize" time="0.062" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestFinalCleanupEditFloodControl" name="test_failed_final_cleanup_edit_marks_visible_content_delivered" time="0.063" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestFinalCleanupEditFloodControl" name="test_failed_final_edit_does_not_mark_undelivered_tail" time="0.011" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestStreamConsumerConfigFreshFinalField" name="test_default_is_disabled" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestStreamConsumerConfigFreshFinalField" name="test_field_is_configurable" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestStreamingConfigFreshFinalField" name="test_default_is_disabled" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestStreamingConfigFreshFinalField" name="test_from_dict_uses_default_when_missing" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestStreamingConfigFreshFinalField" name="test_from_dict_respects_explicit_zero" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestStreamingConfigFreshFinalField" name="test_to_dict_round_trip" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestTelegramAdapterDeleteMessage" name="test_delete_message_method_exists" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer_fresh_final.TestTelegramAdapterDeleteMessage" name="test_base_adapter_default_returns_false" time="0.006" /><testcase classname="tests.gateway.test_stream_consumer_thread_routing.TestInitialReplyToId" name="test_first_send_uses_initial_reply_to_id" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_thread_routing.TestInitialReplyToId" name="test_first_send_without_initial_reply_to_id" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_thread_routing.TestInitialReplyToId" name="test_subsequent_edits_ignore_initial_reply_to_id" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_thread_routing.TestInitialReplyToId" name="test_metadata_passed_on_first_send" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_thread_routing.TestInitialReplyToId" name="test_final_first_send_marks_metadata_notify_true" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_thread_routing.TestInitialReplyToId" name="test_nonfinal_first_send_does_not_mark_notify" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_thread_routing.TestOverflowFirstMessage" name="test_overflow_first_send_uses_initial_reply_to_id" time="0.007" /><testcase classname="tests.gateway.test_stream_consumer_thread_routing.TestFeishuFallbackThreadRouting" name="test_create_uses_thread_id_when_available" time="0.008" /><testcase classname="tests.gateway.test_stream_consumer_thread_routing.TestFeishuFallbackThreadRouting" name="test_create_uses_chat_id_when_no_thread" time="0.011" /><testcase classname="tests.gateway.test_stream_events" name="test_message_chunk_flows_to_sink_on_delta" time="0.005" /><testcase classname="tests.gateway.test_stream_events" name="test_intermediate_message_stop_breaks_segment_but_final_does_not" time="0.006" /><testcase classname="tests.gateway.test_stream_events" name="test_commentary_flows_to_sink" time="0.005" /><testcase classname="tests.gateway.test_stream_events" name="test_message_events_dropped_when_no_sink" time="0.005" /><testcase classname="tests.gateway.test_stream_events" name="test_tool_call_chunk_renders_default_chrome" time="0.005" /><testcase classname="tests.gateway.test_stream_events" name="test_tool_preview_truncated_to_cap" time="0.007" /><testcase classname="tests.gateway.test_stream_events" name="test_new_mode_dedups_same_tool" time="0.006" /><testcase classname="tests.gateway.test_stream_events" name="test_off_mode_emits_nothing" time="0.006" /><testcase classname="tests.gateway.test_stream_events" name="test_adapter_can_eat_tool_chrome" time="0.005" /><testcase classname="tests.gateway.test_stream_events" name="test_tool_finished_emits_no_chrome" time="0.005" /><testcase classname="tests.gateway.test_stream_events" name="test_long_tool_hint_routes_to_hook" time="0.005" /><testcase classname="tests.gateway.test_stream_events" name="test_gateway_notice_routes_to_hook" time="0.005" /><testcase classname="tests.gateway.test_stream_events" name="test_dispatch_swallows_render_errors" time="0.005" /><testcase classname="tests.gateway.test_stt_config" name="test_gateway_config_stt_disabled_from_dict_nested" time="0.005" /><testcase classname="tests.gateway.test_stt_config" name="test_load_gateway_config_bridges_stt_enabled_from_config_yaml" time="0.051" /><testcase classname="tests.gateway.test_stt_config" name="test_enrich_message_with_transcription_surfaces_path_when_stt_disabled" time="0.008" /><testcase classname="tests.gateway.test_stt_config" name="test_enrich_message_with_transcription_omits_duration_on_probe_failure" time="0.007" /><testcase classname="tests.gateway.test_stt_config" name="test_enrich_message_with_transcription_avoids_bogus_no_provider_message_for_backend_key_errors" time="0.006" /><testcase classname="tests.gateway.test_stt_config" name="test_enrich_message_with_transcription_returns_tuple_for_empty_content_placeholder" time="0.006" /><testcase classname="tests.gateway.test_stt_config" name="test_prepare_inbound_message_text_transcribes_queued_voice_event" time="0.008" /><testcase classname="tests.gateway.test_stuck_loop.TestStuckLoopDetection" name="test_increment_creates_file" time="0.007" /><testcase classname="tests.gateway.test_stuck_loop.TestStuckLoopDetection" name="test_increment_accumulates" time="0.008" /><testcase classname="tests.gateway.test_stuck_loop.TestStuckLoopDetection" name="test_increment_drops_inactive_sessions" time="0.006" /><testcase classname="tests.gateway.test_stuck_loop.TestStuckLoopDetection" name="test_suspend_at_threshold" time="0.006" /><testcase classname="tests.gateway.test_stuck_loop.TestStuckLoopDetection" name="test_no_suspend_below_threshold" time="0.006" /><testcase classname="tests.gateway.test_stuck_loop.TestStuckLoopDetection" name="test_clear_on_success" time="0.006" /><testcase classname="tests.gateway.test_stuck_loop.TestStuckLoopDetection" name="test_clear_removes_file_when_empty" time="0.006" /><testcase classname="tests.gateway.test_stuck_loop.TestStuckLoopDetection" name="test_suspend_clears_file" time="0.006" /><testcase classname="tests.gateway.test_stuck_loop.TestStuckLoopDetection" name="test_no_file_no_crash" time="0.005" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestAgentHasActiveSubagents" name="test_returns_false_for_none" time="0.005" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestAgentHasActiveSubagents" name="test_returns_false_for_pending_sentinel" time="0.005" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestAgentHasActiveSubagents" name="test_returns_false_when_attribute_missing" time="0.005" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestAgentHasActiveSubagents" name="test_returns_false_for_empty_list" time="0.005" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestAgentHasActiveSubagents" name="test_returns_true_for_single_child" time="0.005" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestAgentHasActiveSubagents" name="test_returns_true_for_many_children" time="0.005" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestAgentHasActiveSubagents" name="test_works_without_lock" time="0.005" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestAgentHasActiveSubagents" name="test_rejects_truthy_non_collection_attribute" time="0.005" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestAgentHasActiveSubagents" name="test_accepts_list_tuple_set[tuple]" time="0.005" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestAgentHasActiveSubagents" name="test_accepts_list_tuple_set[set]" time="0.005" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestAgentHasActiveSubagents" name="test_accepts_list_tuple_set[list]" time="0.005" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestBusyHandlerDemotesInterruptForSubagents" name="test_does_not_call_interrupt_when_subagents_active" time="0.034" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestBusyHandlerDemotesInterruptForSubagents" name="test_ack_explains_the_demotion" time="0.034" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestBusyHandlerDemotesInterruptForSubagents" name="test_interrupt_still_fires_when_no_subagents" time="0.034" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestBusyHandlerDemotesInterruptForSubagents" name="test_queue_mode_unchanged_with_subagents" time="0.034" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestBusyHandlerDemotesInterruptForSubagents" name="test_steer_mode_still_routes_through_running_agent_steer" time="0.034" /><testcase classname="tests.gateway.test_subagent_protection_30170.TestBusyHandlerDemotesInterruptForSubagents" name="test_pending_sentinel_does_not_demote" time="0.034" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_v2_approval_requires_authoritative_generation_history_and_all_cas_pins" time="0.010" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_deleted_generation_history_blocks_hold_without_mutation" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_deleted_parent_generation_blocks_edit_before_any_mutation" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_deleted_established_journal_blocks_create_replay_without_mutation" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_child_generation_write_failure_leaves_exact_pre_state" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_global_lineage_validation_rejects_orphan_child_digest" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_worker_completion_requires_claim_and_terminal_failure_stays_closed" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_deleted_generation_history_cannot_fall_back_to_legacy_v2_ledgers" time="0.006" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_edited_child_has_predecessor_linked_generation_and_parent_cannot_deliver" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_generation_persisted_shape_rejects_extra_keys_and_wrong_receipt_state" time="0.006" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_record_digest_and_draft_revision_pins_reject_independently" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_newer_canonical_checkin_event_rejects_older_draft" time="0.006" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_delivery_intent_failure_refreshes_current_card_and_recovers_without_transport" time="0.009" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_approval_projection_recovers_after_injected_cross_ledger_failure" time="0.011" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_generation_rejects_timestamp_regression_terminal_retry_and_bad_receipt_matrix" time="0.005" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_generation_attempt_policy_is_exactly_two" time="0.006" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_edited_child_recovers_after_restart_from_generation_only_projection" time="0.012" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_create_recovers_after_restart_from_generation_only_projection" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_worker_receipt_and_failure_outcomes_survive_restart" time="0.008" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_reloaded_history_rejects_persisted_timestamp_regression" time="0.006" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_global_lineage_rejects_existing_but_non_tip_parent_digest" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_deleted_authority_marker_fails_closed_after_hard_restart_byte_exact[False]" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_deleted_authority_marker_fails_closed_after_hard_restart_byte_exact[True]" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_established_v2_authority_damage_fails_closed_without_reconstruction[token]" time="0.006" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_established_v2_authority_damage_fails_closed_without_reconstruction[empty]" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_established_v2_authority_damage_fails_closed_without_reconstruction[digest]" time="0.006" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_generation_marker_digest_tracks_every_journal_write" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_hold_is_authoritative_when_draft_projection_rolls_back" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_worker_claim_receipt_is_attempt_bound_and_release_conflicts_fail" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_generation_and_delivery_contract_versions_are_independent" time="0.005" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_child_lineage_requires_declared_parent_tip" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_authoritative_child_intent_blocks_parent_approval" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_real_callback_recovers_receipt_projection_after_restart_exactly_once" time="0.017" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_generation_root_rejects_forged_rechained_journal" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_deleted_complete_generation_authority_cannot_reconstruct_from_projection" time="0.007" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_delivery_restart_after_transport_before_receipt_does_not_resend" time="0.015" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_adaptive_callback_has_no_inline_orchestration_calls" time="0.008" /><testcase classname="tests.gateway.test_teams.TestTeamsRequirements" name="test_returns_false_when_sdk_missing" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsRequirements" name="test_returns_false_when_aiohttp_missing" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsRequirements" name="test_returns_true_when_deps_available" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsRequirements" name="test_check_teams_requirements_shortcircuits_when_present" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsRequirements" name="test_check_teams_requirements_lazy_installs_when_missing" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsRequirements" name="test_validate_config_with_env" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsRequirements" name="test_validate_config_from_extra" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsRequirements" name="test_validate_config_missing" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsRequirements" name="test_validate_config_missing_tenant" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsAdapterInit" name="test_reads_config_from_extra" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsAdapterInit" name="test_falls_back_to_env_vars" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsAdapterInit" name="test_default_port" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsAdapterInit" name="test_custom_port_from_extra" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsAdapterInit" name="test_custom_port_from_env" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsAdapterInit" name="test_invalid_port_from_extra_falls_back_to_default" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsAdapterInit" name="test_invalid_port_from_env_falls_back_to_default" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsAdapterInit" name="test_platform_value" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsPluginRegistration" name="test_register_calls_ctx" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsPluginRegistration" name="test_register_name" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsPluginRegistration" name="test_register_auth_env_vars" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsPluginRegistration" name="test_register_max_message_length" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsPluginRegistration" name="test_register_has_setup_fn" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsPluginRegistration" name="test_register_has_platform_hint" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsInteractiveSetup" name="test_interactive_setup_persists_credentials" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsConnect" name="test_connect_fails_without_sdk[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsConnect" name="test_connect_fails_without_credentials[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsConnect" name="test_disconnect_cleans_up[asyncio]" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsSend" name="test_send_returns_error_without_app[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsSend" name="test_send_calls_app_send[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsSend" name="test_send_handles_error[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsSend" name="test_send_typing[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsSummaryWriter" name="test_incoming_webhook_posts_summary_text[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsSummaryWriter" name="test_graph_delivery_posts_to_channel[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsSummaryWriter" name="test_graph_delivery_falls_back_to_platform_home_channel[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsSummaryWriter" name="test_existing_record_is_reused_without_force_resend[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsMessageHandling" name="test_personal_message_creates_dm_event[asyncio]" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsMessageHandling" name="test_group_message_creates_group_event[asyncio]" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsMessageHandling" name="test_channel_message_creates_channel_event[asyncio]" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsMessageHandling" name="test_user_id_uses_aad_object_id[asyncio]" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsMessageHandling" name="test_self_message_filtered[asyncio]" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsMessageHandling" name="test_bot_mention_stripped_from_text[asyncio]" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsMessageHandling" name="test_deduplication[asyncio]" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsAttachmentClassification" name="test_file_download_info_sets_document_type[asyncio]" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsAttachmentClassification" name="test_mixed_image_and_document_prefers_document[asyncio]" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsAttachmentClassification" name="test_html_body_attachment_stays_text[asyncio]" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsAttachmentClassification" name="test_image_only_still_photo[asyncio]" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsAttachmentClassification" name="test_download_failure_degrades_to_text[asyncio]" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsStandaloneSend" name="test_standalone_send_acquires_token_and_posts_activity" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsStandaloneSend" name="test_standalone_send_returns_error_when_unconfigured" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsStandaloneSend" name="test_standalone_send_propagates_token_failure" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsStandaloneSend" name="test_standalone_send_rejects_off_allowlist_service_url" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsStandaloneSend" name="test_standalone_send_rejects_chat_id_with_path_traversal" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsMediaAttachments" name="test_send_video_remote_url_succeeds" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsMediaAttachments" name="test_send_voice_local_file_base64" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsMediaAttachments" name="test_send_document_local_file_base64" time="0.006" /><testcase classname="tests.gateway.test_teams.TestTeamsMediaAttachments" name="test_send_video_without_app_fails" time="0.005" /><testcase classname="tests.gateway.test_teams.TestTeamsMediaAttachments" name="test_send_document_missing_file_fails_gracefully" time="0.006" /><testcase classname="tests.gateway.test_teams_pipeline_runtime_wiring" name="test_gateway_runner_wires_teams_pipeline_runtime" time="0.005" /><testcase classname="tests.gateway.test_teams_pipeline_runtime_wiring" name="test_gateway_runner_skips_wiring_without_msgraph_adapter" time="0.005" /><testcase classname="tests.gateway.test_teams_pipeline_runtime_wiring" name="test_gateway_runner_skips_wiring_when_teams_pipeline_plugin_disabled" time="0.005" /><testcase classname="tests.gateway.test_teams_pipeline_runtime_wiring" name="test_runtime_config_disables_teams_delivery_without_target" time="0.005" /><testcase classname="tests.gateway.test_teams_pipeline_runtime_wiring" name="test_build_pipeline_runtime_only_wires_sender_when_delivery_configured" time="0.005" /><testcase classname="tests.gateway.test_teams_pipeline_runtime_wiring" name="test_build_pipeline_runtime_skips_sender_when_adapter_layer_is_unavailable" time="0.005" /><testcase classname="tests.gateway.test_teams_pipeline_runtime_wiring" name="test_bind_gateway_runtime_installs_drop_scheduler_on_failure" time="0.005" /><testcase classname="tests.gateway.test_telegram_activation_notice" name="test_activation_notice_is_reserved_once_with_exact_customer_copy" time="0.005" /><testcase classname="tests.gateway.test_telegram_activation_notice" name="test_activation_notice_rejects_group_topic_destination" time="0.005" /><testcase classname="tests.gateway.test_telegram_activation_notice" name="test_activation_notice_unknown_is_terminal_and_cannot_reauthorize_provider" time="0.005" /><testcase classname="tests.gateway.test_telegram_activation_notice" name="test_gateway_drains_activation_notice_once_with_audited_receipt" time="0.006" /><testcase classname="tests.gateway.test_telegram_activation_notice" name="test_concurrent_activation_notice_drains_share_one_provider_authority" time="0.006" /><testcase classname="tests.gateway.test_telegram_activation_notice" name="test_activation_notice_fails_closed_before_provider[paused]" time="0.006" /><testcase classname="tests.gateway.test_telegram_activation_notice" name="test_activation_notice_fails_closed_before_provider[withdrawn]" time="0.005" /><testcase classname="tests.gateway.test_telegram_activation_notice" name="test_activation_notice_fails_closed_before_provider[wrong-route]" time="0.006" /><testcase classname="tests.gateway.test_telegram_activation_notice" name="test_activation_notice_fails_closed_before_provider[stale]" time="0.006" /><testcase classname="tests.gateway.test_telegram_activation_notice" name="test_gateway_never_retries_unknown_activation_notice" time="0.006" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramExecApproval" name="test_sends_inline_keyboard" time="0.005" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramExecApproval" name="test_stores_approval_state" time="0.005" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramExecApproval" name="test_sends_in_thread" time="0.006" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramExecApproval" name="test_retries_without_thread_when_thread_not_found" time="0.006" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramExecApproval" name="test_not_connected" time="0.005" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramExecApproval" name="test_disable_link_previews_sets_preview_kwargs" time="0.005" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramExecApproval" name="test_send_update_prompt_escapes_dynamic_prompt" time="0.006" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramExecApproval" name="test_truncates_long_command" time="0.005" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramApprovalCallback" name="test_resolves_approval_on_click" time="0.006" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramApprovalCallback" name="test_resume_typing_after_inline_approval" time="0.006" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramApprovalCallback" name="test_typing_stays_paused_when_resolve_returns_zero" time="0.007" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramApprovalCallback" name="test_approval_callback_escapes_dynamic_user_name" time="0.007" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramApprovalCallback" name="test_deny_button" time="0.007" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramApprovalCallback" name="test_approval_callback_rejects_user_blocked_by_global_allowlist" time="0.006" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramApprovalCallback" name="test_already_resolved" time="0.006" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramApprovalCallback" name="test_model_picker_callback_not_affected" time="0.007" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramApprovalCallback" name="test_update_prompt_callback_not_affected" time="0.007" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramApprovalCallback" name="test_update_prompt_callback_rejects_unauthorized_user" time="0.006" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramApprovalCallback" name="test_update_prompt_callback_rejects_user_blocked_by_global_allowlist" time="0.006" /><testcase classname="tests.gateway.test_telegram_approval_buttons.TestTelegramApprovalCallback" name="test_update_prompt_callback_allows_authorized_user" time="0.007" /><testcase classname="tests.gateway.test_telegram_audio_vs_voice" name="test_voice_message_still_transcribed" time="0.006" /><testcase classname="tests.gateway.test_telegram_audio_vs_voice" name="test_audio_attachment_skips_stt" time="0.008" /><testcase classname="tests.gateway.test_telegram_audio_vs_voice" name="test_audio_attachment_context_note_format" time="0.005" /><testcase classname="tests.gateway.test_telegram_audio_vs_voice" name="test_audio_attachment_skips_stt_when_stt_disabled" time="0.008" /><testcase classname="tests.gateway.test_telegram_audio_vs_voice" name="test_telegram_media_type_detection_audio_vs_voice" time="0.005" /><testcase classname="tests.gateway.test_telegram_callback_auth_fail_closed.TestCallbackAuthFailClosed" name="test_no_allowlist_no_allow_all_denies" time="0.005" /><testcase classname="tests.gateway.test_telegram_callback_auth_fail_closed.TestCallbackAuthFailClosed" name="test_no_allowlist_with_global_allow_all_permits" time="0.005" /><testcase classname="tests.gateway.test_telegram_callback_auth_fail_closed.TestCallbackAuthFailClosed" name="test_allowlist_with_matching_user_permits" time="0.005" /><testcase classname="tests.gateway.test_telegram_callback_auth_fail_closed.TestCallbackAuthFailClosed" name="test_allowlist_without_matching_user_denies" time="0.005" /><testcase classname="tests.gateway.test_telegram_callback_auth_fail_closed.TestCallbackAuthFailClosed" name="test_allowlist_wildcard_permits" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionBasic" name="test_no_existing_text" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionBasic" name="test_empty_existing_text" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionBasic" name="test_exact_duplicate_dropped" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionBasic" name="test_different_captions_merged" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionSubstringBug" name="test_shorter_caption_not_dropped_when_substring" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionSubstringBug" name="test_longer_caption_not_dropped_when_contains_existing" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionSubstringBug" name="test_prefix_caption_not_dropped" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionWhitespace" name="test_trailing_space_treated_as_duplicate" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionWhitespace" name="test_leading_space_treated_as_duplicate" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionWhitespace" name="test_whitespace_only_new_text_not_added" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionMultipleItems" name="test_three_unique_captions_all_present" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionMultipleItems" name="test_duplicate_in_middle_dropped" time="0.005" /><testcase classname="tests.gateway.test_telegram_caption_merge.TestMergeCaptionMultipleItems" name="test_album_scenario_revenue_profit" time="0.005" /><testcase classname="tests.gateway.test_telegram_channel_posts" name="test_build_message_event_uses_channel_identity_for_channel_posts" time="0.005" /><testcase classname="tests.gateway.test_telegram_channel_posts" name="test_text_handler_uses_effective_message_for_channel_post" time="0.005" /><testcase classname="tests.gateway.test_telegram_channel_posts" name="test_command_handler_uses_effective_message_for_channel_post" time="0.005" /><testcase classname="tests.gateway.test_telegram_clarify_buttons.TestTelegramSendClarify" name="test_multi_choice_renders_buttons_and_other" time="0.006" /><testcase classname="tests.gateway.test_telegram_clarify_buttons.TestTelegramSendClarify" name="test_open_ended_no_keyboard" time="0.005" /><testcase classname="tests.gateway.test_telegram_clarify_buttons.TestTelegramSendClarify" name="test_not_connected" time="0.005" /><testcase classname="tests.gateway.test_telegram_clarify_buttons.TestTelegramSendClarify" name="test_long_choice_rendered_in_body_not_truncated" time="0.005" /><testcase classname="tests.gateway.test_telegram_clarify_buttons.TestTelegramSendClarify" name="test_html_escapes_question" time="0.005" /><testcase classname="tests.gateway.test_telegram_clarify_buttons.TestTelegramClarifyCallback" name="test_numeric_choice_resolves_with_choice_text" time="0.007" /><testcase classname="tests.gateway.test_telegram_clarify_buttons.TestTelegramClarifyCallback" name="test_other_button_flips_to_text_mode" time="0.006" /><testcase classname="tests.gateway.test_telegram_clarify_buttons.TestTelegramClarifyCallback" name="test_already_resolved" time="0.006" /><testcase classname="tests.gateway.test_telegram_clarify_buttons.TestTelegramClarifyCallback" name="test_unauthorized_user_rejected" time="0.006" /><testcase classname="tests.gateway.test_telegram_clarify_buttons.TestTelegramClarifyCallback" name="test_invalid_choice_token" time="0.006" /><testcase classname="tests.gateway.test_telegram_clarify_buttons.TestBaseAdapterClarifyFallback" name="test_numbered_text_fallback" time="0.005" /><testcase classname="tests.gateway.test_telegram_clarify_buttons.TestBaseAdapterClarifyFallback" name="test_open_ended_fallback_renders_question_only" time="0.005" /><testcase classname="tests.gateway.test_telegram_conflict" name="test_unknown_update_and_handler_exception_are_redacted_and_non_destructive" time="0.006" /><testcase classname="tests.gateway.test_telegram_conflict" name="test_webhook_start_preserves_pending_updates" time="0.055" /><testcase classname="tests.gateway.test_telegram_conflict" name="test_polling_start_error_preserves_the_pending_update" time="0.011" /><testcase classname="tests.gateway.test_telegram_conflict" name="test_connect_rejects_same_host_token_lock" time="0.007" /><testcase classname="tests.gateway.test_telegram_conflict" name="test_polling_conflict_retries_before_fatal" time="0.054" /><testcase classname="tests.gateway.test_telegram_conflict" name="test_polling_conflict_becomes_fatal_after_retries" time="0.058" /><testcase classname="tests.gateway.test_telegram_conflict" name="test_connect_marks_retryable_fatal_error_for_startup_network_failure" time="0.010" /><testcase classname="tests.gateway.test_telegram_conflict" name="test_connect_clears_webhook_before_polling" time="0.056" /><testcase classname="tests.gateway.test_telegram_conflict" name="test_disconnect_skips_inactive_updater_and_app" time="0.010" /><testcase classname="tests.gateway.test_telegram_conflict" name="test_polling_conflict_reschedule_uses_running_loop" time="0.056" /><testcase classname="tests.gateway.test_telegram_customer_bootstrap" name="test_customer_dm_invite_is_single_use_and_restart_safe" time="0.010" /><testcase classname="tests.gateway.test_telegram_customer_bootstrap" name="test_customer_activation_commits_only_the_exact_bound_session" time="0.009" /><testcase classname="tests.gateway.test_telegram_customer_bootstrap" name="test_consent_receipt_requires_exact_reserved_attempt" time="0.008" /><testcase classname="tests.gateway.test_telegram_customer_bootstrap" name="test_claimed_customer_registers_disabled_without_other_role" time="0.007" /><testcase classname="tests.gateway.test_telegram_customer_bootstrap" name="test_enabled_adapter_builds_the_customer_bootstrap_transport" time="0.005" /><testcase classname="tests.gateway.test_telegram_customer_bootstrap" name="test_restart_recovery_registers_and_publishes_once" time="0.008" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentTypeDetection" name="test_document_detected_explicitly" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentTypeDetection" name="test_fallback_is_document" time="0.006" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_supported_pdf_is_cached" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_supported_txt_injects_content" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_supported_md_injects_content" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_caption_preserved_with_injection" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_zip_document_cached" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_png_document_is_routed_as_image" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_spoofed_png_document_falls_back_with_error" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_oversized_file_rejected" time="0.006" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_none_file_size_rejected" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_missing_filename_uses_mime_lookup" time="0.006" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_missing_filename_and_mime_rejected" time="0.006" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_unicode_decode_error_handled" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_text_injection_capped" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestDocumentDownloadBlock" name="test_download_exception_handled" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestVideoDownloadBlock" name="test_native_video_is_cached" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestVideoDownloadBlock" name="test_mp4_document_is_treated_as_video" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestMediaGroups" name="test_non_album_photo_burst_is_buffered_and_combined" time="0.859" /><testcase classname="tests.gateway.test_telegram_documents.TestMediaGroups" name="test_photo_album_is_buffered_and_combined" time="0.866" /><testcase classname="tests.gateway.test_telegram_documents.TestMediaGroups" name="test_disconnect_cancels_pending_media_group_flush" time="0.864" /><testcase classname="tests.gateway.test_telegram_documents.TestSendVoice" name="test_flac_falls_back_to_document" time="0.012" /><testcase classname="tests.gateway.test_telegram_documents.TestSendVoice" name="test_wav_falls_back_to_document" time="0.008" /><testcase classname="tests.gateway.test_telegram_documents.TestSendVoice" name="test_mp3_routes_to_send_audio" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestSendDocument" name="test_send_document_success" time="0.008" /><testcase classname="tests.gateway.test_telegram_documents.TestSendDocument" name="test_send_document_custom_filename" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestSendDocument" name="test_send_document_file_not_found" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestSendDocument" name="test_send_document_workspace_path_has_docker_hint" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestSendDocument" name="test_send_document_outputs_path_has_docker_hint" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestSendDocument" name="test_send_document_not_connected" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestSendDocument" name="test_send_document_caption_truncated" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestSendDocument" name="test_send_document_api_error_falls_back" time="0.008" /><testcase classname="tests.gateway.test_telegram_documents.TestSendDocument" name="test_send_document_reply_to" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestSendDocument" name="test_send_document_thread_id" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestTelegramPhotoBatching" name="test_flush_photo_batch_does_not_drop_newer_scheduled_task" time="0.008" /><testcase classname="tests.gateway.test_telegram_documents.TestTelegramPhotoBatching" name="test_disconnect_cancels_pending_photo_batch_tasks" time="0.008" /><testcase classname="tests.gateway.test_telegram_documents.TestSendVideo" name="test_send_video_success" time="0.008" /><testcase classname="tests.gateway.test_telegram_documents.TestSendVideo" name="test_send_video_file_not_found" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestSendVideo" name="test_send_video_workspace_path_has_docker_hint" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestSendVideo" name="test_send_video_not_connected" time="0.007" /><testcase classname="tests.gateway.test_telegram_documents.TestSendVideo" name="test_send_video_thread_id" time="0.007" /><testcase classname="tests.gateway.test_telegram_format.TestEscapeMdv2" name="test_escapes_all_special_characters" time="0.006" /><testcase classname="tests.gateway.test_telegram_format.TestEscapeMdv2" name="test_empty_string" time="0.006" /><testcase classname="tests.gateway.test_telegram_format.TestEscapeMdv2" name="test_no_special_characters" time="0.006" /><testcase classname="tests.gateway.test_telegram_format.TestEscapeMdv2" name="test_backslash_escaped" time="0.006" /><testcase classname="tests.gateway.test_telegram_format.TestEscapeMdv2" name="test_dot_escaped" time="0.006" /><testcase classname="tests.gateway.test_telegram_format.TestEscapeMdv2" name="test_exclamation_escaped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestEscapeMdv2" name="test_mixed_text_and_specials" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBasic" name="test_empty_string" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBasic" name="test_none_input" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBasic" name="test_plain_text_specials_escaped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBasic" name="test_plain_text_no_markdown" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageCodeBlocks" name="test_fenced_code_block_preserved" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageCodeBlocks" name="test_inline_code_preserved" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageCodeBlocks" name="test_code_block_special_chars_not_escaped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageCodeBlocks" name="test_inline_code_special_chars_not_escaped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageCodeBlocks" name="test_multiple_code_blocks" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageCodeBlocks" name="test_inline_code_backslashes_escaped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageCodeBlocks" name="test_fenced_code_block_backslashes_escaped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageCodeBlocks" name="test_fenced_code_block_backticks_escaped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageCodeBlocks" name="test_inline_code_no_double_escape" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBoldItalic" name="test_bold_converted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBoldItalic" name="test_italic_converted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBoldItalic" name="test_bold_with_special_chars" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBoldItalic" name="test_italic_with_special_chars" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBoldItalic" name="test_bold_and_italic_in_same_line" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBoldItalic" name="test_reload_mcp_summary_escapes_dynamic_server_names" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageHeaders" name="test_h1_converted_to_bold" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageHeaders" name="test_h2_converted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageHeaders" name="test_header_with_inner_bold_stripped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageHeaders" name="test_header_with_special_chars" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageHeaders" name="test_multiline_headers" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageLinks" name="test_markdown_link_converted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageLinks" name="test_link_display_text_escaped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageLinks" name="test_link_url_parentheses_escaped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageLinks" name="test_link_with_surrounding_text" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestItalicNewlineBug" name="test_bullet_list_not_corrupted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestItalicNewlineBug" name="test_asterisk_list_items_preserved" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestItalicNewlineBug" name="test_italic_does_not_span_lines" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestItalicNewlineBug" name="test_single_line_italic_still_works" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageStrikethrough" name="test_strikethrough_converted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageStrikethrough" name="test_strikethrough_with_special_chars" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageStrikethrough" name="test_strikethrough_in_code_not_converted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageStrikethrough" name="test_strikethrough_with_bold" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageSpoiler" name="test_spoiler_converted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageSpoiler" name="test_spoiler_with_special_chars" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageSpoiler" name="test_spoiler_in_code_not_converted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageSpoiler" name="test_spoiler_pipes_not_escaped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBlockquote" name="test_blockquote_converted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBlockquote" name="test_blockquote_with_special_chars" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBlockquote" name="test_blockquote_multiline" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBlockquote" name="test_blockquote_in_code_not_converted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBlockquote" name="test_nested_blockquote" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBlockquote" name="test_gt_in_middle_of_line_still_escaped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBlockquote" name="test_expandable_blockquote" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBlockquote" name="test_single_asterisk_gt_not_blockquote" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageBlockquote" name="test_regular_blockquote_with_pipes_escaped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageComplex" name="test_code_block_with_bold_outside" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageComplex" name="test_bold_inside_code_not_converted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageComplex" name="test_link_inside_code_not_converted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageComplex" name="test_header_after_code_block" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageComplex" name="test_multiple_bold_segments" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageComplex" name="test_special_chars_in_plain_text" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageComplex" name="test_empty_bold" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageComplex" name="test_empty_code_block" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageComplex" name="test_placeholder_collision" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestStripMdv2" name="test_removes_escape_backslashes" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestStripMdv2" name="test_removes_bold_markers" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestStripMdv2" name="test_removes_italic_markers" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestStripMdv2" name="test_removes_both_bold_and_italic" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestStripMdv2" name="test_preserves_snake_case" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestStripMdv2" name="test_preserves_multi_underscore_identifier" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestStripMdv2" name="test_plain_text_unchanged" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestStripMdv2" name="test_empty_string" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestStripMdv2" name="test_removes_strikethrough_markers" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestStripMdv2" name="test_removes_spoiler_markers" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestWrapMarkdownTables" name="test_basic_table_rewritten_as_row_groups" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestWrapMarkdownTables" name="test_bare_pipe_table_rewritten" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestWrapMarkdownTables" name="test_alignment_separators" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestWrapMarkdownTables" name="test_two_consecutive_tables_rewritten_separately" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestWrapMarkdownTables" name="test_plain_text_with_pipes_not_wrapped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestWrapMarkdownTables" name="test_horizontal_rule_not_wrapped" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestWrapMarkdownTables" name="test_existing_code_block_with_pipes_left_alone" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestWrapMarkdownTables" name="test_no_pipe_character_short_circuits" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestWrapMarkdownTables" name="test_no_dash_short_circuits" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestWrapMarkdownTables" name="test_single_column_separator_not_matched" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestWrapMarkdownTables" name="test_row_group_uses_single_newlines_within_group" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestWrapMarkdownTables" name="test_row_label_column_preserves_first_bullet" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageTables" name="test_table_rendered_as_bullets" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageTables" name="test_text_after_table_still_formatted" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestFormatMessageTables" name="test_multiple_tables_in_single_message" time="0.005" /><testcase classname="tests.gateway.test_telegram_format" name="test_send_escapes_chunk_indicator_for_markdownv2" time="0.006" /><testcase classname="tests.gateway.test_telegram_format.TestEditMessageStreamingSafety" name="test_non_final_edit_uses_plain_text_without_markdown" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestEditMessageStreamingSafety" name="test_final_edit_uses_markdownv2_with_plain_fallback" time="0.006" /><testcase classname="tests.gateway.test_telegram_format.TestEditMessageStreamingSafety" name="test_message_too_long_splits_into_continuations_not_silent_truncation" time="0.006" /><testcase classname="tests.gateway.test_telegram_format.TestEditMessageStreamingSafety" name="test_message_too_long_continuations_preserve_topic_metadata" time="0.006" /><testcase classname="tests.gateway.test_telegram_format.TestTelegramGuestMentionGating" name="test_guest_mode_allows_explicit_mention_outside_allowed_chats" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestTelegramGuestMentionGating" name="test_guest_mode_does_not_allow_reply_outside_allowed_chats" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestTelegramGuestMentionGating" name="test_guest_mode_disabled_keeps_allowed_chats_as_hard_gate_for_mentions" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestTelegramGuestMentionGating" name="test_guest_mode_allows_bot_command_entity_outside_allowed_chats" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestTelegramGuestMentionGating" name="test_guest_mode_allows_text_mention_entity_outside_allowed_chats" time="0.005" /><testcase classname="tests.gateway.test_telegram_format.TestTelegramGuestMentionGating" name="test_guest_mode_allows_mention_in_caption_outside_allowed_chats" time="0.005" /><testcase classname="tests.gateway.test_telegram_forum_commands" name="test_ensure_forum_commands_skips_non_forum" time="0.005" /><testcase classname="tests.gateway.test_telegram_forum_commands" name="test_ensure_forum_commands_skips_already_registered" time="0.005" /><testcase classname="tests.gateway.test_telegram_forum_commands" name="test_ensure_forum_commands_registers_once" time="0.006" /><testcase classname="tests.gateway.test_telegram_forum_commands" name="test_ensure_forum_commands_handles_set_failure" time="0.006" /><testcase classname="tests.gateway.test_telegram_forum_commands" name="test_ensure_forum_commands_race_safety" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_review_space_collision_categories_fail_closed[customer_routes]" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_review_space_collision_categories_fail_closed[owner_scheduled_routes]" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_review_space_collision_categories_fail_closed[generic_reserved_routes]" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_review_chat_topic_reserves_wrong_user_without_generic_downstream" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_review_unrelated_callback_is_reserved_before_generic_callbacks" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_customer_selection_renders_explicit_create_button" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_lifecycle_callback_confirms_visible_next_step[approved-\uc2b9\uc778 \uc644\ub8cc. \ub2e4\uc74c \ub2e8\uacc4\ub294 \ud65c\uc131\ud654\ud558\uae30\uc785\ub2c8\ub2e4.]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_lifecycle_callback_confirms_visible_next_step[activated-\ud65c\uc131\ud654 \uc644\ub8cc. \ub2e4\uc74c \ub2e8\uacc4\ub294 \uace0\uac1d \uc804\uc1a1 \ud5c8\uc6a9\uc785\ub2c8\ub2e4.]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_lifecycle_callback_confirms_visible_next_step[delivery_enabled-\uc804\uc1a1 \ud5c8\uc6a9 \uc644\ub8cc. \ub2e4\uc74c \ub2e8\uacc4\ub294 \uace0\uac1d\uc5d0\uac8c \uc804\uc1a1\uc785\ub2c8\ub2e4.]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_create_authority_change_after_claim_shows_persistent_notice" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_create_reservation_failure_shows_persistent_notice" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_review_acknowledges_before_reserving_or_editing_card" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_review_edit_failure_releases_publication_claim_after_ack" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_terminal_delivery_replaces_send_card[sent_audited-\uace0\uac1d \uc804\uc1a1 \ubc0f \uac10\uc0ac \uae30\ub85d \uc644\ub8cc.-False]" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_terminal_delivery_replaces_send_card[delivery_unknown-\uc804\uc1a1 \uacb0\uacfc \ud655\uc778 \ubd88\uac00. \uc7ac\uc804\uc1a1\ud558\uc9c0 \ub9c8\uc138\uc694.-False]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_terminal_delivery_replaces_send_card[audit_pending-\uace0\uac1d \uc804\uc1a1 \uc644\ub8cc. \uac10\uc0ac \uae30\ub85d \ubcf5\uad6c\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.-True]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_edit_note_shows_persistent_reply_instruction" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_edit_reply_updates_existing_card_without_menu_prompt" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_edit_reply_confirms_before_card_edit_failure" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_duplicate_create_preserves_existing_card" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_menu_rebinds_callbacks_to_published_bot_message" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_menu_rejects_missing_publication_message_id" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_card_with_invalid_grounding_is_not_published" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_invalid_grounding_uses_thread_fallback_when_reply_is_unavailable" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_adaptive_result_without_visible_transport_raises" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_group_messages_can_be_opened_via_config" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_unmentioned_group_messages_can_be_observed_without_dispatching" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_foreign_sender_in_customer_topic_never_reaches_generic_agent" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_stopped_customer_route_gets_explicit_non_llm_response" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_disabled_customer_start_renders_consent_card_without_generic_ingress" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_customer_topic_is_reserved_from_all_generic_message_handlers" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_enabled_customer_feature_load_failure_blocks_generic_ingress" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_customer_topic_reserves_unknown_callback_namespaces" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_observed_group_context_uses_shared_source_and_prompt_for_later_mentions" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_observed_group_context_replays_as_current_message_context_not_user_turns" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_observed_group_context_does_not_hide_current_user_turn_behind_history_offset" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_observed_group_context_wraps_multimodal_current_message_without_mutating_parts" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_observed_group_context_replays_normally_without_telegram_prompt" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_observed_group_context_preserves_slash_command_text_for_dispatch" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_unmentioned_group_observe_requires_chat_allowlist_for_shared_context" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_shared_group_observe_source_is_authorized_by_group_allowed_chats" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_unmentioned_group_observe_respects_chat_allowlist" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_group_messages_can_require_direct_trigger_via_config" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_explicit_multi_bot_mentions_route_only_to_named_bots" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_entityless_multi_bot_mentions_still_route_exclusively" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_intern_bots_ignore_messages_addressed_to_other_intern_bot" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_bot_command_addressed_to_other_bot_is_exclusive_even_when_mentions_not_required" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_raw_bot_mention_fallback_does_not_match_email_or_substring" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_exclusive_bot_mentions_can_be_disabled_for_legacy_groups" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_free_response_chats_bypass_mention_requirement" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_guest_mode_allows_only_direct_mentions_outside_allowed_chats" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_guest_mode_defaults_to_false_for_allowed_chat_bypass" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_guest_mode_mention_dropped_in_ignored_thread" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_ignored_threads_drop_group_messages_before_other_gates" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_allowed_topics_drop_other_forum_topics_before_other_gates" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_allowed_topics_do_not_filter_dms" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_allowed_topics_treat_missing_thread_as_general_topic" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_regex_mention_patterns_allow_custom_wake_words" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_invalid_regex_patterns_are_ignored" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_config_bridges_telegram_group_settings" time="0.051" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_config_bridges_telegram_user_allowlists" time="0.053" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_config_env_overrides_telegram_user_allowlists" time="0.054" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_dm_allow_from_is_enforced_by_gateway_authorization_not_trigger_gate" time="0.009" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_group_allow_from_is_enforced_by_gateway_authorization_not_trigger_gate" time="0.008" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_top_level_require_mention_bridges_to_telegram" time="0.053" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_top_level_require_mention_does_not_override_telegram_section" time="0.054" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_config_bridges_telegram_ignored_threads" time="0.054" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_unmentioned_location_message_observed_in_group" time="0.009" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_triggered_location_message_uses_shared_session_in_observe_mode" time="0.009" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_unmentioned_voice_message_observed_in_group" time="0.008" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_triggered_voice_message_uses_shared_session_in_observe_mode" time="0.007" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_text_reply_to_photo_caches_referenced_media" time="0.057" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_unmentioned_photo_observed_with_cached_path" time="0.010" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_unmentioned_document_observed_with_cached_path" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_unmentioned_large_document_observed_without_download" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_unmentioned_unsupported_document_observed_without_caching" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_review_surface_reserves_contact_edited_and_channel_ingress" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_text_message-message]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_command-message]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_location_message-message]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_media_message-message:photo]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_media_message-message:video]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_media_message-message:document]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_media_message-message:audio]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_media_message-message:voice]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_media_message-message:sticker]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_contact_message-message:contact]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_edited_message-edited_message]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_channel_post-channel_post]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_wrong_user_review_space_reserves_every_message_ingress_without_downstream[_handle_edited_channel_post-edited_channel_post]" time="0.006" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_unconfigured_nutrition_operator_never_probes_coordinator_owner" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_legacy_nutrition_operator_review_is_not_an_adaptive_ingress" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_legacy_nutrition_review_triple_routes_coaching_without_adaptive_ingress" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_removed_extra_role_keyboard_api_is_absent" time="0.005" /><testcase classname="tests.gateway.test_telegram_group_gating" name="test_restart_recovery_rebuilds_validated_adaptive_inline_buttons" time="0.006" /><testcase classname="tests.gateway.test_telegram_max_doc_bytes" name="test_max_doc_bytes_defaults_to_20mb_without_base_url" time="0.005" /><testcase classname="tests.gateway.test_telegram_max_doc_bytes" name="test_max_doc_bytes_raised_to_2gb_when_base_url_set" time="0.005" /><testcase classname="tests.gateway.test_telegram_max_doc_bytes" name="test_max_doc_bytes_empty_base_url_keeps_default" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestRealMentionsAreDetected" name="test_mention_at_start_of_message" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestRealMentionsAreDetected" name="test_mention_mid_sentence" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestRealMentionsAreDetected" name="test_mention_at_end_of_message" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestRealMentionsAreDetected" name="test_mention_in_caption" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestRealMentionsAreDetected" name="test_text_mention_entity_targets_bot" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestSubstringFalsePositivesAreRejected" name="test_email_like_substring" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestSubstringFalsePositivesAreRejected" name="test_hostname_substring" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestSubstringFalsePositivesAreRejected" name="test_superstring_username" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestSubstringFalsePositivesAreRejected" name="test_underscore_suffix_substring" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestSubstringFalsePositivesAreRejected" name="test_substring_inside_url_without_entity" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestSubstringFalsePositivesAreRejected" name="test_substring_inside_code_block_without_entity" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestSubstringFalsePositivesAreRejected" name="test_plain_text_with_no_at_sign" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestSubstringFalsePositivesAreRejected" name="test_email_substring_in_caption" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestEntityEdgeCases" name="test_mention_entity_for_different_username" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestEntityEdgeCases" name="test_text_mention_entity_for_different_user" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestEntityEdgeCases" name="test_malformed_entity_with_negative_offset" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestEntityEdgeCases" name="test_malformed_entity_with_zero_length" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestCaseInsensitivity" name="test_uppercase_mention" time="0.005" /><testcase classname="tests.gateway.test_telegram_mention_boundaries.TestCaseInsensitivity" name="test_mixed_case_mention" time="0.005" /><testcase classname="tests.gateway.test_telegram_mock_bootstrap" name="test_ensure_telegram_mock_replaces_only_invalid_preloaded_package_tree[none]" time="0.005" /><testcase classname="tests.gateway.test_telegram_mock_bootstrap" name="test_ensure_telegram_mock_replaces_only_invalid_preloaded_package_tree[missing]" time="0.006" /><testcase classname="tests.gateway.test_telegram_mock_bootstrap" name="test_ensure_telegram_mock_replaces_only_invalid_preloaded_package_tree[valid_fake]" time="0.005" /><testcase classname="tests.gateway.test_telegram_model_picker.TestTelegramModelPicker" name="test_send_model_picker_escapes_dynamic_provider_label" time="0.006" /><testcase classname="tests.gateway.test_telegram_model_picker.TestTelegramModelPicker" name="test_back_button_escapes_dynamic_provider_label" time="0.006" /><testcase classname="tests.gateway.test_telegram_model_picker.TestTelegramModelPicker" name="test_model_selected_edits_message_on_success" time="0.007" /><testcase classname="tests.gateway.test_telegram_model_picker.TestTelegramModelPicker" name="test_provider_group_folds_and_drills_down" time="0.010" /><testcase classname="tests.gateway.test_telegram_model_picker.TestTelegramModelPicker" name="test_expensive_model_requires_confirmation" time="0.008" /><testcase classname="tests.gateway.test_telegram_model_picker.TestTelegramModelPicker" name="test_retries_without_thread_when_thread_not_found" time="0.007" /><testcase classname="tests.gateway.test_telegram_network.TestParseFallbackIpEnv" name="test_filters_invalid_and_ipv6" time="0.006" /><testcase classname="tests.gateway.test_telegram_network.TestParseFallbackIpEnv" name="test_none_returns_empty" time="0.008" /><testcase classname="tests.gateway.test_telegram_network.TestParseFallbackIpEnv" name="test_empty_string_returns_empty" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestParseFallbackIpEnv" name="test_whitespace_only_returns_empty" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestParseFallbackIpEnv" name="test_single_valid_ip" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestParseFallbackIpEnv" name="test_multiple_valid_ips" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestParseFallbackIpEnv" name="test_rejects_leading_zeros" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestNormalizeFallbackIps" name="test_deduplication_happens_at_transport_level" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestNormalizeFallbackIps" name="test_empty_strings_skipped" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestRewriteRequestForIp" name="test_preserves_host_and_sni" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestRewriteRequestForIp" name="test_preserves_method_and_path" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransport" name="test_falls_back_on_connect_timeout_and_becomes_sticky" time="0.006" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransport" name="test_falls_back_on_connect_error" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransport" name="test_does_not_fallback_on_non_connect_error" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransport" name="test_all_ips_fail_raises_last_error" time="0.007" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransport" name="test_multiple_fallback_ips_tried_in_order" time="0.006" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransport" name="test_sticky_ip_tried_first_but_falls_through_if_stale" time="0.006" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransportPassthrough" name="test_non_telegram_host_bypasses_fallback" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransportPassthrough" name="test_empty_fallback_list_uses_primary_only" time="0.006" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransportPassthrough" name="test_primary_succeeds_no_fallback_needed" time="0.006" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransportInit" name="test_deduplicates_fallback_ips" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransportInit" name="test_filters_invalid_ips_at_init" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransportInit" name="test_uses_proxy_env_for_primary_and_fallback_transports" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransportInit" name="test_no_proxy_bypasses_fallback_ip_cidr" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestFallbackTransportClose" name="test_aclose_closes_all_transports" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestConfigFallbackIps" name="test_env_var_populates_config_extra" time="0.406" /><testcase classname="tests.gateway.test_telegram_network.TestConfigFallbackIps" name="test_env_var_creates_platform_if_missing" time="0.055" /><testcase classname="tests.gateway.test_telegram_network.TestConfigFallbackIps" name="test_env_var_strips_whitespace" time="0.055" /><testcase classname="tests.gateway.test_telegram_network.TestConfigFallbackIps" name="test_empty_env_var_does_not_populate" time="0.055" /><testcase classname="tests.gateway.test_telegram_network.TestAdapterFallbackIps" name="test_list_in_extra" time="0.009" /><testcase classname="tests.gateway.test_telegram_network.TestAdapterFallbackIps" name="test_csv_string_in_extra" time="0.008" /><testcase classname="tests.gateway.test_telegram_network.TestAdapterFallbackIps" name="test_empty_extra" time="0.008" /><testcase classname="tests.gateway.test_telegram_network.TestAdapterFallbackIps" name="test_no_extra_attr" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestAdapterFallbackIps" name="test_invalid_ips_filtered" time="0.005" /><testcase classname="tests.gateway.test_telegram_network.TestDiscoverFallbackIps" name="test_google_and_cloudflare_ips_collected" time="0.006" /><testcase classname="tests.gateway.test_telegram_network.TestDiscoverFallbackIps" name="test_system_dns_ip_kept_when_doh_confirms" time="0.009" /><testcase classname="tests.gateway.test_telegram_network.TestDiscoverFallbackIps" name="test_doh_results_deduplicated" time="0.007" /><testcase classname="tests.gateway.test_telegram_network.TestDiscoverFallbackIps" name="test_doh_timeout_falls_back_to_seed" time="0.007" /><testcase classname="tests.gateway.test_telegram_network.TestDiscoverFallbackIps" name="test_doh_connect_error_falls_back_to_seed" time="0.008" /><testcase classname="tests.gateway.test_telegram_network.TestDiscoverFallbackIps" name="test_doh_malformed_json_falls_back_to_seed" time="0.008" /><testcase classname="tests.gateway.test_telegram_network.TestDiscoverFallbackIps" name="test_one_provider_fails_other_succeeds" time="0.008" /><testcase classname="tests.gateway.test_telegram_network.TestDiscoverFallbackIps" name="test_system_dns_failure_keeps_all_doh_ips" time="0.009" /><testcase classname="tests.gateway.test_telegram_network.TestDiscoverFallbackIps" name="test_all_doh_ips_same_as_system_dns_kept" time="0.006" /><testcase classname="tests.gateway.test_telegram_network.TestDiscoverFallbackIps" name="test_cloudflare_gets_accept_header" time="0.008" /><testcase classname="tests.gateway.test_telegram_network.TestDiscoverFallbackIps" name="test_non_a_records_ignored" time="0.008" /><testcase classname="tests.gateway.test_telegram_network.TestDiscoverFallbackIps" name="test_invalid_ip_in_doh_response_skipped" time="0.008" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_reconnect_self_schedules_on_start_polling_failure" time="0.009" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_reconnect_does_not_self_schedule_when_fatal_error_set" time="0.008" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_reconnect_success_resets_error_count" time="0.007" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_reconnect_triggers_fatal_after_max_retries" time="0.006" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_reconnect_drains_polling_request_only" time="0.007" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_reconnect_continues_if_drain_fails" time="0.007" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_initialize_still_runs_when_shutdown_fails" time="0.007" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_conflict_retry_also_drains_polling_connections" time="0.007" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_drain_helper_noop_without_app" time="0.005" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_heartbeat_probe_no_op_when_polling_healthy" time="0.006" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_heartbeat_probe_reenters_ladder_when_updater_not_running" time="0.006" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_heartbeat_probe_reenters_ladder_when_get_me_times_out" time="0.007" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_heartbeat_probe_reenters_ladder_on_get_me_network_error" time="0.006" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_heartbeat_probe_skips_when_already_fatal" time="0.006" /><testcase classname="tests.gateway.test_telegram_network_reconnect" name="test_reconnect_schedules_heartbeat_probe_on_success" time="0.007" /><testcase classname="tests.gateway.test_telegram_noise_filter" name="test_telegram_status_suppresses_auxiliary_and_retry_noise" time="0.005" /><testcase classname="tests.gateway.test_telegram_noise_filter" name="test_non_telegram_status_is_unchanged" time="0.005" /><testcase classname="tests.gateway.test_telegram_noise_filter" name="test_telegram_status_sanitizes_raw_provider_security_errors" time="0.005" /><testcase classname="tests.gateway.test_telegram_noise_filter" name="test_telegram_final_response_sanitizes_raw_provider_errors" time="0.005" /><testcase classname="tests.gateway.test_telegram_noise_filter" name="test_telegram_final_response_redacts_auth_secrets" time="0.005" /><testcase classname="tests.gateway.test_telegram_noise_filter" name="test_telegram_final_response_keeps_normal_answers" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_dm_normalizes_topic[absent]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_dm_normalizes_topic[null]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_dm_normalizes_topic[integer-zero]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_dm_normalizes_topic[persisted-zero]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_delivery_rejects_non_private_chat[group]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_delivery_rejects_non_private_chat[supergroup]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_delivery_rejects_non_private_chat[channel]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_delivery_rejects_nonzero_topic" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_staff_addresses_preserve_trusted_role[owner-source0]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_staff_addresses_preserve_trusted_role[operator-source1]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_parser_rejects_malformed_and_bool_ids[bad-user]" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_parser_rejects_malformed_and_bool_ids[bad-chat]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_parser_rejects_malformed_and_bool_ids[bad-topic]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_parser_rejects_malformed_and_bool_ids[bool-user]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_parser_rejects_malformed_and_bool_ids[bool-chat]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_parser_rejects_malformed_and_bool_ids[bool-topic]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_staff_parser_rejects_bool_and_untrusted_role_metadata" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_legacy_shared_topic_error_names_required_migration" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_private_customer_dm_is_not_legacy_shared_topic" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_addresses" name="test_customer_membership_in_staff_group_blocks_readiness" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_coach_v2_cloud_attempt_does_not_fall_through_to_second_provider" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_coach_v2_preflight_failure_does_not_read_uninitialized_attempt_state" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_adapter_contract_is_present" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_onboarding_authority_maps_general_owner_topic_to_zero" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_coach_v2_operator_card_shows_facts_deltas_warnings_and_controls" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_coach_v2_operator_edit_accepts_targets_and_customer_copy" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_production_service_requires_persisted_reconciliation" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_callback_is_opaque_bounded_and_round_trips" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_ready_publication_generation_follows_owner_review" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_changed_recovered_card_body_advances_publication_generation" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_ready_card_announces_activation_readiness_to_owner" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_consent_withdrawal_bypasses_onboarding_answer_capture" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_consent_withdrawal_text_short_circuits_handle_text_without_bootstrap_lookup" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_wrong_or_stale_evidence_is_consumed_without_mutation[actor_user_id-999]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_wrong_or_stale_evidence_is_consumed_without_mutation[chat_id--999]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_wrong_or_stale_evidence_is_consumed_without_mutation[topic_id-999]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_wrong_or_stale_evidence_is_consumed_without_mutation[message_id-999]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_wrong_or_stale_evidence_is_consumed_without_mutation[generation-8]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_wrong_or_stale_evidence_is_consumed_without_mutation[action-approve]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_wrong_or_stale_evidence_is_consumed_without_mutation[member_present-False]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_exact_evidence_can_mutate_and_never_falls_through" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_unknown_callback_is_consumed_without_mutation" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_provider_unknown_publication_is_not_retried" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_committed_publication_is_reused_after_restart" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_gateway_outbox_never_retries_an_unreceipted_delivery" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_legacy_unverified_ledger_is_quarantined_without_authorizing_delivery" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_forged_receipted_outbox_row_never_commits_the_profile" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_forged_emergency_receipt_never_promotes_the_primary_ledger" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_primary_receipt_failure_uses_emergency_evidence_before_commit" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_emergency_receipt_recovers_after_primary_and_commit_crashes" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_total_receipt_persistence_failure_marks_unknown_without_resend" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_recovery_rejects_current_store_payload_mismatch" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_receipt_recovery_requires_the_current_canonical_route" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_authority_less_provider_result_marks_publication_unknown" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_preexisting_prepared_publication_without_gateway_receipt_is_not_sent" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_gateway_outbox_recovers_provider_receipt_after_commit_crash" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_waiting_activation_republishes_the_current_durable_card" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_optional_question_force_reply_preserves_skip_affordance" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_required_question_never_offers_skip" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_summary_offers_confirm_and_revise_controls" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_stale_reconciliation_record_digest_triggers_fresh_publication" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_real_service_stale_reconciliation_publishes_fresh_summary" time="0.010" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_review_cards_offer_all_canonical_actions[owner_review-labels0-actions0]" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_review_callbacks_use_canonical_service_and_exact_role_route[op_rev-owner_review-review_as_owner-revise-owner-collecting-revision]" time="0.008" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_review_callbacks_use_canonical_service_and_exact_role_route[op_rej-owner_review-review_as_owner-rejected-owner-rejected-rejection]" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_historical_trainer_callback_is_rejected_before_route_or_service_mutation" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_review_callback_rejects_wrong_user_before_service_mutation" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_handle_text_rejects_wrong_user_chat_or_topic_before_publish[999-10-0]" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_handle_text_rejects_wrong_user_chat_or_topic_before_publish[10-999-0]" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_handle_text_rejects_wrong_user_chat_or_topic_before_publish[10-10-1]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_optional_question_accepts_typed_skip_from_force_reply" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_rewind_invalidates_changed_question_and_all_dependents" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_schedule_rewind_recovers_exact_legacy_activity_shape" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_schedule_rewind_leaves_unrecognized_activity_prose_fail_closed" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_recovered_answers_resubmit_to_valid_baseline_and_summary" time="0.009" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_continue_later_and_resume_keep_same_domain_session" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_resume_callback_reopens_paused_onboarding_card" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_non1_callback_routes_before_bootstrap_and_generic_branches" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_real_callback_replay_after_transition_republishes_once_and_receipts_once" time="0.015" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_real_text_replay_after_transition_republishes_once_and_receipts_once" time="0.010" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_missing_feature_epoch_binds_to_disabled_epoch_without_creating_it" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_owner_dm_evidence_normalizes_absent_thread_to_zero" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_restart_recovers_committed_owner_approval_without_second_review" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_owner_callback_marks_business_commit_before_finalization_failure" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_restart_authenticates_original_owner_update_and_records_terminal_receipt" time="0.008" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_attestation_callback_logs_and_advances" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_restart_callback_requires_the_signed_current_card_route" time="0.009" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_stale_attestation_callback_logs_rejection" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_stale_owner_review_callback_is_rejected_before_mutation" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_text_ingress_records_ordered_stages_without_answer_text" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_text_ingress_rejection_has_update_keyed_reason_code" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_callback_authority_route_and_persistence_rejections_are_coded" time="0.009" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_callback_publication_failure_has_a_reason_code" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_expired_onboarding_ack_is_attempted_before_commit_and_publish" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_expired_trainer_callback_is_acknowledged_without_domain_or_publication" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_copy" name="test_parse_answer_normalizes_bounded_korean_scalar_forms[height_cm-180cm-180.0]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_copy" name="test_parse_answer_normalizes_bounded_korean_scalar_forms[height_cm-180 cm-180.0]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_copy" name="test_parse_answer_normalizes_bounded_korean_scalar_forms[weight_kg-80kg-80.0]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_copy" name="test_parse_answer_normalizes_bounded_korean_scalar_forms[target_weight_kg-75 kg-75.0]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_copy" name="test_parse_answer_normalizes_bounded_korean_scalar_forms[meal_count-4\ub07c-4]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_copy" name="test_parse_answer_normalizes_bounded_korean_scalar_forms[meal_count-\ud558\ub8e8 4\ub07c-4]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_copy" name="test_parse_answer_normalizes_bounded_korean_scalar_forms[meal_count-\ub124 \ub07c-4]" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_copy" name="test_parse_answer_normalizes_exact_activity_clarification_prefix" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_copy" name="test_parse_answer_rejects_ambiguous_meal_count" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_direct_entry" name="test_collecting_accepts_authorized_direct_text_without_reply" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_direct_entry" name="test_stale_reply_emits_structured_rejection_reason" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_direct_entry" name="test_staff_surface_cannot_submit_customer_answer" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_direct_entry" name="test_customer_callback_checks_customer_dm_not_staff_forum" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_direct_entry" name="test_registry_routes_keep_customer_dm_separate_from_staff" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview" name="test_owner_preview_command_is_reserved_before_generic_routing" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview" name="test_exact_anchored_reply_advances_and_duplicate_is_consumed" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview" name="test_wrong_actor_and_stale_reply_never_advance_or_fall_through" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview" name="test_invalid_answer_keeps_original_prompt_correlation" time="0.011" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview" name="test_wrong_user_preview_command_is_consumed_without_state" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview" name="test_preview_topic_callback_never_reaches_production_onboarding" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview" name="test_preview_confirm_callback_routes_before_preview_guard" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview" name="test_restart_lost_preview_confirmation_fails_closed" time="0.007" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview_runtime" name="test_unassigned_disjoint_dm_topic_does_not_break_startup_validation" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview_runtime" name="test_persisted_dm_topic_collision_still_fails_closed" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview_runtime" name="test_concurrent_duplicate_reply_advances_exactly_once" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview_runtime" name="test_unanchored_group_answer_is_consumed_without_advancing" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview_runtime" name="test_ambiguity_follow_up_precedes_confirmable_summary" time="0.008" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview_runtime" name="test_owner_qa_command_skips_collection_to_one_clarification" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview_runtime" name="test_exact_preview_confirm_callback_advances_once" time="0.008" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview_runtime" name="test_final_question_purges_before_completion_publication" time="0.008" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_preview_runtime" name="test_stop_and_provider_failure_leave_no_active_preview" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_owner_dm_address_is_derived_without_relaxing_review_topic" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_exact_owner_dm_opens_minimal_operator_menu" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_operator_queue_and_customer_detail_are_grounded_read_only_projections" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_empty_operator_queue_has_explicit_empty_state" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_customer_detail_projects_checkin_proposal_and_safety_state" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_operator_runtime_state_direct_contract" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_customer_detail_hides_private_fields_and_handles_missing_runtime_fields" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_customer_detail_projects_paused_service_state" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_console_preview_action_delegates_existing_adaptive_authority" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_console_action_rejects_wrong_owner_and_malformed_callbacks" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_owner_dm_adaptive_action_keeps_confirm_in_review_topic" time="0.005" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_operator_callback_routes_root_actions_before_generic_callbacks" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_operator_console" name="test_operator_callback_expired_ack_still_projects_menu" time="0.006" /><testcase classname="tests.gateway.test_telegram_overflow_partial" name="test_edit_overflow_split_reports_success_when_all_continuations_land" time="0.006" /><testcase classname="tests.gateway.test_telegram_overflow_partial" name="test_edit_overflow_split_reports_later_partial_failure_after_some_continuations_land" time="0.006" /><testcase classname="tests.gateway.test_telegram_overflow_partial" name="test_edit_overflow_split_reports_partial_failure_when_continuation_fails" time="0.006" /><testcase classname="tests.gateway.test_telegram_overflow_partial" name="test_stream_consumer_fallback_sends_tail_after_partial_overflow" time="0.006" /><testcase classname="tests.gateway.test_telegram_photo_interrupts" name="test_handle_message_does_not_priority_interrupt_photo_followup" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_callback_data_is_compact_and_contains_no_answer" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_callback_data_rejects_oversize_or_personal_value_actions" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_customer_nutrition_steps_fit_the_opaque_callback_contract" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_registered_morning_steps_stay_sized_at_maximum_version[weight_change_percent]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_registered_morning_steps_stay_sized_at_maximum_version[fatigue]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_registered_morning_steps_stay_sized_at_maximum_version[exercise_feasibility]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_registered_morning_steps_stay_sized_at_maximum_version[meal_deviation]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_callback_grammar_accepts_only_canonical_adaptive_steps[Q-SLEEP-CAUSE]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_callback_grammar_accepts_only_canonical_adaptive_steps[Q-SLEEP-ADJUST]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_callback_grammar_accepts_only_canonical_adaptive_steps[Q-COND-SYMPTOM]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_callback_grammar_accepts_only_canonical_adaptive_steps[Q-COND-INTENSITY]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_callback_grammar_accepts_only_canonical_adaptive_steps[Q-PERF-REASON]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_callback_grammar_accepts_only_canonical_adaptive_steps[Q-PERF-NEXT]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_callback_grammar_accepts_compact_navigation_actions[p]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_callback_grammar_accepts_compact_navigation_actions[k]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCallbackGrammar" name="test_callback_grammar_accepts_compact_navigation_actions[l]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_finalized_snapshot_exports_branch_state_for_grounding" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_urgent_text_reaches_safety_transition_during_button_only_step" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_all_fixed_coach_prompts_use_honorific_korean[morning]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_all_fixed_coach_prompts_use_honorific_korean[workout]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_all_fixed_coach_prompts_use_honorific_korean[nutrition_daily]" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_customer_nutrition_edit_menu_uses_compact_korean_fields" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_customer_nutrition_prompts_are_self_service_without_step_number_drift" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_customer_checkin_card_explains_start_and_submission_without_help" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_summary_uses_three_compact_actions_and_a_flow_specific_two_column_edit_menu" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_edit_tab_changes_the_same_binding_screen_and_field_callback_enters_correction" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_disabled_config_is_a_true_noop" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_optional_topic_allowlists_must_match_the_exact_wizard_target" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_start_binds_exact_owner_chat_topic_and_message" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_recovery_command_boundary_requires_exact_owner_chat_and_topic" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_replay_and_expiry_are_rejected_without_mutating_service" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_typed_value_requires_exact_active_binding_then_bypasses_agent" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_model_can_mark_missing_bodyweight_and_advance_without_creating_a_trend_value" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_model_can_rewrite_the_current_sleep_quality_prompt_without_advancing_the_draft" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_all_rendered_callbacks_are_opaque_and_telegram_sized" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_typed_action_replaces_buttons_with_the_exact_expected_question" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_fresh_bridge_rehydrates_persisted_active_draft_and_consumes_typed_value" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_nutrition_bridge_renders_progress_navigation_and_same_session_resume" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_nutrition_daily_live_shaped_sleep_quality_text_choice_is_exactly_once" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_nutrition_navigation_preserves_sleep_quality_choices" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_nutrition_navigation_preserves_every_declared_choice" time="0.009" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_registered_morning_bridge_round_trips_every_extended_step" time="0.009" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_removed_owner_session_api_is_absent" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_nutrition_private_dm_address_uses_registry_topic_zero" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_explicit_owner_dm_card_route_requires_canonical_owner_authority" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_completed_customer_checkin_publishes_pending_card_only_to_operator_topic" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_dedicated_operator_topic_maps_to_canonical_owner_actor" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_operator_draft_view_lists_every_final_checkin_field" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_nc1_operator_callback_is_queue_boundary_only" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_legacy_n2_approved_send_stays_disabled_without_transport" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_completion_publishes_pending_operator_card_before_background_generation" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_background_generation_uses_durable_worker_and_safe_provider_stage" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_startup_recovery_schedules_durable_nutrition_generation" time="0.009" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_n3_operator_card_matrix_binds_revision_generation_and_render_identity" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_n3_callback_acknowledges_before_rejecting_stale_revision_or_render" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_n3_callback_rejects_stale_render_identity_before_business_mutation" time="0.009" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_n3_expired_ack_commits_approval_and_projects_card" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_n3_ack_timeout_cancels_only_ack_and_still_schedules_retry" time="0.016" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_n3_approve_persists_only_approval_and_never_attempts_delivery" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_n3_send_revalidates_prepared_destination_and_text_before_transport" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_n3_markup_nonce_is_deterministic_for_cas_pins_and_changes_when_stale" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_natural_language_source_approval_consumes_the_latest_notified_candidate" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_today_feedback_replay_uses_saved_checkin_after_a_new_launcher_replaces_active_session" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_source_review_callback_requires_the_exact_owner_topic_and_approves_one_candidate" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_summary_keyboard_keeps_three_actions_in_one_telegram_row" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_disabled_pc1_callback_falls_through_existing_router" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_enabled_pc1_text_is_consumed_before_generic_aggregation" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_invalid_anonymous_natural_language_wizard_text_uses_model_without_generic_ingress" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_active_natural_language_turn_uses_model_action_instead_of_static_invalid_template" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_anonymous_sleep_quality_feedback_rewrites_the_active_card_without_generic_ingress" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_target_topic_conversation_uses_isolated_chos_coach_model_without_generic_ingress" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_anonymous_typed_value_uses_owner_only_for_the_exact_opted_in_topic" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_anonymous_typed_value_uses_sender_chat_when_telegram_supplies_a_fake_user" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_expired_target_numeric_answer_reopens_checkin_instead_of_reaching_generic_agent" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_expired_real_binding_numeric_answer_is_recovered_before_generic_ingress" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_owner_recovery_command_sends_one_topic_bound_card_before_generic_ingress" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_foreign_or_wrong_topic_recovery_command_is_denied_before_generic_ingress" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_failed_scheduled_launch_recovers_once_by_owner_command_without_automatic_retry" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_bound_customer_private_q8_callback_uses_customer_route" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_unbound_private_pc1_callback_fails_closed" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_enabled_pc1_callback_is_consumed_before_existing_callbacks" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_typed_action_edits_the_same_topic_prompt_to_a_direct_question" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_save_callback_records_once_and_replaces_summary_with_confirmation" time="0.008" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_saved_checkin_adds_profile_gated_model_feedback_without_generic_ingress" time="0.008" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_final_feedback_request_includes_profile_doctrine_and_verified_history" time="0.013" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_launcher_shows_kst_date_and_korean_weekday_in_its_topic_card" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_inline_card_capability_is_inert_when_profile_feature_is_disabled" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionCopySurfaces" name="test_daily_copy_keeps_the_approved_sections_and_spacing" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionCopySurfaces" name="test_daily_copy_fails_closed_when_facts_or_model_are_missing" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionCopySurfaces" name="test_weekly_copy_renders_averages_rate_judgment_and_actions" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionCopySurfaces" name="test_weekly_copy_fails_closed_when_no_report_data_exists" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_tick_success_persists_audited_receipt" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_provider_timeout_is_unknown_and_never_retried" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_delivered_receipt_restarts_into_audit_without_provider" time="0.008" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_daily_task_must_be_for_current_eligible_weekday[stale]" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_daily_task_must_be_for_current_eligible_weekday[weekend]" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_paused_transport_blocks_new_schedule_provider_call" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_first_eligible_weekday_after_activation_is_sent_once" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_duplicate_tick_has_one_provider_delivery" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_concurrent_ticks_share_one_durable_provider_authority" time="0.008" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_orphan_tombstone_recovery_is_terminal_and_never_calls_provider" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_invalid_cutover_fence_sends_nothing[preparing]" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_invalid_cutover_fence_sends_nothing[corrupt]" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_daily_customer_and_weekly_owner_destinations_are_pinned" time="0.009" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_dual_coach_reminder_is_static_pinned_and_exactly_once" time="0.008" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_terminal_response_after_sending_abandons_without_provider_or_review" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_dual_coach_reminder_stale_authority_never_calls_provider[registration]" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_dual_coach_reminder_stale_authority_never_calls_provider[destination]" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_dual_coach_reminder_stale_authority_never_calls_provider[config]" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_dual_coach_reminder_provider_unknown_is_never_retried" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_dual_coach_reminder_explicit_no_send_rejection_is_replaceable" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_dual_coach_reminder_ambiguous_rejection_remains_unknown" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestNutritionScheduleDelivery" name="test_dual_coach_reminder_expired_audited_delivery_creates_one_review" time="0.008" /><testcase classname="tests.gateway.test_telegram_physique_checkin" name="test_coaching_stage_uses_resolved_provider_token_parameter" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestStrictCoachingClosure" name="test_malformed_grounding_containers_are_canonical_with_empty_binding" time="0.005" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestStrictCoachingClosure" name="test_revision_drift_before_stage_one_skips_grounding_and_model" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestStrictCoachingClosure" name="test_revision_drift_between_stages_discards_model_output" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestStrictCoachingClosure" name="test_adaptive_payload_requires_exact_proposal_revision_and_digest" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestStrictCoachingClosure" name="test_daily_publication_rechecks_revision_before_edit" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestStrictCoachingClosure" name="test_physique_save_callback_never_enters_provider_pipeline" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestStrictCoachingClosure" name="test_adaptive_publication_rechecks_revision_before_reservation" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestStrictCoachingClosure" name="test_adaptive_operator_card_does_not_run_provider_pipeline_inline" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestStrictCoachingClosure" name="test_validated_adaptive_coach_calls_only_finite_polish" time="0.007" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestStrictCoachingClosure" name="test_registered_customer_free_text_does_not_call_ai_or_reply" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin" name="test_dual_coach_review_recovery_is_topic_bound_and_deduplicated" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin" name="test_topic_59_dual_coach_drain_coexists_with_adaptive_operator" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin" name="test_dual_coach_review_runtime_drain_requires_topic_59_and_persists_receipt" time="0.006" /><testcase classname="tests.gateway.test_telegram_physique_checkin" name="test_normal_adaptive_card_redacts_lifecycle_diagnostics" time="0.005" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_receipt_store_contains_only_update_ids_and_fixed_safe_metadata" time="0.005" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_recovered_business_commit_receipt_is_terminal_and_provenance_bound" time="0.005" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_business_recovery_does_not_overwrite_historical_handler_exception" time="0.006" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_authenticated_callback_replay_promotes_registered_business_recovery" time="0.006" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_receipt_path_symlink_attacks_fail_closed[dangling]" time="0.005" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_receipt_path_symlink_attacks_fail_closed[existing-target]" time="0.005" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_receipt_path_hardlink_fifo_and_mode_fail_closed" time="0.005" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_lock_path_symlink_attacks_fail_closed_without_touching_target" time="0.005" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_receipt_writer_replaces_a_raced_symlink_without_following_target" time="0.005" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_callback_ack_failure_uses_the_ptb_update_id_not_callback_data" time="0.006" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_real_ptb_offset_stays_unacknowledged_until_durable_receipt" time="0.036" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_real_ptb_replays_after_business_persistence_before_ingress_receipt" time="0.037" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_real_ptb_duplicate_after_receipt_skips_business_before_offset_ack" time="0.039" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_real_ptb_handler_failure_blocks_the_offset_without_retrying" time="0.022" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_ptb_error_logs_safe_exception_metadata_without_content" time="0.008" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_real_ptb_receipt_write_failure_and_corruption_block_the_offset" time="0.038" /><testcase classname="tests.gateway.test_telegram_polling_receipts" name="test_real_ptb_cancellation_before_receipt_replays_without_offset_ack" time="0.037" /><testcase classname="tests.gateway.test_telegram_polling_receipts_multiprocess" name="test_multiprocess_records_preserve_distinct_update_receipts" time="0.051" /><testcase classname="tests.gateway.test_telegram_polling_receipts_multiprocess" name="test_multiprocess_record_and_cleanup_preserve_serial_authority" time="0.035" /><testcase classname="tests.gateway.test_telegram_polling_receipts_multiprocess" name="test_process_crash_while_holding_receipt_lock_does_not_deadlock_next_process" time="0.062" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_transient_errors_are_classified_as_transient[httpx.ConnectError: Connection refused]" time="0.009" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_transient_errors_are_classified_as_transient[telegram.error.NetworkError: httpx.ConnectError]" time="0.008" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_transient_errors_are_classified_as_transient[NetworkError: remote end closed connection without response]" time="0.008" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_transient_errors_are_classified_as_transient[httpx.ReadTimeout: read timed out]" time="0.006" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_transient_errors_are_classified_as_transient[ReadTimeout: timed out]" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_transient_errors_are_classified_as_transient[Server disconnected]" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_transient_errors_are_classified_as_transient[Temporarily unavailable]" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_transient_errors_are_classified_as_transient[Temporary failure in name resolution]" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_transient_errors_are_classified_as_transient[Connection error: failed to connect]" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_permanent_errors_are_not_transient[Bad Request: message to edit not found]" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_permanent_errors_are_not_transient[Bad Request: message can't be edited]" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_permanent_errors_are_not_transient[Bad Request: not enough rights to edit the message]" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_permanent_errors_are_not_transient[Bad Request: MESSAGE_ID_INVALID]" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_permanent_errors_are_not_transient[flood_control:30.0]" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_permanent_errors_are_not_transient[Forbidden: bot was blocked by the user]" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_send_result_retryable_default_is_false" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_send_result_retryable_can_be_set_true" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_send_result_retryable_false_for_permanent" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_transient_failure_keeps_can_edit_true" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_permanent_failure_sets_can_edit_false" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_multiple_transient_then_success_keeps_can_edit_true" time="0.005" /><testcase classname="tests.gateway.test_telegram_progress_edit_transient" name="test_flood_control_sets_can_edit_false" time="0.005" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_reactions_disabled_by_default" time="0.005" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_reactions_enabled_when_set_true" time="0.005" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_reactions_enabled_with_1" time="0.005" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_reactions_disabled_with_false" time="0.005" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_reactions_disabled_with_0" time="0.005" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_reactions_disabled_with_no" time="0.005" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_set_reaction_calls_bot_api" time="0.006" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_set_reaction_returns_false_without_bot" time="0.006" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_set_reaction_handles_api_error_gracefully" time="0.006" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_on_processing_start_adds_eyes_reaction" time="0.006" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_on_processing_start_skipped_when_disabled" time="0.005" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_on_processing_start_handles_missing_ids" time="0.006" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_on_processing_complete_success" time="0.006" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_on_processing_complete_failure" time="0.006" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_on_processing_complete_skipped_when_disabled" time="0.005" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_on_processing_complete_cancelled_clears_reaction" time="0.006" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_on_processing_complete_cancelled_skipped_when_disabled" time="0.005" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_clear_reactions_handles_api_error_gracefully" time="0.006" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_clear_reactions_returns_false_without_bot" time="0.006" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_config_bridges_telegram_reactions" time="0.054" /><testcase classname="tests.gateway.test_telegram_reactions" name="test_config_reactions_env_takes_precedence" time="0.055" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestReplyToModeConfig" name="test_default_mode_is_first" time="0.009" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestReplyToModeConfig" name="test_off_mode" time="0.008" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestReplyToModeConfig" name="test_first_mode" time="0.008" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestReplyToModeConfig" name="test_all_mode" time="0.006" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestReplyToModeConfig" name="test_invalid_mode_stored_as_is" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestReplyToModeConfig" name="test_none_mode_defaults_to_first" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestReplyToModeConfig" name="test_empty_string_mode_defaults_to_first" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestShouldThreadReply" name="test_no_reply_to_returns_false" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestShouldThreadReply" name="test_off_mode_never_threads" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestShouldThreadReply" name="test_first_mode_only_first_chunk" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestShouldThreadReply" name="test_all_mode_all_chunks" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestShouldThreadReply" name="test_invalid_mode_falls_back_to_first" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestSendWithReplyToMode" name="test_off_mode_no_reply_threading" time="0.006" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestSendWithReplyToMode" name="test_first_mode_only_first_chunk_threads" time="0.006" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestSendWithReplyToMode" name="test_all_mode_all_chunks_thread" time="0.006" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestSendWithReplyToMode" name="test_no_reply_to_param_no_threading" time="0.006" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestSendWithReplyToMode" name="test_single_chunk_respects_mode" time="0.006" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestConfigSerialization" name="test_to_dict_includes_reply_to_mode" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestConfigSerialization" name="test_from_dict_loads_reply_to_mode" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestConfigSerialization" name="test_from_dict_defaults_to_first" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestEnvVarOverride" name="test_env_var_sets_off_mode" time="0.053" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestEnvVarOverride" name="test_env_var_sets_all_mode" time="0.056" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestEnvVarOverride" name="test_env_var_case_insensitive" time="0.056" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestEnvVarOverride" name="test_env_var_invalid_value_ignored" time="0.056" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestEnvVarOverride" name="test_env_var_empty_value_ignored" time="0.056" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestTelegramYamlConfigLoading" name="test_top_level_reply_to_mode_off" time="0.055" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestTelegramYamlConfigLoading" name="test_top_level_reply_to_mode_all" time="0.055" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestTelegramYamlConfigLoading" name="test_extra_reply_to_mode_off" time="0.055" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestTelegramYamlConfigLoading" name="test_env_var_takes_precedence_over_yaml" time="0.055" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestTelegramYamlConfigLoading" name="test_top_level_takes_precedence_over_extra" time="0.056" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestDMTopicFallbackReplyToMode" name="test_reply_to_id_suppressed_when_off" time="0.010" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestDMTopicFallbackReplyToMode" name="test_reply_to_id_returned_when_first" time="0.008" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestDMTopicFallbackReplyToMode" name="test_reply_to_id_returned_when_all" time="0.008" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestDMTopicFallbackReplyToMode" name="test_reply_to_id_returned_when_no_mode" time="0.006" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestDMTopicFallbackReplyToMode" name="test_explicit_reply_to_overrides_mode" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestDMTopicFallbackReplyToMode" name="test_thread_kwargs_suppressed_reply_anchor_when_off" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestDMTopicFallbackReplyToMode" name="test_thread_kwargs_returns_full_when_first" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestDMTopicFallbackReplyToMode" name="test_thread_kwargs_no_mode_backward_compat" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestDMTopicFallbackReplyToMode" name="test_send_dm_topic_off_no_quote" time="0.006" /><testcase classname="tests.gateway.test_telegram_reply_mode.TestDMTopicFallbackReplyToMode" name="test_send_dm_topic_first_still_quotes" time="0.006" /><testcase classname="tests.gateway.test_telegram_reply_quote" name="test_native_partial_quote_used_as_reply_to_text" time="0.006" /><testcase classname="tests.gateway.test_telegram_reply_quote" name="test_full_reply_text_used_when_no_native_quote" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_quote" name="test_caption_fallback_when_no_quote_and_no_text" time="0.005" /><testcase classname="tests.gateway.test_telegram_reply_quote" name="test_empty_quote_text_falls_back_to_full_reply" time="0.005" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_result_shapes_extract_message_id[raw0-123]" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_result_shapes_extract_message_id[raw1-123]" time="0.007" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_result_shapes_extract_message_id[raw2-123]" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_result_shapes_extract_message_id[raw3-None]" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_happy_path_sends_raw_markdown" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_details_with_math_skips_rich_send_to_avoid_tdesktop_crash" time="0.007" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_details_without_math_still_uses_rich_send" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_math_outside_details_still_uses_rich_send" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_messages_opt_out_uses_legacy_send_path" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_messages_opt_out_accepts_string_false" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_messages_default_is_enabled" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_messages_can_be_opted_out" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_plain_markdown_stays_on_legacy_path" time="0.007" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_expect_edits_metadata_keeps_preview_on_legacy_path" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_oversized_content_skips_rich_and_chunks" time="0.007" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_limit_is_characters_not_bytes" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_permanent_rich_error_falls_back_to_legacy[exc0]" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_permanent_rich_error_falls_back_to_legacy[exc1]" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_unknown_endpoint_error_falls_back_to_legacy" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_capability_error_latches_rich_send_off" time="0.007" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_real_ptb_endpoint_missing_falls_back_and_latches_off[exc0]" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_real_ptb_endpoint_missing_falls_back_and_latches_off[exc1]" time="0.007" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_payload_preserves_link_preview_disable" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_per_message_bad_request_does_not_latch_off" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_transient_rich_error_does_not_legacy_resend[exc0]" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_transient_rich_error_does_not_legacy_resend[exc1]" time="0.007" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_transient_timeout_is_not_retryable" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_routing_thread_id_maps_to_message_thread_id" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_routing_direct_messages_topic_id_drops_message_thread_id" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_reply_to_propagates_as_reply_parameters" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_notification_silent_by_default" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_notification_opt_in_drops_disable_flag" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_gate_tolerates_minimal_bot_without_raw_endpoint" time="0.007" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_details_with_math_skips_rich_draft_to_avoid_tdesktop_crash" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_draft_happy_path_sends_raw_markdown" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_draft_capability_failure_falls_back_and_latches_off" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_draft_transient_failure_does_not_latch_off" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_draft_oversized_uses_legacy" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_prefers_fresh_final_streaming_stays_disabled_when_rich_enabled" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_prefers_fresh_final_streaming_honors_rich_opt_out" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_streaming_overflow_limit_is_rich_cap_when_enabled" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_streaming_overflow_limit_none_when_rich_opted_out" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_streaming_overflow_limit_none_when_rich_latched_off" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_draft_opt_out_uses_legacy" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_finalize_edit_uses_rich_for_table_content" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_finalize_edit_plain_content_stays_legacy" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_finalize_edit_rich_capability_error_falls_back_to_legacy" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_finalize_edit_rich_not_modified_is_success_noop" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_non_finalize_edit_never_uses_rich" time="0.007" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_finalize_edit_opt_out_uses_legacy" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_finalize_edit_rich_over_markdownv2_limit_not_split" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_reply_records_and_recovers_text" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_reply_lookup_miss_leaves_text_none" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_reply_native_quote_wins_over_lookup" time="0.006" /><testcase classname="tests.gateway.test_telegram_rich_messages" name="test_rich_reply_caption_wins_over_lookup" time="0.006" /><testcase classname="tests.gateway.test_telegram_room_bootstrap_adversarial" name="test_restart_preserves_every_nonterminal_phase[PREPARED]" time="0.006" /><testcase classname="tests.gateway.test_telegram_room_bootstrap_adversarial" name="test_restart_preserves_every_nonterminal_phase[REGISTERING]" time="0.009" /><testcase classname="tests.gateway.test_telegram_room_bootstrap_adversarial" name="test_restart_preserves_every_nonterminal_phase[AWAITING_CONSENT]" time="0.007" /><testcase classname="tests.gateway.test_telegram_room_bootstrap_adversarial" name="test_restart_preserves_every_nonterminal_phase[AWAITING_ACTIVATION]" time="0.007" /><testcase classname="tests.gateway.test_telegram_send_draft_format" name="test_send_draft_passes_markdownv2_parse_mode" time="0.006" /><testcase classname="tests.gateway.test_telegram_send_draft_format" name="test_send_draft_falls_back_to_plain_text_on_markdownv2_error" time="0.007" /><testcase classname="tests.gateway.test_telegram_send_draft_format" name="test_send_draft_non_badrequest_propagates_without_retry" time="0.006" /><testcase classname="tests.gateway.test_telegram_send_path_health" name="test_send_succeeds_when_path_healthy" time="0.006" /><testcase classname="tests.gateway.test_telegram_send_path_health" name="test_send_short_circuits_when_path_degraded" time="0.006" /><testcase classname="tests.gateway.test_telegram_send_path_health" name="test_reconnect_storm_sets_and_heartbeat_clears_flag" time="5.009" /><testcase classname="tests.gateway.test_telegram_slash_confirm.TestSendSlashConfirm" name="test_uses_markdown_v2_and_escapes_special_chars" time="0.012" /><testcase classname="tests.gateway.test_telegram_slash_confirm.TestSendSlashConfirm" name="test_stores_slash_confirm_state" time="0.008" /><testcase classname="tests.gateway.test_telegram_slash_confirm.TestSendSlashConfirm" name="test_not_connected_returns_failure" time="0.007" /><testcase classname="tests.gateway.test_telegram_status_indicator" name="test_disabled_by_default" time="0.007" /><testcase classname="tests.gateway.test_telegram_status_indicator" name="test_enabled_via_extra" time="0.007" /><testcase classname="tests.gateway.test_telegram_status_indicator" name="test_disabled_is_noop" time="0.007" /><testcase classname="tests.gateway.test_telegram_status_indicator" name="test_online_sets_default_text" time="0.007" /><testcase classname="tests.gateway.test_telegram_status_indicator" name="test_offline_sets_default_text" time="0.007" /><testcase classname="tests.gateway.test_telegram_status_indicator" name="test_custom_status_strings" time="0.007" /><testcase classname="tests.gateway.test_telegram_status_indicator" name="test_text_truncated_to_120_chars" time="0.007" /><testcase classname="tests.gateway.test_telegram_status_indicator" name="test_noop_when_bot_is_none" time="0.008" /><testcase classname="tests.gateway.test_telegram_status_indicator" name="test_api_failure_is_swallowed" time="0.007" /><testcase classname="tests.gateway.test_telegram_status_update" name="test_first_call_sends_and_caches_message_id" time="0.007" /><testcase classname="tests.gateway.test_telegram_status_update" name="test_second_call_edits_in_place" time="0.007" /><testcase classname="tests.gateway.test_telegram_status_update" name="test_edit_failure_falls_back_to_fresh_send" time="0.008" /><testcase classname="tests.gateway.test_telegram_status_update" name="test_distinct_status_keys_do_not_collide" time="0.007" /><testcase classname="tests.gateway.test_telegram_status_update" name="test_distinct_chat_ids_do_not_collide" time="0.007" /><testcase classname="tests.gateway.test_telegram_text_batch_perf.TestEnvFloatClamped" name="test_default_when_unset" time="0.007" /><testcase classname="tests.gateway.test_telegram_text_batch_perf.TestEnvFloatClamped" name="test_parses_valid_value" time="0.007" /><testcase classname="tests.gateway.test_telegram_text_batch_perf.TestEnvFloatClamped" name="test_falls_back_to_default_on_garbage" time="0.007" /><testcase classname="tests.gateway.test_telegram_text_batch_perf.TestEnvFloatClamped" name="test_rejects_nan" time="0.007" /><testcase classname="tests.gateway.test_telegram_text_batch_perf.TestEnvFloatClamped" name="test_rejects_inf" time="0.007" /><testcase classname="tests.gateway.test_telegram_text_batch_perf.TestEnvFloatClamped" name="test_clamps_below_min" time="0.006" /><testcase classname="tests.gateway.test_telegram_text_batch_perf.TestEnvFloatClamped" name="test_clamps_above_max" time="0.006" /><testcase classname="tests.gateway.test_telegram_text_batch_perf.TestAdaptiveTextBatchTiers" name="test_class_constants_are_sensible" time="0.006" /><testcase classname="tests.gateway.test_telegram_text_batch_perf.TestAdaptiveTextBatchTiers" name="test_fast_tier_uses_min_with_configured_cap" time="0.005" /><testcase classname="tests.gateway.test_telegram_text_batch_perf.TestAdaptiveTextBatchTiers" name="test_short_tier_uses_min_with_configured_cap" time="0.005" /><testcase classname="tests.gateway.test_telegram_text_batch_perf.TestAdaptiveTextBatchTiers" name="test_long_message_uses_full_cap" time="0.005" /><testcase classname="tests.gateway.test_telegram_text_batch_perf.TestAdaptiveTextBatchTiers" name="test_split_threshold_takes_priority_over_fast_tier" time="0.005" /><testcase classname="tests.gateway.test_telegram_text_batching.TestTextBatching" name="test_single_message_dispatched_after_delay" time="0.207" /><testcase classname="tests.gateway.test_telegram_text_batching.TestTextBatching" name="test_split_messages_aggregated" time="0.234" /><testcase classname="tests.gateway.test_telegram_text_batching.TestTextBatching" name="test_three_way_split_aggregated" time="0.254" /><testcase classname="tests.gateway.test_telegram_text_batching.TestTextBatching" name="test_different_chats_not_merged" time="0.213" /><testcase classname="tests.gateway.test_telegram_text_batching.TestTextBatching" name="test_batch_cleans_up_after_flush" time="0.214" /><testcase classname="tests.gateway.test_telegram_text_batching.TestTextBatching" name="test_dm_topic_batching_recovers_thread_before_keying" time="0.213" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_non_forum_group_reply_thread_id_does_not_fork_session_key" time="0.012" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_forum_group_topic_message_preserves_thread_session_key" time="0.009" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_forum_general_topic_without_message_thread_id_keeps_thread_context" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_omits_general_topic_thread_id" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_typing_preserves_general_topic_thread_id" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_typing_does_not_fall_back_to_root_for_dm_topic" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_typing_attempts_api_call_for_dm_topic_reply_fallback" time="0.010" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_typing_falls_back_without_thread_on_bad_request" time="0.008" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_retries_without_thread_on_thread_not_found" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_retries_transient_thread_not_found_before_fallback" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_private_dm_topic_uses_direct_messages_topic_id" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_base_gateway_metadata_marks_telegram_dm_topics_as_reply_fallback" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_base_gateway_metadata_for_resumed_telegram_dm_topic_uses_direct_topic" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_base_gateway_replies_to_triggering_message_for_telegram_dm_topic" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_gateway_runner_busy_ack_replies_to_triggering_message_for_telegram_dm_topic" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_uses_reply_fallback_for_hermes_dm_topics" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_uses_reply_anchor_when_direct_topic_fallback_metadata_exists" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_created_private_topic_uses_message_thread_without_anchor" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_created_private_topic_thread_not_found_fails_without_root_fallback" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_uses_metadata_reply_fallback_for_streaming_dm_topics" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_reply_fallback_applies_to_every_chunk_for_dm_topics" time="0.007" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_model_picker_uses_metadata_reply_fallback_for_dm_topics" time="0.006" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_dm_topic_fallback_without_anchor_does_not_crash" time="0.006" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_dm_topic_reply_not_found_fails_closed" time="0.005" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_image_file-send_photo-image_path-photo.png-png-data]" time="0.006" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_document-send_document-file_path-report.txt-report-data]" time="0.006" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_video-send_video-video_path-clip.mp4-video-data]" time="0.006" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_voice-send_voice-audio_path-clip.ogg-ogg-data]" time="0.006" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_native_media_dm_topic_reply_not_found_retry_drops_thread_id[send_voice-send_audio-audio_path-clip.mp3-mp3-data]" time="0.006" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_animation_dm_topic_reply_not_found_retry_drops_thread_id" time="0.006" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_media_group_dm_topic_reply_not_found_retry_drops_thread_id" time="0.006" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_image_url_dm_topic_reply_not_found_retry_drops_thread_id" time="0.005" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_image_upload_dm_topic_reply_not_found_retry_drops_thread_id" time="0.006" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_slash_confirm_private_topic_callback_followup_sends_thread_and_reply" time="0.005" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_slash_confirm_forum_callback_followup_keeps_existing_thread_behavior" time="0.005" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_base_send_image_fallback_preserves_metadata" time="0.005" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_raises_on_other_bad_request" time="0.006" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_without_thread_id_unaffected" time="0.005" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_retries_network_errors_normally" time="3.010" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_does_not_retry_timeout" time="0.012" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_retries_wrapped_connect_timeout" time="3.013" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_marks_wrapped_connect_timeout_retryable_after_exhaustion" time="3.017" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_retries_pool_timeout" time="3.016" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_marks_pool_timeout_retryable_after_exhaustion" time="3.017" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_thread_fallback_only_fires_once" time="0.012" /><testcase classname="tests.gateway.test_telegram_thread_fallback" name="test_send_retries_retry_after_errors" time="2.010" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_root_telegram_dm_prompt_is_system_lobby_when_topic_mode_enabled" time="0.013" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_root_telegram_dm_new_shows_create_topic_instruction" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_telegram_topic_prompt_still_runs_agent_when_topic_mode_enabled" time="0.012" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_managed_topic_binding_reuses_restored_session_over_static_lane_session" time="0.101" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_telegram_group_prompt_is_not_topic_lobby_even_when_dm_topic_mode_enabled" time="0.013" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_command_is_private_dm_only_and_does_not_enable_group_topic_mode" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_group_new_keeps_existing_reset_semantics_when_dm_topic_mode_enabled" time="0.010" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_new_inside_telegram_topic_resets_current_topic_with_parallel_tip" time="0.007" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_new_inside_telegram_topic_rewrites_binding_to_new_session" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_binding_follows_compression_tip_on_read" time="0.080" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_root_command_explicitly_migrates_and_enables_topic_mode" time="0.011" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_root_command_lists_unlinked_sessions_for_restore" time="0.010" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_root_command_handles_no_unlinked_sessions" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_command_inside_bound_topic_shows_current_session" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_restore_inside_topic_binds_old_session_and_returns_last_assistant_message" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_restore_refuses_session_owned_by_another_telegram_user" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_restore_refuses_already_linked_session" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_first_message_inside_topic_records_topic_binding" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_root_command_creates_and_pins_system_topic" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_auto_generated_title_renames_bound_telegram_topic" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_auto_generated_title_does_not_rename_topic_bound_to_other_session" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_operator_declared_topic_is_not_auto_renamed" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_disable_topic_auto_rename_extra_skips_rename" time="0.010" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_schedule_topic_rename_respects_disable_flag" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_telegram_topic_auto_rename_disabled_string_truthy" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_general_topic_is_treated_as_root_lobby" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_lobby_reminder_is_debounced_per_chat" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_binding_survives_session_deletion_via_cascade" time="0.007" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_migration_rebuilds_v1_binding_table_with_cascade_fk" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_help_subcommand_returns_usage" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_off_disables_mode_and_clears_bindings" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_off_is_idempotent_when_never_enabled" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_topic_refuses_unauthorized_user" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_recover_returns_none_for_known_topic" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_recover_preserves_unknown_thread_id_for_new_topic" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_recover_rewrites_lobby_thread_id_to_most_recent" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_recover_returns_none_when_topic_mode_disabled" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_recover_returns_none_when_no_bindings_yet" time="0.009" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_recover_returns_none_for_brand_new_topic" time="0.008" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_list_telegram_topic_bindings_for_chat" time="0.007" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_list_telegram_topic_bindings_for_chat_no_table" time="0.007" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_get_telegram_topic_binding_by_session_returns_binding" time="0.007" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_get_telegram_topic_binding_by_session_returns_none_for_unknown" time="0.007" /><testcase classname="tests.gateway.test_telegram_topic_mode" name="test_session_split_restores_source_thread_id_from_binding" time="0.010" /><testcase classname="tests.gateway.test_telegram_voice_v0_regressions" name="test_telegram_audio_size_gate_rejects_oversized_media_before_download" time="0.005" /><testcase classname="tests.gateway.test_telegram_voice_v0_regressions" name="test_voice_tts_is_explicit_audio_reply_opt_in" time="0.006" /><testcase classname="tests.gateway.test_telegram_webhook_secret.TestTelegramWebhookSecretRequired" name="test_webhook_branch_checks_secret" time="0.006" /><testcase classname="tests.gateway.test_telegram_webhook_secret.TestTelegramWebhookSecretRequired" name="test_guard_raises_runtime_error" time="0.006" /><testcase classname="tests.gateway.test_telegram_webhook_secret.TestTelegramWebhookSecretRequired" name="test_guard_message_includes_advisory_link" time="0.006" /><testcase classname="tests.gateway.test_telegram_webhook_secret.TestTelegramWebhookSecretRequired" name="test_guard_message_explains_remediation" time="0.006" /><testcase classname="tests.gateway.test_telegram_webhook_secret.TestTelegramWebhookSecretRequired" name="test_polling_branch_has_no_secret_guard" time="0.006" /><testcase classname="tests.gateway.test_text_batching.TestDiscordTextBatching" name="test_single_message_dispatched_after_delay" time="0.208" /><testcase classname="tests.gateway.test_text_batching.TestDiscordTextBatching" name="test_split_messages_aggregated" time="0.231" /><testcase classname="tests.gateway.test_text_batching.TestDiscordTextBatching" name="test_three_way_split_aggregated" time="0.252" /><testcase classname="tests.gateway.test_text_batching.TestDiscordTextBatching" name="test_different_chats_not_merged" time="0.212" /><testcase classname="tests.gateway.test_text_batching.TestDiscordTextBatching" name="test_batch_cleans_up_after_flush" time="0.213" /><testcase classname="tests.gateway.test_text_batching.TestDiscordTextBatching" name="test_adaptive_delay_for_near_limit_chunk" time="0.413" /><testcase classname="tests.gateway.test_text_batching.TestDiscordTextBatching" name="test_shield_protects_handle_message_from_cancel" time="0.175" /><testcase classname="tests.gateway.test_text_batching.TestMatrixTextBatching" name="test_single_message_dispatched_after_delay" time="0.213" /><testcase classname="tests.gateway.test_text_batching.TestMatrixTextBatching" name="test_split_messages_aggregated" time="0.233" /><testcase classname="tests.gateway.test_text_batching.TestMatrixTextBatching" name="test_different_rooms_not_merged" time="0.213" /><testcase classname="tests.gateway.test_text_batching.TestMatrixTextBatching" name="test_adaptive_delay_for_near_limit_chunk" time="0.414" /><testcase classname="tests.gateway.test_text_batching.TestMatrixTextBatching" name="test_batch_cleans_up_after_flush" time="0.213" /><testcase classname="tests.gateway.test_text_batching.TestWeComTextBatching" name="test_single_message_dispatched_after_delay" time="0.214" /><testcase classname="tests.gateway.test_text_batching.TestWeComTextBatching" name="test_split_messages_aggregated" time="0.234" /><testcase classname="tests.gateway.test_text_batching.TestWeComTextBatching" name="test_different_chats_not_merged" time="0.213" /><testcase classname="tests.gateway.test_text_batching.TestWeComTextBatching" name="test_adaptive_delay_for_near_limit_chunk" time="0.413" /><testcase classname="tests.gateway.test_text_batching.TestWeComTextBatching" name="test_batch_cleans_up_after_flush" time="0.213" /><testcase classname="tests.gateway.test_text_batching.TestTelegramAdaptiveDelay" name="test_short_chunk_uses_normal_delay" time="0.164" /><testcase classname="tests.gateway.test_text_batching.TestTelegramAdaptiveDelay" name="test_near_limit_chunk_uses_split_delay" time="0.413" /><testcase classname="tests.gateway.test_text_batching.TestTelegramAdaptiveDelay" name="test_split_continuation_merged" time="0.213" /><testcase classname="tests.gateway.test_text_batching.TestFeishuAdaptiveDelay" name="test_short_chunk_uses_normal_delay" time="0.163" /><testcase classname="tests.gateway.test_text_batching.TestFeishuAdaptiveDelay" name="test_near_limit_chunk_uses_split_delay" time="0.413" /><testcase classname="tests.gateway.test_text_batching.TestFeishuAdaptiveDelay" name="test_split_continuation_merged" time="0.214" /><testcase classname="tests.gateway.test_title_command.TestHandleTitleCommand" name="test_set_title" time="0.014" /><testcase classname="tests.gateway.test_title_command.TestHandleTitleCommand" name="test_show_title_when_set" time="0.009" /><testcase classname="tests.gateway.test_title_command.TestHandleTitleCommand" name="test_show_title_when_not_set" time="0.009" /><testcase classname="tests.gateway.test_title_command.TestHandleTitleCommand" name="test_title_conflict" time="0.009" /><testcase classname="tests.gateway.test_title_command.TestHandleTitleCommand" name="test_no_session_db" time="0.007" /><testcase classname="tests.gateway.test_title_command.TestHandleTitleCommand" name="test_title_too_long" time="0.009" /><testcase classname="tests.gateway.test_title_command.TestHandleTitleCommand" name="test_title_control_chars_sanitized" time="0.009" /><testcase classname="tests.gateway.test_title_command.TestHandleTitleCommand" name="test_title_only_control_chars" time="0.009" /><testcase classname="tests.gateway.test_title_command.TestHandleTitleCommand" name="test_set_title_propagates_to_telegram_topic_rename" time="0.009" /><testcase classname="tests.gateway.test_title_command.TestHandleTitleCommand" name="test_show_title_does_not_rename_topic" time="0.009" /><testcase classname="tests.gateway.test_title_command.TestHandleTitleCommand" name="test_works_across_platforms" time="0.011" /><testcase classname="tests.gateway.test_title_command.TestTitleInHelp" name="test_title_in_help_output" time="0.008" /><testcase classname="tests.gateway.test_title_command.TestTitleInHelp" name="test_title_is_known_command" time="0.011" /><testcase classname="tests.gateway.test_title_command.TestResetCommandWithTitle" name="test_reset_command_with_title" time="0.008" /><testcase classname="tests.gateway.test_title_command.TestResetCommandWithTitle" name="test_reset_command_duplicate_title_surfaces_warning" time="0.009" /><testcase classname="tests.gateway.test_title_command.TestNewInHelp" name="test_new_command_in_help_output" time="0.007" /><testcase classname="tests.gateway.test_tool_response_drop_recovery.TestExtractStripRecoveryAllPlatforms" name="test_response_reduced_to_empty_is_recovered_and_sent[Platform.DISCORD]" time="0.008" /><testcase classname="tests.gateway.test_tool_response_drop_recovery.TestExtractStripRecoveryAllPlatforms" name="test_response_reduced_to_empty_is_recovered_and_sent[Platform.TELEGRAM]" time="0.007" /><testcase classname="tests.gateway.test_tool_response_drop_recovery.TestExtractStripRecoveryAllPlatforms" name="test_directives_stripped_from_fallback_text[Platform.DISCORD]" time="0.007" /><testcase classname="tests.gateway.test_tool_response_drop_recovery.TestExtractStripRecoveryAllPlatforms" name="test_directives_stripped_from_fallback_text[Platform.TELEGRAM]" time="0.007" /><testcase classname="tests.gateway.test_tool_response_drop_recovery.TestExtractStripRecoveryAllPlatforms" name="test_no_fallback_when_attachment_produced[Platform.DISCORD]" time="0.007" /><testcase classname="tests.gateway.test_tool_response_drop_recovery.TestExtractStripRecoveryAllPlatforms" name="test_no_fallback_when_attachment_produced[Platform.TELEGRAM]" time="0.006" /><testcase classname="tests.gateway.test_tool_response_drop_recovery.TestRecoveryDoesNotLeakMediaFragments" name="test_spaced_media_path_does_not_leak_fragment" time="0.006" /><testcase classname="tests.gateway.test_tool_response_drop_recovery.TestUnrecoverableDropIsLoud" name="test_directive_only_response_logs_dropped" time="0.006" /><testcase classname="tests.gateway.test_trainer_free_v1_contract" name="test_callback_v2_and_historical_non1_is_rejected" time="0.005" /><testcase classname="tests.gateway.test_trainer_free_v1_contract" name="test_owner_review_card_has_exact_v1_authority" time="0.005" /><testcase classname="tests.gateway.test_trainer_free_v1_contract" name="test_legacy_runtime_modules_are_absent" time="0.005" /><testcase classname="tests.gateway.test_trainer_free_v1_contract" name="test_owner_review_safety_notes_are_serialized_without_trainer_handoff_data" time="0.005" /><testcase classname="tests.gateway.test_trainer_free_v1_contract" name="test_v1_runtime_closure_has_no_trainer_scaffolding_or_projection_keys" time="0.017" /><testcase classname="tests.gateway.test_trainer_free_v1_contract" name="test_inventory_runtime_roots_have_no_trainer_token_or_namespace" time="0.227" /><testcase classname="tests.gateway.test_transcript_offset.TestTranscriptHistoryOffset" name="test_session_meta_causes_offset_mismatch" time="0.009" /><testcase classname="tests.gateway.test_transcript_offset.TestTranscriptHistoryOffset" name="test_no_session_meta_same_result" time="0.007" /><testcase classname="tests.gateway.test_transcript_offset.TestTranscriptHistoryOffset" name="test_multiple_session_meta_larger_drift" time="0.006" /><testcase classname="tests.gateway.test_transcript_offset.TestTranscriptHistoryOffset" name="test_system_messages_also_filtered" time="0.005" /><testcase classname="tests.gateway.test_transcript_offset.TestTranscriptHistoryOffset" name="test_else_branch_returns_empty_list" time="0.005" /><testcase classname="tests.gateway.test_transcript_offset.TestTranscriptHistoryOffset" name="test_tool_call_messages_preserved_in_filter" time="0.005" /><testcase classname="tests.gateway.test_transcript_offset.TestTranscriptHistoryOffset" name="test_recursive_queued_followup_keeps_outer_history_offset" time="0.005" /><testcase classname="tests.gateway.test_transcript_offset.TestTranscriptHistoryOffset" name="test_recursive_queued_followup_preserves_smaller_existing_offset" time="0.005" /><testcase classname="tests.gateway.test_tts_media_routing" name="test_base_adapter_routes_telegram_flac_media_tag_to_document_sender" time="0.006" /><testcase classname="tests.gateway.test_tts_media_routing" name="test_base_adapter_routes_non_voice_telegram_ogg_media_tag_to_document_sender" time="0.006" /><testcase classname="tests.gateway.test_tts_media_routing" name="test_base_adapter_routes_voice_tagged_telegram_ogg_media_tag_to_voice_sender" time="0.006" /><testcase classname="tests.gateway.test_tts_media_routing" name="test_streaming_delivery_routes_telegram_flac_media_tag_to_document_sender" time="0.006" /><testcase classname="tests.gateway.test_tts_media_routing" name="test_streaming_delivery_routes_non_voice_telegram_ogg_media_tag_to_document_sender" time="0.006" /><testcase classname="tests.gateway.test_tts_media_routing" name="test_streaming_delivery_routes_telegram_mp3_media_tag_to_voice_sender" time="0.006" /><testcase classname="tests.gateway.test_tts_media_routing" name="test_streaming_delivery_blocks_media_path_outside_allowed_roots" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_whatsapp_lid_user_matches_phone_allowlist_via_session_mapping" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_simplex_allowlist_accepts_display_name" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_simplex_allowlist_accepts_numeric_contact_id" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_simplex_allowlist_denies_unlisted" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_star_wildcard_in_allowlist_authorizes_any_user" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_star_wildcard_works_for_any_platform" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_qq_group_allowlist_authorizes_group_chat_without_user_allowlist" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_qq_group_allowlist_does_not_authorize_other_groups" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_telegram_group_user_allowlist_authorizes_forum_sender_without_dm_allowlist" time="0.005" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_telegram_group_user_allowlist_rejects_other_senders" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_telegram_group_user_allowlist_wildcard_authorizes_any_sender" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_telegram_group_user_allowlist_does_not_authorize_dms" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_telegram_group_chat_allowlist_authorizes_group_chat_without_user_allowlist" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_telegram_group_chat_allowlist_authorizes_anonymous_sender" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_telegram_group_chat_allowlist_rejects_anonymous_sender_in_other_chat" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_handle_message_does_not_drop_anonymous_sender_in_allowlisted_chat" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_handle_message_drops_anonymous_sender_outside_allowlist" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_telegram_group_users_legacy_chat_ids_still_authorize" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_telegram_group_users_legacy_does_not_cross_chats" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_telegram_group_users_mixed_sender_and_legacy_chat" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_unauthorized_dm_pairs_by_default" time="0.007" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_unauthorized_whatsapp_dm_can_be_ignored" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_rate_limited_user_gets_no_response" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_rejection_message_records_rate_limit" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_global_ignore_suppresses_pairing_reply" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_signal_with_allowlist_ignores_unauthorized_dm" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_telegram_with_allowlist_ignores_unauthorized_dm" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_global_allowlist_ignores_unauthorized_dm" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_no_allowlist_still_pairs_by_default" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_explicit_pair_config_overrides_allowlist_default" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_allowlist_authorized_user_returns_ignore_for_unauthorized" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_get_unauthorized_dm_behavior_no_allowlist_returns_pair" time="0.006" /><testcase classname="tests.gateway.test_unauthorized_dm_behavior" name="test_qqbot_with_allowlist_ignores_unauthorized_dm" time="0.006" /><testcase classname="tests.gateway.test_unavailable_skill_hint" name="test_frontmatter_slug_matched_even_when_dir_name_differs" time="0.006" /><testcase classname="tests.gateway.test_unavailable_skill_hint" name="test_unknown_command_still_returns_none" time="0.009" /><testcase classname="tests.gateway.test_unavailable_skill_hint" name="test_matched_but_not_disabled_returns_none" time="0.009" /><testcase classname="tests.gateway.test_unavailable_skill_hint" name="test_slug_normalization_strips_non_alnum" time="0.006" /><testcase classname="tests.gateway.test_unavailable_skill_hint" name="test_optional_skill_uses_frontmatter_slug" time="0.006" /><testcase classname="tests.gateway.test_undo_rewind_session" name="test_rewind_default_one_turn" time="0.008" /><testcase classname="tests.gateway.test_undo_rewind_session" name="test_rewind_n_turns" time="0.008" /><testcase classname="tests.gateway.test_undo_rewind_session" name="test_rewind_soft_deletes_rows_for_audit" time="0.008" /><testcase classname="tests.gateway.test_undo_rewind_session" name="test_rewind_clamps_to_oldest_turn" time="0.008" /><testcase classname="tests.gateway.test_undo_rewind_session" name="test_rewind_empty_session_returns_none" time="0.008" /><testcase classname="tests.gateway.test_undo_rewind_session" name="test_rewind_clamps_negative_count_to_one" time="0.008" /><testcase classname="tests.gateway.test_unknown_command" name="test_unknown_slash_command_returns_guidance" time="0.057" /><testcase classname="tests.gateway.test_unknown_command" name="test_unknown_slash_command_underscored_form_also_guarded" time="0.061" /><testcase classname="tests.gateway.test_unknown_command" name="test_known_slash_command_not_flagged_as_unknown" time="0.026" /><testcase classname="tests.gateway.test_unknown_command" name="test_underscored_alias_for_hyphenated_builtin_not_flagged" time="0.010" /><testcase classname="tests.gateway.test_unknown_command" name="test_command_hook_can_deny_before_dispatch" time="0.009" /><testcase classname="tests.gateway.test_unknown_command" name="test_command_hook_deny_without_message_uses_default" time="0.008" /><testcase classname="tests.gateway.test_unknown_command" name="test_command_hook_can_mark_command_as_handled" time="0.007" /><testcase classname="tests.gateway.test_unknown_command" name="test_command_hook_allow_decision_is_passthrough" time="0.007" /><testcase classname="tests.gateway.test_unknown_command" name="test_command_hook_non_dict_return_values_ignored" time="0.006" /><testcase classname="tests.gateway.test_unknown_command" name="test_command_hook_fires_for_plugin_registered_command" time="0.006" /><testcase classname="tests.gateway.test_unknown_command" name="test_command_hook_rewrite_routes_to_plugin" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_managed_install_returns_package_manager_guidance" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_no_git_directory" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_no_hermes_binary" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_fallback_to_sys_executable" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_resolve_hermes_bin_prefers_which" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_resolve_hermes_bin_fallback" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_resolve_hermes_bin_returns_none_when_both_fail" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_writes_pending_marker" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_writes_pending_marker_with_thread_id" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_spawns_setsid" time="0.008" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_fallback_when_no_setsid" time="0.008" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_popen_failure_cleans_up" time="0.007" /><testcase classname="tests.gateway.test_update_command.TestHandleUpdateCommand" name="test_returns_user_friendly_message" time="0.007" /><testcase classname="tests.gateway.test_update_command.TestUpdateCommandPlatformGate" name="test_blocks_programmatic_interface" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestUpdateCommandPlatformGate" name="test_blocks_api_server_platform" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestUpdateCommandPlatformGate" name="test_allows_plugin_platform_via_registry_fallback" time="0.052" /><testcase classname="tests.gateway.test_update_command.TestUpdateCommandPlatformGate" name="test_allows_mattermost_via_registry_fallback" time="0.056" /><testcase classname="tests.gateway.test_update_command.TestUpdateCommandPlatformGate" name="test_allows_homeassistant_via_registry_fallback" time="0.057" /><testcase classname="tests.gateway.test_update_command.TestUpdateCommandPlatformGate" name="test_allows_builtin_platform_in_allowlist" time="0.010" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_no_pending_file_is_noop" time="0.009" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_defers_notification_while_update_still_running" time="0.008" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_recovers_from_claimed_pending_file" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_sends_notification_with_output" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_sends_notification_with_thread_metadata" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_strips_ansi_codes" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_truncates_long_output" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_sends_failure_message_when_update_fails" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_sends_generic_message_when_no_output" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_cleans_up_files_after_notification" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_cleans_up_on_error" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_handles_corrupt_pending_file" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_no_adapter_for_platform_preserves_markers" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestSendUpdateNotification" name="test_deferred_notification_delivers_after_reconnect" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestUpdateInHelp" name="test_update_in_help_output" time="0.006" /><testcase classname="tests.gateway.test_update_command.TestUpdateInHelp" name="test_update_is_known_command" time="0.009" /><testcase classname="tests.gateway.test_update_streaming.TestGatewayPrompt" name="test_writes_prompt_file_and_reads_response" time="0.512" /><testcase classname="tests.gateway.test_update_streaming.TestGatewayPrompt" name="test_prompt_file_content" time="0.511" /><testcase classname="tests.gateway.test_update_streaming.TestGatewayPrompt" name="test_timeout_returns_default" time="0.512" /><testcase classname="tests.gateway.test_update_streaming.TestGatewayPrompt" name="test_empty_response_returns_default" time="2.013" /><testcase classname="tests.gateway.test_update_streaming.TestRestoreStashWithInputFn" name="test_uses_input_fn_when_provided" time="0.012" /><testcase classname="tests.gateway.test_update_streaming.TestRestoreStashWithInputFn" name="test_input_fn_yes_proceeds_with_restore" time="0.007" /><testcase classname="tests.gateway.test_update_streaming.TestUpdateCommandGatewayFlag" name="test_spawns_with_gateway_flag" time="0.009" /><testcase classname="tests.gateway.test_update_streaming.TestWatchUpdateProgress" name="test_streams_output_to_adapter" time="0.311" /><testcase classname="tests.gateway.test_update_streaming.TestWatchUpdateProgress" name="test_detects_and_forwards_prompt" time="1.119" /><testcase classname="tests.gateway.test_update_streaming.TestWatchUpdateProgress" name="test_prompt_forwarding_preserves_thread_metadata" time="0.515" /><testcase classname="tests.gateway.test_update_streaming.TestWatchUpdateProgress" name="test_cleans_up_on_completion" time="0.012" /><testcase classname="tests.gateway.test_update_streaming.TestWatchUpdateProgress" name="test_failure_exit_code" time="0.009" /><testcase classname="tests.gateway.test_update_streaming.TestWatchUpdateProgress" name="test_falls_back_and_delivers_after_reconnect" time="0.311" /><testcase classname="tests.gateway.test_update_streaming.TestWatchUpdateProgress" name="test_prompt_forwarded_only_once" time="1.321" /><testcase classname="tests.gateway.test_update_streaming.TestWatchUpdateProgress" name="test_prompt_is_recovered_after_watcher_restart" time="0.470" /><testcase classname="tests.gateway.test_update_streaming.TestUpdatePromptInterception" name="test_intercepts_response_when_prompt_pending" time="0.012" /><testcase classname="tests.gateway.test_update_streaming.TestUpdatePromptInterception" name="test_recognized_slash_command_bypasses_pending_update_prompt" time="0.008" /><testcase classname="tests.gateway.test_update_streaming.TestUpdatePromptInterception" name="test_unrecognized_slash_command_still_consumed_as_response" time="0.008" /><testcase classname="tests.gateway.test_update_streaming.TestUpdatePromptInterception" name="test_normal_message_when_no_prompt_pending" time="0.007" /><testcase classname="tests.gateway.test_update_streaming.TestCmdUpdateGatewayMode" name="test_gateway_flag_enables_gateway_prompt_for_stash" time="0.007" /><testcase classname="tests.gateway.test_update_streaming.TestCmdUpdateGatewayMode" name="test_gateway_flag_parsed" time="0.007" /><testcase classname="tests.gateway.test_usage_command.TestUsageCachedAgent" name="test_cached_agent_shows_detailed_usage" time="0.013" /><testcase classname="tests.gateway.test_usage_command.TestUsageCachedAgent" name="test_running_agent_preferred_over_cache" time="0.011" /><testcase classname="tests.gateway.test_usage_command.TestUsageCachedAgent" name="test_sentinel_skipped_uses_cache" time="0.015" /><testcase classname="tests.gateway.test_usage_command.TestUsageCachedAgent" name="test_no_agent_anywhere_falls_to_history" time="0.009" /><testcase classname="tests.gateway.test_usage_command.TestUsageCachedAgent" name="test_cache_read_write_hidden_when_zero" time="0.012" /><testcase classname="tests.gateway.test_usage_command.TestUsageCachedAgent" name="test_cost_included_status" time="0.013" /><testcase classname="tests.gateway.test_usage_command.TestUsageAccountSection" name="test_usage_command_includes_account_section" time="0.011" /><testcase classname="tests.gateway.test_usage_command.TestUsageAccountSection" name="test_usage_command_uses_persisted_provider_when_agent_not_running" time="0.010" /><testcase classname="tests.gateway.test_verbose_command.TestVerboseCommand" name="test_disabled_by_default" time="0.008" /><testcase classname="tests.gateway.test_verbose_command.TestVerboseCommand" name="test_enabled_cycles_mode" time="0.009" /><testcase classname="tests.gateway.test_verbose_command.TestVerboseCommand" name="test_quoted_false_keeps_command_disabled" time="0.010" /><testcase classname="tests.gateway.test_verbose_command.TestVerboseCommand" name="test_cycles_through_all_modes" time="0.010" /><testcase classname="tests.gateway.test_verbose_command.TestVerboseCommand" name="test_defaults_to_platform_default_when_no_tool_progress_set" time="0.008" /><testcase classname="tests.gateway.test_verbose_command.TestVerboseCommand" name="test_per_platform_isolation" time="0.008" /><testcase classname="tests.gateway.test_verbose_command.TestVerboseCommand" name="test_no_config_file_returns_disabled" time="0.007" /><testcase classname="tests.gateway.test_verbose_command.TestVerboseCommand" name="test_verbose_is_in_gateway_known_commands" time="0.006" /><testcase classname="tests.gateway.test_version_command" name="test_gateway_version_command_returns_release_line" time="0.130" /><testcase classname="tests.gateway.test_video_context_note" name="test_video_attachment_adds_path_note_without_document_wording" time="0.009" /><testcase classname="tests.gateway.test_vision_memory_leak.TestEnrichMessageWithVision" name="test_clean_description_passes_through" time="0.008" /><testcase classname="tests.gateway.test_vision_memory_leak.TestEnrichMessageWithVision" name="test_memory_context_fence_stripped" time="0.007" /><testcase classname="tests.gateway.test_vision_memory_leak.TestEnrichMessageWithVision" name="test_fenced_leak_stripped_plugin_header_preserved" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_voice_on" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_voice_off" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_voice_tts" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_voice_status_off" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_voice_status_on" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_toggle_off_to_on" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_toggle_on_to_off" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_persistence_saved" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_persistence_loaded" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_persistence_saved_for_off" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_sync_voice_mode_state_to_adapter_restores_off_chats" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_sync_populates_enabled_chats_from_voice_modes" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_sync_pushes_config_default_onto_adapter" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_restart_restores_voice_off_state" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_per_chat_isolation" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestHandleVoiceCommand" name="test_platform_isolation" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestAutoVoiceReply" name="test_voice_input_voice_only_skipped" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestAutoVoiceReply" name="test_voice_input_all_mode_skipped" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestAutoVoiceReply" name="test_text_input_all_mode_runner_fires" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestAutoVoiceReply" name="test_text_input_voice_only_no_reply" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestAutoVoiceReply" name="test_off_mode_voice" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestAutoVoiceReply" name="test_off_mode_text" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestAutoVoiceReply" name="test_discord_vc_voice_input_base_handles" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestAutoVoiceReply" name="test_discord_vc_voice_only_base_handles" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestAutoVoiceReply" name="test_error_response_skipped" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestAutoVoiceReply" name="test_empty_response_skipped" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestAutoVoiceReply" name="test_dedup_skips_when_agent_called_tts" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestAutoVoiceReply" name="test_no_dedup_for_other_tools" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestSendVoiceReply" name="test_calls_tts_and_send_voice" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestSendVoiceReply" name="test_non_telegram_auto_voice_reply_uses_mp3" time="0.010" /><testcase classname="tests.gateway.test_voice_command.TestSendVoiceReply" name="test_auto_voice_reply_uses_thread_metadata_helper" time="0.009" /><testcase classname="tests.gateway.test_voice_command.TestSendVoiceReply" name="test_empty_text_after_strip_skips" time="0.008" /><testcase classname="tests.gateway.test_voice_command.TestSendVoiceReply" name="test_tts_failure_no_crash" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestSendVoiceReply" name="test_exception_caught" time="0.011" /><testcase classname="tests.gateway.test_voice_command.TestDiscordPlayTtsSkip" name="test_play_tts_plays_in_vc_when_connected" time="0.009" /><testcase classname="tests.gateway.test_voice_command.TestDiscordPlayTtsSkip" name="test_play_tts_not_skipped_when_not_in_vc" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestDiscordPlayTtsSkip" name="test_play_tts_not_skipped_for_different_channel" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceInHelp" name="test_voice_in_help_output" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceInHelp" name="test_voice_is_known_command" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_initial_state" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_start_sets_running" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_stop_clears_state" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_map_ssrc" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_map_ssrc_overwrites" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_pause_resume" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_check_silence_empty" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_check_silence_returns_completed_utterance" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_check_silence_ignores_short_buffer" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_check_silence_ignores_recent_audio" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_check_silence_unknown_user_discarded" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_stale_buffer_discarded" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_on_packet_skips_when_not_running" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_on_packet_skips_when_paused" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_on_packet_skips_short_data" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiver" name="test_on_packet_skips_non_rtp" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_join_unsupported_platform" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_join_no_guild_id" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_join_user_not_in_vc" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_join_success" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_join_failure" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_join_exception" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_join_missing_voice_dependencies" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_leave_not_in_vc" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_leave_no_guild" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_leave_success" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_input_no_adapter" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_input_no_text_channel" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_input_creates_event_and_dispatches" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_input_reuses_bound_source_metadata" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_input_posts_transcript_in_text_channel" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_input_suppresses_duplicate_transcript" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_input_suppresses_near_duplicate_transcript" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_get_guild_id_from_guild" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_get_guild_id_from_interaction" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_get_guild_id_none" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelCommands" name="test_get_guild_id_dm" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_is_in_voice_channel_true" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_is_in_voice_channel_false_no_client" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_is_in_voice_channel_false_disconnected" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_leave_voice_channel_cleans_up" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_leave_voice_channel_no_connection" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_get_user_voice_channel_no_client" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_get_user_voice_channel_no_guild" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_get_user_voice_channel_user_not_in_vc" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_get_user_voice_channel_success" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_play_in_voice_channel_not_connected" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_is_allowed_user_empty_list" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_is_allowed_user_in_list" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_is_allowed_user_not_in_list" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_process_voice_input_success" time="0.009" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_process_voice_input_hallucination_filtered" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_process_voice_input_stt_failure" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestDiscordVoiceChannelMethods" name="test_process_voice_input_exception_caught" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiverThreadSafety" name="test_check_silence_holds_lock" time="0.009" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiverThreadSafety" name="test_on_packet_buffer_write_holds_lock" time="0.009" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReceiverThreadSafety" name="test_concurrent_buffer_access_safe" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestCallbackWiringOrder" name="test_callback_set_before_join" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestCallbackWiringOrder" name="test_join_failure_clears_callback" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestCallbackWiringOrder" name="test_join_returns_false_clears_callback" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestLeaveExceptionHandling" name="test_leave_exception_still_cleans_state" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestLeaveExceptionHandling" name="test_leave_clears_callback" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestAutoTtsEmptyTextGuard" name="test_empty_after_strip_skips_tts" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestAutoTtsEmptyTextGuard" name="test_code_block_response_skips_tts" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestAutoTtsEmptyTextGuard" name="test_base_empty_check_in_source" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestStreamTtsToSpeaker" name="test_none_sentinel_flushes_buffer" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestStreamTtsToSpeaker" name="test_stop_event_aborts_early" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestStreamTtsToSpeaker" name="test_done_event_set_on_exception" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestStreamTtsToSpeaker" name="test_think_blocks_stripped" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestStreamTtsToSpeaker" name="test_sentence_splitting" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestStreamTtsToSpeaker" name="test_markdown_stripped_in_speech" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestStreamTtsToSpeaker" name="test_duplicate_sentences_deduped" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestStreamTtsToSpeaker" name="test_no_api_key_display_only" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestStreamTtsToSpeaker" name="test_long_buffer_flushed_on_timeout" time="1.006" /><testcase classname="tests.gateway.test_voice_command.TestStopAcquiresLock" name="test_stop_clears_under_lock" time="0.314" /><testcase classname="tests.gateway.test_voice_command.TestStopAcquiresLock" name="test_stop_does_not_deadlock_with_on_packet" time="0.214" /><testcase classname="tests.gateway.test_voice_command.TestPacketDebugCounterIsInstanceLevel" name="test_counter_is_per_instance" time="0.012" /><testcase classname="tests.gateway.test_voice_command.TestPacketDebugCounterIsInstanceLevel" name="test_counter_initialized_in_init" time="0.008" /><testcase classname="tests.gateway.test_voice_command.TestPlayInVoiceChannelUsesRunningLoop" name="test_source_uses_get_running_loop" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestSendVoiceReplyFilename" name="test_filename_uses_uuid" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestSendVoiceReplyFilename" name="test_filenames_are_unique" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTimeoutCleansRunnerState" name="test_adapter_has_on_voice_disconnect_attr" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTimeoutCleansRunnerState" name="test_timeout_calls_disconnect_callback" time="0.009" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTimeoutCleansRunnerState" name="test_runner_cleanup_method_removes_voice_mode" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTimeoutCleansRunnerState" name="test_timeout_without_callback_does_not_crash" time="0.008" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTimeoutCleansRunnerState" name="test_timeout_skips_disconnect_when_voice_mode_off" time="0.008" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTimeoutCleansRunnerState" name="test_timeout_still_disconnects_when_voice_mode_active" time="0.008" /><testcase classname="tests.gateway.test_voice_command.TestPlaybackTimeout" name="test_source_has_wait_for_timeout" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestPlaybackTimeout" name="test_playback_timeout_constant_exists" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestPlaybackTimeout" name="test_playback_timeout_fires" time="0.109" /><testcase classname="tests.gateway.test_voice_command.TestPlaybackTimeout" name="test_is_playing_wait_has_timeout" time="0.416" /><testcase classname="tests.gateway.test_voice_command.TestSendVoiceReplyCleanup" name="test_cleanup_in_finally" time="0.012" /><testcase classname="tests.gateway.test_voice_command.TestSendVoiceReplyCleanup" name="test_files_cleaned_on_send_exception" time="0.009" /><testcase classname="tests.gateway.test_voice_command.TestAutoTtsTempFileCleanup" name="test_source_has_finally_remove" time="0.009" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelAwareness" name="test_returns_none_when_not_connected" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelAwareness" name="test_returns_none_when_vc_disconnected" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelAwareness" name="test_returns_info_with_members" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelAwareness" name="test_speaking_detection" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelAwareness" name="test_context_string_format" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceChannelAwareness" name="test_context_empty_when_not_connected" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestDisconnectVoiceCleanup" name="test_disconnect_clears_voice_state" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_known_ssrc_returns_completed" time="0.008" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_known_ssrc_short_buffer_ignored" time="0.008" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_known_ssrc_recent_audio_waits" time="0.008" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_unknown_ssrc_no_automap_no_completed" time="0.008" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_unknown_ssrc_late_speaking_event" time="0.008" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_automap_single_allowed_user" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_automap_multiple_allowed_users_no_map" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_automap_no_allowlist_single_member" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_automap_unallowed_user_rejected" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_automap_only_bot_in_channel" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_automap_persists_across_calls" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_stale_unknown_buffer_discarded" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_paused_receiver_ignores_packets" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_resumed_receiver_accepts_packets" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_on_packet_dave_known_user_decrypt_ok" time="0.009" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_on_packet_dave_unknown_ssrc_passthrough" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_on_packet_dave_unencrypted_error_passthrough" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_on_packet_dave_other_error_drops" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_on_packet_no_dave_direct_decode" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_on_packet_bot_own_ssrc_ignored" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceReception" name="test_on_packet_multiple_ssrcs_separate_buffers" time="0.007" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_play_tts_plays_in_vc" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_play_tts_fallback_when_not_in_vc" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_play_tts_wrong_channel_no_match" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_voice_input_runner_skips" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_text_input_voice_all_runner_fires" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_text_input_voice_off_no_tts" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_text_input_voice_only_no_tts" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_error_response_no_tts" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_empty_response_no_tts" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_agent_tts_tool_dedup" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_streaming_on_voice_input_runner_fires" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_streaming_on_text_input_runner_fires" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_streaming_on_voice_off_no_tts" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_streaming_on_empty_response_no_tts" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestVoiceTTSPlayback" name="test_streaming_on_agent_tts_dedup" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestUDPKeepalive" name="test_keepalive_interval_is_reasonable" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestUDPKeepalive" name="test_keepalive_sends_silence_frame" time="0.408" /><testcase classname="tests.gateway.test_voice_command.TestShouldAutoTtsForChat" name="test_default_false_no_override_suppresses" time="0.011" /><testcase classname="tests.gateway.test_voice_command.TestShouldAutoTtsForChat" name="test_default_true_no_override_fires" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestShouldAutoTtsForChat" name="test_explicit_enable_overrides_false_default" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestShouldAutoTtsForChat" name="test_explicit_disable_overrides_true_default" time="0.006" /><testcase classname="tests.gateway.test_voice_command.TestShouldAutoTtsForChat" name="test_enabled_wins_over_disabled" time="0.005" /><testcase classname="tests.gateway.test_voice_command.TestShouldAutoTtsForChat" name="test_per_chat_isolation" time="0.005" /><testcase classname="tests.gateway.test_voice_mode_platform_isolation.TestVoiceKeyHelper" name="test_voice_key_format" time="0.005" /><testcase classname="tests.gateway.test_voice_mode_platform_isolation.TestVoiceKeyHelper" name="test_voice_key_different_platforms_same_chat_id" time="0.005" /><testcase classname="tests.gateway.test_voice_mode_platform_isolation.TestVoiceModePlatformIsolation" name="test_telegram_and_slack_voice_mode_independent" time="0.005" /><testcase classname="tests.gateway.test_voice_mode_platform_isolation.TestLegacyKeyMigration" name="test_load_voice_modes_skips_legacy_keys" time="0.006" /><testcase classname="tests.gateway.test_voice_mode_platform_isolation.TestLegacyKeyMigration" name="test_load_voice_modes_preserves_prefixed_keys" time="0.006" /><testcase classname="tests.gateway.test_voice_mode_platform_isolation.TestLegacyKeyMigration" name="test_load_voice_modes_invalid_modes_filtered" time="0.006" /><testcase classname="tests.gateway.test_voice_mode_platform_isolation.TestSyncVoiceModeStateToAdapter" name="test_sync_only_includes_platform_chats" time="0.007" /><testcase classname="tests.gateway.test_voice_mode_platform_isolation.TestSyncVoiceModeStateToAdapter" name="test_sync_clears_existing_state" time="0.006" /><testcase classname="tests.gateway.test_voice_mode_platform_isolation.TestSyncVoiceModeStateToAdapter" name="test_sync_returns_early_without_platform" time="0.005" /><testcase classname="tests.gateway.test_voice_mode_platform_isolation.TestSyncVoiceModeStateToAdapter" name="test_sync_returns_early_without_auto_tts_disabled_chats" time="0.006" /><testcase classname="tests.gateway.test_weak_credential_guard.TestPlatformTokenPlaceholderGuard" name="test_rejects_triple_asterisk" time="0.006" /><testcase classname="tests.gateway.test_weak_credential_guard.TestPlatformTokenPlaceholderGuard" name="test_rejects_changeme" time="0.006" /><testcase classname="tests.gateway.test_weak_credential_guard.TestPlatformTokenPlaceholderGuard" name="test_rejects_your_api_key" time="0.006" /><testcase classname="tests.gateway.test_weak_credential_guard.TestPlatformTokenPlaceholderGuard" name="test_rejects_placeholder" time="0.006" /><testcase classname="tests.gateway.test_weak_credential_guard.TestPlatformTokenPlaceholderGuard" name="test_accepts_real_token" time="0.005" /><testcase classname="tests.gateway.test_weak_credential_guard.TestPlatformTokenPlaceholderGuard" name="test_accepts_empty_token_without_error" time="0.006" /><testcase classname="tests.gateway.test_weak_credential_guard.TestPlatformTokenPlaceholderGuard" name="test_disabled_platform_not_checked" time="0.006" /><testcase classname="tests.gateway.test_weak_credential_guard.TestPlatformTokenPlaceholderGuard" name="test_rejects_whitespace_padded_placeholder" time="0.006" /><testcase classname="tests.gateway.test_weak_credential_guard.TestAPIServerPlaceholderKeyGuard" name="test_refuses_wildcard_with_placeholder_key" time="0.007" /><testcase classname="tests.gateway.test_weak_credential_guard.TestAPIServerPlaceholderKeyGuard" name="test_refuses_wildcard_with_asterisk_key" time="0.006" /><testcase classname="tests.gateway.test_weak_credential_guard.TestAPIServerPlaceholderKeyGuard" name="test_allows_loopback_with_placeholder_key" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_github_signature_valid" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_github_signature_invalid" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_gitlab_token" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_gitlab_token_wrong" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_no_signature_with_secret_rejects" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_no_secret_allows_all" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_generic_signature_valid" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_svix_signature_valid" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_svix_signature_wrong_body_rejects" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_svix_signature_old_timestamp_rejects" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_svix_signature_multiple_entries_accepts_matching_v1" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_svix_signature_missing_signature_rejects" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_svix_signature_unsupported_version_rejects" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_svix_signature_invalid_whsec_rejects" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestValidateSignature" name="test_validate_svix_signature_raw_secret_valid" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestRenderPrompt" name="test_render_prompt_dot_notation" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestRenderPrompt" name="test_render_prompt_missing_key_preserved" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestRenderPrompt" name="test_render_prompt_no_template_dumps_json" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestRenderDeliveryExtra" name="test_render_delivery_extra_templates" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestEventFilter" name="test_event_filter_accepts_matching" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestEventFilter" name="test_event_filter_rejects_non_matching" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestEventFilter" name="test_event_filter_empty_allows_all" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestEventFilter" name="test_event_filter_accepts_payload_type_field" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestHTTPHandling" name="test_unknown_route_returns_404" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestHTTPHandling" name="test_webhook_handler_returns_202" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestHTTPHandling" name="test_route_without_secret_rejects_unsigned_request" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestHTTPHandling" name="test_health_endpoint" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestHTTPHandling" name="test_connect_starts_server" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestHTTPHandling" name="test_disconnect_cleans_up" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestIdempotency" name="test_duplicate_delivery_id_returns_200" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestIdempotency" name="test_expired_delivery_id_allows_reprocess" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestIdempotency" name="test_svix_id_used_as_delivery_id_for_deduplication" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestRateLimiting" name="test_rate_limit_rejects_excess" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestRateLimiting" name="test_rate_limit_window_resets" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestRateLimiting" name="test_rate_limit_prunes_incrementally_from_left" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestRateLimiting" name="test_seen_delivery_ttl_is_checked_per_delivery_without_full_prune" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestBodySize" name="test_oversized_payload_rejected" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuth" name="test_insecure_no_auth_skips_validation" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestSessionIsolation" name="test_concurrent_webhooks_get_independent_sessions" time="0.058" /><testcase classname="tests.gateway.test_webhook_adapter.TestDeliveryCleanup" name="test_delivery_info_survives_multiple_sends" time="0.010" /><testcase classname="tests.gateway.test_webhook_adapter.TestDeliveryCleanup" name="test_delivery_info_pruned_via_ttl" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestDeliveryCleanup" name="test_delivery_info_prune_uses_ordered_incremental_queue" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestCheckRequirements" name="test_returns_true_when_aiohttp_available" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestCheckRequirements" name="test_returns_false_without_aiohttp" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestRawTemplateToken" name="test_raw_resolves_to_full_json_payload" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestRawTemplateToken" name="test_raw_truncated_at_4000_chars" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestRawTemplateToken" name="test_raw_mixed_with_other_variables" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestDeliverCrossPlatformThreadId" name="test_thread_id_passed_as_metadata" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestDeliverCrossPlatformThreadId" name="test_message_thread_id_passed_as_thread_id" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestDeliverCrossPlatformThreadId" name="test_no_thread_id_sends_no_metadata" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_connect_rejects_insecure_no_auth_on_public_bind" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_connect_rejects_insecure_no_auth_on_lan_ip" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_connect_rejects_insecure_no_auth_on_empty_host" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_connect_allows_insecure_no_auth_on_loopback[127.0.0.1]" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_connect_allows_insecure_no_auth_on_loopback[localhost]" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_is_loopback_host_accepts[127.0.0.1]" time="0.007" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_is_loopback_host_accepts[localhost]" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_is_loopback_host_accepts[Localhost]" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_is_loopback_host_accepts[::1]" time="0.006" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_is_loopback_host_accepts[ip6-localhost]" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_is_loopback_host_accepts[ip6-loopback]" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_is_loopback_host_rejects[0.0.0.0]" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_is_loopback_host_rejects[192.168.1.5]" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_is_loopback_host_rejects[10.0.0.1]" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_is_loopback_host_rejects[example.com]" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_is_loopback_host_rejects[]" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_is_loopback_host_rejects[None]" time="0.005" /><testcase classname="tests.gateway.test_webhook_adapter.TestInsecureNoAuthSafetyRail" name="test_connect_allows_real_secret_on_public_bind" time="0.006" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDeliverOnlyBypassesAgent" name="test_post_delivers_directly_without_agent" time="0.058" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDeliverOnlyBypassesAgent" name="test_template_rendering_works" time="0.012" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDeliverOnlyBypassesAgent" name="test_thread_id_passed_through" time="0.008" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDeliverOnlyStatusCodes" name="test_delivery_failure_returns_502" time="0.008" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDeliverOnlyStatusCodes" name="test_delivery_exception_returns_502" time="0.008" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDeliverOnlyStatusCodes" name="test_target_platform_not_connected_returns_502" time="0.007" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDeliverOnlyStartupValidation" name="test_deliver_only_with_log_deliver_rejected" time="0.006" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDeliverOnlyStartupValidation" name="test_deliver_only_with_missing_deliver_rejected" time="0.006" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDeliverOnlyStartupValidation" name="test_deliver_only_with_real_target_accepted" time="0.006" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDeliverOnlySecurityInvariants" name="test_hmac_still_enforced" time="0.007" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDeliverOnlySecurityInvariants" name="test_idempotency_still_applies" time="0.007" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDeliverOnlySecurityInvariants" name="test_rate_limit_still_applies" time="0.008" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDirectDeliverUnit" name="test_dispatches_to_cross_platform_for_messaging_targets" time="0.006" /><testcase classname="tests.gateway.test_webhook_deliver_only.TestDirectDeliverUnit" name="test_dispatches_to_github_comment" time="0.006" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteLoading" name="test_no_dynamic_file" time="0.005" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteLoading" name="test_loads_dynamic_routes" time="0.006" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteLoading" name="test_static_takes_precedence" time="0.006" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteLoading" name="test_mtime_gated" time="0.056" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteLoading" name="test_file_removal_clears" time="0.010" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteLoading" name="test_corrupted_file" time="0.006" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteSecretValidation" name="test_empty_secret_rejected" time="0.006" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteSecretValidation" name="test_missing_secret_no_global_rejected" time="0.006" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteSecretValidation" name="test_missing_secret_inherits_global" time="0.005" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteSecretValidation" name="test_insecure_no_auth_preserved" time="0.005" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteSecretValidation" name="test_insecure_no_auth_rejected_on_non_loopback_bind" time="0.006" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteSecretValidation" name="test_warning_logged_on_skip" time="0.006" /><testcase classname="tests.gateway.test_webhook_dynamic_routes.TestDynamicRouteSecretValidation" name="test_partial_skip" time="0.006" /><testcase classname="tests.gateway.test_webhook_integration.TestGitHubPRWebhook" name="test_github_pr_webhook_triggers_agent" time="0.058" /><testcase classname="tests.gateway.test_webhook_integration.TestSkillsInjection" name="test_skills_injected_into_prompt" time="0.063" /><testcase classname="tests.gateway.test_webhook_integration.TestCrossPlatformDelivery" name="test_cross_platform_delivery" time="0.012" /><testcase classname="tests.gateway.test_webhook_integration.TestGitHubCommentDelivery" name="test_github_comment_delivery" time="0.008" /><testcase classname="tests.gateway.test_webhook_signature_rate_limit.TestSignatureBeforeRateLimit" name="test_invalid_signature_does_not_consume_rate_limit" time="0.008" /><testcase classname="tests.gateway.test_webhook_signature_rate_limit.TestSignatureBeforeRateLimit" name="test_valid_signature_still_rate_limited" time="0.008" /><testcase classname="tests.gateway.test_webhook_signature_rate_limit.TestSignatureBeforeRateLimit" name="test_mixed_valid_and_invalid_signatures" time="0.011" /><testcase classname="tests.gateway.test_wecom.TestWeComRequirements" name="test_returns_false_without_aiohttp" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestWeComRequirements" name="test_returns_false_without_httpx" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestWeComRequirements" name="test_returns_true_when_available" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestWeComAdapterInit" name="test_declares_non_editable_message_capability" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestWeComAdapterInit" name="test_reads_config_from_extra" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestWeComAdapterInit" name="test_falls_back_to_env_vars" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestWeComConnect" name="test_connect_records_missing_credentials" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestWeComConnect" name="test_connect_records_handshake_failure_details" time="0.007" /><testcase classname="tests.gateway.test_wecom.TestWeComQrScan" name="test_qr_scan_timeout_uses_monotonic_clock" time="0.007" /><testcase classname="tests.gateway.test_wecom.TestWeComReplyMode" name="test_send_uses_passive_reply_markdown_when_reply_context_exists" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestWeComReplyMode" name="test_send_image_file_uses_passive_reply_media_when_reply_context_exists" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestExtractText" name="test_extracts_plain_text" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestExtractText" name="test_extracts_mixed_text" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestExtractText" name="test_extracts_voice_and_quote" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestCallbackDispatch" name="test_dispatch_accepts_new_and_legacy_callback_cmds[aibot_msg_callback]" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestCallbackDispatch" name="test_dispatch_accepts_new_and_legacy_callback_cmds[aibot_callback]" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestPolicyHelpers" name="test_dm_allowlist" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestPolicyHelpers" name="test_dm_allowlist_honors_env_only_allowed_users" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestPolicyHelpers" name="test_dm_allowlist_extra_takes_precedence_over_env" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestPolicyHelpers" name="test_group_allowlist_and_per_group_sender_allowlist" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestMediaHelpers" name="test_detect_wecom_media_type" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestMediaHelpers" name="test_voice_non_amr_downgrades_to_file" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestMediaHelpers" name="test_oversized_file_is_rejected" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestMediaHelpers" name="test_decrypt_file_bytes_round_trip" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestMediaHelpers" name="test_load_outbound_media_rejects_placeholder_path" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestMediaUpload" name="test_upload_media_bytes_uses_sdk_sequence" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestMediaUpload" name="test_download_remote_bytes_rejects_large_content_length" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestMediaUpload" name="test_cache_media_decrypts_url_payload_before_writing" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestSend" name="test_send_uses_proactive_payload" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestSend" name="test_send_reports_wecom_errors" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestSend" name="test_send_image_falls_back_to_text_for_remote_url" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestSend" name="test_send_voice_sends_caption_and_downgrade_note" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestInboundMessages" name="test_on_message_builds_event" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestInboundMessages" name="test_on_message_preserves_quote_context" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestInboundMessages" name="test_on_message_respects_group_policy" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestWeComZombieSessionFix" name="test_adapter_generates_stable_device_id_per_instance" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestWeComZombieSessionFix" name="test_different_adapter_instances_get_distinct_device_ids" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestWeComZombieSessionFix" name="test_open_connection_includes_device_id_in_subscribe" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestWeComZombieSessionFix" name="test_on_message_caches_last_req_id_per_chat" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestWeComZombieSessionFix" name="test_on_message_does_not_cache_blocked_sender_req_id" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestWeComZombieSessionFix" name="test_remember_chat_req_id_is_bounded" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestWeComZombieSessionFix" name="test_remember_chat_req_id_ignores_empty_values" time="0.005" /><testcase classname="tests.gateway.test_wecom.TestWeComZombieSessionFix" name="test_proactive_group_send_falls_back_to_cached_req_id" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestWeComZombieSessionFix" name="test_proactive_send_without_cached_req_id_uses_app_cmd_send" time="0.006" /><testcase classname="tests.gateway.test_wecom.TestTextBatchFlushRace" name="test_superseded_task_does_not_pop_or_process_event" time="0.056" /><testcase classname="tests.gateway.test_wecom.TestTextBatchFlushRace" name="test_active_task_processes_event_normally" time="0.061" /><testcase classname="tests.gateway.test_wecom_callback.TestWecomCrypto" name="test_roundtrip_encrypt_decrypt" time="0.011" /><testcase classname="tests.gateway.test_wecom_callback.TestWecomCrypto" name="test_signature_mismatch_raises" time="0.008" /><testcase classname="tests.gateway.test_wecom_callback.TestWecomCallbackEventConstruction" name="test_build_event_extracts_text_message" time="0.008" /><testcase classname="tests.gateway.test_wecom_callback.TestWecomCallbackEventConstruction" name="test_build_event_returns_none_for_subscribe" time="0.007" /><testcase classname="tests.gateway.test_wecom_callback.TestWecomCallbackRouting" name="test_user_app_key_scopes_across_corps" time="0.006" /><testcase classname="tests.gateway.test_wecom_callback.TestWecomCallbackRouting" name="test_send_selects_correct_app_for_scoped_chat_id" time="0.006" /><testcase classname="tests.gateway.test_wecom_callback.TestWecomCallbackRouting" name="test_send_falls_back_from_bare_user_id_when_unique" time="0.007" /><testcase classname="tests.gateway.test_wecom_callback.TestWecomCallbackSendTokenRefresh" name="test_send_retries_with_fresh_token_on_errcode_40001" time="0.007" /><testcase classname="tests.gateway.test_wecom_callback.TestWecomCallbackSendTokenRefresh" name="test_send_retries_with_fresh_token_on_errcode_42001" time="0.006" /><testcase classname="tests.gateway.test_wecom_callback.TestWecomCallbackSendTokenRefresh" name="test_send_does_not_retry_on_non_token_errcode" time="0.006" /><testcase classname="tests.gateway.test_wecom_callback.TestWecomCallbackSendTokenRefresh" name="test_send_fails_cleanly_when_retry_also_fails" time="0.006" /><testcase classname="tests.gateway.test_wecom_callback.TestWecomCallbackPollLoop" name="test_poll_loop_dispatches_handle_message" time="0.056" /><testcase classname="tests.gateway.test_weixin.TestWeixinFormatting" name="test_format_message_preserves_markdown" time="0.009" /><testcase classname="tests.gateway.test_weixin.TestWeixinFormatting" name="test_format_message_preserves_markdown_tables" time="0.008" /><testcase classname="tests.gateway.test_weixin.TestWeixinFormatting" name="test_format_message_preserves_fenced_code_blocks" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinFormatting" name="test_format_message_wraps_long_plain_lines_for_copying" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinFormatting" name="test_format_message_does_not_wrap_long_code_block_lines" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinFormatting" name="test_format_message_returns_empty_string_for_none" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunking" name="test_split_text_splits_short_chatty_replies_into_separate_bubbles" time="0.008" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunking" name="test_split_text_keeps_structured_table_block_together" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunking" name="test_split_text_keeps_four_line_structured_blocks_together" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunking" name="test_split_text_keeps_heading_with_body_together" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunking" name="test_split_text_keeps_short_reformatted_table_in_single_chunk" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunking" name="test_split_text_keeps_complete_code_block_together_when_possible" time="0.005" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunking" name="test_split_text_safely_splits_long_code_blocks" time="0.005" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunking" name="test_split_text_can_restore_legacy_multiline_splitting_via_config" time="0.005" /><testcase classname="tests.gateway.test_weixin.TestWeixinConfig" name="test_apply_env_overrides_configures_weixin" time="0.053" /><testcase classname="tests.gateway.test_weixin.TestWeixinConfig" name="test_get_connected_platforms_includes_weixin_with_token" time="0.009" /><testcase classname="tests.gateway.test_weixin.TestWeixinConfig" name="test_get_connected_platforms_requires_account_id" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinStatePersistence" name="test_save_weixin_account_preserves_existing_file_on_replace_failure" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinStatePersistence" name="test_context_token_persist_preserves_existing_file_on_replace_failure" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinStatePersistence" name="test_save_sync_buf_preserves_existing_file_on_replace_failure" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinQrLogin" name="test_qr_login_timeout_uses_monotonic_clock" time="1.016" /><testcase classname="tests.gateway.test_weixin.TestWeixinSendMessageIntegration" name="test_parse_target_ref_accepts_weixin_ids" time="0.012" /><testcase classname="tests.gateway.test_weixin.TestWeixinSendMessageIntegration" name="test_send_to_platform_routes_weixin_media_to_native_helper" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunkDelivery" name="test_send_waits_between_multiple_chunks" time="0.008" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunkDelivery" name="test_send_retries_failed_chunk_before_continuing" time="0.009" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunkDelivery" name="test_repeated_rate_limits_open_circuit_for_followup_sends" time="0.008" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunkDelivery" name="test_open_rate_limit_circuit_fails_fast_without_sendmessage" time="0.008" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunkDelivery" name="test_successful_send_after_cooldown_resets_rate_limit_state" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinChunkDelivery" name="test_concurrent_rate_limited_sends_are_serialized_by_gate" time="0.012" /><testcase classname="tests.gateway.test_weixin.TestWeixinOutboundMedia" name="test_send_image_file_accepts_keyword_image_path" time="0.008" /><testcase classname="tests.gateway.test_weixin.TestWeixinOutboundMedia" name="test_send_document_accepts_keyword_file_path" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinOutboundMedia" name="test_send_file_uses_post_for_upload_full_url_and_hex_encoded_aes_key" time="0.008" /><testcase classname="tests.gateway.test_weixin.TestWeixinRemoteMediaSafety" name="test_download_remote_media_blocks_unsafe_urls" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinMarkdownLinks" name="test_format_message_preserves_markdown_links" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinMarkdownLinks" name="test_format_message_preserves_links_inside_code_blocks" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinBlankMessagePrevention" name="test_split_text_returns_empty_list_for_empty_string" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinBlankMessagePrevention" name="test_split_text_returns_empty_list_for_empty_string_split_per_line" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinBlankMessagePrevention" name="test_send_empty_content_does_not_call_send_message" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinBlankMessagePrevention" name="test_send_message_rejects_empty_text" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinStreamingCursorSuppression" name="test_supports_message_editing_is_false" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinMediaBuilder" name="test_image_builder_aes_key_is_base64_of_hex" time="0.005" /><testcase classname="tests.gateway.test_weixin.TestWeixinMediaBuilder" name="test_video_builder_includes_md5" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinMediaBuilder" name="test_voice_builder_for_audio_files_uses_file_attachment_type" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinMediaBuilder" name="test_voice_builder_for_silk_files" time="0.005" /><testcase classname="tests.gateway.test_weixin.TestWeixinSendImageFileParameterName" name="test_send_image_file_uses_image_path_parameter" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinSendImageFileParameterName" name="test_send_image_file_works_without_optional_params" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinVoiceSending" name="test_send_voice_downgrades_to_document_attachment" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinVoiceSending" name="test_voice_builder_for_silk_files_can_be_forced_to_file_attachment" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinVoiceSending" name="test_send_file_sets_voice_metadata_for_silk_payload" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestIsStaleSessionRet" name="test_ret_minus_2_with_unknown_error_is_stale" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestIsStaleSessionRet" name="test_errcode_minus_2_with_unknown_error_is_stale" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestIsStaleSessionRet" name="test_unknown_error_case_insensitive" time="0.005" /><testcase classname="tests.gateway.test_weixin.TestIsStaleSessionRet" name="test_ret_minus_2_with_freq_limit_is_not_stale" time="0.005" /><testcase classname="tests.gateway.test_weixin.TestIsStaleSessionRet" name="test_ret_minus_2_with_no_errmsg_is_not_stale" time="0.005" /><testcase classname="tests.gateway.test_weixin.TestIsStaleSessionRet" name="test_errcode_minus_14_is_not_matched_here" time="0.005" /><testcase classname="tests.gateway.test_weixin.TestIsStaleSessionRet" name="test_success_codes_are_not_stale" time="0.005" /><testcase classname="tests.gateway.test_weixin.TestWeixinContentDedup" name="test_duplicate_content_with_different_message_ids_is_dropped" time="0.207" /><testcase classname="tests.gateway.test_weixin.TestWeixinContentDedup" name="test_content_dedup_not_called_for_messages_without_text" time="0.011" /><testcase classname="tests.gateway.test_weixin.TestWeixinTextDebounce" name="test_batch_delays_default_from_config" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinTextDebounce" name="test_batch_delays_overridden_via_config_extra" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinTextDebounce" name="test_invalid_config_value_falls_back_to_default" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinTextDebounce" name="test_rapid_texts_collapse_into_single_dispatch" time="0.207" /><testcase classname="tests.gateway.test_weixin.TestWeixinApiTimeout" name="test_api_post_does_not_pass_aiohttp_timeout_kwarg" time="0.012" /><testcase classname="tests.gateway.test_weixin.TestWeixinApiTimeout" name="test_api_get_does_not_pass_aiohttp_timeout_kwarg" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinApiTimeout" name="test_api_post_raises_timeout_when_response_is_slow" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinApiTimeout" name="test_api_get_raises_timeout_when_response_is_slow" time="0.007" /><testcase classname="tests.gateway.test_weixin.TestWeixinApiTimeout" name="test_api_post_raises_runtime_error_on_non_ok_status" time="0.006" /><testcase classname="tests.gateway.test_weixin.TestWeixinApiTimeout" name="test_api_get_raises_runtime_error_on_non_ok_status" time="0.005" /><testcase classname="tests.gateway.test_weixin.TestWeixinApiTimeout" name="test_get_updates_returns_empty_sentinel_on_timeout" time="0.006" /><testcase classname="tests.gateway.test_weixin_typing.TestEnsureTypingTicket" name="test_returns_cached_ticket_when_fresh" time="0.006" /><testcase classname="tests.gateway.test_weixin_typing.TestEnsureTypingTicket" name="test_refreshes_when_ticket_expired" time="0.006" /><testcase classname="tests.gateway.test_weixin_typing.TestEnsureTypingTicket" name="test_refreshes_when_no_cached_ticket" time="0.006" /><testcase classname="tests.gateway.test_weixin_typing.TestEnsureTypingTicket" name="test_uses_stored_context_token_when_available" time="0.006" /><testcase classname="tests.gateway.test_weixin_typing.TestEnsureTypingTicket" name="test_returns_none_when_no_session" time="0.006" /><testcase classname="tests.gateway.test_weixin_typing.TestEnsureTypingTicket" name="test_returns_none_when_getconfig_fails" time="0.006" /><testcase classname="tests.gateway.test_weixin_typing.TestEnsureTypingTicket" name="test_returns_none_when_getconfig_returns_empty_ticket" time="0.006" /><testcase classname="tests.gateway.test_weixin_typing.TestEnsureTypingTicket" name="test_stop_typing_refreshes_ticket" time="0.006" /><testcase classname="tests.gateway.test_weixin_typing.TestEnsureTypingTicket" name="test_send_typing_refreshes_ticket" time="0.007" /><testcase classname="tests.gateway.test_weixin_typing.TestTypingTicketCache" name="test_returns_ticket_when_fresh" time="0.006" /><testcase classname="tests.gateway.test_weixin_typing.TestTypingTicketCache" name="test_returns_none_when_expired" time="0.006" /><testcase classname="tests.gateway.test_weixin_typing.TestTypingTicketCache" name="test_returns_none_when_missing" time="0.005" /><testcase classname="tests.gateway.test_weixin_typing.TestTypingTicketCache" name="test_expired_entry_is_removed_from_cache" time="0.005" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendText" name="test_send_builds_correct_url" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendText" name="test_send_includes_bearer_auth" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendText" name="test_send_payload_shape" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendText" name="test_send_returns_wamid" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendText" name="test_send_applies_markdown_conversion" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendText" name="test_send_reply_to_attaches_context_first_chunk_only" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendText" name="test_send_long_message_chunked" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendText" name="test_send_graph_error_returns_failure" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendText" name="test_send_empty_content_no_request" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendText" name="test_send_not_connected_returns_failure" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendText" name="test_send_network_exception_returns_failure" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookVerify" name="test_verify_echoes_challenge_on_match" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookVerify" name="test_verify_rejects_token_mismatch" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookVerify" name="test_verify_rejects_wrong_mode" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookVerify" name="test_verify_rejects_missing_challenge" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookVerify" name="test_verify_refuses_when_token_unconfigured" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookSignature" name="test_valid_signature_accepted" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookSignature" name="test_tampered_body_rejected" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookSignature" name="test_missing_signature_header_rejected" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookSignature" name="test_wrong_signature_format_rejected" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookSignature" name="test_unconfigured_app_secret_refuses_503" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookSignature" name="test_signature_uses_constant_time_compare" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookSignature" name="test_oversize_body_rejected_before_signature" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookSignature" name="test_unreadable_body_rejected" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookReplay" name="test_duplicate_wamid_not_redispatched" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookReplay" name="test_dedup_cache_evicts_oldest" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookReplay" name="test_dedup_no_wamid_lets_through" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookDispatch" name="test_text_message_dispatched_with_event_shape" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookDispatch" name="test_dispatch_filters_via_mixin_gating" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookDispatch" name="test_dispatch_handler_exception_does_not_crash" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookDispatch" name="test_dispatch_ignores_non_message_field" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookDispatch" name="test_dispatch_ignores_non_waba_object" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookDispatch" name="test_dispatch_handles_button_reply" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookDispatch" name="test_dispatch_propagates_reply_to" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestWebhookDispatch" name="test_invalid_json_after_signature_returns_400" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestHealth" name="test_health_reports_config_visibility" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestHealth" name="test_health_flags_missing_secrets" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestMixinInherited" name="test_format_message_converts_markdown" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestMixinInherited" name="test_should_process_message_dm_open" time="0.005" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestMixinInherited" name="test_should_process_message_dm_disabled" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestMixinInherited" name="test_broadcast_chats_filtered" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendImage" name="test_send_image_link_mode_skips_upload" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendImage" name="test_send_image_local_path_uploads_then_sends" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendImage" name="test_send_image_caption_attached" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendImage" name="test_send_image_oversize_rejected_locally" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendImage" name="test_send_image_missing_local_file_returns_failure" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendImage" name="test_send_image_upload_failure_returns_failure" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendVideo" name="test_send_video_link_mode" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendMethodsAcceptBaseClassKwargs" name="test_send_image_accepts_metadata" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendMethodsAcceptBaseClassKwargs" name="test_send_image_file_accepts_metadata" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendMethodsAcceptBaseClassKwargs" name="test_send_video_accepts_metadata" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendMethodsAcceptBaseClassKwargs" name="test_send_voice_accepts_metadata" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendMethodsAcceptBaseClassKwargs" name="test_send_document_accepts_metadata" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendDocument" name="test_send_document_filename_attached" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendVoice" name="test_send_voice_no_ffmpeg_falls_back_to_mp3" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendVoice" name="test_send_voice_ffmpeg_present_uses_opus" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendVoice" name="test_warn_once_no_ffmpeg_actually_only_warns_once" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDownloadMedia" name="test_two_step_download_writes_cache_file" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDownloadMedia" name="test_metadata_failure_returns_none" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDownloadMedia" name="test_bytes_failure_returns_none" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDownloadMedia" name="test_metadata_includes_auth_header" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDownloadMedia" name="test_extension_overrides_for_real_world_mimes[audio/ogg-.ogg]" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDownloadMedia" name="test_extension_overrides_for_real_world_mimes[audio/ogg; codecs=opus-.ogg]" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDownloadMedia" name="test_extension_overrides_for_real_world_mimes[audio/x-opus+ogg-.ogg]" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDownloadMedia" name="test_extension_overrides_for_real_world_mimes[audio/opus-.ogg]" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDownloadMedia" name="test_extension_overrides_for_real_world_mimes[audio/mp4-.m4a]" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDownloadMedia" name="test_extension_overrides_for_real_world_mimes[audio/x-m4a-.m4a]" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDownloadMedia" name="test_extension_overrides_for_real_world_mimes[image/jpeg-.jpg]" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestInboundMediaDispatch" name="test_inbound_image_populates_media_urls" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestInboundMediaDispatch" name="test_inbound_text_document_injected_into_body" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestInboundMediaDispatch" name="test_inbound_image_download_failure_still_dispatches" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestGroupMessageGuard" name="test_group_shaped_message_dropped_with_warning" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestGroupMessageGuard" name="test_normal_dm_still_dispatches" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendClarifyButtons" name="test_three_choices_uses_button_mode" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendClarifyButtons" name="test_four_choices_promoted_to_list_mode" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendClarifyButtons" name="test_open_ended_falls_back_to_plain_text" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendClarifyButtons" name="test_send_failure_does_not_register_state" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendExecApprovalButtons" name="test_approval_renders_two_buttons" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendExecApprovalButtons" name="test_long_command_is_truncated" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendSlashConfirmButtons" name="test_three_buttons_with_ids" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDispatchInteractiveReplyClarify" name="test_clarify_tap_resolves_and_pops_state" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDispatchInteractiveReplyClarify" name="test_clarify_other_button_keeps_state_and_prompts" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDispatchInteractiveReplyClarify" name="test_clarify_other_with_no_entry_falls_back" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDispatchInteractiveReplyClarify" name="test_stale_clarify_tap_falls_back_to_text" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDispatchInteractiveReplyClarify" name="test_clarify_resolver_no_waiter_falls_back" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDispatchInteractiveReplyApproval" name="test_approve_tap_calls_resolver_and_confirms" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDispatchInteractiveReplyApproval" name="test_deny_tap_passes_deny_choice" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestDispatchInteractiveReplySlashConfirm" name="test_once_tap_calls_resolver" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestInteractiveReplyEndToEnd" name="test_recognized_tap_returns_none_no_text_dispatch" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestInteractiveReplyEndToEnd" name="test_unrecognized_tap_falls_through_to_text" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestInboundWamidCache" name="test_accepted_message_populates_cache" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestInboundWamidCache" name="test_subsequent_messages_overwrite_cache" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestInboundWamidCache" name="test_filtered_message_does_not_pollute_cache" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendTyping" name="test_send_typing_posts_correct_payload" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendTyping" name="test_send_typing_uses_latest_cached_wamid" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendTyping" name="test_send_typing_no_cached_wamid_is_noop" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendTyping" name="test_send_typing_swallows_network_errors" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendTyping" name="test_send_typing_stale_message_logged_at_info" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendTyping" name="test_send_typing_no_http_client_is_noop" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestSendTyping" name="test_send_typing_includes_bearer_auth" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestAllowlistNormalization" name="test_normalize_allow_ids_strips_jid_suffix_and_punctuation" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestAllowlistNormalization" name="test_dm_allowlist_matches_bare_wa_id_against_jid_entry" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestAllowlistNormalization" name="test_cloud_env_overrides_take_precedence" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestBoundedInteractiveState" name="test_bounded_put_evicts_oldest" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_cloud.TestMediaIdValidation" name="test_traversal_media_id_refused" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_connect.TestCloseBridgeLog" name="test_closes_open_handle" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_connect.TestCloseBridgeLog" name="test_noop_when_no_handle" time="0.005" /><testcase classname="tests.gateway.test_whatsapp_connect.TestCloseBridgeLog" name="test_suppresses_close_exception" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_connect.TestDataInitialized" name="test_no_name_error_when_json_always_fails" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_connect.TestFileHandleClosedOnError" name="test_closed_when_bridge_dies_phase1" time="0.009" /><testcase classname="tests.gateway.test_whatsapp_connect.TestConnectCleanup" name="test_releases_lock_when_npm_install_fails" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_connect.TestBridgeRuntimeFailure" name="test_send_marks_retryable_fatal_when_managed_bridge_exits" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_connect.TestBridgeRuntimeFailure" name="test_poll_messages_marks_retryable_fatal_when_managed_bridge_exits" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_connect.TestBridgeRuntimeFailure" name="test_shutdown_suppresses_fatal_on_planned_bridge_exit[0]" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_connect.TestBridgeRuntimeFailure" name="test_shutdown_suppresses_fatal_on_planned_bridge_exit[-2]" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_connect.TestBridgeRuntimeFailure" name="test_shutdown_suppresses_fatal_on_planned_bridge_exit[-15]" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_connect.TestBridgeRuntimeFailure" name="test_shutdown_still_surfaces_nonzero_crash" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_connect.TestBridgeRuntimeFailure" name="test_closed_when_http_not_ready" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_connect.TestBridgeRuntimeFailure" name="test_closed_when_bridge_dies_phase2" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_connect.TestBridgeRuntimeFailure" name="test_closed_on_unexpected_exception" time="1.010" /><testcase classname="tests.gateway.test_whatsapp_connect.TestKillPortProcess" name="test_uses_netstat_and_taskkill_on_windows" time="0.012" /><testcase classname="tests.gateway.test_whatsapp_connect.TestKillPortProcess" name="test_does_not_kill_wrong_port_on_windows" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_connect.TestKillPortProcess" name="test_uses_fuser_on_linux" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_connect.TestKillPortProcess" name="test_skips_fuser_kill_when_port_free" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_connect.TestKillPortProcess" name="test_suppresses_exceptions" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_connect.TestHttpSessionLifecycle" name="test_disconnect_uses_taskkill_tree_on_windows" time="0.010" /><testcase classname="tests.gateway.test_whatsapp_connect.TestHttpSessionLifecycle" name="test_session_closed_on_disconnect" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_connect.TestHttpSessionLifecycle" name="test_session_not_closed_when_already_closed" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_connect.TestHttpSessionLifecycle" name="test_poll_task_cancelled_on_disconnect" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_connect.TestHttpSessionLifecycle" name="test_disconnect_skips_done_poll_task" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_connect.TestNoCredsPreflight" name="test_connect_returns_false_when_no_creds" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_connect.TestNoCredsPreflight" name="test_connect_proceeds_when_creds_present" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestFormatMessage" name="test_bold_double_asterisk" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestFormatMessage" name="test_bold_double_underscore" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestFormatMessage" name="test_strikethrough" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestFormatMessage" name="test_headers_converted_to_bold" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestFormatMessage" name="test_bold_header_does_not_double_wrap" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestFormatMessage" name="test_links_converted" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestFormatMessage" name="test_code_blocks_protected" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestFormatMessage" name="test_inline_code_protected" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestFormatMessage" name="test_empty_content" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestFormatMessage" name="test_plain_text_unchanged" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestFormatMessage" name="test_already_whatsapp_italic" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestFormatMessage" name="test_multiline_mixed" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestMessageLimits" name="test_max_message_length_is_practical" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestMessageLimits" name="test_chunk_limit_reserves_default_self_chat_prefix" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestMessageLimits" name="test_chunk_limit_does_not_reserve_prefix_in_bot_mode" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestSendChunking" name="test_short_message_single_send" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestSendChunking" name="test_long_message_chunked" time="0.608" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestSendChunking" name="test_chunks_leave_room_for_bridge_prefix" time="0.615" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestSendChunking" name="test_empty_message_no_send" time="0.012" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestSendChunking" name="test_whitespace_only_no_send" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestSendChunking" name="test_format_applied_before_send" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestSendChunking" name="test_reply_to_only_on_first_chunk" time="0.910" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestSendChunking" name="test_bridge_error_returns_failure" time="0.013" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestSendChunking" name="test_not_connected_returns_failure" time="0.009" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestBridgeEventMetadata" name="test_quoted_reply_metadata_is_preserved_in_raw_message" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestWhatsAppTier" name="test_whatsapp_streaming_follows_global" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_formatting.TestWhatsAppTier" name="test_whatsapp_tool_progress_is_new" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_group_messages_can_be_opened_via_config" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_group_messages_can_require_direct_trigger_via_config" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_regex_mention_patterns_allow_custom_wake_words" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_invalid_regex_patterns_are_ignored" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_config_bridges_whatsapp_group_settings" time="0.066" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_free_response_chats_bypass_mention_gating" time="0.012" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_free_response_chats_does_not_bypass_other_groups" time="0.009" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_dm_passes_with_default_open_policy" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_mention_stripping_removes_bot_phone_from_body" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_mention_stripping_preserves_body_when_no_mention" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_dm_policy_disabled_blocks_all_dms" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_dm_policy_disabled_still_allows_groups" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_dm_policy_allowlist_blocks_unlisted_sender" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_dm_policy_allowlist_allows_listed_sender" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_dm_policy_open_allows_all_dms" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_group_policy_disabled_blocks_all_groups" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_group_policy_disabled_still_allows_dms" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_group_policy_allowlist_blocks_unlisted_group" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_group_policy_allowlist_allows_listed_group" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_group_policy_open_allows_all_groups" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_config_bridges_whatsapp_dm_and_group_policy" time="0.052" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_config_bridges_whatsapp_allow_from" time="0.055" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_status_broadcast_chats_are_always_dropped" time="0.010" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_broadcast_filter_runs_before_allowlist" time="0.009" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_real_dm_still_processed_after_broadcast_filter" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_group_gating" name="test_is_broadcast_chat_helper_recognizes_common_jids" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_reply_prefix.TestConfigYamlBridging" name="test_reply_prefix_bridged_from_yaml" time="0.053" /><testcase classname="tests.gateway.test_whatsapp_reply_prefix.TestConfigYamlBridging" name="test_empty_reply_prefix_bridged" time="0.057" /><testcase classname="tests.gateway.test_whatsapp_reply_prefix.TestConfigYamlBridging" name="test_no_whatsapp_section_no_extra" time="0.056" /><testcase classname="tests.gateway.test_whatsapp_reply_prefix.TestConfigYamlBridging" name="test_whatsapp_section_without_reply_prefix" time="0.056" /><testcase classname="tests.gateway.test_whatsapp_reply_prefix.TestAdapterInit" name="test_reply_prefix_from_extra" time="0.010" /><testcase classname="tests.gateway.test_whatsapp_reply_prefix.TestAdapterInit" name="test_reply_prefix_default_none" time="0.009" /><testcase classname="tests.gateway.test_whatsapp_reply_prefix.TestAdapterInit" name="test_reply_prefix_empty_string" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_reply_prefix.TestConfigVersionCoverage" name="test_default_config_version_covers_env_var_versions" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_stale_bridge.TestFileContentHash" name="test_hashes_file" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_stale_bridge.TestFileContentHash" name="test_changes_with_content" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_stale_bridge.TestFileContentHash" name="test_missing_file_returns_empty" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_stale_bridge.TestFileContentHash" name="test_matches_bridge_js_self_hash_algorithm" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_stale_bridge.TestStaleBridgeHandshake" name="test_reuses_bridge_when_hash_matches" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_stale_bridge.TestStaleBridgeHandshake" name="test_restarts_bridge_on_hash_mismatch" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_stale_bridge.TestStaleBridgeHandshake" name="test_restarts_unversioned_bridge" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_stale_bridge.TestDepRefreshStamp" name="test_skips_install_when_stamp_fresh" time="0.007" /><testcase classname="tests.gateway.test_whatsapp_stale_bridge.TestDepRefreshStamp" name="test_reinstalls_when_package_json_changed" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_stale_bridge.TestDepRefreshStamp" name="test_installs_when_node_modules_missing" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_stale_bridge.TestCacheDirEnvPassthrough" name="test_bridge_spawn_env_has_cache_dirs" time="0.008" /><testcase classname="tests.gateway.test_whatsapp_text_batching" name="test_batch_delays_default_from_config" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_text_batching" name="test_batch_delays_overridden_via_config_extra" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_text_batching" name="test_invalid_config_value_falls_back_to_default" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_text_batching" name="test_env_var_is_ignored" time="0.006" /><testcase classname="tests.gateway.test_whatsapp_text_batching" name="test_rapid_texts_collapse_into_single_dispatch" time="0.207" /><testcase classname="tests.gateway.test_whatsapp_text_batching" name="test_lone_message_dispatched_alone" time="0.212" /><testcase classname="tests.gateway.test_ws_auth_retry.TestMattermostWSAuthRetry" name="test_401_handshake_stops_reconnect" time="0.010" /><testcase classname="tests.gateway.test_ws_auth_retry.TestMattermostWSAuthRetry" name="test_403_handshake_stops_reconnect" time="0.007" /><testcase classname="tests.gateway.test_ws_auth_retry.TestMattermostWSAuthRetry" name="test_transient_error_retries" time="0.006" /><testcase classname="tests.gateway.test_ws_auth_retry.TestMatrixSyncAuthRetry" name="test_unknown_token_sync_error_stops_loop" time="0.006" /><testcase classname="tests.gateway.test_ws_auth_retry.TestMatrixSyncAuthRetry" name="test_exception_with_401_stops_loop" time="0.006" /><testcase classname="tests.gateway.test_ws_auth_retry.TestMatrixSyncAuthRetry" name="test_transient_error_retries" time="0.006" /><testcase classname="tests.gateway.test_yolo_command" name="test_yolo_command_toggles_only_current_session" time="0.038" /></testsuite></testsuites>