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

84 lines
3.2 KiB
Markdown

# 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)
```