#!/usr/bin/env python3
"""Isolated remote synthetic probe. Never persist/print inherited credentials."""
import hashlib,json,os,pathlib,resource,subprocess,sys
root=pathlib.Path(__file__).resolve().parent
stage=sys.argv[1]
if stage not in ('old','green','recovery','framework-old','framework-green'):raise SystemExit('stage rejected')
entry='FrameworkProbe.php' if stage.startswith('framework-') else ('RecoveryProbe.php' if stage=='recovery' else 'IteratorProbe.php')
raw=pathlib.Path('/proc/53772/environ').read_bytes()
live={k.decode():v.decode() for k,v in (p.split(b'=',1) for p in raw.split(b'\0') if b'=' in p)}
env={k:v for k,v in os.environ.items() if not k.startswith(('POC_','SHADOW_','DM_PROBE_'))}
for k in ('LD_LIBRARY_PATH','DM_SVC_PATH'):
    if k in live:env[k]=live[k]
for k in ('HOST','PORT','SCHEMA','USER','PASSWORD'):env['SHADOW_'+k]=live['POC_AI_'+k]
if (env['SHADOW_HOST'],env['SHADOW_PORT'],env['SHADOW_SCHEMA'])!=('127.0.0.1','5238','AIZHCT_APP'):raise SystemExit('approved runtime gate rejected')
def no_core():resource.setrlimit(resource.RLIMIT_CORE,(0,0))
out=[]
for php in (('74',) if stage.startswith('framework-') else ('73','74')):
    argv=['/www/server/php/'+php+'/bin/php','-n','-d','extension=/home/dmdba/dmdbms/drivers/php_pdo/libphp'+php+'_dm.so',
          '-d','extension=/home/dmdba/dmdbms/drivers/php_pdo/php'+php+'_pdo_dm.so',str(root/entry)]
    if stage!='recovery':argv.append(stage.removeprefix('framework-') if hasattr(stage,'removeprefix') else stage.replace('framework-','',1))
    p=subprocess.run(argv,env=env,cwd=str(root),stdout=subprocess.PIPE,stderr=subprocess.PIPE,timeout=45,preexec_fn=no_core)
    try:report=json.loads(p.stdout)
    except (ValueError,UnicodeError):report={'status':'invalid_output','stdout_bytes':len(p.stdout),'stdout_sha256':hashlib.sha256(p.stdout).hexdigest()}
    out.append({'php_key':php,'stage':stage,'exit_code':p.returncode,'stderr_bytes':len(p.stderr),'stderr_sha256':hashlib.sha256(p.stderr).hexdigest(),'report':report})
    if p.returncode<0:break
is_red=stage in ('old','framework-old')
expected_count=1 if stage.startswith('framework-') else 2
ok=len(out)==expected_count and all(not x['stderr_bytes'] and (x['report'].get('status')=='fail' and (x['report'].get('stage','').startswith('planned_') if stage=='old' else x['report'].get('stage') in ('framework_query','framework_pdo_foreach')) if is_red else x['exit_code']==0 and x['report'].get('status')=='pass') for x in out)
print(json.dumps({'stage':stage,'expected_red_verified' if is_red else 'green_verified':ok,'runs':out},ensure_ascii=False,sort_keys=True))
raise SystemExit(0 if ok else 1)
