Files
Rendezvous/docs/integration/unscouted-pilot.md
T
KyuubiYoru 6bad659c12
quality-gate / quality (push) Failing after 1m35s
quality-gate / container (push) Has been skipped
docs(integration): record Unscouted pilot evidence (#22)
2026-07-16 21:53:48 +02:00

4.7 KiB

Unscouted consumer pilot

Tracking: Rendezvous #22 and Unscouted #459.

The current checkpoint independently proves that the v1 contracts are not shaped only around SpaceGame. A real Godot Unscouted host and clients consume the same Client and Contracts package surface, use one caller-owned LiteNetLib socket for NAT callbacks and gameplay, perform Unscouted's own keypair authentication and host admission, exchange gameplay, and exercise a game-owned fallback. The public package restore and representative external NAT/CGNAT canary remain required before #22 can close.

Pinned checkpoint

Input Value
Rendezvous configuration source f368fec6eb4344a6042974f58f888cf0f1ac8e8e
Rendezvous package source 07004cd75fe172aa5dfdb3edda22fc280a4c4477
Unscouted implementation 1e5886aa7f1e44689b4c75e32693eb7b19fd72d7
Unscouted evidence f0574a7de82aadff6495ca5657dfc19cf7c2f67c
Client package FinalFactory.Rendezvous.Client 1.0.0
Contracts package FinalFactory.Rendezvous.Contracts 1.0.0
LiteNetLib 2.1.4
Godot 4.7.stable.mono.arch_linux.5b4e0cb0f
Game / environment / region unscouted / smoke / local
Rendezvous and gameplay protocol 1

The exact package hashes are recorded in unscouted.json. A clean restore into an empty package directory using only the consumer's checked-in NuGet.config returns NU1101 for both packages. The verified local run used those exact candidate package files from the existing cache. This proves compatibility, not immutable registry publication.

Game-neutral service boundary

Rendezvous #22 adds provisioning data, not an Unscouted branch in the server or SDK. The local production-shaped tenant permits protocol 1, region local, public managed-dedicated listings, and the three bounded presentation keys mode, world, and mods. The short-lived credential helper accepts only the explicitly provisioned space-game and unscouted scopes and selects a distinct game-scoped signing-key ID and subject.

The consumer rejects any metadata key outside its three-key presentation schema and neutralizes control/BBCode characters before display. Rendezvous never receives Unscouted player keys or resolved identities, colony authority, simulation or persistence state, fog/interest state, or gameplay packets.

Proven real Godot path

The normal NetLaunch argument path recognizes --rendezvous-pilot and opens a dedicated scene. That scene uses Unscouted's real LiteNetLibTransport, GameServer, GameClient, ServerAuthenticator, and ClientAuthenticator. It is not a copied SDK adapter.

One bounded run against the hardened Compose service started a host plus:

  • a protocol-999 client that found no compatible listing;
  • a direct client that received an authorized introduction, completed same-socket traversal, passed Unscouted keypair admission, and exchanged an Unscouted gameplay ping/pong; and
  • a client pointed at a non-listening mediator that received a typed traversal failure, applied the fallback decision in Unscouted code, repeated admission, and exchanged the same gameplay ping/pong through the ordinary game transport.

The direct client also proved that both a space-game join request and a production environment join request return exact NotFound results for the Unscouted listing. The host renewed its lease, admitted two independently authenticated sessions, completed two gameplay exchanges, and deregistered the listing on shutdown.

Verification

  • Rendezvous Debug and Release: 299 tests passed in each configuration, zero failures.
  • Unscouted Debug and Release: non-incremental builds passed; 3,310 tests passed with 15 intentional skips in each configuration.
  • Unscouted gdUnit/Godot: 360 tests passed, zero skipped or failed. The harness fix in Unscouted #461 keeps compilation headless and leaves the open editor's build tree unchanged.
  • The final Godot pilot, ShellCheck, JSON/whitespace checks, formatting gate, and adversarial branch review passed.
  • Export is not applicable because the Unscouted checkout has no export_presets.cfg; both C# configurations and the actual Godot entry point were exercised.

Remaining acceptance gates

Do not mark #22 passed until both external gates have direct evidence:

  1. publish or expose the exact immutable 1.0.0 packages on the configured Gitea feed and repeat the empty-cache consumer restore; and
  2. run the same Godot host/client path across representative residential, CGNAT, and IPv6/multi-host networks, recording the topology and typed direct/fallback outcome.

The loopback run proves the real process, socket, authentication, and gameplay shape. It does not claim production Internet traversal coverage.