<?php
declare(strict_types=1);
// Offline artifact correction only: no PDO, HTTP, or business replay.
require __DIR__.'/contract.php';$runtime=$argv[1]??'';if(!is_dir($runtime)||is_link($runtime)){exit(78);}putenv('SM7_RUNTIME='.$runtime);$r=smLoad('report-private.json');$sources=smLoad('source-private.json');$responses=smLoad('responses-private.json');$history=$runtime.'/tool-red-json-options';if(is_dir($history)){throw new RuntimeException('Already rechecked');}mkdir($history,0700);foreach(['report','source','responses'] as $f){copy($runtime.'/'.$f.'-private.json',$history.'/'.$f.'-private.json');}
foreach($sources as $name=>&$proof){foreach(['before','after'] as $stage){$proof[$stage]['body']=json_decode(json_encode($proof[$stage]['body'],JSON_UNESCAPED_UNICODE|JSON_THROW_ON_ERROR));}$d=[];n6Strict($proof['before']['body'],$responses[$name]['body'],'$',$d);foreach($r['cases'] as &$case){if($case['case']===$name){$case['differences']=$d;$case['source_pass']=$case['http_status']===200&&$d===[]&&$case['source_window_unchanged'];}}unset($case);}unset($proof);smSave('source-private.json',$sources);smSave('report-private.json',$r);smSave('cases-private.json',$r['cases']);smSave('tool-json-options-recheck-private.json',['old_expected_json_encode_param'=>JSON_UNESCAPED_UNICODE|JSON_PRESERVE_ZERO_FRACTION,'correct_original_options'=>JSON_UNESCAPED_UNICODE,'business_requests_replayed'=>0,'database_operations'=>0,'preserved_initial_red'=>true]);echo json_encode(['cases'=>count($sources),'business_http_replayed'=>0,'database_operations'=>0]),PHP_EOL;
