from pathlib import Path
import json
R=Path(__file__).resolve().parent
cases=json.loads((R/'fixtures/cases.json').read_text(encoding='utf-8'))['cases']
assert len(cases)==8
required={'id','approval_event','status_events','request','history_event_hash_observed','provenance'}
approval_required={'approval_event_id','approved_subject_ref','subject_digest','reviewer_id','reviewer_role','policy_id','policy_version','approval_scope','approval_timestamp','valid_from','valid_until','approval_evidence_ref','event_hash'}
request_required={'subject_digest','effective_policy_version','requested_scope','decision_time'}
for case in cases:
    assert required.issubset(case), (case.get('id'), sorted(required-set(case)))
    assert approval_required.issubset(case['approval_event'])
    assert request_required.issubset(case['request'])
    for e in case['status_events']:
        assert {'status_event_id','status_purpose','effective_at','reason'}.issubset(e)
print('PASS 8/8 learner fixtures structurally valid')
