<?php
declare(strict_types=1);
require __DIR__.'/bootstrap.php';
if(($argv[1]??'')==='audit'){echo json_encode(['lane'=>$lane,'mode'=>'retained-owned','counts'=>$counts()]),"\n";exit;}
$green=($argv[1]??'')==='green';$prior=$green?json_decode((string)file_get_contents($runtime.'/private-retention.json'),true):null;
if($green){$check($prior['marker']===$marker&&$prior['tenant']===$tenant,'Owned continuation identity');$ownedIds=$prior['owned_primary_keys'];}
else $check(array_sum($counts())===0,'Nutrition new context collision');
$before=$snapshot();if($green)$check($before===$prior['before'],'Continuation natural original');
$largeBefore=[];foreach(['meal_recommend','meal_recommend_history'] as $t)$largeBefore[$t]=(int)$query('SELECT COUNT(*) n FROM yoshop_'.$t)[0]['n'];
$root=(string)getenv('CATEGORY_ROOT');$boundary=json_decode((string)file_get_contents($base.'/__poc_boundary'),true);$check(($boundary['target_model_sha']??'')==='d080855c5e082feae90bf65a9a11eb90fffc56771bc364e816d16e14243071ae','Actual frozen target source');
define('TP_ENV','poc');define('BUSINESS','aizhct');define('ENTERPRISE_NO','10001');require $root.'/vendor/autoload.php';spl_autoload_register(static function(string $class)use($root){foreach(['app\\'=>'app/','cores\\'=>'cores/'] as $p=>$d){if(strpos($class,$p)!==0)continue;$f=$root.'/'.$d.str_replace('\\','/',substr($class,strlen($p))).'.php';if(is_file($f))require $f;}},true,true);
require __DIR__.'/external_boundary.php';require __DIR__.'/SqlCoverageRecorder.php';require __DIR__.'/DbWriteAudit.php';$app=new \think\App($root);$app->setEnvName('poc');$app->setRuntimePath($runtime.'/fixture-runtime/');$app->initialize();\think\App::$store_id=$tenant;
$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);$log=$app->config->get('log');$log['close']=true;foreach($log['channels'] as &$c)$c['close']=true;unset($c);$app->config->set($log,'log');
$cache=new \think\cache\driver\File($app,['path'=>$runtime.'/cache/','prefix'=>'','expire'=>0]);$token=bin2hex(random_bytes(24));$cache->set($token,['user'=>['store_user_id'=>$tenant,'store_id'=>$tenant,'real_name'=>$marker,'user_name'=>$marker,'is_super'=>1],'store_id'=>$tenant,'is_login'=>true],1800);
foreach(['queries.jsonl','write-audit.jsonl','private-dml-audit-sql.jsonl','publish-captures.jsonl','robot-captures.jsonl'] as $f)file_put_contents($runtime.'/'.$f,'');
$activeRecorder=null;$audit=new DbWriteAudit($runtime);$app->db->listen(static function($sql,$ms=null)use($audit,&$activeRecorder){$audit->observe($sql);if($activeRecorder!==null&&strpos((string)$sql,'CONNECT:')!==0)$activeRecorder->observe($sql,$ms);});
$uid=0;$sid=0;$date=date('Y-m-d');$cases=[];$findings=[];$proofs=[];$jobs=[];$responses=[];$historyPrefix=[];$map=[];$error=null;
if($green){$uid=$prior['user_id'];$sid=$prior['staff_id'];$map=json_decode((string)file_get_contents($runtime.'/private-owned-map.json'),true);$check($map['staff_id']===$sid&&$map['user_id']===$uid&&$map['tenant']===$tenant,'Exact retained map');$u=$query('SELECT * FROM yoshop_user WHERE user_id=? AND store_id=? AND nick_name=?',[$uid,$tenant,$marker.'_USER']);$s=$query('SELECT * FROM yoshop_staff WHERE id=? AND user_id=? AND store_id=? AND name=? AND create_by=?',[$sid,$uid,$tenant,$marker.'_STAFF',$marker]);$check(count($u)===1&&count($s)===1,'Retained positive User/Staff ownership');$historyPrefix=$query('SELECT * FROM yoshop_meal_recommend_history WHERE staff_id=? AND store_id=? AND meal_date=? ORDER BY id',[$sid,$tenant,$date]);$check(array_map('intval',array_column($historyPrefix,'id'))===$ownedIds['meal_recommend_history'],'Exact retained history PKs');}
$historyBase=count($historyPrefix);
$insert=static function(string $t,array $data)use($db,$query,$check,$tenant,&$ownedIds):int{$check(in_array($t,['user','staff'],true)&&$data['store_id']===$tenant,'Frozen fixture');$s=$db->prepare('INSERT INTO yoshop_'.$t.' ('.implode(',',array_keys($data)).') VALUES ('.implode(',',array_fill(0,count($data),'?')).')');$s->execute(array_values($data));$pk=$t==='user'?'user_id':'id';$key=$t==='user'?'nick_name':'name';$r=$query('SELECT '.$pk.' FROM yoshop_'.$t.' WHERE '.$key.'=? AND store_id=?',[$data[$key],$tenant]);$check(count($r)===1&&(int)$r[0][$pk]>0,'Own generated fixture');$id=(int)$r[0][$pk];$ownedIds[$t][]=$id;return $id;};
$saveMap=static function()use($runtime,&$map){file_put_contents($runtime.'/private-owned-map.json',json_encode($map));chmod($runtime.'/private-owned-map.json',0600);};
$shape=static function($v)use(&$shape){if(is_object($v)){$o=[];foreach(get_object_vars($v) as $k=>$x)$o[$k]=$shape($x);ksort($o);return ['object'=>$o];}if(is_array($v))return ['array'=>array_map($shape,$v)];return gettype($v);};
$deep=static function($a,$b,string $p='$')use(&$deep,$check){if(is_array($b)){$check(is_array($a),'Container '.$p);$ak=array_keys($a);$bk=array_keys($b);sort($ak);sort($bk);$check($ak===$bk,'Fields '.$p);foreach($b as $k=>$v)$deep($a[$k],$v,$p.'.'.$k);}else $check($a===$b,'Value/type '.$p.' actual='.json_encode($a).' expected='.json_encode($b));};
$request=static function(string $name,string $kind,string $action,array $data)use($base,$token,$check,$shape,&$cases,&$responses):array{$scenario='PILOT_NT_'.$name;$h="Host: store.nutrition-target.invalid\r\nAccess-Token: ".$token."\r\nPlatform: POC\r\nX-Pilot-Scenario: ".$scenario."\r\nContent-Type: application/json\r\n";
    $raw=file_get_contents($base.'/store/nutrition.'.$kind.'/'.$action,false,stream_context_create(['http'=>['method'=>'POST','header'=>$h,'content'=>json_encode($data,JSON_UNESCAPED_UNICODE),'timeout'=>30,'ignore_errors'=>true]]));$check(is_string($raw)&&strlen($raw)<1048576,'Nutrition HTTP transport');$body=json_decode($raw,true);$check(is_array($body),'Nutrition JSON');preg_match('#^HTTP/\S+\s+(\d+)#',$http_response_header[0]??'',$m);$responses[$scenario]=$raw;$case=['scenario'=>$scenario,'method'=>'POST','path'=>'/store/nutrition.'.$kind.'/'.$action,'http_status'=>(int)($m[1]??0),'body'=>$body,'raw_json_shape'=>$shape(json_decode($raw))];$cases[]=$case;return $case;};
