"""Frozen R2 diagnostic adapter; no scenario evaluator imports or execution."""
import sys,os,json,shutil
from pathlib import Path
sys.path.extend(['/evidence/2026-11-01_contextra-fall-spatial-28clips_r01/helpers','/evidence/2026-11-01_contextra-fall-review-28clips_r01/helpers','/evidence/2026-10-30_contextra-fight-space-29clips_r01/helpers','/baseline'])
from common import OUT,read,load,evidence,sha,save
import render_fall as view
import render_space as encoder
prior=Path('/evidence/2026-11-01_contextra-fall-depth-29clips_r01')
# Preserve the renderer layout and replace only its old explanatory labels.
original=view.text
def text(draw,rects,pos,value,*args,**kwargs):
 value=value.replace('FALL 공간 후보 R1','FALL 공간 후보 R2')
 if '13·15의 감지 손실' in value:value='고정 R2 검토용 · 청색은 모든 R2 분기의 공통 진입조건이 아닙니다.'
 return original(draw,rects,pos,value,*args,**kwargs)
view.text=text
clip=os.environ['CLIP'];rows,selected,spec,cache,maps=load(clip);by={r['sample']:r for r in rows}
dest=OUT/'download'/clip;data=dest/'data';data.mkdir(parents=True,exist_ok=True)
src=prior/'download'/clip/'data';summary=read(src/'summary.json');trace=src/'R2_diagnostics.jsonl'
assert sha(trace)==summary['diagnostics_sha256'] and sha(OUT/'conditions.json')==summary['conditions_sha256']
hashes=read(evidence(spec['rgb_hashes_remote']));entries=[];originals=[]
for line in trace.open():
 r=json.loads(line)
 if not r['displayed']:continue
 row=by[r['sample']];assert (row['source_frame'],row['seconds'])==(r['source_frame'],r['seconds'])
 originals.append(r);adapt=dict(r,candidate=r['r2'],tracking_mode=spec['tracking_mode'])
 entries.append(dict(kind='observation',row=row,result=adapt,seconds=row['seconds'],part_id='',path=cache/'frames'/f"{r['sample']:04d}.png",rgb_sha256=hashes[f"{r['sample']:04d}.png"]))
assert len(entries)==len(selected)
for name in ('R2_diagnostics.jsonl','frame_lists.json','condition_runs.json','summary.json'):shutil.copyfile(src/name,data/name)
encoder.page=view.page
encoder.render(clip,entries,dest/'Fall_R2_Space_Review.mp4',data/'video_validation.json')
display=read(data/'Fall_R2_Space_Review_display.json')
for r,d in zip(originals,display):
 c=r['r2'];assert (d['hit'],d['display'],d['event'],d['group_states'])==(c['hit'],c['display'],bool(c['event']),c['colors'])
assert len(display)==len(originals)
save(data/'decision_validation.json',dict(status='PASS',frames=len(entries),red=sum(r['r2']['hit'] for r in originals),events=sum(bool(r['r2']['event']) for r in originals),diagnostics_sha256=sha(trace),rules_executed=False))
