fix(satisfactory): official SteamCMD server, and builder uses SteamCMD only for Linux Steam servers #27

Merged
git_pipeline merged 4 commits from fix/satisfactory-steamcmd into main 2026-11-07 02:20:49 +00:00
Member

Two fixes: the Satisfactory template itself, and the AI builder so it doesn't make that broken template again.

1. Satisfactory template (games/satisfactory-vanilla-stable)

The wolveix/satisfactory-server image kept game files and saves in /config and /home/steam, outside the server volume. Saves were lost on every container recreate, the weekly boot test failed, and the AI repair looped because it can't change the image.

  • cm2network/steamcmd + installMethod: STEAMCMD, app 1690800 (anonymous)
  • HOME=/server, so saves land in .config/Epic/FactoryGame/Saved/SaveGames inside the volume
  • Ports 7777/udp, 7777/tcp, 8888/tcp; -ExternalReliablePort={PUBLIC_PORT_8888} for offset/relay ports
  • Settings that actually reach the server: the startup command writes Game.ini (Max Players) and Engine.ini (autosave count, tick rate, connection timeout, max objects, server streaming) before every start; Disable Seasonal Events and Multihome go in as launch options
  • Dropped wolveix-only settings (PUID/PGID, Debug, Skip Update, VM override, Steam beta fields)
  • Backups: SaveGames + FactoryGame/Saved/Config
  • test.yaml: timeoutSec: 2400 for the SteamCMD install

No readyPattern yet: the boot test checks the server stays up and listens on all three ports. Add the real ready line after the first boot.

2. AI builder (cmd/gbrgames/research.go, AUTHORING.md)

Why the builder produced the broken template: research offered the community image as its own option next to SteamCMD, and the draft carried over that image's env var names, which the official server never reads.

  • research.go: when a game has a Linux server on Steam, SteamCMD is the only option. Community images are dropped, even when the model lists them as a separate variant (steamCMDOnly). The research prompt says the same.
  • AUTHORING.md (the builder's rules):
    • "The image: SteamCMD first": no community images for Linux Steam servers; export HOME=/server; for servers that save under $HOME (Unreal: ~/.config/Epic/<Game>/Saved), with matching backupPaths
    • Settings: every setting must reach the server (config file, launch option, or an ini the startup command writes); for servers with several ini files, write each from the startup command; never reuse a community image's variable names
    • Ports: list both protocols; announce secondary ports with {PUBLIC_PORT_n}
  • Tests updated for the SteamCMD-only route.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MZxvxViV6QwAtVWT3saGvs

Two fixes: the Satisfactory template itself, and the AI builder so it doesn't make that broken template again. ## 1. Satisfactory template (`games/satisfactory-vanilla-stable`) The `wolveix/satisfactory-server` image kept game files and saves in `/config` and `/home/steam`, outside the server volume. Saves were lost on every container recreate, the weekly boot test failed, and the AI repair looped because it can't change the image. - `cm2network/steamcmd` + `installMethod: STEAMCMD`, app `1690800` (anonymous) - `HOME=/server`, so saves land in `.config/Epic/FactoryGame/Saved/SaveGames` inside the volume - Ports `7777/udp`, `7777/tcp`, `8888/tcp`; `-ExternalReliablePort={PUBLIC_PORT_8888}` for offset/relay ports - Settings that actually reach the server: the startup command writes `Game.ini` (Max Players) and `Engine.ini` (autosave count, tick rate, connection timeout, max objects, server streaming) before every start; Disable Seasonal Events and Multihome go in as launch options - Dropped wolveix-only settings (PUID/PGID, Debug, Skip Update, VM override, Steam beta fields) - Backups: SaveGames + `FactoryGame/Saved/Config` - `test.yaml`: `timeoutSec: 2400` for the SteamCMD install No `readyPattern` yet: the boot test checks the server stays up and listens on all three ports. Add the real ready line after the first boot. ## 2. AI builder (`cmd/gbrgames/research.go`, `AUTHORING.md`) Why the builder produced the broken template: research offered the community image as its own option next to SteamCMD, and the draft carried over that image's env var names, which the official server never reads. - `research.go`: when a game has a Linux server on Steam, SteamCMD is the **only** option. Community images are dropped, even when the model lists them as a separate variant (`steamCMDOnly`). The research prompt says the same. - `AUTHORING.md` (the builder's rules): - "The image: SteamCMD first": no community images for Linux Steam servers; `export HOME=/server;` for servers that save under `$HOME` (Unreal: `~/.config/Epic/<Game>/Saved`), with matching `backupPaths` - Settings: every setting must reach the server (config file, launch option, or an ini the startup command writes); for servers with several ini files, write each from the startup command; never reuse a community image's variable names - Ports: list both protocols; announce secondary ports with `{PUBLIC_PORT_n}` - Tests updated for the SteamCMD-only route. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01MZxvxViV6QwAtVWT3saGvs
git_pipeline added 2 commits 2026-11-07 01:46:00 +00:00
fix(satisfactory): run the official SteamCMD server instead of wolveix/satisfactory-server
Validate game templates / validate (push) Successful in 45s
Validate game templates / boot-test (push) Successful in 5m57s
Validate game templates / publish (push) Skipped
b9d445c57d
The wolveix image keeps its game files and saves in /config and /home/steam, outside the server volume, so they were lost on every start and the weekly boot test failed. Now: cm2network/steamcmd with Steam app 1690800, HOME=/server, ports 7777/udp+tcp and 8888/tcp, MaxPlayers in Game.ini, -ExternalReliablePort for the public reliable port.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MZxvxViV6QwAtVWT3saGvs
test(satisfactory): allow 40 minutes for the SteamCMD install and first start
Validate game templates / validate (push) Successful in 19s
Validate game templates / boot-test (push) Successful in 3m48s
Validate game templates / publish (push) Skipped
5c192127f4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MZxvxViV6QwAtVWT3saGvs
git_pipeline added 1 commit 2026-11-07 01:54:27 +00:00
fix(satisfactory): restore server settings, written to Game.ini/Engine.ini each start
Validate game templates / validate (push) Successful in 19s
Validate game templates / boot-test (push) Successful in 4m2s
Validate game templates / publish (push) Skipped
a918704ec6
The official server reads no env vars, so the startup command writes Max Players, autosave count, tick rate, timeout, object limit and server streaming into its ini files, and passes seasonal events and multihome as launch options.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MZxvxViV6QwAtVWT3saGvs
git_pipeline added 1 commit 2026-11-07 02:16:22 +00:00
fix(builder): SteamCMD is the only option for Linux Steam servers; settings must reach the server
Validate game templates / validate (push) Successful in 20s
Validate game templates / boot-test (push) Successful in 3m49s
Validate game templates / publish (push) Skipped
1902c62366
git_pipeline changed title from fix(satisfactory): run the official SteamCMD server instead of wolveix to fix(satisfactory): official SteamCMD server, and builder uses SteamCMD only for Linux Steam servers 2026-11-07 02:17:08 +00:00
git_pipeline merged commit ac3febf109 into main 2026-11-07 02:20:49 +00:00
git_pipeline deleted branch fix/satisfactory-steamcmd 2026-11-07 02:20:49 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gbreed-public/gbr-games#27