============================= test session starts =============================
platform win32 -- Python 3.12.11, pytest-8.4.2, pluggy-1.6.0 -- C:\workspace\whiteduck\flock\.venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: C:\workspace\whiteduck\flock
configfile: pyproject.toml
plugins: anyio-4.11.0, devtools-0.12.2, asyncio-1.2.0, clarity-1.0.1, cov-7.0.0, mock-3.15.1, order-1.3.0, sugar-1.1.1, respx-0.22.0
asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collecting ... collected 1227 items

tests/test_orchestrator_batchspec.py::test_simple_batch_engine_processes_all_artifacts PASSED [  0%]
tests/test_store.py::test_store_query_and_summary[memory] PASSED         [  0%]
tests/test_store.py::test_store_query_and_summary[sqlite] PASSED         [  0%]
tests/test_orchestrator_batchspec.py::test_batch_spec_with_non_batch_engine_logs_error PASSED [  0%]
tests/test_store.py::test_query_artifacts_embed_meta_returns_consumptions[memory] PASSED [  0%]
tests/test_store.py::test_query_artifacts_embed_meta_returns_consumptions[sqlite] PASSED [  0%]
tests/test_store.py::test_agent_history_summary_counts[memory] PASSED    [  0%]
tests/test_store.py::test_agent_history_summary_counts[sqlite] PASSED    [  0%]
tests/test_utilities.py::TestMetricsUtility::test_metrics_utility_name PASSED [  0%]
tests/test_utilities.py::TestMetricsUtility::test_on_pre_evaluate_records_start_time PASSED [  0%]
tests/test_utilities.py::TestMetricsUtility::test_on_post_evaluate_calculates_duration PASSED [  0%]
tests/test_utilities.py::TestMetricsUtility::test_on_post_evaluate_no_start_time PASSED [  0%]
tests/test_utilities.py::TestMetricsUtility::test_metrics_flow_integration PASSED [  1%]
tests/test_utilities.py::TestLoggingUtility::test_logging_utility_initialization_default_console PASSED [  1%]
tests/test_utilities.py::TestLoggingUtility::test_logging_utility_initialization_custom_settings PASSED [  1%]
tests/test_utilities.py::TestLoggingUtility::test_on_initialize_logs_start PASSED [  1%]
tests/test_utilities.py::TestLoggingUtility::test_on_pre_consume_with_artifacts PASSED [  1%]
tests/test_utilities.py::TestLoggingUtility::test_on_pre_consume_empty_artifacts PASSED [  1%]
tests/test_utilities.py::TestLoggingUtility::test_on_pre_evaluate_starts_stream PASSED [  1%]
tests/test_utilities.py::TestLoggingUtility::test_on_pre_evaluate_no_stream PASSED [  1%]
tests/test_utilities.py::TestLoggingUtility::test_on_post_evaluate_renders_all PASSED [  1%]
tests/test_utilities.py::TestLoggingUtility::test_on_post_publish PASSED [  1%]
tests/test_utilities.py::TestLoggingUtility::test_on_error_logs_and_aborts_stream PASSED [  1%]
tests/test_utilities.py::TestLoggingUtility::test_on_terminate_logs_end PASSED [  1%]
tests/test_utilities.py::TestLoggingUtility::test_render_artifacts PASSED [  2%]
tests/test_utilities.py::TestLoggingUtility::test_build_artifact_panel_with_metadata PASSED [  2%]
tests/test_utilities.py::TestLoggingUtility::test_build_artifact_panel_custom_subtitle PASSED [  2%]
tests/test_utilities.py::TestLoggingUtility::test_render_payload_none PASSED [  2%]
tests/test_utilities.py::TestLoggingUtility::test_render_payload_dict_with_json PASSED [  2%]
tests/test_utilities.py::TestLoggingUtility::test_render_payload_dict_no_json PASSED [  2%]
tests/test_utilities.py::TestLoggingUtility::test_render_payload_list PASSED [  2%]
tests/test_utilities.py::TestLoggingUtility::test_render_payload_pydantic_model PASSED [  2%]
tests/test_utilities.py::TestLoggingUtility::test_render_payload_other PASSED [  2%]
tests/test_utilities.py::TestLoggingUtility::test_render_metrics PASSED  [  2%]
tests/test_utilities.py::TestLoggingUtility::test_render_metrics_empty PASSED [  2%]
tests/test_utilities.py::TestLoggingUtility::test_render_logs_with_mixed_content PASSED [  2%]
tests/test_utilities.py::TestLoggingUtility::test_render_logs_empty PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_summarize_artifact_with_id PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_summarize_artifact_no_id PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_summarize_artifact_exception PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_stream_key_generation PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_attach_stream_queue PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_detach_stream_queue PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_detach_stream_queue_no_logging_state PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_detach_stream_queue_exception PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_maybe_start_stream_new PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_maybe_start_stream_existing PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_finalize_stream PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_finalize_stream_timeout PASSED [  3%]
tests/test_utilities.py::TestLoggingUtility::test_abort_stream PASSED    [  4%]
tests/test_utilities.py::TestLoggingUtility::test_consume_stream_text_chunks PASSED [  4%]
tests/test_utilities.py::TestLoggingUtility::test_consume_stream_status_message PASSED [  4%]
tests/test_utilities.py::TestLoggingUtility::test_consume_stream_error_message PASSED [  4%]
tests/test_utilities.py::TestLoggingUtility::test_consume_stream_empty PASSED [  4%]
tests/test_utilities.py::TestIntegration::test_metrics_and_logging_together PASSED [  4%]
tests/test_utilities.py::TestIntegration::test_error_handling_flow PASSED [  4%]
tests/test_cli.py::TestDemoCommand::test_demo_command_imports_and_runs PASSED [  4%]
tests/test_cli.py::TestDemoCommand::test_demo_default_parameters PASSED  [  4%]
tests/test_cli.py::TestDemoCommand::test_demo_with_artifacts PASSED      [  4%]
tests/test_cli.py::TestDemoCommand::test_demo_cli_invocation PASSED      [  4%]
tests/test_cli.py::TestListAgentsCommand::test_list_agents_displays_all_agents PASSED [  4%]
tests/test_cli.py::TestListAgentsCommand::test_list_agents_cli_invocation PASSED [  5%]
tests/test_cli.py::TestListAgentsCommand::test_list_agents_empty_descriptions PASSED [  5%]
tests/test_cli.py::TestServeCommand::test_serve_creates_and_runs_service PASSED [  5%]
tests/test_cli.py::TestServeCommand::test_serve_default_parameters PASSED [  5%]
tests/test_cli.py::TestServeCommand::test_serve_cli_invocation PASSED    [  5%]
tests/test_cli.py::TestMainFunction::test_main_calls_app PASSED          [  5%]
tests/test_cli.py::TestMainFunction::test_main_help_output PASSED        [  5%]
tests/test_cli.py::TestMainFunction::test_command_help_outputs PASSED    [  5%]
tests/test_cli.py::TestMainFunction::test_invalid_command PASSED         [  5%]
tests/test_cli.py::TestAsyncBehavior::test_demo_async_flow PASSED        [  5%]
tests/test_cli.py::TestErrorHandling::test_demo_handles_orchestrator_error PASSED [  5%]
tests/test_cli.py::TestErrorHandling::test_serve_handles_service_error PASSED [  5%]
tests/test_cli.py::TestSQLiteCommands::test_init_sqlite_store_command PASSED [  6%]
tests/test_cli.py::TestSQLiteCommands::test_sqlite_maintenance_command PASSED [  6%]
tests/test_cli.py::TestModuleStructure::test_cli_app_is_typer PASSED     [  6%]
tests/test_cli.py::TestModuleStructure::test_console_is_rich_console PASSED [  6%]
tests/test_cli.py::TestModuleStructure::test_module_exports PASSED       [  6%]
tests/test_cli.py::TestModuleStructure::test_commands_registered PASSED  [  6%]
tests/test_engines.py::test_dspy_engine_evaluation_with_mock_llm PASSED  [  6%]
tests/test_engines.py::test_engine_pre_generates_artifact_ids PASSED     [  6%]
tests/test_engines.py::test_engine_handles_evaluation_errors_gracefully PASSED [  6%]
tests/test_engines.py::test_dspy_engine_disables_streaming_in_pytest PASSED [  6%]
tests/test_engines.py::test_dspy_engine_respects_explicit_stream_parameter PASSED [  6%]
tests/test_orchestrator.py::test_movie_pipeline_publishes_tagline PASSED [  6%]
tests/test_orchestrator.py::test_visibility_only_for_blocks_eavesdropper PASSED [  7%]
tests/test_orchestrator.py::test_orchestrator_schedules_matching_agent PASSED [  7%]
tests/test_orchestrator.py::test_orchestrator_skips_non_matching_agent PASSED [  7%]
tests/test_orchestrator.py::test_orchestrator_schedules_multiple_agents PASSED [  7%]
tests/test_orchestrator.py::test_orchestrator_prevents_duplicate_processing PASSED [  7%]
tests/test_orchestrator.py::test_orchestrator_enforces_private_visibility PASSED [  7%]
tests/test_orchestrator.py::test_publish_creates_artifact PASSED         [  7%]
tests/test_orchestrator.py::test_run_until_idle_waits_for_tasks PASSED   [  7%]
tests/test_orchestrator.py::test_concurrent_artifact_publishing PASSED   [  7%]
tests/test_orchestrator.py::test_orchestrator_handles_store_unavailable PASSED [  7%]
tests/test_orchestrator.py::test_board_handle_get_artifact PASSED        [  7%]
tests/test_orchestrator.py::test_board_handle_list_all_artifacts PASSED  [  7%]
tests/test_orchestrator.py::test_board_handle_get_nonexistent_returns_none PASSED [  7%]
tests/test_orchestrator.py::test_orchestrator_direct_invoke_with_dict_input PASSED [  8%]
tests/test_orchestrator.py::test_orchestrator_dict_input_missing_type_raises_error PASSED [  8%]
tests/test_orchestrator.py::test_orchestrator_circuit_breaker_limits_iterations PASSED [  8%]
tests/test_orchestrator.py::test_orchestrator_circuit_breaker_resets_on_idle PASSED [  8%]
tests/test_orchestrator.py::test_agent_consuming_and_publishing_same_type_does_not_loop PASSED [  8%]
tests/test_orchestrator.py::test_context_is_batch_flag_propagation PASSED [  8%]
tests/test_service.py::test_http_control_plane_run_agent PASSED          [  8%]
tests/contract/test_agent_payload_selection_contract.py::TestAgentPayloadSelectionContract::test_simple_name_matches_qualified_declaration PASSED [  8%]
tests/contract/test_agent_payload_selection_contract.py::TestAgentPayloadSelectionContract::test_qualified_name_matches_qualified_declaration PASSED [  8%]
tests/contract/test_agent_payload_selection_contract.py::TestAgentPayloadSelectionContract::test_non_matching_type_returns_none PASSED [  8%]
tests/contract/test_agent_payload_selection_contract.py::TestAgentPayloadSelectionContract::test_cross_context_matching PASSED [  8%]
tests/contract/test_artifact_storage_contract.py::test_publish_stores_with_canonical_name[memory] PASSED [  8%]
tests/contract/test_artifact_storage_contract.py::test_publish_stores_with_canonical_name[sqlite] PASSED [  9%]
tests/contract/test_artifact_storage_contract.py::test_list_by_simple_name_finds_qualified_artifacts[memory] PASSED [  9%]
tests/contract/test_artifact_storage_contract.py::test_list_by_simple_name_finds_qualified_artifacts[sqlite] PASSED [  9%]
tests/contract/test_artifact_storage_contract.py::test_cross_context_type_resolution[memory] PASSED [  9%]
tests/contract/test_artifact_storage_contract.py::test_cross_context_type_resolution[sqlite] PASSED [  9%]
tests/contract/test_artifact_storage_contract.py::test_multiple_artifacts_same_type[memory] PASSED [  9%]
tests/contract/test_artifact_storage_contract.py::test_multiple_artifacts_same_type[sqlite] PASSED [  9%]
tests/contract/test_type_normalization_contract.py::TestTypeNormalizationContract::test_canonical_name_pass_through PASSED [  9%]
tests/contract/test_type_normalization_contract.py::TestTypeNormalizationContract::test_simple_name_resolution PASSED [  9%]
tests/contract/test_type_normalization_contract.py::TestTypeNormalizationContract::test_unregistered_type_error PASSED [  9%]
tests/contract/test_type_normalization_contract.py::TestTypeNormalizationContract::test_ambiguous_simple_name_error PASSED [  9%]
tests/contract/test_type_normalization_contract.py::TestTypeNormalizationContract::test_explicit_name_registration PASSED [  9%]
tests/contract/test_type_normalization_contract.py::TestTypeNormalizationContract::test_module_qualified_resolution PASSED [ 10%]
tests/dashboard/test_logic_operations_api.py::test_get_correlation_groups_empty PASSED [ 10%]
tests/dashboard/test_logic_operations_api.py::test_get_correlation_groups_single_group_partial PASSED [ 10%]
tests/dashboard/test_logic_operations_api.py::test_get_correlation_groups_multiple_patients PASSED [ 10%]
tests/dashboard/test_logic_operations_api.py::test_get_correlation_groups_time_calculations PASSED [ 10%]
tests/dashboard/test_logic_operations_api.py::test_get_correlation_groups_count_window PASSED [ 10%]
tests/dashboard/test_logic_operations_api.py::test_get_batch_state_no_accumulator PASSED [ 10%]
tests/dashboard/test_logic_operations_api.py::test_get_batch_state_size_based PASSED [ 10%]
tests/dashboard/test_logic_operations_api.py::test_get_batch_state_timeout_based PASSED [ 10%]
tests/dashboard/test_logic_operations_api.py::test_get_batch_state_dual_condition PASSED [ 10%]
tests/dashboard/test_logic_operations_api.py::test_get_batch_state_group_count PASSED [ 10%]
tests/dashboard/test_logic_operations_api.py::test_get_batch_state_empty_batch_returns_none PASSED [ 10%]
tests/dashboard/test_logic_operations_api.py::test_compute_agent_status_ready PASSED [ 11%]
tests/dashboard/test_logic_operations_api.py::test_compute_agent_status_waiting_correlation PASSED [ 11%]
tests/dashboard/test_logic_operations_api.py::test_compute_agent_status_waiting_batch PASSED [ 11%]
tests/dashboard/test_logic_operations_api.py::test_compute_agent_status_no_joinspec_or_batchspec PASSED [ 11%]
tests/dashboard/test_logic_operations_api.py::test_compute_agent_status_multiple_subscriptions_mixed PASSED [ 11%]
tests/dashboard/test_logic_operations_api.py::test_compute_agent_status_batch_empty_should_be_ready PASSED [ 11%]
tests/dashboard/test_logic_operations_api.py::test_integration_correlation_and_batch_together PASSED [ 11%]
tests/dashboard/test_logic_operations_api.py::test_get_correlation_groups_handles_missing_pool_key PASSED [ 11%]
tests/dashboard/test_logic_operations_api.py::test_get_batch_state_handles_missing_batch_key PASSED [ 11%]
tests/dashboard/test_logic_operations_api.py::test_compute_agent_status_handles_agent_with_no_subscriptions PASSED [ 11%]
tests/dashboard/test_logic_operations_api.py::test_readme_example_correlation_state_extraction PASSED [ 11%]
tests/dashboard/test_logic_operations_events.py::test_emit_correlation_event_when_artifact_added_to_group PASSED [ 11%]
tests/dashboard/test_logic_operations_events.py::test_no_correlation_event_when_dashboard_disabled PASSED [ 11%]
tests/dashboard/test_logic_operations_events.py::test_no_correlation_event_when_group_completes PASSED [ 12%]
tests/dashboard/test_logic_operations_events.py::test_correlation_event_content_with_time_window PASSED [ 12%]
tests/dashboard/test_logic_operations_events.py::test_correlation_event_content_with_count_window PASSED [ 12%]
tests/dashboard/test_logic_operations_events.py::test_emit_batch_event_when_artifact_added PASSED [ 12%]
tests/dashboard/test_logic_operations_events.py::test_no_batch_event_when_dashboard_disabled PASSED [ 12%]
tests/dashboard/test_logic_operations_events.py::test_no_batch_event_when_batch_flushes PASSED [ 12%]
tests/dashboard/test_logic_operations_events.py::test_batch_event_content_size_based PASSED [ 12%]
tests/dashboard/test_logic_operations_events.py::test_batch_event_content_timeout_based PASSED [ 12%]
tests/dashboard/test_logic_operations_events.py::test_batch_event_content_hybrid PASSED [ 12%]
tests/dashboard/test_logic_operations_events.py::test_events_emitted_for_joinspec_and_batchspec_together PASSED [ 12%]
tests/dashboard/test_logic_operations_events.py::test_emission_handles_missing_batch_state_gracefully PASSED [ 12%]
tests/dashboard/test_logic_operations_events.py::test_emission_handles_missing_correlation_groups_gracefully PASSED [ 12%]
tests/dashboard/test_logic_operations_events.py::test_multiple_artifacts_emit_multiple_events PASSED [ 13%]
tests/e2e/test_critical_scenarios.py::test_scenario_1_e2e_agent_execution_visualization PASSED [ 13%]
tests/e2e/test_critical_scenarios.py::test_scenario_2_websocket_reconnection_after_restart PASSED [ 13%]
tests/e2e/test_critical_scenarios.py::test_scenario_3_correlation_id_filtering PASSED [ 13%]
tests/e2e/test_critical_scenarios.py::test_scenario_4_backend_data_volume_for_lru_eviction PASSED [ 13%]
tests/e2e/test_critical_scenarios.py::test_performance_baseline_event_latency PASSED [ 13%]
tests/e2e/test_critical_scenarios.py::test_performance_baseline_throughput PASSED [ 13%]
tests/integration/test_collector_orchestrator.py::test_full_lifecycle_event_capture PASSED [ 13%]
tests/integration/test_collector_orchestrator.py::test_correlation_id_flow_through_pipeline PASSED [ 13%]
tests/integration/test_collector_orchestrator.py::test_error_event_capture PASSED [ 13%]
tests/integration/test_collector_orchestrator.py::test_multiple_runs_accumulate_events PASSED [ 13%]
tests/integration/test_collector_orchestrator.py::test_concurrent_agents_event_capture PASSED [ 13%]
tests/integration/test_collector_orchestrator.py::test_message_published_contains_artifact_payload PASSED [ 14%]
tests/integration/test_collector_orchestrator.py::test_agent_completed_includes_metrics PASSED [ 14%]
tests/integration/test_orchestrator_dashboard.py::TestOrchestratorDashboardIntegration::test_serve_without_dashboard PASSED [ 14%]
tests/integration/test_orchestrator_dashboard.py::TestOrchestratorDashboardIntegration::test_serve_with_dashboard_false PASSED [ 14%]
tests/integration/test_orchestrator_dashboard.py::TestOrchestratorDashboardIntegration::test_serve_with_dashboard_true PASSED [ 14%]
tests/integration/test_orchestrator_dashboard.py::TestOrchestratorDashboardIntegration::test_dashboard_collector_injected_into_agents PASSED [ 14%]
tests/integration/test_orchestrator_dashboard.py::TestOrchestratorDashboardIntegration::test_multiple_agents_all_get_collector PASSED [ 14%]
tests/integration/test_orchestrator_dashboard.py::TestOrchestratorDashboardIntegration::test_websocket_manager_set_on_collector PASSED [ 14%]
tests/integration/test_orchestrator_dashboard.py::TestOrchestratorDashboardIntegration::test_dashboard_collector_receives_events PASSED [ 14%]
tests/integration/test_orchestrator_dashboard.py::TestOrchestratorDashboardIntegration::test_dashboard_launcher_port_configuration PASSED [ 14%]
tests/integration/test_orchestrator_dashboard.py::TestOrchestratorDashboardIntegration::test_dashboard_dev_mode_env_var PASSED [ 14%]
tests/integration/test_orchestrator_dashboard.py::TestOrchestratorDashboardIntegration::test_backward_compatibility_no_dashboard_parameter PASSED [ 14%]
tests/integration/test_orchestrator_dashboard.py::TestOrchestratorDashboardIntegration::test_agent_added_after_serve_behavior PASSED [ 14%]
tests/integration/test_orchestrator_dashboard.py::TestDashboardServiceIntegration::test_dashboard_service_starts_with_orchestrator PASSED [ 15%]
tests/integration/test_orchestrator_dashboard.py::TestDashboardServiceIntegration::test_websocket_endpoint_available PASSED [ 15%]
tests/integration/test_sqlite_store_integration.py::test_flock_with_sqlite_store PASSED [ 15%]
tests/integration/test_websocket_protocol.py::test_full_event_flow_agent_activated SKIPPED [ 15%]
tests/integration/test_websocket_protocol.py::test_all_five_event_types_serialization SKIPPED [ 15%]
tests/integration/test_websocket_protocol.py::test_correlation_id_propagation_through_websocket SKIPPED [ 15%]
tests/integration/test_websocket_protocol.py::test_multiple_clients_receive_same_events SKIPPED [ 15%]
tests/integration/test_websocket_protocol.py::test_event_ordering_preservation SKIPPED [ 15%]
tests/integration/test_websocket_protocol.py::test_json_serialization_deserialization_roundtrip SKIPPED [ 15%]
tests/integration/test_websocket_protocol.py::test_websocket_latency_target SKIPPED [ 15%]
tests/test_agent.py::test_agent_lifecycle_executes_all_stages_in_order PASSED [ 15%]
tests/test_agent.py::test_agent_lifecycle_state_propagates PASSED        [ 15%]
tests/test_agent.py::test_on_initialize_called_once PASSED               [ 16%]
tests/test_agent.py::test_on_error_called_on_exception PASSED            [ 16%]
tests/test_agent.py::test_on_terminate_always_called PASSED              [ 16%]
tests/test_agent.py::test_agent_respects_max_concurrency PASSED          [ 16%]
tests/test_agent.py::test_agent_best_of_n_selects_highest_score PASSED   [ 16%]
tests/test_agent.py::test_agent_best_of_one_skips_parallel_execution PASSED [ 16%]
tests/test_agent.py::test_agent_strict_validation_requires_artifacts PASSED [ 16%]
tests/test_agent.py::test_utility_agent_without_publishes_works PASSED   [ 16%]
tests/test_agent.py::test_agent_prevent_self_trigger_enabled_by_default PASSED [ 16%]
tests/test_agent.py::test_agent_prevent_self_trigger_blocks_own_artifacts PASSED [ 16%]
tests/test_agent.py::test_agent_prevent_self_trigger_disabled_allows_feedback PASSED [ 16%]
tests/test_agent.py::test_agent_validates_self_trigger_risk PASSED       [ 16%]
tests/test_agent.py::test_agent_validates_excessive_best_of PASSED       [ 17%]
tests/test_agent.py::test_agent_validates_high_concurrency PASSED        [ 17%]
tests/test_agent.py::test_agent_validation_methods_exist PASSED          [ 17%]
tests/test_agent_builder.py::test_publishes_single_call_multiple_types PASSED [ 17%]
tests/test_agent_builder.py::test_publishes_multiple_calls_create_groups PASSED [ 17%]
tests/test_agent_builder.py::test_publishes_three_separate_calls PASSED  [ 17%]
tests/test_agent_builder.py::test_publishes_duplicate_counting PASSED    [ 17%]
tests/test_agent_builder.py::test_publishes_mixed_duplicates PASSED      [ 17%]
tests/test_agent_builder.py::test_publishes_fan_out_sugar PASSED         [ 17%]
tests/test_agent_builder.py::test_publishes_fan_out_applies_to_all_types PASSED [ 17%]
tests/test_agent_builder.py::test_publishes_fan_out_one_is_default PASSED [ 17%]
tests/test_agent_builder.py::test_publishes_fan_out_zero_raises PASSED   [ 17%]
tests/test_agent_builder.py::test_publishes_fan_out_negative_raises PASSED [ 18%]
tests/test_agent_builder.py::test_publishes_where_predicate PASSED       [ 18%]
tests/test_agent_builder.py::test_publishes_where_with_lambda PASSED     [ 18%]
tests/test_agent_builder.py::test_publishes_where_none_by_default PASSED [ 18%]
tests/test_agent_builder.py::test_publishes_dynamic_visibility PASSED    [ 18%]
tests/test_agent_builder.py::test_publishes_static_visibility PASSED     [ 18%]
tests/test_agent_builder.py::test_publishes_visibility_default_is_public PASSED [ 18%]
tests/test_agent_builder.py::test_publishes_validate_single PASSED       [ 18%]
tests/test_agent_builder.py::test_publishes_validate_list_of_tuples PASSED [ 18%]
tests/test_agent_builder.py::test_publishes_validate_none_by_default PASSED [ 18%]
tests/test_agent_builder.py::test_publishes_group_description PASSED     [ 18%]
tests/test_agent_builder.py::test_publishes_description_applies_to_group PASSED [ 18%]
tests/test_agent_builder.py::test_publishes_description_none_by_default PASSED [ 18%]
tests/test_agent_builder.py::test_publishes_combined_parameters PASSED   [ 19%]
tests/test_agent_builder.py::test_publishes_all_sugar_parameters_with_multiple_types PASSED [ 19%]
tests/test_agent_builder.py::test_publishes_fan_out_zero_is_invalid PASSED [ 19%]
tests/test_agent_builder.py::test_publishes_fan_out_negative_is_invalid PASSED [ 19%]
tests/test_agent_builder.py::test_publishes_large_fan_out_is_valid PASSED [ 19%]
tests/test_agent_builder.py::test_publishes_backwards_compatibility PASSED [ 19%]
tests/test_agent_builder.py::test_publishes_backwards_compatibility_multiple_types PASSED [ 19%]
tests/test_agent_builder.py::test_publishes_backwards_compatibility_with_visibility PASSED [ 19%]
tests/test_agent_builder.py::test_publishes_chaining_with_other_methods PASSED [ 19%]
tests/test_agent_builder.py::test_publishes_returns_publish_builder PASSED [ 19%]
tests/test_agent_builder.py::test_publishes_builder_chaining PASSED      [ 19%]
tests/test_agent_builder.py::test_publishes_empty_call_not_allowed PASSED [ 19%]
tests/test_agent_builder.py::test_publishes_with_none_types_filtered PASSED [ 20%]
tests/test_agent_builder.py::test_publishes_preserves_group_order PASSED [ 20%]
tests/test_agent_builder.py::test_publishes_fan_out_with_duplicates PASSED [ 20%]
tests/test_agent_builder.py::test_publishes_agent_can_be_registered PASSED [ 20%]
tests/test_agent_builder.py::test_publishes_group_structure_complete PASSED [ 20%]
tests/test_agent_builder.py::test_multiple_publishes_calls_engine_multiple_times PASSED [ 20%]
tests/test_agent_builder.py::test_single_publishes_calls_engine_once PASSED [ 20%]
tests/test_agent_builder.py::test_fan_out_calls_engine_once_generates_multiple PASSED [ 20%]
tests/test_agent_builder.py::test_each_engine_call_receives_group_specific_context PASSED [ 20%]
tests/test_agent_builder.py::test_artifacts_from_all_groups_collected PASSED [ 20%]
tests/test_agent_builder.py::test_engine_calls_are_sequential_not_parallel PASSED [ 20%]
tests/test_agent_builder.py::test_error_in_group_stops_subsequent_groups PASSED [ 20%]
tests/test_agent_builder.py::test_mock_engine_verifies_call_count_and_behavior PASSED [ 21%]
tests/test_agent_builder.py::test_agent_without_publishes_no_engine_calls PASSED [ 21%]
tests/test_agent_mcp.py::test_agent_has_mcp_properties PASSED            [ 21%]
tests/test_agent_mcp.py::test_with_mcps_basic PASSED                     [ 21%]
tests/test_agent_mcp.py::test_with_mcps_multiple_servers PASSED          [ 21%]
tests/test_agent_mcp.py::test_with_mcps_unregistered_server_fails PASSED [ 21%]
tests/test_agent_mcp.py::test_with_mcps_method_chaining PASSED           [ 21%]
tests/test_agent_mcp.py::test_agent_without_mcps PASSED                  [ 21%]
tests/test_agent_mcp.py::test_get_mcp_tools_no_servers PASSED            [ 21%]
tests/test_agent_server_specific_mounts.py::test_with_mcps_dict_format PASSED [ 21%]
tests/test_agent_server_specific_mounts.py::test_with_mcps_list_format PASSED [ 21%]
tests/test_agent_server_specific_mounts.py::test_with_mcps_mixed_format PASSED [ 21%]
tests/test_agent_server_specific_mounts.py::test_with_mcps_invalid_server PASSED [ 22%]
tests/test_agent_server_specific_mounts.py::test_with_mcps_invalid_format PASSED [ 22%]
tests/test_agent_server_specific_mounts.py::test_mount_deprecation_warning PASSED [ 22%]
tests/test_agent_server_specific_mounts.py::test_mount_backward_compatibility PASSED [ 22%]
tests/test_agent_server_specific_mounts.py::test_mount_validation PASSED [ 22%]
tests/test_agent_server_specific_mounts.py::test_empty_mounts_in_dict PASSED [ 22%]
tests/test_agent_server_specific_mounts.py::test_get_mcp_tools_passes_server_mounts PASSED [ 22%]
tests/test_agent_server_specific_mounts.py::test_manager_passes_server_specific_mounts_to_client PASSED [ 22%]
tests/test_agent_server_specific_mounts.py::test_multiple_mount_calls_accumulate PASSED [ 22%]
tests/test_artifacts.py::test_artifact_validation_with_valid_data PASSED [ 22%]
tests/test_artifacts.py::test_artifact_validation_fails_with_invalid_data PASSED [ 22%]
tests/test_artifacts.py::test_artifact_validation_fails_with_out_of_range_value PASSED [ 22%]
tests/test_artifacts.py::test_artifact_immutability PASSED               [ 22%]
tests/test_cli_helper.py::TestVersionHandling::test_version_from_package PASSED [ 23%]
tests/test_cli_helper.py::TestVersionHandling::test_version_fallback_on_package_not_found PASSED [ 23%]
tests/test_cli_helper.py::TestDisplayHummingbird::test_display_hummingbird_prints_output PASSED [ 23%]
tests/test_cli_helper.py::TestInitConsole::test_init_console_default_params PASSED [ 23%]
tests/test_cli_helper.py::TestInitConsole::test_init_console_no_clear_screen PASSED [ 23%]
tests/test_cli_helper.py::TestInitConsole::test_init_console_no_banner PASSED [ 23%]
tests/test_cli_helper.py::TestInitConsole::test_init_console_with_model PASSED [ 23%]
tests/test_cli_helper.py::TestInitConsole::test_init_console_all_false_with_model PASSED [ 23%]
tests/test_cli_helper.py::TestInitConsole::test_init_console_version_in_banner PASSED [ 23%]
tests/test_cli_helper.py::TestInitConsole::test_init_console_banner_content PASSED [ 23%]
tests/test_cli_helper.py::TestDisplayBannerNoVersion::test_display_banner_no_version_basic PASSED [ 23%]
tests/test_cli_helper.py::TestDisplayBannerNoVersion::test_display_banner_no_version_content PASSED [ 23%]
tests/test_cli_helper.py::TestDisplayBannerNoVersion::test_display_banner_no_version_no_clear PASSED [ 24%]
tests/test_cli_helper.py::TestDisplayBannerNoVersion::test_display_banner_no_version_text_styling PASSED [ 24%]
tests/test_cli_helper.py::TestEdgeCases::test_init_console_empty_model_string PASSED [ 24%]
tests/test_cli_helper.py::TestEdgeCases::test_multiple_console_creations PASSED [ 24%]
tests/test_cli_helper.py::TestImportBehavior::test_module_imports_successfully PASSED [ 24%]
tests/test_cli_helper.py::TestImportBehavior::test_rich_imports_lazy PASSED [ 24%]
tests/test_components.py::test_components_execute_in_registration_order PASSED [ 24%]
tests/test_components.py::test_component_priority_controls_execution_order PASSED [ 24%]
tests/test_components.py::test_component_adds_state_in_pre_evaluate PASSED [ 24%]
tests/test_components.py::test_metrics_component_adds_metrics PASSED     [ 24%]
tests/test_components.py::test_component_on_error_hook_called PASSED     [ 24%]
tests/test_components.py::test_agent_component_config_with_fields PASSED [ 24%]
tests/test_components.py::test_engine_component_get_conversation_context PASSED [ 25%]
tests/test_components.py::test_engine_component_get_context_with_max_artifacts PASSED [ 25%]
tests/test_components.py::test_engine_component_get_context_with_exclude_types PASSED [ 25%]
tests/test_components.py::test_engine_component_get_context_disabled PASSED [ 25%]
tests/test_components.py::test_engine_component_get_context_no_ctx PASSED [ 25%]
tests/test_components.py::test_engine_component_should_use_context PASSED [ 25%]
tests/test_components.py::test_engine_component_evaluate_not_implemented PASSED [ 25%]
tests/test_components.py::test_agent_component_default_hooks PASSED      [ 25%]
tests/test_context_provider.py::TestContextProviderProtocol::test_context_provider_protocol_exists PASSED [ 25%]
tests/test_context_provider.py::TestContextProviderProtocol::test_context_request_dataclass_exists PASSED [ 25%]
tests/test_context_provider.py::TestDefaultContextProviderSecurity::test_default_provider_exists PASSED [ 25%]
tests/test_context_provider.py::TestDefaultContextProviderSecurity::test_default_provider_filters_by_visibility PASSED [ 25%]
tests/test_context_provider.py::TestDefaultContextProviderSecurity::test_default_provider_respects_private_visibility PASSED [ 25%]
tests/test_context_provider.py::TestDefaultContextProviderSecurity::test_default_provider_respects_tenant_visibility PASSED [ 26%]
tests/test_context_provider.py::TestDefaultContextProviderSecurity::test_default_provider_respects_label_based_visibility PASSED [ 26%]
tests/test_context_provider.py::TestDefaultContextProviderSecurity::test_default_provider_shows_all_artifacts PASSED [ 26%]
tests/test_context_provider.py::TestDefaultContextProviderSecurity::test_default_provider_returns_correct_format PASSED [ 26%]
tests/test_context_provider.py::TestContextProviderSecurityDocumentation::test_security_boundary_explanation PASSED [ 26%]
tests/test_context_provider.py::TestContextProviderSecurityDocumentation::test_visibility_enforcement_cannot_be_bypassed PASSED [ 26%]
tests/test_context_provider.py::TestPluggableProviders::test_flock_accepts_context_provider_parameter PASSED [ 26%]
tests/test_context_provider.py::TestPluggableProviders::test_flock_context_provider_defaults_to_none PASSED [ 26%]
tests/test_context_provider.py::TestPluggableProviders::test_agent_builder_has_with_context_method PASSED [ 26%]
tests/test_context_provider.py::TestPluggableProviders::test_agent_builder_with_context_stores_provider PASSED [ 26%]
tests/test_context_provider.py::TestPluggableProviders::test_agent_builder_with_context_returns_self PASSED [ 26%]
tests/test_context_provider.py::TestPluggableProviders::test_per_agent_provider_overrides_global_provider PASSED [ 26%]
tests/test_context_provider.py::TestPluggableProviders::test_agent_without_context_provider_attribute_by_default PASSED [ 27%]
tests/test_context_provider.py::TestFilteredContextProvider::test_filtered_provider_exists PASSED [ 27%]
tests/test_context_provider.py::TestFilteredContextProvider::test_filtered_provider_filters_by_tags PASSED [ 27%]
tests/test_context_provider.py::TestFilteredContextProvider::test_filtered_provider_filters_by_type PASSED [ 27%]
tests/test_context_provider.py::TestFilteredContextProvider::test_filtered_provider_still_enforces_visibility PASSED [ 27%]
tests/test_context_provider.py::TestFilteredContextProvider::test_filtered_provider_respects_limit PASSED [ 27%]
tests/test_context_provider.py::TestFilteredContextProvider::test_filtered_provider_returns_correct_format PASSED [ 27%]
tests/test_context_provider.py::TestCorrelatedContextProvider::test_correlated_provider_exists PASSED [ 27%]
tests/test_context_provider.py::TestCorrelatedContextProvider::test_correlated_provider_filters_by_correlation_id PASSED [ 27%]
tests/test_context_provider.py::TestCorrelatedContextProvider::test_correlated_provider_enforces_visibility PASSED [ 27%]
tests/test_context_provider.py::TestRecentContextProvider::test_recent_provider_exists PASSED [ 27%]
tests/test_context_provider.py::TestRecentContextProvider::test_recent_provider_limits_to_n_artifacts PASSED [ 27%]
tests/test_context_provider.py::TestRecentContextProvider::test_recent_provider_enforces_visibility PASSED [ 28%]
tests/test_context_provider.py::TestTimeWindowContextProvider::test_time_window_provider_exists PASSED [ 28%]
tests/test_context_provider.py::TestTimeWindowContextProvider::test_time_window_provider_filters_by_time PASSED [ 28%]
tests/test_context_provider.py::TestTimeWindowContextProvider::test_time_window_provider_enforces_visibility PASSED [ 28%]
tests/test_context_provider.py::TestEmptyContextProvider::test_empty_provider_exists PASSED [ 28%]
tests/test_context_provider.py::TestEmptyContextProvider::test_empty_provider_returns_empty_list PASSED [ 28%]
tests/test_context_provider.py::TestEmptyContextProvider::test_empty_provider_ignores_visibility PASSED [ 28%]
tests/test_context_security.py::TestContextSecurityPhase1::test_context_has_no_board_attribute PASSED [ 28%]
tests/test_context_security.py::TestContextSecurityPhase1::test_context_has_no_orchestrator_attribute PASSED [ 28%]
tests/test_context_security.py::TestContextSecurityPhase1::test_context_retains_safe_fields PASSED [ 28%]
tests/test_context_security.py::TestContextSecurityPhase1::test_agent_cannot_use_ctx_board_list_pattern PASSED [ 28%]
tests/test_context_security.py::TestContextSecurityPhase1::test_agent_cannot_use_ctx_board_publish_pattern PASSED [ 28%]
tests/test_context_security.py::TestContextSecurityPhase1::test_agent_cannot_use_ctx_orchestrator_pattern PASSED [ 29%]
tests/test_context_security.py::TestContextSecurityPhase1::test_context_creation_without_board_and_orchestrator PASSED [ 29%]
tests/test_context_security.py::TestContextSecurityPhase7IdentitySpoofing::test_context_is_frozen_immutable PASSED [ 29%]
tests/test_context_security.py::TestContextSecurityPhase7IdentitySpoofing::test_context_prevents_field_mutation PASSED [ 29%]
tests/test_context_security.py::TestContextSecurityPhase7IdentitySpoofing::test_engine_cannot_query_store_directly PASSED [ 29%]
tests/test_context_security.py::TestContextSecurityPhase7IdentitySpoofing::test_context_has_only_pre_filtered_artifacts PASSED [ 29%]
tests/test_context_security.py::TestContextSecurityDocumentation::test_security_vulnerability_documentation PASSED [ 29%]
tests/test_dashboard_api.py::test_publish_accepts_artifact_type_and_content PASSED [ 29%]
tests/test_dashboard_api.py::test_publish_calls_orchestrator_publish_with_correct_parameters PASSED [ 29%]
tests/test_dashboard_api.py::test_publish_returns_correlation_id_and_timestamp PASSED [ 29%]
tests/test_dashboard_api.py::test_publish_validates_pydantic_schema PASSED [ 29%]
tests/test_dashboard_api.py::test_publish_handles_missing_required_fields PASSED [ 29%]
tests/test_dashboard_api.py::test_invoke_accepts_agent_name_parameter PASSED [ 29%]
tests/test_dashboard_api.py::test_invoke_calls_orchestrator_invoke_with_correct_agent PASSED [ 30%]
tests/test_dashboard_api.py::test_invoke_returns_invocation_id PASSED    [ 30%]
tests/test_dashboard_api.py::test_invoke_handles_unknown_agent_name PASSED [ 30%]
tests/test_dashboard_api.py::test_pause_endpoint_returns_501_not_implemented PASSED [ 30%]
tests/test_dashboard_api.py::test_resume_endpoint_returns_501_not_implemented PASSED [ 30%]
tests/test_dashboard_api.py::test_publish_with_custom_correlation_id PASSED [ 30%]
tests/test_dashboard_api.py::test_invoke_with_multiple_outputs PASSED    [ 30%]
tests/test_dashboard_api.py::test_control_endpoints_use_json_content_type PASSED [ 30%]
tests/test_dashboard_api.py::test_publish_handles_orchestrator_publish_failure PASSED [ 30%]
tests/test_dashboard_api.py::test_invoke_handles_orchestrator_invoke_failure PASSED [ 30%]
tests/test_dashboard_collector.py::test_on_pre_consume_emits_agent_activated PASSED [ 30%]
tests/test_dashboard_collector.py::test_on_post_publish_emits_message_published PASSED [ 30%]
tests/test_dashboard_collector.py::test_snapshot_agent_registry_tracks_metadata PASSED [ 31%]
tests/test_dashboard_collector.py::test_on_terminate_emits_agent_completed PASSED [ 31%]
tests/test_dashboard_collector.py::test_on_error_emits_agent_error PASSED [ 31%]
tests/test_dashboard_collector.py::test_correlation_id_propagation PASSED [ 31%]
tests/test_dashboard_collector.py::test_event_schemas_match_data_model PASSED [ 31%]
tests/test_dashboard_collector.py::test_in_memory_buffer_max_size PASSED [ 31%]
tests/test_dashboard_collector.py::test_multiple_agents_different_correlation_ids PASSED [ 31%]
tests/test_dashboard_collector.py::test_visibility_serialization PASSED  [ 31%]
tests/test_dashboard_collector.py::test_event_timestamps_are_iso_format PASSED [ 31%]
tests/test_dashboard_collector.py::test_collector_as_agent_component PASSED [ 31%]
tests/test_dashboard_graph.py::test_graph_assembler_agent_and_blackboard PASSED [ 31%]
tests/test_dashboard_graph.py::test_dashboard_graph_endpoint PASSED      [ 31%]
tests/test_dashboard_graph.py::test_graph_assembler_inactive_agent_node PASSED [ 32%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_initialization PASSED [ 32%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_initialization_dev_mode PASSED [ 32%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_npm_install_check_needed PASSED [ 32%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_npm_install_runs_when_exists PASSED [ 32%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_start_dev_server PASSED [ 32%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_start_production_build PASSED [ 32%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_launch_browser PASSED [ 32%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_launch_browser_error_handling PASSED [ 32%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_start_full_flow PASSED [ 32%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_stop_without_process PASSED [ 32%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_stop_with_running_process PASSED [ 32%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_stop_kills_if_terminate_fails PASSED [ 33%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_context_manager PASSED [ 33%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_npm_install_error_handling PASSED [ 33%]
tests/test_dashboard_launcher.py::TestDashboardLauncher::test_frontend_dir_exists PASSED [ 33%]
tests/test_dashboard_service.py::test_service_extends_blackboard_http_service PASSED [ 33%]
tests/test_dashboard_service.py::test_websocket_endpoint_mounted PASSED  [ 33%]
tests/test_dashboard_service.py::test_static_file_serving PASSED         [ 33%]
tests/test_dashboard_service.py::test_dashboard_event_collector_integration PASSED [ 33%]
tests/test_dashboard_service.py::test_multiple_websocket_connections PASSED [ 33%]
tests/test_dashboard_service.py::test_websocket_connection_lifecycle PASSED [ 33%]
tests/test_dashboard_service.py::test_orchestrator_serve_dashboard_integration SKIPPED [ 33%]
tests/test_dashboard_service.py::test_backward_compatibility_dashboard_false SKIPPED [ 33%]
tests/test_dashboard_service.py::test_dashboard_dev_environment_variable_cors PASSED [ 33%]
tests/test_dashboard_service.py::test_dashboard_service_cleanup_on_shutdown PASSED [ 34%]
tests/test_dashboard_service.py::test_get_artifact_types_success PASSED  [ 34%]
tests/test_dashboard_service.py::test_get_artifact_types_handles_schema_errors PASSED [ 34%]
tests/test_dashboard_service.py::test_get_artifact_types_empty_registry PASSED [ 34%]
tests/test_dashboard_service.py::test_get_agents_success PASSED          [ 34%]
tests/test_dashboard_service.py::test_get_agents_multiple_agents PASSED  [ 34%]
tests/test_dashboard_service.py::test_get_agents_empty_list PASSED       [ 34%]
tests/test_dashboard_service.py::test_get_agents_with_joinspec_returns_logic_operations PASSED [ 34%]
tests/test_dashboard_service.py::test_get_agents_with_batchspec_returns_logic_operations PASSED [ 34%]
tests/test_dashboard_service.py::test_get_agents_with_waiting_correlation_groups PASSED [ 34%]
tests/test_dashboard_service.py::test_get_agents_with_batch_accumulating PASSED [ 34%]
tests/test_dashboard_service.py::test_get_agents_with_both_joinspec_and_batchspec PASSED [ 34%]
tests/test_dashboard_service.py::test_get_agents_without_logic_operations PASSED [ 35%]
tests/test_dashboard_service.py::test_get_agents_multiple_subscriptions_with_logic_ops PASSED [ 35%]
tests/test_dashboard_service.py::test_get_version_success PASSED         [ 35%]
tests/test_dashboard_service.py::test_get_version_package_not_found PASSED [ 35%]
tests/test_dashboard_service.py::test_publish_artifact_success PASSED    [ 35%]
tests/test_dashboard_service.py::test_publish_artifact_missing_artifact_type PASSED [ 35%]
tests/test_dashboard_service.py::test_publish_artifact_missing_content PASSED [ 35%]
tests/test_dashboard_service.py::test_publish_artifact_unknown_type PASSED [ 35%]
tests/test_dashboard_service.py::test_publish_artifact_validation_error PASSED [ 35%]
tests/test_dashboard_service.py::test_publish_artifact_orchestrator_error PASSED [ 35%]
tests/test_dashboard_service.py::test_invoke_agent_success PASSED        [ 35%]
tests/test_dashboard_service.py::test_invoke_agent_missing_agent_name PASSED [ 35%]
tests/test_dashboard_service.py::test_invoke_agent_missing_input PASSED  [ 36%]
tests/test_dashboard_service.py::test_invoke_agent_missing_input_type PASSED [ 36%]
tests/test_dashboard_service.py::test_invoke_agent_not_found PASSED      [ 36%]
tests/test_dashboard_service.py::test_invoke_agent_unknown_input_type PASSED [ 36%]
tests/test_dashboard_service.py::test_invoke_agent_validation_error PASSED [ 36%]
tests/test_dashboard_service.py::test_invoke_agent_no_outputs PASSED     [ 36%]
tests/test_dashboard_service.py::test_invoke_agent_orchestrator_error PASSED [ 36%]
tests/test_dashboard_service.py::test_pause_orchestrator_not_implemented PASSED [ 36%]
tests/test_dashboard_service.py::test_resume_orchestrator_not_implemented PASSED [ 36%]
tests/test_dashboard_service.py::test_get_streaming_history_success PASSED [ 36%]
tests/test_dashboard_service.py::test_get_streaming_history_empty PASSED [ 36%]
tests/test_dashboard_service.py::test_get_streaming_history_error PASSED [ 36%]
tests/test_dashboard_service.py::test_list_themes_success PASSED         [ 37%]
tests/test_dashboard_service.py::test_list_themes_no_directory PASSED    [ 37%]
tests/test_dashboard_service.py::test_list_themes_error PASSED           [ 37%]
tests/test_dashboard_service.py::test_get_theme_success PASSED           [ 37%]
tests/test_dashboard_service.py::test_get_theme_not_found PASSED         [ 37%]
tests/test_dashboard_service.py::test_get_theme_path_traversal_protection PASSED [ 37%]
tests/test_dashboard_service.py::test_get_theme_load_error PASSED        [ 37%]
tests/test_dashboard_service.py::test_all_api_endpoints_respond PASSED   [ 37%]
tests/test_dashboard_service.py::test_correlation_id_generation_and_timestamp_formatting PASSED [ 37%]
tests/test_dashboard_service.py::test_json_serialization_and_content_type_headers PASSED [ 37%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_engine_initialization_with_defaults PASSED [ 37%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_engine_initialization_with_custom_parameters PASSED [ 37%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_default_stream_value_in_pytest PASSED [ 37%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_resolve_model_name_with_explicit_model PASSED [ 38%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_resolve_model_name_with_env_var PASSED [ 38%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_resolve_model_name_with_default_model_env_var PASSED [ 38%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_resolve_model_name_raises_error_when_no_model PASSED [ 38%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_import_dspy_exists PASSED [ 38%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_dspy_engine_can_be_created PASSED [ 38%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_select_primary_artifact PASSED [ 38%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_resolve_input_model_success PASSED [ 38%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_resolve_input_model_failure PASSED [ 38%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_resolve_output_model_with_outputs PASSED [ 38%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_resolve_output_model_without_outputs PASSED [ 38%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_validate_input_payload_with_schema PASSED [ 38%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_validate_input_payload_with_invalid_payload PASSED [ 39%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_validate_input_payload_without_schema PASSED [ 39%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_validate_input_payload_with_none_payload PASSED [ 39%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_normalize_output_payload_with_base_model PASSED [ 39%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_normalize_output_payload_with_json_string PASSED [ 39%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_normalize_output_payload_with_invalid_json_string PASSED [ 39%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_normalize_output_payload_with_mapping PASSED [ 39%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_normalize_output_payload_with_other_type PASSED [ 39%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_system_description_with_instructions PASSED [ 39%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_system_description_without_instructions PASSED [ 39%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_choose_program_with_tools PASSED [ 39%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_choose_program_without_tools PASSED [ 39%]
tests/test_dspy_engine.py::TestDSPyEngineBasics::test_choose_program_with_react_failure PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineSignature::test_prepare_signature_without_context PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineSignature::test_prepare_signature_with_context PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineSignature::test_prepare_signature_without_schemas PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineSignature::test_prepare_signature_instruction_building PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineSignature::test_prepare_signature_with_batch_schema PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineArtifactMaterialization::test_materialize_artifacts_success PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineArtifactMaterialization::test_materialize_artifacts_with_validation_error PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineArtifactMaterialization::test_materialize_artifacts_without_outputs PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineArtifactMaterialization::test_select_output_payload_with_type_name_match PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineArtifactMaterialization::test_select_output_payload_with_class_name_match PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineArtifactMaterialization::test_select_output_payload_with_class_name_lowercase_match PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineArtifactMaterialization::test_select_output_payload_without_match PASSED [ 40%]
tests/test_dspy_engine.py::TestDSPyEngineArtifactMaterialization::test_select_output_payload_with_non_mapping_payload PASSED [ 41%]
tests/test_dspy_engine.py::TestDSPyEngineContext::test_conversation_context_method_exists PASSED [ 41%]
tests/test_dspy_engine.py::TestDSPyEngineContext::test_get_conversation_context_with_prefiltered_artifacts PASSED [ 41%]
tests/test_dspy_engine.py::TestDSPyEngineContext::test_get_conversation_context_with_empty_artifacts PASSED [ 41%]
tests/test_dspy_engine.py::TestDSPyEngineExecution::test_execute_standard_with_new_format PASSED [ 41%]
tests/test_dspy_engine.py::TestDSPyEngineExecution::test_execute_standard_with_old_format PASSED [ 41%]
tests/test_dspy_engine.py::TestDSPyEngineExecution::test_execute_standard_with_context_in_payload PASSED [ 41%]
tests/test_dspy_engine.py::TestDSPyEngineRichLivePatch::test_ensure_live_crop_above_idempotency PASSED [ 41%]
tests/test_dspy_engine.py::TestDSPyEngineRichLivePatch::test_ensure_live_crop_above_without_rich PASSED [ 41%]
tests/test_dspy_engine.py::TestDSPyEngineRichLivePatch::test_apply_live_patch_on_import_success PASSED [ 41%]
tests/test_dspy_engine.py::TestDSPyEngineRichLivePatch::test_apply_live_patch_on_import_failure PASSED [ 41%]
tests/test_dspy_engine.py::TestDSPyEngineErrorHandling::test_evaluation_without_artifacts PASSED [ 41%]
tests/test_dspy_engine.py::TestDSPyEngineErrorHandling::test_json_serialization_error_in_logs PASSED [ 42%]
tests/test_dspy_engine.py::TestDSPyEngineIntegration::test_full_evaluation_flow_without_streaming PASSED [ 42%]
tests/test_dspy_engine.py::TestDSPyEngineIntegration::test_batch_evaluation_passes_list_payload PASSED [ 42%]
tests/test_dspy_engine.py::TestDSPyEngineIntegration::test_evaluation_with_complex_input_output PASSED [ 42%]
tests/test_dspy_engine_mcp.py::test_engine_merges_native_and_mcp_tools PASSED [ 42%]
tests/test_dspy_engine_mcp.py::test_engine_graceful_degradation_on_mcp_failure PASSED [ 42%]
tests/test_dspy_engine_mcp.py::test_engine_with_no_mcp_tools PASSED      [ 42%]
tests/test_dspy_engine_multioutput.py::TestBackwardCompatibilitySingleOutput::test_single_output_with_pydantic_model SKIPPED [ 42%]
tests/test_dspy_engine_multioutput.py::TestBackwardCompatibilitySingleOutput::test_single_output_with_primitive_type SKIPPED [ 42%]
tests/test_dspy_engine_multioutput.py::TestBackwardCompatibilitySingleOutput::test_single_output_with_dict_schema SKIPPED [ 42%]
tests/test_dspy_engine_multioutput.py::TestBackwardCompatibilitySingleOutput::test_single_output_error_handling SKIPPED [ 42%]
tests/test_dspy_engine_multioutput.py::TestBackwardCompatibilitySingleOutput::test_routing_logic_uses_old_path_for_single PASSED [ 42%]
tests/test_dspy_engine_multioutput.py::TestMultipleOutputsDifferentTypes::test_two_different_output_types SKIPPED [ 43%]
tests/test_dspy_engine_multioutput.py::TestMultipleOutputsDifferentTypes::test_three_different_output_types SKIPPED [ 43%]
tests/test_dspy_engine_multioutput.py::TestMultipleOutputsDifferentTypes::test_five_plus_output_types SKIPPED [ 43%]
tests/test_dspy_engine_multioutput.py::TestMultipleOutputsDifferentTypes::test_mixed_pydantic_and_primitives SKIPPED [ 43%]
tests/test_dspy_engine_multioutput.py::TestMultipleOutputsDifferentTypes::test_snake_case_conversion_for_camel_case_types PASSED [ 43%]
tests/test_dspy_engine_multioutput.py::TestMultipleOutputsDifferentTypes::test_extraction_maps_semantic_fields_to_artifacts SKIPPED [ 43%]
tests/test_dspy_engine_multioutput.py::TestFanOutMultipleInstances::test_fan_out_three_artifacts SKIPPED [ 43%]
tests/test_dspy_engine_multioutput.py::TestFanOutMultipleInstances::test_fan_out_ten_artifacts SKIPPED [ 43%]
tests/test_dspy_engine_multioutput.py::TestFanOutMultipleInstances::test_fan_out_one_artifact SKIPPED [ 43%]
tests/test_dspy_engine_multioutput.py::TestFanOutMultipleInstances::test_pluralization_rules PASSED [ 43%]
tests/test_dspy_engine_multioutput.py::TestFanOutMultipleInstances::test_count_hint_in_field_description PASSED [ 43%]
tests/test_dspy_engine_multioutput.py::TestFanOutMultipleInstances::test_extraction_of_list_results SKIPPED [ 43%]
tests/test_dspy_engine_multioutput.py::TestMultiInputAndBatching::test_multi_input_two_artifacts PASSED [ 44%]
tests/test_dspy_engine_multioutput.py::TestMultiInputAndBatching::test_batched_input_pluralized_field PASSED [ 44%]
tests/test_dspy_engine_multioutput.py::TestMultiInputAndBatching::test_batched_multi_output_all_lists PASSED [ 44%]
tests/test_dspy_engine_multioutput.py::TestPayloadPreparation::test_payload_single_input_single_output PASSED [ 44%]
tests/test_dspy_engine_multioutput.py::TestPayloadPreparation::test_payload_multi_input_join PASSED [ 44%]
tests/test_dspy_engine_multioutput.py::TestPayloadPreparation::test_payload_batched_input_pluralized PASSED [ 44%]
tests/test_dspy_engine_multioutput.py::TestPayloadPreparation::test_payload_with_context_history PASSED [ 44%]
tests/test_dspy_engine_multioutput.py::TestPayloadPreparation::test_payload_snake_case_field_names PASSED [ 44%]
tests/test_dspy_engine_multioutput.py::TestComplexScenarios::test_multiple_outputs_plus_fan_out SKIPPED [ 44%]
tests/test_dspy_engine_multioutput.py::TestComplexScenarios::test_collision_same_input_output_type SKIPPED [ 44%]
tests/test_dspy_engine_multioutput.py::TestComplexScenarios::test_multiple_inputs_multiple_outputs SKIPPED [ 44%]
tests/test_dspy_engine_multioutput.py::TestComplexScenarios::test_group_description_override SKIPPED [ 44%]
tests/test_dspy_engine_multioutput.py::TestComplexScenarios::test_empty_inputs_returns_empty_result PASSED [ 44%]
tests/test_dspy_engine_multioutput.py::TestComplexScenarios::test_state_management_across_complex_outputs SKIPPED [ 45%]
tests/test_dspy_engine_multioutput.py::TestContractValidation::test_contract_enforced_exact_count SKIPPED [ 45%]
tests/test_dspy_engine_multioutput.py::TestContractValidation::test_error_when_wrong_count SKIPPED [ 45%]
tests/test_dspy_engine_multioutput.py::TestContractValidation::test_error_when_wrong_types SKIPPED [ 45%]
tests/test_dspy_engine_multioutput.py::TestContractValidation::test_error_messages_guide_debugging SKIPPED [ 45%]
tests/test_dspy_engine_multioutput.py::TestContractValidation::test_validation_per_artifact_in_fan_out SKIPPED [ 45%]
tests/test_dspy_engine_multioutput.py::TestIntegrationFullFlow::test_agent_with_multi_output_dspy_engine SKIPPED [ 45%]
tests/test_dspy_engine_multioutput.py::TestIntegrationFullFlow::test_multi_output_with_where_filtering SKIPPED [ 45%]
tests/test_dspy_engine_multioutput.py::TestIntegrationFullFlow::test_multi_output_with_validate_predicates SKIPPED [ 45%]
tests/test_dspy_engine_multioutput.py::TestIntegrationFullFlow::test_multi_output_with_dynamic_visibility SKIPPED [ 45%]
tests/test_dspy_engine_multioutput.py::TestIntegrationFullFlow::test_complete_scenario_all_features SKIPPED [ 45%]
tests/test_dspy_engine_multioutput.py::TestIntegrationFullFlow::test_traces_show_semantic_field_names SKIPPED [ 45%]
tests/test_dspy_streaming_events.py::TestWebSocketManagerRetrieval::test_gets_manager_from_orchestrator_collector PASSED [ 46%]
tests/test_dspy_streaming_events.py::TestWebSocketManagerRetrieval::test_graceful_degradation_without_orchestrator PASSED [ 46%]
tests/test_dspy_streaming_events.py::TestWebSocketManagerRetrieval::test_graceful_degradation_without_collector PASSED [ 46%]
tests/test_dspy_streaming_events.py::TestStreamingOutputEventCreation::test_status_message_creates_log_event PASSED [ 46%]
tests/test_dspy_streaming_events.py::TestStreamingOutputEventCreation::test_stream_response_creates_llm_token_event PASSED [ 46%]
tests/test_dspy_streaming_events.py::TestStreamingOutputEventCreation::test_final_event_has_is_final_true PASSED [ 46%]
tests/test_dspy_streaming_events.py::TestStreamingOutputEventCreation::test_event_includes_correlation_id PASSED [ 46%]
tests/test_dspy_streaming_events.py::TestStreamingOutputEventCreation::test_timestamp_is_auto_generated PASSED [ 46%]
tests/test_dspy_streaming_events.py::TestSequenceOrdering::test_sequence_increments_monotonically PASSED [ 46%]
tests/test_dspy_streaming_events.py::TestEventSerialization::test_event_serializes_to_json PASSED [ 46%]
tests/test_dspy_streaming_events.py::TestEventSerialization::test_event_dict_has_required_fields PASSED [ 46%]
tests/test_dspy_streaming_events.py::TestStreamingDisabledInTests::test_dspy_engine_detects_pytest PASSED [ 46%]
tests/test_dspy_streaming_events.py::TestStreamingDisabledInTests::test_engine_defaults_to_no_streaming_in_tests PASSED [ 47%]
tests/test_dspy_streaming_events.py::TestStreamingDisabledInTests::test_engine_respects_explicit_stream_true PASSED [ 47%]
tests/test_dspy_streaming_events.py::test_websocket_broadcast_called_with_event PASSED [ 47%]
tests/test_dspy_streaming_events.py::test_broadcast_error_is_caught_gracefully PASSED [ 47%]
tests/test_engine_context.py::TestEngineUsesProvider::test_engine_uses_provider_not_ctx_board PASSED [ 47%]
tests/test_engine_context.py::TestEngineUsesProvider::test_engine_respects_visibility_enforcement PASSED [ 47%]
tests/test_engine_context.py::TestEngineUsesProvider::test_engine_filters_by_correlation_id PASSED [ 47%]
tests/test_engine_context.py::TestEngineUsesProvider::test_engine_respects_context_exclude_types PASSED [ 47%]
tests/test_engine_context.py::TestEngineUsesProvider::test_engine_respects_context_max_artifacts PASSED [ 47%]
tests/test_engine_context.py::TestEngineUsesProvider::test_engine_works_with_custom_provider PASSED [ 47%]
tests/test_engine_context.py::TestEngineUsesProvider::test_engine_returns_correct_format PASSED [ 47%]
tests/test_filtering_validation.py::test_where_filtering_reduces_published_artifacts PASSED [ 47%]
tests/test_filtering_validation.py::test_where_filtering_with_no_matches_publishes_nothing PASSED [ 48%]
tests/test_filtering_validation.py::test_where_filtering_with_complex_predicate PASSED [ 48%]
tests/test_filtering_validation.py::test_validate_single_predicate_rejects_invalid PASSED [ 48%]
tests/test_filtering_validation.py::test_validate_list_of_tuples_with_custom_messages PASSED [ 48%]
tests/test_filtering_validation.py::test_validate_all_checks_must_pass PASSED [ 48%]
tests/test_filtering_validation.py::test_validate_passes_when_all_artifacts_valid PASSED [ 48%]
tests/test_filtering_validation.py::test_dynamic_visibility_based_on_content PASSED [ 48%]
tests/test_filtering_validation.py::test_static_visibility_applied_to_all PASSED [ 48%]
tests/test_filtering_validation.py::test_where_and_validate_applied_in_order PASSED [ 48%]
tests/test_filtering_validation.py::test_where_validate_and_visibility_all_together PASSED [ 48%]
tests/test_filtering_validation.py::test_error_messages_include_artifact_type PASSED [ 48%]
tests/test_logging_config.py::TestLogLevels::test_log_levels_mapping PASSED [ 48%]
tests/test_logging_config.py::TestLogLevels::test_get_default_severity_with_string PASSED [ 48%]
tests/test_logging_config.py::TestLogLevels::test_get_default_severity_with_int PASSED [ 49%]
tests/test_logging_config.py::TestLogLevels::test_get_default_severity_unknown_string PASSED [ 49%]
tests/test_logging_config.py::TestWorkflowContext::test_in_workflow_context_returns_false PASSED [ 49%]
tests/test_logging_config.py::TestTraceId::test_get_current_trace_id_valid PASSED [ 49%]
tests/test_logging_config.py::TestTraceId::test_get_current_trace_id_invalid PASSED [ 49%]
tests/test_logging_config.py::TestColorMapping::test_color_for_category_exact_match PASSED [ 49%]
tests/test_logging_config.py::TestColorMapping::test_color_for_category_hierarchical PASSED [ 49%]
tests/test_logging_config.py::TestColorMapping::test_color_for_category_unknown PASSED [ 49%]
tests/test_logging_config.py::TestColorMapping::test_bold_categories PASSED [ 49%]
tests/test_logging_config.py::TestCustomFormat::test_custom_format_basic PASSED [ 49%]
tests/test_logging_config.py::TestCustomFormat::test_custom_format_truncation PASSED [ 49%]
tests/test_logging_config.py::TestCustomFormat::test_custom_format_bold_category PASSED [ 49%]
tests/test_logging_config.py::TestCustomFormat::test_custom_format_escapes_braces PASSED [ 50%]
tests/test_logging_config.py::TestSinks::test_immediate_flush_sink_default_stream PASSED [ 50%]
tests/test_logging_config.py::TestSinks::test_immediate_flush_sink_custom_stream PASSED [ 50%]
tests/test_logging_config.py::TestSinks::test_immediate_flush_sink_flush_called PASSED [ 50%]
tests/test_logging_config.py::TestSinks::test_print_and_flush_sink PASSED [ 50%]
tests/test_logging_config.py::TestSinks::test_print_and_flush_sink_flush PASSED [ 50%]
tests/test_logging_config.py::TestDummyLogger::test_dummy_logger_methods PASSED [ 50%]
tests/test_logging_config.py::TestDummyLogger::test_dummy_logger_singleton PASSED [ 50%]
tests/test_logging_config.py::TestFlockLogger::test_flock_logger_initialization PASSED [ 50%]
tests/test_logging_config.py::TestFlockLogger::test_flock_logger_get_logger PASSED [ 50%]
tests/test_logging_config.py::TestFlockLogger::test_flock_logger_truncate_message PASSED [ 50%]
tests/test_logging_config.py::TestFlockLogger::test_flock_logger_debug PASSED [ 50%]
tests/test_logging_config.py::TestFlockLogger::test_flock_logger_debug_filtered PASSED [ 51%]
tests/test_logging_config.py::TestFlockLogger::test_flock_logger_info PASSED [ 51%]
tests/test_logging_config.py::TestFlockLogger::test_flock_logger_warning PASSED [ 51%]
tests/test_logging_config.py::TestFlockLogger::test_flock_logger_error PASSED [ 51%]
tests/test_logging_config.py::TestFlockLogger::test_flock_logger_exception PASSED [ 51%]
tests/test_logging_config.py::TestFlockLogger::test_flock_logger_success PASSED [ 51%]
tests/test_logging_config.py::TestFlockLogger::test_flock_logger_no_logs_level PASSED [ 51%]
tests/test_logging_config.py::TestFlockLogger::test_flock_logger_with_max_length PASSED [ 51%]
tests/test_logging_config.py::TestLoggerManagement::test_get_logger_creates_new PASSED [ 51%]
tests/test_logging_config.py::TestLoggerManagement::test_get_logger_returns_cached PASSED [ 51%]
tests/test_logging_config.py::TestLoggerManagement::test_get_logger_default_name PASSED [ 51%]
tests/test_logging_config.py::TestLoggerManagement::test_get_logger_respects_specific_severity PASSED [ 51%]
tests/test_logging_config.py::TestLoggerManagement::test_get_module_loggers PASSED [ 51%]
tests/test_logging_config.py::TestConfigureLogging::test_configure_logging_basic PASSED [ 52%]
tests/test_logging_config.py::TestConfigureLogging::test_configure_logging_with_specific_levels PASSED [ 52%]
tests/test_logging_config.py::TestConfigureLogging::test_configure_logging_with_int_levels PASSED [ 52%]
tests/test_logging_config.py::TestTruncateForLogging::test_truncate_string PASSED [ 52%]
tests/test_logging_config.py::TestTruncateForLogging::test_truncate_dict PASSED [ 52%]
tests/test_logging_config.py::TestTruncateForLogging::test_truncate_dict_recursive PASSED [ 52%]
tests/test_logging_config.py::TestTruncateForLogging::test_truncate_list PASSED [ 52%]
tests/test_logging_config.py::TestTruncateForLogging::test_truncate_list_recursive PASSED [ 52%]
tests/test_logging_config.py::TestTruncateForLogging::test_truncate_other_types PASSED [ 52%]
tests/test_logging_config.py::TestLoggerConstants::test_loggers_list PASSED [ 52%]
tests/test_logging_config.py::TestLoggerConstants::test_color_map_completeness PASSED [ 52%]
tests/test_logging_config.py::TestEdgeCases::test_logger_with_extra_args_kwargs PASSED [ 52%]
tests/test_logging_config.py::TestEdgeCases::test_custom_format_missing_fields PASSED [ 53%]
tests/test_mcp_client.py::TestClientInitialization::test_client_initialization_with_defaults PASSED [ 53%]
tests/test_mcp_client.py::TestClientInitialization::test_client_initialization_with_custom_parameters PASSED [ 53%]
tests/test_mcp_client.py::TestClientInitialization::test_client_initialization_with_config_roots PASSED [ 53%]
tests/test_mcp_client.py::TestClientInitialization::test_session_proxy_property PASSED [ 53%]
tests/test_mcp_client.py::TestSessionProxy::test_session_proxy_successful_call PASSED [ 53%]
tests/test_mcp_client.py::TestSessionProxy::test_session_proxy_with_timeout_retry PASSED [ 53%]
tests/test_mcp_client.py::TestSessionProxy::test_session_proxy_with_broken_pipe_error PASSED [ 53%]
tests/test_mcp_client.py::TestSessionProxy::test_session_proxy_max_retries_exceeded PASSED [ 53%]
tests/test_mcp_client.py::TestSessionProxy::test_session_proxy_mcp_error_no_retry PASSED [ 53%]
tests/test_mcp_client.py::TestToolOperations::test_get_tools_enabled PASSED [ 53%]
tests/test_mcp_client.py::TestToolOperations::test_get_tools_disabled PASSED [ 53%]
tests/test_mcp_client.py::TestToolOperations::test_get_tools_caching PASSED [ 54%]
tests/test_mcp_client.py::TestToolOperations::test_call_tool_success PASSED [ 54%]
tests/test_mcp_client.py::TestToolOperations::test_call_tool_caching PASSED [ 54%]
tests/test_mcp_client.py::TestRootsOperations::test_get_server_name PASSED [ 54%]
tests/test_mcp_client.py::TestRootsOperations::test_get_roots PASSED     [ 54%]
tests/test_mcp_client.py::TestRootsOperations::test_set_roots PASSED     [ 54%]
tests/test_mcp_client.py::TestRootsOperations::test_set_roots_with_mcp_error PASSED [ 54%]
tests/test_mcp_client.py::TestCacheInvalidation::test_invalidate_tool_cache PASSED [ 54%]
tests/test_mcp_client.py::TestCacheInvalidation::test_invalidate_tool_cache_when_empty PASSED [ 54%]
tests/test_mcp_client.py::TestCacheInvalidation::test_invalidate_resource_list_cache PASSED [ 54%]
tests/test_mcp_client.py::TestCacheInvalidation::test_invalidate_resource_contents_cache PASSED [ 54%]
tests/test_mcp_client.py::TestCacheInvalidation::test_invalidate_resource_contents_cache_entry PASSED [ 54%]
tests/test_mcp_client.py::TestCacheInvalidation::test_invalidate_nonexistent_cache_entry PASSED [ 55%]
tests/test_mcp_client.py::TestConnectionManagement::test_disconnect PASSED [ 55%]
tests/test_mcp_client.py::TestConnectionManagement::test_connect_already_connected PASSED [ 55%]
tests/test_mcp_client.py::TestConnectionManagement::test_create_session PASSED [ 55%]
tests/test_mcp_client.py::TestConnectionManagement::test_create_session_with_additional_params PASSED [ 55%]
tests/test_mcp_client.py::TestConnectionManagement::test_perform_initial_handshake PASSED [ 55%]
tests/test_mcp_client.py::TestConnectionManagement::test_perform_initial_handshake_logging_error PASSED [ 55%]
tests/test_mcp_client.py::TestConnectionManagement::test_ensure_connected_no_session PASSED [ 55%]
tests/test_mcp_client.py::TestConnectionManagement::test_ensure_connected_existing_session_ping_success PASSED [ 55%]
tests/test_mcp_client.py::TestConnectionManagement::test_ensure_connected_existing_session_ping_failure PASSED [ 55%]
tests/test_mcp_client.py::TestConnectionManagement::test_get_client_session_lazy_creation PASSED [ 55%]
tests/test_mcp_client.py::TestConnectionManagement::test_get_client_session_existing PASSED [ 55%]
tests/test_mcp_client.py::TestSafeTransportContext::test_safe_transport_ctx_success PASSED [ 55%]
tests/test_mcp_client.py::TestSafeTransportContext::test_safe_transport_ctx_exit_error PASSED [ 56%]
tests/test_mcp_client.py::TestEdgeCases::test_model_config PASSED        [ 56%]
tests/test_mcp_client.py::TestEdgeCases::test_create_transport_unexpected_result PASSED [ 56%]
tests/test_mcp_client.py::TestEdgeCases::test_create_transport_missing_streams PASSED [ 56%]
tests/test_mcp_client.py::TestEdgeCases::test_session_proxy_closed_resource_error PASSED [ 56%]
tests/test_mcp_client.py::TestEdgeCases::test_connect_without_capabilities PASSED [ 56%]
tests/test_mcp_config.py::TestFlockMCPCachingConfiguration::test_default_values PASSED [ 56%]
tests/test_mcp_config.py::TestFlockMCPCachingConfiguration::test_custom_values PASSED [ 56%]
tests/test_mcp_config.py::TestFlockMCPCachingConfiguration::test_to_dict PASSED [ 56%]
tests/test_mcp_config.py::TestFlockMCPCachingConfiguration::test_from_dict PASSED [ 56%]
tests/test_mcp_config.py::TestFlockMCPCachingConfiguration::test_with_fields PASSED [ 56%]
tests/test_mcp_config.py::TestFlockMCPCachingConfiguration::test_extra_fields_allowed PASSED [ 56%]
tests/test_mcp_config.py::TestFlockMCPCallbackConfiguration::test_default_values PASSED [ 57%]
tests/test_mcp_config.py::TestFlockMCPCallbackConfiguration::test_with_callbacks PASSED [ 57%]
tests/test_mcp_config.py::TestFlockMCPCallbackConfiguration::test_to_dict_empty PASSED [ 57%]
tests/test_mcp_config.py::TestFlockMCPCallbackConfiguration::test_from_dict PASSED [ 57%]
tests/test_mcp_config.py::TestFlockMCPCallbackConfiguration::test_with_fields PASSED [ 57%]
tests/test_mcp_config.py::TestFlockMCPFeatureConfiguration::test_default_values PASSED [ 57%]
tests/test_mcp_config.py::TestFlockMCPFeatureConfiguration::test_custom_values PASSED [ 57%]
tests/test_mcp_config.py::TestFlockMCPFeatureConfiguration::test_to_dict PASSED [ 57%]
tests/test_mcp_config.py::TestFlockMCPFeatureConfiguration::test_to_dict_exclude_defaults PASSED [ 57%]
tests/test_mcp_config.py::TestFlockMCPFeatureConfiguration::test_from_dict PASSED [ 57%]
tests/test_mcp_config.py::TestFlockMCPFeatureConfiguration::test_with_fields PASSED [ 57%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_minimal_config PASSED [ 57%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_full_config PASSED [ 58%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_to_dict PASSED [ 58%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_from_dict_stdio SKIPPED [ 58%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_from_dict_websocket SKIPPED [ 58%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_from_dict_streamable_http SKIPPED [ 58%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_from_dict_sse SKIPPED [ 58%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_from_dict_custom SKIPPED [ 58%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_from_dict_with_auth SKIPPED [ 58%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_from_dict_invalid_auth PASSED [ 58%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_from_dict_connection_parameters_edge_cases PASSED [ 58%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_from_dict_no_connection_params PASSED [ 58%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_from_dict_empty_connection_params PASSED [ 58%]
tests/test_mcp_config.py::TestFlockMCPConnectionConfiguration::test_with_fields PASSED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_minimal_config PASSED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_full_config PASSED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_to_dict PASSED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_from_dict_minimal SKIPPED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_from_dict_full SKIPPED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_from_dict_missing_connection_config PASSED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_from_dict_fallback_config_classes PASSED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_from_dict_name_extraction PASSED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_from_dict_uses_default_configs SKIPPED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_from_dict_with_inheritance SKIPPED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_from_dict_individual_config_creation PASSED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_from_dict_main_config_error_paths PASSED [ 59%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_from_dict_with_config_components_only PASSED [ 60%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_from_dict_config_name_in_error_message PASSED [ 60%]
tests/test_mcp_config.py::TestFlockMCPConfiguration::test_with_fields PASSED [ 60%]
tests/test_mcp_config.py::TestLoggingLevel::test_valid_logging_levels PASSED [ 60%]
tests/test_mcp_config.py::TestLoggingLevel::test_invalid_logging_level PASSED [ 60%]
tests/test_mcp_config.py::TestEdgeCases::test_empty_tool_whitelist PASSED [ 60%]
tests/test_mcp_config.py::TestEdgeCases::test_none_values_handling PASSED [ 60%]
tests/test_mcp_config.py::TestEdgeCases::test_large_values PASSED        [ 60%]
tests/test_mcp_config.py::TestEdgeCases::test_zero_values PASSED         [ 60%]
tests/test_mcp_config.py::TestEdgeCases::test_negative_values PASSED     [ 60%]
tests/test_mcp_config.py::TestEdgeCases::test_floating_point_values PASSED [ 60%]
tests/test_mcp_config.py::TestEdgeCases::test_config_roundtrip SKIPPED   [ 60%]
tests/test_mcp_config.py::TestTypeSafety::test_string_to_int_conversion PASSED [ 61%]
tests/test_mcp_config.py::TestTypeSafety::test_transport_type_validation PASSED [ 61%]
tests/test_mcp_config.py::TestTypeSafety::test_invalid_transport_type PASSED [ 61%]
tests/test_mcp_config.py::TestTypeSafety::test_list_field_validation PASSED [ 61%]
tests/test_mcp_config.py::TestTypeSafety::test_mount_points_validation PASSED [ 61%]
tests/test_mcp_config.py::TestDynamicModelCreation::test_simple_dynamic_field PASSED [ 61%]
tests/test_mcp_config.py::TestDynamicModelCreation::test_multiple_dynamic_fields PASSED [ 61%]
tests/test_mcp_config.py::TestDynamicModelCreation::test_dynamic_field_inheritance PASSED [ 61%]
tests/test_mcp_config.py::TestDynamicModelCreation::test_dynamic_field_serialization PASSED [ 61%]
tests/test_mcp_config.py::TestDynamicModelCreation::test_dynamic_field_from_dict PASSED [ 61%]
tests/test_mcp_imports.py::test_mcp_types_import PASSED                  [ 61%]
tests/test_mcp_imports.py::test_mcp_config_import PASSED                 [ 61%]
tests/test_mcp_imports.py::test_mcp_client_import PASSED                 [ 62%]
tests/test_mcp_imports.py::test_mcp_manager_import PASSED                [ 62%]
tests/test_mcp_imports.py::test_mcp_tool_import PASSED                   [ 62%]
tests/test_mcp_imports.py::test_mcp_package_import PASSED                [ 62%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_manager_initialization PASSED [ 62%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_manager_initialization_empty_configs PASSED [ 62%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_get_client_server_not_registered PASSED [ 62%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_get_client_creates_new_client PASSED [ 62%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_get_client_returns_existing_client PASSED [ 62%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_get_client_different_transport_types PASSED [ 62%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_get_client_unsupported_transport_type PASSED [ 62%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_get_tools_for_agent_success PASSED [ 62%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_get_tools_for_agent_graceful_degradation PASSED [ 62%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_get_tools_for_agent_multiple_servers PASSED [ 63%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_get_tools_for_agent_partial_failure PASSED [ 63%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_cleanup_run_success PASSED [ 63%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_cleanup_run_not_exists PASSED [ 63%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_cleanup_run_disconnect_error PASSED [ 63%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_cleanup_run_multiple_clients PASSED [ 63%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_cleanup_all PASSED [ 63%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_cleanup_all_with_errors PASSED [ 63%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_list_servers PASSED [ 63%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_list_servers_empty PASSED [ 63%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_list_servers_multiple PASSED [ 63%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_per_agent_run_isolation PASSED [ 63%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_concurrent_access PASSED [ 64%]
tests/test_mcp_manager.py::TestFlockMCPClientManager::test_lock_contention PASSED [ 64%]
tests/test_mcp_server_config_typeddict.py::test_new_format_with_tool_whitelist PASSED [ 64%]
tests/test_mcp_server_config_typeddict.py::test_new_format_roots_only PASSED [ 64%]
tests/test_mcp_server_config_typeddict.py::test_new_format_empty_config PASSED [ 64%]
tests/test_mcp_server_config_typeddict.py::test_old_format_still_works PASSED [ 64%]
tests/test_mcp_server_config_typeddict.py::test_mixed_old_and_new_format PASSED [ 64%]
tests/test_mcp_server_config_typeddict.py::test_typeddict_type_hints PASSED [ 64%]
tests/test_mcp_server_config_typeddict.py::test_typeddict_optional_fields PASSED [ 64%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_tool_initialization PASSED [ 64%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_tool_initialization_without_optional_fields PASSED [ 64%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_from_mcp_tool PASSED [ 64%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_to_mcp_tool PASSED [ 65%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_convert_input_schema_to_tool_args PASSED [ 65%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_convert_input_schema_with_exception PASSED [ 65%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_convert_mcp_tool_result_text_only PASSED [ 65%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_convert_mcp_tool_result_single_text PASSED [ 65%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_convert_mcp_tool_result_with_non_text PASSED [ 65%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_convert_mcp_tool_result_non_text_only PASSED [ 65%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_convert_mcp_tool_result_with_error PASSED [ 65%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_on_error_method PASSED [ 65%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_as_dspy_tool_successful_invocation PASSED [ 65%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_as_dspy_tool_with_exception PASSED [ 65%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_type_mapping_constants PASSED [ 65%]
tests/test_mcp_tool_handlers.py::TestFlockMCPTool::test_as_dspy_tool_with_tracing PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_incoming_exception PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_progress_notification PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_progress_notification_without_total PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_cancellation_notification PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_cancellation_notification_without_reason PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_resource_update_notification PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_resource_list_changed_notification PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_tool_list_changed_notification PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_logging_message_debug PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_logging_message_info PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_logging_message_notice PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_logging_message_alert PASSED [ 66%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_logging_message_error PASSED [ 67%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_logging_message_critical PASSED [ 67%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_logging_message_emergency PASSED [ 67%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_logging_message_unknown_logger PASSED [ 67%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_incoming_server_notification PASSED [ 67%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_incoming_server_notification_unrecognized PASSED [ 67%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_incoming_request_create_message PASSED [ 67%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_incoming_request_list_roots PASSED [ 67%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_incoming_request_with_exception PASSED [ 67%]
tests/test_mcp_tool_handlers.py::TestTypeHandlers::test_handle_incoming_request_unrecognized PASSED [ 67%]
tests/test_mcp_tool_handlers.py::TestServerParametersTypes::test_stdio_server_parameters PASSED [ 67%]
tests/test_mcp_tool_handlers.py::TestServerParametersTypes::test_websocket_server_parameters PASSED [ 67%]
tests/test_mcp_tool_handlers.py::TestServerParametersTypes::test_streamable_http_server_parameters PASSED [ 68%]
tests/test_mcp_tool_handlers.py::TestServerParametersTypes::test_streamable_http_with_auth PASSED [ 68%]
tests/test_mcp_tool_handlers.py::TestServerParametersTypes::test_streamable_http_from_dict_with_auth PASSED [ 68%]
tests/test_mcp_tool_handlers.py::TestServerParametersTypes::test_streamable_http_from_dict_no_auth_impl PASSED [ 68%]
tests/test_mcp_tool_handlers.py::TestServerParametersTypes::test_sse_server_parameters PASSED [ 68%]
tests/test_mcp_tool_handlers.py::TestServerParametersTypes::test_sse_server_parameters_with_auth PASSED [ 68%]
tests/test_mcp_tool_handlers.py::TestServerParametersTypes::test_sse_from_dict_with_auth PASSED [ 68%]
tests/test_mcp_tool_handlers.py::TestServerParametersTypes::test_server_parameters_path_type_absolute PASSED [ 68%]
tests/test_mcp_tool_handlers.py::TestIntegration::test_tool_invocation_with_server_notifications PASSED [ 68%]
tests/test_mcp_tool_handlers.py::TestIntegration::test_concurrent_tool_invocations PASSED [ 68%]
tests/test_mcp_tool_handlers.py::TestEdgeCases::test_empty_input_schema PASSED [ 68%]
tests/test_mcp_tool_handlers.py::TestEdgeCases::test_complex_nested_schema PASSED [ 68%]
tests/test_mcp_tool_handlers.py::TestEdgeCases::test_tool_invocation_timeout_scenario PASSED [ 69%]
tests/test_mcp_tool_handlers.py::TestEdgeCases::test_validation_error_in_tool_creation PASSED [ 69%]
tests/test_mcp_tool_handlers.py::TestEdgeCases::test_notification_handler_with_null_params PASSED [ 69%]
tests/test_orchestrator_and_gate.py::test_simple_and_gate_waits_for_both_types PASSED [ 69%]
tests/test_orchestrator_and_gate.py::test_and_gate_order_independence PASSED [ 69%]
tests/test_orchestrator_and_gate.py::test_three_way_and_gate PASSED      [ 69%]
tests/test_orchestrator_and_gate.py::test_multiple_agents_same_types_independent_waiting PASSED [ 69%]
tests/test_orchestrator_and_gate.py::test_partial_match_does_not_trigger PASSED [ 69%]
tests/test_orchestrator_and_gate.py::test_and_gate_with_single_type_triggers_immediately PASSED [ 69%]
tests/test_orchestrator_and_gate.py::test_and_gate_does_not_accumulate_across_completions PASSED [ 69%]
tests/test_orchestrator_and_gate.py::test_or_gate_via_chaining PASSED    [ 69%]
tests/test_orchestrator_and_gate.py::test_mixed_and_or_subscriptions PASSED [ 69%]
tests/test_orchestrator_and_gate.py::test_or_gate_does_not_accumulate PASSED [ 70%]
tests/test_orchestrator_and_gate.py::test_three_way_or_gate PASSED       [ 70%]
tests/test_orchestrator_and_gate.py::test_count_based_and_gate_waits_for_three_as PASSED [ 70%]
tests/test_orchestrator_and_gate.py::test_count_based_and_gate_order_independence PASSED [ 70%]
tests/test_orchestrator_and_gate.py::test_mixed_count_and_type_gate PASSED [ 70%]
tests/test_orchestrator_and_gate.py::test_count_based_latest_artifacts_win PASSED [ 70%]
tests/test_orchestrator_and_gate.py::test_agent_receives_list_of_artifacts_for_and_gate PASSED [ 70%]
tests/test_orchestrator_and_gate.py::test_agent_can_access_artifact_payloads_in_and_gate PASSED [ 70%]
tests/test_orchestrator_and_gate.py::test_count_based_gate_provides_all_instances_to_agent PASSED [ 70%]
tests/test_orchestrator_and_gate.py::test_and_gate_with_visibility_filter PASSED [ 70%]
tests/test_orchestrator_and_gate.py::test_and_gate_with_where_predicate PASSED [ 70%]
tests/test_orchestrator_and_gate.py::test_and_gate_with_prevent_self_trigger PASSED [ 70%]
tests/test_orchestrator_and_gate.py::test_and_gate_with_multiple_subscriptions_same_agent PASSED [ 70%]
tests/test_orchestrator_and_gate.py::test_and_gate_performance_latency_target PASSED [ 71%]
tests/test_orchestrator_and_gate.py::test_and_gate_performance_many_artifacts PASSED [ 71%]
tests/test_orchestrator_batchspec.py::test_batchspec_flushes_on_size_threshold PASSED [ 71%]
tests/test_orchestrator_batchspec.py::test_batchspec_continues_batching_after_flush PASSED [ 71%]
tests/test_orchestrator_batchspec.py::test_batchspec_partial_batch_stays_pending PASSED [ 71%]
tests/test_orchestrator_batchspec.py::test_batchspec_multiple_agents_independent_batches PASSED [ 71%]
tests/test_orchestrator_batchspec.py::test_batchspec_with_single_type_subscription PASSED [ 71%]
tests/test_orchestrator_batchspec.py::test_batchspec_flushes_on_timeout PASSED [ 71%]
tests/test_orchestrator_batchspec.py::test_batchspec_size_or_timeout_whichever_first PASSED [ 71%]
tests/test_orchestrator_batchspec.py::test_batchspec_timeout_resets_after_flush PASSED [ 71%]
tests/test_orchestrator_batchspec.py::test_batchspec_shutdown_flushes_partial_batch PASSED [ 71%]
tests/test_orchestrator_batchspec.py::test_batchspec_with_visibility_filters_before_batching PASSED [ 71%]
tests/test_orchestrator_batchspec.py::test_batchspec_with_where_predicate_filters_before_batching PASSED [ 72%]
tests/test_orchestrator_batchspec.py::test_batchspec_performance_batching_overhead PASSED [ 72%]
tests/test_orchestrator_combined.py::test_batched_correlated_joins_basic PASSED [ 72%]
tests/test_orchestrator_combined.py::test_batched_correlation_continues_after_flush PASSED [ 72%]
tests/test_orchestrator_combined.py::test_partial_correlation_waits_in_batch PASSED [ 72%]
tests/test_orchestrator_combined.py::test_multiple_correlation_groups_batch_independently PASSED [ 72%]
tests/test_orchestrator_combined.py::test_batched_correlation_with_timeout PASSED [ 72%]
tests/test_orchestrator_combined.py::test_batched_correlation_size_or_timeout_whichever_first PASSED [ 72%]
tests/test_orchestrator_combined.py::test_batched_correlation_shutdown_flushes_partial PASSED [ 72%]
tests/test_orchestrator_combined.py::test_batched_correlation_with_visibility PASSED [ 72%]
tests/test_orchestrator_combined.py::test_batched_correlation_with_where_predicate PASSED [ 72%]
tests/test_orchestrator_combined.py::test_batched_correlation_state_isolation_per_agent PASSED [ 72%]
tests/test_orchestrator_combined.py::test_batched_correlation_performance PASSED [ 73%]
tests/test_orchestrator_combined.py::test_three_way_correlation_with_batching PASSED [ 73%]
tests/test_orchestrator_combined.py::test_batched_correlation_with_mixed_completion_rates PASSED [ 73%]
tests/test_orchestrator_component.py::TestScheduleDecision::test_schedule_decision_enum_values PASSED [ 73%]
tests/test_orchestrator_component.py::TestScheduleDecision::test_schedule_decision_is_string_enum PASSED [ 73%]
tests/test_orchestrator_component.py::TestCollectionResult::test_collection_result_has_required_fields PASSED [ 73%]
tests/test_orchestrator_component.py::TestCollectionResult::test_collection_result_immediate_factory PASSED [ 73%]
tests/test_orchestrator_component.py::TestCollectionResult::test_collection_result_waiting_factory PASSED [ 73%]
tests/test_orchestrator_component.py::TestOrchestratorComponent::test_orchestrator_component_has_required_fields PASSED [ 73%]
tests/test_orchestrator_component.py::TestOrchestratorComponent::test_orchestrator_component_custom_priority PASSED [ 73%]
tests/test_orchestrator_component.py::TestOrchestratorComponent::test_orchestrator_component_custom_name PASSED [ 73%]
tests/test_orchestrator_component.py::TestOrchestratorComponent::test_orchestrator_component_has_all_lifecycle_hooks PASSED [ 73%]
tests/test_orchestrator_component.py::TestOrchestratorComponent::test_orchestrator_component_default_hooks_are_noops PASSED [ 74%]
tests/test_orchestrator_component.py::TestOrchestratorComponent::test_orchestrator_component_uses_traced_meta PASSED [ 74%]
tests/test_orchestrator_component.py::TestComponentPriorityOrdering::test_component_priority_sorting PASSED [ 74%]
tests/test_orchestrator_component.py::TestComponentPriorityOrdering::test_component_default_priority_zero PASSED [ 74%]
tests/test_orchestrator_component.py::TestFlockComponentManagement::test_flock_has_components_list PASSED [ 74%]
tests/test_orchestrator_component.py::TestFlockComponentManagement::test_flock_has_components_initialized_flag PASSED [ 74%]
tests/test_orchestrator_component.py::TestFlockComponentManagement::test_flock_add_component_method_exists PASSED [ 74%]
tests/test_orchestrator_component.py::TestFlockComponentManagement::test_flock_add_component_stores_component PASSED [ 74%]
tests/test_orchestrator_component.py::TestFlockComponentManagement::test_flock_add_component_returns_self PASSED [ 74%]
tests/test_orchestrator_component.py::TestFlockComponentManagement::test_flock_add_component_method_chaining PASSED [ 74%]
tests/test_orchestrator_component.py::TestFlockComponentManagement::test_flock_add_component_sorts_by_priority PASSED [ 74%]
tests/test_orchestrator_component.py::TestFlockComponentManagement::test_flock_add_component_maintains_sort_order PASSED [ 74%]
tests/test_orchestrator_component.py::TestFlockComponentManagement::test_flock_add_component_allows_duplicate_priorities PASSED [ 74%]
tests/test_orchestrator_component.py::TestHookRunnerInitialize::test_run_initialize_exists PASSED [ 75%]
tests/test_orchestrator_component.py::TestHookRunnerInitialize::test_run_initialize_calls_all_components PASSED [ 75%]
tests/test_orchestrator_component.py::TestHookRunnerInitialize::test_run_initialize_only_runs_once PASSED [ 75%]
tests/test_orchestrator_component.py::TestHookRunnerInitialize::test_run_initialize_propagates_exceptions PASSED [ 75%]
tests/test_orchestrator_component.py::TestHookRunnerArtifactPublished::test_run_artifact_published_chains_components PASSED [ 75%]
tests/test_orchestrator_component.py::TestHookRunnerArtifactPublished::test_run_artifact_published_stops_on_none PASSED [ 75%]
tests/test_orchestrator_component.py::TestHookRunnerArtifactPublished::test_run_artifact_published_propagates_exceptions PASSED [ 75%]
tests/test_orchestrator_component.py::TestHookRunnerBeforeSchedule::test_run_before_schedule_returns_continue_by_default PASSED [ 75%]
tests/test_orchestrator_component.py::TestHookRunnerBeforeSchedule::test_run_before_schedule_stops_on_skip PASSED [ 75%]
tests/test_orchestrator_component.py::TestHookRunnerBeforeSchedule::test_run_before_schedule_stops_on_defer PASSED [ 75%]
tests/test_orchestrator_component.py::TestHookRunnerCollectArtifacts::test_run_collect_artifacts_returns_first_non_none PASSED [ 75%]
tests/test_orchestrator_component.py::TestHookRunnerCollectArtifacts::test_run_collect_artifacts_default_immediate PASSED [ 75%]
tests/test_orchestrator_component.py::TestHookRunnerBeforeAgentSchedule::test_run_before_agent_schedule_chains_transformations PASSED [ 76%]
tests/test_orchestrator_component.py::TestHookRunnerBeforeAgentSchedule::test_run_before_agent_schedule_stops_on_none PASSED [ 76%]
tests/test_orchestrator_component.py::TestHookRunnerAgentScheduled::test_run_agent_scheduled_calls_all_components PASSED [ 76%]
tests/test_orchestrator_component.py::TestHookRunnerAgentScheduled::test_run_agent_scheduled_continues_on_exception PASSED [ 76%]
tests/test_orchestrator_component.py::TestHookRunnerIdle::test_run_idle_calls_all_components PASSED [ 76%]
tests/test_orchestrator_component.py::TestHookRunnerIdle::test_run_idle_continues_on_exception PASSED [ 76%]
tests/test_orchestrator_component.py::TestHookRunnerShutdown::test_run_shutdown_calls_all_components PASSED [ 76%]
tests/test_orchestrator_component.py::TestHookRunnerShutdown::test_run_shutdown_continues_on_exception PASSED [ 76%]
tests/test_orchestrator_component.py::TestCircuitBreakerComponent::test_circuit_breaker_component_exists PASSED [ 76%]
tests/test_orchestrator_component.py::TestCircuitBreakerComponent::test_circuit_breaker_default_max_iterations PASSED [ 76%]
tests/test_orchestrator_component.py::TestCircuitBreakerComponent::test_circuit_breaker_allows_under_limit PASSED [ 76%]
tests/test_orchestrator_component.py::TestCircuitBreakerComponent::test_circuit_breaker_blocks_at_limit PASSED [ 76%]
tests/test_orchestrator_component.py::TestCircuitBreakerComponent::test_circuit_breaker_per_agent_tracking PASSED [ 77%]
tests/test_orchestrator_component.py::TestCircuitBreakerComponent::test_circuit_breaker_resets_on_idle PASSED [ 77%]
tests/test_orchestrator_component.py::TestCircuitBreakerComponent::test_circuit_breaker_auto_added_to_orchestrator PASSED [ 77%]
tests/test_orchestrator_component.py::TestCircuitBreakerComponent::test_circuit_breaker_integration PASSED [ 77%]
tests/test_orchestrator_component.py::TestDeduplicationComponent::test_deduplication_component_exists PASSED [ 77%]
tests/test_orchestrator_component.py::TestDeduplicationComponent::test_deduplication_allows_first_occurrence PASSED [ 77%]
tests/test_orchestrator_component.py::TestDeduplicationComponent::test_deduplication_blocks_duplicate PASSED [ 77%]
tests/test_orchestrator_component.py::TestDeduplicationComponent::test_deduplication_per_agent PASSED [ 77%]
tests/test_orchestrator_component.py::TestDeduplicationComponent::test_deduplication_handles_multiple_artifacts PASSED [ 77%]
tests/test_orchestrator_component.py::TestDeduplicationComponent::test_deduplication_auto_added_to_orchestrator PASSED [ 77%]
tests/test_orchestrator_component.py::TestDeduplicationComponent::test_deduplication_integration PASSED [ 77%]
tests/test_orchestrator_component.py::TestDeduplicationComponent::test_deduplication_and_circuit_breaker_order PASSED [ 77%]
tests/test_orchestrator_context_injection.py::TestOrchestratorContextInjection::test_orchestrator_provides_prefiltered_artifacts_in_context PASSED [ 77%]
tests/test_orchestrator_context_injection.py::TestOrchestratorContextInjection::test_orchestrator_removes_all_capability_fields_from_context PASSED [ 78%]
tests/test_orchestrator_context_injection.py::TestOrchestratorContextInjection::test_orchestrator_uses_default_provider_when_no_custom_provider PASSED [ 78%]
tests/test_orchestrator_context_injection.py::TestOrchestratorContextInjection::test_orchestrator_uses_global_provider_when_configured PASSED [ 78%]
tests/test_orchestrator_context_injection.py::TestOrchestratorContextInjection::test_orchestrator_uses_per_agent_provider_when_configured PASSED [ 78%]
tests/test_orchestrator_context_injection.py::TestOrchestratorContextInjection::test_context_has_all_required_fields PASSED [ 78%]
tests/test_orchestrator_context_injection.py::TestOrchestratorPublishing::test_orchestrator_publishes_artifacts_after_agent_execute PASSED [ 78%]
tests/test_orchestrator_context_injection.py::TestOrchestratorPublishing::test_orchestrator_publishes_multiple_artifacts PASSED [ 78%]
tests/test_orchestrator_context_injection.py::TestOrchestratorPublishing::test_orchestrator_respects_publish_outputs_flag PASSED [ 78%]
tests/test_orchestrator_context_injection.py::TestOrchestratorPublishing::test_orchestrator_publishes_during_event_driven_workflow PASSED [ 78%]
tests/test_orchestrator_context_injection.py::TestOrchestratorPublishing::test_agent_cannot_publish_directly PASSED [ 78%]
tests/test_orchestrator_context_injection.py::TestPhase67Integration::test_end_to_end_security_boundary PASSED [ 78%]
tests/test_orchestrator_context_injection.py::TestPhase67Integration::test_visibility_enforcement_with_context_evaluation PASSED [ 78%]
tests/test_orchestrator_joinspec.py::test_joinspec_correlates_artifacts_by_same_key PASSED [ 79%]
tests/test_orchestrator_joinspec.py::test_joinspec_multiple_correlation_keys_independent PASSED [ 79%]
tests/test_orchestrator_joinspec.py::test_joinspec_partial_correlation_waits PASSED [ 79%]
tests/test_orchestrator_joinspec.py::test_joinspec_three_way_correlation PASSED [ 79%]
tests/test_orchestrator_joinspec.py::test_joinspec_order_independence PASSED [ 79%]
tests/test_orchestrator_joinspec.py::test_joinspec_key_extraction_with_nested_fields PASSED [ 79%]
tests/test_orchestrator_joinspec.py::test_joinspec_count_based_window PASSED [ 79%]
tests/test_orchestrator_joinspec.py::test_joinspec_count_window_with_multiple_correlations PASSED [ 79%]
tests/test_orchestrator_joinspec.py::test_joinspec_with_visibility_controls PASSED [ 79%]
tests/test_orchestrator_joinspec.py::test_joinspec_with_where_predicate_filters_before_correlation PASSED [ 79%]
tests/test_orchestrator_joinspec.py::test_joinspec_correlation_state_isolation_per_agent PASSED [ 79%]
tests/test_orchestrator_joinspec.py::test_joinspec_performance_correlation_overhead PASSED [ 79%]
tests/test_orchestrator_joinspec.py::test_joinspec_time_based_expiry_discards_partial_correlation PASSED [ 80%]
tests/test_orchestrator_joinspec.py::test_joinspec_time_expiry_vs_batch_timeout_behavior PASSED [ 80%]
tests/test_orchestrator_mcp.py::test_orchestrator_has_mcp_properties PASSED [ 80%]
tests/test_orchestrator_mcp.py::test_add_mcp_basic PASSED                [ 80%]
tests/test_orchestrator_mcp.py::test_add_mcp_duplicate_name_fails PASSED [ 80%]
tests/test_orchestrator_mcp.py::test_add_mcp_with_tool_whitelist PASSED  [ 80%]
tests/test_orchestrator_mcp.py::test_add_mcp_method_chaining PASSED      [ 80%]
tests/test_orchestrator_mcp.py::test_get_mcp_manager_lazy_init PASSED    [ 80%]
tests/test_orchestrator_mcp.py::test_get_mcp_manager_without_servers_fails PASSED [ 80%]
tests/test_orchestrator_mcp.py::test_orchestrator_shutdown_cleans_mcp PASSED [ 80%]
tests/test_output_groups.py::test_output_group_creation_with_single_output PASSED [ 80%]
tests/test_output_groups.py::test_output_group_creation_with_multiple_outputs PASSED [ 80%]
tests/test_output_groups.py::test_output_group_is_single_call_returns_true PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_with_default_values PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_with_all_new_fields PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_is_many_returns_false_when_count_is_one PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_is_many_returns_true_when_count_greater_than_one PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_is_many_returns_true_for_large_counts PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_allows_count_of_one PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_allows_count_greater_than_one PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_rejects_count_of_zero PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_rejects_negative_count PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_accepts_valid_filter_predicate PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_filter_predicate_can_be_none PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_filter_predicate_works_with_real_filtering PASSED [ 81%]
tests/test_output_groups.py::test_agent_output_accepts_simple_validate_callable PASSED [ 82%]
tests/test_output_groups.py::test_agent_output_accepts_validate_as_list_of_tuples PASSED [ 82%]
tests/test_output_groups.py::test_agent_output_validate_predicate_can_be_none PASSED [ 82%]
tests/test_output_groups.py::test_agent_output_validate_tuple_format_is_correct PASSED [ 82%]
tests/test_output_groups.py::test_agent_output_validate_list_works_with_real_validation PASSED [ 82%]
tests/test_output_groups.py::test_agent_output_with_all_fields_integration PASSED [ 82%]
tests/test_output_groups.py::test_output_group_with_multiple_enhanced_outputs PASSED [ 82%]
tests/test_output_groups.py::test_output_group_preserves_output_ordering PASSED [ 82%]
tests/test_registry.py::test_type_registry_resolves_registered_types PASSED [ 82%]
tests/test_registry.py::test_type_registry_raises_on_unknown_type PASSED [ 82%]
tests/test_registry.py::test_type_registry_name_for_returns_name PASSED  [ 82%]
tests/test_registry.py::test_type_registry_registers_new_type PASSED     [ 82%]
tests/test_registry.py::test_flock_type_decorator_registers_type PASSED  [ 83%]
tests/test_runtime.py::TestEvalInputs::test_first_as_with_artifacts PASSED [ 83%]
tests/test_runtime.py::TestEvalInputs::test_first_as_with_no_artifacts PASSED [ 83%]
tests/test_runtime.py::TestEvalInputs::test_first_as_with_empty_inputs PASSED [ 83%]
tests/test_runtime.py::TestEvalInputs::test_all_as_with_artifacts PASSED [ 83%]
tests/test_runtime.py::TestEvalInputs::test_all_as_with_no_artifacts PASSED [ 83%]
tests/test_runtime.py::TestEvalInputs::test_all_as_with_single_artifact PASSED [ 83%]
tests/test_runtime.py::TestEvalInputs::test_state_handling PASSED        [ 83%]
tests/test_runtime.py::TestEvalResult::test_from_object PASSED           [ 83%]
tests/test_runtime.py::TestEvalResult::test_from_objects_multiple PASSED [ 83%]
tests/test_runtime.py::TestEvalResult::test_from_objects_single PASSED   [ 83%]
tests/test_runtime.py::TestEvalResult::test_from_objects_with_no_optional_params PASSED [ 83%]
tests/test_runtime.py::TestEvalResult::test_empty_result PASSED          [ 84%]
tests/test_runtime.py::TestEvalResult::test_empty_result_with_state PASSED [ 84%]
tests/test_runtime.py::TestEvalResult::test_empty_result_with_errors PASSED [ 84%]
tests/test_runtime.py::TestEvalResult::test_with_state PASSED            [ 84%]
tests/test_runtime.py::TestEvalResult::test_with_state_and_metrics PASSED [ 84%]
tests/test_runtime.py::TestEvalResult::test_with_state_and_errors PASSED [ 84%]
tests/test_runtime.py::TestEvalResult::test_default_fields PASSED        [ 84%]
tests/test_runtime.py::TestContext::test_context_creation PASSED         [ 84%]
tests/test_runtime.py::TestContext::test_context_with_state PASSED       [ 84%]
tests/test_runtime.py::TestContext::test_get_variable PASSED             [ 84%]
tests/test_runtime.py::TestContext::test_context_without_correlation_id PASSED [ 84%]
tests/test_runtime.py::TestContext::test_context_is_batch_field PASSED   [ 84%]
tests/test_runtime.py::TestIntegration::test_eval_inputs_to_eval_result_flow PASSED [ 85%]
tests/test_runtime.py::TestIntegration::test_multiple_artifacts_processing PASSED [ 85%]
tests/test_service_extended.py::test_run_agent_endpoint PASSED           [ 85%]
tests/test_service_extended.py::test_run_agent_not_found PASSED          [ 85%]
tests/test_service_extended.py::test_run_agent_with_error PASSED         [ 85%]
tests/test_service_extended.py::test_metrics_endpoint PASSED             [ 85%]
tests/test_service_extended.py::test_health_endpoint PASSED              [ 85%]
tests/test_service_extended.py::test_list_agents_with_subscriptions PASSED [ 85%]
tests/test_service_extended.py::test_artifacts_endpoint_with_filters PASSED [ 85%]
tests/test_service_extended.py::test_create_artifact_invalid_type PASSED [ 85%]
tests/test_service_extended.py::test_list_artifacts_endpoint PASSED      [ 85%]
tests/test_service_extended.py::test_list_artifacts_with_embed_meta PASSED [ 85%]
tests/test_service_extended.py::test_artifact_summary_endpoint PASSED    [ 85%]
tests/test_service_extended.py::test_agent_history_summary_endpoint PASSED [ 86%]
tests/test_service_extended.py::test_service_run_method PASSED           [ 86%]
tests/test_service_extended.py::test_service_run_async_method PASSED     [ 86%]
tests/test_service_extended.py::test_multiple_input_artifacts PASSED     [ 86%]
tests/test_store.py::test_store_add_single_artifact[memory] PASSED       [ 86%]
tests/test_store.py::test_store_add_single_artifact[sqlite] PASSED       [ 86%]
tests/test_store.py::test_store_add_multiple_artifacts[memory] PASSED    [ 86%]
tests/test_store.py::test_store_add_multiple_artifacts[sqlite] PASSED    [ 86%]
tests/test_store.py::test_store_list_empty[memory] PASSED                [ 86%]
tests/test_store.py::test_store_list_empty[sqlite] PASSED                [ 86%]
tests/test_store.py::test_store_list_with_type_filter[memory] PASSED     [ 86%]
tests/test_store.py::test_store_list_with_type_filter[sqlite] PASSED     [ 86%]
tests/test_store.py::test_store_get_by_id[memory] PASSED                 [ 87%]
tests/test_store.py::test_store_get_by_id[sqlite] PASSED                 [ 87%]
tests/test_store.py::test_store_maintains_insertion_order[memory] PASSED [ 87%]
tests/test_store.py::test_store_maintains_insertion_order[sqlite] PASSED [ 87%]
tests/test_store.py::test_store_duplicate_artifacts[memory] PASSED       [ 87%]
tests/test_store.py::test_store_duplicate_artifacts[sqlite] PASSED       [ 87%]
tests/test_store.py::test_store_thread_safety[memory] PASSED             [ 87%]
tests/test_store.py::test_store_thread_safety[sqlite] PASSED             [ 87%]
tests/test_store.py::test_sqlite_store_schema_idempotent PASSED          [ 87%]
tests/test_store_graph.py::test_fetch_graph_artifacts_returns_envelopes PASSED [ 87%]
tests/test_store_graph.py::test_fetch_graph_artifacts_applies_filters PASSED [ 87%]
tests/test_subscription.py::test_subscription_matches_correct_type PASSED [ 87%]
tests/test_subscription.py::test_subscription_rejects_wrong_type PASSED  [ 88%]
tests/test_subscription.py::test_subscription_matches_from_agents PASSED [ 88%]
tests/test_subscription.py::test_subscription_rejects_wrong_producer PASSED [ 88%]
tests/test_subscription.py::test_subscription_matches_with_predicate PASSED [ 88%]
tests/test_subscription.py::test_subscription_rejects_failing_predicate PASSED [ 88%]
tests/test_subscription.py::test_subscription_matches_multiple_predicates PASSED [ 88%]
tests/test_subscription.py::test_subscription_matches_channel PASSED     [ 88%]
tests/test_subscription.py::test_subscription_requires_at_least_one_type PASSED [ 88%]
tests/test_subscription.py::test_subscription_accepts_direct_mode PASSED [ 88%]
tests/test_subscription.py::test_subscription_predicate_exception_returns_false PASSED [ 88%]
tests/test_subscription.py::test_subscription_predicate_missing_field_returns_false PASSED [ 88%]
tests/test_telemetry.py::TestTelemetryConfig::test_init_with_default_values PASSED [ 88%]
tests/test_telemetry.py::TestTelemetryConfig::test_init_with_custom_values PASSED [ 88%]
tests/test_telemetry.py::TestTelemetryConfig::test_init_with_none_batch_processor_options PASSED [ 89%]
tests/test_telemetry.py::TestTelemetryConfigShouldSetup::test_should_setup_disabled_env_var_1 PASSED [ 89%]
tests/test_telemetry.py::TestTelemetryConfigShouldSetup::test_should_setup_disabled_env_var_true PASSED [ 89%]
tests/test_telemetry.py::TestTelemetryConfigShouldSetup::test_should_setup_disabled_env_var_yes PASSED [ 89%]
tests/test_telemetry.py::TestTelemetryConfigShouldSetup::test_should_setup_disabled_env_var_on PASSED [ 89%]
tests/test_telemetry.py::TestTelemetryConfigShouldSetup::test_should_setup_enabled_env_var_0 PASSED [ 89%]
tests/test_telemetry.py::TestTelemetryConfigShouldSetup::test_should_setup_enabled_env_var_false PASSED [ 89%]
tests/test_telemetry.py::TestTelemetryConfigShouldSetup::test_should_setup_no_env_var PASSED [ 89%]
tests/test_telemetry.py::TestTelemetryConfigShouldSetup::test_should_setup_with_existing_sdk_provider PASSED [ 89%]
tests/test_telemetry.py::TestTelemetryConfigShouldSetup::test_should_setup_with_non_sdk_provider PASSED [ 89%]
tests/test_telemetry.py::TestTelemetryConfigShouldSetup::test_should_setup_with_exception_in_introspection PASSED [ 89%]
tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_disabled_by_env PASSED [ 89%]
tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_already_configured PASSED [ 90%]
tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_minimal_configuration PASSED [ 90%]
tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_jaeger_enabled PASSED [ 90%]
tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_invalid_jaeger_transport PASSED [ 90%]
tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_otlp_enabled PASSED [ 90%]
tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_invalid_otlp_protocol PASSED [ 90%]
tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_file_exporter PASSED [ 90%]
tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_sqlite_exporter PASSED [ 90%]
tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_all_exporters_minimal PASSED [ 90%]
tests/test_telemetry.py::TestTelemetryConfigLogException::test_log_exception_keyboard_interrupt PASSED [ 90%]
tests/test_telemetry.py::TestTelemetryConfigLogException::test_log_exception_no_tracer PASSED [ 90%]
tests/test_telemetry.py::TestTelemetryConfigLogException::test_log_exception_with_tracer PASSED [ 90%]
tests/test_telemetry.py::TestTelemetryConfigLogException::test_log_exception_with_tracer_sets_error_status PASSED [ 91%]
tests/test_telemetry.py::TestTelemetryConfigEdgeCases::test_empty_service_name PASSED [ 91%]
tests/test_telemetry.py::TestTelemetryConfigEdgeCases::test_very_long_service_name PASSED [ 91%]
tests/test_telemetry.py::TestTelemetryConfigEdgeCases::test_multiple_setup_calls PASSED [ 91%]
tests/test_telemetry.py::TestTelemetryConfigEdgeCases::test_jaeger_enabled_but_no_endpoint PASSED [ 91%]
tests/test_telemetry.py::TestTelemetryConfigEdgeCases::test_file_exporter_enabled_but_no_name PASSED [ 91%]
tests/test_telemetry.py::TestTelemetryConfigEdgeCases::test_sqlite_exporter_enabled_but_no_name PASSED [ 91%]
tests/test_trace_clearing.py::test_clear_traces_nonexistent_database PASSED [ 91%]
tests/test_trace_clearing.py::test_clear_traces_empty_database PASSED    [ 91%]
tests/test_trace_clearing.py::test_clear_traces_with_data PASSED         [ 91%]
tests/test_trace_clearing.py::test_clear_traces_vacuum_reclaims_space PASSED [ 91%]
tests/test_trace_clearing.py::test_clear_traces_default_path PASSED      [ 91%]
tests/test_trace_clearing.py::test_clear_traces_preserves_schema PASSED  [ 92%]
tests/test_trace_clearing.py::test_clear_traces_concurrent_access PASSED [ 92%]
tests/test_unified_tracing.py::test_traced_run_creates_parent_span PASSED [ 92%]
tests/test_unified_tracing.py::test_traced_run_yields_span_for_custom_attributes PASSED [ 92%]
tests/test_unified_tracing.py::test_traced_run_handles_exceptions PASSED [ 92%]
tests/test_unified_tracing.py::test_traced_run_restores_previous_workflow_span PASSED [ 92%]
tests/test_unified_tracing.py::test_traced_run_default_workflow_name PASSED [ 92%]
tests/test_unified_tracing.py::test_traced_run_sets_success_status PASSED [ 92%]
tests/test_unified_tracing.py::test_auto_workflow_trace_disabled_by_default PASSED [ 92%]
tests/test_unified_tracing.py::test_auto_workflow_trace_env_var_true PASSED [ 92%]
tests/test_unified_tracing.py::test_auto_workflow_trace_env_var_1 PASSED [ 92%]
tests/test_unified_tracing.py::test_auto_workflow_trace_env_var_false PASSED [ 92%]
tests/test_version_endpoint.py::test_version_endpoint PASSED             [ 92%]
tests/test_version_endpoint.py::test_version_endpoint_format PASSED      [ 93%]
tests/test_visibility.py::test_public_visibility_allows_all_agents PASSED [ 93%]
tests/test_visibility.py::test_private_visibility_allows_listed_agent PASSED [ 93%]
tests/test_visibility.py::test_private_visibility_denies_unlisted_agent PASSED [ 93%]
tests/test_visibility.py::test_labelled_visibility_allows_agent_with_required_labels PASSED [ 93%]
tests/test_visibility.py::test_labelled_visibility_denies_agent_without_required_labels PASSED [ 93%]
tests/test_visibility.py::test_tenant_visibility_allows_same_tenant PASSED [ 93%]
tests/test_visibility.py::test_tenant_visibility_denies_different_tenant PASSED [ 93%]
tests/test_visibility.py::test_after_visibility_denies_before_ttl PASSED [ 93%]
tests/test_visibility.py::test_after_visibility_allows_after_ttl PASSED  [ 93%]
tests/test_visibility.py::test_tenant_visibility_with_none_allows_all PASSED [ 93%]
tests/test_visibility.py::test_after_visibility_then_clause_allows_listed_agent PASSED [ 93%]
tests/test_visibility.py::test_after_visibility_then_clause_none_allows_all PASSED [ 94%]
tests/test_websocket_manager.py::test_websocket_manager_initialization PASSED [ 94%]
tests/test_websocket_manager.py::test_add_client PASSED                  [ 94%]
tests/test_websocket_manager.py::test_remove_client PASSED               [ 94%]
tests/test_websocket_manager.py::test_broadcast_sends_to_all_clients PASSED [ 94%]
tests/test_websocket_manager.py::test_broadcast_empty_client_pool PASSED [ 94%]
tests/test_websocket_manager.py::test_broadcast_handles_disconnected_clients PASSED [ 94%]
tests/test_websocket_manager.py::test_concurrent_broadcasts PASSED       [ 94%]
tests/test_websocket_manager.py::test_heartbeat_pong_mechanism PASSED    [ 94%]
tests/test_websocket_manager.py::test_add_client_with_heartbeat_enabled PASSED [ 94%]
tests/test_websocket_manager.py::test_add_client_with_heartbeat_already_running PASSED [ 94%]
tests/test_websocket_manager.py::test_add_client_with_heartbeat_disabled PASSED [ 94%]
tests/test_websocket_manager.py::test_remove_client_stops_heartbeat_when_last_client PASSED [ 95%]
tests/test_websocket_manager.py::test_remove_client_with_nonexistent_client PASSED [ 95%]
tests/test_websocket_manager.py::test_broadcast_stores_streaming_history PASSED [ 95%]
tests/test_websocket_manager.py::test_broadcast_stores_streaming_history_with_max_length PASSED [ 95%]
tests/test_websocket_manager.py::test_broadcast_message_serialization PASSED [ 95%]
tests/test_websocket_manager.py::test_broadcast_logging_with_no_clients PASSED [ 95%]
tests/test_websocket_manager.py::test_heartbeat_loop_shutdown_condition PASSED [ 95%]
tests/test_websocket_manager.py::test_heartbeat_loop_exits_with_no_clients PASSED [ 95%]
tests/test_websocket_manager.py::test_heartbeat_loop_handles_exceptions PASSED [ 95%]
tests/test_websocket_manager.py::test_ping_client_success PASSED         [ 95%]
tests/test_websocket_manager.py::test_ping_client_failure PASSED         [ 95%]
tests/test_websocket_manager.py::test_start_heartbeat_with_enable_true PASSED [ 95%]
tests/test_websocket_manager.py::test_start_heartbeat_already_running PASSED [ 96%]
tests/test_websocket_manager.py::test_start_heartbeat_disabled PASSED    [ 96%]
tests/test_websocket_manager.py::test_start_heartbeat_with_shutdown PASSED [ 96%]
tests/test_websocket_manager.py::test_shutdown_with_heartbeat_task PASSED [ 96%]
tests/test_websocket_manager.py::test_shutdown_with_multiple_clients PASSED [ 96%]
tests/test_websocket_manager.py::test_shutdown_with_real_websocket_methods PASSED [ 96%]
tests/test_websocket_manager.py::test_get_streaming_history_for_existing_agent PASSED [ 96%]
tests/test_websocket_manager.py::test_get_streaming_history_for_nonexistent_agent PASSED [ 96%]
tests/test_websocket_manager.py::test_concurrent_client_addition_removal PASSED [ 96%]
tests/test_websocket_manager.py::test_stress_concurrent_broadcasts PASSED [ 96%]
tests/test_websocket_manager.py::test_memory_management_with_many_connections PASSED [ 96%]
tests/test_websocket_manager.py::test_message_ordering_under_concurrency PASSED [ 96%]
tests/test_websocket_manager.py::test_error_recovery_during_broadcast PASSED [ 96%]
tests/test_websocket_manager.py::test_websocket_json_serialization_edge_cases PASSED [ 97%]
tests/test_websocket_manager.py::test_connection_pool_under_stress PASSED [ 97%]
tests/test_websocket_manager.py::test_timeout_scenarios PASSED           [ 97%]
tests/utils/test_async_utils.py::TestAsyncLockRequired::test_decorator_acquires_lock PASSED [ 97%]
tests/utils/test_async_utils.py::TestAsyncLockRequired::test_decorator_with_custom_lock_attr PASSED [ 97%]
tests/utils/test_async_utils.py::TestAsyncLockRequired::test_decorator_releases_lock_on_exception PASSED [ 97%]
tests/utils/test_async_utils.py::TestAsyncLockRequired::test_decorator_preserves_return_value PASSED [ 97%]
tests/utils/test_async_utils.py::TestAsyncLockRequired::test_decorator_preserves_arguments PASSED [ 97%]
tests/utils/test_async_utils.py::TestAsyncLockRequired::test_direct_class_usage PASSED [ 97%]
tests/utils/test_type_resolution.py::test_safe_resolve_existing_type PASSED [ 97%]
tests/utils/test_type_resolution.py::test_safe_resolve_missing_type PASSED [ 97%]
tests/utils/test_type_resolution.py::test_safe_resolve_handles_key_error_gracefully PASSED [ 97%]
tests/utils/test_type_resolution.py::test_safe_resolve_with_empty_registry PASSED [ 98%]
tests/utils/test_validation.py::TestArtifactValidator::test_validate_artifact_success PASSED [ 98%]
tests/utils/test_validation.py::TestArtifactValidator::test_validate_artifact_with_predicate_success PASSED [ 98%]
tests/utils/test_validation.py::TestArtifactValidator::test_validate_artifact_with_predicate_failure PASSED [ 98%]
tests/utils/test_validation.py::TestArtifactValidator::test_validate_artifact_missing_field PASSED [ 98%]
tests/utils/test_validation.py::TestArtifactValidator::test_validate_artifact_wrong_type PASSED [ 98%]
tests/utils/test_validation.py::TestArtifactValidator::test_validate_artifact_complex_model PASSED [ 98%]
tests/utils/test_validation.py::TestArtifactValidator::test_validate_artifact_complex_model_constraint_violation PASSED [ 98%]
tests/utils/test_validation.py::TestArtifactValidator::test_validate_artifact_extra_fields_ignored PASSED [ 98%]
tests/utils/test_validation.py::TestArtifactValidator::test_validate_artifact_with_none_predicate PASSED [ 98%]
tests/utils/test_validation.py::TestArtifactValidator::test_validate_artifact_predicate_with_exception PASSED [ 98%]
tests/utils/test_visibility.py::test_deserialize_public_from_dict PASSED [ 98%]
tests/utils/test_visibility.py::test_deserialize_public_from_string PASSED [ 99%]
tests/utils/test_visibility.py::test_deserialize_private_with_agents PASSED [ 99%]
tests/utils/test_visibility.py::test_deserialize_private_without_agents PASSED [ 99%]
tests/utils/test_visibility.py::test_deserialize_labelled_with_labels PASSED [ 99%]
tests/utils/test_visibility.py::test_deserialize_labelled_without_labels PASSED [ 99%]
tests/utils/test_visibility.py::test_deserialize_tenant_with_id PASSED   [ 99%]
tests/utils/test_visibility.py::test_deserialize_tenant_without_id PASSED [ 99%]
tests/utils/test_visibility.py::test_deserialize_after_with_ttl_seconds PASSED [ 99%]
tests/utils/test_visibility.py::test_deserialize_after_with_ttl_dict PASSED [ 99%]
tests/utils/test_visibility.py::test_deserialize_after_with_then_clause PASSED [ 99%]
tests/utils/test_visibility.py::test_deserialize_after_without_ttl PASSED [ 99%]
tests/utils/test_visibility.py::test_deserialize_unknown_kind_raises_error PASSED [ 99%]
tests/utils/test_visibility.py::test_deserialize_nested_after_visibility PASSED [100%]

============================== warnings summary ===============================
tests\test_agent_builder.py:34
  C:\workspace\whiteduck\flock\tests\test_agent_builder.py:34: PytestCollectionWarning: cannot collect test class 'TestTypeA' because it has a __init__ constructor (from: tests/test_agent_builder.py)
    @flock_type(name="TestTypeA")

tests\test_agent_builder.py:40
  C:\workspace\whiteduck\flock\tests\test_agent_builder.py:40: PytestCollectionWarning: cannot collect test class 'TestTypeB' because it has a __init__ constructor (from: tests/test_agent_builder.py)
    @flock_type(name="TestTypeB")

tests\test_agent_builder.py:46
  C:\workspace\whiteduck\flock\tests\test_agent_builder.py:46: PytestCollectionWarning: cannot collect test class 'TestTypeC' because it has a __init__ constructor (from: tests/test_agent_builder.py)
    @flock_type(name="TestTypeC")

tests\test_dashboard_collector.py:32
  C:\workspace\whiteduck\flock\tests\test_dashboard_collector.py:32: PytestCollectionWarning: cannot collect test class 'TestInput' because it has a __init__ constructor (from: tests/test_dashboard_collector.py)
    class TestInput(BaseModel):

tests\test_dashboard_collector.py:38
  C:\workspace\whiteduck\flock\tests\test_dashboard_collector.py:38: PytestCollectionWarning: cannot collect test class 'TestOutput' because it has a __init__ constructor (from: tests/test_dashboard_collector.py)
    class TestOutput(BaseModel):

tests\test_dashboard_service.py:67
  C:\workspace\whiteduck\flock\tests\test_dashboard_service.py:67: PytestCollectionWarning: cannot collect test class 'TestArtifact' because it has a __init__ constructor (from: tests/test_dashboard_service.py)
    @flock_type(name="TestArtifact")

tests\test_dspy_engine.py:31
  C:\workspace\whiteduck\flock\tests\test_dspy_engine.py:31: PytestCollectionWarning: cannot collect test class 'TestInput' because it has a __init__ constructor (from: tests/test_dspy_engine.py)
    @flock_type(name="TestInput")

tests\test_dspy_engine.py:37
  C:\workspace\whiteduck\flock\tests\test_dspy_engine.py:37: PytestCollectionWarning: cannot collect test class 'TestOutput' because it has a __init__ constructor (from: tests/test_dspy_engine.py)
    @flock_type(name="TestOutput")

tests\test_engine_context.py:53
  C:\workspace\whiteduck\flock\tests\test_engine_context.py:53: PytestCollectionWarning: cannot collect test class 'TestEngineComponent' because it has a __init__ constructor (from: tests/test_engine_context.py)
    class TestEngineComponent(EngineComponent):

tests\test_output_groups.py:23
  C:\workspace\whiteduck\flock\tests\test_output_groups.py:23: PytestCollectionWarning: cannot collect test class 'TestReport' because it has a __init__ constructor (from: tests/test_output_groups.py)
    @flock_type(name="TestReport")

tests\test_output_groups.py:29
  C:\workspace\whiteduck\flock\tests\test_output_groups.py:29: PytestCollectionWarning: cannot collect test class 'TestTask' because it has a __init__ constructor (from: tests/test_output_groups.py)
    @flock_type(name="TestTask")

tests\test_unified_tracing.py:13
  C:\workspace\whiteduck\flock\tests\test_unified_tracing.py:13: PytestCollectionWarning: cannot collect test class 'TestInput' because it has a __init__ constructor (from: tests/test_unified_tracing.py)
    @flock_type

tests\test_unified_tracing.py:18
  C:\workspace\whiteduck\flock\tests\test_unified_tracing.py:18: PytestCollectionWarning: cannot collect test class 'TestOutput' because it has a __init__ constructor (from: tests/test_unified_tracing.py)
    @flock_type

tests/test_orchestrator.py::test_movie_pipeline_publishes_tagline
tests/test_orchestrator.py::test_visibility_only_for_blocks_eavesdropper
tests/test_orchestrator.py::test_orchestrator_circuit_breaker_resets_on_idle
tests/test_orchestrator.py::test_context_is_batch_flag_propagation
tests/dashboard/test_logic_operations_events.py::test_no_correlation_event_when_group_completes
tests/dashboard/test_logic_operations_events.py::test_no_batch_event_when_batch_flushes
  C:\workspace\whiteduck\flock\src\flock\engines\dspy_engine.py:195: RuntimeWarning: coroutine 'mock_llm.<locals>.mock_response' was never awaited
    return await self._evaluate_internal(
  Enable tracemalloc to get traceback where the object was allocated.
  See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

tests/integration/test_orchestrator_dashboard.py::TestDashboardServiceIntegration::test_websocket_endpoint_available
  C:\workspace\whiteduck\flock\.venv\Lib\site-packages\websockets\legacy\__init__.py:6: DeprecationWarning: websockets.legacy is deprecated; see https://websockets.readthedocs.io/en/stable/howto/upgrade.html for upgrade instructions
    warnings.warn(  # deprecated in 14.0 - 2024-11-09

tests/integration/test_orchestrator_dashboard.py::TestDashboardServiceIntegration::test_websocket_endpoint_available
  C:\workspace\whiteduck\flock\.venv\Lib\site-packages\uvicorn\protocols\websockets\websockets_impl.py:17: DeprecationWarning: websockets.server.WebSocketServerProtocol is deprecated
    from websockets.server import WebSocketServerProtocol

tests/test_agent.py::test_agent_respects_max_concurrency
  C:\workspace\whiteduck\flock\.venv\Lib\site-packages\rich\text.py:1116: RuntimeWarning: coroutine 'LoggingUtility._consume_stream' was never awaited
    _offsets = list(offsets)
  Enable tracemalloc to get traceback where the object was allocated.
  See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

tests/test_dashboard_api.py::test_control_endpoints_use_json_content_type
  C:\workspace\whiteduck\flock\.venv\Lib\site-packages\httpx\_models.py:408: DeprecationWarning: Use 'content=<...>' to upload raw bytes/text content.
    headers, stream = encode_request(

tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_otlp_enabled
  C:\workspace\whiteduck\flock\.venv\Lib\site-packages\google\rpc\__init__.py:18: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
    import pkg_resources

tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_otlp_enabled
  C:\workspace\whiteduck\flock\.venv\Lib\site-packages\pkg_resources\__init__.py:3146: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('google')`.
  Implementing implicit namespace packages (as specified in PEP 420) is preferred to `pkg_resources.declare_namespace`. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages
    declare_namespace(pkg)

tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_otlp_enabled
  C:\workspace\whiteduck\flock\.venv\Lib\site-packages\pkg_resources\__init__.py:3146: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('google.logging')`.
  Implementing implicit namespace packages (as specified in PEP 420) is preferred to `pkg_resources.declare_namespace`. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages
    declare_namespace(pkg)

tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_otlp_enabled
tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_otlp_enabled
  C:\workspace\whiteduck\flock\.venv\Lib\site-packages\pkg_resources\__init__.py:2558: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('google')`.
  Implementing implicit namespace packages (as specified in PEP 420) is preferred to `pkg_resources.declare_namespace`. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages
    declare_namespace(parent)

tests/test_telemetry.py::TestTelemetryConfigSetupTracing::test_setup_tracing_with_otlp_enabled
  C:\workspace\whiteduck\flock\.venv\Lib\site-packages\google\rpc\__init__.py:20: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('google.rpc')`.
  Implementing implicit namespace packages (as specified in PEP 420) is preferred to `pkg_resources.declare_namespace`. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages
    pkg_resources.declare_namespace(__name__)

tests/test_websocket_manager.py::test_heartbeat_loop_shutdown_condition
  C:\workspace\whiteduck\flock\.venv\Lib\site-packages\pytest_asyncio\plugin.py:824: RuntimeWarning: An exception occurred during teardown of an asyncio.Runner. The reason is likely that you closed the underlying event loop in a test, which prevents the cleanup of asynchronous generators by the runner.
  This warning will become an error in future versions of pytest-asyncio. Please ensure that your tests don't close the event loop. Here is the traceback of the exception triggered during teardown:
  Traceback (most recent call last):
    File "C:\workspace\whiteduck\flock\.venv\Lib\site-packages\pytest_asyncio\plugin.py", line 822, in _scoped_runner
      runner.__exit__(None, None, None)
    File "C:\Users\aratz\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\Lib\asyncio\runners.py", line 62, in __exit__
      self.close()
    File "C:\Users\aratz\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\Lib\asyncio\runners.py", line 70, in close
      _cancel_all_tasks(loop)
    File "C:\Users\aratz\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\Lib\asyncio\runners.py", line 204, in _cancel_all_tasks
      task.cancel()
    File "C:\Users\aratz\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\Lib\asyncio\tasks.py", line 721, in cancel
      if child.cancel(msg=msg):
         ^^^^^^^^^^^^^^^^^^^^^
    File "C:\Users\aratz\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\Lib\asyncio\tasks.py", line 721, in cancel
      if child.cancel(msg=msg):
         ^^^^^^^^^^^^^^^^^^^^^
    File "C:\Users\aratz\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\Lib\asyncio\tasks.py", line 721, in cancel
      if child.cancel(msg=msg):
         ^^^^^^^^^^^^^^^^^^^^^
    [Previous line repeated 741 more times]
  RecursionError: maximum recursion depth exceeded


    warnings.warn(

tests/test_websocket_manager.py::test_heartbeat_loop_handles_exceptions
  C:\workspace\whiteduck\flock\.venv\Lib\site-packages\pytest_asyncio\plugin.py:824: RuntimeWarning: An exception occurred during teardown of an asyncio.Runner. The reason is likely that you closed the underlying event loop in a test, which prevents the cleanup of asynchronous generators by the runner.
  This warning will become an error in future versions of pytest-asyncio. Please ensure that your tests don't close the event loop. Here is the traceback of the exception triggered during teardown:
  Traceback (most recent call last):
    File "C:\workspace\whiteduck\flock\.venv\Lib\site-packages\pytest_asyncio\plugin.py", line 822, in _scoped_runner
      runner.__exit__(None, None, None)
    File "C:\Users\aratz\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\Lib\asyncio\runners.py", line 62, in __exit__
      self.close()
    File "C:\Users\aratz\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\Lib\asyncio\runners.py", line 70, in close
      _cancel_all_tasks(loop)
    File "C:\Users\aratz\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\Lib\asyncio\runners.py", line 204, in _cancel_all_tasks
      task.cancel()
    File "C:\Users\aratz\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\Lib\asyncio\tasks.py", line 721, in cancel
      if child.cancel(msg=msg):
         ^^^^^^^^^^^^^^^^^^^^^
    File "C:\Users\aratz\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\Lib\asyncio\tasks.py", line 721, in cancel
      if child.cancel(msg=msg):
         ^^^^^^^^^^^^^^^^^^^^^
    File "C:\Users\aratz\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\Lib\asyncio\tasks.py", line 721, in cancel
      if child.cancel(msg=msg):
         ^^^^^^^^^^^^^^^^^^^^^
    [Previous line repeated 741 more times]
  RecursionError: maximum recursion depth exceeded while calling a Python object


    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=============================== tests coverage ================================
______________ coverage: platform win32, python 3.12.11-final-0 _______________

Name                                                                    Stmts   Miss Branch BrPart   Cover   Missing
--------------------------------------------------------------------------------------------------------------------
src\flock\__init__.py                                                       5      0      0      0 100.00%
src\flock\agent.py                                                        602    104    208     24  80.49%   187, 192, 211, 315-325, 330-340, 361-366, 383-388, 402-407, 425, 442, 475, 477, 502-533, 632->652, 640->652, 696-701, 706, 708, 724-725, 733-738, 751-756, 798-814, 822, 838, 942, 1093->1095, 1254->1246, 1281->1279, 1290, 1349->1354, 1350->1349, 1369-1370, 1402, 1405, 1469-1482, 1490, 1500, 1521-1523, 1533-1535, 1538-1539, 1542-1546, 1551, 1554-1555, 1558-1563
src\flock\artifact_collector.py                                            42     10     12      0  77.78%   86-88, 131-134, 145-147, 154, 158
src\flock\artifacts.py                                                     35      0      2      1  97.30%   69->72
src\flock\batch_accumulator.py                                             75      5     32      6  89.72%   60, 71, 120, 158, 177->195, 210, 243->242
src\flock\cli.py                                                           80      5     14      4  90.43%   78-84, 122->130, 130->132, 141->exit
src\flock\components.py                                                    46      0     10      0 100.00%
src\flock\context_provider.py                                              66      1      2      0  98.53%   90
src\flock\correlation_engine.py                                            76      4     24      2  94.00%   80, 149, 161-164
src\flock\dashboard\__init__.py                                             6      0      0      0 100.00%
src\flock\dashboard\collector.py                                          233      4     50      9  95.41%   188->190, 257->259, 304, 309, 337->336, 396, 442->exit, 465->467, 468
src\flock\dashboard\events.py                                              94      0      0      0 100.00%
src\flock\dashboard\graph_builder.py                                      332    108    132     16  62.07%   84->92, 124-125, 201-204, 237, 364->349, 416-437, 450-514, 525-582, 595, 603, 618->605, 647-648, 699, 701, 727, 729, 732, 734, 742-746, 762-765, 770-835
src\flock\dashboard\launcher.py                                           102     14     12      2  85.96%   80-82, 110-111, 130-134, 148->152, 213-214, 223-224
src\flock\dashboard\models\__init__.py                                      0      0      0      0 100.00%
src\flock\dashboard\models\graph.py                                       107      0      0      0 100.00%
src\flock\dashboard\service.py                                            458    144    132     11  67.63%   112-136, 138->145, 158->157, 168, 495-560, 572-606, 619-625, 634-706, 722-789, 866-930, 966-981, 1003, 1009-1011, 1049-1051, 1063, 1131, 1134, 1276->1279, 1303->1306, 1394->1396, 1404->1406
src\flock\dashboard\websocket.py                                           95      3     34      3  95.35%   146, 170, 186, 235->233
src\flock\engines\__init__.py                                               2      0      0      0 100.00%
src\flock\engines\dspy_engine.py                                          715    377    280     31  45.53%   64->69, 70-71, 78-109, 278-282, 297->314, 305-310, 318-369, 381, 385-387, 407->412, 410-411, 530, 570, 662->695, 667->665, 691-692, 710, 719, 723, 797->828, 802->800, 861, 871-874, 902->906, 907-910, 914-916, 924->919, 930, 973-994, 1009->1012, 1038, 1044, 1046->1033, 1052, 1096-1309, 1325-1705, 1711-1749, 1758-1780, 1796-1797
src\flock\engines\examples\__init__.py                                      2      0      0      0 100.00%
src\flock\engines\examples\simple_batch_engine.py                          33      9      6      2  66.67%   61, 74-83
src\flock\examples.py                                                      49      1      2      1  96.08%   10
src\flock\helper\cli_helper.py                                             35      4      8      1  88.37%   49->60, 53-58
src\flock\mcp\__init__.py                                                   6      0      0      0 100.00%
src\flock\mcp\client.py                                                   281     19     80     24  88.09%   160, 195-198, 207-209, 227, 274->281, 281->287, 287->292, 292->299, 299->308, 306, 308->319, 317, 319->332, 328, 332->exit, 339, 397, 403->388, 457, 466->exit, 486->exit, 498->exit, 516-520, 525->exit, 548->550, 551, 572, 632->635
src\flock\mcp\config.py                                                   164     37     26      5  73.68%   214-216, 219, 225, 229, 236-242, 385-387, 394-427
src\flock\mcp\manager.py                                                   87      8     28      2  91.30%   116-131, 149-153
src\flock\mcp\servers\sse\__init__.py                                       0      0      0      0 100.00%
src\flock\mcp\servers\sse\flock_sse_server.py                              39     16     14      0  43.40%   72-104
src\flock\mcp\servers\stdio\__init__.py                                     0      0      0      0 100.00%
src\flock\mcp\servers\stdio\flock_stdio_server.py                          37     15     14      0  43.14%   75-98
src\flock\mcp\servers\streamable_http\__init__.py                           0      0      0      0 100.00%
src\flock\mcp\servers\streamable_http\flock_streamable_http_server.py      46     20     16      0  41.94%   80-121
src\flock\mcp\tool.py                                                      61      0      8      0 100.00%
src\flock\mcp\types\__init__.py                                             3      0      0      0 100.00%
src\flock\mcp\types\callbacks.py                                           24     14      8      0  31.25%   31-32, 41-54, 66-72, 81
src\flock\mcp\types\factories.py                                           31      5      0      0  83.87%   43, 63-66, 88, 105
src\flock\mcp\types\handlers.py                                           101      0     20      1  99.17%   229->234
src\flock\mcp\types\types.py                                              129      7     20      7  90.60%   187->202, 198, 218->220, 228-229, 274->289, 285-287, 305->307, 315-316
src\flock\mcp\util\__init__.py                                              0      0      0      0 100.00%
src\flock\mcp\util\helpers.py                                               9      0      0      0 100.00%
src\flock\orchestrator.py                                                 574     84    168     28  82.75%   57, 88-90, 133-135, 230, 235, 338-345, 349-379, 506, 692-694, 716, 727, 751, 777, 785, 807, 821-823, 889, 912, 926, 955-959, 1058-1059, 1181-1186, 1219-1231, 1265-1270, 1358, 1364, 1387, 1401, 1432-1433, 1487->exit, 1501-1502, 1533, 1538->exit, 1539->1538, 1594, 1632-1633, 1684, 1689, 1702, 1716, 1721-1725
src\flock\orchestrator_component.py                                       121      2     36      3  96.82%   437, 539, 603->609
src\flock\patches\__init__.py                                               2      0      0      0 100.00%
src\flock\patches\dspy_streaming_patch.py                                  38     25      4      1  33.33%   28-48, 59->65, 72-74, 79-91
src\flock\registry.py                                                      76      9     22      3  87.76%   28, 41, 88-89, 110-113, 144
src\flock\runtime.py                                                       53      0      4      0 100.00%
src\flock\service.py                                                       94      3     16      3  94.55%   100, 174, 190
src\flock\store.py                                                        517     97    112     21  78.06%   48-56, 61, 63, 67-78, 192-193, 255-258, 298, 303, 305, 307, 355, 372, 374-375, 382, 416, 554, 668-686, 725-729, 880, 929-962, 965-991, 994-998, 1006->exit, 1013-1017, 1021-1030, 1050, 1187-1188, 1191-1195, 1202-1203
src\flock\subscription.py                                                  64      2     16      2  95.00%   91, 151
src\flock\utility\output_utility_component.py                             114     59     44     10  41.14%   71->73, 83-95, 99-114, 118-126, 132-138, 152->169, 160, 163, 166, 170-175, 179-182, 188-199, 207-216, 221, 237-238, 246
src\flock\utils\__init__.py                                                 5      0      0      0 100.00%
src\flock\utils\async_utils.py                                             17      0      0      0 100.00%
src\flock\utils\type_resolution.py                                          9      0      0      0 100.00%
src\flock\utils\validation.py                                              14      0      2      0 100.00%
src\flock\utils\visibility.py                                              33      0     16      0 100.00%
src\flock\visibility.py                                                    50      0      8      0 100.00%
--------------------------------------------------------------------------------------------------------------------
TOTAL                                                                    6089   1215   1642    223  76.51%
Coverage HTML written to dir htmlcov
=============== 1178 passed, 49 skipped, 31 warnings in 42.78s ================
