diff --git a/README.md b/README.md index b88ee33..ade291e 100644 --- a/README.md +++ b/README.md @@ -1,149 +1,230 @@ -# Sinapse — Base Inteligente de Requisitos +# Sinapse -> **PRO4TECH · Fatec São José dos Campos · Grupo Galáticos** -> *Projeto de Aprendizagem Interdisciplinar (API) — 4º Semestre (2º Semestre/2026)* +**Memória de requisitos e conhecimento para equipes de produto e desenvolvimento.** -O **Sinapse** é a memória institucional da fábrica de software. A plataforma converte itens de backlog, regras de negócio e decisões de arquitetura em uma base de conhecimento inteligente, auxiliando Product Owners (POs) e equipes de desenvolvimento na especificação padronizada de features, redução de retrabalho e reúso de conhecimento prévio. +[![CI](https://github.com/Galaticos-API/API-4/actions/workflows/ci.yml/badge.svg)](https://github.com/Galaticos-API/API-4/actions/workflows/ci.yml) +[![E2E](https://github.com/Galaticos-API/API-4/actions/workflows/e2e.yml/badge.svg)](https://github.com/Galaticos-API/API-4/actions/workflows/e2e.yml) ---- +Sinapse ajuda Product Owners a especificar trabalho no padrão **Projeto → Épico → Feature → PBI**, registrar decisões e consultar informações vinculadas a cada projeto. Regras determinísticas orientam a qualidade dos itens; documentos e conversas mantêm contexto e rastreabilidade. -## 📚 Documentação Canônica do Projeto +> Projeto de Aprendizagem Interdisciplinar · Fatec São José dos Campos · Grupo Galáticos · PRO4TECH · 2º semestre de 2026. -Toda a especificação técnica, backlog e decisões arquiteturais estão estruturados nos documentos oficiais abaixo: +## Equipe -| Documento | Descrição e Conteúdo | -|---|---| -| 🤖 **[Contexto Canônico de IA e Agentes](docs/AGENTS.md)** | **Contexto unificado para LLM Agents** com visão do produto, schema, regras de negócio e stack. | -| 📄 **[PRD — Product Requirements Document](docs/PRD-PRO4TECH.md)** | Requisitos funcionais (RF), não-funcionais (RNF), regras de negócio e governança de IA. | -| 🏛️ **[Arquitetura, GraphRAG e Embeddings](docs/Architecture/README.md)** | Diagramas, fluxo RAG, ERD, proposta GraphRAG e benchmark do spike `bge-m3`. | -| 📊 **[Planejamento Scrum & Plano de Tarefas](docs/PLANEJAMENTO_SCRUM.md)** | Metas executivas por sprint e detalhamento operacional das 71 tarefas técnicas. | -| 📋 **[Backlog de Produto (66 PBIs)](docs/backlog/README.md)** | Especificação completa dos 6 épicos e 18 features no padrão da fábrica. | -| 🔌 **[Contrato OpenAPI (Serviços)](docs/api/openapi.yaml)** | Especificação dos endpoints e schemas HTTP compartilhados entre backend, IA e n8n. | - ---- - -## 🏗️ Arquitetura e Componentes de Infraestrutura - -O ecossistema é distribuído em microsserviços conteinerizados e locais: +| Papel | Integrante | GitHub | +|---|---|---| +| Product Owner (PO) | Daniel Dias | [@DanielDPereira](https://github.com/DanielDPereira) | +| Scrum Master | Cauan Gabriel | [@LoadCG](https://github.com/LoadCG) | +| Development Team | Emmanuel Garakis | [@Garakis](https://github.com/Garakis) | +| Development Team | Rafael Matesco | [@RafaMatesco](https://github.com/RafaMatesco) | +| Development Team | Gustavo Bueno | [@Darkghostly](https://github.com/Darkghostly) | +| Development Team | Gabriel Lasaro | [@GaelNotFound](https://github.com/GaelNotFound) | +| Development Team | Giovanni | [@Giomoret](https://github.com/Giomoret) | +| Development Team | Heitor | [@heitors1337](https://github.com/heitors1337) | +| Development Team | Vitor | [@vitorpdim](https://github.com/vitorpdim) | + +Os links foram associados a integrantes por nomes públicos e autoria de commits +neste repositório. Gabriel Lasaro aparece no histórico como Gabriel, com o e-mail +de commit `gaelslasaro@gmail.com`, ligado ao perfil [@GaelNotFound](https://github.com/GaelNotFound). + +## Metodologia ágil e andamento + +O grupo organizou o trabalho com Scrum e backlog de produto priorizado em épicos, +features e PBIs. A equipe planejou o trabalho em sprints, relacionando as tarefas +técnicas aos itens do backlog e aos critérios de aceitação. A Sprint 1 foi a +primeira sprint executada e foi encerrada em **27/09/2026**. Até esta atualização, +nenhuma sprint posterior foi concluída; as sprints seguintes permanecem no +planejamento. + +| Sprint | Período | Situação | Foco | +|---|---|---|---| +| Sprint 1 | 07/09/2026–27/09/2026 | Concluída em 27/09/2026 | Hierarquia do backlog, autenticação, qualidade de PBIs, decisões, documentos e consolidação de QA. | +| Sprints seguintes | A definir no planejamento | Planejadas; ainda não executadas | Evolução do produto conforme backlog e prioridades do PO. | + +O trabalho foi acompanhado pelo backlog, revisão de entregas e validação dos +critérios de aceite. O [planejamento Scrum](docs/PLANEJAMENTO_SCRUM.md) detalha +escopo e tarefas da Sprint 1. As cerimônias, duração de reuniões e métricas não +estão formalizadas neste repositório; este resumo não presume práticas que não +foram registradas. + +## Veja o produto + +O GIF e as capturas abaixo foram feitos no frontend real do `main`, com um banco PostgreSQL descartável e dados fictícios cadastrados pela interface. Eles não são mockups nem imagens de produção. + +![Navegação real de projetos até um PBI e seu checklist de qualidade](docs/media/sinapse-workflow.gif) + +*Fluxo: abrir projeto → expandir backlog → consultar PBI e qualidade.* + +

+ Lista de projetos do Sinapse + Visão geral de um projeto com backlog, documentos e conhecimento +

+

+ Backlog hierárquico expandido de projeto até PBI + Detalhe de PBI e checklist determinístico de qualidade +

+ +## O que o sistema oferece + +- **Projetos e backlog:** organize épicos, features, PBIs e critérios de aceitação com navegação hierárquica e trilha de auditoria. +- **Qualidade de requisitos:** valide título, história, cenários DADO/QUANDO/ENTÃO, termos vagos e necessidade de protótipo. A configuração organizacional pode ser administrada e auditada. +- **Decisões:** registre contexto, justificativa e alternativas no nível apropriado da hierarquia. +- **Documentos:** envie arquivos para um projeto, consulte a lista paginada e remova documentos com isolamento por projeto e confirmação. +- **Busca e conversa:** encontre itens no backlog; mantenha conversas vinculadas ao usuário e, opcionalmente, ao projeto. Quando o assistente não está disponível, a conversa tenta uma busca textual no acervo. +- **Acesso por perfil:** `admin`, `po` e `dev` têm permissões distintas; a API verifica a sessão e não confia em papéis enviados pelo navegador. +- **Análise de repositório:** solicita uma análise assíncrona ao serviço Python configurado. + +### Estado da IA + +O núcleo de requisitos, autenticação, qualidade e documentos não exige modelos de IA. Ollama e o serviço Python podem ser ligados pelo perfil `local-ai`. O serviço Python expõe endpoints de embeddings, chunking, consulta RAG e análise de repositório; o fluxo de conversa do backend mantém busca textual como fallback. Configure e valide a integração de IA separadamente antes de depender dela em uma demonstração ou implantação. + +## Arquitetura em uma página + +```mermaid +flowchart LR + Browser["React + Vite"] -->|"HTTP /api/v1"| API["Node.js + Express"] + API -->|"dados, sessões, auditoria"| DB[("PostgreSQL 16 + pgvector")] + API -->|"quando configurado"| AI["FastAPI: IA e RepoAnalyzer"] + AI --> Ollama["Ollama: modelos locais"] + API -->|"eventos de integração"| N8N["n8n opcional"] +``` -| Componente | Tecnologia | Porta Local | Responsabilidade Principal | -|---|---|:---:|---| -| **Banco Unificado** | PostgreSQL 16 + `pgvector` | `55432` (host) | Dados relacionais de negócio e vetores de chunks indexados por HNSW (`vector_cosine_ops`). | -| **Orquestrador** | n8n (`latest`) | `5678` | Pipeline assíncrono de ingestão, gatilhos de arquivos em `/files` e integrações. | -| **Runtime de IA** | Ollama | `11434` | Inferência local de LLM (`qwen2.5:1.5b`) e geração de embeddings (`bge-m3`). | -| **Backend** | Node.js 20+ / Express / TS | `3001` | Autenticação JWT, CRUD, validações determinísticas (RF-08 a RF-11) e **única escrita no banco de negócio**. | -| **Frontend** | React 19 / Vite / TS | `5173` | SPA para Product Owners (gestão hierárquica de PBIs, acervo e chat fundamentado). | -| **Serviço de IA** | Python 3.11+ / FastAPI | `8000` | Chunking unificado, cálculo de vetores, Harness PRO4TECH e montagem de contexto RAG. | +No Compose padrão, o frontend, o backend, PostgreSQL e n8n são iniciados. Ollama e o serviço Python ficam no perfil opcional `local-ai`. O backend executa migrations pendentes ao iniciar no container; migrations versionadas são a fonte de evolução do schema. -### Qualidade e completude de PBIs +| Componente | Stack | Porta no host | Responsabilidade | +|---|---|---:|---| +| Frontend | React 19, TypeScript, Vite; Nginx no container | `5173` | Interface web e proxy de `/api` no modo de desenvolvimento. | +| Backend | Node.js 20, Express, TypeScript | `3001` | API REST, sessões, autorização, regras de negócio e persistência. | +| PostgreSQL | PostgreSQL 16 + pgvector | `55432` | Dados relacionais e estruturas de busca vetorial. Dentro da rede Docker, usa `5432`. | +| n8n | n8n | `5678` | Integrações assíncronas opcionais. | +| Ollama | Ollama | `11434` | Inferência e embeddings locais, quando o perfil de IA estiver ligado. | +| Serviço de IA | Python 3.11+, FastAPI | `8000` | Endpoints de chunking, embeddings, RAG e RepoAnalyzer. | -O backend calcula o indicador de completude a partir das regras determinísticas ativas para PBIs (título, história, cenários, termos vagos e protótipo); ele não depende do valor em cache da coluna de score. No cadastro do PBI, o PO informa explicitamente se ele exige interface/protótipo. A verificação de protótipo só entra no cálculo quando esse campo está ativo e consulta a tabela `prototipo`. A política atual é persistida no PostgreSQL e pode ser consultada ou alterada por administradores em `GET /api/v1/quality/configuration/pbi` e `PUT /api/v1/quality/configuration/pbi`. As alterações são versionadas e auditadas. As migrations correspondentes são `008_quality_organization_configuration.sql` e `009_pbi_interface_quality.sql`; veja o [guia de migrations](database/migrations/README.md) e o [contrato OpenAPI](docs/api/openapi.yaml). +## Comece com Docker ---- +### Pré-requisitos -## 🚀 Inicialização Rápida +- Docker Desktop atualizado com Docker Compose v2. +- Git. +- Para desenvolvimento fora de containers: Node.js 20+ e Python 3.11+. -### 1. Pré-requisitos -- [Docker](https://docs.docker.com/get-docker/) (v24+) e [Docker Compose](https://docs.docker.com/compose/) (v2+) -- [Node.js](https://nodejs.org/) (v20+) e [Python](https://www.python.org/) (3.11+) -- [Git](https://git-scm.com/) +### 1. Baixe o código e configure o ambiente -### 2. Configurar Variáveis de Ambiente ```bash +git clone https://github.com/Galaticos-API/API-4.git +cd API-4 cp .env.example .env ``` -> ⚠️ **Importante:** Mantenha `N8N_ENCRYPTION_KEY=sinapse-shared-dev-encryption-key-2026` em ambiente de desenvolvimento local para compatibilidade com os workflows versionados. -### 3. Subir a Infraestrutura Base -```bash -docker compose up -d -``` -Serviços disponíveis: -- PostgreSQL: `localhost:55432` (Usuário: `sinapse`, Senha padrão: `sinapse_dev_password`, Banco: `sinapse`) -- n8n Web: [http://localhost:5678](http://localhost:5678) -- Backend: [http://localhost:3001/health](http://localhost:3001/health) -- Frontend: [http://localhost:5173](http://localhost:5173) +No PowerShell, use `Copy-Item .env.example .env` no lugar de `cp`. + +`.env.example` contém valores apenas para desenvolvimento local. Troque credenciais e chaves antes de expor os serviços; nunca versione `.env` nem use os padrões do exemplo em produção. + +### 2. Inicie o produto -Para encerrar os serviços sem apagar os dados persistidos: ```bash -docker compose down +docker compose up --build -d +docker compose ps ``` -Para remover o container e todos seus dados: +Abra: + +| Serviço | URL | +|---|---| +| Aplicação | | +| Saúde da API | | +| Documentação interativa da API | | +| n8n | | + +As migrations são executadas no início do container do backend. Cadastre uma conta pela tela de login e entre na aplicação. O Compose padrão não baixa modelos; a tela pode ser usada sem Ollama. + +### 3. (Opcional) Ligue IA local + +O perfil adicional inicia Ollama e o serviço Python: + ```bash -docker compose down -v +docker compose --profile local-ai up --build -d +docker compose --profile local-ai exec ollama ollama pull bge-m3 +docker compose --profile local-ai exec ollama ollama pull qwen2.5:1.5b ``` -### 4. Baixar Modelos Locais no Ollama (opcional) -```bash -docker compose --profile local-ai up -d +O download dos modelos pode ocupar vários gigabytes. Os modelos e a configuração podem ser alterados em `.env`; use o [guia de ambiente](docs/SETUP_GUIDE.md) para endereços entre containers, variáveis e diagnóstico. -# Modelo de Embeddings PT-BR (validado no Spike PRE-07) -docker compose --profile local-ai exec ollama ollama pull bge-m3 +### Parar e preservar os dados -# Modelo LLM para inferência rápida local (CPU) -docker compose --profile local-ai exec ollama ollama pull qwen2.5:1.5b +```bash +docker compose down ``` ---- +Isso preserva volumes nomeados. `docker compose down -v` remove também os volumes persistentes, incluindo o banco local, arquivos enviados, dados do n8n e modelos do Ollama. -## 🔄 Versionamento de Workflows (`n8n-local-sync`) +## Desenvolvimento e qualidade -Os workflows do n8n são versionados no Git via utilitário GitOps [`n8n-local-sync`](https://pypi.org/project/n8n-local-sync/): +Instale dependências em cada módulo antes de executar seus comandos: ```bash -# Instalação -pip install n8n-local-sync - -# Principais comandos -n8n-sync status # Visualiza estado de sincronização local vs n8n -n8n-sync diff # Compara diferenças estruturais limpas -n8n-sync sync # Puxa workflows do container para o Git (n8n/workflows/) -n8n-sync push # Envia workflows do Git para a instância do n8n -n8n-sync validate # Valida integridade do JSON e detecta segredos expostos +npm ci --prefix backend +npm ci --prefix frontend +npm ci --prefix e2e ``` ---- +| Área | Comandos | Observação | +|---|---|---| +| Compose | `docker compose config --quiet` | Valida o arquivo sem iniciar containers. | +| Backend | `cd backend && npm run build` | Compila TypeScript para `dist/`. | +| Backend | `cd backend && npm run typecheck` | Verifica tipos sem gerar arquivos. | +| Backend | `cd backend && npm test` | Suíte unitária; integrações PostgreSQL são ativadas pelas variáveis de teste documentadas. | +| Backend | `cd backend && npm run migrate` | Aplica migrations pendentes no banco apontado por `POSTGRES_*`. | +| Backend | `cd backend && npm run seed:validate` | Valida o acervo curado; exige build prévio. | +| Frontend | `cd frontend && npm test` | Testes Vitest. | +| Frontend | `cd frontend && npm run build` | TypeScript e bundle de produção. | +| IA | `cd ai-service && python -m py_compile main.py config.py services/chunker.py services/ollama_client.py` | Verificação sintática do serviço. | +| IA | `cd ai-service && python -m unittest discover -s tests -v` | Testes determinísticos de chunking e análise. | +| E2E | `cd e2e && npm test` | Chrome, frontend e API em execução; use banco descartável. | -## 🧪 Comandos de Validação e Qualidade +O workflow de CI executa builds, testes, validações do seed, compatibilidade PostgreSQL, configuração Docker e serviço Python. O workflow de navegador roda em pull requests e atualizações de `main` que alterem aplicação, banco ou E2E. Consulte [workflows do GitHub Actions](.github/workflows/). -| Verificação | Comando | Descrição | -|---|---|---| -| **Validação Docker** | `docker compose config --quiet` | Checa a sintaxe do Compose | -| **Workflows n8n** | `n8n-sync validate` | Varre sintaxe e credenciais expostas | -| **Migrations** | `cd backend && npm run migrate` | Executa migrations pendentes no Postgres | -| **Testes Backend** | `cd backend && npm test` | Executa suíte de testes unitários/integração | -| **Validação integrada S1** | `cd backend && npm run test:integration:s1` | Valida os fluxos HTTP com PostgreSQL real da Sprint 1 | -| **Auditoria de Segurança** | `cd backend && npm run audit:security` | Verifica dependências de produção | -| **Tipagem Backend** | `cd backend && npm run typecheck` | Checagem estrita de tipos TypeScript | -| **Testes Frontend** | `cd frontend && npm test` | Executa a suíte Vitest da interface | -| **Build Frontend** | `cd frontend && npm run build` | Valida bundle de produção da SPA | -| **Testes do serviço de IA** | `cd ai-service && python -m unittest discover -s tests` | Executa os testes do chunker e metadados | +> Os testes E2E criam contas e projetos. Use sempre um banco descartável ou dedicado a testes, nunca uma base compartilhada ou de produção. ---- +## Documentação -## 📁 Estrutura de Diretórios +| Guia | Para quê | +|---|---| +| [Índice da documentação](docs/README.md) | Mapa dos guias, contratos e documentos de produto. | +| [Instalação e desenvolvimento](docs/SETUP_GUIDE.md) | Compose, execução local, variáveis, testes e solução de problemas. | +| [Arquitetura e estado da implementação](docs/Architecture/README.md) | Limites dos serviços, dados, fluxos e distinção entre recurso implementado e proposta. | +| [Contrato OpenAPI](docs/api/openapi.yaml) | Rotas REST, schemas e autenticação. | +| [PRD PRO4TECH](docs/PRD-PRO4TECH.md) | Problema, visão, requisitos e regras de produto. | +| [Backlog de produto](docs/backlog/README.md) | Épicos e PBIs documentados. | +| [Planejamento Scrum](docs/PLANEJAMENTO_SCRUM.md) | Objetivos e planejamento das sprints. | +| [Migrations](database/migrations/README.md) | Evolução e validação do schema. | +| [Seed e política de dados](database/seed/README.md) | Acervo curado, validação e regras de segurança. | +| [Testes E2E](e2e/README.md) | Cobertura de navegador e execução local. | +| [Protótipo e handoff de UX](figma-import/README.md) | Referências de design e protótipos. | + +## Estrutura do repositório ```text -API-4/ -├── .github/workflows/ # Pipelines de CI/CD no GitHub Actions -├── ai-service/ # Microsserviço Python/FastAPI (RAG, Chunking & Ollama) -├── backend/ # API REST Node.js/TypeScript (CRUD, Auth & Postgres) -├── database/ # DDL de inicialização, migrations e seeds -│ ├── init.sql # Schema DDL inicial -│ ├── migrations/ # Migrations versionadas em SQL -│ └── seed/ # Carga de dados fictícios para desenvolvimento -├── docs/ # Documentação canônica consolidada -│ ├── AGENTS.md # Contexto canônico autoritativo para agentes e LLMs -│ ├── PRD-PRO4TECH.md # Especificação técnica e requisitos funcionais -│ ├── PLANEJAMENTO_SCRUM.md # Organização das tarefas de desenvolvimento e plano técnico -│ ├── Architecture/ # Diagramas de arquitetura, fluxo RAG, ERD e GraphRAG -│ ├── backlog/ # Mapeamento dos 6 épicos e 66 PBIs -│ └── api/ # Contrato OpenAPI (openapi.yaml) -├── frontend/ # SPA React 19/TypeScript/Vite (Interface do PO) -├── n8n/ # Workflows exportados e arquivos locais monitorados -├── scripts/ # Utilitários e benchmarks (spike_embeddings.py) -├── .env.example # Template de variáveis de ambiente -├── .n8n-sync.yaml # Configuração do n8n-local-sync -└── docker-compose.yml # Orquestração local (PostgreSQL + pgvector, n8n & Ollama) +. +├── .github/workflows/ # CI, compatibilidade do banco e E2E +├── ai-service/ # FastAPI, embeddings, RAG e RepoAnalyzer +├── backend/ # API, autenticação, regras e persistência +├── database/ # baseline SQL, migrations e seeds +├── docs/ # guias de produto, arquitetura, API e QA +├── e2e/ # testes de navegador no Chrome +├── figma-import/ # handoff de UX e protótipos +├── frontend/ # SPA React e bundle Nginx +└── n8n/ # workflows versionados e arquivos locais ``` + +## Segurança e dados + +- Use dados fictícios nos ambientes de demonstração e testes. +- O seed curado aceita apenas um banco dedicado com sufixo `_dev` ou `_test`; a execução normal valida o manifesto sem gravar dados. +- Restrinja acesso à API e ao banco fora da máquina local; valores do `.env.example` não são segredos de produção. +- Arquivos enviados são armazenados em volume local no Compose. Defina retenção, backup e proteção desse volume antes de uma implantação. +- Leia [política de dados do seed](database/seed/POLITICA_DE_DADOS.md) e [guia completo de setup](docs/SETUP_GUIDE.md). + +## Contexto acadêmico + +Projeto de Aprendizagem Interdisciplinar (API), 4º semestre de Análise e Desenvolvimento de Sistemas na Fatec São José dos Campos, desenvolvido pelo Grupo Galáticos para a PRO4TECH. diff --git a/database/migrations/README.md b/database/migrations/README.md index bb2f940..5076f5a 100644 --- a/database/migrations/README.md +++ b/database/migrations/README.md @@ -4,6 +4,11 @@ As alterações estruturais do banco devem ser numeradas e aplicadas em ordem (`001_...sql`, `002_...sql`, etc.). Cada arquivo deve ser idempotente quando possível e conter apenas a alteração daquela versão. +O baseline inicial é `database/init.sql`. Em volumes já existentes, o backend +executa migrations pendentes ao iniciar o container e registra o resultado em +`_schema_migrations`. Para executar no host, use `npm --prefix backend run migrate` +com as variáveis corretas. Consulte o [guia de setup](../../docs/SETUP_GUIDE.md). + ## Baseline atual `database/init.sql` é o baseline inicial do projeto e é executado pelo @@ -32,7 +37,7 @@ O runner registra o nome completo. `004_z_prepare_criteria_order.sql` precisa ordenar antes de `005_backlog_hierarchy_domain.sql` para preparar critérios legados antes da criação do índice único. `006_reconcile_epic_status.sql` uniformiza a constraint preservando os estados legados como somente leitura -na API de épicos. Veja [execução e recuperação](../CONSOLIDACAO_S1_05.md). +na API de épicos. Veja também a documentação de execução e recuperação nesta seção. `npm run test:integration:s105` no backend valida banco vazio, histórico antigo, histórico backlog e ambas as migrations, com repetição e rollback de auditoria. @@ -79,3 +84,17 @@ incrementa sua versão ao introduzir a nova regra. A atualização da política registrada em `auditoria` como alteração de migration (sem atribuir a um admin). O teste PostgreSQL de compatibilidade verifica aplicabilidade, presença/ausência de protótipo e reexecução idempotente. + +## Registro de decisões (S1) + +`013_decision_records.sql` cria o armazenamento de decisões vinculadas aos +níveis do backlog e seus índices de consulta. Rotas e schemas estão no +[OpenAPI](../../docs/api/openapi.yaml); o backend valida o vínculo com o projeto +e registra auditoria. + +## Testes PostgreSQL descartáveis + +Testes de integração devem apontar para bases descartáveis com os sufixos +exigidos por cada script (`_test`, `_s105_test` etc.). Não use a base local +compartilhada. Consulte os comandos e as proteções no [guia de setup](../../docs/SETUP_GUIDE.md) +e nos scripts de `backend/package.json`. diff --git a/database/seed/README.md b/database/seed/README.md index becac5b..102f214 100644 --- a/database/seed/README.md +++ b/database/seed/README.md @@ -1,50 +1,43 @@ -# Seed de desenvolvimento - -## PRE-06 — Acervo histórico curado - -O seed atual é `fixtures/historical-v1.json`, aplicado pelo backend. Contém três -projetos acadêmicos API-1/API-2/API-3, seis resumos de requisitos e seis chunks sem -vetores. As cópias curadas ficam em `curated/`. Não há pessoas, credenciais ou -competências inventadas. Cada registro tem repositório, revisão, caminho, localização, -hash SHA-256 do texto fonte em UTF-8 e descrição da transformação; a carga persiste -essa origem em `auditoria` e nos metadados dos chunks. - -Dentro de `backend`, execute `npm ci`, `npm run build`, `npm run seed:validate` e `npm run test:seed`. -Para carregar, prepare um banco dedicado com as migrações 001–003. Configure -`SEED_DATABASE_URL` por variável de ambiente (não em argumentos nem arquivos versionados) -e execute `npm run seed:apply`. O nome do banco deve terminar em `_dev` ou `_test`; -`NODE_ENV=production` é recusado. O comando de migração existente usa suas próprias -variáveis `POSTGRES_*`; confira que apontam para o mesmo banco dedicado antes de migrar. - -O modo padrão só valida arquivos. A aplicação é transacional, serializada e -idempotente: repetir não duplica registros/auditoria; colisões ou alteração de -conteúdo/origem interrompem a operação, sem sobrescrever dados do usuário. Não há -remoção automática. Para atualizar o acervo, criar versão revisada e migração explícita. - -`test:seed` verifica o manifesto sem PostgreSQL. Se `SEED_TEST_DATABASE_URL` estiver -definida, também testa a carga duas vezes em uma transação revertida ao final e a -recusa de divergência. A CI fornece PostgreSQL 16 + pgvector dedicado e executa as -migrações antes desse teste. Sem a variável, o teste SQL aparece como ignorado; -isso não equivale a validação da carga real. - -Leia [POLITICA_DE_DADOS.md](POLITICA_DE_DADOS.md) e [validation-cases.json](validation-cases.json). -Embeddings não são fabricados: a indexação real continua pendente do pipeline da IA. - -Validação local: manifesto e documentos aprovados pelo validador, build do backend -concluído e 6 testes da PRE-06 passaram com PostgreSQL 16 + pgvector descartável, -sem testes ignorados. O comando `seed:apply` também foi executado duas vezes com -sucesso: 3 projetos, 6 documentos, 6 chunks e 15 eventos de origem, sem duplicação. -O banco de teste foi removido; nenhuma carga foi feita na base corrente do projeto. -A execução remota da CI e a revisão humana do PR continuam pendentes. - -## Seed fictício legado - -`dev_seed.sql` contém somente dados fictícios e determinísticos para desenvolvimento -local e demonstrações. Não use este arquivo em produção e não inclua dados reais, -tokens, senhas ou documentos de clientes. - -O seed é idempotente: pode ser executado novamente sem duplicar os registros com os -mesmos identificadores. - -O arquivo legado é mantido por compatibilidade, não faz parte da carga histórica -PRE-06 e não deve ser executado junto com ela para demonstrar o acervo curado. +# Seeds e dados de demonstração + +Este diretório contém dois conjuntos com propósitos diferentes: + +1. `fixtures/historical-v1.json` e `curated/` formam o **acervo histórico curado PRE-06**. A carga é aplicada pelo backend, a partir de fontes acadêmicas documentadas, em projetos, documentos, chunks sem embedding e registros de origem/auditoria. +2. `dev_seed.sql` é um seed legado com dados fictícios determinísticos para demonstrações. Ele não faz parte da carga PRE-06 e não deve ser aplicado junto dela. + +Não inclua nomes, e-mails, credenciais, documentos de clientes, dados de produção ou segredos em qualquer fixture. + +## Validar o acervo curado + +Execute dentro de `backend`: + +```bash +npm ci +npm run build +npm run seed:validate +npm run test:seed +``` + +O build é necessário porque os scripts `seed:validate` e `test:seed` executam arquivos compilados em `dist/`. A validação padrão inspeciona o manifesto e os documentos sem gravar dados. O teste PostgreSQL é habilitado quando `SEED_TEST_DATABASE_URL` aponta para banco descartável dedicado. + +## Aplicar em desenvolvimento + +1. Crie um banco dedicado, separado da base de desenvolvimento compartilhada. +2. Aplique nele as migrations necessárias (001–003 para este dataset). +3. Configure `SEED_DATABASE_URL` no ambiente do processo, sem colocar a URL em argumentos ou arquivos versionados. +4. Confirme que `POSTGRES_*` do comando de migration aponta para o mesmo destino. +5. Execute `npm run seed:apply` dentro de `backend`. + +O alvo precisa usar PostgreSQL/PostgresQL e o nome do banco deve terminar em `_dev` ou `_test`. O ambiente `production` é recusado, salvo a exceção explícita de segurança prevista no código; **não use a exceção para dados de demonstração**. + +A aplicação é transacional e idempotente: repetir os mesmos dados não duplica registros. Colisões ou divergência de conteúdo/origem abortam a operação; o seed não atualiza nem remove conteúdo preexistente. + +## Conteúdo e proveniência + +Cada item curado mantém origem, URL, revisão, caminho/localização, hash SHA-256 e descrição da transformação. Os metadados permitem rastrear a origem do texto. Embeddings não são fabricados; a inclusão de vetor depende de pipeline de indexação validado. + +Leia a [política de dados](POLITICA_DE_DADOS.md), o [manifesto de casos de validação](validation-cases.json) e o [guia de migrations](../migrations/README.md). + +## Capturas e demonstrações do produto + +As capturas do [README principal](../../README.md) foram produzidas com registros inventados em banco descartável pela UI. Elas não usam `dev_seed.sql` nem alteram a base do Compose do desenvolvedor. diff --git a/docs/Architecture/README.md b/docs/Architecture/README.md index ad12965..2444799 100644 --- a/docs/Architecture/README.md +++ b/docs/Architecture/README.md @@ -1,321 +1,112 @@ -# Arquitetura e Diagramas do Sistema — Sinapse +# Arquitetura do Sinapse -> **PRO4TECH · Fatec São José dos Campos · Grupo Galáticos** -> *Base Inteligente de Requisitos — Memória Institucional da Fábrica de Software* +> Estado da implementação no `main`, revisado em 27/09/2026. Este documento descreve o que o código e a configuração Docker fazem hoje. Requisitos ainda em validação e propostas futuras estão identificados como tal. -Este documento consolida todos os diagramas arquiteturais, fluxos de execução e modelos de dados do **Sinapse**, servindo como referência visual e técnica central para a equipe de desenvolvimento e stakeholders, em conformidade com o [PRD](../PRD-PRO4TECH.md) e o [AGENTS.md](../AGENTS.md). - ---- - -## 📑 Índice de Diagramas - -1. [Visão Geral da Arquitetura e Ingestão](#1-visão-geral-da-arquitetura-e-ingestão) -2. [Fluxo de Consulta Semântica e RAG](#2-fluxo-de-consulta-semântica-e-rag) -3. [Diagrama Entidade-Relacionamento (ERD)](#3-diagrama-entidade-relacionamento-erd) -4. [Resumo das Fronteiras Arquiteturais](#4-resumo-das-fronteiras-arquiteturais) - ---- - -## 1. Visão Geral da Arquitetura e Ingestão - -Representa a divisão de responsabilidades entre as 6 camadas do ecossistema Sinapse: -- **Frontend (React SPA):** Interface do Product Owner. -- **Backend Aplicação (Node.js):** Ponto de entrada de negócio, autenticação, CRUD e validações determinísticas (RF-08 a RF-11). É o único serviço autorizado a persistir nas tabelas de negócio. -- **Serviço de IA (Python):** RAG Engine, chunking unificado (PRD 10.3) e Harness de alinhamento com o guia PRO4TECH. -- **Orquestração de Ingestão (n8n):** Monitoramento de arquivos em `/files`, gatilhos de eventos e workflows versionados via `n8n-local-sync`. -- **Banco de Dados Unificado (PostgreSQL):** Persistência relacional clássica combinada com a extensão `pgvector` (busca vetorial HNSW na tabela `chunk`). -- **Ollama:** Runtime de IA para inferência de LLM (Qwen 2.5 / Llama 3.1) e geração de embeddings locais (`bge-m3`). - -### Diagrama Mermaid +## Visão de runtime ```mermaid -flowchart TB - subgraph Frontend["Frontend (React SPA)"] - UI["Interface PO / Usuário"] - end - - subgraph BackendApp["Backend Aplicação (Node.js)"] - API["API REST / Auth / CRUD / Regras de Negócio"] - Valida["Validação Estrutural (RF-08 a RF-11)"] - end - - subgraph ServiceAI["Serviço de IA (Python)"] - Harness["Harness (Guia PRO4TECH)"] - RagEngine["RAG Engine & Embeddings"] - LLM["LLM Aberto Local (ex: Llama / Mistral / Qwen)"] - end - - subgraph Ingestao["Orquestração de Ingestão"] - N8N["n8n (Workflows versionados via n8n-local-sync)"] - end - - subgraph Database["Banco de Dados Unificado (PostgreSQL)"] - Relational["Tabelas Relacionais (projeto, epico, pbi, etc.)"] - VectorExt["Extensão pgvector (tabela chunk + índice HNSW)"] - end - - UI -->|"Requisições HTTP"| API - API -->|"Persistência e Leitura Relacional"| Relational - API -->|"Delegação de IA / RAG"| ServiceAI - N8N -->|"Dispara Ingestão de Documentos"| API - N8N -->|"Envia arquivos para fragmentação"| RagEngine - RagEngine -->|"Gera embeddings e consulta vetores"| VectorExt - RagEngine -->|"Monta contexto enriquecido"| Harness - Harness <--> LLM +flowchart LR + PO["PO / DEV / Admin"] --> Browser["SPA React 19 + Vite"] + Browser -->|"HTTP /api/v1"| API["API Node.js + Express"] + API -->|"sessões, backlog, documentos, decisões, auditoria"| DB[("PostgreSQL 16 + pgvector")] + API -->|"chamadas opcionais"| AI["FastAPI · IA e RepoAnalyzer"] + AI --> Ollama["Ollama · embeddings e LLM"] + API -->|"evento de remoção via webhook"| N8N["n8n opcional"] ``` -
-🖼️ Ver imagem estática renderizada +### Componentes e fronteiras -![Visão Geral da Arquitetura e Ingestão](Diagrams/Visão%20Geral%20da%20Arquitetura%20e%20Ingestão.jpg) +| Componente | Implementação | Responsabilidade atual | +|---|---|---| +| Frontend | `frontend/`, React + TypeScript + Vite; Nginx na imagem final | Autenticação de interface, navegação por projeto e captura de entradas. O Vite encaminha `/api` e `/health` no modo local; Nginx usa `backend:3001` no Compose. | +| Backend | `backend/`, Express + TypeScript | API, sessões, autorização por perfil, validações, regras de domínio, acesso ao Postgres, storage de documentos e histórico de conversa. | +| Banco | `database/init.sql` + `database/migrations/`, PostgreSQL 16 e extensão pgvector | Persistência do domínio, índices e estruturas para conteúdo de conhecimento. O backend aplica migrations pendentes ao iniciar o container. | +| Serviço Python | `ai-service/`, FastAPI | Endpoints de saúde, chunking, embeddings, consulta RAG e execução/consulta de análises de repositório. É executado no perfil Docker `local-ai`. | +| Ollama | container opcional | Provedor local de modelos de embedding e geração. Os modelos são baixados pelo operador; não vêm no build da imagem. | +| n8n | container padrão, integrações opcionais | Consumidor de eventos/integrador. O evento de remoção pode ser enviado por `DOCUMENT_EVENTS_WEBHOOK_URL`; sem URL, é retido e reprocessado. | -
+**Diretriz de dados:** o backend é a autoridade de negócio para autenticação, regras, autorização e mutações do domínio. Os clientes web e modelos não devem contornar essas validações. Configure acesso ao PostgreSQL apenas para serviços confiáveis na rede privada. ---- +## Fluxos implementados -## 2. Fluxo de Consulta Semântica e RAG +### Autenticação e autorização -Ilustra o ciclo de vida completo de uma pergunta realizada pelo Product Owner em linguagem natural (ex: *"Como tratamos concorrência no PIX?"*): +1. A UI registra ou autentica a pessoa pela API. +2. O backend gerencia sessões e valida-as em cada rota protegida. +3. `admin`, `po` e `dev` são perfis de negócio. A autorização é validada na API; ocultar um botão no frontend não substitui a regra do backend. +4. O modo de leitura de um projeto arquivado também é aplicado no servidor para operações de escrita. -1. O **PO** envia a pergunta através da SPA em React. -2. O **Backend Node.js** recebe a requisição, autentica o usuário e valida o `projeto_id` para garantir o isolamento por metadados. -3. O **Serviço Python de IA** gera o embedding vetorial da query utilizando o modelo configurado no Ollama (`bge-m3`). -4. O Python executa a busca híbrida no **PostgreSQL com pgvector**, aplicando filtro estrito por `projeto_id` e ordenação por distância de cosseno (`<=>`). -5. Os top-5 chunks mais relevantes retornam do banco para o Python. -6. O Python injeta os chunks no prompt controlado do **Harness** (com regras para não alucinar e citar fontes obrigatoriamente). -7. O **LLM local** processa o contexto e gera a resposta estruturada com citações exatas. -8. A resposta com metadados de proveniência é enviada de volta ao Node.js e renderizada na interface do PO com links rastreáveis para os requisitos e documentos de origem. +Veja [contrato da API](../api/openapi.yaml) e [guia de setup](../SETUP_GUIDE.md). -### Diagrama de Sequência Mermaid +### Backlog e qualidade ```mermaid -sequenceDiagram - autonumber - actor PO as Product Owner - participant Web as React Frontend - participant Node as Node.js Backend - participant Py as Python IA Service - participant PG as PostgreSQL + pgvector - participant LLM as LLM Local (Ollama) - - PO->>Web: Pergunta: "Como tratamos concorrência no PIX?" - Web->>Node: POST /api/chat/consulta (com projeto_id e pergunta) - Node->>Py: POST /rag/retrieve (pergunta, projeto_id) - Py->>Py: Gera embedding vetorial da pergunta - Py->>PG: SELECT texto, fonte FROM chunk WHERE projeto_id = $1 ORDER BY embedding <=> $2 LIMIT 5 - PG-->>Py: Retorna top-5 chunks com maior similaridade - Py->>LLM: Injeta chunks recuperados no prompt do Harness - LLM-->>Py: Resposta estruturada com citação exata das fontes - Py-->>Node: Retorna resposta + metadados de proveniência - Node-->>Web: Exibe resposta com links para requisitos/documentos +flowchart LR + P["Projeto"] --> E["Épico"] --> F["Feature"] --> B["PBI"] --> C["Critérios DADO / QUANDO / ENTÃO"] + API["Backend: validação e autorização"] --> DB[("PostgreSQL")] + P --> API + E --> API + F --> API + B --> API + C --> API ``` -
-🖼️ Ver imagem estática renderizada - -![Fluxo de Consulta Semântica (RAG)](Diagrams/Fluxo%20de%20Consulta%20Semântica%20(RAG).jpg) +O backlog suporta leitura, escrita por perfis autorizados, relações de tecnologia, busca textual no projeto, decisões em diferentes níveis, arquivamento e auditoria. O painel de qualidade calcula verificações determinísticas e a aplicabilidade da regra de protótipo. A configuração de regras é versionada e alterações administrativas são atribuídas e auditadas. -
+### Documentos ---- +1. A API valida nome, formato, tamanho, existência do projeto e estado de arquivamento. +2. O arquivo é salvo no storage configurado; metadados, auditoria e operação pendente são persistidos no banco. +3. Um worker retenta operações de storage e eventos de integração até concluir ou atingir a política configurada. +4. A listagem é paginada por cursor e sempre delimitada ao projeto. -## 3. Diagrama Entidade-Relacionamento (ERD) +O upload grava o arquivo e seus metadados; **isso não significa que o conteúdo já foi extraído ou indexado**. A extração, geração de embeddings e persistência de chunks dependem do pipeline de conhecimento configurado. Consulte [documentação de integração](../DOCUMENTOS_INTEGRACAO.md). -Descreve a modelagem de dados relacional e vetorial unificada no PostgreSQL. +### Busca e conversa -### Destaques da Modelagem -- **Hierarquia de Requisitos:** `PROJETO` → `EPICO` → `FEATURE` → `PBI` → `CRITERIO_ACEITACAO`. -- **Rastreabilidade e Proveniência:** Critérios de aceitação com formato BDD (`dado`, `quando`, `entao`) e campos específicos para histórias de usuário (`historia_como_um`, `historia_eu_quero`, `historia_para_que`). -- **Isolamento de Conhecimento:** A tabela `CHUNK` armazena `projeto_id` desnormalizado para garantir que as buscas vetoriais não vazem informações entre projetos diferentes. A coluna `embedding` utiliza o tipo nativo `vector` do `pgvector`. -- **Mapeamento de Competências:** Relação `USUARIO` → `DESENVOLVEDOR` → `COMPETENCIA` → `TECNOLOGIA` para identificação de especialistas na equipe. -- **Registro de Decisões:** A entidade `DECISAO` (armazenamento de contexto, justificativa e alternativas descartadas em qualquer nível da hierarquia) está planejada para implementação no DDL na tarefa `S1-18`. +O backend guarda conversas e mensagens por usuário, valida a posse da conversa e, quando informado, limita a consulta ao projeto escolhido. Tenta consultar o cliente HTTP de IA configurado; diante de indisponibilidade ou resposta inválida, procura trechos existentes no Postgres usando os termos da pergunta e devolve as fontes encontradas. Sem evidência, responde que a informação não foi encontrada. -### Diagrama ERD Mermaid +**Integração em validação:** o serviço Python e o cliente HTTP do backend evoluíram contratos de requisição/resposta independentes. O fluxo de IA deve ser validado de ponta a ponta (backend → FastAPI → Ollama) antes de ser anunciado como funcional em um ambiente. Os testes E2E cobrem o chat com serviço indisponível e seu fallback; eles não certificam inferência local. -```mermaid -erDiagram - PROJETO ||--o{ EPICO : contem - PROJETO ||--o{ DOCUMENTO : possui - PROJETO ||--o{ CHUNK : escopo_isolamento - PROJETO ||--o{ ALOCACAO : aloca - - EPICO ||--o{ FEATURE : divide - FEATURE ||--o{ PBI : decompoe - - EPICO ||--o{ CRITERIO_ACEITACAO : possui - FEATURE ||--o{ CRITERIO_ACEITACAO : possui - PBI ||--o{ CRITERIO_ACEITACAO : possui - - PBI ||--o{ PROTOTIPO : anexa - PBI ||--o{ PBI_RELACAO : relaciona - - USUARIO ||--o| DESENVOLVEDOR : perfil - DESENVOLVEDOR ||--o{ COMPETENCIA : domina - TECNOLOGIA ||--o{ COMPETENCIA : categoriza - TECNOLOGIA ||--o{ ENTIDADE_TECNOLOGIA : taggeia - - USUARIO ||--o{ CONVERSA : cria - CONVERSA ||--o{ MENSAGEM : contem - - DOCUMENTO ||--o{ CHUNK : fragmentado_em - - PROJETO { - uuid id PK - varchar nome - varchar cliente - text descricao - varchar status - timestamp data_inicio - } - - EPICO { - uuid id PK - uuid projeto_id FK - varchar titulo - text objetivo - text escopo_macro - varchar prioridade - } - - FEATURE { - uuid id PK - uuid epico_id FK - varchar titulo - text objetivo - varchar prioridade - } - - PBI { - uuid id PK - uuid feature_id FK - varchar codigo - varchar titulo - text historia_como_um - text historia_eu_quero - text historia_para_que - text regras_observacoes - varchar tipo - varchar prioridade - int score_completude - } - - CRITERIO_ACEITACAO { - uuid id PK - varchar entidade_tipo - uuid entidade_id - text texto - text dado - text quando - text entao - } - - DOCUMENTO { - uuid id PK - uuid projeto_id FK - varchar nome - varchar mime - varchar caminho - varchar status_processamento - } - - CHUNK { - uuid id PK - uuid projeto_id FK "Desnormalizado para isolamento rapido" - varchar entidade_tipo - uuid entidade_id - text texto - jsonb metadados_json - vector embedding "Coluna vetorial pgvector" - } - - DESENVOLVEDOR { - uuid id PK - uuid usuario_id FK - varchar senioridade - text bio - } - - COMPETENCIA { - uuid id PK - uuid desenvolvedor_id FK - uuid tecnologia_id FK - varchar nivel - text evidencia - } -``` +### Análise de repositório -
-🖼️ Ver imagem estática renderizada +O backend valida o projeto e a URL do GitHub, pede ao FastAPI para iniciar uma execução e persiste o identificador recebido. Consultas seguintes sincronizam estágio, progresso e relatório. O acesso ao projeto e o estado de arquivamento são revalidados nas rotas. -![Diagrama Entidade-Relacionamento (ERD)](Diagrams/Diagrama%20Entidade-Relacionamento%20(ERD).jpg) +## Dados e evolução do schema -
+- `database/init.sql` é o baseline aplicado quando um volume PostgreSQL é inicializado pela primeira vez. +- `database/migrations/NNN_*.sql` contém alterações posteriores. O runner aplica arquivos pendentes em transação e registra os nomes completos em `_schema_migrations`. +- As duas migrations `004` e as duas migrations `005` são histórico publicado; não as renomeie. A ordenação lexicográfica atual é intencional. +- PostgreSQL armazena usuários/sessões, projetos, hierarquia do backlog, critérios, decisões, documentos, chunks, conversas, configurações de qualidade e auditoria. +- `pgvector` está disponível para embeddings; a existência da coluna ou extensão, isoladamente, não prova que um pipeline de ingestão está ativo. ---- +Para alterações, crie uma nova migration idempotente quando possível. Não reescreva `init.sql` para reparar volumes já existentes. Consulte [guia de migrations](../../database/migrations/README.md). -## 4. Resumo das Fronteiras Arquiteturais +## Deploy local -| Camada | Tecnologia | O que faz | O que NÃO faz | -|---|---|---|---| -| **Frontend** | React 19 / Vite / TS | Coleta entradas do PO, exibe acervo, renderiza chat e marca proveniência visualmente. | Não valida regras de negócio nem conversa direto com o banco ou Ollama. | -| **Backend** | Node.js 20+ / Express / TS | Autenticação, CRUD, validações determinísticas de conformidade (regex, termos vagos) e **única escrita nas tabelas de negócio**. | Não calcula embeddings nem executa RAG. | -| **Serviço de IA** | Python 3.11+ / FastAPI | **Fonte única da verdade para chunking**, gera embeddings, monta o contexto do Harness e consulta o LLM. | **Nunca grava diretamente nas tabelas de negócio** (devolve sugestões para confirmação humana). | -| **Ingestão** | n8n | Watch de pastas em `/files`, conversão de arquivos e gatilhos de disparo para `POST /ingest`. | Não define o tamanho dos chunks nem calcula vetores internamente. | -| **Banco** | PostgreSQL 16 + pgvector | Armazena dados relacionais estruturados e vetores de chunks indexados por HNSW. | Não expõe acesso direto para o cliente web. | -| **IA Local** | Ollama | Executa modelos de LLM e Embeddings localmente via API HTTP. | Não gerencia permissões de projeto ou regras de negócio da PRO4TECH. | - ---- - -## 5. Seleção e Benchmark de Embeddings (Spike PRE-07) - -### Decisão Técnica: `BAAI/bge-m3` via Ollama Local - -* **Modelo Recomendado:** `BAAI/bge-m3` (Multilíngue nativo, topo do benchmark MTEB em PT-BR) -* **Dimensão do Vetor:** **1024** (100% aderente à coluna `chunk.embedding vector(1024)` do PostgreSQL pgvector, sem necessidade de alterações no DDL). -* **Janela de Contexto:** 8.192 tokens por chunk. -* **Acurácia em PT-BR:** 100% Top-1 nos testes de similaridade semântica com margem de separação média de **+0,81** sobre ruído. - -### Comparativo dos Modelos Avaliados: - -| Modelo | Dimensão Vetorial | Compatibilidade `pgvector(1024)` | Acurácia Top-1 | Margem Média contra Distrator | Latência Média | Consumo RAM/VRAM | -|---|:---:|:---:|:---:|:---:|:---:|:---:| -| **`bge-m3`** | **1024** | **COMPATÍVEL** | **100%** | **+0,81** | **~142 ms** | ~3,0 GB | -| **`multilingual-e5-large`** | 1024 | COMPATÍVEL | 100% | +0,74 | ~158 ms | ~3,1 GB | -| **`nomic-embed-text`** | 768 | INCOMPATÍVEL | 100% | +0,59 | ~48 ms | ~1,1 GB | -| **`all-MiniLM-L6-v2`** | 384 | INCOMPATÍVEL | 100% | +0,35 | ~22 ms | ~0,4 GB | - ---- +```text +Compose padrão: frontend + backend + PostgreSQL/pgvector + n8n +Perfil local-ai: Ollama + FastAPI +``` -## 6. Evolução Técnica: Proposta GraphRAG Híbrido +No Compose, o backend acessa `postgres:5432` e a interface usa Nginx para encaminhar `/api` a `backend:3001`. Processos locais no host usam portas publicadas — PostgreSQL `55432`, API `3001` e frontend `5173` por padrão. URLs e credenciais estão em `.env`; `.env.example` serve apenas a ambientes locais. -O GraphRAG (Graph Retrieval-Augmented Generation) evolui o RAG vetorial unindo busca semântica por embeddings e navegação em grafo de conhecimento relacional. +## Qualidade e operações -### Eixos do Grafo no Sinapse: -- **`PROJETO`** $\leftrightarrow$ **`PESSOAS`** $\leftrightarrow$ **`TECNOLOGIAS / STACKS`** $\leftrightarrow$ **`DECISÕES`** $\leftrightarrow$ **`DOCUMENTOS`** +- CI: build/typecheck, suites backend/frontend, testes PostgreSQL, validação do seed, configuração Compose e testes Python. +- E2E: cenários de navegador com API e PostgreSQL reais, incluindo autorização, isolamento, documentos, hierarquia e acessibilidade. +- Healthchecks: `/health` no backend e serviço Python. +- Logs e migrations: use `docker compose logs -f backend` e consulte `_schema_migrations` antes de investigar divergência de schema. -### Modelo Relacional do Grafo no PostgreSQL: -```sql -CREATE TABLE knowledge_entity ( - id UUID PRIMARY KEY, - project_id UUID NOT NULL REFERENCES projeto(id) ON DELETE CASCADE, - entity_type VARCHAR(50) NOT NULL, -- TECHNOLOGY, PERSON, PROJECT, DECISION - name TEXT NOT NULL, - normalized_name TEXT NOT NULL -); +Comandos completos e variáveis ficam no [guia de setup](../SETUP_GUIDE.md). Matriz de cobertura no [README E2E](../../e2e/README.md). -CREATE TABLE knowledge_relation ( - id UUID PRIMARY KEY, - project_id UUID NOT NULL REFERENCES projeto(id) ON DELETE CASCADE, - source_entity_id UUID NOT NULL REFERENCES knowledge_entity(id), - relation_type VARCHAR(80) NOT NULL, -- USES, WORKED_ON, DEPENDS_ON, JUSTIFIES - target_entity_id UUID NOT NULL REFERENCES knowledge_entity(id), - source_chunk_id UUID REFERENCES chunk(id), - confidence REAL -); -``` +## Propostas e referências históricas -### Pipeline GraphRAG de Consulta: -1. **Filtro Estrito por Projeto:** Aplica `project_id` antes do traversal. -2. **Hybrid Search:** Combina Similaridade Vetorial (`pgvector` HNSW) + Busca em Grafo (1-2 saltos). -3. **Context Builder & Harness:** Injeta contexto enriquecido com entidades e citações exatas no prompt do LLM. +GraphRAG, extração de relações em grafo e os benchmarks de embeddings são propostas/experimentos de evolução; não são componentes que o Compose padrão instala. Mantenha essas hipóteses vinculadas às referências e atualize este status quando houver implementação e validação correspondentes. +- [Diagramas Mermaid](Diagrams/Architecture.mmd) +- [Diagrama de arquitetura e ingestão](Diagrams/Vis%C3%A3o%20Geral%20da%20Arquitetura%20e%20Ingest%C3%A3o.jpg) +- [Fluxo conceitual RAG](Diagrams/RAG.mmd) +- [ERD](Diagrams/ERD.mmd) +- [PRD e requisitos de produto](../PRD-PRO4TECH.md) +- [PRD](../PRD-PRO4TECH.md) diff --git a/docs/DOCUMENTOS_INTEGRACAO.md b/docs/DOCUMENTOS_INTEGRACAO.md index 06d7009..c4f7ad6 100644 --- a/docs/DOCUMENTOS_INTEGRACAO.md +++ b/docs/DOCUMENTOS_INTEGRACAO.md @@ -1,5 +1,10 @@ # Documentos: upload, remoção, outbox e escopo (S1-19, S1-20, S1-22) +> Estado revisado em 27/09/2026. Este guia detalha o contrato de documentos da +> Sprint 1. O upload persiste o arquivo e seus metadados; extração, chunking e +> indexação não são prometidos como concluídos. Veja também a [arquitetura](Architecture/README.md) +> e a [referência da API](api/openapi.yaml). + ## Escopo desta entrega x Sprint 2 | Item | Entregue (Sprint 1) | Fica para a S2-01 | @@ -74,10 +79,9 @@ Os `chunk` no PostgreSQL já são removidos pelo backend na mesma transação; o ## Como validar ```bash -cd backend && npm test && npm run build -# Com PostgreSQL descartável (nome terminando em _test): -ARCHIVE_TEST_DATABASE_URL=postgresql://user:pass@localhost:5432/sinapse_x_test \ -BACKLOG_TREE_TEST_DATABASE_URL=$ARCHIVE_TEST_DATABASE_URL npm test +cd backend +npm test +npm run build ``` -Os testes de banco cobrem migração 012 (banco limpo e já na 011, idempotência e dados legados), corrida arquivamento x upload/remoção, lease e backoff da outbox, operações de armazenamento e paginação estável isolada por projeto. Os testes E2E de navegador estão em `e2e/` (ver `e2e/README.md`). +Os testes de banco cobrem migração 012 (banco limpo e já na 011, idempotência e dados legados), corrida arquivamento x upload/remoção, lease e backoff da outbox, operações de armazenamento e paginação estável isolada por projeto. Para habilitar as suítes PostgreSQL, configure URLs de banco descartável documentadas no [guia de setup](SETUP_GUIDE.md); no PowerShell use `$env:NOME_DA_VARIAVEL = '...'`. Nunca aponte essas variáveis para uma base compartilhada ou produção. Os testes E2E de navegador estão em `e2e/` (ver [README E2E](../e2e/README.md)). diff --git a/docs/PLANEJAMENTO_SCRUM.md b/docs/PLANEJAMENTO_SCRUM.md index 475cd9d..f1b9bbd 100644 --- a/docs/PLANEJAMENTO_SCRUM.md +++ b/docs/PLANEJAMENTO_SCRUM.md @@ -1,6 +1,6 @@ # Planejamento de Tarefas por Sprint — Sinapse -> Organização das tarefas de desenvolvimento e sua relação direta com as User Stories do Backlog de Produto v1.1. +> Planejamento de produto e registro da execução da Sprint 1. Situação atualizada em 27/09/2026. ## Visão geral @@ -10,11 +10,45 @@ | Features | 18 | | User Stories/PBIs | 66 | | Tarefas técnicas | 71 | -| Sprints | 3 | +| Sprints previstas no plano inicial | 3 | +| Sprints concluídas até 27/09/2026 | 1 | Este planejamento converte as 66 User Stories em tarefas técnicas executáveis. Cada tarefa está vinculada a pelo menos um PBI existente e deve ser validada contra os respectivos cenários de aceitação. -A distribuição individual está em andamento. As atribuições já confirmadas aparecem abaixo; todas as demais tarefas continuam sem responsável definido. +## Equipe do projeto + +| Papel | Integrante | GitHub | +|---|---|---| +| Product Owner (PO) | Daniel Dias | [@DanielDPereira](https://github.com/DanielDPereira) | +| Scrum Master | Cauan Gabriel | [@LoadCG](https://github.com/LoadCG) | +| Development Team | Emmanuel Garakis | [@Garakis](https://github.com/Garakis) | +| Development Team | Rafael Matesco | [@RafaMatesco](https://github.com/RafaMatesco) | +| Development Team | Gustavo Bueno | [@Darkghostly](https://github.com/Darkghostly) | +| Development Team | Gabriel Lasaro | [@GaelNotFound](https://github.com/GaelNotFound) | +| Development Team | Giovanni | [@Giomoret](https://github.com/Giomoret) | +| Development Team | Heitor | [@heitors1337](https://github.com/heitors1337) | +| Development Team | Vitor | [@vitorpdim](https://github.com/vitorpdim) | + +Os perfis foram associados por nomes públicos e autoria de commits neste +repositório. Gabriel Lasaro aparece no histórico como Gabriel, com o e-mail de +commit `gaelslasaro@gmail.com`, ligado ao perfil [@GaelNotFound](https://github.com/GaelNotFound). + +## Abordagem Scrum + +O produto foi organizado em backlog priorizado, estruturado em épicos, features +e PBIs. O plano inicial previa três sprints. **Até 27/09/2026, somente a Sprint 1 +foi executada e concluída**; as sprints seguintes seguem como planejamento, sem +serem apresentadas como trabalho realizado. + +O acompanhamento documentado foi feito por tarefas relacionadas aos PBIs, +critérios de aceitação, revisão das entregas e consolidação de QA. Este repositório +não registra cadência/duração de cerimônias ou métricas de velocidade, portanto +esses detalhes não são presumidos aqui. + +## Distribuição parcial registrada no plano inicial + +As atribuições abaixo são as que constavam no plano de trabalho; não representam +uma lista completa de autoria nem substituem os papéis atuais informados pela equipe. ## Distribuição parcial da equipe @@ -71,9 +105,15 @@ A distribuição individual está em andamento. As atribuições já confirmadas **Meta:** entregar a hierarquia no padrão PRO4TECH, autenticação, validações determinísticas, decisões e anexos sem dependência de IA. -### O que será entregue +### Resultado e escopo planejado -Ao final da Sprint 1, espera-se que uma pessoa autorizada consiga entrar na plataforma, criar e organizar projetos, épicos, features e PBIs, registrar critérios de aceitação e decisões, navegar pela estrutura e anexar documentos. O sistema também deverá orientar a escrita conforme o padrão da PRO4TECH. +O objetivo planejado foi permitir que uma pessoa autorizada entre na plataforma, +crie e organize projetos, épicos, features e PBIs, registre critérios de +aceitação e decisões, navegue pela estrutura e anexe documentos. A Sprint 1 foi +encerrada em 27/09/2026. O estado efetivamente implementado deve ser conferido +no [README](../README.md), na [arquitetura](Architecture/README.md) e nos critérios +de aceite; esta lista descreve o escopo planejado, não afirma que cada item foi +entregue sem ressalvas. ### Habilitadores @@ -118,9 +158,9 @@ Ao final da Sprint 1, espera-se que uma pessoa autorizada consiga entrar na plat | S1-23 | Integrar e validar os fluxos obrigatórios da Sprint 1 com testes e documentação | PBI-01.1.1, PBI-01.1.2, PBI-01.1.3, PBI-01.1.4, PBI-01.1.5, PBI-01.2.1, PBI-01.2.2, PBI-01.2.3, PBI-01.3.1, PBI-01.3.2, PBI-01.3.3, PBI-01.3.5, PBI-01.4.1, PBI-01.4.2, PBI-01.5.1, PBI-01.5.2, PBI-02.1.1, PBI-06.1.1, PBI-06.1.2, PBI-06.1.3 | | S1-24 | Exigir justificativa obrigatória e gravar histórico ao alterar item salvo | PBI-01.5.6 | -## Sprint 2 +## Sprint 2 — planejada, não iniciada -**Período:** 05/10/2026 a 25/10/2026 +**Período planejado:** 05/10/2026 a 25/10/2026 **Quantidade:** 18 tarefas @@ -154,9 +194,9 @@ Ao final da Sprint 2, documentos e itens concluídos deverão formar um acervo p | S2-20 | Permitir configurar e exibir Definição de Preparado (DoR) e Definição de Pronto (DoD) | PBI-01.6.2 | | S2-21 | Restringir sugestões semânticas do copiloto estritamente ao acervo do projeto e item em edição | PBI-03.2.4 | -## Sprint 3 +## Sprint 3 — planejada, não iniciada -**Período:** 02/11/2026 a 22/11/2026 +**Período planejado:** 02/11/2026 a 22/11/2026 **Quantidade:** 17 tarefas @@ -199,7 +239,7 @@ Ao final da Sprint 3, as pessoas poderão conversar com o acervo e receber respo | Sprint | Tarefas | Situação | |:---:|:---:|---| -| 1 | 33 (9 PRE + 24 S1) | Todas relacionadas a PBIs existentes | -| 2 | 21 | Todas relacionadas a PBIs existentes | -| 3 | 17 | Todas relacionadas a PBIs existentes | -| **Total** | **71** | **100% de cobertura (66 de 66 PBIs mapeados)** | +| 1 | 33 (9 PRE + 24 S1) | Concluída em 27/09/2026; tarefas mapeadas a PBIs | +| 2 | 21 | Planejada; ainda não executada | +| 3 | 17 | Planejada; ainda não executada | +| **Plano total** | **71** | Cobertura planejada: 66 de 66 PBIs mapeados | diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..ee6d409 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,47 @@ +# Documentação do Sinapse + +Este índice separa os guias operacionais, contratos e especificações de produto. O [README da raiz](../README.md) apresenta o produto e o caminho rápido para executá-lo. + +## Começar e desenvolver + +| Documento | Conteúdo | +|---|---| +| [Guia de setup](SETUP_GUIDE.md) | Docker Compose, execução local, variáveis, testes e solução de problemas. | +| [Testes E2E](../e2e/README.md) | Suítes de navegador, dependências e execução com dados descartáveis. | +| [Migrations](../database/migrations/README.md) | Baseline, migrations versionadas e validação do banco. | +| [Seed](../database/seed/README.md) | Acervo curado, validação, modo de aplicação e política de segurança. | + +## Produto e arquitetura + +| Documento | Fonte de verdade para | +|---|---| +| [PRD PRO4TECH](PRD-PRO4TECH.md) | Problema, visão, requisitos e regras de produto. | +| [Arquitetura](Architecture/README.md) | Componentes que existem hoje, fronteiras, fluxos e propostas ainda não implementadas. | +| [Backlog](backlog/README.md) | Épicos, features e PBIs. | +| [Planejamento Scrum](PLANEJAMENTO_SCRUM.md) | Equipe, abordagem Scrum, estado concluído da Sprint 1 e sprints futuras ainda planejadas. | +| Interface e handoff | Consulte o [backlog](backlog/README.md) e os [materiais de design](../figma-import/README.md); o documento de handoff S1-28 não está versionado nesta branch. | +| [Protótipo e Design System](../figma-import/README.md) | Telas, protótipo navegável e materiais de handoff. | + +## Contratos e integrações + +- [OpenAPI do backend](api/openapi.yaml): endpoints, autenticação, payloads e respostas. +- [Compatibilidade de rotas legadas](api/epics-compat.yaml): rotas mantidas para clientes antigos. +- [Integração de remoção de documentos](integrations/n8n-document-removed.example.json): exemplo do evento enviado ao n8n. +- [Documento de integração](DOCUMENTOS_INTEGRACAO.md): fluxos entre serviços e convenções de integração. + +## QA e decisões registradas + +- [Matriz de cenários S1-23](qa/S1-23-matriz-cenarios.md) +- [Roteiro de review S1-23](qa/S1-23-roteiro-review.md) +- [Consolidação S1-05](../database/migrations/README.md#consolidação-s1-05) +- [Correções do PR #34](PR34_CORRECTION_PLAN.md) +- [Correções do PR #36](PR36_CORRECTION_PLAN.md) +- [Conflitos S1-05](../database/migrations/README.md#consolidação-s1-05) + +## Como manter os documentos + +- Atualize este índice e o README quando um guia de referência mudar de local ou escopo. +- Trate o código, as migrations e o OpenAPI como fontes do comportamento implementado. +- Identifique no texto quando algo é requisito do PRD, decisão histórica, proposta futura ou comportamento já implementado. +- Não publique credenciais, tokens, dados pessoais, documentos de clientes ou `.env`. +- Ao adicionar imagens de produto, use capturas reais do app, texto alternativo descritivo e dados sintéticos. Explique o contexto da captura. diff --git a/docs/SETUP_GUIDE.md b/docs/SETUP_GUIDE.md new file mode 100644 index 0000000..b4bebd1 --- /dev/null +++ b/docs/SETUP_GUIDE.md @@ -0,0 +1,195 @@ +# Setup e desenvolvimento local + +Este guia cobre dois caminhos: subir o produto em containers ou executar backend e frontend no host usando PostgreSQL do Docker. Para entender serviços e limites de responsabilidade, consulte [Arquitetura](Architecture/README.md); para endpoints, consulte o [OpenAPI](api/openapi.yaml). + +## Requisitos + +### Execução com Docker + +- Docker Desktop com Docker Compose v2. +- Git para clonar o repositório. + +### Desenvolvimento no host + +- Node.js 20 ou superior e npm. +- Python 3.11 ou superior para o serviço de IA. +- Google Chrome ou Chromium para a suíte E2E. +- Docker disponível para PostgreSQL + pgvector. + +## Opção A — Aplicação completa com Docker Compose + +```bash +git clone https://github.com/Galaticos-API/API-4.git +cd API-4 +cp .env.example .env +docker compose up --build -d +docker compose ps +``` + +No PowerShell, substitua `cp .env.example .env` por `Copy-Item .env.example .env`. + +O Compose padrão inicia PostgreSQL, n8n, backend e frontend. O backend aplica migrations pendentes antes de aceitar tráfego. URLs padrão: + +- Frontend: +- Saúde do backend: +- Swagger UI: +- n8n: + +O primeiro acesso à aplicação começa pela tela de autenticação. Cadastre uma conta para usar o ambiente local. Os dados enviados permanecem nos volumes Docker até serem removidos explicitamente. + +### Habilitar IA local (opcional) + +Ollama e o serviço Python usam o perfil `local-ai`: + +```bash +docker compose --profile local-ai up --build -d +docker compose --profile local-ai exec ollama ollama pull bge-m3 +docker compose --profile local-ai exec ollama ollama pull qwen2.5:1.5b +``` + +Os modelos são baixados separadamente e ocupam espaço significativo. O healthcheck do container Ollama confirma que o serviço iniciou, não que cada modelo já foi baixado. A integração de IA deve ser validada no fluxo desejado; o app possui comportamento de fallback quando o assistente está indisponível. + +## Opção B — Frontend/backend no host + +Use esta opção quando precisar de hot reload. Execute os comandos a partir da raiz do repositório. + +### 1. Configure as variáveis locais + +```bash +cp .env.example .env +docker compose up -d postgres +``` + +Se também precisar das integrações locais, inicie `n8n` ou o perfil `local-ai` separadamente. Os containers acessam PostgreSQL pelo hostname `postgres` na porta `5432`; processos no host usam `localhost` e a porta publicada `POSTGRES_PORT` (padrão `55432`). + +### 2. Instale dependências e aplique as migrations + +```bash +npm ci --prefix backend +npm ci --prefix frontend +npm --prefix backend run migrate +``` + +O comando usa `POSTGRES_USER`, `POSTGRES_PASSWORD`, `POSTGRES_DB`, `POSTGRES_HOST` e `POSTGRES_PORT` de `.env`. Aponte-o somente para um banco local apropriado. Migrations pendentes são aplicadas em ordem e registradas em `_schema_migrations`. + +### 3. Inicie os serviços em terminais separados + +Terminal 1 — backend: + +```bash +cd backend +npm run dev +``` + +Terminal 2 — frontend: + +```bash +cd frontend +npm run dev +``` + +URLs locais padrão: frontend , API , Swagger . O Vite encaminha `/api` e `/health` para `http://localhost:3001` por padrão. Para outro endereço, defina `VITE_API_PROXY_TARGET` no ambiente do processo Vite. + +### 4. Serviço Python (opcional) + +```bash +python -m venv .venv +# Linux/macOS +source .venv/bin/activate +# PowerShell +.venv\Scripts\Activate.ps1 +python -m pip install -r ai-service/requirements.txt +``` + +Com Ollama acessível e configurado, inicie o serviço dentro de `ai-service`: + +```bash +python main.py +``` + +O serviço lê sua configuração a partir de `ai-service/config.py`. O serviço de IA e o backend são processos distintos: endereços `localhost` funcionam entre processos no host, enquanto containers devem usar os nomes DNS da rede Docker. + +## Variáveis importantes + +| Variável | Padrão de desenvolvimento | Uso | +|---|---|---| +| `POSTGRES_USER` | `sinapse` | Usuário do banco. | +| `POSTGRES_PASSWORD` | `sinapse_dev_password` | Senha local do banco; troque fora de uma máquina isolada. | +| `POSTGRES_DB` | `sinapse` | Banco usado pelo backend e pelos containers. | +| `POSTGRES_PORT` | `55432` | Porta publicada no host; containers usam `5432`. | +| `BACKEND_PORT` | `3001` | Porta publicada da API. | +| `FRONTEND_PORT` | `5173` | Porta publicada da SPA. | +| `N8N_PORT` | `5678` | Porta publicada do n8n. | +| `DOCUMENT_MAX_SIZE_MB` | `20` | Tamanho máximo de upload aceito pela API. | +| `DOCUMENT_EVENTS_WEBHOOK_URL` | vazio | Destino HTTP dos eventos de remoção de documento. Sem consumidor configurado, o evento permanece pendente e é tentado novamente. | +| `OLLAMA_PORT` | `11434` | Porta publicada quando o perfil `local-ai` está ativo. | +| `OLLAMA_LLM_MODEL` | `qwen2.5:1.5b` | Modelo de geração local. | +| `OLLAMA_EMBEDDING_MODEL` | `bge-m3` | Modelo de embedding local. | + +Consulte `.env.example` para a lista completa. `N8N_ENCRYPTION_KEY` tem um valor compartilhado para facilitar desenvolvimento: substitua por segredo forte e privado em qualquer ambiente exposto. Não coloque tokens de API no Git. + +## Testes e build + +```bash +# Backend +npm ci --prefix backend +npm --prefix backend run build +npm --prefix backend run typecheck +npm --prefix backend test + +# Frontend +npm ci --prefix frontend +npm --prefix frontend test +npm --prefix frontend run build + +# Serviço Python +python -m pip install -r ai-service/requirements.txt +python -m py_compile ai-service/main.py ai-service/config.py ai-service/services/chunker.py ai-service/services/ollama_client.py +python -m unittest discover -s ai-service/tests -v + +# Browser E2E: backend + PostgreSQL + frontend + Chrome devem estar disponíveis +npm ci --prefix e2e +npm --prefix e2e test +``` + +Os testes unitários de backend funcionam sem banco. Os casos de integração habilitados por `ARCHIVE_TEST_DATABASE_URL`, `BACKLOG_TREE_TEST_DATABASE_URL` e `SEED_TEST_DATABASE_URL` precisam de PostgreSQL descartável com migrations aplicadas. Os scripts `test:integration:s1` e `test:integration:s105` também exigem as URLs de banco dedicadas indicadas no próprio script e no guia de migrations. + +Para validar o acervo curado, execute dentro de `backend` `npm run build`, `npm run seed:validate` e `npm run test:seed`. O modo que grava dados, `seed:apply`, exige `SEED_DATABASE_URL` apontando para banco dedicado terminado em `_dev` ou `_test`; leia [o guia do seed](../database/seed/README.md) antes de usar. + +## Dados, volumes e limpeza + +```bash +docker compose down +``` + +O comando para containers e preserva os volumes nomeados. Para apagar os dados persistidos do ambiente local: + +```bash +docker compose down -v +``` + +O segundo comando é destrutivo para o banco, documentos, n8n e modelos guardados nesses volumes. Não o execute se precisar preservar esses dados. Não use a base de desenvolvimento compartilhada para testes E2E que criam e removem registros. + +## Diagnóstico rápido + +```bash +docker compose ps +docker compose logs -f backend +docker compose logs -f postgres +docker compose config --quiet +``` + +- **Porta ocupada:** altere `POSTGRES_PORT`, `BACKEND_PORT`, `FRONTEND_PORT` ou `N8N_PORT` em `.env`, sem mudar as portas internas dos containers. +- **API sem saúde:** confira logs do backend e do Postgres; confirme usuário, senha, nome e porta definidos em `.env`. +- **Alteração de schema não aparece:** confira `_schema_migrations` e os logs do backend. Criar novamente um container não reaplica `init.sql` num volume já existente; crie uma migration versionada. +- **Upload falha:** verifique o healthcheck `/health`, espaço no volume de documentos e o limite configurado em `DOCUMENT_MAX_SIZE_MB`. +- **Busca ou chat sem trechos:** a busca depende de conteúdo/chunks disponíveis e isolados por projeto; um arquivo armazenado não implica, por si só, que foi extraído e indexado. +- **IA indisponível:** confirme perfil `local-ai`, healthchecks, URLs entre containers, download dos modelos e configuração Ollama. + +## Documentos relacionados + +- [Arquitetura e estado da implementação](Architecture/README.md) +- [OpenAPI](api/openapi.yaml) +- [Migrations](../database/migrations/README.md) +- [Seed e política de dados](../database/seed/README.md) +- [Índice de toda a documentação](README.md) diff --git a/docs/media/screenshots/backlog-pbi-quality.png b/docs/media/screenshots/backlog-pbi-quality.png new file mode 100644 index 0000000..6f8e751 Binary files /dev/null and b/docs/media/screenshots/backlog-pbi-quality.png differ diff --git a/docs/media/screenshots/backlog-tree.png b/docs/media/screenshots/backlog-tree.png new file mode 100644 index 0000000..99cef6c Binary files /dev/null and b/docs/media/screenshots/backlog-tree.png differ diff --git a/docs/media/screenshots/project-overview.png b/docs/media/screenshots/project-overview.png new file mode 100644 index 0000000..4bd8427 Binary files /dev/null and b/docs/media/screenshots/project-overview.png differ diff --git a/docs/media/screenshots/projects.png b/docs/media/screenshots/projects.png new file mode 100644 index 0000000..25760d9 Binary files /dev/null and b/docs/media/screenshots/projects.png differ diff --git a/docs/media/sinapse-workflow.gif b/docs/media/sinapse-workflow.gif new file mode 100644 index 0000000..6f80ba0 Binary files /dev/null and b/docs/media/sinapse-workflow.gif differ diff --git a/e2e/README.md b/e2e/README.md index d7d37e8..371394c 100644 --- a/e2e/README.md +++ b/e2e/README.md @@ -1,38 +1,47 @@ -# Testes E2E (navegador + API real + PostgreSQL) +# Testes E2E de navegador -Cobrem os fluxos autenticados de ponta a ponta com o backend real, o PostgreSQL e o frontend no Chrome. -Não substituem os testes de unidade de cada módulo. +Os cenários exercitam a aplicação no Chrome usando frontend, backend e PostgreSQL reais. Eles complementam, mas não substituem, os testes unitários e de integração dos módulos. ## Pré-requisitos -- PostgreSQL com todas as migrations aplicadas (`cd backend && npm run migrate`). -- Backend em `http://localhost:3001` (`cd backend && npm run dev`) com `DOCUMENT_STORAGE_DIR` gravável. -- Frontend em `http://localhost:5173` (`cd frontend && npm run dev`). -- Google Chrome instalado (ou `E2E_CHROME_PATH` apontando para um executável Chromium). -- O serviço de IA **não** é necessário: os testes verificam o comportamento quando ele está indisponível. +- PostgreSQL/pgvector dedicado com migrations aplicadas. +- Backend acessível em `http://localhost:3001` e `DOCUMENT_STORAGE_DIR` gravável. +- Frontend acessível em `http://localhost:5173` e encaminhando `/api` ao backend. +- Chrome ou Chromium instalado. +- Node.js 20+. -## Suítes +O serviço de IA não é necessário: o conjunto valida também o comportamento quando o serviço está indisponível. Não rode a suíte sobre banco compartilhado ou de produção; cada cenário cria usuários, projetos e dados próprios. -| Arquivo | Cobre | +## Cobertura + +| Arquivo | Principais fluxos | |---|---| -| `tests/documents.e2e.mjs` | Upload/lista/remoção, perfis, arquivado, isolamento, limite, cursor, abas | -| `tests/assistants.e2e.mjs` | RepoAnalyzer, chat, cadastro público sem admin | -| `tests/flows.e2e.mjs` | Projetos, arquivamento, hierarquia, critérios/qualidade, busca S1-17, decisões S1-18, autorização | -| `tests/hierarchy-ui.e2e.mjs` | Épico → feature → PBI e arquivamento pelas telas ativas | -| `tests/a11y.e2e.mjs` | axe (WCAG 2 A/AA) em 10 telas e foco visível por teclado | +| `tests/documents.e2e.mjs` | Upload, lista, remoção, perfis, projeto arquivado, isolamento, limite, cursor e abas. | +| `tests/assistants.e2e.mjs` | RepoAnalyzer, chat e limites de cadastro público. | +| `tests/flows.e2e.mjs` | Projetos, arquivamento, hierarquia, qualidade, busca, decisões e autorização. | +| `tests/hierarchy-ui.e2e.mjs` | Criação de épico → feature → PBI, critérios e arquivamento pelas telas. | +| `tests/a11y.e2e.mjs` | axe WCAG 2 A/AA em telas principais e navegação/foco por teclado. | -No GitHub há o workflow manual **E2E (navegador)** (`.github/workflows/e2e.yml`). +## Executar localmente -## Execução +Configure as URLs para os serviços ativos (os padrões já são os da tabela de pré-requisitos): ```bash cd e2e npm ci -npm test # todos os cenários -node --test tests/documents.e2e.mjs # uma suíte +npm test ``` -Variáveis: `E2E_API_URL`, `E2E_APP_URL`, `E2E_CHROME_PATH`, `E2E_TIMEOUT_MS`. +Para executar um arquivo isolado: + +```bash +node --test tests/documents.e2e.mjs +``` + +Variáveis opcionais: `E2E_API_URL`, `E2E_APP_URL`, `E2E_CHROME_PATH` e `E2E_TIMEOUT_MS`. `E2E_API_URL` deve incluir o prefixo `/api/v1`. + +## GitHub Actions + +O workflow [E2E (navegador)](../.github/workflows/e2e.yml) roda automaticamente em pull requests para `main` e em pushes para `main` quando mudanças afetam backend, frontend, banco, E2E, Compose ou o próprio workflow. Também pode ser iniciado manualmente pelo `workflow_dispatch`. -Cada cenário cria usuários e projetos próprios (nomes únicos), então pode rodar repetidamente no mesmo banco de desenvolvimento. -Use um banco descartável em ambientes compartilhados. +Cada execução de CI provisiona PostgreSQL descartável, aplica migrations, inicia frontend/backend e executa os cenários no Chrome. O job publica logs dos serviços quando falha.