---
type: how-to
title: Почини сбой публикации в маркетплейс
summary: "Руководство по исправлению самых частых сбоев публикации в маркетплейс: каждый код ошибки перечислен с тем, что его вызывает, и точными шагами одна-правка-и-повтор, чтобы его устранить, без необходимости просить нас что-либо перепроверять."
---

Когда модальное окно «Опубликовать или обновить» возвращает ошибку или ты получаешь от нас письмо о сбое публикации, найди свой код ошибки ниже и следуй исправлению. Как только ты запушишь исправление в свой репозиторий, кликни «Опубликовать или обновить» снова, чтобы перепроверить немедленно, или дождись следующего прогона ежедневного индексатора.

Каждый перечисленный здесь сбой это то, что ты можешь починить в своём репозитории. Если ты не видишь своей ошибки здесь, проверь [полный справочник ошибок публикации](/docs/marketplace-game-development/publish-failed-reference) для менее частых кодов.

## terms_accepted не задан [#manifest-error-terms-accepted]

Ты видишь это, когда у твоего `caputchin.json` нет `"terms_accepted": true` на верхнем уровне.

1. Открой `caputchin.json` своего репозитория.
2. Прочитай [Условия отправки в маркетплейс](/legal/submission-terms).
3. Добавь `"terms_accepted": true` на верхнем уровне манифеста.
4. Закоммить и запушь.
5. Кликни «Опубликовать или обновить» снова или дождись следующего прогона ежедневной индексации.

Значение должно быть литеральным JSON-булевым `true`. Строки (`"true"`), числа (`1`) или опущение поля все считаются как не принято.

## Лицензия не в одобренном списке [#manifest-error-license]

