Autotest
Cada versión que subís se prueba en un navegador real antes de poder enviarla. Podés correr la misma prueba antes en tu máquina: gamealia test o la herramienta del MCP gamealia_run_autotest.
Qué hace
- Análisis estático de los archivos, antes de ejecutar nada: archivos que faltan, URLs de
localhostyhttp://, exportaciones de motor incompletas, y reglas de seguridad (almacenamiento de otros juegos, cookies, la página del portal, código remoto, hosts no declarados, permisos, service workers, minería, ofuscación). - Dos corridas en el navegador con Chromium headless: escritorio 1280x720 y celular 390x844 con pantalla táctil. Cada corrida carga el juego dentro de una copia del frame del portal, espera hasta 15 s a
loadingStop(), saca una captura a los 5 s, hace clic o toca la pantalla, aprieta Espacio y Enter, responde los pedidos de anuncios con anuncios simulados, y mira la consola y la red. - Una auditoría en ejecución durante las dos corridas: cada pedido y WebSocket, popups, intentos de navegar la página de arriba y pedidos de permisos. La prueba siembra datos falsos de "otro juego" en el almacenamiento y una cookie falsa; si alguno sale del juego, el build falla.
El resultado es pass, warn o fail. Si falla un chequeo obligatorio, la versión falla; las advertencias se permiten y el revisor las ve. En tu máquina recibís el reporte y las capturas; en el servidor el reporte aparece en la página de la versión, en gamealia status y en gamealia_get_status.
Chequeos
| Chequeo | Obligatorio | Qué verifica y cómo arreglarlo |
|---|---|---|
unpack | sí | El zip se descomprime. Subí un zip normal de la carpeta del build (la CLI y el MCP lo arman por vos) |
size | sí | Como máximo 250 MB y 5000 archivos. Sacá assets que no usás; comprimí texturas y audio |
entry | sí | index.html está en la raíz. Subí la carpeta del build, no la de arriba |
missing_assets | sí | Existe cada archivo que referencian el html, el js y el css. Las rutas distinguen mayúsculas |
engine_integrity | sí | Las exportaciones de Unity, Godot y GameMaker tienen todos sus archivos de motor. Subí la exportación completa |
localhost_refs | sí | Sin URLs de localhost ni 127.0.0.1. Usá URLs relativas |
mixed_content | sí | Sin cargas por http://. Usá https:// o URLs relativas |
network_blocklist | no | Sin pedidos a hosts bloqueados (redes de anuncios, trackers, minería) |
no_external_ads | sí | Sin código de anuncios que no sea de Gamealia. Usá Gamealia.ad.* |
security_miner | sí | Sin código de minería de criptomonedas |
cross_game_storage | sí | No lee ni lista claves de localStorage o IndexedDB de otros juegos. Usá tus claves con prefijo o Gamealia.data |
cookie_access | sí | Sin document.cookie. Usá Gamealia.data |
parent_access | sí | Sin acceso a window.parent ni window.top. Hablá con el portal solo con el SDK |
remote_code | sí | Sin eval, new Function ni inyección de scripts con código descargado en ejecución |
runtime_exfiltration | sí | Los datos falsos sembrados nunca salieron del juego |
exfiltration | no | El código solo habla con hosts declarados. Declarás tus servidores en backendHosts |
undeclared_hosts | no | En ejecución el juego solo contactó hosts declarados |
permissions | no | Sin pedidos de permisos, salvo el micrófono o la cámara que declara la ficha (Permisos del dispositivo) |
service_worker | no | Sin registro de service workers |
obfuscation | no | El código no está muy ofuscado. Minificado está bien |
sdk_loaded | sí | El SDK de Gamealia (o un shim) está cargado |
sdk_init | sí | Gamealia.init() es la primera llamada al SDK |
loading_stop | sí | Gamealia.game.loadingStop() se llama dentro de los 15 s |
no_console_errors | no | Sin errores no capturados en la consola. gamealia preview los muestra |
not_blank | sí | La pantalla no está vacía 5 s después de cargar. Dibujá una pantalla de título temprano |
input_response | no | Un clic o toque en el centro y Espacio/Enter cambian la pantalla (si no, también se toca el botón visible más grande) |
gameplay_start | no | gameplayStart() se llama después del primer input |
ad_handling | no | Las pausas con anuncio que pidió el juego se mostraron y terminaron |
purchase_ui | no | Sin pantallas de compra ni botones para "quitar anuncios" |
own_login | no | Sin login ni sistema de cuentas propio del juego |
purchase_ui, own_login y las demás advertencias no bloquean la subida, pero el revisor rechaza un juego que no cumple las políticas.
En tu máquina
gamealia test # compila y prueba; sale con código 1 si falla un chequeo obligatorio
gamealia test --json # el reporte completo
gamealia preview --open # jugalo vos dentro del frame del portal, con anuncios simulados
Las capturas y report.json se guardan en una carpeta temporal que se muestra al final. La prueba local necesita playwright-core y un Chromium headless (Navegador local).
Con el MCP, gamealia_run_autotest devuelve las capturas como imágenes para que tu asistente vea el juego, y gamealia_playtest le permite jugarlo paso a paso.
Cuando el servidor y tu máquina no coinciden
El servidor corre los mismos chequeos, con los permisos, los hosts de backend y el aislamiento que tenía la ficha al momento de subirla. Si cambiás los permisos pedidos, la versión se vuelve a probar antes de que puedas enviarla.