workspace-v1/orchestration/analisis/VALIDACION-PLAN-GAMIFICATION-2026-01-10.md
rckrdmrd e56e927a4d [MAINT-001] docs(orchestration): Actualizacion directivas SIMCO, perfiles y documentacion
Cambios incluidos:
- INDICE-DIRECTIVAS-WORKSPACE.yml actualizado
- Perfiles de agentes: PERFIL-ML.md, PERFIL-SECURITY.md
- Directivas SIMCO actualizadas:
  - SIMCO-ASIGNACION-PERFILES.md
  - SIMCO-CCA-SUBAGENTE.md
  - SIMCO-CONTEXT-ENGINEERING.md
  - SIMCO-CONTEXT-RESOLUTION.md
  - SIMCO-DELEGACION-PARALELA.md
- Inventarios actualizados: DEVENV-MASTER, DEVENV-PORTS
- Documentos de analisis agregados:
  - Analisis y planes de fix student portal
  - Analisis scripts BD
  - Analisis achievements, duplicados, gamification
  - Auditoria documentacion gamilit
  - Backlog discrepancias NEXUS
  - Planes maestros de resolucion
- Reportes de ejecucion agregados
- Knowledge base gamilit README actualizado
- Referencia submodulo gamilit actualizada (commit beb94f7)

Validaciones:
- Plan validado contra directivas SIMCO-GIT
- Dependencias verificadas
- Build gamilit: EXITOSO
2026-01-10 04:51:28 -06:00

153 lines
4.0 KiB
Markdown

# VALIDACION DEL PLAN - ERRORES GAMIFICATION SUMMARY
**Fecha:** 2026-01-10
**Referencia:** PLAN-FIX-GAMIFICATION-SUMMARY-2026-01-10.md
**Estado:** VALIDADO CON OBSERVACIONES
---
## 1. VALIDACION DE DATOS
### 1.1 Profile `cccccccc-cccc-cccc-cccc-cccccccccccc`
```sql
-- Query ejecutada:
SELECT id, email, display_name, role
FROM auth_management.profiles
WHERE id = 'cccccccc-cccc-cccc-cccc-cccccccccccc';
-- Resultado: 0 rows (PROFILE NO EXISTE)
```
### 1.2 User Stats para el usuario
```sql
-- Query ejecutada:
SELECT id, user_id, level, total_xp, ml_coins
FROM gamification_system.user_stats
WHERE user_id = 'cccccccc-cccc-cccc-cccc-cccccccccccc';
-- Resultado: 0 rows (NO EXISTE)
```
### 1.3 Total de profiles en base de datos
```sql
-- Query ejecutada:
SELECT COUNT(*) as total_profiles FROM auth_management.profiles;
-- Resultado: 48 profiles (usuarios reales de producción)
```
---
## 2. HALLAZGO CRITICO
### El profile NO existe en la base de datos
El usuario `cccccccc-cccc-cccc-cccc-cccccccccccc` (student@gamilit.com) está definido en los seeds pero **NO fue insertado** en la base de datos actual.
**Ubicación del seed:**
- `apps/database/seeds/dev/auth_management/04-profiles-complete.sql` (líneas 124-149)
**Estructura del seed:**
```sql
(
'cccccccc-cccc-cccc-cccc-cccccccccccc'::uuid, -- profiles.id (PK)
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'::uuid, -- tenant_id
'cccccccc-cccc-cccc-cccc-cccccccccccc'::uuid, -- user_id (FK a auth.users)
'student@gamilit.com',
...
)
```
**Observación importante:** En este seed específico, `profiles.id == profiles.user_id` (mismo UUID). Esto significa que:
- Para ESTE usuario específico, la búsqueda por `user_id` funcionaría (si el profile existiera)
- Pero para usuarios normales donde `profiles.id != profiles.user_id`, el código actual fallaría
---
## 3. ANALISIS ACTUALIZADO DEL BUG
### 3.1 Casos de uso
| Caso | profiles.id | profiles.user_id | Búsqueda actual | Resultado |
|------|-------------|------------------|-----------------|-----------|
| Usuario seed (testing) | cccc... | cccc... | `user_id = cccc...` | ✅ Funciona (si existe) |
| Usuario normal | 1234-... | 5678-... | `user_id = 1234...` | ❌ No encuentra |
### 3.2 Impacto real
El bug en `validateProfileExists` solo afectaría a usuarios normales (no-seed) donde:
- El frontend envía `profiles.id` (PK)
- El código busca por `profiles.user_id` (FK diferente)
- No encuentra el profile → Error
Para usuarios seed donde `id == user_id`, el bug está enmascarado.
---
## 4. PLAN REFINADO
### 4.1 Corrección Inmediata (Prioridad ALTA)
**Ejecutar seed de usuarios de testing** para crear el profile faltante.
```bash
# Opción 1: Ejecutar seed específico
cd apps/database
PGPASSWORD=XXX psql -h localhost -U gamilit_user -d gamilit_platform \
-f seeds/dev/auth_management/04-profiles-complete.sql
# Opción 2: Insertar solo el usuario faltante manualmente
```
### 4.2 Corrección Preventiva (Prioridad MEDIA)
**Corregir el código** en `user-stats.service.ts` para buscar por `id`:
```typescript
// Línea 52: Cambiar
where: { user_id: userId }
// Por:
where: { id: userId }
```
Esto previene futuros problemas con usuarios normales.
---
## 5. DECISION
| Acción | Prioridad | Impacto |
|--------|-----------|---------|
| Crear profile seed faltante | ALTA | Resuelve error inmediato |
| Corregir búsqueda en código | MEDIA | Previene bugs futuros |
**Recomendación:** Ejecutar AMBAS acciones.
---
## 6. CONFIRMACION DE DEPENDENCIAS
### 6.1 Otros archivos que usan profileRepo.findOne con user_id
```
✅ Solo mocks en tests (no código de producción afectado)
- exercise-submission.service.spec.ts (16 mocks) - son mocks, no código real
```
### 6.2 Otros servicios que dependen de user_stats
```
✅ Todos se beneficiarán cuando user_stats se pueda crear:
- achievements.service.ts (getUserAchievementStats, detectAndGrantEarned)
- user-stats.controller.ts (todos los endpoints)
```
---
**Validado por:** Claude (Arquitecto Técnico)
**Fecha:** 2026-01-10
**Próximo paso:** FASE 5 - Refinamiento → FASE 6 - Ejecución