Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
81 lines
5.9 KiB
JSON
81 lines
5.9 KiB
JSON
{
|
|
"verdict": "No demonstrated stale-round, double-cleanup or restart bug within the bounded reviewed scope. No patch proposed.",
|
|
"reviewed_invariants": [
|
|
"OnGameModeEnd latches m_NativeEndHandled before local shutdown, phase listeners and StopServices; duplicate and reentrant end callbacks cannot forward super twice.",
|
|
"External end marks unfinished server phase DEFEAT, preserves supplied native endData, publishes actual escape accounting without creating extraction success; existing successor terminal reason/result is left intact.",
|
|
"StopServices latches m_Stopped before Command.Stop and OnStop listeners, removes queued preparation/tick/binder, clears force caches and deletes owned AI groups once. Destructor repeats guarded shutdown without restarting gameplay.",
|
|
"StartScenario and ServerTick independently refuse stale post-stop work; BindLocalObserver also refuses stopped or ended ownership.",
|
|
"New GameMode instance owns fresh nonstatic roster, services, phase and end guards; vanilla superclass owns RestartSession. Native fixture checks actual second initialized mode rather than resetting old instance fields.",
|
|
"HQ late resupply cleanup polling intentionally survives normal command tick shutdown only while exact HQ remains current mode.Command; it cancels itself before identity guards and cannot transfer polling ownership to the next round."
|
|
],
|
|
"existing_offline_coverage": "Read tests/test_native_end_lifecycle.py actual-method guards, every unfinished phase, existing terminals, client end, reentrant listeners, repeated stop and stale preparation; tests/test_native_end_runner.py restricts selector/Core/two rounds/minimum120s and refuses pre-existing marker files/symlinks. Tests were not rerun.",
|
|
"prior_native_evidence": {
|
|
"active": "docs/evidence/native-2026-09-19-134044-native-end-active",
|
|
"preparing": "docs/evidence/native-2026-09-19-133847-native-end-preparing",
|
|
"each_assertions": 21,
|
|
"each_completions": 2,
|
|
"fixture_current_hash_matches_historical": true,
|
|
"historical_game_mode_sha256": "a9096da01d9098a09aa1a2300d528cd4910f02b1a83d705ab41e1c04e8dd032e",
|
|
"current_game_mode_sha256": "89a29c03ba225acbbb9fa3c58a721aced91a77bc0c77046d697005a6d7c48bb9",
|
|
"qualification": "Historical source used previous multi-addon paths; current GameMode changed, so old result is not current-source qualification."
|
|
},
|
|
"recommended_existing_run": {
|
|
"arguments": [
|
|
"python3",
|
|
"/home/jakub/devel/escapistsrereintroduced/tools/headless_workbench.py",
|
|
"--project",
|
|
"core",
|
|
"--smoke",
|
|
"native-end-active",
|
|
"--rounds",
|
|
"2",
|
|
"--timeout",
|
|
"240",
|
|
"--compat",
|
|
"/tmp/erri-headless-compat",
|
|
"--profile",
|
|
"/tmp/erri-native-end-active-0011",
|
|
"--external-addons",
|
|
"/home/jakub/.local/share/Steam/steamapps/compatdata/1874880/pfx/drive_c/users/steamuser/Documents/My Games/ArmaReforger/addons"
|
|
],
|
|
"execute_by_reviewer": false,
|
|
"preconditions": [
|
|
"Host-visible idle check, existing prefix lock and isolated muted hidden workflow.",
|
|
"Fresh profile; marker erri-native-end-round.json and .tmp/.bak must not exist, including broken links.",
|
|
"Seal source before run and retain all engine errors/cleanup/source bindings."
|
|
],
|
|
"reason": "Exercises current prepared service graph through direct inherited EndGameMode and actual vanilla restart, distinct from normal successor Transition victory. Active chosen over preparing because it includes prepared mission services.",
|
|
"fixed_fixture_limits": "45-second observation deadline per initialized instance; native auto-reload must be at least2s; observes1250ms after end. Runner240s includes startup/restart; it does not relax those internal assertions.",
|
|
"expected_scope": "Two completions and historical21 assertions are expected from unchanged fixture but must be derived from actual new log, not assumed."
|
|
},
|
|
"limits": [
|
|
"Active fixture ends in PRISON, so it does not prove teardown of an in-flight mortar/courier/intercept operation.",
|
|
"Preparing fixture ends before queued StartScenario; it does not arrange a pending native preload.",
|
|
"This review does not establish real multiplayer/JIP behavior, all native callbacks, visual readability or performance.",
|
|
"No broader player admission, extraction or observer audit was repeated."
|
|
],
|
|
"sha256": {
|
|
"addons/core/Scripts/Game/ERR/00_Core/ERR_GameMode.c": "89a29c03ba225acbbb9fa3c58a721aced91a77bc0c77046d697005a6d7c48bb9",
|
|
"addons/core/Scripts/Game/ERR/00_Core/ERR_NativeEndProbe.c": "2dec80c7e247ec5c257407f95d9d5edd42fe0cc44d6af9f724f6ebd10d8a355f",
|
|
"addons/core/Scripts/Game/ERR/00_Core/ERR_NativeBaseSmoke.c": "e811e985048e07365569acde6b5f045d57e9bbf13927f85b74e6e347fd2ef571",
|
|
"addons/core/Scripts/Game/ERR/00_Core/ERR_SiteService.c": "210646e679056f4a46ef454a5abe15bd42d48349aa376ccfbb6b3b2ebeac6812",
|
|
"addons/core/Scripts/Game/ERR/10_AI/ERR_HQ.c": "5d66c53baf8762e76ae59e28721edaa348014af6d988d42891d9a84a6cf44969",
|
|
"addons/core/Scripts/Game/ERR/20_Intel/ERR_IntelService.c": "2911325c79a7a372628b18ffa0e110d11919ce2c2cd7b19277bfd608fdb03dfc",
|
|
"tests/test_native_end_lifecycle.py": "8b187723c9039e68e3e590c812c91dcffe1e5917d4e450ed798dc177888fda7a",
|
|
"tests/test_native_end_runner.py": "aed94be9b370a412937303cc5b66f0151c2cd64c3e1358f983f9ea53eb0d1057",
|
|
"tools/headless_workbench.py": "57f472b7a7642f35e6c2f0e2546631ee941a6f1ea6a5f85365ef59042d674264"
|
|
},
|
|
"sdk_evidence": {
|
|
"path": "/tmp/erri-vanilla-stock/scripts/Game/GameMode/SCR_BaseGameMode.c",
|
|
"lines": "694-717,781-789",
|
|
"claim": "Superclass publishes native end invoker then schedules RestartSession according to GetAutoReloadDelay; RestartSession requests native scenario restart."
|
|
},
|
|
"actions": {
|
|
"target_writes": false,
|
|
"original_writes": false,
|
|
"native_launch": false,
|
|
"tests_run": false,
|
|
"scratch_output": "/tmp/erri-round-review-0011/review.json"
|
|
}
|
|
}
|