Skip to main content

Luna Chat — el léxico del producto

Encargo: que Luna hable exactamente la lengua del dashboard — el sidebar, los títulos de las pantallas de Inteligencia, el CRM y Cerebro — y deje de inventar sinónimos (candidato, universo, mercado, análisis) donde el producto ya tiene una palabra. Base auditada: apps/dashboard/src/i18n/messages.ts (bloque es-MX, línea 1563 en adelante), apps/dashboard/src/redesign/workspaceNav.ts + Rail.tsx (el sidebar real, no el título de página), apps/dashboard/src/intelligence/vocabulary.ts, apps/api/src/luna/luna-tools.ts, luna-turn.service.ts, luna-manual.ts, bench/run-bench.ts. No se editó código. Este doc es solo lectura del vocabulario existente; los cambios de código quedan listados en la última sección para que alguien más los aplique.

El glosario

La regla de separación Proveedores vs Empresas

El comentario que ancla esta regla vive junto a intel.suppliers.title en apps/dashboard/src/i18n/messages.ts:1864-1866:
Proveedores — los directorios propios (DENUE, MexicoIndustry) bajo su propia identidad. “Empresas” queda exclusivamente para el directorio externo de enrichment.
Dicho como lo dice el producto: Proveedores son los directorios que Brein observa y publica bajo su propio nombre — amplios pero no exhaustivos, con evidencia pública verificable (RFC cuando está disponible, adjudicaciones vinculadas). Empresas es, exclusivamente, el directorio externo de enrichment: presencia en la web, dominio, sin revelar contacto hasta una adquisición explícita. La consecuencia operativa para Luna:
  • Todo lo que devuelve market_search con kind:"suppliers" (o cualquier otro kind del cinturón: opportunities, awards, permits, risks) son proveedores — u oportunidades, adjudicaciones, permisos, marcas de riesgo, según el kind — nunca “empresas”. Son observaciones publicadas en los directorios propios de Brein, con la evidencia pública que cada kind trae (RFC, adjudicaciones vinculadas, permisos otorgados).
  • El directorio externo de enrichment (dir.companies.*, respaldado por el buscador de empresas tipo Hunter) no está en el cinturón de Luna todavía — S1 no tiene una herramienta de tipo company_search. Luna no puede ofrecer resultados de Empresas porque no puede consultarlos.
  • Un mismo registro del CRM puede terminar vinculado a ambos mundos una vez que alguien lo conecta por RFC o por dominio — eso es lo que hace la Entidad (record.entity: “identidad entre pipelines del CRM”). Hasta que ese vínculo exista, un proveedor observado en DENUE y una empresa del directorio externo son dos objetos distintos, aunque compartan nombre.
Tres frases que Luna debe decir:
  1. “Encontré 18 proveedores en los directorios propios que coinciden con ‘empaque industrial’ en Jalisco — son observaciones publicadas, algunas con RFC.”
  2. “Esto es un proveedor, no una empresa consolidada: es una fila observada en DENUE en un momento dado.”
  3. “Todavía no puedo buscar en el directorio de Empresas — esa herramienta no está en mi cinturón hoy; sí puedo revisar Proveedores, Licitaciones, Adjudicaciones o Registros.”
Tres frases que Luna no debe decir:
  1. “Encontré 18 empresas que coinciden con ‘empaque industrial’.” (son proveedores, no empresas — vienen del directorio propio, no del enrichment externo).
  2. “Voy a buscar en el mercado general a ver qué candidatos aparecen.” (ni “mercado” como sustantivo genérico, ni “candidato” como sinónimo de resultado).
  3. “Esta empresa tiene 12 adjudicaciones consolidadas.” (una observación de Proveedores no es una empresa consolidada, y “consolidada” reintroduce justo la afirmación que intel.warning.observationNotCompany prohíbe).

Mapa herramienta → palabra

Cada fila: la herramienta de Luna, el sustantivo de producto para lo que devuelve, y la etiqueta que debería verse mientras corre (reemplazando las actuales en luna-turn.service.ts TOOL_LABELS y bench/run-bench.ts COUNT_LABEL, que hoy dicen “Contando el universo real” y “Revisando un candidato”).

Palabras que Luna no usa

Más allá del léxico prohibido de docs/architecture/experience-v2/02-conversaciones.md (apéndice de frases prohibidas), estas son las que este léxico añade porque el producto ya tiene su propia palabra:

Cambios pendientes

Lista mecánica, archivo:línea, de cada lugar en apps/api/src/luna/ (y los docs 01/02 de esta carpeta) que usa una palabra fuera del léxico del producto. Solo lectura — nada de esto se editó.

