<?php
require __DIR__.'/db.php';$marker='CDXNW11D6A2';$report=['lane'=>$lane,'HTTP'=>0,'DML'=>0,'DDL'=>0,'passed'=>false];
try{foreach(['nutrition_time','nutrition_set'] as $table){$name=$lane==='B'?$p.$table:strtoupper($p.$table);$columns=$lane==='B'?$q('SELECT COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,EXTRA,COLUMN_KEY,CHARACTER_MAXIMUM_LENGTH,DATETIME_PRECISION FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=? ORDER BY ORDINAL_POSITION',[$name]):$q('SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH,DATA_PRECISION,DATA_SCALE,NULLABLE,DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE TABLE_NAME=? ORDER BY COLUMN_ID',[$name]);$constraints=$lane==='B'?$q('SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=?',[$name]):$q('SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME=?',[$name]);$keys=$lane==='B'?$q('SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=?',[$name]):$q('SELECT * FROM USER_CONS_COLUMNS WHERE TABLE_NAME=?',[$name]);$triggers=$lane==='B'?$q('SELECT * FROM information_schema.TRIGGERS WHERE EVENT_OBJECT_SCHEMA=DATABASE() AND EVENT_OBJECT_TABLE=?',[$name]):$q('SELECT * FROM USER_TRIGGERS WHERE TABLE_NAME=?',[$name]);$check($triggers===[],'No target DB triggers');$count=(int)$q('SELECT COUNT(*) AS CNT FROM '.$p.$table)[0]['cnt'];$check($count<=100,'Natural dictionary cap100');$check((int)$q('SELECT COUNT(*) AS CNT FROM '.$p.$table.' WHERE NAME LIKE ?',[$marker.'%'])[0]['cnt']===0,'Marker absent');$report['tables'][$table]=['columns'=>$columns,'constraints'=>$constraints,'keys'=>$keys,'triggers'=>$triggers,'count'=>$count];if($lane==='C')$report['tables'][$table]['table_DDL']=$q("SELECT DBMS_METADATA.GET_DDL('TABLE',?,'ZHCT_APP') AS DDL FROM DUAL",[$name]);$save('private-'.$table.'-rows.json',$q('SELECT * FROM '.$p.$table.' ORDER BY ID'));}
 $protected=[];foreach(['nutrition_category','nutrition_template','nutrition_template_ext','nutrition_station','nutrition_station_ext'] as $table){$count=(int)$q('SELECT COUNT(*) AS CNT FROM '.$p.$table)[0]['cnt'];$check($count<=100,'Protected scope cap100 '.$table);$protected[$table]=$q('SELECT * FROM '.$p.$table.' ORDER BY ID');}$uuid=$lane==='B'?'6969DC3F-CC71-237D-FCED-389B86C5905F':'711DB31A-5BF6-4478-BB9E-C866F0C88DA3';$protected['prior_product']=$q('SELECT * FROM '.$p.'nutrition WHERE UUID=?',[$uuid]);$check(count($protected['prior_product'])===1,'Prior product preserved');$actor=$q('SELECT * FROM '.$p.'user WHERE ID=1');$check(count($actor)===1&&(int)$actor[0]['type']===0&&(int)$actor[0]['is_delete']===0,'Prior normal actor');$protected['actor_sha256']=hash('sha256',json_encode($actor,JSON_UNESCAPED_UNICODE|JSON_PRESERVE_ZERO_FRACTION));$save('private-protected-source.json',$protected);
 require __DIR__.'/init.php';$GLOBALS['CDX_PREPARED']=[];new \app\p\logic\Nutrition();new \app\p\logic\NutritionTime();new \app\validate\Nutrition();new \app\validate\NutritionTime();$report['constructor_SQL']=$GLOBALS['CDX_PREPARED'];$check($GLOBALS['CDX_PREPARED']===[],'Target constructor0SQL');$creator=get_create_by($actor[0]);$report['actual_actor_creator_sha256']=hash('sha256',(string)$creator);$report['creator_byte_length']=strlen((string)$creator);$check(strlen((string)$creator)>0&&strlen((string)$creator)<=128,'Creator bounded');$report['passed']=true;
}catch(Throwable $e){$save('private-preflight-error.json',['class'=>get_class($e),'message'=>$e->getMessage(),'trace'=>$e->getTraceAsString()]);$report['failure']=['class'=>get_class($e),'reason_sha256'=>hash('sha256',$e->getMessage())];}
$save('private-preflight.json',$report);$save('private-select-journal.json',$GLOBALS['ORACLE_JOURNAL']);$public=$report;foreach($public['tables']??[] as $key=>$value)$public['tables'][$key]=['count'=>$value['count']];echo json_encode($public),"\n";exit($report['passed']?0:2);
