# Development playtest build — 19 September 2026 This is a **development candidate for human testing**, not a qualified release. The handoff target is `/home/jakub/devel/escapistsrereintroduced/.build/playtest-2026-09-19`. The frozen202-file candidate passes two Core scripted escape/restart rounds (616 assertions), all repository checks, exact five-PAK source comparisons, and ordinary packed Core/full-companion startup. Human end-to-end play, remote multiplayer and FPS remain unverified. Run the handoff's `play-full.sh` (or `play-core.sh`) yourself for visible play; separate local profiles/runtime are already prepared and audio stays muted. ## Build and retain the candidate Run these commands from `/home/jakub/devel/escapistsrereintroduced`, after the intended gameplay changes are frozen and the private runtime is idle. The existing runner owns its hidden display, muted audio, disposable source copy/profile and prefix lock. Do not run another native test alongside it. ```sh python3 tools/native_package.py --project chat \ --session /tmp/erri-playtest-packages-20260919 \ --compat /tmp/erri-headless-compat --timeout 300 \ --silent-workbench --continue-on-failure ``` `chat` builds **Core, AI, Intel, Map, Chat** in that order. Each output is already at `session/packages//{addon.gproj,data.pak,resourceDatabase.rdb}`. No repacking or dependency-assembly tool is needed. Sessions must be new; never overwrite a failed run to reuse its name. Known native packaging shutdown resource/UI errors also reproduced in the empty-addon control. The runner retains those errors and its failed verdict; `--continue-on-failure` permits subsequent addon attempts without waiving them. It still stops for incomplete execution, unsafe cleanup or source changes. A failed build verdict is not a clean build, but inspected artifacts that subsequently pass packed startup can be supplied for this explicitly limited development playtest. See [packaging control](native-packaging-control.md). Create the separate editable source ZIP while the same source is frozen: ```sh python3 tools/source_bundle.py --mode development \ --output /tmp/erri-playtest-source-20260919.zip ``` This is source only. Compare its `BUNDLE-MANIFEST.json` authored hashes with the packager's source snapshot before identifying it as the packages' matching source. The ZIP tool refuses an existing output and writes outside the checkout. After reviewing the build and startup results, copy only the fifteen runtime files into the durable handoff's `packages/` directory. Also retain `source.zip`, these instructions, raw build/startup reports and logs, and artifact SHA-256 hashes in separate sibling paths. Keep reports, loose sources and generated caches out of `packages/`. Never redistribute installed vanilla/runtime files. Extract the matching ZIP into a new `source/` directory for the Tools workflow below. ## Check those exact packed bytes These existing commands perform **hidden, bounded startup checks**; they close their own game and are not human play launchers. Use the newly built package directory, not an older archive: ```sh python3 tools/headless_game.py --project core \ --packed-core /tmp/erri-playtest-packages-20260919/packages/core \ --packed-session /tmp/erri-packed-core-playtest-20260919 \ --compat /tmp/erri-headless-compat --timeout 180 python3 tools/headless_game.py --project chat \ --packed-addons /tmp/erri-playtest-packages-20260919/packages \ --packed-session /tmp/erri-packed-chat-playtest-20260919 \ --compat /tmp/erri-headless-compat --timeout 180 ``` Their default fifteen-second readiness interval must remain unchanged. Retain both complete private sessions, including provenance, raw console, exact copied inputs and cleanup results. Match all fifteen hashes again after copying to the durable handoff. Packed startup proves loading and local admission; it does not prove a complete human escape, remote multiplayer or performance. ## Open the editable mission in Tools Installed Tools executable: `/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe`. Open **Arma Reforger Tools through the existing desktop/Steam workflow** when ready to play, rather than using a hidden diagnostic runner. Configure the extracted `source/addons` as the addon search directory. Open `source/addons/core/addon.gproj` for the base mission or `source/addons/chat/addon.gproj` for all five addons. Use the normal World Editor play workflow for `Worlds/ERR_Everon.ent`. Do not enable smoke plugins or pass any `errSmoke`, `errBaseSmoke`, input-exercise or aircraft-fixture flags. Editor play is an editable-source workflow; use the regular game and the scenario header below to test the packaged ordinary mission. ## Ordinary game launch options Installed regular game: `/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/ArmaReforgerSteam.exe`; installed Proton: `/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton`. Use the existing normal visible game/Proton launch workflow, with a **separate playtest profile**, passing one of these argument sets. These are arguments, not shell commands that execute the Windows binary directly. `Z:` is the installed Wine mapping for these Linux paths. The two local profile discovery links are already prepared. For a fresh copy elsewhere, prepare them once after the handoff directory exists. These commands write only inside that handoff; they do not alter installed vanilla assets. If either link already exists, inspect it instead of replacing it. This mirrors the existing startup runner's private-profile setup. ```sh ERRI_PLAYTEST=/home/jakub/devel/escapistsrereintroduced/.build/playtest-2026-09-19 mkdir -p "$ERRI_PLAYTEST/profile-core/addons" "$ERRI_PLAYTEST/profile-chat/addons" ln -s '/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/addons/data' "$ERRI_PLAYTEST/profile-core/addons/ArmaReforger" ln -s '/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/addons/data' "$ERRI_PLAYTEST/profile-chat/addons/ArmaReforger" ``` Base only: ```text -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/.build/playtest-2026-09-19/packages -addons 2528466DE220D91C -profile Z:/home/jakub/devel/escapistsrereintroduced/.build/playtest-2026-09-19/profile-core -errOrdinaryScenario core -noSplash -noBackend -noSound -logconsole ``` Full companion scenario: ```text -addonsDir Z:/home/jakub/devel/escapistsrereintroduced/.build/playtest-2026-09-19/packages -addons FA804F411BDDF2C6 -profile Z:/home/jakub/devel/escapistsrereintroduced/.build/playtest-2026-09-19/profile-chat -errOrdinaryScenario chat -noSplash -noBackend -noSound -logconsole ``` The explicit ordinary launcher requests the native mission **header and MissionSystems**, once from the main menu. Do not substitute a bare `-world` load. The two headers are `{AD62322D5213C440}Missions/ERR_Everon_Base.conf` (“Rereintroduced: Everon Base (development)”) and `{C1E20667DCE324ED}Missions/ERR_Everon.conf` (“Rereintroduced: Everon (development)”). These names also identify the authored scenarios in the normal scenario menu. This local/offline setup uses `-noBackend`; it is not multiplayer hosting instructions. `-noSplash` avoids the separately documented stock splash path. These playtest arguments keep audio muted as requested and send no automated input. Quit through the game's normal menu before running another build/test. | Package folder | Project | GUID | Successor dependencies | | --- | --- | --- | --- | | core | ERR_Core | 2528466DE220D91C | none | | ai | ERR_Ai | 5192138CB9D5B911 | Core | | intel | ERR_Intel | D31039C7C53E348A | Core | | map | ERR_Map | 9AAEE9041D79809E | Core | | chat | ERR_Chat | FA804F411BDDF2C6 | Core, AI, Intel, Map | Every project additionally requires installed vanilla Arma Reforger `58D0FB3206B6F859`; it is not bundled. Identities and commands above were checked against the current five projects, scenario headers, ordinary launcher and existing pack/startup runners. The visible launch recipe still needs the human run itself; no new native execution was performed to prepare this document. For the first session, test the ordinary prison → scavenging/documents → radio → helicopter → result/restart loop. Record the chosen scenario, where progression stopped, and the corresponding `profile-core/logs` or `profile-chat/logs` session. Retain known packaging errors separately from any gameplay failures. Remote joins/reconnects, twelve real players, full human completion and comparative FPS remain unqualified. ## This candidate's retained build results The standard packaging job produced Core, recorded native exit0, then stopped because an owned Wine helper remained until cleanup. Its failed verdict is unchanged. After strict idle verification, the remaining four addon jobs used the same frozen source and existing packaging function, each with native exit0, confirmed cleanup and unchanged source. All15 runtime artifacts and every PAK payload match the source. These separate continuation records and original UI shutdown errors are in the handoff's `checks/packaging/`; they do not qualify a clean build. [Core startup](evidence/packed-core-2026-09-19-playtest/report.json) and [full startup](evidence/packed-chat-2026-09-19-playtest/report.json) independently pass from the exact packages.