El producto, versión a versión

Novedades del producto

Esta página se genera del mismo registro de versiones con el que trabaja el equipo, sin reescribir nada: cada parte del software (las llamamos superficies) con su versión actual y sus tres últimas entregas. Lo que es de puertas adentro se marca como interno, no se adorna.

Home / Cadena v1.5.0

v1.5.0 · 2026-09-14

  • «Novedades» del Inicio: pintaba las 441 entradas del changelog (~630.000 caracteres) en cada visita; ahora 20 y «Ver más» de 20 en 20 (no se pierde ninguna).

v1.4.0 · 2026-09-04

  • WEB COMO CONTRATO (R3, 4-sep-2026): 2 cambios — últimos metros: candados del agente, montajes en pantalla, Review Loop.
  • /hoy suma una nueva fila cross-cliente «cola de contenido baja»: lee leerColaContenidoEstado (contrato X1) para cada cliente activo y avisa de quién tiene la cola por debajo del umbral, separando honestamente «cola baja» de «no se pudo comprobar» (agente apagado).

v1.3.0 · 2026-09-04

  • Sidebar con badges cruzados reales: «Conversaciones» cuenta traspasos esperando de TODOS los clientes activos (handoffsPendientesTodos, refresco cada 60s) y «Captación» cuenta campañas de correo pendientes (contarCampanasCorreoPendientes) — antes ninguno de los dos números aparecía en el nav pese a que sus agregadores cross-cliente ya estaban construidos por T3/T7.
  • «Hoy» (F18) suma tres franjas cross-cliente que faltaban: propuestas de ads ya aprobadas por el cliente y esperando que la agencia las ejecute (con aviso explícito y separado si algún cliente no se pudo leer — un fallo de red ya no se confunde con «sin propuestas», blank>false), cambios de web en marcha del circuito ticket→WebsiteChange con el clienteId resuelto vía su website, y leads nuevos prospectados para un cliente concreto.

Inteligencia v1.13.0

v1.13.0 · 2026-09-14

Cambios internos, sin nota pública.

v1.12.0 · 2026-09-04

  • WEB COMO CONTRATO (R3, 4-sep-2026): 1 cambios — últimos metros: candados del agente, montajes en pantalla, Review Loop.

v1.11.0 · 2026-09-04

  • Gate nuevo: ningún builder de prompt puede CALCULAR una fórmula de KPI (ROI/CTR/CPA/CPC/CPL/tasa/%/engagement) dentro del propio literal — invariante 6 aplicado al texto exacto que ve el modelo, con caso de control positivo y negativo para que el propio detector no quede roto en silencio.
  • Informe vivo: cuatro secciones nuevas listas para pintarse (propuestas de publicidad decididas por el cliente, resultados de correo por campaña, leads cualificados aceptados/descartados, cambios de web pedidos y su estado) — cada una con su motivo en español cuando no hay dato todavía.
  • 3 afirmaciones marcadas PENDIENTE_RAUL (7 plataformas vs. X retirada en contenido-diario; captación disponible:false vendida sin aviso; transporte de correo apagado con disponible:true) quedan citadas en BLOQUEOS.md-style para que Raúl decida, nunca resueltas por el agente (invariante 1).

Orquestador v1.32.0

v1.32.0 · 2026-09-14

Cambios internos, sin nota pública.

v1.31.0 · 2026-09-11

  • Servidor: la búsqueda web de Anthropic de último recurso para competidores usa Haiku 4.5 si no hay modelo pineado (antes Sonnet 4.5): de la respuesta solo se leen las URLs.

