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','baseline_present','hypothesis','hypothesis_falsifiable','fault','target','allowed_targets','blast_radius','scope_allowed','guardrail_metric','guardrail_threshold','observed_guardrail','stop_triggered','required_signals','observed_signals','process_alive_after','recovery_within_baseline','transfer'}
assert all(required <= set(c) for c in cases)
assert any(c['observed_guardrail']>c['guardrail_threshold'] and c['stop_triggered'] for c in cases)
assert any(c['process_alive_after'] and c['recovery_within_baseline'] is False for c in cases)
assert any(set(c['required_signals'])-set(c['observed_signals']) for c in cases)
assert any(not c['scope_allowed'] for c in cases)
assert any(not c['baseline_present'] for c in cases)
assert any(c['transfer'] for c in cases)
print('PASS: 8 synthetic failure-experiment fixtures are structurally valid; implement analyze_experiment(case) in starter.py')
