Files
EscapistsReintroduced/docs/evidence/config-supply-recovery-2026-10-03/supply/prepare.py
T
jakub 6a667d8deb Capture current mission, AI, map and administration development
Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
2026-10-13 22:52:53 +02:00

35 lines
3.6 KiB
Python

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)