Fix inventory layout integration and qualify ordinary UI and radio guidance

This commit is contained in:
2026-09-19 18:17:51 +02:00
parent 5c7719c19c
commit 67de3752fb
125 changed files with 18310 additions and 42 deletions
@@ -0,0 +1,368 @@
---------------------------------------------
Log Z:\tmp\erri-inventory-control-profile\logs\logs_2026-09-19_17-51-37\console.log started at 2026-09-19 17:51:37 (2026-09-19 15:51:37 UTC)
17:51:37.206 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-inventory-control-profile\logs\logs_2026-09-19_17-51-37' to filesystem under name logs
17:51:37.206 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-inventory-control-profile\profile' to filesystem under name profile
17:51:37.206 ENGINE : FileSystem: Current working directory: 'Z:\home\jakub\.local\share\Steam\steamapps\common\Arma Reforger Tools\Workbench\'
17:51:37.207 PROFILING : Workbench Create Engine took: 9.201800 ms
17:51:38.243 INIT : INIT : Workbench Init Engine
17:51:38.243 ENGINE : Initializing engine, version 192142
17:51:38.243 ENGINE : CLI Params: -gproj Z:/tmp/erri-inventory-control-run-qgy2j0cn/addons/core/addon.gproj -addonsDir Z:/tmp/erri-inventory-control-run-qgy2j0cn/addons -profile Z:/tmp/erri-inventory-control-profile -logconsole -wbModule WorldEditor -load Worlds/ERRIC_Inventory.ent -plugin ERRIC_InventoryControlPlugin -errPlay 1 -erricInventoryControl 1 -errBaseSmoke 1 -errSmokeOutcome victory -noThrow -disableCrashReporter
17:51:38.247 ENGINE : Addon dirs:
17:51:38.247 ENGINE : dir: 'Z:/tmp/erri-inventory-control-run-qgy2j0cn/addons/core/'
17:51:38.247 ENGINE : dir: 'Z:/tmp/erri-inventory-control-run-qgy2j0cn/addons'
17:51:38.247 ENGINE : dir: './addons'
17:51:38.247 ENGINE : dir: 'Z:/tmp/erri-inventory-control-profile/addons'
17:51:38.247 ENGINE : Available addons:
17:51:38.247 ENGINE : gproj: 'Z:/tmp/erri-inventory-control-run-qgy2j0cn/addons/core/addon.gproj' guid: '0FFD909E91FC329B'
17:51:38.247 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C' (packed)
17:51:38.247 ENGINE : gproj: 'Z:/tmp/erri-inventory-control-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859' (packed)
17:51:38.247 ENGINE : FileSystem: Adding relative directory 'Z:\tmp\erri-inventory-control-run-qgy2j0cn\addons\core' to filesystem under name ERRIC_InventoryControl
17:51:38.362 ENGINE : FileSystem: Adding package 'Z:/tmp/erri-inventory-control-profile/addons/ArmaReforger/' (pak count: 14) to filesystem under name ArmaReforger
17:51:38.365 ENGINE : FileSystem: Adding package './addons/core/' (pak count: 2) to filesystem under name core
17:51:38.365 ENGINE : CPU vendor : AuthenticAMD
17:51:38.365 ENGINE : CPU type : 2
17:51:38.365 ENGINE : CPU name : AMD Ryzen 7 3800XT 8-Core Processor
17:51:38.365 ENGINE : CPU cache info : L1 [Inst 32KB, Data 32KB], L2 [Unif 512KB], L3 [Unif 16384KB]
17:51:38.365 ENGINE : CPU count logical : 16
17:51:38.365 ENGINE : CPU count physical : 8
17:51:38.365 ENGINE : CPU features : mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcnt aesni pclmulqdq osxsave avx sha avx2
17:51:38.365 RESOURCES : ResourceDB: loading cache (id=0 name=ERRIC_InventoryControl path=Z:\tmp\erri-inventory-control-run-qgy2j0cn\addons\core/resourceDatabase.rdb)
17:51:38.365 RESOURCES : ResourceDB: loading cache (id=1 name=ArmaReforger path=Z:/tmp/erri-inventory-control-profile/addons/ArmaReforger/resourceDatabase.rdb)
17:51:38.497 RESOURCES : ResourceDB: loading cache (id=2 name=core path=./addons/core/resourceDatabase.rdb)
17:51:38.499 RESOURCES : ResourceDB: loading cache (id=3 name=profile path=Z:\tmp\erri-inventory-control-profile\profile/resourceDatabase.rdb)
17:51:38.499 RESOURCES : ResourceDB: loading cache (id=4 name=logs path=Z:\tmp\erri-inventory-control-profile\logs\logs_2026-09-19_17-51-37/resourceDatabase.rdb)
17:51:38.626 RESOURCES : RESOURCES : ResourceDB: full scan
17:51:38.631 RESOURCES : RESOURCES : scanning...
17:51:38.631 RESOURCES : RESOURCES : scanning @"ERRIC_InventoryControl"
17:51:38.633 RESOURCES : RESOURCES : scanning @"ArmaReforger"
17:51:38.769 RESOURCES : RESOURCES : scanning @"core"
17:51:38.773 RESOURCES : RESOURCES : scanning @"profile"
17:51:38.774 RESOURCES : RESOURCES : scanning @"logs"
17:51:38.774 RESOURCES : RESOURCES : processing meta-files...
17:51:38.838 RESOURCES : RESOURCES : processing files...
17:51:38.849 INIT : Workbench startup
17:51:38.849 INIT : Workbench Init Engine
17:51:38.849 RESOURCES : ResourceDB: full scan
17:51:38.850 RESOURCES : processing files...
17:51:38.850 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID
17:51:38.850 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID
17:51:38.850 RESOURCES : RESOURCES : processing folders...
17:51:38.857 RESOURCES : RESOURCES : creating GUID-item mapping...
17:51:38.874 RESOURCES : RESOURCES : building tree...
17:51:38.923 PROFILING : ResourceDB: full scan took: 296.969000 ms
17:51:38.924 RESOURCES : ResourceDB: saving cache (id=0 name=ERRIC_InventoryControl path=Z:\tmp\erri-inventory-control-run-qgy2j0cn\addons\core/resourceDatabase.rdb)
17:51:38.926 RESOURCES : ResourceDB: written 699/699 bytes
17:51:38.926 RESOURCES : ResourceDB: cache successfully saved
17:51:38.926 RESOURCES : ResourceDB: saving cache (id=3 name=profile path=Z:\tmp\erri-inventory-control-profile\profile/resourceDatabase.rdb)
17:51:38.927 RESOURCES : ResourceDB: written 51/51 bytes
17:51:38.927 RESOURCES : ResourceDB: cache successfully saved
17:51:38.927 RESOURCES : ResourceDB: saving cache (id=4 name=logs path=Z:\tmp\erri-inventory-control-profile\logs\logs_2026-09-19_17-51-37/resourceDatabase.rdb)
17:51:38.929 RESOURCES : ResourceDB: written 162/162 bytes
17:51:38.929 RESOURCES : ResourceDB: cache successfully saved
17:51:38.929 ENGINE : GameProject load
17:51:38.929 ENGINE : Loaded addons:
17:51:38.929 ENGINE : gproj: './addons/core/core.gproj' guid: '5614BBCCBB55ED1C'
17:51:38.929 ENGINE : gproj: 'Z:/tmp/erri-inventory-control-profile/addons/ArmaReforger/ArmaReforger.gproj' guid: '58D0FB3206B6F859'
17:51:38.929 ENGINE : gproj: 'Z:/tmp/erri-inventory-control-run-qgy2j0cn/addons/core/addon.gproj' guid: '0FFD909E91FC329B'
17:51:38.931 ENGINE : Loading custom engine user config '$profile:.save/app1874910_user76561198020202999/settings/ReforgerEngineSettings.conf'
17:51:38.931 ENGINE : No Enfusion settings file loaded. Continuing with defaults
17:51:39.035 RENDER : (OK) Adapter 'AMD Radeon RX 6950 XT (RADV NAVI21)' supports feature level 12_0
17:51:39.036 RENDER : Basic screen setup:
17:51:39.036 RENDER : Back buffer format : TEXFMT_R8G8B8A8_SRGB (29)
17:51:39.036 RENDER : MSAA : none
17:51:39.049 RENDER : AMD AGS library initialized, version 6.1.0 x DLL 6.1.0
17:51:39.049 RENDER : Extendeded AMD info for AMD Radeon RX 6950 XT (RADV NAVI21) (primary device)
17:51:39.049 RENDER : * architecture RDNA2, 80 CUs, 40 WGPs (for RDNA), 64 ROPs
17:51:39.049 RENDER : * core clocks 2720 MHz, memory 1124 MHz
17:51:39.049 RENDER : * TFlops 27.9, memory bandwidth (562.0 GB/s)
17:51:39.049 RENDER : AMD AGS correctly initialized
17:51:39.049 RENDER : GPU_ATI (0x1002) (AMD Radeon RX 6950 XT (RADV NAVI21)) with 1 GPU detected, VRAM 16128MB (fast 0MB), shared 64362MB, driver version 99.19.02-230831a-396538C-AMD-Software-Adrenalin-Edition
17:51:39.049 RENDER : Detected output devices:
17:51:39.049 RENDER : * 1 device/s connected to AMD Radeon RX 6950 XT (RADV NAVI21):
17:51:39.049 RENDER : Generic Non-PnP Monitor (\\.\DISPLAY1), 1280x720 (offset 0x0), 30Hz
17:51:39.049 RENDER : Concurrent frames limit 2
17:51:39.126 RENDER : DX12 device successfully created by AMD AGS library
17:51:39.126 RENDER : * user markers not supported in this version AMD SW
17:51:39.126 RENDER : Graphics device features
17:51:39.126 RENDER : Needed:
17:51:39.126 RENDER : * Highest supported shader model: 6.8 (6.0 needed)
17:51:39.126 RENDER : Optional:
17:51:39.126 RENDER : * Allow tearing (VSYNC) : 1
17:51:39.126 RENDER : * 16 bits : 1
17:51:39.126 RENDER : * Resource heap tier : 3
17:51:39.126 RENDER : * Persistent heaps (DRED) : 1
17:51:39.126 RENDER : * DRED 1.2 is supported by compiler
17:51:39.148 RENDER : Main RT format setup.
17:51:39.148 RENDER : Main RT format for quality 0 : TEXFMT_R11G11B10_FLOAT (26)
17:51:39.148 RENDER : Main RT format for quality 1 : TEXFMT_R16G16B16A16_FLOAT (10)
17:51:39.150 ENGINE : Job system settings: coreCount=16, shortJobContextCount=16, shortJobThreadCount=15, longJobThreadCount=16
17:51:39.180 PROFILING : Settings changed took: 0.019900 ms
17:51:39.934 AUDIO : Endpoint: Speakers (PulseAudio Output)
17:51:39.934 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B
17:51:39.935 AUDIO : Audio client:
17:51:39.935 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512
17:51:39.937 RENDER : RENDER : Reload shaders
17:51:39.938 RENDER : Enfusion shader version 13
17:51:39.938 INIT : INIT : ShaderListReload
17:51:39.938 PROFILING : ShaderListReload took: 0.000500 ms
17:51:40.081 AUDIO : Endpoint: Speakers (PulseAudio Output)
17:51:40.081 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Avg. bytes: 384kB, Sample bits: 32, Block align: 8B
17:51:40.081 AUDIO : Audio client:
17:51:40.081 AUDIO : Format: Channels: 2, Sample rate: 48kHz, Buffer size: 1536B, Frame: 512
17:51:40.155 RENDER : Loaded 3752 newer shader binaries
17:51:40.156 PROFILING : Reload shaders took: 218.121500 ms
17:51:40.156 ENGINE : Initializing inputs.
17:51:40.168 NETWORK : Initializing networking.
17:51:40.168 NETWORK : Using new GameRplScheduler.
17:51:40.169 SCRIPT : SCRIPT : Initializing scripts
17:51:40.169 SCRIPT : SCRIPT : ScriptProjectManager init
17:51:40.953 PROFILING : ScriptProjectManager init took: 783.859100 ms
17:51:40.988 PROFILING : Initializing scripts took: 819.634200 ms
17:51:41.007 ENGINE : Enfusion engine successfully created.
17:51:41.007 PROFILING : Workbench Init Engine took: 2763.956100 ms
17:51:41.007 INIT : INIT : Workbench Create Game
17:51:41.017 GUI : Using default language (en_us)
17:51:41.017 GUI : Loading 'en_us' localization file.
17:51:41.017 INIT : INIT : Loading StringTable
17:51:41.042 PROFILING : Loading StringTable took: 24.523400 ms
17:51:41.042 SCRIPT : SCRIPT : Compiling GameLib scripts
17:51:41.094 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460
17:51:41.094 SCRIPT : Module: GameLib; loaded 465x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 4507af04
17:51:41.095 PROFILING : Compiling GameLib scripts took: 52.914700 ms
17:51:41.095 SCRIPT : SCRIPT : Compiling Game scripts
17:51:42.081 INIT : Workbench Create Game
17:51:42.081 SCRIPT : Compiling Game scripts
17:51:42.081 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete
17:51:42.081 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete
17:51:42.333 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed
17:51:42.364 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete
17:51:42.462 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete
17:51:42.462 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete
17:51:42.462 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete
17:51:42.463 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete
17:51:42.553 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete
17:51:42.553 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete
17:51:42.554 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete
17:51:42.597 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api.
17:51:42.597 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api.
17:51:42.653 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete
17:51:42.918 SCRIPT : Module: WorkbenchGame; loaded 171x files; 616x classes; used 2478K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 19ac36c1
17:51:42.924 SCRIPT : Module: Game; loaded 5661x files; 11084x classes; used 32146K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: c1afc005
17:51:42.962 PROFILING : Compiling Game scripts took: 1867.687900 ms
17:51:42.968 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC.
17:51:43.009 ENGINE : Game successfully created.
17:51:43.010 PROFILING : Workbench Create Game took: 2003.273800 ms
17:51:43.020 DEFAULT : Using thumbnail cache directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERRIC_InventoryControl/thumbnails
17:51:43.836 INIT : INIT : Workbench Reload Game
17:51:43.838 ENGINE : Game destroyed.
17:51:43.844 GUI : Using default language (en_us)
17:51:43.844 GUI : Loading 'en_us' localization file.
17:51:43.844 INIT : INIT : Loading StringTable
17:51:43.853 PROFILING : Loading StringTable took: 9.166300 ms
17:51:43.853 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC.
17:51:43.860 SCRIPT : Unable to register a script command due keyword duplicity: ban
17:51:43.860 SCRIPT : Unable to register a script command due keyword duplicity: kick
17:51:43.860 ENGINE : Game successfully created.
17:51:43.860 ENGINE : Game successfully initialized.
17:51:43.860 PROFILING : Workbench Reload Game took: 23.785200 ms
17:51:44.561 WORLD : WORLD : Entities load '$ERRIC_InventoryControl:Worlds/ERRIC_Inventory.ent'
17:51:45.559 PROFILING : Entities load took: 996.940900 ms
17:51:45.571 WORLD : WORLD : CreateEntities
17:51:45.579 WORLD : WORLD : NotifyBeforeEntitiesCreated
17:51:45.579 PROFILING : NotifyBeforeEntitiesCreated took: 0.003300 ms
17:51:45.579 WORLD : WORLD : Wait for preloading data
17:51:45.579 PROFILING : Wait for preloading data took: 0.004600 ms
17:51:45.689 ENTITY : Create entity @"ENTITY:2" ('Eden', GenericTerrainEntity) at <0.000000 0.000000 0.000000> @"{5AD924374E8C7AF6}Prefabs/World/Game/Eden/GenericTerrain_Eden.et"
17:51:45.689 PROFILING : PROFILING : Terrain load
17:51:47.211 PROFILING : Terrain load took: 1521.588800 ms
17:51:51.117 WORLD : CreateEntities
17:51:51.117 ENTITY : Create entity @"ENTITY:610406" ('StaticModelEntity','Assets/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.xob') at <1931.796021 81.777000 5138.725098> @"{6A004A8F0571D456}Prefabs/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.et"
17:51:51.117 ENTITY : CreateComponent 'ScriptedRadioComponent'
17:51:51.117 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent.
17:51:56.309 WORLD : WORLD : NotifyBeforeEntitiesInitialized
17:51:56.309 PROFILING : NotifyBeforeEntitiesInitialized took: 0.005000 ms
17:51:56.713 WORLD : WORLD : NotifyEntitiesInitialized
17:51:56.713 TERRAIN : TERRAIN : Initializing road networks...
17:51:56.716 PROFILING : Initializing road networks... took: 2.948700 ms
17:51:56.717 PROFILING : NotifyEntitiesInitialized took: 3.442100 ms
17:51:56.717 PROFILING : CreateEntities took: 11144.878600 ms
17:51:56.890 PROFILING : * WorldEditor: LoadWorld: 12334.321700 ms
17:51:58.213 TERRAIN : Loading tile map config (worlds/Eden/Eden/tileMap.conf)
17:51:58.213 TERRAIN : Loading minimap config (worlds/Eden/Eden/miniMap.conf)
17:51:58.214 TERRAIN : The default minimap texture ('worlds/Eden/EdenRasterized.edds') not found. Trying 'worlds/Eden/Eden.edds'...
17:51:58.214 TERRAIN : The default minimap texture ('worlds/Eden/Eden.edds') not found. Skipping...
17:51:58.281 BACKEND : Attempting online Game Config instead.
17:51:59.696 INIT : INIT : Workbench Reload Game
17:51:59.699 ENGINE : Game destroyed.
17:51:59.705 GUI : Using default language (en_us)
17:51:59.705 GUI : Loading 'en_us' localization file.
17:51:59.705 INIT : INIT : Loading StringTable
17:51:59.727 PROFILING : Loading StringTable took: 20.809000 ms
17:51:59.727 INIT : Creating game instance(ArmaReforgerScripted), version 1.8.0.13 built 2026-08-21 14:30:18 UTC.
17:51:59.735 SCRIPT : Unable to register a script command due keyword duplicity: ban
17:51:59.735 SCRIPT : Unable to register a script command due keyword duplicity: kick
17:51:59.735 ENGINE : Game successfully created.
17:51:59.735 ENGINE : Game successfully initialized.
17:51:59.735 PROFILING : Workbench Reload Game took: 38.880400 ms
17:51:59.738 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected)
17:51:59.787 PLATFORM : Save data from container 'settings' have been loaded
17:51:59.879 PLATFORM : Save data from container 'sessions' have been loaded
17:51:59.976 DEFAULT : [SaveGameManager] Starting new playthrough nr.0 '' for mission '{2AACCD1FDA9EB6E9}Worlds/ERRIC_Inventory.ent'.
17:51:59.982 WORLD : WORLD : Game::LoadEntities
17:51:59.982 WORLD : WORLD : Initializing world systems @"{1C60D2EDA2B468B8}Configs/Systems/BaseGameModeSystems.conf"
17:51:59.983 NETWORK : Enabled lag compensation, 29 frames with 100 FPS and 280 ms rewind limits.
17:51:59.983 WORLD : WORLD : CreateEntities
17:51:59.983 WORLD : WORLD : CreateEntities
17:51:59.983 WORLD : WORLD : NotifyBeforeEntitiesCreated
17:51:59.986 RESOURCES : Loaded mission headers from 3 addon(s)!
17:51:59.986 PROFILING : NotifyBeforeEntitiesCreated took: 2.923400 ms
17:51:59.986 WORLD : WORLD : Wait for preloading data
17:51:59.986 PROFILING : Wait for preloading data took: 0.000700 ms
17:52:03.721 WORLD : Game::LoadEntities
17:52:03.721 WORLD : CreateEntities
17:52:03.721 WORLD : CreateEntities
17:52:03.721 ENTITY : Create entity @"ENTITY:610406" ('StaticModelEntity','Assets/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.xob') at <1931.796021 81.777000 5138.725098> @"{6A004A8F0571D456}Prefabs/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.et"
17:52:03.721 ENTITY : CreateComponent 'ScriptedRadioComponent'
17:52:03.721 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent.
17:52:05.119 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>
17:52:05.119 ENTITY : CreateComponent 'Hierarchy'
17:52:05.119 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>')
17:52:05.119 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>
17:52:05.119 ENTITY : CreateComponent 'Hierarchy'
17:52:05.119 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>')
17:52:05.119 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>
17:52:05.119 ENTITY : CreateComponent 'Hierarchy'
17:52:05.119 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>')
17:52:05.124 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>
17:52:05.124 ENTITY : CreateComponent 'Hierarchy'
17:52:05.124 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>')
17:52:05.124 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>
17:52:05.124 ENTITY : CreateComponent 'Hierarchy'
17:52:05.124 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>')
17:52:05.124 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>
17:52:05.124 ENTITY : CreateComponent 'Hierarchy'
17:52:05.124 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>')
17:52:05.128 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>
17:52:05.128 ENTITY : CreateComponent 'Hierarchy'
17:52:05.128 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>')
17:52:05.128 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>
17:52:05.128 ENTITY : CreateComponent 'Hierarchy'
17:52:05.128 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>')
17:52:05.128 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>
17:52:05.128 ENTITY : CreateComponent 'Hierarchy'
17:52:05.128 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>')
17:52:08.372 ENTITY : Create entity @"ENTITY:2305843009213693954" ('Factions', SCR_FactionManager) at <0.000000 0.000000 0.000000> @"{589540B35EBA8CDC}Prefabs/MP/Managers/Factions/FactionManager_USxUSSR.et"
17:52:08.372 RESOURCES : GetResourceObject @"{5168FEA3054D6D15}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB_MERDC.et"
17:52:08.372 WORLD : Entity prefab load @"{5168FEA3054D6D15}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB_MERDC.et"
17:52:08.373 RESOURCES : GetResourceObject @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et"
17:52:08.373 WORLD : Entity prefab load @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et"
17:52:08.373 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
17:52:08.373 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
17:52:08.373 WORLD (E): Unknown keyword/data 'SlidingTrackMaterial' at offset 19441(0x4bf1)
17:52:08.414 RESOURCES : GetResourceObject @"{F7B9B434FCFF00B3}Prefabs/Vehicles/Wheeled/Conflict_Variants/BRDM2_Conflict.et"
17:52:08.414 WORLD : Entity prefab load @"{F7B9B434FCFF00B3}Prefabs/Vehicles/Wheeled/Conflict_Variants/BRDM2_Conflict.et"
17:52:08.414 RESOURCES : GetResourceObject @"{254289B9C09904AB}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2.et"
17:52:08.414 WORLD : Entity prefab load @"{254289B9C09904AB}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2.et"
17:52:08.414 RESOURCES : GetResourceObject @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
17:52:08.414 WORLD : Entity prefab load @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
17:52:08.414 WORLD (E): Unknown keyword/data 'Parent' at offset 35955(0x8c73)
17:52:08.414 WORLD (E): Unknown keyword/data 'Parent' at offset 36915(0x9033)
17:52:08.415 RESOURCES : GetResourceObject @"{BD75A18920BD1278}Prefabs/Vehicles/Wheeled/Conflict_Variants/BTR70_Conflict.et"
17:52:08.415 WORLD : Entity prefab load @"{BD75A18920BD1278}Prefabs/Vehicles/Wheeled/Conflict_Variants/BTR70_Conflict.et"
17:52:08.415 RESOURCES : GetResourceObject @"{C012BB3488BEA0C2}Prefabs/Vehicles/Wheeled/BTR70/BTR70.et"
17:52:08.415 WORLD : Entity prefab load @"{C012BB3488BEA0C2}Prefabs/Vehicles/Wheeled/BTR70/BTR70.et"
17:52:08.415 RESOURCES : GetResourceObject @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
17:52:08.415 WORLD : Entity prefab load @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 42646(0xa696)
17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 43645(0xaa7d)
17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 44617(0xae49)
17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 45590(0xb216)
17:52:08.738 WORLD : WORLD : NotifyBeforeEntitiesInitialized
17:52:08.738 PROFILING : NotifyBeforeEntitiesInitialized took: 0.052700 ms
17:52:10.708 WORLD : InitEntities 'world'
17:52:10.708 ENTITY : Init entity @"ENTITY:2305843009213693953" ('InventoryControl', ERRIC_InventoryMode) at <1076.468018 51.000999 1325.246948> @"{86FBBCE45AF62682}Prefabs/ERRIC_InventoryMode.et"
17:52:10.708 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead.
17:52:10.734 WORLD : WORLD : NotifyEntitiesInitialized
17:52:10.734 TERRAIN : TERRAIN : Initializing road networks...
17:52:10.737 PROFILING : Initializing road networks... took: 2.645900 ms
17:52:10.737 DEFAULT : DEFAULT : WorldVolumesCollection
17:52:10.793 PROFILING : WorldVolumesCollection took: 55.387600 ms
17:52:10.793 INIT : INIT : SoundWorldInit
17:52:10.806 PROFILING : SoundWorldInit took: 13.157800 ms
17:52:10.806 PROFILING : NotifyEntitiesInitialized took: 71.405000 ms
17:52:10.806 PROFILING : CreateEntities took: 10823.011300 ms
17:52:10.806 PROFILING : CreateEntities took: 10823.171500 ms
17:52:10.806 WORLD : WORLD : Wait for preloading data around camera
17:52:10.806 PROFILING : Wait for preloading data around camera took: 0.000900 ms
17:52:10.806 WORLD : WORLD : EOnActivate
17:52:10.840 PROFILING : EOnActivate took: 33.544400 ms
17:52:10.840 PROFILING : Game::LoadEntities took: 10858.586800 ms
17:52:10.895 DEFAULT : Entered offline game state.
17:52:10.994 NETWORK : Player connected: connectionID=2147483646
17:52:10.994 NETWORK : ### Connecting player: connectionID=2147483646, Name=
17:52:10.995 NETWORK : ### Creating player: PlayerId=1, Name=jakub
17:52:10.999 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et"
17:52:11.000 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000>
17:52:11.000 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et"
17:52:11.000 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key!
17:52:11.000 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key!
17:52:11.002 SCRIPT (W): Can't open config file ""
17:52:11.002 WORLD : InitEntities 'world'
17:52:11.002 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et"
17:52:11.002 DEFAULT (W): Chat not available - missing ChatEntity. Only printing this message once. There're possibly more nodes with this requirement.
17:52:11.008 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout"
17:52:11.008 SCRIPT (W): Slot_WeaponInfo Has no Content!
17:52:11.008 SCRIPT (W): Slot_Chat Has no Content!
17:52:11.008 SCRIPT (W): Slot_VON Has no Content!
17:52:11.008 SCRIPT (W): Slot_AvailableActions Has no Content!
17:52:11.008 SCRIPT (W): Slot_Vehicle Has no Content!
17:52:11.008 SCRIPT (W): Slot_GameVersion Has no Content!
17:52:11.008 SCRIPT (W): Slot_Notifications Has no Content!
17:52:11.009 SCRIPT (W): Slot_Hints Has no Content!
17:52:11.022 NETWORK : ### Updating player: PlayerId=1, Name=jakub, rplIdentity=0xFFFFFFFE, IdentityId=00000000-0000-0000-0000-000000000000
17:52:11.022 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config
17:52:11.023 NETWORK : Players connecting: 0
17:52:11.023 NETWORK : Players connected: 1 / 1
17:52:11.049 DEFAULT : Using autosave directory: C:/users/steamuser/AppData/Local/Temp/Arma Reforger Workbench/Projects/ERRIC_InventoryControl/autosaves
17:52:11.051 PROFILING : Workbench startup took: 33903.531100 ms
17:52:11.072 SCRIPT : ERR SMOKE PASS: vanilla inventory control: real local controller initially unassigned
17:52:11.072 SCRIPT : ERR SMOKE PASS: vanilla inventory control: installed unmodified US_Unarmed resource
17:52:11.140 SCRIPT : ERR SMOKE PASS: vanilla inventory control: one stock body spawned
17:52:11.141 SCRIPT : ERR SMOKE PASS: vanilla inventory control: native fixture-only body assignment succeeded
17:52:11.141 SCRIPT : ERR SMOKE PASS: vanilla inventory control: stock inventory component present
17:52:11.141 WORLD : Frame start
17:52:11.141 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated.
17:52:11.155 WORLD : UpdateEntities
17:52:11.155 WORLD : Frame
17:52:11.155 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME
17:52:11.315 WORLD : UpdateEntities
17:52:11.316 WORLD : PostFrame
17:52:11.316 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout"
17:52:11.316 SCRIPT (W): EditBoxFilterComponent used on invalid widget type.
17:52:11.357 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout"
17:52:11.357 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout"
17:52:11.357 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout"
17:52:11.357 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab
17:52:11.490 RENDER : RENDER : ObjectsHeightMap::Build
17:52:11.490 RENDER : RENDER : MeshOccupancyGridManager::GenerateAllForWorld
17:52:11.634 PROFILING : MeshOccupancyGridManager::GenerateAllForWorld took: 143.258400 ms
17:52:11.641 PROFILING : ObjectsHeightMap::Build took: 150.551400 ms
17:52:12.136 SCRIPT : ERR SMOKE PASS: vanilla inventory control: inventory initially closed
17:52:12.145 GUI : Creating menu 'Inventory20Menu'
17:52:12.145 GUI : WidgetManager: CrateWidgets @"{981ACF4F45EAECAE}UI/layouts/Menus/Inventory/InventoryMain.layout"
17:52:12.146 SCRIPT (W): Slot_VON Has no Content!
17:52:12.146 SCRIPT (W): Slot_GameVersion Has no Content!
17:52:12.230 GUI (E): OverlayWidget Frame0 has invalid slot GridWidgetSlot for slot manipulation function used, expected: LayoutSlot
17:52:12.230 GUI (E): OverlayWidget Frame0 has invalid slot GridWidgetSlot for slot manipulation function used, expected: LayoutSlot
17:52:12.663 SCRIPT : ERR SMOKE PASS: vanilla inventory control: actual native Inventory20Menu opened
17:52:12.664 SCRIPT : ERR SMOKE PASS: vanilla inventory control: menu bound to exact stock body
17:52:12.664 SCRIPT : ERR SMOKE PASS: vanilla inventory control: native inventory root and top menu
17:52:12.664 SCRIPT : ERR SMOKE PASS: vanilla inventory control: stock storage-list parent is native GridLayoutWidget
17:52:12.664 SCRIPT : ERR SMOKE PASS: vanilla inventory control: stock Frame0 is direct child of native storage grid
17:52:12.664 SCRIPT : ERRIC INVENTORY GEOMETRY: parent=StoragesListSlot type=224354160 child=Frame0 type=134171936
17:52:12.687 RESOURCES : Screenshot saved to $logs:erric-inventory-open.png
17:52:13.239 SCRIPT : ERR SMOKE PASS: vanilla inventory control: same native menu retained for delayed capture
17:52:13.762 SCRIPT : ERR SMOKE PASS: vanilla inventory control: native inventory closed with original body retained
17:52:13.762 SCRIPT : ERR SMOKE COMPLETE: vanilla inventory control; direct native API experiment only, no successor or input qualification
17:52:13.782 RESOURCES : Screenshot saved to $logs:erric-inventory-closed.png
@@ -0,0 +1,5 @@
{
"control-review.json": "6d2896928518be486fc962c6ebe5c4bdfce1a078c62688e60d5949efdd670a98",
"control-launch.log.txt": "24bd76504044c1beed7f03953c57f8fc8b3e72fee1fc59fb0e91ff4a95830ad3",
"harness.py.txt": "51ef3b32c8053137c4f429bf18fc5fdd31d528dcab294af9483b9d557c627d9b"
}
@@ -0,0 +1,57 @@
Test audio routed to silent output and muted (stream 476828)
{
"stopped_unix": 1789833140.8067544,
"console_sha256": "ff13d06afc48ac38034d6e6ebd1a0bcd0c4fb879e7253d599b1a17127ac9bcef",
"end_source_sha256": "dce78f7c31b68b44e381cd9c152c999daecf1b08c783dfbcb6e4920b0a65ef42",
"source_unchanged_after_run": true,
"source_provenance": "launch_snapshot",
"launch_id": "99540179-94f8-445b-929d-c62736422ca6",
"launch_source_manifest": "launch-source-sha256.json",
"launch_source_metadata": "launch-source.json",
"launch_source_sha256": "dce78f7c31b68b44e381cd9c152c999daecf1b08c783dfbcb6e4920b0a65ef42",
"started_unix": 1789833095.6025398,
"result": "smoke-completed",
"result_before_cleanup": "smoke-completed",
"cleanup_confirmed": true,
"cleanup_report": {
"cleanup_confirmed": true,
"idle_verified": true,
"errors": [],
"orphan_cleanup": {
"attempted": true,
"report": {
"scope": "/tmp/erri-headless-compat/pfx",
"candidates": [],
"term_sent": [],
"kill_sent": [],
"cleared": true
}
}
},
"runner_error": null,
"session": "/tmp/erri-inventory-control-profile/logs/logs_2026-09-19_17-51-37",
"rounds_required": 1,
"project": "core",
"display": "headless Gamescope 1280x720/30Hz",
"dedicated_server": false,
"audio": "silent sink and per-test-stream mute"
}
{
"log": "/tmp/erri-inventory-control-profile/logs/logs_2026-09-19_17-51-37/console.log",
"smoke_completions": 1,
"assertions_passed": 13,
"script_or_runtime_failures": [],
"engine_errors": [
"17:52:08.373 WORLD (E): Unknown keyword/data 'SlidingTrackMaterial' at offset 19441(0x4bf1)",
"17:52:08.414 WORLD (E): Unknown keyword/data 'Parent' at offset 35955(0x8c73)",
"17:52:08.414 WORLD (E): Unknown keyword/data 'Parent' at offset 36915(0x9033)",
"17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 42646(0xa696)",
"17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 43645(0xaa7d)",
"17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 44617(0xae49)",
"17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 45590(0xb216)",
"17:52:12.230 GUI (E): OverlayWidget Frame0 has invalid slot GridWidgetSlot for slot manipulation function used, expected: LayoutSlot",
"17:52:12.230 GUI (E): OverlayWidget Frame0 has invalid slot GridWidgetSlot for slot manipulation function used, expected: LayoutSlot"
],
"missing_end_screen": [],
"scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim"
}
@@ -0,0 +1,79 @@
{
"loaded_addon_guids": [
"5614BBCCBB55ED1C",
"58D0FB3206B6F859",
"0FFD909E91FC329B"
],
"loaded_addon_blocks": [
[
"5614BBCCBB55ED1C",
"58D0FB3206B6F859",
"0FFD909E91FC329B"
]
],
"only_vanilla_and_control_loaded": true,
"stock_slot_error_reproduced": false,
"native_clean": false,
"native_report": {
"log": "console.log",
"smoke_completions": 1,
"assertions_passed": 13,
"script_or_runtime_failures": [],
"engine_errors": [
"17:52:08.373 WORLD (E): Unknown keyword/data 'SlidingTrackMaterial' at offset 19441(0x4bf1)",
"17:52:08.414 WORLD (E): Unknown keyword/data 'Parent' at offset 35955(0x8c73)",
"17:52:08.414 WORLD (E): Unknown keyword/data 'Parent' at offset 36915(0x9033)",
"17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 42646(0xa696)",
"17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 43645(0xaa7d)",
"17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 44617(0xae49)",
"17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 45590(0xb216)",
"17:52:12.230 GUI (E): OverlayWidget Frame0 has invalid slot GridWidgetSlot for slot manipulation function used, expected: LayoutSlot",
"17:52:12.230 GUI (E): OverlayWidget Frame0 has invalid slot GridWidgetSlot for slot manipulation function used, expected: LayoutSlot"
],
"missing_end_screen": [],
"scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim"
},
"successor_or_release_qualified": false,
"scope": "Scripted stock-character inventory control with vanilla plus one diagnostic addon only; no normal-input, successor gameplay or release qualification.",
"native_runner_exit": 1,
"session": "/tmp/erri-inventory-control-profile/logs/logs_2026-09-19_17-51-37",
"bundle": "/tmp/erri-inventory-control-run-qgy2j0cn",
"command": [
"/usr/bin/python3",
"/tmp/erri-inventory-control-run-qgy2j0cn/tools/headless_workbench.py",
"--compat",
"/tmp/erri-headless-compat",
"--profile",
"/tmp/erri-inventory-control-profile",
"--project",
"core",
"--smoke",
"victory",
"--rounds",
"1",
"--timeout",
"150"
],
"fixture_sha256": {
"Prefabs/ERRIC_InventoryMode.et": "98408ab80347058f5b79b1103b849b19beaeb97a9ff81662b59fe6100ddd6bf8",
"Prefabs/ERRIC_InventoryMode.et.meta": "6b4f66f296d15e7e5f82928cf1bdfa58f085421ae9b6f24afc5ac922d2a8781e",
"README.md": "29f7086ee223b1cfe657932c7f236a1640876503f69f6f401451c72a5452695d",
"Scripts/Game/ERRIC/ERRIC_InventoryControl.c": "8707f35ecf48813bc4e72c599fe2527c44807493496218d18e89aa8739eb59f9",
"Scripts/WorkbenchGame/ERRIC/ERRIC_InventoryControlPlugin.c": "000d8fa3aa6412a5adb1561333f840f27185dc42fa61569c311b0607df0f2420",
"Worlds/ERRIC_Inventory.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87",
"Worlds/ERRIC_Inventory.ent.meta": "ca0420504016fa2aa7220712d13b7bf7748832d8d58b085afc4373f4abeb1339",
"Worlds/ERRIC_Inventory_Layers/default.layer": "80a5f0b6c1bc8761469ea69978967dffc070ba9f98c5125430a78a506684c39e",
"addon.gproj": "18dd7db85574119fac5057091c4d9991b247855f67f06bb86cf440f429b5911f"
},
"harness_sha256": {
"headless_workbench.py": "51ef3b32c8053137c4f429bf18fc5fdd31d528dcab294af9483b9d557c627d9b",
"headless_game.py": "6dc834a69078027ea45eb708cff11ddf41c52144a134da4d63d24c288da204b5",
"private_prefix_cleanup.py": "39c4aefc929f1fe7ee2cc1b992e627196a56bfa26000cc1a11890ab43fdabf3f",
"native_provenance.py": "d4777f1f6ffed6993f7009ee2af41b100e8e0138d60ebfdcc5404ff2128f8e2a",
"source_manifest.py": "c1a985348bad16f3b5b69ef7e545b6341eca298d8ae08111b8340b31535cc199",
"native_report.py": "bb75ef5fe551f45776d441f15a49ccad4daf19abca505187f9b2d30102538658",
"archive_native.py": "612bb9057c1d9c191c6a581b4fdd47979810437035a9d0dc9e878acb80e332f0"
},
"cleanup_confirmed": true,
"source_unchanged_after_run": true
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

@@ -0,0 +1,125 @@
---------------------------------------------
Log Z:\tmp\erri-inventory-control-profile\logs\logs_2026-09-19_17-51-37\error.log started at 2026-09-19 17:51:38 (2026-09-19 15:51:38 UTC)
17:51:38.849 INIT : Workbench startup
17:51:38.849 INIT : Workbench Init Engine
17:51:38.849 RESOURCES : ResourceDB: full scan
17:51:38.849 RESOURCES : processing files...
17:51:38.850 RESOURCES (W): resource not registered: @"$logs:launch-source-sha256.json". Setting null GUID
17:51:38.850 RESOURCES (W): resource not registered: @"$logs:launch-source.json". Setting null GUID
17:51:42.081 INIT : Workbench Create Game
17:51:42.081 SCRIPT : Compiling Game scripts
17:51:42.081 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete
17:51:42.081 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete
17:51:42.333 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed
17:51:42.364 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete
17:51:42.462 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete
17:51:42.462 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete
17:51:42.462 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete
17:51:42.463 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete
17:51:42.553 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete
17:51:42.553 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete
17:51:42.554 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete
17:51:42.597 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api.
17:51:42.597 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api.
17:51:42.653 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete
17:51:51.117 WORLD : CreateEntities
17:51:51.117 ENTITY : Create entity @"ENTITY:610406" ('StaticModelEntity','Assets/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.xob') at <1931.796021 81.777000 5138.725098> @"{6A004A8F0571D456}Prefabs/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.et"
17:51:51.117 ENTITY : CreateComponent 'ScriptedRadioComponent'
17:51:51.117 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent.
17:51:59.738 DEFAULT (W): LogiLED: Cannot initialize! (service not running or no compatible device detected)
17:52:03.721 WORLD : Game::LoadEntities
17:52:03.721 WORLD : CreateEntities
17:52:03.721 WORLD : CreateEntities
17:52:03.721 ENTITY : Create entity @"ENTITY:610406" ('StaticModelEntity','Assets/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.xob') at <1931.796021 81.777000 5138.725098> @"{6A004A8F0571D456}Prefabs/Structures/Infrastructure/Towers/TransmitterTower_01/TransmitterTower_01_small.et"
17:52:03.721 ENTITY : CreateComponent 'ScriptedRadioComponent'
17:52:03.721 DEFAULT (W): World doesn't contain RadioManagerEntity to support any BaseRadioComponent.
17:52:05.119 ENTITY : Create entity @"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>
17:52:05.119 ENTITY : CreateComponent 'Hierarchy'
17:52:05.119 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842066" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1080.213013 10.776751 6018.347168>')
17:52:05.119 ENTITY : Create entity @"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>
17:52:05.119 ENTITY : CreateComponent 'Hierarchy'
17:52:05.119 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842068" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1082.185913 10.778749 6018.331055>')
17:52:05.119 ENTITY : Create entity @"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>
17:52:05.119 ENTITY : CreateComponent 'Hierarchy'
17:52:05.119 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842070" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <1084.190918 10.790751 6018.334961>')
17:52:05.124 ENTITY : Create entity @"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>
17:52:05.124 ENTITY : CreateComponent 'Hierarchy'
17:52:05.124 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842333" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4425.594727 9.981750 11029.402344>')
17:52:05.124 ENTITY : Create entity @"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>
17:52:05.124 ENTITY : CreateComponent 'Hierarchy'
17:52:05.124 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842335" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4426.584473 9.983749 11031.109375>')
17:52:05.124 ENTITY : Create entity @"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>
17:52:05.124 ENTITY : CreateComponent 'Hierarchy'
17:52:05.124 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842337" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <4427.572266 9.995750 11032.853516>')
17:52:05.128 ENTITY : Create entity @"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>
17:52:05.128 ENTITY : CreateComponent 'Hierarchy'
17:52:05.128 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842591" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.946289 10.470250 1551.986084>')
17:52:05.128 ENTITY : Create entity @"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>
17:52:05.128 ENTITY : CreateComponent 'Hierarchy'
17:52:05.128 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842593" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10009.430664 10.472250 1550.081421>')
17:52:05.128 ENTITY : Create entity @"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>
17:52:05.128 ENTITY : CreateComponent 'Hierarchy'
17:52:05.128 ENTITY (W): Invalid PivotID 'socket_light_04' in Hierarchy component ('@"ENTITY:842595" ('GameEntity','Assets/Structures/BuildingsParts/Lights/LampTower_01.xob') at <10008.926758 10.484250 1548.140869>')
17:52:08.372 ENTITY : Create entity @"ENTITY:2305843009213693954" ('Factions', SCR_FactionManager) at <0.000000 0.000000 0.000000> @"{589540B35EBA8CDC}Prefabs/MP/Managers/Factions/FactionManager_USxUSSR.et"
17:52:08.372 RESOURCES : GetResourceObject @"{5168FEA3054D6D15}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB_MERDC.et"
17:52:08.372 WORLD : Entity prefab load @"{5168FEA3054D6D15}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB_MERDC.et"
17:52:08.373 RESOURCES : GetResourceObject @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et"
17:52:08.373 WORLD : Entity prefab load @"{F6B23D17D5067C11}Prefabs/Vehicles/Wheeled/M151A2/M151A2_M2HB.et"
17:52:08.373 RESOURCES : GetResourceObject @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
17:52:08.373 WORLD : Entity prefab load @"{F649585ABB3706C4}Prefabs/Vehicles/Wheeled/M151A2/M151A2.et"
17:52:08.373 WORLD (E): Unknown keyword/data 'SlidingTrackMaterial' at offset 19441(0x4bf1)
17:52:08.414 RESOURCES : GetResourceObject @"{F7B9B434FCFF00B3}Prefabs/Vehicles/Wheeled/Conflict_Variants/BRDM2_Conflict.et"
17:52:08.414 WORLD : Entity prefab load @"{F7B9B434FCFF00B3}Prefabs/Vehicles/Wheeled/Conflict_Variants/BRDM2_Conflict.et"
17:52:08.414 RESOURCES : GetResourceObject @"{254289B9C09904AB}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2.et"
17:52:08.414 WORLD : Entity prefab load @"{254289B9C09904AB}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2.et"
17:52:08.414 RESOURCES : GetResourceObject @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
17:52:08.414 WORLD : Entity prefab load @"{532B5F3CF8496E59}Prefabs/Vehicles/Wheeled/BRDM2/BRDM2_base.et"
17:52:08.414 WORLD (E): Unknown keyword/data 'Parent' at offset 35955(0x8c73)
17:52:08.414 WORLD (E): Unknown keyword/data 'Parent' at offset 36915(0x9033)
17:52:08.415 RESOURCES : GetResourceObject @"{BD75A18920BD1278}Prefabs/Vehicles/Wheeled/Conflict_Variants/BTR70_Conflict.et"
17:52:08.415 WORLD : Entity prefab load @"{BD75A18920BD1278}Prefabs/Vehicles/Wheeled/Conflict_Variants/BTR70_Conflict.et"
17:52:08.415 RESOURCES : GetResourceObject @"{C012BB3488BEA0C2}Prefabs/Vehicles/Wheeled/BTR70/BTR70.et"
17:52:08.415 WORLD : Entity prefab load @"{C012BB3488BEA0C2}Prefabs/Vehicles/Wheeled/BTR70/BTR70.et"
17:52:08.415 RESOURCES : GetResourceObject @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
17:52:08.415 WORLD : Entity prefab load @"{1C5FE7B7FF49BB8D}Prefabs/Vehicles/Wheeled/BTR70/BTR70_Base.et"
17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 42646(0xa696)
17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 43645(0xaa7d)
17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 44617(0xae49)
17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 45590(0xb216)
17:52:10.708 WORLD : InitEntities 'world'
17:52:10.708 ENTITY : Init entity @"ENTITY:2305843009213693953" ('InventoryControl', ERRIC_InventoryMode) at <1076.468018 51.000999 1325.246948> @"{86FBBCE45AF62682}Prefabs/ERRIC_InventoryMode.et"
17:52:10.708 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead.
17:52:10.999 ENTITY : SpawnEntityPrefab @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et"
17:52:11.000 ENTITY : Create entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000>
17:52:11.000 ENTITY : EntityPrefabUse @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et"
17:52:11.000 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key!
17:52:11.000 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key!
17:52:11.002 SCRIPT (W): Can't open config file ""
17:52:11.002 WORLD : InitEntities 'world'
17:52:11.002 ENTITY : Init entity @"ENTITY:4611686018427388381" ('SCR_PlayerController') at <0.000000 0.000000 0.000000> @"{225E51284CC95CFA}Prefabs/Characters/Core/DefaultPlayerControllerMP.et"
17:52:11.002 DEFAULT (W): Chat not available - missing ChatEntity. Only printing this message once. There're possibly more nodes with this requirement.
17:52:11.008 GUI : WidgetManager: CrateWidgets @"{3C9DCDD76AB83157}UI/layouts/HUD/HUDLayouts/HUDManager_Root.layout"
17:52:11.008 SCRIPT (W): Slot_WeaponInfo Has no Content!
17:52:11.008 SCRIPT (W): Slot_Chat Has no Content!
17:52:11.008 SCRIPT (W): Slot_VON Has no Content!
17:52:11.008 SCRIPT (W): Slot_AvailableActions Has no Content!
17:52:11.008 SCRIPT (W): Slot_Vehicle Has no Content!
17:52:11.008 SCRIPT (W): Slot_GameVersion Has no Content!
17:52:11.008 SCRIPT (W): Slot_Notifications Has no Content!
17:52:11.009 SCRIPT (W): Slot_Hints Has no Content!
17:52:11.022 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config
17:52:11.315 WORLD : UpdateEntities
17:52:11.316 WORLD : PostFrame
17:52:11.316 GUI : WidgetManager: CrateWidgets @"{D89BBA18F99053D6}UI/layouts/HUD/Chat/ChatHud.layout"
17:52:11.316 SCRIPT (W): EditBoxFilterComponent used on invalid widget type.
17:52:11.356 RESOURCES : GetResourceObject @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout"
17:52:11.357 GUI : Layout load @"{20A6917D2114E29A}UI/layouts/HUD/Hint/HintInfoDisplay.layout"
17:52:11.357 GUI : Widget prefab @"{EA1CC57D868E94F9}UI/layouts/HUD/Hint/Hint.layout"
17:52:11.357 GUI (W): Overridden prefab member (GUID: '{661AB14E0F471C66}' type: ButtonWidgetClass) no longer exists in prefab
17:52:12.145 GUI : Creating menu 'Inventory20Menu'
17:52:12.145 GUI : WidgetManager: CrateWidgets @"{981ACF4F45EAECAE}UI/layouts/Menus/Inventory/InventoryMain.layout"
17:52:12.146 SCRIPT (W): Slot_VON Has no Content!
17:52:12.146 SCRIPT (W): Slot_GameVersion Has no Content!
17:52:12.230 GUI (E): OverlayWidget Frame0 has invalid slot GridWidgetSlot for slot manipulation function used, expected: LayoutSlot
17:52:12.230 GUI (E): OverlayWidget Frame0 has invalid slot GridWidgetSlot for slot manipulation function used, expected: LayoutSlot
@@ -0,0 +1,177 @@
#!/usr/bin/env python3
"""Run bounded native Workbench smoke tests inside a windowless Gamescope display.
Requires Linux, gamescope, Proton, and a disposable COPY of a working Tools compat prefix.
No desktop rules or existing Wine processes are changed. This is not a dedicated server.
"""
import argparse, fcntl, json, os, shutil, signal, subprocess, time
from pathlib import Path
from native_provenance import snapshot, persist, bindings, seal_run
from headless_game import assert_prefix_idle, cleanup_owned_run
ROOT = Path(__file__).resolve().parents[1]
p = argparse.ArgumentParser(description=__doc__)
p.add_argument('--steam', type=Path, default=Path.home()/'.local/share/Steam')
p.add_argument('--compat', type=Path, required=True, help='Disposable cloned Proton compatdata directory outside Steam')
p.add_argument('--profile', type=Path, required=True, help='Separate disposable successor Workbench profile')
p.add_argument('--smoke', choices=['aircraft-route', 'native-end-active', 'native-end-preparing', 'aircraft-control', 'aircraft-cancel', 'aircraft-translate', 'map-ownership', 'mortar-refresh', 'mortar-salvo', 'mortar-courier', 'station-teardown', 'prison-breach', 'powered-flight', 'powered-translate', 'local-admission', 'mortar-expiry', 'mortar-transfer', 'mortar-fire', 'patrol-hq', 'victory', 'lost-helicopter', 'player-death', 'radio-network', 'hq-response', 'mortar-inventory', 'startup-failure', 'site-survey', 'cache-loss', 'extraction-capacity', 'early-helicopter-loss', 'extraction-startup-failure', 'extraction-boundary-failure', 'transport-loss', 'transport-survey', 'lifecycle', 'objective-ui', 'recovery', 'prisoner-kit', 'medical', 'casualty-load', 'casualty-direct', 'casualty-bench', 'casualty-remove', 'environment', 'environment-restart', 'patrols', 'radio-document-loss', 'radio-document-loss-partial', 'guard-cancel', 'casualty-service'], default='victory')
p.add_argument('--station-teardown-diagnostics', action='store_true', help='Opt-in bounded native deletion diagnostics; preserves all validation errors')
p.add_argument('--flight-autohover', action='store_true', help='Opt-in owned native helicopter autohover experiment; requires Core powered-flight and actor-local action inputs')
p.add_argument('--flight-action-inputs', action='store_true', help='Experimental exact-AI ActionManager inputs; Core powered-flight fixture only')
p.add_argument('--flight-input-diagnostics', action='store_true', help='Opt-in read-only powered-flight input/application and native rotor signal observations')
p.add_argument('--rounds', type=int, default=2)
p.add_argument('--timeout', type=int, default=360)
p.add_argument('--project', choices=['core', 'chat'], default='chat', help='Core-only base or full companion integration')
a = p.parse_args()
steam, compat, profile = a.steam.resolve(), a.compat.resolve(), a.profile.resolve()
if not 1 <= a.rounds <= 10 or not 60 <= a.timeout <= 1800:
p.error('Use 1..10 rounds and a 60..1800 second timeout')
if a.smoke == 'mortar-courier' and (a.project != 'chat' or a.rounds != 1 or a.timeout < 500):
p.error('mortar-courier requires --project chat --rounds 1 --timeout at least 500')
if a.smoke in {'mortar-refresh', 'mortar-salvo', 'mortar-expiry', 'mortar-transfer', 'mortar-fire'} and (a.project != 'chat' or a.rounds != 1 or a.timeout < 400):
p.error('mortar-refresh/mortar-salvo/mortar-expiry/mortar-transfer/mortar-fire requires --project chat --rounds 1 --timeout at least 400')
if a.smoke in {'aircraft-route', 'aircraft-control', 'aircraft-cancel', 'aircraft-translate'} and (a.project != 'chat' or a.rounds != 1 or a.timeout < 420): p.error('aircraft-route/aircraft-control/aircraft-cancel/aircraft-translate requires Chat, one round, and at least 420 seconds')
if a.smoke == 'map-ownership' and (a.project != 'chat' or a.rounds != 1 or a.timeout < 180): p.error('map-ownership requires Chat, one round, and at least 180 seconds')
if a.smoke == 'powered-translate' and (a.project != 'core' or not a.flight_action_inputs or not a.flight_autohover): p.error('powered-translate requires Core with flight-action-inputs and flight-autohover')
if a.flight_autohover and (a.project != 'core' or a.smoke not in {'powered-flight', 'powered-translate'} or not a.flight_action_inputs): p.error('flight-autohover requires Core powered-flight with flight-action-inputs')
if a.flight_action_inputs and (a.project != 'core' or a.smoke not in {'powered-flight', 'powered-translate'}): p.error('flight-action-inputs requires the Core powered-flight fixture')
if a.smoke in {'powered-flight', 'powered-translate'} and (a.project != 'core' or a.rounds != 1 or a.timeout < 420): p.error('powered-flight requires Core, one round, and at least 420 seconds')
if a.smoke == 'station-teardown' and (a.project != 'core' or a.rounds != 1): p.error('station-teardown requires --project core --rounds 1')
if a.smoke in {'native-end-active', 'native-end-preparing'}:
if a.project != 'core' or a.rounds != 2 or a.timeout < 120: p.error('native-end fixtures require Core, exactly two rounds and at least 120 seconds')
fixture_names = ['erri-native-end-round.json', 'erri-native-end-round.json.tmp', 'erri-native-end-round.json.bak']
if any((profile/name).exists() or (profile/name).is_symlink() for name in fixture_names): p.error('native-end fixture paths must not preexist; preserve prior evidence before retrying')
if a.smoke == 'environment-restart':
if a.project != 'core' or a.rounds != 2: p.error('environment-restart requires --project core --rounds 2')
fixture_names = ['erri-environment-restart.json', 'erri-environment-restart.json.bak', 'erri-environment-restart.json.tmp', 'erri-environment-restart-round.json']
if any((profile/name).exists() or (profile/name).is_symlink() for name in fixture_names): p.error('environment-restart fixture paths must not preexist; preserve or move prior evidence before retrying')
if compat.is_relative_to(steam) or not (compat/'pfx/system.reg').is_file():
p.error('--compat must be a disposable cloned prefix outside the Steam installation')
prefix_lock = (compat/'.erri-workbench.lock').open('a')
try: fcntl.flock(prefix_lock, fcntl.LOCK_EX | fcntl.LOCK_NB)
except BlockingIOError: p.error('Another test runner owns this disposable Wine prefix')
# The lock must be held before the preflight; never repair a busy prefix here.
try: assert_prefix_idle(compat)
except (OSError,ValueError) as error: p.error(str(error))
if profile.is_relative_to(ROOT) or profile.is_relative_to(steam):
p.error('--profile must be outside source and Steam directories')
if not shutil.which('gamescope') or not shutil.which('pactl'): p.error('gamescope and pactl are required')
wb = steam/'steamapps/common/Arma Reforger Tools/Workbench'
proton = steam/'steamapps/common/Proton - Experimental/proton'
vanilla = steam/'steamapps/common/Arma Reforger/addons/data'
if not proton.is_file() or not (wb/'ArmaReforgerWorkbenchSteamDiag.exe').is_file():
p.error('Stable Reforger Tools and Proton Experimental must already be installed')
profile.mkdir(parents=True, exist_ok=True)
addons = profile/'addons'
addons.mkdir(exist_ok=True)
link = addons/'ArmaReforger'
if not link.exists(): link.symlink_to(vanilla, target_is_directory=True)
if link.resolve() != vanilla.resolve() or any(x.name not in {'ArmaReforger', 'saves'} for x in addons.iterdir()) or any((addons/'saves').rglob('*.gproj')):
p.error('Test profile addons must contain only the intended vanilla link')
profile_arg = 'Z:'+str(profile)
# Refuse concurrency instead of terminating anybody else's editor.
for proc in Path('/proc').iterdir():
if not proc.name.isdigit(): continue
try:
args = (proc/'cmdline').read_bytes().split(b'\0')
if profile_arg.encode() in args and any(x.endswith(b'ArmaReforgerWorkbenchSteamDiag.exe') for x in args):
p.error('Another Workbench already uses this test profile')
except (FileNotFoundError, PermissionError, ProcessLookupError): pass
command = ['gamescope', '--backend', 'headless', '-W', '1280', '-H', '720', '-w', '1280', '-h', '720', '-r', '30', '--', str(proton), 'run', str(wb/'ArmaReforgerWorkbenchSteamDiag.exe'), '-gproj', 'Z:'+str(ROOT/'addons'/a.project/'addon.gproj'), '-addonsDir', 'Z:'+str(ROOT/'addons'), '-profile', profile_arg, '-logconsole', '-wbModule=WorldEditor', '-load', 'Worlds/ERRIC_Inventory.ent', '-plugin=ERR_ValidateWorldPlugin', '-errPlay', '1', '-erricInventoryControl', '1', '-errSmoke', '1', '-errSmokeOutcome', a.smoke, '-noThrow', '-disableCrashReporter']
if a.station_teardown_diagnostics: command += ['-errStationTeardownDiag', '1']
if a.flight_input_diagnostics: command += ['-errFlightInputDiag', '1']
if a.flight_action_inputs: command += ['-errFlightActionInputs', '1']
if a.flight_autohover: command += ['-errFlightAutohover', '1']
if a.project == 'core':
if a.smoke not in {'native-end-active', 'native-end-preparing', 'station-teardown', 'prison-breach', 'powered-flight', 'powered-translate', 'local-admission', 'victory', 'startup-failure', 'site-survey', 'cache-loss', 'extraction-capacity', 'early-helicopter-loss', 'extraction-startup-failure', 'extraction-boundary-failure', 'transport-loss', 'transport-survey', 'lifecycle', 'objective-ui', 'recovery', 'prisoner-kit', 'medical', 'casualty-load', 'casualty-direct', 'casualty-bench', 'casualty-remove', 'environment', 'environment-restart', 'patrols', 'radio-document-loss', 'radio-document-loss-partial', 'guard-cancel', 'casualty-service'}: p.error('Unsupported Core-only fixture')
command[command.index('-plugin=ERR_ValidateWorldPlugin')] = '-plugin=ERRIC_InventoryControlPlugin'
command[command.index('-errSmoke')] = '-errBaseSmoke'
if a.smoke in {'station-teardown', 'prison-breach', 'powered-flight', 'powered-translate', 'local-admission', 'cache-loss', 'extraction-capacity', 'early-helicopter-loss', 'extraction-startup-failure', 'extraction-boundary-failure', 'transport-loss', 'transport-survey', 'lifecycle', 'objective-ui', 'recovery', 'prisoner-kit', 'medical', 'casualty-load', 'casualty-direct', 'casualty-bench', 'casualty-remove', 'environment', 'environment-restart', 'patrols', 'radio-document-loss', 'radio-document-loss-partial', 'guard-cancel', 'casualty-service'} and a.project != 'core': p.error('This fixture requires --project core')
if a.smoke in {'startup-failure', 'site-survey', 'transport-survey', 'extraction-startup-failure', 'extraction-boundary-failure'} and (a.project != 'core' or a.rounds != 1): p.error('This diagnostic requires --project core --rounds 1')
env = os.environ.copy()
env.update(STEAM_COMPAT_DATA_PATH=str(compat), STEAM_COMPAT_CLIENT_INSTALL_PATH=str(steam), WINEPREFIX=str(compat/'pfx'))
# A test-only sink prevents startup sounds; a stream check also catches a saved
# explicit Wine device selection. Never change the user's default sink.
silent_sink = 'erri_tests_silent'
sinks = json.loads(subprocess.check_output(['pactl', '-f', 'json', 'list', 'short', 'sinks'], text=True))
if not any(sink['name'] == silent_sink for sink in sinks):
subprocess.run(['pactl', 'load-module', 'module-null-sink', 'sink_name='+silent_sink, 'sink_properties=device.description=ERRI_Silent_Tests'], check=True, stdout=subprocess.DEVNULL)
subprocess.run(['pactl', 'set-sink-mute', silent_sink, '1'], check=True)
subprocess.run(['pactl', 'set-sink-volume', silent_sink, '0%'], check=True)
sinks = json.loads(subprocess.check_output(['pactl', '-f', 'json', 'list', 'short', 'sinks'], text=True))
silent_index = next(sink['index'] for sink in sinks if sink['name'] == silent_sink)
env.update(PULSE_SINK=silent_sink, PULSE_PROP='application.id=org.escapistsrereintroduced.tests')
muted_streams = set()
def silence_test_streams():
streams = json.loads(subprocess.check_output(['pactl', '-f', 'json', 'list', 'sink-inputs'], text=True))
for stream in streams:
props = stream.get('properties', {})
owned = props.get('application.id') == 'org.escapistsrereintroduced.tests'
pid = props.get('application.process.id', '')
if not owned and pid.isdigit():
try:
target = str(compat/'pfx').encode()
values = (Path('/proc')/pid/'environ').read_bytes().split(b'\0')
owned = any(value.startswith(b'WINEPREFIX=') and value[len(b'WINEPREFIX='):].rstrip(b'/') == target for value in values)
except (FileNotFoundError, PermissionError, ProcessLookupError): pass
if not owned: continue
index = str(stream['index'])
if stream.get('sink') != silent_index:
subprocess.run(['pactl', 'move-sink-input', index, silent_sink], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
if not stream.get('mute'):
subprocess.run(['pactl', 'set-sink-input-mute', index, '1'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
if index not in muted_streams:
muted_streams.add(index)
print('Test audio routed to silent output and muted (stream '+index+')', flush=True)
# Snapshot addon bytes before launching any engine process.
captured_sources = snapshot(ROOT, command)
recorded_sessions = set()
started = time.time()
log_root = profile/'logs'
previous = set(log_root.glob('logs_*')) if log_root.exists() else set()
result, session, complete_at = 'timeout', None, None
runner_error = None
cleanup_ok = True
cleanup_report = None
child = None
with (profile/'headless-launch.log').open('w') as output:
try:
child = subprocess.Popen(command, cwd=wb, env=env, stdout=output, stderr=subprocess.STDOUT, start_new_session=True)
while time.time()-started < a.timeout:
silence_test_streams()
candidates = [x for x in log_root.glob('logs_*') if x not in previous]
if candidates:
session = max(candidates, key=lambda x:x.stat().st_mtime)
if session not in recorded_sessions:
persist(session, captured_sources)
recorded_sessions.add(session)
console = session/'console.log'
content = console.read_text(errors='replace') if console.exists() else ''
if ('Rereintroduced: scenario preparation failed' in content and a.smoke not in {'startup-failure', 'extraction-startup-failure', 'extraction-boundary-failure'}) or 'ERR SMOKE FAIL:' in content or 'Virtual Machine Exception' in content or 'Can\'t compile "Game"' in content:
result = 'test-failed'; break
if content.count('ERR SMOKE COMPLETE:') >= a.rounds:
if complete_at is None: complete_at = time.time()
if time.time()-complete_at >= 6: result = 'smoke-completed'; break
if child.poll() is not None: result = 'process-exited'; break
time.sleep(1)
except KeyboardInterrupt:
result = 'interrupted'
except (OSError,ValueError,subprocess.SubprocessError) as error:
result = 'runner-failed'; runner_error = str(error)
finally:
result_before_cleanup = result
if child is not None:
cleanup_report = cleanup_owned_run(child,proton,env,compat)
cleanup_ok = cleanup_report['cleanup_confirmed']
if not cleanup_ok:
result = 'cleanup-failed'
cleanup_error = '; '.join(cleanup_report['errors'])
runner_error = (runner_error + '; ' if runner_error else '') + cleanup_error
stopped_evidence = seal_run(ROOT, session, captured_sources) if cleanup_ok and session else {}
if stopped_evidence and not stopped_evidence['source_unchanged_after_run']: result = 'source-changed'
summary = {**stopped_evidence, **bindings(captured_sources), 'started_unix':started, 'result':result, 'result_before_cleanup':result_before_cleanup, 'cleanup_confirmed':cleanup_ok, 'cleanup_report':cleanup_report, 'runner_error':runner_error, 'session':str(session) if session else None, 'rounds_required':a.rounds, 'project':a.project, 'display':'headless Gamescope 1280x720/30Hz', 'dedicated_server':False, 'audio':'silent sink and per-test-stream mute'}
if session:
(session/'runner.json').write_text(json.dumps(summary, indent=2)+'\n')
shutil.copyfile(profile/'headless-launch.log', session/'headless-launch.log')
print(json.dumps(summary, indent=2), flush=True)
if result != 'smoke-completed': raise SystemExit(1)
# All native errors still fail the report even when the scripted sequence completed.
raise SystemExit(subprocess.call(['python3', str(ROOT/'tools/native_report.py'), str(session/'console.log'), '--require-completions', str(a.rounds)]))
@@ -0,0 +1,150 @@
[gamescope] [Info] console: gamescope version 3.16.28 (gcc 16.2.1)
No CAP_SYS_NICE, falling back to regular-priority compute and threads.
Performance will be affected.
[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts'
[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope'
[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common'
[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0)
[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1)
[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2)
[gamescope] [Info] scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays'
[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3)
[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4)
[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5)
[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6)
[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7)
[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8)
[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9)
[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10)
[gamescope] [Info] scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11)
[gamescope] [Info] scriptmgr: Loading scripts from: '/etc/gamescope/scripts'
[gamescope] [Warn] scriptmgr: Directory '/etc/gamescope/scripts' does not exist
[gamescope] [Info] scriptmgr: Loading scripts from: '/home/jakub/.config/gamescope/scripts'
[gamescope] [Warn] scriptmgr: Directory '/home/jakub/.config/gamescope/scripts' does not exist
[gamescope] [Info] vulkan: selecting physical device 'AMD Radeon RX 6950 XT (RADV NAVI21)': queue family 1 (general queue family 0)
[gamescope] [Info] vulkan: physical device supports DRM format modifiers
[gamescope] [Info] wlserver: [backend/headless/backend.c:60] Creating headless backend
[gamescope] [Info] vulkan: supported DRM formats for sampling usage:
[gamescope] [Info] vulkan: AR24 (0x34325241)
[gamescope] [Info] vulkan: XR24 (0x34325258)
[gamescope] [Info] vulkan: AB24 (0x34324241)
[gamescope] [Info] vulkan: XB24 (0x34324258)
[gamescope] [Info] vulkan: RG16 (0x36314752)
[gamescope] [Info] vulkan: NV12 (0x3231564E)
[gamescope] [Info] vulkan: AB4H (0x48344241)
[gamescope] [Info] vulkan: XB4H (0x48344258)
[gamescope] [Info] vulkan: AB48 (0x38344241)
[gamescope] [Info] vulkan: XB48 (0x38344258)
[gamescope] [Info] vulkan: AB30 (0x30334241)
[gamescope] [Info] vulkan: XB30 (0x30334258)
[gamescope] [Info] vulkan: AR30 (0x30335241)
[gamescope] [Info] vulkan: XR30 (0x30335258)
[gamescope] [Info] wlserver: Using explicit sync when available
[gamescope] [Info] wlserver: Running compositor on wayland display 'gamescope-0'
[gamescope] [Info] wlserver: [backend/headless/backend.c:17] Starting headless backend
[gamescope] [Info] wlserver: Successfully initialized libei for input emulation!
[gamescope] [Error] wlserver: [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use
[gamescope] [Info] wlserver: [xwayland/server.c:108] Starting Xwayland on :2
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning: Multiple symbols for level 1/group 1 on key <FK23>
> Using F23, ignoring XF86TouchpadOff
> Warning: Symbol map for key <FK23> redefined
> Using last definition for conflicting fields
> Warning: Symbol map for key <FK24> redefined
> Using last definition for conflicting fields
> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOn
> Warning: Could not resolve keysym XF86ElectronicPrivacyScreenOff
> Warning: Could not resolve keysym XF86ActionOnSelection
> Warning: Could not resolve keysym XF86ContextualInsert
> Warning: Could not resolve keysym XF86ContextualQuery
Errors from xkbcomp are not fatal to the X server
[gamescope] [Info] pipewire: stream state changed: connecting
[gamescope] [Info] pipewire: stream state changed: paused
[gamescope] [Info] pipewire: stream available on node ID: 171
[gamescope] [Info] vblank: Using timerfd.
fsync: up and running.
[Gamescope WSI] No application info given.
[Gamescope WSI] Executable name: explorer.exe
ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment.
[Gamescope WSI] Application info:
pApplicationName: xalia.exe
applicationVersion: 0
pEngineName: DXVK
engineVersion: 12587008
apiVersion: 4206592
[Gamescope WSI] Executable name: xalia.exe
ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment.
[Gamescope WSI] No application info given.
[Gamescope WSI] Application info:
pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe
applicationVersion: 1
pEngineName: DXVK
engineVersion: 12587008
apiVersion: 4206592
[Gamescope WSI] Executable name: ArmaReforgerWorkbenchSteamDiag.exe
ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment.
[Gamescope WSI] No application info given.
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning: Unsupported maximum keycode 709, clipping.
> X11 cannot support keycodes above 255.
> Warning: Virtual modifier Hyper multiply defined
> Using 0, ignoring 0
> Warning: Virtual modifier ScrollLock multiply defined
> Using 0, ignoring 0
Errors from xkbcomp are not fatal to the X server
ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment.
[Gamescope WSI] Application info:
pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe
applicationVersion: 0
pEngineName: DXVK
engineVersion: 12587008
apiVersion: 4206592
ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment.
[Gamescope WSI] Application info:
pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe
applicationVersion: 0
pEngineName: vkd3d
engineVersion: 12587008
apiVersion: 4206592
[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1.
ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment.
[Gamescope WSI] No application info given.
ATTENTION: default value of option vk_wsi_force_swapchain_to_current_extent overridden by environment.
[Gamescope WSI] Application info:
pApplicationName: ArmaReforgerWorkbenchSteamDiag.exe
applicationVersion: 0
pEngineName: vkd3d
engineVersion: 12587008
apiVersion: 4206592
[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1.
[Gamescope WSI] Creating Gamescope surface: xid: 0x1a001a4
[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL.
[Gamescope WSI] Made gamescope surface for xid: 0x1a001a4
[Gamescope WSI] Surface state:
steam app id: 1874910
window xid: 0x1a001a4
wayland surface res id: 5
layer client flags: 0x4
server hdr output enabled: false
hdr formats exposed to client: false
[Gamescope WSI] Creating Gamescope surface: xid: 0x1a0039a
[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL.
[Gamescope WSI] Made gamescope surface for xid: 0x1a0039a
[Gamescope WSI] Surface state:
steam app id: 1874910
window xid: 0x1a0039a
wayland surface res id: 10
layer client flags: 0x4
server hdr output enabled: false
hdr formats exposed to client: false
[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false
[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55556c0a4590 - imageCount: 4
[Gamescope WSI] Destroying swapchain: 0x55556c0a4590
[Gamescope WSI] Destroyed swapchain: 0x55556c0a4590
[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false
[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55556c0ad970 - imageCount: 4
[Gamescope WSI] Destroying swapchain: 0x55556c0ad970
[Gamescope WSI] Destroyed swapchain: 0x55556c0ad970
[Gamescope WSI] Creating swapchain for xid: 0x1a0039a - oldSwapchain: (nil) - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: false
[Gamescope WSI] Created swapchain for xid: 0x1a0039a swapchain: 0x55556c0ad8e0 - imageCount: 4
[gamescope] [Info] launch: Primary child shut down!
@@ -0,0 +1,11 @@
{
"addons/core/Prefabs/ERRIC_InventoryMode.et": "98408ab80347058f5b79b1103b849b19beaeb97a9ff81662b59fe6100ddd6bf8",
"addons/core/Prefabs/ERRIC_InventoryMode.et.meta": "6b4f66f296d15e7e5f82928cf1bdfa58f085421ae9b6f24afc5ac922d2a8781e",
"addons/core/README.md": "29f7086ee223b1cfe657932c7f236a1640876503f69f6f401451c72a5452695d",
"addons/core/Scripts/Game/ERRIC/ERRIC_InventoryControl.c": "8707f35ecf48813bc4e72c599fe2527c44807493496218d18e89aa8739eb59f9",
"addons/core/Scripts/WorkbenchGame/ERRIC/ERRIC_InventoryControlPlugin.c": "000d8fa3aa6412a5adb1561333f840f27185dc42fa61569c311b0607df0f2420",
"addons/core/Worlds/ERRIC_Inventory.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87",
"addons/core/Worlds/ERRIC_Inventory.ent.meta": "ca0420504016fa2aa7220712d13b7bf7748832d8d58b085afc4373f4abeb1339",
"addons/core/Worlds/ERRIC_Inventory_Layers/default.layer": "80a5f0b6c1bc8761469ea69978967dffc070ba9f98c5125430a78a506684c39e",
"addons/core/addon.gproj": "18dd7db85574119fac5057091c4d9991b247855f67f06bb86cf440f429b5911f"
}
@@ -0,0 +1,47 @@
{
"schema_version": 1,
"launch_id": "99540179-94f8-445b-929d-c62736422ca6",
"captured_unix": 1789833095.6024835,
"source_root": "/tmp/erri-inventory-control-run-qgy2j0cn",
"command": [
"gamescope",
"--backend",
"headless",
"-W",
"1280",
"-H",
"720",
"-w",
"1280",
"-h",
"720",
"-r",
"30",
"--",
"/home/jakub/.local/share/Steam/steamapps/common/Proton - Experimental/proton",
"run",
"/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe",
"-gproj",
"Z:/tmp/erri-inventory-control-run-qgy2j0cn/addons/core/addon.gproj",
"-addonsDir",
"Z:/tmp/erri-inventory-control-run-qgy2j0cn/addons",
"-profile",
"Z:/tmp/erri-inventory-control-profile",
"-logconsole",
"-wbModule=WorldEditor",
"-load",
"Worlds/ERRIC_Inventory.ent",
"-plugin=ERRIC_InventoryControlPlugin",
"-errPlay",
"1",
"-erricInventoryControl",
"1",
"-errBaseSmoke",
"1",
"-errSmokeOutcome",
"victory",
"-noThrow",
"-disableCrashReporter"
],
"manifest_sha256": "dce78f7c31b68b44e381cd9c152c999daecf1b08c783dfbcb6e4920b0a65ef42"
}
@@ -0,0 +1,19 @@
{
"log": "docs/evidence/inventory-control-2026-09-19-stock-first/console.log.txt",
"smoke_completions": 1,
"assertions_passed": 13,
"script_or_runtime_failures": [],
"engine_errors": [
"17:52:08.373 WORLD (E): Unknown keyword/data 'SlidingTrackMaterial' at offset 19441(0x4bf1)",
"17:52:08.414 WORLD (E): Unknown keyword/data 'Parent' at offset 35955(0x8c73)",
"17:52:08.414 WORLD (E): Unknown keyword/data 'Parent' at offset 36915(0x9033)",
"17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 42646(0xa696)",
"17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 43645(0xaa7d)",
"17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 44617(0xae49)",
"17:52:08.415 WORLD (E): Unknown keyword/data 'Parent' at offset 45590(0xb216)",
"17:52:12.230 GUI (E): OverlayWidget Frame0 has invalid slot GridWidgetSlot for slot manipulation function used, expected: LayoutSlot",
"17:52:12.230 GUI (E): OverlayWidget Frame0 has invalid slot GridWidgetSlot for slot manipulation function used, expected: LayoutSlot"
],
"missing_end_screen": [],
"scope": "scripted local Workbench integration only; no multiplayer, piloting or FPS claim"
}
@@ -0,0 +1,37 @@
{
"stopped_unix": 1789833140.8067544,
"console_sha256": "ff13d06afc48ac38034d6e6ebd1a0bcd0c4fb879e7253d599b1a17127ac9bcef",
"end_source_sha256": "dce78f7c31b68b44e381cd9c152c999daecf1b08c783dfbcb6e4920b0a65ef42",
"source_unchanged_after_run": true,
"source_provenance": "launch_snapshot",
"launch_id": "99540179-94f8-445b-929d-c62736422ca6",
"launch_source_manifest": "launch-source-sha256.json",
"launch_source_metadata": "launch-source.json",
"launch_source_sha256": "dce78f7c31b68b44e381cd9c152c999daecf1b08c783dfbcb6e4920b0a65ef42",
"started_unix": 1789833095.6025398,
"result": "smoke-completed",
"result_before_cleanup": "smoke-completed",
"cleanup_confirmed": true,
"cleanup_report": {
"cleanup_confirmed": true,
"idle_verified": true,
"errors": [],
"orphan_cleanup": {
"attempted": true,
"report": {
"scope": "/tmp/erri-headless-compat/pfx",
"candidates": [],
"term_sent": [],
"kill_sent": [],
"cleared": true
}
}
},
"runner_error": null,
"session": "/tmp/erri-inventory-control-profile/logs/logs_2026-09-19_17-51-37",
"rounds_required": 1,
"project": "core",
"display": "headless Gamescope 1280x720/30Hz",
"dedicated_server": false,
"audio": "silent sink and per-test-stream mute"
}
@@ -0,0 +1,63 @@
---------------------------------------------
Log Z:\tmp\erri-inventory-control-profile\logs\logs_2026-09-19_17-51-37\script.log started at 2026-09-19 17:51:40 (2026-09-19 15:51:40 UTC)
17:51:40.169 SCRIPT : SCRIPT : Initializing scripts
17:51:40.169 SCRIPT : SCRIPT : ScriptProjectManager init
17:51:41.042 SCRIPT : SCRIPT : Compiling GameLib scripts
17:51:41.094 SCRIPT : Module: Workbench; loaded 18x files; 36x classes; used 125K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 90ce0460
17:51:41.094 SCRIPT : Module: GameLib; loaded 465x files; 648x classes; used 828K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 4507af04
17:51:41.095 SCRIPT : SCRIPT : Compiling Game scripts
17:51:42.081 SCRIPT : Compiling Game scripts
17:51:42.081 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,785": 'GetPlayerPlatformKind' is obsolete
17:51:42.081 SCRIPT (W): @"Scripts/Game/Editor/Components/EditableEntity/SCR_EditableEntityComponent.c,786": 'GetPlayerPlatformId' is obsolete
17:51:42.333 SCRIPT (W): @"Scripts/Game/Workshop/SCR_AddonManager.c,876": 'GetRefCount' is obsolete: Will be removed
17:51:42.364 SCRIPT (W): @"Scripts/Game/Campaign/SCR_PlayerProfileManagerComponent.c,142": 'PlayerData' is obsolete
17:51:42.462 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,159": 'GetDSSession' is obsolete
17:51:42.462 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,162": 'RoomID' is obsolete
17:51:42.462 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,197": 'GetDSSession' is obsolete
17:51:42.463 SCRIPT (W): @"Scripts/Game/UI/Backend/CareerBackend.c,201": 'RoomID' is obsolete
17:51:42.553 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,481": 'GetStorage' is obsolete
17:51:42.553 SCRIPT (W): @"Scripts/Game/DataCollection/SCR_DataCollectorComponent.c,483": 'GetOnlineWritePrivilege' is obsolete
17:51:42.554 SCRIPT (W): @"Scripts/Game/Utilities/SCR_PlayerIdentityUtils.c,20": 'GetPlayerIdentityId' is obsolete
17:51:42.597 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,643": 'GetNotifyCount' is obsolete: Will be substitued by Notification Api.
17:51:42.597 SCRIPT (W): @"Scripts/Game/UI/Menu/MainMenuUI.c,645": 'GetNotifyItem' is obsolete: Will be substitued by Notification Api.
17:51:42.653 SCRIPT (W): @"Scripts/Game/DataCollection/PlayerData/SCR_PlayerData.c,210": 'PlayerData' is obsolete
17:51:42.918 SCRIPT : Module: WorkbenchGame; loaded 171x files; 616x classes; used 2478K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE"; CRC32: 19ac36c1
17:51:42.924 SCRIPT : Module: Game; loaded 5661x files; 11084x classes; used 32146K of static memory; defines: "ENF_WB,WORKBENCH,PLATFORM_WINDOWS,ENABLE_DIAG,ENF_ENABLE_VHC_OVERRIDE,ENF_ENABLE_RPLCOMPONENT_IN_GAMECODE,ENABLE_BASE_DESTRUCTION,BUDGET_OPTIMIZATION_CHECKS,SHOW_DISCLAIMER,DEBUG,RESPAWN_TIMER_COMPONENT_DEBUG,GAME_MODE_DEBUG,DEBUG_CONFIGURABLE_DIALOGS,DISABLE_WEAPON_SWITCHING,SCRIPTED_AIM_MODIFIER_DEBUG"; CRC32: c1afc005
17:51:43.860 SCRIPT : Unable to register a script command due keyword duplicity: ban
17:51:43.860 SCRIPT : Unable to register a script command due keyword duplicity: kick
17:51:59.735 SCRIPT : Unable to register a script command due keyword duplicity: ban
17:51:59.735 SCRIPT : Unable to register a script command due keyword duplicity: kick
17:52:10.708 SCRIPT (W): SCR_PerceivedFactionManagerComponent trying to set fall back faction 'CIV' but this faction could not be found so it is null instead.
17:52:11.000 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_PUNISHMENT_KILLING_SET'. There should only be one of each key!
17:52:11.000 SCRIPT (W): Notification data in 'SCR_NotificationsLogDisplay' has duplicate notification info key: 'EDITOR_PERCEIVED_FACTION_TYPE_DISABLED'. There should only be one of each key!
17:52:11.002 SCRIPT (W): Can't open config file ""
17:52:11.008 SCRIPT (W): Slot_WeaponInfo Has no Content!
17:52:11.008 SCRIPT (W): Slot_Chat Has no Content!
17:52:11.008 SCRIPT (W): Slot_VON Has no Content!
17:52:11.008 SCRIPT (W): Slot_AvailableActions Has no Content!
17:52:11.008 SCRIPT (W): Slot_Vehicle Has no Content!
17:52:11.008 SCRIPT (W): Slot_GameVersion Has no Content!
17:52:11.008 SCRIPT (W): Slot_Notifications Has no Content!
17:52:11.009 SCRIPT (W): Slot_Hints Has no Content!
17:52:11.022 SCRIPT (W): Ban Settings could not be loaded from BE Storage: Relying on default config
17:52:11.072 SCRIPT : ERR SMOKE PASS: vanilla inventory control: real local controller initially unassigned
17:52:11.072 SCRIPT : ERR SMOKE PASS: vanilla inventory control: installed unmodified US_Unarmed resource
17:52:11.140 SCRIPT : ERR SMOKE PASS: vanilla inventory control: one stock body spawned
17:52:11.141 SCRIPT : ERR SMOKE PASS: vanilla inventory control: native fixture-only body assignment succeeded
17:52:11.141 SCRIPT : ERR SMOKE PASS: vanilla inventory control: stock inventory component present
17:52:11.141 SCRIPT : ScenarioFramework: Available tasks are empty, no new tasks will be generated.
17:52:11.155 SCRIPT : SCR_BaseGameMode::OnGameStateChanged = GAME
17:52:11.316 SCRIPT (W): EditBoxFilterComponent used on invalid widget type.
17:52:12.136 SCRIPT : ERR SMOKE PASS: vanilla inventory control: inventory initially closed
17:52:12.146 SCRIPT (W): Slot_VON Has no Content!
17:52:12.146 SCRIPT (W): Slot_GameVersion Has no Content!
17:52:12.663 SCRIPT : ERR SMOKE PASS: vanilla inventory control: actual native Inventory20Menu opened
17:52:12.664 SCRIPT : ERR SMOKE PASS: vanilla inventory control: menu bound to exact stock body
17:52:12.664 SCRIPT : ERR SMOKE PASS: vanilla inventory control: native inventory root and top menu
17:52:12.664 SCRIPT : ERR SMOKE PASS: vanilla inventory control: stock storage-list parent is native GridLayoutWidget
17:52:12.664 SCRIPT : ERR SMOKE PASS: vanilla inventory control: stock Frame0 is direct child of native storage grid
17:52:12.664 SCRIPT : ERRIC INVENTORY GEOMETRY: parent=StoragesListSlot type=224354160 child=Frame0 type=134171936
17:52:13.239 SCRIPT : ERR SMOKE PASS: vanilla inventory control: same native menu retained for delayed capture
17:52:13.762 SCRIPT : ERR SMOKE PASS: vanilla inventory control: native inventory closed with original body retained
17:52:13.762 SCRIPT : ERR SMOKE COMPLETE: vanilla inventory control; direct native API experiment only, no successor or input qualification
@@ -0,0 +1,4 @@
{
"schema_version": 1,
"kind": "launch_snapshot"
}
@@ -0,0 +1,11 @@
{
"addons/core/Prefabs/ERRIC_InventoryMode.et": "98408ab80347058f5b79b1103b849b19beaeb97a9ff81662b59fe6100ddd6bf8",
"addons/core/Prefabs/ERRIC_InventoryMode.et.meta": "6b4f66f296d15e7e5f82928cf1bdfa58f085421ae9b6f24afc5ac922d2a8781e",
"addons/core/README.md": "29f7086ee223b1cfe657932c7f236a1640876503f69f6f401451c72a5452695d",
"addons/core/Scripts/Game/ERRIC/ERRIC_InventoryControl.c": "8707f35ecf48813bc4e72c599fe2527c44807493496218d18e89aa8739eb59f9",
"addons/core/Scripts/WorkbenchGame/ERRIC/ERRIC_InventoryControlPlugin.c": "000d8fa3aa6412a5adb1561333f840f27185dc42fa61569c311b0607df0f2420",
"addons/core/Worlds/ERRIC_Inventory.ent": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87",
"addons/core/Worlds/ERRIC_Inventory.ent.meta": "ca0420504016fa2aa7220712d13b7bf7748832d8d58b085afc4373f4abeb1339",
"addons/core/Worlds/ERRIC_Inventory_Layers/default.layer": "80a5f0b6c1bc8761469ea69978967dffc070ba9f98c5125430a78a506684c39e",
"addons/core/addon.gproj": "18dd7db85574119fac5057091c4d9991b247855f67f06bb86cf440f429b5911f"
}