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>
3.2 KiB
3.2 KiB
Ymir — Arquitetura Atual
Modelo de Bounded Contexts
O projeto usa 6 bounded contexts com dependências enforçadas pelo CMake (link time):
ymir_common ←────────────────────────────────────────────────────
↑ │
ymir_physics ←──────────────────────────────── │
↑ ↑ ↑ │
ymir_simulation ymir_world ymir_vessel │
↑ ↑ ↑ │
ymir_persistence ←─────────────────────────────────────────────────
Contextos e Responsabilidades
| Contexto | Target CMake | Tipo | Responsabilidade |
|---|---|---|---|
common |
ymir_common |
INTERFACE | Math types, Vector6, Matrix6x6, constantes |
physics |
ymir_physics |
STATIC | RigidBody6DOF, 9 módulos de força, integrador ODE |
simulation |
ymir_simulation |
STATIC | Orquestração, NavalDomain, CouplingForceModel |
world |
ymir_world |
STATIC | Wave engine, Environment, CouplingRegistry |
vessel |
ymir_vessel |
STATIC | Thrusters, rudders, controllers, DynamicVessel |
persistence |
ymir_persistence |
STATIC | JSON scenario reader, BodyDefinition |
Módulos de Força (ymir_physics)
9 módulos independentes, todos implementam ForceModel:
ThrustForces,RudderForces,WindForces,CurrentForcesWaveForces(JONSWAP),DampingForces,InertialForcesRestoringForces,SquatForces,TugForces
Integrador ODE
- Implementação atual: CVODE BDF (SUNDIALS) — stiff solver
- Interface abstrata:
IIntegratoremCvodeIntegrator.h - Target pós-migração: Dormand-Prince RK45 — mesma interface, zero dependências externas
Regras Arquiteturais (AGENTS.md)
- Nenhum contexto viola o grafo de dependência — enforçado no link time
- Physics tem zero conhecimento de I/O — sem filesystem, sem network
- C API boundary é a única superfície pública — sem STL/exceções cruzando DLL
- Zero heap allocation no integration loop — buffers pré-alocados
- Sem raw owning pointers — smart pointers ou stack allocation
Apps (stubs)
apps/server/— target CMake INTERFACE, sem implementação (Phase 3 original)apps/fast-time/— target CMake INTERFACE, sem implementação
C API Planejada
include/ está vazio — C API surface prevista mas não implementada. Será o ponto de entrada dos Embind para WASM.
Fluxo de Dados (runtime)
JSON Scenario
│
▼
ScenarioReader (persistence)
│
▼
NavalDomain (simulation)
│ monta
▼
[DynamicVessel, ...] + NavalEnvironment (world)
│
▼
NavalSimulation.step()
│ chama
▼
RigidBody6DOF.integrate() → Integrador ODE
│ acumula
▼
ForceModels[0..n].compute() → Vector6 forces
│
▼
BodyState (posição, velocidade, aceleração)