#490

Steam: pick a game's version (beta branches), with beta codes

Openinsertfloppywants to merge intofrom

Requested by Cameron · project thread

Builds on #484 (Steam DLC). The same download code changed there, so this branch sits on top of it. Until #484 is merged its 7 commits show here too. The new commit is the last one, "Steam: pick a game's version (beta branches), with beta codes".

Change

Game details › Steam › Version (and the download sheet) lists the public build and the game's beta branches from PICS depots.branches. A password-protected beta opens with Enter beta code: Steam checks the code (ClientCheckAppBetaPassword), and its private depot section (ClientPICSPrivateBeta, binary KeyValues) gives the branch's manifests.

Downloads, updates and repairs take the chosen branch:

  • each depot's manifest for the branch, or the public one for a depot the beta leaves alone;
  • the manifest request code names the branch (app_branch);
  • the install record states the branch's build and BetaKey in UserConfig and MountedConfig, so Valve's client keeps the game there.

An installed game on another branch gets "Download " to switch, and the update badge compares against the recorded branch. Choices and codes are kept per game. A beta without an accepted code stops the download instead of quietly taking public.

Testing

  • On device (iPhone, sideloaded build): switching a game's version works.
  • Host checks: tests/host/check-steam-library.py passes on this branch (879 checks, with swiftc 6.1 on Linux and the two Darwin-only fcntl hints removed locally). It covers branch parsing, the public fallback, the private-branch merge, binary KeyValues, the code exchange and the record. It isn't compiled for iOS here.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LiLQakAySboBR7FkqkJFKS