Files
EscapistsReintroduced/docs/vanilla-game-startup-control.md

29 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Vanilla-only ordinary splash control
`tools/headless_game.py --project vanilla-control` uses the existing hidden, muted, prefix-locked ordinary runner with the installed regular `ArmaReforgerSteam.exe`. It passes no successor addon GUID, addon search path, world/header, diagnostic helper, server/config option or noSplash option. It leaves the installed vanilla project's normal main-menu/splash path active. No game has been launched while adding this control.
After all other runners using the disposable prefix have stopped, the bounded invocation is:
```sh
python3 tools/headless_game.py --project vanilla-control \
--compat /tmp/erri-headless-compat \
--profile /tmp/erri-vanilla-game-profile \
--timeout 120 --settle 15 --failure-grace 30
```
The profile must be new or have both ordinary-runner and vanilla-control ownership markers. A pre-existing successor/user profile is rejected; successor runs also reject a control-owned profile. The only profile addon link remains the installed vanilla data directory. The same read-only game-process refusal, shared Workbench prefix lock, candidate/environment prefix checks, Gamescope headless display, own muted sink and launched-process-group/prefix-only cleanup remain in effect. No main-monitor window, public listener, account login, original mission or Steam/user profile modification is requested. `-noBackend` remains selected; as for the existing runner, the proprietary executable may perform Steam platform initialization internally.
This control is limited to 60–120 seconds total and a 5–30 second stable interval. Failure grace is at most 30 seconds and never extends the absolute deadline. Its readiness requires native GameLib and Game without WORKBENCH/ENF_WB, a Loaded-addons list containing exactly engine core (`5614BBCCBB55ED1C`) and ArmaReforger (`58D0FB3206B6F859`), vanilla MainMenuWorld loading, `Entered main menu.`, and no captured errors. Available-addon inventory does not establish loading. Any loaded third addon, successor diagnostic/smoke output or native error fails the control. Startup/menu initialization is not proof of displayed pixels, working input or completed disclaimer interaction.
Raw console/launch logs and the ordinary runner's report/provenance files remain retained. A clean result is named `vanilla-control-started`, with `control_only: true`; scenario readiness, participant verification and successor header verification stay false. The retained source manifest is explicitly a snapshot of unused successor addon sources for provenance bookkeeping, not evidence that the control loaded them. This result cannot satisfy successor mission or release acceptance. A splash error remains a failure even if the engine later enters the menu.
This tests initial vanilla splash only. It does not force an addon/scenario reload and therefore cannot by itself qualify the separate ScenarioLoadingScreen resource. If the intro error reproduces, it establishes that the successor is unnecessary for that failure in this installed environment. If it does not, the next discriminator is a separately scoped minimal empty source addon; this runner does not provide that broader control yet.
Validation without launching: `tests/test_headless_game_runner.py` retains all 32 existing containment/readiness tests; `tests/test_vanilla_game_control.py` adds ten tests for exact control arguments, profile separation, native-module/menu/base-addon evidence, unexpected addons/errors/successor output, bounded refusal without process/audio calls and failure latching. The stopped first control is recorded below.
## First native control: initial splash failure reproduced
[Vanilla control 102533](evidence/vanilla-game-2026-09-19-102533/report.json) ran the installed regular executable with exactly the two vanilla addons and the fresh private control profile. The [raw console](evidence/vanilla-game-2026-09-19-102533/console.log.txt) confirms no successor addon/search path/helper and no noSplash switch. IntroSplashScreen emits `Unknown class SCR_WidgetExportRuleRoot` at 10:25:34.416 before Game compilation; the engine later enters the main menu at 10:25:36.920. The one engine error remains a latched failure. No scripted assertion/completion or successor mission/participant readiness is recorded.
The runner stopped after about 33.3 seconds including its bounded failure grace, confirmed owned cleanup, and sealed unchanged launch/stopped source-manifest bytes plus the exact console hash. Those bindings were independently recomputed. The source manifest concerns unloaded successor files and does not turn this vanilla-only control into a successor run. This demonstrates that the successor is unnecessary for the **initial splash** failure in this installed environment. No scenario reload was requested, so it does not independently reproduce ScenarioLoadingScreen. See [source diagnosis and remedy limits](normal-splash-audit.md). Normal visible loading and manual input remain unqualified; no vanilla asset, global class or error filter was patched.