Merge owned systems into one addon while preserving resource identities. Gate player admission on the replicated prison scene, restore the original framed door, and hold enemy AI until escape. Correct scenario branding and author metadata, include publishing assets, and retain regression and native verification evidence.
52 lines
2.9 KiB
Python
52 lines
2.9 KiB
Python
"""Execute production time policies; do not claim native simulation coverage."""
|
|
from policy_harness import ROOT, body, run
|
|
source = ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_ExtractionPlacement.c'
|
|
methods = '\n'.join(body(source, signature) for signature in (
|
|
'static bool CanWake(', 'static bool Fresh(', 'static bool QualificationAllowed(', 'static bool Stable('))
|
|
run('#include <cassert>\n' + methods + '''
|
|
int main() {
|
|
assert(CanWake(true,0,0,30000));
|
|
assert(CanWake(true,0,29999,30000));
|
|
assert(!CanWake(false,0,1,30000));
|
|
assert(!CanWake(true,1,1,30000)); // activation cannot be repeated
|
|
assert(!CanWake(true,2,1,30000));
|
|
assert(!CanWake(true,0,30000,30000)); // no wake after expired preparation
|
|
assert(!CanWake(true,0,30001,30000));
|
|
assert(QualificationAllowed(false,29999,30000));
|
|
assert(!QualificationAllowed(false,30000,30000)); // exactly deadline is not first qualification
|
|
assert(!QualificationAllowed(false,30001,30000));
|
|
assert(QualificationAllowed(true,30000,30000)); // continuous monitoring may outlive settling
|
|
assert(QualificationAllowed(true,90000,30000));
|
|
assert(!Fresh(-1,0));
|
|
assert(!Fresh(1000,999));
|
|
assert(Fresh(1000,2500));
|
|
assert(!Fresh(1000,2501)); // delayed callbacks restart the stability window
|
|
assert(!Stable(-1,1000,2000));
|
|
assert(!Stable(1000,999,2000));
|
|
assert(!Stable(1000,1750,1999));
|
|
assert(Stable(1000,1750,2000));
|
|
assert(!Stable(1000,1000,2501));
|
|
assert(!Stable(1000,2000,1999));
|
|
}
|
|
''')
|
|
text = source.read_text()
|
|
poll = body(source, 'ERR_PrepareResult Poll(')
|
|
assert text.count('physics.SetActive(ActiveState.ACTIVE)') == 1
|
|
assert poll.index('!QualificationAllowed(') < poll.index('m_Result = ERR_PrepareResult.READY;')
|
|
assert poll.index('if (m_Stopped') < poll.index('physics.SetActive(')
|
|
assert poll.index('!Replication.IsServer()') < poll.index('physics.SetActive(')
|
|
assert poll.index('m_Mode.ExtractionVehicle() != m_Aircraft') < poll.index('physics.SetActive(')
|
|
assert poll.index('m_WakeCount = 1;') < poll.index('physics.SetActive(')
|
|
assert 'fuel.HasFuel() && ERR_CasualtyLoadingRules.AircraftReady(m_Aircraft)' in poll
|
|
for forbidden in ('SetVelocity(', 'SetAngularVelocity(', 'SetTransform(', 'SetWorldTransform(', 'Teleport(', 'ApplyImpulse', 'EnableDamageHandling('):
|
|
assert forbidden not in text, forbidden
|
|
site = (ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_SiteService.c').read_text()
|
|
assert 'if (m_ExtractionPlacement) m_ExtractionPlacement.Stop();' in site
|
|
assert 'Fail(m_ExtractionPlacement.FailureReason())' in site
|
|
assert 'pendingGuards > 0 || aircraftPlacement == ERR_PrepareResult.PENDING' in site
|
|
assert 'SetSpawnImmediately(false)' in site and 'PurgeSpawnRequestsForGroup' in site
|
|
probe = (ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_NativeCasualtyGroundProbe.c').read_text()
|
|
assert 'placement.Ready() && placement.WakeCount() == 1' in probe
|
|
assert 'SetActive(' not in probe
|
|
print('PASS: actual one-shot deadline/stability policies and preparation ownership, fuel, cleanup integration contracts')
|