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
@@ -0,0 +1,11 @@
{
"cause": "Vanilla Kill submits max-health TRUE damage via HandleDamage; the successor ordinary hitzone cap remains active until the per-actor revivable flag is cleared.",
"sdk_source": "/tmp/erri-vanilla-stock/scripts/GameCode/Components/SCR_DamageManagerComponent.c:536",
"inheritance_source": "/tmp/erri-vanilla-stock/scripts/Game/generated/Components/ExtendedDamageManagerComponent.c:12",
"native_failure": ".build/death-fixed-profile-0012/logs/logs_2026-10-02_00-07-01/console.log",
"scope": "WORKBENCH-only, errSmoke=1, server, active mode, canonical living exact expected actor; no flag restoration before delayed damage; ordinary other actors unchanged",
"tests": {
"red": "Actual production cap blocks original super.Kill-only helper",
"green": "Exact owned actor cap disabled through synchronous and deferred native damage boundaries; ownership and authorization refusals retain protection"
}
}
@@ -0,0 +1 @@
PASS: actual protected/capped damage plus exact-actor terminal fixture bypass through delayed native damage, fail-closed ownership and untouched ordinary actor; no native claim
@@ -0,0 +1,19 @@
check: /home/jakub/devel/escapistsrereintroduced/.build/death-diagnostic-2153/test-tmp/err-policy-lkes1_si/check.cpp:82: int main(): Assertion `f.failures==0 && f.m_ERRSmokeStep==9 && !f.actor.alive && f.medical.fatalities==1' failed.
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/.build/death-diagnostic-2153/cap-supplement/tests/test_native_player_death_fixture.py", line 31, in <module>
run(r'''
~~~^^^^^
#include <algorithm>
^^^^^^^^^^^^^^^^^^^^
...<54 lines>...
}
^
''')
^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/policy_harness.py", line 14, in run
subprocess.run([str(p/'check')],check=True)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/subprocess.py", line 578, in run
raise CalledProcessError(retcode, process.args,
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['/home/jakub/devel/escapistsrereintroduced/.build/death-diagnostic-2153/test-tmp/err-policy-lkes1_si/check']' died with <Signals.SIGABRT: 6>.
@@ -0,0 +1,219 @@
--- a/addons/core/Scripts/Game/ERR/00_Core/ERR_PlayerMedical.c
+++ b/addons/core/Scripts/Game/ERR/00_Core/ERR_PlayerMedical.c
@@ -48,10 +48,16 @@
#ifdef WORKBENCH
// Explicit terminal-lifecycle fixture only. Ordinary Kill retains casualty protection.
// This helper belongs in the same modded class so super bypasses our Kill override.
- bool ERR_ForceFatalLossForTest(notnull Instigator instigator)
+ bool ERR_ForceFatalLossForTest(notnull Instigator instigator, IEntity expectedActor)
{
string enabled;
if (!Replication.IsServer() || !System.GetCLIParam("errSmoke", enabled) || enabled != "1") return false;
+ IEntity actor = GetOwner();
+ ERR_GameMode mode = ERR_GameMode.Get();
+ if (!expectedActor || actor != expectedActor || !ERR_Actors.Alive(actor) || !mode || !mode.Active() || !mode.Players() || !mode.Players().CurrentActor(actor)) return false;
+ // Vanilla Kill uses HandleDamage, so the ordinary hitzone cap also applies.
+ // Disable it for this exact terminal fixture actor through deferred processing.
+ m_ERRRevivablePlayer = false;
super.Kill(instigator);
return true;
}
--- a/addons/core/Scripts/Game/ERR/40_Chat/ERR_NativeSmoke.c
+++ b/addons/core/Scripts/Game/ERR/40_Chat/ERR_NativeSmoke.c
@@ -500,7 +500,7 @@
if (!ERR_Check(damage && damage.ERR_IsRevivablePlayer() && character && character.IsUnconscious(), "ordinary protected Kill makes the prisoner unconscious")) return;
Print("ERR DEATH FIXTURE: protected casualty verified; explicitly forcing fatal loss only to test spent-life spectator and terminal cleanup");
m_ERRSmokeStep = 9;
- if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
+ if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer), m_ERRSmokePlayer), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
protected void ERR_SmokeTick()
@@ -937,7 +937,7 @@
m_ERRSmokeStep = 9;
SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
damage.EnableDamageHandling(true);
- if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
+ if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer), m_ERRSmokePlayer), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 110)
@@ -948,7 +948,7 @@
m_ERRSmokeStep = 9;
SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
damage.EnableDamageHandling(true);
- if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
+ if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer), m_ERRSmokePlayer), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 109)
@@ -963,7 +963,7 @@
SCR_CharacterDamageManagerComponent damage;
damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
if (!ERR_Check(damage != null, "local handoff final original prisoner damage component retained")) return;
- damage.EnableDamageHandling(true); if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
+ damage.EnableDamageHandling(true); if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer), m_ERRSmokePlayer), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 108)
@@ -975,7 +975,7 @@
m_ERRSmokeStep = 9;
SCR_CharacterDamageManagerComponent damage;
damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
- damage.EnableDamageHandling(true); if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
+ damage.EnableDamageHandling(true); if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer), m_ERRSmokePlayer), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 107)
@@ -988,7 +988,7 @@
SCR_CharacterDamageManagerComponent damage;
damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
damage.EnableDamageHandling(true);
- if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
+ if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer), m_ERRSmokePlayer), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 3100)
@@ -1035,7 +1035,7 @@
SCR_CharacterDamageManagerComponent damage;
damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
damage.EnableDamageHandling(true);
- if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
+ if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer), m_ERRSmokePlayer), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 100)
@@ -1046,7 +1046,7 @@
m_ERRSmokeStep = 9;
SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
damage.EnableDamageHandling(true);
- if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
+ if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer), m_ERRSmokePlayer), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 92)
--- a/tests/test_native_player_death_fixture.py
+++ b/tests/test_native_player_death_fixture.py
@@ -1,4 +1,4 @@
-"""Execute actual protected/dead fixture staging; native damage and queue are boundaries."""
+"""Actual fixture staging and hitzone cap, with vanilla max-health damage boundary."""
import os
from pathlib import Path
from policy_harness import ROOT, body, run
@@ -6,27 +6,30 @@
p=base/'addons/core/Scripts/Game/ERR/00_Core/ERR_PlayerMedical.c'
f=base/'addons/core/Scripts/Game/ERR/40_Chat/ERR_NativeSmoke.c'
def convert(s):
- s=s.replace('protected ', '').replace('override ','').replace('notnull Instigator instigator','int instigator')
+ s=s.replace('protected ', '').replace('override ','').replace('notnull Instigator instigator','int instigator').replace('IEntity expectedActor','Actor* expectedActor')
s=s.replace('Replication.IsServer()','server').replace('System.GetCLIParam','System::GetCLIParam').replace('super.','Native::')
s=s.replace('SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));','Medical* damage = &medical;')
s=s.replace('CharacterControllerComponent character = CharacterControllerComponent.Cast(m_ERRSmokePlayer.FindComponent(CharacterControllerComponent));','Actor* character = m_ERRSmokePlayer;')
s=s.replace('Instigator.CreateInstigator(m_ERRSmokePlayer)','0').replace('ERR_Actors.Alive(m_ERRSmokePlayer)','m_ERRSmokePlayer->alive')
+ s=s.replace('IEntity actor = GetOwner();','Actor* actor = GetOwner();').replace('ERR_GameMode mode = ERR_GameMode.Get();','Mode* mode = Mode::current;').replace('ERR_Actors.Alive(actor)','(actor && actor->alive)')
+ s=s.replace('mode.', 'mode->').replace('Players().CurrentActor','Players()->CurrentActor')
s=s.replace('damage.','damage->').replace('character.','character->')
return s
kill=convert(body(p,'override void Kill('))
-if 'bool ERR_ForceFatalLossForTest(' in p.read_text():
- fatal=convert(body(p,'bool ERR_ForceFatalLossForTest('))
- begin=convert(body(f,'protected void ERR_BeginProtectedDeathProbe('))
- complete=convert(body(f,'protected void ERR_CompleteProtectedDeathProbe('))
-else:
- # Reproduce the pre-fix path using its actual branch, not a replacement policy.
- old=body(f,'if (m_ERRTestPlayerDeath)\n\t\t\t{')
- old=old[old.index('{'):]
- old=old.replace('SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent)).Kill(Instigator.CreateInstigator(m_ERRSmokePlayer));','medical.Kill(0);')
- begin='void ERR_BeginProtectedDeathProbe(float now) '+old
- complete='void ERR_CompleteProtectedDeathProbe(float) {}'
- fatal='bool ERR_ForceFatalLossForTest(int) {return false;}'
+fatal=convert(body(p,'bool ERR_ForceFatalLossForTest('))
+# Permit the unchanged helper's older signature for the runtime red test.
+if 'Actor* expectedActor' not in fatal:
+ fatal=fatal.replace('int instigator)', 'int instigator, Actor* expectedActor)')
+begin=convert(body(f,'protected void ERR_BeginProtectedDeathProbe('))
+complete=convert(body(f,'protected void ERR_CompleteProtectedDeathProbe('))
+complete=complete.replace('ERR_ForceFatalLossForTest(0)', 'ERR_ForceFatalLossForTest(0, m_ERRSmokePlayer)')
+cap=body(p,'static float AllowedDamage(').replace('Math.Clamp','std::clamp').replace('Math.Min','std::min').replace('Math.Max','std::max').replace('0.01','0.01f').replace(', 1)',', 1.0f)').replace('(0,','(0.0f,')
+effective=body(p,'override float ComputeEffectiveDamage(')
+effective=effective.replace('override ', '').replace('notnull BaseDamageContext damageContext','float damageContext').replace('super.','NativeZone::')
+effective=effective.replace('Replication.IsServer()','server').replace('SCR_CharacterResilienceHitZone.Cast(this)','resilience')
+effective=effective.replace('SCR_CharacterDamageManagerComponent manager = SCR_CharacterDamageManagerComponent.Cast(GetHitZoneContainer());','Medical* manager = medical;').replace('manager.','manager->').replace('ERR_PlayerMedicalRules.','').replace('EDamageState.DESTROYED','0')
run(r'''
+#include <algorithm>
#include <cassert>
#include <string>
#include <map>
@@ -34,47 +37,58 @@
bool server=true;
namespace System { std::map<string,string> args; bool GetCLIParam(string key,string& out){auto it=args.find(key);if(it==args.end())return false;out=it->second;return true;} }
struct Actor {bool alive=true, unconscious=false;bool IsUnconscious(){return unconscious;}};
-struct Native {Actor* actor;int fatalities=0; void Kill(int){fatalities++;actor->alive=false;}};
+struct Roster {Actor* owned=nullptr;bool CurrentActor(Actor* actor){return actor==owned;}};
+struct Mode {static inline Mode* current=nullptr;bool active=true,haveRoster=true;Roster roster;bool Active(){return active;}Roster* Players(){return haveRoster?&roster:nullptr;}};
+struct Native {Actor* actor;int fatalities=0;bool deferred=false,damagePending=false;virtual float AppliedDamage(float)=0;void Kill(int){fatalities++;if(deferred){damagePending=true;return;}Damage();}void Damage(){damagePending=false;actor->alive=AppliedDamage(100)<100;}Actor* GetOwner(){return actor;}};
struct Medical: Native {
bool m_ERRRevivablePlayer=true,pending=false; int requests=0;
void ERR_RequestKnockout(){requests++;pending=true;}
void Settle(){if(pending){actor->unconscious=true;pending=false;}}
bool ERR_IsRevivablePlayer(){return m_ERRRevivablePlayer;}
+ float AppliedDamage(float damage) override;
''' + kill+fatal+r'''
};
+''' + cap + r'''
+struct NativeZone {float ComputeEffectiveDamage(float damage,bool){return damage;}};
+struct Zone: NativeZone {bool m_ERRWoundQuery=false,resilience=false;Medical* medical;float GetHealth(){return 100;}float GetMaxHealth(){return 100;}float GetDamageStateThreshold(int){return 0;}
+''' + effective + r'''
+};
+float Medical::AppliedDamage(float damage){Zone zone;zone.medical=this;return zone.ComputeEffectiveDamage(damage,false);}
void Print(string){}
struct Fixture {
- Actor actor;Medical medical;Actor* m_ERRSmokePlayer=&actor;int m_ERRSmokeStep=0;float m_ERRSmokeWait=0;int failures=0;
- Fixture(){medical.actor=&actor;}
+ Actor actor;Medical medical;Mode mode;Actor* m_ERRSmokePlayer=&actor;int m_ERRSmokeStep=0;float m_ERRSmokeWait=0;int failures=0;
+ Fixture(){medical.actor=&actor;mode.roster.owned=&actor;Mode::current=&mode;}
bool ERR_Check(bool ok,string){if(!ok)failures++;return ok;}
''' + begin+complete+r'''
};
int main(){
System::args={{"errSmoke","1"}};
Fixture f; f.ERR_BeginProtectedDeathProbe(100);
- // This fails on the prior actual branch: it entered the death assertion stage
- // despite invoking protected Kill, whose native callback has not run yet.
assert(f.m_ERRSmokeStep==92 && f.actor.alive && f.medical.requests==1 && f.medical.fatalities==0);
assert(!f.actor.unconscious && f.m_ERRSmokeWait==1100);
f.medical.Settle(); f.ERR_CompleteProtectedDeathProbe(1100);
+ // Old helper failed here: super.Kill still goes through the actual hitzone cap.
assert(f.failures==0 && f.m_ERRSmokeStep==9 && !f.actor.alive && f.medical.fatalities==1);
- assert(f.medical.m_ERRRevivablePlayer && f.medical.requests==1 && f.m_ERRSmokeWait==5100);
- // Explicit native bypass cannot alter ordinary Kill's protection afterward.
- f.actor.alive=true;f.actor.unconscious=false;f.medical.Kill(0);
- assert(f.actor.alive && f.medical.requests==2 && f.medical.fatalities==1);
+ assert(!f.medical.m_ERRRevivablePlayer && f.medical.requests==1 && f.m_ERRSmokeWait==5100);
+ {Fixture q;q.medical.deferred=true;assert(q.medical.ERR_ForceFatalLossForTest(0,&q.actor));assert(q.actor.alive&&q.medical.damagePending&&!q.medical.m_ERRRevivablePlayer);q.medical.Damage();assert(!q.actor.alive);}
+ // An unrelated ordinary actor retains full protection; test flag never global.
+ {Fixture q;q.medical.Kill(0);assert(q.actor.alive&&q.medical.requests==1&&q.medical.fatalities==0&&q.medical.m_ERRRevivablePlayer);}
{Fixture q;q.ERR_CompleteProtectedDeathProbe(1100);assert(q.failures==1&&q.medical.fatalities==0);}
{Fixture q;q.actor.alive=false;q.ERR_CompleteProtectedDeathProbe(1100);assert(q.failures==1&&q.medical.fatalities==0);}
{Fixture q;q.medical.m_ERRRevivablePlayer=false;q.ERR_BeginProtectedDeathProbe(100);assert(q.failures==1&&q.medical.requests==0&&q.medical.fatalities==0);}
- {Fixture q;server=false;assert(!q.medical.ERR_ForceFatalLossForTest(0)&&q.actor.alive);server=true;}
- {Fixture q;System::args.clear();assert(!q.medical.ERR_ForceFatalLossForTest(0)&&q.actor.alive);System::args["errSmoke"]="0";assert(!q.medical.ERR_ForceFatalLossForTest(0)&&q.actor.alive);}
+ {Fixture q;Actor other;assert(!q.medical.ERR_ForceFatalLossForTest(0,&other)&&q.medical.m_ERRRevivablePlayer&&q.actor.alive);assert(!q.medical.ERR_ForceFatalLossForTest(0,nullptr)&&q.medical.m_ERRRevivablePlayer);}
+ {Fixture q;q.mode.roster.owned=nullptr;assert(!q.medical.ERR_ForceFatalLossForTest(0,&q.actor)&&q.medical.m_ERRRevivablePlayer);}
+ {Fixture q;q.mode.active=false;assert(!q.medical.ERR_ForceFatalLossForTest(0,&q.actor)&&q.medical.m_ERRRevivablePlayer);}
+ {Fixture q;q.mode.haveRoster=false;assert(!q.medical.ERR_ForceFatalLossForTest(0,&q.actor)&&q.medical.m_ERRRevivablePlayer);}
+ {Fixture q;Mode::current=nullptr;assert(!q.medical.ERR_ForceFatalLossForTest(0,&q.actor)&&q.medical.m_ERRRevivablePlayer);}
+ {Fixture q;server=false;assert(!q.medical.ERR_ForceFatalLossForTest(0,&q.actor)&&q.actor.alive&&q.medical.m_ERRRevivablePlayer);server=true;}
+ {Fixture q;System::args.clear();assert(!q.medical.ERR_ForceFatalLossForTest(0,&q.actor)&&q.actor.alive&&q.medical.m_ERRRevivablePlayer);System::args["errSmoke"]="0";assert(!q.medical.ERR_ForceFatalLossForTest(0,&q.actor)&&q.actor.alive&&q.medical.m_ERRRevivablePlayer);}
{Fixture q;q.medical.m_ERRRevivablePlayer=false;q.medical.Kill(0);assert(!q.actor.alive&&q.medical.requests==0&&q.medical.fatalities==1);}
}
''')
-# Static scoping complements the executed policies: no bypass in ordinary builds.
s=p.read_text();at=s.index('bool ERR_ForceFatalLossForTest(')
assert s.rfind('#ifdef WORKBENCH',0,at)>s.rfind('#endif',0,at)
-assert 'm_ERRRevivablePlayer =' not in body(p,'bool ERR_ForceFatalLossForTest(')
tick=body(f,'protected void ERR_SmokeTick()')
assert tick.count('damage.ERR_ForceFatalLossForTest(')==7
assert 'damage.Kill(' not in tick
-print('PASS: actual protected-Kill then explicit fatal-loss fixture, fail-closed staging, unchanged ordinary protection and seven scoped support endings; no native claim')
+print('PASS: actual protected/capped damage plus exact-actor terminal fixture bypass through delayed native damage, fail-closed ownership and untouched ordinary actor; no native claim')
@@ -0,0 +1,20 @@
import ast,subprocess,sys,os,json,hashlib
from pathlib import Path
r=Path('/home/jakub/devel/escapistsrereintroduced');w=r/'.build/death-diagnostic-2153'
tree=ast.parse((r/'tools/check.py').read_text());func=next(n for n in tree.body if isinstance(n,ast.FunctionDef) and n.name=='check');names=[]
for stmt in func.body:
if isinstance(stmt,ast.Expr):
names.extend(n.value.removeprefix('tests/') for n in ast.walk(stmt) if isinstance(n,ast.Constant) and isinstance(n.value,str) and n.value.startswith('tests/') and n.value.endswith('.py'))
if isinstance(stmt,ast.For) and isinstance(stmt.target,ast.Name) and stmt.target.id=='name':
names.extend(ast.literal_eval(stmt.iter))
assert len(names)==272 and len(set(names))==272
at=names.index('test_native_package.py');partial=(w/'partial-regressions-package-temp-failure.log').read_text();package=(w/'package-quota-recheck.log').read_text()
assert "tests/test_native_package.py']' returned non-zero exit status 1" in partial
assert 'actual protected/capped damage plus exact-actor terminal fixture bypass' in partial
assert 'Ran 48 tests' in package and package.rstrip().endswith('OK')
env=dict(os.environ);env.pop('TMPDIR',None)
for name in names[at+1:]:
print('PROGRAM:',name,flush=True);subprocess.run([sys.executable,'-B',str(r/'tests'/name)],check=True,env=env)
report={'registered_programs':272,'earlier_programs_passed_before_environment_failure':at,'quota_recovered_package_recheck':'48 cases OK under required /tmp environment','remaining_programs_passed':len(names)-at-1,'all_registered_programs_passed_across_split_run':True,'assertions_or_guards_changed':False,'registry':names,'check_sha256':hashlib.sha256((r/'tools/check.py').read_bytes()).hexdigest()}
(w/'split-check-review.json').write_text(json.dumps(report,indent=2)+'\n')
print('VERIFIED: 272 registered programs; earlier successful programs retained, quota-recovered package test and remaining programs passed in canonical /tmp environment.')
@@ -0,0 +1,187 @@
PROGRAM: test_item_station_teardown.py
.......
----------------------------------------------------------------------
Ran 7 tests in 0.242s
OK
PROGRAM: test_source_bundle.py
..............
----------------------------------------------------------------------
Ran 14 tests in 2.175s
OK
PROGRAM: test_native_flight_footprint.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.267s
OK
PROGRAM: test_native_flight_input_diagnostics.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.056s
OK
PROGRAM: test_mortar_logistics.py
PASS: actual finite-courier age, token, exact ownership/callback and delivered-status admission reject stale, replayed, captured, canceled and ambiguous work
PASS: actual native-gun ownership gate rejects player/foreign/replaced/dead occupant, faction change, missing seat and missing registry
PASS: four-battery courier selection preserves pending trip/report/transfer identity, skips unavailable crews, and selects the next depleted battery without new stock
PROGRAM: test_mortar_courier_storage.py
PASS: 64 bounded distinct storage candidates; native gates, five-store barrier and finite-stock ownership retained; native placement pending
PROGRAM: test_powered_flight_pad.py
PASS: 128 coarse+80 local refinement+169 airport grid candidates retain all native clearance gates; real terrain untested
PROGRAM: test_prison_escape_policy.py
PASS: actual prison registration/crossing policies reject missing/duplicate/destroyed initial gate, incomplete ownership/scan, outside-only body, jumps and stale samples; physical exit independent of later gate damage
PASS: actual prison door execution blocks direct AI/UI bypass while locked and delegates unchanged native action once after unlock and permission approval
PROGRAM: test_powered_flight_policy.py
..................
----------------------------------------------------------------------
Ran 18 tests in 1.827s
OK
PROGRAM: test_flight_action_runner.py
.....
----------------------------------------------------------------------
Ran 5 tests in 1.102s
OK
PROGRAM: test_native_local_admission_probe.py
PASS: native local-admission snapshot rejects changed life/key/body/participant/pending state; authentication is not simulated
PROGRAM: test_mortar_report_ledger.py
PASS: actual mortar report ledger prevents duplicate response after cancellation, expiry and interleaved reports; native scheduler separate
PROGRAM: test_dedicated_native.py
.........
----------------------------------------------------------------------
Ran 9 tests in 0.012s
OK
PROGRAM: test_native_mortar_transfer.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.124s
OK
PROGRAM: test_mortar_aim_renewal.py
PASS: actual aim renewal requires fresh same-report solve and original-command equivalence; native firing untested
PROGRAM: test_dedicated_preflight.py
........
----------------------------------------------------------------------
Ran 8 tests in 0.011s
OK
PROGRAM: test_mortar_transactions.py
PASS: actual startup/generation/ownership/timeout/callback policies and native-counter wait; integration preserves one-shot allocation and pending-crew cancellation
PASS: rapid mortar cycle counts eight physical rounds once and waits for native completion without a ninth aim or shell
PROGRAM: test_native_mortar_probe.py
PASS: actual probe binds native events to fresh immutable commits, permits delayed emission, rejects unrelated expiry closure and premature stop
PROGRAM: test_diagnostic_no_splash.py
PASS: actual noSplash Load body requires both explicit diagnostic and noSplash, preserves vanilla otherwise, and handles repeated Load/reload
PROGRAM: test_casualty_incapacitation.py
PASS: actual fixture method permits one native resilience operation and restores either prior protection state, including failure paths
PROGRAM: test_casualty_remove_probe.py
PASS: actual safe-exit boundary policy, native action/door selection, stop/cache cleanup, separate old mechanism and opt-in runner contracts
PROGRAM: test_extraction_placement_policy.py
PASS: actual one-shot deadline/stability policies and preparation ownership, fuel, cleanup integration contracts
PROGRAM: test_guard_cancellation_policy.py
PASS: pending-only cancellation retires copied instance intent, preserves physical/control actors, and stops once
PROGRAM: test_casualty_ground_policy.py
PASS: actual short-cast hit, upward support normal, no self support and no dynamic support
PROGRAM: test_casualty_reservation_death.py
PASS: actual committed-ticket structure preserves reservation after death, rejects missing bodies/seats and ends at observation expiry
PASS: actual pending callback expires an empty-server reservation once, preserves its full lease, and cancels on completion/Stop
PROGRAM: test_casualty_loading_policy.py
PASS: rescue lease expiry/reordering, fresh five-second settling, independent rescue ranges and grounded upright aircraft motion boundaries
PROGRAM: test_initial_guard_policy.py
PASS: requested guard population requires complete physical conscious membership before deadline
PROGRAM: test_headless_game_runner.py
......................................
----------------------------------------------------------------------
Ran 38 tests in 0.019s
OK
PROGRAM: test_vanilla_game_control.py
..........
----------------------------------------------------------------------
Ran 10 tests in 0.002s
OK
PROGRAM: test_archive_game_control.py
.....
----------------------------------------------------------------------
Ran 5 tests in 0.856s
OK
PROGRAM: test_site_discovery_policy.py
PASS: authored radio/optional-site bounds and physical horizontal/vertical boundaries
PROGRAM: test_faction_catalog_scope.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
PROGRAM: test_mission_rules.py
PASS: all phase transitions, terminal states, defence boundaries, stale/future observations, intel discovery
PROGRAM: test_admin_setting_policy.py
PASS: Core document-discovery alias, companion-only alias exclusion, strict integer parsing and setting boundaries
PROGRAM: test_player_admission_policy.py
PASS: player admission phase/life/identity/controller matrix, preload displacement limits, pending reservation overlap and owner exclusion
PROGRAM: test_progression_identity.py
PASS: actual gate and pre-inventory document guards reject noncanonical/faction/life/disconnect/server mismatches; canonical reconnect and unconscious carried intel preserved
PASS: WB-only native fault injection restores both body mutations before checks/returns and requires eligible held-document negative/positive proof; runtime pending
PROGRAM: test_discovery_map_position.py
PASS: actual discovery coordinates disclose stable 500m cell center until identified, then exact point, including negative/boundary coordinates
PROGRAM: test_local_admission.py
PASS: actual local admission context/selection/latch, same-round late identity, replacement/mode failure, fresh round and untouched network path
PROGRAM: test_prison_placement_policy.py
PASS: prison search packs 16 unique 3m-spaced inside-wall centers, prioritizes inner/edge positions and never bypasses clearance
PASS: physical body occupancy rejects overlap, permits diagonal neighboring slots, and excludes own body and unrelated broad-phase bounds
PROGRAM: test_recovery_policy.py
PASS: recovery state excludes dead bodies, preserves reservations, requires controlled rescuers and distinguishes empty/all-dead teams
PROGRAM: test_player_medical.py
PASS: authority-scoped slow recovery, bleeding pauses resilience, medicine unaffected, player-only lethal damage cap without healing
PASS: bleeding severity survives low health, retains armour, causes no knockout and restores the actual damage/blood-loss cap
PASS: viable passive recovery survives native delay; bleeding, disabled/full effects and low-blood resilience do not block defeat
PROGRAM: test_time_policy.py
PASS: every minute round-trips, malformed clocks rejected, defaults limited to added keys, progression bounds and day duration aligned
PROGRAM: test_environment_policy.py
PASS: native settings policy matches calendar boundaries 1900-2050, date/profile parsing is strict, authored defaults preserve old worlds
PROGRAM: test_view_distance.py
PASS: view-distance bounds, default, save failures, command parsing, temporary ownership, server/platform limits and lifecycle wiring
PROGRAM: test_environment_restart_runner.py
.....
----------------------------------------------------------------------
Ran 5 tests in 0.552s
OK
PROGRAM: test_inventory_enumeration_policy.py
.
----------------------------------------------------------------------
Ran 1 test in 0.372s
OK
PROGRAM: test_radio_defence_policy.py
PASS: radio authorization/discovery/phase matrix, exact distance limits, defender handover, interruption, empty samples, clock regression and duration boundary
PROGRAM: test_radio_feedback_policy.py
PASS: actual radio feedback policy, initial wait, interruption persistence, resumption and terminal/new-round reset
PROGRAM: test_performance_comparison.py
...............
----------------------------------------------------------------------
Ran 15 tests in 2.003s
OK
PROGRAM: test_release_check.py
..............................................
----------------------------------------------------------------------
Ran 46 tests in 0.816s
OK
PROGRAM: test_settings_migration.py
PASS: legacy values preserved, unsupported fields reported, invalid data rejected, existing files protected, runtime bounds aligned
PASS: failed initial settings promotion leaves defaults writable after restart; prior/fallback saves survive copy, readback and mismatch faults
PROGRAM: hq_network_regression.py
PASS: real-carrier shortest-hop paths, 500m boundary, three-hop cap, no-manpack failure, three-second originating-call interruption, unchanged downlink hop timing, completed-hop survival, interrupted final uplink, radio loss, capture, motion, timeout, reset and network bounds
PROGRAM: helicopter_availability_regression.py
PASS: migrated aircraft availability policy (controller migration still pending)
PROGRAM: mortar_salvo_regression.py
PASS: migrated salvo offsets are deterministic, spread and bounded (native firing and complete salvo qualification are separate)
VERIFIED: 272 registered programs; earlier successful programs retained, quota-recovered package test and remaining programs passed in canonical /tmp environment.
@@ -0,0 +1,216 @@
--- a/addons/core/Scripts/Game/ERR/00_Core/ERR_PlayerMedical.c
+++ b/addons/core/Scripts/Game/ERR/00_Core/ERR_PlayerMedical.c
@@ -45,6 +45,17 @@
if (!m_ERRRevivablePlayer) { super.Kill(instigator); return; }
ERR_RequestKnockout();
}
+#ifdef WORKBENCH
+ // Explicit terminal-lifecycle fixture only. Ordinary Kill retains casualty protection.
+ // This helper belongs in the same modded class so super bypasses our Kill override.
+ bool ERR_ForceFatalLossForTest(notnull Instigator instigator)
+ {
+ string enabled;
+ if (!Replication.IsServer() || !System.GetCLIParam("errSmoke", enabled) || enabled != "1") return false;
+ super.Kill(instigator);
+ return true;
+ }
+#endif
// Include delayed but viable native regeneration when deciding team defeat.
// A stopped/zero-rate effect or an actively bleeding casualty cannot self-rescue.
bool ERR_CanRecoverNaturally()
--- a/addons/core/Scripts/Game/ERR/40_Chat/ERR_NativeSmoke.c
+++ b/addons/core/Scripts/Game/ERR/40_Chat/ERR_NativeSmoke.c
@@ -484,6 +484,25 @@
return checked > 0;
}
protected void ERR_EndScreenshot() { System.MakeScreenshot("$logs:err-result"); }
+ protected void ERR_BeginProtectedDeathProbe(float now)
+ {
+ SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
+ if (!ERR_Check(damage && damage.ERR_IsRevivablePlayer(), "admitted prisoner has ordinary casualty protection")) return;
+ m_ERRSmokeStep = 92;
+ damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer));
+ m_ERRSmokeWait = now + 1000;
+ }
+ protected void ERR_CompleteProtectedDeathProbe(float now)
+ {
+ if (!ERR_Check(ERR_Actors.Alive(m_ERRSmokePlayer), "ordinary protected Kill retains the living prisoner")) return;
+ SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
+ CharacterControllerComponent character = CharacterControllerComponent.Cast(m_ERRSmokePlayer.FindComponent(CharacterControllerComponent));
+ if (!ERR_Check(damage && damage.ERR_IsRevivablePlayer() && character && character.IsUnconscious(), "ordinary protected Kill makes the prisoner unconscious")) return;
+ Print("ERR DEATH FIXTURE: protected casualty verified; explicitly forcing fatal loss only to test spent-life spectator and terminal cleanup");
+ m_ERRSmokeStep = 9;
+ if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
+ m_ERRSmokeWait = now + 4000;
+ }
protected void ERR_SmokeTick()
{
float now = GetWorld().GetWorldTime();
@@ -755,9 +774,7 @@
}
if (m_ERRTestPlayerDeath)
{
- m_ERRSmokeStep = 9;
- SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent)).Kill(Instigator.CreateInstigator(m_ERRSmokePlayer));
- m_ERRSmokeWait = now + 4000;
+ ERR_BeginProtectedDeathProbe(now);
return;
}
DamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(DamageManagerComponent)).EnableDamageHandling(false);
@@ -920,7 +937,7 @@
m_ERRSmokeStep = 9;
SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
damage.EnableDamageHandling(true);
- damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer));
+ if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 110)
@@ -931,7 +948,7 @@
m_ERRSmokeStep = 9;
SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
damage.EnableDamageHandling(true);
- damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer));
+ if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 109)
@@ -946,7 +963,7 @@
SCR_CharacterDamageManagerComponent damage;
damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
if (!ERR_Check(damage != null, "local handoff final original prisoner damage component retained")) return;
- damage.EnableDamageHandling(true); damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer));
+ damage.EnableDamageHandling(true); if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 108)
@@ -958,7 +975,7 @@
m_ERRSmokeStep = 9;
SCR_CharacterDamageManagerComponent damage;
damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
- damage.EnableDamageHandling(true); damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer));
+ damage.EnableDamageHandling(true); if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 107)
@@ -971,7 +988,7 @@
SCR_CharacterDamageManagerComponent damage;
damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
damage.EnableDamageHandling(true);
- damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer));
+ if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 3100)
@@ -1018,7 +1035,7 @@
SCR_CharacterDamageManagerComponent damage;
damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
damage.EnableDamageHandling(true);
- damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer));
+ if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
else if (m_ERRSmokeStep == 100)
@@ -1029,13 +1046,17 @@
m_ERRSmokeStep = 9;
SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));
damage.EnableDamageHandling(true);
- damage.Kill(Instigator.CreateInstigator(m_ERRSmokePlayer));
+ if (!ERR_Check(damage.ERR_ForceFatalLossForTest(Instigator.CreateInstigator(m_ERRSmokePlayer)), "explicit terminal fixture fatal loss authorized")) return;
m_ERRSmokeWait = now + 4000;
}
+ else if (m_ERRSmokeStep == 92)
+ {
+ ERR_CompleteProtectedDeathProbe(now);
+ }
else if (m_ERRSmokeStep == 9)
{
SCR_PlayerController controller = SCR_PlayerController.Cast(GetGame().GetPlayerController());
- if (!ERR_Check(!ERR_Actors.Alive(m_ERRSmokePlayer), "native damage kills prisoner")) return;
+ if (!ERR_Check(!ERR_Actors.Alive(m_ERRSmokePlayer), "controlled native fatal loss kills prisoner")) return;
if (!ERR_Check(controller && controller.ERR_ObserverState() == ERR_ObserverReason.SPENT_LIFE, "death selects spectator without another life")) return;
if (!ERR_Check(controller.ERR_HasObserverCamera() && SCR_ManualCamera.Cast(GetGame().GetCameraManager().CurrentCamera()), "spectator camera activates after native death")) return;
m_ERRSmokeStep = 91;
--- /dev/null
+++ b/tests/test_native_player_death_fixture.py
@@ -0,0 +1,80 @@
+"""Execute actual protected/dead fixture staging; native damage and queue are boundaries."""
+import os
+from pathlib import Path
+from policy_harness import ROOT, body, run
+base=Path(os.environ.get('ERR_DEATH_FIXTURE_ROOT', ROOT))
+p=base/'addons/core/Scripts/Game/ERR/00_Core/ERR_PlayerMedical.c'
+f=base/'addons/core/Scripts/Game/ERR/40_Chat/ERR_NativeSmoke.c'
+def convert(s):
+ s=s.replace('protected ', '').replace('override ','').replace('notnull Instigator instigator','int instigator')
+ s=s.replace('Replication.IsServer()','server').replace('System.GetCLIParam','System::GetCLIParam').replace('super.','Native::')
+ s=s.replace('SCR_CharacterDamageManagerComponent damage = SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent));','Medical* damage = &medical;')
+ s=s.replace('CharacterControllerComponent character = CharacterControllerComponent.Cast(m_ERRSmokePlayer.FindComponent(CharacterControllerComponent));','Actor* character = m_ERRSmokePlayer;')
+ s=s.replace('Instigator.CreateInstigator(m_ERRSmokePlayer)','0').replace('ERR_Actors.Alive(m_ERRSmokePlayer)','m_ERRSmokePlayer->alive')
+ s=s.replace('damage.','damage->').replace('character.','character->')
+ return s
+kill=convert(body(p,'override void Kill('))
+if 'bool ERR_ForceFatalLossForTest(' in p.read_text():
+ fatal=convert(body(p,'bool ERR_ForceFatalLossForTest('))
+ begin=convert(body(f,'protected void ERR_BeginProtectedDeathProbe('))
+ complete=convert(body(f,'protected void ERR_CompleteProtectedDeathProbe('))
+else:
+ # Reproduce the pre-fix path using its actual branch, not a replacement policy.
+ old=body(f,'if (m_ERRTestPlayerDeath)\n\t\t\t{')
+ old=old[old.index('{'):]
+ old=old.replace('SCR_CharacterDamageManagerComponent.Cast(m_ERRSmokePlayer.FindComponent(SCR_CharacterDamageManagerComponent)).Kill(Instigator.CreateInstigator(m_ERRSmokePlayer));','medical.Kill(0);')
+ begin='void ERR_BeginProtectedDeathProbe(float now) '+old
+ complete='void ERR_CompleteProtectedDeathProbe(float) {}'
+ fatal='bool ERR_ForceFatalLossForTest(int) {return false;}'
+run(r'''
+#include <cassert>
+#include <string>
+#include <map>
+using string=std::string;
+bool server=true;
+namespace System { std::map<string,string> args; bool GetCLIParam(string key,string& out){auto it=args.find(key);if(it==args.end())return false;out=it->second;return true;} }
+struct Actor {bool alive=true, unconscious=false;bool IsUnconscious(){return unconscious;}};
+struct Native {Actor* actor;int fatalities=0; void Kill(int){fatalities++;actor->alive=false;}};
+struct Medical: Native {
+ bool m_ERRRevivablePlayer=true,pending=false; int requests=0;
+ void ERR_RequestKnockout(){requests++;pending=true;}
+ void Settle(){if(pending){actor->unconscious=true;pending=false;}}
+ bool ERR_IsRevivablePlayer(){return m_ERRRevivablePlayer;}
+''' + kill+fatal+r'''
+};
+void Print(string){}
+struct Fixture {
+ Actor actor;Medical medical;Actor* m_ERRSmokePlayer=&actor;int m_ERRSmokeStep=0;float m_ERRSmokeWait=0;int failures=0;
+ Fixture(){medical.actor=&actor;}
+ bool ERR_Check(bool ok,string){if(!ok)failures++;return ok;}
+''' + begin+complete+r'''
+};
+int main(){
+ System::args={{"errSmoke","1"}};
+ Fixture f; f.ERR_BeginProtectedDeathProbe(100);
+ // This fails on the prior actual branch: it entered the death assertion stage
+ // despite invoking protected Kill, whose native callback has not run yet.
+ assert(f.m_ERRSmokeStep==92 && f.actor.alive && f.medical.requests==1 && f.medical.fatalities==0);
+ assert(!f.actor.unconscious && f.m_ERRSmokeWait==1100);
+ f.medical.Settle(); f.ERR_CompleteProtectedDeathProbe(1100);
+ assert(f.failures==0 && f.m_ERRSmokeStep==9 && !f.actor.alive && f.medical.fatalities==1);
+ assert(f.medical.m_ERRRevivablePlayer && f.medical.requests==1 && f.m_ERRSmokeWait==5100);
+ // Explicit native bypass cannot alter ordinary Kill's protection afterward.
+ f.actor.alive=true;f.actor.unconscious=false;f.medical.Kill(0);
+ assert(f.actor.alive && f.medical.requests==2 && f.medical.fatalities==1);
+ {Fixture q;q.ERR_CompleteProtectedDeathProbe(1100);assert(q.failures==1&&q.medical.fatalities==0);}
+ {Fixture q;q.actor.alive=false;q.ERR_CompleteProtectedDeathProbe(1100);assert(q.failures==1&&q.medical.fatalities==0);}
+ {Fixture q;q.medical.m_ERRRevivablePlayer=false;q.ERR_BeginProtectedDeathProbe(100);assert(q.failures==1&&q.medical.requests==0&&q.medical.fatalities==0);}
+ {Fixture q;server=false;assert(!q.medical.ERR_ForceFatalLossForTest(0)&&q.actor.alive);server=true;}
+ {Fixture q;System::args.clear();assert(!q.medical.ERR_ForceFatalLossForTest(0)&&q.actor.alive);System::args["errSmoke"]="0";assert(!q.medical.ERR_ForceFatalLossForTest(0)&&q.actor.alive);}
+ {Fixture q;q.medical.m_ERRRevivablePlayer=false;q.medical.Kill(0);assert(!q.actor.alive&&q.medical.requests==0&&q.medical.fatalities==1);}
+}
+''')
+# Static scoping complements the executed policies: no bypass in ordinary builds.
+s=p.read_text();at=s.index('bool ERR_ForceFatalLossForTest(')
+assert s.rfind('#ifdef WORKBENCH',0,at)>s.rfind('#endif',0,at)
+assert 'm_ERRRevivablePlayer =' not in body(p,'bool ERR_ForceFatalLossForTest(')
+tick=body(f,'protected void ERR_SmokeTick()')
+assert tick.count('damage.ERR_ForceFatalLossForTest(')==7
+assert 'damage.Kill(' not in tick
+print('PASS: actual protected-Kill then explicit fatal-loss fixture, fail-closed staging, unchanged ordinary protection and seven scoped support endings; no native claim')
@@ -0,0 +1,19 @@
check: /tmp/err-policy-11thgqwk/check.cpp:38: int main(): Assertion `f.m_ERRSmokeStep==92 && f.actor.alive && f.medical.requests==1 && f.medical.fatalities==0' failed.
Traceback (most recent call last):
File "/tmp/erri-player-death-fixture-0008/test_native_player_death_fixture.py", line 29, in <module>
run(r'''
~~~^^^^^
#include <cassert>
^^^^^^^^^^^^^^^^^^
...<40 lines>...
}
^
''')
^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/policy_harness.py", line 14, in run
subprocess.run([str(p/'check')],check=True)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/subprocess.py", line 578, in run
raise CalledProcessError(retcode, process.args,
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['/tmp/err-policy-11thgqwk/check']' died with <Signals.SIGABRT: 6>.
@@ -0,0 +1,12 @@
................usage: test_native_package.py [-h] [--project {core}] --session SESSION
--compat COMPAT [--steam STEAM]
[--timeout TIMEOUT]
[--external-addons EXTERNAL_ADDONS]
[--silent-workbench | --exit-after-init]
[--continue-on-failure]
test_native_package.py: error: argument --exit-after-init: not allowed with argument --silent-workbench
................................
----------------------------------------------------------------------
Ran 48 tests in 12.038s
OK
@@ -0,0 +1,877 @@
PASS: missing, child-only, malformed, zero and duplicate prefab root IDs rejected
PASS: delayed scene/inventory arrival, deferred preload, identity checks, stale replies, timeout and observer cleanup
PASS: actual inventory manifest, delayed/missing/wrong-owner item links, finite cap, consumed-stock refresh and preload ordering
PASS: spawn scene remains held through final acknowledgement and nearby use; leaving, reassignment, disconnect and teardown release it
PASS: production prison AI hold/release, repeat activation, authority/faction/player exclusion, dead actor and stop cleanup
PASS: actual protected/capped damage plus exact-actor terminal fixture bypass through delayed native damage, fail-closed ownership and untouched ordinary actor; no native claim
PASS: actual Tick clock initialization admits fractional first ticks and expires without extending the original start
PASS: actual finite conservation/deadline/callback policies; read-only selection, bounded once-only inventory submission and no can refill; native transfer not executed
PASS: actual exact-context membership, bounded identity/reach gates, native start/cache/eligibility ordering and no duplicate/foreign action start; fuel manager identity and empty-can headroom guards checked
PASS: actual detached node/value snapshot and conservation refuse mismatched lengths before indexed reads, retain original identities under native out-array aliasing and log bounded counts once; native cause remains unknown
PASS: actual mine evidence sealing/recovery, historical coarse publication, caps, canonical ownership, marker join retry/owner-change/stop; native arming and replicated vector-array transport untested
PASS: actual full document recovery retains authored/sealed targets, one shared spent ledger, retry/exhaustion semantics and canonical multi-player ownership alongside supplemental mine intel
PASS: actual infantry search suspension, quiet grace, finite resume, expiry/replacement and defensive/ownership boundaries
PASS: infantry combat gate precedes radio delivery and preserves non-task transports
PASS: actual HQ contact transition wakes only fit squad members, cancels only task orders and logs changes once
PASS: actual finite medicine grants, authored stock deduction, full-backpack refusal/pouch fallback, no loot replenishment, unresolved-operation quarantine and ownership/stop guards
PASS: only recent native detected/identified threats suspend hunter travel; stale/disarmed/destroyed contacts cannot strand patrols
PASS: actual hunter combat transition cancels only its travel once, holds through renewed contact and resumes after quiet; unregistered startup preserved
PASS: captured sighting retention, immutable details, expiry, replay rejection, bounded sound uncertainty/cooldown, radio loss, priority and overdue-status fairness
PASS: arrow press/release, held keys, opposing keys, disabled/menu input and firearm-only retention
PASS: town trigger and hard 700m exclusion for all observers, empty/invalid positions and final-check crossings
PASS: exact finite site squads, invalid roster/count rejection, committed-site spacing and safe fallback boundary
PASS: mortar couriers use the mobile site team and refuse permanent-only garrisons
PASS: omitted preferred mortar depot selects a surviving owned camp/mobile team; no camp, foreign cache and permanent-only sites are unavailable; historical priority retained
PASS: real-session mortar deadline, failed-support convoy admission and hunter survivor/recovery gates
PASS: native-route retry preserves delivered target, limits attempts and suspends during combat
PASS: stale/deleted AI utility cannot receive Complete; mortar HQ preflight withholds unsafe orders; mounted convoy cover never creates infantry Defend
PASS: flight crew affiliation and group precede native boarding; preparation remains bounded even while passengers wait
PASS: factionless/deleted map targets do not abort perception; faction lookup tolerates teardown; deleting helicopter releases without capture/engine access
PASS: shoot adapter waits for a physical round; bounded same-shell retries, interrupted/never-started loads, committed no-retry, order/owner changes and normal native delegation
PASS: missing/invalid faction crew defers before any native spawn or allowance insertion; all registered RHS factions have explicit soldier and medic profiles
PASS: vehicle radio issued once; pending, refusal and looting cannot duplicate or fabricate a physical radio link
PASS: actual vehicle-radio link requires the original seated crew, physical manpack and live uncaptured mission vehicle; looting, dismount, release and teardown remove it
PASS: actual hunter release preserves survivors/HQ, releases driving ownership once, delegates capture/teardown, and excludes prison/patrol/mortar from generic objective defence
PASS: real opening road geometry enforces wide azimuths; fresh delivered contact preempts patrol cooldown, respects radio failures and does not starve in-flight interception
PASS: actual scoped 10% tighter REGULAR aim error and alert perception; preserves equipment multiplier and restores vanilla behavior when unbound
PASS: physical inspection and parent-wreck retention; server-only searched/report delivery unlocks native cleanup once with a 300-second delay
PASS: bounded same-group empty-spawn retries, no casualty refill, queue retirement, delivery-gated intel, prepared-team reuse, throttled diagnostics and LOD release
PASS: production airborne memory confidence, persistence, ground coverage, confirmed losses, artillery veto, cooldown and invalid-input rules
PASS: production cover retains the carried HQ target until its deadline; airport reload waits until the drop pass and cover have finished
PASS: air logistics reservation preserves delivered search until radio handoff, excludes guards/combat/in-flight orders, and quarantines unresolved native loads/moves
PASS: actual ammunition cargo selector handles empty rifle/machinegun/sniper magazines, preserves loaded variants, excludes auxiliary launchers and tolerates missing native metadata
PASS: original 15-minute launch/loss cadence, active/captured timer disarm, saved delay reset, stop, 300m orbit and bounded close-contact standoff at 30/60/120 Hz
PASS: actual aircraft-removal notification guards owner/server/active/stop and schedules one full delay without replay extension
PASS: hill prominence/elevation, actual road edges/heights/bends and server-only finite scout admission, pending stock, timeout and no replacements/refills
PASS: mortar duty scope excludes players, other crews, stopped/client/inactive states; only destruction releases an active assignment, while the gunner may approach the gun
PASS: random mode restrictions, full numeric ranges, independent calendar dates and strict daylight boundaries
PASS: actual killais eligibility includes the 1000m boundary, excludes players/retained bodies/dead/non-character entities and checks full 3D distance
PASS: actual generation scheduler bounds each tick, enforces deadline/candidate ceiling, validates fallback, commits only accepted positions, skips only dispensable sites, preserves required objectives/intel, and resets the next search budget
PASS: terrain placement samples world bounds, retains streaming candidates, bounds waits/work, rejects foreign fallbacks, preserves objectives/intel and validates completion
PASS: actual navigation readiness supports static meshes, yields only for loadable streaming tiles and refuses unreachable positions
PASS: universal connector, embedded/standalone exports, multiple terrains, stable IDs, native nav configs, missing-nav visibility, path validation and overwrite protection
PASS: airfield detection accepts physical runways/towers and bounded authored markers, rejects unrelated props, water and out-of-world markers, and samples terrain height
PASS: configured airport parsing, bounded readiness, stale admission rejection and cleanup wiring
PASS: explicit CLI opt-in, disabled/editor guards and mission-header airport precedence
PASS: singleton identity guards, paired faction deserialization and client world-cleanup wiring
PASS: task/map/respawn getters survive delayed old destruction and preserve ordinary-mode behavior
PASS: replication hierarchy refuses absent/aliased nodes and establishes delivery dependencies idempotently
PASS: standalone old faction delegates collected once, with null/deleted owners ignored
PASS: actual faction resolution reserves explicit roles, samples without replacement, substitutes disabled selections, and rejects duplicate/unknown/missing choices and insufficient pools
PASS: Random all submits persistent random roles immediately; manual mixed choices, stale/unauthorized UI guards and debounce preserved
PASS: actual content policy gates parent packs, individual factions, faction identity and finite group rotation with vanilla fallback
PASS: actual delivered road eligibility, ahead projection without chords, reservations, stock road query bounds, terrain/water/obstruction refusal and clean outputs
PASS: actual delivered-task lineage, expiry, old-order retention, native commit, release, road precision expiry and duplicate delivery
PASS: actual original-roster local handoff,100m3D bound,busy carrier/budget exclusion,origin interruption including deletedsource,normal radio delivery and per-source replay history
PASS: actual visual intake retains source/time/position/id, rejects replay, prefers usable own route, excludes simultaneous callers and conservatively resets negative-sweep dwell
PASS: actual fixture local/radio gating, immutable source/time/position, interrupted-report exclusion and exact-owner cleanup
PASS: local-handoff runner refuses wrong project/round count/insufficient deadline before runtime work
PASS: actual fixture allocator terminal/unsubmitted guard, original-group lookup and both candidate gates
PASS: actual report-derived waypoint insertion/order and tighter positive radii; no formation navigation claim
PASS: actual Place/Stop waits native pose update, bounds four attempts, preserves original position, restores pending/settled placement and respects ownership/accepted-move quarantine
PASS: actual fixture current/original recipient ownership, unresolved transfer cleanup, exact-token release and idempotent Stop
PASS: actual fixture phased-cargo readiness, bounded callbacks, captured-stock mixed-caliber selection/continuation, reservation cleanup and component magazine counts
PASS: actual inventory-fixture setup uses ordinary prison unlock before constructing its convoy-waiting probe; failed unlock cannot run fixture
PASS: actual authored storage anchors, native trace flags, own-hierarchy exclusion, external wall/vehicle obstruction, range, unknown geometry and bounded context refusal
PASS: actual convoy binding, finite identities, disjoint tokens, shared report replay/cooldown, original recipients and HQ cleanup
PASS: actual finite convoy supply pool; immutable slots, shared demand state, sparse/capped discovery and permanent shutdown
PASS: actual HQ rotates finite donors, skips unavailable/contacted trucks, uses delivered reports and dispatches at most one trip per planning cadence
PASS: actual original turret identity, native/canonical guards, scoped maximum-skill profile, reset, dismount/reboard, requested-skill preservation and restoration
PASS: bounded HQ startup/memory windows and outcome-specific full-route deadlines
PASS: explicit escape-route skips only administrator stress, preserving original full-fixture wait/failure paths
PASS: normal escape route keeps ordinary catalog and generated placement; historical selectors remain unchanged
PASS: actual read migrates old valid settings, preserves explicit disabled state, rejects invalid data; next-round feedback and fixed menu remain honest
PASS: actual automatic convoy timing/authority/admission/one-attempt/manual-task/stop policy; native deployment unproved
PASS: late authoritative failure reason refreshes open result; detach, mode change and success subscriptions preserved
infantry resupply actual rules, radio transitions, owned cleanup and unresolved-operation tests passed
PASS: actual resupply Roster preserves permanent release, original slot mapping and bounded ownership
PASS: actual one-mine original carrier selection, settled startup, shared finite claims, no refund after submission
PASS: actual HQ startup grant readiness forwarding is authoritative and fail-closed
PASS: actual finite PMN4 one-to-two entitlement, pinned original ownership, shared commit, physical custody, callback quarantine/deletion and no retry
PASS: actual bounded empty-return and finite delivery; phase-isolated callbacks, exact ownership proof, stop quarantine and original actor/vehicle boundaries
PASS: actual shared finite identity reservation; competing consumers, submission permanence, stale cleanup and96-item bound
PASS: actual carried-mounted swap, shared committed claim, physical slot reach, exact two-way proof, uncertainty and terminal cleanup
PASS: actual mounted pickup, exact finite ownership, pre-submission commit, physical custody, bounded callback and quarantine lifecycle; no native coverage claim
PASS: actual mounted courier admission, radio, individual orders, two-stage transfer, reboarding, token cleanup and quarantine lifecycle
PASS: actual scoped crew permit and native board completion/failure preserves foreign seats without teleport fallback
PASS: actual shared mounted stock/history ownership, atomic exact HQ pair claim, and bounded stopped-owner proof polling
PASS: actual carried/mounted early ammunition policy and status-first shared uplink; complete threshold, phases, cooldown, failures requested check-ins and non-urgent detached carried-mine status
PASS: actual group radio startup preservation, finite native grants, callback quarantine, frozen selection/actor ownership and bounded observation
PASS: actual maintenance native-stock check rejects missing/duplicate/wrong-identity/unowned/depleted/malformed stock and is read-only; native runtime not executed
..................
----------------------------------------------------------------------
Ran 18 tests in 0.244s
OK
PASS: actual radio node rejects current incapacitation, death, ownership and faction changes despite cached inventory; one-second capability refresh remains explicit
PASS: Southern finite maintenance stock preserves weapons/clues and optional transport, historical Western fixture stays separate; native capacity/consumption untested
PASS: optional transport deferred behind required readiness, bounded once-only spawn/omission, isolated cleanup, occupied-candidate retention and required-default preservation
PASS: actual diagnostic fallback runs only on failed missing-context call, derives unique native pilot door, preserves stock eligibility and restores prior index on success/failure; diagnostics mutate no game state.
PASS: actual native-prelude cleanup restores only original changed damage, refuses stale/incapacitated/aboard teleport; bounded five-seat/four-door fixture wiring checked. Native execution remains pending.
PASS: actual CreateTransport requires successful scoped Configure after handbrake, preserves ordinary vehicles, tracks spawned entity before failures and never treats failed lock registration as ready.
PASS: actual preparation Configure guards/idempotence/breach preservation, security eligibility/final current-body server mutation and all scoped action guards; all five seat/four door resource overrides. Native hold, prefab merge, replication and boarding remain unverified.
PASS: production vehicle alarm single trigger/replica completion/no replay, fixed deadline/readiness wait, failed audio, dedicated server, moving exact handle, destruction/native end/deletion/clock and mission teardown. Native sound and multiplayer delivery require engine qualification.
PASS: production alarm emitter/receiver original time/location, explicit native queue only, 32-entry cap, 50m local witness eligibility, bound perception, native-super preservation; actual engine broadcast/hearing remains unverified.
PASS: actual optional candidate barrier, exact callback/custody proof and unchanged mine/primary snapshots; no native transfer claim
Native finite mine-stock runner: parser, scope, exclusions and command pass
PASS: actual bounded native mounted proof/detached payload/deadline/cleanup methods, production-only setup and isolated runner selector
PASS: actual one-existing-convoy candidate readiness, sender-root identity, incomplete cargo refusal and fixed three-candidate bound
PASS: actual once-only native dry query, exact before/after slots, native refusal, shutdown; shared bounded discovery and distinct opt-in verdict
PASS: actual completion selector and pre-cleanup variant capture preserve separate radio and eligibility verdicts
PASS: actual cargo diagnostic stages separate absent/foreign magazines, used/empty/invalid rounds, well mismatch and exact truck storage/attachment without mutation
PASS: actual native courier witness rejects missing radio/custody/swap/reboard evidence; CLI opt-in bounded; native success remains unqualified
PASS: actual courier constructor/Tick waits for preparation, returns before physical checks, preserves fixed deadline and sticky stop/failure; Enfusion startup awaits native verification
PASS: actual arranged native alarm fixture deadline, single emit, natural-route observation, original timestamp/area/detail assertions, natural observer proximity/activation wait, failure cleanup and independent canonical-body restoration; native delivery itself remains unqualified.
PASS: actual convoy cover observation/snapshot/uplink/HOLD/RESUME/cleanup transitions; native boundaries mocked, non-convoy runner opt-in refused
Enemy optics actual-service ownership, preservation, callback, deadline and bounded-inspection policies passed
PASS: actual delivered cover freshness/lineage/replay and canonical executor; owned waypoint-only hold, one resume at preserved route index, invalid ownership/crew/ledger refusal and fail-closed native recreation
PASS: actual Stinger show/set/help state precise actor-roll effects; read-only help, bounded values, malformed syntax and failed-save preservation; no rerolls/gameplay edits and no native persistence claim
PASS: new/retasked search and radio delivery ammo gates; active tasks and delivered release preserved
HQ convoy delivered-report planning and downlink regressions passed
PASS: actual own-inventory ammo inspection deduplicates loaded/carried/shared wells, separates chambers/launchers, freezes scalar snapshots and treats unsupported/capped/foreign inventory as unknown
PASS: actual carried PMN4 inventory, original-owner guards, bounded deduplication, independent unknown state and detached counts
PASS: actual mounted hierarchy sampling, ownership exclusion, deduplication, completeness/caps, quarter threshold and detached validation; no runtime policy or ammunition mutation
PASS: WORKBENCH opt-in diagnostics distinguish cycles/cap/storage/manager/mount failures without repeated native traversal
PASS: actual HQ original convoy-root admission rejects wrong force/server/group and never supplies replacement lookup
PASS: production mounted structural seat scan ignores >128 carried/cargo descendants, shares exact native mount/magazine ownership, preserves attachment seats and exact occupants, rejects unknown/cyclic/oversize structures; native binding still requires qualification.
PASS: native body fixture uses existing immutable actors, real production LOS/queued uplink, pre-delivery isolation, actual status overlap, bounded cleanup and no fabricated reports/spawns
PASS: actual native fixture lookup selects exact BODY kind/identity/message from bounded evaluations, never sighting-only Get
PASS: actual ammo snapshot comparison checks every scalar/category flag; native probe requires real roster rescan, loaded-round lower bound and separate immutable pending/Watch objects
PASS: actual delivered slot-union bodies preserve overlap/disjoint evidence, replay idempotence, status subset integrity, full-wipe closure and formation-local bounds
test_review_added_allowed_media_invalidates_snapshot (__main__.ReviewTests.test_review_added_allowed_media_invalidates_snapshot) ... ok
test_review_added_source_directory_rejected (__main__.ReviewTests.test_review_added_source_directory_rejected) ... ok
test_review_loose_root_resource_and_symlink_rejected (__main__.ReviewTests.test_review_loose_root_resource_and_symlink_rejected) ... ok
test_review_metadata_media_and_sidecars_remain_allowed_and_bound (__main__.ReviewTests.test_review_metadata_media_and_sidecars_remain_allowed_and_bound) ... ok
test_review_missing_link_rejected (__main__.ReviewTests.test_review_missing_link_rejected) ... ok
test_review_package_guard_sees_new_scripts (__main__.ReviewTests.test_review_package_guard_sees_new_scripts) ... ok
test_review_retargeted_private_link_rejected (__main__.ReviewTests.test_review_retargeted_private_link_rejected) ... ok
----------------------------------------------------------------------
Ran 7 tests in 0.062s
OK
PASS: actual report methods reproduce old starvation; status-first scheduler delivers check-ins and requires 30s without combat or actual visible contacts before negative reports
PASS: actual actor group lookup retains controlled character membership when seated/inherited vehicle agents differ; missing control or parent refuses
.................
----------------------------------------------------------------------
Ran 17 tests in 3.308s
OK
PASS: actual convoy motion thresholds, native-only proof boundaries, physical cargo/crew ownership and pre-launch runner restrictions
PASS: actual filled rotated-footprint TraceBox and nine terrain/water samples; broad tree/cable bounds alone accepted, actual collision/nonfinite trace refused, nonzero sweep and ENTS/OCEAN flags, bounded diagnostic query and reset
PASS: actual road interpolation/projection/orientation, six35m starts,200m forward tail, preserved bends, short/far/degenerate/nonfinite/overdense/hairpin refusal and deterministic candidate ties
PASS: actual authenticated convoy dispatch, active/ready admission gates, canonical receipt, safe unconsumed preflight retry, pool refusal, retained partial failure and consumed no-retry
PASS: actual native readiness exact membership, one-time per-vehicle ledger admission/reservation, partial readiness retry without duplicate records and one-pass56-item cargo allocation without replenishment
PASS: actual per-vehicle readiness reasons, native agent/activity counts, intended-seat diagnostics, five-second throttle and read-only observation
PASS: actual convoy dispatch validates before receipt consumption, consumes once before native mutation, retains all12 partial-failure paths, accepts the selected non-USSR enemy, and allocates exact19 bodies without capacity shrinking
PASS: own memberless prefab disables automatic spawn before initialization; actual admission rejects populated, immediate or authored-slot templates before finite crew creation
PASS: actual native seated-group arrival outside35m, native waypoint removal, idempotent advance, and convoy waypoint idempotence/arrival/deadline, missing/dead/captured/reparented crew refusal, failed native waypoint release, original vehicle/member preservation and no replacement
PASS: actual convoy receipt identity/one-use, shared60-body and128-formation caps, outstanding/native-ledger accounting, exact19-body composition, source reuse, mode/client guards and no consumed receipt refunds
PASS: actual supply route cycling/arrival/stops, finite startup bounds, contact freshness, dismount hold, quiet interval, interrupted boarding, timeout and lost-truck release
PASS: moving-convoy perception boundaries and scoped individual/group abandonment priorities
PASS: actual supply startup reasons expose unchanged body budget/requirement, journal only failure changes, preserve retry cadence/caps and report the true final refusal
PASS: actual StartOne plus actual pool preserve unconsumed receipt retry, reject consumed replay, skip impossible new-budget surveys, retain equality, retry caps and journal dedup; no FPS claim
PASS: actual admission seeds use exact installed loaded prefab, reject replacement/foreign/projectile paths and preserve bounded immutable identity
PASS: actual primary-before-mounted one-shot batch, shared96/128 caps, physical snapshot headroom, original ownership, callback refusal and admission pinning
PASS: actual bounded HQ query validates only existing original binding without admission or replacement lookup
PASS: exact optional PMN4 startup, primary callback independence, original owner,128 capacity/callback limits, terminal no-retry and callback-proven freeze
PASS: production convoy spacing, physical arrival, stable follower targets, supply ownership, leader promotion and bounded stuck recovery
PASS: convoy combat keeps native manoeuvres for unchanged contacts and refreshes when contact moves
PASS: native convoy proof excludes pre-departure movement and ends via explicit fixture reset, not prohibited player death
PASS: boarding retries only after approach/seat progress stops, capped at three, with delayed native reissue and completed-team preservation
PASS: slow only owned vehicles near fit dismounted infantry; ignore passengers, casualties and released teams/vehicles
PASS: restore missing native driving registration only for healthy owned seated crews; preserve existing association and refuse invalid/released vehicles
PASS: actual body observer enforces owned physical roster, local death-only candidates, native trace gating, budget/cadence/caps, immutable body-only snapshots, radio retries and confirmed suppression
PASS: own initial roster, explicit retained corpse evidence, unconscious/missing/ref transfer guards, fixed strength, no replacement adoption, detached samples, surviving radio sender, immutable convoy root/ledger, mounted capture release and lost-root unknown
PASS: delivered-only status snapshots, two missed check-ins/reply deadline, last reported coordinates, episode/replay guards, confirmed-loss idempotence, detached/validated mounted payload replacement 256-record cap and detached carried-mine radio delivery/chronology
PASS: actual failed-retask deadline rollback plus assignment cancellation/release preserves radio ownership, native waypoint lifecycle and failed-order retry boundaries
PASS: actual force ledger, finite casualties/identity/cap, routes/arrival/elevation/overshoot, server and physical guards, staggered 256-record simulated hour without world queries
PASS: actual equipment coordinator registration dedupe, startup delay, five member scans, finite component retries, unregister/stop terminal behavior and 256-group bound
PASS: actual percentage selection, native/preferred launcher preservation, failure/removal fallback, pending-operation quarantine, capture, finite two-mine grants and no replenishment
PASS: automatic inventory one-shot roll, exact item ownership, finite compatible ammo, rejection, capture/stop, deletion, loot and late callback quarantine
PASS: enabled/valid catalog eligibility, category restrictions, content filtering, GUID deduplication across factions and bounded catalogs
PASS: actual engineer mine preparation/deadline, original custody/identity, once-only callback removal, cancellation quarantine, withdrawal/clearance, native refusal and owned-action cleanup; native execution untested
PASS: actual road mine-site annulus/bend geometry, deterministic bounded candidates, server/query limits, and native ground/water/obstruction rejection; no runtime placement claim
PASS: actual HQ mine admission, one site query per tick, maximum two active/32 retained jobs, delivered-only original post, once-per-unit refusal latch, 256-item ceiling and maintenance/teardown ownership
PASS: actual objective heading/threat/approach rules, persistent doctrine weight, fresh-contact coverage invalidation, stale-sweep rejection and atomic radio retask ownership
PASS: actual bounded delivered-negative coverage, replay/freshness/expiry/invalid guards, oldest eviction, small-circle and nearest-unswept selection, reserved-cell exclusion and cleanup
PASS: actual HQ active/pending reservations, interruption, committed replacement, bounded coverage and unchanged force counts
PASS: actual bounded pursuit roles/objectives/scores, stale search degradation, physical/busy/home guards, finite lifetime and two-bearing escape gap; no hidden player reads or spawning
PASS: actual HQ memory rules/service preserve delivered snapshots, chronology, replay bounds, decay, motion limits, identity and negative-search revisions
.......
----------------------------------------------------------------------
Ran 7 tests in 0.026s
OK
PASS: actual session Tick + journal router delivers each grant completion and new HQ line once, without repeats on empty/unavailable feeds or unauthorized ticks
.....
----------------------------------------------------------------------
Ran 5 tests in 0.367s
OK
PASS: actual current-controller/admin/mode authorization, per-round anti-replay, token-rotation refusal, command/snapshot throttles and client scope; owner-only replies and player-tool cleanup wiring
PASS: mission provider registration is idempotent, optional dispatch is ordered, status aggregates, journals preserve cursors, aliases stay with their addons and topic help is bounded
PASS: actual menu command routing covers all fourteen settings, rejects unsupported keys, gates companions, and matches unique authored widgets
PASS: explicit weapon retention buttons use the same ready/authorized server command path
PASS: actual summaries preserve queued/delivered meaning, clear counts and IDs; raw records, legacy display, cursor gaps and RPC limits remain intact
PASS: actual admin body authorization, god restoration, vanilla item deposit, callback completion/failure, timeout quarantine and stop/revocation paths
PASS: same-body revoke/regrant preserves pending insertions and timeout quarantine; new-body binding isolates late callbacks and never inherits god mode
PASS: actual Intel commands distinguish status/start/failure, preserve authorization gate and reject malformed requests; spent ledger is idempotent, server-only and bounded
PASS: actual reroll snapshot, authority, cancellation, ownership, accepted operations, quarantine, bounded work and stop methods; no native runtime claim
PASS: production Intel feedback coalescing, rough secrecy, rate limit, bounded dedupe, local/remote delivery and round cleanup; native UI/RPC not exercised
PASS: actual per-squad bounded report selector rotates visible targets, survives ordering/turnover, records only queued attempts, and preserves radio intake ordering
PASS: actual action denial/clearing, server request failure, single submitted-result feedback, current rescuer identity and terminal/stop suppression; native UI/RPC pending
PASS: actual physical denial precedence and transport-seat occupancy/reservation/access/lock checks
PASS: actual initial admission exhaustion and ServerTick grace; new/pending/empty/controller/life guards, normal death preserved
......................
----------------------------------------------------------------------
Ran 22 tests in 0.253s
OK
......................
----------------------------------------------------------------------
Ran 22 tests in 24.042s
OK
..................
----------------------------------------------------------------------
Ran 18 tests in 2.770s
OK
.........
----------------------------------------------------------------------
Ran 9 tests in 2.249s
OK
...............
----------------------------------------------------------------------
Ran 15 tests in 1.045s
OK
PASS: actual field result/braking observer and Chat dispatch rules; one finite fixed candidate, deferred callback failure and guarded cleanup; no native measurement
PASS: actual opt-in terrain audit records one fixed1681-point grid, preserves original survey refusal/success and exact no-allocation scope; malformed heights stop without retry; no native data acquired
....
----------------------------------------------------------------------
Ran 4 tests in 0.621s
OK
PASS: actual field PI/ramp/vector caps, antiwindup, braking hypothesis, immutable admission limits and segment bounds; no native physics tested
PASS: actual100m whole-field survey sampling/4096cap, rotated coverage, all-node terrain and native trace refusal; original certificate lineage retained; no native qualification
PASS: actual QualifyField preserves original identity/footprint/time, orders complete surveys before issuance, and refuses failed stages/moved body/expired or changed world; native boundaries faked
PASS: WORKBENCH first-refusal diagnostics preserve ordinary predicates, query order/count/budget and opt-in scope; no native logging run
PASS: actual field startup delegation, immutable lease/target, braking/settling/cancel transitions, early abort, callback scope, physical terminal policy and shared landing demand; native boundaries faked
PASS: actual inherited airborne pre-CLIMB cancellation enables verified native autohover once, refuses failed enable and never writes after capture
PASS: actual Core maintenance/default/tick/stop methods; empty/populated authority, terminal reentry, no tactical resume or new scheduler; native boundaries substituted
PASS: actual finite registration, unique claims/tokens, retention/cancel/stop, readiness gating, capture/expiry retirement and bounded cross-kind order history and typed field/route construction; native boundaries faked
PASS: actual WORKBENCH route observer returns exact retained route subtype and refuses absent/field controllers
.....
----------------------------------------------------------------------
Ran 5 tests in 0.588s
OK
......................
----------------------------------------------------------------------
Ran 22 tests in 0.166s
OK
................
----------------------------------------------------------------------
Ran 16 tests in 9.627s
OK
......
----------------------------------------------------------------------
Ran 6 tests in 0.017s
OK
PASS: actual production bridge lookup, lease/world/mode/seat/capture guards, no allocation, native super ordering and read-only fixture hooks
...............
----------------------------------------------------------------------
Ran 15 tests in 0.050s
OK
.............
----------------------------------------------------------------------
Ran 13 tests in 4.604s
OK
PASS: actual route gain/caps/braking, callback selection, old landing/cancellation control and matching read-only telemetry
..............................
----------------------------------------------------------------------
Ran 30 tests in 0.384s
OK
..............
----------------------------------------------------------------------
Ran 14 tests in 0.192s
OK
.........
----------------------------------------------------------------------
Ran 9 tests in 0.122s
OK
PASS: actual gate observer binds native registered action/context and current life, reads accumulated progress, refuses stale bindings and never revives outside original bounds
PASS: actual read-only look observer methods enforce explicit scope, pinned native camera/body/identity, normalized pose, terminal cancellation and original sample/time bounds
...........
----------------------------------------------------------------------
Ran 11 tests in 0.073s
OK
.......................
----------------------------------------------------------------------
Ran 23 tests in 0.038s
OK
PASS: actual initial WAITING task/guide copy, configured duration, unchanged interruption and rounded progress; native task assertion pending
........
----------------------------------------------------------------------
Ran 8 tests in 0.010s
OK
PASS: actual inventory adapter scope, grid placement, sole compatible host, refresh reuse, rollback, foreign hierarchy refusal and exactly-once native delegation; native compatibility pending
.................................................................................
----------------------------------------------------------------------
Ran 81 tests in 0.513s
OK
......
----------------------------------------------------------------------
Ran 6 tests in 0.070s
OK
.................
----------------------------------------------------------------------
Ran 17 tests in 0.004s
OK
...........
----------------------------------------------------------------------
Ran 11 tests in 0.081s
OK
.........
----------------------------------------------------------------------
Ran 9 tests in 0.322s
OK
PASS: actual observer nonce, admission pins, baseline/menu sequencing, snapshots, bounded clocks/samples, cleanup and one-attempt latch; native untested
PASS: actual corridor caps/height/hold and whole-rectangle survey bounds, terrain refusal, native trace refusal and exact certificate lineage; native route unqualified
PASS: actual route entry, fixed corridor/target, hover hold, cancellation landing freeze, shared lease/capture/deadline gate and unchanged native startup/tick sequence
PASS: finite opt-in route fixture, original native input order, meaningful physical-arrival evidence and guarded cleanup; no native launch
PASS: actual Chat route step result dispatch and scoped completion/cleanup wiring; six real early-parser refusal paths leave no prefix/profile output
PASS: actual retained-service fixture entry, immutable controller/token/deadline/count bindings, observer getter and cleanup ownership ordering; native route validation pending
PASS: actual measured cancellation gate, one-shot retained service Stop, no premature drain, immutable lease, fresh real controller readback and separate physical cancellation result policy
PASS: actual rough-intel objective selection, exact precedence, source grid dimensions and unchanged other-phase dispatch; native UI pending
.................................
----------------------------------------------------------------------
Ran 33 tests in 0.096s
OK
...............
----------------------------------------------------------------------
Ran 15 tests in 0.029s
OK
PASS: actual preparation status scope, persistent updates, spinner restoration, placeholder replacement/deletion/destruction, native observation persistence/timeout; rendering remains native-pending
PASS: actual guide/observer monitors retry native refusal, cache successful delivery, deduplicate and preserve living/preparing/spectator boundaries; native UI not exercised
PASS: actual native-end shutdown, existing terminal snapshots, reentrancy, unchanged native end data and stale preparation guards
....
----------------------------------------------------------------------
Ran 4 tests in 1.266s
OK
PASS: actual three-state result wording and UI refresh; stale winner IDs never manufacture escape
...........
----------------------------------------------------------------------
Ran 11 tests in 0.095s
OK
PASS: actual immutable target, bounded autohover demand, drift refusal, five-second hold and unchanged qualification/deadline
PASS: actual admission attempt budget bounds blocked/missing prerequisites; preparation, spent life and async pending remain protected
PASS: delayed admission retry retains controller ownership across same-account recycled connection IDs
PASS: actual scene deadline overrides delayed native preload only for rejection; late completion cannot assign, ordinary verified admission preserved
PASS: actual action permission matrix unchanged; useful phase/intel/consciousness denials, stale reason cleared, native door denial preserved; no native UI claim
.....
----------------------------------------------------------------------
Ran 5 tests in 0.195s
OK
PASS: actual aircraft cancellation/stage rules, ground-only completion, expiry/capture faults, input ownership and no physical shortcuts
PASS: actual exact-instance single-use qualification, native-clock staleness/movement refusal, footprint bounds and ownership-safe ground/fault cleanup
PASS: actual optional screenshot helper flag/identity/world/life revalidation, one queued attempt, delayed capture and mission/world cleanup; no native image/presentation claim
PASS: actual yard diagnostic exact registered prison ownership, eight native-bound corner projections, no root-sibling escape, bounded duplicate/deep/wide hierarchy traversal; native projection/mask still unmeasured
PASS: actual CurrentActor, SpawnPosition and observer-selection methods reject pending/unregistered/replaced/recycled/foreign/dead bodies; canonical selection/cycling, unconscious following and prison/geometry fallback preserved; native boundaries adapted
PASS: actual native-map fixture ownership, cleanup and callback evidence fail closed; native execution remains separate
PASS: actual shared-map callbacks bind exact map/config/root, preserve replacement UI/camera, defer focus, and remove only owned delayed work
PASS: actual Intel/HQ methods and one-shot qualified readiness handoff deliver late actors once; duplicate readiness, accepted spawn, pickup/drop, death and original negative rolls do not mint assignments
PASS: Workbench-only read accessor rejects unknown/nonserver identities; Chat observes all distinct ready crew before existing shell-depletion mutation
PASS: actual native-event latch survives deselection, requires exact activity/order, detaches before cleanup, preserves failure/timeout and never infers completion from physical shot count
.........
----------------------------------------------------------------------
Ran 9 tests in 0.096s
OK
PASS: actual refresh-fixture gates pin immutable observations/actual downlinks/original activity, reject unaccepted or relabelled commits, stop queueing early and require all queued contacts claimed before replay
..........................
----------------------------------------------------------------------
Ran 26 tests in 0.193s
OK
PASS: actual refresh scheduler/delivery/cancellation/projectile methods reject interrupted or replayed reports, retain committed ownership, preserve immutable snapshots/aim geometry and isolate stopped or replaced orders; native radio/crew behavior remains separate
.....................
----------------------------------------------------------------------
Ran 21 tests in 0.032s
OK
...........
----------------------------------------------------------------------
Ran 11 tests in 0.032s
OK
PASS: actual full-salvo gates require eight fresh committed physical launches, natural closure and exact finite inventory; reject partial/extra/replayed events
PASS: actual reason/availability guidance and refresh matrix; no-target copy omits cycling, hint retry retained, existing command/admin paths unchanged; native UI pending
PASS: actual client camera policy closes immediately on healing or mission end; late unconscious metadata cannot keep the view active
PASS: actual input dispatch, one press per edge, menu-held suppression; actual revival camera handoff with editor close/retry, missing camera, replacement body and stopped round
PASS: first-person pose survives missing samples without drift, follows body motion/rotation, resumes fresh pose and cannot leak between targets
.E......EEEEEEEEEE.EEEEEE.EEusage: test_native_package.py [-h] [--project {core}] --session SESSION
--compat COMPAT [--steam STEAM]
[--timeout TIMEOUT]
[--external-addons EXTERNAL_ADDONS]
[--silent-workbench | --exit-after-init]
[--continue-on-failure]
test_native_package.py: error: argument --exit-after-init: not allowed with argument --silent-workbench
.E.............E...F..FE.E....E.
======================================================================
ERROR: test_all_clean_candidates_still_unqualified_and_flag_defaults_false (__main__.NativePackageTests.test_all_clean_candidates_still_unqualified_and_flag_defaults_false)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 422, in test_all_clean_candidates_still_unqualified_and_flag_defaults_false
code, summary, calls = self.orchestration_double([self.completed_report(True) for _ in range(1)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_cleanup_diagnostic_rechecks_prefix_before_later_job (__main__.NativePackageTests.test_cleanup_diagnostic_rechecks_prefix_before_later_job)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 399, in test_cleanup_diagnostic_rechecks_prefix_before_later_job
code, summary, calls = self.orchestration_double([self.cleaned_report()],
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
idle=[None, ValueError('prefix busy again')])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_cleanup_diagnostic_rechecks_repository_and_copied_sources (__main__.NativePackageTests.test_cleanup_diagnostic_rechecks_repository_and_copied_sources) (method='inventory')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 409, in test_cleanup_diagnostic_rechecks_repository_and_copied_sources
code, summary, calls = self.orchestration_double([self.cleaned_report()])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_cleanup_diagnostic_rechecks_repository_and_copied_sources (__main__.NativePackageTests.test_cleanup_diagnostic_rechecks_repository_and_copied_sources) (method='copied_authored_snapshot')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 409, in test_cleanup_diagnostic_rechecks_repository_and_copied_sources
code, summary, calls = self.orchestration_double([self.cleaned_report()])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup (__main__.NativePackageTests.test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup) (change={'native_exit_code': None})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 392, in test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup
code, summary, calls = self.orchestration_double([self.cleaned_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup (__main__.NativePackageTests.test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup) (change={'native_exit_code': 1})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 392, in test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup
code, summary, calls = self.orchestration_double([self.cleaned_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup (__main__.NativePackageTests.test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup) (change={'native_exit_code': False})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 392, in test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup
code, summary, calls = self.orchestration_double([self.cleaned_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup (__main__.NativePackageTests.test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup) (change={'launcher_exit_code': 1})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 392, in test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup
code, summary, calls = self.orchestration_double([self.cleaned_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup (__main__.NativePackageTests.test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup) (change={'cleanup_report': None})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 392, in test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup
code, summary, calls = self.orchestration_double([self.cleaned_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup (__main__.NativePackageTests.test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup) (change={'cleanup_report': {'cleanup_confirmed': True, 'idle_verified': False, 'errors': []}})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 392, in test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup
code, summary, calls = self.orchestration_double([self.cleaned_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup (__main__.NativePackageTests.test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup) (change={'cleanup_report': {'cleanup_confirmed': True, 'idle_verified': True, 'errors': ['problem']}})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 392, in test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup
code, summary, calls = self.orchestration_double([self.cleaned_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_continuation_cannot_override_cleanup_runner_source_or_completion_failure (__main__.NativePackageTests.test_continuation_cannot_override_cleanup_runner_source_or_completion_failure) (change={'cleanup_confirmed': False})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 360, in test_continuation_cannot_override_cleanup_runner_source_or_completion_failure
code, summary, calls = self.orchestration_double([self.completed_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_continuation_cannot_override_cleanup_runner_source_or_completion_failure (__main__.NativePackageTests.test_continuation_cannot_override_cleanup_runner_source_or_completion_failure) (change={'runner_error': 'synthetic failure'})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 360, in test_continuation_cannot_override_cleanup_runner_source_or_completion_failure
code, summary, calls = self.orchestration_double([self.completed_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_continuation_cannot_override_cleanup_runner_source_or_completion_failure (__main__.NativePackageTests.test_continuation_cannot_override_cleanup_runner_source_or_completion_failure) (change={'copied_authored_unchanged': False})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 360, in test_continuation_cannot_override_cleanup_runner_source_or_completion_failure
code, summary, calls = self.orchestration_double([self.completed_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_continuation_cannot_override_cleanup_runner_source_or_completion_failure (__main__.NativePackageTests.test_continuation_cannot_override_cleanup_runner_source_or_completion_failure) (change={'completion_observed': 'timeout'})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 360, in test_continuation_cannot_override_cleanup_runner_source_or_completion_failure
code, summary, calls = self.orchestration_double([self.completed_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_continuation_cannot_override_cleanup_runner_source_or_completion_failure (__main__.NativePackageTests.test_continuation_cannot_override_cleanup_runner_source_or_completion_failure) (change={'completion_observed': 'interrupted'})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 360, in test_continuation_cannot_override_cleanup_runner_source_or_completion_failure
code, summary, calls = self.orchestration_double([self.completed_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_continuation_cannot_override_cleanup_runner_source_or_completion_failure (__main__.NativePackageTests.test_continuation_cannot_override_cleanup_runner_source_or_completion_failure) (change={'completion_observed': 'native-or-launcher-exited-prefix-active'})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 360, in test_continuation_cannot_override_cleanup_runner_source_or_completion_failure
code, summary, calls = self.orchestration_double([self.completed_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_default_stops_even_after_safely_completed_validation_failure (__main__.NativePackageTests.test_default_stops_even_after_safely_completed_validation_failure)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 347, in test_default_stops_even_after_safely_completed_validation_failure
code, summary, calls = self.orchestration_double([self.completed_report()], False)
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_diagnostic_continuation_runs_full_closure_keeps_failures_and_nonzero (__main__.NativePackageTests.test_diagnostic_continuation_runs_full_closure_keeps_failures_and_nonzero)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 336, in test_diagnostic_continuation_runs_full_closure_keeps_failures_and_nonzero
code, summary, calls = self.orchestration_double(reports)
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_exit_after_init_forwards_across_dependency_closure (__main__.NativePackageTests.test_exit_after_init_forwards_across_dependency_closure)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 544, in test_exit_after_init_forwards_across_dependency_closure
code, summary, calls = self.orchestration_double(
~~~~~~~~~~~~~~~~~~~~~~~~~^
[self.completed_report(True) for _ in range(1)], exit_after_init=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_orchestration_stops_after_first_failed_dependency_without_launch (__main__.NativePackageTests.test_orchestration_stops_after_first_failed_dependency_without_launch)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 286, in test_orchestration_stops_after_first_failed_dependency_without_launch
self.assertEqual(n.run(args, self.source), 1)
~~~~~^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_session_never_reused_or_outside_tmp (__main__.NativePackageTests.test_session_never_reused_or_outside_tmp)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 90, in test_session_never_reused_or_outside_tmp
n.validate_session(self.source, self.steam, self.compat, fresh)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_single_addon_build_has_no_second_native_job (__main__.NativePackageTests.test_single_addon_build_has_no_second_native_job)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 416, in test_single_addon_build_has_no_second_native_job
code, summary, calls = self.orchestration_double([self.completed_report(True)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
ERROR: test_verified_post_cleanup_allows_only_diagnostic_later_jobs (__main__.NativePackageTests.test_verified_post_cleanup_allows_only_diagnostic_later_jobs)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 375, in test_verified_post_cleanup_allows_only_diagnostic_later_jobs
code, summary, calls = self.orchestration_double(reports)
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 479, in run
validate_session(root, steam, compat, session)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 153, in validate_session
raise ValueError('--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx')
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
======================================================================
FAIL: test_prefix_symlink_and_traversal_refused (__main__.NativePackageTests.test_prefix_symlink_and_traversal_refused)
----------------------------------------------------------------------
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 444, in test_prefix_symlink_and_traversal_refused
with self.assertRaisesRegex(ValueError, 'lock must not'):
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: "lock must not" does not match "--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx"
======================================================================
FAIL: test_same_prefix_lock_refuses_without_creating_session (__main__.NativePackageTests.test_same_prefix_lock_refuses_without_creating_session)
----------------------------------------------------------------------
ValueError: --compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 303, in test_same_prefix_lock_refuses_without_creating_session
with self.assertRaisesRegex(ValueError, 'owns the disposable prefix'): n.run(args, self.source)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: "owns the disposable prefix" does not match "--compat must be a disposable cloned prefix under /tmp, outside source and Steam, with a real pfx"
----------------------------------------------------------------------
Ran 48 tests in 9.450s
FAILED (failures=2, errors=24)
PASS: 35 prefabs have unique saved root entity IDs
PASS: 299 original script entries tracked across 18 unfinished responsibilities
PASS: 1 isolated addons, acyclic dependencies, 56 unique resources, exact vanilla/authorized external references
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/.build/death-diagnostic-2153/run_checks.py", line 16, in <module>
runpy.run_path(str(root/'tools/check.py'),run_name='__main__')
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen runpy>", line 294, in run_path
File "<frozen runpy>", line 98, in _run_module_code
File "<frozen runpy>", line 88, in _run_code
File "/home/jakub/devel/escapistsrereintroduced/tools/check.py", line 79, in <module>
if __name__=='__main__':check()
~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tools/check.py", line 77, in check
subprocess.run([sys.executable,str(ROOT/'tests'/name)],check=True)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/.build/death-diagnostic-2153/run_checks.py", line 14, in run
return original(args,*a,**kw)
File "/usr/lib/python3.14/subprocess.py", line 578, in run
raise CalledProcessError(retcode, process.args,
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['/usr/bin/python3', '/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py']' returned non-zero exit status 1.
@@ -0,0 +1,389 @@
PASS: missing, child-only, malformed, zero and duplicate prefab root IDs rejected
PASS: delayed scene/inventory arrival, deferred preload, identity checks, stale replies, timeout and observer cleanup
PASS: actual inventory manifest, delayed/missing/wrong-owner item links, finite cap, consumed-stock refresh and preload ordering
PASS: spawn scene remains held through final acknowledgement and nearby use; leaving, reassignment, disconnect and teardown release it
PASS: production prison AI hold/release, repeat activation, authority/faction/player exclusion, dead actor and stop cleanup
PASS: actual protected/capped damage plus exact-actor terminal fixture bypass through delayed native damage, fail-closed ownership and untouched ordinary actor; no native claim
PASS: actual Tick clock initialization admits fractional first ticks and expires without extending the original start
PASS: actual finite conservation/deadline/callback policies; read-only selection, bounded once-only inventory submission and no can refill; native transfer not executed
PASS: actual exact-context membership, bounded identity/reach gates, native start/cache/eligibility ordering and no duplicate/foreign action start; fuel manager identity and empty-can headroom guards checked
PASS: actual detached node/value snapshot and conservation refuse mismatched lengths before indexed reads, retain original identities under native out-array aliasing and log bounded counts once; native cause remains unknown
PASS: actual mine evidence sealing/recovery, historical coarse publication, caps, canonical ownership, marker join retry/owner-change/stop; native arming and replicated vector-array transport untested
PASS: actual full document recovery retains authored/sealed targets, one shared spent ledger, retry/exhaustion semantics and canonical multi-player ownership alongside supplemental mine intel
PASS: actual infantry search suspension, quiet grace, finite resume, expiry/replacement and defensive/ownership boundaries
PASS: infantry combat gate precedes radio delivery and preserves non-task transports
PASS: actual HQ contact transition wakes only fit squad members, cancels only task orders and logs changes once
PASS: actual finite medicine grants, authored stock deduction, full-backpack refusal/pouch fallback, no loot replenishment, unresolved-operation quarantine and ownership/stop guards
PASS: only recent native detected/identified threats suspend hunter travel; stale/disarmed/destroyed contacts cannot strand patrols
PASS: actual hunter combat transition cancels only its travel once, holds through renewed contact and resumes after quiet; unregistered startup preserved
PASS: captured sighting retention, immutable details, expiry, replay rejection, bounded sound uncertainty/cooldown, radio loss, priority and overdue-status fairness
PASS: arrow press/release, held keys, opposing keys, disabled/menu input and firearm-only retention
PASS: town trigger and hard 700m exclusion for all observers, empty/invalid positions and final-check crossings
PASS: exact finite site squads, invalid roster/count rejection, committed-site spacing and safe fallback boundary
PASS: mortar couriers use the mobile site team and refuse permanent-only garrisons
PASS: omitted preferred mortar depot selects a surviving owned camp/mobile team; no camp, foreign cache and permanent-only sites are unavailable; historical priority retained
PASS: real-session mortar deadline, failed-support convoy admission and hunter survivor/recovery gates
PASS: native-route retry preserves delivered target, limits attempts and suspends during combat
PASS: stale/deleted AI utility cannot receive Complete; mortar HQ preflight withholds unsafe orders; mounted convoy cover never creates infantry Defend
PASS: flight crew affiliation and group precede native boarding; preparation remains bounded even while passengers wait
PASS: factionless/deleted map targets do not abort perception; faction lookup tolerates teardown; deleting helicopter releases without capture/engine access
PASS: shoot adapter waits for a physical round; bounded same-shell retries, interrupted/never-started loads, committed no-retry, order/owner changes and normal native delegation
PASS: missing/invalid faction crew defers before any native spawn or allowance insertion; all registered RHS factions have explicit soldier and medic profiles
PASS: vehicle radio issued once; pending, refusal and looting cannot duplicate or fabricate a physical radio link
PASS: actual vehicle-radio link requires the original seated crew, physical manpack and live uncaptured mission vehicle; looting, dismount, release and teardown remove it
PASS: actual hunter release preserves survivors/HQ, releases driving ownership once, delegates capture/teardown, and excludes prison/patrol/mortar from generic objective defence
PASS: real opening road geometry enforces wide azimuths; fresh delivered contact preempts patrol cooldown, respects radio failures and does not starve in-flight interception
PASS: actual scoped 10% tighter REGULAR aim error and alert perception; preserves equipment multiplier and restores vanilla behavior when unbound
PASS: physical inspection and parent-wreck retention; server-only searched/report delivery unlocks native cleanup once with a 300-second delay
PASS: bounded same-group empty-spawn retries, no casualty refill, queue retirement, delivery-gated intel, prepared-team reuse, throttled diagnostics and LOD release
PASS: production airborne memory confidence, persistence, ground coverage, confirmed losses, artillery veto, cooldown and invalid-input rules
PASS: production cover retains the carried HQ target until its deadline; airport reload waits until the drop pass and cover have finished
PASS: air logistics reservation preserves delivered search until radio handoff, excludes guards/combat/in-flight orders, and quarantines unresolved native loads/moves
PASS: actual ammunition cargo selector handles empty rifle/machinegun/sniper magazines, preserves loaded variants, excludes auxiliary launchers and tolerates missing native metadata
PASS: original 15-minute launch/loss cadence, active/captured timer disarm, saved delay reset, stop, 300m orbit and bounded close-contact standoff at 30/60/120 Hz
PASS: actual aircraft-removal notification guards owner/server/active/stop and schedules one full delay without replay extension
PASS: hill prominence/elevation, actual road edges/heights/bends and server-only finite scout admission, pending stock, timeout and no replacements/refills
PASS: mortar duty scope excludes players, other crews, stopped/client/inactive states; only destruction releases an active assignment, while the gunner may approach the gun
PASS: random mode restrictions, full numeric ranges, independent calendar dates and strict daylight boundaries
PASS: actual killais eligibility includes the 1000m boundary, excludes players/retained bodies/dead/non-character entities and checks full 3D distance
PASS: actual generation scheduler bounds each tick, enforces deadline/candidate ceiling, validates fallback, commits only accepted positions, skips only dispensable sites, preserves required objectives/intel, and resets the next search budget
PASS: terrain placement samples world bounds, retains streaming candidates, bounds waits/work, rejects foreign fallbacks, preserves objectives/intel and validates completion
PASS: actual navigation readiness supports static meshes, yields only for loadable streaming tiles and refuses unreachable positions
PASS: universal connector, embedded/standalone exports, multiple terrains, stable IDs, native nav configs, missing-nav visibility, path validation and overwrite protection
PASS: airfield detection accepts physical runways/towers and bounded authored markers, rejects unrelated props, water and out-of-world markers, and samples terrain height
PASS: configured airport parsing, bounded readiness, stale admission rejection and cleanup wiring
PASS: explicit CLI opt-in, disabled/editor guards and mission-header airport precedence
PASS: singleton identity guards, paired faction deserialization and client world-cleanup wiring
PASS: task/map/respawn getters survive delayed old destruction and preserve ordinary-mode behavior
PASS: replication hierarchy refuses absent/aliased nodes and establishes delivery dependencies idempotently
PASS: standalone old faction delegates collected once, with null/deleted owners ignored
PASS: actual faction resolution reserves explicit roles, samples without replacement, substitutes disabled selections, and rejects duplicate/unknown/missing choices and insufficient pools
PASS: Random all submits persistent random roles immediately; manual mixed choices, stale/unauthorized UI guards and debounce preserved
PASS: actual content policy gates parent packs, individual factions, faction identity and finite group rotation with vanilla fallback
PASS: actual delivered road eligibility, ahead projection without chords, reservations, stock road query bounds, terrain/water/obstruction refusal and clean outputs
PASS: actual delivered-task lineage, expiry, old-order retention, native commit, release, road precision expiry and duplicate delivery
PASS: actual original-roster local handoff,100m3D bound,busy carrier/budget exclusion,origin interruption including deletedsource,normal radio delivery and per-source replay history
PASS: actual visual intake retains source/time/position/id, rejects replay, prefers usable own route, excludes simultaneous callers and conservatively resets negative-sweep dwell
PASS: actual fixture local/radio gating, immutable source/time/position, interrupted-report exclusion and exact-owner cleanup
PASS: local-handoff runner refuses wrong project/round count/insufficient deadline before runtime work
PASS: actual fixture allocator terminal/unsubmitted guard, original-group lookup and both candidate gates
PASS: actual report-derived waypoint insertion/order and tighter positive radii; no formation navigation claim
PASS: actual Place/Stop waits native pose update, bounds four attempts, preserves original position, restores pending/settled placement and respects ownership/accepted-move quarantine
PASS: actual fixture current/original recipient ownership, unresolved transfer cleanup, exact-token release and idempotent Stop
PASS: actual fixture phased-cargo readiness, bounded callbacks, captured-stock mixed-caliber selection/continuation, reservation cleanup and component magazine counts
PASS: actual inventory-fixture setup uses ordinary prison unlock before constructing its convoy-waiting probe; failed unlock cannot run fixture
PASS: actual authored storage anchors, native trace flags, own-hierarchy exclusion, external wall/vehicle obstruction, range, unknown geometry and bounded context refusal
PASS: actual convoy binding, finite identities, disjoint tokens, shared report replay/cooldown, original recipients and HQ cleanup
PASS: actual finite convoy supply pool; immutable slots, shared demand state, sparse/capped discovery and permanent shutdown
PASS: actual HQ rotates finite donors, skips unavailable/contacted trucks, uses delivered reports and dispatches at most one trip per planning cadence
PASS: actual original turret identity, native/canonical guards, scoped maximum-skill profile, reset, dismount/reboard, requested-skill preservation and restoration
PASS: bounded HQ startup/memory windows and outcome-specific full-route deadlines
PASS: explicit escape-route skips only administrator stress, preserving original full-fixture wait/failure paths
PASS: normal escape route keeps ordinary catalog and generated placement; historical selectors remain unchanged
PASS: actual read migrates old valid settings, preserves explicit disabled state, rejects invalid data; next-round feedback and fixed menu remain honest
PASS: actual automatic convoy timing/authority/admission/one-attempt/manual-task/stop policy; native deployment unproved
PASS: late authoritative failure reason refreshes open result; detach, mode change and success subscriptions preserved
infantry resupply actual rules, radio transitions, owned cleanup and unresolved-operation tests passed
PASS: actual resupply Roster preserves permanent release, original slot mapping and bounded ownership
PASS: actual one-mine original carrier selection, settled startup, shared finite claims, no refund after submission
PASS: actual HQ startup grant readiness forwarding is authoritative and fail-closed
PASS: actual finite PMN4 one-to-two entitlement, pinned original ownership, shared commit, physical custody, callback quarantine/deletion and no retry
PASS: actual bounded empty-return and finite delivery; phase-isolated callbacks, exact ownership proof, stop quarantine and original actor/vehicle boundaries
PASS: actual shared finite identity reservation; competing consumers, submission permanence, stale cleanup and96-item bound
PASS: actual carried-mounted swap, shared committed claim, physical slot reach, exact two-way proof, uncertainty and terminal cleanup
PASS: actual mounted pickup, exact finite ownership, pre-submission commit, physical custody, bounded callback and quarantine lifecycle; no native coverage claim
PASS: actual mounted courier admission, radio, individual orders, two-stage transfer, reboarding, token cleanup and quarantine lifecycle
PASS: actual scoped crew permit and native board completion/failure preserves foreign seats without teleport fallback
PASS: actual shared mounted stock/history ownership, atomic exact HQ pair claim, and bounded stopped-owner proof polling
PASS: actual carried/mounted early ammunition policy and status-first shared uplink; complete threshold, phases, cooldown, failures requested check-ins and non-urgent detached carried-mine status
PASS: actual group radio startup preservation, finite native grants, callback quarantine, frozen selection/actor ownership and bounded observation
PASS: actual maintenance native-stock check rejects missing/duplicate/wrong-identity/unowned/depleted/malformed stock and is read-only; native runtime not executed
EEEEEEEEEEEEEEEEEE
======================================================================
ERROR: test_candidate_and_copy_mutations_refused (__main__.ExternalPackedTests.test_candidate_and_copy_mutations_refused)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_crlf_project_and_exact_multiple_external_paks (__main__.ExternalPackedTests.test_crlf_project_and_exact_multiple_external_paks)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_exact_identity_closure_and_no_loose_files (__main__.ExternalPackedTests.test_exact_identity_closure_and_no_loose_files)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_explicit_v4_and_frozen_v2_rejection (__main__.ExternalPackedTests.test_explicit_v4_and_frozen_v2_rejection)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_external_link_retarget_refused (__main__.ExternalPackedTests.test_external_link_retarget_refused)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_external_loose_source_refused (__main__.ExternalPackedTests.test_external_loose_source_refused)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_external_runtime_mutation_refused (__main__.ExternalPackedTests.test_external_runtime_mutation_refused)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_mutated_candidate_before_copy_refused (__main__.ExternalPackedTests.test_mutated_candidate_before_copy_refused)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_native_errors_are_not_waived (__main__.ExternalPackedTests.test_native_errors_are_not_waived)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_policy_and_cache_mutations_refused (__main__.ExternalPackedTests.test_policy_and_cache_mutations_refused)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_private_copy_exact_six_links_and_schema (__main__.ExternalPackedTests.test_private_copy_exact_six_links_and_schema)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_profile_contamination_and_vanilla_retarget_refused (__main__.ExternalPackedTests.test_profile_contamination_and_vanilla_retarget_refused)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_provenance_tamper_refused (__main__.ExternalPackedTests.test_provenance_tamper_refused)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_redirected_profile_refused (__main__.ExternalPackedTests.test_redirected_profile_refused)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_request_gates (__main__.ExternalPackedTests.test_request_gates)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_runtime_evidence_rejects_redirects_extra_missing_and_loose (__main__.ExternalPackedTests.test_runtime_evidence_rejects_redirects_extra_missing_and_loose)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_saves_addon_and_native_provenance_tamper_refused (__main__.ExternalPackedTests.test_saves_addon_and_native_provenance_tamper_refused)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
======================================================================
ERROR: test_valid_full_nine_mount_database_proof (__main__.ExternalPackedTests.test_valid_full_nine_mount_database_proof)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py", line 36, in setUp
self.packed=v4.request(self.args,self.root)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 58, in request
require(session.is_absolute() and session.parent==Path('/tmp') and session==session.resolve() and re.fullmatch(r'erri-packed-chat-[A-Za-z0-9_-]+',session.name) and not session.exists() and not session.is_symlink(),'Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session')
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tools/packed_external.py", line 20, in require
if not condition: raise ValueError(message)
^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: Packed v4 requires a new canonical /tmp/erri-packed-chat-<name> session
----------------------------------------------------------------------
Ran 18 tests in 0.075s
FAILED (errors=18)
PASS: 35 prefabs have unique saved root entity IDs
PASS: 299 original script entries tracked across 18 unfinished responsibilities
PASS: 1 isolated addons, acyclic dependencies, 56 unique resources, exact vanilla/authorized external references
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tools/check.py", line 79, in <module>
if __name__=='__main__':check()
~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tools/check.py", line 77, in check
subprocess.run([sys.executable,str(ROOT/'tests'/name)],check=True)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/subprocess.py", line 578, in run
raise CalledProcessError(retcode, process.args,
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['/usr/bin/python3', '/home/jakub/devel/escapistsrereintroduced/tests/test_packed_external_game.py']' returned non-zero exit status 1.
@@ -0,0 +1,629 @@
PASS: missing, child-only, malformed, zero and duplicate prefab root IDs rejected
PASS: delayed scene/inventory arrival, deferred preload, identity checks, stale replies, timeout and observer cleanup
PASS: actual inventory manifest, delayed/missing/wrong-owner item links, finite cap, consumed-stock refresh and preload ordering
PASS: spawn scene remains held through final acknowledgement and nearby use; leaving, reassignment, disconnect and teardown release it
PASS: production prison AI hold/release, repeat activation, authority/faction/player exclusion, dead actor and stop cleanup
PASS: actual protected-Kill then explicit fatal-loss fixture, fail-closed staging, unchanged ordinary protection and seven scoped support endings; no native claim
PASS: actual Tick clock initialization admits fractional first ticks and expires without extending the original start
PASS: actual finite conservation/deadline/callback policies; read-only selection, bounded once-only inventory submission and no can refill; native transfer not executed
PASS: actual exact-context membership, bounded identity/reach gates, native start/cache/eligibility ordering and no duplicate/foreign action start; fuel manager identity and empty-can headroom guards checked
PASS: actual detached node/value snapshot and conservation refuse mismatched lengths before indexed reads, retain original identities under native out-array aliasing and log bounded counts once; native cause remains unknown
PASS: actual mine evidence sealing/recovery, historical coarse publication, caps, canonical ownership, marker join retry/owner-change/stop; native arming and replicated vector-array transport untested
PASS: actual full document recovery retains authored/sealed targets, one shared spent ledger, retry/exhaustion semantics and canonical multi-player ownership alongside supplemental mine intel
PASS: actual infantry search suspension, quiet grace, finite resume, expiry/replacement and defensive/ownership boundaries
PASS: infantry combat gate precedes radio delivery and preserves non-task transports
PASS: actual HQ contact transition wakes only fit squad members, cancels only task orders and logs changes once
PASS: actual finite medicine grants, authored stock deduction, full-backpack refusal/pouch fallback, no loot replenishment, unresolved-operation quarantine and ownership/stop guards
PASS: only recent native detected/identified threats suspend hunter travel; stale/disarmed/destroyed contacts cannot strand patrols
PASS: actual hunter combat transition cancels only its travel once, holds through renewed contact and resumes after quiet; unregistered startup preserved
PASS: captured sighting retention, immutable details, expiry, replay rejection, bounded sound uncertainty/cooldown, radio loss, priority and overdue-status fairness
PASS: arrow press/release, held keys, opposing keys, disabled/menu input and firearm-only retention
PASS: town trigger and hard 700m exclusion for all observers, empty/invalid positions and final-check crossings
PASS: exact finite site squads, invalid roster/count rejection, committed-site spacing and safe fallback boundary
PASS: mortar couriers use the mobile site team and refuse permanent-only garrisons
PASS: omitted preferred mortar depot selects a surviving owned camp/mobile team; no camp, foreign cache and permanent-only sites are unavailable; historical priority retained
PASS: real-session mortar deadline, failed-support convoy admission and hunter survivor/recovery gates
PASS: native-route retry preserves delivered target, limits attempts and suspends during combat
PASS: stale/deleted AI utility cannot receive Complete; mortar HQ preflight withholds unsafe orders; mounted convoy cover never creates infantry Defend
PASS: flight crew affiliation and group precede native boarding; preparation remains bounded even while passengers wait
PASS: factionless/deleted map targets do not abort perception; faction lookup tolerates teardown; deleting helicopter releases without capture/engine access
PASS: shoot adapter waits for a physical round; bounded same-shell retries, interrupted/never-started loads, committed no-retry, order/owner changes and normal native delegation
PASS: missing/invalid faction crew defers before any native spawn or allowance insertion; all registered RHS factions have explicit soldier and medic profiles
PASS: vehicle radio issued once; pending, refusal and looting cannot duplicate or fabricate a physical radio link
PASS: actual vehicle-radio link requires the original seated crew, physical manpack and live uncaptured mission vehicle; looting, dismount, release and teardown remove it
PASS: actual hunter release preserves survivors/HQ, releases driving ownership once, delegates capture/teardown, and excludes prison/patrol/mortar from generic objective defence
PASS: real opening road geometry enforces wide azimuths; fresh delivered contact preempts patrol cooldown, respects radio failures and does not starve in-flight interception
PASS: actual scoped 10% tighter REGULAR aim error and alert perception; preserves equipment multiplier and restores vanilla behavior when unbound
PASS: physical inspection and parent-wreck retention; server-only searched/report delivery unlocks native cleanup once with a 300-second delay
PASS: bounded same-group empty-spawn retries, no casualty refill, queue retirement, delivery-gated intel, prepared-team reuse, throttled diagnostics and LOD release
PASS: production airborne memory confidence, persistence, ground coverage, confirmed losses, artillery veto, cooldown and invalid-input rules
PASS: production cover retains the carried HQ target until its deadline; airport reload waits until the drop pass and cover have finished
PASS: air logistics reservation preserves delivered search until radio handoff, excludes guards/combat/in-flight orders, and quarantines unresolved native loads/moves
PASS: actual ammunition cargo selector handles empty rifle/machinegun/sniper magazines, preserves loaded variants, excludes auxiliary launchers and tolerates missing native metadata
PASS: original 15-minute launch/loss cadence, active/captured timer disarm, saved delay reset, stop, 300m orbit and bounded close-contact standoff at 30/60/120 Hz
PASS: actual aircraft-removal notification guards owner/server/active/stop and schedules one full delay without replay extension
PASS: hill prominence/elevation, actual road edges/heights/bends and server-only finite scout admission, pending stock, timeout and no replacements/refills
PASS: mortar duty scope excludes players, other crews, stopped/client/inactive states; only destruction releases an active assignment, while the gunner may approach the gun
PASS: random mode restrictions, full numeric ranges, independent calendar dates and strict daylight boundaries
PASS: actual killais eligibility includes the 1000m boundary, excludes players/retained bodies/dead/non-character entities and checks full 3D distance
PASS: actual generation scheduler bounds each tick, enforces deadline/candidate ceiling, validates fallback, commits only accepted positions, skips only dispensable sites, preserves required objectives/intel, and resets the next search budget
PASS: terrain placement samples world bounds, retains streaming candidates, bounds waits/work, rejects foreign fallbacks, preserves objectives/intel and validates completion
PASS: actual navigation readiness supports static meshes, yields only for loadable streaming tiles and refuses unreachable positions
PASS: universal connector, embedded/standalone exports, multiple terrains, stable IDs, native nav configs, missing-nav visibility, path validation and overwrite protection
PASS: airfield detection accepts physical runways/towers and bounded authored markers, rejects unrelated props, water and out-of-world markers, and samples terrain height
PASS: configured airport parsing, bounded readiness, stale admission rejection and cleanup wiring
PASS: explicit CLI opt-in, disabled/editor guards and mission-header airport precedence
PASS: singleton identity guards, paired faction deserialization and client world-cleanup wiring
PASS: task/map/respawn getters survive delayed old destruction and preserve ordinary-mode behavior
PASS: replication hierarchy refuses absent/aliased nodes and establishes delivery dependencies idempotently
PASS: standalone old faction delegates collected once, with null/deleted owners ignored
PASS: actual faction resolution reserves explicit roles, samples without replacement, substitutes disabled selections, and rejects duplicate/unknown/missing choices and insufficient pools
PASS: Random all submits persistent random roles immediately; manual mixed choices, stale/unauthorized UI guards and debounce preserved
PASS: actual content policy gates parent packs, individual factions, faction identity and finite group rotation with vanilla fallback
PASS: actual delivered road eligibility, ahead projection without chords, reservations, stock road query bounds, terrain/water/obstruction refusal and clean outputs
PASS: actual delivered-task lineage, expiry, old-order retention, native commit, release, road precision expiry and duplicate delivery
PASS: actual original-roster local handoff,100m3D bound,busy carrier/budget exclusion,origin interruption including deletedsource,normal radio delivery and per-source replay history
PASS: actual visual intake retains source/time/position/id, rejects replay, prefers usable own route, excludes simultaneous callers and conservatively resets negative-sweep dwell
PASS: actual fixture local/radio gating, immutable source/time/position, interrupted-report exclusion and exact-owner cleanup
PASS: local-handoff runner refuses wrong project/round count/insufficient deadline before runtime work
PASS: actual fixture allocator terminal/unsubmitted guard, original-group lookup and both candidate gates
PASS: actual report-derived waypoint insertion/order and tighter positive radii; no formation navigation claim
PASS: actual Place/Stop waits native pose update, bounds four attempts, preserves original position, restores pending/settled placement and respects ownership/accepted-move quarantine
PASS: actual fixture current/original recipient ownership, unresolved transfer cleanup, exact-token release and idempotent Stop
PASS: actual fixture phased-cargo readiness, bounded callbacks, captured-stock mixed-caliber selection/continuation, reservation cleanup and component magazine counts
PASS: actual inventory-fixture setup uses ordinary prison unlock before constructing its convoy-waiting probe; failed unlock cannot run fixture
PASS: actual authored storage anchors, native trace flags, own-hierarchy exclusion, external wall/vehicle obstruction, range, unknown geometry and bounded context refusal
PASS: actual convoy binding, finite identities, disjoint tokens, shared report replay/cooldown, original recipients and HQ cleanup
PASS: actual finite convoy supply pool; immutable slots, shared demand state, sparse/capped discovery and permanent shutdown
PASS: actual HQ rotates finite donors, skips unavailable/contacted trucks, uses delivered reports and dispatches at most one trip per planning cadence
PASS: actual original turret identity, native/canonical guards, scoped maximum-skill profile, reset, dismount/reboard, requested-skill preservation and restoration
PASS: bounded HQ startup/memory windows and outcome-specific full-route deadlines
PASS: explicit escape-route skips only administrator stress, preserving original full-fixture wait/failure paths
PASS: normal escape route keeps ordinary catalog and generated placement; historical selectors remain unchanged
PASS: actual read migrates old valid settings, preserves explicit disabled state, rejects invalid data; next-round feedback and fixed menu remain honest
PASS: actual automatic convoy timing/authority/admission/one-attempt/manual-task/stop policy; native deployment unproved
PASS: late authoritative failure reason refreshes open result; detach, mode change and success subscriptions preserved
infantry resupply actual rules, radio transitions, owned cleanup and unresolved-operation tests passed
PASS: actual resupply Roster preserves permanent release, original slot mapping and bounded ownership
PASS: actual one-mine original carrier selection, settled startup, shared finite claims, no refund after submission
PASS: actual HQ startup grant readiness forwarding is authoritative and fail-closed
PASS: actual finite PMN4 one-to-two entitlement, pinned original ownership, shared commit, physical custody, callback quarantine/deletion and no retry
PASS: actual bounded empty-return and finite delivery; phase-isolated callbacks, exact ownership proof, stop quarantine and original actor/vehicle boundaries
PASS: actual shared finite identity reservation; competing consumers, submission permanence, stale cleanup and96-item bound
PASS: actual carried-mounted swap, shared committed claim, physical slot reach, exact two-way proof, uncertainty and terminal cleanup
PASS: actual mounted pickup, exact finite ownership, pre-submission commit, physical custody, bounded callback and quarantine lifecycle; no native coverage claim
PASS: actual mounted courier admission, radio, individual orders, two-stage transfer, reboarding, token cleanup and quarantine lifecycle
PASS: actual scoped crew permit and native board completion/failure preserves foreign seats without teleport fallback
PASS: actual shared mounted stock/history ownership, atomic exact HQ pair claim, and bounded stopped-owner proof polling
PASS: actual carried/mounted early ammunition policy and status-first shared uplink; complete threshold, phases, cooldown, failures requested check-ins and non-urgent detached carried-mine status
PASS: actual group radio startup preservation, finite native grants, callback quarantine, frozen selection/actor ownership and bounded observation
PASS: actual maintenance native-stock check rejects missing/duplicate/wrong-identity/unowned/depleted/malformed stock and is read-only; native runtime not executed
..................
----------------------------------------------------------------------
Ran 18 tests in 0.263s
OK
PASS: actual radio node rejects current incapacitation, death, ownership and faction changes despite cached inventory; one-second capability refresh remains explicit
PASS: Southern finite maintenance stock preserves weapons/clues and optional transport, historical Western fixture stays separate; native capacity/consumption untested
PASS: optional transport deferred behind required readiness, bounded once-only spawn/omission, isolated cleanup, occupied-candidate retention and required-default preservation
PASS: actual diagnostic fallback runs only on failed missing-context call, derives unique native pilot door, preserves stock eligibility and restores prior index on success/failure; diagnostics mutate no game state.
PASS: actual native-prelude cleanup restores only original changed damage, refuses stale/incapacitated/aboard teleport; bounded five-seat/four-door fixture wiring checked. Native execution remains pending.
PASS: actual CreateTransport requires successful scoped Configure after handbrake, preserves ordinary vehicles, tracks spawned entity before failures and never treats failed lock registration as ready.
PASS: actual preparation Configure guards/idempotence/breach preservation, security eligibility/final current-body server mutation and all scoped action guards; all five seat/four door resource overrides. Native hold, prefab merge, replication and boarding remain unverified.
PASS: production vehicle alarm single trigger/replica completion/no replay, fixed deadline/readiness wait, failed audio, dedicated server, moving exact handle, destruction/native end/deletion/clock and mission teardown. Native sound and multiplayer delivery require engine qualification.
PASS: production alarm emitter/receiver original time/location, explicit native queue only, 32-entry cap, 50m local witness eligibility, bound perception, native-super preservation; actual engine broadcast/hearing remains unverified.
PASS: actual optional candidate barrier, exact callback/custody proof and unchanged mine/primary snapshots; no native transfer claim
Native finite mine-stock runner: parser, scope, exclusions and command pass
PASS: actual bounded native mounted proof/detached payload/deadline/cleanup methods, production-only setup and isolated runner selector
PASS: actual one-existing-convoy candidate readiness, sender-root identity, incomplete cargo refusal and fixed three-candidate bound
PASS: actual once-only native dry query, exact before/after slots, native refusal, shutdown; shared bounded discovery and distinct opt-in verdict
PASS: actual completion selector and pre-cleanup variant capture preserve separate radio and eligibility verdicts
PASS: actual cargo diagnostic stages separate absent/foreign magazines, used/empty/invalid rounds, well mismatch and exact truck storage/attachment without mutation
PASS: actual native courier witness rejects missing radio/custody/swap/reboard evidence; CLI opt-in bounded; native success remains unqualified
PASS: actual courier constructor/Tick waits for preparation, returns before physical checks, preserves fixed deadline and sticky stop/failure; Enfusion startup awaits native verification
PASS: actual arranged native alarm fixture deadline, single emit, natural-route observation, original timestamp/area/detail assertions, natural observer proximity/activation wait, failure cleanup and independent canonical-body restoration; native delivery itself remains unqualified.
PASS: actual convoy cover observation/snapshot/uplink/HOLD/RESUME/cleanup transitions; native boundaries mocked, non-convoy runner opt-in refused
Enemy optics actual-service ownership, preservation, callback, deadline and bounded-inspection policies passed
PASS: actual delivered cover freshness/lineage/replay and canonical executor; owned waypoint-only hold, one resume at preserved route index, invalid ownership/crew/ledger refusal and fail-closed native recreation
PASS: actual Stinger show/set/help state precise actor-roll effects; read-only help, bounded values, malformed syntax and failed-save preservation; no rerolls/gameplay edits and no native persistence claim
PASS: new/retasked search and radio delivery ammo gates; active tasks and delivered release preserved
HQ convoy delivered-report planning and downlink regressions passed
PASS: actual own-inventory ammo inspection deduplicates loaded/carried/shared wells, separates chambers/launchers, freezes scalar snapshots and treats unsupported/capped/foreign inventory as unknown
PASS: actual carried PMN4 inventory, original-owner guards, bounded deduplication, independent unknown state and detached counts
PASS: actual mounted hierarchy sampling, ownership exclusion, deduplication, completeness/caps, quarter threshold and detached validation; no runtime policy or ammunition mutation
PASS: WORKBENCH opt-in diagnostics distinguish cycles/cap/storage/manager/mount failures without repeated native traversal
PASS: actual HQ original convoy-root admission rejects wrong force/server/group and never supplies replacement lookup
PASS: production mounted structural seat scan ignores >128 carried/cargo descendants, shares exact native mount/magazine ownership, preserves attachment seats and exact occupants, rejects unknown/cyclic/oversize structures; native binding still requires qualification.
PASS: native body fixture uses existing immutable actors, real production LOS/queued uplink, pre-delivery isolation, actual status overlap, bounded cleanup and no fabricated reports/spawns
PASS: actual native fixture lookup selects exact BODY kind/identity/message from bounded evaluations, never sighting-only Get
PASS: actual ammo snapshot comparison checks every scalar/category flag; native probe requires real roster rescan, loaded-round lower bound and separate immutable pending/Watch objects
PASS: actual delivered slot-union bodies preserve overlap/disjoint evidence, replay idempotence, status subset integrity, full-wipe closure and formation-local bounds
test_review_added_allowed_media_invalidates_snapshot (__main__.ReviewTests.test_review_added_allowed_media_invalidates_snapshot) ... ok
test_review_added_source_directory_rejected (__main__.ReviewTests.test_review_added_source_directory_rejected) ... ok
test_review_loose_root_resource_and_symlink_rejected (__main__.ReviewTests.test_review_loose_root_resource_and_symlink_rejected) ... ok
test_review_metadata_media_and_sidecars_remain_allowed_and_bound (__main__.ReviewTests.test_review_metadata_media_and_sidecars_remain_allowed_and_bound) ... ok
test_review_missing_link_rejected (__main__.ReviewTests.test_review_missing_link_rejected) ... ok
test_review_package_guard_sees_new_scripts (__main__.ReviewTests.test_review_package_guard_sees_new_scripts) ... ok
test_review_retargeted_private_link_rejected (__main__.ReviewTests.test_review_retargeted_private_link_rejected) ... ok
----------------------------------------------------------------------
Ran 7 tests in 0.063s
OK
PASS: actual report methods reproduce old starvation; status-first scheduler delivers check-ins and requires 30s without combat or actual visible contacts before negative reports
PASS: actual actor group lookup retains controlled character membership when seated/inherited vehicle agents differ; missing control or parent refuses
.................
----------------------------------------------------------------------
Ran 17 tests in 3.478s
OK
PASS: actual convoy motion thresholds, native-only proof boundaries, physical cargo/crew ownership and pre-launch runner restrictions
PASS: actual filled rotated-footprint TraceBox and nine terrain/water samples; broad tree/cable bounds alone accepted, actual collision/nonfinite trace refused, nonzero sweep and ENTS/OCEAN flags, bounded diagnostic query and reset
PASS: actual road interpolation/projection/orientation, six35m starts,200m forward tail, preserved bends, short/far/degenerate/nonfinite/overdense/hairpin refusal and deterministic candidate ties
PASS: actual authenticated convoy dispatch, active/ready admission gates, canonical receipt, safe unconsumed preflight retry, pool refusal, retained partial failure and consumed no-retry
PASS: actual native readiness exact membership, one-time per-vehicle ledger admission/reservation, partial readiness retry without duplicate records and one-pass56-item cargo allocation without replenishment
PASS: actual per-vehicle readiness reasons, native agent/activity counts, intended-seat diagnostics, five-second throttle and read-only observation
PASS: actual convoy dispatch validates before receipt consumption, consumes once before native mutation, retains all12 partial-failure paths, accepts the selected non-USSR enemy, and allocates exact19 bodies without capacity shrinking
PASS: own memberless prefab disables automatic spawn before initialization; actual admission rejects populated, immediate or authored-slot templates before finite crew creation
PASS: actual native seated-group arrival outside35m, native waypoint removal, idempotent advance, and convoy waypoint idempotence/arrival/deadline, missing/dead/captured/reparented crew refusal, failed native waypoint release, original vehicle/member preservation and no replacement
PASS: actual convoy receipt identity/one-use, shared60-body and128-formation caps, outstanding/native-ledger accounting, exact19-body composition, source reuse, mode/client guards and no consumed receipt refunds
PASS: actual supply route cycling/arrival/stops, finite startup bounds, contact freshness, dismount hold, quiet interval, interrupted boarding, timeout and lost-truck release
PASS: moving-convoy perception boundaries and scoped individual/group abandonment priorities
PASS: actual supply startup reasons expose unchanged body budget/requirement, journal only failure changes, preserve retry cadence/caps and report the true final refusal
PASS: actual StartOne plus actual pool preserve unconsumed receipt retry, reject consumed replay, skip impossible new-budget surveys, retain equality, retry caps and journal dedup; no FPS claim
PASS: actual admission seeds use exact installed loaded prefab, reject replacement/foreign/projectile paths and preserve bounded immutable identity
PASS: actual primary-before-mounted one-shot batch, shared96/128 caps, physical snapshot headroom, original ownership, callback refusal and admission pinning
PASS: actual bounded HQ query validates only existing original binding without admission or replacement lookup
PASS: exact optional PMN4 startup, primary callback independence, original owner,128 capacity/callback limits, terminal no-retry and callback-proven freeze
PASS: production convoy spacing, physical arrival, stable follower targets, supply ownership, leader promotion and bounded stuck recovery
PASS: convoy combat keeps native manoeuvres for unchanged contacts and refreshes when contact moves
PASS: native convoy proof excludes pre-departure movement and ends via explicit fixture reset, not prohibited player death
PASS: boarding retries only after approach/seat progress stops, capped at three, with delayed native reissue and completed-team preservation
PASS: slow only owned vehicles near fit dismounted infantry; ignore passengers, casualties and released teams/vehicles
PASS: restore missing native driving registration only for healthy owned seated crews; preserve existing association and refuse invalid/released vehicles
PASS: actual body observer enforces owned physical roster, local death-only candidates, native trace gating, budget/cadence/caps, immutable body-only snapshots, radio retries and confirmed suppression
PASS: own initial roster, explicit retained corpse evidence, unconscious/missing/ref transfer guards, fixed strength, no replacement adoption, detached samples, surviving radio sender, immutable convoy root/ledger, mounted capture release and lost-root unknown
PASS: delivered-only status snapshots, two missed check-ins/reply deadline, last reported coordinates, episode/replay guards, confirmed-loss idempotence, detached/validated mounted payload replacement 256-record cap and detached carried-mine radio delivery/chronology
PASS: actual failed-retask deadline rollback plus assignment cancellation/release preserves radio ownership, native waypoint lifecycle and failed-order retry boundaries
PASS: actual force ledger, finite casualties/identity/cap, routes/arrival/elevation/overshoot, server and physical guards, staggered 256-record simulated hour without world queries
PASS: actual equipment coordinator registration dedupe, startup delay, five member scans, finite component retries, unregister/stop terminal behavior and 256-group bound
PASS: actual percentage selection, native/preferred launcher preservation, failure/removal fallback, pending-operation quarantine, capture, finite two-mine grants and no replenishment
PASS: automatic inventory one-shot roll, exact item ownership, finite compatible ammo, rejection, capture/stop, deletion, loot and late callback quarantine
PASS: enabled/valid catalog eligibility, category restrictions, content filtering, GUID deduplication across factions and bounded catalogs
PASS: actual engineer mine preparation/deadline, original custody/identity, once-only callback removal, cancellation quarantine, withdrawal/clearance, native refusal and owned-action cleanup; native execution untested
PASS: actual road mine-site annulus/bend geometry, deterministic bounded candidates, server/query limits, and native ground/water/obstruction rejection; no runtime placement claim
PASS: actual HQ mine admission, one site query per tick, maximum two active/32 retained jobs, delivered-only original post, once-per-unit refusal latch, 256-item ceiling and maintenance/teardown ownership
PASS: actual objective heading/threat/approach rules, persistent doctrine weight, fresh-contact coverage invalidation, stale-sweep rejection and atomic radio retask ownership
PASS: actual bounded delivered-negative coverage, replay/freshness/expiry/invalid guards, oldest eviction, small-circle and nearest-unswept selection, reserved-cell exclusion and cleanup
PASS: actual HQ active/pending reservations, interruption, committed replacement, bounded coverage and unchanged force counts
PASS: actual bounded pursuit roles/objectives/scores, stale search degradation, physical/busy/home guards, finite lifetime and two-bearing escape gap; no hidden player reads or spawning
PASS: actual HQ memory rules/service preserve delivered snapshots, chronology, replay bounds, decay, motion limits, identity and negative-search revisions
.......
----------------------------------------------------------------------
Ran 7 tests in 0.028s
OK
PASS: actual session Tick + journal router delivers each grant completion and new HQ line once, without repeats on empty/unavailable feeds or unauthorized ticks
.....
----------------------------------------------------------------------
Ran 5 tests in 0.385s
OK
PASS: actual current-controller/admin/mode authorization, per-round anti-replay, token-rotation refusal, command/snapshot throttles and client scope; owner-only replies and player-tool cleanup wiring
PASS: mission provider registration is idempotent, optional dispatch is ordered, status aggregates, journals preserve cursors, aliases stay with their addons and topic help is bounded
PASS: actual menu command routing covers all fourteen settings, rejects unsupported keys, gates companions, and matches unique authored widgets
PASS: explicit weapon retention buttons use the same ready/authorized server command path
PASS: actual summaries preserve queued/delivered meaning, clear counts and IDs; raw records, legacy display, cursor gaps and RPC limits remain intact
PASS: actual admin body authorization, god restoration, vanilla item deposit, callback completion/failure, timeout quarantine and stop/revocation paths
PASS: same-body revoke/regrant preserves pending insertions and timeout quarantine; new-body binding isolates late callbacks and never inherits god mode
PASS: actual Intel commands distinguish status/start/failure, preserve authorization gate and reject malformed requests; spent ledger is idempotent, server-only and bounded
PASS: actual reroll snapshot, authority, cancellation, ownership, accepted operations, quarantine, bounded work and stop methods; no native runtime claim
PASS: production Intel feedback coalescing, rough secrecy, rate limit, bounded dedupe, local/remote delivery and round cleanup; native UI/RPC not exercised
PASS: actual per-squad bounded report selector rotates visible targets, survives ordering/turnover, records only queued attempts, and preserves radio intake ordering
PASS: actual action denial/clearing, server request failure, single submitted-result feedback, current rescuer identity and terminal/stop suppression; native UI/RPC pending
PASS: actual physical denial precedence and transport-seat occupancy/reservation/access/lock checks
PASS: actual initial admission exhaustion and ServerTick grace; new/pending/empty/controller/life guards, normal death preserved
......................
----------------------------------------------------------------------
Ran 22 tests in 0.263s
OK
......................
----------------------------------------------------------------------
Ran 22 tests in 25.129s
OK
..................
----------------------------------------------------------------------
Ran 18 tests in 3.120s
OK
.........
----------------------------------------------------------------------
Ran 9 tests in 2.546s
OK
...............
----------------------------------------------------------------------
Ran 15 tests in 1.227s
OK
PASS: actual field result/braking observer and Chat dispatch rules; one finite fixed candidate, deferred callback failure and guarded cleanup; no native measurement
PASS: actual opt-in terrain audit records one fixed1681-point grid, preserves original survey refusal/success and exact no-allocation scope; malformed heights stop without retry; no native data acquired
....
----------------------------------------------------------------------
Ran 4 tests in 0.668s
OK
PASS: actual field PI/ramp/vector caps, antiwindup, braking hypothesis, immutable admission limits and segment bounds; no native physics tested
PASS: actual100m whole-field survey sampling/4096cap, rotated coverage, all-node terrain and native trace refusal; original certificate lineage retained; no native qualification
PASS: actual QualifyField preserves original identity/footprint/time, orders complete surveys before issuance, and refuses failed stages/moved body/expired or changed world; native boundaries faked
PASS: WORKBENCH first-refusal diagnostics preserve ordinary predicates, query order/count/budget and opt-in scope; no native logging run
PASS: actual field startup delegation, immutable lease/target, braking/settling/cancel transitions, early abort, callback scope, physical terminal policy and shared landing demand; native boundaries faked
PASS: actual inherited airborne pre-CLIMB cancellation enables verified native autohover once, refuses failed enable and never writes after capture
PASS: actual Core maintenance/default/tick/stop methods; empty/populated authority, terminal reentry, no tactical resume or new scheduler; native boundaries substituted
PASS: actual finite registration, unique claims/tokens, retention/cancel/stop, readiness gating, capture/expiry retirement and bounded cross-kind order history and typed field/route construction; native boundaries faked
PASS: actual WORKBENCH route observer returns exact retained route subtype and refuses absent/field controllers
.....
----------------------------------------------------------------------
Ran 5 tests in 0.590s
OK
......................
----------------------------------------------------------------------
Ran 22 tests in 0.165s
OK
................
----------------------------------------------------------------------
Ran 16 tests in 9.811s
OK
......
----------------------------------------------------------------------
Ran 6 tests in 0.017s
OK
PASS: actual production bridge lookup, lease/world/mode/seat/capture guards, no allocation, native super ordering and read-only fixture hooks
...............
----------------------------------------------------------------------
Ran 15 tests in 0.062s
OK
.............
----------------------------------------------------------------------
Ran 13 tests in 4.580s
OK
PASS: actual route gain/caps/braking, callback selection, old landing/cancellation control and matching read-only telemetry
..............................
----------------------------------------------------------------------
Ran 30 tests in 0.375s
OK
..............
----------------------------------------------------------------------
Ran 14 tests in 0.185s
OK
.........
----------------------------------------------------------------------
Ran 9 tests in 0.104s
OK
PASS: actual gate observer binds native registered action/context and current life, reads accumulated progress, refuses stale bindings and never revives outside original bounds
PASS: actual read-only look observer methods enforce explicit scope, pinned native camera/body/identity, normalized pose, terminal cancellation and original sample/time bounds
...........
----------------------------------------------------------------------
Ran 11 tests in 0.064s
OK
.......................
----------------------------------------------------------------------
Ran 23 tests in 0.030s
OK
PASS: actual initial WAITING task/guide copy, configured duration, unchanged interruption and rounded progress; native task assertion pending
........
----------------------------------------------------------------------
Ran 8 tests in 0.010s
OK
PASS: actual inventory adapter scope, grid placement, sole compatible host, refresh reuse, rollback, foreign hierarchy refusal and exactly-once native delegation; native compatibility pending
.................................................................................
----------------------------------------------------------------------
Ran 81 tests in 0.514s
OK
......
----------------------------------------------------------------------
Ran 6 tests in 0.074s
OK
.................
----------------------------------------------------------------------
Ran 17 tests in 0.005s
OK
...........
----------------------------------------------------------------------
Ran 11 tests in 0.086s
OK
.........
----------------------------------------------------------------------
Ran 9 tests in 0.334s
OK
PASS: actual observer nonce, admission pins, baseline/menu sequencing, snapshots, bounded clocks/samples, cleanup and one-attempt latch; native untested
PASS: actual corridor caps/height/hold and whole-rectangle survey bounds, terrain refusal, native trace refusal and exact certificate lineage; native route unqualified
PASS: actual route entry, fixed corridor/target, hover hold, cancellation landing freeze, shared lease/capture/deadline gate and unchanged native startup/tick sequence
PASS: finite opt-in route fixture, original native input order, meaningful physical-arrival evidence and guarded cleanup; no native launch
PASS: actual Chat route step result dispatch and scoped completion/cleanup wiring; six real early-parser refusal paths leave no prefix/profile output
PASS: actual retained-service fixture entry, immutable controller/token/deadline/count bindings, observer getter and cleanup ownership ordering; native route validation pending
PASS: actual measured cancellation gate, one-shot retained service Stop, no premature drain, immutable lease, fresh real controller readback and separate physical cancellation result policy
PASS: actual rough-intel objective selection, exact precedence, source grid dimensions and unchanged other-phase dispatch; native UI pending
.................................
----------------------------------------------------------------------
Ran 33 tests in 0.097s
OK
...............
----------------------------------------------------------------------
Ran 15 tests in 0.028s
OK
PASS: actual preparation status scope, persistent updates, spinner restoration, placeholder replacement/deletion/destruction, native observation persistence/timeout; rendering remains native-pending
PASS: actual guide/observer monitors retry native refusal, cache successful delivery, deduplicate and preserve living/preparing/spectator boundaries; native UI not exercised
PASS: actual native-end shutdown, existing terminal snapshots, reentrancy, unchanged native end data and stale preparation guards
....
----------------------------------------------------------------------
Ran 4 tests in 1.364s
OK
PASS: actual three-state result wording and UI refresh; stale winner IDs never manufacture escape
...........
----------------------------------------------------------------------
Ran 11 tests in 0.108s
OK
PASS: actual immutable target, bounded autohover demand, drift refusal, five-second hold and unchanged qualification/deadline
PASS: actual admission attempt budget bounds blocked/missing prerequisites; preparation, spent life and async pending remain protected
PASS: delayed admission retry retains controller ownership across same-account recycled connection IDs
PASS: actual scene deadline overrides delayed native preload only for rejection; late completion cannot assign, ordinary verified admission preserved
PASS: actual action permission matrix unchanged; useful phase/intel/consciousness denials, stale reason cleared, native door denial preserved; no native UI claim
.....
----------------------------------------------------------------------
Ran 5 tests in 0.202s
OK
PASS: actual aircraft cancellation/stage rules, ground-only completion, expiry/capture faults, input ownership and no physical shortcuts
PASS: actual exact-instance single-use qualification, native-clock staleness/movement refusal, footprint bounds and ownership-safe ground/fault cleanup
PASS: actual optional screenshot helper flag/identity/world/life revalidation, one queued attempt, delayed capture and mission/world cleanup; no native image/presentation claim
PASS: actual yard diagnostic exact registered prison ownership, eight native-bound corner projections, no root-sibling escape, bounded duplicate/deep/wide hierarchy traversal; native projection/mask still unmeasured
PASS: actual CurrentActor, SpawnPosition and observer-selection methods reject pending/unregistered/replaced/recycled/foreign/dead bodies; canonical selection/cycling, unconscious following and prison/geometry fallback preserved; native boundaries adapted
PASS: actual native-map fixture ownership, cleanup and callback evidence fail closed; native execution remains separate
PASS: actual shared-map callbacks bind exact map/config/root, preserve replacement UI/camera, defer focus, and remove only owned delayed work
PASS: actual Intel/HQ methods and one-shot qualified readiness handoff deliver late actors once; duplicate readiness, accepted spawn, pickup/drop, death and original negative rolls do not mint assignments
PASS: Workbench-only read accessor rejects unknown/nonserver identities; Chat observes all distinct ready crew before existing shell-depletion mutation
PASS: actual native-event latch survives deselection, requires exact activity/order, detaches before cleanup, preserves failure/timeout and never infers completion from physical shot count
.........
----------------------------------------------------------------------
Ran 9 tests in 0.099s
OK
PASS: actual refresh-fixture gates pin immutable observations/actual downlinks/original activity, reject unaccepted or relabelled commits, stop queueing early and require all queued contacts claimed before replay
..........................
----------------------------------------------------------------------
Ran 26 tests in 0.184s
OK
PASS: actual refresh scheduler/delivery/cancellation/projectile methods reject interrupted or replayed reports, retain committed ownership, preserve immutable snapshots/aim geometry and isolate stopped or replaced orders; native radio/crew behavior remains separate
.....................
----------------------------------------------------------------------
Ran 21 tests in 0.038s
OK
...........
----------------------------------------------------------------------
Ran 11 tests in 0.038s
OK
PASS: actual full-salvo gates require eight fresh committed physical launches, natural closure and exact finite inventory; reject partial/extra/replayed events
PASS: actual reason/availability guidance and refresh matrix; no-target copy omits cycling, hint retry retained, existing command/admin paths unchanged; native UI pending
PASS: actual client camera policy closes immediately on healing or mission end; late unconscious metadata cannot keep the view active
PASS: actual input dispatch, one press per edge, menu-held suppression; actual revival camera handoff with editor close/retry, missing camera, replacement body and stopped round
PASS: first-person pose survives missing samples without drift, follows body motion/rotation, resumes fresh pose and cannot leak between targets
..........EE/usr/lib/python3.14/tempfile.py:962: ResourceWarning: Implicitly cleaning up <TemporaryDirectory '/tmp/tmpfk38z6ny'>
_warnings.warn(warn_message, ResourceWarning)
E/usr/lib/python3.14/tempfile.py:962: ResourceWarning: Implicitly cleaning up <TemporaryDirectory '/tmp/tmpnjn3fby1'>
_warnings.warn(warn_message, ResourceWarning)
E/usr/lib/python3.14/tempfile.py:962: ResourceWarning: Implicitly cleaning up <TemporaryDirectory '/tmp/tmpwswb_7__'>
_warnings.warn(warn_message, ResourceWarning)
.EE/usr/lib/python3.14/tempfile.py:962: ResourceWarning: Implicitly cleaning up <TemporaryDirectory '/tmp/tmpsmbvpj0o'>
_warnings.warn(warn_message, ResourceWarning)
E/usr/lib/python3.14/tempfile.py:962: ResourceWarning: Implicitly cleaning up <TemporaryDirectory '/tmp/tmpgh9skxc9'>
_warnings.warn(warn_message, ResourceWarning)
...usage: test_native_package.py [-h] [--project {core}] --session SESSION
--compat COMPAT [--steam STEAM]
[--timeout TIMEOUT]
[--external-addons EXTERNAL_ADDONS]
[--silent-workbench | --exit-after-init]
[--continue-on-failure]
test_native_package.py: error: argument --exit-after-init: not allowed with argument --silent-workbench
................................
======================================================================
ERROR: test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup (__main__.NativePackageTests.test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup) (change={'launcher_exit_code': 1})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 392, in test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup
code, summary, calls = self.orchestration_double([self.cleaned_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 500, in run
authored = copy_payload(root, session)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 172, in copy_payload
with destination.open('xb') as output:
~~~~~~~~~~~~~~~~^^^^^^
OSError: [Errno 122] Disk quota exceeded
======================================================================
ERROR: test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup (__main__.NativePackageTests.test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup) (change={'cleanup_report': None})
----------------------------------------------------------------------
OSError: [Errno 122] Disk quota exceeded
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 392, in test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup
code, summary, calls = self.orchestration_double([self.cleaned_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 315, in orchestration_double
external_addons=self.external_fixture())
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 43, in external_fixture
fixture.setUp()
~~~~~~~~~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_external_addons.py", line 24, in setUp
(folder/'addon.gproj').write_text(manifest)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/usr/lib/python3.14/pathlib/__init__.py", line 809, in write_text
with self.open(mode='w', encoding=encoding, errors=errors, newline=newline) as f:
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 122] Disk quota exceeded
======================================================================
ERROR: test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup (__main__.NativePackageTests.test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup) (change={'cleanup_report': {'cleanup_confirmed': True, 'idle_verified': False, 'errors': []}})
----------------------------------------------------------------------
OSError: [Errno 122] Disk quota exceeded
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 392, in test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup
code, summary, calls = self.orchestration_double([self.cleaned_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 315, in orchestration_double
external_addons=self.external_fixture())
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 43, in external_fixture
fixture.setUp()
~~~~~~~~~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_external_addons.py", line 24, in setUp
(folder/'addon.gproj').write_text(manifest)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/usr/lib/python3.14/pathlib/__init__.py", line 809, in write_text
with self.open(mode='w', encoding=encoding, errors=errors, newline=newline) as f:
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 122] Disk quota exceeded
======================================================================
ERROR: test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup (__main__.NativePackageTests.test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup) (change={'cleanup_report': {'cleanup_confirmed': True, 'idle_verified': True, 'errors': ['problem']}})
----------------------------------------------------------------------
OSError: [Errno 122] Disk quota exceeded
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 392, in test_cleanup_diagnostic_refuses_uncertain_exit_or_cleanup
code, summary, calls = self.orchestration_double([self.cleaned_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 315, in orchestration_double
external_addons=self.external_fixture())
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 43, in external_fixture
fixture.setUp()
~~~~~~~~~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_external_addons.py", line 24, in setUp
(folder/'addon.gproj').write_text(manifest)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/usr/lib/python3.14/pathlib/__init__.py", line 809, in write_text
with self.open(mode='w', encoding=encoding, errors=errors, newline=newline) as f:
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 122] Disk quota exceeded
======================================================================
ERROR: test_continuation_cannot_override_cleanup_runner_source_or_completion_failure (__main__.NativePackageTests.test_continuation_cannot_override_cleanup_runner_source_or_completion_failure) (change={'completion_observed': 'timeout'})
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 360, in test_continuation_cannot_override_cleanup_runner_source_or_completion_failure
code, summary, calls = self.orchestration_double([self.completed_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 320, in orchestration_double
code = n.run(args, self.source)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 500, in run
authored = copy_payload(root, session)
File "/home/jakub/devel/escapistsrereintroduced/tools/native_package.py", line 172, in copy_payload
with destination.open('xb') as output:
~~~~~~~~~~~~~~~~^^^^^^
OSError: [Errno 122] Disk quota exceeded
======================================================================
ERROR: test_continuation_cannot_override_cleanup_runner_source_or_completion_failure (__main__.NativePackageTests.test_continuation_cannot_override_cleanup_runner_source_or_completion_failure) (change={'completion_observed': 'interrupted'})
----------------------------------------------------------------------
OSError: [Errno 122] Disk quota exceeded
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 360, in test_continuation_cannot_override_cleanup_runner_source_or_completion_failure
code, summary, calls = self.orchestration_double([self.completed_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 315, in orchestration_double
external_addons=self.external_fixture())
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 43, in external_fixture
fixture.setUp()
~~~~~~~~~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_external_addons.py", line 24, in setUp
(folder/'addon.gproj').write_text(manifest)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/usr/lib/python3.14/pathlib/__init__.py", line 809, in write_text
with self.open(mode='w', encoding=encoding, errors=errors, newline=newline) as f:
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 122] Disk quota exceeded
======================================================================
ERROR: test_continuation_cannot_override_cleanup_runner_source_or_completion_failure (__main__.NativePackageTests.test_continuation_cannot_override_cleanup_runner_source_or_completion_failure) (change={'completion_observed': 'native-or-launcher-exited-prefix-active'})
----------------------------------------------------------------------
OSError: [Errno 122] Disk quota exceeded
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 360, in test_continuation_cannot_override_cleanup_runner_source_or_completion_failure
code, summary, calls = self.orchestration_double([self.completed_report(**change)])
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 315, in orchestration_double
external_addons=self.external_fixture())
~~~~~~~~~~~~~~~~~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py", line 43, in external_fixture
fixture.setUp()
~~~~~~~~~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tests/test_external_addons.py", line 24, in setUp
(folder/'addon.gproj').write_text(manifest)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/usr/lib/python3.14/pathlib/__init__.py", line 809, in write_text
with self.open(mode='w', encoding=encoding, errors=errors, newline=newline) as f:
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 122] Disk quota exceeded
----------------------------------------------------------------------
Ran 48 tests in 10.702s
FAILED (errors=7)
PASS: 35 prefabs have unique saved root entity IDs
PASS: 299 original script entries tracked across 18 unfinished responsibilities
PASS: 1 isolated addons, acyclic dependencies, 56 unique resources, exact vanilla/authorized external references
Traceback (most recent call last):
File "/home/jakub/devel/escapistsrereintroduced/tools/check.py", line 79, in <module>
if __name__=='__main__':check()
~~~~~^^
File "/home/jakub/devel/escapistsrereintroduced/tools/check.py", line 77, in check
subprocess.run([sys.executable,str(ROOT/'tests'/name)],check=True)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/subprocess.py", line 578, in run
raise CalledProcessError(retcode, process.args,
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['/usr/bin/python3', '/home/jakub/devel/escapistsrereintroduced/tests/test_native_package.py']' returned non-zero exit status 1.
@@ -0,0 +1,37 @@
{
"result": "Editor-only terminal lifecycle fixture repaired; normal casualty policy unchanged.",
"cause": "Ordinary protected Kill requests unconsciousness. Native superclass Kill submits TRUE damage through HandleDamage and is also subject to the protected hitzone cap.",
"scope": "Main fixture first proves ordinary living unconsciousness, then explicitly removes protection only from its exact canonical actor to verify fatal loss, spent life, spectator camera and all-dead defeat. Seven support fixture endings share the gated helper. No change to ordinary game/server builds.",
"native_assertions": 38,
"native_rounds": 1,
"native_script_failures": 0,
"retained_installed_resource_errors": 13,
"regression_programs_passed": 272,
"validation_environment": "All 272 registered programs passed across a split run: earlier successes retained, packaging rechecked after verified relocation of completed snapshots recovered temporary quota, then remaining programs completed. Disk-backed TMPDIR attempts were rejected by existing canonical /tmp guards; all failed logs retained and no guard weakened.",
"independent_review": true,
"cleanup_confirmed": true,
"preservation": {
"original_missions": {
"files": 533,
"unchanged": true
},
"playtest_candidate": {
"files": 409,
"unchanged": true
},
"inherited_unstaged": {
"files": 61,
"preserved": true,
"two_shared_files_verified_by_removing_only_own_additions": true
}
},
"earlier_workbench_reload": "Not reproduced; its cause remains unknown.",
"release_qualified": false,
"remaining": [
"Human escape",
"Real multiplayer and remote death/reconnect/spectator behavior",
"Physical maintenance and mine operations",
"Equivalent-workload FPS",
"Clean release/packaging"
]
}
@@ -0,0 +1,18 @@
import subprocess, os, runpy, sys
from pathlib import Path
root=Path('/home/jakub/devel/escapistsrereintroduced')
sys.path.insert(0,str(root/'tools'))
original=subprocess.run
calls=[]
def run(args,*a,**kw):
if isinstance(args,list) and len(args)>1 and '/tests/' in str(args[1]) and str(args[1]).endswith('.py'):
calls.append(Path(args[1]).name)
env=dict(os.environ);env.pop('TMPDIR',None)
if Path(args[1]).name=='test_native_package.py':
env['TMPDIR']=str(root/'.build/death-diagnostic-2153/test-tmp')
kw['env']=env
return original(args,*a,**kw)
subprocess.run=run
runpy.run_path(str(root/'tools/check.py'),run_name='__main__')
assert len(calls)==272,len(calls)
print('VERIFIED: 272 registered programs; only native_package temporary fixture storage relocated to disk, native canonical /tmp session validation unchanged.')
@@ -0,0 +1,283 @@
{
"registered_programs": 272,
"earlier_programs_passed_before_environment_failure": 217,
"quota_recovered_package_recheck": "48 cases OK under required /tmp environment",
"remaining_programs_passed": 54,
"all_registered_programs_passed_across_split_run": true,
"assertions_or_guards_changed": false,
"registry": [
"test_prefab_identity.py",
"test_spawn_scene.py",
"test_spawn_scene_inventory.py",
"test_spawn_scene_lease.py",
"test_prison_ai.py",
"test_native_player_death_fixture.py",
"test_native_maintenance_refuel.py",
"test_mine_intel.py",
"test_mine_intel_discovery_integration.py",
"test_infantry_combat.py",
"test_enemy_medicine.py",
"test_hunter_combat.py",
"test_hq_local_awareness.py",
"test_unconscious_controls.py",
"test_town_garrisons.py",
"test_field_sites.py",
"test_gameplay_session_regressions.py",
"test_gameplay_review_fixes.py",
"test_server_log_regressions.py",
"test_mortar_load_ack.py",
"test_hunter_profiles.py",
"test_hunter_lifecycle.py",
"test_hunter_opening.py",
"test_enemy_awareness.py",
"test_intel_body_inspection.py",
"test_body_recovery_lifecycle.py",
"test_air_support_policy.py",
"test_air_logistics_orders.py",
"test_air_recon.py",
"test_scouts.py",
"test_mortar_station.py",
"test_random_settings.py",
"test_debug_ai.py",
"test_generated_sites.py",
"test_terrain_sites.py",
"test_terrain_adapter.py",
"test_terrain_airfields.py",
"test_terrain_takeover.py",
"test_faction_selection.py",
"test_faction_menu.py",
"test_content_policy.py",
"test_hq_road_intercept.py",
"test_hq_delivered_task.py",
"test_hq_local_handoff.py",
"test_hq_local_handoff_intake.py",
"test_native_local_handoff_probe.py",
"test_infantry_resupply_waypoints.py",
"test_infantry_placement_settle.py",
"test_native_infantry_fixture_lifecycle.py",
"test_native_infantry_cargo.py",
"test_native_infantry_setup.py",
"test_infantry_ammo_access.py",
"test_infantry_resupply_planning.py",
"test_infantry_supply_pool.py",
"test_hq_multiconvoy_supply.py",
"test_enemy_gunner_skill.py",
"test_native_memory_deadlines.py",
"test_convoy_auto_settings.py",
"test_convoy_startup.py",
"test_failure_result_refresh.py",
"test_infantry_resupply_coordinator.py",
"test_infantry_mine_coordinator.py",
"test_infantry_mine_transfer.py",
"test_infantry_ammo_transfer.py",
"test_finite_magazine_reservation.py",
"test_mounted_ammo_transfer.py",
"test_mounted_ammo_pickup.py",
"test_mounted_resupply.py",
"test_mounted_supply_integration.py",
"test_hq_ammo_reporting.py",
"test_enemy_radio.py",
"test_native_maintenance_stock.py",
"test_packed_external_game.py",
"test_hq_radio_node.py",
"test_vehicle_maintenance_stock.py",
"test_optional_transport.py",
"test_vehicle_entry_diagnostics.py",
"test_vehicle_security_native_probe.py",
"test_vehicle_security.py",
"test_vehicle_alarm.py",
"test_vehicle_alarm_perception.py",
"test_native_convoy_mine_stock.py",
"test_native_mine_stock_runner.py",
"test_native_mounted_ammo_probe.py",
"test_native_mounted_swap_probe.py",
"test_native_mounted_courier_probe.py",
"test_native_alarm_hearing.py",
"test_native_convoy_cover_probe.py",
"test_enemy_optics.py",
"test_convoy_combat.py",
"test_ai_stinger_admin.py",
"test_hq_ammo_dispatch.py",
"test_hq_convoy_combat.py",
"test_hq_ammo_sampler.py",
"test_hq_mine_sampler.py",
"test_hq_mounted_ammo_sampler.py",
"test_hq_mounted_binding.py",
"test_hq_vehicle_seats.py",
"test_native_hq_body_probe.py",
"test_hq_delivered_casualties.py",
"test_external_profile_review.py",
"test_hq_uplink_fairness.py",
"test_actor_group.py",
"test_native_package_external.py",
"test_native_convoy_probe.py",
"test_convoy_placement.py",
"test_convoy_road_plan.py",
"test_hq_convoy_dispatch.py",
"test_convoy_admission.py",
"test_convoy_dispatch.py",
"test_convoy_lifecycle.py",
"test_convoy_budget.py",
"test_supply_convoys.py",
"test_supply_budget_admission.py",
"test_mounted_initial_stock.py",
"test_convoy_mine_stock.py",
"test_convoy_column.py",
"test_hq_body_observer.py",
"test_hq_status_sampler.py",
"test_hq_watch.py",
"test_hq_assignment_lifecycle.py",
"test_force_ledger.py",
"test_enemy_equipment.py",
"test_enemy_loadout.py",
"test_automatic_equipment.py",
"test_engineer_mine.py",
"test_engineer_mine_site.py",
"test_engineer_mine_hq.py",
"test_hq_doctrine.py",
"test_hq_coverage.py",
"test_hq_task_reservations.py",
"test_hq_pursuit.py",
"test_hq_memory.py",
"test_external_addons.py",
"test_admin_tick_delivery.py",
"test_project_schema.py",
"test_admin_session.py",
"test_admin_providers.py",
"test_admin_menu.py",
"test_journal_readability.py",
"test_admin_player_tools.py",
"test_intel_admin.py",
"test_intel_reroll.py",
"test_intel_discovery_feedback.py",
"test_hq_report_selection.py",
"test_casualty_feedback.py",
"test_initial_admission_exhaustion.py",
"test_prison_held_action_proof.py",
"test_prison_held_action_evidence.py",
"test_prison_held_input_adapter.py",
"test_prison_held_runner.py",
"test_prison_coarse_facing.py",
"test_aircraft_field_probe.py",
"test_aircraft_field_runner.py",
"test_aircraft_field_rules.py",
"test_aircraft_field_envelope.py",
"test_aircraft_field_flight.py",
"test_command_maintenance.py",
"test_aircraft_service.py",
"test_aircraft_service_cancel_runner.py",
"test_prison_action_selection_proof.py",
"test_prison_action_selection_evidence.py",
"test_ordinary_gate_choices.py",
"test_aircraft_control_bridge.py",
"test_prison_alignment_proof.py",
"test_prison_alignment_evidence.py",
"test_aircraft_route_demand.py",
"test_prison_approach_proof.py",
"test_prison_approach_evidence.py",
"test_ordinary_gate_evidence.py",
"test_ordinary_gate_observer.py",
"test_ordinary_look_observer.py",
"test_ordinary_look_evidence.py",
"test_relative_look_runner.py",
"test_radio_waiting_text.py",
"test_inventory_control_runner.py",
"test_inventory_layout.py",
"test_headless_input_proof.py",
"test_headless_input_exercise_runner.py",
"test_private_prefix_cleanup.py",
"test_runner_private_cleanup.py",
"test_ordinary_input_runner.py",
"test_ordinary_input_observer.py",
"test_aircraft_route_envelope.py",
"test_aircraft_route_policy.py",
"test_aircraft_route_probe.py",
"test_rough_intel_feedback.py",
"test_headless_display_probe.py",
"test_headless_display_runner.py",
"test_preparation_status.py",
"test_hint_delivery.py",
"test_native_end_lifecycle.py",
"test_native_end_runner.py",
"test_escape_result_wording.py",
"test_native_stats.py",
"test_aircraft_translation.py",
"test_spawn_retry_budget.py",
"test_spawn_preload_timeout.py",
"test_action_feedback.py",
"test_native_aircraft_control.py",
"test_aircraft_flight_policy.py",
"test_aircraft_flight_envelope.py",
"test_ordinary_screenshot.py",
"test_participant_selection.py",
"test_native_shared_map_ownership.py",
"test_shared_map_ownership.py",
"test_intel_registration.py",
"test_mortar_activity_completion.py",
"test_packed_chat_game.py",
"test_native_mortar_refresh.py",
"test_archive_packed.py",
"test_mortar_refresh.py",
"test_packed_core_game.py",
"test_pak_inventory.py",
"test_native_mortar_salvo.py",
"test_spectator_guidance.py",
"test_spectator_recovery.py",
"test_native_package.py",
"test_item_station_teardown.py",
"test_source_bundle.py",
"test_native_flight_footprint.py",
"test_native_flight_input_diagnostics.py",
"test_mortar_logistics.py",
"test_mortar_courier_storage.py",
"test_powered_flight_pad.py",
"test_prison_escape_policy.py",
"test_powered_flight_policy.py",
"test_flight_action_runner.py",
"test_native_local_admission_probe.py",
"test_mortar_report_ledger.py",
"test_dedicated_native.py",
"test_native_mortar_transfer.py",
"test_mortar_aim_renewal.py",
"test_dedicated_preflight.py",
"test_mortar_transactions.py",
"test_native_mortar_probe.py",
"test_diagnostic_no_splash.py",
"test_casualty_incapacitation.py",
"test_casualty_remove_probe.py",
"test_extraction_placement_policy.py",
"test_guard_cancellation_policy.py",
"test_casualty_ground_policy.py",
"test_casualty_reservation_death.py",
"test_casualty_loading_policy.py",
"test_initial_guard_policy.py",
"test_headless_game_runner.py",
"test_vanilla_game_control.py",
"test_archive_game_control.py",
"test_site_discovery_policy.py",
"test_faction_catalog_scope.py",
"test_mission_rules.py",
"test_admin_setting_policy.py",
"test_player_admission_policy.py",
"test_progression_identity.py",
"test_discovery_map_position.py",
"test_local_admission.py",
"test_prison_placement_policy.py",
"test_recovery_policy.py",
"test_player_medical.py",
"test_time_policy.py",
"test_environment_policy.py",
"test_view_distance.py",
"test_environment_restart_runner.py",
"test_inventory_enumeration_policy.py",
"test_radio_defence_policy.py",
"test_radio_feedback_policy.py",
"test_performance_comparison.py",
"test_release_check.py",
"test_settings_migration.py",
"hq_network_regression.py",
"helicopter_availability_regression.py",
"mortar_salvo_regression.py"
],
"check_sha256": "ba2aad12a973bbd5d1ce277b6175a55556a4347ac0286588d379163c75b372d1"
}
@@ -0,0 +1,8 @@
Traceback (most recent call last):
File "<stdin>", line 14, in <module>
File "<frozen runpy>", line 294, in run_path
File "<frozen runpy>", line 98, in _run_module_code
File "<frozen runpy>", line 88, in _run_code
File "tools/check.py", line 5, in <module>
from external_addons import policy, ALLOWED, direct_for, resource_allowed
ModuleNotFoundError: No module named 'external_addons'