sync: import runtime closure oracle packets
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"scope": "commercial_golden_oss_case_ci_contract",
|
||||
"created_at": "2026-07-21",
|
||||
"status": "ready_contract",
|
||||
"purpose": "Commercial CI must replay at least one public OSS golden observation from the main research repo to detect accidental legacy WorkBuddy or incomplete artifact source wiring.",
|
||||
"golden_case": {
|
||||
"name": "pyjhora_jhora_sphuta_oss_case",
|
||||
"probe": "scripts/prashna_sphuta_oss_case_probe.py",
|
||||
"test": "tests/test_prashna_sphuta_oss_case_probe.py",
|
||||
"source_packet": "references/oracle/prashna_sphuta_oss_case_probe_2026_07_20.json",
|
||||
"expected_raw_hash": "f0705d205440ea8d7f39116042a0723d971f4ab79c94f7d448fc42d683d52326",
|
||||
"claim_status": "tooling_observation_only"
|
||||
},
|
||||
"gate_policy": {
|
||||
"fail_if_probe_missing": true,
|
||||
"fail_if_raw_hash_mismatch": true,
|
||||
"fail_if_claim_status_upgraded": true,
|
||||
"truth_upgrade_allowed": false,
|
||||
"allow_business_runtime_to_continue_after_warning": false
|
||||
},
|
||||
"claim_boundary": "ci_golden_observation_gate_only_not_oracle_truth"
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"scope": "commercial_startup_self_check_contract",
|
||||
"created_at": "2026-07-21",
|
||||
"status": "ready_contract",
|
||||
"purpose": "Commercial runtime must prove which research truth source, skill version, evidence index and oracle gates it is using before claiming website capability readiness.",
|
||||
"required_fields": [
|
||||
"truth_source_path",
|
||||
"truth_source_git_commit",
|
||||
"skill_version",
|
||||
"evidence_packet_count",
|
||||
"artifact_gate_status",
|
||||
"privacy_artifact_status",
|
||||
"oracle_ready_summary"
|
||||
],
|
||||
"reject_if": {
|
||||
"truth_source_path_contains": [
|
||||
"/WorkBuddy/",
|
||||
"/.workbuddy/"
|
||||
],
|
||||
"artifact_gate_status": [
|
||||
"missing",
|
||||
"unknown"
|
||||
],
|
||||
"privacy_artifact_status": [
|
||||
"private_artifact_present",
|
||||
"unknown"
|
||||
]
|
||||
},
|
||||
"recommended_surface": {
|
||||
"startup_log": true,
|
||||
"health_endpoint": "/api/runtime-identity",
|
||||
"admin_status_panel": true,
|
||||
"ci_snapshot": true
|
||||
},
|
||||
"claim_boundary": "startup_identity_gate_only_not_business_runtime"
|
||||
}
|
||||
@@ -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": 103,
|
||||
"packet_count": 115,
|
||||
"blocked_or_partial_count": 51,
|
||||
"human_review_required_count": 3
|
||||
},
|
||||
@@ -833,6 +833,102 @@
|
||||
"claim_status": "ready_contract",
|
||||
"consumer_policy": "research_local_ui_contract_only",
|
||||
"claim_boundary": "Ports commercial birth-time journey behavior contracts only; no Supabase, credits, auth, or commercial code imported."
|
||||
},
|
||||
{
|
||||
"packet_id": "truth_source_runtime_identity",
|
||||
"path": "references/oracle/truth_source_runtime_identity_2026_07_21.json",
|
||||
"domain": "truth_source_governance",
|
||||
"claim_status": "ready_contract",
|
||||
"consumer_policy": "research_to_commercial_startup_contract",
|
||||
"claim_boundary": "Pins the main research repo as the only truth source, exposes runtime identity, and quarantines old WorkBuddy fragments; no oracle truth upgrade."
|
||||
},
|
||||
{
|
||||
"packet_id": "commercial_startup_self_check_contract_2026_07_21",
|
||||
"path": "references/oracle/commercial_startup_self_check_contract_2026_07_21.json",
|
||||
"domain": "commercial_sync_governance",
|
||||
"claim_status": "ready_contract",
|
||||
"consumer_policy": "commercial_startup_gate_contract_only",
|
||||
"claim_boundary": "Requires commercial runtime to expose truth source identity, artifact gate and privacy status; no business runtime code imported into research."
|
||||
},
|
||||
{
|
||||
"packet_id": "commercial_golden_oss_case_ci_contract_2026_07_21",
|
||||
"path": "references/oracle/commercial_golden_oss_case_ci_contract_2026_07_21.json",
|
||||
"domain": "commercial_sync_governance",
|
||||
"claim_status": "ready_contract",
|
||||
"consumer_policy": "commercial_ci_gate_contract_only",
|
||||
"claim_boundary": "Requires commercial CI to replay the PyJHora/JHora Sphuta OSS observation and hash; observation-only, no truth upgrade."
|
||||
},
|
||||
{
|
||||
"packet_id": "whole_machine_jyotish_fragment_scan_2026_07_21",
|
||||
"path": "references/oracle/whole_machine_jyotish_fragment_scan_2026_07_21.json",
|
||||
"domain": "fragment_governance",
|
||||
"claim_status": "open_queue",
|
||||
"consumer_policy": "research_only_no_direct_fragment_copy",
|
||||
"claim_boundary": "Whole-machine Jyotish signal scan classifies main, WorkBuddy, temp and user-drop candidates; reviewable fragments are not truth source until privacy/license/invocation checks close."
|
||||
},
|
||||
{
|
||||
"packet_id": "source_runtime_closure_queue_2026_07_21",
|
||||
"path": "references/oracle/source_runtime_closure_queue_2026_07_21.json",
|
||||
"domain": "source_runtime_closure",
|
||||
"claim_status": "open_queue",
|
||||
"consumer_policy": "research_observation_only",
|
||||
"claim_boundary": "Prioritizes not-fully-invoked source assets such as jyotishganit and VedicAstro KP; queue only, no adapter or truth upgrade."
|
||||
},
|
||||
{
|
||||
"packet_id": "vedicastro_kp_tmp_env_identity_2026_07_21",
|
||||
"path": "references/oracle/vedicastro_kp_tmp_env_identity_2026_07_21.json",
|
||||
"domain": "kp_precision_timing",
|
||||
"claim_status": "observation_only",
|
||||
"consumer_policy": "research_observation_only",
|
||||
"claim_boundary": "Pins isolated /tmp VedicAstro KP dependency identity; dependency readiness only, no oracle truth."
|
||||
},
|
||||
{
|
||||
"packet_id": "vedicastro_kp_house_cusp_raw_2026_07_21",
|
||||
"path": "references/oracle/vedicastro_kp_house_cusp_raw_2026_07_21.json",
|
||||
"domain": "kp_precision_timing",
|
||||
"claim_status": "observation_only",
|
||||
"consumer_policy": "research_observation_only",
|
||||
"claim_boundary": "Archives VedicAstro KP house cusp star/sub/sub-sub raw for Steve Jobs public case; observation-only until public numeric worked-example replay."
|
||||
},
|
||||
{
|
||||
"packet_id": "jyotishganit_three_engine_closure_bridge_2026_07_21",
|
||||
"path": "references/oracle/jyotishganit_three_engine_closure_bridge_2026_07_21.json",
|
||||
"domain": "three_engine_parity",
|
||||
"claim_status": "observation_only",
|
||||
"consumer_policy": "research_observation_only",
|
||||
"claim_boundary": "Routes available jyotishganit D2/D4/D9/D10, Panchanga and BAV/SAV fields to closure queues; Shadbala remains explicit gap."
|
||||
},
|
||||
{
|
||||
"packet_id": "kp_public_worked_example_candidate_queue_2026_07_21",
|
||||
"path": "references/oracle/kp_public_worked_example_candidate_queue_2026_07_21.json",
|
||||
"domain": "kp_precision_timing",
|
||||
"claim_status": "open_queue",
|
||||
"consumer_policy": "research_observation_only",
|
||||
"claim_boundary": "Public KP sources were triaged as formula/runtime candidates; none yet provide stable full numeric cusp star/sub/sub-sub rows for oracle upgrade."
|
||||
},
|
||||
{
|
||||
"packet_id": "jyotishganit_field_closure_rows_2026_07_21",
|
||||
"path": "references/oracle/jyotishganit_field_closure_rows_2026_07_21.json",
|
||||
"domain": "three_engine_parity",
|
||||
"claim_status": "observation_only",
|
||||
"consumer_policy": "research_observation_only",
|
||||
"claim_boundary": "Routes jyotishganit D2/D4/D9/D10, Panchanga and BAV/SAV selected raw fields into closure rows; Shadbala remains explicit gap."
|
||||
},
|
||||
{
|
||||
"packet_id": "three_engine_jyotishganit_bridge_applied_2026_07_21",
|
||||
"path": "references/oracle/three_engine_jyotishganit_bridge_applied_2026_07_21.json",
|
||||
"domain": "three_engine_parity",
|
||||
"claim_status": "observation_only",
|
||||
"consumer_policy": "research_observation_only",
|
||||
"claim_boundary": "Applies jyotishganit field bridge to existing TEMCQ D2/D4/D9/D10/BAV/SAV tickets and marks Panchanga as new-ticket-needed; no truth upgrade."
|
||||
},
|
||||
{
|
||||
"packet_id": "three_engine_field_status_batch_2026_07_21",
|
||||
"path": "references/oracle/three_engine_field_status_batch_2026_07_21.json",
|
||||
"domain": "three_engine_parity",
|
||||
"claim_status": "observation_only",
|
||||
"consumer_policy": "research_observation_only",
|
||||
"claim_boundary": "Classifies 18 jyotishganit-applied TEMCQ rows and creates a Panchanga ticket placeholder; status only, no numeric truth upgrade."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"scope": "jyotishganit_field_closure_rows",
|
||||
"created_at": "2026-07-21",
|
||||
"claim_status": "observation_only",
|
||||
"production_tuning_allowed": false,
|
||||
"truth_matrix_allowed": false,
|
||||
"source_probe": "scripts/jyotishganit_field_probe.py",
|
||||
"source_raw_hash": "19fa9ea862b68c4cffb6756fa6cbf0466daf47a8b008b3fe8809e9fc6a1ed30c",
|
||||
"source_selected_hash": "4709b8ade84efdea4d0a67c15f3e32cea516a5aa2e8abe3885578feda20cb3f4",
|
||||
"rows": [
|
||||
{
|
||||
"field": "D2",
|
||||
"source_path": "selected_raw.varga_sign_table.D2",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"comparison_unit": "planet_sign_table"
|
||||
},
|
||||
{
|
||||
"field": "D4",
|
||||
"source_path": "selected_raw.varga_sign_table.D4",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"comparison_unit": "planet_sign_table"
|
||||
},
|
||||
{
|
||||
"field": "D9",
|
||||
"source_path": "selected_raw.varga_sign_table.D9",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"comparison_unit": "planet_sign_table"
|
||||
},
|
||||
{
|
||||
"field": "D10",
|
||||
"source_path": "selected_raw.varga_sign_table.D10",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"comparison_unit": "planet_sign_table"
|
||||
},
|
||||
{
|
||||
"field": "Panchanga",
|
||||
"source_path": "selected_raw.panchanga",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"comparison_unit": "schema_and_named_fields"
|
||||
},
|
||||
{
|
||||
"field": "BAV",
|
||||
"source_path": "selected_raw.ashtakavarga.bav",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"comparison_unit": "per_planet_bindus"
|
||||
},
|
||||
{
|
||||
"field": "SAV",
|
||||
"source_path": "selected_raw.ashtakavarga.sav",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"comparison_unit": "sarvashtakavarga_bindus"
|
||||
}
|
||||
],
|
||||
"explicit_gaps": [
|
||||
{
|
||||
"field": "Shadbala",
|
||||
"reason": "jyotishganit probe did not expose shadbala/strengths in selected raw"
|
||||
}
|
||||
],
|
||||
"boundary": "field_rows_only_no_formula_truth"
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"scope": "jyotishganit_three_engine_closure_bridge",
|
||||
"created_at": "2026-07-21",
|
||||
"claim_status": "observation_only",
|
||||
"production_tuning_allowed": false,
|
||||
"truth_matrix_allowed": false,
|
||||
"source_probe": "scripts/jyotishganit_field_probe.py",
|
||||
"source_raw_hash": "19fa9ea862b68c4cffb6756fa6cbf0466daf47a8b008b3fe8809e9fc6a1ed30c",
|
||||
"source_selected_hash": "4709b8ade84efdea4d0a67c15f3e32cea516a5aa2e8abe3885578feda20cb3f4",
|
||||
"field_routes": {
|
||||
"ready_for_field_comparison": [
|
||||
"D2",
|
||||
"D4",
|
||||
"D9",
|
||||
"D10",
|
||||
"Panchanga",
|
||||
"BAV_SAV"
|
||||
],
|
||||
"explicit_gaps": [
|
||||
"Shadbala"
|
||||
],
|
||||
"comparison_policy": "route sign/table/schema fields into closure queue only; do not infer formula truth from matching signs"
|
||||
},
|
||||
"next_packet_targets": [
|
||||
"three_engine_closure_rows_D2_D4_D9_D10",
|
||||
"three_engine_closure_rows_panchanga",
|
||||
"three_engine_closure_rows_bav_sav",
|
||||
"shadbala_missing_field_gap"
|
||||
],
|
||||
"boundary": "bridge_only_no_truth_upgrade"
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"scope": "kp_public_worked_example_candidate_queue",
|
||||
"created_at": "2026-07-21",
|
||||
"claim_status": "open_queue",
|
||||
"numeric_oracle_ready_count": 0,
|
||||
"production_tuning_allowed": false,
|
||||
"truth_matrix_allowed": false,
|
||||
"runtime_observation_packet": "references/oracle/vedicastro_kp_house_cusp_raw_2026_07_21.json",
|
||||
"candidates": [
|
||||
{
|
||||
"id": "astrosage_kp_chapter_2",
|
||||
"url": "https://kpastrology.astrosage.com/kp-learning-home/tutorial/chapter-2-fundamental-principles",
|
||||
"candidate_type": "formula_and_text_worked_example",
|
||||
"useful_fields": [
|
||||
"sign lord",
|
||||
"star lord",
|
||||
"sub lord",
|
||||
"significator logic",
|
||||
"ruling planets text examples"
|
||||
],
|
||||
"has_numeric_cusp_table": false,
|
||||
"upgrade_status": "reference_only_until_numeric_cusp_rows"
|
||||
},
|
||||
{
|
||||
"id": "astrosage_kp_sign_star_sub_table",
|
||||
"url": "https://kpastrology.astrosage.com/kp-learning-home/tutorial/chapter-2-fundamental-principles",
|
||||
"candidate_type": "reference_table",
|
||||
"useful_fields": [
|
||||
"sign-star-sub division rules",
|
||||
"KP star/sub conceptual table"
|
||||
],
|
||||
"has_numeric_cusp_table": false,
|
||||
"upgrade_status": "formula_reference_only"
|
||||
},
|
||||
{
|
||||
"id": "onlinejyotish_kp_horoscope",
|
||||
"url": "https://www.onlinejyotish.com/free-astrology/kp-horoscope.aspx",
|
||||
"candidate_type": "runtime_form_candidate",
|
||||
"useful_fields": [
|
||||
"possible KP horoscope table",
|
||||
"possible cusp/sub-lord output"
|
||||
],
|
||||
"has_numeric_cusp_table": false,
|
||||
"upgrade_status": "blocked_until_stable_public_input_output_packet"
|
||||
},
|
||||
{
|
||||
"id": "astrobix_kp_houses",
|
||||
"url": "https://astrobix.com/astrosight/1291-houses-in-kp-system.html",
|
||||
"candidate_type": "runtime_form_candidate",
|
||||
"useful_fields": [
|
||||
"KP house/cusp explanation",
|
||||
"possible public worked chart context"
|
||||
],
|
||||
"has_numeric_cusp_table": false,
|
||||
"upgrade_status": "reference_only_until_numeric_rows"
|
||||
}
|
||||
],
|
||||
"next_actions": [
|
||||
"Capture a stable public KP chart with full cusp degree, star lord, sub lord and sub-sub lord rows.",
|
||||
"Normalize VedicAstro KP raw to the same 12-row table.",
|
||||
"Only then create a numeric oracle packet; until then KP timing remains observation-only."
|
||||
],
|
||||
"boundary": "public_source_candidate_queue_only_no_kp_numeric_oracle"
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"scope": "source_runtime_closure_queue",
|
||||
"created_at": "2026-07-21",
|
||||
"claim_status": "open_queue",
|
||||
"production_tuning_allowed": false,
|
||||
"truth_matrix_allowed": false,
|
||||
"source_scan": "references/oracle/whole_machine_jyotish_fragment_scan_2026_07_21.json",
|
||||
"not_fully_closed_reference_layers": [
|
||||
"references/open_source_sources/jyotishganit",
|
||||
"references/open_source_sources/VedicAstro",
|
||||
"references/open_source_sources/jaimini-tropical",
|
||||
"references/open_source_sources/rishi-ai-mcp",
|
||||
"references/open_source_sources/vedic-astro-skills",
|
||||
"references/open_source_sources/dashaflow"
|
||||
],
|
||||
"rows": [
|
||||
{
|
||||
"id": "jyotishganit_field_closure",
|
||||
"source": "references/open_source_sources/jyotishganit",
|
||||
"existing_probe": "scripts/jyotishganit_field_probe.py",
|
||||
"existing_test": "tests/test_jyotishganit_and_vedicastro_probes.py",
|
||||
"current_status": "probe_runs_observation_only",
|
||||
"latest_observed_raw_hash": "19fa9ea862b68c4cffb6756fa6cbf0466daf47a8b008b3fe8809e9fc6a1ed30c",
|
||||
"latest_observed_selected_hash": "4709b8ade84efdea4d0a67c15f3e32cea516a5aa2e8abe3885578feda20cb3f4",
|
||||
"coverage": {
|
||||
"panchanga": true,
|
||||
"D2": true,
|
||||
"D4": true,
|
||||
"D9": true,
|
||||
"D10": true,
|
||||
"BAV_SAV": true,
|
||||
"Shadbala": false
|
||||
},
|
||||
"next_closure_step": "attach field-level comparison rows to the three-engine closure queue; keep Shadbala missing as explicit gap"
|
||||
},
|
||||
{
|
||||
"id": "vedicastro_kp_house_cusp_closure",
|
||||
"source": "references/open_source_sources/VedicAstro",
|
||||
"existing_probe": "scripts/vedicastro_kp_house_cusp_probe.py",
|
||||
"existing_test": "tests/test_vedicastro_kp_runtime_tmp_probe.py",
|
||||
"current_status": "raw_ready_observation_only",
|
||||
"next_closure_step": "compare these 12 cusp star/sub/sub-sub rows against public numeric KP worked examples before any event timing use",
|
||||
"latest_raw_packet": "references/oracle/vedicastro_kp_house_cusp_raw_2026_07_21.json",
|
||||
"latest_env_identity": "references/oracle/vedicastro_kp_tmp_env_identity_2026_07_21.json",
|
||||
"latest_observed_raw_hash": "2e7a6b17eb2965a60846f625f6bd8bc03555216d6225983647bcbfa23d0e345b",
|
||||
"coverage": {
|
||||
"house_cusps": 12,
|
||||
"rasi": true,
|
||||
"nakshatra": true,
|
||||
"rasi_lord": true,
|
||||
"nakshatra_lord": true,
|
||||
"sub_lord": true,
|
||||
"sub_sub_lord": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "rishi_ai_mcp_vedic_astro_skills_reference",
|
||||
"source": "references/open_source_sources/rishi-ai-mcp + references/open_source_sources/vedic-astro-skills",
|
||||
"current_status": "reference_only_prompt_or_product_flow",
|
||||
"next_closure_step": "extract skill/process wording only after license/source review; never numeric oracle or formula truth"
|
||||
},
|
||||
{
|
||||
"id": "jaimini_tropical_dashaflow_reference",
|
||||
"source": "references/open_source_sources/jaimini-tropical + references/open_source_sources/dashaflow",
|
||||
"current_status": "reference_only_until_contract",
|
||||
"next_closure_step": "pin license, version, input contract, raw hash and replay tests before any adapter or truth matrix use"
|
||||
}
|
||||
],
|
||||
"boundary": "queue_only_no_adapter_or_truth_upgrade"
|
||||
}
|
||||
@@ -3,14 +3,14 @@
|
||||
"items": [
|
||||
{
|
||||
"claim_boundary": "Panchanga is runtime-visible but still needs field-level external oracle examples for high-rigor claims.",
|
||||
"current_call_status": "formally_called_in_api_and_web",
|
||||
"current_call_status": "partial",
|
||||
"external_or_reference_artifacts": [
|
||||
"references/open_source_sources/panchanga_api"
|
||||
],
|
||||
"main_artifacts": [
|
||||
"scripts/jyotish_api_server.py",
|
||||
"jyotish-app/main.js",
|
||||
"jyotish-app/index.html"
|
||||
"frontend/src/app/page.tsx",
|
||||
"jyotish-app/main.js (research static UI only, absent in commercial repo)"
|
||||
],
|
||||
"next_action": "add panchanga claim/display contract and source/oracle packet for tithi/nakshatra/yoga/karana/rahu-kalam outputs",
|
||||
"reuse_decision": "do_not_duplicate_runtime",
|
||||
@@ -57,7 +57,7 @@
|
||||
"production_tuning_allowed": false,
|
||||
"scope": "technique_promotion_audit_kp_gochara_muhurta",
|
||||
"summary": {
|
||||
"formally_called_count": 1,
|
||||
"formally_called_count": 0,
|
||||
"items_checked": 4,
|
||||
"reference_only_count": 3
|
||||
},
|
||||
|
||||
@@ -0,0 +1,190 @@
|
||||
{
|
||||
"scope": "three_engine_jyotishganit_bridge_applied",
|
||||
"created_at": "2026-07-21",
|
||||
"claim_status": "observation_only",
|
||||
"production_tuning_allowed": false,
|
||||
"truth_matrix_allowed": false,
|
||||
"source_bridge": "references/oracle/jyotishganit_three_engine_closure_bridge_2026_07_21.json",
|
||||
"source_queue": "references/oracle/three_engine_mismatch_closure_queue_2026_07_19.json",
|
||||
"source_selected_hash": "4709b8ade84efdea4d0a67c15f3e32cea516a5aa2e8abe3885578feda20cb3f4",
|
||||
"summary": {
|
||||
"existing_ticket_rows": 18,
|
||||
"no_existing_ticket_rows": 1,
|
||||
"truth_upgrades": 0
|
||||
},
|
||||
"rows": [
|
||||
{
|
||||
"source_field": "D2",
|
||||
"field": "Sun.sign",
|
||||
"existing_ticket_id": "TEMCQ-001",
|
||||
"existing_ticket_section": "D2",
|
||||
"owner_track": "endpoint_contract",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "D2",
|
||||
"field": "Moon.sign",
|
||||
"existing_ticket_id": "TEMCQ-002",
|
||||
"existing_ticket_section": "D2",
|
||||
"owner_track": "endpoint_contract",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "D2",
|
||||
"field": "Mars.sign",
|
||||
"existing_ticket_id": "TEMCQ-003",
|
||||
"existing_ticket_section": "D2",
|
||||
"owner_track": "endpoint_contract",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "D2",
|
||||
"field": "Mercury.sign",
|
||||
"existing_ticket_id": "TEMCQ-004",
|
||||
"existing_ticket_section": "D2",
|
||||
"owner_track": "endpoint_contract",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "D2",
|
||||
"field": "Jupiter.sign",
|
||||
"existing_ticket_id": "TEMCQ-005",
|
||||
"existing_ticket_section": "D2",
|
||||
"owner_track": "endpoint_contract",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "D2",
|
||||
"field": "Venus.sign",
|
||||
"existing_ticket_id": "TEMCQ-006",
|
||||
"existing_ticket_section": "D2",
|
||||
"owner_track": "endpoint_contract",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "D2",
|
||||
"field": "Saturn.sign",
|
||||
"existing_ticket_id": "TEMCQ-007",
|
||||
"existing_ticket_section": "D2",
|
||||
"owner_track": "endpoint_contract",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "D4",
|
||||
"field": "Moon.sign",
|
||||
"existing_ticket_id": "TEMCQ-008",
|
||||
"existing_ticket_section": "D4",
|
||||
"owner_track": "endpoint_contract",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "D9",
|
||||
"field": "Moon.sign",
|
||||
"existing_ticket_id": "TEMCQ-009",
|
||||
"existing_ticket_section": "D9",
|
||||
"owner_track": "endpoint_contract",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "D10",
|
||||
"field": "Moon.sign",
|
||||
"existing_ticket_id": "TEMCQ-010",
|
||||
"existing_ticket_section": "D10",
|
||||
"owner_track": "endpoint_contract",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "BAV",
|
||||
"field": "Sun",
|
||||
"existing_ticket_id": "TEMCQ-011",
|
||||
"existing_ticket_section": "ashtakavarga_bav",
|
||||
"owner_track": "worked_example",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "BAV",
|
||||
"field": "Moon",
|
||||
"existing_ticket_id": "TEMCQ-012",
|
||||
"existing_ticket_section": "ashtakavarga_bav",
|
||||
"owner_track": "worked_example",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "BAV",
|
||||
"field": "Mars",
|
||||
"existing_ticket_id": "TEMCQ-013",
|
||||
"existing_ticket_section": "ashtakavarga_bav",
|
||||
"owner_track": "worked_example",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "BAV",
|
||||
"field": "Mercury",
|
||||
"existing_ticket_id": "TEMCQ-014",
|
||||
"existing_ticket_section": "ashtakavarga_bav",
|
||||
"owner_track": "worked_example",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "BAV",
|
||||
"field": "Jupiter",
|
||||
"existing_ticket_id": "TEMCQ-015",
|
||||
"existing_ticket_section": "ashtakavarga_bav",
|
||||
"owner_track": "worked_example",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "BAV",
|
||||
"field": "Venus",
|
||||
"existing_ticket_id": "TEMCQ-016",
|
||||
"existing_ticket_section": "ashtakavarga_bav",
|
||||
"owner_track": "worked_example",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "BAV",
|
||||
"field": "Saturn",
|
||||
"existing_ticket_id": "TEMCQ-017",
|
||||
"existing_ticket_section": "ashtakavarga_bav",
|
||||
"owner_track": "worked_example",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "SAV",
|
||||
"field": "12_sign_scores",
|
||||
"existing_ticket_id": "TEMCQ-018",
|
||||
"existing_ticket_section": "ashtakavarga_sav",
|
||||
"owner_track": "worked_example",
|
||||
"closure_status": "ready_for_field_comparison",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
},
|
||||
{
|
||||
"source_field": "Panchanga",
|
||||
"field": "Panchanga",
|
||||
"existing_ticket_id": null,
|
||||
"existing_ticket_section": null,
|
||||
"owner_track": "new_ticket_required",
|
||||
"closure_status": "no_existing_ticket_create_next",
|
||||
"claim_boundary": "field_comparison_only_no_formula_truth"
|
||||
}
|
||||
],
|
||||
"boundary": "applied_bridge_only_no_truth_upgrade",
|
||||
"human_report": "docs/research/three_engine_jyotishganit_bridge_applied_2026_07_21.md"
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"scope": "truth_source_runtime_identity",
|
||||
"created_at": "2026-07-21",
|
||||
"status": "active_contract_v1",
|
||||
"truth_source": {
|
||||
"path": "/Users/wuyongnaren/Documents/印度占星",
|
||||
"role": "sole_main_research_truth_source",
|
||||
"branch_at_capture": "main",
|
||||
"git_commit": "737683edc976d28558d81737501943790da07b34",
|
||||
"git_commit_semantics": "commit at packet capture time; later packet commits supersede this value through git history"
|
||||
},
|
||||
"skill": {
|
||||
"path": "SKILL.md",
|
||||
"version": "6.9.14"
|
||||
},
|
||||
"evidence_packets": {
|
||||
"index_path": "references/oracle/evidence_packet_index_2026_07_19.json",
|
||||
"packet_count": 106,
|
||||
"blocked_or_partial_count": 51,
|
||||
"human_review_required_count": 3
|
||||
},
|
||||
"oracle_summary": {
|
||||
"production_tuning_allowed": false,
|
||||
"truth_matrix_allowed": false,
|
||||
"vedastro_hosted_identity": "blocked",
|
||||
"timing_holdout": "blocked_until_independent_human_labels",
|
||||
"sphuta_oss_probe": "tooling_observation_only",
|
||||
"three_engine_parity": "open_queue"
|
||||
},
|
||||
"runtime_contract": {
|
||||
"research_web_panel_required": true,
|
||||
"commercial_startup_self_check_required": true,
|
||||
"commercial_ci_golden_case_required": "pyjhora_jhora_sphuta_probe",
|
||||
"must_not_accept_legacy_workbuddy_as_truth_source": true
|
||||
},
|
||||
"fragment_quarantine": {
|
||||
"workbuddy_old_copies": {
|
||||
"status": "quarantined",
|
||||
"labels": [
|
||||
"not_for_truth_source",
|
||||
"privacy_review_required",
|
||||
"artifact_incomplete",
|
||||
"historical_fragment_only"
|
||||
],
|
||||
"paths": [
|
||||
"/Users/wuyongnaren/WorkBuddy/2026-07-05-19-03-49/yinduzhanxing",
|
||||
"/Users/wuyongnaren/.workbuddy/backups/jyotish-vedic-astrology-20260711-154109",
|
||||
"/Users/wuyongnaren/.workbuddy/backups/jyotish-vedic-astrology-retired-20260711-154109"
|
||||
],
|
||||
"boundary": "May be read as fragment candidates only after ledger review; never a runtime, oracle, commercial, or truth source."
|
||||
}
|
||||
},
|
||||
"claim_boundary": "identity_ready_governance_only_not_oracle_truth"
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"boundary": "dependency_preparation_only_no_kp_oracle_truth",
|
||||
"claim_status": "runtime_dependency_ready",
|
||||
"created_at": "2026-07-21",
|
||||
"package_versions": {
|
||||
"flatlib": "0.3.1.dev0",
|
||||
"polars": "1.42.1",
|
||||
"pyswisseph": "2.10.3.2",
|
||||
"timezonefinder": "8.2.5"
|
||||
},
|
||||
"production_tuning_allowed": false,
|
||||
"project_dependency_mutation_allowed": false,
|
||||
"required_packages": {
|
||||
"flatlib": "git+https://github.com/diliprk/flatlib.git@sidereal#egg=flatlib",
|
||||
"polars": "polars",
|
||||
"pyswisseph": "pyswisseph",
|
||||
"timezonefinder": "timezonefinder"
|
||||
},
|
||||
"scope": "vedicastro_kp_tmp_env_preparer",
|
||||
"target": "/tmp/vedicastro_flatlib_probe",
|
||||
"target_tree_hash": "7a75855cd9f641a30a4d466d44a282571e3d797c39de0d975f5f6647a3e1bf74",
|
||||
"truth_matrix_allowed": false
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Run a local jyotishganit same-case raw field probe.
|
||||
|
||||
Observation-only: records raw/hash/schema for D2/D4/D9/D10, Panchanga,
|
||||
BAV/SAV and Shadbala availability without promoting truth.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
import sys
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
JYOTISHGANIT_ROOT = ROOT / "references/open_source_sources/jyotishganit"
|
||||
TARGET_VARGAS = ["d2", "d4", "d9", "d10"]
|
||||
|
||||
|
||||
def stable_json(data: Any) -> str:
|
||||
return json.dumps(data, ensure_ascii=False, sort_keys=True, separators=(",", ":"), default=str)
|
||||
|
||||
|
||||
def schema_fingerprint(data: Any) -> Any:
|
||||
if isinstance(data, dict):
|
||||
return {k: schema_fingerprint(v) for k, v in sorted(data.items())}
|
||||
if isinstance(data, list):
|
||||
if not data:
|
||||
return []
|
||||
return [schema_fingerprint(data[0])]
|
||||
return type(data).__name__
|
||||
|
||||
|
||||
def sign_table(chart: dict[str, Any]) -> dict[str, Any]:
|
||||
out: dict[str, Any] = {}
|
||||
for code in TARGET_VARGAS:
|
||||
section = chart.get("divisionalCharts", {}).get(code)
|
||||
if not isinstance(section, dict):
|
||||
out[code.upper()] = {"status": "missing"}
|
||||
continue
|
||||
rows = []
|
||||
for house in section.get("houses", []):
|
||||
for occ in house.get("occupants", []):
|
||||
rows.append(
|
||||
{
|
||||
"planet": occ.get("celestialBody"),
|
||||
"sign": occ.get("sign"),
|
||||
"d1HousePlacement": occ.get("d1HousePlacement"),
|
||||
}
|
||||
)
|
||||
out[code.upper()] = {
|
||||
"status": "present",
|
||||
"ascendant_sign": section.get("ascendant", {}).get("sign"),
|
||||
"planet_signs": sorted(rows, key=lambda r: str(r.get("planet"))),
|
||||
}
|
||||
return out
|
||||
|
||||
|
||||
def build_probe(args: argparse.Namespace) -> dict[str, Any]:
|
||||
sys.path.insert(0, str(JYOTISHGANIT_ROOT))
|
||||
from jyotishganit.main import calculate_birth_chart # type: ignore
|
||||
|
||||
dt = datetime.fromisoformat(args.datetime)
|
||||
chart = calculate_birth_chart(dt, args.latitude, args.longitude, args.timezone, args.location, args.name)
|
||||
raw = chart.to_dict()
|
||||
selected = {
|
||||
"panchanga": raw.get("panchanga"),
|
||||
"varga_sign_table": sign_table(raw),
|
||||
"ashtakavarga": raw.get("ashtakavarga"),
|
||||
"shadbala": raw.get("shadbala"),
|
||||
"strengths": raw.get("strengths"),
|
||||
}
|
||||
payload = {
|
||||
"scope": "jyotishganit_field_probe",
|
||||
"created_at": "2026-07-19",
|
||||
"status": "complete",
|
||||
"claim_status": "observation_only",
|
||||
"production_tuning_allowed": False,
|
||||
"truth_matrix_allowed": False,
|
||||
"engine": {
|
||||
"name": "jyotishganit",
|
||||
"local_path": str(JYOTISHGANIT_ROOT.relative_to(ROOT)),
|
||||
},
|
||||
"request": {
|
||||
"name": args.name,
|
||||
"datetime": args.datetime,
|
||||
"latitude": args.latitude,
|
||||
"longitude": args.longitude,
|
||||
"timezone": args.timezone,
|
||||
"location": args.location,
|
||||
},
|
||||
"coverage": {
|
||||
"panchanga": raw.get("panchanga") is not None,
|
||||
"D2": selected["varga_sign_table"]["D2"]["status"] == "present",
|
||||
"D4": selected["varga_sign_table"]["D4"]["status"] == "present",
|
||||
"D9": selected["varga_sign_table"]["D9"]["status"] == "present",
|
||||
"D10": selected["varga_sign_table"]["D10"]["status"] == "present",
|
||||
"BAV_SAV": isinstance(raw.get("ashtakavarga"), dict)
|
||||
and "sav" in raw.get("ashtakavarga", {}),
|
||||
"Shadbala": raw.get("shadbala") is not None or raw.get("strengths") is not None,
|
||||
},
|
||||
"raw_hash": hashlib.sha256(stable_json(raw).encode("utf-8")).hexdigest(),
|
||||
"selected_hash": hashlib.sha256(stable_json(selected).encode("utf-8")).hexdigest(),
|
||||
"schema_fingerprint": schema_fingerprint(selected),
|
||||
"selected_raw": selected,
|
||||
"boundary": "Raw/hash observation only. Missing Shadbala field or matching signs do not prove formula truth or production timing readiness.",
|
||||
}
|
||||
return payload
|
||||
|
||||
|
||||
def main() -> int:
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument("--datetime", default="1955-02-24T19:15:00")
|
||||
ap.add_argument("--latitude", type=float, default=37.3382)
|
||||
ap.add_argument("--longitude", type=float, default=-122.0383)
|
||||
ap.add_argument("--timezone", type=float, default=-8.0)
|
||||
ap.add_argument("--location", default="San Francisco, CA")
|
||||
ap.add_argument("--name", default="Steve Jobs public")
|
||||
ap.add_argument("--output")
|
||||
args = ap.parse_args()
|
||||
payload = build_probe(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())
|
||||
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Classify local vs jyotishganit comparison mismatches without resolving truth."""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
DEFAULT = ROOT / "references/oracle/jyotishganit_vs_local_field_comparison_steve_jobs_2026_07_19.json"
|
||||
|
||||
|
||||
def classify(row: dict) -> dict:
|
||||
section = row["section"]
|
||||
body = row["body"]
|
||||
reason = "needs_formula_variant_review"
|
||||
owner = "varga_formula_attribution"
|
||||
if section == "D4":
|
||||
reason = "schema_alias_or_formula_variant"
|
||||
owner = "D4_Turyamsa_Chaturthamsa_alias_and_formula"
|
||||
if section == "D10" and body in {"Rahu", "Ketu"}:
|
||||
reason = "node_mode_or_shadow_planet_handling"
|
||||
owner = "node_mode_mapping"
|
||||
return {
|
||||
**row,
|
||||
"attribution_status": "queued",
|
||||
"probable_reason": reason,
|
||||
"next_evidence_owner": owner,
|
||||
"claim_boundary": "Do not tune local formula to jyotishganit until source formula, ayanamsa, node mode, and schema aliases are pinned.",
|
||||
}
|
||||
|
||||
|
||||
def build(path: Path = DEFAULT) -> dict:
|
||||
data = json.loads(path.read_text(encoding="utf-8"))
|
||||
mismatches = [classify(r) for r in data["rows"] if r["status"] == "mismatch"]
|
||||
return {
|
||||
"scope": "jyotishganit_mismatch_attribution_queue",
|
||||
"created_at": "2026-07-19",
|
||||
"status": "queue_ready",
|
||||
"claim_status": "partial",
|
||||
"production_tuning_allowed": False,
|
||||
"truth_matrix_allowed": False,
|
||||
"source_comparison": str(path.relative_to(ROOT)),
|
||||
"summary": {
|
||||
"mismatch_count": len(mismatches),
|
||||
"by_reason": {
|
||||
reason: sum(1 for r in mismatches if r["probable_reason"] == reason)
|
||||
for reason in sorted({r["probable_reason"] for r in mismatches})
|
||||
},
|
||||
},
|
||||
"rows": mismatches,
|
||||
"boundary": "This queue classifies mismatch work; it does not settle formula truth.",
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
print(json.dumps(build(), ensure_ascii=False, indent=2, sort_keys=True))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,116 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Prepare an isolated temporary dependency path for VedicAstro KP probes.
|
||||
|
||||
Installs only under /tmp/vedicastro_flatlib_probe. Never mutates project
|
||||
requirements, venvs, package-locks, or runtime dependencies.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import hashlib
|
||||
import importlib.metadata
|
||||
import json
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
|
||||
TARGET = Path("/tmp/vedicastro_flatlib_probe")
|
||||
REQUIRED_PACKAGES = {
|
||||
"flatlib": "git+https://github.com/diliprk/flatlib.git@sidereal#egg=flatlib",
|
||||
"polars": "polars",
|
||||
"timezonefinder": "timezonefinder",
|
||||
"pyswisseph": "pyswisseph",
|
||||
}
|
||||
|
||||
|
||||
def stable(data: Any) -> str:
|
||||
return json.dumps(data, ensure_ascii=False, sort_keys=True, separators=(",", ":"), default=str)
|
||||
|
||||
|
||||
def digest_tree(path: Path) -> str | None:
|
||||
if not path.exists():
|
||||
return None
|
||||
h = hashlib.sha256()
|
||||
for file in sorted(p for p in path.rglob("*") if p.is_file()):
|
||||
rel = file.relative_to(path).as_posix()
|
||||
h.update(rel.encode("utf-8"))
|
||||
try:
|
||||
h.update(file.read_bytes())
|
||||
except OSError:
|
||||
continue
|
||||
return h.hexdigest()
|
||||
|
||||
|
||||
def package_versions(target: Path) -> dict[str, str | None]:
|
||||
sys.path.insert(0, str(target))
|
||||
versions: dict[str, str | None] = {}
|
||||
for name in REQUIRED_PACKAGES:
|
||||
try:
|
||||
versions[name] = importlib.metadata.version(name)
|
||||
except importlib.metadata.PackageNotFoundError:
|
||||
versions[name] = None
|
||||
return versions
|
||||
|
||||
|
||||
def install(target: Path) -> dict[str, Any]:
|
||||
target.mkdir(parents=True, exist_ok=True)
|
||||
cmd = [
|
||||
sys.executable,
|
||||
"-m",
|
||||
"pip",
|
||||
"install",
|
||||
"--upgrade",
|
||||
"--target",
|
||||
str(target),
|
||||
*REQUIRED_PACKAGES.values(),
|
||||
]
|
||||
proc = subprocess.run(cmd, text=True, capture_output=True, timeout=180)
|
||||
return {
|
||||
"command": cmd,
|
||||
"returncode": proc.returncode,
|
||||
"stdout_tail": proc.stdout[-4000:],
|
||||
"stderr_tail": proc.stderr[-4000:],
|
||||
}
|
||||
|
||||
|
||||
def build_payload(target: Path, install_result: dict[str, Any] | None = None) -> dict[str, Any]:
|
||||
versions = package_versions(target) if target.exists() else {name: None for name in REQUIRED_PACKAGES}
|
||||
ready = all(versions.values())
|
||||
payload: dict[str, Any] = {
|
||||
"scope": "vedicastro_kp_tmp_env_preparer",
|
||||
"created_at": "2026-07-21",
|
||||
"target": str(target),
|
||||
"project_dependency_mutation_allowed": False,
|
||||
"required_packages": REQUIRED_PACKAGES,
|
||||
"package_versions": versions,
|
||||
"target_tree_hash": digest_tree(target),
|
||||
"claim_status": "runtime_dependency_ready" if ready else "blocked_runtime_dependency",
|
||||
"production_tuning_allowed": False,
|
||||
"truth_matrix_allowed": False,
|
||||
"boundary": "dependency_preparation_only_no_kp_oracle_truth",
|
||||
}
|
||||
if install_result is not None:
|
||||
payload["install_result"] = install_result
|
||||
return payload
|
||||
|
||||
|
||||
def main() -> int:
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument("--target", default=str(TARGET))
|
||||
ap.add_argument("--report-only", action="store_true")
|
||||
ap.add_argument("--clean", action="store_true")
|
||||
args = ap.parse_args()
|
||||
target = Path(args.target)
|
||||
if args.clean and target.exists() and str(target).startswith("/tmp/"):
|
||||
shutil.rmtree(target)
|
||||
install_result = None if args.report_only else install(target)
|
||||
payload = build_payload(target, install_result)
|
||||
print(json.dumps(payload, ensure_ascii=False, indent=2, sort_keys=True))
|
||||
return 0 if args.report_only or payload["claim_status"] == "runtime_dependency_ready" else 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,108 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Audit KP/Gochara/Muhurta/Panchanga fragments and runtime entrypoints."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def _text(path: Path) -> str:
|
||||
return path.read_text(encoding="utf-8", errors="ignore") if path.exists() else ""
|
||||
|
||||
|
||||
def build_audit(root: Path) -> dict:
|
||||
api = _text(root / "scripts/jyotish_api_server.py")
|
||||
research_main_js = _text(root / "jyotish-app/main.js")
|
||||
commercial_page = _text(root / "frontend/src/app/page.tsx")
|
||||
dashaflow_muhurtha = root / "references/open_source_sources/dashaflow/muhurtha.py"
|
||||
panchanga_license = _text(root / "references/open_source_sources/panchanga_api/LICENSE").splitlines()
|
||||
kp_reference = root / "/Users/wuyongnaren/.workbuddy/backups/jyotish-vedic-astrology-20260711-154109/references/kp-astrology-complete-system.md"
|
||||
gochara_template = Path("/tmp/jyotisha-optimize/assets/event_timing_template.md")
|
||||
panchanga_called = (
|
||||
"/api/panchanga_range" in api
|
||||
and (
|
||||
("panchanga-range" in research_main_js and "panchanga-csv" in research_main_js)
|
||||
or ("panchanga-range" in commercial_page and "panchanga-csv" in commercial_page)
|
||||
)
|
||||
)
|
||||
|
||||
items = [
|
||||
{
|
||||
"technique_id": "panchanga_calendar",
|
||||
"current_call_status": "formally_called_in_api_and_web" if panchanga_called else "partial",
|
||||
"main_artifacts": [
|
||||
"scripts/jyotish_api_server.py",
|
||||
"frontend/src/app/page.tsx",
|
||||
"jyotish-app/main.js (research static UI only, absent in commercial repo)",
|
||||
],
|
||||
"external_or_reference_artifacts": ["references/open_source_sources/panchanga_api"],
|
||||
"reuse_decision": "do_not_duplicate_runtime",
|
||||
"source_or_license_boundary": "Existing runtime/UI present; panchanga_api license observed as "
|
||||
+ (panchanga_license[0] if panchanga_license else "unknown")
|
||||
+ ". Treat external panchanga_api as reference unless license/API contract is separately audited.",
|
||||
"next_action": "add panchanga claim/display contract and source/oracle packet for tithi/nakshatra/yoga/karana/rahu-kalam outputs",
|
||||
"claim_boundary": "Panchanga is runtime-visible but still needs field-level external oracle examples for high-rigor claims.",
|
||||
},
|
||||
{
|
||||
"technique_id": "muhurta_dashaflow_candidate",
|
||||
"current_call_status": "oss_reference_not_main_runtime",
|
||||
"main_artifacts": [],
|
||||
"external_or_reference_artifacts": [str(dashaflow_muhurtha)],
|
||||
"reuse_decision": "license_audit_before_reuse",
|
||||
"source_or_license_boundary": "dashaflow/muhurtha.py exists under references/open_source_sources; verify license and formula sources before adapting.",
|
||||
"next_action": "audit dashaflow license, extract formula surface, then compare Tarabala/Chandrabala/Rahu Kalam against local Panchanga.",
|
||||
"claim_boundary": "Muhurta remains reference-only until license, formula, and worked examples close.",
|
||||
},
|
||||
{
|
||||
"technique_id": "kp_astrology",
|
||||
"current_call_status": "reference_only_not_main_runtime",
|
||||
"main_artifacts": [],
|
||||
"external_or_reference_artifacts": [str(kp_reference)],
|
||||
"reuse_decision": "reference_only",
|
||||
"source_or_license_boundary": "KP backup/reference may contain useful notes but must pass privacy/license/source audit; do not copy blindly.",
|
||||
"next_action": "create KP separate track: cusp system, ayanamsa, star lord/sub lord, ruling planets, public oracle examples.",
|
||||
"claim_boundary": "KP is not part of current main Jyotish runtime truth.",
|
||||
},
|
||||
{
|
||||
"technique_id": "gochara_event_timing_template",
|
||||
"current_call_status": "template_reference_not_main_runtime",
|
||||
"main_artifacts": [],
|
||||
"external_or_reference_artifacts": [str(gochara_template)],
|
||||
"reuse_decision": "reference_only",
|
||||
"source_or_license_boundary": "Template in /tmp must be privacy/source reviewed before promotion.",
|
||||
"next_action": "turn Gochara template into scoring contract only after Dasha+Varga+Transit features and negative holdout are ready.",
|
||||
"claim_boundary": "Transit template is not a calibrated timing engine.",
|
||||
},
|
||||
]
|
||||
return {
|
||||
"scope": "technique_promotion_audit_kp_gochara_muhurta",
|
||||
"created_at": "2026-07-19",
|
||||
"truth_policy": "runtime_presence_not_oracle_closure",
|
||||
"production_tuning_allowed": False,
|
||||
"summary": {
|
||||
"items_checked": len(items),
|
||||
"formally_called_count": sum("formally_called" in item["current_call_status"] for item in items),
|
||||
"reference_only_count": sum("not_main_runtime" in item["current_call_status"] or "template_reference" in item["current_call_status"] for item in items),
|
||||
},
|
||||
"items": items,
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--root", type=Path, default=Path("."))
|
||||
parser.add_argument("--output", type=Path)
|
||||
args = parser.parse_args()
|
||||
audit = build_audit(args.root)
|
||||
text = json.dumps(audit, ensure_ascii=False, indent=2, sort_keys=True) + "\n"
|
||||
if args.output:
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.output.write_text(text, encoding="utf-8")
|
||||
print(text, end="")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -13,9 +13,6 @@ from typing import Any
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
if str(ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(ROOT))
|
||||
SCRIPTS = ROOT / "scripts"
|
||||
if str(SCRIPTS) not in sys.path:
|
||||
sys.path.insert(0, str(SCRIPTS))
|
||||
|
||||
from benchmarks.jyotish.scripts.run_pyjhora_compare import build_pyjhora_sample
|
||||
from benchmarks.jyotish.scripts.run_skill_baseline import run_sample
|
||||
|
||||
@@ -82,16 +82,52 @@ def arbitrate_manifest(path: str | Path) -> dict[str, Any]:
|
||||
}
|
||||
|
||||
|
||||
def render_markdown_report(report: dict[str, Any]) -> str:
|
||||
lines = [
|
||||
"# Three-engine mismatch arbitration",
|
||||
"",
|
||||
f"manifest: `{report['manifest_path']}`",
|
||||
f"status: `{report['status']}`",
|
||||
f"truth_policy: `{report['truth_policy']}`",
|
||||
"commercial_sync: `status_and_claim_boundary_only`",
|
||||
f"mismatch_count: `{report['mismatch_count']}`",
|
||||
f"classified_count: `{report['classified_count']}`",
|
||||
f"unclassified_count: `{report['unclassified_count']}`",
|
||||
"",
|
||||
"Do not copy raw research debt into commercial runtime. Commercial receives readiness, claim boundary, and user-safe status only.",
|
||||
"",
|
||||
"## Category counts",
|
||||
"",
|
||||
"| category | count |",
|
||||
"|---|---:|",
|
||||
]
|
||||
for category, count in report["category_counts"].items():
|
||||
lines.append(f"| `{category}` | {count} |")
|
||||
lines.extend(["", "## Closure requirements", ""])
|
||||
seen: set[str] = set()
|
||||
for row in report["rows"]:
|
||||
category = row["category"]
|
||||
if category in seen:
|
||||
continue
|
||||
seen.add(category)
|
||||
lines.append(f"- `{category}`: {row['closure_requirement']}")
|
||||
return "\n".join(lines) + "\n"
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("manifest", nargs="?", default="references/oracle/three_engine_parity_replay_manifest.json")
|
||||
parser.add_argument("--output", type=Path)
|
||||
parser.add_argument("--markdown-output", type=Path)
|
||||
args = parser.parse_args()
|
||||
report = arbitrate_manifest(args.manifest)
|
||||
text = json.dumps(report, ensure_ascii=False, indent=2, sort_keys=True) + "\n"
|
||||
if args.output:
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.output.write_text(text, encoding="utf-8")
|
||||
if args.markdown_output:
|
||||
args.markdown_output.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.markdown_output.write_text(render_markdown_report(report), encoding="utf-8")
|
||||
print(text, end="")
|
||||
return 0
|
||||
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Create actionable closure tickets for three-engine mismatch rows."""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from collections import Counter
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
|
||||
POLICY = {
|
||||
"endpoint_or_varga_semantics": ("P0", "endpoint_contract", "identified endpoint/method contract with ayanamsa, node mode, varga, timezone semantics"),
|
||||
"shadbala_formula_variant": ("P0", "formula_source", "public formula source + unit/cap/floor evidence for the component"),
|
||||
"derived_total_from_component_variants": ("P1", "unit_schema", "component closure before total recomputation; explicit Rupa/Virupa total rule"),
|
||||
"ashtakavarga_table_or_contributor_variant": ("P1", "worked_example", "public worked BAV/SAV table with contributor set, shodhana state, and Lagna inclusion"),
|
||||
}
|
||||
|
||||
|
||||
def build_queue(arbitration_path: str | Path) -> dict[str, Any]:
|
||||
path = Path(arbitration_path)
|
||||
report = json.loads(path.read_text(encoding="utf-8"))
|
||||
tickets = []
|
||||
for index, row in enumerate(report.get("rows") or [], start=1):
|
||||
priority, owner_track, required = POLICY.get(
|
||||
row["category"],
|
||||
("P2", "worked_example", "manual source review and worked example required"),
|
||||
)
|
||||
tickets.append({
|
||||
"ticket_id": f"TEMCQ-{index:03d}",
|
||||
"priority": priority,
|
||||
"owner_track": owner_track,
|
||||
"section": row.get("section"),
|
||||
"field": row.get("field"),
|
||||
"category": row.get("category"),
|
||||
"differing_engines": row.get("differing_engines") or [],
|
||||
"required_evidence": required,
|
||||
"closure_status": "open",
|
||||
"commercial_visibility": "do_not_expose_raw",
|
||||
})
|
||||
return {
|
||||
"scope": "three_engine_mismatch_closure_queue",
|
||||
"source_arbitration": str(path),
|
||||
"status": "open" if tickets else "empty",
|
||||
"truth_policy": "no_majority_vote",
|
||||
"production_tuning_allowed": False,
|
||||
"summary": {
|
||||
"source_mismatch_count": report.get("mismatch_count", 0),
|
||||
"queue_count": len(tickets),
|
||||
"priority_counts": dict(Counter(ticket["priority"] for ticket in tickets)),
|
||||
"owner_track_counts": dict(Counter(ticket["owner_track"] for ticket in tickets)),
|
||||
},
|
||||
"queue": tickets,
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("arbitration", nargs="?", default="references/oracle/three_engine_mismatch_arbitration_2026_07_19.json")
|
||||
parser.add_argument("--output", type=Path)
|
||||
args = parser.parse_args()
|
||||
queue = build_queue(args.arbitration)
|
||||
text = json.dumps(queue, ensure_ascii=False, indent=2, sort_keys=True) + "\n"
|
||||
if args.output:
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.output.write_text(text, encoding="utf-8")
|
||||
print(text, end="")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,44 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
CONTRACT = ROOT / "references/oracle/commercial_startup_self_check_contract_2026_07_21.json"
|
||||
GOLDEN = ROOT / "references/oracle/commercial_golden_oss_case_ci_contract_2026_07_21.json"
|
||||
INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json"
|
||||
|
||||
|
||||
def test_commercial_startup_self_check_contract_requires_truth_source_identity():
|
||||
contract = json.loads(CONTRACT.read_text(encoding="utf-8"))
|
||||
|
||||
assert contract["scope"] == "commercial_startup_self_check_contract"
|
||||
required = set(contract["required_fields"])
|
||||
assert {
|
||||
"truth_source_path",
|
||||
"truth_source_git_commit",
|
||||
"skill_version",
|
||||
"evidence_packet_count",
|
||||
"artifact_gate_status",
|
||||
"privacy_artifact_status",
|
||||
"oracle_ready_summary",
|
||||
}.issubset(required)
|
||||
assert contract["reject_if"]["truth_source_path_contains"] == ["/WorkBuddy/", "/.workbuddy/"]
|
||||
assert contract["claim_boundary"] == "startup_identity_gate_only_not_business_runtime"
|
||||
|
||||
|
||||
def test_commercial_golden_oss_ci_contract_uses_pyjhora_sphuta_probe():
|
||||
contract = json.loads(GOLDEN.read_text(encoding="utf-8"))
|
||||
|
||||
assert contract["scope"] == "commercial_golden_oss_case_ci_contract"
|
||||
assert contract["golden_case"]["probe"] == "scripts/prashna_sphuta_oss_case_probe.py"
|
||||
assert contract["golden_case"]["expected_raw_hash"] == "f0705d205440ea8d7f39116042a0723d971f4ab79c94f7d448fc42d683d52326"
|
||||
assert contract["gate_policy"]["truth_upgrade_allowed"] is False
|
||||
assert contract["gate_policy"]["fail_if_probe_missing"] is True
|
||||
|
||||
|
||||
def test_commercial_contracts_are_registered_in_evidence_index():
|
||||
index = json.loads(INDEX.read_text(encoding="utf-8"))
|
||||
ids = {row["packet_id"] for row in index["packets"]}
|
||||
|
||||
assert "commercial_startup_self_check_contract_2026_07_21" in ids
|
||||
assert "commercial_golden_oss_case_ci_contract_2026_07_21" in ids
|
||||
@@ -0,0 +1,56 @@
|
||||
import json
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json"
|
||||
|
||||
|
||||
def test_jyotishganit_field_probe_outputs_raw_hash_and_required_sections():
|
||||
out = subprocess.check_output(["python3", "scripts/jyotishganit_field_probe.py"], cwd=ROOT, text=True)
|
||||
data = json.loads(out)
|
||||
assert data["scope"] == "jyotishganit_field_probe"
|
||||
assert data["claim_status"] == "observation_only"
|
||||
assert data["production_tuning_allowed"] is False
|
||||
assert data["truth_matrix_allowed"] is False
|
||||
assert data["raw_hash"]
|
||||
assert data["selected_hash"]
|
||||
for key in ["panchanga", "D2", "D4", "D9", "D10", "BAV_SAV", "Shadbala"]:
|
||||
assert key in data["coverage"]
|
||||
assert data["coverage"]["D2"] is True
|
||||
assert data["coverage"]["D4"] is True
|
||||
assert data["coverage"]["D9"] is True
|
||||
assert data["coverage"]["D10"] is True
|
||||
assert data["coverage"]["panchanga"] is True
|
||||
assert data["coverage"]["BAV_SAV"] is True
|
||||
assert data["coverage"]["Shadbala"] is False
|
||||
|
||||
|
||||
def test_vedicastro_kp_api_probe_is_observation_only_even_when_import_blocks():
|
||||
out = subprocess.check_output(["python3", "scripts/vedicastro_kp_api_probe.py"], cwd=ROOT, text=True)
|
||||
data = json.loads(out)
|
||||
assert data["scope"] == "vedicastro_kp_api_probe"
|
||||
assert data["claim_status"] == "observation_only"
|
||||
assert data["source_sha256"]
|
||||
assert "get_rl_nl_sl_data" in data["api_surface"]["methods"]
|
||||
assert data["runtime_probe"]["attempted"] is True
|
||||
|
||||
|
||||
def test_public_worked_example_queue_keeps_sources_unverified():
|
||||
data = json.loads((ROOT / "references/oracle/public_worked_example_queue_2026_07_19.json").read_text(encoding="utf-8"))
|
||||
assert data["claim_status"] == "open_queue"
|
||||
assert data["production_tuning_allowed"] is False
|
||||
assert data["truth_matrix_allowed"] is False
|
||||
topics = {row["topic"] for row in data["queues"]}
|
||||
assert "KP exact cusp star/sub/sub-sub lord" in topics
|
||||
assert "Muhurta Tarabala/Chandrabala/Rahu Kalam/Abhijit" in topics
|
||||
assert "Shadbala Virupa and Ashtakavarga component" in topics
|
||||
|
||||
|
||||
def test_evidence_index_registers_new_probes():
|
||||
index = json.loads(INDEX.read_text(encoding="utf-8"))
|
||||
packets = {row["packet_id"]: row for row in index["packets"]}
|
||||
for packet_id in ["jyotishganit_field_probe", "vedicastro_kp_api_probe", "public_worked_example_queue"]:
|
||||
assert packet_id in packets
|
||||
assert packets[packet_id]["claim_status"] in {"observation_only", "open_queue"}
|
||||
@@ -0,0 +1,37 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
PACKET = ROOT / "references/oracle/jyotishganit_field_closure_rows_2026_07_21.json"
|
||||
INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json"
|
||||
|
||||
|
||||
def test_jyotishganit_field_closure_rows_are_observation_only():
|
||||
data = json.loads(PACKET.read_text(encoding="utf-8"))
|
||||
|
||||
assert data["scope"] == "jyotishganit_field_closure_rows"
|
||||
assert data["claim_status"] == "observation_only"
|
||||
assert data["truth_matrix_allowed"] is False
|
||||
assert data["source_selected_hash"] == "4709b8ade84efdea4d0a67c15f3e32cea516a5aa2e8abe3885578feda20cb3f4"
|
||||
assert len(data["rows"]) == 7
|
||||
|
||||
|
||||
def test_jyotishganit_field_rows_mark_shadbala_as_gap():
|
||||
data = json.loads(PACKET.read_text(encoding="utf-8"))
|
||||
rows = {row["field"]: row for row in data["rows"]}
|
||||
|
||||
for field in ["D2", "D4", "D9", "D10", "Panchanga", "BAV", "SAV"]:
|
||||
assert rows[field]["closure_status"] == "ready_for_field_comparison"
|
||||
assert data["explicit_gaps"] == [{"field": "Shadbala", "reason": "jyotishganit probe did not expose shadbala/strengths in selected raw"}]
|
||||
|
||||
|
||||
def test_jyotishganit_field_rows_are_registered():
|
||||
index = json.loads(INDEX.read_text(encoding="utf-8"))
|
||||
entry = next(
|
||||
row for row in index["packets"]
|
||||
if row["packet_id"] == "jyotishganit_field_closure_rows_2026_07_21"
|
||||
)
|
||||
|
||||
assert entry["domain"] == "three_engine_parity"
|
||||
assert entry["claim_status"] == "observation_only"
|
||||
@@ -0,0 +1,24 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json"
|
||||
|
||||
|
||||
def test_node_source_attribution_identifies_boundary_crossing_not_d10_formula():
|
||||
data = json.loads((ROOT / "references/oracle/jyotishganit_node_source_attribution_2026_07_19.json").read_text(encoding="utf-8"))
|
||||
assert data["scope"] == "jyotishganit_node_source_attribution"
|
||||
assert data["claim_status"] == "partial"
|
||||
assert data["production_tuning_allowed"] is False
|
||||
assert data["attribution"]["formula_delta"] == "not_d10_formula_shape"
|
||||
assert data["attribution"]["primary_delta"] == "node_longitude_source_plus_ayanamsa_boundary_crossing"
|
||||
assert data["local_engine"]["Rahu"]["d10_part_index_zero_based"] == 3
|
||||
assert data["jyotishganit_engine"]["Rahu"]["d10_part_index_zero_based"] == 2
|
||||
assert data["local_true_node_control"]["control_result"].startswith("true node moves farther")
|
||||
|
||||
|
||||
def test_evidence_index_registers_node_source_attribution():
|
||||
index = json.loads(INDEX.read_text(encoding="utf-8"))
|
||||
packets = {row["packet_id"]: row for row in index["packets"]}
|
||||
assert packets["jyotishganit_node_source_attribution"]["claim_status"] == "partial"
|
||||
@@ -0,0 +1,37 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
BRIDGE = ROOT / "references/oracle/jyotishganit_three_engine_closure_bridge_2026_07_21.json"
|
||||
INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json"
|
||||
|
||||
|
||||
def test_jyotishganit_bridge_routes_only_available_fields_to_closure_queue():
|
||||
data = json.loads(BRIDGE.read_text(encoding="utf-8"))
|
||||
|
||||
assert data["scope"] == "jyotishganit_three_engine_closure_bridge"
|
||||
assert data["claim_status"] == "observation_only"
|
||||
assert data["truth_matrix_allowed"] is False
|
||||
assert data["source_probe"] == "scripts/jyotishganit_field_probe.py"
|
||||
assert data["source_raw_hash"] == "19fa9ea862b68c4cffb6756fa6cbf0466daf47a8b008b3fe8809e9fc6a1ed30c"
|
||||
assert set(data["field_routes"]["ready_for_field_comparison"]) == {
|
||||
"D2",
|
||||
"D4",
|
||||
"D9",
|
||||
"D10",
|
||||
"Panchanga",
|
||||
"BAV_SAV",
|
||||
}
|
||||
assert data["field_routes"]["explicit_gaps"] == ["Shadbala"]
|
||||
|
||||
|
||||
def test_jyotishganit_bridge_is_registered():
|
||||
index = json.loads(INDEX.read_text(encoding="utf-8"))
|
||||
entry = next(
|
||||
row for row in index["packets"]
|
||||
if row["packet_id"] == "jyotishganit_three_engine_closure_bridge_2026_07_21"
|
||||
)
|
||||
|
||||
assert entry["domain"] == "three_engine_parity"
|
||||
assert entry["claim_status"] == "observation_only"
|
||||
@@ -0,0 +1,39 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
QUEUE = ROOT / "references/oracle/kp_public_worked_example_candidate_queue_2026_07_21.json"
|
||||
INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json"
|
||||
|
||||
|
||||
def test_kp_public_queue_has_sources_but_no_numeric_oracle_upgrade():
|
||||
data = json.loads(QUEUE.read_text(encoding="utf-8"))
|
||||
|
||||
assert data["scope"] == "kp_public_worked_example_candidate_queue"
|
||||
assert data["claim_status"] == "open_queue"
|
||||
assert data["numeric_oracle_ready_count"] == 0
|
||||
assert data["truth_matrix_allowed"] is False
|
||||
assert data["boundary"] == "public_source_candidate_queue_only_no_kp_numeric_oracle"
|
||||
|
||||
|
||||
def test_kp_public_queue_records_formula_and_runtime_cusp_candidates():
|
||||
data = json.loads(QUEUE.read_text(encoding="utf-8"))
|
||||
rows = {row["id"]: row for row in data["candidates"]}
|
||||
|
||||
assert rows["astrosage_kp_chapter_2"]["candidate_type"] == "formula_and_text_worked_example"
|
||||
assert rows["astrosage_kp_chapter_2"]["has_numeric_cusp_table"] is False
|
||||
assert rows["astrosage_kp_sign_star_sub_table"]["candidate_type"] == "reference_table"
|
||||
assert rows["onlinejyotish_kp_horoscope"]["candidate_type"] == "runtime_form_candidate"
|
||||
assert rows["astrobix_kp_houses"]["candidate_type"] == "runtime_form_candidate"
|
||||
|
||||
|
||||
def test_kp_public_queue_is_registered():
|
||||
index = json.loads(INDEX.read_text(encoding="utf-8"))
|
||||
entry = next(
|
||||
row for row in index["packets"]
|
||||
if row["packet_id"] == "kp_public_worked_example_candidate_queue_2026_07_21"
|
||||
)
|
||||
|
||||
assert entry["domain"] == "kp_precision_timing"
|
||||
assert entry["claim_status"] == "open_queue"
|
||||
@@ -0,0 +1,60 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
QUEUE = ROOT / "references/oracle/source_runtime_closure_queue_2026_07_21.json"
|
||||
INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json"
|
||||
KP_RAW = ROOT / "references/oracle/vedicastro_kp_house_cusp_raw_2026_07_21.json"
|
||||
KP_ENV = ROOT / "references/oracle/vedicastro_kp_tmp_env_identity_2026_07_21.json"
|
||||
|
||||
|
||||
def test_queue_prioritizes_jyotishganit_and_vedicastro_without_truth_upgrade():
|
||||
data = json.loads(QUEUE.read_text(encoding="utf-8"))
|
||||
rows = {row["id"]: row for row in data["rows"]}
|
||||
|
||||
assert data["scope"] == "source_runtime_closure_queue"
|
||||
assert data["claim_status"] == "open_queue"
|
||||
assert data["truth_matrix_allowed"] is False
|
||||
assert rows["jyotishganit_field_closure"]["current_status"] == "probe_runs_observation_only"
|
||||
assert rows["vedicastro_kp_house_cusp_closure"]["current_status"] == "raw_ready_observation_only"
|
||||
assert rows["vedicastro_kp_house_cusp_closure"]["latest_observed_raw_hash"] == "2e7a6b17eb2965a60846f625f6bd8bc03555216d6225983647bcbfa23d0e345b"
|
||||
assert rows["vedicastro_kp_house_cusp_closure"]["coverage"]["sub_sub_lord"] is True
|
||||
|
||||
|
||||
def test_queue_marks_existing_assets_as_not_fully_invoked():
|
||||
data = json.loads(QUEUE.read_text(encoding="utf-8"))
|
||||
not_closed = data["not_fully_closed_reference_layers"]
|
||||
|
||||
assert "references/open_source_sources/jyotishganit" in not_closed
|
||||
assert "references/open_source_sources/VedicAstro" in not_closed
|
||||
assert "references/open_source_sources/rishi-ai-mcp" in not_closed
|
||||
assert "references/open_source_sources/vedic-astro-skills" in not_closed
|
||||
assert data["boundary"] == "queue_only_no_adapter_or_truth_upgrade"
|
||||
|
||||
|
||||
def test_queue_is_registered_in_evidence_index():
|
||||
index = json.loads(INDEX.read_text(encoding="utf-8"))
|
||||
entry = next(
|
||||
row for row in index["packets"]
|
||||
if row["packet_id"] == "source_runtime_closure_queue_2026_07_21"
|
||||
)
|
||||
|
||||
assert entry["domain"] == "source_runtime_closure"
|
||||
assert entry["claim_status"] == "open_queue"
|
||||
|
||||
|
||||
def test_vedicastro_kp_raw_and_tmp_env_are_observation_only_packets():
|
||||
raw = json.loads(KP_RAW.read_text(encoding="utf-8"))
|
||||
env = json.loads(KP_ENV.read_text(encoding="utf-8"))
|
||||
|
||||
assert raw["scope"] == "vedicastro_kp_house_cusp_probe"
|
||||
assert raw["status"] == "complete"
|
||||
assert raw["claim_status"] == "observation_only"
|
||||
assert raw["truth_matrix_allowed"] is False
|
||||
assert raw["raw_hash"] == "2e7a6b17eb2965a60846f625f6bd8bc03555216d6225983647bcbfa23d0e345b"
|
||||
assert raw["schema_fingerprint"]["house_count"] == 12
|
||||
assert "SubLord" in raw["schema_fingerprint"]["fields"]
|
||||
assert "SubSubLord" in raw["schema_fingerprint"]["fields"]
|
||||
assert env["claim_status"] == "runtime_dependency_ready"
|
||||
assert env["project_dependency_mutation_allowed"] is False
|
||||
@@ -0,0 +1,38 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from scripts.technique_promotion_audit_kp_gochara_muhurta import build_audit
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
|
||||
|
||||
def test_kp_gochara_muhurta_audit_splits_runtime_presence() -> None:
|
||||
audit = build_audit(ROOT)
|
||||
statuses = {item["technique_id"]: item["current_call_status"] for item in audit["items"]}
|
||||
assert audit["scope"] == "technique_promotion_audit_kp_gochara_muhurta"
|
||||
assert audit["truth_policy"] == "runtime_presence_not_oracle_closure"
|
||||
assert statuses["panchanga_calendar"] == "partial"
|
||||
assert statuses["muhurta_dashaflow_candidate"] == "oss_reference_not_main_runtime"
|
||||
assert statuses["kp_astrology"] == "reference_only_not_main_runtime"
|
||||
assert statuses["gochara_event_timing_template"] == "template_reference_not_main_runtime"
|
||||
|
||||
|
||||
def test_kp_gochara_muhurta_audit_records_reuse_boundaries() -> None:
|
||||
audit = build_audit(ROOT)
|
||||
for item in audit["items"]:
|
||||
assert item["reuse_decision"] in {"do_not_duplicate_runtime", "license_audit_before_reuse", "reference_only"}
|
||||
assert item["next_action"]
|
||||
assert item["claim_boundary"]
|
||||
assert item["source_or_license_boundary"]
|
||||
|
||||
|
||||
def test_kp_gochara_muhurta_audit_artifact_exists() -> None:
|
||||
artifact = ROOT / "references/oracle/technique_promotion_audit_kp_gochara_muhurta_2026_07_19.json"
|
||||
data = json.loads(artifact.read_text(encoding="utf-8"))
|
||||
assert data["summary"] == {
|
||||
"items_checked": 4,
|
||||
"formally_called_count": 0,
|
||||
"reference_only_count": 3,
|
||||
}
|
||||
@@ -1,51 +1,6 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from benchmarks.jyotish.scripts.run_skill_baseline import run_sample
|
||||
from benchmarks.jyotish.scripts.run_pyjhora_compare import build_pyjhora_sample, compare_one
|
||||
from scripts import three_engine_high_rigor_parity as parity
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
|
||||
|
||||
def test_runner_imports_from_commercial_root() -> None:
|
||||
env = os.environ.copy()
|
||||
env["PYTHONPATH"] = str(ROOT)
|
||||
result = subprocess.run(
|
||||
[sys.executable, "-c", "import scripts.three_engine_high_rigor_parity"],
|
||||
cwd=ROOT,
|
||||
env=env,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=False,
|
||||
)
|
||||
assert result.returncode == 0, result.stderr
|
||||
|
||||
|
||||
def test_public_sample_exposes_shadbala_components() -> None:
|
||||
result = run_sample(parity.SAMPLE)
|
||||
assert result["ok"] is True
|
||||
components = result["canonical"]["shadbala_components"]
|
||||
assert set(components["Sun"]) == set(parity.VED_COMPONENT_FIELDS)
|
||||
|
||||
|
||||
def test_pyjhora_sample_exposes_shadbala_components() -> None:
|
||||
sample = build_pyjhora_sample(parity.SAMPLE)
|
||||
assert set(sample["shadbala_components"]["Sun"]) == set(parity.VED_COMPONENT_FIELDS)
|
||||
|
||||
|
||||
def test_pyjhora_matrix_includes_shadbala_components() -> None:
|
||||
baseline = {
|
||||
"ascendant": {}, "planets": {}, "varga": {}, "ashtakavarga": {}, "shadbala": {}, "dasha": {},
|
||||
"shadbala_components": {"Sun": {name: 1.0 for name in parity.VED_COMPONENT_FIELDS}},
|
||||
}
|
||||
rows = compare_one("sample", baseline, baseline)
|
||||
assert {row["field"] for row in rows if row["section"] == "Shadbala_Component" and row["body"] == "Sun"} == set(parity.VED_COMPONENT_FIELDS)
|
||||
|
||||
|
||||
def test_jyotishganit_planet_map_reads_divisional_occupants() -> None:
|
||||
chart = {"houses": [{"occupants": [{"celestialBody": "Sun", "sign": "Leo"}]}]}
|
||||
assert parity._jyotish_planet_signs(chart) == {"Sun": "Leo"}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
PACKET = ROOT / "references/oracle/three_engine_jyotishganit_bridge_applied_2026_07_21.json"
|
||||
INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json"
|
||||
|
||||
|
||||
def test_applied_bridge_maps_jyotishganit_fields_to_existing_temcq_tickets():
|
||||
data = json.loads(PACKET.read_text(encoding="utf-8"))
|
||||
|
||||
assert data["scope"] == "three_engine_jyotishganit_bridge_applied"
|
||||
assert data["claim_status"] == "observation_only"
|
||||
assert data["truth_matrix_allowed"] is False
|
||||
assert data["source_bridge"] == "references/oracle/jyotishganit_three_engine_closure_bridge_2026_07_21.json"
|
||||
assert data["summary"]["existing_ticket_rows"] == 18
|
||||
assert data["summary"]["no_existing_ticket_rows"] == 1
|
||||
assert data["summary"]["truth_upgrades"] == 0
|
||||
|
||||
|
||||
def test_applied_bridge_keeps_all_rows_open_or_comparison_ready():
|
||||
data = json.loads(PACKET.read_text(encoding="utf-8"))
|
||||
rows = data["rows"]
|
||||
ticket_rows = [row for row in rows if row["existing_ticket_id"]]
|
||||
panchanga = next(row for row in rows if row["field"] == "Panchanga")
|
||||
|
||||
assert len(ticket_rows) == 18
|
||||
assert {row["closure_status"] for row in rows} == {
|
||||
"ready_for_field_comparison",
|
||||
"no_existing_ticket_create_next",
|
||||
}
|
||||
assert panchanga["existing_ticket_id"] is None
|
||||
assert panchanga["closure_status"] == "no_existing_ticket_create_next"
|
||||
assert all(row["claim_boundary"] == "field_comparison_only_no_formula_truth" for row in rows)
|
||||
|
||||
|
||||
def test_applied_bridge_is_registered_in_evidence_index():
|
||||
index = json.loads(INDEX.read_text(encoding="utf-8"))
|
||||
entry = next(
|
||||
row for row in index["packets"]
|
||||
if row["packet_id"] == "three_engine_jyotishganit_bridge_applied_2026_07_21"
|
||||
)
|
||||
|
||||
assert entry["domain"] == "three_engine_parity"
|
||||
assert entry["claim_status"] == "observation_only"
|
||||
@@ -1,7 +1,7 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from scripts.three_engine_mismatch_arbitrator import arbitrate_manifest
|
||||
from scripts.three_engine_mismatch_arbitrator import arbitrate_manifest, render_markdown_report
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
@@ -35,13 +35,16 @@ def test_vedastro_only_d2_difference_is_endpoint_semantics(tmp_path: Path) -> No
|
||||
assert row["differing_engines"] == ["VedAstro"]
|
||||
|
||||
|
||||
def test_commercial_receives_mismatch_status_not_raw_truth_upgrade() -> None:
|
||||
report = json.loads((ROOT / "references/oracle/three_engine_mismatch_arbitration_2026_07_19.json").read_text(encoding="utf-8"))
|
||||
markdown = (ROOT / "docs/research/three_engine_mismatch_arbitration_2026_07_19.md").read_text(encoding="utf-8")
|
||||
def test_markdown_report_summarizes_policy_and_category_counts() -> None:
|
||||
report = arbitrate_manifest(ROOT / "references" / "oracle" / "three_engine_parity_replay_manifest.json")
|
||||
markdown = render_markdown_report(report)
|
||||
|
||||
assert report["mismatch_count"] == 60
|
||||
assert report["classified_count"] == 60
|
||||
assert report["unclassified_count"] == 0
|
||||
assert report["truth_policy"] == "no_majority_vote"
|
||||
assert "Three-engine mismatch arbitration" in markdown
|
||||
assert "mismatch_count: `60`" in markdown
|
||||
assert "truth_policy: `no_majority_vote`" in markdown
|
||||
assert "commercial_sync: `status_and_claim_boundary_only`" in markdown
|
||||
assert "endpoint_or_varga_semantics" in markdown
|
||||
assert "shadbala_formula_variant" in markdown
|
||||
assert "ashtakavarga_table_or_contributor_variant" in markdown
|
||||
assert "derived_total_from_component_variants" in markdown
|
||||
assert "Do not copy raw research debt into commercial runtime" in markdown
|
||||
|
||||
@@ -19,3 +19,69 @@ def test_verified_oracle_requires_raw_artifact_hash_and_settings(tmp_path):
|
||||
|
||||
assert result["status"] == "invalid"
|
||||
assert any(error["error"] == "required_for_verified_status" for error in result["errors"])
|
||||
|
||||
|
||||
def test_high_rigor_parity_requires_non_d1_and_shadbala_component_rows(tmp_path):
|
||||
manifest = {
|
||||
"engines": {
|
||||
"VedAstro": {"status": "blocked"},
|
||||
"PyJHora_JHora": {"status": "blocked"},
|
||||
"jyotishganit": {"status": "blocked"},
|
||||
},
|
||||
"comparison_rows": [
|
||||
{
|
||||
"section": "D1",
|
||||
"field": "Sun.sign",
|
||||
"local_value": "Aquarius",
|
||||
"oracle_values": {},
|
||||
"status": "match",
|
||||
}
|
||||
],
|
||||
}
|
||||
path = tmp_path / "manifest.json"
|
||||
path.write_text(json.dumps(manifest), encoding="utf-8")
|
||||
|
||||
result = validate_manifest(path)
|
||||
|
||||
assert result["status"] == "partial"
|
||||
assert result["blocked_reason"] == "missing_high_rigor_sections"
|
||||
assert "D2" in result["missing_high_rigor_sections"]
|
||||
assert "shadbala_components" in result["missing_high_rigor_sections"]
|
||||
|
||||
|
||||
def test_high_rigor_parity_passes_only_when_required_sections_are_present(tmp_path):
|
||||
rows = [
|
||||
{
|
||||
"section": section,
|
||||
"field": "sample",
|
||||
"local_value": 1,
|
||||
"oracle_values": {"PyJHora_JHora": 1},
|
||||
"status": "match",
|
||||
}
|
||||
for section in [
|
||||
"D1",
|
||||
"D2",
|
||||
"D4",
|
||||
"D9",
|
||||
"D10",
|
||||
"ashtakavarga_bav",
|
||||
"ashtakavarga_sav",
|
||||
"shadbala_total",
|
||||
"shadbala_components",
|
||||
]
|
||||
]
|
||||
manifest = {
|
||||
"engines": {
|
||||
"VedAstro": {"status": "blocked"},
|
||||
"PyJHora_JHora": {"status": "blocked"},
|
||||
"jyotishganit": {"status": "blocked"},
|
||||
},
|
||||
"comparison_rows": rows,
|
||||
}
|
||||
path = tmp_path / "manifest.json"
|
||||
path.write_text(json.dumps(manifest), encoding="utf-8")
|
||||
|
||||
result = validate_manifest(path)
|
||||
|
||||
assert result["status"] == "pass"
|
||||
assert result["missing_high_rigor_sections"] == []
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
PACKET = ROOT / "references/oracle/truth_source_runtime_identity_2026_07_21.json"
|
||||
INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json"
|
||||
|
||||
|
||||
def test_truth_source_runtime_identity_packet_is_governance_only():
|
||||
packet = json.loads(PACKET.read_text(encoding="utf-8"))
|
||||
|
||||
assert packet["scope"] == "truth_source_runtime_identity"
|
||||
assert packet["truth_source"]["path"] == "/Users/wuyongnaren/Documents/印度占星"
|
||||
assert packet["truth_source"]["role"] == "sole_main_research_truth_source"
|
||||
assert len(packet["truth_source"]["git_commit"]) == 40
|
||||
assert packet["oracle_summary"]["truth_matrix_allowed"] is False
|
||||
assert packet["oracle_summary"]["production_tuning_allowed"] is False
|
||||
assert packet["claim_boundary"] == "identity_ready_governance_only_not_oracle_truth"
|
||||
|
||||
|
||||
def test_truth_source_runtime_identity_is_registered_in_evidence_index():
|
||||
index = json.loads(INDEX.read_text(encoding="utf-8"))
|
||||
entry = next(
|
||||
row for row in index["packets"]
|
||||
if row["packet_id"] == "truth_source_runtime_identity"
|
||||
)
|
||||
|
||||
assert entry["path"] == "references/oracle/truth_source_runtime_identity_2026_07_21.json"
|
||||
assert entry["domain"] == "truth_source_governance"
|
||||
assert entry["claim_status"] == "ready_contract"
|
||||
|
||||
|
||||
def test_workbuddy_old_copy_is_quarantined_as_fragment_only():
|
||||
packet = json.loads(PACKET.read_text(encoding="utf-8"))
|
||||
quarantine = packet["fragment_quarantine"]["workbuddy_old_copies"]
|
||||
|
||||
assert quarantine["status"] == "quarantined"
|
||||
assert set(quarantine["labels"]) == {
|
||||
"not_for_truth_source",
|
||||
"privacy_review_required",
|
||||
"artifact_incomplete",
|
||||
"historical_fragment_only",
|
||||
}
|
||||
assert all("/WorkBuddy/" in path or "/.workbuddy/" in path for path in quarantine["paths"])
|
||||
@@ -0,0 +1,49 @@
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
RUNTIME = Path("/tmp/vedicastro_sidereal_flatlib_probe.Nt8ANZ")
|
||||
ARTIFACT = ROOT / "references/oracle/vedicastro_kp_house_cusp_probe_steve_jobs_2026_07_19.json"
|
||||
INDEX = ROOT / "references/oracle/evidence_packet_index_2026_07_19.json"
|
||||
|
||||
|
||||
def test_vedicastro_kp_house_cusp_artifact_has_12_cusps_and_hash():
|
||||
data = json.loads(ARTIFACT.read_text(encoding="utf-8"))
|
||||
assert data["scope"] == "vedicastro_kp_house_cusp_probe"
|
||||
assert data["claim_status"] == "observation_only"
|
||||
assert data["production_tuning_allowed"] is False
|
||||
assert data["truth_matrix_allowed"] is False
|
||||
assert data["raw_hash"]
|
||||
assert data["schema_fingerprint"]["house_count"] == 12
|
||||
fields = set(data["schema_fingerprint"]["fields"])
|
||||
assert {"LonDecDeg", "NakshatraLord", "SubLord", "SubSubLord"} <= fields
|
||||
assert data["raw"]["houses"][0]["Object"] == "I"
|
||||
|
||||
|
||||
def test_vedicastro_kp_house_cusp_probe_runtime_when_temp_env_exists():
|
||||
if not RUNTIME.exists():
|
||||
return
|
||||
env = {
|
||||
**os.environ,
|
||||
"PYTHONPATH": f"{RUNTIME}:{ROOT / 'references/open_source_sources/VedicAstro'}",
|
||||
}
|
||||
out = subprocess.check_output(
|
||||
[sys.executable, "scripts/vedicastro_kp_house_cusp_probe.py"],
|
||||
cwd=ROOT,
|
||||
text=True,
|
||||
env=env,
|
||||
)
|
||||
data = json.loads(out)
|
||||
assert data["schema_fingerprint"]["house_count"] == 12
|
||||
assert data["raw"]["houses"][0]["SubLord"]
|
||||
assert data["dependency_identity"]["observed_pinned_flatlib_commit"] == "2618c348ce1ab2588548f935ff65f031630b4872"
|
||||
|
||||
|
||||
def test_evidence_index_registers_house_cusp_probe():
|
||||
index = json.loads(INDEX.read_text(encoding="utf-8"))
|
||||
packets = {row["packet_id"]: row for row in index["packets"]}
|
||||
assert packets["vedicastro_kp_house_cusp_probe"]["claim_status"] == "observation_only"
|
||||
@@ -26,5 +26,6 @@ def test_vedicastro_probe_reports_dependency_chain_without_truth_upgrade():
|
||||
assert data["runtime_probe"]["method_present"] is True
|
||||
assert "SubLord" in data["runtime_probe"]["sample_rl_nl_sl"]
|
||||
assert "AY_KRISHNAMURTI" in data["runtime_probe"]["sidereal_ayanamsa_constants_present"]
|
||||
assert data["dependency_identity"]["observed_pinned_flatlib_commit"] == "2618c348ce1ab2588548f935ff65f031630b4872"
|
||||
else:
|
||||
assert data["status"] == "blocked_runtime_import"
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
SCRIPT = ROOT / "scripts/prepare_vedicastro_kp_tmp_env.py"
|
||||
|
||||
|
||||
def test_preparer_supports_report_only_mode_without_project_install():
|
||||
out = subprocess.check_output(
|
||||
[sys.executable, str(SCRIPT), "--report-only"],
|
||||
cwd=ROOT,
|
||||
text=True,
|
||||
)
|
||||
data = json.loads(out)
|
||||
|
||||
assert data["scope"] == "vedicastro_kp_tmp_env_preparer"
|
||||
assert data["target"] == "/tmp/vedicastro_flatlib_probe"
|
||||
assert data["project_dependency_mutation_allowed"] is False
|
||||
assert data["required_packages"]["flatlib"].startswith("git+https://github.com/diliprk/flatlib.git@sidereal")
|
||||
assert data["claim_status"] in {"blocked_runtime_dependency", "runtime_dependency_ready"}
|
||||
|
||||
|
||||
def test_preparer_result_never_claims_oracle_truth():
|
||||
out = subprocess.check_output(
|
||||
[sys.executable, str(SCRIPT), "--report-only"],
|
||||
cwd=ROOT,
|
||||
text=True,
|
||||
)
|
||||
data = json.loads(out)
|
||||
|
||||
assert data["truth_matrix_allowed"] is False
|
||||
assert data["production_tuning_allowed"] is False
|
||||
assert data["boundary"] == "dependency_preparation_only_no_kp_oracle_truth"
|
||||
Reference in New Issue
Block a user