diff --git a/docs/ISSUES.md b/docs/ISSUES.md index ad437873..303675f9 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -4077,6 +4077,24 @@ area:** tracked under #112; note the #120 ping-pong fired at exactly A9B3 0103↔010F, so re-check after the #120 fix (`dede7e4`). +**DECODED + LIKELY FIXED BY #120 (2026-06-11 evening):** the user's +logout position pinned the tower (cell 0xAAB30107, AAB3 building[1] +model 0x01001117). Dat truth (`Issue119TowerDumpTests`): the stairs are +ONE static — Setup 0x020003F2, a 43-part spiral staircase at the tower +center (placement frames perfect, all parts drawable); the "extraneous +barrel" = the four 0x020005D8 wall barrels on the landings — legit dat +statics orphaned by the missing staircase. Pipeline exonerated layer by +layer (extraction, hydration ParentCellId=envCellId, per-MeshRef +registration, dispatcher compose); clean WB_DIAG counters at the tower +spawn: meshMissing=0, entSeen==entDrawn. **A screenshot of the running +post-fix build shows the staircase RENDERING.** Mechanism (most +plausible): the tower's three threshold cells portal back to 0x0107 — +climbing the stairs walks the eye through those portal planes, exactly +the #120 ping-pong window; the corrupted/aborted floods broke the +statics' viewcone per frame. The original report predates the #120 fix; +re-gate #2 did not re-check the stairs. **Pending: user verdict on the +tower stairs + barrels in the current build** — if clean, close #119. + --- ## #120 — [pv-ERROR] in-place propagation tripwire: convergence invariant broken at depth 128 (cottage interior cells) @@ -4227,7 +4245,27 @@ selector. ## #125 — GL InvalidOperation during staged texture upload: failed uploads are STICKY (never retried) + uncaught crash in GenerateMipmaps -**Status:** OPEN — HIGH (the likely #119 missing-stairs mechanism + a process crash) +**Status:** ROOT CAUSE FIXED 2026-06-11 (`fcade06`, live-verified) — +remaining: the sticky-drop design debt (below). + +**RESOLVED (root cause):** the GL errors were the gpu_us QUERY RING's own +— a glGenQueries name isn't a query object until first glBeginQuery, and +GetQueryObject on a never-begun name is GL_INVALID_OPERATION. The N.6 +ring assumed ONE Draw/frame with both passes non-empty; the pview +pipeline's many small Draws routinely skip a pass → the slot read queued +an error EVERY frame under ACDREAM_WB_DIAG=1; WB's texture-path +glGetError checks ate the stale errors (the attribution trap) → fake +upload failures + the ProcessDirtyUpdates throw. Fix: begun-flags per +slot; read only begun queries. Live-verified in-tower: 0 [wb-error] +(was 7), no crash, gpu_us reads real values (9–11 µs) for the first +time under pview, meshMissing=0. **Normal runs (WB_DIAG off) never had +these errors — this mechanism is RETIRED for #119.** + +**Remaining debt (keep open under this number):** UploadMeshData removes +the preparation task BEFORE uploading, so any genuinely-failed upload is +never retried — permanently invisible mesh with one [wb-error] line. +The trigger is gone but the design flaw isn't; add retry/re-prepare +semantics in a maintenance pass. **Filed:** 2026-06-11 (in-tower WB_DIAG launch, `tower-wbdiag3.log` — preserved in the worktree root) **Component:** render — WB staged texture pipeline (ObjectMeshManager / ManagedGLTextureArray)