Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux19/REPORT.md
T
Fr0zkaandClaude Opus 5.5 811c4b7b17 wip(assembler): round L19 -- strate ceilings closed at every LOD; ledges diagnosed
The shared boundary-cap path now emits a cap wherever the field is solid just below a strate's
configured top (it previously required a solid-to-air crossing there) and checks a 5x5 perimeter
grid before suppressing a fallback cap. Strict audit: 0 misses / 0 edge gaps, LOD0-8.
farHorizonVersion 3 -> 4. SurfaceWorld LOD0-2, full detail and exact queries unchanged; 28/28
matrix plus 14/14 crossing; route parity and proofs pass.
Ledges: the lower stratum's terrain at the FI/SW interface, seen through the FI void, sampled at
0.5/1/2 m at LOD1-3 (up to 1.5 m / 7.7 m ring steps). Fix deferred to the units/layers round.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
2026-10-20 08:46:29 +02:00

12 KiB
Raw Blame History

Linux19 — FloatingIslands ceiling and LOD ledges

Status: The ceiling is now closed at every LOD. The lower-terrain ledges are diagnosed but remain visible: the required change affects protected SurfaceWorld LOD2 output, so I stopped before changing it and asked for your decision.

Findings and changes

The ceiling holes came from two checks in the shared boundary-cap path. It required density to cross from solid just below a strate's configured top to air just above it. Some of the field remains solid above that top, so the old test omitted those cap cells. The duplicate-cap check also sampled only inside each cell and could miss partial perimeter coverage. The path now emits a cap wherever the field is solid just below the configured top, and checks a 5×5 grid including the perimeter before suppressing a fallback cap.

The ledges are real upward-facing, non-skirt terrain triangles from the lower SurfaceWorld stratum visible below the FloatingIslands stratum. The combined recipe log identifies the SurfaceWorld field as strate index 1, chunks −16…−79, built from the owner surface parameters and biome map; the FloatingIslands plan is index 0, chunks 0…−15. At the worst LOD1→2 sample, the fine mesh is at z=−60.497 m and the coarse mesh at z=−61.996 m (149.862 cm apart). The LOD2→3 maximum is 773.318 cm, at z=−73.080 m versus −65.347 m.

The ring probe excludes skirts and masked triangles. The far-ground refinement routine only runs at LOD4 and above, so it cannot cause the LOD1→2 or LOD2→3 steps. Density dispatch is coordinate-based rather than LOD-based; the meshes sample that field on progressively coarser grids (0.5 m, 1 m, and 2 m at LOD1–3). The evidence points to resolution-dependent surface extraction of the lower SurfaceWorld terrain near the strate transition, not a different LOD recipe or a ceiling triangle. The L13 route audit also found no page/native or exact-query mismatches. The owner’s lower-stratum reading is supported.

SurfaceWorld at its L1 spawn has small L1→2 and L2→3 median differences, but it has larger outliers at farther rings: L3→4 reaches 1,190.974 cm, and L4→5 reaches 491.570 cm. Those high far-ring values are in the table below; the matched spawn, horizon, and above-ring captures are byte-identical before and after.

I did not change the ledge geometry. The most direct fix needs to change SurfaceWorld LOD2, which your rule protects pending an owner decision. The pending question is whether to allow that change.

The shared Core fix changes the recipe output identity version from farHorizonVersion 3 to 4. It changes no density query, stratum position, scale, or async route. No Unreal files were edited.

Ring tables

Values are median / p95 / maximum absolute edge-height difference in cm, then the probe's no-hit edge count. Before → after is identical for every row because this round changed the ceiling path, not the lower upward-facing terrain.

FloatingIslands camera

LOD edge Edges / samples Before (cm; gaps) After (cm; gaps)
0→1 0 / 0 — —
1→2 33 / 231 147.141 / 148.403 / 149.862; 0 147.141 / 148.403 / 149.862; 0
2→3 49 / 308 128.603 / 200.789 / 773.318; 8 128.603 / 200.789 / 773.318; 8
3→4 64 / 277 3.269 / 47.774 / 188.531; 27 3.269 / 47.774 / 188.531; 27
4→5 72 / 544 29.992 / 124.373 / 443.482; 6 29.992 / 124.373 / 443.482; 6
5→6 64 / 266 12.234 / 127.224 / 536.573; 32 12.234 / 127.224 / 536.573; 32
6→7 32 / 264 29.013 / 301.752 / 42,624.479; 0 29.013 / 301.752 / 42,624.479; 0
7→8 64 / 275 83.843 / 1,225.416 / 3,755.407; 32 83.843 / 1,225.416 / 3,755.407; 32

