diff --git a/apps/api/src/services/ai_agent_log_controlled_writeback_executor_readback.py b/apps/api/src/services/ai_agent_log_controlled_writeback_executor_readback.py index 27009e096..4146921ed 100644 --- a/apps/api/src/services/ai_agent_log_controlled_writeback_executor_readback.py +++ b/apps/api/src/services/ai_agent_log_controlled_writeback_executor_readback.py @@ -418,6 +418,17 @@ def _harbor_recovery_receipt_inputs() -> list[dict[str, Any]]: "purpose": "prove local registry route is 200/401 before CD retry", **metadata_boundary, }, + { + "input_id": "deploy_marker_readback", + "source": "awoooi production deploy marker readback verifier", + "required_when": "after_registry_v2_ready_and_cd_retry", + "purpose": ( + "prove latest CD success, production image tag sha, and " + "priority readback HTTP status before closing the P0 blocker" + ), + "expected_schema": "awoooi_production_deploy_readback_blocker_v1", + **metadata_boundary, + }, ] diff --git a/apps/api/tests/test_ai_agent_log_controlled_writeback_executor_readback_api.py b/apps/api/tests/test_ai_agent_log_controlled_writeback_executor_readback_api.py index 65262736d..713371d37 100644 --- a/apps/api/tests/test_ai_agent_log_controlled_writeback_executor_readback_api.py +++ b/apps/api/tests/test_ai_agent_log_controlled_writeback_executor_readback_api.py @@ -68,7 +68,7 @@ def _assert_executor_readback(payload: dict, *, public_endpoint: bool = False): assert payload["rollups"]["current_blocker_local_recovery_package_count"] == 1 assert ( payload["rollups"]["current_blocker_harbor_recovery_receipt_input_count"] - == 6 + == 7 ) assert payload["rollups"]["runtime_dispatch_performed"] is False @@ -127,7 +127,7 @@ def _assert_executor_readback(payload: dict, *, public_endpoint: bool = False): assert current_queue[0]["harbor_recovery_receipt_endpoint"] == ( "/api/v1/agents/harbor-registry-controlled-recovery-receipt" ) - assert current_queue[0]["harbor_recovery_receipt_input_count"] == 6 + assert current_queue[0]["harbor_recovery_receipt_input_count"] == 7 assert [ item["input_id"] for item in current_queue[0]["harbor_recovery_receipt_inputs"] @@ -138,7 +138,11 @@ def _assert_executor_readback(payload: dict, *, public_endpoint: bool = False): "watchdog_repair_output", "public_registry_v2_http_status", "internal_registry_v2_http_status", + "deploy_marker_readback", ] + assert current_queue[0]["harbor_recovery_receipt_inputs"][-1][ + "expected_schema" + ] == "awoooi_production_deploy_readback_blocker_v1" assert all( item["metadata_only"] is True and item["raw_output_allowed"] is False diff --git a/apps/api/tests/test_awoooi_priority_work_order_readback_api.py b/apps/api/tests/test_awoooi_priority_work_order_readback_api.py index 9338bb6fd..b9c69c3dc 100644 --- a/apps/api/tests/test_awoooi_priority_work_order_readback_api.py +++ b/apps/api/tests/test_awoooi_priority_work_order_readback_api.py @@ -321,7 +321,7 @@ def test_awoooi_priority_work_order_readback_overlays_ai_loop_current_blocker_qu assert evidence["ai_loop_current_blocker_harbor_recovery_receipt_endpoint"] == ( "/api/v1/agents/harbor-registry-controlled-recovery-receipt" ) - assert evidence["ai_loop_current_blocker_harbor_recovery_receipt_input_count"] == 6 + assert evidence["ai_loop_current_blocker_harbor_recovery_receipt_input_count"] == 7 assert evidence["ai_loop_current_blocker_harbor_recovery_receipt_input_ids"] == [ "gitea_actions_queue_readback", "ssh_local_repair_output", @@ -329,7 +329,11 @@ def test_awoooi_priority_work_order_readback_overlays_ai_loop_current_blocker_qu "watchdog_repair_output", "public_registry_v2_http_status", "internal_registry_v2_http_status", + "deploy_marker_readback", ] + assert evidence["ai_loop_current_blocker_harbor_recovery_receipt_inputs"][-1][ + "expected_schema" + ] == "awoooi_production_deploy_readback_blocker_v1" assert all( item["metadata_only"] is True and item["raw_output_allowed"] is False @@ -353,11 +357,14 @@ def test_awoooi_priority_work_order_readback_overlays_ai_loop_current_blocker_qu payload["summary"][ "ai_loop_current_blocker_harbor_recovery_receipt_input_count" ] - == 6 + == 7 ) assert payload["summary"][ "ai_loop_current_blocker_harbor_recovery_receipt_input_ids" ][0] == "gitea_actions_queue_readback" + assert payload["summary"][ + "ai_loop_current_blocker_harbor_recovery_receipt_input_ids" + ][-1] == "deploy_marker_readback" assert payload["summary"][ "ai_loop_current_blocker_forbidden_runtime_action_count" ] == 6