Files
EscapistsReintroduced/docs/evidence/active-restart-current-2026-10-03/round-review/review.json
T
jakub 6a667d8deb Capture current mission, AI, map and administration development
Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
2026-10-13 22:52:53 +02:00

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"
}
}