From 5298b49a89f8167757bf4f0dd1817807b0aadfae Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Sun, 19 Jul 2026 08:37:24 +0800 Subject: [PATCH] docs: sync oracle claim boundaries --- ..._av_normative_benchmark_plan_2026_07_19.md | 75 + ..._engine_mismatch_arbitration_2026_07_19.md | 27 + ...dastro_identity_closure_plan_2026_07_19.md | 61 + ...ngine_mismatch_arbitration_2026_07_19.json | 1464 +++++++++++++++++ .../vedastro_identity_archive_2026_07_19.json | 76 + ...st_shadbala_av_normative_benchmark_plan.py | 42 + .../test_three_engine_mismatch_arbitrator.py | 12 + tests/test_vedastro_identity_closure_plan.py | 35 + 8 files changed, 1792 insertions(+) create mode 100644 docs/research/shadbala_av_normative_benchmark_plan_2026_07_19.md create mode 100644 docs/research/three_engine_mismatch_arbitration_2026_07_19.md create mode 100644 docs/research/vedastro_identity_closure_plan_2026_07_19.md create mode 100644 references/oracle/three_engine_mismatch_arbitration_2026_07_19.json create mode 100644 references/oracle/vedastro_identity_archive_2026_07_19.json create mode 100644 tests/test_shadbala_av_normative_benchmark_plan.py create mode 100644 tests/test_vedastro_identity_closure_plan.py diff --git a/docs/research/shadbala_av_normative_benchmark_plan_2026_07_19.md b/docs/research/shadbala_av_normative_benchmark_plan_2026_07_19.md new file mode 100644 index 00000000..2c3c73a4 --- /dev/null +++ b/docs/research/shadbala_av_normative_benchmark_plan_2026_07_19.md @@ -0,0 +1,75 @@ +# Shadbala / Ashtakavarga normative benchmark plan — 2026-07-19 + +## Current status + +Current Shadbala target set is closed, but global tuning is not allowed. + +- current target set: `external_verified` +- `can_claim_shadbala_absolute_closure = true` +- `production_tuning_allowed = false` +- three-engine mismatch report: 60 mismatches, 60 classified, 0 unclassified +- Shadbala formula/component variants: 35 component rows + 7 derived-total rows +- Ashtakavarga table/contributor variants: 8 rows + +## What this means + +The research repo can claim closure for the current curated Shadbala target package. It must not claim universal Shadbala or AV truth across all schools/software. + +## Required benchmark ladder + +1. Source provenance + - VP Jain: page/edition/source hash or explicit retrieval gap. + - Xalen: source commit, package hash, executable hash if available, method list. + - PyJHora/JHora: isolated AGPL oracle only; no copied implementation. + - jyotishganit: permissive observation adapter where license permits. + +2. Component normalization + - `sthana` + - `dig` + - `kala` + - `chesta` + - `naisargika` + - `drik` + - `total_rupa` + +3. Unit contract + - Virupa vs Rupa must be explicit. + - Totals cannot be arbitrated before components. + - Component caps/floors must be named. + +4. Formula variant registry + - legitimate school variants become `method_variant`; + - unresolved variants stay `classified_unresolved`; + - no majority vote. + +5. Independent ephemeris mode + - same raw input mode isolates formula layer; + - independent ephemeris mode checks longitude/ayanamsa layer; + - both must be reported separately. + +## Commercial sync rule + +Commercial may receive: + +- readiness status; +- user-safe confidence cap; +- claim boundary; +- supported component list. + +Commercial must not receive: + +- unresolved raw research debt; +- forced absolute Virupa truth; +- AGPL implementation code; +- production tuning flag while `production_tuning_allowed = false`. + +## Next implementation task + +Create a component provenance registry that maps each Shadbala/AV mismatch category to: + +- source artifact; +- component; +- unit; +- likely reason; +- allowed claim; +- next evidence required. diff --git a/docs/research/three_engine_mismatch_arbitration_2026_07_19.md b/docs/research/three_engine_mismatch_arbitration_2026_07_19.md new file mode 100644 index 00000000..be8807cb --- /dev/null +++ b/docs/research/three_engine_mismatch_arbitration_2026_07_19.md @@ -0,0 +1,27 @@ +# Three-engine mismatch arbitration + +manifest: `references/oracle/three_engine_parity_replay_manifest.json` +status: `classified_unresolved` +truth_policy: `no_majority_vote` +commercial_sync: `status_and_claim_boundary_only` +mismatch_count: `60` +classified_count: `60` +unclassified_count: `0` + +Do not copy raw research debt into commercial runtime. Commercial receives readiness, claim boundary, and user-safe status only. + +## Category counts + +| category | count | +|---|---:| +| `ashtakavarga_table_or_contributor_variant` | 8 | +| `derived_total_from_component_variants` | 7 | +| `endpoint_or_varga_semantics` | 10 | +| `shadbala_formula_variant` | 35 | + +## Closure requirements + +- `endpoint_or_varga_semantics`: Confirm VedAstro endpoint returns the requested varga under the same ayanamsa/node/method contract. +- `ashtakavarga_table_or_contributor_variant`: Compare contributor tables, Lagna inclusion, shodhana state, and BAV/SAV row semantics. +- `derived_total_from_component_variants`: Do not arbitrate totals until all six component variants and Virupa/Rupa units are aligned. +- `shadbala_formula_variant`: Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals. diff --git a/docs/research/vedastro_identity_closure_plan_2026_07_19.md b/docs/research/vedastro_identity_closure_plan_2026_07_19.md new file mode 100644 index 00000000..55ebf819 --- /dev/null +++ b/docs/research/vedastro_identity_closure_plan_2026_07_19.md @@ -0,0 +1,61 @@ +# VedAstro identity closure plan — 2026-07-19 + +## Current status + +VedAstro hosted API remains observation-only. + +Reason: hosted output can be replayed, but build identity, method semantics, and deployment version are not archived. Stable mismatch replay proves the conflict is not random transport noise; it does not prove which side is true. + +## Acceptable closure paths + +### Path A — hosted metadata + +Required from upstream: + +- hosted build version; +- source commit or release tag; +- method semantic contract for each endpoint used; +- ayanamsa/node/timezone interpretation; +- deployment timestamp or immutable build ID. + +### Path B — pinned self-hosted version + +Required archive: + +- source commit; +- NuGet package hash; +- DLL SHA-256; +- assembly version; +- public method inventory; +- container image digest or reproducible local runner hash. + +`scripts/vedastro_identity_archive.py` now records the NuGet identity and a `required_self_host_evidence` checklist. Missing fields keep truth upgrade blocked. + +## Claim boundary + +Allowed: + +- use VedAstro as external observation; +- report stable conflicts; +- compare raw response hashes and normalized fields; +- use pinned self-hosted evidence if all required identity fields are present. + +Forbidden: + +- tune production predictions from hosted output with unknown build identity; +- call hosted mismatch arbitration a global truth decision; +- silently prefer VedAstro or local output by majority vote. + +## Commercial sync rule + +Commercial may receive: + +- `VedAstro: observation_only`; +- endpoint status; +- claim boundary text. + +Commercial must not receive: + +- raw hosted credentials; +- hosted output as truth; +- production tuning permission while `truth_upgrade_gate` is blocked. diff --git a/references/oracle/three_engine_mismatch_arbitration_2026_07_19.json b/references/oracle/three_engine_mismatch_arbitration_2026_07_19.json new file mode 100644 index 00000000..3a90137d --- /dev/null +++ b/references/oracle/three_engine_mismatch_arbitration_2026_07_19.json @@ -0,0 +1,1464 @@ +{ + "category_counts": { + "ashtakavarga_table_or_contributor_variant": 8, + "derived_total_from_component_variants": 7, + "endpoint_or_varga_semantics": 10, + "shadbala_formula_variant": 35 + }, + "classified_count": 60, + "manifest_path": "references/oracle/three_engine_parity_replay_manifest.json", + "mismatch_count": 60, + "rows": [ + { + "category": "endpoint_or_varga_semantics", + "closure_requirement": "Confirm VedAstro endpoint returns the requested varga under the same ayanamsa/node/method contract.", + "differing_engines": [ + "VedAstro" + ], + "field": "Sun.sign", + "local_value": "Leo", + "oracle_values": { + "PyJHora_JHora": "Leo", + "VedAstro": "Gemini", + "jyotishganit": "Leo" + }, + "section": "D2", + "truth_status": "unresolved" + }, + { + "category": "endpoint_or_varga_semantics", + "closure_requirement": "Confirm VedAstro endpoint returns the requested varga under the same ayanamsa/node/method contract.", + "differing_engines": [ + "VedAstro" + ], + "field": "Moon.sign", + "local_value": "Cancer", + "oracle_values": { + "PyJHora_JHora": "Cancer", + "VedAstro": "Pisces", + "jyotishganit": "Cancer" + }, + "section": "D2", + "truth_status": "unresolved" + }, + { + "category": "endpoint_or_varga_semantics", + "closure_requirement": "Confirm VedAstro endpoint returns the requested varga under the same ayanamsa/node/method contract.", + "differing_engines": [ + "VedAstro" + ], + "field": "Mars.sign", + "local_value": "Leo", + "oracle_values": { + "PyJHora_JHora": "Leo", + "VedAstro": "Aries", + "jyotishganit": "Leo" + }, + "section": "D2", + "truth_status": "unresolved" + }, + { + "category": "endpoint_or_varga_semantics", + "closure_requirement": "Confirm VedAstro endpoint returns the requested varga under the same ayanamsa/node/method contract.", + "differing_engines": [ + "VedAstro" + ], + "field": "Mercury.sign", + "local_value": "Leo", + "oracle_values": { + "PyJHora_JHora": "Leo", + "VedAstro": "Virgo", + "jyotishganit": "Leo" + }, + "section": "D2", + "truth_status": "unresolved" + }, + { + "category": "endpoint_or_varga_semantics", + "closure_requirement": "Confirm VedAstro endpoint returns the requested varga under the same ayanamsa/node/method contract.", + "differing_engines": [ + "VedAstro" + ], + "field": "Jupiter.sign", + "local_value": "Cancer", + "oracle_values": { + "PyJHora_JHora": "Cancer", + "VedAstro": "Aquarius", + "jyotishganit": "Cancer" + }, + "section": "D2", + "truth_status": "unresolved" + }, + { + "category": "endpoint_or_varga_semantics", + "closure_requirement": "Confirm VedAstro endpoint returns the requested varga under the same ayanamsa/node/method contract.", + "differing_engines": [ + "VedAstro" + ], + "field": "Venus.sign", + "local_value": "Cancer", + "oracle_values": { + "PyJHora_JHora": "Cancer", + "VedAstro": "Leo", + "jyotishganit": "Cancer" + }, + "section": "D2", + "truth_status": "unresolved" + }, + { + "category": "endpoint_or_varga_semantics", + "closure_requirement": "Confirm VedAstro endpoint returns the requested varga under the same ayanamsa/node/method contract.", + "differing_engines": [ + "VedAstro" + ], + "field": "Saturn.sign", + "local_value": "Cancer", + "oracle_values": { + "PyJHora_JHora": "Cancer", + "VedAstro": "Gemini", + "jyotishganit": "Cancer" + }, + "section": "D2", + "truth_status": "unresolved" + }, + { + "category": "endpoint_or_varga_semantics", + "closure_requirement": "Confirm VedAstro endpoint returns the requested varga under the same ayanamsa/node/method contract.", + "differing_engines": [ + "VedAstro" + ], + "field": "Moon.sign", + "local_value": "Gemini", + "oracle_values": { + "PyJHora_JHora": "Gemini", + "VedAstro": "Pisces", + "jyotishganit": "Gemini" + }, + "section": "D4", + "truth_status": "unresolved" + }, + { + "category": "endpoint_or_varga_semantics", + "closure_requirement": "Confirm VedAstro endpoint returns the requested varga under the same ayanamsa/node/method contract.", + "differing_engines": [ + "VedAstro" + ], + "field": "Moon.sign", + "local_value": "Scorpio", + "oracle_values": { + "PyJHora_JHora": "Scorpio", + "VedAstro": "Leo", + "jyotishganit": "Scorpio" + }, + "section": "D9", + "truth_status": "unresolved" + }, + { + "category": "endpoint_or_varga_semantics", + "closure_requirement": "Confirm VedAstro endpoint returns the requested varga under the same ayanamsa/node/method contract.", + "differing_engines": [ + "VedAstro" + ], + "field": "Moon.sign", + "local_value": "Pisces", + "oracle_values": { + "PyJHora_JHora": "Pisces", + "VedAstro": "Sagittarius", + "jyotishganit": "Pisces" + }, + "section": "D10", + "truth_status": "unresolved" + }, + { + "category": "ashtakavarga_table_or_contributor_variant", + "closure_requirement": "Compare contributor tables, Lagna inclusion, shodhana state, and BAV/SAV row semantics.", + "differing_engines": [ + "VedAstro" + ], + "field": "Sun", + "local_value": [ + 3, + 7, + 4, + 3, + 3, + 2, + 6, + 7, + 4, + 4, + 3, + 2 + ], + "oracle_values": { + "PyJHora_JHora": [ + 3, + 7, + 4, + 3, + 3, + 2, + 6, + 7, + 4, + 4, + 3, + 2 + ], + "VedAstro": [ + 3, + 7, + 3, + 2, + 3, + 3, + 6, + 7, + 4, + 3, + 4, + 3 + ], + "jyotishganit": [ + 3, + 7, + 4, + 3, + 3, + 2, + 6, + 7, + 4, + 4, + 3, + 2 + ] + }, + "section": "ashtakavarga_bav", + "truth_status": "unresolved" + }, + { + "category": "ashtakavarga_table_or_contributor_variant", + "closure_requirement": "Compare contributor tables, Lagna inclusion, shodhana state, and BAV/SAV row semantics.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Moon", + "local_value": [ + 4, + 4, + 4, + 3, + 6, + 5, + 3, + 3, + 4, + 5, + 3, + 5 + ], + "oracle_values": { + "PyJHora_JHora": [ + 4, + 4, + 4, + 3, + 6, + 5, + 3, + 3, + 4, + 5, + 3, + 5 + ], + "VedAstro": [ + 4, + 5, + 3, + 2, + 6, + 6, + 3, + 2, + 5, + 4, + 4, + 5 + ], + "jyotishganit": [ + 4, + 5, + 4, + 2, + 6, + 5, + 3, + 2, + 5, + 5, + 3, + 5 + ] + }, + "section": "ashtakavarga_bav", + "truth_status": "unresolved" + }, + { + "category": "ashtakavarga_table_or_contributor_variant", + "closure_requirement": "Compare contributor tables, Lagna inclusion, shodhana state, and BAV/SAV row semantics.", + "differing_engines": [ + "VedAstro" + ], + "field": "Mars", + "local_value": [ + 4, + 7, + 4, + 4, + 3, + 0, + 4, + 5, + 1, + 4, + 1, + 2 + ], + "oracle_values": { + "PyJHora_JHora": [ + 4, + 7, + 4, + 4, + 3, + 0, + 4, + 5, + 1, + 4, + 1, + 2 + ], + "VedAstro": [ + 4, + 7, + 3, + 4, + 2, + 1, + 4, + 5, + 2, + 3, + 2, + 2 + ], + "jyotishganit": [ + 4, + 7, + 4, + 4, + 3, + 0, + 4, + 5, + 1, + 4, + 1, + 2 + ] + }, + "section": "ashtakavarga_bav", + "truth_status": "unresolved" + }, + { + "category": "ashtakavarga_table_or_contributor_variant", + "closure_requirement": "Compare contributor tables, Lagna inclusion, shodhana state, and BAV/SAV row semantics.", + "differing_engines": [ + "VedAstro" + ], + "field": "Mercury", + "local_value": [ + 5, + 5, + 5, + 4, + 4, + 2, + 6, + 5, + 5, + 8, + 2, + 3 + ], + "oracle_values": { + "PyJHora_JHora": [ + 5, + 5, + 5, + 4, + 4, + 2, + 6, + 5, + 5, + 8, + 2, + 3 + ], + "VedAstro": [ + 5, + 5, + 4, + 5, + 3, + 2, + 7, + 4, + 6, + 8, + 2, + 3 + ], + "jyotishganit": [ + 5, + 5, + 5, + 4, + 4, + 2, + 6, + 5, + 5, + 8, + 2, + 3 + ] + }, + "section": "ashtakavarga_bav", + "truth_status": "unresolved" + }, + { + "category": "ashtakavarga_table_or_contributor_variant", + "closure_requirement": "Compare contributor tables, Lagna inclusion, shodhana state, and BAV/SAV row semantics.", + "differing_engines": [ + "VedAstro" + ], + "field": "Jupiter", + "local_value": [ + 7, + 5, + 3, + 3, + 4, + 7, + 4, + 5, + 4, + 6, + 5, + 3 + ], + "oracle_values": { + "PyJHora_JHora": [ + 7, + 5, + 3, + 3, + 4, + 7, + 4, + 5, + 4, + 6, + 5, + 3 + ], + "VedAstro": [ + 7, + 5, + 3, + 3, + 4, + 7, + 5, + 4, + 4, + 6, + 4, + 4 + ], + "jyotishganit": [ + 7, + 5, + 3, + 3, + 4, + 7, + 4, + 5, + 4, + 6, + 5, + 3 + ] + }, + "section": "ashtakavarga_bav", + "truth_status": "unresolved" + }, + { + "category": "ashtakavarga_table_or_contributor_variant", + "closure_requirement": "Compare contributor tables, Lagna inclusion, shodhana state, and BAV/SAV row semantics.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Venus", + "local_value": [ + 4, + 3, + 5, + 4, + 3, + 5, + 4, + 3, + 5, + 5, + 5, + 6 + ], + "oracle_values": { + "PyJHora_JHora": [ + 4, + 3, + 5, + 4, + 3, + 5, + 4, + 3, + 5, + 5, + 5, + 6 + ], + "VedAstro": [ + 4, + 3, + 4, + 4, + 4, + 4, + 4, + 2, + 5, + 6, + 6, + 6 + ], + "jyotishganit": [ + 4, + 3, + 5, + 3, + 4, + 5, + 4, + 3, + 5, + 5, + 5, + 6 + ] + }, + "section": "ashtakavarga_bav", + "truth_status": "unresolved" + }, + { + "category": "ashtakavarga_table_or_contributor_variant", + "closure_requirement": "Compare contributor tables, Lagna inclusion, shodhana state, and BAV/SAV row semantics.", + "differing_engines": [ + "VedAstro" + ], + "field": "Saturn", + "local_value": [ + 1, + 5, + 3, + 0, + 6, + 3, + 4, + 5, + 3, + 3, + 3, + 3 + ], + "oracle_values": { + "PyJHora_JHora": [ + 1, + 5, + 3, + 0, + 6, + 3, + 4, + 5, + 3, + 3, + 3, + 3 + ], + "VedAstro": [ + 1, + 5, + 2, + 0, + 5, + 4, + 4, + 4, + 4, + 2, + 4, + 4 + ], + "jyotishganit": [ + 1, + 5, + 3, + 0, + 6, + 3, + 4, + 5, + 3, + 3, + 3, + 3 + ] + }, + "section": "ashtakavarga_bav", + "truth_status": "unresolved" + }, + { + "category": "ashtakavarga_table_or_contributor_variant", + "closure_requirement": "Compare contributor tables, Lagna inclusion, shodhana state, and BAV/SAV row semantics.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "12_sign_scores", + "local_value": [ + 28, + 36, + 28, + 21, + 29, + 24, + 31, + 33, + 26, + 35, + 22, + 24 + ], + "oracle_values": { + "PyJHora_JHora": [ + 28, + 36, + 28, + 21, + 29, + 24, + 31, + 33, + 26, + 35, + 22, + 24 + ], + "VedAstro": [ + 24, + 28, + 37, + 28, + 19, + 30, + 24, + 31, + 32, + 27, + 35, + 22 + ], + "jyotishganit": [ + 28, + 37, + 28, + 19, + 30, + 24, + 31, + 32, + 27, + 35, + 22, + 24 + ] + }, + "section": "ashtakavarga_sav", + "truth_status": "unresolved" + }, + { + "category": "derived_total_from_component_variants", + "closure_requirement": "Do not arbitrate totals until all six component variants and Virupa/Rupa units are aligned.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Sun", + "local_value": 480.62, + "oracle_values": { + "PyJHora_JHora": 444.63, + "VedAstro": 395.06, + "jyotishganit": 422.007 + }, + "section": "shadbala_total", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Sun.sthana", + "local_value": 217.09, + "oracle_values": { + "PyJHora_JHora": 217.09, + "VedAstro": 202.0874074074074, + "jyotishganit": 153.341 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Sun.kala", + "local_value": 140.98, + "oracle_values": { + "PyJHora_JHora": 140.99, + "VedAstro": 128.0507461419753, + "jyotishganit": 148.893 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Sun.dig", + "local_value": 24.81, + "oracle_values": { + "PyJHora_JHora": 24.81, + "VedAstro": 24.810925925925925, + "jyotishganit": 29.175 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Sun.chesta", + "local_value": 36.0, + "oracle_values": { + "PyJHora_JHora": 0.0, + "VedAstro": 0.0, + "jyotishganit": 37.06 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Sun.drik", + "local_value": 1.74, + "oracle_values": { + "PyJHora_JHora": 1.74, + "VedAstro": -19.891041666666666, + "jyotishganit": -6.462 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "derived_total_from_component_variants", + "closure_requirement": "Do not arbitrate totals until all six component variants and Virupa/Rupa units are aligned.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Moon", + "local_value": 584.26, + "oracle_values": { + "PyJHora_JHora": 562.89, + "VedAstro": 421.8, + "jyotishganit": 420.655 + }, + "section": "shadbala_total", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Moon.sthana", + "local_value": 246.34, + "oracle_values": { + "PyJHora_JHora": 246.34, + "VedAstro": 236.69703703703703, + "jyotishganit": 141.341 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Moon.kala", + "local_value": 149.61, + "oracle_values": { + "PyJHora_JHora": 149.58, + "VedAstro": 159.53537962962963, + "jyotishganit": 183.112 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Moon.dig", + "local_value": 95.48, + "oracle_values": { + "PyJHora_JHora": 95.48, + "VedAstro": 52.26824074074074, + "jyotishganit": 20.159 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Moon.chesta", + "local_value": 21.34, + "oracle_values": { + "PyJHora_JHora": 0.0, + "VedAstro": 0.0, + "jyotishganit": 10.667 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Moon.drik", + "local_value": 20.06, + "oracle_values": { + "PyJHora_JHora": 20.06, + "VedAstro": -18.131319444444447, + "jyotishganit": 13.946 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "derived_total_from_component_variants", + "closure_requirement": "Do not arbitrate totals until all six component variants and Virupa/Rupa units are aligned.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Mars", + "local_value": 456.19, + "oracle_values": { + "PyJHora_JHora": 533.18, + "VedAstro": 397.89, + "jyotishganit": 438.227 + }, + "section": "shadbala_total", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Mars.sthana", + "local_value": 198.63, + "oracle_values": { + "PyJHora_JHora": 198.63, + "VedAstro": 221.28777777777776, + "jyotishganit": 232.378 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Mars.kala", + "local_value": 127.92, + "oracle_values": { + "PyJHora_JHora": 127.93, + "VedAstro": 148.2544363425926, + "jyotishganit": 106.407 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Mars.dig", + "local_value": 77.41, + "oracle_values": { + "PyJHora_JHora": 77.41, + "VedAstro": 2.3666666666666667, + "jyotishganit": 46.955 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Mars.chesta", + "local_value": 21.6, + "oracle_values": { + "PyJHora_JHora": 98.58, + "VedAstro": 21.737741162570256, + "jyotishganit": 22.864 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Mars.drik", + "local_value": 13.49, + "oracle_values": { + "PyJHora_JHora": 13.49, + "VedAstro": -12.978854166666672, + "jyotishganit": 12.483 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "derived_total_from_component_variants", + "closure_requirement": "Do not arbitrate totals until all six component variants and Virupa/Rupa units are aligned.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Mercury", + "local_value": 365.28, + "oracle_values": { + "PyJHora_JHora": 363.24, + "VedAstro": 376.04, + "jyotishganit": 241.84 + }, + "section": "shadbala_total", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Mercury.sthana", + "local_value": 167.96, + "oracle_values": { + "PyJHora_JHora": 167.96, + "VedAstro": 182.95805555555555, + "jyotishganit": 111.704 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Mercury.kala", + "local_value": 121.79, + "oracle_values": { + "PyJHora_JHora": 121.78, + "VedAstro": 126.59104166666665, + "jyotishganit": 72.089 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Mercury.dig", + "local_value": 12.64, + "oracle_values": { + "PyJHora_JHora": 12.64, + "VedAstro": 12.643148148148148, + "jyotishganit": 7.954 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Mercury.chesta", + "local_value": 47.8, + "oracle_values": { + "PyJHora_JHora": 45.78, + "VedAstro": 47.51070370816793, + "jyotishganit": 35.368 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Mercury.drik", + "local_value": -10.62, + "oracle_values": { + "PyJHora_JHora": -10.63, + "VedAstro": -19.363888888888884, + "jyotishganit": -10.985 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "derived_total_from_component_variants", + "closure_requirement": "Do not arbitrate totals until all six component variants and Virupa/Rupa units are aligned.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Jupiter", + "local_value": 569.4, + "oracle_values": { + "PyJHora_JHora": 596.89, + "VedAstro": 427.22, + "jyotishganit": 596.043 + }, + "section": "shadbala_total", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Jupiter.sthana", + "local_value": 201.81, + "oracle_values": { + "PyJHora_JHora": 201.8, + "VedAstro": 213.06314814814814, + "jyotishganit": 226.178 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Jupiter.kala", + "local_value": 199.32, + "oracle_values": { + "PyJHora_JHora": 199.31, + "VedAstro": 141.64764506172838, + "jyotishganit": 250.984 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Jupiter.dig", + "local_value": 80.59, + "oracle_values": { + "PyJHora_JHora": 80.6, + "VedAstro": 6.773333333333333, + "jyotishganit": 44.095 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Jupiter.chesta", + "local_value": 46.49, + "oracle_values": { + "PyJHora_JHora": 74.0, + "VedAstro": 46.05491068568356, + "jyotishganit": 36.424 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Jupiter.drik", + "local_value": 6.9, + "oracle_values": { + "PyJHora_JHora": 6.89, + "VedAstro": -14.818125000000006, + "jyotishganit": 4.072 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "derived_total_from_component_variants", + "closure_requirement": "Do not arbitrate totals until all six component variants and Virupa/Rupa units are aligned.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Venus", + "local_value": 406.93, + "oracle_values": { + "PyJHora_JHora": 408.64, + "VedAstro": 402.56, + "jyotishganit": 306.501 + }, + "section": "shadbala_total", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Venus.sthana", + "local_value": 154.06, + "oracle_values": { + "PyJHora_JHora": 154.06, + "VedAstro": 210.05953703703705, + "jyotishganit": 112.816 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Venus.kala", + "local_value": 113.45, + "oracle_values": { + "PyJHora_JHora": 113.44, + "VedAstro": 97.43954166666667, + "jyotishganit": 63.186 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Venus.dig", + "local_value": 69.95, + "oracle_values": { + "PyJHora_JHora": 69.95, + "VedAstro": 29.630740740740737, + "jyotishganit": 45.684 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Venus.chesta", + "local_value": 29.36, + "oracle_values": { + "PyJHora_JHora": 31.08, + "VedAstro": 30.84685510809705, + "jyotishganit": 46.466 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Venus.drik", + "local_value": -2.75, + "oracle_values": { + "PyJHora_JHora": -2.75, + "VedAstro": -8.51038194444445, + "jyotishganit": -4.511 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "derived_total_from_component_variants", + "closure_requirement": "Do not arbitrate totals until all six component variants and Virupa/Rupa units are aligned.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Saturn", + "local_value": 430.05, + "oracle_values": { + "PyJHora_JHora": 429.42, + "VedAstro": 448.58, + "jyotishganit": 322.113 + }, + "section": "shadbala_total", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Saturn.sthana", + "local_value": 218.61, + "oracle_values": { + "PyJHora_JHora": 218.61, + "VedAstro": 239.23268518518518, + "jyotishganit": 151.104 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Saturn.kala", + "local_value": 136.76, + "oracle_values": { + "PyJHora_JHora": 136.77, + "VedAstro": 140.7160763888889, + "jyotishganit": 71.929 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Saturn.dig", + "local_value": 19.63, + "oracle_values": { + "PyJHora_JHora": 19.62, + "VedAstro": 19.623796296296295, + "jyotishganit": 24.313 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "PyJHora_JHora", + "VedAstro", + "jyotishganit" + ], + "field": "Saturn.chesta", + "local_value": 36.99, + "oracle_values": { + "PyJHora_JHora": 36.36, + "VedAstro": 39.438983295527784, + "jyotishganit": 58.137 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + }, + { + "category": "shadbala_formula_variant", + "closure_requirement": "Compare component formula, units, local solar context, aspect model, and Chesta lineage before totals.", + "differing_engines": [ + "VedAstro", + "jyotishganit" + ], + "field": "Saturn.drik", + "local_value": 9.49, + "oracle_values": { + "PyJHora_JHora": 9.49, + "VedAstro": 0.9979513888888878, + "jyotishganit": 8.06 + }, + "section": "shadbala_components", + "truth_status": "unresolved" + } + ], + "scope": "three_engine_field_level_mismatch_arbitration", + "status": "classified_unresolved", + "truth_policy": "no_majority_vote", + "unclassified_count": 0 +} diff --git a/references/oracle/vedastro_identity_archive_2026_07_19.json b/references/oracle/vedastro_identity_archive_2026_07_19.json new file mode 100644 index 00000000..548a9f42 --- /dev/null +++ b/references/oracle/vedastro_identity_archive_2026_07_19.json @@ -0,0 +1,76 @@ +{ + "boundary": "This archive fixes a NuGet self-host candidate identity only; it does not prove the hosted API is running this package or the same method semantics.", + "catalog_commit_id": "c707690b-f7bd-4813-a2cb-876e943e9667", + "catalog_commit_timestamp": "2023-03-22T22:24:11.811524Z", + "dependencies": [ + { + "id": "ByteSize", + "range": "[2.1.1, )", + "target_framework": "net7.0" + }, + { + "id": "Google.Apis", + "range": "[1.51.0, )", + "target_framework": "net7.0" + }, + { + "id": "Google.Apis.Auth", + "range": "[1.51.0, )", + "target_framework": "net7.0" + }, + { + "id": "Google.Apis.Calendar.v3", + "range": "[1.51.0.2237, )", + "target_framework": "net7.0" + }, + { + "id": "Google.Apis.Core", + "range": "[1.51.0, )", + "target_framework": "net7.0" + }, + { + "id": "Microsoft.AspNetCore.Components.WebAssembly", + "range": "[6.0.11, )", + "target_framework": "net7.0" + }, + { + "id": "Microsoft.Extensions.Caching.Memory", + "range": "[6.0.1, )", + "target_framework": "net7.0" + }, + { + "id": "Microsoft.JSInterop", + "range": "[6.0.11, )", + "target_framework": "net7.0" + }, + { + "id": "SwissEphNet", + "range": "[2.8.0.2, )", + "target_framework": "net7.0" + } + ], + "hosted_api_blocker": "api.vedastro.org does not expose a verified build commit, package hash, DLL hash, assembly version, container digest, or method-semantics contract.", + "hosted_api_status": "blocked", + "license": "MIT", + "nuget_catalog_url": "https://api.nuget.org/v3/catalog0/data/2023.03.22.22.24.11/vedastro.library.1.2.0.json", + "nuget_registration_url": "https://api.nuget.org/v3/registration5-semver1/vedastro.library/1.2.0.json", + "package": "VedAstro.Library", + "package_content_url": "https://api.nuget.org/v3-flatcontainer/vedastro.library/1.2.0/vedastro.library.1.2.0.nupkg", + "package_hash": "36gq1hggII7Ho27TSL2B85P0BQD1zsAE1xHoJgUrM9V5rnUJGXUZibDlutkXR9gJ+aMr8UCQa2771MfD6BAscA==", + "package_hash_algorithm": "SHA512", + "package_size": 230836, + "project_url": "https://vedastro.org/", + "published": "2023-03-22T22:22:01.81Z", + "required_self_host_evidence": { + "assembly_version": null, + "container_image_digest": null, + "dll_sha256": null, + "nuget_package_hash": "36gq1hggII7Ho27TSL2B85P0BQD1zsAE1xHoJgUrM9V5rnUJGXUZibDlutkXR9gJ+aMr8UCQa2771MfD6BAscA==", + "public_method_inventory": null, + "source_commit": null + }, + "scope": "vedastro_reproducible_identity_archive", + "self_host_candidate_status": "reproducible_package_identity_archived", + "truth_upgrade_gate": "blocked_until_source_commit_dll_hash_assembly_version_method_inventory_and_image_digest_are_archived", + "version": "1.2.0" +} diff --git a/tests/test_shadbala_av_normative_benchmark_plan.py b/tests/test_shadbala_av_normative_benchmark_plan.py new file mode 100644 index 00000000..2d830996 --- /dev/null +++ b/tests/test_shadbala_av_normative_benchmark_plan.py @@ -0,0 +1,42 @@ +from __future__ import annotations + +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +PLAN = ROOT / "docs" / "research" / "shadbala_av_normative_benchmark_plan_2026_07_19.md" + + +def test_shadbala_av_plan_keeps_current_closure_separate_from_global_truth() -> None: + text = PLAN.read_text(encoding="utf-8") + + for token in [ + "current target set: `external_verified`", + "`can_claim_shadbala_absolute_closure = true`", + "`production_tuning_allowed = false`", + "must not claim universal Shadbala or AV truth", + "60 mismatches, 60 classified, 0 unclassified", + "no majority vote", + ]: + assert token in text + + +def test_shadbala_av_plan_requires_component_units_and_license_boundaries() -> None: + text = PLAN.read_text(encoding="utf-8") + + for token in [ + "VP Jain", + "Xalen", + "PyJHora/JHora", + "jyotishganit", + "Virupa vs Rupa must be explicit", + "`sthana`", + "`dig`", + "`kala`", + "`chesta`", + "`naisargika`", + "`drik`", + "`total_rupa`", + "AGPL implementation code", + "Independent ephemeris mode", + ]: + assert token in text diff --git a/tests/test_three_engine_mismatch_arbitrator.py b/tests/test_three_engine_mismatch_arbitrator.py index 2d697631..be3ac9d0 100644 --- a/tests/test_three_engine_mismatch_arbitrator.py +++ b/tests/test_three_engine_mismatch_arbitrator.py @@ -33,3 +33,15 @@ def test_vedastro_only_d2_difference_is_endpoint_semantics(tmp_path: Path) -> No row = arbitrate_manifest(path)["rows"][0] assert row["category"] == "endpoint_or_varga_semantics" 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") + + assert report["mismatch_count"] == 60 + assert report["classified_count"] == 60 + assert report["unclassified_count"] == 0 + assert report["truth_policy"] == "no_majority_vote" + assert "commercial_sync: `status_and_claim_boundary_only`" in markdown + assert "Do not copy raw research debt into commercial runtime" in markdown diff --git a/tests/test_vedastro_identity_closure_plan.py b/tests/test_vedastro_identity_closure_plan.py new file mode 100644 index 00000000..ecbbe476 --- /dev/null +++ b/tests/test_vedastro_identity_closure_plan.py @@ -0,0 +1,35 @@ +from __future__ import annotations + +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +DOC = ROOT / "docs" / "research" / "vedastro_identity_closure_plan_2026_07_19.md" + + +def test_vedastro_identity_plan_keeps_hosted_output_observation_only() -> None: + text = DOC.read_text(encoding="utf-8") + + for token in [ + "VedAstro hosted API remains observation-only", + "build identity, method semantics, and deployment version are not archived", + "does not prove which side is true", + "tune production predictions from hosted output with unknown build identity", + "silently prefer VedAstro or local output by majority vote", + ]: + assert token in text + + +def test_vedastro_identity_plan_requires_self_host_supply_chain_fields() -> None: + text = DOC.read_text(encoding="utf-8") + + for token in [ + "source commit", + "NuGet package hash", + "DLL SHA-256", + "assembly version", + "public method inventory", + "container image digest", + "required_self_host_evidence", + "truth_upgrade_gate", + ]: + assert token in text