Skip to content

feat: upload de documentos - listagens e design system (S1-19, S1-20, S1-22) - #34

Merged
RafaMatesco merged 4 commits into
mainfrom
feature/several-tasks-development#3
Sep 27, 2026
Merged

RafaMatesco merged 4 commits into
mainfrom
feature/several-tasks-development#3

Conversation

@vitorpdim

Copy link
Copy Markdown
Contributor

O que foi feito?

  • S1-19: upload seguro de PDF/DOCX/MD/TXT com validação de tipo real, limite de tamanho configurável, armazenamento com identificador seguro, auditoria e isolamento por projeto.
  • S1-20: aba Documentos no projeto, com listagem, metadados, status de processamento e estados de carregamento, vazio e erro.
  • S1-22: remoção com confirmação, idempotente, com evento document.removed quando há conteúdo indexado.
  • RepoAnalyzer: correção do progresso congelado, dos erros engolidos e do autor simulado.
  • Design system: tokens.css passa a ser a fonte única de tokens, alinhada ao DESIGN_SYSTEM.md.

Alterações técnicas

  • Backend: novo módulo documents (validação por conteúdo, storage local em duas fases, repositório transacional, outbox evento_integracao) e migration 011_document_upload.sql.
  • Novas rotas GET/POST /api/v1/projects/:projectId/documents e DELETE .../documents/:documentId.
  • Resposta 413 no errorHandler para arquivo acima do limite.
  • Frontend: DocumentsTab, api_documents, api_errors, RepoAnalyzerTab reescrito, UI kit estendido (Alert, EmptyState) e abas acessíveis.
  • Infra: client_max_body_size no nginx, volume documents_data, variáveis DOCUMENT_* e CI incluindo o teste de banco de documentos.
  • Contrato em docs/api/openapi.yaml.

Como validar

  1. cd backend && npm ci && npm test && npm run build
  2. cd frontend && npm ci && npm test && npm run build
  3. Aplicar as migrations (npm run migrate) e abrir um projeto, na aba Documentos: enviar um PDF, tentar um .exe e um .txt renomeado para .pdf, remover com confirmação.
  4. Com perfil dev, confirmar que só consulta.
  5. Definir DOCUMENT_MAX_SIZE_MB=1, enviar arquivo maior e confirmar a mensagem de limite.

A ser feito (checklist)

  • Rodar o teste de banco documents.repository.db.test.ts no CI (não rodei local)
  • Criar o fluxo n8n que consome document.removed e preencher DOCUMENT_EVENTS_WEBHOOK_URL
  • Validar o visual e o layout responsivo em navegador
  • Validar a rota do RepoAnalyzer (projectId inválido e projeto inexistente)

cc @LoadCG

@LoadCG

LoadCG commented Sep 24, 2026

Copy link
Copy Markdown
Contributor

QA — pontos encontrados na PR #34

Revisei o commit 5cb8b2e e a descrição da PR. Encontrei este problema funcional que precisa ser corrigido antes do merge:

P1 — Projeto arquivado ainda permite remover documentos

Em backend/src/modules/documents/documents.service.ts, o método upload() valida project.status === "arquivado" e bloqueia escrita, mas o método remove() apenas chama requireProject() e não verifica o status do projeto.

Assim, um usuário com perfil admin ou po consegue executar DELETE /api/v1/projects/:projectId/documents/:documentId em projeto arquivado, apesar de a UI informar que o projeto é somente leitura e de a PR documentar esse comportamento.

Sugestão: aplicar a mesma regra de projeto arquivado no fluxo de remoção, retornando 400/403 conforme o contrato adotado, e adicionar teste de rota/serviço cobrindo DELETE em projeto arquivado.

P2 — Checklist da própria PR ainda tem validações pendentes

A descrição informa que ainda não foram executados: teste de banco no CI, fluxo n8n do evento document.removed, validação visual/responsiva e validação da rota RepoAnalyzer para projectId inválido/inexistente. Esses itens devem ser concluídos ou explicitamente tratados antes do merge.

P2 — Validação local

No ambiente atual não consegui executar a suíte porque frontend/node_modules está pertencendo a root, e Vitest/Vite falham com EACCES ao criar arquivos temporários. O código local não foi alterado.

