import json,os,pathlib,subprocess,sys
os.umask(0o077)
R=pathlib.Path(__file__).parent;mode=sys.argv[1]
plan=json.loads((R/'plan.json').read_text())
actual=dict(x.split('=',1) for x in plan['analytics']['Config']['Env'])
image=json.loads((R/'build.json').read_text())['image_id'] if mode=='image' else 'sha256:69f4d11089a88dc41b82df56439bd9b73ac1c1a669695389e3495848457bf9f6'
source=R/'snapshot' if mode=='image' else pathlib.Path('/workspace/contextra-analytics-runtime-lifecycle-refactor')
name='codex-rtp-loader-'+mode
args=['docker','run','--rm','--pull','never','--runtime','runc','--network','none','--name',name,'--cap-drop','MKNOD','--cpus','2','--memory','4g','--ulimit','core=0','-e','NVIDIA_VISIBLE_DEVICES=void','-e','PYTHONDONTWRITEBYTECODE=1','-e','PYTHONPATH='+('/opt/contextra' if mode=='image' else '/source:/opt/contextra'),'-e','GST_REGISTRY=/evidence/'+mode+'-registry.bin','-e','GST_PLUGIN_PATH='+actual.get('GST_PLUGIN_PATH',''),'-e','LD_LIBRARY_PATH=/driver:'+actual.get('LD_LIBRARY_PATH','')]
for src,dst,ro in [(str(source),'/source',True),(str(R),'/evidence',False),('/usr/lib/x86_64-linux-gnu/libcuda.so.595.84','/driver/libcuda.so.1',True),('/tmp/codex/ltb1021/2026-09-11_contextra-frame-abi_r01/build/fixture.so','/fixture.so',True),('/tmp/codex/ltb1021/2026-09-12_contextra-rtp-anchor_r01/rtp-fixture.so','/rtp-fixture.so',True),('/tmp/codex/ltb1021/2026-09-11_contextra-frame-abi_r01/header-env/lib/python3.12/site-packages/pybind11/include','/headers',True)]:
    args+=['--mount',f'type=bind,src={src},dst={dst}'+(',readonly' if ro else '')]
args+=['-w','/opt/contextra','--entrypoint','timeout',image,'150s','python3','/evidence/check.py',mode]
try:
    p=subprocess.run(args,capture_output=True,text=True,timeout=170)
    (R/(mode+'-console.log')).write_text(p.stdout+p.stderr)
    print(p.stdout[-600:]);print('exit',p.returncode)
finally:
    if subprocess.run(['docker','inspect',name],capture_output=True,timeout=10).returncode==0:
        subprocess.run(['docker','stop','--timeout','5',name],capture_output=True,timeout=15)