apps/api/src/luna/luna-tools.ts (6 apariciones)

  • luna-tools.ts:3 — comentario de cabecera: “Cerebro (context_retrieve/context_get), Mercado read-only (…) y Sesión” — “Mercado” aquí se usa correctamente como nombre del grupo, no requiere cambio; se lista solo para que quien aplique el resto no lo confunda con las líneas de abajo.
  • luna-tools.ts:389 (market_search.description) — “Busca candidatos acotados en el mercado: proveedores, oportunidades de gobierno, adjudicaciones, permisos o marcas de riesgo. (…) solo si el candidato tiene un canal de contacto publicado”. Dos usos de “candidato” como sinónimo genérico de fila, y “mercado” como sustantivo de datos.
  • luna-tools.ts:413/415 (market_count.title/description) — título “Mercado: contar” (correcto, nombre de grupo); descripción: “El tamaño real del universo de proveedores (…) esa es una muestra acotada, no el universo.” Dos usos de “universo”.
  • luna-tools.ts:438/440 (market_get.title/description) — “Detalle de UN candidato de mercado (proveedor u oportunidad) (…) solo si el candidato tiene un canal de contacto publicado”. Dos usos de “candidato”; “de mercado” también generaliza donde debería nombrar el kind.
  • luna-tools.ts:456/458 (market_aggregate.title/description) — “NO la uses (…) ni para el tamaño de un universo de proveedores (market_count)”. Un uso de “universo”.
  • luna-tools.ts:543 (usage_read.description) — “lecturas usadas y restantes en el techo horario, créditos de análisis, saldo de créditos de contacto (un ledger distinto)”. “Créditos de análisis” no es un ledger del producto: el ledger real es créditos de inteligencia (settings.credits en messages.ts:2556). Este es el hallazgo más concreto de la auditoría — un nombre de ledger inexistente en una descripción que el modelo lee literalmente.

apps/api/src/luna/luna-turn.service.ts (2 apariciones)

  • luna-turn.service.ts:236market_count: 'Contando el universo real'. “Universo” otra vez, en la etiqueta que la persona ve mientras la herramienta corre.
  • luna-turn.service.ts:237market_get: 'Revisando un candidato'. “Candidato” en la etiqueta visible.

apps/api/src/luna/luna-manual.ts (3 apariciones)

  • luna-manual.ts:212 — “cuenta el universo con market_count”.
  • luna-manual.ts:217 — “el tamaño del universo sale de market_count, jamás del tamaño de una página”.
  • luna-manual.ts:623 — “Tienes herramientas para consultar datos de mercado y el contexto del equipo” — “datos de mercado” como sustantivo genérico; no nombra Proveedores/Licitaciones/Adjudicaciones/Registros.
(luna-manual.ts:234 — “Si vigilar el mercado tiene sentido…” — este uso es más discutible: podría leerse como “vigilar el grupo Mercado completo” en sentido correcto, o como el sustantivo genérico. Se deja anotado para que quien revise decida si necesita nombrar la pantalla.)

apps/api/src/luna/bench/run-bench.ts (1 aparición)

  • bench/run-bench.ts:103const COUNT_LABEL = 'Contando el universo real'. Mismo texto que luna-turn.service.ts:236; el bench mide contra esta etiqueta, así que hay que cambiar ambos lugares juntos o el bench se queda comparando contra la copia vieja.

apps/api/src/luna/bench/briefs.json

  • 0 apariciones. Los briefs y sus expectativas no usan ninguna de las palabras auditadas.

docs/architecture/luna-chat/01-interfaz-luna.md (7 apariciones)

  • 01-interfaz-luna.md:24 — tabla de la escena: “conteo real del universo”.
  • 01-interfaz-luna.md:79 — encabezado ”### 4.2 Mercado (donde nace la lista)” — uso correcto (nombre de grupo), sin cambio.
  • 01-interfaz-luna.md:86 — descripción de market_count: “Tamaño real del universo. Es la única forma legítima de decir ‘hay N’.”
  • 01-interfaz-luna.md:87 — descripción de market_get: “Detalle de un candidato u oportunidad, sin contactos.”
  • 01-interfaz-luna.md:113 — “Previsualiza el alta de empresas del mercado como registros” — “mercado” genérico otra vez.
  • 01-interfaz-luna.md:122 — “Hasta 3 candidatos por empresa, enmascarados” — sobre contactos de una persona, un uso todavía más alejado del producto, que llama a eso “personas”/“decisores”, no “candidatos”.
  • 01-interfaz-luna.md:272 — “Mercado: 13 tools MCP…” — nombre de grupo, sin cambio.
  • 01-interfaz-luna.md:285 — “Cuenta con market_count: ninguna cifra de universo sale de un tamaño de página.”
  • 01-interfaz-luna.md:331 — mockup de terminal: ”✓ 412 candidatos”.

docs/architecture/luna-chat/02-plan-de-ejecucion.md (1 aparición)

  • 02-plan-de-ejecucion.md:50 — “los pasos (‘leí el criterio del equipo’, ‘412 candidatos’)”.

Total de cambios pendientes por archivo