7.2 KiB
7.2 KiB
AGENTS.md — Guia para IAs no projeto VentoApp
Estado atual (jul/2026): 8/8 marcos concluídos, 100% da NBR 6123:2023 coberta. Para histórico e roadmap detalhado, consulte
PROGRESS.md.
⚠️ Leia ANTES de começar
Sempre leia PROGRESS.md primeiro — ele contém:
- Estado exato do projeto
- Lista de tudo que foi entregue
- Roadmap priorizado de melhorias (M9.1, M9.2, ...)
- Convenções estabelecidas
- Onde encontrar cada coisa
Comandos essenciais
cd /root/Apps/windapp/app
npm run dev # vite dev com HMR (porta 5173)
npm run build # tsc -b && vite build (produção)
npm run lint # oxlint (sem correções automáticas)
npm test # vitest run (38 testes, modo único)
npm run test:watch # vitest watch (modo interativo)
Atenção: neste ambiente os binários em
node_modules/.bin/perdem o bit de execução. Se um comando reclamarPermission denied, rodechmod +x node_modules/.bin/<bin>antes.
Validação rápida (rode sempre após mudanças)
./node_modules/.bin/tsc -b # 0 erros esperados
./node_modules/.bin/vitest run # 38/38 esperados
./node_modules/.bin/oxlint # 0 erros esperados
./node_modules/.bin/vite build # ~2s, sem erros
Arquitetura
- Cálculo puro:
src/lib/— funções determinísticas sem dependência de React. Tipos readonly quando possível. - Tabelas da norma:
src/lib/nbr-tables/— todas as 36 tabelas + 3 anexos da NBR 6123:2023. - Modules (Strategy):
src/lib/modules/— padrões de cálculo por tipo de estrutura (cylinder, vault, dome, truss, tower, bridge, dynamics). - Estado global:
src/store/— Zustand. Stores separadas por domínio (vento global, galpão). - UI:
src/pages/+src/components/— sem lógica de cálculo pesada.
Estrutura de pastas (atual)
app/src/
├── lib/
│ ├── wind-kernel.ts Motor matemático
│ ├── bilinear-interp.ts Interpolação bilinear (sec. 3.2)
│ ├── log-interp.ts Interpolação log-linear
│ ├── wind-direction.ts Mudança de rugosidade (sec. 5.5)
│ ├── internal-pressure.ts Cpi (sec. 6.3)
│ ├── neighborhood.ts fᵥ (sec. 6.4)
│ ├── coefficients.ts Cpe paredes/telhados (Tab. 6-12)
│ ├── excentricity.ts ea, eb (sec. 6.1.4)
│ ├── friction.ts Força de atrito (sec. 6.1.5)
│ ├── drag.ts Ca baixa/alta turbulência (Figs 4-5)
│ ├── comfort.ts a_lim ISO 10137
│ ├── storage.ts Persistência IndexedDB
│ ├── theme.tsx Dark/light mode
│ ├── i18n.ts Strings pt-BR/en-US
│ ├── stations-lookup.ts 49 estações Anexo C
│ ├── export-pdf.tsx PDF didático
│ ├── export-csv.ts CSV estruturado
│ ├── modules/ Strategy pattern (7 módulos)
│ ├── nbr-tables/ 36 tabelas + 3 anexos (~30 arquivos)
│ ├── hooks/useProjects.ts Hook React
│ └── __tests__/ Vitest (5 suites, 38 testes)
├── components/
│ ├── ui/ shadcn/ui
│ ├── three/ Cylinder3D, Vault3D, Dome3D
│ ├── Warehouse3D.tsx Galpão com zonas A-J
│ └── ExportMenu.tsx
├── pages/ 10 páginas (rotas)
├── store/ Zustand
└── App.tsx Rotas + ThemeProvider + Layout
Páginas (rotas atuais)
| Rota | Módulo | Tabelas |
|---|---|---|
/ |
HomeMock | — |
/galpao |
Galpão retangular | 6, 7 |
/cilindro |
Silos, chaminés | 13 |
/abobada |
Abóbadas | 15-20 |
/cupula |
Cúpulas | 21, 22 |
/muros |
Muros/placas | 23 |
/cobertura-isolada |
Cob. isoladas | 24, 25 |
/barras |
Barras | 26-28 |
/pontes |
Pontes | 35, 36 |
/dinamica |
Dinâmica + vórtices | 31-34 |
/settings |
Tema + persistência | — |
Convenções (manter!)
- TypeScript estrito: zero
as any, zero// @ts-ignore. Tiposreadonlypara tabelas. - Sem comentários exceto quando a matemática exige explicação.
- Imports absolutos:
@/lib/...,@/components/...,@/store/.... - Componentes: PascalCase em
.tsx, kebab-case em arquivos utilitários.ts. - Tailwind v4 + shadcn/ui: usar
cn()para merges, variantes do shadcn quando disponíveis.
Princípios de cálculo (NÃO QUEBRAR)
- Não inventar constantes. Toda fórmula deve vir da NBR 6123:2023.
- Tabela antes de fórmula. Para S₂, usar a Tabela 3 (interpolação) por fidelidade à norma.
- Limites normativos. Cpi em [-0,9 ; +0,9]. S₂ mínimo em z=5m. z_g como saturação.
- Cpi explícito. Toda pressão é
p = q · (Cpe − Cpi). Nunca omitir Cpi. - Tabela é readonly.
Readonly<Record<...>>previne mutação acidental.
Workflow típico para adicionar funcionalidade
- Identificar a seção/tabela da norma (ver
PROGRESS.mdroadmap). - Criar arquivo em
src/lib/nbr-tables/com dados readonly (se aplicável). - Criar função de lookup (geralmente via
bilinearInterpoulinearInterp1D). - Se aplicável, criar Strategy em
src/lib/modules/. - Criar página em
src/pages/consumindo o módulo. - Atualizar
App.tsxcom a rota. - Adicionar teste em
src/lib/__tests__/. - Validar
npm run buildenpm test.
Como retomar o trabalho
- Ler
PROGRESS.md→ seção "Roadmap priorizado de melhorias" - Escolher um item (ex.: M9.1 — refinar tabelas)
- Implementar seguindo o workflow acima
- Validar com os 4 comandos da seção "Validação rápida"
- Atualizar
PROGRESS.mdmarcando o item como concluído
Roadmap resumido (próximas iterações)
| ID | Item | Esforço | Impacto |
|---|---|---|---|
| M9.1 | Refinar tabelas a partir do PDF real | 3 dias | Alto |
| M9.2 | Cargas lineares (kN/m) por barra | 2 dias | Alto |
| M9.3 | Screenshot 3D no PDF | 1 dia | Médio |
| M9.4 | Export Ftool (.txt) | 2 dias | Médio |
| M9.5 | Refatoração TypeScript (eliminar void) |
1 dia | Baixo |
| M9.6 | 3D para muros/torres/pontes/barras | 3 dias | Médio |
| M9.7 | Import JSON de projetos | 1 dia | Médio |
| M9.8 | i18n completo (en-US) | 2 dias | Baixo |
| M9.9 | Validação contra Blessmann | 2 dias | Alto |
| M9.10 | Dark mode em gráficos SVG | 0.5 dia | Baixo |
| M9.11 | Persistência em servidor (especulativo) | — | — |
| M9.12 | Testes E2E com Playwright | 2 dias | Médio |
Detalhes completos em PROGRESS.md.
Erros comuns
cannot find module '../bilinear-interp'→ caminho errado; arquivos emsrc/lib/nbr-tables/importam de../bilinear-interp, não./.- Build rolldown falha →
npm install @rolldown/binding-linux-x64-gnu. oxlint permission denied→chmod +x node_modules/.bin/oxlint.- CSS variables sumindo → garantir
<ThemeProvider>envolvendo a árvore emApp.tsx. vitestnão roda semvitest.config.ts(já criado).- Binários em
node_modules/.bin/sem permissão →chmod +x node_modules/.bin/<bin>.