"""Package and transfer only; no RTSP reception or operational writes."""
import hashlib
import json
import pathlib
import subprocess
import sys

root = pathlib.Path(__file__).resolve().parent.parent
remote = '/storage/contextra/experiments/action-model-eval/2026/' + root.name
sys.path.insert(0, '/data/codex-artifacts/contextra/action-model-eval/2026/2026-10-26_contextra-camera24-prep_r01/helpers')
from remote import run
files = list((root / 'helpers').rglob('*.py'))
sources = [pathlib.Path('/data/codex-artifacts/contextra/action-model-eval/2026/2026-10-27_contextra-four-scenarios-prep_r01/helpers/batch_job.py'), pathlib.Path('/data/codex-artifacts/contextra/action-model-eval/2026/2026-10-26_contextra-camera24-prep_r01/helpers/remote.py')]
(root / 'reports/helper_fingerprints.json').write_text(json.dumps({str(p):hashlib.sha256(p.read_bytes()).hexdigest() for p in files+sources},indent=2))
subprocess.run([sys.executable, str(root / 'helpers/package.py')], check=True)
files += list((root/'reports').glob('*.json')) + [root/name for name in ('manifest.json','web_registration.json','checkpoint.ko.md')]
files += [p for p in root.glob('camera*/reports/*.json') if p.name in ('registration.json','record_execution.json','review_execution.json','transfer_validation.json')]
payload = {'files':{str(p.relative_to(root)):p.read_text() for p in files}, 'checks':json.loads((root/'Contextra_Retry7_Frame_Review/SHA256.json').read_text())}
payload['final_checkpoint'] = (root/'checkpoint.ko.md').read_text().replace('녹화 종료·패키징 단계.', '자료 전달 완료·사용자 후속 구간 지정 대기.') + '\n- 검증: 양 서버 전달 파일 크기/SHA256 일치. 완료4개 전체 디코딩·5766 Frame/PTS 대응. 전후 설정/컨테이너/채널 상태 동일, 도구 잔존0. Windows 실제 복사 미실시.\n'
code = '''import json,pathlib,subprocess,sys,shutil
r=pathlib.Path(sys.argv[1]);data=json.load(sys.stdin)
assert r.is_dir() and shutil.disk_usage('/').free>=15*1024**3 and shutil.disk_usage(r).free>=15*1024**3
for rel,s in data['files'].items():
 p=r/rel;assert p.resolve().is_relative_to(r.resolve());p.parent.mkdir(parents=True,exist_ok=True)
 if p.exists():assert p.read_text()==s,rel
 else:p.write_text(s)
subprocess.run(['python3',str(r/'helpers/package.py')],check=True)
actual=json.loads((r/'Contextra_Retry7_Frame_Review/SHA256.json').read_text());assert actual==data['checks']
report={'files':len(actual),'both_servers_size_sha256_match':True,'windows_copy_performed':False}
(r/'reports/package_validation.json').write_text(json.dumps(report,indent=2))
(r/'checkpoint.ko.md').write_text(data['final_checkpoint'])
print(json.dumps(report))
'''
r = run(['python3','-c',code,remote],data=json.dumps(payload).encode(),timeout=240)
(root/'reports/package_transfer_execution.json').write_text(json.dumps({'returncode':r.returncode,'stdout':r.stdout.decode(errors='replace'),'stderr':r.stderr.decode(errors='replace')},indent=2))
assert r.returncode==0, r.stderr.decode(errors='replace')
report=json.loads(r.stdout.decode().splitlines()[-1])
(root/'reports/package_validation.json').write_text(json.dumps(report,indent=2))
(root/'checkpoint.ko.md').write_text(payload['final_checkpoint'])
print(json.dumps(report))