v1.30.1 · 2026-09-10

  • CLAUDE CON LA CLAVE EN EL SERVIDOR (10-sep-2026): las puertas del Orquestador que exigían la clave del navegador aceptan la del servidor, que es como está producción.
  • Workflows: el camino estructurado (Cerebro → workers con contrato) caía SIEMPRE al clásico sin clave en el navegador. Nueva ruta del agente POST /api/chat/estructurado (claudeStructured con la clave del servidor; solo el propietario con 2FA; rate limit de rutas caras; anunciada en /api/health como capacidad claude-estructurado) y callClaudeStructured lleva allí el marcador. El workflow solo la usa si el agente la anuncia (claveParaCaminoEstructurado): un agente viejo sigue por el camino clásico, nunca se rompe.
  • Orquestador multi-agente (LangGraph): exigía la clave del navegador aunque sus nodos generan por intelligentGenerate, que ya va al servidor; ahora corre con la del servidor y el juez de calidad (Haiku, callHaikuQA) también, en vez de quedarse en la heurística.
  • Piloto Local: «Probar chat» ya no exige clave en el navegador (el chat va al agente, que pone la suya) y la tarjeta Inteligencia deja de decir «local-files-only» sin la etiqueta Claude cuando el servidor tiene Claude (getIntelligenceStatus).

Clientes v2.14.0

v2.14.0 · 2026-09-15

Cambios internos, sin nota pública.

v2.13.0 · 2026-09-15

  • CONEXIONES DEL CLIENTE: INSTAGRAM CON SU PROPIA TARJETA (Raúl: «si lo podemos conectar por separado nos vendría mucho mejor»). «Instagram Reels» colgaba de la conexión de Meta y solo valía el Instagram vinculado a la página de Facebook. Ahora Instagram se conecta con su propia cuenta (Instagram Login), con su correo aunque sea otro que el de Facebook, multicuenta como TikTok o YouTube y con el contador de 100 publicaciones cada 24 h. Si todavía sale por la página de Facebook, la tarjeta lo dice; si la página no lo tiene, dice que se conecte ahí mismo.
  • «Qué pedirle al cliente» ya no dice «vincular su Instagram a la página de Facebook y volver a conectar Meta»: que conecte Instagram con su propio botón. Con la conexión directa viva, Instagram cuenta como conectado aunque la página no lo tenga; si caduca, se dice.

v2.12.0 · 2026-09-14

  • MÓVIL: píldoras de estado deslizables; la fila de acciones se reparte y «Generar fichas en lote» / «Importar leads» van a «Más»; «Exportar» ya no se abre fuera de la pantalla. Ficha del cliente: cabecera apilada (identidad arriba, «Editar» / «Eliminar cliente» a lo ancho), sin solaparse; pasos de la canalización más estrechos en el móvil. Se salía 239 px (cartera) y 19 px (ficha).

Captación v2.16.0

v2.16.0 · 2026-09-06

  • NOCHE PORTAL 4H (R2, 6-sep-2026): Captación admin enseña, por cliente, la decisión que el cliente tomó en su portal sobre cada lead (aceptado / descartado / cerrado, con fecha) y filtro «solo decididos». Solo lectura de crm_leads; sin decisión ⇒ «—» (no se inventa «pendiente»). Mover etapa al aceptar queda fuera: no existe función pura de mover etapa para CRMLead (solo para Deal).

v2.15.0 · 2026-09-04

  • WEB COMO CONTRATO (R4, 4-sep-2026): Review Loop ACTIVADO en las pantallas (2 cambios).

v2.14.0 · 2026-09-04

  • WEB COMO CONTRATO (R3, 4-sep-2026): 3 cambios — últimos metros: candados del agente, montajes en pantalla, Review Loop.

Entrega v2.3.0

v2.3.0 · 2026-09-14

  • MÓVIL: la fila del selector de cliente se reparte y el «1/7 hitos» baja a su línea; se salía 34 px. Armazón con cajón ☰.

v2.2.1 · 2026-09-10

Cambios internos, sin nota pública.

v2.2.0 · 2026-09-04

  • WEB COMO CONTRATO (R3, 4-sep-2026): 1 cambios — últimos metros: candados del agente, montajes en pantalla, Review Loop.

Estudio de Contenido v1.50.0

v1.50.0 · 2026-09-15

Cambios internos, sin nota pública.

v1.49.1 · 2026-09-14

  • MÓVIL: en «Subir vídeo a YouTube» las 7 casillas y opciones (para niños, contenido IA, visibilidad, programar, avisar suscriptores) medían 13-16 px: ahora la fila entera es el objetivo táctil (≥ 44-48 px) y la casilla crece a 20 px. En escritorio, igual.

