Novolis Docs
novolis-governance / imports-todo/fleetcommander-patterns-for-platform.md

FleetCommander — platform patterns (mine, pieces only)

dotnetgovernancenovolis
Status (2026-05-25): WEGO replay shipped as Novolis.Simulation.Replay (+ optional ISimulationEventStore<T> spike). FleetCommander repo should adopt via PackageReference in headless tests. Master plan: platform-import-plan.md.

Source: D:\repos\FleetCommander (also on D:\github\FleetCommander) Verdict: Product — do not import the repo. Extract patterns into novolis-simulation, novolis-transports, novolis-storage, novolis-machinelearning as needed.

What (worth borrowing)

FleetCommander areaTypes / behaviorNovolis target
WEGO simulationRoundPlan → lock → RoundSimulator.Resolve → RoundPackage / GameEvent listNovolis.Simulation.* — deterministic round pipeline
ReplayReplayTimeline, RoundRecord, ReplayScrubber, MessagePack RoundPackageMessagePackNew facet e.g. Novolis.Simulation.Replay
InterpolationInterpolate / InterpolateFromPackage for render scrubSimulation.View or app bridge
TransportFleetCommander.Transport.Abstractions + InProcess Channel + SignalRInspiration for test transport; SignalR stays in apps
ScenariosJSON scenarios under .storage/blob/scenarios/Novolis.Simulation.World.Builders or scenario loader
Headless CLIFleetCommander.Headless play-scenarioDogfood pattern for simulation tests
AIONNX + heuristics; uses Frank.ML.Foundation.Neural NuGetAlready aligned with novolis-machinelearning; keep training in product
RenderingVeldrid + Raylib adaptersSkip — use novolis-rendering + novolis-raylib; FC renderers are product-specific

Why

  • simulation-layer-policy.md lists replay under Simulation; `Novolis.Simulation.Replay` is implemented (WEGO-style timelines; racing still uses ticks).
  • FleetCommander is the most mature deterministic sim + replay + transport Frank product on disk.
  • Full import would violate boundaries (Veldrid, SignalR, Azure storage, game domain in platform).

How

P1 — Replay facet (shipped)

Status: Novolis.Simulation.Replay in novolis-simulation (SimulationTimeline, InMemorySimulationRecorder, ReplayPlayback, SimultaneousPlanBuffer).

Original spike steps:

  1. ~~Spike in novolis-simulation (new project Novolis.Simulation.Replay):~~
  • ISimulationRecorder / ISimulationPlayback with immutable snapshots (BCL + optional MessagePack).
  • Borrow data model from RoundRecord / ReplayTimeline, not FC namespaces or ship/combat types.
  1. Unit tests: record 10 ticks of Novolis.Simulation.Racing or a minimal SimulationWorld → playback equality.
  2. No PackageReference to FleetCommander.

P2 — WEGO planning (only if SCR/WEGO product needs it)

  • PlanBuffer + simultaneous commit phase — generic names in Novolis.Simulation.Abstractions.
  • Document difference vs real-time SimulationClock tick.

P3 — Scenario JSON loader

  • Extract schema style from FC scenario files for dogfood; keep game content in apps.

Skip (duplicates)

FC pieceAlready in Novolis
Raylib rendering projectnovolis-raylib
Neural foundationnovolis-machinelearning
General physicsnovolis-physics
Aspire hostnovolis-aspire (separate)

Acceptance

  • Replay facet documented in library-boundaries.md placement table when implemented.
  • Zero FleetCommander.* references in platform packages.