From 39cb8647c7a3328fd7f8a7049752c7b20840e8fe Mon Sep 17 00:00:00 2001 From: arcattack Date: Mon, 27 Jul 2026 09:18:37 -0500 Subject: [PATCH] launcher logs: rotate, never delete -- and solo/joyconfig must stop destroying the MULTIPLAYER log Prompted by "does the steam path still generate our logs?". Answer: yes -- play_steam.bat sets BT_LOG=steam.log with append, and matchlogs arm because both Steam launch paths pass -net (the default trigger). But the audit found two evidence-destroying bugs on the way: 1. play_steam.bat DELETED the previous steam.log at every launch -- the same pattern fixed in join.bat/join_lan.bat last night. A Steam player who crashes and relaunches loses the stack. Now rotates to steam.old.log. 2. WORSE: play_solo.bat and joyconfig.bat deleted content\join.log -- the MULTIPLAYER log, not theirs. A player who crashed in MP and then ran solo to investigate (or ran the joystick wizard) DESTROYED THEIR OWN CRASH EVIDENCE. That is a very plausible part of how Conn Man's owens-laser stack vanished (#35) -- he had every reason to poke around after crashing. Each bat now writes its OWN log (solo.log / joyconfig.log), rotates it, and never touches join.log. Their launch-forensics + "send the operator" lines are repointed to match. VERIFIED in the zip layout (the bats need build\ + content\ beside them, so a repo-relative test is meaningless -- my first two attempts hit the badpath guard and proved nothing): solo.log = [boot] btl4 4.11.599 ... (the NEW run) solo.old.log = OLD-SOLO-CONTENT (rotated, not deleted) join.log = SEEDED-MP-EVIDENCE (untouched by the solo run) Co-Authored-By: Claude Opus 5 (1M context) --- players/joyconfig.bat | 13 +++++++++---- players/play_solo.bat | 16 +++++++++++----- players/play_steam.bat | 5 ++++- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/players/joyconfig.bat b/players/joyconfig.bat index 1a058ff..c43fb2e 100644 --- a/players/joyconfig.bat +++ b/players/joyconfig.bat @@ -15,8 +15,13 @@ set BT_START_INSIDE=1 set BT_DEV_GAUGES=1 rem one fresh log per bat run; the menu->game relaunch chain APPENDS rem so every generation's lines survive (0-byte logs = killed pre-start) -if exist content\join.log del content\join.log -set BT_LOG=join.log +rem KEEP the previous run's log (a crash report died 2026-07-26 because a +rem re-run deleted the only evidence). Rotate, never delete. +rem ...and do NOT touch join.log (the MULTIPLAYER log) -- the wizard used to +rem delete a player's MP crash evidence. The wizard writes joyconfig.log. +if exist content\joyconfig.old.log del content\joyconfig.old.log +if exist content\joyconfig.log ren content\joyconfig.log joyconfig.old.log +set BT_LOG=joyconfig.log set BT_LOG_APPEND=1 set BT_FE_SOLO=1 cd content @@ -27,8 +32,8 @@ echo [%DATE% %TIME%] launching btl4.exe > launch_report.txt ..\build\Release\btl4.exe set BT_EXITCODE=%ERRORLEVEL% echo [%DATE% %TIME%] btl4.exe exited with code %BT_EXITCODE% >> launch_report.txt -if not exist join.log echo join.log WAS NEVER CREATED: the exe was blocked before it could run (loader failure or antivirus) >> launch_report.txt -if exist join.log for %%A in (join.log) do echo join.log size: %%~zA bytes >> launch_report.txt +if not exist joyconfig.log echo joyconfig.log WAS NEVER CREATED: the exe was blocked before it could run (loader failure or antivirus) >> launch_report.txt +if exist joyconfig.log for %%A in (joyconfig.log) do echo joyconfig.log size: %%~zA bytes >> launch_report.txt exit /b :badpath echo. diff --git a/players/play_solo.bat b/players/play_solo.bat index a7edf1e..7466cfa 100644 --- a/players/play_solo.bat +++ b/players/play_solo.bat @@ -14,8 +14,14 @@ set BT_START_INSIDE=1 set BT_DEV_GAUGES=1 rem one fresh log per bat run; the menu->game relaunch chain APPENDS rem so every generation's lines survive (0-byte logs = killed pre-start) -if exist content\join.log del content\join.log -set BT_LOG=join.log +rem KEEP the previous run's log (a crash report died 2026-07-26 because a +rem re-run deleted the only evidence). Rotate, never delete. +rem ...and do NOT touch join.log: that is the MULTIPLAYER log. A player who +rem crashed in MP and then ran solo to investigate used to destroy their own +rem crash evidence. Solo writes solo.log. +if exist content\solo.old.log del content\solo.old.log +if exist content\solo.log ren content\solo.log solo.old.log +set BT_LOG=solo.log set BT_LOG_APPEND=1 set BT_FE_SOLO=1 cd content @@ -26,8 +32,8 @@ echo [%DATE% %TIME%] launching btl4.exe > launch_report.txt ..\build\Release\btl4.exe set BT_EXITCODE=%ERRORLEVEL% echo [%DATE% %TIME%] btl4.exe exited with code %BT_EXITCODE% >> launch_report.txt -if not exist join.log echo join.log WAS NEVER CREATED: the exe was blocked before it could run (loader failure or antivirus) >> launch_report.txt -if exist join.log for %%A in (join.log) do echo join.log size: %%~zA bytes >> launch_report.txt +if not exist solo.log echo solo.log WAS NEVER CREATED: the exe was blocked before it could run (loader failure or antivirus) >> launch_report.txt +if exist solo.log for %%A in (solo.log) do echo solo.log size: %%~zA bytes >> launch_report.txt rem ------------------------------------------------------------------ rem HANDOFF WAIT (2026-07-25). The front end does NOT stay resident: it @@ -59,7 +65,7 @@ if defined BT_STILL_RUNNING ( ) echo. echo The game has exited. If it closed unexpectedly, -echo send the operator content\join.log. +echo send the operator content\solo.log. pause exit /b :badpath diff --git a/players/play_steam.bat b/players/play_steam.bat index 19284dc..54f0bca 100644 --- a/players/play_steam.bat +++ b/players/play_steam.bat @@ -9,7 +9,10 @@ if not exist "build\Release\btl4.exe" goto badpath if not exist "content\BTL4.RES" goto badpath set BT_PLATFORM=glass set BT_STEAM_NET=1 -if exist content\steam.log del content\steam.log +rem KEEP the previous run's log (a crash report died 2026-07-26 because a +rem re-run deleted the only evidence). Rotate, never delete. +if exist content\steam.old.log del content\steam.old.log +if exist content\steam.log ren content\steam.log steam.old.log set BT_LOG=steam.log set BT_LOG_APPEND=1 rem Cockpit view + MFD gauges -- the same client flags the join bats set