v1.49.0 · 2026-09-14

  • SUBIR A YOUTUBE, EN PRODUCCIÓN (Google aprobó youtube.upload y youtube.readonly el 14-sep-2026). «Subir vídeo a YouTube» trae: casilla «Contiene contenido realista generado o alterado con IA» (status.containsSyntheticMedia, solo si se marca), «Avisar a mis suscriptores» (notifySubscribers), idioma del vídeo (defaultLanguage/defaultAudioLanguage) y la MINIATURA personalizada de verdad (thumbnails.set; antes nadie la mandaba aunque la justificación a Google la citaba). Si el canal no puede usar miniaturas, aviso con youtube.com/verify y el vídeo sigue publicado.
  • Errores pasajeros de YouTube (ritmo, 5xx, corte de red) se reintentan 15 min → 1 h → 3 h sin duplicar el vídeo (se pregunta a la sesión de subida antes de repetir); permiso retirado en Google = mensaje claro de «vuelve a conectar» en vez de un 401 mudo.
  • Tras subir, el motor LEE el vídeo de vuelta (youtube.readonly, videos.list en lotes de 50): estado y privacidad reales, y UN aviso al cliente si YouTube lo rechaza, falla el procesado o lo deja privado sin pedirlo (auditoría de la API de YouTube pendiente). Lo leído se borra a los 30 días o en cuanto el cliente retira el permiso (política de YouTube).
  • Cupo real (documentación oficial, 14-sep): 100 subidas/día para el proyecto entero y 10.000 unidades para lo demás (miniatura = 50).

Métricas v2.2.0

v2.2.0 · 2026-09-15

Cambios internos, sin nota pública.

v2.1.1 · 2026-09-12

  • El estado de cada red del cliente se lee del servidor (lo que conectó en su portal), no del navegador; la cuenta de la agencia no cuenta para un cliente; Google Business dice «Sin conectar» en vez de «Aún no soportada» cuando no hay conexión.

v2.1.0 · 2026-08-30

  • EL PANEL DE VERDAD: ¿SE ENTREGA HOY? Por cada uno de los seis servicios, si se puede entregar de verdad hoy, y si no, si falta CODIGO o falta TRAMITE, y de quien es la llave. Leido de fuentes reales (el interruptor del correo, los gates de plataforma pendientes, el catalogo, las cuentas conectadas), NUNCA de una lista escrita a mano que se quedaria vieja en una semana.
  • El panel destapa solo una contradiccion que nadie habia puesto por escrito: el catalogo marca «correo» como vendible mientras su interruptor de envio real esta apagado. Lo declara como contradiccion explicita en vez de ocultarla.
  • Donde no hay señal legible (¿existe el VPS?, ¿que transporte de WhatsApp atiende a este cliente?) devuelve «no consta» con el motivo exacto — nunca un «no» supuesto.

Estudio Web v1.15.0

v1.15.0 · 2026-09-15

  • Formularios: el kit observa TODOS los envíos de la web (reservas, presupuestos, contacto, newsletter…) sin interferir con el envío nativo (o los atiende, con data-dv-form); cada envío guarda los campos OBSERVADOS tal cual y un tipo INFERIDO por código con la regla visible (o fijado por la agencia con el mapa formId→tipo); honeypot (en el kit «empresa» es campo legítimo), tope por IP, marcar atendido. Cada envío también entra en web_leads (Captación → Buzón web) y, con la casilla de correo marcada, en la lista de correo (correo_contactos) por los MISMOS escritores del sites-server.
  • SEO y GEO con las herramientas gratuitas: Search Console por CUENTA DE SERVICIO (GOOGLE_SA_JSON; sin OAuth nuevo, que obligaría a re-verificar la app: clics, impresiones, CTR, posición, consultas, páginas, inspección de URL, sitemaps), Chrome UX Report (vitales reales 28 d, misma clave que PageSpeed), IndexNow (Bing/Yandex/Naver/ChatGPT-search; A1), Bing Webmaster, Safe Browsing, datos estructurados (JSON-LD presente, campos que faltan para Restaurant/LocalBusiness/Menu/FAQ y el JSON-LD recomendado SOLO con lo observado), salud (HTTPS/cert, cabeceras, robots.txt con bots de IA, sitemap, llms.txt, OG, canonical, mixed content), enlaces rotos (rastreo interno ≤ 60 páginas). Cada herramienta dice si está configurada y qué paso falta (comoActivarEs); nunca inventa.

