Skip to content

Entregable 4: auto-informe miembro equipo @BolanosDavid #210

Description

@BolanosDavid

Entregable 4: autoinforme — David Bolaños (@BolanosDavid)

Para este cuarto entregable me encargué principalmente de las áreas de infraestructura y despliegue, rendimiento y observabilidad, motor de juego (Gamey) y nuevas mecánicas de juego, con un total de 20+ PRs mergeadas a master.


Infraestructura, Despliegue y Seguridad

HTTPS automático con Let's Encrypt + Certbot DNS-01 + DuckDNS

Configuración completa de TLS para el dominio yovi-es1c.duckdns.org.

  • Dockerfile para certbot con plugin certbot-dns-duckdns
  • Servicio certbot en docker-compose.yml con volumen letsencrypt compartido con Nginx
  • Nginx actualizado: bloque HTTP redirige a HTTPS, bloque HTTPS con TLS 1.2/1.3 y ssl_session_cache
  • Script de renovación automática (nginx/scripts/renew.sh) vía cron
  • Certificado emitido para el dominio por Let's Encrypt CA E8

Workflow GitHub Actions actualizado para despliegue HTTPS

Corrección del workflow de despliegue automático para que refleje la configuración HTTPS y la clave de Perspective API para filtrado del chat.


Rendimiento y Base de Datos

Migración Auth SQLite → PostgreSQL

Reemplazo completo de SQLite por PostgreSQL en el servicio de autenticación.

  • Reemplazado sqlite3 con pg.Pool en CredentialsRepository con API async/await
  • Operaciones multi-paso envueltas en transacciones explícitas BEGIN/COMMIT/ROLLBACK
  • Migración del esquema init-auth-db.sql a tipos PostgreSQL (SERIAL, TIMESTAMPTZ, NOW())
  • Añadido servicio auth-db en docker-compose.yml con healthcheck y volumen persistente
  • Tests actualizados: mock pg con vi.hoisted(), normalización SQL con replace(/\s+/g, ' '), manejo de BEGIN/COMMIT/ROLLBACK

Resultados de load test (50 VUs):

Operación Umbral P95 antes (SQLite) P95 después (PostgreSQL) Estado
register < 1500 ms 3940 ms 152 ms ✅
login < 1200 ms 3580 ms 118 ms ✅
refresh < 1200 ms 1690 ms 48 ms ✅

19 005 peticiones · 0 fallos · 57 015 checks superados (100%)


Migración GameService SQLite → PostgreSQL

Migración completa de la capa de persistencia del servicio de juego, incluyendo resolución de tres cuellos de botella independientes bajo carga.

  • Pool PG (PGPOOL_MAX=50) con max_connections=200 y shared_buffers=256MB en game-db
  • POST /moves ahora responde 202 inmediatamente; el bot calcula en background con AbortController (500 ms timeout) y fallback a primera celda disponible
  • Red interna Docker (172.18.0.0/16) incluida en whitelist de Nginx vía bloque geo
  • Tags por operación en k6 con umbrales p(95): create < 500 ms, get_match < 300 ms, move < 2000 ms

Resultados:

Umbral Antes Después
checks rate > 0.95 ~17% 100%
http_req_failed rate < 0.05 ~60% 0.14%
create p(95) — 9.84 ms
move p(95) — 9.14 ms

Observabilidad y Bots

Mejora de observabilidad + capacidades del bot + documentación

Endurecimiento del sistema de observabilidad y ajuste de los niveles de dificultad de los bots.

  • Alcance de notificación de revancha cambiado a global
  • Internacionalización de mensajes faltantes
  • Niveles de dificultad ajustados: Monte Carlo → imposible, Neural → fácil
  • Modelo mejorado con soporte GPU en entrenamiento
  • Timeout específico por respuesta de bot
  • Dashboards de Grafana corregidos

Nuevas Mecánicas de Juego

Honey Mode y Pie Rule en Gamey, GameService y Webapp

Implementación completa de los modos de juego adicionales del juego Y, cubriendo motor, backend y frontend.

Gamey:

  • Soporte de Honey Mode y Pie Rule en game.rs y rules.rs
  • Refactorización de reglas a rules.rs dedicado
  • Actualización de notación YEN con parámetro opcional rules
  • Flags --honey y --honey-cells añadidos a la CLI
  • Spec OpenAPI actualizado

GameService:

  • Columna rules en el esquema de la tabla matches
  • Propagación de reglas por toda la cadena de matchmaking y sesiones online
  • Corrección: persistInitialMatch ahora cubre partidas VS BOT (playerB === null ya no causa return temprano)
  • Corrección: VERSION_MISMATCH ya no bloquea la UI indefinidamente
  • PieRule añadido al catálogo de errores; schema OpenAPI /online/queue documentado

Webapp:

  • Sección "Extras" en CreateMatchPage con toggle de Pie Rule, toggle Honey y input de celdas bloqueadas
  • El tablero renderiza blockedCells de forma diferenciada; celdas bloqueadas no son clickables
  • Botón Pie Rule solo visible cuando es elegible: modo LOCAL_2P, pie activo, exactamente una piedra colocada, segundo turno
  • Hook de matchmaking emite { boardSize, rules }
  • Tests añadidos: payload de extras, renderizado de celdas bloqueadas, visibilidad Pie Rule, bloqueo de clics, propagación de reglas en matchmaking

Funcionalidades Online

Juego entre amigos (friends can play with each other)

Implementación de la funcionalidad que permite a amigos invitarse a partidas online directamente.


Tests

Tests E2E para Webapp

Añadidos tests end-to-end con Playwright cubriendo el flujo completo de la aplicación web.


Corrección de bugs y tests (avatar09)

Corrección de bugs relacionados con el avatar y actualización de la suite de tests.


Documentación

READMEs y OpenAPIs actualizados

Actualización completa de la documentación de todos los módulos y los contratos OpenAPI.


Internacionalización del ranking + correcciones en dashboards Grafana

Internacionalización de la vista del ranking y corrección de los dashboards de monitorización.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

self-reportLabel used to self-reports

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions