189 lines
6.7 KiB
Python
189 lines
6.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Build a bounded compatibility/synastry skill readiness dashboard.
|
|
|
|
This is governance glue, not a truth engine. It records which relationship
|
|
layers are callable, which are registry-only, and which must stay blocked.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
OUT = ROOT / "references" / "oracle" / "compatibility_skill_readiness_dashboard_2026_07_20.json"
|
|
|
|
|
|
def exists(path: str) -> bool:
|
|
return (ROOT / path).exists()
|
|
|
|
|
|
def layer(
|
|
layer_id: str,
|
|
name: str,
|
|
runtime_path: str | None,
|
|
runtime_status: str,
|
|
skill_status: str,
|
|
api_ui_status: str,
|
|
external_oracle_status: str,
|
|
commercial_sync_status: str,
|
|
claim_boundary: str,
|
|
evidence: list[str] | None = None,
|
|
) -> dict:
|
|
paths = list(evidence or [])
|
|
if runtime_path:
|
|
paths.insert(0, runtime_path)
|
|
return {
|
|
"layer_id": layer_id,
|
|
"name": name,
|
|
"runtime_status": runtime_status,
|
|
"runtime_path": runtime_path,
|
|
"runtime_path_exists": exists(runtime_path) if runtime_path else False,
|
|
"skill_status": skill_status,
|
|
"api_ui_status": api_ui_status,
|
|
"external_oracle_status": external_oracle_status,
|
|
"commercial_sync_status": commercial_sync_status,
|
|
"evidence_paths": paths,
|
|
"claim_boundary": claim_boundary,
|
|
}
|
|
|
|
|
|
def build() -> dict:
|
|
layers = [
|
|
layer(
|
|
"ashtakoota_guna_milan",
|
|
"Ashtakoota / Guna Milan",
|
|
"scripts/ashtakoot.py",
|
|
"available",
|
|
"callable_basic",
|
|
"surface_audit_needed",
|
|
"partial",
|
|
"basic_safe_with_boundary",
|
|
"36-point compatibility can be exposed as one factor only; not deterministic marriage outcome.",
|
|
["references/oracle/ashtakoot_oracle_cases.json", "scripts/synastry.py"],
|
|
),
|
|
layer(
|
|
"mangal_dosha",
|
|
"Mangal / Kuja Dosha matching",
|
|
"scripts/ashtakoot.py",
|
|
"available",
|
|
"callable_basic",
|
|
"surface_audit_needed",
|
|
"partial",
|
|
"basic_safe_with_boundary",
|
|
"Use as risk flag and cancellation check; never as standalone rejection verdict.",
|
|
),
|
|
layer(
|
|
"d9_navamsa_relationship",
|
|
"D9 Navamsa relationship layer",
|
|
"scripts/relationship_analysis.py",
|
|
"available",
|
|
"callable_context",
|
|
"surface_audit_needed",
|
|
"partial",
|
|
"safe_as_context",
|
|
"D9 can support relationship analysis; timing/outcome claims still require Dasha, transits, and external calibration.",
|
|
["references/navamsa-marriage-deep-analysis.md"],
|
|
),
|
|
layer(
|
|
"darakaraka",
|
|
"Darakaraka spouse significator",
|
|
"scripts/darakaraka_reader.py",
|
|
"available",
|
|
"callable_context",
|
|
"surface_audit_needed",
|
|
"source_reference_only",
|
|
"safe_as_context",
|
|
"May describe spouse/relationship themes; not a compatibility score or event proof.",
|
|
["references/darakaraka-complete-guide.md"],
|
|
),
|
|
layer(
|
|
"upapada_lagna",
|
|
"Upapada Lagna marriage image",
|
|
"scripts/jaimini.py",
|
|
"available_as_chart_field",
|
|
"callable_context",
|
|
"surface_audit_needed",
|
|
"source_reference_only",
|
|
"safe_as_context",
|
|
"UL is a relationship image layer; must not replace full chart, D9, Dasha, or event evidence.",
|
|
["references/data-bridge-mapping.md", "references/jaimini-complete-system.md"],
|
|
),
|
|
layer(
|
|
"relationship_combinations",
|
|
"Relationship rule-family combinations",
|
|
None,
|
|
"registry_only",
|
|
"contract_only",
|
|
"no_runtime_surface",
|
|
"missing",
|
|
"research_only",
|
|
"Indexed rule families still need source packets, deduplication, tests, and claim gates before runtime use.",
|
|
["references/oracle/relationship_combinations_rule_family_registry_2026_07_19.json"],
|
|
),
|
|
layer(
|
|
"relationship_ashtakavarga_overlay",
|
|
"Relationship Ashtakavarga overlay",
|
|
None,
|
|
"missing_runtime",
|
|
"not_invoked",
|
|
"no_runtime_surface",
|
|
"missing",
|
|
"blocked_until_oracle",
|
|
"Do not expose relationship AV overlay until rules, examples, and field-level oracle packets exist.",
|
|
["references/oracle/ashtakavarga_advanced_usage_gap_registry_2026_07_19.json"],
|
|
),
|
|
layer(
|
|
"planet_lagna_kuta",
|
|
"Planet/Lagna Kuta variants",
|
|
None,
|
|
"registry_only",
|
|
"not_invoked",
|
|
"no_runtime_surface",
|
|
"missing",
|
|
"blocked_until_oracle",
|
|
"Do not claim full top-tier compatibility until Planet/Lagna Kuta variants and worked examples are validated.",
|
|
["references/oracle/compatibility_full_system_gap_registry_2026_07_19.json"],
|
|
),
|
|
layer(
|
|
"western_composite_davidson_boundary",
|
|
"Western composite / Davidson boundary",
|
|
None,
|
|
"out_of_scope",
|
|
"not_invoked",
|
|
"no_vedic_surface",
|
|
"not_applicable_vedic_core",
|
|
"out_of_scope_for_vedic_core",
|
|
"Keep out of Vedic commercial runtime unless explicitly scoped as cross-system research.",
|
|
),
|
|
]
|
|
return {
|
|
"scope": "compatibility_skill_readiness_dashboard",
|
|
"created_at": "2026-07-20",
|
|
"status": "dashboard_v1",
|
|
"claim_status": "partial",
|
|
"production_tuning_allowed": False,
|
|
"truth_matrix_allowed": False,
|
|
"summary": {
|
|
"layer_count": len(layers),
|
|
"runtime_available_count": sum(1 for x in layers if x["runtime_status"] in {"available", "available_as_chart_field"}),
|
|
"blocked_or_registry_only_count": sum(1 for x in layers if x["commercial_sync_status"] in {"research_only", "blocked_until_oracle", "out_of_scope_for_vedic_core"}),
|
|
"oracle_ready_count": 0,
|
|
},
|
|
"skill_use_policy": {
|
|
"allowed": "Expose basic compatibility factors and relationship context with explicit low/partial evidence boundaries.",
|
|
"forbidden": "Do not present any layer as deterministic marriage success, divorce prediction, exact relationship timing, or complete synastry truth.",
|
|
},
|
|
"layers": layers,
|
|
}
|
|
|
|
|
|
def main() -> None:
|
|
OUT.write_text(json.dumps(build(), ensure_ascii=False, indent=2) + "\n")
|
|
print(OUT)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|