docs: file #168 (pending-bucket trap) + #169 (cold-spawn streaming hole) as DONE

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 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-07-03 23:43:41 +02:00
parent 9b06a9b831
commit 7c5bc97c74

View file

@ -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)