---
type: reference
title: Справочник ошибок публикации
summary: Каждый код ошибки, который может испустить путь публикации в маркетплейс, с триггером и где найти исправление.
---

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

## Коды ошибок

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

## Под-коды manifest-error [#manifest-error-sub-codes]

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

| Поле в детали | Значение | Исправление |
|---|---|---|
| `terms_accepted` | Поле отсутствует или не литеральное JSON-булево `true` | [Задай его в `true` после прочтения Условий отправки](/docs/marketplace-game-development/publish-failed-fixes#manifest-error-terms-accepted) |
| `license` | Отсутствует, некорректна или называет идентификатор SPDX вне одобренного списка | [Выбери идентификатор из одобренного списка](/docs/marketplace-game-development/publish-failed-fixes#manifest-error-license) |
| `(root)` | JSON-файл не парсится как объект (у тебя массив, строка или null на верхнем уровне) | Оберни его в `{ ... }` |
| `marketplace` | Блок `marketplace` присутствует, но не объект | Либо сделай его объектом, либо убери (только-самостоятельно-размещаемые игры опускают блок) |
| `marketplace.name` / `description` / `preview` | Поле не строка | Сделай строкой или убери |
| `marketplace.author` | Блок присутствует, но не объект | Используй форму `{ name?, url?, email? }` |
| `marketplace.author.name` / `url` | Подполе не строка | Сделай строкой или убери |
| `marketplace.author.email` | Не строка ИЛИ проваливает проверку формы email | [Почини адрес или убери поле](/docs/marketplace-game-development/publish-failed-fixes#manifest-error-author-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 некорректно | [Почини по схеме](/docs/marketplace-game-development/publish-failed-fixes#manifest-error-structure) |

## Одобренные лицензии [#approved-licenses]

Только манифесты `caputchin.json`, чьё поле `license` вычисляется в идентификатор SPDX из этого списка, проходят лицензионные ворота. Смотри [Условия отправки в маркетплейс, раздел 4](/legal/submission-terms) для обязывающей версии.

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

| 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 |

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

| 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 |

### Правила выражений 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) не принимается.

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

| Категория | Примеры | Почему |
|---|---|---|
| Сильный 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 дословно, так что эти две никогда не сталкиваются.

## См. также

- [Почини сбой публикации](/docs/marketplace-game-development/publish-failed-fixes)
- [Манифест caputchin.json](/docs/marketplace-game-development/the-caputchin-json-manifest): поля, которые валидируют эти ошибки.
- [Условия отправки в маркетплейс](/legal/submission-terms) (Раздел 10 покрывает отказ от уведомлений)
