Files
vinihcrosaandClaude Sonnet 4.6 9f4639a701 docs: migrate .prds into docs/planning/prds/
Move .prds/ (PRDs, roadmap, module and phase docs) to docs/planning/prds/,
preserving modules/ and phases/ subdirectory structure. Delete .prds/.

Update AGENTS.md documentation table to include docs/planning/prds/ entry.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-28 01:21:03 -03:00

4.1 KiB

PRD — Ymir Simulator

Visão Geral

Ymir é um simulador naval de alta fidelidade, capaz de rodar múltiplas simulações isoladas em paralelo. Expõe uma API via WebSocket + Protobuf para clientes externos controlarem, observarem e visualizarem simulações.

Dois modos de operação, dois apps distintos:

App Modo Clientes Isolamento
apps/server Real-time Manager, Viewer (eventos ao vivo) Thread por simulação
apps/fast-time Batch acelerado Nenhum ao vivo Processo por simulação

Clientes Externos

O Ymir não tem interface visual — é um servidor. Os programas abaixo são externos ao repositório.

Cliente Função
Manager Cria scenarios, carrega e controla simulações, acompanha eventos em real-time
Viewer Renderiza a simulação em 3D, consome todos os eventos de estado

Ambos se conectam ao apps/server via WebSocket + Protobuf. Fast-time não tem clientes ao vivo — resultados são persistidos e consultados depois.


Protocolo de Comunicação

WebSocket + Protobuf (schemas add-only, sem versionamento formal por ora)

  • Binário: eficiente para updates de posição em alta frequência
  • Schemas tipados: contrato claro entre server e clientes C++, C#, Node.js, Python
  • WebSocket: simples de deployar, sem HTTP/2

Persistência

SQLite — embutido, sem dependência externa, suporta queries.

Dado Descrição
Scenarios Configurações de simulação reutilizáveis
Entidades Navios, boias, âncoras, equipamentos e suas configurações
Histórico de simulações Cada step registrado. Escrita em lote se volume for problema.
Logs e performance Dados internos do servidor para debug e análise

Scenario

Configuração completa de uma simulação:

  • Terreno e batimetria inicial
  • Embarcações e configurações iniciais
  • Condições ambientais iniciais
  • Parâmetros de tempo e modo

O server persiste scenarios internamente. Clientes também podem enviar um scenario via API. Um mesmo scenario pode gerar múltiplas runs independentes.


Bounded Contexts

Cada contexto tem seu arquivo de detalhamento em modules/.

Contexto Módulos Arquivo
Física Physics, Hydrodynamics, Mooring, Anchoring modules/physics.md
Mundo World, Environment, Terrain modules/world.md
Embarcação Vessel, VesselState modules/vessel.md
Orquestração Simulation, Events modules/simulation.md
Infraestrutura Server, Persistence, Telemetry modules/infrastructure.md

Estrutura de Pastas

ymir/
│
├── apps/
│   ├── server/              # Real-time: WebSocket, Protobuf, API handlers
│   └── fast-time/           # Batch: submissão de scenarios, paralelismo por processo
│
├── libs/
│   ├── physics/             # [Física] Physics, Hydrodynamics, Mooring, Anchoring
│   ├── world/               # [Mundo] World, Environment, Terrain
│   ├── vessel/              # [Embarcação] Vessel, VesselState
│   ├── simulation/          # [Orquestração] Simulation, Events
│   ├── persistence/         # [Infraestrutura] SQLite, repositórios
│   └── common/              # Tipos compartilhados: vetores, unidades, interfaces base
│
├── services/                # Reservado — processos auxiliares futuros se necessário
│
├── tests/
│
└── docs/

Prioridade de Desenvolvimento

Fase Escopo
1 libs/physics — corpos rígidos, integração de movimento, forças, torques
2 apps/server — WebSocket + Protobuf, controle básico de simulação
3 libs/world/environment — vento, ondas, correntes, condições ambientais
4 Colisões e interações entre corpos
5 Hydrodynamics, Mooring, Anchoring
6 libs/persistence, apps/fast-time, Telemetry