Файлы

В development runtime ищет config в текущей директории, рядом с executable и в process.resourcesPath. Упакованный launcher игнорирует внешние config и env overrides: production endpoints и публичные trust roots компилируются в main process через src/main/core/config/production-config.ts. Release-сборка останавливается, если ей не передан проверенный публичный registry ключей.

Режимы

auto выбирает development при NODE_ENV=development, иначе production.

Подпись control plane

trustedKeys содержит только Ed25519 public keys. Key id равен первым 24 hex-символам SHA-256 публичного ключа и выводится wraithbound-keyctl. Launcher проверяет подпись envelope до декодирования manifest/maintenance. enforceSignedReleases=false нужен только на период миграции: сборка без записи в control plane продолжит работать через site API. После публикации всех сборок и закрепления production public key включите strict mode. Тогда отсутствующий trust root, недоступный control plane и неопубликованный build блокируют установку и запуск, а не откатываются на неподписанные данные. Production launcher всегда работает в strict mode. Перед build:win или release:win укажите путь к публичному registry, созданному keyctl:
В bundle попадают только действующие и retiring public keys. Private signing key лаунчеру не нужен. WB_HAWK_TOKEN используется только во время сборки и должен поступать из secret-хранилища CI; если monitoring выключен, переменную можно не задавать. Состояние ключа проверяется вместе с validFromUnixMs/validUntilUnixMs на момент сборки. Future, expired и revoked keys в trust root не попадают. До завершения retiring-периода выпустите все активные игровые releases новым ключом и соберите launcher, который уже доверяет ему; иначе старый release закономерно перестанет проходить проверку после окончания окна.

Env overrides

WB_LAUNCHER_TRUSTED_KEYS_FILE и WB_HAWK_TOKEN не являются runtime overrides. Это build-time inputs production artifact; launcher не читает их на компьютере игрока. Env overrides работают только в неупакованном launcher. Authlib URLs вычисляются автоматически от apiUrl. Серверные secrets и private signing keys в config не хранятся.
Кодирование или шифрование bundled config не делает секрет безопасным: ключ и расшифровка находятся в приложении. Production config должен содержать только публичные значения.