<?php
declare(strict_types=1);$lane=$argv[1]??'';if(!in_array($lane,['B','C'],true))exit(78);$base=__DIR__;$runtime=$base.'/private';$state=json_decode(file_get_contents($runtime.'/state.json'),true);$socket=@fsockopen('127.0.0.1',$state['port'],$e,$m,1);if($socket){fclose($socket);throw new RuntimeException('Worker still open');}if(is_dir('/proc/'.$state['pid']))throw new RuntimeException('Worker PID still alive');$remove=static function($path)use(&$remove,$base){if(strpos($path,$base.'/')!==0||$path===$base.'/private/evidence')throw new RuntimeException('Cleanup scope');if(is_link($path)||is_file($path)){unlink($path);return;}if(is_dir($path)){foreach(scandir($path) as $name)if($name!=='.'&&$name!=='..')$remove($path.'/'.$name);rmdir($path);}};
$cacheFiles=is_dir($runtime.'/cache')?count(array_filter(glob($runtime.'/cache/*'),static function($f){return is_file($f)&&basename($f)!=='.htaccess';})):0;$remove($base.'/source');foreach(glob($runtime.'/*') as $file)if(basename($file)!=='evidence')$remove($file);$evidence=glob($runtime.'/evidence/*');$modes=true;foreach($evidence as $f)$modes=$modes&&((fileperms($f)&0777)===0600);$out=['lane'=>$lane,'worker_pid'=>$state['pid'],'port'=>$state['port'],'port_closed'=>true,'pid_gone'=>true,'source_removed'=>!file_exists($base.'/source'),'private_cache_cli_header_native_removed'=>true,'evidence_files'=>count($evidence),'evidence_0600'=>$modes,'evidence_dir_0700'=>(fileperms($runtime.'/evidence')&0777)===0700,'cache_files_before_cleanup'=>$cacheFiles,'preserved_master_original18102'=>true];file_put_contents($base.'/resource-cleanup-'.$lane.'.json',json_encode($out,JSON_PRETTY_PRINT));echo json_encode($out),"\n";
