From 05a71060065ec916c9b08b3eda3a4806e1a70c56 Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Sun, 19 Jul 2026 22:36:48 +0800 Subject: [PATCH] feat: sync shadbala component closure matrix --- .../evidence_packet_index_2026_07_19.json | 10 +- ...a_component_closure_matrix_2026_07_19.json | 529 ++++++++++++++++++ scripts/shadbala_component_closure_matrix.py | 91 +++ .../test_shadbala_component_closure_matrix.py | 43 ++ 4 files changed, 672 insertions(+), 1 deletion(-) create mode 100644 references/oracle/shadbala_component_closure_matrix_2026_07_19.json create mode 100644 scripts/shadbala_component_closure_matrix.py create mode 100644 tests/test_shadbala_component_closure_matrix.py diff --git a/references/oracle/evidence_packet_index_2026_07_19.json b/references/oracle/evidence_packet_index_2026_07_19.json index a3055bc7..ff1a1192 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": 60, + "packet_count": 61, "blocked_or_partial_count": 40, "human_review_required_count": 1 }, @@ -489,6 +489,14 @@ "claim_status": "open_queue", "consumer_policy": "research_to_commercial_contract_only", "claim_boundary": "Muhurta OSS factor queue records candidates; no production scoring upgrade without source, raw/hash, and worked examples." + }, + { + "packet_id": "shadbala_component_closure_matrix", + "path": "references/oracle/shadbala_component_closure_matrix_2026_07_19.json", + "domain": "shadbala_component_closure", + "claim_status": "partial", + "consumer_policy": "research_to_commercial_contract_only", + "claim_boundary": "Maps Shadbala components across local/Xalen/jyotishganit/VedicAstro observations. Closed components can inform provenance; open/method-variant rows must not be treated as absolute error." } ] } diff --git a/references/oracle/shadbala_component_closure_matrix_2026_07_19.json b/references/oracle/shadbala_component_closure_matrix_2026_07_19.json new file mode 100644 index 00000000..ab987422 --- /dev/null +++ b/references/oracle/shadbala_component_closure_matrix_2026_07_19.json @@ -0,0 +1,529 @@ +{ + "boundary": "42 Shadbala six-force rows have jyotishganit raw and source/provenance hooks; absolute Virupa parity remains pending until same-unit multi-engine normalization closes.", + "claim_status": "partial", + "created_at": "2026-07-19", + "matrix_hash": "f9673d90ad7f283db9e38cb7f87c34c4ceb2c3aed2ea04010806e6b6e822e7f4", + "production_tuning_allowed": false, + "rows": [ + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Sthanabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 153.341, + "local_status": "available_needs_same_unit_extraction", + "planet": "Sun", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Digbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 29.175, + "local_status": "available_needs_same_unit_extraction", + "planet": "Sun", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Kaalabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 148.893, + "local_status": "available_needs_same_unit_extraction", + "planet": "Sun", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Cheshtabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 37.06, + "local_status": "available_needs_same_unit_extraction", + "planet": "Sun", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Naisargikabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 60.0, + "local_status": "available_needs_same_unit_extraction", + "planet": "Sun", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Drikbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": -6.462, + "local_status": "available_needs_same_unit_extraction", + "planet": "Sun", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Sthanabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 141.341, + "local_status": "available_needs_same_unit_extraction", + "planet": "Moon", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Digbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 20.159, + "local_status": "available_needs_same_unit_extraction", + "planet": "Moon", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Kaalabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 183.112, + "local_status": "available_needs_same_unit_extraction", + "planet": "Moon", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Cheshtabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 10.667, + "local_status": "available_needs_same_unit_extraction", + "planet": "Moon", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Naisargikabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 51.43, + "local_status": "available_needs_same_unit_extraction", + "planet": "Moon", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Drikbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 13.946, + "local_status": "available_needs_same_unit_extraction", + "planet": "Moon", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Sthanabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 232.378, + "local_status": "available_needs_same_unit_extraction", + "planet": "Mars", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Digbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 46.955, + "local_status": "available_needs_same_unit_extraction", + "planet": "Mars", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Kaalabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 106.407, + "local_status": "available_needs_same_unit_extraction", + "planet": "Mars", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Cheshtabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 22.864, + "local_status": "available_needs_same_unit_extraction", + "planet": "Mars", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Naisargikabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 17.14, + "local_status": "available_needs_same_unit_extraction", + "planet": "Mars", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Drikbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 12.483, + "local_status": "available_needs_same_unit_extraction", + "planet": "Mars", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Sthanabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 111.704, + "local_status": "available_needs_same_unit_extraction", + "planet": "Mercury", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Digbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 7.954, + "local_status": "available_needs_same_unit_extraction", + "planet": "Mercury", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Kaalabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 72.089, + "local_status": "available_needs_same_unit_extraction", + "planet": "Mercury", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Cheshtabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 35.368, + "local_status": "available_needs_same_unit_extraction", + "planet": "Mercury", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Naisargikabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 25.71, + "local_status": "available_needs_same_unit_extraction", + "planet": "Mercury", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Drikbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": -10.985, + "local_status": "available_needs_same_unit_extraction", + "planet": "Mercury", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Sthanabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 226.178, + "local_status": "available_needs_same_unit_extraction", + "planet": "Jupiter", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Digbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 44.095, + "local_status": "available_needs_same_unit_extraction", + "planet": "Jupiter", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Kaalabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 250.984, + "local_status": "available_needs_same_unit_extraction", + "planet": "Jupiter", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Cheshtabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 36.424, + "local_status": "available_needs_same_unit_extraction", + "planet": "Jupiter", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Naisargikabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 34.29, + "local_status": "available_needs_same_unit_extraction", + "planet": "Jupiter", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Drikbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 4.072, + "local_status": "available_needs_same_unit_extraction", + "planet": "Jupiter", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Sthanabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 112.816, + "local_status": "available_needs_same_unit_extraction", + "planet": "Venus", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Digbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 45.684, + "local_status": "available_needs_same_unit_extraction", + "planet": "Venus", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Kaalabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 63.186, + "local_status": "available_needs_same_unit_extraction", + "planet": "Venus", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Cheshtabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 46.466, + "local_status": "available_needs_same_unit_extraction", + "planet": "Venus", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Naisargikabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 42.86, + "local_status": "available_needs_same_unit_extraction", + "planet": "Venus", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Drikbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": -4.511, + "local_status": "available_needs_same_unit_extraction", + "planet": "Venus", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Sthanabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 151.104, + "local_status": "available_needs_same_unit_extraction", + "planet": "Saturn", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Digbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 24.313, + "local_status": "available_needs_same_unit_extraction", + "planet": "Saturn", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Kaalabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 71.929, + "local_status": "available_needs_same_unit_extraction", + "planet": "Saturn", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Cheshtabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 58.137, + "local_status": "available_needs_same_unit_extraction", + "planet": "Saturn", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Naisargikabala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 8.57, + "local_status": "available_needs_same_unit_extraction", + "planet": "Saturn", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + }, + { + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + "closure_status": "component_observation_ready_unit_parity_pending", + "component": "Drikbala", + "jyotishganit_status": "raw_available", + "jyotishganit_value_virupa": 8.06, + "local_status": "available_needs_same_unit_extraction", + "planet": "Saturn", + "source_status": "formula_source_registry_available", + "vp_jain_status": "benchmark_row_classified", + "xalen_status": "delta_report_available" + } + ], + "scope": "shadbala_component_closure_matrix", + "sources": { + "jyotishganit_raw": "references/oracle/jyotishganit_shadbala_surface_probe_steve_jobs_2026_07_19.json", + "provenance_registry": "references/oracle/shadbala_av_component_provenance_registry_2026_07_19.json", + "vp_jain_benchmark": "references/oracle/vp_jain_shadbala_component_benchmark_2026_07_17.json", + "xalen_delta_report": "references/oracle/xalen_shadbala_av_component_delta_report_2026_07_19.json" + }, + "status": "component_matrix_ready", + "summary": { + "absolute_parity_ready_count": 0, + "component_count": 6, + "jyotishganit_raw_available_count": 42, + "row_count": 42, + "visible_planet_count": 7 + }, + "truth_matrix_allowed": false +} diff --git a/scripts/shadbala_component_closure_matrix.py b/scripts/shadbala_component_closure_matrix.py new file mode 100644 index 00000000..1b38526b --- /dev/null +++ b/scripts/shadbala_component_closure_matrix.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +"""Build Shadbala component closure matrix from local OSS observations.""" +from __future__ import annotations + +import hashlib +import json +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[1] +JYO = ROOT / "references/oracle/jyotishganit_shadbala_surface_probe_steve_jobs_2026_07_19.json" +PROVENANCE = ROOT / "references/oracle/shadbala_av_component_provenance_registry_2026_07_19.json" +XALEN = ROOT / "references/oracle/xalen_shadbala_av_component_delta_report_2026_07_19.json" +VPJ = ROOT / "references/oracle/vp_jain_shadbala_component_benchmark_2026_07_17.json" +COMPONENTS = ["Sthanabala", "Digbala", "Kaalabala", "Cheshtabala", "Naisargikabala", "Drikbala"] +PLANETS = ["Sun", "Moon", "Mars", "Mercury", "Jupiter", "Venus", "Saturn"] + + +def stable(data: Any) -> str: + return json.dumps(data, ensure_ascii=False, sort_keys=True, separators=(",", ":"), default=str) + + +def component_value(raw: dict[str, Any], planet: str, component: str) -> float | None: + value = raw["raw"]["shadbala"].get(planet, {}).get(component) + if isinstance(value, dict): + value = value.get("Total") + return value if isinstance(value, (int, float)) else None + + +def load_optional(path: Path) -> dict[str, Any]: + return json.loads(path.read_text(encoding="utf-8")) if path.exists() else {} + + +def build() -> dict[str, Any]: + raw = json.loads(JYO.read_text(encoding="utf-8")) + provenance = load_optional(PROVENANCE) + xalen = load_optional(XALEN) + vpj = load_optional(VPJ) + rows = [] + for planet in PLANETS: + for component in COMPONENTS: + val = component_value(raw, planet, component) + rows.append( + { + "planet": planet, + "component": component, + "jyotishganit_value_virupa": val, + "jyotishganit_status": "raw_available" if val is not None else "missing", + "local_status": "available_needs_same_unit_extraction", + "xalen_status": "delta_report_available" if xalen else "missing", + "vp_jain_status": "benchmark_row_classified" if vpj else "missing", + "source_status": "formula_source_registry_available" if provenance else "source_needed", + "closure_status": "component_observation_ready_unit_parity_pending", + "claim_boundary": "Do not assert absolute Virupa parity until local/Xalen/VP Jain/PyJHora values are normalized to the same unit and formula variant.", + } + ) + matrix = { + "scope": "shadbala_component_closure_matrix", + "created_at": "2026-07-19", + "status": "component_matrix_ready", + "claim_status": "partial", + "production_tuning_allowed": False, + "truth_matrix_allowed": False, + "sources": { + "jyotishganit_raw": str(JYO.relative_to(ROOT)), + "provenance_registry": str(PROVENANCE.relative_to(ROOT)), + "xalen_delta_report": str(XALEN.relative_to(ROOT)), + "vp_jain_benchmark": str(VPJ.relative_to(ROOT)), + }, + "summary": { + "row_count": len(rows), + "visible_planet_count": len(PLANETS), + "component_count": len(COMPONENTS), + "jyotishganit_raw_available_count": sum(1 for r in rows if r["jyotishganit_status"] == "raw_available"), + "absolute_parity_ready_count": 0, + }, + "matrix_hash": hashlib.sha256(stable(rows).encode("utf-8")).hexdigest(), + "rows": rows, + "boundary": "42 Shadbala six-force rows have jyotishganit raw and source/provenance hooks; absolute Virupa parity remains pending until same-unit multi-engine normalization closes.", + } + return matrix + + +def main() -> int: + print(json.dumps(build(), ensure_ascii=False, indent=2, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/test_shadbala_component_closure_matrix.py b/tests/test_shadbala_component_closure_matrix.py new file mode 100644 index 00000000..c0a68d87 --- /dev/null +++ b/tests/test_shadbala_component_closure_matrix.py @@ -0,0 +1,43 @@ +import json +import subprocess +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +MATRIX = ROOT / "references/oracle/shadbala_component_closure_matrix_2026_07_19.json" +INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json" + + +def test_matrix_generator_outputs_42_component_rows(): + data = json.loads(subprocess.check_output(["python3", "scripts/shadbala_component_closure_matrix.py"], cwd=ROOT, text=True)) + assert data["scope"] == "shadbala_component_closure_matrix" + assert data["summary"]["row_count"] == 42 + assert data["summary"]["jyotishganit_raw_available_count"] == 42 + assert data["summary"]["absolute_parity_ready_count"] == 0 + assert data["production_tuning_allowed"] is False + assert data["truth_matrix_allowed"] is False + + +def test_matrix_artifact_links_existing_xalen_vp_jain_and_provenance(): + data = json.loads(MATRIX.read_text(encoding="utf-8")) + assert data["claim_status"] == "partial" + assert data["matrix_hash"] + assert data["sources"]["jyotishganit_raw"] == "references/oracle/jyotishganit_shadbala_surface_probe_steve_jobs_2026_07_19.json" + assert data["sources"]["xalen_delta_report"].endswith("xalen_shadbala_av_component_delta_report_2026_07_19.json") + assert all(row["closure_status"] == "component_observation_ready_unit_parity_pending" for row in data["rows"]) + + +def test_matrix_has_all_six_components_for_visible_planets(): + data = json.loads(MATRIX.read_text(encoding="utf-8")) + by_planet = {} + for row in data["rows"]: + by_planet.setdefault(row["planet"], set()).add(row["component"]) + expected = {"Sthanabala", "Digbala", "Kaalabala", "Cheshtabala", "Naisargikabala", "Drikbala"} + assert set(by_planet) == {"Sun", "Moon", "Mars", "Mercury", "Jupiter", "Venus", "Saturn"} + assert all(components == expected for components in by_planet.values()) + + +def test_evidence_index_registers_shadbala_component_matrix(): + index = json.loads(INDEX.read_text(encoding="utf-8")) + packets = {row["packet_id"]: row for row in index["packets"]} + assert packets["shadbala_component_closure_matrix"]["claim_status"] == "partial"