Ты видишь это, когда `license` отсутствует, некорректна или называет идентификатор вне нашего [одобренного списка](/docs/marketplace-game-development/publish-failed-reference#approved-licenses).

1. Выбери идентификатор SPDX из одобренного списка, который по-настоящему покрывает твой код и встроенные ассеты.
2. Открой `caputchin.json` и задай поле `license` на верхнем уровне, например `"license": "MIT"`.
3. Если твой код под двойной лицензией, используй выражение SPDX `OR` (например `"MIT OR Apache-2.0"`). Хотя бы одна ветвь должна быть в одобренном списке.
4. Если твой код под MIT, но встраивает ассеты Creative Commons, используй `AND` (например `"MIT AND CC-BY-4.0"`). Каждая ветвь должна быть в одобренном списке.
5. Закоммить, запушь, повтори.

Если твой проект зависит от лицензии, которой нет в нашем одобренном списке (чаще всего семейство GPL, AGPL или LGPL), единственное исправление это перелицензировать или убрать затронутые компоненты. Мы не можем давать исключения на пер-авторской основе.

## Мы не смогли найти твой репозиторий [#repo-not-found]

Ты видишь это, когда наш запрос манифеста возвращает 404.

Частые причины и исправления:

- Твой репозиторий приватный. Сделай его публичным или убери тему `caputchin-game`, чтобы перестать появляться в индексе.
- У твоего репозитория нет темы GitHub `caputchin-game`. Добавь её через секцию About на странице репозитория.
- У твоего репозитория нет `caputchin.json` в корне (или, для игр-детей в коллекции, нет `caputchin.json` в leaf-каталоге).
- URL репозитория, который ты ввёл, неверный. Используй `owner/name` или полный URL `https://github.com/owner/name`.

Запушь `caputchin.json` в свой репозиторий, затем повтори.

## Структура манифеста некорректна [#manifest-error-structure]

Ты видишь `manifest-error`, чей детальный текст начинается с имени поля вроде `entry`, `npm`, `games`, `marketplace.support` или `run.modules[0].name`.

Деталь говорит тебе ровно, какое поле неверно:

- `entry: entry must be a clean relative path`: твоё значение `entry` содержит обход (`../`), абсолютные слеши, строки запроса или пробелы. Используй чистый путь относительно репозитория вроде `dist/game.js`.
- `npm: npm package name is malformed`: твоё поле `npm` не валидная координата npm. Используй `name` или `@scope/name`, только буквенно-цифровые + дефисы + точки + подчёркивания.
- `games[i] must be a relative path inside the repo`: путь-ребёнок в массиве `games` твоей коллекции выходит за репозиторий. Используй пути вроде `packages/leaf-memory`, а не `../external` или `/abs/path`.
- `run.entry must be a clean relative path`: то же правило гигиены, что и у `entry`, применённое к опциональной split-run точке входа.
- `run.modules[i].name`: имя модуля должно совпадать с `[a-zA-Z0-9_-]+\.(wasm|js)$` и не может быть `entry.js` или `artifact.js`.

Отредактируй названное поле по правилу, закоммить, запушь, повтори.

## У marketplace.author некорректный email [#manifest-error-author-email]

Ты видишь это, когда `marketplace.author.email` присутствует, но не совпадает с нормальной формой email (одна `@`, домен с точками, без пробелов).

1. Открой `caputchin.json`.
2. Найди `marketplace.author.email`.
3. Либо исправь значение на настоящий адрес email (мы используем его только для уведомлений о сбое публикации), либо убери поле целиком.
4. Закоммить, запушь, повтори.

Ты также можешь убрать весь блок `marketplace.author`, если не хочешь получать уведомления о сбое публикации.

## Твой артефакт run недетерминирован [#run-not-conforming]

Ты видишь это, когда наш дым соответствия запускает функцию `run(seed, trace)` твоей игры, и она не производит соответствующий вердикт.

Важно: это не фатальный сбой публикации. Твоя игра всё ещё залистена в просмотре маркетплейса и может быть встроена. Она просто показывается как **Не воспроизводима** и не может ставить ворота на ключе сайта, пока проблема детерминизма не починена.

Частые причины:

- Твоя симуляция читает `Date.now()`, `performance.now()`, `Math.random()` или другие недетерминированные глобалы.
- Твоя симуляция читает внешнее состояние (DOM, сеть, хранилище), которое мы не предоставляем при реплее.
- Твоя симуляция зависит от арифметики с плавающей точкой, которая различается между рантаймами.

Почини симуляцию, чтобы она была чистой функцией сида и трассы, запушь, повтори. Смотри [контракт реплея](/docs/marketplace-game-development/replay-contract#determinism-is-the-whole-requirement) о правиле детерминизма и рассмотри опциональный [движковый кит](/docs/marketplace-game-development/engine-kit), который предоставляет детерминированный засеваемый RNG и часы.

## Запрос бандла сбоил [#bundle-fetch-failed]

Ты видишь это, когда URL бандла, закреплённый `entry` и/или `npm`, не может быть запрошен, возвращает не-2xx или превышает 12MB.

- Если ты только что запушил новую версию: CDN может ещё не распространиться. Подожди минуту и повтори.
- Если твой бандл больше 12MB: обрежь ассеты, разбей на модули через объявление `run` или перенеси крупные ассеты на другой путь доставки.
- Если твой пакет `npm` ещё не опубликован: опубликуй его сначала; мы не можем запросить неопубликованные версии.

## Слишком много запросов публикации [#rate-limited]

Ты видишь это на модальном окне ручной публикации, когда ты отправил больше десяти запросов за последние 60 секунд.

Подожди 60 секунд и повтори. Нет способа поднять лимит; он защищает эндпоинт от злоупотребления.

## Остановка уведомительных писем

Если хочешь перестать получать письма о сбое публикации, смотри [Условия отправки, раздел 10](/legal/submission-terms). Адрес получателя это твой `marketplace.author.email` в манифесте; убрав или поменяв его, ты останавливаешь письма.

## См. также

- [Полный справочник ошибок публикации](/docs/marketplace-game-development/publish-failed-reference)
- [Опубликуй в маркетплейс](/docs/marketplace-game-development/publish-to-the-marketplace)
- [Условия отправки в маркетплейс](/legal/submission-terms)
