from pathlib import Path import hashlib,json,subprocess R=Path('/home/jakub/devel/escapistsrereintroduced'); D=Path('/tmp/erri-ai-review-1509') files=['addons/core/Scripts/Game/ERR/10_AI/ERR_InfantryResupply.c','tests/test_infantry_resupply_planning.py','tests/test_infantry_resupply_coordinator.py','tests/test_infantry_ammo_transfer.py'] baseline={} for f in files: b=(R/f).read_bytes(); p=D/'baseline'/f;p.parent.mkdir(parents=True,exist_ok=True);p.write_bytes(b) q=D/f;q.parent.mkdir(parents=True,exist_ok=True);q.write_bytes(b) index=subprocess.run(['git','show',':'+f],cwd=R,capture_output=True,check=True).stdout ip=D/'index'/f;ip.parent.mkdir(parents=True,exist_ok=True);ip.write_bytes(index) baseline[f]={'working_sha256':hashlib.sha256(b).hexdigest(),'index_sha256':hashlib.sha256(index).hexdigest()} (D/'baseline.json').write_text(json.dumps(baseline,indent=2)+'\n') p=D/files[0];s=p.read_text().replace('(m_State == 7 && m_LauncherTrip)','m_State == 7').replace('Finish("launcher custody settled; original claims released without retry or refund")','Finish("magazine custody settled; original claims released without retry or refund")').replace('(m_LauncherTrip && m_Move && m_Move.Unresolved())','(m_Move && m_Move.Unresolved())');p.write_text(s) p=D/files[1];s=p.read_text();start=s.index(' // A submitted unknown mine retains');end=s.index(' // Removed stock',start);block=s[start:end];block=block.replace('mine retains','rifle move retains').replace('first.s.m_MineMove=&leaf;first.s.m_MineTrip=true;','first.s.m_Move=&leaf;').replace('unknown native move','accepted native rifle move remains unresolved');s=s[:start]+block+s[start:];p.write_text(s) p=D/files[2];s=p.read_text();s=s.replace('f.s.m_Move==&leaf&&f.hq.token==0&&!f.truck.SupplyHeld&&f.s.m_Stopped','f.s.m_Move==&leaf&&f.hq.token==7&&f.truck.SupplyHeld&&f.s.m_State==7&&f.s.m_Stopped');s=s.replace('assert(f.s.audits==audits&&leaf.stops==1);','assert(f.s.audits==audits&&leaf.stops==1);leaf.unresolved=false;f.s.Tick(6000);assert(f.hq.token==0&&!f.truck.SupplyHeld&&f.s.m_State==1&&!f.s.m_Move);');p.write_text(s) p=D/files[3];s=p.read_text();at=s.index(' // Rifle moves must obey');extra=r''' // The shared force claim is necessary: independent rifle leaves can otherwise // submit the same still-carried empty to two different trucks. Native acceptance // is delayed here; this proves submission interference, not an engine outcome. {EmptyFixture first;Fixture second;ERR_GameMode::current=&first.mode; first.ledger.records.Insert(&second.donorRecord);second.source.selected=&second.sourceStorage; auto old=first.Job();assert(old.Tick(0)==PENDING&&old.Unresolved()); assert(old.m_ReturnMagazine==&first.empty&&old.m_ReturnStorage==&first.sourceStorage); old.Stop();assert(old.Unresolved()&&old.Tick(180001)==FAILED); ERR_InfantryAmmoTransfer next(&first.mode,&second.truck,&second.donorGroup,&first.recipient,&first.recipientGroup,&second.magEntity,true); assert(next.Tick(180001)==PENDING&&next.Unresolved()); assert(first.destination.calls==2&&next.m_ReturnMagazine==old.m_ReturnMagazine); assert(next.m_ReturnStorage==&second.sourceStorage&&next.m_ReturnStorage!=old.m_ReturnStorage); assert(first.destination.items.Contains(&first.empty)&&first.source.calls==0&&second.source.calls==0); // No duplicate object is invented: one physical completion can settle only its // original donor proof; the competing outstanding submission remains unknown. first.Return();old.m_ReturnCallback->OnComplete();assert(!old.Unresolved()&&next.Unresolved()); assert(old.Tick(180002)==FAILED&&first.source.calls==0&&second.source.calls==0);} ''';s=s[:at]+extra+s[at:];p.write_text(s)