@@ -398,7 +398,7 @@ async def test_default_path_keeps_server_only_behavior(self):
398398 client .http_client .post = AsyncMock (return_value = mock_http_response )
399399 step = Step (type = "llm" , name = "test-step" , input = "hello" )
400400
401- with patch ("agent_control.evaluation.has_control_event_sink " , return_value = False ), \
401+ with patch ("agent_control.evaluation._is_merged_event_mode_enabled " , return_value = False ), \
402402 patch ("agent_control.evaluation.emit_control_events" ) as mock_emit :
403403 result = await evaluation .check_evaluation (
404404 client = client ,
@@ -455,7 +455,7 @@ async def test_merged_event_sink_emits_reconstructed_server_events(self):
455455 client .http_client .post = AsyncMock (return_value = mock_http_response )
456456 step = Step (type = "llm" , name = "test-step" , input = "hello" )
457457
458- with patch ("agent_control.evaluation.has_control_event_sink " , return_value = True ), \
458+ with patch ("agent_control.evaluation._is_merged_event_mode_enabled " , return_value = True ), \
459459 patch ("agent_control.evaluation.get_trace_and_span_ids" , return_value = ("a" * 32 , "b" * 16 )), \
460460 patch ("agent_control.evaluation.emit_control_events" ) as mock_emit , \
461461 patch .object (evaluation .state , "server_controls" , controls ):
@@ -508,7 +508,7 @@ async def test_skips_local_event_reconstruction_when_nothing_consumes_events(sel
508508
509509 with patch ("agent_control.evaluation.ControlEngine" , return_value = mock_engine ), \
510510 patch ("agent_control.evaluation.list_evaluators" , return_value = ["regex" ]), \
511- patch ("agent_control.evaluation.has_control_event_sink " , return_value = False ), \
511+ patch ("agent_control.evaluation._is_merged_event_mode_enabled " , return_value = False ), \
512512 patch ("agent_control.evaluation.is_observability_enabled" , return_value = False ), \
513513 patch ("agent_control.evaluation.build_control_execution_events" ) as mock_build , \
514514 patch ("agent_control.evaluation.enqueue_observability_events" ) as mock_enqueue :
@@ -525,6 +525,42 @@ async def test_skips_local_event_reconstruction_when_nothing_consumes_events(sel
525525 assert result .is_safe is True
526526 assert result .confidence == 1.0
527527
528+ @pytest .mark .asyncio
529+ async def test_check_evaluation_falls_back_when_initialized_agent_does_not_match (self ):
530+ from agent_control_models import Step
531+
532+ mock_http_response = MagicMock ()
533+ mock_http_response .raise_for_status = MagicMock ()
534+ mock_http_response .json .return_value = {
535+ "is_safe" : True ,
536+ "confidence" : 0.9 ,
537+ "matches" : None ,
538+ "errors" : None ,
539+ "non_matches" : None ,
540+ }
541+
542+ client = MagicMock ()
543+ client .http_client = AsyncMock ()
544+ client .http_client .post = AsyncMock (return_value = mock_http_response )
545+ step = Step (type = "llm" , name = "test-step" , input = "hello" )
546+
547+ with patch ("agent_control.evaluation.has_control_event_sink" , return_value = True ), \
548+ patch ("agent_control.evaluation.emit_control_events" ) as mock_emit , \
549+ patch .object (evaluation .state , "current_agent" , MagicMock (agent_name = "agent-000000000002" )), \
550+ patch .object (evaluation .state , "server_controls" , []):
551+ result = await evaluation .check_evaluation (
552+ client = client ,
553+ agent_name = "agent-000000000001" ,
554+ step = step ,
555+ stage = "pre" ,
556+ )
557+
558+ call_kwargs = client .http_client .post .call_args .kwargs
559+ assert call_kwargs ["headers" ] is None
560+ mock_emit .assert_not_called ()
561+ assert result .is_safe is True
562+ assert result .confidence == 0.9
563+
528564
529565# =============================================================================
530566# control_decorators non_matches dict conversion
@@ -606,7 +642,7 @@ async def test_merged_event_sink_emits_reconstructed_local_and_server_events_onc
606642
607643 with patch ("agent_control.evaluation.ControlEngine" , return_value = mock_engine ), \
608644 patch ("agent_control.evaluation.list_evaluators" , return_value = ["regex" ]), \
609- patch ("agent_control.evaluation.has_control_event_sink " , return_value = True ), \
645+ patch ("agent_control.evaluation._is_merged_event_mode_enabled " , return_value = True ), \
610646 patch ("agent_control.evaluation.emit_control_events" ) as mock_emit , \
611647 patch ("agent_control.evaluation.enqueue_observability_events" ) as mock_enqueue :
612648 result = await evaluation .check_evaluation_with_local (
0 commit comments