Capture current mission, AI, map and administration development

Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
This commit is contained in:
2026-10-13 22:52:53 +02:00
parent a951a96edc
commit 6a667d8deb
8104 changed files with 2124945 additions and 2061 deletions
+20 -2
View File
@@ -1,8 +1,9 @@
"""Execute actual Intel reroll methods against adversarial async inventory adapters."""
import re
import os, re
from pathlib import Path
from policy_harness import ROOT, body, run
service=ROOT/'addons/core/Scripts/Game/ERR/20_Intel/ERR_IntelService.c'
batch=ROOT/'addons/core/Scripts/Game/ERR/20_Intel/ERR_IntelReroll.c'
batch=Path(os.environ.get('ERR_INTEL_REROLL_SOURCE',ROOT/'addons/core/Scripts/Game/ERR/20_Intel/ERR_IntelReroll.c'))
def adapt(text,cls):
text=text.replace('protected ', '').replace('null','nullptr')
text=re.sub(r'array<([^>]+)> (\w+) = \{\};',r'Array<\1> \2;',text)
@@ -84,6 +85,23 @@ int main(){
Mode rejectMode;Service reject(&rejectMode);Actor ra,rf;Add(reject,ra);ra.inv.folders.Insert(&rf);ra.inv.acceptRemove=false;rejectMode.settings.chance=0;assert(reject.BeginReroll());reject.Tick(0);assert(reject.m_Reroll->Running()&&reject.m_Reroll->m_Failed==0&&!rejectMode.discovery.IsSpent(&rf)&&!rejectMode.owned.Contains(&rf));ra.inv.acceptRemove=true;reject.Tick(1);assert(ra.inv.removes==2&&rejectMode.discovery.IsSpent(&rf)&&rejectMode.owned.Contains(&rf));ra.inv.folders.Clear();rf.item.attached=false;reject.Tick(2);assert(!reject.m_Reroll->Running()&&reject.m_Reroll->m_Failed==0);
// Persistent refusal exhausts exactly thirty native attempts without spending.
Mode refusalMode;Service refusal(&refusalMode);Actor pa,pf;Add(refusal,pa);pa.inv.folders.Insert(&pf);pa.inv.acceptRemove=false;assert(refusal.BeginReroll());Drain(refusal);assert(pa.inv.removes==30&&refusal.m_Reroll->m_Failed==1&&!refusalMode.discovery.IsSpent(&pf)&&!refusalMode.owned.Contains(&pf)&&refusal.m_Reroll->m_Entries[0]->WaitingFor=="removal-refused");
// Completed entries must not monopolize all eight native-work slots. The
// last actor is still processed at most once, even when the scan wraps around.
{Mode sparseMode;Service sparse(&sparseMode);Batch pending(&sparseMode,&sparse,100);Actor cohort[20];
for(auto& actor:cohort){actor.hasInventory=false;pending.Add(&actor);}
for(int i=0;i<19;i++){pending.m_Entries[i]->Done=true;pending.m_Completed++;}
pending.Tick();assert(pending.m_Entries[19]->Attempts==1);
pending.Tick();assert(pending.m_Entries[19]->Attempts==2);
for(int i=0;i<19;i++)assert(pending.m_Entries[i]->Attempts==0);
}
// Large completed prefixes use no more than 32 cheap scans per tick. One
// remaining request advances on tick five rather than waiting seventeen.
{Mode largeMode;Service large(&largeMode);Batch pending(&largeMode,&large,100);Actor cohort[129];
for(auto& actor:cohort){actor.hasInventory=false;pending.Add(&actor);}
for(int i=0;i<128;i++){pending.m_Entries[i]->Done=true;pending.m_Completed++;}
for(int tick=0;tick<4;tick++){pending.Tick();assert(pending.m_Entries[128]->Attempts==0);assert(pending.m_Next==(tick+1)*32);}
pending.Tick();assert(pending.m_Entries[128]->Attempts==1);
}
// Tick budget, bounded missing inventory, Stop prevents further work/restart.
Mode manyMode;Service many(&manyMode);Actor actors[20];for(auto& actor:actors){actor.hasInventory=false;Add(many,actor);}assert(many.BeginReroll());many.Tick(0);int attempts=0;for(auto entry:many.m_Reroll->m_Entries)attempts+=entry->Attempts;assert(attempts==8);Drain(many,100);assert(many.m_Reroll->m_Failed==20);many.Stop();assert(!many.BeginReroll()&&many.m_Rolled.empty()&&many.m_Requests.IsEmpty()&&many.m_Reroll->m_Cancelled);for(auto entry:many.m_Reroll->m_Entries)assert(!entry->Actor&&!entry->Removing);
}