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
src=(P/'starter.py').read_text(encoding='utf-8'); ast.parse(src)
for c in cases:
    for k in ['bootstrap_id','bootstrap_consumed','bootstrap_bound_node','request_node','expected_selectors','observed_selectors','now','not_before','not_after','current_generation','presented_generation','overlap_allowed']:
        assert k in c
assert any(c['id']=='case_08' and any(str(x).startswith('k8s:') for x in c['observed_selectors']) for c in cases)
print('PASS learner structural checks: 8 synthetic cases, material container transfer present, starter parses, no hidden labels required')
