Files
Rendezvous/docs/architecture/project-boundaries.md
T
KyuubiYoru e626b89909
quality-gate / quality (push) Successful in 58s
build: bootstrap solution and quality gates (#3)
Closes #3
2026-07-16 04:25:54 +02:00

2.1 KiB

Project and dependency boundaries

Tracking: #3

FinalFactory.Rendezvous.Contracts  <-  FinalFactory.Rendezvous.Client
                ^                               ^
                |                               |
FinalFactory.Rendezvous.Server     FinalFactory.Rendezvous.TestClient
  • Contracts targets netstandard2.1 and contains only versioned, transport-neutral IDs and wire contracts. It cannot reference Server, LiteNetLib, or Godot.
  • Client targets netstandard2.1, references Contracts and the pinned LiteNetLib package, and contains no Godot or Server dependency.
  • Server targets .NET 10 LTS, references Contracts and LiteNetLib, and owns HTTP hosting, UDP mediation, application policy, and ephemeral state.
  • TestClient targets .NET 8, references only the public Client/Contracts seams and LiteNetLib, and must never reach into Server internals.
  • Tests target .NET 10 and may reference every project solely to verify public behavior and architecture boundaries.

The dependency-boundary tests inspect compiled assembly references. A forbidden engine, transport, or server dependency therefore fails the normal test gate.

Supported toolchain

  • Build SDK: .NET SDK 10.0.301, pinned by global.json.
  • Server runtime: .NET 10 LTS.
  • Client/contracts compatibility target: .NET Standard 2.1, consumable by the .NET 8-or-later runtime used by current Godot 4 C# projects.
  • TestClient runtime: .NET 8.
  • LiteNetLib: 2.1.4, pinned centrally and restored from the lock files.

The repository uses central package versions, per-project lock files, deterministic compilation, nullable reference types, warnings as errors, current .NET analyzers, and formatting verification. CI restores in locked mode so a package graph change must be deliberate and committed.

Primary compatibility references: