Решили: выкладка в Steam уходит на локальную машину (scripts/steam-publish.ps1), а облачный CI остаётся гейтом и отвечает на другой вопрос — «собирается ли то, что лежит в репозитории».

Сказано: «А если сделать его приватным все-таки? Ты пугал меня Ci/CJ вроде, но разве нельзя организовать пайплайн на своей машине? […] Ибо и так приватный хотел по итогам» (03.08.2026, сессия d084ed77). Возражение справедливое: мой запрет на свой раннер стоял на публичности репозитория — любой мог открыть PR и выполнить код на чужой машине. В приватном этого нет.

Почему в итоге не свой раннер, а просто скрипт. Раннер сохранял бы кнопку в GitHub и историю прогонов, но требовал службы, доверия к окружению и зависел от политики цен: GitHub объявил плату за self-hosted в приватных репозиториях и отложил её под давлением — «пока бесплатно» это не гарантия. Скрипт же переиспользует то, что уже написано: теневой проект из unity-cli.ps1 (Unity в batchmode поверх junction на живые Assets, не мешая открытому редактору), локальную лицензию Unity и уже залогиненный steamcmd. Три минуты против семи, ноль минут Actions, секреты Steam не покидают машину.

Что осталось за облаком и почему это не дубль. Локальная сборка берёт файлы С ДИСКА, где лежит и незакоммиченное. Ровно так 02.08.2026 в ветке несколько дней жили два файла, без которых чистый клон не собирался, — и поймал это первый же облачный прогон. Скрипт страхуется отказом собирать при незакоммиченных .cs, но чистым клоном не является и заменить его не может.

Владелец версии не изменился — тег. Скрипт берёт версию из тега на HEAD, а вне тега лепит <bundleVersion>-dev.<sha>. Правка PlayerSettings.bundleVersion безопасна, потому что теневой проект копирует ProjectSettings, а не линкует: репозиторий она не трогает.

Грабли, заложенные в проверку: steam_appid.txt рядом с exe снимает проверку владения — игра пойдёт у любого. Оба пути выкладки ищут его в билде и отказываются отправлять.

Владелец правды: scripts/steam-publish.ps1, Assets/_Project/Scripts/EditorTools/Build/PlayerBuilder.cs, steam/*.template.vdf, docs/steam-deploy-setup.md §6.