v1.14.1 · 2026-09-10

Cambios internos, sin nota pública.

v1.14.0 · 2026-09-06

  • NOCHE PORTAL 4H (R2, 6-sep-2026): los cambios de web que pide el cliente desde su portal entran en el circuito de Estudio Web.
  • R4a (Q2): ReleasesPanel y CambiosClientesCard usan transicionarConTicket cuando el cambio tiene ticket de origen (siempre, en esa bandeja): cada avance pedido → en marcha → hecho llega al ticket de Soporte del cliente; un fallo del reflejo se avisa en ámbar sin revertir. Revisión adversarial: el botón «Publicar» de CambiosClientesCard aún usaba transitionChange a secas → corregido. transicionarConPostMortem pasa now (publishedAt ya no queda vacío).

Campañas v1.20.0

v1.20.0 · 2026-09-15

  • SALUD DE LA CUENTA PUBLICITARIA (ads_read): en «Cuentas conectadas» aparece en ámbar/rojo cualquier cuenta de Meta que no esté activa («Deshabilitada», «Impagada», «Pendiente de revisión»…) con el motivo de Meta traducido (política de anuncios, riesgo en el pago…), leído de la radiografía Meta del cliente. Solo lectura; sin radiografía no se pinta nada.

v1.19.0 · 2026-09-14

Cambios internos, sin nota pública.

v1.18.1 · 2026-09-10

Cambios internos, sin nota pública.

Conversaciones v1.28.0

v1.28.0 · 2026-09-15

  • SALUDO Y PREGUNTAS DE ARRANQUE DE MESSENGER (pages_manage_metadata): en la pestaña Bot, bloque «Messenger» con el estado de la página y un formulario (saludo + hasta 4 preguntas de ≤80 caracteres) que configura messenger_profile (greeting, ice_breakers, get_started). Un postback (pregunta pulsada) se trata como texto para el bot. GET/POST /api/ig/messenger/perfil.

v1.27.0 · 2026-09-15

  • Si la página de Facebook conectada no tiene Instagram, la pestaña Conexión ofrece conectarlo directo ahí mismo, y el aviso del bot ya no manda a las «Cuentas vinculadas» de Facebook: Instagram tiene su propio botón y vale otra cuenta u otro correo que Facebook.

v1.26.1 · 2026-09-14

Cambios internos, sin nota pública.

Agenda v2.2.1

v2.2.1 · 2026-09-14

  • Las citas que crea el bot llevan la misma marca que las de la Agenda (extendedProperties.private davinci=1, origen=bot): la Agenda las reconoce como suyas.

v2.2.0 · 2026-09-13

  • «CREO EL EVENTO Y NO SALE»: se creaba en Google, pero «Tu calendario» estaba desmarcado en «Mis calendarios» (preferencia guardada en el navegador) y la capa entera no se pintaba. Ahora crear un evento vuelve a mostrarla y lo dice, y mientras esté oculta sale arriba «Tus eventos de Google Calendar están ocultos» con el botón «Mostrar».
  • DESCONECTAR EN SERIO: desconectar Google Calendar (desde la Agenda o desde «Mis redes») suelta también el bot (desvincularCalendarioDelBot) y la agenda olvida la conexión y lo que tenía en memoria al momento (agendaSync.olvidar): ya no se siguen viendo los eventos.

