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.
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.certbot-dns-duckdnsdocker-compose.ymlcon volumenletsencryptcompartido con Nginxssl_session_cachenginx/scripts/renew.sh) vía cronWorkflow 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.
sqlite3conpg.PoolenCredentialsRepositorycon API async/awaitBEGIN/COMMIT/ROLLBACKinit-auth-db.sqla tipos PostgreSQL (SERIAL,TIMESTAMPTZ,NOW())auth-dbendocker-compose.ymlcon healthcheck y volumen persistentepgconvi.hoisted(), normalización SQL conreplace(/\s+/g, ' '), manejo deBEGIN/COMMIT/ROLLBACKResultados de load test (50 VUs):
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.
PGPOOL_MAX=50) conmax_connections=200yshared_buffers=256MBengame-dbPOST /movesahora responde 202 inmediatamente; el bot calcula en background conAbortController(500 ms timeout) y fallback a primera celda disponible172.18.0.0/16) incluida en whitelist de Nginx vía bloquegeoResultados:
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.
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:
game.rsyrules.rsrules.rsdedicadorules--honeyy--honey-cellsañadidos a la CLIGameService:
rulesen el esquema de la tablamatchespersistInitialMatchahora cubre partidas VS BOT (playerB === nullya no causa return temprano)VERSION_MISMATCHya no bloquea la UI indefinidamentePieRuleañadido al catálogo de errores; schema OpenAPI/online/queuedocumentadoWebapp:
CreateMatchPagecon toggle de Pie Rule, toggle Honey y input de celdas bloqueadasblockedCellsde forma diferenciada; celdas bloqueadas no son clickablesLOCAL_2P, pie activo, exactamente una piedra colocada, segundo turno{ boardSize, rules }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.