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

Справочник ошибок публикации

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

Коды ошибок

КодТриггерИсправление
invalid-repoПоле репозитория, которое ты ввёл в модальном окне публикации, не парсится как owner/name. Только ручная публикацияИспользуй owner/name или полный URL https://github.com/owner/name
repo-not-foundНаш запрос манифеста вернул 404. Твой репозиторий приватный, отсутствует, без темы caputchin-game или без caputchin.json по ожидаемому путиСделай репозиторий публичным + добавь тему + запушь манифест
manifest-errorТвой caputchin.json провалил валидацию. Детальный текст называет конкретное поле. Смотри под-коды manifest-errorПочини поле, которое называет деталь
bundle-fetch-failedURL бандла, закреплённый entry и/или npm, не удалось запросить, вернул не-2xx или превышает 12MBПроверь URL и размер бандла
run-not-conformingДым-проверка опционального артефакта run (запущен один раз с детерминированным сидом) не вернула соответствующий вердикт. Твоя игра всё ещё залистена, просто показывается как Не воспроизводима и не может ставить воротаСделай свою симуляцию детерминированной
rate-limitedСлишком много запросов публикации с твоего IP за последние 60 секундПодожди 60 секунд и повтори

Под-коды manifest-error

Когда ты получаешь manifest-error, детальный текст начинается со сбойного поля. Используй эту таблицу, чтобы найти правильное исправление.

Поле в деталиЗначениеИсправление
terms_acceptedПоле отсутствует или не литеральное JSON-булево trueЗадай его в true после прочтения Условий отправки
licenseОтсутствует, некорректна или называет идентификатор SPDX вне одобренного спискаВыбери идентификатор из одобренного списка
(root)JSON-файл не парсится как объект (у тебя массив, строка или null на верхнем уровне)Оберни его в { ... }
marketplaceБлок marketplace присутствует, но не объектЛибо сделай его объектом, либо убери (только-самостоятельно-размещаемые игры опускают блок)
marketplace.name / description / previewПоле не строкаСделай строкой или убери
marketplace.authorБлок присутствует, но не объектИспользуй форму { name?, url?, email? }
marketplace.author.name / urlПодполе не строкаСделай строкой или убери
marketplace.author.emailНе строка ИЛИ проваливает проверку формы emailПочини адрес или убери поле
entryУ одиночной игры нет entry и нет npm, или значение содержит обход (../), абсолютные слеши, разделители Windows, строки запроса или пробелыПредоставь чистый относительный путь
npmНе строка или проваливает regex имени npmИспользуй валидное имя пакета npm
entry/npm+gamesИ entry/npm, и games объявлены на одном уровнеВыбери одно: одиночные игры используют entry/npm; обёртки коллекций используют games
entry/npmУ одиночной игры нет ни того, ни другогоДобавь одно
gamesНе массив, содержит не-строковые записи, содержит обход/абсолютные пути или содержит . / ./ (что само-сослалось бы на корень репозитория)Почини массив
games[i]Конкретный путь-ребёнок некорректенПочини эту запись
run / run.entry / run.modules[i].*Опциональное объявление split-run некорректноПочини по схеме

Одобренные лицензии

Только манифесты caputchin.json, чьё поле license вычисляется в идентификатор SPDX из этого списка, проходят лицензионные ворота. Смотри Условия отправки в маркетплейс, раздел 4 для обязывающей версии.

Свободные лицензии кода

SPDX IDИмя
MITMIT License
MIT-0MIT No Attribution
Apache-2.0Apache License 2.0
BSD-2-ClauseBSD 2-Clause "Simplified"
BSD-3-ClauseBSD 3-Clause "New" / "Revised"
0BSDBSD Zero Clause
ISCISC License
Zlibzlib License
UnlicenseThe Unlicense (public-domain dedication)
BSL-1.0Boost Software License 1.0
NCSAUniversity of Illinois / NCSA Open Source License
PostgreSQLPostgreSQL License
Python-2.0Python License 2.0
PHP-3.01PHP License 3.01
RubyRuby License
TCLTcl/Tk License
MS-PLMicrosoft Public License
AFL-3.0Academic Free License 3.0
MulanPSL-2.0Mulan Permissive Software License v2
WTFPLDo What The Fuck You Want To Public License

Слабый copyleft на уровне файла

SPDX IDИмя
MPL-2.0Mozilla Public License 2.0
MS-RLMicrosoft Reciprocal License

Лицензии ассетов (арт, аудио, шрифты, встроенные в игру)

SPDX IDИмя
CC0-1.0Creative Commons Zero v1.0
CC-BY-3.0Creative Commons Attribution 3.0
CC-BY-4.0Creative Commons Attribution 4.0
OFL-1.1SIL Open Font License 1.1

Правила выражений SPDX

  • MIT: голый идентификатор; должен встречаться выше.
  • MIT OR Apache-2.0: любая ветвь OR должна встречаться выше.
  • MIT AND CC-BY-4.0: каждая ветвь AND должна встречаться выше.
  • Apache-2.0 WITH LLVM-exception: оговорки WITH не принимаются.
  • LGPL-2.1+: суффикс + (or-later) не принимается.

Почему некоторые лицензии исключены

КатегорияПримерыПочему
Сильный copyleftGPL-*, AGPL-*Вирусный; сетевой триггер AGPL §13 остр, поскольку мы и есть сетевой хост. (GPL-2.0-only принимается только для собственных игр, опубликованных Caputchin, не для сторонних отправок.)
Библиотечный copyleft с неоднозначностью встраиванияLGPL-*«Передать библиотеку» читается неоднозначно для бандлов JavaScript и WebAssembly
Share-alike на ассетахCC-BY-SA-*, CC-BY-NC-*, CC-BY-ND-*Share-alike заражает интеграцию встраивающего сайта; NC исключает коммерческое развёртывание
Source-available (не OSI)BUSL-1.1, SSPL-1.0, Elastic-2.0Ограничения области использования, ограничения распространения или оба

Заметь, BSL-1.0 (Boost Software License) свободна и принимается; BUSL-1.1 (Business Source License) нет. Парсер сравнивает с канонической строкой SPDX дословно, так что эти две никогда не сталкиваются.

См. также

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