v2.1.0 · 2026-09-13

  • RESERVAR UNA CITA DENTRO DEL CALENDARIO (panel y portal, la misma pieza): botón «Reservar una cita» en la barra y en «Crear» (y «Cita» al pulsar en un hueco de la rejilla). Mini calendario con los días con horas libres, completos o sin horario (del horario de citas de la cuenta y lo ya cargado en la agenda; donde miró el servidor, manda él), «Ver huecos libres» (la ruta de siempre, agenda/huecos: solo acepta «cuantos», se piden 30), las horas libres como botones y las ya ocupadas como «Reservada»; nombre obligatorio, teléfono y nota → cita/crear. La cita sale en el calendario al momento y la siguiente lectura la deja como diga el servidor.
  • VER HORAS LIBRES en Día y Semana: sombrea en verde las franjas que se pueden reservar como cita en los días a la vista, con un resumen («N horas libres para citas…»). Si el servidor no ofrece horas (calendario conectado sin poder leerse, agenda apagada) no se sombrea nada y se dice por qué: nada a ciegas.
  • UNA CITA SE MUEVE COMO CITA: pulsar un evento del calendario creado por una cita abre la ficha de esa cita; arrastrarlo la reprograma (waReprogramarCita; en el portal, la puerta nueva cita/reprogramar), nunca un cambio del evento a pelo, y vuelve a su sitio si el servidor dice que no; estirarla no (la duración la pone el horario). Quitarla abre su ficha para cancelarla. En la ficha, «Mover esta cita»: día y hora entre los huecos libres.

Portal Cliente v3.60.0

v3.60.0 · 2026-09-15

Cambios internos, sin nota pública.

v3.59.0 · 2026-09-15

Cambios internos, sin nota pública.

v3.58.1 · 2026-09-15

  • MIS REDES · LA TARJETA DE INSTAGRAM YA NO MIENTE (Raúl: «no me dejaba desconectarme, no hacía absolutamente nada… la única forma de conectarme fue desde la pestaña del error»). Bastaba con tener Facebook y una página para decir «Conectada · por tu página», tuviera Instagram o no: «Desconectar» no tenía nada que quitar, al desconectar Facebook se «desconectaba» también Instagram y no quedaba botón para conectarlo. Ahora solo sale «por tu página» si Meta ha comprobado que esa página tiene Instagram, y entonces el botón es «Conectar con Instagram» (su propia cuenta); si no, «Conectar» de siempre. Desconectar sin nada propio que quitar lo dice en vez de callar.
  • Desconectar Instagram (conexión directa) dice la verdad: Instagram no deja retirar el permiso desde fuera; se borra nuestro acceso y se explica dónde quitarlo en Instagram. El error del canje ya no culpa a la cuenta de quien conecta: es la configuración de la app de Instagram de la agencia.

Empresa v1.15.0

v1.15.0 · 2026-09-14

  • MÓVIL: el submenú del CEO (Salud, Pipeline…) pasa a tira deslizable; se salía 449 px. Armazón con cajón ☰.

v1.14.0 · 2026-09-04

Cambios internos, sin nota pública.

v1.13.0 · 2026-08-30

  • PLANES EXCLUYENTES QUE SE SUMABAN. El presupuesto avisaba de que las tres gamas de web (y los tres formatos de contenido) son EXCLUYENTES... y luego las sumaba todas: una cesta con las tres gamas daba 7.480 € de alta y 338 €/mes por una web que nadie tiene tres veces. Ahora solo cuenta la primera elegida y el resto se marca no contratable, asi que el total refleja que falta decidir la gama.
  • Se podia CANCELAR una cita ya celebrada o marcada como no presentada. Una cita celebrada YA OCURRIO, y la cuenta de resultados lee esas citas para facturar comision: cancelarla retroactivamente alteraba el historico de facturacion en silencio. Ahora se rechaza con el motivo dicho: un hecho pasado no se cancela, se corrige.

Buzón v1.1.0

v1.1.0 · 2026-09-03

  • WEB COMO CONTRATO (R1, 3/4-sep-2026): 2 cambios para que lo que promete la web exista en motor + admin + portal.

v1.0.3 · 2026-08-27

  • Solo el import de AdjuntoLink (movido a components/portal-cliente el 27-ago): el barrido que commiteó el bump 1.0.2 no recogió este fichero y el guard lo re-marcaba. Cero cambios funcionales.

v1.0.2 · 2026-08-27

Cambios internos, sin nota pública.

15 superficies activas. Las versiones siguen el criterio de la casa: +0.1 es un cambio funcional importante, +1.0 un cambio de arquitectura, y el tercer dígito, correcciones.