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=['supervisor_identity','executor_identity','privilege_drop','requested_caps','allowed_caps','effective_caps','isolation_available','requested_paths','allowed_roots','network_requested','network_allowed','spawn_requested','spawn_allowed','secret_exposed']
for c in cases:
    for k in required: assert k in c,(c['id'],k)
assert any(c['id']=='case_08' and c.get('transfer') and c['network_requested']==['api.example.test:443'] and not c['spawn_requested'] and not c['secret_exposed'] for c in cases)
print('PASS learner structural checks: 8 synthetic cases, narrow-network transfer present, starter parses, no hidden labels required')
