<?php
declare(strict_types=1);
date_default_timezone_set('Asia/Shanghai');require __DIR__.'/oracle.php';require __DIR__.'/cases.php';set_exception_handler(static function(Throwable $e):void{smSave('prepare-fatal-private.json',['class'=>get_class($e),'message'=>$e->getMessage()]);echo json_encode(['status'=>'prepare-tool-error','class'=>get_class($e),'message_sha256'=>hash('sha256',$e->getMessage())]),PHP_EOL;exit(1);});$db=smPdo();$sha=catSha();$actor=smLoad('actor-private.json');catActor($db);$runtime=getenv('SM7_RUNTIME');if(is_file($runtime.'/prepared-private.json')){throw new RuntimeException('No prepared collection replay');}
define('APP_PATH',getenv('SM7_ROOT').'/application/');require APP_PATH.'common/enum/EnumBasics.php';require APP_PATH.'common/enum/order/OrderSource.php';require APP_PATH.'base/Security.php';$boundary=json_decode(file_get_contents(getenv('SM7_BASE').'/__poc_boundary'),true,512,JSON_THROW_ON_ERROR);foreach(['private_source_reflection','effective_ai_private_config_verified','legacy_ai_fallback_disabled','file_cache','redis_disabled','external_stubs'] as $key){if(empty($boundary[$key])){throw new RuntimeException('Private boundary failed');}}if($boundary['real_queue']!==false||$boundary['json_encode_param']!==JSON_UNESCAPED_UNICODE){throw new RuntimeException('Private boundary options');}
$token=\app\base\Security::encrypt(implode("\t",[(string)$actor['id'],$actor['uuid'],$actor['marker'],'0','','',$actor['marker']]));$cases=catCases(smLoad('candidates-private.json')['candidates']);$items=[];$spec=[];$errors=[];foreach($cases as $i=>$case){try{$proof=catSnapshot($db,$case,$boundary);$url=getenv('SM7_BASE').$case['path'];$request=['method'=>$case['method'],'header'=>[['key'=>'token','value'=>$token],['key'=>'Content-Type','value'=>'application/x-www-form-urlencoded'],['key'=>'X-Pilot-Scenario','value'=>'PILOT_CAT_'.$case['name']]],'url'=>$url];if($case['method']==='GET'){$request['url'].='?'.http_build_query($case['params']);}else{$body=[];foreach($case['params'] as $k=>$v){$body[]=['key'=>$k,'value'=>(string)$v,'type'=>'text'];}$request['body']=['mode'=>'urlencoded','urlencoded'=>$body];}$expected=json_encode($proof['body'],JSON_UNESCAPED_UNICODE|JSON_THROW_ON_ERROR);$items[]=['id'=>'catalog-'.$i,'name'=>$case['name'],'type'=>'http','metaInfo'=>['type'=>'HTTP'],'request'=>$request,'event'=>[['listen'=>'test','script'=>['type'=>'text/javascript','exec'=>["pm.test('HTTP 200',()=>pm.response.to.have.status(200));",'const expected='.$expected.';',"pm.test('independent original-table complete JSON contract',()=>pm.expect(pm.response.json()).to.deep.equal(expected));"]]]]];$spec[]=$case+['before'=>$proof];}catch(Throwable $e){$errors[$case['name']]=['class'=>get_class($e),'message_sha256'=>hash('sha256',$e->getMessage())];smSave('prepare-error-'.$case['name'].'-private.json',['message'=>$e->getMessage()]);}}
smSave('spec-private.json',$spec);smSave('boundary-private.json',$boundary);smSave('collection-private.json',['apifoxCli'=>'2.2.8','info'=>['name'=>'Frozen catalog readonly '.getenv('SM7_LANE')],'item'=>[['name'=>'Reviewed actual device read methods','item'=>$items]]]);smSave('prepared-private.json',['lane'=>getenv('SM7_LANE'),'source_sha256'=>$sha,'prepared_cases'=>count($spec),'errors'=>$errors,'new_fixture_dml'=>0,'ddl'=>0]);echo json_encode(['lane'=>getenv('SM7_LANE'),'prepared_cases'=>count($spec),'skipped_cases'=>array_keys($errors),'new_fixture_dml'=>0,'ddl'=>0]),PHP_EOL;