SurfaceWorld L1 spawn camera

LOD edge Edges / samples Before (cm; gaps) After (cm; gaps)
0→1 46 / 288 0.178 / 0.594 / 1.171; 10 0.178 / 0.594 / 1.171; 10
1→2 32 / 288 1.419 / 4.990 / 10.438; 0 1.419 / 4.990 / 10.438; 0
2→3 34 / 256 2.179 / 12.648 / 35.355; 2 2.179 / 12.648 / 35.355; 2
3→4 40 / 265 5.099 / 35.999 / 1,190.974; 5 5.099 / 35.999 / 1,190.974; 5
4→5 58 / 270 0.235 / 3.694 / 491.570; 14 0.235 / 3.694 / 491.570; 14
5→6 65 / 266 12.234 / 127.224 / 536.573; 33 12.234 / 127.224 / 536.573; 33
6→7 41 / 269 28.238 / 291.861 / 945.477; 7 28.238 / 291.861 / 945.477; 7
7→8 32 / 275 83.843 / 1,225.416 / 3,755.407; 0 83.843 / 1,225.416 / 3,755.407; 0

Ceiling continuity

The strict audit casts 16×16 interior rays per tile and pairs every shared same-LOD edge sample. Before the fix it found three LOD1 interior misses, one LOD2 interior miss, and 10 unpaired LOD1 perimeter samples. After the fix it found zero misses and zero edge gaps at all LODs.

LOD Cap tiles Interior hits Paired edge samples Max root delta (cm) Misses / gaps
0 64/64 16,384/16,384 3,696/3,696 0 0 / 0
1 48/48 12,288/12,288 2,376/2,376 0 0 / 0
2 48/48 12,288/12,288 2,376/2,376 0.025 0 / 0
3 48/48 12,288/12,288 2,376/2,376 0.025 0 / 0
4 48/48 12,288/12,288 2,376/2,376 0 0 / 0
5 48/48 12,288/12,288 2,376/2,376 0 0 / 0
6 48/48 12,288/12,288 2,376/2,376 0 0 / 0
7 48/48 12,288/12,288 2,376/2,376 0 0 / 0
8 153/153 39,168/39,168 8,976/8,976 0 0 / 0

Full output is in Saved/Linux/l19-diagnostics/fi_roof_after.log; the pre-fix strict audit is Saved/Linux/l19-diagnostics/baseline-fi-ceiling-strict.log.

Hashes and audits

Clang 19 (-ffp-contract=off) and GCC 14 (default) passed 28/28 runs: FI and SW, W1/W8/W12, with W12 repeated five times. The 24 m crossing passed 14/14 runs, with 12 matching hash rows each; its W1/W8/W12×5 hashes also matched the L14 compiler-specific references. The protected SurfaceWorld hash gate passed across the matrix and crossing. SurfaceWorld LOD0–2, full-detail, and exact-query hashes match L14 across the matrix and crossing; the representative W12 LOD3 hash also matches. LOD4–8 mesh/payload/topology hashes include the version-4 salt, and the tested captures show no visible SW change.

Representative Clang W12 hashes (density / mesh / payload / topology):

Output Full detail Whole view
FloatingIslands 43034299d33f2536 / a41e8353ec4bbe9c / cd0e3e15eef827b0 / 0b3c3f13cc1d6f8a 00bc3607a7839854 / 4baa66127c2b0892 / e11ef05e851a1517 / 1278bc4b1fffb869
SurfaceWorld 0ee0579bd15cbbe4 / 32e5d4964d610fee / 1932b96ee4b1d910 / 69743c6bad3447dc c10697a8f48380c7 / 4197fc1072f0ff58 / 7b3e616ec9459851 / c879e35592bf33e5

SurfaceWorld LOD0–2 hashes (density / mesh / payload / topology):

LOD Hash
0 769f2a706d585a72 / 33eeeb39fa443816 / 645621a1d968983f / c2457ed905036c9d
1 69cc5a5c0a2c60af / b48335f5410c57d5 / d15c5480162ab8ba / feca1bd025823604
2 85deed5683a77202 / 53469895987aeea2 / e55f8ae7e1532033 / d5feb12a0e85c09b

Exact queries: FI density/unclamped 87e5c0dbf9ee9ee2; SW density/unclamped e4d4a8eb95b35933; both detail efcba20c0c70c415, collision e604823a249029bf.

