YOKPilot3 / tools /run_decision_runtime_checks.py
mfirat007's picture
Upload 3 files
7e2a2f2 verified
Raw
History Blame Contribute Delete
3.1 kB
from __future__ import annotations
import json
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from decision_runtime import NormativeDecisionRuntime
def main() -> int:
registry = json.loads((ROOT / "data" / "registry" / "normative_decision_contracts.json").read_text(encoding="utf-8"))
runtime = NormativeDecisionRuntime(registry["contracts"], "test-build")
cases = [
(
"decided_terminate",
runtime.evaluate("open_education_enrollment_status", {"education_mode": "OPEN_EDUCATION", "consecutive_terms_conditions_not_met": 4}),
"DECIDED",
),
(
"decided_continue",
runtime.evaluate("open_education_enrollment_status", {"education_mode": "OPEN_EDUCATION", "consecutive_terms_conditions_not_met": 3}),
"DECIDED",
),
(
"missing_fact",
runtime.evaluate("open_education_enrollment_status", {"education_mode": "OPEN_EDUCATION"}),
"UNKNOWN",
),
(
"legal_judgment",
runtime.evaluate("remote_education_rector_assistant_limit", {"central_open_education_university": True}),
"REQUIRES_JUDGMENT",
),
("unknown_scope", runtime.evaluate("not_published", {}), "OUT_OF_SCOPE"),
]
conflict_contract = {
"contract_id": "TEST_CONFLICT",
"decision_type": "conflict_test",
"source_refs": [{"document_id": "TEST", "article_id": "Madde 1"}],
"input_schema": {"fields": {"x": {"required": True}}},
"rules": [
{"rule_id": "a", "priority": 10, "when": {"all": [{"fact": "x", "operator": "eq", "value": 1}]}, "outcome": "YES"},
{"rule_id": "b", "priority": 10, "when": {"all": [{"fact": "x", "operator": "eq", "value": 1}]}, "outcome": "NO"},
],
}
conflict_runtime = NormativeDecisionRuntime([conflict_contract], "test-conflict")
cases.append(("conflict", conflict_runtime.evaluate("conflict_test", {"x": 1}), "CONFLICT"))
failures = []
for name, result, expected in cases:
if result.get("status") != expected:
failures.append(f"{name}: {result.get('status')} != {expected}")
first = runtime.evaluate("open_education_enrollment_status", {"education_mode": "OPEN_EDUCATION", "consecutive_terms_conditions_not_met": 4})
second = runtime.evaluate("open_education_enrollment_status", {"consecutive_terms_conditions_not_met": 4, "education_mode": "OPEN_EDUCATION"})
if first != second:
failures.append("determinism: identical facts produced different results")
if runtime.governance_report().get("warning_count", 0) < 1:
failures.append("governance: expected at least one legal judgment warning")
if failures:
print("FAIL")
print("\n".join(failures))
return 1
print(f"PASS decision runtime: {len(cases)} status cases + determinism + governance")
return 0
if __name__ == "__main__":
raise SystemExit(main())