$success=static function(array $c)use($check){$check($c['http_status']===200&&($c['body']['status']??0)===200,'Business success '.$c['scenario']);};
$round=static function($v):string{$v=(string)$v;return bcadd(bcadd($v,bccomp($v,'0',12)<0?'-0.005':'0.005',12),'0',2);};
$targetRows=static function()use($query,$tenant,&$sid):array{return $query('SELECT * FROM yoshop_nurtition_target WHERE staff_id=? AND store_id=? ORDER BY set_date,id',[$sid,$tenant]);};
$verifyTargets=static function(array $expected)use($targetRows,$check,$marker,$tenant,&$sid,&$ownedIds,&$map,$saveMap,&$proofs):array{
    $rows=$targetRows();$check(count($rows)===count($expected),'Target actual cardinality');$by=[];foreach($rows as $row){$check((int)$row['staff_id']===$sid&&(int)$row['store_id']===$tenant&&$row['create_by']===$marker&&(int)$row['is_delete']===0,'Target own original');$wanted=$expected[$row['set_date']]??null;$check(is_array($wanted),'Unexpected target date');foreach($wanted as $k=>$v)$check(bcadd((string)$row[$k],'0',2)===$v,'Target physical decimal '.$k);
        $id=(int)$row['id'];$check($id>0,'Target generated PK');if(!in_array($id,$ownedIds['nurtition_target']??[],true))$ownedIds['nurtition_target'][]=$id;$by[$row['set_date']]=$row;
        $p=$row;foreach(['id','staff_id','store_id','is_delete'] as $k)$p[$k]=(int)$p[$k];foreach(array_keys($wanted) as $k)$p[$k]=bcadd((string)$p[$k],'0',2);$proofs[]=['kind'=>'target','all_input_decimals_verified'=>true,'values'=>$p];}
    $map['target_ids']=$ownedIds['nurtition_target'];$saveMap();return $by;
};
$targetRead=static function(string $name,string $targetDate,array $rows)use($request,$success,$deep,$check,&$sid,&$cases,&$findings):void{
    $c=$request($name,'NutritionTarget','detail',['staff_id'=>$sid,'target_date'=>$targetDate]);$success($c);
    if(isset($rows[$targetDate])){$r=$rows[$targetDate];foreach(['id','staff_id','store_id','is_delete'] as $k)$r[$k]=(int)$r[$k];foreach(['recommend_energy','morning_ratio','noon_ratio','night_ratio','carbohydrate_ratio','protein_ratio','fat_ratio'] as $k)$r[$k]=bcadd((string)$r[$k],'0',2);foreach(['create_time','update_time'] as $k)$r[$k]=date('Y-m-d H:i:s',strtotime((string)$r[$k]));$expected=['detail'=>['recommend_energy'=>$r['recommend_energy'],'nutrition_target'=>$r]];}
    else $expected=['detail'=>['recommend_energy'=>0,'nutrition_target'=>[]]];
    try{$deep($c['body']['data'],$expected);$cases[count($cases)-1]['mysql_original_projection_equal']=true;}catch(RuntimeException $e){$findings[]=['scenario'=>$c['scenario'],'classification'=>'wire-contract-vs-MySQL-fixed-scale-projection','detail'=>$e->getMessage(),'physical_target_values_independently_verified'=>true];$cases[count($cases)-1]['mysql_original_projection_equal']=false;}
};
$job=static function(string $name,?array $todayTarget=null)use($runtime,$app,$root,$query,$check,$round,$date,$tenant,$saveMap,$historyBase,&$sid,&$map,&$jobs,&$ownedIds,&$activeRecorder,&$historyPrefix):void{
    $pub=file($runtime.'/publish-captures.jsonl',FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES)?:[];$check(count($pub)===count($jobs)+1,'Only target success publishes one');$payload=json_decode(end($pub),true);$check($payload['data']['date']===$date,'Target emits today (not future range)');
    $activeRecorder=new SqlCoverageRecorder($runtime.'/queries.jsonl',$root,'PILOT_NT_JOB_'.$name);ob_start();try{$ok=(new \app\timer\service\Serve)->doJob($payload);}finally{$raw=ob_get_clean();$activeRecorder->finish();$activeRecorder=null;file_put_contents($runtime.'/private-job-'.$name.'.log',$raw);}$check($ok===true,'Real job return');
    $r=$query('SELECT * FROM yoshop_meal_recommend WHERE staff_id=? AND store_id=? AND meal_date=? ORDER BY id',[$sid,$tenant,$date]);$hist=$query('SELECT * FROM yoshop_meal_recommend_history WHERE staff_id=? AND store_id=? AND meal_date=? ORDER BY id',[$sid,$tenant,$date]);$check(count($r)===1&&count($hist)===$historyBase+count($jobs)+1,'Real current/history increment');$check(array_slice($hist,0,count($historyPrefix))===$historyPrefix,'Old raw history prefix unchanged');$historyPrefix=$hist;
    $age=(int)date('Y')-1990;$check($age>30&&$age<60,'Adult frozen age');$ree=bcmul(bcadd(bcmul('11.472','60',12),'873.1',12),'0.95',12);$consume=$round(bcmul($ree,'1.45',12));$power=$todayTarget['recommend_energy']??$consume;
    $ratios=$todayTarget??['recommend_energy'=>'-1.00','morning_ratio'=>'30.00','noon_ratio'=>'40.00','night_ratio'=>'30.00','carbohydrate_ratio'=>'55.00','protein_ratio'=>'20.00','fat_ratio'=>'25.00'];
    $w=['staff_id'=>$sid,'meal_date'=>$date,'gender'=>1,'birthday'=>'1990-01-01','height'=>'170.00','weight'=>'60.00','staff_type'=>1,'sport_id'=>0,'sport_event_id'=>0,'age'=>$age,'ree'=>$round($ree),'habit'=>2,'habit_ratio'=>'1.45','consume_power'=>$consume,'weight_status'=>1,'energy_value'=>'300.00','recommend_energy'=>$ratios['recommend_energy'],'recommend_power'=>$power,
        'bm'=>'0.00','bmr'=>'0.00','food_hot'=>'0.00','night_expend'=>'0.00','daily_consume'=>'0.00','active_power'=>'0.00','active_time'=>0,'recommend_ratio'=>'0.00','dietary_fiber'=>'25.00','store_id'=>$tenant,'is_delete'=>0,'create_by'=>'system'];
    foreach(['carbohydrate'=>4,'protein'=>4,'fat'=>9] as $n=>$div){$ratio=bcdiv($ratios[$n.'_ratio'],'100',12);$p=bcmul($power,$ratio,12);$grams=bcdiv($p,(string)$div,12);$w[$n.'_ratio']=$round($ratio);$w['recommend_'.$n.'_power']=$round($p);$w['recommend_'.$n.'_weight']=$round($grams);foreach(['morning','noon','night'] as $meal)$w[$meal.'_'.$n.'_weight']=$round(bcmul($grams,bcdiv($ratios[$meal.'_ratio'],'100',12),12));}
    foreach(['morning','noon','night'] as $meal){$ratio=bcdiv($ratios[$meal.'_ratio'],'100',12);$w[$meal.'_ratio']=$round($ratio);$w[$meal.'_power']=$round(bcmul($power,$ratio,12));}
    $vm=$query('SELECT * FROM yoshop_general_vm WHERE gender=1 AND start_age<=? AND end_age>=?',[$age,$age]);$check(count($vm)===1,'Unique VM');foreach(['va','vb1','vb2','vpp','vc','ve','potassium','sodium','calcium','magnesium','iron','zinc'] as $k)$w[$k]=bcadd((string)$vm[0][$k],'0',2);
    $keys=array_values(array_diff(array_keys($r[0]),['id','create_time','update_time']));$want=array_keys($w);sort($keys);sort($want);$check($keys===$want,'All current original fields');foreach($w as $k=>$v){$cast=static function($a,$v){return is_int($v)?(int)$a:(is_string($v)&&preg_match('/^-?[0-9]+\.[0-9]{2}$/D',$v)?bcadd((string)$a,'0',2):$a);};$check($cast($r[0][$k],$v)===$v&&$cast($hist[count($hist)-1][$k],$v)===$v,'Independent job decimal '.$k);}
    $id=(int)$r[0]['id'];if(isset($map['current_ids'][0]))$check($map['current_ids'][0]===$id,'Current ID stable');$map['current_ids']=[$id];$ownedIds['meal_recommend']=[$id];$ownedIds['meal_recommend_history']=array_map('intval',array_column($hist,'id'));$saveMap();$jobs[]=['scenario'=>$name,'today_target_active'=>$todayTarget!==null,'current_rows'=>1,'history_rows'=>count($hist),'old_prefix_unchanged'=>true,'full_independent_values'=>$w,'HTTP_count'=>0];
};
try{
    if($green){
        $current=$targetRows();$expected=[];foreach($current as $row){$v=[];foreach(['recommend_energy','morning_ratio','noon_ratio','night_ratio','carbohydrate_ratio','protein_ratio','fat_ratio'] as $k)$v[$k]=bcadd((string)$row[$k],'0',2);$expected[$row['set_date']]=$v;}
        $r=$verifyTargets($expected);foreach(array_keys($expected) as $d)$targetRead('GREEN_TARGET_DETAIL_'.str_replace('-','',$d),$d,$r);
        $targetRead('GREEN_TARGET_EMPTY','2030-04-05',[]);
        $c=$request('GREEN_FLAGS_PC','NutritionTarget','getFlagDate',['staff_id'=>$sid]);$success($c);$deep($c['body']['data'],['date_list'=>array_keys($expected)]);
        // Real HTTP original PC payload, without is_delete or synthetic PDO plans.
        $plan=['staff_id'=>$sid,'set_date'=>'2030-04-02','data'=>[['name'=>$marker."_补充'甲",'use_time'=>"饭后'30分钟",'use_number'=>'1.50','unit_id'=>1,'method'=>"中文\\服用"]]];
        $verifyPlans=static function(array $items)use($query,$check,$tenant,$marker,$saveMap,&$sid,&$ownedIds,&$map,&$proofs):array{
            $rows=$query('SELECT * FROM yoshop_nurtrition WHERE staff_id=? AND store_id=? ORDER BY id',[$sid,$tenant]);$active=[];
            foreach($rows as $row){$check((int)$row['user_id']===$tenant&&strpos($row['name'],$marker)===0,'Verified plan operator/name');$id=(int)$row['id'];if(!in_array($id,$ownedIds['nurtrition']??[],true))$ownedIds['nurtrition'][]=$id;if((int)$row['is_delete']===0)$active[]=$row;}
            $check(count($active)===count($items),'Plan active source cardinality');foreach($items as $i=>$item)foreach($item as $k=>$v)$check((string)$active[$i][$k]===(string)$v,'Original plan field '.$k);
            $map['plan_ids']=$ownedIds['nurtrition'];$saveMap();$proofs[]=['kind'=>'plan','all_input_fields_verified'=>true,'source_owned_rows'=>count($rows),'active_rows'=>count($active),'physical_delete'=>false];return $active;
        };
        $c=$request('GREEN_PLAN_ADD_ORIGINAL_PC','Nutrition','add',$plan);$success($c);$active=$verifyPlans($plan['data']);
        $c=$request('GREEN_PLAN_LIST_NONEMPTY','Nutrition','lists',['staff_id'=>$sid,'start_date'=>'2030-04-02','end_date'=>'2030-04-02','page'=>1,'page_size'=>10]);$success($c);$check(count($c['body']['data']['list']['data'])===1,'Nonempty plan list');
        $deleteId=(int)$active[0]['id'];$c=$request('GREEN_PLAN_DELETE_OWN','Nutrition','delete',['id'=>$deleteId]);$success($c);$active=$verifyPlans([]);$r=$query('SELECT * FROM yoshop_nurtrition WHERE id=? AND staff_id=? AND store_id=?',[$deleteId,$sid,$tenant]);$check(count($r)===1&&(int)$r[0]['is_delete']===1,'Formal delete soft flag');
        $c=$request('GREEN_PLAN_LIST_EMPTY','Nutrition','lists',['staff_id'=>$sid,'start_date'=>'2030-04-02','end_date'=>'2030-04-02','page'=>1,'page_size'=>10]);$success($c);$check($c['body']['data']['list']['data']===[],'Empty after actual delete');
        $targetBefore=$targetRows();$today=$expected[$date];$c=$request('GREEN_TARGET_REPEAT_TODAY','NutritionTarget','add',['staff_id'=>$sid,'form'=>$today+['start_date'=>$date,'end_date'=>$date]]);$success($c);$r=$verifyTargets($expected);$check(array_column($targetRows(),'id')===array_column($targetBefore,'id'),'Repeat target PKs stable');$job('GREEN_TODAY_REAL_JOB',$today);$targetRead('GREEN_TARGET_TODAY_AFTER_REPEAT',$date,$r);
    }else{
    $uid=$insert('user',['nick_name'=>$marker.'_USER','store_id'=>$tenant]);$u=$query('SELECT * FROM yoshop_user WHERE user_id=? AND store_id=? AND nick_name=?',[$uid,$tenant,$marker.'_USER']);$check(count($u)===1,'Positive owned user');foreach($u[0] as $k=>$v)if(strpos($k,'balance')!==false||in_array($k,['pay_money','expend_money','points'],true))$check((float)$v===0.0,'All user money0');
    $sid=$insert('staff',['name'=>$marker.'_STAFF','gender'=>1,'birthday'=>'1990-01-01','height'=>'170.00','weight'=>'60.00','staff_type'=>1,'user_id'=>$uid,'store_id'=>$tenant,'create_by'=>$marker]);$map=['staff_id'=>$sid,'user_id'=>$uid,'tenant'=>$tenant,'target_ids'=>[],'plan_ids'=>[],'current_ids'=>[]];$saveMap();
    // Original PC request: no injected is_delete/default/create_by column.
    $plan=['staff_id'=>$sid,'set_date'=>'2030-04-02','data'=>[['name'=>$marker."_补充'甲",'use_time'=>"饭后'30分钟",'use_number'=>'1.50','unit_id'=>1,'method'=>"中文\\服用"]]];
    $c=$request('PLAN_ADD_ORIGINAL_PC','Nutrition','add',$plan);$planRows=$query('SELECT * FROM yoshop_nurtrition WHERE staff_id=? AND store_id=? ORDER BY id',[$sid,$tenant]);
    foreach($planRows as $row){$check((int)$row['user_id']===$tenant&&strpos($row['name'],$marker)===0,'Own plan original/operator');$ownedIds['nurtrition'][]=(int)$row['id'];}$map['plan_ids']=$ownedIds['nurtrition']??[];$saveMap();
    $findings[]=['scenario'=>$c['scenario'],'classification'=>$c['body']['status']===200?'original-PC-plan-add-success-needs-nonempty-source':'original-PC-plan-add-schema-error','business_status'=>$c['body']['status'],'source_rows'=>count($planRows),'is_delete_was_not_injected'=>true,'missing_default_confirmed'=>true];
    $request('PLAN_LIST_ORIGINAL_PC','Nutrition','lists',['staff_id'=>$sid,'start_date'=>'2030-04-02','end_date'=>'2030-04-02','page'=>1,'page_size'=>10]);
    if($planRows){$c=$request('PLAN_DELETE_OWN','Nutrition','delete',['id'=>(int)$planRows[0]['id']]);$success($c);$r=$query('SELECT * FROM yoshop_nurtrition WHERE id=? AND staff_id=? AND store_id=?',[$planRows[0]['id'],$sid,$tenant]);$check(count($r)===1&&(int)$r[0]['is_delete']===1,'Own plan delete original');}
    $targetRead('TARGET_EMPTY_ORIGINAL_PC','2030-04-02',[]);
    $c=$request('FLAGS_ORIGINAL_PC','NutritionTarget','getFlagDate',['staff_id'=>$sid]);if(($c['body']['status']??0)!==200)$findings[]=['scenario'=>$c['scenario'],'classification'=>'original-PC-parameter-binding-error-not-positive','payload_key'=>'staff_id','controller_parameter'=>'staffId','business_status'=>$c['body']['status']];
    $values=['recommend_energy'=>'2100.55','morning_ratio'=>'30.00','noon_ratio'=>'40.00','night_ratio'=>'30.00','carbohydrate_ratio'=>'55.00','protein_ratio'=>'20.00','fat_ratio'=>'25.00'];$form=$values+['start_date'=>'2030-04-02','end_date'=>'2030-04-04'];$expected=[];foreach(['2030-04-02','2030-04-03','2030-04-04'] as $d)$expected[$d]=$values;
    $c=$request('TARGET_RANGE_ADD','NutritionTarget','add',['staff_id'=>$sid,'form'=>$form]);$success($c);$first=$verifyTargets($expected);$firstIds=array_column($first,'id');$job('FUTURE_RANGE');foreach(array_keys($expected) as $d)$targetRead('TARGET_DETAIL_'.str_replace('-','',$d),$d,$first);
    $c=$request('TARGET_REPEAT_UPDATE_SAME_IDS','NutritionTarget','add',['staff_id'=>$sid,'form'=>$form]);$success($c);$repeat=$verifyTargets($expected);$check(array_column($repeat,'id')===$firstIds,'Same target range actual upsert PK');$job('FUTURE_REPEAT');
    $middle=$form;$middle['start_date']=$middle['end_date']='2030-04-03';$middle['recommend_energy']='2200.125';$expected['2030-04-03']['recommend_energy']='2200.13';$c=$request('TARGET_MIDDLE_ONLY','NutritionTarget','add',['staff_id'=>$sid,'form'=>$middle]);$success($c);$r=$verifyTargets($expected);$check(array_column($r,'id')===$firstIds,'Target middle PK unchanged');$check($r['2030-04-02']===$repeat['2030-04-02']&&$r['2030-04-04']===$repeat['2030-04-04'],'Neighbor original rows unchanged');$job('FUTURE_MIDDLE');$targetRead('TARGET_MIDDLE_UPDATED','2030-04-03',$r);
    $c=$request('FLAGS_ORIGINAL_PC_NONEMPTY','NutritionTarget','getFlagDate',['staff_id'=>$sid]);if(($c['body']['status']??0)!==200)$findings[]=['scenario'=>$c['scenario'],'classification'=>'original-PC-parameter-binding-error-not-positive','business_status'=>$c['body']['status']];else $deep($c['body']['data'],['date_list'=>array_keys($expected)]);
    $c=$request('FLAGS_CANONICAL_SUPPLEMENT','NutritionTarget','getFlagDate',['staffId'=>$sid]);$success($c);$deep($c['body']['data'],['date_list'=>array_keys($expected)]);$cases[count($cases)-1]['supplementary_parameter_not_original_client']=true;
    $bad=$form;unset($bad['start_date']);$beforeBad=$targetRows();$pub=count(file($runtime.'/publish-captures.jsonl',FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES)?:[]);$c=$request('TARGET_MISSING_DATE_REFUSAL','NutritionTarget','add',['staff_id'=>$sid,'form'=>$bad]);$check(($c['body']['status']??200)===500,'Missing date rejected');$check($targetRows()===$beforeBad&&count(file($runtime.'/publish-captures.jsonl',FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES)?:[])===$pub,'Rejected input wrote/published');
    $today=['recommend_energy'=>'2345.67','morning_ratio'=>'25.50','noon_ratio'=>'44.50','night_ratio'=>'30.00','carbohydrate_ratio'=>'52.50','protein_ratio'=>'22.50','fat_ratio'=>'25.00'];$c=$request('TARGET_TODAY_REAL_JOB','NutritionTarget','add',['staff_id'=>$sid,'form'=>$today+['start_date'=>$date,'end_date'=>$date]]);$success($c);$expected[$date]=$today;$r=$verifyTargets($expected);$job('TODAY_EXPLICIT_TARGET',$today);$targetRead('TARGET_TODAY_DETAIL',$date,$r);
    }
}catch(Throwable $caught){$error=['class'=>get_class($caught),'message'=>$caught->getMessage(),'file'=>basename($caught->getFile()),'line'=>$caught->getLine()];}
$cache->delete($token);$cache->clear();$cacheFiles=0;if(is_dir($runtime.'/cache/'))foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($runtime.'/cache/',FilesystemIterator::SKIP_DOTS)) as $f)if($f->isFile())$cacheFiles++;
$fresh=$connect();$retained=[];foreach($tables as $t){$s=$fresh->prepare('SELECT COUNT(*) FROM yoshop_'.$t.' WHERE store_id=?');$s->execute([$tenant]);$retained[$t]=(int)$s->fetchColumn();}$after=$snapshot();$largeAfter=[];foreach(['meal_recommend','meal_recommend_history'] as $t)$largeAfter[$t]=(int)$query('SELECT COUNT(*) n FROM yoshop_'.$t)[0]['n'];
$private=['lane'=>$lane,'marker'=>$marker,'tenant'=>$tenant,'user_id'=>$uid,'staff_id'=>$sid,'owned_primary_keys'=>$ownedIds,'date'=>$date,'before'=>$before,'large_before'=>$largeBefore,'cases'=>$cases,'proofs'=>$proofs,'jobs'=>$jobs,'responses'=>$responses];if($green)$private['parent_red']=$prior;file_put_contents($runtime.'/private-retention.json',json_encode($private,JSON_PRETTY_PRINT|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_UNICODE));chmod($runtime.'/private-retention.json',0600);
$normal=static function($x)use(&$normal,$ownedIds,$sid,$tenant){if(!is_array($x))return $x;foreach($x as $k=>&$v){if($k==='staff_id'&&$v===$sid)$v=1;elseif($k==='id'&&is_int($v)&&in_array($v,$ownedIds['nurtition_target']??[],true))$v=array_search($v,$ownedIds['nurtition_target'],true)+1;elseif(in_array($k,['create_time','update_time'],true)&&is_string($v))$v='OWN_ORIGINAL_TIME';else $v=$normal($v);}unset($v);return $x;};
foreach($cases as &$c){$t=$c['body']['trace_id']??null;$c['trace_format_valid']=is_string($t)&&preg_match('/^[0-9a-f]{13}$/D',$t)===1;if($c['trace_format_valid'])$c['body']['trace_id']='VALID_DYNAMIC_TRACE';}unset($c);
$events=[];foreach(file($runtime.'/queries.jsonl',FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES)?:[] as $l)$events[]=json_decode($l,true);$auditRows=[];foreach(file($runtime.'/write-audit.jsonl',FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES)?:[] as $l)$auditRows[]=json_decode($l,true);
$report=['lane'=>$lane,'cases'=>$normal($cases),'findings'=>$findings,'original_proofs'=>$normal($proofs),'jobs'=>$normal($jobs),'retention'=>['mode'=>'retained-owned','counts'=>$retained,'natural_small_sha_unchanged'=>$before===$after,'excludes_only_exact_owned_pks'=>true,'large_before'=>$largeBefore,'large_after'=>$largeAfter,'large_full_sha'=>false],
    'resources'=>['token_absent'=>$cache->get($token)===null,'cache_files'=>$cacheFiles],'error'=>$error,'write_audit'=>$auditRows,'events'=>$events,'source_boundary'=>$boundary];file_put_contents($runtime.'/report.json',json_encode($report,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE));
echo json_encode(['lane'=>$lane,'http_cases'=>count($cases),'real_jobs'=>count($jobs),'findings'=>$findings,'retained_counts'=>$retained,'natural_small_sha_unchanged'=>$before===$after,'error'=>$error,'report'=>$runtime.'/report.json']),"\n";
exit($error!==null||$before!==$after||$cacheFiles!==0||in_array(false,array_column($auditRows,'owned_scope_verified'),true)?1:0);
