docs: sync oracle claim boundaries

This commit is contained in:
732642856
2026-07-19 08:37:24 +08:00
parent 05948cde7f
commit 5298b49a89
8 changed files with 1792 additions and 0 deletions
@@ -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.
@@ -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.
@@ -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.
File diff suppressed because it is too large Load Diff
@@ -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"
}
@@ -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
@@ -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
@@ -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