Caputchin
Разработка игры для маркетплейса

Почини сбой публикации в маркетплейс

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

Каждый перечисленный здесь сбой это то, что ты можешь починить в своём репозитории. Если ты не видишь своей ошибки здесь, проверь полный справочник ошибок публикации для менее частых кодов.

terms_accepted не задан

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

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

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

Лицензия не в одобренном списке

Ты видишь это, когда license отсутствует, некорректна или называет идентификатор вне нашего одобренного списка.

  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), единственное исправление это перелицензировать или убрать затронутые компоненты. Мы не можем давать исключения на пер-авторской основе.

Мы не смогли найти твой репозиторий

Ты видишь это, когда наш запрос манифеста возвращает 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, чей детальный текст начинается с имени поля вроде 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

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

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

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

Твой артефакт run недетерминирован

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

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

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

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

Почини симуляцию, чтобы она была чистой функцией сида и трассы, запушь, повтори. Смотри контракт реплея о правиле детерминизма и рассмотри опциональный движковый кит, который предоставляет детерминированный засеваемый RNG и часы.

Запрос бандла сбоил

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

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

Слишком много запросов публикации

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

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

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

Если хочешь перестать получать письма о сбое публикации, смотри Условия отправки, раздел 10. Адрес получателя это твой marketplace.author.email в манифесте; убрав или поменяв его, ты останавливаешь письма.

См. также

На этой странице