test_account_mismatch_never_reads_the_old_accounts_database (test_review_assistant_ui.ReminderContactTest.test_account_mismatch_never_reads_the_old_accounts_database) ... ok test_account_switch_during_validation_rejects_selection (test_review_assistant_ui.ReminderContactTest.test_account_switch_during_validation_rejects_selection) ... ok test_duplicate_names_remain_separate_and_identifiable (test_review_assistant_ui.ReminderContactTest.test_duplicate_names_remain_separate_and_identifiable) ... ok test_group_internal_or_unknown_recipient_cannot_be_saved (test_review_assistant_ui.ReminderContactTest.test_group_internal_or_unknown_recipient_cannot_be_saved) ... ok test_lists_exact_private_wechat_contacts_without_message_content (test_review_assistant_ui.ReminderContactTest.test_lists_exact_private_wechat_contacts_without_message_content) ... ok test_missing_account_does_not_fall_back_to_another_account (test_review_assistant_ui.ReminderContactTest.test_missing_account_does_not_fall_back_to_another_account) ... ok test_preview_is_static_and_does_not_load_real_customer_data (test_review_assistant_ui.ReminderContactTest.test_preview_is_static_and_does_not_load_real_customer_data) ... ok test_queries_are_read_only_and_do_not_initialize_or_modify_databases (test_review_assistant_ui.ReminderContactTest.test_queries_are_read_only_and_do_not_initialize_or_modify_databases) ... ok test_recipient_validation_uses_id_and_rechecks_identity (test_review_assistant_ui.ReminderContactTest.test_recipient_validation_uses_id_and_rechecks_identity) ... ok test_search_and_pagination_are_independent_of_message_preview (test_review_assistant_ui.ReminderContactTest.test_search_and_pagination_are_independent_of_message_preview) ... ok test_active_identity_only_uses_native_readonly_scope (test_review_assistant_ui.ReminderIdentityTest.test_active_identity_only_uses_native_readonly_scope) ... ok test_native_unavailable_is_clear_and_does_not_use_another_account (test_review_assistant_ui.ReminderIdentityTest.test_native_unavailable_is_clear_and_does_not_use_another_account) ... ok test_same_name_rows_keep_exact_identity_and_validate_selected_one (test_review_assistant_ui.ReminderPickerTest.test_same_name_rows_keep_exact_identity_and_validate_selected_one) ... ok test_stale_list_and_late_validation_after_cancel_are_ignored (test_review_assistant_ui.ReminderPickerTest.test_stale_list_and_late_validation_after_cancel_are_ignored) ... ok test_wrong_account_cannot_load_or_accept_and_retry_stays_available (test_review_assistant_ui.ReminderPickerTest.test_wrong_account_cannot_load_or_accept_and_retry_stays_available) ... ok test_only_explicit_refresh_reads_notification_summary (test_review_assistant_ui.ReminderRefreshTest.test_only_explicit_refresh_reads_notification_summary) ... ok test_default_disabled_and_cannot_enable_without_recipient (test_review_assistant_ui.ReminderSettingsTest.test_default_disabled_and_cannot_enable_without_recipient) ... ok test_enable_revalidates_target_and_does_not_change_other_accounts (test_review_assistant_ui.ReminderSettingsTest.test_enable_revalidates_target_and_does_not_change_other_accounts) ... ok test_expected_account_mismatch_or_validation_failure_never_saves (test_review_assistant_ui.ReminderSettingsTest.test_expected_account_mismatch_or_validation_failure_never_saves) ... ok test_explicit_disable_only_needs_current_account_not_deleted_contact (test_review_assistant_ui.ReminderSettingsTest.test_explicit_disable_only_needs_current_account_not_deleted_contact) ... ok test_persist_failure_does_not_claim_config_is_enabled (test_review_assistant_ui.ReminderSettingsTest.test_persist_failure_does_not_claim_config_is_enabled) ... ok test_replacing_an_enabled_contact_requires_explicit_reenable (test_review_assistant_ui.ReminderSettingsTest.test_replacing_an_enabled_contact_requires_explicit_reenable) ... ok test_runtime_save_preserves_other_account_mapping_and_rolls_back_failure (test_review_assistant_ui.ReminderSettingsTest.test_runtime_save_preserves_other_account_mapping_and_rolls_back_failure) ... ok test_selection_persists_exact_verified_recipient_and_stays_off (test_review_assistant_ui.ReminderSettingsTest.test_selection_persists_exact_verified_recipient_and_stays_off) ... ok test_snapshot_does_not_probe_scan_or_query_databases (test_review_assistant_ui.ReminderSettingsTest.test_snapshot_does_not_probe_scan_or_query_databases) ... ok test_stale_async_reply_and_shutdown_do_not_save (test_review_assistant_ui.ReminderSettingsTest.test_stale_async_reply_and_shutdown_do_not_save) ... ok test_setting_panel_disables_until_verified_and_uses_exact_account_for_toggle (test_review_assistant_ui.ReminderWebTest.test_setting_panel_disables_until_verified_and_uses_exact_account_for_toggle) ... ok test_a_blank_name_leaves_the_current_one_alone (test_qt_console_bridge.ConsoleBridgeTest.test_a_blank_name_leaves_the_current_one_alone) 空名字是"没填",不是"改成空"——改成空会让提示词里出现一个没有名字的客服。 ... ok test_a_failed_connection_says_why_in_the_log (test_qt_console_bridge.ConsoleBridgeTest.test_a_failed_connection_says_why_in_the_log) 失败必须留下原因。只说"连接失败"的话,人不知道是地址错了还是后台没起。 ... ok test_an_over_long_agent_name_is_truncated (test_qt_console_bridge.ConsoleBridgeTest.test_an_over_long_agent_name_is_truncated) 昵称会拼进系统提示词,不能让它无限长。 ... ok test_approve_task_reaches_the_host_with_the_exact_key (test_qt_console_bridge.ConsoleBridgeTest.test_approve_task_reaches_the_host_with_the_exact_key) 「通过并发送」必须真的连到后端。 ... ok test_approving_a_task_that_left_the_queue_sends_nothing (test_qt_console_bridge.ConsoleBridgeTest.test_approving_a_task_that_left_the_queue_sends_nothing) 任务已经不在队列里就别再放行——否则可能把草稿发到别的会话去。 ... ok test_archive_date_button_uses_real_business_filter (test_qt_console_bridge.ConsoleBridgeTest.test_archive_date_button_uses_real_business_filter) ... ok test_archive_selection_only_commits_an_existing_visible_key (test_qt_console_bridge.ConsoleBridgeTest.test_archive_selection_only_commits_an_existing_visible_key) ... ok test_auto_send_header_selects_auto_mode_before_starting (test_qt_console_bridge.ConsoleBridgeTest.test_auto_send_header_selects_auto_mode_before_starting) ... ok test_canvas_uses_available_logical_space_without_design_minimum (test_qt_console_bridge.ConsoleBridgeTest.test_canvas_uses_available_logical_space_without_design_minimum) ... ok test_connect_backend_forwards_the_url_to_the_host (test_qt_console_bridge.ConsoleBridgeTest.test_connect_backend_forwards_the_url_to_the_host) 控制台上填的后台地址要真的到得了后端。 ... ok test_console_html_and_javascript_assets_are_packaged_together (test_qt_console_bridge.ConsoleBridgeTest.test_console_html_and_javascript_assets_are_packaged_together) ... ok test_console_push_timer_coalesces_against_earliest_deadline (test_qt_console_bridge.ConsoleBridgeTest.test_console_push_timer_coalesces_against_earliest_deadline) ... ok test_editable_fields_look_editable (test_qt_console_bridge.ConsoleBridgeTest.test_editable_fields_look_editable) 能改的地方要看得出来能改。 ... ok test_every_html_navigation_schedules_authoritative_state (test_qt_console_bridge.ConsoleBridgeTest.test_every_html_navigation_schedules_authoritative_state) ... ok test_every_save_button_gives_the_user_feedback (test_qt_console_bridge.ConsoleBridgeTest.test_every_save_button_gives_the_user_feedback) 点了保存必须看得见反馈。 ... ok test_handoff_only_reports_tasks_the_backend_accepted (test_qt_console_bridge.ConsoleBridgeTest.test_handoff_only_reports_tasks_the_backend_accepted) ... ok test_long_pages_scroll_without_shrinking_text (test_qt_console_bridge.ConsoleBridgeTest.test_long_pages_scroll_without_shrinking_text) ... ok test_no_layout_container_keeps_a_hard_coded_height (test_qt_console_bridge.ConsoleBridgeTest.test_no_layout_container_keeps_a_hard_coded_height) 去掉滚动条之后,"装不下"不再表现为滚动条,而是内容画到别的面板身上。 ... ok test_number_fields_tell_you_the_allowed_range (test_qt_console_bridge.ConsoleBridgeTest.test_number_fields_tell_you_the_allowed_range) ... ok test_page_grids_use_proportional_columns (test_qt_console_bridge.ConsoleBridgeTest.test_page_grids_use_proportional_columns) 各栏必须按比例分配宽度。写死像素的话,舞台变宽它们也不会跟着变宽, ... ok test_queue_actions_select_exact_key_before_forwarding (test_qt_console_bridge.ConsoleBridgeTest.test_queue_actions_select_exact_key_before_forwarding) ... ok test_ready_state_delivery_updates_cache_only_after_emit (test_qt_console_bridge.ConsoleBridgeTest.test_ready_state_delivery_updates_cache_only_after_emit) ... ok test_request_state_forces_webchannel_handshake_payload (test_qt_console_bridge.ConsoleBridgeTest.test_request_state_forces_webchannel_handshake_payload) ... ok test_responsive_styles_are_bundled_after_reference_styles (test_qt_console_bridge.ConsoleBridgeTest.test_responsive_styles_are_bundled_after_reference_styles) ... ok test_same_view_state_push_preserves_sidebar_and_main_dom_identity (test_qt_console_bridge.ConsoleBridgeTest.test_same_view_state_push_preserves_sidebar_and_main_dom_identity) ... ok test_save_ai_only_applies_the_agent_name (test_qt_console_bridge.ConsoleBridgeTest.test_save_ai_only_applies_the_agent_name) AI 设置页现在只有客服昵称是真正的本机设置。 ... ok test_set_view_waits_for_loaded_document_and_replays_once (test_qt_console_bridge.ConsoleBridgeTest.test_set_view_waits_for_loaded_document_and_replays_once) ... ok test_sidebar_orb_is_wired_to_the_listen_toggle (test_qt_console_bridge.ConsoleBridgeTest.test_sidebar_orb_is_wired_to_the_listen_toggle) 侧栏那颗球是用户最常点的开关,HTML 上必须真的绑着动作。 ... ok test_stale_queue_key_never_mutates_previous_selection (test_qt_console_bridge.ConsoleBridgeTest.test_stale_queue_key_never_mutates_previous_selection) ... ok test_state_is_not_cached_before_webchannel_handshake (test_qt_console_bridge.ConsoleBridgeTest.test_state_is_not_cached_before_webchannel_handshake) ... ok test_the_console_script_handles_that_action (test_qt_console_bridge.ConsoleBridgeTest.test_the_console_script_handles_that_action) ... ok test_the_feedback_helper_covers_pending_result_and_failure (test_qt_console_bridge.ConsoleBridgeTest.test_the_feedback_helper_covers_pending_result_and_failure) 反馈要三段齐全:立刻响应、真实结果、失败也要说清。 ... ok test_the_save_slots_report_their_result_back (test_qt_console_bridge.ConsoleBridgeTest.test_the_save_slots_report_their_result_back) Qt 侧的保存槽必须把结果回传,否则网页那边永远只能瞎猜。 ... ok test_the_scale_never_depends_on_page_height_or_device_pixel_ratio (test_qt_console_bridge.ConsoleBridgeTest.test_the_scale_never_depends_on_page_height_or_device_pixel_ratio) ... ok test_the_side_rail_height_does_not_follow_page_content (test_qt_console_bridge.ConsoleBridgeTest.test_the_side_rail_height_does_not_follow_page_content) 侧栏在每一页必须一样高。 ... ok test_toggle_listen_starts_and_stops_the_host (test_qt_console_bridge.ConsoleBridgeTest.test_toggle_listen_starts_and_stops_the_host) ... ok test_activation_waits_until_ui_exists (test_qt_tray_lifecycle.InstanceActivationTest.test_activation_waits_until_ui_exists) ... ok test_guard_constructor_failure_is_reported_without_login (test_qt_tray_lifecycle.InstanceActivationTest.test_guard_constructor_failure_is_reported_without_login) ... ok test_guard_failure_never_starts_unguarded_client (test_qt_tray_lifecycle.InstanceActivationTest.test_guard_failure_never_starts_unguarded_client) ... ok test_login_modal_activated_before_main_window (test_qt_tray_lifecycle.InstanceActivationTest.test_login_modal_activated_before_main_window) ... ok test_no_signal_does_not_change_window (test_qt_tray_lifecycle.InstanceActivationTest.test_no_signal_does_not_change_window) ... ok test_packaging_selfcheck_does_not_contact_real_instance (test_qt_tray_lifecycle.InstanceActivationTest.test_packaging_selfcheck_does_not_contact_real_instance) ... ok test_primary_enters_session_and_releases_guard (test_qt_tray_lifecycle.InstanceActivationTest.test_primary_enters_session_and_releases_guard) ... ok test_secondary_does_not_enter_login_or_construct_main_window (test_qt_tray_lifecycle.InstanceActivationTest.test_secondary_does_not_enter_login_or_construct_main_window) ... ok test_session_exception_releases_guard (test_qt_tray_lifecycle.InstanceActivationTest.test_session_exception_releases_guard) ... ok test_smoke_test_does_not_contact_real_instance (test_qt_tray_lifecycle.InstanceActivationTest.test_smoke_test_does_not_contact_real_instance) ... ok test_about_to_quit_is_wired_to_cleanup (test_qt_tray_lifecycle.TrayLifecycleTest.test_about_to_quit_is_wired_to_cleanup) ... ok test_application_quit_marks_window_for_real_close (test_qt_tray_lifecycle.TrayLifecycleTest.test_application_quit_marks_window_for_real_close) ... ok test_capsule_closes_to_tray_and_restores_original_geometry (test_qt_tray_lifecycle.TrayLifecycleTest.test_capsule_closes_to_tray_and_restores_original_geometry) ... ok test_cleanup_stops_listener_and_backup_once (test_qt_tray_lifecycle.TrayLifecycleTest.test_cleanup_stops_listener_and_backup_once) ... ok test_console_interrupt_uses_real_exit_not_window_close (test_qt_tray_lifecycle.TrayLifecycleTest.test_console_interrupt_uses_real_exit_not_window_close) ... ok test_exit_menu_bypasses_close_to_tray (test_qt_tray_lifecycle.TrayLifecycleTest.test_exit_menu_bypasses_close_to_tray) ... ok test_explicit_disable_close_to_tray_quits (test_qt_tray_lifecycle.TrayLifecycleTest.test_explicit_disable_close_to_tray_quits) ... ok test_forced_relogin_restores_tray_hidden_web_surface (test_qt_tray_lifecycle.TrayLifecycleTest.test_forced_relogin_restores_tray_hidden_web_surface) ... ok test_no_tray_fallback_restores_capsule_hidden_surfaces (test_qt_tray_lifecycle.TrayLifecycleTest.test_no_tray_fallback_restores_capsule_hidden_surfaces) ... ok test_no_tray_falls_back_to_taskbar_even_when_running (test_qt_tray_lifecycle.TrayLifecycleTest.test_no_tray_falls_back_to_taskbar_even_when_running) ... ok test_repeated_activation_keeps_current_visible_geometry (test_qt_tray_lifecycle.TrayLifecycleTest.test_repeated_activation_keeps_current_visible_geometry) ... ok test_running_status_does_not_reopen_capsule_after_tray_close (test_qt_tray_lifecycle.TrayLifecycleTest.test_running_status_does_not_reopen_capsule_after_tray_close) ... ok test_running_window_closes_to_tray_without_capsule_or_stop (test_qt_tray_lifecycle.TrayLifecycleTest.test_running_window_closes_to_tray_without_capsule_or_stop) ... ok test_save_failure_does_not_prevent_worker_shutdown (test_qt_tray_lifecycle.TrayLifecycleTest.test_save_failure_does_not_prevent_worker_shutdown) ... ok test_single_and_double_click_restore_but_context_menu_does_not (test_qt_tray_lifecycle.TrayLifecycleTest.test_single_and_double_click_restore_but_context_menu_does_not) ... ok test_stopped_window_closes_to_tray_without_stopping_worker (test_qt_tray_lifecycle.TrayLifecycleTest.test_stopped_window_closes_to_tray_without_stopping_worker) ... ok test_system_logoff_does_not_close_to_tray (test_qt_tray_lifecycle.TrayLifecycleTest.test_system_logoff_does_not_close_to_tray) ... ok test_taskbar_native_restore_clears_fallback_mode (test_qt_tray_lifecycle.TrayLifecycleTest.test_taskbar_native_restore_clears_fallback_mode) ... ok test_tray_menu_has_explicit_open_and_exit_actions (test_qt_tray_lifecycle.TrayLifecycleTest.test_tray_menu_has_explicit_open_and_exit_actions) ... ok test_tray_restore_preserves_maximized_window (test_qt_tray_lifecycle.TrayLifecycleTest.test_tray_restore_preserves_maximized_window) ... ok test_tray_restore_reopens_without_restarting_listener (test_qt_tray_lifecycle.TrayLifecycleTest.test_tray_restore_reopens_without_restarting_listener) ... ok test_tray_setting_outweighs_legacy_keep_background_false (test_qt_tray_lifecycle.TrayLifecycleTest.test_tray_setting_outweighs_legacy_keep_background_false) ... ok test_a_long_nickname_is_shortened_instead_of_overflowing (test_qt_capsule.CapsuleWindowTest.test_a_long_nickname_is_shortened_instead_of_overflowing) ... ok test_compact_layout_has_no_horizontal_overlap (test_qt_capsule.CapsuleWindowTest.test_compact_layout_has_no_horizontal_overlap) ... ok test_running_keeps_the_progress_line_alone (test_qt_capsule.CapsuleWindowTest.test_running_keeps_the_progress_line_alone) ... ok test_running_replaces_stale_connection_or_window_waiting_progress (test_qt_capsule.CapsuleWindowTest.test_running_replaces_stale_connection_or_window_waiting_progress) ... ok test_running_without_a_task_still_shows_a_real_process (test_qt_capsule.CapsuleWindowTest.test_running_without_a_task_still_shows_a_real_process) ... ok test_status_copy_and_actions_remain_connected (test_qt_capsule.CapsuleWindowTest.test_status_copy_and_actions_remain_connected) ... ok test_stopping_clears_a_stale_progress_line (test_qt_capsule.CapsuleWindowTest.test_stopping_clears_a_stale_progress_line) ... ok test_the_progress_line_says_who_is_being_answered (test_qt_capsule.CapsuleWindowTest.test_the_progress_line_says_who_is_being_answered) ... ok test_the_timer_sits_above_the_full_width_progress_line (test_qt_capsule.CapsuleWindowTest.test_the_timer_sits_above_the_full_width_progress_line) ... ok test_timer_and_longest_copy_fit_their_widgets (test_qt_capsule.CapsuleWindowTest.test_timer_and_longest_copy_fit_their_widgets) ... ok test_window_flags_and_position_keep_capsule_non_intrusive (test_qt_capsule.CapsuleWindowTest.test_window_flags_and_position_keep_capsule_non_intrusive) ... ok test_entering_capsule_twice_is_harmless (test_qt_capsule.MainWindowMinimizeTest.test_entering_capsule_twice_is_harmless) ... ok test_minimize_from_maximized_restores_maximized_console (test_qt_capsule.MainWindowMinimizeTest.test_minimize_from_maximized_restores_maximized_console) ... ok test_minimize_while_running_switches_to_capsule_and_can_expand (test_qt_capsule.MainWindowMinimizeTest.test_minimize_while_running_switches_to_capsule_and_can_expand) ... ok test_minimize_while_stopped_keeps_normal_taskbar_behavior (test_qt_capsule.MainWindowMinimizeTest.test_minimize_while_stopped_keeps_normal_taskbar_behavior) ... ok test_starting_the_listener_switches_to_capsule_by_itself (test_qt_capsule.MainWindowMinimizeTest.test_starting_the_listener_switches_to_capsule_by_itself) 开始监听就收进胶囊:控制台不该挡在企业微信前面。 ... ok test_delete_action_emits_the_full_untruncated_task_key (test_qt_capsule.QueuePageDeleteTest.test_delete_action_emits_the_full_untruncated_task_key) ... ok test_retry_action_emits_only_a_real_retry_wait_task (test_qt_capsule.QueuePageDeleteTest.test_retry_action_emits_only_a_real_retry_wait_task) ... ok test_builtin_risk_categories_are_read_only_and_rule_management_emits (test_qt_capsule.SettingsSendModeTest.test_builtin_risk_categories_are_read_only_and_rule_management_emits) ... ok test_mode_buttons_are_exclusive_reflect_settings_and_emit_values (test_qt_capsule.SettingsSendModeTest.test_mode_buttons_are_exclusive_reflect_settings_and_emit_values) ... ok test_rule_management_navigation_targets_ai_security_policy (test_qt_capsule.SettingsSendModeTest.test_rule_management_navigation_targets_ai_security_policy) ... ok test_window_redetection_reports_the_real_detected_handle (test_qt_capsule.SettingsSendModeTest.test_window_redetection_reports_the_real_detected_handle) ... ok test_clicking_the_orb_toggles_the_same_way (test_qt_capsule.SidebarMonitorToggleTest.test_clicking_the_orb_toggles_the_same_way) ... ok test_clicking_the_status_text_starts_the_listener (test_qt_capsule.SidebarMonitorToggleTest.test_clicking_the_status_text_starts_the_listener) ... ok test_clicking_the_status_text_while_running_pauses (test_qt_capsule.SidebarMonitorToggleTest.test_clicking_the_status_text_while_running_pauses) ... ok test_intermediate_states_count_as_running (test_qt_capsule.SidebarMonitorToggleTest.test_intermediate_states_count_as_running) ... ok test_one_click_never_fires_both_signals (test_qt_capsule.SidebarMonitorToggleTest.test_one_click_never_fires_both_signals) 旧实现每次都 disconnect 再 connect;少断一次就会自相抵消。 ... ok test_the_tooltip_says_what_the_click_will_do (test_qt_capsule.SidebarMonitorToggleTest.test_the_tooltip_says_what_the_click_will_do) ... ok test_a_clock_rollback_never_deletes_a_fresh_log (test_runtime_settings.LogRetentionTest.test_a_clock_rollback_never_deletes_a_fresh_log) ... ok test_a_shorter_window_deletes_more (test_runtime_settings.LogRetentionTest.test_a_shorter_window_deletes_more) ... ok test_logs_older_than_the_retention_window_are_deleted (test_runtime_settings.LogRetentionTest.test_logs_older_than_the_retention_window_are_deleted) ... ok test_out_of_range_values_fall_back_to_the_documented_defaults (test_runtime_settings.LogRetentionTest.test_out_of_range_values_fall_back_to_the_documented_defaults) ... ok test_the_file_count_cap_still_applies (test_runtime_settings.LogRetentionTest.test_the_file_count_cap_still_applies) ... ok test_unreadable_directory_never_breaks_startup (test_runtime_settings.LogRetentionTest.test_unreadable_directory_never_breaks_startup) ... ok test_atomic_operation_progress_includes_phase_step_detail_and_customer (test_runtime_settings.RuntimeSettingsTest.test_atomic_operation_progress_includes_phase_step_detail_and_customer) ... ok test_bot_uses_instance_batch_window_when_call_has_no_override (test_runtime_settings.RuntimeSettingsTest.test_bot_uses_instance_batch_window_when_call_has_no_override) ... ok test_classic_capsule_renders_each_progress_message_as_a_numbered_step (test_runtime_settings.RuntimeSettingsTest.test_classic_capsule_renders_each_progress_message_as_a_numbered_step) ... ok test_classic_queue_consumes_the_runtime_progress_channel (test_runtime_settings.RuntimeSettingsTest.test_classic_queue_consumes_the_runtime_progress_channel) ... ok test_classic_settings_save_persists_and_updates_live_thread (test_runtime_settings.RuntimeSettingsTest.test_classic_settings_save_persists_and_updates_live_thread) ... ok test_customer_chat_body_is_not_mirrored_into_floating_capsule (test_runtime_settings.RuntimeSettingsTest.test_customer_chat_body_is_not_mirrored_into_floating_capsule) ... ok test_invalid_saved_batch_window_falls_back_to_twenty_seconds (test_runtime_settings.RuntimeSettingsTest.test_invalid_saved_batch_window_falls_back_to_twenty_seconds) ... ok test_invalid_saved_send_delay_falls_back_to_one_second (test_runtime_settings.RuntimeSettingsTest.test_invalid_saved_send_delay_falls_back_to_one_second) ... ok test_invalid_send_mode_falls_back_to_automatic (test_runtime_settings.RuntimeSettingsTest.test_invalid_send_mode_falls_back_to_automatic) ... ok test_legacy_settings_without_batch_window_keep_twenty_second_default (test_runtime_settings.RuntimeSettingsTest.test_legacy_settings_without_batch_window_keep_twenty_second_default) ... ok test_manual_queue_delete_removes_only_selected_full_key_atomically (test_runtime_settings.RuntimeSettingsTest.test_manual_queue_delete_removes_only_selected_full_key_atomically) ... ok test_manual_retry_only_requeues_retry_wait_tasks (test_runtime_settings.RuntimeSettingsTest.test_manual_retry_only_requeues_retry_wait_tasks) ... ok test_message_copy_retries_when_wecom_writes_clipboard_late (test_runtime_settings.RuntimeSettingsTest.test_message_copy_retries_when_wecom_writes_clipboard_late) ... ok test_retry_request_queues_until_bot_startup_finishes (test_runtime_settings.RuntimeSettingsTest.test_retry_request_queues_until_bot_startup_finishes) ... ok test_review_pending_state_survives_restart (test_runtime_settings.RuntimeSettingsTest.test_review_pending_state_survives_restart) ... [待回复恢复] 已从磁盘恢复 1 个未完成任务。 ok test_runtime_thread_syncs_updated_batch_window_before_next_poll (test_runtime_settings.RuntimeSettingsTest.test_runtime_thread_syncs_updated_batch_window_before_next_poll) ... [引擎B] 数据直读检测已启动 [+] 窗口激活模式已开启:企业微信未显示时会自动还原到前台 [i] 数据库新消息与未读标记共同触发回复任务,窗口异常时保留任务并重试 [+] 人机共存已开启:鼠标静止 5 秒后才自动操作 [+] 连续消息合并等待:7 秒 [+] 发送前等待:1.5 秒 [+] 发送模式:人工审核草稿(AI 只把回复填进输入框,不会自动按回车;需要自动发送请在设置里切到“自动发送”) [引擎B] DB 直读失败: 数据库正在初始化或刷新,暂用备用读取,备用检测继续运行 ok test_send_delay_wait_is_independent_and_interruptible (test_runtime_settings.RuntimeSettingsTest.test_send_delay_wait_is_independent_and_interruptible) ... ok test_tagged_low_level_logs_are_mirrored_to_capsule_progress (test_runtime_settings.RuntimeSettingsTest.test_tagged_low_level_logs_are_mirrored_to_capsule_progress) ... ok test_async_protocol_check_retains_explicit_approval_request (test_desktop_review_visibility.DesktopReviewTest.test_async_protocol_check_retains_explicit_approval_request) ... ok test_explicit_approval_reaches_thread_with_exact_key_and_refreshes (test_desktop_review_visibility.DesktopReviewTest.test_explicit_approval_reaches_thread_with_exact_key_and_refreshes) ... ok test_human_filter_includes_unknown_receipt_and_no_empty_send (test_desktop_review_visibility.DesktopReviewTest.test_human_filter_includes_unknown_receipt_and_no_empty_send) ... ok test_legacy_receipt_states_are_visible_but_not_sendable (test_desktop_review_visibility.DesktopReviewTest.test_legacy_receipt_states_are_visible_but_not_sendable) ... ok test_real_queue_snapshot_renders_review_and_handoff_in_embedded_browser (test_desktop_review_visibility.DesktopReviewTest.test_real_queue_snapshot_renders_review_and_handoff_in_embedded_browser) ... ok test_review_counts_remain_visible_under_an_unrelated_filter (test_desktop_review_visibility.DesktopReviewTest.test_review_counts_remain_visible_under_an_unrelated_filter) ... ok test_review_filter_surfaces_protocol_draft_and_reason (test_desktop_review_visibility.DesktopReviewTest.test_review_filter_surfaces_protocol_draft_and_reason) ... ok test_stale_snapshot_requires_explicit_confirmation_before_backend_handoff (test_desktop_review_visibility.DesktopReviewTest.test_stale_snapshot_requires_explicit_confirmation_before_backend_handoff) ... ok test_stopped_handoff_uses_offline_resolution_and_preserves_seen (test_desktop_review_visibility.DesktopReviewTest.test_stopped_handoff_uses_offline_resolution_and_preserves_seen) ... ok test_unknown_receipt_handoff_requires_confirmation_and_never_calls_approve (test_desktop_review_visibility.DesktopReviewTest.test_unknown_receipt_handoff_requires_confirmation_and_never_calls_approve) ... ok test_generation_failure_is_retryable_but_not_sendable (test_desktop_review_visibility.ReviewStateTest.test_generation_failure_is_retryable_but_not_sendable) ... ok test_media_without_draft_cannot_be_approved (test_desktop_review_visibility.ReviewStateTest.test_media_without_draft_cannot_be_approved) ... ok test_protocol_and_visual_reviews_have_the_same_action_contract (test_desktop_review_visibility.ReviewStateTest.test_protocol_and_visual_reviews_have_the_same_action_contract) ... ok test_uncertain_delivery_cannot_be_approved_or_retried_even_with_stale_review_flag (test_desktop_review_visibility.ReviewStateTest.test_uncertain_delivery_cannot_be_approved_or_retried_even_with_stale_review_flag) ... ok test_counts_are_disjoint_and_count_conversations_not_messages (test_review_badges.AttentionBadgeTests.test_counts_are_disjoint_and_count_conversations_not_messages) ... ok test_hidden_queue_refreshes_counts_without_rebuilding_widgets (test_review_badges.AttentionBadgeTests.test_hidden_queue_refreshes_counts_without_rebuilding_widgets) ... ok test_native_badge_scales_and_preserves_exact_accessible_count (test_review_badges.AttentionBadgeTests.test_native_badge_scales_and_preserves_exact_accessible_count) ... ok test_queue_refresh_updates_both_native_entrances_under_unrelated_filter (test_review_badges.AttentionBadgeTests.test_queue_refresh_updates_both_native_entrances_under_unrelated_filter) ... ok test_web_badges_update_while_editing_and_hide_when_resolved (test_review_badges.AttentionBadgeTests.test_web_badges_update_while_editing_and_hide_when_resolved) ... ok test_bundle_is_used_without_source_checkout (test_packaging_paths.PackagedExporterPathsTest.test_bundle_is_used_without_source_checkout) ... ok test_explicit_exporter_override_is_preserved (test_packaging_paths.PackagedExporterPathsTest.test_explicit_exporter_override_is_preserved) ... ok test_exporter_import_does_not_replace_desktop_crypto (test_packaging_paths.PackagedExporterPathsTest.test_exporter_import_does_not_replace_desktop_crypto) ... ok test_failed_exporter_import_restores_host_modules (test_packaging_paths.PackagedExporterPathsTest.test_failed_exporter_import_restores_host_modules) ... ok test_fresh_database_initialization (test_packaging_paths.PackagedExporterPathsTest.test_fresh_database_initialization) ... [引擎B] 已登记新消息 → test ok test_packaged_settings_use_persistent_data_directory (test_packaging_paths.PackagedExporterPathsTest.test_packaged_settings_use_persistent_data_directory) ... ok test_windows_powershell_scripts_have_utf8_bom (test_packaging_paths.PackagedExporterPathsTest.test_windows_powershell_scripts_have_utf8_bom) ... ok ---------------------------------------------------------------------- Ran 173 tests in 22.446s OK