Fix: persist game profile + reframe onboarding as CMO recommends
Qué hay en esta rama
Dos cosas que pidió el CEO tras la primera versión:
Bug: el juego no quedaba registrado tras el onboarding
El onboarding anterior guardaba el juego, género, plataformas, etc. solo en localStorage del navegador — nada se mandaba al servidor. El CEO pasó el flujo y no vio su juego en ningún sitio del cockpit. Fix: nuevo módulo `game_profile.py` con validación estricta de enums, clamp de números y escritura atómica, accesible vía `GET/POST /api/profile`. El onboarding ahora persiste el perfil completo al finalizar.
Adicional: el cockpit CEO muestra una tarjeta "Tu juego" en el sidebar con los datos del perfil (juego, género, plataformas, fase, redes, estilo, presupuesto) y un link a rehacer onboarding.
Reframe: CMO recomienda, CEO confirma
Feedback del CEO: "no debería ser yo quien elija entre AppLovin vs Unity Ads, ese es tu trabajo". Correcto. Rediseño del paso 2, y recomendaciones añadidas en pasos 3 y 4:
- Paso 2 (redes): una tarjeta verde con el plan inicial concreto (ej: AppLovin + Unity Ads para móvil casual, Steam orgánico sin ads para PC puro, híbrido paralelo si ambos). El CEO solo dice "me parece bien". Un link colapsable lleva a la checklist completa de 8 redes para quien ya tiene cuentas.
- Paso 3 (presupuesto): tarjeta con presupuesto semanal y tope por experimento recomendados según fase y plataforma. Botón "Usar mi recomendación". Inputs siguen editables.
- Paso 4 (estilo): opción balanceada marcada con píldora "recomendado" y hint explicando cuándo escalar o relajar.
Resumen de cambios técnicos
| Archivo | Cambio |
|---|---|
| `src/agents/gaming_cmo/game_profile.py` | Nuevo. Persistencia + validación del perfil. |
| `tests/test_game_profile.py` | Nuevo. 8 tests cubren enums inválidos, clamps, corrupción, sanitización. |
| `src/agents/gaming_cmo/main.py` | Añade endpoints `GET/POST /api/profile`. |
| `docs/onboarding/index.html` | Recomendación en pasos 2-4, POST a `/api/profile` al finalizar, i18n ampliado. |
| `docs/ceo_portal/index.html` | Nueva tarjeta "Tu juego" alimentada por `/api/profile`. |
Test plan
-
79/79 pytest verde (71 previos + 8 nuevos) -
`GET /api/profile` responde con `is_configured: false` si el archivo no existe -
`POST /api/profile` con payload completo persiste + `GET` devuelve los mismos valores -
Enums inválidos (ej. plataforma "xbox", estilo "chaos") se filtran sin romper -
Kwargs desconocidos (ej. `evil_field`) se eliminan antes de escribir -
Onboarding en producción en https://cmo.laparedita.com/onboarding/ termina mostrando el resumen y el cockpit ya lee el perfil
No incluido (punted)
- Self-improvement agent con Hermes de Nous: el CEO preguntó por usar Hermes 3 como feature de automejora continua. Mi lectura: prematuro sin datos reales. Hook para meterlo queda pendiente hasta Milestone E.
- RBAC real por rol: todos los usuarios autenticados siguen pudiendo llegar a todas las rutas; la separación es solo de UI. Planteado como siguiente iteración cuando haya demanda.