- Shipped
- 19 de agosto de 2026 às 08:10 UTC
- Author
- kamo
- Commit
- 13c7bf4
As quatro telas de base de conhecimento foram as últimas no aplicativo ainda usando o antigo e três deles declararam coisas que não eram verdade. /kb mostrou "Artigos Pinados" de um endpoint que enviou linhas de pinos com o artigo retirado por @JsonIgnore — a seção nunca apareceu Alguém. Abaixo dele, "Artigos Recentes" foi os primeiros dez nós do artigo árvore, em ordem de árvore, cada estampado PUBLICADO com uma data em branco: nem recente nem necessariamente publicado. A árvore ao lado deles desabou em cada navegação, porque cada ramo manteve seu próprio usoEstado. Uma ideia carrega a reconstrução: O RAIL É O FILTRO. Contagem de azulejos e lista que abre ambos vêm de partidasFilter no modelo, então uma leitura de azulejo 4 abre exactamente aqueles 4. Não há uma segunda fila de fichas a refazer o mesmo predica em palavras diferentes, esperando discordar. Em torno dele: procurar que corresponde ao título, endereço e corpo e marcas em que bateu (a caixa antiga debounced 500ms para perguntar a um servidor que pesquisou apenas conteúdoPlainText, assim digitando o título exato de um artigo não devolveu nada), uma árvore que se lembra do que você aberto e pode ser redimensionado, faces em cada cartão do diretório membro, e um painel de Necessidades de Atenção — revisões que esperaram, rascunhos que ficaram quietos, artigos publicados ninguém tocou em um quarto. /kb/resources foi uma janela modal renderizada plana em uma rota, com open={ true} e um onClose que navegou. É uma biblioteca agora: um trilho que pesa o que a organização está armazenando e duplica como o filtro tipo, telhas com rostos reais para vídeo e arquivos em vez de uma grade de caixas cinzentas idênticas, drop- anywhere upload com o progresso real por arquivo (a busca não pode relatar progresso, então um vídeo de 40MB parecia exatamente como um ícone 4KB), e renomeando lugar em vez de um modal lançado de um rodapé. A mídia de inserção do editor O seletor é agora as mesmas peças, o mesmo painel de detalhes e o mesmo usoKbMedia gancho em um diálogo — um kit, duas superfícies, de modo que eles não podem derivar. /kb/reviews era uma lista de títulos. Um revisor podia ver que quatro coisas eram espera e nada mais — não quem os escreveu, não quanto tempo eles tinham sentado ali, não o que disseram — e decidir significava abrir cada artigo, rolar para um painel no fundo, e voltando. Pior de tudo uma busca falhada renderizado como "Sem artigos pendentes de revisão": a fila se relatou limpa em um dia pode não ter sido. Agora a fila carrega a idade de cada artigo, submissor e tamanho; o artigo fica ao lado dele; e os botões de veredicto estão ao lado do que Aplicam-se. /kb/new era um formulário que não dizia nada a um autor. O campo de lesmas disse "Auto-gerado a partir do título" e, em seguida, deixe-o salvar uma lesma que o servidor rejeita com um 400 depois que o artigo é escrito. As opções suspensas pai com dois espaços, que o HTML colapsa, então cada opção parecia de nível superior. E... todas as três caixas de visibilidade poderiam ser marcadas com treinamento de IA paradas, que Significa silenciosamente que ninguém o vê em lado nenhum. O compositor responde a esses três perguntas antes do trabalho em vez de depois da rejeição, e oferece Salvar rascunho ao lado Criar e enviar. Fixos ao longo do caminho, todos visíveis: - KbStatusBadge enviou quatro palavras em inglês codificadas e quatro hex pares – um console espanhol disse "Draft" em uma paleta cinza sem rótulo branco Podia mover-se. - KbPinButton capturado é Pinned uma vez, então uma página que aprende o seu estado pin após a primeira renderização (cada página aqui) mostrou um pino de contorno sobre uma Artigo preso para sempre; uma requisição falhada deixou o conjunto de procura do pino. - O leitor de artigos leu o artigo. preso, um campo que o KbArticle não tem. - mediaId foi declarado número entre os quatro tipos de nós editor e extrairMediaIdsFromJson, enquanto KB MEDIA.UID é um UUID e os valores têm Sempre foram cordas. Só sobreviveu porque nada fez aritmética. em um; um único Number(mediaId) teria sido um NaN silencioso. - KbMediaResource.uid tinha a mesma mentira. - Pedidos de mídia correram: uma resposta lenta de busca precoce poderia pousar após um rápido mais tarde um e repintar a grade para uma consulta que ninguém estava olhando. As regras puras vivem em app/lib/kbConsole.ts e app/lib/kbMedia.ts com 52 testes, porque aqui o vitest coleta somente .test.ts — uma regra escrita dentro de um .tsx é uma regra sem teste. O que eles codificam: um desconhecido nunca é um zero. Um tipo de data ausente dura em vez de se tornar a época, um status não reconhecido pinta neutro em vez de verde, uma fila vazia não tem item mais antigo do que um zero-dia, e um recurso cujo uso nunca conta chegou alertas em vez de prometer que não é usado.