import pathlib,sys,json,hashlib,io,tarfile,base64
R=pathlib.Path(__file__).resolve().parent.parent
sys.path.insert(0,str(R.parent/'2026-10-27_contextra-four-scenarios-prep_r01/helpers'))
import batch_job as b
remote='/storage/contextra/experiments/action-model-eval/2026/'+R.name
O=R/'Contextra_20Clips_Engine_Review'
files=[p for p in O.rglob('*') if p.is_file() and p.name in ('frame_lists.json','frame_map.csv','comparison.csv','00_README_ko.md','SHA256.json')]
files += [p for p in (O/'verification').rglob('*') if p.is_file()]
files += [p for p in R.iterdir() if p.is_file() and p.suffix in ('.json','.md')]
files += list((R/'helpers').glob('*.py'))
buf=io.BytesIO()
with tarfile.open(fileobj=buf,mode='w:gz') as t:
 for p in files:t.add(p,arcname=str(p.relative_to(R)))
script='import tarfile,io,base64;tarfile.open(fileobj=io.BytesIO(base64.b64decode('+repr(base64.b64encode(buf.getvalue()).decode())+')),mode="r:gz").extractall('+repr(remote)+')'
p=b.run(['python3','-'],data=script.encode(),timeout=120);assert p.returncode==0,p.stderr
code='''import pathlib,json,hashlib
r=pathlib.Path(ROOT)
index=json.loads((r/'SHA256.json').read_text())
for rel,v in index.items():
 p=r/rel;h=hashlib.sha256()
 with p.open('rb') as f:
  for b in iter(lambda:f.read(1048576),b''):h.update(b)
 assert p.stat().st_size==v['bytes'] and h.hexdigest()==v['sha256'],rel
print(json.dumps(dict(files=len(index),remote_hash_match=True)))
'''.replace('ROOT',repr(remote+'/'+O.name))
p=b.run(['python3','-'],data=code.encode(),timeout=300);assert p.returncode==0,p.stderr
(R/'remote_transfer_check.json').write_bytes(p.stdout);print(p.stdout.decode())
remaining=b.command(['docker','ps','-aq','--filter','name=contextra-user20-'],sudo=True).strip()
assert not remaining,remaining
(R/'cleanup.json').write_text(json.dumps(dict(trial_containers_remaining=0)))
