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>
2.4 KiB
2.4 KiB
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:
#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/esimulation/ [[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/espelhandolibs/ - Target de cobertura: ≥ 80% de linhas
TypeScript (pós-migração)
strict: trueem todos ostsconfig.json- TypeBox schemas como source of truth de tipos
import typepara imports type-only- Sem
any— useunknown+ narrowing - Fastify routes usam
RouteShorthandOptionscom 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