Files
Jyotisha/scripts/jyotishganit_mismatch_attribution_queue.py
T
2026-07-21 16:52:58 +08:00

63 lines
2.1 KiB
Python

#!/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())