Generate OpenAPI for HTTP and a concise binary/semantic specification for UDP.
Keep raw endpoints and reusable credentials out of browser contracts.
Acceptance criteria
Contract serialization round trips and golden vectors are committed.
Unknown or incompatible versions fail predictably.
Limits are constants/policy, documented, and tested at boundary ±1.
Contracts are address-family aware even if v1 punches IPv4 first.
No canonical game/player/entity identity or gameplay state enters Rendezvous contracts.
The LiteNetLib NAT token remains comfortably below its 256-character ceiling.
An API compatibility test detects accidental breaking changes.
Parent: #1
Depends on: #2, #3
## Outcome
Freeze a transport-neutral v1 contract that both games can consume without importing server internals.
## Scope
- Define strongly typed IDs, game/environment scopes, listing fields, capacity, region, visibility, build/protocol versions, leases, attempts, and typed errors.
- Specify the HTTP surface for register/renew/update/delete, browse/get, join, optional outcome reporting, liveness, and readiness.
- Specify bounded UDP envelopes/handles for host presence, client presence, and mediation correlation.
- Define exact v1 network-protocol compatibility and display-only build-version behavior unless #2 chooses otherwise.
- Define cursor pagination, idempotency, cancellation, unknown-field/version behavior, payload/token/metadata limits, and stable error mapping.
- Generate OpenAPI for HTTP and a concise binary/semantic specification for UDP.
- Keep raw endpoints and reusable credentials out of browser contracts.
## Acceptance criteria
- Contract serialization round trips and golden vectors are committed.
- Unknown or incompatible versions fail predictably.
- Limits are constants/policy, documented, and tested at boundary ±1.
- Contracts are address-family aware even if v1 punches IPv4 first.
- No canonical game/player/entity identity or gameplay state enters Rendezvous contracts.
- The LiteNetLib NAT token remains comfortably below its 256-character ceiling.
- An API compatibility test detects accidental breaking changes.
Starting the v1 contract freeze on top of the completed architecture/bootstrap checkpoints. Scope includes transport-neutral typed contracts, bounded HTTP/UDP semantics, deterministic serialization/golden vectors, OpenAPI, limit boundary tests, and an API compatibility guard.
Starting the v1 contract freeze on top of the completed architecture/bootstrap checkpoints. Scope includes transport-neutral typed contracts, bounded HTTP/UDP semantics, deterministic serialization/golden vectors, OpenAPI, limit boundary tests, and an API compatibility guard.
JSON and UDP golden vectors, boundary ±1 coverage, unknown-version/enum tests, browser privacy assertions, OpenAPI compatibility checks, and a public .NET API snapshot.
Verification:
locked restore passed;
formatter verification passed;
Release solution build passed;
36/36 tests passed;
generated OpenAPI regenerated with no drift;
real server smoke passed for liveness, readiness, runtime OpenAPI, UDP bind, and expected 501 contract stub;
completion and branch audits found no remaining actionable issues.
A high-severity advisory in the generator's transitive Microsoft.OpenApi 2.0.0 was caught by restore; the patched compatible 2.7.5 line is centrally pinned. The issue remains open until this stacked branch is landed.
Implemented and pushed on `codex/issue-4-v1-contracts` at `69c8b2d`.
Delivered:
- strongly typed v1 scopes and opaque IDs, canonical JSON rules, required-field/version semantics, exact gameplay protocol compatibility, and bounded validation helpers;
- complete register/renew/update/delete, browse/get, join-attempt/outcome, health, and host-polling HTTP contract surface;
- generated OpenAPI 3.1 document with CI drift detection;
- bounded, address-family-aware host/client UDP presence codec with stable decode errors and canonical UUID/network byte order;
- HTTP/UDP specifications covering idempotency, cursors, cancellation, unknown fields/versions, error mapping, credential exposure, and limits;
- JSON and UDP golden vectors, boundary ±1 coverage, unknown-version/enum tests, browser privacy assertions, OpenAPI compatibility checks, and a public .NET API snapshot.
Verification:
- locked restore passed;
- formatter verification passed;
- Release solution build passed;
- 36/36 tests passed;
- generated OpenAPI regenerated with no drift;
- real server smoke passed for liveness, readiness, runtime OpenAPI, UDP bind, and expected 501 contract stub;
- completion and branch audits found no remaining actionable issues.
A high-severity advisory in the generator's transitive `Microsoft.OpenApi` 2.0.0 was caught by restore; the patched compatible 2.7.5 line is centrally pinned. The issue remains open until this stacked branch is landed.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent: #1
Depends on: #2, #3
Outcome
Freeze a transport-neutral v1 contract that both games can consume without importing server internals.
Scope
Acceptance criteria
Starting the v1 contract freeze on top of the completed architecture/bootstrap checkpoints. Scope includes transport-neutral typed contracts, bounded HTTP/UDP semantics, deterministic serialization/golden vectors, OpenAPI, limit boundary tests, and an API compatibility guard.
Implemented and pushed on
codex/issue-4-v1-contractsat69c8b2d.Delivered:
Verification:
A high-severity advisory in the generator's transitive
Microsoft.OpenApi2.0.0 was caught by restore; the patched compatible 2.7.5 line is centrally pinned. The issue remains open until this stacked branch is landed.