Peço corrigir o bloqueio de remoção em projetos arquivados e adicionar a cobertura correspondente.

@LoadCG

LoadCG commented Sep 25, 2026

Copy link
Copy Markdown
Contributor

Checkpoint de correção — não aprovar merge ainda

A branch da PR foi atualizada com merge normal da main e commit 9b4e445. Esta é uma entrega intermediária: há correções já iniciadas, mas os gates abaixo continuam obrigatórios antes de qualquer merge.

Validação deste checkpoint

  • Backend: build passou; testes: 207 passaram, 0 falharam, 9 testes PostgreSQL foram pulados por ausência de banco de integração.
  • Frontend: build passou; testes: 123 passaram e 9 falharam, concentrados em ProjectTabs.test.tsx e RepoAnalyzerTab.test.tsx. As expectativas estão desalinhadas com as views atuais e precisam ser corrigidas sem simplesmente apagar cobertura.
  • A migration foi renumerada para 012_document_upload.sql; falta validar em PostgreSQL limpo e existente.
  • A proteção transacional contra arquivamento concorrente e a recuperação/outbox foram implementadas parcialmente; os cenários reais PostgreSQL ainda precisam rodar.
  • O processamento de conteúdo continua dependente da S2-01. S1-21 é de protótipos associados a PBIs, não de ingestão.

O que falta antes do merge

  1. Atualizar os testes de abas do projeto para a navegação atual acessível: clique/teclado, URL/hash, documento em projeto ativo/arquivado e preservação do backlog/RepoAnalyzer.
  2. Atualizar e completar os testes do RepoAnalyzer para a arquitetura vigente; preservar os comportamentos ainda exigidos em vez de remover os testes.
  3. Testar a tela atual de documentos: upload binário, validação/limite, vazio/erro/retry, paginação, remoção, permissões, projeto arquivado, falha de armazenamento e aviso verdadeiro sobre a dependência de ingestão S2-01.
  4. Alinhar API, OpenAPI e documentação para cursor, next_cursor, paginação, armazenamento_pendente e conflito 409; deixar claro que pendente significa aguardando ingestão.
  5. Criar e executar teste PostgreSQL para 012_document_upload.sql em banco limpo e em banco existente com 011_unique_entity_technology.sql; comprovar idempotência, preservação dos dados e ordem das migrations.
  6. Ajustar CI para executar testes de documentos, concorrência e migrations sem remover jobs/testes que já vieram da main.
  7. Rodar os testes PostgreSQL em banco descartável e comprovar corrida arquivamento-vs-upload/remoção, leases e retry do outbox, recuperação do storage e paginação estável isolada por projeto.
  8. Fechar a revisão do worker/n8n: execução independente de DELETE, idempotência, backoff, logs seguros e health/alerta; separar claramente o escopo desta PR da dependência S2-01.
  9. Validar no navegador desktop/mobile e com perfis admin/PO/dev, projeto ativo/arquivado, fluxo válido/inválido de upload, navegação e estados de erro; garantir que a rota usada pela aplicação abre a tela de documentos.
  10. Rodar novamente backend/frontend build, typecheck, suítes completas, integração PostgreSQL e validação de OpenAPI/workflows; corrigir todas as falhas e fazer revisão do diff contra a main para evitar regressões.
  11. Confirmar branch sem conflitos, aguardar CI verde no HEAD exato e pedir nova revisão QA/autor.
  12. Merge somente após todos esses gates e autorização explícita separada. Não fazer merge neste checkpoint.

O checklist detalhado e o estado deste checkpoint também estão em docs/PR34_CORRECTION_PLAN.md.

@LoadCG

LoadCG commented Sep 25, 2026

Copy link
Copy Markdown
Contributor

Atualização do CI no commit 9b4e445

A execução do GitHub confirmou os bloqueios locais registrados acima:

  • Teste PostgreSQL: falha em documents.repository.db.test.ts:91 — evento da outbox não some da consulta após publicação.
  • Frontend: 9 testes falham (3 da navegação de abas, que não expõe role=tab, e 6 do RepoAnalyzer, cuja interface/contrato atual não corresponde à cobertura existente).
  • Build/typecheck backend e validação de workflow/Docker passaram. O build frontend passa localmente; a suíte frontend não.

Registrei os resultados em docs/PR34_CORRECTION_PLAN.md, commit 99b45a7. A branch segue aberta e não está pronta para merge. O comentário/checklist anterior continua sendo o plano completo de trabalho obrigatório.

…chat e E2E

Documentos (S1-19/S1-20/S1-22)
- Corrige o teste de outbox para lease/backoff e cobre SKIP LOCKED, operacoes
  de armazenamento, paginacao por cursor e estatisticas de manutencao em PostgreSQL
- Adiciona teste da migration 012 (banco limpo e banco ja na 011, idempotencia)
- CI passa a rodar backlog-tree, migrations 011/012, documentos e chat no PostgreSQL
- /health expoe filas e alertas do worker; OpenAPI com cursor, next_cursor,
  armazenamento_pendente e 409; docs/DOCUMENTOS_INTEGRACAO.md

Frontend
- Abas acessiveis (tablist, setas/Home/End, hash e rota /documents) na ProjectsView
- RepoAnalyzerView reescrita (etapas, progresso, relatorio em Markdown seguro,
  repetir analise) e ChatView profissional (log, fontes, origem, retry, escopo)
- Testes portados para as views atuais; componentes orfaos removidos
- Tokens unificados com o prototipo, responsivo do cabecalho e das abas

Backend
- Chat: posse da conversa, isolamento por projeto e busca textual honesta
- RepoAnalyzer: UUID, projeto inexistente, arquivado (409) e erro do motor (503)
- Cadastro publico nao concede administrador

E2E
- e2e/ com 12 cenarios de navegador contra API real e PostgreSQL
@vitorpdim

Copy link
Copy Markdown
Contributor Author

O que foi feito?

  • Fecha os gates de QA da PR feat: upload de documentos - listagens e design system (S1-19, S1-20, S1-22) #34 (S1-19, S1-20, S1-22): CI vermelho corrigido, testes de banco, migration 012, worker/outbox, contrato OpenAPI e E2E de navegador.
  • Reescreve as telas RepoAnalyzer e Chat na arquitetura de views atual, com testes.
  • Corrige achados de segurança encontrados na revisão: conversa de chat de outro usuário acessível e cadastro público de administrador.
  • Unifica os tokens de estilo com o protótipo e corrige o responsivo do cabeçalho/abas.

Alterações técnicas

  • Backend: teste da outbox reescrito para lease/backoff; novos testes em PostgreSQL (SKIP LOCKED, operações de armazenamento, cursor estável, estatísticas); /health com filas e alertas; chat com repositório/serviço (posse, isolamento, busca textual com origem); RepoAnalyzer com UUID/404/409/503; cadastro de admin exige sessão de admin.
  • Banco: migration-012.db.test.ts (banco limpo e já na 011, idempotência, dados legados).
  • Frontend: abas acessíveis (setas/Home/End, hash, rota /documents); RepoAnalyzerView, ChatView, Markdown seguro; componentes órfãos removidos; testes portados.
  • CI: etapa PostgreSQL inclui backlog-tree, migrations 011/012, documentos e chat.
  • Docs: OpenAPI (cursor, next_cursor, armazenamento_pendente, 409), docs/DOCUMENTOS_INTEGRACAO.md, plano de correção atualizado.
  • E2E: pasta e2e/ com 12 cenários dessa PR (documentos e assistentes).

Como validar

  1. cd backend && npm ci && npm run build && npm test
  2. Com banco descartável: ARCHIVE_TEST_DATABASE_URL=... BACKLOG_TREE_TEST_DATABASE_URL=... npm test
  3. cd frontend && npm ci && npx tsc -b && npm test && npm run build
  4. Subir backend e frontend e rodar cd e2e && npm ci && npm test
  5. No navegador: enviar/remover documentos como PO e dev, com projeto ativo e arquivado, em desktop e 390 px.

A ser feito (checklist)

  • CI do GitHub verde no HEAD publicado
  • Criar/ativar o workflow n8n de document.removed e preencher DOCUMENT_EVENTS_WEBHOOK_URL
  • Ingestão e indexação (S2-01)
  • Nova revisão QA

cc @LoadCG

@vitorpdim
vitorpdim added this pull request to stack #39 September 25, 2026 15:40
@RafaMatesco
RafaMatesco merged commit fe276b2 into main Sep 27, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants