from pathlib import Path
import json,sys
R=Path(__file__).resolve().parent; sys.path.insert(0,str(R))
from gate_rules import evaluate,inspect_transfer

def load(rel): return json.loads((R/rel).read_text())
tests=[]
def check(name,actual,expected):
    ok=actual==expected; tests.append((name,ok,actual,expected)); print(('PASS' if ok else 'FAIL'),name,actual,'expected',expected); return ok
check('baseline',evaluate(load('fixtures/baseline.json'))['state'],'LEARNER_CHOICE_REVIEW_REQUIRED')
check('missing_behavior_signals',evaluate(load('fixtures/missing_behavior_signals.json'))['state'],'UNKNOWN_INSUFFICIENT_SIGNALS')
check('medical_diagnosis_label',evaluate(load('fixtures/medical_diagnosis_label.json'))['state'],'HOLD_MEDICAL_BOUNDARY')
check('missing_spacing_context',evaluate(load('fixtures/missing_spacing_context.json'))['state'],'HOLD_SPACING_LOAD_CONTEXT')
check('missing_recent_load',evaluate(load('fixtures/missing_recent_load.json'))['state'],'HOLD_SPACING_LOAD_CONTEXT')
check('retention_contradiction_ignored',evaluate(load('fixtures/retention_contradiction_ignored.json'))['state'],'INCONCLUSIVE_CONFLICTING_EVIDENCE')
check('punitive_forced_pause',evaluate(load('fixtures/punitive_forced_pause.json'))['state'],'HOLD_PUNITIVE_INTERVENTION')
check('dropped_learner_override',evaluate(load('fixtures/dropped_learner_override.json'))['state'],'HOLD_OVERRIDE_VISIBILITY')
check('missing_provenance',evaluate(load('fixtures/missing_provenance.json'))['state'],'HOLD_PROVENANCE')
check('missing_retention_reference',evaluate(load('fixtures/missing_retention_reference.json'))['state'],'UNKNOWN_RETENTION_CONTEXT')
check('transfer_recomputed',inspect_transfer(load('transfer/transfer_fixture.json'))['state'],'LEARNER_CHOICE_REVIEW_REQUIRED')
check('transfer_oracle_reuse',inspect_transfer(load('transfer/transfer_baseline_oracle_reuse.json'))['state'],'HOLD_BASELINE_ORACLE_REUSE')
print(f'SUMMARY {sum(x[1] for x in tests)}/{len(tests)} PASS')
raise SystemExit(0 if all(x[1] for x in tests) else 1)
