Drafted by the GBR AI builder. Review before merging: check the settings, ports and descriptions against the game's documentation.
Game: Satisfactory — Satisfactory Dedicated Server (SteamCMD / Linux)
Image: cm2network/steamcmd, Steam app 1690800
Model rounds: 3
Checked for real
image cm2network/steamcmd exists
Steam app 1690800 is "Satisfactory Dedicated Server"
it ships a Linux server, so the SteamCMD option (installing it into /server) is recommended
first boot of cm2network/steamcmd: running and quiet for 121s after 153s; stopped gracefully
boot test with the node-agent: PASSED: READY: [2026.10.26-03.52.37:993][899]LogServer: Display: Server startup time elapsed and saving/level loading is done, auto-pause is allowed to proceed from now on (if enabled in server settings). WorldTimeSeconds = 30.07
Notes from research: Native Linux build (FactoryServer.sh) — no Proton needed. Install with: steamcmd +force_install_dir /server +login anonymous +app_update 1690800 validate +quit. Experimental branch: add -beta experimental to the app_update command. No console crossplay (PC Steam/Epic only). 8–16 GB RAM recommended; heavily favors single-core CPU. Mod support via ficsit.app (SML). Server is free to download; no game purchase required for the server itself.
Drafted by the GBR AI builder. **Review before merging**: check the settings, ports and descriptions against the game's documentation.
- Game: **Satisfactory** — Satisfactory Dedicated Server (SteamCMD / Linux)
- Image: `cm2network/steamcmd`, Steam app 1690800
- Model rounds: 3
**Checked for real**
- image cm2network/steamcmd exists
- Steam app 1690800 is "Satisfactory Dedicated Server"
- it ships a Linux server, so the SteamCMD option (installing it into /server) is recommended
- first boot of cm2network/steamcmd: running and quiet for 121s after 153s; stopped gracefully
- boot test with the node-agent: PASSED: READY: [2026.10.26-03.52.37:993][899]LogServer: Display: Server startup time elapsed and saving/level loading is done, auto-pause is allowed to proceed from now on (if enabled in server settings). WorldTimeSeconds = 30.07
**Notes from research:** Native Linux build (FactoryServer.sh) — no Proton needed. Install with: steamcmd +force_install_dir /server +login anonymous +app_update 1690800 validate +quit. Experimental branch: add -beta experimental to the app_update command. No console crossplay (PC Steam/Epic only). 8–16 GB RAM recommended; heavily favors single-core CPU. Mod support via ficsit.app (SML). Server is free to download; no game purchase required for the server itself.
**Sources**
- https://satisfactory.wiki.gg/wiki/Dedicated_servers
- https://steamdb.info/app/1690800/info/
- https://satisfactory.fandom.com/wiki/Dedicated_servers
- https://hub.docker.com/r/wolveix/satisfactory-server
Replaces #21 (closed, branch deleted).
None. The boot test passed and the configuration is internally consistent. The switch from robtme/satisfactory-server (which wrote files to unexpected paths and crashed) to a plain cm2network/steamcmd image with a manual SteamCMD install into /server is a sound fix for the issues in #21.
2. Non-blocking suggestions
Port 7777/tcp is almost certainly unnecessary. The Satisfactory dedicated server communicates over UDP 7777 only (confirmed by the wiki and the wolveix/satisfactory-server image docs). Opening TCP 7777 exposes an extra attack surface for no benefit. I'd drop it from defaultPorts to just 7777/udp.
requiredMemoryMb: 16384 sits at the top of the 8–16 GB recommendation band. If this field is presented to customers as a hard minimum or used for capacity planning, a single-player or low-activity server will run comfortably in 8 GB. Consider 8192 as the "required" floor and surface 16 GB as a recommended value (if the schema supports that distinction). If the platform's semantics already treat this as "recommended allocation," this is fine as-is.
Duplicate game directory. The repo tree shows both games/satisfactory/ (this PR) and games/satisfactory-vanilla-stable/. If these are meant to be two separate offerings (e.g., stable vs. experimental branch), that's fine, but it's worth a one-line comment in each game.yaml or the README to explain the distinction. If satisfactory-vanilla-stable is a leftover from an earlier iteration, it should be removed to avoid confusion in the game picker.
Config application path — verify.defaultStartupCommand is ./FactoryServer.sh -Port=7777, yet defaultConfig lists MaxPlayers, ServerName, Password, bAutoPause, bIsPublic, and bIsPvP. Satisfactory accepts these as CLI flags or via Config/LinuxServer/Game.ini, but the startup command as written only sets the port. Please confirm the platform's runner either (a) appends the config values to the startup command, or (b) writes a Game.ini before exec. If neither happens, the non-port settings will silently be ignored. A quick grep of the runner code or a second boot test with a non-default ServerName would close this out.
ServerName placeholder GBRHosting - {SERVER_NAME}. This looks like a platform template variable. Just make sure the runner actually performs this substitution and doesn't pass the literal string GBRHosting - {SERVER_NAME} to the server (which would show up in the in-game browser as-is).
3. Tests
The single boot test (PASSED in CI) covers the happy path: install → start → ready-log-line. Good.
Suggested addition: a boot-test variant with a non-default config (e.g. ServerName: "GBR Test Server", MaxPlayers: 8, bIsPvP: true) to verify the platform actually injects those values. The current config: {} only proves defaults work.
Negative test (lower priority): confirm that setting a Password in config results in a server that rejects unauthenticated connections. This guards against the config being silently dropped.
4. Overall assessment
The configuration is correct and the boot test confirms the server starts and reaches the ready state. The switch to a generic SteamCMD image cleanly resolves the path-mangling problem from #21. The main thing I'd want verified before merge is the config-application path (suggestion above) to make sure the six defaultConfig keys actually reach the running server, and I'd drop the unused TCP port. Neither is a hard blocker, but the config-injection question is worth a 30-second confirmation so customers don't get a server that ignores their settings.
Automated review by AI Git Bot
## 🤖 AI Code Review
## 1. Blocking issues
None. The boot test passed and the configuration is internally consistent. The switch from `robtme/satisfactory-server` (which wrote files to unexpected paths and crashed) to a plain `cm2network/steamcmd` image with a manual SteamCMD install into `/server` is a sound fix for the issues in #21.
## 2. Non-blocking suggestions
- **Port 7777/tcp is almost certainly unnecessary.** The Satisfactory dedicated server communicates over UDP 7777 only (confirmed by the wiki and the `wolveix/satisfactory-server` image docs). Opening TCP 7777 exposes an extra attack surface for no benefit. I'd drop it from `defaultPorts` to just `7777/udp`.
- **`requiredMemoryMb: 16384` sits at the top of the 8–16 GB recommendation band.** If this field is presented to customers as a hard minimum or used for capacity planning, a single-player or low-activity server will run comfortably in 8 GB. Consider 8192 as the "required" floor and surface 16 GB as a recommended value (if the schema supports that distinction). If the platform's semantics already treat this as "recommended allocation," this is fine as-is.
- **Duplicate game directory.** The repo tree shows both `games/satisfactory/` (this PR) and `games/satisfactory-vanilla-stable/`. If these are meant to be two separate offerings (e.g., stable vs. experimental branch), that's fine, but it's worth a one-line comment in each `game.yaml` or the README to explain the distinction. If `satisfactory-vanilla-stable` is a leftover from an earlier iteration, it should be removed to avoid confusion in the game picker.
- **Config application path — verify.** `defaultStartupCommand` is `./FactoryServer.sh -Port=7777`, yet `defaultConfig` lists `MaxPlayers`, `ServerName`, `Password`, `bAutoPause`, `bIsPublic`, and `bIsPvP`. Satisfactory accepts these as CLI flags *or* via `Config/LinuxServer/Game.ini`, but the startup command as written only sets the port. Please confirm the platform's runner either (a) appends the config values to the startup command, or (b) writes a `Game.ini` before exec. If neither happens, the non-port settings will silently be ignored. A quick grep of the runner code or a second boot test with a non-default `ServerName` would close this out.
- **`ServerName` placeholder `GBRHosting - {SERVER_NAME}`.** This looks like a platform template variable. Just make sure the runner actually performs this substitution and doesn't pass the literal string `GBRHosting - {SERVER_NAME}` to the server (which would show up in the in-game browser as-is).
## 3. Tests
- The single boot test (PASSED in CI) covers the happy path: install → start → ready-log-line. Good.
- **Suggested addition:** a boot-test variant with a non-default `config` (e.g. `ServerName: "GBR Test Server"`, `MaxPlayers: 8`, `bIsPvP: true`) to verify the platform actually injects those values. The current `config: {}` only proves defaults work.
- **Negative test (lower priority):** confirm that setting a `Password` in config results in a server that rejects unauthenticated connections. This guards against the config being silently dropped.
## 4. Overall assessment
The configuration is correct and the boot test confirms the server starts and reaches the ready state. The switch to a generic SteamCMD image cleanly resolves the path-mangling problem from #21. The main thing I'd want verified before merge is the config-application path (suggestion above) to make sure the six `defaultConfig` keys actually reach the running server, and I'd drop the unused TCP port. Neither is a hard blocker, but the config-injection question is worth a 30-second confirmation so customers don't get a server that ignores their settings.
---
*Automated review by AI Git Bot*
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.
Drafted by the GBR AI builder. Review before merging: check the settings, ports and descriptions against the game's documentation.
cm2network/steamcmd, Steam app 1690800Checked for real
Notes from research: Native Linux build (FactoryServer.sh) — no Proton needed. Install with: steamcmd +force_install_dir /server +login anonymous +app_update 1690800 validate +quit. Experimental branch: add -beta experimental to the app_update command. No console crossplay (PC Steam/Epic only). 8–16 GB RAM recommended; heavily favors single-core CPU. Mod support via ficsit.app (SML). Server is free to download; no game purchase required for the server itself.
Sources
Replaces #21 (closed, branch deleted).
🤖 AI Code Review
1. Blocking issues
None. The boot test passed and the configuration is internally consistent. The switch from
robtme/satisfactory-server(which wrote files to unexpected paths and crashed) to a plaincm2network/steamcmdimage with a manual SteamCMD install into/serveris a sound fix for the issues in #21.2. Non-blocking suggestions
Port 7777/tcp is almost certainly unnecessary. The Satisfactory dedicated server communicates over UDP 7777 only (confirmed by the wiki and the
wolveix/satisfactory-serverimage docs). Opening TCP 7777 exposes an extra attack surface for no benefit. I'd drop it fromdefaultPortsto just7777/udp.requiredMemoryMb: 16384sits at the top of the 8–16 GB recommendation band. If this field is presented to customers as a hard minimum or used for capacity planning, a single-player or low-activity server will run comfortably in 8 GB. Consider 8192 as the "required" floor and surface 16 GB as a recommended value (if the schema supports that distinction). If the platform's semantics already treat this as "recommended allocation," this is fine as-is.Duplicate game directory. The repo tree shows both
games/satisfactory/(this PR) andgames/satisfactory-vanilla-stable/. If these are meant to be two separate offerings (e.g., stable vs. experimental branch), that's fine, but it's worth a one-line comment in eachgame.yamlor the README to explain the distinction. Ifsatisfactory-vanilla-stableis a leftover from an earlier iteration, it should be removed to avoid confusion in the game picker.Config application path — verify.
defaultStartupCommandis./FactoryServer.sh -Port=7777, yetdefaultConfiglistsMaxPlayers,ServerName,Password,bAutoPause,bIsPublic, andbIsPvP. Satisfactory accepts these as CLI flags or viaConfig/LinuxServer/Game.ini, but the startup command as written only sets the port. Please confirm the platform's runner either (a) appends the config values to the startup command, or (b) writes aGame.inibefore exec. If neither happens, the non-port settings will silently be ignored. A quick grep of the runner code or a second boot test with a non-defaultServerNamewould close this out.ServerNameplaceholderGBRHosting - {SERVER_NAME}. This looks like a platform template variable. Just make sure the runner actually performs this substitution and doesn't pass the literal stringGBRHosting - {SERVER_NAME}to the server (which would show up in the in-game browser as-is).3. Tests
config(e.g.ServerName: "GBR Test Server",MaxPlayers: 8,bIsPvP: true) to verify the platform actually injects those values. The currentconfig: {}only proves defaults work.Passwordin config results in a server that rejects unauthenticated connections. This guards against the config being silently dropped.4. Overall assessment
The configuration is correct and the boot test confirms the server starts and reaches the ready state. The switch to a generic SteamCMD image cleanly resolves the path-mangling problem from #21. The main thing I'd want verified before merge is the config-application path (suggestion above) to make sure the six
defaultConfigkeys actually reach the running server, and I'd drop the unused TCP port. Neither is a hard blocker, but the config-injection question is worth a 30-second confirmation so customers don't get a server that ignores their settings.Automated review by AI Git Bot
Pull request closed