Allow leaving failed-start screens; record Workshop 0.0.122
continuous-integration/drone/push Build is passing
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user