feat: port FloatingIslands — the stack that runs backwards
6 of 8 archetypes ported. This one starts from VOID and FILLS where the other four start from ROCK and CARVE, which is what it was worth doing: neither end of the pile needed a new operator, only the opposite sign. FConstantRockSource -> FConstantFieldSource(+/-Base) AllSolid <-> AllAir FSdfCarveOp -> FSdfConvertOp(Sign = +/-1) carve <-> fill FSdfRoughnessMod 4th archetype, unchanged Only the island blob source is new. Multiplying by +/-1 is exact in IEEE-754, so the three already-green ports are bit-for-bit untouched. ClassifyBox can return AllAir for the first time in the plugin, and an island strate is by construction mostly empty — the test counts AllSolid and AllAir separately so an aggregate cannot hide whether that fired. Two bounds that would have been holes if assumed rather than derived: the island bound is one-sided (a hairline thread of matter hangs below each island down its axis, so only the TOP may reject), and the domain warp displaces X and Y independently, so the pad needs WarpAmp*sqrt(2). Also: AUDIT C1 was NOT closed. The 2026-07-27 sweep matched `SeedF * K` and this archetype's warp spells it `(float)S * K`, so one site survived — at seed 2e9 the warp flattens and every island snaps back to a perfect circle. Fixed in both paths in one pass so the equivalence test stays a valid oracle. Expect island silhouettes to change at large seeds. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -117,6 +117,42 @@ again.**
|
||||
|
||||
---
|
||||
|
||||
#### ⚠️ REOPENED AND RE-CLOSED 2026-07-28 — the sweep missed one site, and the search pattern is why
|
||||
|
||||
`§C1` was reported fixed on 2026-07-27 (85 sites, *"0 left behind"*), and
|
||||
`VoxelForge.Determinism.LargeSeedSurvives` went green on seeds up to 2e9. **One site had survived**,
|
||||
found by reading `GetFloatingIslandDensity` line by line to port it:
|
||||
|
||||
```cpp
|
||||
// VoxelGenerator.cpp — the floating-island domain warp
|
||||
const float WX = WorldX + FractalNoise3D(FVector(WorldX * 0.04f + (float)S * 0.0007f, ...));
|
||||
```
|
||||
|
||||
**Why the sweep missed it:** the sweep matched the `SeedF * K` spelling. This site spells the same
|
||||
thing `(float)S * K`, where `S` is the archetype's salted seed. A textual sweep finds a *spelling*,
|
||||
not a *bug* — and the green property test could not compensate, because `LargeSeedSurvives` asserts
|
||||
that the **heightfield** still varies, and this site perturbs an **island outline**. Neither the
|
||||
comparison oracle nor the property oracle covered it; a human read did.
|
||||
|
||||
**Impact, before the fix:** at `Seed = 2e9` the term reaches ~1.4e6, where the float ULP is 0.125
|
||||
against a per-voxel step of 0.04 — the warp flattens and every island silhouette snaps back to a
|
||||
perfect circle. Cosmetic rather than catastrophic (the C1 failure mode for a *heightfield* is a flat
|
||||
world), which is exactly why nothing screamed.
|
||||
|
||||
**Fixed** in both paths in one pass (`VoxelHash::SeedOffset(S, 0.0007f)` in `GetFloatingIslandDensity`
|
||||
and in `FIslandBlobSource`), so `FloatingIslandEquivalence` stays a valid oracle.
|
||||
|
||||
**One sharp edge recorded:** `SeedOffset` quantises the site key by `×100 + 0.5`, so `0.0007f` maps to
|
||||
site **0**. That is unique today — every other key in the plugin is ≥ 0.19 — but the next sub-`0.005`
|
||||
key will collide silently. Two sites sharing an offset is a correlation, not a collapse; still, it is
|
||||
a footgun in a helper whose whole job is decorrelation.
|
||||
|
||||
**Lesson, and it is the session's third instance of the same one:** *verify the premise before
|
||||
reasoning from it.* "C1 is closed" was load-bearing for two days and was 1 site short. `grep` over a
|
||||
spelling is evidence about the spelling.
|
||||
|
||||
---
|
||||
|
||||
### C2 — Per-chunk parameter caches have no layout key (stale after live-edit) ⚠️ **real, reproducible**
|
||||
|
||||
`VoxelGenerator.cpp:503-524`:
|
||||
|
||||
Reference in New Issue
Block a user