import sys,os,json,shutil
from pathlib import Path
os.umask(0o077)
ROOT=Path(__file__).resolve().parent.parent;BASE=ROOT.parent;REPO=Path('/workspace/contextra-analytics-runtime-lifecycle-refactor')
sys.path.insert(0,str(BASE/'2026-11-01_contextra-fall-depth-29clips_r01/helpers'));import control_depth as prior
c=prior.c;c.LOCAL=ROOT;c.REMOTE=c.old.RB+'/'+ROOT.name;c.REPORT=ROOT/'reports';c.PREFIX='contextra-fallruntime-1101-r01-'
def sync():
 for p in [ROOT/'helpers',ROOT/'source',*ROOT.glob('*.json')]:c.old.scp(str(p),'si@58.233.207.31:'+c.REMOTE+'/')
if __name__=='__main__':
 c.REPORT.mkdir(exist_ok=True);stage=sys.argv[1]
 if stage=='setup':
  c.checked_resources();c.snapshot('before');c.old.checked(['test','!','-e',c.REMOTE])
  for name in ('app','tests','control_sidecar','contextra_trace','configs/control_templates'):shutil.copytree(REPO/name,ROOT/'source'/name,ignore=shutil.ignore_patterns('__pycache__','*.pyc'))
  r2=BASE/'2026-11-01_contextra-fall-depth-29clips_r01';extra=BASE/'2026-11-01_contextra-fall-extra-review-15videos_r01'
  specs=json.loads((r2/'specs.json').read_text());maps=json.loads((r2/'self_maps.json').read_text())
  for k,s in specs.items():s['reference']=c.old.RB+'/'+r2.name+'/download/'+k+'/data/R2_diagnostics.jsonl'
  for k,s in json.loads((extra/'specs.json').read_text()).items():
   if k=='SELF_L02':continue
   s['reference']=c.old.RB+'/'+extra.name+'/download/R2_Current/'+k+'/data/diagnostics.jsonl';specs[k]=s
  assert len(specs)==36 and sum(len(s['selected_samples']) for s in specs.values())==20145
  (ROOT/'specs.json').write_text(json.dumps(specs));(ROOT/'self_maps.json').write_text(json.dumps(maps))
  c.old.checked(['mkdir',c.REMOTE],sudo=True);c.old.checked(['chown','si:si',c.REMOTE],sudo=True)
  c.old.checked(['mkdir','-p',c.REMOTE+'/reports',c.REMOTE+'/download',c.REMOTE+'/work']);sync()
 elif stage=='sync':
  for name in ('app','tests','control_sidecar','contextra_trace','configs/control_templates'):shutil.copytree(REPO/name,ROOT/'source'/name,dirs_exist_ok=True,ignore=shutil.ignore_patterns('__pycache__','*.pyc'))
  sync()
 elif stage=='one':c.run_job(sys.argv[2],sys.argv[3] if len(sys.argv)>3 else 'all')
 elif stage=='pull':
  c.old.checked(['chown','-R','si:si',c.REMOTE+'/reports',c.REMOTE+'/download'],sudo=True)
  c.old.scp('si@58.233.207.31:'+c.REMOTE+'/reports/.',str(ROOT/'reports'))
  c.old.scp('si@58.233.207.31:'+c.REMOTE+'/download/.',str(ROOT/'results'))
 elif stage=='finish':c.finish()
