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:
@@ -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
|
||||
+877
@@ -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.
|
||||
+389
@@ -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"
|
||||
}
|
||||
+8
@@ -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'
|
||||
Reference in New Issue
Block a user