import importlib.util,json,os,shutil,urllib.request
from pathlib import Path
os.umask(0o077)
R=Path(__file__).parent
P=Path('/tmp/codex/ltb1021/2026-09-14_contextra-fire-api-runtime_r01')
s=importlib.util.spec_from_file_location('gate','/tmp/codex/ltb1021/2026-09-11_service-stop_r01/gate.py')
g=importlib.util.module_from_spec(s);s.loader.exec_module(g)
HEAD='a4832fdcd8e009c4d5be326b6060cfdf47700632'
if __name__=='__main__':
    assert not (R/'plan.json').exists()
    assert g.sh(['git','-C',str(g.REPO),'rev-parse','HEAD']).strip()==HEAD
    assert not g.sh(['git','-C',str(g.REPO),'status','--porcelain']).strip()
    c=g.inspect();assert c['State']['Health']['Status']=='healthy'
    env=g.load_env_file(str(g.ENV));overlay=Path(env['CONTEXTRA_RUNTIME_STATE_ROOT'])/'streams_runtime.yaml';active=g.ENV.parent/'metadata-active/compose.yaml'
    op=urllib.request.build_opener(urllib.request.ProxyHandler({}))
    with op.open('http://127.0.0.1:'+env['FASTAPI_HOST_PORT']+'/api/v1/streams',timeout=3) as f:streams=json.load(f)['streams']
    assert len(streams)==1 and streams[0]['state']=='stopped'
    old=json.loads((P/'plan.json').read_text());model=json.loads((P/'model-prepared.json').read_text());directory=Path(model['directory'])
    assert g.sha(directory/'2/model.plan')==old['fire_plan_hash'] and g.sha(directory/'config.pbtxt')==model['config_hash']
    assert all(g.sha(Path(p))==h for p,h in old['pose_hashes'].items())
    assert g.sha(g.CFG)==old['config_hash'] and g.sha(g.CFG.parent/'2/model.plan')==old['plan_hash']
    approved=Path('/tmp/codex/ltb1021/2026-09-13_contextra-capture-isolation_r01/approved-input.json')
    inp=json.loads(approved.read_text());assert g.sha(Path(inp['path']))==inp['hash']
    root=g.sh(['docker','info','--format','{{.DockerRootDir}}']).strip();free=shutil.disk_usage(root).free;assert free>=15*1024**3
    for name,path in [('env.before',g.ENV),('overlay.before',overlay),('active-compose.before',active),('approved-input.json',approved)]:shutil.copyfile(path,R/name)
    for name in ('samples','diagnostics'):(R/name).mkdir(mode=0o700)
    (R/'baseline_intrusion.py').write_text(g.sh(['git','-C',str(g.REPO),'show',HEAD+':app/intrusion.py']))
    plan=dict(started_utc='2026-09-14T05:21:36Z',head=HEAD,analytics=c,controls=str(active.parent),other_containers=g.others(),gpu_mib=g.gpu(),disk_free=free,env_hash=g.sha(g.ENV),overlay=str(overlay),overlay_hash=g.sha(overlay),active_hash=g.sha(active),config_hash=g.sha(g.CFG),plan_hash=g.sha(g.CFG.parent/'2/model.plan'),pose_hashes=old['pose_hashes'],fire_model=model,normal_restart=c['HostConfig']['RestartPolicy'])
    (R/'plan.json').write_text(json.dumps(plan,indent=2));(R/'budget.json').write_text(json.dumps(dict(started_at='2026-09-14T05:21:36Z',failed_groups=0,groups=[]),indent=2))
    print(json.dumps(dict(healthy=True,stopped=True,models_unchanged=True,disk_gib=round(free/1024**3,2),gpu_mib=plan['gpu_mib'])))
