import hashlib
import importlib.util
import json
from pathlib import Path
import sys
import time
import yaml

R=Path(__file__).parent;R.chmod(0o700)
s=importlib.util.spec_from_file_location('base','/tmp/codex/ltb1021/2026-09-15_contextra-sixteen-prepared_r01/run.py')
b=importlib.util.module_from_spec(s);s.loader.exec_module(b)
b.R=R;b.old.R=R

def redis_sample(row,frame=False):
    key='contextra:metadata:v1:camera:'+hashlib.sha256(row['source_id'].encode()).hexdigest()+':frames'
    q=b.p.base.m.query;at=time.monotonic()
    try:info=q('reader','XINFO','STREAM',key)
    except RuntimeError as e:
        if 'no such key' not in str(e):raise
        return dict(at=at,missing=True,error='NO_FRAME_STREAM')
    if not isinstance(info,dict):raise RuntimeError('Unexpected XINFO response')
    result=dict(at=at,entries=info['entries-added'],length=info['length'],pttl=q('reader','PTTL',key))
    if frame:
        rows=q('reader','XREVRANGE',key,'+','-','COUNT','1')
        if not rows:result['frame_missing']=True;return result
        fields=rows[0][1]
        if not isinstance(fields,dict):fields=dict(zip(fields[::2],fields[1::2]))
        result['frame']=json.loads(fields['json'])
    return result
b.old.redis_sample=redis_sample

def gate():
    assert not (R/'plan.json').exists()
    previous=json.loads(Path('/tmp/codex/ltb1021/2026-09-15_contextra-sixteen-prepared_r01/final.json').read_text())
    assert previous['publisher']['metrics']['workers']==3
    assert all(not sid.startswith('tmp16b-') for sid in previous['states'])
    b.gate()
    plan=b.read('plan.json');(R/'plan.json').rename(R/'generated-plan.json')
    for row in plan['channels']:
        if row['original']:continue
        old=row['stream_id'];new=old.replace('tmp16b-2128','tmp16c-2135')
        source=row['source_id'].replace('tmp16b-2128','tmp16c-2135')
        preset=yaml.safe_load((R/'presets'/(old+'.yaml')).read_text())
        preset['camera'].update(stream_id=new,source_id=source)
        file=R/'presets'/(new+'.yaml');file.write_text(yaml.safe_dump(preset,allow_unicode=True));file.chmod(0o600)
        row.update(stream_id=new,source_id=source)
    plan['temporary']=[x['stream_id'] for x in plan['channels'] if not x['original']]
    plan['additional_attempt']='One allowed helper correction: record missing Redis Frame Stream instead of aborting observation. No production change or timeout increase.'
    b.save('plan.json',plan)
    print('Additional attempt1: fresh IDs; missing stream recorded, not hidden.',flush=True)

if __name__=='__main__':{'gate':gate,'execute':b.execute}[sys.argv[1]]()
