diff --git a/references/oracle/evidence_packet_index_2026_07_19.json b/references/oracle/evidence_packet_index_2026_07_19.json index a296eb5c..78fc3fdf 100644 --- a/references/oracle/evidence_packet_index_2026_07_19.json +++ b/references/oracle/evidence_packet_index_2026_07_19.json @@ -5,7 +5,7 @@ "production_tuning_allowed": false, "boundary": "Index of current governance packets only. Raw oracle artifacts remain in references/oracle/artifacts and are not all duplicated here.", "summary": { - "packet_count": 51, + "packet_count": 54, "blocked_or_partial_count": 40, "human_review_required_count": 1 }, @@ -417,6 +417,30 @@ "claim_status": "observation_only", "consumer_policy": "research_to_commercial_contract_only", "claim_boundary": "VedicAstro KP lord/sub/sub-sub runtime surface is callable in isolated sidereal flatlib environment; no precision-timing truth upgrade until public numeric KP worked-example replay closes." + }, + { + "packet_id": "kp_muhurta_shadbala_numeric_packet_queue", + "path": "references/oracle/kp_muhurta_shadbala_numeric_packet_queue_2026_07_19.json", + "domain": "kp_muhurta_shadbala_numeric_oracle_queue", + "claim_status": "open_queue", + "consumer_policy": "research_to_commercial_contract_only", + "claim_boundary": "Queue tracks KP cusp, KP sub-lord table, Tarabala/Chandrabala, Rahu Kalam, and Shadbala numeric packets. Runtime KP raw exists, but no row is numeric_oracle_ready yet." + }, + { + "packet_id": "vedicastro_kp_house_cusp_probe_steve_jobs", + "path": "references/oracle/vedicastro_kp_house_cusp_probe_steve_jobs_2026_07_19.json", + "domain": "kp_precision_timing_dependency", + "claim_status": "observation_only", + "consumer_policy": "research_to_commercial_contract_only", + "claim_boundary": "VedicAstro KP house cusp star/sub/sub-sub raw for Steve Jobs fixture; observation-only until public worked-example replay closes." + }, + { + "packet_id": "vedicastro_kp_house_cusp_probe", + "path": "scripts/vedicastro_kp_house_cusp_probe.py", + "domain": "kp_precision_timing_dependency", + "claim_status": "tooling_observation_only", + "consumer_policy": "research_to_commercial_contract_only", + "claim_boundary": "Probe script can collect VedicAstro KP cusp raw in isolated sidereal flatlib environment; not a production prediction engine." } ] } diff --git a/references/oracle/kp_muhurta_shadbala_numeric_packet_queue_2026_07_19.json b/references/oracle/kp_muhurta_shadbala_numeric_packet_queue_2026_07_19.json new file mode 100644 index 00000000..6bb5f18d --- /dev/null +++ b/references/oracle/kp_muhurta_shadbala_numeric_packet_queue_2026_07_19.json @@ -0,0 +1,54 @@ +{ + "scope": "kp_muhurta_shadbala_numeric_packet_queue", + "created_at": "2026-07-19", + "status": "queue_ready_runtime_kp_raw_attached", + "claim_status": "open_queue", + "production_tuning_allowed": false, + "truth_matrix_allowed": false, + "boundary": "Rows are only promoted to numeric_oracle_ready when public input/settings, expected values, raw capture hash, and replay comparison all exist.", + "runtime_observations": [ + { + "topic": "KP house cusp star/sub/sub-sub", + "artifact": "references/oracle/vedicastro_kp_house_cusp_probe_steve_jobs_2026_07_19.json", + "raw_hash": "2e7a6b17eb2965a60846f625f6bd8bc03555216d6225983647bcbfa23d0e345b", + "status": "runtime_raw_available_not_oracle" + } + ], + "packet_rows": [ + { + "topic": "KP cusp", + "candidate_url": "https://www.astrosage.com/kp/cuspal-sub-lord.asp", + "source_type": "online_tool_or_reference", + "numeric_oracle_status": "blocked_public_input_missing", + "required_fields": ["birth_or_query_datetime", "location", "ayanamsa", "house_system", "cusp_longitude", "nakshatra_lord", "sub_lord", "sub_sub_lord", "raw_capture_hash"] + }, + { + "topic": "KP sub-lord table", + "candidate_url": "https://www.aryabhatt.com/astrology/krishnamurti-paddhati/kp-sub-lords-table", + "source_type": "reference_table_candidate", + "numeric_oracle_status": "blocked_table_capture_and_license_boundary", + "required_fields": ["table_raw_capture", "table_hash", "copyright_boundary", "degree_range", "star_lord", "sub_lord", "sub_sub_lord"] + }, + { + "topic": "Tarabala/Chandrabala", + "candidate_url": "https://www.mypanchang.com/tarabalam.php", + "source_type": "worked_example_or_calculator_candidate", + "numeric_oracle_status": "blocked_fixture_missing", + "required_fields": ["date", "location", "birth_moon_nakshatra", "current_moon_nakshatra", "tarabala_result", "chandrabala_result", "raw_capture_hash"] + }, + { + "topic": "Rahu Kalam", + "candidate_url": "https://www.drikpanchang.com/muhurat/rahu-kalam.html", + "source_type": "calculation_reference_candidate", + "numeric_oracle_status": "blocked_fixture_missing", + "required_fields": ["date", "location", "sunrise", "sunset", "weekday", "expected_interval", "raw_capture_hash"] + }, + { + "topic": "Shadbala Virupa", + "candidate_url": "https://www.astrojyoti.com/shadbala.htm", + "source_type": "formula_reference_candidate", + "numeric_oracle_status": "blocked_component_values_missing", + "required_fields": ["birth_input", "planet", "component_name", "formula_variant", "unit", "expected_virupa", "raw_capture_hash"] + } + ] +} diff --git a/references/oracle/vedicastro_kp_house_cusp_probe_steve_jobs_2026_07_19.json b/references/oracle/vedicastro_kp_house_cusp_probe_steve_jobs_2026_07_19.json new file mode 100644 index 00000000..4aec2c59 --- /dev/null +++ b/references/oracle/vedicastro_kp_house_cusp_probe_steve_jobs_2026_07_19.json @@ -0,0 +1,220 @@ +{ + "boundary": "KP house cusp star/sub/sub-sub raw from VedicAstro runtime. Observation-only until matched against a public numeric KP worked example.", + "claim_status": "observation_only", + "created_at": "2026-07-19", + "dependency_identity": { + "flatlib": "0.3.1.dev0", + "observed_pinned_flatlib_commit": "2618c348ce1ab2588548f935ff65f031630b4872", + "polars": "1.42.1", + "required_flatlib_source": "git+https://github.com/diliprk/flatlib.git@sidereal", + "timezonefinder": "8.2.5" + }, + "engine": "VedicAstro", + "production_tuning_allowed": false, + "raw": { + "houses": [ + { + "DegSize": 26.059, + "HouseNr": 1, + "LonDecDeg": 149.434, + "Nakshatra": "UttaraPhalgunī", + "NakshatraLord": "Sun", + "Object": "I", + "Rasi": "Leo", + "RasiLord": "Sun", + "SignLonDMS": "+29:26:02", + "SignLonDecDeg": 29.434, + "SubLord": "Rahu", + "SubSubLord": "Rahu" + }, + { + "DegSize": 30.141, + "HouseNr": 2, + "LonDecDeg": 175.493, + "Nakshatra": "Chitra", + "NakshatraLord": "Mars", + "Object": "II", + "Rasi": "Virgo", + "RasiLord": "Mercury", + "SignLonDMS": "+25:29:35", + "SignLonDecDeg": 25.493, + "SubLord": "Rahu", + "SubSubLord": "Venus" + }, + { + "DegSize": 32.894, + "HouseNr": 3, + "LonDecDeg": 205.634, + "Nakshatra": "Vishakha", + "NakshatraLord": "Jupiter", + "Object": "III", + "Rasi": "Libra", + "RasiLord": "Venus", + "SignLonDMS": "+25:38:01", + "SignLonDecDeg": 25.634, + "SubLord": "Mercury", + "SubSubLord": "Saturn" + }, + { + "DegSize": 33.066, + "HouseNr": 4, + "LonDecDeg": 238.527, + "Nakshatra": "Jyeshtha", + "NakshatraLord": "Mercury", + "Object": "IV", + "Rasi": "Scorpio", + "RasiLord": "Mars", + "SignLonDMS": "+28:31:38", + "SignLonDecDeg": 28.527, + "SubLord": "Saturn", + "SubSubLord": "Ketu" + }, + { + "DegSize": 30.713, + "HouseNr": 5, + "LonDecDeg": 271.594, + "Nakshatra": "UttaraAshadha", + "NakshatraLord": "Sun", + "Object": "V", + "Rasi": "Capricorn", + "RasiLord": "Saturn", + "SignLonDMS": "+01:35:37", + "SignLonDecDeg": 1.594, + "SubLord": "Jupiter", + "SubSubLord": "Saturn" + }, + { + "DegSize": 27.128, + "HouseNr": 6, + "LonDecDeg": 302.306, + "Nakshatra": "Dhanishta", + "NakshatraLord": "Mars", + "Object": "VI", + "Rasi": "Aquarius", + "RasiLord": "Saturn", + "SignLonDMS": "+02:18:22", + "SignLonDecDeg": 2.306, + "SubLord": "Ketu", + "SubSubLord": "Rahu" + }, + { + "DegSize": 26.059, + "HouseNr": 7, + "LonDecDeg": 329.434, + "Nakshatra": "PurvaBhādrapadā", + "NakshatraLord": "Jupiter", + "Object": "VII", + "Rasi": "Aquarius", + "RasiLord": "Saturn", + "SignLonDMS": "+29:26:02", + "SignLonDecDeg": 29.434, + "SubLord": "Sun", + "SubSubLord": "Venus" + }, + { + "DegSize": 30.141, + "HouseNr": 8, + "LonDecDeg": 355.493, + "Nakshatra": "Revati", + "NakshatraLord": "Mercury", + "Object": "VIII", + "Rasi": "Pisces", + "RasiLord": "Jupiter", + "SignLonDMS": "+25:29:35", + "SignLonDecDeg": 25.493, + "SubLord": "Rahu", + "SubSubLord": "Venus" + }, + { + "DegSize": 32.894, + "HouseNr": 9, + "LonDecDeg": 25.634, + "Nakshatra": "Bharani", + "NakshatraLord": "Venus", + "Object": "IX", + "Rasi": "Aries", + "RasiLord": "Mars", + "SignLonDMS": "+25:38:01", + "SignLonDecDeg": 25.634, + "SubLord": "Mercury", + "SubSubLord": "Saturn" + }, + { + "DegSize": 33.066, + "HouseNr": 10, + "LonDecDeg": 58.527, + "Nakshatra": "Mrigashīrsha", + "NakshatraLord": "Mars", + "Object": "X", + "Rasi": "Taurus", + "RasiLord": "Venus", + "SignLonDMS": "+28:31:38", + "SignLonDecDeg": 28.527, + "SubLord": "Saturn", + "SubSubLord": "Ketu" + }, + { + "DegSize": 30.713, + "HouseNr": 11, + "LonDecDeg": 91.594, + "Nakshatra": "Punarvasu", + "NakshatraLord": "Jupiter", + "Object": "XI", + "Rasi": "Cancer", + "RasiLord": "Moon", + "SignLonDMS": "+01:35:37", + "SignLonDecDeg": 1.594, + "SubLord": "Rahu", + "SubSubLord": "Rahu" + }, + { + "DegSize": 27.128, + "HouseNr": 12, + "LonDecDeg": 122.306, + "Nakshatra": "Maghā", + "NakshatraLord": "Ketu", + "Object": "XII", + "Rasi": "Leo", + "RasiLord": "Sun", + "SignLonDMS": "+02:18:22", + "SignLonDecDeg": 2.306, + "SubLord": "Venus", + "SubSubLord": "Saturn" + } + ], + "request": { + "ayanamsa": "Krishnamurti", + "day": 24, + "hour": 19, + "house_system": "Placidus", + "latitude": 37.3382, + "longitude": -122.0383, + "minute": 15, + "month": 2, + "second": 0, + "timezone": "America/Los_Angeles", + "year": 1955 + } + }, + "raw_hash": "2e7a6b17eb2965a60846f625f6bd8bc03555216d6225983647bcbfa23d0e345b", + "schema_fingerprint": { + "fields": [ + "Object", + "HouseNr", + "Rasi", + "LonDecDeg", + "SignLonDMS", + "SignLonDecDeg", + "DegSize", + "Nakshatra", + "RasiLord", + "NakshatraLord", + "SubLord", + "SubSubLord" + ], + "house_count": 12 + }, + "scope": "vedicastro_kp_house_cusp_probe", + "status": "complete", + "truth_matrix_allowed": false +} diff --git a/scripts/vedicastro_kp_house_cusp_probe.py b/scripts/vedicastro_kp_house_cusp_probe.py new file mode 100644 index 00000000..82884bf3 --- /dev/null +++ b/scripts/vedicastro_kp_house_cusp_probe.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 +"""Run VedicAstro KP house cusp star/sub/sub-sub raw probe. + +Requires an isolated PYTHONPATH containing VedicAstro's required sidereal +flatlib fork. Output is observation-only until public numeric KP worked +examples are replayed. +""" +from __future__ import annotations + +import argparse +import hashlib +import importlib.metadata +import json +import sys +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[1] +SRC = ROOT / "references/open_source_sources/VedicAstro" + + +def stable(data: Any) -> str: + return json.dumps(data, ensure_ascii=False, sort_keys=True, separators=(",", ":"), default=str) + + +def package_version(name: str) -> str | None: + try: + return importlib.metadata.version(name) + except importlib.metadata.PackageNotFoundError: + return None + + +def build(args: argparse.Namespace) -> dict[str, Any]: + sys.path.insert(0, str(SRC)) + from vedicastro.VedicAstro import VedicHoroscopeData # type: ignore + + chart_input = { + "year": args.year, + "month": args.month, + "day": args.day, + "hour": args.hour, + "minute": args.minute, + "second": args.second, + "latitude": args.latitude, + "longitude": args.longitude, + "timezone": args.timezone, + "ayanamsa": args.ayanamsa, + "house_system": args.house_system, + } + v = VedicHoroscopeData( + args.year, + args.month, + args.day, + args.hour, + args.minute, + args.second, + args.latitude, + args.longitude, + tz=args.timezone, + ayanamsa=args.ayanamsa, + house_system=args.house_system, + ) + houses = v.get_houses_data_from_chart(v.generate_chart()) + rows = [row._asdict() for row in houses] + raw = { + "request": chart_input, + "houses": rows, + } + return { + "scope": "vedicastro_kp_house_cusp_probe", + "created_at": "2026-07-19", + "status": "complete", + "claim_status": "observation_only", + "production_tuning_allowed": False, + "truth_matrix_allowed": False, + "engine": "VedicAstro", + "dependency_identity": { + "required_flatlib_source": "git+https://github.com/diliprk/flatlib.git@sidereal", + "observed_pinned_flatlib_commit": "2618c348ce1ab2588548f935ff65f031630b4872", + "flatlib": package_version("flatlib"), + "polars": package_version("polars"), + "timezonefinder": package_version("timezonefinder"), + }, + "raw_hash": hashlib.sha256(stable(raw).encode("utf-8")).hexdigest(), + "schema_fingerprint": { + "house_count": len(rows), + "fields": list(rows[0].keys()) if rows else [], + }, + "raw": raw, + "boundary": "KP house cusp star/sub/sub-sub raw from VedicAstro runtime. Observation-only until matched against a public numeric KP worked example.", + } + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--year", type=int, default=1955) + ap.add_argument("--month", type=int, default=2) + ap.add_argument("--day", type=int, default=24) + ap.add_argument("--hour", type=int, default=19) + ap.add_argument("--minute", type=int, default=15) + ap.add_argument("--second", type=int, default=0) + ap.add_argument("--latitude", type=float, default=37.3382) + ap.add_argument("--longitude", type=float, default=-122.0383) + ap.add_argument("--timezone", default="America/Los_Angeles") + ap.add_argument("--ayanamsa", default="Krishnamurti") + ap.add_argument("--house-system", default="Placidus") + ap.add_argument("--output") + args = ap.parse_args() + payload = build(args) + text = json.dumps(payload, ensure_ascii=False, indent=2, sort_keys=True) + if args.output: + Path(args.output).write_text(text + "\n", encoding="utf-8") + print(text) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/test_kp_muhurta_shadbala_numeric_packet_queue.py b/tests/test_kp_muhurta_shadbala_numeric_packet_queue.py new file mode 100644 index 00000000..3df38893 --- /dev/null +++ b/tests/test_kp_muhurta_shadbala_numeric_packet_queue.py @@ -0,0 +1,31 @@ +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +QUEUE = ROOT / "references/oracle/kp_muhurta_shadbala_numeric_packet_queue_2026_07_19.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_numeric_packet_queue_attaches_kp_runtime_raw_but_no_truth_upgrade(): + data = json.loads(QUEUE.read_text(encoding="utf-8")) + assert data["scope"] == "kp_muhurta_shadbala_numeric_packet_queue" + assert data["claim_status"] == "open_queue" + assert data["production_tuning_allowed"] is False + assert data["truth_matrix_allowed"] is False + assert data["runtime_observations"][0]["raw_hash"] == "2e7a6b17eb2965a60846f625f6bd8bc03555216d6225983647bcbfa23d0e345b" + assert all(row["numeric_oracle_status"].startswith("blocked_") for row in data["packet_rows"]) + + +def test_numeric_packet_queue_covers_requested_topics(): + data = json.loads(QUEUE.read_text(encoding="utf-8")) + topics = {row["topic"] for row in data["packet_rows"]} + assert {"KP cusp", "KP sub-lord table", "Tarabala/Chandrabala", "Rahu Kalam", "Shadbala Virupa"} <= topics + for row in data["packet_rows"]: + assert "raw_capture_hash" in row["required_fields"] or row["topic"] == "KP sub-lord table" + + +def test_evidence_index_registers_packet_queue(): + index = json.loads(INDEX.read_text(encoding="utf-8")) + packets = {row["packet_id"]: row for row in index["packets"]} + assert packets["kp_muhurta_shadbala_numeric_packet_queue"]["claim_status"] == "open_queue"