Correccion de bugs: cache del codice, aislamiento de errores en el servidor y fugas de recursos#87
Open
TobiasVeiga00 wants to merge 5 commits into
Open
Conversation
Profiles.remove() reasignaba el perfil activo sin limpiar _descCache, así que el códice del perfil borrado contaminaba al siguiente y los descubrimientos nuevos no se registraban hasta recargar la página. Incluye test de regresión.
Si localStorage.setItem falla (navegación privada, cuota llena), la excepción impedía abrir el panel de novedades. Era la única escritura sin try/catch del proyecto.
El botón no existe en index.html; solo queda btn-codex-close-top.
- El manejador de mensajes WebSocket no tenía try/catch: cualquier excepción tumbaba el proceso entero y desconectaba a todos los jugadores. Ahora se registra el error (tipo de mensaje, jugador, sala y stack) y se cierra solo la conexión afectada con 1011 para que el cliente reconecte limpio en vez de quedar desincronizado. - El mapa obsFallos acumulaba una entrada por cada IP que fallaba la clave de admin sin límite; ahora se purga en el latido de 30 s. - El temporizador de bienvenida (timbre) no se cancelaba si la conexión se cerraba antes del hola. Incluye test de regresión (test-mensajes-invalidos.js): un fallo de un cliente no tumba el servidor ni afecta al resto.
La Sintonía y el no-clip por Instinto se eliminaron en la v28.9; no existe ningún manejador de KeyG.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Qué cambia
Cinco arreglos encontrados en una auditoría del código, cada uno en su propio commit:
game/js/systems/game.js):Profiles.remove()reasignaba el perfil activo sin invalidar_descCache, así que el perfil sobreviviente heredaba los descubrimientos del borrado y los propios no se registraban hasta recargar la página. Incluye test de regresión engame.test.js.server/server.js): el manejador de mensajes WebSocket no tenía try/catch, de modo que cualquier excepción tumbaba el proceso entero y desconectaba a todos los jugadores (a diferencia del tick de salas, que sí está aislado). Ahora se registra el error con contexto (tipo de mensaje, jugador, sala, stack) y se cierra solo la conexión afectada con código 1011, para que ese cliente reconecte limpio en vez de quedar desincronizado a mitad de un cruce de sala.obsFallos: el mapa de intentos fallidos de la clave de admin solo se limpiaba con una autenticación exitosa, así que crecía sin límite con cada IP que fallara; ahora se purga en el latido de 30 s.timbre: no se cancelaba si la conexión se cerraba antes delhola.localStoragesin proteger (changelog.js), eliminación del manejador huérfano debtn-codex-close(ui.js) y la tecla G del README (el sistema de Sintonía/Instinto se retiró en la v28.9).Por qué
El bug del códice pierde progreso del jugador en silencio; el del servidor convierte cualquier error puntual en una caída total del modo online. Los demás son fugas de recursos y código/documentación muertos.
Pruebas
server/test-mensajes-invalidos.js: verifica que un fallo forzado en el manejo de un mensaje no tumba el servidor, cierra solo al cliente afectado y el resto sigue operando (6/6 aserciones).game/js/systems/game.test.jspara la invalidación de la caché (verificado por mutación: revierte el fix y falla).test-integracion(23),test-espectador(24),test-manila,test-salas-vacias,test-admin-clave,test-objetos,test-retorno,test-caminata,test-equipo-muerte,test-posiciones-carga,test-salidas-aleatorias.Math.random()en lógica de juego.