docs: Sol investigation -- refutes my boundary-tile hypothesis, corrects my false accusation

Sol High investigated with Luna xHigh sub-agents; two approaches built in
isolated worktrees, main tree untouched.

Two corrections to my own assertions:

1. "One un-ticked neighbouring strate kills boundary tiles" is WRONG.
   UsesOperatorStackForChunk depends only on ChunkCoord.Z, and ClassifyTile's
   earlier Z loop already required the predicate for every sampled cave Z within
   one slot -- so the later XYZ sweep is redundant, not over-strict. Removing it
   unlocks nothing; boundary tiles still fail the one-slot/type/params guards,
   correctly.

2. I falsely wrote that VF-03's fixture citation was fabricated. It exists
   (VoxelForgeTestFixture.h ~134/146, explicit about CP_UseOpStack
   contamination). I had read only the 30-line header and asserted a negative
   from a partial read. Header corrected. VF-03's core claim is now CONFIRMED:
   GetDensityAt keys thread_local CP_* by (ChunkCoord, LayoutVersion) with no
   world identity, and every manager's version starts equal.

Also: the Cave Bail Not Op Stack counter I specced is ambiguous -- it fires
before the different-slot attribution, so it cannot distinguish "flown slot
un-ticked" from "boundary tile met an un-ticked slot first". My 80% reading was
over-confident. Same defect I fixed for TilesSkippedAllSolid, reintroduced one
layer down.

Approach A recommended (explicit opt-in + six-box LRU) over B (code-enforced
cutover): the code does not justify weakening ClassifyTile, and B would delete
the flag, which is the only same-route A/B lever available to prove the
refactor. Narrow A's warning to cave archetypes before adopting.

Nothing built. Worktrees left in place for review.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-16 23:22:06 +02:00
parent 4ba53f2ede
commit 588f9e0294
3 changed files with 227 additions and 1 deletions
+60
View File
@@ -4074,3 +4074,63 @@ So the machinery works; it is mostly not being reached.
`bUseOperatorStack` ticked. This is the second time today that a fact living in `.uasset` data
drove hours of work in the wrong direction — see 2026-08-16 (h). **The counter did in one flight what
six hours of reasoning could not: it named the cause instead of listing candidates.**
## 2026-08-16 (n) — Sol investigation: it refuted MY hypothesis and caught MY false accusation
Sol High ran as investigator with authority to spawn Luna xHigh workers; two approaches implemented
in isolated git worktrees (`../VF-approach-A`, `../VF-approach-B`). Main tree untouched at `4ba53f2`.
Report: `INVESTIGATION-2026-08-SOL.md`.
### ⛔ Two corrections to things I asserted, both found by reading
**1. My "one un-ticked neighbouring strate kills boundary tiles" hypothesis is WRONG.**
`UsesOperatorStackForChunk` depends **only on `ChunkCoord.Z`**. `ClassifyTile`'s earlier Z loop has
already required the predicate for every cave Z it sampled and required all cave samples to be in one
layout slot — within one slot the flag cannot vary with X or Y. **The later XYZ sweep is redundant,
not over-strict.** Removing it would unlock nothing: boundary tiles still fail the independent
one-slot / generator-type / bit-identical-params guards, which is correct and necessary.
**2. I falsely accused the earlier audit of fabricating evidence.** I wrote in the reviewer header
that VF-03's fixture citation did not exist. **It does**`VoxelForgeTestFixture.h` ~134/146
explicitly documents `CP_UseOpStack` contamination between worlds. I had read only the file's 30-line
header comment and asserted a negative from a partial read. Header corrected.
**VF-03's core claim is CONFIRMED, not plausible:** `GetDensityAt` keys its `thread_local CP_*`
state by `(ChunkCoord, LayoutVersion)` with **no generator/world identity**, and every manager's
version starts at the same value, so a second world on the same worker can inherit the first's
params, `CP_UseOpStack` and stack. Its *breadth* (the `OC_*` / `BM_*` / passage / biome / diff
caches) is still unproven and should be one owner-identity task, not assumed from the old row.
### ⚠️ The bail counter I specced is AMBIGUOUS — my 80% reading was over-confident
`Cave Bail Not Op Stack` is incremented by the **first** predicate check, which runs *before* the
different-slot attribution. So a boundary tile that reaches an un-ticked adjacent cave slot is
counted as `NotOpStack` even though mixed content would have rejected it anyway. **The measured
1.42/1.77 therefore does NOT distinguish "the flown slot is un-ticked" from "a boundary tile met an
un-ticked slot first."** Terrain correctness is unaffected; only the diagnosis is. The asset state
still has to be read in the editor. *A counter that can fire for two reasons is the same defect this
project fixed for `TilesSkippedAllSolid` — and I reintroduced it one layer down.*
### The column memo, restated honestly
The one-box port losing 6561 cells per recenter is **verified structurally**. That it *materially
causes* the 1030% in-game band is **unproven**, and the retracted different-route comparison cannot
support it. Same seed, same route, or no claim.
### Two approaches, both built, recommendation A
| | **A — explicit opt-in + six-box LRU** | **B — code-enforced cutover + 4-way associative memo** |
|---|---|---|
| T1.d | init-time warnings naming every disabled slot; human fixes the asset. No silent behaviour change. | ignores the serialized flag; routes all 8 ported archetypes through the stack. |
| memo | ports the reference 6-box spatial LRU (5 boxes stay warm on a miss) | 1024 sets × 4 ways, exact X/Y+key compare, no bulk clear |
| cost | **~0.79 MiB TLS per worker** (vs ~0.13 now) | ~160 KiB TLS per worker |
| risk | per-worker memory multiplication | **destroys the A/B lever** — the flag can no longer select paths in production |
**Sol recommends A**, and I agree with its reason: the code does **not** justify weakening
`ClassifyTile`, and the flag is the only same-route A/B lever we have — B would delete the very
instrument needed to prove the refactor. Caveat to apply before adopting A: its warning currently
enumerates SurfaceWorld slots too, whose exact-lattice T1.d path does not depend on the flag; narrow
or reword that first.
**Neither approach solves VF-03's owner identity, boundary params conservatism, or the memo's
unproven benefit.** Stated plainly by Sol rather than glossed.