#!/usr/bin/env python3
import base64
import hashlib
import shlex
import subprocess
import sys
from pathlib import Path
root=Path(__file__).parent;lane=sys.argv[1];assert lane in ('B','C')
plan=(root/'probe2a-hex-char-proposal.json').read_bytes()
assert hashlib.sha256(plan).hexdigest()=='c23f516cd9764e1eb6dec57f8ca5cb579c74f6c25008b25e6d242dfe1e14f78d'
payload=('<?php\n$plan=json_decode(base64_decode('+repr(base64.b64encode(plan).decode())+'),true);\n').encode()+(root/'probe2a-run.php').read_bytes().removeprefix(b'<?php')
pid=10001 if lane=='B' else 112175
php='/usr/local/php7.3/bin/php'if lane=='B'else'/www/server/php/73/bin/php'
child=php if lane=='B'else php+' -c /www/server/php/73/etc/php-cli.ini -d extension=/home/dmdba/dmdbms/drivers/php_pdo/libphp73_dm.so -d extension=/home/dmdba/dmdbms/drivers/php_pdo/php73_pdo_dm.so'
parent='/tmp/zhct-http-store-mysql.dQTTBP'if lane=='B'else'/tmp/zhct-dm-poc-20260928.fcpiiN/store'
wrapper='$env=[];foreach(explode(chr(0),file_get_contents("/proc/'+str(pid)+'/environ"))as $s){$v=explode("=",$s,2);if(count($v)===2)$env[$v[0]]=$v[1];}if(($env["POC_EXTERNAL_STUBS"]??"")!=="1"||($env["POC_REAL_QUEUE"]??"0")!=="0")exit(78);$env["SS_LANE"]="'+lane+'";$env["SS_ROOT"]="'+parent+'";$p=proc_open('+repr(child)+',[0=>STDIN,1=>STDOUT,2=>STDERR],$pipes,null,$env);exit(proc_close($p));'
args=['docker','exec','-i','zhctapp_v2_0',php,'-r',wrapper]if lane=='B'else['ssh','-S','/private/tmp/cdx-train-root-20261010.sock','-o','BatchMode=yes','root@121.43.241.161',php+' -r '+shlex.quote(wrapper)]
private=root/'probe2a-private-evidence';private.mkdir(mode=0o700,exist_ok=True)
with(private/(lane+'-probe2a.jsonl')).open('xb')as output,(private/(lane+'-probe2a.stderr')).open('xb')as error:
 (private/(lane+'-probe2a.jsonl')).chmod(0o600);(private/(lane+'-probe2a.stderr')).chmod(0o600)
 result=subprocess.run(args,input=payload,stdout=output,stderr=error,check=False)
print(lane,'probe exit',result.returncode)
last=(private/(lane+'-probe2a.jsonl')).read_text().splitlines()
if last:print(last[-1])
raise SystemExit(result.returncode)
