"""Scoped CPU comparison controller. No model, Tracking or live control calls."""
import csv,json,hashlib,os,sys
from pathlib import Path
os.umask(0o077)
ROOT=Path(__file__).resolve().parent.parent;BASE=ROOT.parent
R1=BASE/'2026-11-01_contextra-fall-spatial-28clips_r01'
L01=BASE/'2026-10-29_contextra-self-filming-l01-pose-cache_r01'
sys.path.insert(0,str(R1/'helpers'));import control_fall as f
c=f.c;c.LOCAL=ROOT;c.REMOTE=c.old.RB+'/'+ROOT.name;c.PREFIX='contextra-falldepth-1101-r01-';c.REPORT=ROOT/'reports'
def read(p):return json.loads(p.read_text())
def sha(p):return hashlib.sha256(p.read_bytes()).hexdigest()
def save(p,v):
 assert not p.exists(),p
 p.write_text(json.dumps(v,ensure_ascii=False,indent=2))
def sync():
 for p in [ROOT/'helpers',*ROOT.glob('*.json'),*ROOT.glob('*.md')]: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])
  assert c.old.checked(['docker','image','inspect',c.old.IMAGE,'--format','{{.Id}}']).decode().strip()==c.old.IMAGE
  specs=read(R1/'specs.json');maps=read(R1/'self_maps.json');fingerprints={}
  for name,s in specs.items():
   s['r1_trace']=c.old.RB+'/'+R1.name+'/download/'+name+'/data/diagnostics_checked.jsonl'
   fingerprints[s['r1_trace']]=sha(R1/'Contextra_Fall_Spatial_Review_20261101'/name/'data/diagnostics_checked.jsonl')
  cat=read(L01/'metadata/catalog.json');part=next(p for p in cat['L01']['parts'] if p['part_id']=='L01_P02')
  check=read(L01/part['reader_data']/'cache_validation.json');assert check['observations']==7261
  specs['SELF_L02']=dict(domain='self_l02',cache=c.old.RB+'/'+L01.name+'/'+part['cache'],cache_sha256=check['cache_sha256'],selected_samples=check['selected_samples'],input_sha256=check['source_sha256'],tracking_mode='stored10',part_id='L01_P02',first_pts=part['first_selected_L01_pts'],r1_trace=None)
  with (L01/part['observation_map']).open(encoding='utf-8-sig',newline='') as stream:maps['SELF_L02']=list(csv.DictReader(stream))
  assert len(specs)==29 and sum(len(s['selected_samples']) for s in specs.values())==17242
  for name in ('conditions.json','helpers/fall_candidate.py'):fingerprints[c.old.RB+'/'+R1.name+'/'+name]=sha(R1/name)
  save(ROOT/'specs.json',specs);save(ROOT/'self_maps.json',maps);save(ROOT/'baseline_fingerprints.json',fingerprints)
  for name in ('cases.json','references.json'):(ROOT/name).write_bytes((R1/name).read_bytes())
  save(ROOT/'execution_contract.json',dict(inputs=29,displayed_observations=17242,prior=str(R1),image=c.old.IMAGE,cpus=2,memory_gib=8,max_parallel=2,actual_parallel=1,timeout_seconds=1800,root_min_gib=15,baseline_reexecution='L02 only',tracking_reexecution=False,model_reexecution=False,video_generation=False,baseline_head='210e5ce710cd92eed82fb2b47618532c569d1f69'))
  c.old.checked(['mkdir',c.REMOTE],sudo=True);c.old.checked(['chown','si:si',c.REMOTE],sudo=True);c.old.checked(['chmod','700',c.REMOTE])
  c.old.checked(['mkdir','-p',c.REMOTE+'/work',c.REMOTE+'/reports',c.REMOTE+'/download/validation']);sync()
 elif stage=='sync':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+'/download',c.REMOTE+'/work',c.REMOTE+'/reports'],sudo=True)
  c.old.scp('si@58.233.207.31:'+c.REMOTE+'/download/.',str(ROOT/'Contextra_Fall_Depth_Comparison_20261101'))
  c.old.scp('si@58.233.207.31:'+c.REMOTE+'/reports/.',str(c.REPORT))
 elif stage=='finish':c.finish()
 else:raise ValueError(stage)
