Files
vinihcrosaandClaude Sonnet 4.6 d495d7b58d docs: consolidate all documentation under docs/ and enforce single-source rule
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>
2026-06-28 01:09:54 -03:00

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, CurrentForces
  • WaveForces (JONSWAP), DampingForces, InertialForces
  • RestoringForces, SquatForces, TugForces

Integrador ODE

  • Implementação atual: CVODE BDF (SUNDIALS) — stiff solver
  • Interface abstrata: IIntegrator em CvodeIntegrator.h
  • Target pós-migração: Dormand-Prince RK45 — mesma interface, zero dependências externas

Regras Arquiteturais (AGENTS.md)

  1. Nenhum contexto viola o grafo de dependência — enforçado no link time
  2. Physics tem zero conhecimento de I/O — sem filesystem, sem network
  3. C API boundary é a única superfície pública — sem STL/exceções cruzando DLL
  4. Zero heap allocation no integration loop — buffers pré-alocados
  5. 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)