Saltar al contenido
KAMOUniverse

Changelog

Qué hay de nuevo.

Cada mejora de la plataforma, a medida que se envía.

  1. · EmailService

    Lee un evento por id

    La página principal mantiene un id de eventos de callback y quiere reabrirlo de la misma diálogo que el calendario utiliza, por lo que necesita ser capaz de buscar el evento por su cuenta. Alcance exactamente como la lista - los propios calendarios del miembro más el organización es tan id perteneciente al calendario de otra persona que dice como ausente en lugar de como prohibido.

  2. · kamo-internal

    Notas flotantes se convierten en una segunda clase de ventana de cabeza hex

    Hex se dirige ahora a dos tipos de ventana: las ventanas de la herramienta emergente siempre lo hacía, y las notas flotantes. Minimize sustituye al viejo roll-up Minimó la pegajosa deja la capa por completo y aterriza en la cabeza hechicena muelle con su propio color de nota, donde el popover está abierto / cerrado y unidad de tiro a gol exactamente cuando conducen una ventana de la herramienta. La integración es el contrato de evento, nada más: los cabezas están claves por ventana id, así que las notas toman un espacio de nombre de "floating":-id-den dentro de eso espacio de identificación compartida y respuesta "tool:focus" / "Herramienta:close" para los suyos. "Hábita:"questClose" no se ve deliberadamente - que el veto protege borradores no enviados, y una autosaves pegajosas y succionas en desmontaje. También: - Todo el camino se arrastra. El título es una etiqueta más que una entrada, que es lo que estaba robando cada píxel pero la esquina superior izquierda; Haciendo doble clic en los nombres, haciendo doble clic en cualquier otro lugar maximiza. - Maximizar a pantalla completa, desde el botón o con doble clic. - Una nota es viva en un lugar u otro, nunca las dos cosas. Mientras flota, su tarjeta en /notes se atenúa e inerte (sólo se queda en vivo) y La desprendimiento del editor cierra el editor. "Abierto en Notas" manos el nota hacia atrás y cierra el pegajoso. - El peinado de atadura era un solo booleano, así que una nota devuelve un la segunda vez nunca se reabrió. Ahora está en la llave por id. - Una izquierda pegajosa minimizada vuelve a viste su cabeza después de una recarga, y un Leuquídito pegajoso migra a minimizar en lugar de desaparecer.

  3. · kamo-internal

    Un control que realmente abre lo que produjo el evento

    La descripción de la llamada llevaba "Abrir el plomo: /leads/view/123" como texto, y texto en un área de texto no se puede hacer clic en el diálogo de evento Edite su descripción en uno, para que ese camino nunca hubiera podido ser un enlace allí. El destino ha estado en el encuentro profundo del evento desde que se añadió la columna; esto es la asequidad que lo usa. El diálogo lo ofrece al lado de la amable del evento, el vista de agenda lo ofrece bajo la descripción, y ambos pasan por el router en lugar de cargar un documento, porque cualquiera de los dos puede estar abierto en cualquier página y un La navegación derribaría lo que el miembro tiene. Llamada a deepLink en lugar de desactivar las llamadas específicamente, así que lo que sea que produzca Eventos a continuación obtiene el control sin tocar este diálogo. La etiqueta dice "Abrid liderar" cuando el origen es una devolución de llamada y "Abrid" de otra manera.

  4. · kamo-internal

    Llatas en el calendario, y un marcador en la lista

    Dos maneras de ver una llamada prometiste hacer sin abrir la pista. En el calendario, una devolución de llamada obtiene su propio artículo de línea en lugar de verse como cualquier otra cita de una llamada que debes a alguien es un tipo diferente de obligación desde una reunión a la que accediste a asistir, y una opinión que los hace idénticos te hace leer todos los títulos para diferenciarlos. La vista del mes colapsa un día llamadas en una línea leyendo cuántas hay, porque una celda encaja con unas tres Chips y una ajetreada mañana de llamadas empujarían cada reunión bajo un "4 más". La semana vista lo nombra "Llamado de Llave" y pone la delantera en el Sortear, ya que el bloque es de unos pocos caracteres de ancho en ese zoom. El día y el orden del día Las vistas tienen espacio para ambos y muestran ambas. En la lista de los líderes, una pista con una llamada sobresaliente lleva un marcador telefónico en el meter id cell, coloreado por lo apremiante que es: gris al día o más fuera, ámbar Hoy, rojo una vez que el tiempo ha pasado sin que nadie lo haya marcado contactado. Debido pulsos, que es el estado que vale la pena atrapar mientras se desplaza. Más de una llamada una pista muestra un conteo. La urgencia se lee en los días calendario en lugar de las horas que transcurridas, porque eso es lo que "hoy" significa para la persona que lee la lista: una llamada mañana a las 9 am no es urgente a las 5 p. m. de hoy, aunque a las 16 horas, y una llamada a las 9 am de hoy es urgente en A las 8 am aunque está a una hora de distancia.

  5. · SecurityService

    Resumen de la devolución de llamadas para el marcador de la lista de líderes

    Las respuestas que conducen tienen una llamada todavía esperando, y cuando la más pronto debe, para la organización del llamante en una petición. Su propio punto final en lugar de un campo en la delantera: las llamadas cambian en su propio horario, así que doblarlos en la carga útil de plomo significaría una unión en cada consulta de plomo o un marcador rane.

  6. · kamo-shared-library

    A la espera de que una organización entera se desba, en una sola consulta

    Alimente el marcador de llamada de la lista de cabezas por fila. La parrilla mantiene cada pista de la miembro puede ver, así que pedir por plomo sería una solicitud por fila para hacer una columna; esta es la misma pregunta que se hizo una vez. Sólo un método de repositorio - ninguna entidad o columna cambia, así que nada aquí está armado contra el esquema.

  7. · kamo-internal

    Un centro de notificación, en cada página

    Los amantes no tenían adónde llegar. El popup del calendario era una alerta sencilla en el la esquina superior de cualquier página que estuviera abierta, desapareció en un temporizador, y cualquier cosa levantada mientras el miembro estaba en otra parte simplemente se perdió - el enchufado publica, y una publicación nadie se suscribe tiene éxito y desaparece. Así que las notificaciones se almacenan ahora, así como publicadas, y el navegador lee ambas a través de un contexto montado sobre todo el árbol. Lo que llega mientras estás aquí está empujado; lo que llegó mientras no estabas es reclamado en el siguiente conexión, una vez, por lo que dos pestañas que se abren juntas no levantan la misma pila. La cubierta se encuentra en un rincón del puerto de vistas, sobre cualquier página debajo. Tarjetas apilan en lugar de listar a cuatro recordatorios que aterrizan juntos, que es lo que a evento de la empresa más su propia reunión lo hace, de lo contrario tomaría la mano derecha el tercero de la pantalla y los aficionados flotantes. Cada carta conduce con la cosa cada notificación en este producto tiene en común: un reloj. Cuenta hasta el evento, ofertas ahora, más tarde o no, y drena un carril como su propia bienvenida corre Fuera, lo que se detiene mientras lo estás leyendo. Desliza el derecho a deshacerse de él. Todo lo demás está detrás de los dos menús: adormir a cinco, diez, quince, treinta, una hora, o hasta cinco minutos antes de que comience la cosa; muede este tipo de notificación directamente; abra la configuración. Acciones suministradas por productores cabalgan, Así que un callback ofrece el número de la pista y una reunión ofrece su enlace de unión. Enlaces ir a través del router, nunca una carga de documento - la cubierta puede disparar en cualquier momento y una navegación aquí derribaría un borrador no enviado. La campanada en el navegante superior es cromado fijo por la misma razón el reloj de cumplimiento es: una campanita que alguien puede desenroscar y luego no se le dice nada es peor que ninguna. Detrás está la historia, filtrada por especie o por no leído, con do-not-disturb donde un miembro nota el ruido. La cuenta también te dice. TabAttention ya deslumbró el título y marcó el favicon para chat, pistas y soporte; notificaciones no leídas se unen, encima del chat porque están cronometrados, un recordatorio de que una llamada se espera en cinco minutos paradas ser útil dentro de cinco minutos. Los sonidos se sintetizan en lugar de cargar, por lo que la primera notificación de una sesión no es la silenciosa sobre una conexión lenta. Las notificaciones de escritorio se elevan sólo cuando la pestaña está oculta, y se pide permiso en el momento en que el miembro se turne el interruptor en vez de en la carga de la página, que es el patrón de navegadores suprimir y la gente niega reflexivamente.

  8. · SecurityService

    Una devolución que conduce de nuevo al liderar

    La llamada ya llegó al calendario del miembro, como un evento titulado "Líbalo Callback" con su comentario en la descripción. Nada decía de quién era la llamada, Nada decía qué número marcar, y nada llevó de nuevo al lidero - así que un miembro mirar su calendario tuvo que ir a buscar el plomo a mano, que es el buscar la entrada del calendario existió para salvarlos. Ahora lleva el nombre de la pista en el título, su número en la ubicación, y un enlace profundo del sitio-relativo de vuelta a la pista en el evento y en su descripción. La descripción repite los datos de contacto deliberadamente: se lee un calendario donde el CRM no está, y una devolución de llamada no puedes actuar sin abrir otra La aplicación es un recordatorio para ir y buscar algo. La página principal ahora compone una devolución de llamada en el diálogo de evento del propio calendario, por lo que el petición puede llevar todo un evento, invitados, recordatorios, color y este pasa todo. Cada campo, pero el instante es opcional; un llamante que envía sólo los tres originales todavía obtiene un título adecuado, correctamente enlazado entrada construida a partir del plomo. Resolver una devolución de llamada retira su notificación, así como cancelar su evento. De lo contrario una llamada hecha a los dos minutos después deja una tarjeta todavía pidiendola, y una ronquera que vuelve mañana para volver a preguntar.

  9. · InitializerService

    Cuadros de notificación de los miembros y columnas de origen de un acontecimiento

    Dos mitades de una característica. Una llamada programada en una pista se refleja en el programar el calendario de los miembros, y el punto del espejo es volver a la plomo - así que los eventos de calendario llevan source-type, source-id y deep-link, y el La notificación planteada de ella lleva las mismas tres entradas. Orden 0: CalendarioEvent mapea las tres nuevas columnas desde el momento en que se construye comienza, así que cada corredor que carga un evento los emite en su SELECT y ddl-auto aún no puede haberlos añadido. Ordenado tarde nunca ejecutaría. Aplicado y verificado contra Yugabyte 2026-08-13.

  10. · kamo-shared-library

    Centro de notificación de miembros y origen de un acontecimiento

    Añade miembroNotificación y notificación de miembrosPreferencia: una fila por miembro por miembro notificación, porque leídos, despedidos y dormitorios son respuestas por persona y un fila compartida no tiene dónde ponerlos. Las preferencias cubren las dos mitades por separado Se aplican los términos silenciosos, las horas tranquilas y el no perturbar cuando la notificación es levantadas; las notificaciones de sonido, volumen y de escritorio son propiedades del navegador. CalendarEvent gana SOURCE-TYPE, SOURCE-ID y DEEP-LINK para que un evento hecho por un El servicio puede llevar de nuevo a lo que se trata. Un respaldo de llamada de plomo se reflejo en un El calendario se tituló previamente "Líder de la Llamada" y señaló a ninguna parte, así que un miembro Mirando que tenía que ir y encontrar el plomo a mano. CalendarioEventRemindorRepositorio gana búsquedas de per-evento y consigue la propiedad calendario con un recordatorio debido, que es lo que permite a la entrega de la entrega preguntar si un evento pertenece a la organización sin una consulta por recordatorio. Esquema aplicada por el miembro de KamoInitializerMigración y verificada en Yugabyte antes de que esto aterrizara.

  11. · kamo-internal

    Notas despreciables en pegadiciones flotantes arrastrables y resizables

    Cada nota en la lista (y el editor) obtiene un control desprendimiento que la estalla en una superposición de pantalla. Cualquier número puede flotar a la vez; cada uno puede ser arrastrado a cualquier lugar, redimenyado desde cualquier borde o esquina hasta un piso 220x170, Abarrotado a su barra de título, remodelado y editado en su lugar. La colocación, el tamaño, el apilamiento y el color persisten en el DB respaldado por miembro ui-preferences store bajo una tecla de "FloatingNotes" -- el mismo mecanismo el los usos del diseño de nav. Esa tienda, no sesiónStorage, es el punto: pegajosos tienes que sobrevivir firmando y de vuelta, y logout despeja sesiónStorage - al por mayor. Notas: - El texto espía siempre es casi negro, por lo que cada fondo seleccionable se mantiene por encima de una relación de contraste de 7:1 con respecto a ella mediante un ensayo de unidad. La paleta no puede deriva ilegible después. - La edición en línea se ofrece sólo para notas cuyo estado Lexical almacenado no lleva formato; nada más rico se abre solo en lugar de ser Aplanado por un viaje de ida y vuelta de texto. - note.color era anteriormente un hechizo caído en una ranura de clase, donde no ha hecho nada en absoluto. Ahora es un id de paleta resuelto a una línea. fondo, y una tarjeta de color pina su texto oscuro modo oscuro no puede Pintura blanca en pastel. - La superposición está sustal a la persona; la caja de contenido de la shell es overflow:auto y de lo contrario lo cortaría.

  12. · EmailService

    Un número entero para la insignia del correo, y cuenta lo que vale la ruta del índice

    Tres cosas, todo sobre saber en lugar de asumir. La insignia sin leer nav-top consiguió todo el árbol de carpetas y escogió INBOX de el resultado - la llamada más cara que el backend de correo hace, para renderizar un número. MailReader ha llevado getUnreadCount para exactamente esto desde que fue escrito (a STATUS en los proveedores de IMAP, un campo en línea en Graph) y nada nunca Lo expuso a través de HTTP. Ahora lo hace. Este es un camino de retroceso que sólo se dispara cuando el enchufe no leído ha fallado, por lo que es raro y era caro precisamente cuando Las cosas ya iban mal. La lista respaldada por el índice ahora reporta por qué sirvió o no, como **************** y el actuador expone las métricas para el Los contadores se pueden leer. La relación entre servido para modseq-moved es el número que dice si ese camino se gana su complejidad, y no es responsable leyendo la código: una carpeta invalida su propio punto de control tan pronto como alguien lee un mensaje En ella, así que la tasa de éxito es un hecho acerca de cómo los miembros se mueven a través de su correo. El la prueba de que informa ahora es un enum en en y no booleano, por lo que cada negativa es atribuido en lugar de agrupados, y las pruebas afirman la razón específica. una prueba que aceptara cualquier negativa dejaría que esos cubos derivaran en tonterías. También arregla una prueba escamosa que vi fallar tres veces esta tarde y que es no es mía: ImapIdleRegistryTest enóspaseó en un burla con el tiempo de Mockito para ver el tierra cerrada async, y en una máquina cargada que caduca mientras que el cierre es meramente conocido detrás de la creación de hilo. Fracasa como "interacciones cero", que se lee como un registro roto y es realmente una CPU ocupada. Ahora espera en un pezón que despierta. se introduce el cierre instantáneo () se combina con la prueba de hermanos dos métodos, y el hilo aparcado se interrumpe en un bloque final - una carrera fallida utilizada para filtrar un hilo no diemonoso durmiendo durante treinta segundos y ralentizar todo después incluido el siguiente intento de la misma prueba. Tres suites completas corren Al mismo tiempo: 257 pasó, tres veces más.

  13. · kamo-internal

    Marca cromo alrededor de una junta de redacción en la sala de firmas

    El escritorio estaba teñido con el color de la org y se oscureció en ambos temas, que puso la marca bajo el documento y dejó el cromado neutral. exactamente al revés. Invertida: - CHROME es la primaria de la org en todos los lados de la página: encabezado, listado Rácar y muelle. Cada marca en ella es blanca, a través de una escalera simbría (--legal-on-chrome / -dim / -faint / -line) por lo que tres regiones no pueden cada una inventar su propia idea de "texto secundario en la marca". - EL DESK es un tablero de redacción de gris muy claro gobernado con 45 grados celosía axonométrica, en gradientes CSS puros (sin activo, sin solicitud, básculas a cualquier viewport). fondo-adlamamiento: local lanza la celosía a la desplazado el contenido para que viaje con las páginas. No es deliberadamente derivado de --color-primaria: un org de marca blanca con una primaria pálida lavar la superficie el documento y la página tiene que leer como papel en una superficie de trabajo, nunca como el papel de la marca. La celosía es lo que separa el borde de la página del fondo, por lo que no se dibuja ningún borde. - La sombra de la página es ahora dos yesos, uno suave para levantar, una oscuridad apretada uno para el borde de la hoja. Un solo desenfoque en una superficie de luz se lee como un manchar en vez de una página. - Un nodo completo de entrada es sólido WHITE con el color de la org dentro de él, invertir nodos y ferrocarril exactamente cuando el miembro se banca el trabajo. Verde habría un tercer color luchando contra la marca por un significado. - El certificado se trasladó a la misma tabla que una sábana blanca con lo mismo levantar, porque la declaración también es un instrumento y caer a una llanura panel leyó como si hubiera salido de la habitación. UN DOCK, SIEMPRE. Un paso de documento es dueño de la barra inferior, sólo que lo sabe si está mostrando un spinner, una puerta de consentimiento, una superficie de firma o un Firma capturada - para que el mago se devuelva la espalda y los siguientes controles DOWN en vez de apilar un segundo bar debajo de la primera, y dibuja el muelle sólo en el paso de certificación. GuideBar ganó un tono de marca y un iniciar ranura para eso: en la marca pinta el cromo, deja caer el borde y sombra que cortaría la habitación por la mitad, invierte su anillo y texto a blanco, y su píldora se lee en el color de la org. Su halo de todosDone era un codificado Rombrero-app azul, invisible en un muelle de colores. La carga, la sesión fallida, el consentimiento y las puertas de paso ahora mantienen el escritorio debajo de ellos y el muelle debajo, por lo que la habitación nunca pierde una pared de flujo medio y Back es accesible desde una pantalla que el miembro de otra manera no puede dejar.

  14. · EmailService

    Demoso una carpeta sin cambios con HIGHESTESTMODSEQ, luego servirla desde el índice

    Enciende la lista de mensajes respaldados por el índice, arreglando la cosa que lo hizo inseguro en lugar de voltear la bandera. La vieja comprobación comparó los recuentos de mensajes y UIDNEXT. Ambos están ciegos a una bandera en movimiento, y nada vuelve a indexar un mensaje cuando alguien lo lee en su teléfono, así que una carpeta que pasa esa comprobación se podía servir con el estado leído de cada mensaje congelado en el momento en que llegó una bandeja de entrada mostrando el correo leído como no leído. Eso es por qué se envió desactivado. CONDSTORE tiene el número que se mueve. HIGHESTMODSEQ es de ancho de carpeta y avances en todo: una llegada, un expunge, un juego de bandera de cualquier cliente a punto de hacerlo. Así que "en modseq N los mensajes K más nuevos fueron indexados" más un modseq fresco de N es una prueba de que nada ha cambiado desde entonces, banderas incluidas. Verificado en el Servidor en vivo antes de construir en él lleva el servidor en vivo. /usr/libexec/dovecot/imap (2.3.20) CONDSTORE, QRESYNC y LIST-STATUS. UIDVALIDIDAD se revisa junto, desde un servidor que cambia ha renumerado la carpeta y nada indexado bajo el el valor viejo describe el mismo correo. El propio STATUS de Jakarta Mail solo pide los cinco artículos clásicos, así que el el formulario ampliado se emite directamente y la respuesta se examina en el marco de la prueba, en contra de Datos literales, porque ese número es todo el argumento de seguridad. El puesto de control vive en Redis, no en una mesa. Es un marcador de sincronización cuyo correcto comportamiento en la pérdida es "olvídalo y releído", por lo que una entidad de la biblioteca compartida, un migración y una carrera de KamoInitializer sería el precio equivocado para ello. No hay trabajo de relleno, deliberadamente. Cuando la prueba falla la solicitud lee IMAP exactamente como antes y manos el resultado volver a indexar, por lo que las carpetas rellenan como se miran el mismo orden en el que el ser rápido importa, y nada que puede huir por todos los buzones de la plataforma. Eso también aborda por qué antes no tenía sentido: el índice tenía 31 filas en total. Dos ordenamientos importan y ambos fallan sólo en una dirección. El modseq almacenado es el que se leía antes de la búsqueda, nunca después, así que un cambio aterrizando hojas a mitad de partido el punto de control detrás de la realidad y cuesta un despilfreado de la búsqueda - el revés se emparejaría un modseq de aspecto actual con correo rancio. Y las filas ya en el índice sólo tienen sus banderas se actualizaron, nunca su cuerpo, porque una fila que el indexador completo escribió lleva la búsqueda de texto se construye, y reconstruirlo de un envoltorio Deje silenciosamente los mensajes fuera de la búsqueda mientras hace la lista más rápido.

  15. · kamo-shared-library

    Mape hawered, ahora que la columna existe

    KamoInitializer añadió ************* en 2026-08-13 **************** verificado en Yugabyte: booleano, por defecto false, sin nulas). Mapeándolo es seguro ahora y no estaba antes. un SELECT nativo * cuyas filas Hibernate hidrata en esta clase, por lo que una columna el la falta de tablas rompe la búsqueda de correo electrónico en sí misma, no sólo escribe. Por eso se fue. Saliendo y volvió hace unas horas. SearchIndexService lo graba desde aquí, por lo que los mensajes recién indexados llevan todo tres banderas IMAP en vez de dos.

  16. · EmailService

    Sirviar una lista de carpetas del índice cuando puede probar que es actual

    Las filas detrás de una lista de mensajes ya están en Postgres - el índice de metadatos sostiene remitente, tema, fecha, tamaño, adjunto y banderas para cada mensaje que tenga visto. Leer una página desde allí hay una consulta; leerla desde IMAP es un SELECT más un FETCH de cincuenta envolvero y hace que el servidor construya el índice buzón a Responde. Lo que impidió que alguien lo usara no era la velocidad sino la confianza. El índice se llena de un pulsa indexador que sólo se ejecuta mientras que alguien tiene el buzón abierto, por lo que lo es permitido ser rancios arbitrariamente, y nada distinguía una carpeta actual de uno rancioso. Un STATUS los distingue. Es la pregunta más barata IMAP respuestas SELECT, sin datos de mensajes y devuelve el conteo de mensajes de la carpeta y su siguiente UID. El índice se utiliza sólo cuando ambos coinciden con lo que tiene: el conteo de capturas cualquier cosa añadida o removida, y maxUid 1 == UIDNEXT atrapa el caso un conteo no puede ver, donde llegaron tantos como fueron borrados. UIDNEXT sólo avanza, así que un apéndice que el índice perdido lo deja varado por encima del índice más alto de UID Lo sabe. Cada otro resultado vuelve a IMAP: una carpeta desaparecida, un servidor que decodifica STATUS, un índice vacío, un error de base de datos. El peor resultado disponible es el comportamiento que existía antes de esto. Una carpeta que falla la prueba se cura cuando llegue el siguiente mensaje y esté indexado. Desactivado por defecto detrás **************** porque la respuesta el marcador depende de search.index.is-ansed, que no existe hasta KamoInitializer ha corrido. Encenderlo es entonces un acto deliberado en lugar de un efecto secundario de un despliegue. El acuerdo predicado es donde estar equivocado muestra a alguien el correo equivocado, por lo que es pura, paquete-privada y probada a partir de esa dirección. Cada caso pregunta si puede utilizar el índice cuando no debe.

  17. · InitializerService

    Añadir is-answered al índice de búsqueda de correo

    Añade ************* por lo que el índice registra los tres Banderas IMAP en lugar de dos. La lista de mensajes extrae un marcador de respuesta de este uno, y la lista respaldada por el índice en EmailService no se puede encender hasta que el la columna existe. Orden 0, por la razón habitual: BuscarIndexEntity mapea la columna desde el momento la biblioteca compartida que la lleva está construida, por lo que cada corredor que carga esa entidad Lo emite en su SELECT y ddl-auto no puede añadirlo para nosotros. Un corredor de orden tardilla nunca ejecutaría uno anterior moriría en "la columna no existe" y Ve a correr con él. Nullable con un FALSE por defecto y un relleno de filas existentes. No leen de vuelta de los servidores de correo: falso ya es correcto para la abrumadora mayoría de mensajes, y el camino de lectura se niega a servir cualquier carpeta que no puede probarlo está de acuerdo con el servidor, por lo que una fila que está rancio aquí es una fila que no lo hará uso. La re-indexación lo corrige.

  18. · kamo-shared-library

    Registrar si un mensaje fue respondido en el índice de correo

    email.metadata.search.index ha llevado es.read y está enraizado desde que fue creado, pero nunca la tercera bandera de IMAP, contestada. Eso fue inofensable mientras que el index sólo alimentaba la búsqueda de texto completo, que no le importa. Deja de ser inofensable ahora que el índice puede servir una página de una carpeta directamente: la lista de mensajes extrae su marcador de respuesta de esta bandera, así que una fila ser servido de un índice sin él declararía, silenciosa y equivocadamente, que el el miembro nunca había respondido a ese mensaje. La columna se añade por KamoInitializer ********************** y no existe hasta que eso ha corrido - , por lo que el camino de lectura que lo necesita es detrás de una bandera que prevalece.

  19. · kamo-internal

    El indicador de reloj-out desgasta el mismo pulso que legal y el cumplimiento

    El reloj de ponche respiraba un resplandor radial rojo mientras las obligaciones insignia tres Píxeles a su izquierda pulsaba dos anillos en expansión. Ambos controles piden la miembro para ir y hacer algo, y dos animaciones diferentes que cierran leer juntos como dos sistemas no relacionados - cada uno aprendido por separado. Una animación de anillo ahora sirve a ambos, por lo que el marco clave se renombra fuera de la Las obligaciones se caracterizan por iniciar. El movimiento reducido aún los degrada diferente, porque no pierden la misma cantidad: el conteo de placas y el color de error todavía dice "debes algo", así que esos anillos simplemente se detienen; nada Si no hay en la pantalla que dice "estás fuera de tiempo", de modo que uno tiene un solo anillo abierto a una intensidad constante y deja caer el rastro.

  20. · kamo-internal

    En la pantalla no es lo mismo que leer

    Se marcó una conversación de apoyo leí el instante en que se cargó su ventana, por lo que la que una ventana que NO debe contar como leído del tipo que se levanta, de un asignación, una reasignación, o una respuesta que llega, despejado la insignia antes de la el miembro había mirado cualquier cosa. esFocused no puede distinguirlos: se deriva de z-orden, y una ventana que Sólo abierto es la mayoría por construcción. El ratón y el touchstart de la cáscara son las únicas señales en el sistema que significan que una persona hizo algo, así que el proveedor Ahora los anuncia como herramienta:userFocus desde el único lugar ambas tierras. A partir de eso, la norma que el miembro describió: abierto deliberadamente leído en cuanto se carga levantado por sí mismo sin leer hasta que se toque leídas tocadas, ambos sellos reasignado a usted sin leer de nuevo, no se requiere nuevo mensaje Dos sellos, porque hay dos maneras de ser no leído y cada una tiene que ser limpiada: markAsLea avanza el puntero de lectura más allá de los mensajes del solicitante, y La asignación abierta retira la entrega. AssignedTicketOpener ya no estampa el la entrega cuando levanta una ventana que era el insecto en miniatura, un reconocer que el agente había visto algo que no habían visto. Su per-tab El guardia lleva el peso en su lugar. TicketChat obedece a la ventana en lugar de decidir por sí mismo, incluso para mensajes que llegan mientras está abierto: una respuesta aterrizando en una conversación el El miembro está leyendo está leído, un aterrizaje detrás de ellos no lo es.

  21. · MediaService

    No leído significa que el solicitante habló, o el billete acaba de convertirse en tuyo

    La insignia contaba "billetes en vivo que nadie ha recogido, más los que tengo". mensaje-cidorcito, y sólo cayó cuando un billete alcanzó el estado terminal. Así que Se sentó a cinco sobre una lista que no marcó nada, y abriendo una conversación movió Tampoco. Ahora cuenta lo que dice: conversaciones con algo en ellos para este miembro para leer. Ambas mitades del viejo predicado se han ido. Unread es una consulta nativa compartida con la lista de entradas, por lo que el número y las filas marcadas son el mismo hecho en lugar de dos aproximaciones que derivaron dos veces. Retirar una entrega ahora transmite la insignia. Es uno de los dos caminos. la conversación deja de ser no leída, y sin la transmisión el número se quedó para el caso sin nuevos mensajes en él, que es precisamente el caso de la El sello de entrega existe para. Las propias pruebas de la placa se mueven con ella: ya no se desprenden dos mitades de HQL pero afirman lo que significa el número - una conversación que el otro lado escribió en conteos, uno sólo entregados cuenta incluso sin nada nuevo en él, y cada boleto cuenta una vez Por muchas maneras que califique.

  22. · kamo-shared-library

    Una definición de una conversación de soporte no lee

    La insignia de la navtop y la lista de entradas se han distanciado dos veces al responder encontrarUnreadStateForViewer es la respuesta única que se lee ahora, por lo que no pueden volver a discrepar. Unread significa el otro lado de la conversación habló y no has mirado. Para el agente asignado que es específicamente el REQUESTOR hablando La nota de la misma entrada de colega en el mismo billete no es algo a lo que el agente le debe una respuesta, para que no levante ninguna bandera. Para el solicitante es cualquiera en el lado de apoyo. Cualquiera. de lo contrario no es parte en la conversación y no ve nada, por eso la consulta está en el ámbito de aplicación por el role y no por org: una petición cruzada es respondida por un agente en un org diferente de la persona que lo levantó, así que el org de ninguna de las partes identifica ambas cosas. handoverUnread es la segunda manera de no ser leído, sin ningún mensaje nuevo involucrado. Ser entregado una conversación es en sí mismo lo que no has visto, así que un reasignación aterriza sin leerse sin importar el viejo su último mensaje. De lo contrario, un billete movido a usted por la mañana permanece invisible hasta que el cliente vuelva a hablar. assignmentOpenedA ya llevaba exactamente eso: aclarado en cada (re)asignación, estampado sólo una vez que el agente realmente lo ha puesto en pantalla. RESOLVED permanece elegible a propósito. Un solicitante respondiendo a algo un agente Marcado resuelto es el caso que más vale la pena pasar, y el que De lo contrario, decidáse silenciosamente; sólo CLOSED y VOID terminan.

  23. · kamo-internal

    Dale al carril expandido una barra de desplazamiento en lugar de flecha final

    Las flechas arriba/abajo existen porque un carril colapsado es 80px de azulejo sin espacio para gastar en otra cosa. Expandido, el carril es de 248px y las opciones Lea como una lista, allí las flechas son el peor instrumento: dicen sólo "más de esa manera", donde un pergígnero dice cuánto más y dónde en él ya lo son, y flotan encima de dos filas en lugar de sentarse al lado ellos. Así que el scroller ahora toma una "acomodidad", y NavPri pide la barra de desplazamiento siempre que el carril sea ancho (expansión persistente o un hover-peek vivo). Todo lo demás sobre la tira no ha cambiado en ambos modos: agarrar y tirar, la rueda, el tacto y desplazarse por la opción de la página actual a la vista. Dos detalles de las fuerzas de cambio: - el borde suave se para abajo, porque una máscara pinta la barra de desplazamiento de un elemento junto con su contenido, y un desvaneimiento sobre los extremos de la barra se entiende acompañar parece una falla de renderización; - Agarre a deslizamiento ahora ignora una prensa que aterriza en la cueva. Chrome entrega puntero hacia abajo allí, así que sin él un arrastre del pulgar se movió la tira dos veces el navegador desplazado de una manera y el manejador de la sartén el otro.

  24. · kamo-internal

    Utilen los logotipos reales del proveedor en las tarjetas del proveedor

    Añade los diez activos de los proveedores y los deja en su lugar del sello de la letra marcadores de posición. Estos son WORDMARKS, no iconos cuadrados como el proveedor de correo electrónico set, y su Las relaciones de aspecto se extienden de 0.72:1 (Ejef de día, más alto que ancho) a 6.2:1 (Paychex). La ficha cuadrada de 44px de las tarjetas de correo electrónico aplastaría la mayoría de ellas y encogería la amplitud unos a un desprestigiamiento ilegible, y un borde diviado alrededor de un cuadro de palabras se lee como un error en lugar de un marco. Así que la marca ahora se rinde en un HEIGHT fijo con ancho automático y su propio aspecto ratio, tapado para que Paychex no pueda dominar una carta. Una altura consistente a través de diez formas diferentes es lo que hace que la cuadrícula parpadee deliberada. Cada activo Vista intrínsecaLas dimensiones de la caja se registran junto a su trayectoria porque siguiente/imagen los necesita para reservar la casilla correcta. Lejer un cuadrado para un activo de 6:1 reintroduce exactamente la distorsión que esto evita. En la tarjeta el logotipo toma su propia fila por encima del nombre y el chip de estado, más bien que sentarse a su lado como lo haría un icono. El logotipo está marcado decorativo dondequiera que el nombre del proveedor se rendere junto a él, para que un lector de pantalla lea el nombre una vez en lugar de dos veces; la ficha del sello de la letra estancias para GENERIC-CSV, que es un estado de conexión en lugar de un vendedor y tiene sin activo.

  25. · kamo-shared-library

    Llegar si un boleto es uno de los artículos que cuenta la insignia de soporte

    La insignia de navtop y la lista de entradas estaban respondiendo a diferentes preguntas y Nadie podía decirlo. La insignia cuenta artículos esperando atención Las entradas que nadie ha recogido todavía, lo que es un hecho sobre el TICKET. La lista mensajes de chat sin leer, un hecho sobre su CONVERSACION. Así que la placa leía "5" sobre una lista que no marcó nada, y los dos números no tenían ningún número visible relación. needsAtention lleva la propia prueba de membresía de la placa por fila, para que la lista pueda Marque exactamente lo que la placa está contando. invisibleCount se queda: "Alguien dijo algo que no has leído" todavía vale la pena mostrar, y no es lo mismo Como "nadie está manejando esto".

  26. · kamo-internal

    Configuración de proveedor de nómina y mapear a la gente a la nómina en la inscripción

    Reemplaza la pestaña Resúmenes HRS con la cosa real. La cuenta es ahora. "Configuración de proveedores" y la pantalla es "Payroll Provider Setup", siguiendo el la pantalla del proveedor de correo electrónico que se basa en la ficha de la pestaña se mantiene "supervisar" por lo que el el menú de configuración, la tarjeta de lanzamiento y todos los marcadores existentes siguen funcionando. Construido para que un administrador de recursos humanos sin antecedentes técnicos pueda responder a tres preguntas sin hacerle a nadie: está conectado, lo hizo sincronizar, y es cualquier cosa mal ahora. - Las tarjetas de proveedores muestran lo que cada vendedor puede hacer realmente ANTES de las comisiones org, así que elegir es una comparación más que una conjetura, y una capacidad ausente es visible por delante en lugar de descubierto el día de la nómina. - El formulario de credenciales se entrega del esquema de campo del BACKEND. Añadiendo un campo a un proveedor es un cambio Java en lugar de un nuevo componente de React . La pantalla de correo electrónico escribe a mano un componente por proveedor y tiene doce. - Los secretos nunca se envían de vuelta al navegador, sólo una bandera "esto está puesto", y un caja en blanco significa sin cambios en lugar de claro. - El panel de salud lidera con las dos formas que las horas no llegan en silencio nóminas de personas sin machacar y códigos de ganas sin tapujos porque ambos son invisible en ese momento y sólo sale a la superficie como una queja de pago. - Una carrera parcial es de su propio color. "412 de 415 personas" no es un éxito y no un fracaso, y hacerlo ya que cualquiera de los dos esconde a tres personas sin pagar. - Ejecutar los nombres de la persona y la solución, no un rastro de pila. Los códigos emisores vienen desde el servidor como fichas estables y se localizan aquí. La inscripción gana la columna de mapeo de nómina, porque la inscripción de alguien y Cambiarle a la nómina quiénes son es un trabajo. Auto-match propone en correo electrónico de trabajo exacto igualdad y un ser humano confirma que un nombre no es una identidad, y un vínculo equivocado envía horas de una persona a la paga de otra persona. Un proveedor ya reclamado el récord se mantiene visible pero no escozunado. Esa pantalla tampoco tenía traducciones en absoluto y se hizo miembro crudo de 19 dígitos ids; ambos fijos, con la mirada de nombre de la pantalla extraída a un gancho desde cada La pantalla de la tarjeta de tiempo tiene la misma brecha. Plataforma avanzado config engancha a los siete proveedores de nóminas donde Kamo tiene uno registro de socios. Deliberadamente no hay tarjeta para Dayforce, Workday o UKG: ellos emitir credenciales por cliente, y la pantalla renderiza una tarjeta para cada enum constante, por lo que uno para ellos sería un formulario que ningún operador podría rellenar. RoleRightType espejo gana 197, 198 y 199 . los dos primeros existían lado del servidor y ya faltaban aquí, así que CheckRight no tenía nada mecanografiado para referirse.

  27. · InitializerService

    Indice y REVOKE las tablas de proveedores de nómina

    Lo que Hibernate no puede expresar para las nuevas tablas de hr.timecard.payroll*. Dos REVOKEs. PayrollDispatch y PayrollSyncIssue rechaza actualizaciones y elimina en Java a través de la .PreActualización/PreEliminar, pero los callbacks de la entidad disparan sólo para las filas cargados en un contexto de persistencia, JPQL a granel, deleteAllInBatch () y SQL nativo camina directamente por ellos. Un intento de transmisión de nómina es un evento de dinero, y La evidencia sobre una sincronía completada tiene que sobrevivir para ser evidencia. Dos índices parciales, que la entidad no puede llevar porque tienen predicados: la lista de trabajo del barrido (orgullos con sincronización activada y una sincronización debida, un pequeño minoría de filas) y errores de sincronización por miembros (hileras de ERROR, superadas en número por INFO Aproximadamente por el tamaño de la lista). Aplicado y verificado contra Yugabyte.

  28. · kamo-internal

    Tamaño un accesorio por lo que la API del proveedor realmente lleva

    El compositor mantuvo cada DM social en un piso de 10 MB, que es la foto de Telegram el límite se aplicó a cuatro proveedores que no lo comparten. Cada uno ahora tiene su propio techo, y dentro de un proveedor cada tipo de medios obtiene su propio lugar donde la API los divide: Foto de Telegram 10 MB, 50 MB documento/vídeo/audio (sendPhoto vs enviarDocument) Mensajero 25 MB, lo mismo para todo tipo Imagen de Instagram 8 MB, 25 MB de vídeo/audio/archivo Discordia 8 MB (el techo de carga de bot) X sin accesorios en absoluto desconocido 8 MB, el más apretado de los anteriores Estos son los límites de la API a las que cada adapta ves, NO de la aplicación de consumo del mismo nombre. Los dos difieren y importa: la aplicación de Messenger planteó el archivo compartir a 100 MB mientras que su API de Enviar está documentado en 25 MB, y es de la API Número que decide si el cliente recibe el archivo. Adibujo a la aplicación figura haría que el compositor aceptara algo que Meta se niega, mucho después Al agente le han dicho que salió. X no recibe clip de papel en lugar de uno que se niega a todo: XAdapter's sendImaage y enviarMedia caen para enviarla. Alcance de v1 para que un expediente adjunto no fuera a ninguna parte mientras la leyenda llegaba solo. Su propio proveedorCapacidades dice lo mismo. AttachmentPolicy crece para esto, con una nueva pantalla de cuatro valores AttachmentClass (imágena/vídeo/apargo/archivo) que coincide con cómo los proveedores dividen sus endpoints y cómo MediaService dirige a los medios de comunicación salientes. SVG es un archivo en ambos.

  29. · DaemonService

    Trabajo de sincronización de proveedores de nóminas nocturnas

    Conduce TimecardService's **************** que sincroniza cada organización cuya siguiente sincronización se debe. Cron vive aquí en lugar de en TimecardService porque ese despliegue es RollingActualización con maxSurge 1, por lo que dos vainas se superponen en cada despliegue y un Se dispara el método programado dos veces que para una sincronización de nómina significa dos empujones de Las mismas horas. DaemonService es réplicas 1, estrategia Recrear. Programado a las 03:00, cuarenta minutos después de los barridos de la tarjeta de tiempo: los que cierran cambia y detecta excepciones, y el envío de horas a un proveedor de nóminas antes ellos han corrido transmitiría números que están a punto de cambiar. Se niega a correr en blanco mlos.internal-auth-seret en lugar de talar una falsa una sincronización de nóminas que en silencio nunca se ve exactamente como una que no encontraron nada que hacer, y la diferencia es un período de pago de horas que nunca llegó al proveedor.

  30. · SecurityService

    El límite de autorización para la creación de proveedores de nómina

    Retransmite la nueva superficie **************** y hace cumplir quién puede alcanzarlo. TimecardService sostiene el motor y ninguna sesión; esto mantiene el sesión y decide. SecurityService ejecuta cualquier petición ().permitAll () con laminado a mano por mano, por lo que un manejador que olvida su guardia no es débilmente controlado - es descontrolado y accesible desde el Internet público. Maeado bajo el prefijo existente /api/security/payroll a propósito: kamo-internal llega a través de una ruta BFF, y un nuevo prefijo 404 en el navegador mientras cada servicio es saludable y cada construcción es verde. Cuatro niveles: - MANAGE-PAYROLL-PROVIDER (199) escribe credenciales y conecta o desconexiones OAuth. Esta es la capacidad de decidir DONDE las horas de una organización son transmitido, por lo que es su propio derecho. - MANAGE-HRS-SETTINGS (45) lee la conexión y su salud. - MANAGE-TIMECARDS (183) cubre la cartografía de los empleados y la historia de sincronización. - FINALIZE-PAY-PERIODS (198) transmite un lote comprometido - el mismo nivel que cometer la exportación, porque es el mismo acto. Test Connection se sienta con la derecha de escritura en lugar de la lectura: es un llamada fuera hecha con credenciales almacenadas, y dejando que cualquiera que pueda ver el El despidió que les entregue una forma de sondear al vendedor de nóminas de la org. El intercambio de OAuth NO adelanta un org id. TimecardService se lo saca de el estado firmado por HMAC, por lo que un código obtenido para un inquilino no puede ser redimido contra otro incluso por un llamante que sostiene la derecha en ambos. Añade puesto/borrado a TimecardServiceClient, que sólo había get/post.

Tu universo está esperando.

Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.

Gratis para siempre: no se requiere tarjeta de crédito