From ab3da28c34f5d6d4e07b7ed245cdd8dc2974512e Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 29 Jul 2026 08:24:19 +0200 Subject: [PATCH] docs: file #260 - portal-network wedge reproduced live (stuck action gate + LOH leak) First solid reproduction of the Coldeve findings: after sustained walked portal-network use the client wedges - server-round-trip actions (portal use, combat toggle) produce zero outbound send while client-predicted movement still works, and the LOH climbs to 574 MB. Combat toggle x3 with no send is the smoking gun for the one-request-at-a-time use gate latching closed on an unacked UseWithTarget. gcdump captured in the broken state. Supersedes the framing of #256/#257 - both are likely facets. Investigation not started; forbidden workaround (gate timeout) called out explicitly. Co-Authored-By: Claude Fable 5 --- docs/ISSUES.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index cf81dc07..4aa93d64 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -97,6 +97,58 @@ Copy this block when adding a new issue: --- +## #260 — Portal-network wedge: server-round-trip actions die, LOH leaks — REPRODUCED + +**Status:** OPEN — reproduced live, forensics captured, investigation not started +**Severity:** HIGH (renders the client unplayable after sustained portal use) +**Filed:** 2026-07-29 (instrumented Coldeve session, Vulkan backend) +**Component:** interaction/use transaction gate + inbound stream + managed memory +**Supersedes framing of:** #256 (invisible portal-network objects) and #257 +(~1.5 GB working set) — both are almost certainly facets of this. + +**Reproduction (the first solid one):** on Coldeve (`play.coldeve.ac`), character +Barris, after several portal-network runs returning to the town portal network, +the client wedged: **portals unusable, combat mode won't toggle, portals/signs +missing** — while **movement still works**. + +**Evidence captured (`artifacts/coldeve-repro-20260729/`, gitignored, local):** +gcdump taken *in the broken state* (15 MB), full session log with +`[cell-transit]`/`[input]`/`[use-target]`/`equipment` traces, the +`dotnet-counters` CSV, and stderr. + +**Two symptoms, established from the traces:** +1. **The outbound action pipeline is wedged.** `CombatToggleCombat Press` × 3 + produced **zero outbound send** (movement, being client-predicted, still + produces `[cell-transit]`). Signature of the one-request-at-a-time + interaction/use gate (J5.2) latching closed because a `UseWithTarget` never + received its server ack — a burst of `[use-target] … SEND UseWithTarget` + precedes the hang. Every server-round-trip action (portal use, combat mode) + is then silently dropped; local-only actions still work. +2. **A managed leak on the LOH — this one is ours.** `dotnet-counters` at wedge: + **LOH 601,807,472 B (574 MB)**, process WS 3.2 GB — distinct from the flat + ~1.9 GB residency *level* the V11 soak plateaued at (that was benign; this + climbs under live walked play). Fingerprint matches the project's prior LOH + leak class (per-event `float[]`/`byte[]` never released). 185 `equipment: + attached … RightHandCombat` re-attach lines but only 1 CreateObject, so it is + re-attach/replay churn on existing entities, not fresh-object accumulation. + +**Hypothesis (unproven, for the investigation):** a jammed inbound stream could +both starve the ack the use-gate waits on AND accumulate LOH buffers — one root, +two symptoms. Or two bugs. The gcdump names the LOH type by retainer; the log +timeline names the unacked request. Not confirmed either way. + +**Why the scripted gates missed it:** the V11 portal-churn soak used `/teleloc`, +which enters the transit state machine by a different door than a *walked* portal +transit — exactly the gap the walked-play session was designed to probe. + +**Next (investigation, user-approved fix only):** read the gcdump retainer graph +per `reference_memory_leak_toolchain.md`; reconstruct the use-gate timeline from +the log to find the unacked request; determine shared-vs-separate root. Do NOT +patch the symptom (a gate timeout would be the classic forbidden workaround) — +find why the ack never lands. + +--- + ## #259 — Win32 Vulkan surface creation fails machine-wide (`ERROR_UNKNOWN`) **Status:** OPEN — environment fault, not a product defect; recorded so the next