Simulation layer policy (summary)
Policies that keep the org coherent
Operational summary for agents and maintainers. Full boundaries: library-boundaries.md.
Stack (closed)
Math → Physics → SimulationMath facets: Novolis.Math.Arrays, Novolis.Math.Geometry, future Novolis.Math.Topology.
Simulation facets include Novolis.Simulation.Racing (headless racing sim; ML-agnostic). Neural evolution on racing lives in apps, not in novolis-machinelearning.
| Repo | In stack? | Role |
|---|---|---|
| **novolis-math** | Yes | Numbers, geometry, topology — **never time** |
| **novolis-physics** | Yes | Physical evolution with `dt` |
| **novolis-simulation** | Yes | Worlds, systems, clocks, **all cameras**, replay |
| **novolis-raylib** | **No** | Separate graphics host — **no dep on Simulation, Simulation does not dep on Raylib** |
| **Apps** | Compose | Wire stack + Raylib (and product rules) at app layer |
Dependency rule
physics → math
simulation → math, physicsForbidden: Novolis.Raylib.* ↔ Novolis.Simulation.* (either direction). Same for dogfooding/SCR inside platform Simulation packages.
Type rules
- BCL first, always:
System.Numerics.Vector3,Quaternion,Matrix4x4— noVector3d/Novolis.Physics.Numericsduplicates. - No Vector2 in stack; planar XZ =
Vector3withY = 0.
Time rule
| Need | Home |
|---|---|
| No time (static spatial/math) | Math |
| `dt`, integration, forces, motion | Physics |
| Tick order, scenario clock, replay | Simulation |
Cameras
All platform cameras → Simulation.
Apps: product-specific feel (run bobbing, recoil); bridge Simulation observers to Raylib Camera3D — not in either library.
SCR vs platform
StarConflictsRevolt.Server.Simulation = product. Novolis.Simulation.* = platform.
HexGame-aligned loops
Orchestration for HexGame-shaped ticks (commands in → advance authoritative state → snapshots/effects out) lives here and in app application cores — not in Physics. See hexgame-authoritative-core.md.