Marketplace game development
Publish errors reference
Every error code the marketplace publish path can return, with the trigger and the link to the fix. For step-by-step fixes, see Fix a publish failure.
| Code | Trigger | Fix |
|---|
invalid-repo | The repository field you entered in the publish modal does not parse as owner/name. Manual publish only | Use owner/name or the full https://github.com/owner/name URL |
repo-not-found | Our manifest fetch returned a 404. Your repository is private, missing, lacks the caputchin-game topic, or has no caputchin.json at the expected path | Make the repository public + add the topic + push a manifest |
manifest-error | Your caputchin.json failed validation. The detail string names the specific field. See manifest-error sub-codes | Fix the field the detail names |
bundle-fetch-failed | The bundle URL pinned by entry and/or npm could not be fetched, returned a non-2xx, or exceeds 12MB | Verify the bundle URL and size |
run-not-conforming | The optional run artifact's smoke check (run once with a deterministic seed) did not return a conforming verdict. Your game is still listed, just shows Not replayable and cannot gate | Make your simulation deterministic |
rate-limited | Too many publish requests from your IP in the last 60 seconds | Wait 60 seconds and retry |
When you receive a manifest-error, the detail string starts with the failing field. Use this table to find the right fix.
| Field in detail | Meaning | Fix |
|---|
terms_accepted | The field is missing or not the literal JSON boolean true | Set it to true after reading the Submission Terms |
license | Missing, malformed, or names an SPDX identifier outside the approved list | Pick an identifier from the approved list |
(root) | The JSON file does not parse as an object (you have a top-level array, string, or null) | Wrap it in { ... } |
marketplace | The marketplace block is present but not an object | Either make it an object or remove it (self-hosted-only games omit the block) |
marketplace.name / description / preview | The field is not a string | Stringify or remove |
marketplace.author | The block is present but not an object | Use the { name?, url?, email? } shape |
marketplace.author.name / url | The subfield is not a string | Stringify or remove |
marketplace.author.email | Not a string OR fails the email-shape check | Fix the address or remove the field |
entry | Single game has no entry and no npm, or the value contains traversal (../), absolute slashes, Windows separators, query strings, or whitespace | Provide a clean relative path |
npm | Not a string, or fails the npm-name regex | Use a valid npm package name |
entry/npm+games | Both entry/npm and games declared at the same level | Pick one: single games use entry/npm; collection wrappers use games |
entry/npm | Single game has neither | Add one |
games | Not an array, contains non-string entries, contains traversal/absolute paths, or contains . / ./ (which would self-reference the repo root) | Fix the array |
games[i] | A specific child path is invalid | Fix that entry |
run / run.entry / run.modules[i].* | The optional split-run declaration is malformed | Fix per the schema |
Only caputchin.json manifests whose license field evaluates to an SPDX identifier on this list pass the licensing gate. See Marketplace Submission Terms section 4 for the binding version.
| SPDX ID | Name |
|---|
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 | Name |
|---|
MPL-2.0 | Mozilla Public License 2.0 |
MS-RL | Microsoft Reciprocal License |
| SPDX ID | Name |
|---|
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: bare identifier; must appear above.
MIT OR Apache-2.0: any branch of an OR must appear above.
MIT AND CC-BY-4.0: every branch of an AND must appear above.
Apache-2.0 WITH LLVM-exception: WITH clauses are not accepted.
LGPL-2.1+: the + (or-later) suffix is not accepted.
| Category | Examples | Why |
|---|
| Strong copyleft | GPL-*, AGPL-* | Viral; AGPL §13 network trigger is acute since we are the network host. (GPL-2.0-only is accepted only for first-party games published by Caputchin, not for third-party submissions.) |
| Library copyleft with bundling ambiguity | LGPL-* | "Convey the library" reads ambiguously for JavaScript and WebAssembly bundles |
| Share-alike on assets | CC-BY-SA-*, CC-BY-NC-*, CC-BY-ND-* | Share-alike contaminates the embedding site's integration; NC rules out commercial deployment |
| Source-available (not OSI) | BUSL-1.1, SSPL-1.0, Elastic-2.0 | Field-of-use restrictions, redistribution restrictions, or both |
Note BSL-1.0 (Boost Software License) is permissive and accepted; BUSL-1.1 (Business Source License) is not. The parser compares against the SPDX canonical string verbatim, so the two never collide.