<?php
require __DIR__.'/execute.php';$checks=0;
function red($fn,$name){global $checks;$failed=false;try{$fn();}catch(Throwable $e){$failed=true;}f27_assert($failed,'RED reject '.$name);$checks++;}
function green($fn,$name){global $checks;$fn();$checks++;}
foreach(f27_reference()as $lane=>$p){green(static function()use($p){f27_gate($p);},'literal '.$lane);foreach(['SQL','binds','PDO_types','ordinal','role']as $key){$bad=$p;$bad['steps'][0][$key]=$key==='SQL'?'DELETE FROM YDY_PREPAY_ORDER':($key==='binds'||$key==='PDO_types'?['unknown']:99);red(static function()use($bad){f27_gate($bad);},$lane.' changed '.$key);}foreach(['table','marker','runtime_directory','budget']as $key){$bad=$p;$bad[$key]='unknown';red(static function()use($bad){f27_gate($bad);},$lane.' owner/budget '.$key);}
$st=['cursor'=>0,'read'=>0,'DML'=>0,'DDL'=>0,'created'=>false,'trigger_created'=>false,'collision_zero'=>false,'protected'=>false,'drop_proof'=>false,'table_drop_proof'=>false];$s=$p['steps'][0];$replay=$st;$replay['cursor']=1;red(static function()use($p,$s,$replay){f27_step_gate($p,$s,$replay);},'replay');$over=$st;$over['read']=$p['budget']['read'];red(static function()use($p,$s,$over){f27_step_gate($p,$s,$over);},'read budget');foreach($p['steps']as $s)if($s['kind']==='DDL'){$bad=$st;$bad['cursor']=$s['ordinal']-1;red(static function()use($p,$s,$bad){f27_step_gate($p,$s,$bad);},'unknown CREATE/DROP');}
$r=[];$t=[];foreach($p['columns']as $i=>$c){$k=strtolower($c);$r[$k]=$p['baseline'][$i];$t[$k]=gettype($r[$k]);}$r['clock0']='2026-10-11 12:00:00';$r['clock6']='2026-10-11 12:00:00.000000';foreach($p['dates']as $c)$r['f_'.strtolower($c)]=$r[strtolower($c)].'.000000';green(static function()use($r,$t,$p){f27_snapshot([$r],[$t],$p);},'full own row');$alien=$r;$alien['machid']='foreign';red(static function()use($alien,$t,$p){f27_snapshot([$alien],[$t],$p);},'foreign lease');red(static function()use($r,$t,$p){f27_snapshot([$r,$r],[$t,$t],$p);},'foreign extra row');
$mutation=null;foreach($p['steps']as $s)if($s['role']==='mutation'){$mutation=$s;break;}$after=$r;$after[strtolower($mutation['changed_column'])]=$mutation['binds'][0];$after['update_time']=$r['clock0'];green(static function()use($r,$after,$t,$mutation,$p){f27_transition([$r],[$after],[$t],[$t],$mutation,$p);},'boundary true');foreach(['expire_time','create_time','price','raw_request_c']as $key){$bad=$after;$bad[$key]=$key==='price'?99:'unexpected-byte';red(static function()use($r,$bad,$t,$mutation,$p){f27_transition([$r],[$bad],[$t],[$t],$mutation,$p);},'illegal full-row delta '.$key);}$badtypes=$t;$badtypes['price']='string';red(static function()use($r,$after,$t,$badtypes,$mutation,$p){f27_transition([$r],[$after],[$t],[$badtypes],$mutation,$p);},'native type drift');
$self=null;foreach($p['steps']as $s)if($s['role']==='mutation'&&$s['changed_column']===null){$self=$s;break;}green(static function()use($r,$t,$self,$p){f27_transition([$r],[$r],[$t],[$t],$self,$p);},'self anchor observed');$auto=$r;$auto['update_time']=$r['clock0'];green(static function()use($r,$auto,$t,$self,$p){f27_transition([$r],[$auto],[$t],[$t],$self,$p);},'self auto observed not false green');red(static function()use($p){f27_execute($p,['plan_sha'=>'not-approved']);},'no approval before config/connection/runtime');
}
echo f27_json(['status'=>'PURE_FULL27_TEST_GREEN','checks'=>$checks,'connections'=>0,'SQL'=>0,'HTTP'=>0])."\n";
