Files
EscapistsReintroduced/docs/evidence/preparation-exit-2026-10-25

Failed-start exit — 25 October 2026

The full python3 tools/check.py suite passed. The new production-body test executes failure-only eligibility, menu/dialog focus preservation, native pause fallback, exact error text, Back routing, one local exit request, recovered/stale mode guards and listener removal. Existing loading-overlay lifecycle checks pass.

The final isolated Workbench fixture completed six native assertions:

  • The real failed-start menu was focused, with both buttons bound, the exact error displayed and the native black loading placeholder hidden.
  • Clicking the actual pause-button invoker opened the native pause menu with focus and no black overlay, then returned to the failed round.
  • Calling the production Back handler opened native pause again and restored failure-menu focus after closing it.
  • Clicking the actual Return-to-main-menu button caused native gameplay end. The menu's input/button listeners and references were cleaned up within five seconds of that click; the log also shows the main-menu world and welcome UI.

The fixture forces a preparation failure in its private source copy. It invokes real button callbacks and the real Back handler; it does not claim physical mouse/keyboard/controller input, a multiplayer disconnect or pixel-level layout verification. Production code uses vanilla's local gameplay-end transition. No mission-state, admission or server-command workaround is involved.

The strict native reporter exits 1: the raw log includes the intentional preparation error, resource/world errors, and two SCR_FilterCategory constructor errors while opening the main-menu UI. These are retained in the unfiltered report; the exit and cleanup assertions completed afterward. The private prefix cleanup and unchanged source/dependency hashes were verified. This is not a claim of an error-free engine run.

During development, native compilation caught an override parameter-name mismatch (corrected to tDelta). The older generic startup-failure fixture reached the interactive screen but failed an unrelated expected-faction/stock assertion. The focused fixture then needed its intended startup error allowed by the runner, and its cleanup observation adjusted for menu closure after game-end notification. The final retained run exercises the current production bytes.

Reproduce with an unused alphanumeric suffix:

python3 tests/test_preparation_failure_menu.py
python3 tests/test_preparation_status.py
python3 docs/evidence/preparation-exit-2026-10-25/isolated-runner.py next01

The runner freezes production sources and injects native-fixture.c only into that disposable copy. It uses a private profile/prefix and no live mission.