Novolis Docs
novolis-governance / gaming-layer-policy.md

Gaming layer policy

dotnetgovernancenovolis

Operational summary for novolis-gaming. Stack boundaries: library-boundaries.md.

Purpose

novolis-gaming ships game authoring and shipping libraries: pseudonymous identity, menu navigation, multiplayer lobby glue, procedural content tools, Inno Setup helpers. On the closed spine it sits above Simulation and below Avalonia:

Math → Physics → Simulation → Gaming → Avalonia → Apps.

It must stay Avalonia-free. UI hosts live in Novolis.Avalonia.* or apps.

Live agent surfaces (HTTP/SSE/WebSocket/LocalIpc control) live in `novolis-agent` (Novolis.Agent.Core / Novolis.Agent.Surface) — not here.

Repo map

RepoRole
novolis-gamingNovolis.Game.* authoring packages
novolis-commandsIntent/command tooling (parse → envelope → queue)
novolis-agentAgent Surface (Novolis.Agent.Core / .Surface / .Testing)
novolis-installPlatform novolis global tool (GPR package install)
novolis-templatesdotnet new scaffolds (general + MonoGame)
novolis-workflowsShared GitHub Actions workflows for org CI/CD (not product libraries)
novolis-dogfoodingIntegration samples (PackageReference only)

Allowed in novolis-gaming

  • ASP.NET Core + SignalR for game multiplayer and lobby flows in Novolis.Game.Multiplayer.AspNetCore
  • Chat conversation hosting is an orthogonal exception in Novolis.Chat.Hosting.AspNetCore;

it does not belong in Novolis.Game.Multiplayer.AspNetCore

  • Procedural authoring (Novolis.Game.Procedural) — noise, infinite chunks/tracks, spawn tables; BCL only (feeds Simulation.Voxels height samplers at the app layer)
  • Opaque refs (PlayerRef, SessionRef, LobbyId) — no email, legal name, or provider subject strings in public API
  • Same-repo ProjectReference between Novolis.Game.* facets
  • PackageReference to lower spine layers as needed (Novolis.Math.*, Novolis.Physics.*, Novolis.Simulation.*) — e.g. Novolis.Game.Humanoid → Novolis.Simulation.Humanoid
  • PackageReference to Novolis.Testing.*, and third-party NuGet (Identity/Multiplayer as needed)

Forbidden in novolis-gaming

  • Any Avalonia / Avalonia.* or Novolis.Avalonia.* package references (UI belongs in Avalonia layer / apps)
  • Live agent surface hosts / agent.* wire (novolis-agent)
  • Novolis.Raylib.*, Novolis.Rendering.* package references
  • Character cameras, PA-style tile grids, voxel worlds/meshing — keep those APIs in Novolis.Simulation.View / .Tiles / .Voxels (+ .Meshing); Gaming may consume Simulation packages but must not re-own world/camera stacks
  • Simulation ↔ Raylib wiring inside a single package
  • Game domain models (factions, ships, SCR/GalacticSim rules)
  • SignalR or game lobby code in novolis-transports
  • PII persistence in platform packages

PII split

ConcernOwner
Opaque PlayerRef, in-memory display nicknamesNovolis.Game.Identity.*
Steam / email / GDPR / Identity ServerProduct app

Apps implement IExternalIdentityLinker and real auth; platform sees hashed external subjects only.

Application core and player intent

IGameApplication-shaped Start/Tick/Save/Load and game domain rules stay in apps, not in Novolis.Game.*. A future BCL-only Novolis.Game.Intent (player command envelopes) is deferred until multiple apps share a shape — see hexgame-authoritative-core.md.

Related

novolis-workflows is the org's reusable GitHub Actions repo. Backend WorkflowEngine (Cron / Mapping / Messaging) lives in the separate `novolis-workflow-engine` package repo — do not conflate the two.