Releases: janeiaraujo/knowledgebase
Releases · janeiaraujo/knowledgebase
Release list
v2.6.0
Corrigido
Cinco bugs que já estavam em produção, todos encontrados ao introduzir o
ESLint (#50) — nenhum deles quebrava o build, todos quebravam na tela ou na
requisição:
deliverWithRetryusavarequest.tenantId, mas roda fora do ciclo da
requisição (entrega assíncrona, com retry agendado porsetTimeout). Toda
atualização de estatística de webhook estouravaReferenceError. O tenant
agora sai do próprio webhook.GETePATCH /databases/:idreferenciavam umobjectIdque nunca foi
declarado — quebravam em toda chamada.- A tela de Revisões estava inteiramente quebrada: importava
useTranslation
e nunca chamava o hook, com 57 usos det()sem escopo. - A tela de Atividade dos Usuários chamava
useTranslationsem importar. - Em KBView,
getErrorMessagevivia no escopo de módulo e chamavat()— a
função criada para consertar o "Erro desconhecido" quebrava justamente
quando havia erro. Agora recebetpor parâmetro. - O editor de texto tinha violação de
rules-of-hooks: um retorno antecipado
antes de umuseCallbackmudava a ordem dos hooks entre renders. - A URL do WebSocket era montada com a porta 3000 fixa, o que quebra atrás de
qualquer proxy reverso. Passa a derivar da origem atual (#54).
Adicionado
docker compose up -dsobe a plataforma inteira — banco, API e interface —
respondendo emhttp://localhost:8080. A interface é servida por nginx, que
faz o proxy de/apie do WebSocket, então só uma porta precisa existir no
host. Os dados de demonstração ficam sob demanda
(docker compose --profile demo run --rm seed), porque o seed não é
idempotente (#54).- ESLint no backend e no frontend, rodando no CI antes dos testes. As regras
apontam bug, não estilo: variável fora de escopo, hook condicional,catch
vazio, declaração vazando entrecase(#50). SECURITY.mdcom canais privados de reporte, prazos e escopo, e
CODE_OF_CONDUCT.md(Contributor Covenant 2.1). O projeto já havia publicado
três correções de segurança sem ter canal privado (#52).- Guarda contra release esquecida: o CI avisa quando um PR muda código de
produto sem bumpar a versão, e um workflow mantém uma issue aberta enquanto a
mainestiver à frente da última tag, fechando-a sozinho quando a release
sair (#49).
Alterado
v2.5.0
Segurança
fast-uri3.1.4/4.1.1 → 3.1.5/4.1.2 (GHSA-7p8r-x3mc-p8w7, severidade alta):
confusão de host quando a autoridade da URL vem introduzida por barra
invertida. Chega transitivamente pelo Fastify — roteador e serializador — e a
correção é só de lock, sem mudança depackage.json(#35).
Adicionado
- A API passou a responder as mensagens de erro no idioma do usuário. Das 255
mensagens, 182 estavam em inglês e 73 em português, sem critério: quem usava
a plataforma em inglês recebia "Notificação não encontrada". A tradução
acontece na borda, num hook de serialização, e o idioma sai da preferência
salva no Perfil ou doAccept-Language(#36). - Interface completa nos dois idiomas: as 43 telas restantes traduzidas. São
73 arquivos traduzindo e nenhum com texto fixo em português (#37). - Testes de integração contra um MongoDB de verdade: duas organizações criadas
pelo endpoint de registro, verificando que uma não enxerga nem altera nada da
outra — leitura por id, listagem,PATCHeDELETEcruzados (conferindo
depois que o dado sobreviveu), comentários, incidentes e contadores. A
varredura estática que já existia prova que o filtro está escrito; isto
prova que ele funciona (#39).
Desempenho
- Bundle dividido por rota. O frontend saía num chunk único de 2,0 MB: quem
abria a tela de login baixava a aplicação inteira — editor, gráficos, telas
de admin — para ver um formulário com dois campos. Carga inicial passou de
2400 kB para 969 kB (649 kB → 256 kB gzip). Login e Register ficam estáticos
de propósito, para não trocar o bundle grande por um flash de spinner na
abertura (#38, trazido para amainpelo #47).
Corrigido
- O CI não rodava em PR cujo destino não fosse a
main, então um PR empilhado
sobre outra branch não recebia check nenhum — a proteção damaincobria só
o PR de baixo da pilha (#47).
v2.4.0
Segurança
- A rota pública de ingestão (
POST /api/events/ingest) passou a ter limite
por token: 120 requisições por minuto. Era a única rota de escrita sem
autenticação de sessão, então uma fonte de monitoramento ruidosa — ou um
token vazado — podia encher a base de eventos sem qualquer freio. O limite
é por token, não por IP: várias ferramentas atrás do mesmo IP não se
penalizam entre si (#30). - Fechados 19 pontos em que uma consulta não filtrava por
tenant_id
(contador de views, agendamento de revisão, post-mortem, busca inteligente,
estatísticas de webhook, fluxos GPS e as dez consultas de gamificação).
Nenhum vazava leitura entre organizações no fluxo normal, porque o id vinha
de um documento já filtrado — mas não havia defesa em profundidade: um id de
outra organização chegando pela URL seria aceito (#31).
Adicionado
- Interface completa em português e inglês. Doze telas passaram a atender os
dois idiomas: KBView, Configurações, Revisões, Favoritos, Notificações,
Busca Avançada, Busca Inteligente, Integrações (entrada e saída),
Relatórios, Atividade dos Usuários e os editores de fluxo GPS e post-mortem
(#32). - Testes de i18n rodando no CI antes do build: paridade de chaves entre os
dois idiomas, existência real de cada chave citada no código, igualdade dos
placeholders de interpolação e uma catraca que impede telas já traduzidas de
voltarem a ter texto fixo (#32).
Corrigido
- Datas passaram a seguir o idioma ativo. Antes o locale era
pt-BRfixo em
toda a aplicação, inclusive com o idioma em inglês (#32). - Rótulos de prioridade, tipo de etapa, período e dia da semana viviam em
constantes de módulo, avaliadas uma única vez na carga: não mudavam ao
trocar de idioma sem recarregar a página (#32). - Plural de zero em português. A regra CLDR classifica 0 como singular, o que
produzia "0 resultado encontrado" na tela de busca (#32). sourceTokens.map(t => ...)sombreava a função de tradução em
InboundEventSources: a aba Entrada quebraria comt is not a functionao
renderizar, mas só quando já existisse um token cadastrado — o build passava
normalmente (#32).
v2.3.0
What's Changed
- feat: foto de perfil com recorte, salva no R2 com copia local redundante by @janeiaraujo in #20
- fix: avatar - local so como fallback do R2 e gradiente vazando by @janeiaraujo in #21
- chore: templates de issue/PR, CODEOWNERS e caminho de entrada pra contribuir by @janeiaraujo in #22
- fix(seguranca): limitar tentativas de login (forca bruta) by @janeiaraujo in #23
- fix(busca): indice de texto usava stemming em ingles sobre conteudo PT by @janeiaraujo in #24
- feat: fluxo de recuperacao de senha by @janeiaraujo in #25
- fix: Configuracoes Gerais nao salvava nada by @janeiaraujo in #26
- feat(i18n): traduzir as telas do caminho principal by @janeiaraujo in #27
- test: testes automatizados das rotas criticas by @janeiaraujo in #28
- chore: release 2.3.0 by @janeiaraujo in #29
Full Changelog: v2.2.0...v2.3.0
v2.2.0
What's Changed
- fix(deps): react-router-dom 6.30.4 -> 7.18.2 - corrige 3 alertas do Dependabot by @janeiaraujo in #12
- fix(ci): CI do frontend falhando desde os últimos merges - Node 18 incompatível com Vite 8 by @janeiaraujo in #15
- docs: adicionar screenshots reais ao README (PT/EN) by @janeiaraujo in #16
- feat: internacionalizacao (PT/EN) - infra + navegacao principal by @janeiaraujo in #17
- feat: pagina de Perfil do usuario com preferencias (idioma, tema, senha) by @janeiaraujo in #18
- chore: release 2.2.0 by @janeiaraujo in #19
Full Changelog: v2.1.0...v2.2.0
v2.1.0
What's Changed
- chore: automatizar tag e GitHub Release por versao by @janeiaraujo in #14
- fix: excluir KB (e qualquer erro nao tratado) mostrava mensagem inutil by @janeiaraujo in #13
- Captura Rapida multimodal, fluxo completo de incidentes e reorganizacao de integracoes by @janeiaraujo in #11
Full Changelog: v1.0.0...v2.1.0
v1.0.0
Baseline do projeto antes da automação de tag/release (PR #14). Marca o estado anterior à leva de melhorias: Captura Rápida multimodal, fluxo completo de incidentes, correções de segurança, CI e i18n.