from app.config.ai_prompt_registry import ( PROMPT_REGISTRY_MAP, get_prompt_registry, get_prompt_registry_entry, iter_prompt_registry_keys, ) from app.config.ai_prompts_catalog import __all__ as PROMPT_CATALOG_EXPORTS def test_prompt_registry_covers_all_catalog_exports() -> None: catalog_keys = set(PROMPT_CATALOG_EXPORTS) registry_keys = set(iter_prompt_registry_keys()) assert registry_keys == catalog_keys assert set(PROMPT_REGISTRY_MAP) == catalog_keys for key in catalog_keys: entry = get_prompt_registry_entry(key) assert entry is not None assert entry["prompt_key"] == key def test_prompt_registry_returns_detached_copies() -> None: registry = get_prompt_registry() original_key = registry[0]["prompt_key"] registry[0]["prompt_key"] = "BROKEN_KEY" assert PROMPT_REGISTRY_MAP[original_key]["prompt_key"] == original_key def test_high_frequency_registry_entries_have_complete_metadata() -> None: required_keys = ( "PROMPT_SIGNAL_PLANNER", "PROMPT_GENERATE_CHARTER", "PROMPT_DECOMPOSE_TASKS", "PROMPT_PROJECT_STATUS_QA", "PROMPT_MEMBER_WORKLOAD_QA", "PROMPT_AI_PMO_QA", "PROMPT_EXTERNAL_TREND_QA", "PROMPT_INDUSTRY_TREND_QA", ) for prompt_key in required_keys: entry = get_prompt_registry_entry(prompt_key) assert entry is not None assert entry["module"] assert entry["business_scenario"] assert entry["input_contract"] assert entry["output_contract"] assert isinstance(entry["call_sites"], tuple) assert entry["call_sites"], prompt_key signal_planner_entry = get_prompt_registry_entry("PROMPT_SIGNAL_PLANNER") assert signal_planner_entry is not None assert "charter_json" in signal_planner_entry["input_contract"] assert any("mixin_prompt.py" in site for site in signal_planner_entry["call_sites"]) assert any("mixin_analyze.py" in site for site in signal_planner_entry["call_sites"])