from pathlib import Path
import json,ast
P=Path(__file__).resolve().parent
cases=json.loads((P/'fixtures/cases.json').read_text(encoding='utf-8'))['cases']
assert len(cases)==8
assert len({c['id'] for c in cases})==8
ast.parse((P/'starter.py').read_text(encoding='utf-8'))
required=['protocol_version','supported_versions','sender_role','receiver_role','operation','message_type','confirmation_required','capabilities','duplicate_seen','deadline_state','unknown_field_kind','retired_field_reused','transport']
for c in cases:
    for k in required: assert k in c,(c['id'],k)
assert any(c['id']=='case_08' and c['transport']=='windows_local' and c.get('new_optional_response_field') and c.get('retired_field_reserved') for c in cases)
print('PASS learner structural checks: 8 synthetic cases, Windows transport/schema transfer present, starter parses, no hidden labels required')
