Changelog
Qué hay de nuevo.
Cada mejora de la plataforma, a medida que se envía.
· AIService
Punto en YugabyteDB y use PostgreSQLDialect
CockroachDB ha sido reemplazado por YugabyteDB. Las cuerdas de conexión se mueven desde cucaracha-púrquica-púb:26257 a yb-tserver-service:5433, y el dialecto de Hibernate de **************** a PostgreSQLDialect.
· KlusterServices
Unique-rowid() shim y esquemas no públicos en YugabyteDB
El shim es una secuencia semilla en el máximo de producción más un margen. El las semillas conllevan dos requisitos, no uno: debe exceder de cada id existente o el primer inserto después de colisión de corte, y debe exceder de 2-553 porque los ids Por encima de eso, serializar como cuerdas y los contratos de la API ya lo asumen. Verificado: devoluciones 2-553 y producción max, 1000 llamadas todas distintas, y "INT8 DEFAULT unique".rowid () funciona literalmente como una columna por defecto -- que es el punto, ya que permite todas las 520 columnasDefinición en el donotmodify la biblioteca compartida se mantiene byte-byte sinte sinte. También pre-crea los cinco esquemas no públicos. Hibernate no crea esquemas a menos que hbm2ddl.create-namespaces=true, que KamoInitializerService no fija, así que sin estas mismas 34 mesas volverían a desaparecer.
· KlusterServices
Unique-rowid() shim y esquemas no públicos en YugabyteDB
El shim es una secuencia semilla en el máximo de producción más un margen. El las semillas conllevan dos requisitos, no uno: debe exceder de cada id existente o el primer inserto después de colisión de corte, y debe exceder de 2-553 porque los ids Por encima de eso, serializar como cuerdas y los contratos de la API ya lo asumen. Verificado: devoluciones 2-553 y producción max, 1000 llamadas todas distintas, y "INT8 DEFAULT unique".rowid () funciona literalmente como una columna por defecto -- que es el punto, ya que permite todas las 520 columnasDefinición en el donotmodify la biblioteca compartida se mantiene byte-byte sinte sinte. También pre-crea los cinco esquemas no públicos. Hibernate no crea esquemas a menos que hbm2ddl.create-namespaces=true, que KamoInitializerService no fija, así que sin estas mismas 34 mesas volverían a desaparecer.
· KlusterServices
Implemente un solo nodo YugabyteDB 2026.1.0.1 junto a CockroachDB
Ambos motores ahora corren uno al lado del otro en k1m1; CockroachDB está intacto y sigue siendo la senda de retroceso. Tres cosas que no eran obvias: - La versión de la carta de iéndolo no es la etiqueta Docker. Gráfico 2026.1.0 mapas de la aplicación Versión 2026.1.0.0-b118, así que iage: yugabytedb/yugabyte:2026.1.0o ImagePullBackOff. Pintado a 2026.1.0.1-b1, el nuevo parche de estable 2026.1. - hostNetwork pone las vainas en las interfaces reales k1m1, donde dos Yugabyte Los impagos ya están tomados: 9000 por MinIO y 9100 por node-exportador. El tserver webserver se mueve a 9010 y su RPC a 9110. Ambos servicios de acogida verificarse después no. - TLS no es opcional. Las 31 cuerdas de conexión al consumidor llevan sslmode=require, por lo que YSQL sin cifrado rechazaría a cada cliente en Corteo. Los certos se crean a partir de la banda, con el alias de cucaracha-púb-púb. nombre en la lista SAN porque los consumidores siguen usándolo a través de la reducción. Deliberadamente no conectado a CI: añadir un paso de despliegue edición .forgejo/, que desencadena una plena reconciliación que revierte la deriva viva.
· KlusterServices
Implemente un solo nodo YugabyteDB 2026.1.0.1 junto a CockroachDB
Ambos motores ahora corren uno al lado del otro en k1m1; CockroachDB está intacto y sigue siendo la senda de retroceso. Tres cosas que no eran obvias: - La versión de la carta de iéndolo no es la etiqueta Docker. Gráfico 2026.1.0 mapas de la aplicación Versión 2026.1.0.0-b118, así que iage: yugabytedb/yugabyte:2026.1.0o ImagePullBackOff. Pintado a 2026.1.0.1-b1, el nuevo parche de estable 2026.1. - hostNetwork pone las vainas en las interfaces reales k1m1, donde dos Yugabyte Los impagos ya están tomados: 9000 por MinIO y 9100 por node-exportador. El tserver webserver se mueve a 9010 y su RPC a 9110. Ambos servicios de acogida verificarse después no. - TLS no es opcional. Las 31 cuerdas de conexión al consumidor llevan sslmode=require, por lo que YSQL sin cifrado rechazaría a cada cliente en Corteo. Los certos se crean a partir de la banda, con el alias de cucaracha-púb-púb. nombre en la lista SAN porque los consumidores siguen usándolo a través de la reducción. Deliberadamente no conectado a CI: añadir un paso de despliegue edición .forgejo/, que desencadena una plena reconciliación que revierte la deriva viva.
· kamo-internal
Divienen el registro de acceso y sus reglas de detección en subtabs
Las reglas que deciden lo que se marcan eran un acordeón debajo de la red. colapsado por defecto, por lo que la configuración era algo que tenías que saber era Allí, y expandiéndolo luchó contra la red por el mismo panel. Son dos puntos de vista de un tema, y cada uno quiere toda la altura. Sub-tabs ahora cambian entre ellos, combinando el patrón de Tabs la pestaña OAuth2 siguiente puerta ya usa. La ficha de las normas sólo existe para un miembro holding MANAGE-DETECTION-RULES, y la visión activa se deriva en lugar de corregir por un efecto: comprobarLas respuestas de la Corriente depuestas falsas hasta que useUserInfo se liquida, lo que De lo contrario, dejar a un miembro de pie en una pestaña que luego desaparece. Las normas son iba a la entrada en la pestaña, ya que estaban en la expansión del acordeón, y el El panel no lleva ninguna partida propia ahora que la pestaña lo nombra. También intercambia el icono del botón de edición: era a Plus, bajo una punta de herramienta "Editar de Ejecutar".
· kamo-internal
flecha de regreso a casa en las principales cabeceras del espacio de trabajo
Llegue la flecha de configuración-página en el resto de la aplicación: Cuentas, Líderes, Comercio, Marketing (las cuatro pestañas, a través del diseño compartido), Knowledge Base, HR, Network, Administrador de documentos, Calendario, Contactos y Notas. El botón se mueve fuera de componentes/configuraciones a componentes/BackToHomeButton Ahora que es cromo de ancho en lugar de la configuración cromo. Marketing y Recursos Humanos poseen un héroe gradiente por cada ficha debajo de ellos, así que la flecha aterriza en su Disparo y cada ficha lo hereda. Comercio y Notas hacen su cabecera de un solo uso componente (PipelineView, NotesHeader), que es donde la flecha va para esos dos.
· kamo-internal
Paneles explicativo en cada enlace de barras de administrador
Alguien que creó su organización hace diez minutos se encuentra con nueve enlaces que No tienes forma de leer. Sobrepasar o enfocar uno ahora despliega un panel que responde, en orden: lo que es esta pantalla, tres cosas que puedes hacer allí, y dónde encontrar de nuevo a través de Settings una vez que la barra ya no es nueva. El panel se extiende fuera de la banda en lugar de flotar cerca de él. hacia abajo desde el borde de la banda con un cuidador soldado a su entrada, y la entrada permanece encendida mientras está fuera, así que los dos leídos como un objeto. El contenido se asiste en un corto escalones detrás de él. El movimiento reducido mantiene la cruzfade y deja caer la la transparencia baja el desenfoque. Dos detalles se ganan su lugar. Bloques y registros se quedan cortos en la barra, pero el panel los encabeza con sus nombres reales, bloques de acceso y registros de acceso al sistema, porque Eso es lo que alguien buscará en Settings más tarde. Y cada panel se cierra con el sendero de vuelta a la pantalla, así que aprenderlo una vez hace el atajo opcional en lugar de carga. Abre en flota después de un latido, instantáneamente una vez que cualquier panel ya está fuera, y instantáneamente en el enfoque del teclado; Escape lo cierra. Un puntero de tácitos nunca abre uno. un grifo es sólo el enlace, sin panel dejado varado detrás de él.
· kamo-internal
Apriete la barra de administrador de la etiqueta org, nombres de auditoría cortas, sin brecha
Tres cambios en la forma en que el bar se lee en nueve enlaces: La entrada de los miembros del equipo ahora lleva la propia etiqueta plural de Behavior & Behavior & Etiquetado, así que una org que los llama oficiales de préstamo consigue oficiales de préstamo aquí. Es la entrada de una entrada sin clave de etiqueta. El nombre es el de la org, no una traducción. Bloqueos de acceso y registros de acceso al sistema se acortan a bloques y registros bajo su propia las teclas en vez del menú de configuración. Reelaborar las claves compartidas habrían rebautizaban esas pestañas por todas partes que aparecen; en este grupo, junto a esos iconos, El 'acceso' la mitad de cada nombre no estaba haciendo trabajo. La brecha entre entradas desaparece por lo que el propio acolchado de cada enlace es la separación y los campos flotados se encuentran borde a borde a una tira en lugar de una fila de chips.
· kamo-internal
flecha de vuelta a casa izquierda de cada título de la página de configuración
Las páginas de configuración no tenían camino de volver a la plataforma de lanzamiento corta del ferrocarril nav. AjustesVista de la vista backHref ahora predetermina a casa y se rinde incondicionalmente, por lo que las 20 páginas construidas en él elijan el flecha de forma gratuita; las seis páginas que dibujan su propia cabecera tienen el mismo control en línea. Editores deneados (mercados, productos, planos, proveedor de correo electrónico, webhooks, plantillas de condición, el agente estudio) ya lleva una miga de pan de vuelta a su padre y se quedan solos, al igual que la configuración de los plomos, cuya flecha regresa deliberadamente a /línea.
· kamo-internal
El resto de la configuración esencial en la barra del administrador
Funciones de seguridad, departamentos y títulos de trabajo se unen al grupo de configuración, izquierda de el par de auditoría. Son las tres pestañas de la Configuración Esencial que faltaba la barra. Comportamiento & Etiquetado llevaba solo ese tema, así que el que proyecta un El administrador de aquí fue el que resulta ser su primera cuenta. Cada uno reutiliza el icono y la tecla de etiquetas que el aterrizaje de configuración ya le da, y Los tres están cubiertos por la puerta CONFIGURE-SYSTEM existente.
· kamo-internal
Bloques de acceso en la barra de administrador, enlaces de auditoría al borde de la trazanse
Bloqueos de acceso y registros de acceso al sistema son las dos pantallas en la barra que responden 'quién se metió y quién no lo hizo en lugar de configurar nada, así que se agrupan juntos y montar el borde de la banda, lejos de la configuración enlaces. Un margen de inicio en línea de auto-infierno lo hace sin elemento espaciador, y el par simplemente sigue el resto una vez que la fila se envuelve en un puerto de visión estrecho. Ambos ya están cubiertos por la puerta MANAGE-ACCESS-RULES del bar, y Access Bloqueos reutiliza el icono y la tecla de etiquetas que el aterrizaje de configuración ya le da.
· kamo-internal
Nombre y editar los libros de direcciones, y reconstruir la página a su alrededor
Añadir un libro Mensajería un nombre de marcador de posición de código duro sin ningún símbolo, y nada en cualquier lugar podía cambiar el nombre de uno, así que cada libro que tenía un org se llamaba lo mismo, permanentemente. Libros y grupos se crean y editan ahora a través de un diálogo con un nombre, descripción y acento, renameable y extraíble de un menú de fila. Los grupos nunca fueron conseguidos en absoluto: la barra lateral hecha de una lista que sólo creció cuando creaste uno, un grupo desapareció recarga. Los contactos fueron en caché por libro y fusionado en el navegador, por lo que "Todos los contactos" mostró sólo los libros que tenías visitada y clasificación luchó contra el alijo. Ambos ahora vienen del servicio, con el alcance (libro, grupo, consulta, pedido) conducir uno ordenado, solicitud contada. El resto de la página sigue el lenguaje de la consola que el resto de la aplicación utiliza: - Sidebar: libros con sus conteos de contacto, grupos anidados con conteos de miembros, medidas de fila para renombrar / añadir grupo / exportar / eliminar - Lista: búsqueda y pedido del lado del servidor, selección selecta y de rango de turno, Pergamino infinito, esqueletos, un carril de A-Z y estados vacíos que difieren para "sin contactos" y "nada coincide" - Escucha de selección: moverse, añadir al grupo, exportar, eliminar. Las casillas de verificación por fila tienen ha estado allí todo con nada que llamar - Panel de Detalle: todo en el archivo, cada hecho copiable y procesable, y uno editor compartido con el diálogo de creación para que los dos no puedan derivar - Importa reporta lo que se saltó, para que una importación parcial no parezca pérdida El proxy de contactos convirtió cada 204 en un 500 . fracasado porque paró un cuerpo vacío como JSON. No hay opción a nivel de org en un nuevo libro: listBooks devuelve cada libro en el org independientemente del propietario, por lo que ofrecer la elección le prometería privacidad el camino de lectura no se aplica.
· EmailService
Persiste y sirve todo el contacto, no sólo su nombre
La capa REST serializó directamente a las entidades JPA. Un contacto no tiene mapa de sus correos electrónicos, teléfonos, direcciones, organizaciones, URLs, IMs o relaciones. son mesas separadas, así que nada de eso fue nunca en una respuesta, y Jackson en silencio Se cayó todo en el camino. El diálogo de creación recogió siete secciones y No persistió ninguno. Libros y grupos regresaron con sus asociaciones perezosas Como nulo, por eso la barra lateral no podía atribuir un grupo a un libro. Debajo de eso, crear un contacto no podría tener éxito en absoluto: CONTACTO.OWNER-ID es NOT NULL y nada lo establece, desde la interfaz de usuario, de una importación vCard, o de una CardDAV PUT. Importar almacenaba sólo la tarjeta en bruto y se dejaba FORMATTED-NAME null, que el columna rechaza; exportar lee esa misma tarjeta en bruto, por lo que cualquier cosa creada en el La UI exportó vacío. - ************* las formas de alambre, con el cuenta las necesidades de la barra lateral y los totales que necesita un buscapersonas - ContactDetailStore: cargas por lotes y sustituye a las siete mesas satélite y membresía de grupo; borrar un contacto ya no los orfagenados - ContactQueryStore: cuenta, un listado ordenado/filtrado/pagado en toda la zona, y un búsqueda que también coincide con piezas de nombre, números de teléfono y organizaciones - ContactVCardMapper: importación y exportación pasan por un mapeo de campo, así que un El contacto sobrevive a un viaje de ida y vuelta. BDAY está escrito como PartialDe. a un instante cambió el día para los lectores en otra zona horaria - updateBook se aplica sólo a los campos enviados: renombrar un libro utilizado para limpiar su descripción y color, y tirar en la NOT NULL isVisible - eliminar cascadas deook; el default de la org se rechaza en lugar de romper el restricción de control de cada libro de nivel de org depende - A granel borrar/múmene/grupo de endpoints de la lista. La creación de libros siempre pone a un propietario e ignora un isOrgDefault suministrado por el cliente: un libro sin propietario sólo es legal como el default de la or, y un segundo default sería dejar encontrarOrgDefault eligiendo arbitrariamente.
· kamo-internal
Barra de administrador por encima de las tarjetas launchpad
Cinco pantallas un administrador de org se abre constantemente a los miembros del equipo, el comportamiento y etiquetado, estadísticas y costes, aplicaciones y características, registros de acceso al sistema cada dos o tres hace clic en lo profundo del menú de configuración hoy. Consiguiendo una fila en la parte superior de el launchpad, debajo del mástil y por encima de las cartas. Cada entrada reutiliza el icono y la clave de la etiqueta su destino ya lleva en la configuración aterriza, por lo que la misma pantalla lee lo mismo dondequiera que se ofrezca. La banda es el gradiente NavTop/NavPri org con los enlaces blancos, que es lo que hace leyó como cromo en lugar de una sexta carta. La visibilidad es el papel Administrador (Acceso completo), expresado la única manera en que el Sesión lo expone: los tres derechos que el rol ocupa y ningún papel bursátil por debajo de ella Lo hace. Los tres son requeridos, y son exactamente lo que los cinco destinos Puerta, así que el bar nunca ofrece un enlace que rechazaría al miembro.
· BillingService
Lea el uso de imágenes de un pase deduplicado
Sigue el cambio de la biblioteca compartida a un cargo por archivo distinto por organización. Tanto el resumen como el escritor de instantáneas del día se llevan un solo La imagen pasa y lee cada dominio de él, en lugar de volver a ejecutar lo mismo agrupar una vez por dominio dieciocho dominios significaba la misma consulta dieciocho veces por una carga de página.
· kamo-shared-library
Cuenta cada archivo una vez por organización, ni una sola vez por carga
Facting era por registro, por lo que una organización que subió el mismo archivo cinco El tiempo fue acusado cinco veces. La regla del propietario es un cargo por archivo distinto por organización: Kamo todavía almacena el archivo una vez en todo el sistema, cada organización mantenerlo todavía está contado, y volver a subirgo algo que ya tienes no es un nuevo cargo. Las cifras de imágenes vienen ahora de un pase por organización que colapsa récords a archivos distintos. Medido en la producción para KamoCRM: 52 discos en vivo se convierten en 28 Los archivos cargables, de 6.886.309,250 bytes se convierten en 5.441.174.1177. Un archivo mantenido bajo dos asociaciones se cuenta exactamente en uno de los más bajos-ordinal Asociación que aparece bajo el cargo porque contarlo en ambos lo facturaría dos veces. Dos archivos de producción están en esa posición, y con esta regla las categorías particionar los archivos de la organización y sumar exactamente a su total. Figuras de época clave en cuando la organización primero tenía un archivo, así que re-subir Algo que ya tenía no es una nueva carga en un período posterior. Generado las vistas previas se tecmen por archivo por la misma razón, y destrozando una copia de un archivo No se libera cinco veces. ImagenUsage () sirve a corriente, vida útil y se añade de un solo pase, porque cada dominio de imagen necesita la misma agrupación y computación por dominio corrigió la una docena de veces para un resumen.
· kamo-internal
Omita la carga cuando la plataforma ya tiene el archivo
Enviar el mismo video a tres personas signó tres subidas completas. Detenup se derrumbó en un objeto almacenado, pero sólo una vez que cada transferencia había terminado - por lo que el ahorro era almacenamiento, nunca el tiempo del miembro o el ancho de banda. El compositor pregunta ahora antes que envía. Una sonda de tamaño primero, porque el contenido idéntico debe tener un conteo idéntico de bytes: descarta una coincidencia para casi todos los que realmente son nuevos archivo al costo de una pequeña solicitud, por lo que el hashing sólo se paga cuando se puede pagar Fuera de aquí. Sólo entonces se calculan BLAKE3 y SHA3-256 y se ofrecen al servidor, que Acopla el contenido almacenado directamente. Una falta cae a una subida normal. Corrientes de hashing. Los ayudantes existentes llaman file.arrayBuffer() una vez por hash, por lo que un archivo es residente en la memoria dos veces por una multa por un documento, fatal para un video de 3 GiB. El nuevo uno camina el archivo en 4 rebanadas de MiB alimentando a ambos arrasadores, así que la memoria pico es una trozos en cualquier tamaño, y rinde entre trozos porque SHA3-256 es JavaScript puro y De lo contrario congelaría al compositor durante minutos. Dedup es una optimización y nunca una puerta: cualquier fallo en la sonda, el hashing o el enlace cae de nuevo a la subida, lo cual siempre es correcto. El panel nombra la pausa para que no se lee como un puesto.
· MediaService
Coloca un archivo ya por loto sin volver a subirlo
Reenviar un video de 2 GB a tres colegas costó tres subidas completas. Almacenamiento deduplicólos en un objeto, pero sólo después de cada traslado se había completado y tirado por la lámetro, el miembro pagó por cada byte, tres veces, para producir una copia de la plataforma ya tenía. Dos endpoints lo resuelven antes de cualquier movimiento de bytes. /attachments/probe responde si a archivo de este tamaño podría existir en absoluto, que es barato y deja que un cliente se salte la hashing para casi cada archivo genuinamente nuevo. /attachments/link toma hachís al cliente se compusió y, cuando se resuelven al contenido almacenado, crea el accesorio De plano; un 404 significa 'nunca visto, subirlo' y es una respuesta ordinaria en lugar de una fracaso. Los hashes son una reclamación, no una autorización: solo se resuelven contra el contenido ya almacenado dentro del propio vestíbulo de la llamada, y ambos endpoints requieren sesión Membresía como cualquier otra ruta de accesorios. Subir y enlazar compartir una fila-construcciones camino a propósito - si los bytes viajaron o fueron reconocidos, el apego de que Las tierras en la conversación deben ser indistinguibles.
· kamo-internal
Mostrar almacenamiento de vista previa generado como línea propia
Thumbnails y imágenes de vista previa ahora cuentan hacia el total de la organización, por lo que el el cliente debe ser capaz de ver lo que cuesta en lugar de encontrarlos doblados en otro número. Un punta de herramientas dice lo que son y que un documento de varias páginas produce una vista previa por página, por lo que la figura es explicable en lugar de misterioso.
· SecurityService
Mide las miniaturas y pistas generadas de cada archivo
Las llaves de objetos se abordan con contenido como **************** así que el segmento antes de que el primer subrayado identifique el archivo que una derivada vino de. Los tamaños se suman por ImgDat un conjunto físico por archivo deduplicado y La facturación los atribuye a través de cada inscribo que lo señalan. Esta es la única manera de responder a la pregunta. img.dats.THUMB.FILE-SIZE sostiene un un solo valor para lo que pueden ser docenas de miniaturas de página, fue poblado para 5 de 84 filas en producción, y nunca cubierto de la pista de objetos en absoluto. subesperar el almacenamiento de derivados reales en aproximadamente un 37%. Objetos de legado teclado por un direcmo numérico de contenido anterior, no coincidos sin archivo, y no se cuentan para nadie; el conteo se registra en lugar de pasar por encima de silencio.
· InitializerService
Esquema para la miniatura medida y almacenamiento de pistas
registros img.dat.derivatives, por archivo almacenado, el tamaño real de todo Kamo se generó de ella. Sustituye img.THUMB.FILE-FILE-SIZE como fuente de esa cifra: esa columna tiene un valor para lo que pueden ser docenas de página miniaturas y fue poblada durante 5 de 84 filas en producción. Corre contra la producción 2026-08-09; tabla e índice verificados.
· kamo-shared-library
Bill generó miniaturas a la organización
Las uñas y las pistas por canal están almacenando la causa de las subidas de una organización, así que en la instrucción del propietario ahora cuentan con el total de esa organización en lugar de ser absorbido por Kamo. GENERATED-PREVIEWS es un dominio facturado. Medido en la tienda de objetos, no de img.dats.THUMB.FILE-SIZE. Esa columna tiene un solo valor para lo que pueden ser docenas de miniaturas de página (EimgDatId-thumb.p.pN) y en la producción se pobló por 5 de 84 filas. subesperar el almacenamiento de derivados reales en aproximadamente un 37% y omitir objetos de pista Totalmente. img.dat.derivatives registra lo que realmente se lee un barrido. Atribución es por registro, la misma regla que el propio expediente: facturación se une a imgs to img-dat.derivatives, por lo que dos organizaciones que tienen un archivo son cada facturado por sus preestrenos y la deduplicación se queda con el ahorro de Kamo en lugar de de cliente. Vistas de fecha de las cifras de época por la subida que los causó, por lo que una vista previa cae en el mismo período que su archivo en lugar de cuando el barrido corrió. Deriva del informe de la plataformaBytes ahora lee la misma fuente medida, por lo que Deja de subestar qué costes de procesamiento de imágenes. Esquema verificada en la producción antes de que esta tierra: ing-dat-derivatives existe después de una carrera de KI.
· kamo-internal
Deja que un miembro mantenga un archivo adjunto de vídeo o audio, no sólo reproducirlo
El jugador responde a una intención. Querer el archivo en el disco es diferente, y vídeo y audio fueron los dos tipos de adjunto sin forma de hacerlo. tenía un botón de descarga todo el tiempo, y una imagen tiene una en su caja de luz. Chrome bullicio una descarga en el menú desbordamiento del elemento de vídeo; Firefox y Safari no ofrecen uno para todos, así que la asequible tiene que ser nuestra para ser confiable. Ambos ahora llevan una línea de subtítulos nombrando el archivo con su tamaño y un botón de descarga, utilizando el mismo mismo oriunación href . . . . . . . . . . . . . . . . . . . . También deja caer el tamaño siempre-KB en el chip de documentos. Eso dejó de escalar el momento los accesorios podrían ser gigabytes: un archivo de 2 GB leído '2130125 KB'. Ahora usa lo mismo. formatBytes el compositor muestra para ese archivo antes de ser enviado.
· kamo-internal
Mostrar branding y almacenamiento de documentos Docstive
Ambos están escritos directamente a la tienda de objetos sin tamaño registrado en el base de datos, por lo que leen como cero hasta que un barrido los mide. Ahora tienen su líneas propias.
· SecurityService
Medir la marca y el almacenamiento de documentos Docstive
Estas son las dos únicas cosas que una organización tiendas que no llevan tamaño en cualquier lugar de la base de datos de la marca de activos ir directamente al cubo público bajo el prefijo de dominio de la organización, el espacio de trabajo de los documentos bajo su id ambos leen como cero hasta que algo lea la tienda de objetos de vuelta. La atribución corre hacia atrás, prefijo a la organización. Conducir de cada organización prefijos y escaneo que se perderían silenciosamente cualquier cosa almacenada bajo un prefijo nadie pensó que derivar; en cambio, cada prefijo de primer nivel es mapeado de nuevo a través de widget, compartir, por defecto, más cualquier cosa suelta en la raíz del cubo) aterriza en no el cliente está total. Los miembros/subtrote se excluyen deliberadamente. Avatars viven bajo un fijo, Prefijo independiente de organización por diseño, y contando el legado pordominio Las copias cobrarían a una organización por un archivo usuario de otra organización es propio. El flojo desencadenante sigue a LosInternalApplyController: comparación de tiempo constante contra el secreto de racimo, fallando cerrado cuando está desconfigurado.
· InitializerService
Esquema para medición de almacenamiento solo para tiendas de objetos
los días de la historia de los días de lo que un barrido lee de MinIO para los dos cosas que no tienen tamaño en la base de datos: activos de marca y los documentos el espacio de trabajo. Envió por el último día, por lo que una ventana de facturación suma exactamente. Corre contra producción 2026-08-08; tabla e índices verificados.
· kamo-shared-library
Contear marca y almacenamiento de documentos Docstive
Casi todo lo que una organización almacena registra su propio tamaño en algún lugar en fila, una fila kb-media, una medición de buzón. Dos cosas no. Marca activos (logos, favicons, imágenes de fondo, tema CSS y config) se escriben directamente en el cubo público bajo el prefijo de dominio de la organización, y el docs workspace está escrito bajo su identificación. Ninguno deja nada en la base de datos Diciendo lo grande que es, ambos leen como cero. objetos.storage.días sostiene lo que un barrido lee de vuelta de la tienda de objetos, Cuesto por el último día modificado, por lo que una ventana de facturación arbitraria sumas exactamente más bien que redondear a meses enteros. ************* tamaño de suministros y último modificado, dedupedado por llave a través de los nodos. La replicación del sitio pone el mismo objeto en varios nodos, y contarlo una vez por nodo multiplicaría la factura de una organización por el tamaño de el grupo. BRANDING excluye deliberadamente a los miembros/subárbol. Los avatares miembros viven bajo una prefijo fijo independiente de la organización por diseño - un usuario puede pertenecer a varios organizaciones, por lo que un avatar no es propiedad de ninguno de ellos y el Las copias por dominio son heredadas. Contarlos cobraría una organización por un archivo que el usuario de otra organización posee. Esquema verificado en la producción antes de que esta tierra: objetos.storage. días existen con su limitación de singularidad después de una carrera de KI.
· kamo-internal
Mostrar almacenamiento de adjunto de mensaje de texto
Apegos MMS en línea en línea en la base de datos como datos: URIs en lugar de como archivos, Así que no tenían antecedentes de tamaño y nunca fueron contados. Ahora tienen su propia línea.
· kamo-shared-library
Contar archivos adjuntos de mensajes de texto
Los accesorios MMS se almacenan y no se cuentan. Tampoco son lo que miramos como: VoipMesageEl servicio codifica el adjunto como un dato: URI y escribe está en línea en VOIP-MESSAGES.ATTACHMENT-URL, por lo que nunca se convierten en objetos MinIO y no hay ningún archivo para la estadística de la medida es la longitud de caracteres almacenada, a través de la org de la conversación. Base64 corre aproximadamente un tercio más grande que los bytes que codifica, y que se infla La forma es genuinamente lo que ocupa la base de datos, así que eso es lo que se cuenta.

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