Files
Rendezvous/docs/architecture/0002-publisher-trust-and-connection-policy.md
2026-07-16 04:11:24 +02:00

4.4 KiB

ADR 0002: publisher trust, discovery, compatibility, and fallback

  • Status: Accepted
  • Date: 2026-07-16
  • Tracking: #2

Context

Dedicated servers can protect provisioned credentials. Public game binaries cannot. Discovery also needs rules that prevent accidental cross-game joins and make the meaning of a successful authorization precise.

Decision

Publisher trust modes

Each GameId and EnvironmentId is provisioned policy, never caller-created free text. V1 supports two visibly distinct publisher modes:

  1. Managed dedicated host. A provisioned workload principal authenticates with a rotatable credential held outside the game binary. It is scoped to allowed games, environments, regions, and listing limits. Public or unlisted discovery may be enabled by policy.
  2. Player-hosted session. A short-lived publisher grant is minted by a game-owned backend and is scoped to one game, environment, host, and expiry. Rendezvous does not interpret it as player identity. If a game has no grant issuer, it may opt into anonymous unlisted hosting with strict address and concurrency limits; anonymous sessions can be joined only through an opaque share code and never appear in public browsing.

A reusable credential embedded in a downloadable client is not authentication and is rejected as a provisioning design. Responses and metrics expose the publisher trust mode so operators and games can apply different policy without claiming anonymous hosts are authenticated identities.

Discovery and metadata

  • Public listings can appear only in tenant-scoped compatible browsing.
  • Unlisted listings never appear in browse results and require a random, unguessable share code. Unlisted does not mean private; join authorization and host admission still apply.
  • Browser responses contain display data only. They exclude raw endpoints, internal IDs, lease credentials, punch capabilities, and connection tickets.
  • Metadata is treated as hostile data. It is schema/budget validated, stored and returned as data, and never rendered as markup by the SDK or TestClient.

Compatibility and address families

  • NetworkProtocolVersion must match exactly in v1. BuildVersion is bounded display/diagnostic text and never overrides protocol compatibility.
  • GameId and EnvironmentId must match exactly. Region is a browse filter and preference, not a compatibility escape hatch.
  • IPv4 direct connection and NAT punching are required for v1.
  • Contracts carry an address-family discriminator. IPv6 direct connections may use observed global IPv6 endpoints when both peers support them, but IPv6 NAT traversal is not a v1 release requirement.
  • Public candidates are derived only from the authenticated UDP packet's source. For same-LAN attempts, that packet may additionally claim at most one private unicast candidate per supported address family. A local claim is scoped to the capability and is introduced only to the opposite role in the same authorized attempt after both roles contribute. Loopback, link-local, multicast, unspecified, documentation, and otherwise invalid destinations are rejected. The SDK bounds probes per introduced candidate and lets callers disable local candidates. HTTP-supplied endpoint claims are never introduced.

Authorization and fallback

Join authorization means only that Rendezvous permits a scoped connection attempt. It does not reserve a game slot and does not authenticate a player to the game. The host validates and consumes the connection ticket, then applies its own capacity, ban, identity, and gameplay rules.

The SDK returns a typed outcome including success, cancellation, timeout, incompatibility, stale host, service rejection, host rejection, and transport failure. A game may provision an optional dedicated fallback endpoint. The SDK reports it but never connects without an explicit caller decision.

Gameplay relay is not part of v1. It remains a separate future service whose need is evaluated from privacy-safe measured direct-connection failures.

Consequences

  • A player-hosted game needs a game-owned grant issuer for public discovery.
  • Anonymous player hosting is useful for direct invitations but makes no user identity claim and receives the strictest quotas.
  • Games remain responsible for presenting unsafe user-authored text safely.
  • The exact-match v1 rule favors predictable interoperation over flexible version ranges; a later compatibility scheme must be versioned explicitly.