L13 route parity passed in all four audit runs (both recipes, both compilers), with zero mismatches. FI checked 782,026 exact-query samples; SW checked 910,651. L9 proof audits reported zero violations: FI 9,192 blocks / 12,234,552 samples; SW 27,479 / 36,574,549 samples. Full logs are in Saved/Linux/l19-audits/.

L3 FP-contract preamble/self-test, L4 FLazy, L7 shared cache, L9/L12 proofs, L11 readiness and crash handling, L13 route binding, the L18 shared ceiling, ARCHITECTURE.md §8.10, and the CLAUDE.md async rules remain intact. The only source edits are in shared Core; the only architecture addition is §8.38.

Captures

Every JPEG is at most 50 KiB (limit 300 KB). floating-islands-owner-ground-after.jpg is the low view across the FI ground, matching the owner's angle. SurfaceWorld spawn, horizon, and above-ring before/after JPEGs are byte-identical.

  • FI: captures/floating-islands-flat-square-before.jpg, captures/floating-islands-flat-square-after.jpg, captures/floating-islands-owner-angle-before.jpg, captures/floating-islands-owner-angle-after.jpg, captures/floating-islands-owner-ground-before.jpg, captures/floating-islands-owner-ground-after.jpg, captures/floating-islands-ceiling-up-after.jpg.
  • SW: captures/surface-world-l1-spawn-before.jpg, captures/surface-world-l1-spawn-after.jpg, captures/surface-world-horizon-before.jpg, captures/surface-world-horizon-after.jpg, captures/surface-world-rings-above-before.jpg, captures/surface-world-rings-above-after.jpg.

Failed and retried runs

  • The pre-fix strict FI ceiling audit failed as expected: 4 interior misses and 10 unpaired LOD1 edge samples. The earlier loose report had counted only the 3 LOD1 interior misses. The final strict audit passed.
  • A ceiling audit was mistakenly run on the ordinary SW terrain export; it reported 47,837 non-roof ray misses. That was the wrong target for this audit and was discarded.
  • The first continuity-audit attempt was interrupted before results. /usr/bin/time was unavailable (exit 127); the repository MeasureBuild.py wrapper was used instead.
  • The first FI auto-camera export used clip radius 0 / max LOD 0 and exited with std::bad_alloc (1.710 s, peak RSS 2,151,292 KiB). Retrying at radius 3 / LOD8 / W12 succeeded (10.786 s, peak RSS 597,976 KiB).
  • An exploratory native-heightfield refinement extension did not change the FI L1→2 or L2→3 ring values and was reverted. A temporary debug probe/build used to inspect the ceiling field was also removed before the final build.
  • The first hash-gate run happened before crossing logs existed and failed for zero crossing rows. After the 24 m crossing completed, the gate passed.
  • The first SW ring probe did not inherit the CPU affinity limit; it was rerun under taskset -c 0-11, and the constrained table is unchanged.
  • renice -n 0 was denied by the environment. Runs stayed at inherited nice level 5 (below normal priority); the governor was left unchanged at powersave.

No build or run exceeded 15 minutes or 30 minutes. All final builds and run children used CPUs 0–11, at most 12 workers, LP_NUM_THREADS=12 for llvmpipe, and the 6 GiB address-space cap. Peak RSS was 903,324 KiB (GCC build); the matrix, crossing, audits, roof audit, and captures peaked at 583,180, 550,832, 857,964, 541,972, and 510,680 KiB respectively. The outer matrix took 343.684 s; the crossing took 46.354 s. Governor: powersave.

Owner note: The FI ceiling now closes cleanly at z=+4 m. The visible ledges are lower SurfaceWorld terrain and are a real LOD sampling mismatch, not skirts. SurfaceWorld L1→2 and L2→3 agree closely at the spawn, but its far rings have larger outliers. The ledge fix needs permission to change SurfaceWorld LOD2; no such mesh change is included here. Nothing was committed, pushed, or stashed.

Orchestrator review (Claude)

  • Merged. The ceiling specks seen in L18's flat-square capture are gone in the L19 capture (checked by me), and the strict audit reads 0 misses / 0 gaps at all LODs. SurfaceWorld LOD0–2, full-detail and exact queries are unchanged; the far mesh hashes carry the farHorizonVersion 3→4 salt, with byte-identical captures.
  • Luna correctly stopped at the protected SurfaceWorld LOD2 rule. Ledge decision: the defect is at the strate interface (lower stratum top near z≈−60…−73 m, sampled on 0.5/1/2 m grids at LOD1–3), which is where the two chunk-unit conventions meet. It goes into L20 (the units/layers design round) as its concrete test case, rather than being patched alone first.