feat(market-intel): add alert review queue migration blueprint
All checks were successful
CD Pipeline / deploy (push) Successful in 1m1s
All checks were successful
CD Pipeline / deploy (push) Successful in 1m1s
This commit is contained in:
@@ -530,7 +530,7 @@ def test_legacy_source_bridge_default_is_planned_only():
|
||||
bridge = MarketIntelService().build_legacy_source_bridge()
|
||||
|
||||
assert bridge["mode"] == "legacy_source_bridge_planned"
|
||||
assert bridge["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert bridge["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert bridge["execute_requested"] is False
|
||||
assert bridge["read_only_query_executed"] is False
|
||||
assert bridge["database_connection_opened"] is False
|
||||
@@ -688,7 +688,7 @@ def test_mcp_tool_contract_preview_is_read_only_and_whitelisted():
|
||||
contract = MarketIntelService().build_mcp_tool_contract()
|
||||
|
||||
assert contract["mode"] == "mcp_tool_contract_preview"
|
||||
assert contract["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert contract["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert contract["caller"] == "market_intel"
|
||||
assert contract["contract_ready"] is True
|
||||
assert contract["blocked_reasons"] == []
|
||||
@@ -821,7 +821,7 @@ def test_mcp_activation_runbook_route_is_preview_only():
|
||||
|
||||
assert response.status_code == 200
|
||||
assert data["mode"] == "mcp_activation_runbook_preview"
|
||||
assert data["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert data["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert data["deployment_actions_executed"] is False
|
||||
assert data["docker_command_executed"] is False
|
||||
assert data["ssh_command_executed"] is False
|
||||
@@ -834,7 +834,7 @@ def test_mcp_fetch_gate_default_blocks_external_fetch():
|
||||
gate = MarketIntelService().build_mcp_fetch_gate(fetch_requested=True)
|
||||
|
||||
assert gate["mode"] == "mcp_fetch_gate_planned"
|
||||
assert gate["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert gate["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert gate["fetch_requested"] is True
|
||||
assert gate["manual_fetch_gate_open"] is False
|
||||
assert gate["network_request_allowed"] is False
|
||||
@@ -904,7 +904,7 @@ def test_mcp_fetch_gate_route_is_preview_only():
|
||||
|
||||
assert response.status_code == 200
|
||||
assert data["mode"] == "mcp_fetch_gate_planned"
|
||||
assert data["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert data["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert data["fetch_requested"] is False
|
||||
assert data["network_request_allowed"] is False
|
||||
assert data["external_network_executed"] is False
|
||||
@@ -916,7 +916,7 @@ def test_scheduler_plan_preview_blocks_job_attachment():
|
||||
plan = MarketIntelService().build_scheduler_plan()
|
||||
|
||||
assert plan["mode"] == "scheduler_attach_plan_preview"
|
||||
assert plan["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert plan["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert plan["ready_to_attach_scheduler"] is False
|
||||
assert plan["scheduler_attached"] is False
|
||||
assert plan["scheduler_registration_executed"] is False
|
||||
@@ -954,7 +954,7 @@ def test_scheduler_plan_route_is_preview_only():
|
||||
|
||||
assert response.status_code == 200
|
||||
assert data["mode"] == "scheduler_attach_plan_preview"
|
||||
assert data["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert data["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert data["scheduler_registration_executed"] is False
|
||||
assert data["crawler_job_started"] is False
|
||||
assert data["external_network_executed"] is False
|
||||
@@ -965,7 +965,7 @@ def test_match_review_plan_preview_blocks_auto_confirm():
|
||||
plan = MarketIntelService().build_match_review_plan()
|
||||
|
||||
assert plan["mode"] == "match_review_plan_preview"
|
||||
assert plan["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert plan["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert plan["ready_for_review_queue"] is False
|
||||
assert plan["review_queue_created"] is False
|
||||
assert plan["auto_match_executed"] is False
|
||||
@@ -1001,7 +1001,7 @@ def test_match_review_plan_route_is_preview_only():
|
||||
|
||||
assert response.status_code == 200
|
||||
assert data["mode"] == "match_review_plan_preview"
|
||||
assert data["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert data["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert data["review_queue_created"] is False
|
||||
assert data["auto_confirm_executed"] is False
|
||||
assert data["external_network_executed"] is False
|
||||
@@ -1012,7 +1012,7 @@ def test_opportunity_plan_preview_blocks_alerts_and_ai_summary():
|
||||
plan = MarketIntelService().build_opportunity_plan()
|
||||
|
||||
assert plan["mode"] == "opportunity_plan_preview"
|
||||
assert plan["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert plan["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert plan["ready_for_opportunity_queue"] is False
|
||||
assert plan["opportunity_queue_created"] is False
|
||||
assert plan["threat_alert_dispatched"] is False
|
||||
@@ -1053,7 +1053,7 @@ def test_opportunity_plan_route_is_preview_only():
|
||||
|
||||
assert response.status_code == 200
|
||||
assert data["mode"] == "opportunity_plan_preview"
|
||||
assert data["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert data["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert data["opportunity_queue_created"] is False
|
||||
assert data["threat_alert_dispatched"] is False
|
||||
assert data["ai_summary_generated"] is False
|
||||
@@ -1064,7 +1064,7 @@ def test_opportunity_scoring_plan_preview_blocks_scoring_and_alerts():
|
||||
plan = MarketIntelService().build_opportunity_scoring_plan()
|
||||
|
||||
assert plan["mode"] == "opportunity_scoring_plan_preview"
|
||||
assert plan["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert plan["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert plan["ready_for_scoring_job"] is False
|
||||
assert plan["scoring_job_created"] is False
|
||||
assert plan["score_calculation_executed"] is False
|
||||
@@ -1112,7 +1112,7 @@ def test_opportunity_scoring_plan_route_is_preview_only():
|
||||
|
||||
assert response.status_code == 200
|
||||
assert data["mode"] == "opportunity_scoring_plan_preview"
|
||||
assert data["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert data["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert data["scoring_job_created"] is False
|
||||
assert data["score_calculation_executed"] is False
|
||||
assert data["sample_scores_generated"] is False
|
||||
@@ -1124,7 +1124,7 @@ def test_opportunity_evidence_plan_preview_blocks_queries_and_alerts():
|
||||
plan = MarketIntelService().build_opportunity_evidence_plan()
|
||||
|
||||
assert plan["mode"] == "opportunity_evidence_plan_preview"
|
||||
assert plan["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert plan["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert plan["ready_for_evidence_bundle"] is False
|
||||
assert plan["evidence_bundle_created"] is False
|
||||
assert plan["evidence_query_executed"] is False
|
||||
@@ -1170,7 +1170,7 @@ def test_opportunity_evidence_plan_route_is_preview_only():
|
||||
|
||||
assert response.status_code == 200
|
||||
assert data["mode"] == "opportunity_evidence_plan_preview"
|
||||
assert data["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert data["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert data["evidence_bundle_created"] is False
|
||||
assert data["evidence_query_executed"] is False
|
||||
assert data["sample_evidence_generated"] is False
|
||||
@@ -1183,7 +1183,7 @@ def test_opportunity_alert_plan_preview_blocks_dispatch_and_llm_calls():
|
||||
plan = MarketIntelService().build_opportunity_alert_plan()
|
||||
|
||||
assert plan["mode"] == "opportunity_alert_plan_preview"
|
||||
assert plan["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert plan["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert plan["ready_for_alert_candidates"] is False
|
||||
assert plan["alert_candidate_created"] is False
|
||||
assert plan["alert_queue_created"] is False
|
||||
@@ -1268,7 +1268,7 @@ def test_opportunity_alert_plan_route_is_preview_only():
|
||||
|
||||
assert response.status_code == 200
|
||||
assert data["mode"] == "opportunity_alert_plan_preview"
|
||||
assert data["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert data["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert data["alert_candidate_created"] is False
|
||||
assert data["alert_queue_created"] is False
|
||||
assert data["review_queue_created"] is False
|
||||
@@ -1346,7 +1346,7 @@ def test_mcp_deploy_preflight_route_is_preview_only():
|
||||
|
||||
assert response.status_code == 200
|
||||
assert data["mode"] == "mcp_external_deploy_preflight_preview"
|
||||
assert data["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert data["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert data["deployment_actions_executed"] is False
|
||||
assert data["docker_command_executed"] is False
|
||||
assert data["ssh_command_executed"] is False
|
||||
@@ -1361,7 +1361,7 @@ def test_mcp_readiness_default_is_planned_only(monkeypatch):
|
||||
readiness = MarketIntelService().build_mcp_readiness()
|
||||
|
||||
assert readiness["mode"] == "mcp_readiness_planned"
|
||||
assert readiness["phase"] == "phase_41_alert_review_queue_contract"
|
||||
assert readiness["phase"] == "phase_42_alert_review_queue_migration_blueprint"
|
||||
assert readiness["execute_requested"] is False
|
||||
assert readiness["router_enabled"] is False
|
||||
assert readiness["external_mcp_complete"] is False
|
||||
@@ -1875,7 +1875,7 @@ def test_migration_blueprint_is_additive_preview_only():
|
||||
assert blueprint["database_commit_executed"] is False
|
||||
assert blueprint["external_network_executed"] is False
|
||||
assert blueprint["scheduler_attached"] is False
|
||||
assert blueprint["table_count"] == 7
|
||||
assert blueprint["table_count"] == 8
|
||||
assert blueprint["forward_has_destructive_sql"] is False
|
||||
assert blueprint["safety_checks"]["forward_sql_additive_only"] is True
|
||||
assert blueprint["safety_checks"]["writes_seed_rows_only_with_cli_apply_flag"] is True
|
||||
@@ -1886,6 +1886,8 @@ def test_migration_blueprint_is_additive_preview_only():
|
||||
assert migration_file.read_text(encoding="utf-8").strip() == blueprint["forward_sql"]
|
||||
assert "CREATE TABLE IF NOT EXISTS market_platforms".lower() in forward_sql_lower
|
||||
assert "CREATE TABLE IF NOT EXISTS market_crawler_runs".lower() in forward_sql_lower
|
||||
assert "CREATE TABLE IF NOT EXISTS market_alert_review_queue".lower() in forward_sql_lower
|
||||
assert "ux_market_alert_review_queue_dedupe".lower() in forward_sql_lower
|
||||
assert "drop table" not in forward_sql_lower
|
||||
assert "truncate " not in forward_sql_lower
|
||||
assert "delete from" not in forward_sql_lower
|
||||
@@ -1893,6 +1895,7 @@ def test_migration_blueprint_is_additive_preview_only():
|
||||
assert blueprint["command_plan"]["seed_writer_command"]["script_created"] is True
|
||||
assert blueprint["command_plan"]["seed_writer_command"]["script_path"] == "scripts/market_intel_seed_writer.py"
|
||||
assert blueprint["rollback_requires_manual_approval"] is True
|
||||
assert "DROP TABLE IF EXISTS market_alert_review_queue" in blueprint["rollback_sql"]
|
||||
|
||||
|
||||
def test_seed_writer_cli_status_blocks_real_write():
|
||||
|
||||
Reference in New Issue
Block a user