From 7c5bc97c741e4218658f1b4006051bc098e2fb6b Mon Sep 17 00:00:00 2001 From: Erik Date: Fri, 3 Jul 2026 23:43:41 +0200 Subject: [PATCH] docs: file #168 (pending-bucket trap) + #169 (cold-spawn streaming hole) as DONE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both root-caused live + fixed this session (315af02f, 9b06a9b8). NOT R5 — pre-existing streaming bugs surfaced while visual-gating R5-V2. Co-Authored-By: Claude Fable 5 --- docs/ISSUES.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index c3f3061a..6212ccd4 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -46,6 +46,44 @@ Copy this block when adding a new issue: --- +## #169 — Cold-spawn "hole": world doesn't load / invisible player when spawning far from Holtburg + +**Status:** DONE (`9b06a9b8`, 2026-07-03) — root confirmed live via a landblock-load +probe. **Cause:** the two-tier streamer marks every window landblock "resident" +at bootstrap (`StreamingRegion.MarkResidentFromBootstrap`) BEFORE their async +loads land. A character saved FAR from the startup center (0xA9B4 Holtburg) +triggers a login-spawn `RecenterTo` against that stale, half-loaded window; +`RecenterTo` trusts `_tierResidence`, so the old/new window overlap is never +re-enqueued — a permanent HOLE of resident-but-never-loaded landblocks (zero +`BUILD-NULL`; they're simply skipped). The player spawns in the hole → its +landblock never loads → terrain/NPCs/player never draw ("world loads behind me, +character invisible"). Probe: spawn at 0xADAF, column 0xAD loaded Y=0xA3-0xAA + +0xB0-0xC0 but MISSING Y=0xAB-0xAF; player at 0xADAF (Y=0xAF) dead in the gap. +**Fix:** a far login-spawn moves the render origin like an outdoor teleport +(which already calls `StreamingController.ForceReloadWindow` — drop stale window ++ re-bootstrap fresh at the new origin); the login-spawn recenter now flags that +rebuild (network thread → set flag → render thread consumes it before the Tick). +Verified: 0xADAF now loads (216 entities), full world draws, player recovers. +No-op for a normal Holtburg login. NOT R5 (pre-existing streaming bug). + +## #168 — Invisible player / character disappears (pending-bucket trap) + +**Status:** DONE (`315af02f`, 2026-07-03) — root confirmed live via +`ACDREAM_PROBE_ENT`. **Cause:** a persistent server-spawned entity that spawns +into a not-yet-loaded landblock is parked in `GpuWorldState._pendingByLandblock`. +`RelocateEntity` (per-frame, keeps the player homed to its current landblock so +it draws) scanned ONLY `_loaded`, so it silently no-op'd on a pending entity — +and the player fell through all recovery paths (the AddLandblock drain already +ran empty; the server-object re-hydrate excludes the player; RelocateEntity +couldn't reach pending) → stranded invisible. This is the mechanism behind BOTH +"cold-spawn invisible" AND "character disappears running out of Holtburg far +enough" (both = player parked in pending, never recovered). **Fix:** +`RelocateEntity` now removes the entity from whichever bucket it occupies +(`_loaded` OR `_pendingByLandblock`) then re-appends to its current landblock — +promoting a stranded pending entity to drawn as soon as its landblock loads. +Test: `GpuWorldStateTests.RelocateEntity_StrandedInPending_MovesToLoadedTarget` +(red→green). Composes with #169. NOT R5-V2 (verified read-only re: pos/streaming). + ## #167 — ConstraintManager leash unported (arming + two unknown x87 constants) **Status:** OPEN (deferred, filed 2026-07-03 during R5-V1)