Changelog
O que há de novo.
Cada melhoria para a plataforma, como ele envia.
· InitializerService
Expurgar os relatórios e linhas do painel, e parar de semear View DASHBOARD
VER DASHBOARD (0), VER REPORTS (1) e EXPORT REPORTS (2) foram suprimidos de RoleRightType hoje, juntamente com as duas páginas que nomearam. Isto remove o que eles deixados para trás, em ambas as codificações. **************************** listado VER DASHBOARD entre os direitos Concedida a todas as novas organizações, por isso também sai. Essa foi a única referência fora de um site de definição, e o compilador foi o que o encontrou — um lembrete de que regar para um nome certo e ler o enum não são a mesma pesquisa. VER TASKS está deliberadamente ausente da purga: app/tasks parece idêntico ao páginas apagadas na fonte, mas está agendada para ser concluída. Id 0 é um id real — o predicado lista-o explicitamente, e qualquer coisa neste caminho que apoiado na verdade iria silenciosamente pular as linhas de View DASHBOARD.
· kamo-shared-library
Apagar VER DASHBOARD, VER REPORTS e EXPORT REPORTS
Todas as três páginas nomeadas que existiam no disco e foram apoiadas por nada: app / dashboard mensagens de amostra renderizadas diretamente da i18n, app/relatórios importados framer-motion e next-intl e nenhum dado em tudo, e não há nenhum motor de relatórios ou caminho de exportação em qualquer lugar na plataforma. Nenhuma página foi vinculada do navRegistry e nenhum AppType alegou o teste que manteve vivos os direitos do código de referência, uma vez que Os que estão completos. VIEW TASKS (120) foi triado ao lado destes e é deliberadamente mantido. app/tarefas é indistinguível dos outros dois na fonte — inatingível, sem apoio, puro useState, i18n traduzido para 22 línguas — e está programado para ser concluído. Uma é abandonado e um é o próximo no roteiro, e apenas o proprietário do produto sabia qual. Taxonomia 193/130/33/30 torna-se 190/129/32/29, 61 raízes. Todos os quatro números se movem: um uma raiz que perde o seu único filho, e aquela criança. Os IDs 0, 1 e 2 estão queimados. Note que 0 é um id real — VER DASHBOARD foi o primeiro direito sempre declarado — assim, qualquer predicado que toque estes deve incluir zero em vez do que apoiar-se na verdade.
· kamo-internal
Ícones de aplicação na etapa de aplicações e funcionalidades do assistente
O assistente de criação-rede desenhou cada aplicativo como a primeira letra de seu nome, assim que o mesmo aplicativo foi uma frente de loja em Configurações -> Características e um "S" aqui. Os ícones já existia -- eles estavam trancados dentro do ícone local do FeaturesManagerMap. Movi aquela mesa para... keyed by ServiceType, e apontou ambas as superfícies para ele para que eles não possam derivar. Adicionados os dois aplicações que a tela de recursos nunca teve entradas para (CALCULATOR leva o trilho de navegação Calcular, FEED toma DynamicFeed), os apelidos desactualizados, e um app-grid fallback -- mesma forma que nav/settingsTopicIcons.ts. Cada glifo é plano var (--color-primário) se o aplicativo está ligado ou desligado: vinte produtos cada chegando em sua própria cor leria como uma nota de resgate. Ligar/desligar fica com o til e o interruptor. O teste de guarda falha na compilação se um ServiceType ao vivo não tiver nenhum ícone -- caso contrário, um As novas aplicações catalogadas são um quadrado cinzento anónimo e nada se queixa.
· kamo-internal
Uma sobreposição de cor sólida para o logotipo da tela de carregamento também
Adiciona "Loading Screen Logo Overlay" diretamente sob a página inicial um em Com as mesmas treze opções, Aplicando ao logotipo na tela mostrada entre as navegação de página. Padrão Nenhuma Overlay, então nada muda para uma org que nunca abre o campo. Sua própria configuração em vez de uma compartilhada com a home page, porque os dois superfícies têm fundos opostos: uma masthead branca e um gradiente escuro. A sombra que lê em um raramente é a sombra que lê no outro, e um único cenário forçaria uma escolha que está errada em algum lugar. A dica sob cada diz assim. O tipo agora é LogoOverlay, não HomeLogoOverlay — ele governa duas superfícies, E um tipo chamado para um deles descrevia mal ambos dentro de uma semana. A vocabulário, o resolvedor e a lista de opções são compartilhados; somente a coluna cada superfície lê é diferente, então as cores não podem se afastar. loading.tsx lê OrgContext diretamente ao invés de através do arremesso gancho: monta durante a navegação e nunca deve ser a coisa que quebra um transição de página. Uma org em falta significa nenhuma sobreposição, que é o padrão Seja como for. As duas linhas só de leitura renderizam de forma idêntica, por isso agora partilham uma ajudante em vez de carregar uma cópia cada. Requer a coluna loading logo overlay (KamoInitializer, aplicado) e uma SecurityService reconstruída contra a entidade de compartilhamento de lib.
· InitializerService
Adicionar a coluna loading logo overlay
Segunda superfície para o recurso de sobreposição do logotipo: a tela de carregamento mostrada entre navegação de página, ao lado do masthead home page. Ambos os ALTERs vivem no um corredor porque eles são uma característica com um vocabulário, e alguém à procura de qualquer um deve encontrar ambos. Mesmo formato que o seu irmão — nulo, sem preenchimento, sem DEFAULT, uma vez que um valor ausente e Ninguém significa a mesma coisa para todos os clientes. A guarda de deriva agora itera os campos de sobreposição da entidade em vez de nomear um, portanto uma terceira superfície não pode ser adicionada à entidade sem um ALTER. Ele também pinos uma declaração por coluna: um único ALTER compartilhado seria silenciosamente deixar a outra coluna não criada.
· kamo-shared-library
Carregar a sobreposição do logotipo da tela de carregamento na Organização
O mesmo vocabulário de sobreposição do homeLogoOverlay, aplicado ao logotipo na tela de carregamento mostrada entre as navegações das páginas, além de sua ramificação em o caminho genérico do patch. Uma coluna própria em vez de uma configuração compartilhada, porque os dois superfícies têm fundos opostos: a masthead home page é branca e o carregar o ecrã é um gradiente escuro, por isso a sombra que lê num é raramente a sombra que lê no outro. Uma org que quer dois respostas. Null resolve para NENHUMA no cliente, então cada org existente começa sem sobreposição e não precisa de enchimento. A coluna loading logo overlay já está aplicado (KamoInitializer, OrgHomeLogoOverlayMigration).
· kamo-internal
Escolha o agente atribuído da pasta, não um dropdown
O campo Agent Atribuído é agora o mesmo controle que o Manager em um membro perfil: um campo somente para leitura que abre o selecionador de membros pesquisáveis. Uma lista suspensa só poderia segurar uma página, e a lista por trás desta estava carregada todas as views principais se alguém abriu ou não o cartão — duas buscas de diretório por página de carga, uma das quais estava morta desde a última mudança de mãos. Elegibilidade é inalterada em substância e melhor aplicada: o diretório para titulares de VEZ LEADS, que é o mesmo direito o endpoint antigo resolvido, e permanece nos membros da equipe porque esse é o escopo padrão. A "manter o atual atribulado selecionável" caso especial foi ido com o dropdown - o coletor fixa a picareta atual acima dos resultados, assim que sobrevive a uma busca em vez de precisar de uma opção manual. A não atribuição funciona agora. A opção vazia sempre existiu, mas o patch entrou em colapso ele para indefinido, que buildUpdateLeadRequest skips, então escolhendo ele enviou um o patch vazio e o chumbo mantiveram o seu proprietário. A Remoção do Selector envia o ID vazio o servidor agora lê como um não- atribuição explícita.
· SecurityService
Limitar a procura do membro aos titulares de um determinado direito
O escolhidor de tarefas principal precisa do diretório para retornar apenas as pessoas que podem realmente trabalhar um lead, assim /equipe-membros/pesquisa toma um direito exigido. An nome não reconhecido é um 400 em vez de um parâmetro ignorado: silenciosamente caindo um filtro amplia um limite de permissão, que é a maneira errada de falhar. Direito ninguém detém retorna uma página vazia sem consulta, uma vez que a alternativa é uma lista vazia IN a base de dados não irá processar. Quem detém um direito move-se para RightHolderResolver, que o legado Endpoint de membros atribuíveis agora também usa. O passeio já foi copiado cinco sites de chamadas e os dois de atribuição de chumbo têm que concordar sobre quem pode receber uma pista — melhor que eles concordem fazendo a mesma pergunta do que por Acontecendo para manter o mesmo código hoje. Os três restantes estão intocados.
· kamo-shared-library
Deixe a pasta filtrar pela direita, e deixe um lead ser desatribuído
Duas coisas que o escolhidor precisa. As consultas de diretório tomam um conjunto de ID permitido para que um chamador possa estreitar a pesquisa para as pessoas uma coisa pode realmente ser dada — atribuir uma liderança a alguém sem View LEADS estaciona-o onde não podem abri-lo. O conjunto é calculado em Java em vez de se juntar aqui porque um direito é mantido por uma linha de direitos ou por uma concessão-todos os papéis, e o segundo não tem nenhuma linha para encontrar. Viaja com um flag sem restrições e nunca está vazio: IN () é um erro de sintaxe no Postgres Fio, então todo o caso de directório passa por um placeholder em vez de nada. E updateLead agora lê um id atribuído ausente e um vazio como diferente Solicitações, como já faz para o país e a língua. Um patch carrega apenas os campos que significa mudar, então sem essa distinção não havia maneira de dizer "ninguém possui este chumbo" — a corda vazia caiu através do mesmo O ramo como um campo perdido e o não atribuído silenciosamente não fizeram nada. O aberto linha de atribuição é fechada em vez de substituída, uma vez que uma atribuição de lead sempre nomeia um membro e não há mais ninguém para nomear.
· kamo-internal
Os editores dizem "Fornecido como MANAGEM TIMECARDS" em vez de "Ainda não forçado"
Um chip levava duas verdades diferentes e enganava em direções opostas. Não construído significa que nada verifica o direito e concedê-lo não faz nada. Superado significa que a capacidade é real e fechada, sob o nome de outro direito — concedendo um ainda não faz nada, mas excluir seria errado eo administrador precisa para saber qual o direito de conceder. As quatro entradas são as que a auditoria estabeleceu: GESTÃO SCHEDULES em GESTÃO TIMECARDS, porque a guia de assistência usada para abrir em VEZ SCHEDULES e cada aba HR foi posteriormente dado um direito próprio; CREATE EMPREGO e DELETE EMPREGOES sob GESTÃO MEMBERS, porque um empregado é um membro com registro de emprego e não há funcionário CRUD endpoint. A lista é curada à mão, ao contrário do gerado anota, e deliberadamente assim: nenhum analisador pode dizer "supersed" de "ninguém o construiu ainda". Composição não remover uma direita de UNENFORCED RIGHTS — nada passa para um cheque de qualquer maneira — assim O teste de paridade com a auditoria autorizada não é tocado. Dois guardas evitam que a anotação apodreça num comentário velho. Um direito que é o que colocaria dois chips contraditórios num interruptor. E o direito de cobertura não deve ser ele próprio decorativo: a mensagem é "grand X instead", assim que um X morto enviaria o administrador um passo mais longe de uma permissão de trabalho. Vale a pena fazer isso antes da próxima RH chegar. Dois destes quatro eram um. check longe de ser excluído durante a auditoria precisamente porque o editor disse Estavam mortos.
· kamo-shared-library
Carregar a página inicial logo sobreposição na Organização
A cor sólida que uma org pode pintar sobre o logotipo masthead no página inicial kamo- interna, além de seu branch no caminho genérico do patch O PUT /org/{id} existente persiste ao lado do bgWatermark. Armazena um token — PRIMARY DARKER, não 004ba0 — resolvido contra esta org próprias cores no tempo de renderização, de modo que uma org que depois rebrands mantém uma sobreposição Isso ainda combina em vez de um feitiço congelado quando alguém o escolheu. Simples String em vez de um enum, então um token futuro não precisa de nenhuma restrição de verificação Varrer. Null resolve para NENHUMA no cliente, e é por isso que cada existente org começa sem sobreposição e não precisa de preenchimento. A coluna home logo overlay já está aplicada (KamoInitializer, OrgHomeLogoOverlayMigration) — este campo mapeia uma coluna que existe, não um serviço SELECT em um erro de consulta.
· InitializerService
Adicionar a coluna logo overlay
Backs the Home Page Logo Overlay setting: a cor sólida que uma org pode Pintar sobre o logotipo masthead na página inicial kamo-internal. Segura um símbolo em vez de um feitiço, de modo que a sobreposição resolve contra o a paleta de org em tempo de renderização e sobrevive a uma remarcação. VARCAR Simples Em vez de um enum, então um token mais tarde não precisa de uma varredura de restrição. Nulable, sem backfill, sem DEFAULT: cada cliente resolve um valor ausente para NENHUMA, que é exatamente como cada org parecia antes da coluna existia, então um backfill iria escrever linhas para nenhuma mudança de comportamento. @Order(0) pela convenção coluna-add — o momento em que a lib-compartilhada entidade mapeia esta coluna, cada corredor posterior que carrega uma Organização através do JPA emite-o em seu SELECT, por isso uma migração tardia seria pisado por um corredor a morrer primeiro. O teste é uma guarda de deriva, não um teste unitário: os serviços executam ddl-auto: nenhum, então um campo de entidade sem um ALTER correspondente começa saudável e morre em tempo de consulta — e para a Organização que significa resolução de org, login e Marcando através da plataforma. Isto faz com que seja uma falha de construção.
· kamo-internal
Deixe uma org pintar o logotipo da home page uma cor sólida
Adiciona "Home Page Logo Sobreposição" para Branding em **************** directamente acima do Fundo Marca d'água: Sem sobreposição, Branco, Preto, e cada passo do próprio org rampas primárias e secundárias. Defina- o e o logótipo da cabeça do mastro na parte superior esquerda da página inicial torna-se uma silhueta sólida nessa cor. Predefinição é Nenhuma Overlay, então nada muda para uma org que nunca abre o campo. O que é armazenado é um TOKEN, não um hex — PRIMARY DARKER, nunca #004ba0 — resolvido contra a paleta do org na hora de renderização. Uma org que remarca mantém uma sobreposição que ainda corresponde às suas cores, em vez de um feitiço congelado No momento, alguém o escolheu de uma entrega. logoOverlay.ts possui que vocabulário e a resolução, da mesma forma que watermark.ts possui o Marca d'água. Três detalhes que valem a pena saber: - Os escuros já existiam no fio. A infra- estrutura enviou tudo cinco passos de cada rampa para o tempo que EmbColorPalette tem, mas Organization. fromJSON só mapeou três, então colorDark/colorDarker caiu no chão aqui. Eles são transportados agora, que é o que dá o tokens mais escuros uma cor para resolver. - ThemeLogo faz isso com uma máscara CSS, não um filtro. Um filtro só pode empurrar as cores existentes e não atingir um alvo arbitrário, Então o próprio alfa do logotipo se torna uma máscara e a cor é pintada atrás dele. O <img> permanece montado e simplesmente invisível: é o único fonte do naturalSize o bloco de dimensionamento depende, e mantém ocupando sua caixa normal exata para que a camada mascarada possa enchê-la. Chamadores que não passam sobreposiçãoColor renderizar byte-identicamente para antes. - Um símbolo de marca cuja sombra o org nunca definir resolve para nenhuma sobreposição Em vez de voltar para uma sombra vizinha. Ver o seu logotipo já teve batidas vendo uma cor que ninguém escolheu. Requer a coluna home logo overlay (KamoInitializer, aplicado) e uma Serviço de Segurança reconstruído contra a entidade de compartilhamento de Lib; até que aterra o campo lê e salva como Sem Sobreposição em vez de erro.
· InitializerService
Expurgar as linhas View EMAIL LOGS e parar um teste de rotting quando os ordinais mudarem
VER EMAIL LOGS (64) foi excluído do RoleRightType hoje para nomear um recurso que Nunca foi construído. Isto remove o que deixou para trás — medido em 42 filas de papéis, 33 linhas aplicadas e 8 linhas de modelo — em ambas as codificações, desde a tabela de modelos armazena o Enum NAME enquanto o resto armazena o ID inteiro. ************* precisava de consertar na mesma mudança, eo A razão vale a pena. Afirmava que o seu direito de exemplo tinha id ! = ordinal, guardado por "o teste só é significativo enquanto" que sustenta. Removendo o ID 64 deslocado a cada posterior id tornou-se igual ao seu ordinal, e o Guarda disparado. Se o guarda não estivesse lá, o teste teria continuado a passar. Não provando nada, que é o pior resultado. Ele agora escolhe seu testemunho em tempo de corrida — qualquer direito que tenha um antepassado e cuja identidade difere do seu ordinal — de modo que nenhuma eliminação futura pode ococá - lo silenciosamente. Apagar Os direitos são agora suficientemente rotineiros para que um exemplo codificado seja uma responsabilidade.
· kamo-shared-library
Excluir VEZ EMAIL LOGS, que nomeia um recurso que ninguém construiu
Nenhum e-mail log existe em qualquer lugar na plataforma: nenhuma tabela em qualquer esquema, nenhum endpoint entre 21 controladores do EmailService, sem UI, e nenhuma referência no frontend — não Até mesmo o cheque certo que tinha pelo menos. A plataforma faz logs de modelos onde eles estão, com phone call log, img log downloads, phi access log e contact sync logs todos presentes; e-mail não tem equivalente. Este é o caso CREATE CHANNELS — o substantivo não existe — em vez do MANAGEM MEETINGS caso onde o substantivo é modelado e apenas o verbo não é exposto. Taxonomia 194/131/33/30 torna-se 193/130/33/30. Apenas a contagem de crianças se move: ACESS MAIL mantém seus quatro outros filhos, para que permaneça uma raiz com filhos. A ID 64 está queimada. As linhas armazenadas são removidas pelo EmailLogsRightPurgeMigration.
· kamo-internal
Coloque o compositor de notas no topo de Todas as Comunicações
O compositor só existia na subtab Notas, por isso escrever uma nota sobre O que estavas a ler significava deixar a conta que estavas a ler. Tudo agora carrega o mesmo PostComposer — mesmo chumbo, mesma nota org-visível — e a linha do tempo abaixo dele refetches sua página mais nova no lugar quando um Pousa, mantendo as fileiras na tela em vez de piscar de volta para um girador.
· kamo-internal
Escolha os aplicativos do novo org enquanto o cria
Adiciona um passo Apps & Características entre Tipo e Basics. Ele lista os aplicativos o o modelo de segurança do tipo de branch escolhido realmente oferece -- os forçados como "Sempre incluído" sem switch para discutir com, os opcionais como muda de predefinição para o próprio padrão do modelo -- e envia as respostas com a criação. Tipo é o que decide quais aplicativos existem para escolher, então o passo fica direito Depois disso. Perguntar "o que este negócio realmente vai fazer" enquanto isso ainda é o sujeito não custa nada ao cliente; perguntando-lhe depois de oito telas de A marca seria lida como uma segunda configuração, não relacionada. Escrito para alguém que nunca usou a plataforma: o cabeçalho explica o que é um aplicativo e que desligar um só esconde, cada linha carrega a própria descrição em linguagem simples do aplicativo, "Normally on" / "Normally off" diz de onde veio a pré-selecção, e há um caminho de volta para o conjunto recomendado. Nada aqui é necessário e Review lista os aplicativos da org será aberto com o nome -- uma contagem é um número que ninguém pode verificar, e isso é a última tela antes de uma criação irreversível. As seleções são chaveadas pelo nome ServiceType e uma chave ausente significa "qualquer coisa o modelo recomenda", em ambos os lados do fio. Reselecionar o SAME Tipo de ramo mantém as respostas em vez de reconstruir os padrões: BranchTypeStep re-emite sua seleção cada vez que esse passo é revisitado, assim o ingênuo versão iria silenciosamente desfazer todo o passo de um clique no passo antes Ele. Escolher um tipo diferente reconstrui, porque a lista de aplicativos é substituída Por grosso. Também prende a descrição do aplicativo em Configurações -> Conta -> Tipos de ramo para dois Linhas. As descrições dessas linhas mostram agora executar para algumas frases de modo a leitor não-técnico pode agir sobre eles, e desapertado eles virar cada colapso Reme para um bloco de três linhas.
· SecurityService
Deixe o criador escolher os aplicativos do novo org
O assistente de criação de rede ganha um passo Apps & Features, e este é o metade disso torna-o real. /branch-types/creatable agora descreve a segurança dos aplicativos de cada tipo de ramo model offers -- forçados como 'obrigatórios', OPTIONAL * ones com o modelo próprio padrão -- para que o assistente possa renderizar o passo antes da org existir. Ele tem que vir a partir daqui: os endpoints que descrevem aplicativos são org existente e fechado em CONFIGURE SYSTEM, um direito a pessoa que cria um branch frequentemente não mantém na org- pai. Aplicações não disponíveis são omitido inteiramente em vez de mostrado acinzentado. O criar ganhos de carga útil `appSelections` ({ServiceType: boolean}), e o o novo org é fornecido a partir dele na transação de criação, ao lado do papel-template semeadura: o mesmo tipo de coisa, e ou tudo pousa ou o org não é criado. A parte que vale a pena ler duas vezes é que um aplicativo sendo desligado ainda recebe um OrgFeature row. Até agora uma nova org não tinha nenhuma linha de recursos e eles eram preenchido lazily a primeira vez que alguém abriu Configurações -> Apps -- um loop que permite que tudo o modelo não bloqueia completamente. Então... OPTIONAL DEFAULT DISABLED, um administrador dizendo explicitamente "ofereça isto, mas inicie ele fora", foi silenciosamente promovido para ON para cada criança org já criado. Escrever uma linha inativa é o que faz a escolha ficar, porque esse loop só cria linhas para tipos para os quais não encontra nenhuma. É também por isso que não pode ser um melhor esforço após o passo de compromisso: o recuo não deixaria os aplicativos desactivados, Deixava-os ao contrário do que o criador pedia. Deliberadamente estreito em três lugares. Uma org sem modelo aplicado fica ligada o caminho preguiçoso -- computAvailabilitiesMap answers OPTIONAL DEFAULT DISABLED para tudo lá, e materializando que daria a alguém um espaço de trabalho onde nada está ligado e nada diz porquê. Uma selecção a nomear uma aplicação o modelo não oferece é ignorado, não recusado: o assistente mantém o seu rascunho armazenamento de sessão, então um administrador estreitando o modelo mid-session não deve custar cliente sua criação. E um aplicativo nuloSeleções não é "sem aplicativos" -- é um cliente mais antigo, e cada aplicativo cai de volta para o modelo padrão.
· kamo-shared-library
Reescreva a cópia do catálogo de aplicativos para as pessoas que a leram
O nome da exibição e a descrição no ServiceType são a única descrição de um aplicativo que a maioria das pessoas já viu: um administrador de org em Configurações -> Aplicações e funcionalidades, a administrador pai-org decidindo o que seus orgs filhos podem usar nos tipos de branch E agora quem está a criar uma organização no assistente de rede... alguém que normalmente nunca usou a plataforma antes. Duas coisas estavam erradas com essa cópia, e ambos custaram clientes. Descreveu a implementação. "Assistente de IA com bate-papo, RAG integração", "Voice Over IP PBX Phone System", "Self-hosped video conferência", "armazenamento de documentos pessoais com edição de documentos", "Cai voltar para a organização-mãe SMTP quando desactivado" -- preciso para um engenheiro, e nenhuma ajuda em tudo para um proprietário de empresa decidir se eles querem a coisa. Pior, apresentou a própria implementação de Kamo como toda a aplicação. Telefone e reuniões são cada uma abstração provedor -- EmailProviderType, VoipProviderType e MeetingProviderType cada navio um fornecedor Kamo ao lado Google Workspace / Microsoft 365 / Zoho / Exchange / IMAP, RingCentral e Equipas Telefone, Zoom e Equipas. "E-Mail - E-Mail Hosting" diz como "tick this se você quer que Kamo hospede seu e-mail", então cada org já no Workspace ou 365 tinha uma razão para descodificar um aplicativo construído para eles exatamente. Além disso, preenche duas lacunas genuínas que a cópia nunca mencionada: a RH é dona do direito e A equipe de documentos de divulgação tem que ler e assinar, e Marketing envia a granel e campanhas por e-mail. Tipo de ServiçoCustomerCopy Testa ambos os erros para que não possam voltar. Os nomes constantes são intocados... **************************** persiste o nome como uma string, de modo que uma mudança de nome seria Bolsas do modelo de segurança.
· kamo-internal
Encurtar as etiquetas de navegação para Oportunidades e Créditos
· SecurityService
Proteja contas de deus na lista de administradores de plataforma
Os direitos da plataforma de uma conta de deus só podem ser mudados por outro deus, e um deus O relato nunca pode ser removido da lista — por alguém, inclusive outro deus. Deus é a identidade de vidro quebrado da plataforma: seus titulares são o que resta quando Tudo o resto foi mal configurado. Detenção de um administrador GESTÃO PLATFORM ADMINS Mas Deus não poderia alcançar uma conta de Deus, tirar os seus direitos, que é precisamente a edição que iria desarmar as pessoas capaz de desfazer. Remoção é absoluta porque a linha que vai embora tira cada imediatamente; a mudança de direitos permanece possível, mas apenas entre pares. O teste de pares é User.isGod no chamador, não uma janela aberta de modo deus: sendo Deus é o que faz de você o alvo igual aqui, enquanto a janela é sobre usando deliberadamente esse poder em outro lugar. éDeus(Membro) falha fechada na direção de proteção — um membro cujo usuário o registro não pode ser lido é tratado como deus, então uma linha ilegível é deixada em paz em vez de editado sobre a força de um olhar que não funcionou. O ouvinte. A própria bandeira falha ao contrário, uma vez que só permite controlos. Aplica- se aos três caminhos de escrita, incluindo o ponto final de adição, que substitui os direitos de uma re-add e de outra forma seria uma maneira de contornar a regra.
· kamo-internal
Contas de Deus estão protegidas na lista de administradores da plataforma
Duas regras que o servidor impõe e isso só espelha: a plataforma de uma conta de deus direitos podem ser mudados por outro deus e ninguém mais, e uma conta de deus pode nunca seja removido da lista — não por outro deus, não por si mesmo. Deus é a identidade de vidro quebrado, então seus titulares são o último caminho de volta quando Tudo o resto foi mal configurado. Detenção de um administrador GESTÃO PLATFORM ADMINS Mas Deus não poderia alcançar uma conta de Deus, Tira-a, que é a única edição que desarma as pessoas que a desfazem. Ambos os controlos estão desactivados com a razão associada em vez de ocultos — a controle que desaparece lê como um recurso faltando, um que se explica lê como regra. O chip "+N mais" carrega a mesma fechadura, uma vez que abre o mesmo diálogo.
· SecurityService
Asse a ordem de fundo da org em config.json
kamo-login, kamo-register, o site de marketing e KamoMeet todos leram o tema bucket's config.json para fundoImageCount; fundoOrdenar agora monta ao seu lado, para que a escolha sequencial/embaralhamento org-wide quatro sobre a próxima provisão temática. Apenas os dois valores conhecidos são emitidos — qualquer outra coisa é omitida assim que o cliente retorna para sequencial em vez de ler um valor que não Reconhecer. A org PUT rejeita um valor não reconhecido.
· kamo-shared-library
Coluna de ordem de fundo para a ordem pública de apresentação de slides
O nulable VARCHAR; null resolve para sequencial em cada cliente, que é o que cada org tinha antes da coluna existir. Corda Simples em vez de uma enum para que um modo posterior não precise de uma varredura de verificação-constraint. O espelho ALTER já foi executado através de KamoInitializer e A coluna está confirmada presente em Yugabyte, por isso isto não está armado.
· InitializerService
Expurgar as linhas armazenadas para os dois direitos de notas aposentadas
PARTILHAR NOTAS (72) e GESTÃO NOTAS SETTINGS (73) foram excluídos do Tipo de PapelDireito hoje, por não ter acesso ao portal. Isto remove o que eles deixaram para trás, contados e logado na mesma execução em vez da esquerda para o RoleRightsSyncService para varrer silenciosamente em alguma bota posterior SecurityService. Medido antes de escrevê-lo: 84 linhas nas tabelas de papéis, 16 linhas de modelo, 94 linhas aplicadas, e nenhum no departamento, cargo-título ou nível de membro. Ambas as codificações novamente. As tabelas de direitos e o instantâneo aplicado armazenam o inteiro id; ************* armazena o nome de enum. Uma O DELETE id-keyed não corresponderia a nada na tabela de modelos e relatará o sucesso, deixando 16 linhas para direitos que já não se resolvem a ser lidos na regra da força mapa em cada recalculamento — o que não é hipotético, é o que aconteceu com 24 das 150 linhas o canal de chat purga foi destinado a remover. Sem semeadura e sem porta de verificação, ao contrário da semente de encontro: excluir um direito não pode remover o acesso de alguém, porque nada nunca leu isto. Foi isso que os fez deletável em primeiro lugar.
· kamo-shared-library
Excluir SHARE NOTES e MANAGEM NOTES SETTINGS, que não nomeiam nada
As notas são reais, e a partir de hoje são totalmente fechadas — VER, CRIAR, EDIT e DELETE executou em cada endpoint do KBService NotesController. Estes dois não tinham nada. em nome. Não existe nenhum compartilhamento modelado em qualquer lugar na plataforma: nenhuma coluna na Nota, nenhum campo no NoteDTO, nenhuma tabela note shares — as tabelas de notas são notas, note tags, note versions e note embedding records — nenhum endpoint entre os dez, e nenhuma UI. Os três hits "compartilhar" em FluatingNote. tsx são prosa e aqueles no serviço são o nome de pacote com.kamo.z. compartilhado. A arquitetura aponta da mesma forma: a a chave de conteúdo da nota é derivada de seu proprietário, então compartilhar uma é uma re-keying problema em vez de um desfecho em falta. GESTÃO NOTAS SETTINGS também não tem nenhuma superfície de configuração — nenhuma aba abaixo configurações/caracteres, nenhuma rota em app/settings, nenhuma tabela de configuração, nenhuma entidade de configuração, nenhuma referência em qualquer lugar no frontend. Este é o caso CREATE CHANNELS, onde o substantivo não existe, e deliberadamente não o caso MANAGEM MEETINGS mantido na semana passada, onde o substantivo é modelado — MeetingStatus já cancelou e terminou, e WebinarService dirige ambos — e apenas o verbo não está exposto. O teste que fixa a taxonomia carrega o raciocínio. Taxonomia 196/132/33/31 torna-se 194/131/33/30, 63 raízes. Dois números mover melhor do que três: COMPARTILHA NOTAS era um dos quatro filhos de VER NOTAS, por isso VER NOTAS permanece um root-com-crianças em vez de colapsar da forma que o ACCESS CHAT fez. Os Ids 72-73 estão queimados. RoleRightTypeIdConverter persiste o ID, então um futuro direito reutilizar alguém herdaria o que essas fileiras significassem nas orgs que as tinham. Ligado. As linhas armazenadas são removidas pelo NotesRightsPurgeMigration.
· InitializerService
Adicionar orgs.background order
VARCHAR(20) Nulable, sem enchimento e sem DEFAULT — cada cliente resolve um valor ausente para sequencial, que é o comportamento que cada org teve antes da coluna existir. @Order(0) pela convenção coluna-add: uma vez que a entidade de compartilhamento-lib mapeia ele, qualquer corredor posterior carregando uma organização emite-o em seu SELECT.
· kamo-marketing
Leia a contagem de fundo real da org e jogar ordem
O herói sondado para bg/1.webp e, em seguida, codificado três quadros, então uma org com mais nunca mostrou-los e a rotação modulo'd por LOCAL BGS.comprimento independentemente de quantas imagens estavam realmente para cima. Ele agora lê config.json Como todas as outras superfícies de Kamo, e honra a configuração de shuffle da org.
· kamo-register
Honrar a ordem de apresentação sequencial/embaralhamento da org
Mesmo contrato config.json como kamo-login: backgroundOrder drives all três antecedentes de registo, a chave ausente permanece sequencial.
· kamo-login
Honrar a ordem de apresentação sequencial/embaralhamento da org
config.json agora carrega fundoOrdem ao lado de fundoImageCount. Shuffle re-aleatoriza em cada avanço e nunca repete o quadro em tela; uma chave ausente permanece sequencial, que é o que cada org tinha. As duas telas Swiper manter o seu crossfade, mas conduzir o seu próprio timer quando embaralhado — Swiper autoplay só dá passos para frente um slide.

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