Skip to content

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
AgenteMaxo:mainfrom
TobiasVeiga00:correccion-bugs-auditoria
Open

Correccion de bugs: cache del codice, aislamiento de errores en el servidor y fugas de recursos#87
TobiasVeiga00 wants to merge 5 commits into
AgenteMaxo:mainfrom
TobiasVeiga00:correccion-bugs-auditoria

Conversation

@TobiasVeiga00

Copy link
Copy Markdown

Qué cambia

Cinco arreglos encontrados en una auditoría del código, cada uno en su propio commit:

  1. Caché del códice (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 en game.test.js.
  2. Aislamiento de errores en el servidor (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.
  3. Fuga en 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.
  4. Temporizador timbre: no se cancelaba si la conexión se cerraba antes del hola.
  5. Limpieza menor: guarda try/catch en la única escritura de localStorage sin proteger (changelog.js), eliminación del manejador huérfano de btn-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

  • Test nuevo 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).
  • Test nuevo en game/js/systems/game.test.js para la invalidación de la caché (verificado por mutación: revierte el fix y falla).
  • Suite existente del servidor completa en verde: 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.
  • El determinismo por semilla no se toca: ningún cambio introduce Math.random() en lógica de juego.

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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant