Migrate all docs scattered across hidden folders into docs/: - .compozy/tasks/ → docs/planning/ (PRDs, tech specs, tasks, memory) and docs/adr/ (ADRs by phase) - .specs/ → docs/specs/ (codebase, features, project specs) - .docs/ → docs/legacy/ (legacy reference implementation docs) - .discussions/ → docs/discussions/ (design discussions and open questions) Delete .compozy/, .specs/, .docs/, and .discussions/. Update AGENTS.md: add explicit docs/ location table, hard rule against hidden doc folders, and new AI-assisted development section (context lazy loading, scope control, verification). Update CLAUDE.md: fix .docs/ references to docs/legacy/. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
77 lines
2.4 KiB
Markdown
77 lines
2.4 KiB
Markdown
# Ymir — Convenções
|
|
|
|
## C++ Naming
|
|
|
|
| Elemento | Convenção | Exemplo |
|
|
|----------|-----------|---------|
|
|
| Classes | PascalCase | `RigidBody6DOF`, `NavalForceModel` |
|
|
| Funções/métodos | camelCase | `computeForce()`, `integrate()` |
|
|
| Membros privados | `m_` prefix + camelCase | `m_state`, `m_config` |
|
|
| Constantes | UPPER_SNAKE_CASE | `GRAVITY_ACCELERATION` |
|
|
| Headers | PascalCase + `.h` | `BodyState.h`, `ForceModel.h` |
|
|
| Implementações | PascalCase + `.cpp` | `RigidBody6DOF.cpp` |
|
|
|
|
## C++ Include Paths
|
|
|
|
Prefixo obrigatório matching o contexto:
|
|
```cpp
|
|
#include "ymir/physics/BodyState.h" // não "BodyState.h"
|
|
#include "ymir/common/Types.h"
|
|
#include "ymir/vessel/Thruster.h"
|
|
```
|
|
|
|
## C++ Padrões de Código
|
|
|
|
- C++17 apenas — sem features C++20
|
|
- `std::unique_ptr` / `std::shared_ptr` — sem raw owning pointers
|
|
- Constantes nomeadas — sem magic numbers
|
|
- Sem I/O em `physics/` e `simulation/`
|
|
- `[[nodiscard]]` em funções que retornam valor de erro
|
|
- Doxygen em interfaces públicas
|
|
|
|
## Commits
|
|
|
|
Conventional Commits com scopes definidos:
|
|
```
|
|
feat(physics): add Dormand-Prince RK45 integrator
|
|
fix(vessel): correct thruster force direction
|
|
refactor(simulation): decouple NavalDomain from persistence
|
|
test(world): add wave spectrum validation
|
|
build(core): add Emscripten CMake toolchain
|
|
chore(monorepo): setup pnpm workspaces + Turborepo
|
|
```
|
|
|
|
**Scopes válidos:** `physics`, `world`, `vessel`, `simulation`, `persistence`, `api`, `web`, `types`, `tests`, `build`, `core`, `monorepo`
|
|
|
|
## Testes C++
|
|
|
|
- Framework: Catch2 v3
|
|
- Um arquivo de teste por módulo de força
|
|
- Nomenclatura: `Test{ComponentName}.cpp`
|
|
- Localização: `tests/` espelhando `libs/`
|
|
- Target de cobertura: ≥ 80% de linhas
|
|
|
|
## TypeScript (pós-migração)
|
|
|
|
- `strict: true` em todos os `tsconfig.json`
|
|
- TypeBox schemas como source of truth de tipos
|
|
- `import type` para imports type-only
|
|
- Sem `any` — use `unknown` + narrowing
|
|
- Fastify routes usam `RouteShorthandOptions` com TypeBox schema
|
|
|
|
## Estrutura de Arquivos TypeScript
|
|
|
|
```
|
|
apps/api/src/
|
|
├── routes/ # um arquivo por domínio
|
|
├── services/ # lógica de negócio
|
|
├── db/ # Drizzle schema + migrations
|
|
└── plugins/ # Fastify plugins
|
|
|
|
apps/web/src/
|
|
├── components/ # React components
|
|
├── stores/ # Zustand stores
|
|
├── workers/ # Web Worker scripts
|
|
└── lib/ # utilities, wasm loader
|
|
```
|