<?php
declare(strict_types=1);require __DIR__.'/bootstrap.php';$check(!is_file($runtime.'/fixture-journal.json'),'No successful preparation replay');$meta=json_decode(file_get_contents(__DIR__.'/structure-'.$lane.'.json'),true);$template=json_decode(file_get_contents(__DIR__.'/fixture-values-template.json'),true);$prior=json_decode(file_get_contents('/tmp/cdx-ai-admin-device-dishes-read5-20261011/private/evidence/final-original.json'),true)['original'];
$before=$own();foreach($prior as $t=>$rows)$check($before[$t]===$rows,'All old32 marked exact '.$t);foreach(['user_points_log','user_balance_log','user_feedback','user_grade'] as $t)$check($before[$t]===[],'New own rows absent '.$t);
$users=[];$avatars=[];foreach($tenants as $m=>$t){$u=array_values(array_filter($before['user'],static function($r)use($t){return (int)$r['store_id']===$t;}));$check(count($u)===1&&$u[0]['nick_name']==='CDXCM11F782_'.$m,'Prior exact marked user');$users[$m]=(int)$u[0]['user_id'];$avatars[$m]=(int)$u[0]['avatar_id'];$file=array_values(array_filter($before['upload_file'],static function($r)use($t,$avatars,$m){return (int)$r['store_id']===$t&&(int)$r['file_id']===$avatars[$m];}));$check(count($file)===1&&$file[0]['storage']==='local','Prior local avatar relationship');}
$plans=[];foreach(['user'=>'user_id','user_points_log'=>'log_id','user_balance_log'=>'log_id','user_feedback'=>'id'] as $table=>$pk){$schema=$meta['tables'][$table];$check($schema['foreign_keys']===0&&$schema['triggers']===0,'No unreviewed effects '.$table);$full=array_merge(array_keys($template[$table]),[$pk]);sort($full);$cols=array_column($schema['columns'],'column_name');sort($cols);$check($full===$cols,'Every nonPK value explicit '.$table);if($dm){$def=$read("SELECT DBMS_METADATA.GET_DDL('TABLE',?,'AIZHCT_APP') ddl FROM DUAL",[strtoupper('yoshop_'.$table)])[0]['ddl'];$check(preg_match('/"'.strtoupper($pk).'"[^,\n]*(?:IDENTITY\s*\(|AUTO_INCREMENT\b)/i',$def)===1,'Actual generated primary key '.$table);}else{$c=array_values(array_filter($schema['columns'],static function($c)use($pk){return $c['column_name']===$pk;}));$check(count($c)===1&&$c[0]['extra']==='auto_increment','Generated primary key '.$table);}
 foreach($table==='user_feedback'?['store'=>$tenants['store']]:$tenants as $module=>$tenant){$r=$template[$table];foreach($r as &$v){if($v==='@module_tenant')$v=$tenant;elseif($v==='@prior_module_user')$v=$users[$module];elseif($v==='@prior_store_user')$v=$users['store'];elseif($v==='@prior_module_avatar')$v=$avatars[$module];elseif(is_string($v))$v=str_replace('@module',$module,$v);}unset($v);foreach($schema['columns'] as $c){$k=$c['column_name'];if($k===$pk)continue;$check(array_key_exists($k,$r)&&$r[$k]!==null,'Explicit value '.$table.'.'.$k);$max=$c['character_maximum_length']??$c['data_length']??null;if(strpos(strtolower($c['data_type']),'char')!==false&&$max!==null)$check(mb_strlen((string)$r[$k],'UTF-8')<=(int)$max,'Capacity '.$table.'.'.$k);}$plans[]=['table'=>$table,'module'=>$module,'pk'=>$pk,'values'=>$r];}}
foreach(['user'=>['nick_name','CDXLF11F86A_%'],'user_points_log'=>[$dm?'"DESCRIBE"':'`describe`','CDXLF11F86A_%'],'user_balance_log'=>[$dm?'"DESCRIBE"':'`describe`','CDXLF11F86A_%'],'user_feedback'=>['contents','CDXLF11F86A_%']] as $t=>$v)$check((int)$read('SELECT COUNT(*) n FROM yoshop_'.$t.' WHERE '.$v[0].' LIKE ?',[$v[1]])[0]['n']===0,'Marker collision zero '.$t);
$persist('preflight-original.json',['lane'=>$lane,'original'=>$before,'plans'=>$plans,'old32_exact'=>true,'HTTP'=>0,'DML'=>0,'DDL'=>0]);$pub=['lane'=>$lane,'identity_verified'=>true,'old32_exact'=>true,'all_nonPK_explicit'=>true,'FK_trigger_zero'=>true,'generated_PK_verified'=>true,'marker_collision_zero'=>true,'proposed_INSERT'=>count($plans),'HTTP'=>0,'DML'=>0,'DDL'=>0,'template_sha256'=>hash_file('sha256',__DIR__.'/fixture-values-template.json')];file_put_contents(__DIR__.'/preflight-'.$lane.'.json',json_encode($pub,JSON_PRETTY_PRINT));echo json_encode($pub),"\n";
