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-
999client 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:
- publish or expose the exact immutable
1.0.0packages on the configured Gitea feed and repeat the empty-cache consumer restore; and - 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.