Desarrollo de juegos del marketplace
Referencia de errores de publicación
Cada código de error que el camino de publicación del marketplace puede devolver, con el disparador y el enlace al arreglo. Para arreglos paso a paso, mira Arregla un fallo de publicación.
| Código | Disparador | Arreglo |
|---|
invalid-repo | El campo de repositorio que introdujiste en el modal de publicación no parsea como owner/name. Solo publicación manual | Usa owner/name o la URL completa https://github.com/owner/name |
repo-not-found | Nuestra descarga del manifiesto devolvió un 404. Tu repositorio es privado, falta, le falta el topic caputchin-game, o no tiene caputchin.json en la ruta esperada | Haz el repositorio público + añade el topic + empuja un manifiesto |
manifest-error | Tu caputchin.json falló la validación. La cadena de detalle nombra el campo concreto. Mira subcódigos de manifest-error | Arregla el campo que el detalle nombra |
bundle-fetch-failed | La URL del bundle fijada por entry y/o npm no se pudo descargar, devolvió un no-2xx, o excede 12MB | Verifica la URL y el tamaño del bundle |
run-not-conforming | La comprobación de humo del artefacto run opcional (corrido una vez con una semilla determinista) no devolvió un veredicto conforme. Tu juego sigue listado, solo muestra No reproducible y no puede ejercer de gate | Haz tu simulación determinista |
rate-limited | Demasiadas peticiones de publicación desde tu IP en los últimos 60 segundos | Espera 60 segundos y reintenta |
Cuando recibes un manifest-error, la cadena de detalle empieza con el campo que falla. Usa esta tabla para encontrar el arreglo correcto.
| Campo en el detalle | Significado | Arreglo |
|---|
terms_accepted | El campo falta o no es el booleano literal de JSON true | Fíjalo a true tras leer los Términos de Envío |
license | Falta, está malformada, o nombra un identificador SPDX fuera de la lista aprobada | Elige un identificador de la lista aprobada |
(root) | El archivo JSON no parsea como un objeto (tienes un array, cadena, o null de nivel superior) | Envuélvelo en { ... } |
marketplace | El bloque marketplace está presente pero no es un objeto | O hazlo un objeto o quítalo (los juegos solo-autoalojados omiten el bloque) |
marketplace.name / description / preview | El campo no es una cadena | Conviértelo a cadena o quítalo |
marketplace.author | El bloque está presente pero no es un objeto | Usa la forma { name?, url?, email? } |
marketplace.author.name / url | El subcampo no es una cadena | Conviértelo a cadena o quítalo |
marketplace.author.email | No es una cadena O falla la comprobación de forma de correo | Arregla la dirección o quita el campo |
entry | El juego único no tiene entry ni npm, o el valor contiene recorrido (../), barras absolutas, separadores de Windows, query strings, o espacios en blanco | Provee una ruta relativa limpia |
npm | No es una cadena, o falla el regex de nombre de npm | Usa un nombre de paquete npm válido |
entry/npm+games | Tanto entry/npm como games declarados en el mismo nivel | Elige uno: los juegos únicos usan entry/npm; los envoltorios de colección usan games |
entry/npm | El juego único no tiene ninguno | Añade uno |
games | No es un array, contiene entradas que no son cadenas, contiene rutas de recorrido/absolutas, o contiene . / ./ (que se auto-referenciaría a la raíz del repo) | Arregla el array |
games[i] | Una ruta hija concreta es inválida | Arregla esa entrada |
run / run.entry / run.modules[i].* | La declaración de run dividido opcional está malformada | Arregla según el esquema |
Solo los manifiestos caputchin.json cuyo campo license evalúa a un identificador SPDX de esta lista pasan el gate de licencias. Mira los Términos de Envío del Marketplace sección 4 para la versión vinculante.
| SPDX ID | Nombre |
|---|
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 | Nombre |
|---|
MPL-2.0 | Mozilla Public License 2.0 |
MS-RL | Microsoft Reciprocal License |
| SPDX ID | Nombre |
|---|
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: identificador a secas; debe aparecer arriba.
MIT OR Apache-2.0: cualquier rama de un OR debe aparecer arriba.
MIT AND CC-BY-4.0: cada rama de un AND debe aparecer arriba.
Apache-2.0 WITH LLVM-exception: las cláusulas WITH no se aceptan.
LGPL-2.1+: el sufijo + (o-posterior) no se acepta.
| Categoría | Ejemplos | Por qué |
|---|
| Copyleft fuerte | GPL-*, AGPL-* | Viral; el disparador de red §13 de AGPL es agudo ya que nosotros somos el anfitrión de red. (GPL-2.0-only se acepta solo para juegos de primera parte publicados por Caputchin, no para envíos de terceros.) |
| Copyleft de librería con ambigüedad de empaquetado | LGPL-* | "Transmitir la librería" se lee de forma ambigua para los bundles de JavaScript y WebAssembly |
| Share-alike en assets | CC-BY-SA-*, CC-BY-NC-*, CC-BY-ND-* | El share-alike contamina la integración del sitio que incrusta; NC descarta el despliegue comercial |
| Source-available (no OSI) | BUSL-1.1, SSPL-1.0, Elastic-2.0 | Restricciones de campo de uso, restricciones de redistribución, o ambas |
Nota que BSL-1.0 (Boost Software License) es permisiva y se acepta; BUSL-1.1 (Business Source License) no. El parser compara contra la cadena canónica SPDX de forma literal, así que las dos nunca colisionan.