replace(['preview'=>$token]);try{$r=$controller->confirm(request(),$rm);return['status'=>$r->getStatusCode(),'value'=>$r->getData(true)];}catch(Symfony\Component\HttpKernel\Exception\HttpExceptionInterface$e){return['status'=>$e->getStatusCode()];}}; if($mode==='prepare'){$wk=$uuid();$rk=$uuid();$pk=$uuid();$wd=array_replace($workerData,['code'=>'QA-CONC-'.strtoupper(substr(str_replace('-','',$wk),0,10))]);foreach([['worker',$wk,$wd],['rules',$rk,$rulesData]]as[$kind,$key,$data]){[$a]=$command(13,$input($kind,$key,0,$data));[$b]=$command(14,$input($kind,$key,1,['decision'=>'approved'],'review'));}$pd=['operation'=>'establish','worker_key'=>$wk,'rules_key'=>$rk,'period'=>'2026-11','gross'=>'10000.00'];[$a]=$command(13,$input('payroll',$pk,0,$pd));$review=$input('payroll',$pk,1,['decision'=>'approved'],'review');$ka=$uuid();$kb=$uuid();$a=$preview(14,$review,$ka);$b=$preview(14,$review,$kb);file_put_contents($directory.'/cuts.json',json_encode(['first'=>$a['preview'],'second'=>$b['preview'],'payroll_key'=>$pk]));echo json_encode(['passed'=>true]).PHP_EOL;exit;} if($mode==='inspect'){$pid=json_decode(file_get_contents($directory.'/locked.json'),true)['host_pid'];$rows=$host->select('SELECT pid,wait_event_type,wait_event,pg_blocking_pids(pid) blockers FROM pg_stat_activity WHERE ? = ANY(pg_blocking_pids(pid))',[$pid]);file_put_contents($directory.'/blocking.json',json_encode(['blocker_host_pid'=>$pid,'waiters'=>$rows,'blocker_holds_company_for_update'=>true]));exit;} $c=json_decode(file_get_contents($directory.'/cuts.json'),true); if($mode==='first'){$host->beginTransaction();try{$out=$http(14,$c['first']);if($out['status']!==200)throw new LogicException('First command failed');file_put_contents($directory.'/locked.json',json_encode(['host_pid'=>$host->selectOne('SELECT pg_backend_pid() pid')->pid,'status'=>$out['status']]));$end=microtime(true)+25;while(!is_file($directory.'/release')&µtime(true)<$end)usleep(50000);$host->commit();}finally{while($host->transactionLevel()>0)$host->rollBack();}exit;} if($mode==='second'){$start=microtime(true);$out=$http(14,$c['second']);file_put_contents($directory.'/second.json',json_encode(['status'=>$out['status'],'seconds'=>microtime(true)-$start]));exit;} if($mode==='recover'){$out=$http(14,$c['second']);$again=$http(14,$c['first']);$count=$host->table('rm_versions')->where('record_key',$c['payroll_key'])->count();$commands=$host->table('rm_commands')->whereRaw("input->>'record_key'=?",[$c['payroll_key']])->count();$proof=['passed'=>$out['status']===409&&$again['status']===200&&$again['value']['replayed']&&$count===2&&$commands===2,'after_release'=>$out['status'],'original_replay'=>$again['status'],'payroll_versions'=>$count,'payroll_commands'=>$commands,'regression_only'=>true,'financial_effects'=>0];file_put_contents($directory.'/recovery.json',json_encode($proof));echo json_encode($proof).PHP_EOL;}