KB: step-4 closeout -- Steam wire documented, live-test procedure, router
docs/GLASS_COCKPIT.md gains the step-4 ledger (seam/transport/lobby + THE FAKEIP LESSON); NEW context/steam-networking.md topic (+ router row) and docs/STEAM_TEST.md (the 2-machine live procedure = the step-4 exit criterion on user hardware). context/glass-cockpit.md: steps 3+4 status. Final purity re-check: pod build clean, forced-walk mission runs, ZERO glass/steam tags in the pod log. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -133,3 +133,31 @@ menu; menu relaunches CLEAR the handoff — the leak re-armed a marshal in cycle
|
||||
Official Valve zip (provided by Cyd at the repo root), extracted to
|
||||
`extern/steamworks_sdk_164/` and trimmed to `public/` + `redistributable_bin/` + Readme
|
||||
(12.5 MB); zip removed. Consumed only under `-DBT_STEAM=ON`.
|
||||
|
||||
## 2026-07-17/18 — Step 4: the Steam wire — CODE COMPLETE (commits e79e8fa, 48ede2f, f703bb1)
|
||||
|
||||
**4a (e79e8fa) — the wire seam:** file-local `BTNetSend/Recv/Accept/Close` wrappers around the
|
||||
9 raw Winsock sites in `L4NET.CPP`; OFF builds are pure code motion. Regression: 2-node loopback
|
||||
MP through the seam — mesh forms, full 31/31 mission on both nodes.
|
||||
|
||||
**4b (48ede2f) — the transport:** gated TU `L4STEAMNET` — pseudo-SOCKETs (0x5EA0xxxx) behind the
|
||||
seam; the engine's TCP byte stream rides reliable-NoNagle Steam messages re-assembled into
|
||||
per-connection rings (recv semantics preserved: empty→WSAEWOULDBLOCK, closed→0); seam
|
||||
completions: `CheckSocket` (peer = token address), `OpenConnection` TCP_OPEN delegate,
|
||||
`GetMyAddress` self-token. Install on `BT_STEAM_NET=1`; graceful degrade to Winsock at every
|
||||
step. BOTH pumps needed (`SteamAPI_RunCallbacks` + sockets `RunCallbacks`).
|
||||
|
||||
**4c (f703bb1) — the lobby + THE FAKEIP LESSON [T2]:** prior art assumed FakeIP survives the
|
||||
per-mission process relaunch — DISPROVEN live (menu process got 169.254.124.110, the mission
|
||||
process got 169.254.54.234; the pod timed out connecting to its own stale address). Redesign:
|
||||
roster addresses are opaque ipv4-shaped TOKENS (`169.254.77.N`, ports 1501 console / 1502 game)
|
||||
minted by the host at GO and mapped to Steam IDENTITIES; connections ride
|
||||
`ConnectP2P(identity, channel)` (console=0, game=1); the map hands off via env
|
||||
(`BT_FE_MYFAKE`/`BT_FE_STEAMMAP`). `btl4lobby`: ISteamMatchmaking room (`btl4=1` filter),
|
||||
pilots publish name/mech/color, host GO mints tokens + writes `btl4map` + `btl4go`.
|
||||
|
||||
**Verified single-machine (ON/ON, live Steam client):** menu → HOST STEAM LOBBY → room → GO →
|
||||
map `169.254.77.1=<steamID64>` → egg roster carries the token → mission process
|
||||
`[steamnet] up ... 1 roster token(s) incl. self` → pod self-matches → stock console ladder →
|
||||
mission RUNS (46 ticks). 3-config build matrix green throughout. **Remaining (user hardware):**
|
||||
the live 2-account cross-machine session — procedure in `docs/STEAM_TEST.md`.
|
||||
|
||||
Reference in New Issue
Block a user