docs(opstack): WARP SHARE measured -- half the blocking is the box; plus two corrections
The instrument landed on its first run. At production defaults, rooms reaching go 0.9 -> 0.4 and tunnels 2.4 -> 1.1 when the warp dilation is set to zero: more than half of all remaining blocking is the query box rather than cave geometry. Hypothesis confirmed, and the number is permanent output now. CORRECTION 1. Last entry I claimed BuildChunkCache's Expansion = CaveWarpStrength + 2 means "the whole plugin bets on |Perlin3D| <= 0.8", and used it to argue 2.0 was needlessly conservative. False. Six lines further down, bNeedRebuild tests WarpedX < CachedSMinX || WarpedX > CachedSMaxX -- the cache REBUILDS when the warped query leaves the box, so that expansion is a rebuild-frequency heuristic and nothing bets on 0.8. The 2.0 -> 1.5 change stands on its own derivation. Sixth premise this refactor that reversed on checking, and I asserted this one in the same entry where I diagnosed the habit. CORRECTION 2 / NEGATIVE RESULT. The obvious next move -- evaluate the warp at the box centre, SHIFT the box, dilate only by the variation across it -- does not pay here, worked out before writing it. A rigorous per-axis Lipschitz bound for this Perlin3D is |dV/dfx| <= 4*1.875 + 1 = 8.5 per unit cell (fade derivative times the spread of GradDot, plus GradDot's own linear term, u and v being distinct axes). The half-box is 0.206 in noise units, so the local variation bound is 1.75 against a GLOBAL range bound of 1.5. The local bound is worse than the global one. Recorded so nobody spends a build rediscovering it. That leaves one route for the warp term: tightening the sup of |Perlin3D| from the proved 1.5 toward its apparent true value ~1.0-1.1, worth ~27% of the dilation. Spot-checking a grid is not a proof, and a sup proved wrong is a tile with no geometry and no collision -- so that is a judgement call about appetite, not a technical unknown. State: T1.d delivered and verified. 11 of 40 tiles (27.5%) proved AllSolid at production defaults, 14641 voxels brute-forced, 0 violations. The dense fixture correctly proves nothing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -3119,3 +3119,80 @@ reported 0 proved of 40", "32 of 34 tiles vs 21 for rooms" — while the live fi
|
|||||||
the geometry really is that dense and the dilation was never the point after the 1.5 fix.
|
the geometry really is that dense and the dilation was never the point after the 1.5 fix.
|
||||||
2. `[production defaults] Box verdicts` — **11 is the number to beat.**
|
2. `[production defaults] Box verdicts` — **11 is the number to beat.**
|
||||||
3. `[dense fixture]` must still be 0.
|
3. `[dense fixture]` must still be 0.
|
||||||
|
|
||||||
|
## 2026-07-29 — WARP SHARE measured: **over half the blocking is my box.** And two corrections.
|
||||||
|
|
||||||
|
The instrument that should have existed from commit one, on its first run:
|
||||||
|
|
||||||
|
```
|
||||||
|
[production defaults] 0.9 of 1.1 rooms reach, 2.4 of 3.3 tunnels reach
|
||||||
|
WARP SHARE: dilated ±15.0 voxels/axis; with dilation ZERO
|
||||||
|
the same tests keep only 0.4 rooms and 1.1 tunnels
|
||||||
|
[dense fixture] 5.0 rooms / 46.3 tunnels → 2.1 / 22.4 with zero dilation
|
||||||
|
```
|
||||||
|
|
||||||
|
**Rooms 0.9 → 0.4, tunnels 2.4 → 1.1.** Better than half of everything still blocking a verdict is
|
||||||
|
caused by the query-box dilation rather than by cave geometry. Hypothesis confirmed, and the number
|
||||||
|
is now permanent output.
|
||||||
|
|
||||||
|
### ✋ CORRECTION — the justification I gave last entry was wrong
|
||||||
|
|
||||||
|
I wrote that `BuildChunkCache`'s `Expansion = CaveWarpStrength + 2` means *"the whole plugin has
|
||||||
|
always bet on `|Perlin3D| ≤ 0.8`"*, and used that to argue 2.0 was needlessly conservative. **That is
|
||||||
|
false, and I should have read six lines further:**
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
const bool bNeedRebuild = … || WarpedX < CachedSMinX || WarpedX > CachedSMaxX || …;
|
||||||
|
```
|
||||||
|
|
||||||
|
The cache **rebuilds when the warped query leaves the box.** So that expansion is a
|
||||||
|
*rebuild-frequency heuristic*, not a correctness bound — nothing anywhere bets on 0.8, and the cache
|
||||||
|
is self-correcting no matter how far the warp reaches. The 2.0 → 1.5 change stands on its own
|
||||||
|
derivation and needs no support from that claim. Sixth premise this refactor that reversed on being
|
||||||
|
checked, and this one I asserted **in the same entry where I diagnosed the habit.**
|
||||||
|
|
||||||
|
### ✋ NEGATIVE RESULT — "shift the box by the local warp" does **not** work here
|
||||||
|
|
||||||
|
The obvious next move is: the warp is smooth and low-frequency (`WF = 0.015`, wavelength ~67 voxels)
|
||||||
|
and the tile is only 10 voxels, so evaluate the warp at the box centre, **shift** the box by it, and
|
||||||
|
dilate only by the *variation* across the box. Worked through before writing it, and it loses:
|
||||||
|
|
||||||
|
A rigorous per-axis Lipschitz bound for this `Perlin3D`:
|
||||||
|
|
||||||
|
```
|
||||||
|
∂V/∂fx = [Σ_c ∂W_c/∂su · G_c]·Fade'(fx) + Σ_c W_c·∂G_c/∂fx
|
||||||
|
|Fade'| ≤ 15/8 = 1.875
|
||||||
|
|Σ ∂W/∂su · G| ≤ 4 (difference of two convex combinations of values in [−2,2])
|
||||||
|
|∂G/∂fx| ≤ 1 (u and v are distinct axes, so at most one of them is x)
|
||||||
|
⇒ |∂V/∂fx| ≤ 4·1.875 + 1 = 8.5 per unit noise cell
|
||||||
|
```
|
||||||
|
|
||||||
|
Half-box in noise units: `WF·5 = 0.075` for x and y, `WF·5/1.35 = 0.056` for z ⇒ 0.206 total.
|
||||||
|
So the local variation bound is `8.5 × 0.206 = 1.75`, against a **global** range bound of **1.5**.
|
||||||
|
|
||||||
|
**The local bound is worse than the global one.** The crude Lipschitz constant times the box's extent
|
||||||
|
in noise space already exceeds the whole range of the function. Recorded so nobody spends a build
|
||||||
|
discovering it — the idea is sound in principle and simply does not pay at `WF = 0.015` with a
|
||||||
|
Lipschitz constant this loose.
|
||||||
|
|
||||||
|
### Where that leaves the warp term
|
||||||
|
|
||||||
|
The measured ceiling for *all* remaining warp work is "about half the current blocking", i.e.
|
||||||
|
somewhere around 11 → 16-20 tiles of 40. The only route left is tightening the sup of `|Perlin3D|`
|
||||||
|
from the proved 1.5 toward its true value:
|
||||||
|
|
||||||
|
```
|
||||||
|
|Perlin| ≤ S_x + S_y + S_z − Σ_c w_c·min(|dx_c|,|dy_c|,|dz_c|)
|
||||||
|
spot values: 1.000 at (0.5,0.5,0.5) · 1.003 at (0.9,0.5,0.5) · 0.614 at (0.9,0.9,0.5)
|
||||||
|
```
|
||||||
|
|
||||||
|
so the true sup looks like **≈ 1.0–1.1**, worth ~27 % off the dilation. But "spot-checked on a grid"
|
||||||
|
is not a proof, and a sup proved wrong here is a tile with no geometry and **no collision**. That is
|
||||||
|
analysis work with real hole-risk for a partial share of a bounded prize — a judgement call about
|
||||||
|
appetite, not a technical unknown, so it goes to Jahni rather than getting done on my own initiative.
|
||||||
|
|
||||||
|
### State: T1.d is delivered and verified
|
||||||
|
|
||||||
|
**11 of 40 tiles (27.5 %) proved AllSolid at production defaults, 14641 voxels brute-forced,
|
||||||
|
0 violations.** The dense fixture correctly proves nothing. Every verdict is checked voxel by voxel,
|
||||||
|
so the risk of the whole feature is bounded by a test that runs on every build.
|
||||||
|
|||||||
Reference in New Issue
Block a user