Разработка игры для маркетплейса
Справочник ошибок публикации
Каждый код ошибки, который может вернуть путь публикации в маркетплейс, с триггером и ссылкой на исправление. Для пошаговых исправлений смотри Почини сбой публикации.
| Код | Триггер | Исправление |
|---|
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-failed | URL бандла, закреплённый entry и/или npm, не удалось запросить, вернул не-2xx или превышает 12MB | Проверь URL и размер бандла |
run-not-conforming | Дым-проверка опционального артефакта run (запущен один раз с детерминированным сидом) не вернула соответствующий вердикт. Твоя игра всё ещё залистена, просто показывается как Не воспроизводима и не может ставить ворота | Сделай свою симуляцию детерминированной |
rate-limited | Слишком много запросов публикации с твоего IP за последние 60 секунд | Подожди 60 секунд и повтори |
Когда ты получаешь 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 | Имя |
|---|
MIT | MIT License |
MIT-0 | MIT No Attribution |
Apache-2.0 | Apache License 2.0 |
BSD-2-Clause | BSD 2-Clause "Simplified" |
BSD-3-Clause | BSD 3-Clause "New" / "Revised" |
0BSD | BSD Zero Clause |
ISC | ISC License |
Zlib | zlib License |
Unlicense | The Unlicense (public-domain dedication) |
BSL-1.0 | Boost Software License 1.0 |
NCSA | University of Illinois / NCSA Open Source License |
PostgreSQL | PostgreSQL License |
Python-2.0 | Python License 2.0 |
PHP-3.01 | PHP License 3.01 |
Ruby | Ruby License |
TCL | Tcl/Tk License |
MS-PL | Microsoft Public License |
AFL-3.0 | Academic Free License 3.0 |
MulanPSL-2.0 | Mulan Permissive Software License v2 |
WTFPL | Do What The Fuck You Want To Public License |
| SPDX ID | Имя |
|---|
MPL-2.0 | Mozilla Public License 2.0 |
MS-RL | Microsoft Reciprocal License |
| SPDX ID | Имя |
|---|
CC0-1.0 | Creative Commons Zero v1.0 |
CC-BY-3.0 | Creative Commons Attribution 3.0 |
CC-BY-4.0 | Creative Commons Attribution 4.0 |
OFL-1.1 | SIL Open Font License 1.1 |
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) не принимается.
| Категория | Примеры | Почему |
|---|
| Сильный copyleft | GPL-*, 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 дословно, так что эти две никогда не сталкиваются.