fix(templates): a refusal from Steam is not a failed installation - #122
fix(templates): a refusal from Steam is not a failed installation#122aaldersondev wants to merge 1 commit into
Conversation
An install of app 4020 ended on
Connecting anonymously to Steam Public...OK
Waiting for user info...OK
ERROR! Failed to install app '4020' (Missing configuration)
and exit 8, before a byte of depot. Reproduced on the same machine, in a
fresh container, with 31 GB free — and the very same line, in another fresh
container ten minutes later, downloaded all 6.87 GB. Steam had not handed
out the app's configuration, and nothing on the node decides that.
One attempt turned a passing Steam mood into an installation somebody has to
notice and start again, on a download measured in gigabytes. So the depot is
now fetched up to three times. Three and not thirty: a real failure — a wrong
app id, a full volume — fails the same way every time, and is better reported
in a minute than in an hour. A retry costs little either, since Steam keeps
what it has already staged under steamapps/downloading.
And when it does give up, it says which of three things happened, because
none of their fixes is guessable from what SteamCMD prints:
Missing configuration Steam refused; nothing local, reinstall later.
state is 0x202 Out of room. Measured by giving the volume 1.9 GB
for a 6.87 GB depot: the download stages into
steamapps/downloading, so the install wants about
twice the finished size free, not once.
No subscription The app id is not anonymously installable.
Anything else prints SteamCMD's own last words, which is what it did before.
`tee` rather than a redirection: the operator goes on watching the download
in their console — an install that goes silent for six gigabytes looks stuck
— while the last attempt is kept for the diagnosis.
Shared by every Source template, so Garry's Mod and its neighbour both get
it. Four tests, and the loop was exercised against a fake steamcmd failing
zero, one, two and three times.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ReX2JSG6VKYShanE1F69KP
|
Closing this one: the investigation went further and the premise here is wrong. This PR claimed the refusal was a passing Steam mood, on the evidence that the same command failed in one container and succeeded in another ten minutes later. That comparison had an uncontrolled variable. The two containers differed by more than time: the failing one had a pty. Measured on the same machine, interleaved so that time cannot explain it — eight trials, and the correlation is perfect:
The daemon creates the install container with The retry and the failure table are still worth having and come back in the replacement, with wording that says what this actually is. |
What happened
An install of app 4020 ended like this, and the panel reported
Installation failed (code 8):What it was — measured, not reasoned
Reproduced on the same machine in a fresh
debian:bookworm-slimcontainer, with the template's exact command and 31 GB free: same message, exit 8, before a byte of depot. The same line, on the same machine, in another fresh container ten minutes later, downloaded all 6.87 GB.Steam had not handed out the app's configuration. Nothing on the node decides that, and the template's command is right.
The neighbouring hypothesis was tested and ruled out: given only 1.9 GB for a 6.87 GB depot, SteamCMD says
state is 0x202, notMissing configuration. Two different failures with two different fixes, and the difference is not guessable from the text.What changes
The depot is fetched up to three times. Three and not thirty: a real failure — a wrong app id, a full volume — fails the same way every time, and is better reported in a minute than in an hour. A retry costs little either, since Steam keeps what it has already staged under
steamapps/downloading.When it does give up, it names which of three things happened:
Missing configurationstate is 0x202No subscriptionAnything else prints SteamCMD's own last words, as before.
teerather than a redirection, so the operator goes on watching the download in their console — an install that goes silent for six gigabytes looks stuck — while the last attempt is kept for the diagnosis.Scope and tests
The script is shared by every Source template, so Garry's Mod and its neighbour both get it.
Four assertions in the catalogue suite, and the generated loop was exercised outside it against a fake steamcmd failing zero, one, two and three times: succeeds on attempts 1, 2 and 3, gives up on the fourth refusal with exit 1 and the right diagnosis. Each of the three branches was checked against the message that triggers it.
🤖 Generated with Claude Code