docs: dat-reader investigation handoff + file #105 (white walls, tripwired)
Records the 2026-06-09 dat-reader thread-safety investigation: concurrent READS on Chorizite.DatReaderWriter 2.1.7 exonerated (source audit + 1.1M-read hammer,b3920d8); the real crash was dispose-during-read at teardown (fixed,8fadf77); the white-walls mechanism remains open as #105 with every silent dat-miss exit tripwired (7433b70) so the next occurrence self-attributes. Also corrects project lore: the A.1-era rule that all dat reads must stay on one thread does not hold for the 2.1.7 read path, and both investigation subagents'' claimed ReadBlock instance-field race does not exist in the shipped source — verify agent claims against source before acting on them. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
b3920d83f6
commit
8dc707d43b
2 changed files with 172 additions and 0 deletions
|
|
@ -44,6 +44,47 @@ Copy this block when adding a new issue:
|
|||
|
||||
---
|
||||
|
||||
## #105 — Intermittent silent dat-load failure: white/missing cottage walls until relaunch
|
||||
|
||||
**Status:** OPEN
|
||||
**Severity:** HIGH
|
||||
**Filed:** 2026-06-09
|
||||
**Component:** render, dat, streaming
|
||||
|
||||
**Description:** Intermittently (twice user-confirmed: once under heavy probe logging
|
||||
2026-06-08, once on a completely clean launch 2026-06-09), the Holtburg cottage wall surfaces
|
||||
render as background/clear color while the cells' static objects (paintings, furniture,
|
||||
windows) draw normally. Once broken, broken for the whole session — the failed result is
|
||||
cached (mesh batches build once, hydration runs once). The failure has never produced a single
|
||||
log line: every dat-read failure on the walls-relevant paths exits silently.
|
||||
|
||||
**Root cause / status:** NOT YET ATTRIBUTED — but heavily narrowed (full evidence:
|
||||
`docs/research/2026-06-09-dat-reader-thread-safety-investigation.md`). Refuted: the dat
|
||||
library's concurrent read path (Chorizite.DatReaderWriter 2.1.7) is exonerated by line-level
|
||||
source audit + the in-tree hammer test (`DatConcurrencyStressTests`, ~1.1M concurrent reads,
|
||||
zero anomalies). Fixed nearby: the teardown dispose-during-read AccessViolation (`8fadf77`).
|
||||
Remaining candidates: a lifecycle/ordering race in our hydration/streaming pipeline, or a
|
||||
GL-side staged-upload / bindless-residency failure under load. Tripwire log lines
|
||||
(`[dat-miss]` / `[tex-miss]` / `[tex-skip]` / `[cell-miss]`, commit `7433b70`) now cover every
|
||||
silent exit; the next occurrence self-attributes in the launch log. Discriminator: magenta
|
||||
walls = TextureCache decode miss; see-through + `[tex-skip]`/`[dat-miss]` = mesh-build miss;
|
||||
see-through + `[cell-miss]` = hydration miss; broken with NO tripwire output = GL-side —
|
||||
instrument `WbMeshAdapter.Tick`'s upload drain next.
|
||||
|
||||
**Files:** `src/AcDream.App/Rendering/Wb/ObjectMeshManager.cs` (texture chains),
|
||||
`src/AcDream.App/Rendering/Wb/DatCollectionAdapter.cs` (`DatDatabaseWrapper.TryGet`),
|
||||
`src/AcDream.App/Rendering/TextureCache.cs` (`DecodeFromDats`),
|
||||
`src/AcDream.App/Rendering/GameWindow.cs` (`BuildInteriorEntitiesForStreaming` hydration).
|
||||
|
||||
**Research:** `docs/research/2026-06-09-dat-reader-thread-safety-investigation.md`.
|
||||
|
||||
**Acceptance:** the next white-wall occurrence is attributed by a tripwire line (or by their
|
||||
collective silence, pointing GL-side); the attributed root cause is fixed; walls survive 10+
|
||||
launches including heavy-load ones. Tripwires can then be stripped (or kept as permanent
|
||||
anomaly logging — decide at close).
|
||||
|
||||
---
|
||||
|
||||
## #104 — Scene VFX particles not clipped to the PView visible cell set
|
||||
|
||||
**Status:** OPEN
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue