59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
"""Readiness report for the experimental Rangacharya variant."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
from typing import Any, Dict
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parent.parent
|
|
CARDS_PATH = ROOT / "references" / "rangacharya_source_cards.json"
|
|
MANIFEST_PATH = ROOT / "references" / "rangacharya_source_manifest.json"
|
|
|
|
|
|
def _load_json(path: Path) -> Dict[str, Any]:
|
|
try:
|
|
return json.loads(path.read_text(encoding="utf-8"))
|
|
except (FileNotFoundError, json.JSONDecodeError):
|
|
return {}
|
|
|
|
|
|
def build_report() -> Dict[str, Any]:
|
|
cards_payload = _load_json(CARDS_PATH)
|
|
manifest_payload = _load_json(MANIFEST_PATH)
|
|
cards = {}
|
|
blocked = []
|
|
transcribed = []
|
|
for card in cards_payload.get("cards", []):
|
|
card_id = str(card.get("id") or "")
|
|
if not card_id:
|
|
continue
|
|
status = str(card.get("status") or "blocked")
|
|
adjudication_enabled = bool(card.get("adjudication_enabled"))
|
|
cards[card_id] = {
|
|
"status": status,
|
|
"adjudication_enabled": adjudication_enabled,
|
|
"blocked_reason": card.get("blocked_reason") or "",
|
|
}
|
|
if status == "blocked" or not adjudication_enabled:
|
|
blocked.append(card_id)
|
|
if status == "transcribed":
|
|
transcribed.append(card_id)
|
|
return {
|
|
"scope": "rangacharya_readiness",
|
|
"manifest_available": bool(manifest_payload),
|
|
"source_cards_available": bool(cards_payload),
|
|
"adjudication_enabled": bool(cards) and not blocked,
|
|
"card_count": len(cards),
|
|
"blocked_count": len(blocked),
|
|
"transcribed_count": len(transcribed),
|
|
"blocked_cards": blocked,
|
|
"transcribed_cards": transcribed,
|
|
"cards": cards,
|
|
}
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(json.dumps(build_report(), ensure_ascii=False, indent=2, sort_keys=True))
|