feat: M3 seed — the lumen/1 native protocol: QUIC control plane + reference client (Phase 5)

The first end-to-end run of lumen's own protocol, past the GameStream compatibility layer.

- lumen-core/src/quic.rs (behind the `quic` feature): the lumen/1 handshake — Hello/Welcome/
  Start as length-prefixed LE binary on one QUIC bi-stream. Welcome carries the COMPLETE
  data-plane Config: mode, FEC scheme incl. GF(2^16) Leopard (inexpressible in GameStream),
  shard sizing, AES-GCM key + per-direction salt, data UDP port. Plus quinn endpoint helpers
  (self-signed server; accepts-any client — pinning lands with the trust model) and framed
  async IO. Round-trip unit-tested.
- lumen-host m3-host: serves one lumen/1 session — QUIC handshake, then a NATIVE thread
  (no async on the frame path — design invariant) streams deterministic 64KB test frames
  through the hardened M1 Session over UdpTransport.
- lumen-client-rs: from scaffold to working reference client — connects, negotiates, brings
  up the client Session over UDP, reassembles + FEC-recovers + byte-verifies every frame.

VALIDATED END-TO-END on localhost: 300/300 frames verified, 0 mismatches, through
QUIC-negotiated GF(2^16) FEC + AES-GCM over real UDP sockets. M4 (decode+present) builds on
this exact client skeleton.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-09 23:33:40 +00:00
parent 1eeb35a723
commit de3123038f
10 changed files with 621 additions and 14 deletions
Generated
+6
View File
@@ -1464,7 +1464,10 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
name = "lumen-client-rs"
version = "0.0.1"
dependencies = [
"anyhow",
"lumen-core",
"quinn",
"tokio",
"tracing",
"tracing-subscriber",
]
@@ -1480,7 +1483,9 @@ dependencies = [
"proptest",
"quinn",
"rand 0.9.4",
"rcgen",
"reed-solomon-simd",
"rustls",
"thiserror 2.0.18",
"tokio",
"tracing",
@@ -1509,6 +1514,7 @@ dependencies = [
"mdns-sd",
"opus",
"pipewire",
"quinn",
"rand 0.8.6",
"rcgen",
"reis",