Siempre renderizar la vista previa de la plantilla incluso sin la plantilla de backend salvada
Cuando no se guarda plantilla en el backend (404), cae de nuevo a DEFAULT-CONFIG en lugar de mostrar contenido simple no formateado. El vista previa ahora siemp...
Volver a transmitir plantillas de cliente-lado con datos reales en la vista previa del email
La vista previa mostraba texto de marcador de posición (-member.firstName- etc.) porque usaba el marcador de posición HTML pre-renderizado del backend. Ahora l...
Añadir rspamd config a K8s ConfigMap y establecer ddl-auto a ninguno
La propiedad rspamd.base-url faltaba de la producción ConfigMap, causando CrashLoopBackOff en el despliegue. También corrige dev ddl-auto a ninguno.
Simplificar el selector de fuentes, añadir el seguimiento sucio y el diálogo de cambios sin sobresaldad
- Eliminar los selectores de subtipos de departamento/usuario. para la organización, todos los departamentos y todos los usuarios - Retira el icono del avatar...
Mueve la etiqueta de vista previa en vivo en la barra de encabezado de correo electrónico, quitar Copy HTML botón
Título e icono de la vista previa en vivo ahora se sientan alineados a la derecha dentro del To/Suject Barra de cabeza. Elimó el botón Copy HTML y toda la lógic...
Máve el selector de fuentes en la cabecera de la construcción, plantillas de 2-colas, vista previa más amplia
- Mueve el mentón de Fuente desde la tarjeta superior en la barra de encabezado del panel de la construcción (coinicio de la posición del título de la vista p...
Añadir la opción de Headers y Footers desaparecidos a la navegación por configuración de correo electrónico
Evite el panel de vista previa en vivo desbordar el borde derecho
Cambiar los paneles de flex-basis de flex-basis fija (55%/45%) a flexión menstruable para que la brecha entre ellos se tenga debidamente en cuenta.
Use richTextExtension.configure() en lugar de RichTextExtension class
La clase RichTextExtension no se exporta desde el .lexkit/editor publicado paquete. Utilíce la instancia de TextoExtensión exportada con .configure().
Eliminar el duplicado ContentEditable . use el plugin de RichTextExtension
La rica TextoExtensión ya hace su propio ContentEditable vía RichTextPlugin. Tener un segundo manual ContentEditable creó dos zonas editables. Quita el manual y...
Reshaul KB editor y diseños de página de artículos
Arregárquelo del componente de editor: - Envolver en contenedor de columna flexible para que la barra de herramientas se mantenga fija y el contenido Desplaza...
Add search request/response logging to RagSearchController
Log orgId, query, result count, and full stack traces on error to diagnose 500 responses seen from AIService.
Añadir el cuerpo de respuesta y solicitar la tala a RagClient para la depuración
Conósete la URL de solicitud de búsqueda de RAG, orgId, consulta y cuerpo de respuesta en error para diagnosticar 500 respuestas de RAGService.
Habilitar auto-truncate en el modelo de incrustación para evitar 413 errores
Añadir --auto-truncate bandera para que las entradas que excedan el límite de 256 token son silenciosamente truncado en lugar de rechazado con un error de valid...
Reduce chunk size to fit all-MiniLM-L6-v2 token limit (256 max)
Chunk target was 2000 chars (~512 tokens) but the embedding model only accepts 256 tokens, causing 413 validation errors. Reduce to 800 chars (~200 tokens) with...
Carga incrustó modelo del huésco localPath para evitar fallas de descarga de AbrazoFace
La cápsula de modelo se incrustó estaba en CrashLoopBackOff porque no podía descarga el modelo de AbrazoFace en la startup (red/no problema DNS). Montar el mode...
Use integer match filter for Qdrant searches instead of matchKeyword
The orgId and articleId payload fields are stored as integers via value(Long), but search and delete filters used matchKeyword() which only matches string/keywo...
Index KB articles for RAG on creation, not just when published
Previously the RAG pipeline only indexed PUBLISHED articles, requiring the full review/approval cycle before the AI chat could reference them. Now indexes all a...
Actualizar la página de las reseñas para que coin con los campos enriquecidos de respuesta backend
Utilícese como clave, articleGuid para la navegación, articleTito para la exhibición, y fecha para la fecha. Coincide con el nuevo formato de respuesta de backe...
Artículo de retorno guid/título en la respuesta pendiente de los exámenes
La entidad KbArticleReview tiene el artículo de "JsonIgnore", por lo que el pendiente los comentarios de la atalía devolviendo los exámenes sin detalles del art...
Surface mensajes de error de backend reales en el artículo create/edit
Read errData.error (matching backend JSON format) en lugar de errData.message. Arréjalo proxy a los errores JSON de backend directamente en lugar de envolverlos...
Añadir manejo de errores para crear:Artículo endpoint
Envuelta createArticle llamada en la captura de prueba para devolver el error JSON adecuado respuestas en lugar de la página de error HTML HTML predeterminada d...
Añadir rico falta de TextoExtensión para permitir la entrada de texto de editor
El RichTextPlugin de richTextExtension es necesario para el Lexical es ignorada silenciosamente.
Añadir el diseño compartido de KB con pestañas persistentes y arreglar las revisiones error de página
Crear app/kb/layout.tsx con pestañas KbNavBar compartidas en todos los artículos, Páginas de recursos y páginas pendientes de revisión. Eliminar las cáscaras ex...
Actualizar la placa de correo electrónico de navtop cuando el mensaje se marca como leído
Envío de correo electrónico: evento cambiado por pliegar después de marcar un mensaje como leído, Así que MailButton vuelve a poner de nuevo el conteo sin leer ...
Revertir la URL de email WebSocket a la misma-origen Next.js ruta de reescriminar
Utilice /email-ws sobre el mismo origen, proxied by Next.js reescribe a EmailService a través de k8s DNS interno. SockJS HTTP recompromeds (xhr-streaming, xhr-p...
Eliminar las cabeceras de WebSocket codificados duros de middleware de email middleware
Traefik v3 maneja las cabeceras de actualización/conexión de forma nativa. Feleccionándolos rompieron transportes de caída de SockJS (xhr-streaming, xhr-polling...
Conecte el correo electrónico WebSocket directamente al subdominio de email.
Next.js rewrites no pueden actualizar las conexiones HTTP a WebSocket, causando la conexión STOMP para fallar silenciosamente después de 3 reintes. Ahora usa lo...
Servicio de Trones de Auto-No renovar certificados SSL caducados
El servicio de disco automático importaba certas vencidos del almacenamiento compartido y saltándose la creación de Certificado CR, por lo que el cert-manager n...
Añadir 30s encuestando falte de recompra para actualizaciones de correo electrónico en tiempo real cuando WebSocket no está disponible
La conexión WebSocket falla silenciosamente tras 3 urnas, dejando la interfaz de usuario permanentemente ranta. Esto añade un intervalo de votación de 30 segund...
Renombre botón del equipo para Chat Ahora y cambiar el panel a la activación de click-on solo
Eliminar la pestaña sucursal y la red y simplificar las etiquetas de las pestañas de cuenta
Alinear las pestañas de rama-configuración y automatización con el diseño de pestaña de facturación
Estandarizar los patrones de diseño a través de las pestañas de configuración: relleno consistente, componentes de vacío compartido, estructura de mesa a juego ...
Utilice Email compartidoWebSocketContext para actualizaciones de placas no leídas en tiempo real
MailButton estaba creando una conexión WebSocket duplicada a través de useEmailWebSocket() y aumentando con optimismo el conteo no leído. Ahora usa el compartid...
Renombre de "Crear nuevo correo electrónico" a "Compar nuevo correo electrónico" en desplegable por correo
Retire máx-altura y barra de desplazamiento de la categoría de mapa de caracteres selector
Redute media feed WebSocket a través de los medios.* subdominio con límite de reinte
useMediaFeedWebSocket se estaba conectando a la misma-or-origin /ws (404) en lugar de media.kamocrm.com. Arreglar la construcción de URL para combinar use patró...
Correcto nombres de campo de KB para que coinijan a entidad de backend
Frontend estaba usando nombres de campo equivocados (fechaModificado, contenido, autorName) en lugar de los campos reales de backend (citaActualizado, contentJs...
Corre directo enviar para la revisión URL de endpoint API en la página de artículo de KB
Desajuste de tipo COALESCE en seguridad.level . columna es varchar no int
La consulta de SQL para los detalles del usuario durante la creación de sesión estaba fallando con 'expreciaciones COALESCE incompatibles: espera que 0 sea de t...
Eliminar el registro de depuración, añadir un correo electrónico WS volvertry al límite de WS, correo electrónico proxy WS a través de k8s DNS
Retire las declaraciones de verbose.log de useUserInfo, NavTop, NavPri, MiembroListProvider, SessionManager, sessionMonitor, avatarUtils, y useChatWebSocket que...
Grant all rights when rights list is empty (rights system not yet enforced)
Correct tiene la derecha para que cointe con el formato de matriz de derechos planos y modo dios de honor
Los derechos de sesión se almacenan como ["VIEW-DASHBOARD", ...] no [nombre, configuración]. También eludir los controles correctos cuando GD (modo de la dama) ...
Rename qdrant config properties to avoid K8s env var collision
Kubernetes auto-creates QDRANT_PORT env var from the qdrant Service, which overrides the Spring property with 'tcp://ip:port' instead of an integer. Renamed to ...
Make NATS consumer startup resilient with retry logic
Consumer now retries subscription in a background thread with backoff if KB_EVENTS stream doesn't exist yet. Prevents crash loop when KBService hasn't published...
Como lo que ves enviaste?
Cada una de estas actualizaciones aterriza en su espacio de trabajo automáticamente. Empieza gratis y verlo crecer semana tras semana.