docs(audit): C2 is FULLY closed -- the live-edit half was fixed too

Was about to spec a Codex fix for OC_Chunk / BM_Chunk / FChunkBiomeCache,
which three docs still list as open. Checked the sites first. All of them
already carry a layout-version guard:

  CP_Chunk -> CP_Version      OC_Chunk -> OC_Version
  BM_Chunk -> BM_Version      TC_BiomeCache -> TC_SeenVersion

FChunkBiomeCache::Invalidate() exists precisely because the validity box says
nothing about the FBiomeContext its cells were classified against, and all four
thread_local instances call it on a version change. The only other two
instances in the tree (VoxelContentManager ~445, the height-stack test) are
function-local, constructed per task, so staleness is impossible there.

Seventh time in this project a confident premise reversed on reading. It cost
a doc edit instead of a Codex run and a build cycle.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-16 16:11:54 +02:00
parent eb317d9933
commit b426cfcb0d
2 changed files with 31 additions and 3 deletions
+24
View File
@@ -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
+7 -3
View File
@@ -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`.