Changelog
O que há de novo.
Cada melhoria para a plataforma, como ele envia.
· AIService
Ponto em YugabyteDB e usar PostgreSQLDialect
O BarataDB foi substituído pelo YugabyteDB. strings de conexão se movem de baratadb-public:26257 para yb-tserver-service:5433, e o dialeto Hibernate desde o PostgreSQLDialect.
· KlusterServices
Esquemas unique rowid() e não públicos em YugabyteDB
O shim é uma sequência semeada no máximo de produção mais uma margem. A a semente tem dois requisitos, não um: deve exceder cada ID existente ou a primeira inserção após cutover colide, e deve exceder 2^53 porque ids acima disso serialize como strings e os contratos de API já assumem. Verificado: retorna > 2^53 e > produção máx, 1000 chamadas todas distintas, e `INT8 DEFAULT unique rowid()` funciona literalmente como uma coluna padrão -- que é o ponto, uma vez que ele permite que todas as strings 520 colunaDefinição no donotmodify biblioteca compartilhada ficar byte-for-byte inalterado. Também pré-cria os cinco esquemas não públicos. Hibernar não cria esquemas a menos que hbm2ddl.create namespaces=true, que KamoInitializerService não definir, então sem estas mesmas 34 tabelas desapareceriam novamente.
· KlusterServices
Esquemas unique rowid() e não públicos em YugabyteDB
O shim é uma sequência semeada no máximo de produção mais uma margem. A a semente tem dois requisitos, não um: deve exceder cada ID existente ou a primeira inserção após cutover colide, e deve exceder 2^53 porque ids acima disso serialize como strings e os contratos de API já assumem. Verificado: retorna > 2^53 e > produção máx, 1000 chamadas todas distintas, e `INT8 DEFAULT unique rowid()` funciona literalmente como uma coluna padrão -- que é o ponto, uma vez que ele permite que todas as strings 520 colunaDefinição no donotmodify biblioteca compartilhada ficar byte-for-byte inalterado. Também pré-cria os cinco esquemas não públicos. Hibernar não cria esquemas a menos que hbm2ddl.create namespaces=true, que KamoInitializerService não definir, então sem estas mesmas 34 tabelas desapareceriam novamente.
· KlusterServices
Implantar um único nó YugabyteDB 2026.1.0.1 ao lado de BarataDB
Ambos os motores agora funcionam lado a lado em k1m1; BarataDB é intocado e permanece o caminho de retrocesso. Três coisas que não eram óbvias: - A versão do mapa do Helm não é a etiqueta do Docker. Gráfico 2026.1.0 mapas para aplicação versão 2026.1.0.0-b118, por isso «imagem: yugabytedb/yugabyte:2026.1.0» ImagePullBackOff. Pinado para 2026.1.0.1-b1, mais novo patch de estável 2026.1. - hostNetwork coloca os pods nas interfaces reais do k1m1, onde dois Yugabyte os padrões já estão tomados: 9000 por MinIO e 9100 por node exporter. A tserver webserver se move para 9010 e seu RPC para 9110. Ambos os serviços de acolhimento verificada não afectada posteriormente. - TLS não é opcional. Todas as 31 cadeias de ligação ao consumidor sslmode=require, então YSQL sem criptografia recusaria todos os clientes em Corte. Certs são criados fora da banda, com o nome de barata-público nome na lista SAN porque os consumidores continuam a usá-lo através de cutover. Deliberadamente não ligado ao CI: adicionar uma etapa de implantação edita . forgejo/, que desencadeia uma reconciliação completa que reverta a deriva viva.
· KlusterServices
Implantar um único nó YugabyteDB 2026.1.0.1 ao lado de BarataDB
Ambos os motores agora funcionam lado a lado em k1m1; BarataDB é intocado e permanece o caminho de retrocesso. Três coisas que não eram óbvias: - A versão do mapa do Helm não é a etiqueta do Docker. Gráfico 2026.1.0 mapas para aplicação versão 2026.1.0.0-b118, por isso «imagem: yugabytedb/yugabyte:2026.1.0» ImagePullBackOff. Pinado para 2026.1.0.1-b1, mais novo patch de estável 2026.1. - hostNetwork coloca os pods nas interfaces reais do k1m1, onde dois Yugabyte os padrões já estão tomados: 9000 por MinIO e 9100 por node exporter. A tserver webserver se move para 9010 e seu RPC para 9110. Ambos os serviços de acolhimento verificada não afectada posteriormente. - TLS não é opcional. Todas as 31 cadeias de ligação ao consumidor sslmode=require, então YSQL sem criptografia recusaria todos os clientes em Corte. Certs são criados fora da banda, com o nome de barata-público nome na lista SAN porque os consumidores continuam a usá-lo através de cutover. Deliberadamente não ligado ao CI: adicionar uma etapa de implantação edita . forgejo/, que desencadeia uma reconciliação completa que reverta a deriva viva.
· kamo-internal
Dividir o log de acesso e suas regras de detecção em subtabs
As regras que decidem o que é marcado eram um acordeão abaixo da grade — colapsou por padrão, então a configuração era algo que você tinha que saber era Lá, e expandindo-se lutou a grade para o mesmo painel. São duas opiniões de um assunto, e cada um quer toda a altura. Sub- tabs agora alternam entre eles, correspondendo ao padrão Tabs da página OAuth2 seguinte A porta já usa. A página de regras só existe para um membro que detém MANAGEM DETECTION RULES, e a visão ativa é derivada em vez de corrigida por um efeito: checkRight respons false attil useUserInfo settles, que seria Caso contrário, deixe um membro em pé numa aba que depois desaparece. As regras são buscado em entrar na aba, como eles estavam em expansão o acordeão, e o painel não carrega nenhum cabeçalho próprio agora que a aba nomeá-lo. Também troca o ícone do botão de edição: era um Plus, sob uma dica de "Editar regra".
· kamo-internal
Seta de volta para casa nos cabeçalhos principais da área de trabalho
Transporta a seta configuração-página através do resto do aplicativo: Contas, Leads, Comércio, Marketing (todas as quatro páginas, através do layout compartilhado), Base de Conhecimento, HR, Rede, Gerenciador de Documentos, Calendário, Contactos e Notas. O botão move-se para fora de componentes / configurações para componentes / BackToHomeButton agora que ele é cromo de largura do aplicativo em vez de cromo de configurações. Marketing e RH possuem um herói gradiente para cada guia abaixo deles, então a seta pousa em seu layout e cada aba herda-lo. Comércio e Notas renderizam seu cabeçalho de um único uso componente (PipelineView, NotesHeader), que é onde a seta vai para aqueles dois.
· kamo-internal
Painéis explicativos em cada link de barra de administrador
Alguém que criou a sua organização há dez minutos encontra nove ligações. não há maneira de ler. Virando ou focando um agora desenrole um painel que responde, em ordem: o que esta tela é, três coisas que você pode fazer lá, e onde encontrar novamente através de Configurações uma vez que a barra já não é nova. O painel se estende para fora da banda em vez de flutuar perto dela — cresce para baixo da borda da banda com um careta soldado à sua entrada, e a entrada fica acesa enquanto está fora, então os dois leram como um objeto. O conteúdo assenta em Curto cambaleamento atrás dele. Movimento reduzido mantém o desvanecimento e deixa cair o viajar; a transparência reduzida deixa cair o borrão. Dois detalhes ganham o seu lugar. Blocos e registros são curtos na barra, mas no painel lidera-os com seus nomes reais, blocos de acesso e logs de acesso do sistema, porque Isso é o que alguém vai procurar em Configurações mais tarde. E cada painel fecha com a trilha de volta para a tela, então aprendendo-a uma vez faz o atalho opcional em vez de carregar. Abre no hover após uma batida, instantaneamente uma vez que qualquer painel já está fora, e instantaneamente no foco do teclado; Escape o fecha. Um ponteiro de toque nunca abre um — uma torneira é apenas o link, sem painel deixado preso atrás dele.
· kamo-internal
Aperte a barra de administrador — etiqueta org, nomes de auditoria curtos, sem lacunas
Três mudanças para como a barra lê em nove links: A entrada de membros da equipe agora usa a própria etiqueta plural da org do Behavior & Rotulagem, por isso uma orgão que lhes chama "Oficiais de Empréstimo" recebe "Oficiais de Empréstimo" aqui. Está. uma entrada sem chave de etiqueta — o nome é da org, não uma tradução. Blocos de acesso e logs de acesso do sistema encurtam para blocos e logs sob seus próprios chaves em vez do menu de configurações. Renomear as chaves compartilhadas teria renomeou essas abas para onde quer que elas apareçam; neste grupo, ao lado desses ícones, a metade de cada nome não fazia nenhum trabalho. A lacuna entre entradas vai embora, então o próprio preenchimento de cada link é a separação e os campos hover encontram a borda à borda — uma tira em vez de uma fileira de fichas.
· kamo-internal
Seta de volta para casa esquerda de cada título da página de configurações
Páginas de configurações não tinham caminho de volta para o launchpad a menos do carril de navegação. Configurações A visualização é opcional backHref agora defaults to home and renders incondicionalmente, assim que as 20 páginas construídas nele escolher o seta para cima de graça; as seis páginas que desenham seu próprio cabeçalho obter o mesmo controle em linha. Editores aninhados (mercados, produtos, planos, provedor de email, webhooks, modelos de condição, o agente estúdio) já levar uma migalha de pão de volta para seus pais e são deixados sozinhos, como é configurações Leads, cuja seta retorna deliberadamente para /leads.
· kamo-internal
O resto da configuração essencial na barra de administrador
Funções de Segurança, Departamentos e Títulos de Trabalho O par de auditorias. São as três abas de Configuração Essencial que faltava na barra — Comportamento & Rotulagem estava carregando esse tópico sozinho, então o único ecrã e o administrador chega a partir daqui foi o que acontece ser sua primeira aba. Cada um reutiliza o ícone e a tecla de etiqueta que o pouso de configurações já lhe dá, e todos os três estão cobertos pelo portão CONFIGURE SYSTEM existente da barra.
· kamo-internal
Blocos de acesso na barra de administrador, links de auditoria para a borda de rastreamento
Blocos de Acesso e Registros de Acesso do Sistema são as duas telas na barra que respondem 'que entrou e que não o fez' em vez de configurar nada, então eles agrupam juntos e andar na borda da banda, longe da configuração links. Uma margem de inline-start automática faz isso — sem elemento espaçador, e o par simplesmente segue o resto uma vez que a linha envolve em um viewport estreito. Ambos já estão cobertos pelo portão MANAGEM ACCESS RULES da barra, e Access Blocos reutilizam o ícone e a tecla de etiqueta que o pouso de configurações já dá.
· kamo-internal
Nome e editar livros de endereços, e reconstruir a página em torno deles
Adicionar um livro POSTOU um nome de placeholder com código rígido sem prompt, e nada qualquer lugar poderia renomear um — então cada livro que uma org tinha era chamado a mesma coisa, permanentemente. Livros e grupos agora são criados e editados através de um diálogo com um nome, descrição e sotaque, renomeável e removível de um menu de linha. Os grupos nunca foram obtidos: a barra lateral renderizada a partir de uma lista que só cresceu Quando criaste um, um grupo desapareceu ao recarregar. Os contactos foram guardados em cache por livro e mesclado no navegador, então "Todos os Contatos" mostrou apenas os livros que você tinha visitada e triagem lutou contra o tesouro. Ambos agora vêm do serviço, com o escopo (book, group, query, order) condução um pedido ordenado, pedido contado. O resto da página segue a linguagem do console que o resto do aplicativo usa: - Barra lateral: livros com contagens de contato, grupos aninhados com contagens de membros, ações de linha para renomear / adicionar grupo / exportar / excluir - Lista: busca e ordenação do lado do servidor, seleção-tudo e shift-range, pergaminho infinito, esqueletos, um trilho A-Z, e estados vazios que diferem para "sem contactos" e "nada corresponde" - Barra de seleção: mover, adicionar ao grupo, exportar, excluir. As caixas de seleção por linha têm Estive lá o tempo todo sem nada para chamar - Painel de detalhes: tudo no arquivo, cada fato copiável e acionável, e um editor compartilhado com a janela de criação para que os dois não possam derivar - Importar relatórios o que ele pulou, então uma importação parcial não se parece com perda O proxy de contatos transformou cada 204 em um 500 — uma exclusão bem-sucedida relatada fracasso — porque analisou um corpo vazio como JSON. Nenhuma opção de nível org num novo livro: listBooks retorna cada livro no org independentemente do proprietário, oferecendo assim a escolha prometeria privacidade o caminho lido não executa.
· EmailService
Persistir e servir todo o contato, não apenas seu nome
A camada REST serializou diretamente as entidades JPA. Um Contato não tem mapeamento para seus e-mails, telefones, endereços, organizações, URLs, IMs ou relacionamentos – aqueles são tabelas separadas — por isso nada disso nunca esteve em uma resposta, e Jackson silenciosamente Deixou cair tudo no caminho. A janela de criação recolheu sete secções e nenhum persistiu. Livros e grupos voltaram com suas associações preguiçosas como nulo, é por isso que a barra lateral não poderia atribuir um grupo a um livro. Debaixo disso, criar um contato não poderia ser bem sucedido: CONTACTE.OWNER ID é NÃO NULL e nada defini-lo, da UI, de uma importação vCard, ou de um CardDAV Põe-te. Importar armazenado apenas o cartão cru e deixado Formatted NAME null, que o coluna rejeita; exportação ler o mesmo cartão bruto de volta, então qualquer coisa criada no A interface foi exportada vazia. - Está bem. o fio formas, com o conta as necessidades da barra lateral e os totais que um pager precisa - ContactDetailStore: lote-carrega e substitui as sete tabelas de satélite e membro do grupo; apagando um contato já não órfãos - ContactQueryStore: contagens, uma listagem ordenada/filtrada/pagada de org-wide, e um pesquisa que também corresponde a partes de nome, números de telefone e organizações - ContactVCardMapper: importação e exportação passar por um mapeamento de campo, então um O contacto sobrevive a uma viagem de ida e volta. BDAY é escrito como um Data Parcial — resolvendo-o para um instante mudou o dia para os leitores em outro fuso horário - updateBook aplica apenas os campos enviados: renomeando um livro usado para limpar descrição e cor, e jogar no NÃO NULL é visível - apagar cascatas do livro; o padrão org é recusado em vez de quebrar o verificar a restrição de cada livro de nível org depende - elimina/move/grupo de parâmetros — as caixas de verificação da lista não tinham nada a chamar Criação de livro sempre define um proprietário e ignora um cliente fornecido isOrgDefault: um livro sem proprietário é apenas legal como o padrão org, e um segundo padrão seria deixe findOrgDefault escolhendo arbitrariamente.
· kamo-internal
Barra de administrador acima das cartas de lançamento
Cinco telas que um administrador de org abre constantemente — membros da equipe, comportamento e rotulagem, estatísticas e custos, aplicações e funcionalidades, registos de acesso ao sistema — cada dois ou três clica profundamente no menu de configurações hoje. Eles têm uma linha através do topo de a plataforma de lançamento, abaixo da masthead e acima das cartas. Cada entrada reutiliza o ícone e a chave de etiqueta que seu destino já carrega as configurações de pouso, então a mesma tela lê o mesmo onde quer que seja oferecido. A banda é o gradiente NavTop/NavPri org com links brancos, que é o que faz lido como cromado em vez de um sexto cartão. Visibilidade é o papel de Administrador (Full Access), expresso da única forma sessão o expõe: os três direitos que o papel detém e nenhum papel de estoque abaixo dele Sim. Todos os três são necessários, e eles são exatamente o que os cinco destinos portão em, para que o bar nunca oferece um link que recusaria o membro.
· BillingService
Ler o uso da imagem de uma passagem desduplicada
Segue a mudança bibliotecária compartilhada para uma carga por arquivo distinto por organização. Tanto o resumo como o escritor de instantâneos diários tiram um único imaging passar e ler todos os domínios dele, em vez de repetir o mesmo agrupar uma vez por domínio — dezoito domínios significaram a mesma consulta dezoito vezes para uma página de carga.
· kamo-shared-library
Contar cada ficheiro uma vez por organização, não uma vez por envio
Billing foi por imgs registro, então uma organização que enviou o mesmo arquivo cinco Os tempos foram carregados cinco vezes. A regra do proprietário é uma carga por arquivo distinto por organização: Kamo ainda armazena o arquivo uma vez em todo o sistema, cada organização segurando-o ainda é contado, e recarregar algo que você já tem não é Uma nova carga. Figuras de imagem agora vêm de uma passagem por organização que colapsa registros a ficheiros distintos. Medida na produção de KamoCRM: 52 discos ao vivo passam a 28 arquivos carregáveis, 6.886.309,250 bytes tornam-se 5.441,174,177. Um arquivo mantido sob duas associações é contado em exatamente uma — a mais baixa ordem A associação em que aparece — porque contá - la em ambos a cobraria duas vezes. Dois arquivos de produção estão nessa posição, e com esta regra as categorias particionar os arquivos da organização e somar exatamente ao seu total. Chave de figuras de período sobre quando a organização primeiro manteve um arquivo, então re-uploading algo que já tinha não é uma nova carga em um período posterior. Gerado previews são chaveados por arquivo pela mesma razão, e destruir uma cópia de um arquivo Cinco vezes não liberta nada. imagingUsage () serve atual, vitalício e adicionado de uma única passagem, porque cada domínio de imagem precisa do mesmo agrupamento e computá-lo por domínio executado o consulta uma dúzia de vezes para um resumo.
· kamo-internal
Ignorar o envio quando a plataforma já tiver o ficheiro
Enviar o mesmo vídeo para três pessoas significava três uploads completos. O Dedup desabou-os. em um objeto armazenado, mas apenas uma vez que cada transferência tinha terminado — então a poupança foi armazenamento, nunca o tempo ou largura de banda do membro. O compositor agora pergunta antes de enviar. Uma sonda de tamanho primeiro, porque conteúdo idêntico deve ter uma contagem de byte idêntica: exclui um jogo para quase cada genuinamente novo arquivo ao custo de um pequeno pedido, então hashing só é pago quando pode pagar Desliga. Só então são BLAKE3 e SHA3-256 computados e oferecidos ao servidor, que liga diretamente o conteúdo armazenado. Uma falha cai para um upload normal. Correr rios. Os helpers existentes chamam file.arrayBuffer() uma vez por hash, então um arquivo é residente em memória duas vezes mais — multa para um documento, fatal para um vídeo 3 GiB. A novo anda o arquivo em 4 fatias MiB alimentando ambos hashers, então a memória de pico é um pedaço em qualquer tamanho, e produz entre pedaços porque SHA3-256 é puro JavaScript e Caso contrário, congelar o compositor por minutos. Dedup é uma otimização e nunca uma porta: qualquer falha na sonda, o hashing ou o link retorna ao upload, que está sempre correto. O painel nomeia a pausa para que não leia como uma barraca.
· MediaService
Anexar um arquivo já armazenado sem enviá- lo novamente
Encaminhar um vídeo de 2 GB para três colegas custa três uploads completos. Armazenamento os deduplicaram em um objeto, mas somente após cada transferência ter sido concluída e — o membro pagou por cada byte, três vezes, para produzir uma cópia plataforma já tinha. Dois terminais resolvem-no antes de qualquer movimento de bytes. /attachments/sonda responde se a arquivo deste tamanho poderia existir em tudo, o que é barato e permite que um cliente skip hashing para quase todos os arquivos genuinamente novos. /attachments/link leva hashes o cliente computou-se e, quando resolvem o conteúdo armazenado, cria o anexo outright; um 404 significa 'nunca visto, upload it' e é uma resposta ordinária em vez de um Falha. Os hashes são uma reivindicação, não uma autorização: eles só resolvem contra o conteúdo já armazenado dentro do próprio escopo de dedup do chamador, e ambos os endpoints requerem sessão associação como qualquer outra rota de anexo. Upload e link compartilham uma linha de construção caminho de propósito — se os bytes viajados ou foram reconhecidos, o anexo que As terras na conversa devem ser indistinguíveis.
· kamo-internal
Mostrar o armazenamento de antevisão gerado como sua própria linha
Miniaturas e imagens de visualização agora contam para o total da organização, então o cliente deve ser capaz de ver o que custam em vez de encontrá-los dobrados em outro número. Uma dica diz o que eles são e que um documento de várias páginas produz uma antevisão por página, por isso a figura é explicável em vez de misterioso.
· SecurityService
Meça as miniaturas e faixas geradas de cada arquivo
As chaves dos objectos estão com conteúdo endereçado como: o segmento antes do primeiro sublinhado identifica o arquivo que uma derivada veio de. Os tamanhos são somados por ImgDat — um conjunto físico por arquivo desduplicado — e o faturamento atribui-os através de cada registro imgs apontando para ele. Esta é a única forma de responder à pergunta. img dats.THUMB FILE SIZE detém um valor único para o que pode ser dezenas de miniaturas de página, foi preenchido para 5 de 84 linhas na produção, e nunca cobriu objetos de pista em tudo — juntos subestimando o armazenamento de derivados reais em cerca de 37%. Objetos legados chaveados por um ID numérico anterior ao endereçamento de conteúdo, não correspondem a nenhum arquivo, e não são contados para ninguém; a contagem é registrada em vez de passada Silêncio.
· InitializerService
Esquema para a miniatura e o armazenamento da faixa medidos
img dat derivatives registra, por arquivo armazenado, o tamanho real do bytes de tudo O Kamo gerou a partir dele. Substitui img dats. THUMB FILE DIMENSÃO como fonte para essa figura: essa coluna contém um valor para o que pode ser dezenas de páginas miniaturas e foi povoada por 5 de 84 linhas em produção. Correr contra a produção 2026-08-09; tabela e índice verificados.
· kamo-shared-library
Bill gerou miniaturas para a organização
Miniaturas e faixas por canal são o armazenamento da causa de uploads de uma organização, assim, na instrução do proprietário eles agora contam para o total dessa organização em vez de ser absorvido pelo Kamo. GENERADE PREVIEWS é um domínio faturado. Medido a partir do armazenamento de objetos, não de img dats. UMB FILE TAMANHO. Essa coluna possui um único valor para o que pode ser dezenas de miniaturas de página ({imgDatId} thumb p0..pN) e em produção foi povoada por 5 de 84 linhas — subestimando o armazenamento de derivados reais em cerca de 37% e omitindo objetos de trilha Completamente. img dat derivatives registra o que uma varredura realmente lê de volta. A atribuição é por registro de detenção, a mesma regra que o próprio arquivo: faturamento junta imgs para img dat derivatives, então duas organizações que possuem um arquivo são cada faturado para as suas antevisões e deduplicação permanece poupança de Kamo em vez de do cliente. Periodo figuras data antevisões pelo upload que os causou, então uma pré-visualização cai no mesmo período que seu arquivo em vez de sempre que a varredura correu. A derivada do relatório da plataformaBytes agora lê a mesma fonte medida, então pára de subestimar os custos do processamento de imagens. Esquema verificado na produção antes do desembarque: img dat derivatives existe Depois de um KI correr.
· kamo-internal
Deixe um membro manter um anexo de vídeo ou áudio, não apenas reproduzi-lo
O jogador responde a uma intenção. Querer o arquivo no disco é diferente, e vídeo e áudio foram os dois tipos de anexos sem maneira de fazê-lo — um documento tem tinha um botão de download o tempo todo, e uma imagem tem um em sua caixa de luz. Enterros de crómio um download no menu de sobrecarga do elemento de vídeo; Firefox e Safari não oferecem um de todo, por isso a renda tem de ser nossa para ser confiável. Ambos agora carregam uma linha de legenda nomeando o arquivo com seu tamanho e um botão de download, usando o mesmo atributo href + download da mesma origem que o chip do documento já usa. Também deixa cair o tamanho sempre-KB no chip do documento. Que parou de escalar o momento anexos podem ser gigabytes: um arquivo de 2 GB lido '2130125 KB'. Agora usa o mesmo. formatoBytes o compositor mostra para esse arquivo antes de ser enviado.
· kamo-internal
Mostrar o armazenamento de marcas e documentos Docstive
Ambos são escritos diretamente para a loja de objetos sem tamanho registrado no banco de dados, então eles lêem como zero até uma varredura mede-los. Eles agora têm o seu linhas próprias.
· SecurityService
Medir a marca e armazenamento de documentos Docstive
Estas são as únicas duas coisas uma organização lojas que não têm tamanho em qualquer lugar da base de dados — ativos de marca vão diretamente para o balde público sob o prefixo de domínio da organização, o espaço de trabalho docs sob seu id ambos lidos como zero até que algo leia a loja de objetos de volta. A atribuição corre para trás, prefixo para a organização. Derivando de cada organização prefixos e digitalização que silenciosamente perderiam qualquer coisa armazenada sob um prefixo ninguém pensou em derivar; em vez disso, cada prefixo de nível superior é mapeado de volta widget, compartilhar, padrão, além de qualquer coisa solta na raiz do balde) pousa em no cliente total. Os membros/subárvore são excluídos deliberadamente. Avatares vivem debaixo de um fixo, prefixo independente da organização por design e contando o legado por domínio cópias iria cobrar uma organização para um arquivo do usuário de outra organização É dono. O ponto final do gatilho segue o LosInternalApplyController: comparação em tempo constante contra o segredo do cluster, falhando fechado quando não está configurado.
· InitializerService
Esquema para medição de armazenamento somente de objetos
objeto armazenamento dias registra o que uma varredura lê de volta de MinIO para os dois coisas que não têm tamanho no banco de dados: ativos de marca e os documentos espaço de trabalho. Baldeado pelo último dia modificado, então uma janela de faturamento soma exatamente. Correr contra a produção 2026-08-08; tabela e índices verificados.
· kamo-shared-library
Contagem de marca e armazenamento de documentos Docstive
Quase tudo que uma organização armazena registra seu próprio tamanho em algum lugar — e linha imgs, uma linha kb media, uma medição da caixa de correio. Duas coisas não. Marcação os ativos (logos, favicons, imagens de fundo, tema CSS e config) são escritos diretamente para o balde público sob o prefixo de domínio da organização, o espaço de trabalho docs está escrito sob o seu id. Nem deixa nada na base de dados. dizendo quão grande é, então ambos lidos como zero. objeto armazenamento dias mantém o que uma varredura lê de volta da loja de objetos, baldeado pelo último dia modificado, então uma janela de faturamento arbitrária soma exatamente do que arredondar para meses inteiros. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * por chave entre nós. Replicação do site coloca o mesmo objeto em vários nós, e contar uma vez por nó multiplicaria a conta de uma organização pelo tamanho de O grupo. A BRANDING exclui deliberadamente os membros/subtree. Os avatares-membros vivem sob a prefixo fixo, independente da organização por design — um usuário pode pertencer a vários organizações, de modo que um avatar não é propriedade de nenhuma delas — e o as cópias por domínio são legados. Contar com eles cobraria uma organização por um Arquivar o usuário de outra organização. Esquema verificado na produção antes do desembarque: object storage days existe com a sua restrição de singularidade após uma execução KI.
· kamo-internal
Mostrar o armazenamento do anexo da mensagem de texto
Os anexos MMS vivem em linha no banco de dados como dados: URIs em vez de como arquivos, por isso não tinham registo de tamanho e nunca foram contados. Eles agora têm sua própria linha.
· kamo-shared-library
Contar anexos de mensagens de texto
Os anexos MMS são armazenados e não foram contados. Eles também não são o que eles parecido com: VoipMessageService codifica o anexo como um dado: URI e escreve ele emlinha em VOIP MESSAGES.ATTACHMENT URL, para que eles nunca se tornem objetos MinIO e não existe nenhum ficheiro para avaliar — a medição é o comprimento do carácter armazenado, através da orgagem da conversa. Base64 executa cerca de um terço maior do que os bytes que codifica, e que inflated forma é genuinamente o que ocupa o banco de dados, então é isso que é contado.

Seu universo está esperando.
Comece gratuitamente em minutos.Adicione produtos sempre que estiver pronto — sem migração, sem novos logins.
Gratuito para sempre — não é necessário cartão de crédito