diff --git a/AUDIT-2026-07.md b/AUDIT-2026-07.md index 99ae3a1..76bfe6a 100644 --- a/AUDIT-2026-07.md +++ b/AUDIT-2026-07.md @@ -221,6 +221,30 @@ evaluates the second chunk against **the room list baked from the first chunk's (so "which archetype owns this chunk" stays unambiguous), which switches the blend off entirely. The one configuration the tests never build is the default one. +#### ✅✅ SECTION FULLY CLOSED 2026-08-16 — the live-edit half was fixed too. Do not re-open. + +The text above still reads as though `OC_Chunk`, `BM_Chunk` and `FChunkBiomeCache` were open. **They +are not.** Checked site by site on 2026-08-16, while about to spec a fix for them — the premise +reversed on reading, for the seventh time in this project. Every per-chunk cache in the plugin now +carries the layout version: + +| cache | guard | site | +|---|---|---| +| `CP_Chunk` (density params + op stack) | `CP_Version` vs `GetLayoutVersion()` | `VoxelGenerator.cpp` ~613 | +| `OC_Chunk` (`GetSurfaceHeightAt` oracle) | `OC_Version` | ~2626 | +| `BM_Chunk` (`GetBiomeMaterialAt`) | `BM_Version` | ~3470 | +| `TC_BiomeCache` (the `ClassifyTile` grid) | `TC_SeenVersion` | ~2724 | + +`FChunkBiomeCache` gained an explicit `Invalidate()` (`VoxelBiomeTypes.h` ~253) precisely because its +validity box says nothing about the `FBiomeContext` its cells were classified against; **all four** +`thread_local` instances call it on a version change. The only other two instances in the tree — +`VoxelContentManager.cpp` ~445 and the height-stack test — are **function-local**, constructed fresh +per task, so no staleness is possible by construction. + +⇒ Both the determinism half and the live-edit half of C2 are closed. The remaining audit item on +this theme is **C9's library half** (`sinf`/`cosf` are not IEEE-754 specified), which is unrelated +and still open with 0 measured exposure. + #### ✅ FIXED 2026-07-28 (the SDF-cache half) — pending build The params now travel into the key, and the shape of the fix is worth recording because the obvious diff --git a/OPSTACK-HANDOFF.md b/OPSTACK-HANDOFF.md index 6971296..88501c2 100644 --- a/OPSTACK-HANDOFF.md +++ b/OPSTACK-HANDOFF.md @@ -178,9 +178,13 @@ Everything before it is built and green. libm can differ. Currently **0 samples within 1e-6 of the isosurface**, i.e. no measured risk. Run `CrossPlatformDigest` on Linux, compare the SHAPE digest, pin it. The real fix if ever needed is a deterministic in-house sin/cos. -4. **`AUDIT §C2`'s remaining half** — `OC_Chunk`, `BM_Chunk`, `FChunkBiomeCache` are still keyed - without the layout version. That is the live-edit staleness class ("I tweaked the asset and one - patch kept the old shape"), not the determinism class, which is fixed. +4. ~~**`AUDIT §C2`'s remaining half**~~ — **✅ CLOSED, verified 2026-08-16. Do not re-open, and do + not spec a fix for it — I nearly did.** `OC_Chunk`, `BM_Chunk` and `TC_BiomeCache` all carry a + layout-version guard (`OC_Version` / `BM_Version` / `TC_SeenVersion`), `FChunkBiomeCache` has an + explicit `Invalidate()` that all four `thread_local` instances call on a version change, and the + only other two instances in the tree are **function-local**, so they cannot go stale. Recorded in + `AUDIT-2026-07.md §C2`. The live-edit half was fixed at the same time as the determinism half; + only this list was stale. 5. **Phase 3 — ops as data assets.** A design conversation, not a transcription. Don't start it unprompted. What makes it possible is already in place: ops depend on capabilities (`IVoxelBiomeField`), never on `UVoxelGenerator`.