<?php
declare(strict_types=1);require __DIR__.'/bootstrap.php';$check(!is_file($runtime.'/private-green-journal.json'),'No green write replay');$old=json_decode(file_get_contents($runtime.'/private-report.json'),true);$before=$snapshot();$check($before===$old['before'],'Protected originals unchanged before green');$cases=[];$errors=[];$owned=[];$tokens=[];$stats=[];$collections=[];
$save=static function()use($runtime,&$cases,&$errors,&$owned,&$stats,&$collections,$before,$boundary){file_put_contents($runtime.'/private-green-journal.json',json_encode(['lane'=>getenv('SIGN_LANE'),'before'=>$before,'boundary'=>$boundary,'cases'=>$cases,'errors'=>$errors,'owned'=>$owned,'cli_stats'=>$stats,'collections'=>$collections],JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_PRESERVE_ZERO_FRACTION));chmod($runtime.'/private-green-journal.json',0600);};$save();
foreach($tenants as $module=>$tenant){$tokens[$module]=bin2hex(random_bytes(24));$cache->set($tokens[$module],['user'=>['store_user_id'=>$tenant,'store_id'=>$tenant,'real_name'=>$marker,'user_name'=>$marker,'is_super'=>1],'store_id'=>$tenant,'is_login'=>true],3600);}$save();require __DIR__.'/request_green.php';
if($lane==='B'){foreach($tenants as $module=>$tenant){$owned[$module]=$old['owned'][$module];$req($module,'FINAL_DETAIL','detail',['signId'=>$owned[$module]]);$req($module,'FINAL_LIST','list',['search'=>$marker]);}}
else foreach($tenants as $module=>$tenant){try{$req($module,'AUTH','list',[],401,null,false);$req($module,'EMPTY','list');$req($module,'REQUIRED_TITLE','add',['form'=>[]],500,'活动名称不能为空');$form=['title'=>'城市骑行活动 '.$marker.' '.$module,'cover_img_id'=>0,'rule_img_id'=>0,'start_time'=>'2026-10-20 08:30:00','end_time'=>'2026-10-21 17:45:00','status'=>2,'addressList'=>[['address'=>'东门集合点 '.$marker],['address'=>'文化广场 '.$marker]]];$c=$req($module,'ADD','add',['form'=>$form]);$check($c['body']->status===200,'Actual successful green add');$rows=$q('SELECT * FROM yoshop_sign_action WHERE store_id=? AND is_delete=0 ORDER BY id',[$tenant]);$check(count($rows)===1&&$rows[0]['title']===$form['title'],'Exact new own added row');$id=(int)$rows[0]['id'];$owned[$module]=$id;$save();$req($module,'DETAIL','detail',['signId'=>$id]);$req($module,'LIST','list',['search'=>$marker]);$a=$q('SELECT * FROM yoshop_sign_address WHERE action_id=? ORDER BY id',[$id]);$check(count($a)===2,'Two green own address rows');$form['title']='城市骑行复核 '.$marker.' '.$module;$form['status']=1;$form['addressList']=[['id'=>(int)$a[0]['id'],'address'=>'东门出发点 '.$marker],['id'=>(int)$a[1]['id'],'address'=>'文化广场复核 '.$marker]];$req($module,'EDIT','edit',['signId'=>$id,'form'=>$form]);$req($module,'DETAIL_EDITED','detail',['signId'=>$id]);$req($module,'SEARCH_MISS','list',['search'=>'NO_MATCH_'.$marker]);$other=$module==='store'?'terminal':'store';if(isset($owned[$other])){$req($module,'TENANT_DETAIL','detail',['signId'=>$owned[$other]],500,'打卡活动不存在');$req($module,'TENANT_DELETE','delete',['signId'=>$owned[$other]],500,'打卡活动不存在');}$req($module,'DELETE','delete',['signId'=>$id]);$req($module,'LIST_DELETED','list',['search'=>$marker]);$req($module,'DETAIL_DELETED','detail',['signId'=>$id]);$req($module,'MISSING_DETAIL','detail',['signId'=>2147001599],500,'打卡活动不存在');$req($module,'MISSING_EDIT','edit',['signId'=>2147001599,'form'=>$form],500,'打卡活动不存在');$req($module,'MISSING_DELETE','delete',['signId'=>2147001599],500,'打卡活动不存在');$req($module,'FINAL_DETAIL','detail',['signId'=>$id]);$req($module,'FINAL_LIST','list',['search'=>$marker]);}catch(Throwable $e){$errors[]=['module'=>$module,'message'=>$e->getMessage()];$save();}}
$after=$snapshot();$report=['lane'=>$lane,'phase'=>'green','before'=>$before,'after'=>$after,'protected_unchanged'=>$before===$after,'cases'=>$cases,'errors'=>$errors,'owned'=>$owned,'cli_stats'=>$stats,'boundary'=>$boundary,'final_original'=>$own()];file_put_contents($runtime.'/private-green-report.json',json_encode($report,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_PRESERVE_ZERO_FRACTION));chmod($runtime.'/private-green-report.json',0600);$save();echo json_encode(['lane'=>$lane,'requests'=>count($cases),'cli_failures'=>array_sum(array_column($stats,'failures')),'errors'=>$errors,'owned'=>$owned,'protected_unchanged'=>$before===$after]),"\n";
