docs: sync oracle claim boundaries
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user