FI geometry v3 drops the all-XY lower boundary seal that created false floors (3.5/8 m); the ceiling comes from the shared VF_ApplyUpperBoundarySeal and AppendStratumBoundaryCeilings path for every generator, at each strate's own configured upper boundary (owner: every strate has a ceiling). Far-LOD ceiling continuity: 0 gaps at LOD4-8. SurfaceWorld bit-identical to L14 (14 configs + 24 m crossing); FI deterministic (28-row matrix); route parity and proofs pass. Unreal: FI geometryVersion 2->3 and the shared upper-seal helper extracted (UBT compile needed on the owner PC). Open: small ceiling holes; lower-stratum LOD ring steps seen through the FI void. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
14 KiB
Linux18 — FloatingIslands stratum boundaries
Result: FloatingIslands geometry v3 removes its false lower all-XY seal, keeps the ceiling from the shared upper-boundary seal, and projects missing ceiling cells for every generator. SurfaceWorld hashes match the approved L14 baseline at 8704129 in every checked configuration.
Scale in the Unreal route
AVoxelWorld::CoreVoxelSizeCm defaults to 25 cm, and GetActiveVoxelSizeCm() resolves the runtime value (VoxelWorld.h:300, VoxelWorld.cpp:7495). The adapter writes the resolved size to the snapshot (VoxelForgeCoreAdapter.cpp:1019); AVoxelWorld imports it with ResolvedWorldSnapshot::FromJson (VoxelWorld.cpp:7597, VoxelForgeCore.cpp:916). S1 records this single active size source and the 32-Core-voxel tile rule (Round5 REPORT.md).
At the current 25 cm setting, SurfaceWorld strata use 8 m per slot chunk: the Unreal surface plan multiplies the slot range by 32 Core voxels (VoxelForgeCoreAdapter.cpp:280; CHUNK_SIZE=32 in VoxelTypes.h:211). FloatingIslands uses 4 m per owner-authored chunk: the adapter’s owner size is VOXEL_SIZE (VoxelForgeCoreAdapter.cpp:33; 12.5 cm in VoxelTypes.h:213), and its plan multiplies 32 owner voxels by the serialized owner/Core ratio, currently 12.5/25 = 1/2, or 16 Core voxels (VoxelForgeCoreAdapter.cpp:441). For chunks 0…−15 that gives z bounds −60…+4 m. This is the two explicit coordinate conventions in the game route, not a global change from 8 m to 4 m.
Standalone uses the same owner/Core ratio and chunk formula (OwnerWorldLoader.h:302, WorldAssemblyPrototype.h:488); no current Unreal/standalone scale disagreement was found. L18 also removed the standalone-only two-Core-voxel bounds inset so recipe bounds match the Unreal plan. The owner decides whether either authored scale changes.
Fix and ceiling
Geometry version 3 preserves the island shapes and removes only the lower all-XY seal. The upper seal calls the shared VF_ApplyUpperBoundarySeal density primitive; the shared two-sided seal uses the same upper-band math (VoxelDensityPrimitives.h:44). Resolved bounds come from each strate’s own range. The shared AppendStratumBoundaryCeilings mesh path runs for every generator and LOD, adding a plane at the resolved upper boundary where the mesh lacks coverage. It suppresses an existing plane only when nine probes show full cell coverage (ShapeWorldInternal.h:36, FarShellsInternal.h:894, VoxelForgeCore.cpp:2207). The underside normal points into the room, so the existing material lighting renders the interior face. This adds no FloatingIslands-specific height.
For the captured FloatingIslands strate, the upper bound is z=+4 m and its configured 0.5 m seal gives an interior-facing ceiling surface beginning around z=+3.5 m. The density probe crosses into the seal at 3.5 m and exits at z=4.019 m; z=7.75, 8.0, and 8.25 m remain air with no crossing. The lower all-XY seal is removed; remaining geometry below −60 m belongs to the lower world and is visible in the ray traces. Thus the apparent 3.5 m “floor” is the retained ceiling when viewed from inside; the 8 m floor is absent. No chunk size changed.
The owner’s decision and version-3 recipe say an underground strate has a ceiling at its configured upper boundary. “Farther to breathe” comes from a taller configured range. I updated the stale architecture-table wording “open void” to say the islands sit beneath the shared ceiling.
Ceiling continuity
The final audit used 16×16 interior samples per tile and paired samples along same-LOD tile edges. Far LODs pass continuously:
| LOD | Tiles with cap | Interior hits | Max root delta | Edge gaps |
|---|---|---|---|---|
| 4 | 48/48 | 12,288/12,288 | 0 cm | 0 |
| 5 | 48/48 | 12,288/12,288 | 0 cm | 0 |
| 6 | 48/48 | 12,288/12,288 | 0 cm | 0 |
| 7 | 48/48 | 12,288/12,288 | 0 cm | 0 |
| 8 | 153/153 | 39,168/39,168 | 0 cm | 0 |
LOD0, 2, and 3 also hit all tested samples. LOD1 missed 3 of 12,288 interior samples (0.387 cm maximum root delta) and had no shared-edge gaps. The readable upward view is captures/floating-islands-ceiling-up.jpg.
Dark tile-aligned patches
They are lower SurfaceWorld triangles visible below the removed false lower cap, not empty rays and not a viewer dark-square overlay. Traces in the final island export found:
- Pixel (700,720): first hit at 104.924 m on non-skirt LOD2 tile
(-2,2,-2,2), z=−62.925 m, normal-z 0.266; another LOD2 tile hits z=−69.942 m. - Pixel (1050,650): first hit at 168.051 m on non-skirt LOD3 tile
(0,2,-2,3), z=−72.594 m, normal-z 0.895; lower LOD4 geometry is also hit at z=−112.229 m and −120 m.
The ring probe measures real LOD height steps on those lower surfaces. I left them visible: suppressing those triangles would hide valid lower-stratum geometry, while changing the lower strata or SurfaceWorld would exceed this local fix. The sampled rectangles are not missing tiles or floor holes.
Cross-LOD ring steps
Entries are median / p95 / maximum absolute edge-height difference in centimetres, then gap count. The L18 column is the final matched island camera. The large remaining steps are lower-stratum terrain, not the upper ceiling.
| LOD edge | L17 before | L17 after | L18 final |
|---|---|---|---|
| 0→1 | 3.451 / 8.920 / 449.158; 14 | —; 0 samples | —; 0 samples |
| 1→2 | 26.642 / 148.262 / 149.862; 0 | 0 / 0 / 0; 0 | 147.141 / 148.403 / 149.862; 0 |
| 2→3 | 0.134 / 198.730 / 773.318; 8 | 0 / 0 / 0; 0 | 128.603 / 200.789 / 773.318; 8 |
| 3→4 | 3.269 / 47.875 / 188.531; 27 | 0 / 0 / 0; 0 | 3.269 / 47.774 / 188.531; 27 |
| 4→5 | 29.975 / 130.496 / 445.444; 6 | 0 / 0 / 30.957; 1 | 29.992 / 124.373 / 443.482; 6 |
| 5→6 | 12.234 / 127.224 / 536.573; 32 | 12.234 / 127.224 / 536.573; 32 | 12.234 / 127.224 / 536.573; 21 |
| 6→7 | 29.013 / 301.752 / 42,624.479; 0 | 28.892 / 291.861 / 945.477; 0 | 29.013 / 301.752 / 42,624.479; 0 |
| 7→8 | 83.843 / 1,225.416 / 3,755.407; 32 | 83.843 / 1,225.416 / 3,755.407; 0 | 83.843 / 1,225.416 / 3,755.407; 0 |
SurfaceWorld regression hashes
The 14-run check compared each final output to Saved/Linux/l14-final-hash-sw-clang-off-w12-r5.log from the L14/8704129 baseline: Clang -ffp-contract=off and GCC default, W1/W8/W12, with five W12 repeats. All 14 matched the whole-view, full-detail, LOD0–8, and exact-query rows. The 24 m crossing check likewise passed all 14 compiler/worker configurations against their L14 compiler-specific references.
Whole view D/M/P/T: c10697a8f48380c7 / e75c9119a1498cd5 / 49a9a8d1835a6c8c / edcb23288b5e8724.
Full detail D/M/P/T: 0ee0579bd15cbbe4 / 32e5d4964d610fee / 1932b96ee4b1d910 / 69743c6bad3447dc.
| LOD | Density | Mesh | Payload | Topology |
|---|---|---|---|---|
| 0 | 769f2a706d585a72 |
33eeeb39fa443816 |
645621a1d968983f |
c2457ed905036c9d |
| 1 | 69cc5a5c0a2c60af |
b48335f5410c57d5 |
d15c5480162ab8ba |
feca1bd025823604 |
| 2 | 85deed5683a77202 |
53469895987aeea2 |
e55f8ae7e1532033 |
d5feb12a0e85c09b |
| 3 | 6518caefb3be7e7f |
ec513c90b853a614 |
f62fa1137ff17f82 |
ccf1dcf681965816 |
| 4 | 62d4be96021992f4 |
f1e4c6efcc2615a9 |
9dc5f9c88be02f33 |
fe6f55125a07c3bf |
| 5 | 5e4a8c38b8cea6fc |
08ee56998aaf21e5 |
541eea8558f26cc8 |
6539374a8b3336d8 |
| 6 | e036e95b9006945b |
624a33f941a99b02 |
81b73e14f68bdf86 |
4de4c63ce1f80a56 |
| 7 | 8ee358af56a30d8d |
46ab3c6184048b7c |
0a6164b7e68e80c5 |
0c26b85bb03bc831 |
| 8 | c3458e1cbdb9c471 |
46c03d0994d75192 |
8f89fc5bde12d230 |
d16dc0cf62031898 |
Exact query: 9 probes; density/unclamped e4d4a8eb95b35933, detail efcba20c0c70c415, collision e604823a249029bf.
The 24 m crossing W12×5 hashes match those same aggregate whole-view, full-detail, and exact-query values on both compiler references; the full check compared all 12 rows per run.
FloatingIslands’ representative W12×5 whole-view D/M/P/T is ca7f375cded78f1d / da003331c554f8f3 / 0d2e74862b4ee500 / b7a7177af8915a21; full-detail is fc71abf85f5b9373 / e139b32d42ecfa29 / 28a2414e41de59bd / d61ca68ca64f74ca. Exact query is 4ef614485815ee30 density/unclamped, efcba20c0c70c415 detail, e604823a249029bf collision. Clang and GCC representative hashes agree, and all nine LOD rows stayed stable across the 28-run matrix.
Other invariants and Unreal edits
- Final matrix: 28/28 rows passed; repeated runs were stable within each compiler. Route parity had 0 mismatches across 782,026 FI and 910,651 SurfaceWorld exact samples. Proof audits had 0 violations: FI 9,048 blocks / 12,042,888 samples; SurfaceWorld 27,479 / 36,574,549. Readiness negative controls were caught; walkability passed 4,000/4,000 FI and 5,642/5,642 SurfaceWorld samples.
- L3 FP-contract preamble/self-test, L4
FLazy, L7 shared cache, L9/L12 proofs, L11 readiness/crash handling, L13 route binding, ARCHITECTURE §8.10, and async/MPSC/Epoch paths remain intact. Both final compiler runs started without the Core FP-contract self-test refusing the build. No async route was added. - Unreal-side edits are limited to VoxelForgeCoreAdapter.cpp, bumping FI geometry version 2→3 so serialized recipes pick up the lower-seal removal, and the shared VoxelDensityPrimitives.h, extracting the common upper-seal math used by v3. The Unreal target could not be compiled on this Linux host.
Captures
All JPEGs are below 300 KB. Before/after pairs use matched cameras: FI flat square (-11.6124,-118.2212,-19.8452), yaw/pitch 0/0; FI island (-22,-19,-22.8), 0/−4; SurfaceWorld spawn (0,-35,-487.94), 0/−22; horizon uses the same spawn camera with pitch 0. The ceiling view uses the island camera with pitch 80. The SurfaceWorld pairs look the same; the exact hash checks certify its output bit-for-bit.
- FI flat square:
captures/floating-islands-flat-square-before.jpg,captures/floating-islands-flat-square-after.jpg. - FI low island:
captures/floating-islands-island-view-before.jpg,captures/floating-islands-island-view-after.jpg. - FI upward ceiling:
captures/floating-islands-ceiling-up.jpg. - SurfaceWorld L1 spawn:
captures/surface-world-l1-spawn-before.jpg,captures/surface-world-l1-spawn-after.jpg. - SurfaceWorld horizon:
captures/surface-world-horizon-before.jpg,captures/surface-world-horizon-after.jpg. - Flat-square diagnostic without tile edges:
captures/floating-islands-flat-square-no-edges.jpg.
Failed or retried runs
- The first density-probe link omitted legacy compatibility objects and failed with undefined references. Relinking with the legacy implementation objects succeeded; both boundary probes then ran.
- The initial 4×4 continuity audit failed at far LODs 4–6 and found edge gaps. The shared all-LOD boundary cap and final full-cell coverage check replaced the center-only deduplication; final 16×16 LOD4–8 continuity passed with zero edge gaps.
- An early matrix checker compared Clang contraction-off hashes directly with GCC default hashes and reported FI mismatches. The checker was corrected to test repeated runs within each compiler and the L14 compiler-specific references; the final 28-row matrix passed.
- An early offscreen capture drew all skirts and showed an artificial slab. The capture now applies the viewer’s hidden-skirt mask; final matched captures were regenerated.
- A GCC build interrupted by owner steering produced no binary and was rerun. A pre-correction Clang build was superseded by the final build. No final build or matrix run failed or exceeded the runtime limits.
Resources and owner note
Final builds: Clang 19 exit 0 in 31.689 s, peak RSS 436,088 KiB; GCC 14 exit 0 in 48.648 s, peak RSS 903,168 KiB. The largest measured runtime process was 897,276 KiB RSS. All processes stayed below the 6 GiB address-space cap; CPU affinity was 0–11, worker maximum 12, normal priority, and governor powersave. No run exceeded 30 minutes or stalled for 15 minutes. See BuildResources.md.
Owner note: SurfaceWorld stayed bit-identical to L14. FloatingIslands now retains a ceiling at its configured upper strate boundary while removing the false lower all-XY floor. At the current plan that is a z=+4 m boundary with a 0.5 m seal; its distance above the islands comes from the configured range. The small Unreal edits are listed above and need an owner-machine UBT compile.
Orchestrator review (Claude)
- Merged. SurfaceWorld is bit-identical (14 configs plus the 24 m crossing); the FI false all-XY lower seal
is removed; the ceiling comes from the shared, strate-parameter upper-boundary seal and ceiling path
(owner rule: every strate has a ceiling, height from its own parameters). The Unreal edits are a pure
extraction of the existing upper-seal math plus the FI
geometryVersion2→3; they need a UBT compile on the owner PC. - The scale answer: both conventions are deliberate and agree between Unreal and the standalone (SurfaceWorld 32 Core voxels per chunk; FloatingIslands 32 owner voxels = 16 Core voxels). Nothing rescaled.
- Still open (L19):
- Small black holes in the FI ceiling, visible near the top of
floating-islands-flat-square-after.jpg; compare LOD1 missing 3/12,288 continuity samples. - The owner's ledges are most likely the LOWER stratum's terrain seen through the floorless FI void: ring steps of 147 cm median at LOD1→2 and 129 cm at 2→3 remain in that terrain. "Valid lower-stratum geometry" with metre-scale cross-LOD steps is still a bug the owner can see.
- Small black holes in the FI ceiling, visible near the top of
- Exports (229 MB
.vfmesh) are not committed.