<?php
declare(strict_types=1);
$lane=$argv[1]??'';if(!in_array($lane,['B','C'],true))exit(78);
$root=__DIR__;$red=json_decode((string)file_get_contents($root.'/private-response-pay_repeat_same_msgid_database.json'));$green=json_decode((string)file_get_contents($root.'/private-readonly-replay-response.json'));
$changes=[];$walk=static function($a,$b,string $path='$')use(&$walk,&$changes):void{if(is_object($a)&&is_object($b)){$ak=array_keys(get_object_vars($a));$bk=array_keys(get_object_vars($b));sort($ak);sort($bk);if($ak!==$bk){$changes[]=['path'=>$path,'kind'=>'keys'];return;}foreach($ak as $k)$walk($a->$k,$b->$k,$path.'.'.$k);}elseif(is_array($a)&&is_array($b)){if(count($a)!==count($b)){$changes[]=['path'=>$path,'kind'=>'count'];return;}foreach($a as $i=>$v)$walk($v,$b[$i],$path.'['.$i.']');}elseif($a!==$b)$changes[]=['path'=>$path,'kind'=>gettype($a)===gettype($b)?'value':'type','red_type'=>gettype($a),'green_type'=>gettype($b)];};$walk($red,$green);
$expected=$lane==='B'?[]:[['path'=>'$.data.pay_time','kind'=>'value','red_type'=>'string','green_type'=>'string']];$ok=$changes===$expected;
echo json_encode(['lane'=>$lane,'complete_wire_tree_diff'=>$changes,'exactly_expected_narrow_change'=>$ok,'red_wire_sha256'=>hash_file('sha256',$root.'/private-response-pay_repeat_same_msgid_database.json'),'green_wire_sha256'=>hash_file('sha256',$root.'/private-readonly-replay-response.json'),'no_values_or_pii_exported'=>true]),"\n";exit($ok?0:2);
