97 lines
4.6 KiB
Python
97 lines
4.6 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
REGISTRY_DIR = ROOT / "references/oracle"
|
|
REGISTRIES = [
|
|
"kp_precision_timing_gap_registry_2026_07_19.json",
|
|
"muhurta_full_system_gap_registry_2026_07_19.json",
|
|
"ashtakavarga_advanced_usage_gap_registry_2026_07_19.json",
|
|
"compatibility_full_system_gap_registry_2026_07_19.json",
|
|
]
|
|
REUSE_SWEEP = ROOT / "references/oracle/local_oss_reuse_sweep_kp_muhurta_av_compat_2026_07_19.json"
|
|
REQUIRED_FIELDS = {
|
|
"technique_id",
|
|
"local_code_status",
|
|
"skill_invocation_status",
|
|
"api_ui_entry_status",
|
|
"external_oracle_status",
|
|
"commercial_sync_status",
|
|
"claim_boundary",
|
|
}
|
|
|
|
|
|
def _load(name: str) -> dict:
|
|
return json.loads((REGISTRY_DIR / name).read_text(encoding="utf-8"))
|
|
|
|
|
|
def test_high_value_gap_registries_exist_and_keep_required_fields() -> None:
|
|
for name in REGISTRIES:
|
|
data = _load(name)
|
|
assert data["status"] == "gap_registry_v1"
|
|
assert data["production_tuning_allowed"] is False
|
|
assert data["items"]
|
|
for item in data["items"]:
|
|
assert REQUIRED_FIELDS.issubset(item)
|
|
assert item["claim_boundary"]
|
|
assert item["commercial_sync_status"] in {
|
|
"ready_after_guarded_contract",
|
|
"research_only",
|
|
"blocked_until_oracle",
|
|
"not_for_commercial_runtime",
|
|
}
|
|
|
|
|
|
def test_kp_registry_keeps_precision_timing_blocked_without_oracle() -> None:
|
|
data = _load("kp_precision_timing_gap_registry_2026_07_19.json")
|
|
ids = {item["technique_id"]: item for item in data["items"]}
|
|
assert {"kp_cusps", "star_sub_lord", "ruling_planets", "kp_significators", "kp_horary"}.issubset(ids)
|
|
assert ids["kp_cusps"]["local_code_status"] == "precision_contract_present_probe_approximate"
|
|
assert ids["kp_cusps"]["external_oracle_status"] == "oracle_queue_present_awaiting_public_example"
|
|
assert ids["star_sub_lord"]["local_code_status"] == "minimal_probe_present"
|
|
assert ids["star_sub_lord"]["external_oracle_status"] == "hash_manifest_present_fixture_missing_or_fixed"
|
|
assert ids["ruling_planets"]["local_code_status"] == "minimal_probe_present"
|
|
assert ids["kp_significators"]["local_code_status"] == "minimal_probe_present"
|
|
assert ids["kp_significators"]["claim_boundary"].startswith("Reference/probe only")
|
|
|
|
|
|
def test_muhurta_registry_distinguishes_panchanga_from_full_muhurta() -> None:
|
|
data = _load("muhurta_full_system_gap_registry_2026_07_19.json")
|
|
ids = {item["technique_id"]: item for item in data["items"]}
|
|
assert ids["panchanga_base"]["local_code_status"] == "present"
|
|
assert ids["full_muhurta_scoring"]["local_code_status"] == "missing_runtime"
|
|
assert ids["full_muhurta_scoring"]["api_ui_entry_status"] == "factor_probe_only_no_verdict"
|
|
assert ids["full_muhurta_scoring"]["claim_boundary"].startswith("Do not present")
|
|
assert ids["tarabala_chandrabala"]["local_code_status"] == "factor_probe_present"
|
|
|
|
|
|
def test_ashtakavarga_advanced_registry_keeps_advanced_usage_observation_only() -> None:
|
|
data = _load("ashtakavarga_advanced_usage_gap_registry_2026_07_19.json")
|
|
ids = {item["technique_id"]: item for item in data["items"]}
|
|
assert ids["bav_sav_core"]["local_code_status"] == "present"
|
|
assert ids["kakshya_transit"]["external_oracle_status"] == "missing"
|
|
assert ids["annual_sav_timing_scan"]["commercial_sync_status"] == "blocked_until_oracle"
|
|
|
|
|
|
def test_compatibility_registry_separates_basic_koota_from_advanced_overlays() -> None:
|
|
data = _load("compatibility_full_system_gap_registry_2026_07_19.json")
|
|
ids = {item["technique_id"]: item for item in data["items"]}
|
|
assert ids["ashtakoota_core"]["local_code_status"] == "present"
|
|
assert ids["composite_davidson_charts"]["commercial_sync_status"] == "not_for_commercial_runtime"
|
|
assert ids["relationship_av_overlay"]["external_oracle_status"] == "missing"
|
|
|
|
|
|
def test_local_oss_reuse_sweep_records_reusable_sources_without_truth_upgrade() -> None:
|
|
data = json.loads(REUSE_SWEEP.read_text(encoding="utf-8"))
|
|
assert data["status"] == "reuse_sweep_v1"
|
|
assert data["production_tuning_allowed"] is False
|
|
local_paths = {item["path"] for item in data["local_candidates"]}
|
|
assert "scripts/kp_system.py" in local_paths
|
|
assert "references/open_source_sources/VedicAstro" in local_paths
|
|
assert "references/muhurta-complete-guide.md" in local_paths
|
|
assert all(item["claim_boundary"] for item in data["local_candidates"])
|
|
assert any(item["reuse_status"] == "AGPL oracle/reference only" for item in data["web_candidates"])
|