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-gaming**`Novolis.Game.*` authoring packages
**novolis-commands**Intent/command tooling (parse → envelope → queue)
**novolis-agent**Agent Surface (Novolis.Agent.Core / .Surface / .Testing)
**novolis-install**Platform `novolis` global tool (GPR package install)
**novolis-templates**`dotnet new` scaffolds (general + MonoGame)
**novolis-workflows**Shared GitHub Actions workflows for org CI/CD (not product libraries)
**novolis-dogfooding**Integration samples (PackageReference only)

Allowed in `novolis-gaming`

  • ASP.NET Core + SignalR in Novolis.Game.Multiplayer.AspNetCore only
  • 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.HumanoidNovolis.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 nicknames`Novolis.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) imports target a future `novolis-workflow-engine` package repo — do not conflate the two.