import json from pathlib import Path from models.factor_skill_registry import level1_catalog, level2_sops_for_active_factors, level3_scripts_for_active_factors def test_current_overlay_exposes_44_level1_factor_skills(): payload = json.loads(Path("config/multi_factor_overlay.json").read_text()) names = list(payload["selected_config"]["weights"]) rows = level1_catalog(names) assert len(rows) == 44 assert all(row["description"] and row["trigger"] and row["level2_sop"] for row in rows) def test_triggered_factors_load_only_needed_sop_and_deep_scripts(): active = ["intraday_60k_volume_low_guard", "big_player_buy"] assert level2_sops_for_active_factors(active) == [ "docs/factor_skills/group_sops.md#量價行為", "docs/factor_skills/group_sops.md#籌碼與風險", ] assert level3_scripts_for_active_factors(active) == [ "scripts/run_44factor_buy_gate_evaluation.py", "data/realtime_chip_adapter.py", ]