From e6ad29d648aef8fdce25ed04dcb404fbf79e216e Mon Sep 17 00:00:00 2001 From: arcattack Date: Tue, 14 Jul 2026 09:31:21 -0500 Subject: [PATCH] KB: log the console-death replication-freeze open question (task pending recurrence) Co-Authored-By: Claude Fable 5 --- context/open-questions.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/context/open-questions.md b/context/open-questions.md index c89092c..e5e63d2 100644 --- a/context/open-questions.md +++ b/context/open-questions.md @@ -541,6 +541,19 @@ register. ⚠ The audit also flags the damage-economy item as SELF-CONTRADICTOR needs slots 0xf/0x10 promoted to named members when P6 replication work resumes. ## Multiplayer (Phase 7 / P6) +- **OPEN: console death froze peer replication BOTH ways (2026-07-14) [T4 mechanism].** Live 2-node + session: the btconsole.py emulator process died mid-match (cause unknown — its recv loop only + caught socket.timeout; any OSError killed threads silently; NOW hardened + `-u` + console.log) and + peer↔peer update replication froze in BOTH directions at ~that moment (each node's replicant held a + frozen stale velocity; own sims + rendering fine). The engine NEVER logged a console disconnect — + though `CheckBuffers` recv==0 dispatches `HostDisconnectedMessage` and the loop keeps servicing + other hosts — so either the console host's receive pad was full (recv skipped → close never seen) + or the dispatch doesn't reach `HostDisconnectedMessageHandler` in the port (routing gap). ⚠ Also + found (unfired, latent): that handler's ConsoleHostType branch closes **`gameListenerSocket`** (the + GAME listener) where the comment says it re-posts a CONSOLE listen (L4NET.CPP:969) — suspect + `consoleListenerSocket` was intended. Diagnose on recurrence: console.log (death reason) + + whether `[repltrn]` velocities freeze at console death. Why peer replication depends on the + console connection at all is the core unknown. - ✅ Cross-pod COMBAT — DONE (tasks #46/#47: replicant targeting + damage rerouted to the owning master, full cross-pod kill verified). ✅ Replicant GAIT animation — DONE (task #50: replicant derives speedDemand from the replicated velocity, full stand→walk→run lifecycle verified).