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.
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
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}
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
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
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
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 servers2026-11-07 02:17:08 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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-serverimage kept game files and saves in/configand/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, app1690800(anonymous)HOME=/server, so saves land in.config/Epic/FactoryGame/Saved/SaveGamesinside the volume7777/udp,7777/tcp,8888/tcp;-ExternalReliablePort={PUBLIC_PORT_8888}for offset/relay portsGame.ini(Max Players) andEngine.ini(autosave count, tick rate, connection timeout, max objects, server streaming) before every start; Disable Seasonal Events and Multihome go in as launch optionsFactoryGame/Saved/Configtest.yaml:timeoutSec: 2400for the SteamCMD installNo
readyPatternyet: 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):export HOME=/server;for servers that save under$HOME(Unreal:~/.config/Epic/<Game>/Saved), with matchingbackupPaths{PUBLIC_PORT_n}🤖 Generated with Claude Code
https://claude.ai/code/session_01MZxvxViV6QwAtVWT3saGvs
fix(satisfactory): run the official SteamCMD server instead of wolveixto fix(satisfactory): official SteamCMD server, and builder uses SteamCMD only for Linux Steam servers