<?php
declare(strict_types=1);try{require __DIR__.'/bootstrap.php';require __DIR__.'/natural.php';$start=microtime(true);$path=parse_url($_SERVER['REQUEST_URI']??'',PHP_URL_PATH);$scenario=$_SERVER['HTTP_X_PILOT_SCENARIO']??'';if(($_SERVER['REQUEST_METHOD']??'')!=='GET'||!preg_match('#^/(?:(store|terminal)/store\.User/(info|list|all)|admin/store\.(?:Api/index|Menu/(?:index|info)))$#D',(string)$path)||!preg_match('/^PILOT_OP_[A-Z0-9_]{1,60}$/D',$scenario)){http_response_code(403);echo '{"denied":true}';return;}
ini_set('log_errors','1');ini_set('error_log',$runtime.'/private-errors.log');$_SERVER['SCRIPT_FILENAME']=$root.'/public/index.php';$_SERVER['SCRIPT_NAME']='/index.php';$_SERVER['PHP_SELF']='/index.php';$app=commentApp($root,$runtime);$hosts=['store.operator-read.invalid'=>2147001111,'terminal.operator-read.invalid'=>2147001112,'admin.operator-read.invalid'=>2147001111];$app->env->set('store.host',$hosts);$check(isset($hosts[$app->request->host()])&&getStoreId()===$hosts[$app->request->host()],'Host tenant/source gate');$before=$own();$nBefore=$natural();$protected=$protect();$cfg=$app->config->get('database');foreach($cfg['connections'] as &$c){$c['trigger_sql']=true;$c['debug']=false;}unset($c);$app->config->set($cfg,'database');$app->db->setConfig($app->config);require __DIR__.'/SqlCoverageRecorder.php';$rec=new SqlCoverageRecorder($runtime.'/queries.jsonl',$root,$scenario);$ops=[];$app->db->listen(static function($sql,$elapsed=null)use($rec,$runtime,$scenario,&$ops){if(strpos((string)$sql,'CONNECT:')===0)return;$op=SqlCoverageRecorder::fingerprint($sql)['operation'];$ops[]=$op;if(!in_array($op,['select','other'],true))throw new RuntimeException('Only business read allowed');$rec->observe($sql,$elapsed);file_put_contents($runtime.'/private-sql.jsonl',json_encode(['scenario'=>$scenario,'sql'=>$sql,'layer'=>'ThinkPHP framework listener debug interpolation, not PDO queryString/server audit'],JSON_UNESCAPED_UNICODE)."\n",FILE_APPEND|LOCK_EX);chmod($runtime.'/private-sql.jsonl',0600);});register_shutdown_function([$rec,'finish']);
$http=$app->http;$response=$http->run();$hashes=[];$files=['cores/BaseModel.php','app/common/database/DmBuilder.php','app/common/model/store/User.php','app/common/model/store/Api.php','app/common/model/store/Menu.php','app/common/model/store/MenuApi.php','app/common/model/store/Role.php','app/common/model/store/UserRole.php','app/common/model/store/UserRelation.php','app/common/model/store/RoleMenu.php','app/common/service/store/User.php','app/admin/controller/Controller.php','app/admin/controller/store/Api.php','app/admin/controller/store/Menu.php','app/admin/model/store/Api.php','app/admin/model/store/Menu.php','app/admin/service/admin/User.php'];foreach(['store','terminal'] as $m)foreach(['controller/store/User.php','model/store/User.php','model/store/UserRole.php','model/store/RoleMenu.php','model/store/Menu.php','service/store/User.php','service/store/Role.php','service/Auth.php'] as $s)$files[]='app/'.$m.'/'.$s;foreach($files as $f){$class=str_replace('/','\\',substr($f,0,-4));$actual=(new ReflectionClass($class))->getFileName();$check(realpath($actual)===realpath($root.'/'.$f),'Actual isolated source identity');$hashes[$f]=hash_file('sha256',$actual);}$after=$own();$nAfter=$natural();$fixture=json_decode(file_get_contents($runtime.'/fixture-journal.json'),true);$check($before===$after&&$after===$fixture['after'],'All29 owned original rows exact read-only');$check($nBefore===$nAfter&&$nAfter===$fixture['natural_after'],'Bounded natural dictionaries/identity digests exact');$check($protect()===$protected,'Prior natural scope exact');$body=json_decode($response->getContent(),true);$denyPassword=static function($value)use(&$denyPassword){if(is_array($value))foreach($value as $k=>$v){if(is_string($k)&&strtolower($k)==='password')throw new RuntimeException('Password field must remain hidden');$denyPassword($v);}};$denyPassword($body);
$w=['scenario'=>$scenario,'method'=>'GET','path'=>$path,'http_status'=>$response->getCode(),'elapsed_ms'=>(microtime(true)-$start)*1000,'raw'=>$response->getContent(),'before'=>$before,'original'=>$after,'natural'=>$nAfter,'natural_digest'=>naturalDigest($nAfter),'protect_before'=>$protected,'protect_after'=>$protect(),'source_sha256'=>$hashes,'operations'=>$ops];file_put_contents($runtime.'/private-wire.jsonl',json_encode($w,JSON_UNESCAPED_UNICODE|JSON_PRESERVE_ZERO_FRACTION)."\n",FILE_APPEND|LOCK_EX);chmod($runtime.'/private-wire.jsonl',0600);$response->send();$http->end($response);
}catch(Throwable $e){if(isset($persist))$persist('harness-failure.json',['class'=>get_class($e),'message'=>$e->getMessage(),'file'=>$e->getFile(),'line'=>$e->getLine()]);http_response_code(500);header('Content-Type: application/json');echo json_encode(['harness_error'=>get_class($e),'message'=>$e->getMessage()]);}
