Files
Jyotisha/scripts/kp_exact_cusp_runtime_oracle_boundary.py
T
2026-07-23 12:03:58 +08:00

102 lines
3.8 KiB
Python

#!/usr/bin/env python3
"""Summarize KP exact cusp runtime state vs public numeric oracle blocker."""
from __future__ import annotations
import hashlib
import json
from pathlib import Path
from typing import Any
ROOT = Path(__file__).resolve().parents[1]
RUNTIME_RAW = ROOT / "references/oracle/vedicastro_kp_house_cusp_probe_steve_jobs_2026_07_23.json"
HUNT = ROOT / "references/oracle/kp_exact_cusp_public_worked_example_hunt_v2_2026_07_22.json"
OUTPUT = ROOT / "references/oracle/kp_exact_cusp_runtime_oracle_boundary_2026_07_23.json"
def _load(path: Path) -> dict[str, Any]:
return json.loads(path.read_text(encoding="utf-8"))
def _stable_json(data: Any) -> str:
return json.dumps(data, ensure_ascii=False, sort_keys=True, separators=(",", ":"), default=str)
def _runtime_summary(raw: dict[str, Any]) -> dict[str, Any]:
houses = ((raw.get("raw") or {}).get("houses") or [])
return {
"artifact": str(RUNTIME_RAW.relative_to(ROOT)),
"artifact_sha256": hashlib.sha256(RUNTIME_RAW.read_bytes()).hexdigest(),
"engine": raw.get("engine"),
"claim_status": raw.get("claim_status"),
"house_count": len(houses),
"fields": ["cusp_longitude", "star_lord", "sub_lord", "sub_sub_lord"],
"schema_fingerprint": raw.get("schema_fingerprint") or {},
"raw_hash": raw.get("raw_hash"),
}
def build() -> dict[str, Any]:
raw = _load(RUNTIME_RAW)
hunt = _load(HUNT)
required = hunt.get("required_numeric_oracle_fields") or [
"birth_or_question_input",
"ayanamsa",
"house_system_or_kp_cusp_method",
"exact_cusp_longitudes",
"cusp_star_lord",
"cusp_sub_lord",
"cusp_sub_sub_lord",
]
required = [
"birth_or_question_input" if item == "birth_or_query_input" else item
for item in required
]
candidate_sources = [
{
"id": "archive_kp_reader_candidate",
"source": "references/oracle/kp_archive_numeric_extraction_result_2026_07_21.json",
"missing": ["complete input", "full 12-cusp star/sub/sub-sub table"],
"promotion": "queue_only",
},
{
"id": "astrosage_kp_cuspal_sub_lord",
"source": "https://www.astrosage.com/kp/cuspal-sub-lord.asp",
"missing": ["fixed public input", "published expected 12-cusp output table", "raw hash"],
"promotion": "queue_only",
},
{
"id": "vedicastro_python_surface",
"source": "references/open_source_sources/VedicAstro/vedicastro/VedicAstro.py",
"missing": ["independent expected values"],
"promotion": "queue_only",
},
]
packet = {
"scope": "kp_exact_cusp_runtime_oracle_boundary",
"created_at": "2026-07-23",
"claim_status": "calculable_displayable_public_oracle_blocked",
"runtime_raw_status": "single_engine_observation_ready",
"public_numeric_oracle_status": "blocked_missing_complete_worked_example",
"truth_matrix_allowed": False,
"production_tuning_allowed": False,
"runtime_raw": _runtime_summary(raw),
"required_oracle_fields": required,
"complete_numeric_oracle_count": 0,
"candidate_sources": candidate_sources,
"packet_hash": hashlib.sha256(_stable_json(candidate_sources + [required]).encode("utf-8")).hexdigest(),
"boundary": "KP exact cusp/star/sub/sub-sub can be displayed from runtime raw as observation; it cannot be used as verified precise event timing until a public numeric worked example closes.",
}
return packet
def main() -> int:
packet = build()
OUTPUT.write_text(json.dumps(packet, ensure_ascii=False, indent=2, sort_keys=True) + "\n", encoding="utf-8")
print(json.dumps(packet, ensure_ascii=False, sort_keys=True))
return 0
if __name__ == "__main__":
raise SystemExit(main())