--- asset_id: MIN-EL-Jesus-20260619-v01 version: v01 tipo: MIN — Minuta owner: Jesús sherpa: Jess ratificador: pendiente fecha: 2026-06-19 intellibank: IB-EL-EmpowerLabs subbank: EQ-EL-Equipo tags: - MIN - minuta - arranque - induccion - worx - room-inicio --- # Minuta del Día · Jesús · 2026-06-19 ## Qué se hizo - Inducción WORX completa (7 pasos) en Room Inicio con SherpaX Jess. - Paso 1: SherpaX nombrado "Jess". Primer contacto con entidad de identidad. - Paso 2: Encuadre de compromiso — confirmó arranque paso a paso. - Paso 3: Panorama WORX entregado a voz (video pendiente de producción). - Paso 4: Exploración guiada del ecosistema: - 4.1 Identificó las 3 capas del modelo (XDoc · Ritmo · Plataforma emergente). - 4.2 Definió SherpaX, XDoc e HIOrg con sus palabras. - 4.3 Articuló por qué el SherpaX es entidad y no herramienta. - 4.4 Produjo nombre canónico de prueba: `DC-EL-MPX-ServicosBackend-v00`. - 4.5 Ubicó su área de trabajo en el vault: `IB-EL-EmpowerLabs/PB-EL-Project-Bank/PB-SX-SherpaX/`. - Paso 5: Creó esta minuta — primer artefacto real en el vault. ## Decisiones - SherpaX de Jesús se llama **Jess**. - Área de trabajo principal: proyectos bajo `PB-EL-Project-Bank/`, rol Backend. - Perfil del operador creado: `DC-EL-PerfilOperador-Jesus-v01`. ## NEXTs - [ ] Correr `/arrancaroom` al abrir cualquier room nuevo (reflejo #1). - [ ] Explorar los documentos del vault según rol Backend. - [x] Completar Paso 6 y Paso 7 de la inducción. ✓ Inducción completa 2026-06-18. --- ## Sesión tarde · Room api-nodejs-mongo (Points) ### Qué se hizo - **`GET /api/points/history` — campo `icon` con Google Material Icons.** Agregado campo `icon` en el map de `PointsService.getHistory()` con un `iconMap` de 14 acciones (signup, verify_email, complete_profile, read_summary, read_playbook, purchase_playbook, purchase_membership, write_review, daily_visit, social_share, referral_signup, referral_complete, survey, spend). Default: `circle`. El front-end puede usarlo directamente con `ms-icon-google`. - **Iconos para acciones de rally.** Añadidos al `iconMap`: `rally_stage → flag`, `rally_complete → emoji_events`, `rally_top3 → workspace_premium`. - **Fix `LEFT JOIN point_actions` en `getHistory()`.** El JOIN anterior filtraba solo por `organization_id`, dejando `pa.name = NULL` para acciones globales (`is_global = TRUE`, `organization_id = NULL`). Reemplazado por subquery correlated que prioriza acción org-específica y hace fallback a global (misma lógica que `_validateAction`). - **Fix `_checkCooldown()` — dos bugs.** - Bug 1: `cooldown = NULL` caía en el branch `once` (`!null === true`), bloqueando `rally_stage` tras el primer award. Fix: `if (!cooldown) return true` al inicio. - Bug 2: acciones globales (`is_global = TRUE`) con cooldown `once` se chequeaban por org, permitiendo repetirlas en diferentes orgs. Fix: se pasa `action.is_global` a `_checkCooldown`; cuando es global, el query omite `AND organization_id = ?`. ### Decisiones - El `iconMap` vive en `PointsService.js` dentro del `map` de `getHistory()` — no es config externa, ya que es presentación acoplada al dominio del servicio. - Para acciones globales, el scope del cooldown `once` es el usuario completo (cross-org), no per-org. ### NEXTs - [ ] Validar en front-end que `ms-icon-google` renderiza correctamente los nuevos iconos de rally. - [ ] Si se agregan nuevas `action_key` globales, recordar añadirlas al `iconMap` en `PointsService.js`.