50 lines
2.7 KiB
Markdown
50 lines
2.7 KiB
Markdown
# 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](native/report.json); 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.
|