Steam was reaching state 0x6 with BytesToDownload=0, a known stuck-mid-update
pattern that resolves when SteamCMD is told to validate. Also stop relying on
the "Success!" stdout marker, which is missing in many real successes — compare
the buildid in appmanifest before and after instead.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The mmmaxwwwell SE image calls steamcmd with +login before +force_install_dir,
which Steam rejects ("Please use force_install_dir before logon!"), so container
restarts never actually update the game. The new handler runs SteamCMD in a
sibling one-shot container with the correct argument order, mounting the same
volumes as the live container, then leaves the server stopped for the operator
to start. The version cache is invalidated after a successful update so the UI
shows the new build immediately.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Switched Minecraft server from All the Mods 10 to Biohazard: Project Genesis
(Beta 0.4.5, MC 1.20.1 + Forge 47.4.0). Updated server name, Discord bot
display, frontend modpack link, and documentation.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add findSteamCmd() helper that searches common locations
- Provide path hints per server type as fallback
- Remove hardcoded paths, more robust for different setups
- Check /usr/games/steamcmd, ~/steamcmd/, ~/Steam/ etc.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create generic SteamCMD handler factory for reusable update logic
- Check build IDs via appmanifest files and Steam API
- Support V Rising (1829350), Palworld (2394010), Zomboid (380870), tModLoader (1281930)
- Show update button for all supported server types in UI
- Minecraft, OpenTTD, Hytale marked as manual-update-only
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>