Changelog
O que há de novo.
Cada melhoria para a plataforma, como ele envia.
· kamo-shared-library
O modelo charter para a camada ORG, PESSOALIDADE e DocsTION — o vocabulário, as doze colunas de itens, o item charter org, arquétipos org e seus repositórios; validação ainda recusa as novas seções (KamoCollab CP03 T7)
CharterLevel acrescenta ORG após a equipe CP01; CharterRule adiciona TRAIT e COLLAB; CharterSection apensa a PESSOALIDADE (TRAIT, 160) e Docstion (COLLAB, 60), tanto aiOnly quanto não supressor; CharterValidationReason adiciona AUTORIDADE LANGUAGEM E GRUPO INCONSISTENTE. CharterItem, CharterItemData e CharterItemDTO carrega os doze campos da seção 5.2 e escreve, toData, toDto, rejeiteFields e CharterView. item carregá-los (escrita recusa um número a PEQUENAINT não pode aguentar). MAX ITEMS PER OWNER é 500 (D4). Até à Tarefa 12, A validação recusa um item PESSOALIDADE ou DocsTION com UNKNOWN SECTION, e Os marcadores são recusados em ORG como em ROLE (D2). Novo ItemMark para a seção resolvedores. Novas entidades OrgCharterItem (org charter items), OrgPersonality Arquétipo e OrgPersonalidade ArquétipoItem com seus repositórios, e contagemByArchetypeRef sobre o papel, departamento, cargo e repositórios de itens membros. A verificação do título compara lower() como o índice único. As colunas e tabelas existem em produção (CP03 Tarefa 3).
· kamo-internal
O espelho conhece PESSOALIDADE e DocsTION (escondido até CP09), o nível ORG e os tipos de personalidade e Docstion resolvidos (KamoCollab CP03 T21)
- sections.ts: SectionSpec.editor; as duas seções anexadas com as regras do editor false; TRAIT e COLLAB; SeçõesInBand lista apenas seções editadas; MAX ITEMS PER OWNER 500 (D4). - items.ts: ocultar marcadores recusados no ORG em vez de ROLE (D2); seções que o editor não edita são contado para o cap e de outra forma deixado para o servidor, como desconhecidos (D21, D22). - types.ts: Nível ORG, OUT OF BOUNDS, os campos de doze itens, resolvidos. personalidade e Resolvido. Docstion per spec 5.6.4. - O painel de pré-visualização conta e as fichas da galeria de modelos ignoram secções escondidas. - Novo charterSectionParity test lê CharterSection.java e CharterItems.java.
· kamo-internal
A cabeça de um departamento — a coluna Cabeça (nome, Vacant, Inativo), o campo de cabeça e o seletor da janela (pessoal ativo; membros do AI listados, mas não colhíveis), definir através de PUT .../cabeça após o departamento salvar; e o gerente de um membro torna- se administrador para mudar no cartão Posição (KamoCollab CP02 T23)
· kamo-shared-library
PersonalityTextLint — os sete padrões de linguagem de autoridade da especificação §5.9, as exceções look-forward e {orgShortName}, apóstrofos tipográficos e espaçamento Unicode (KamoCollab CP03 T6)
· kamo-internal
Equipes no formulário de criação-membro, para uma pessoa e para um aluguer de AI (KamoCollab CP01 T24A)
/settings/equipe-membro/novos ganhos Equipes em sua placa de papel: uma escolha múltipla as equipes da organização (cliente das equipes), ofertaram a quem pudesse mudar Equipes de um membro no perfil (equipesEditAtCreate, campo de equipes posiçãoPortão direito: MANAGEM MEMBER SECURITY) e oculto de outra forma. As escolhas sair como timeIds, para uma pessoa e para um aluguer AI (aiHirePayload mantém Eles); sem escolha, sem chave. Uma recusa das equipas (400/403/409 com teamIds) mostra no campo e no banner, no dicionário palavras onde as tem, NÃO ALTERADO incluído. Uma antevisão da carta de aluguer do AI agora inclui as equipes escolhidas, a camada TEAM com que vai começar. Os vivos O resumo dá nomes às equipas.
· kamo-shared-library
Ligações de tendência — derivar inteiro, o inverso de movimento mínimo com o transporte de dois prazos, e as duas portas (KamoCollab CP03 T5)
Tendências de fraqueza são "próprios controles, ligados e opção de ser plenamente independente" (decisão do proprietário 6). TendênciaLinks.LINKS detém os sete ligações da especificação CP03 §5.4; derivação é 2,5 x (s - pivô) arredondada metade para cima em inteiros; rodadas inversas a soma alvo uma vez e carrega um o défice de termo para o outro termo (regras CP03-T5-1..3).
· kamo-internal
As equipes de um membro no cartão Posição do perfil, salvas na rota do lado do membro, e as equipes de dicas de cachoeira (KamoCollab CP01 T24)
A carta Position ganha Equipes sob o título do trabalho: fichas para cada visualizador de o cartão, uma escolha múltipla sobre as equipes da organização para uma segurança Administrador, salvo como "teamIds" (membro do ponto finalTeams). As equipas para as quais o perfil não foi lido não são oferecidas edição, para que um salvo nunca substitui equipes que ninguém viu (CP01-T14-4). Uma recusa mostra no campo nas palavras do dicionário onde as tem. O membro Equipe: fontes recebem um tom próprio.
· kamo-shared-library
O registro de traços de 60 teclas, o grupo padrão e o vocabulário Docstion (KamoCollab CP03 T4)
Personalidade TraitKey carrega um TraitSpec por chave (família, tipo, intervalo, padrão, opções, chaves ligadas, grupo de IU, unidade, adaptabilidade, teclas de etiqueta), REGISTRY VERSION cp03-1, a partir do nome e escolhaLabelKey; PersonalityDefaults detém o CHANNEL ORDER, ETIQUETTE e DECISÕES PRIORIDADE O pacote collab adiciona CollabKind e os três níveis restritivos mais os gatilhos de escalada. Aulas puras, sem feijão; nada as lê ainda.
· SecurityService
A DDL aplicada à mão para a camada ORG charter, as colunas de personalidade e Docstion e arquétipos de org, e seu teste de contrato (KamoCollab CP03 T2)
Spec §5.1's block, caractere for character: the doze nullable trait/collab colunas nas cinco tabelas proprietárias de charter, org charter items (cascading with sua org), org personality archetypes (título único por org, caso-insensível) e seus itens (em cascata com o arquétipo), e um arquétipo índice por tabela proprietária para a verificação em uso do arquétipo. A Tarefa 3 aplica-o.
· kamo-internal
A guia Equipes na Configuração Essencial, no menu de configurações, na landing page Configurações e na barra de administração home (KamoCollab CP01 T23)
/settings/essencial?tab=equipes monta TeamManager após títulos de trabalho, com sua coluna de ajuda (propósito, características com a cachoeira de direitos, melhores práticas, o Artigo de carta). O menu de configurações ganha { chave: 'equipes'} após o trabalhoTítulos, a landing page um cartão Teams ao lado de departamentos e títulos de trabalho, e a casa admin bar a entrada Teams após Job Titles (master R1-37). Testes: essencialSetupExposure pins R1-37 (cada entrada do menu Configuração Essencial tem um cartão de aterragem e uma entrada na barra de administração, em ordem de menu); configuraçõesLandingCards resolve todas as chaves construídas em tempo de execução do cartão de aterragem, que check-i18n-keys não podem see; teamsTab fixa o lugar, componente e ajuda da aba.
· kamo-internal
Diálogo de equipe do TeamManager — nome, tempo limite, membros e lead, descrição e carta, papéis e direitos, salvos em uma chamada (KamoCollab CP01 T22)
Adicionar Equipe, Editar de cada linha e a chamada para ação do estado vazio abrir uma janela: o nome, a sessão tempo limite, os membros (chips, e o colhedor membro aberto sobre os membros atuais), o lead (escolhido a partir desses membros, "No lead" permitido), a descrição com seu contador, CharterEditor na TEAM nível, os papéis associados com nenhum forçado em (D15), e os direitos diretos através de PermissionGroups. Um POST ou PUT envia todos os campos; NÃO SPECIFICADO nunca é enviado. Uma recusa é dita em suas próprias palavras, em seu campo quando ele tem um; direitosRecalculado: ofertas falsas Recalcule permissões. A atualização ao vivo pausa enquanto a janela está aberta. O catador multi-selecionado ganha inicialPicked: abre em pessoas já escolhidas, e sua resposta é a toda a selecção.
· SecurityService
As entradas da listagem visível vêm do gráfico de org — subordinados, o AI supervisiona e os membros do AI como cadeias de id; os pares de supervisores do gestor e do AI desapareceram (KamoCollab CP02 T15)
**************** agora pega o ouvinte e lê o grafo org da organização do cache de 60 s (orgGraphCache.get): - subalternosMemberIds = relatórios(chaler, true) que são record-active e não sintético, apenas com o direito subordinado e não com o direito all-org; - aiSuperviseeIds = os nós AI cujo supervisor é o chamador (nunca em si); - aiMemberIds = cada nó AI; - membros (somente direito de org) e nomes como anteriormente. Já não chama access.managerPairs ou aiMembers.artificialMembros para visibilidade. VisibilidadeInputs.toBody() envia os três conjuntos como strings no lugar do gerentePairs e aiSupervisorPairs. ********************************** A dependência do TeamMemberRepo é excluída. Um gestor do meio inactivo de registo já não esconde os relatórios abaixo deles (D19); um membro TERMINADO cujo registo ainda esteja activo permanece subordinado, como o par walk tm.registerState.is filtro ativo manteve-os. O ComputeService aceita os conjuntos desde o CP02 T14 (empregado); T16 remove seu par Andar só depois disto estar ao vivo.
· SecurityService
GET /api/security/org-chart — o gráfico de pessoas org do grafo org: membros da equipe que não são sintéticos, inativos marcados, departamentos com suas cabeças, equipes com seus leads, cada ID uma string e nenhum nível, papel ou direito (KamoCollab CP02 T13)
· kamo-internal
TeamManager, a tabela de equipes — linhas, estados de carga e exclusão (KamoCollab CP01 T21)
A tabela da aba Equipes (spec §5.10, D22), como JobTitleManager lista títulos de trabalho: equipe (título e primeira linha da descrição), membros, líder, requisitos, funções associadas, direitos diretos e tempo limite, com o CommerceSkeleton, Estado Vazio e ErroState- with-Retry states. A exclusão passa ConfirmaçãoDialog nomeando a contagem de membros; uma recusa é dita em teams.errors palavras, senão a sentença do serviço. Viver useOrgChanges(['teams', 'member-security']), pausado enquanto a confirmação está aberto; cada carga está numerada, por isso, uma atualização em voo, quando um apagar terras não pode trazer a fileira de volta. Nada o monta até a tarefa 23 adicionar a aba; A tarefa 22 adiciona os botões Adicionar e Editar com a sua janela.
· SecurityService
A linha do gerenciador lê o grafo org — o ciclo verifica um gráfico fresco, o diretório no cache, e o próprio gerente de um membro precisa de MANAGEM MEMBER SECURITY para mudar (KamoCollab CP02 T12)
- MemberSecurityController: rejeitManager mantém o auto, org e registro ativo Recusas e testes de loop com o nível dez. Está a caminho. tocaMemberSecurity ganha gerenteId, comparado como o departamento (apenas uma mudança real precisa do direito; um id ilegível conta como um) (D21, D22). - ManagerStepHandler: a verificação de loop da etapa de contratação do MANAGER é o mesmo teste em um grafo carregado dentro de sua transação; MANAGER OF e o limite de profundidade ir. - TeamMemberDirectoryController: um gráfico em cache por página, leia apenas quando uma linha pergunta; directReports = record-active reports(id, false), assim como a contagem supervisionada de IA; a dica do coletor = candidato == membro ou gerenteChain(candidato) contém membro.
· kamo-internal
O cliente das equipes — tipos, TeamsApiError e as dez chamadas sobre os relés da equipe (KamoCollab CP01 T20)
app/lib/teams/teamsApi.ts: Equipe, TeamDetail, TeamMemberRow, TeamRef, TeamWrite, TeamSaved; análiseTeam (tolerante: ids como strings, listas em falta [], um direito cujo a configuração não é BRANQUEADA ou NUKE largada); TeamsApiError( mensagem, estado, razão, campo, membroId), ler a partir do corpo ou a embalagem de detalhes do proxy, com apenas uma frase escrita para as pessoas como sua mensagem; e listTeams, getTeam, createTeam, updateTeam, deleteTeam, getTeamMembers, setTeamMembers, recalcularTeamRights, getMemberTeams, setMemberTeams sobre autenticado Obter com credenciais: "incluir".
· kamo-internal
O cliente charter conhece a TEAM, e as equipes de retransmissão do BFF (KamoCollab CP01 T19)
CharterLevel ganha TEAM e CharterSujeito a equipes de um membro hipotético; SaveLayer ('TEAM') põe ************************* Dois relés: /api/segurança/equipas/** (GET, POST, PUT, DELETE) e **************************** (GET, PUT) forwardToApi e reléUpstream, segmentos recodificados e segmentos de pontos recusados. o vitest agora coleta app/api/**/ tests , onde o teste de relé fica.
· SecurityService
Os relatórios lêem o gráfico de org — um âmbito de aplicação da TEAM e uma parte da TEAM atingem toda a sub-árvore, incluindo os IA supervisionados (KamoCollab CP02 T11)
ReportScopeResolver.reportsTo is reports(member, true) of the cached graph: transitive and não ligado (a caminhada antiga parou após dez níveis), seguindo a linha de notificação, então um AI com Nenhum gerente está na equipa do seu supervisor. Uma ação da equipe atinge o gerente seus nomes chave e Todos abaixo deles em qualquer profundidade (ele chegou apenas aos seus relatórios diretos). Nenhum relatório nomeia uma equipe direito e nenhuma ação da equipe existe, então a produção é inalterada.
· SecurityService
Equipes na criação de membros — TeamIds on create-team-member, checado antes de qualquer coisa ser escrita, juntou-se dentro da transação de criação antes dos primeiros direitos aplicados, anunciados após o commit (KamoCollab CP01 T14A)
* ******************************* (e os caminhos /create e /bulk-create que compartilham MemberCreationService.create) tomar uma equipe opcionalIds para uma pessoa ou um AI (master R1-36). Ausente, nulo e [] nome nenhuma equipe e não precisa de direito, então uma criação sem equipes é inalterada. - Verificadas após as verificações do AI e antes da procura do utilizador, cada recusa com os nada escrito: 400 INVALID FIELD, 403 NOT ALLOWED sem MANAGEME MEMBER SECURITY ou um aberto God window (Creator.maySetTeams, preenchido pelo criadorOf), 400 NOT A TEAM MEMBER para um membro da base, 409 TOO MANY TEAMS com mais de 25 (sem leitura), 400 TEAM NOT FOUND para outras orgs ou uma equipa desconhecida, 400 MEMEMBROS TOO MANY para uma equipe completa (EquipeValidator.novas Equipes de Membros). - Escrito por TeamWriter.joinNewMember, MANDATORY with no @RetryOnDbConflito, através do novo Equipas. NewMemberTeams, logo após a gravação do membro e diante do espelho, o primeiro se aplica direitos (que assim incluem o nível TEAM) e um contrato de AI; flushed, nunca capturado: um membro nunca existe com metade das suas equipas. Um 4001 é testado inteiro pelo chamador (o existente 503 RETRY). - TeamService.afterCommit diz ao TeamChangeListeners uma vez que a criação se compromete, nunca depois de um rollback; a recepção fica após o commit (a8966fd). Regras CP01-T14A-1.3; mestre CP-D96.
· kamo-internal
O filtro de log de acesso oferece personificação e Enter-As (KamoCollab CP00 T11)
SecurityService agora escreve IMPERSONATION STARTED, IMPPERSONATION ENDED e ENTER AS no log de acesso da org. A lista de tipos de eventos (acessarLogEvents.ts, que o filtro e a grade leram) reflete a biblioteca compartilhada enum e ganha os três, em sua ordem, dito nas palavras do dicionário. Um novo teste abre o filtro em si e detém os três para AccessLogEventType; o analisador de enum Java se move para o LibPath compartilhado, então ambos os testes compartilham.
· SecurityService
A política de bate-papo do SecurityService lê fatos de membros do gráfico de org, um gráfico carregado por instantâneo (KamoCollab CP02 T10)
ChatPolicyBeanConfig constrói ChatPolicySnapshotLoader com o gráfico construtor e orgGraphCache::fresh (controlando CP02-T17-3), como MediaService faz, para que as anotações de bate-papo do roster e o cartão de membro ler o mesmo factos como qualquer outra questão de hierarquia. O repositório de fatos de conversa legado já não é injetado; o compartilhamento-lib remove-o na tarefa 18. ChatPolicyBeanConfigTest: os fatos do carregador são grafo fresco () retorna para o org id (nunca get(); nenhum conjunto ativo pede por não grafo; o serviço mantém o seu instantâneo até invalidado; um cache antigo de 59 s grafo não é usado; e o fio de feijão em um contexto sem repositório legado, onde o editor e o ouvinte do NATS fazem com que o próximo instantâneo leia uma novo gráfico. ReferenceOrgGraph torna-se público com members() e build().
· SecurityService
Um departamento recebe uma cabeça — PUT ************* seu escritor, e o nome da cabeça e em pé no departamento lê (KamoCollab CP02 T9)
· SecurityService
Cada escrita de gráfico SecurityService anuncia a mudança, a costura da equipe escuta, e uma catraca a mantém assim (KamoCollab CP02 T8)
Cada caminho de escrita da especificação CP02 §3.5 (W1-W15) chamadas ************* causa com as causas do § 5.4.2: segurança dos membros (papel, departamento, cargo, gerente, nível, proprietário, tipo de membro), o perfil PUT (status, inteligence, supervisor do AI, comparado com os valores ler antes da gravação), criação de membro, registro, org criar e deixar, AI aposentar, o aluguer Passo MANAGER, departamentos, títulos de emprego, exclusão de funções e criação de membros do portal e faturamento. O espelho provedor de segurança anuncia sua própria organização (governando CP02-T8-1). OrgGraphTeamChangeListener implementa a costura TeamChangeListener da CP01 com causa TEAM. OrgGraphPublisherCoverageTest (D15) falha quando um arquivo escreve um fato gráfico sem o publisher, fora de COVERED BY SEAM (equipes/TeamWriter.java) e Allowed (com razões), nomeando o arquivo, a linha e o padrão.
· SecurityService
Equipes no cartão de membro e na pesquisa de diretórios — [{id, title}] por título, uma equipe leu por página (KamoCollab CP01 T16)
GET /api/security/members/{id}/cards nomeia as equipes de um membro da equipe ([] em nenhuma equipe; omitido quando a leitura falha, como no perfil). - Está bem. dá a cada membro da equipe linha suas equipes de um localizeTeamRefsByMemberIdIn para os membros da equipe da página (TeamService.teamsOfMembers, que timesDe agora em diante usam, então há uma regra de ordem); uma linha de membro simples não tem equipes e não é perguntado sobre. /membros e /ipersonation-targets estão inalterados.
· SecurityService
Equipes nas visões de direitos efetivos – o nível de equipes de diagnóstico em cascata, e Equipe: fontes sobre os direitos aplicados (KamoCollab CP01 T15)
A cascata de diagnósticos (GET ******************* lista um membro da equipa equipes entre o título do trabalho e o membro, {teamId, título, papéis, direitos}, na ordem da cachoeira; view de segurança nome de direitos aplicados "Team: <title> (via role <role>)" e "Team: <title>" após o trabalho Título e antes do próprio membro. Um leitor, equipas. TeamLevelFontes: as equipes de TeamLevels, então seus papéis e direitos diretos; uma consulta para um membro em nenhuma equipe, nenhuma para um cliente.
· SecurityService
Equipes de um membro do perfil — GET ***************e equipes no perfil e na visão de segurança (KamoCollab CP01 T14)
· SecurityService
PUT ******************* - uma equipe de somente-leater salvar através do TeamWriter, anunciado após o commit (KamoCollab CP01 T13)
O endpoint de charter da equipe do spec §5.6/§5.7 em LayerCharterController, ao lado do funções, departamento e cargos: CONFIGURE SYSTEM ou deus; o caminho id, desconhecido equipa e outra equipa de org são todos 404 TEAM NOT FOUND (governando CP01-T13-1); charterItems é necessário e [] limpa; TeamWriter.updateCharter valida os itens como a camada TEAM em sua transação, então TeamService. afterWrite anuncia a gravação Uma vez. Uma edição de charter recalcula ninguém e não é um facto gráfico. Respostas {charterItems}. A regra caminho-id da equipe (texto UUID canônico, caso contrário 404 sem procurar, CP01-T10-1) Vai do TeamController para o TeamWire.pathTeamId para que ambos os controladores compartilhem.
· SecurityService
A camada charter TEAM — equipes de um membro após o título do trabalho, o assunto TEAM, teamIds e marcadores de escondem a equipe (KamoCollab CP01 T12)
As equipas de um membro tornam-se camadas do TEAM entre o título do trabalho e o membro, todos em um posto e ordenados por título minúsculas em seguida id; papéis das equipes Juntar a camada ROLE. Apenas os funcionários são pesquisados, com uma consulta indexada, então um membro em nenhuma equipe resolve exatamente como antes (pined contra camadas e itens efetivos capturados no carregador inalterado; nenhum hash selo, R1-1). Um sujeito da Equipe resolve seus papéis (rank 0), em seguida, a camada da equipe, com os papéis, descrição, título e itens não salvos do diálogo. CharterSubject ganha teamIds (uma equipe de membro hipotético); uma equipe de outra org, como um Equipe sujeito ou em equipe, é 404 SUJEITO NOT FOUND e nenhum de seus itens ou papéis são lidos (Review Focus 4). CharterReferenceValidator encontra itens de charter da equipe: um marcador TEAM pode esconder Papel, departamento e itens de título de trabalho, um marcador MEMBRO pode esconder os elementos de uma equipa item, e um item de equipe de outra org é SUPPRESS TARGET NOT FOUND. *************usaram a TEAM como seu desconhecido nível; TEAM tornou-se um nível em cp01:5, por isso agora usa PLANET.
· kamo-internal
"Chamadas de membros da equipa AI" no seu próprio perfil (SP95 T27)
O perfil de uma pessoa ganha um cartão na sua sala de trabalho: se os membros da equipe AI da organização podem telefonar-lhes, e em qual dos seus Números. O interruptor liga um consentimento permanente para o número escolhido (o primeiro por padrão) ou desligado, e escolhendo outro número enquanto está em movimento o consentimento lá; ambos salvar de uma vez através do novo BFF Retransmissão do serviço de segurança. Um consentimento deixado em número que já não está no perfil lê como fora, com "Seu número mudou"; um perfil sem número pede um primeiro. O cartão diz: chamada pedida em um bate- papo é permitida mesmo quando isso está desligado, e re- leituras quando o registo do membro muda noutro lugar. Um administrador de segurança vê o cartão de um colega apenas para leitura, legendado para outra pessoa e nomear quem pode mudá-lo. Os portões são aiCallsView (self or MANage MEMBER SECURITY, on a saved person who is a membro da equipe) e aiCallsEdit (a pessoa em si), com uma linha de paleta.
· kamo-internal
"Chamadas de membros da equipa AI" no seu próprio perfil (SP95 T27)
O perfil de uma pessoa ganha um cartão na sua sala de trabalho: se os membros da equipe AI da organização podem telefonar-lhes, e em qual dos seus Números. O interruptor liga um consentimento permanente para o número escolhido (o primeiro por padrão) ou desligado, e escolhendo outro número enquanto está em movimento o consentimento lá; ambos salvar de uma vez através do novo BFF Retransmissão do serviço de segurança. Um consentimento deixado em número que já não está no perfil lê como fora, com "Seu número mudou"; um perfil sem número pede um primeiro. O cartão diz: chamada pedida em um bate- papo é permitida mesmo quando isso está desligado, e re- leituras quando o registo do membro muda noutro lugar. Um administrador de segurança vê o cartão de um colega apenas para leitura, legendado para outra pessoa e nomear quem pode mudá-lo. Os portões são aiCallsView (self or MANage MEMBER SECURITY, on a saved person who is a membro da equipe) e aiCallsEdit (a pessoa em si), com uma linha de paleta.

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