Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux30/REPORT.md
T
Fr0zkaandClaude Opus 5.5 103d8b471e wip(assembler): round L30 -- FI floor ring defect fixed; transition cost recovered
The Gradient interface left native solid density in the air-side gap and snapped the face to
voxel levels (concentric ring steps on the FI floor). The owner Gradient path now writes signed
distance both sides; match error RMS 0.36 -> 0.11 m. Band and fade-tile culling cut transition
cost: whole view vs L24 SW +2.7%, FI +0.2%. Evaluator 16. Deterministic across compilers and
workers; interface and passage audits pass. Found: on the real FloatingIslands recipe, the
rock-column connected-ends audit fails (all styles); earlier matrices ran SurfaceWorld twice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
2026-10-21 11:40:27 +02:00

122 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# VoxelForge L30
Work is on `assembler/world`. The speed and look patches are saved separately under
`Saved/Linux/l30/`; evaluator version is now 16 for the field change. No Unreal files were edited.
Nothing was committed, pushed, or stashed.
## Ring measurement and fix
I rasterized upward-facing triangles from the L29 mesh (skirt triangles excluded) over the same
409,600 pixels as the after field. At `(64, -32)`, the L29 field stayed almost flat at `-120.063 m` from
radii 1–11 m, then broke at 12 m. The expected Gradient at radius 1 m is `-121.360 m`. This is a
field defect, not shading: the probe is about 67 m from the passage mouth, and the raster has no
skirts or readable-shading tint. The passage column flare is at that distant mouth as well.
The upper FloatingIslands generator could leave native solid density in the air-side gap above a
negatively displaced Gradient face. The constant band densities also snapped the face to Core
voxel levels. The owner Gradient path now clears that gap with positive signed distance and writes
negative signed distance below the face, allowing the mesh to interpolate its height. The after
profile follows the resolved hash surface at every sampled radius. Match error fell from RMS
`0.361765 m`, p95 `1.016178 m`, max `1.304169 m` to RMS `0.110357 m`, p95 `0.218531 m`, max
`0.248818 m` (one Core voxel is `0.25 m`).
Before/after captures use the same color ramp and bounds:
- [L29 height map](captures/fi-floor-gradient-before-heightmap.jpg), [fixed height map](captures/fi-floor-gradient-after-heightmap.jpg)
- [L29 readable render](captures/fi-floor-gradient-before.jpg), [fixed readable render](captures/fi-floor-gradient-after.jpg)
## Transition captures
The maps cover the full 640×640 surface and are all below 300 KB. Gradient is the owner world
without a mode override. Hard and Interleaved use fixture overrides; the resolved layouts record
those modes.
- [Hard](captures/transition-hard-heightmap.jpg) — flat interface.
- [Gradient](captures/transition-gradient-heightmap.jpg) — owner field.
- [Interleaved](captures/transition-interleaved-heightmap.jpg) — fixture override.
## Cost
Five alternating W12 pairs, hashing off and `cache_hits=0`. First table is the separable speed-only
build, whose hashes remain L29-identical. Second table is the final version-16 build.
| Recipe | L24 | L29 | L30 speed-only | vs L24 | L30 final | vs L24 |
|---|---:|---:|---:|---:|---:|---:|
| SurfaceWorld | 1.566 s | 1.653 s | 1.606 s | +2.55% | 1.530 s | +2.68% |
| FloatingIslands | 16.625 s | 16.779 s | 16.470 s | −0.93% | 16.543 s | +0.21% |
Counter-enabled runs on the same plain W12 workload locate the saved work:
| Recipe | Boundary calls | Window checks → evaluations | Fade calls | Boundary tile / point culls | Column Z tests → guards → radial rejects | SDF calls |
|---|---:|---:|---:|---:|---:|---:|
| SurfaceWorld | 19.95 M | 3.54 M → 739 k | 8.2 k | 8.99 M / 8.96 M | 1.87 M → 1.85 M → 1.58 M | 18.4 k |
| FloatingIslands | 66.33 M | 8.00 M → 2.68 M | 8.6 k | 38.25 M / 23.63 M | 8.17 M → 8.14 M → 6.82 M | 83.4 k |
The fade-tile cull skips 731 k SurfaceWorld and 2.67 M FloatingIslands fade evaluations; the
column guard exits on nonpositive field values 272 k and 1.27 M times. Timing comes from
uninstrumented binaries; the counts above use counter logging.
## Hashes and audits
The speed-only v15 build matches all 12 L29 hash records for each recipe/compiler/worker matrix
(W1/W8/W12), and all 12 records for each 24 m crossing matrix. That is 24 exact comparisons;
all pass. The final v16 build is deterministic across both compilers and all worker counts, in the
normal and 24 m crossing runs. Representative W12 hashes (`density / mesh / payload / topology`):
| Recipe | Full detail | Whole view |
|---|---|---|
| SurfaceWorld | `ace56c8f205238ad / a9c603a1248de6b8 / ea55f1f4fcc6a894 / 5ea7bc78a1b678ae` | `0e8c5af01df96b14 / 70099e89b77811ed / dbce0fdcf6764126 / ddaf81a1228f9b4b` |
| FloatingIslands | `ed550e0c8b182695 / 0e410a8e80a3e7f7 / 0751926f0c67d8a4 / f01208bc2f7841ec` | `4ee19ea6b6406ca6 / be648f94c899b47e / 310b525f31604f98 / 10366eb6dfce2384` |
Exact-query hashes also match across v16 runs: SurfaceWorld
`c949c4df2ce6f9d9 / 114c501e2d830d94 / e6011d3a248d4849`; FloatingIslands
`7b7c50ac24ccadcc / efcba20c0c70c415 / e604823a249029bf`.
- Interface audit: all 12 compiler/recipe/mode combinations pass; 4,221 columns each, zero holes
and air samples, both negative controls reject.
- The 16 L29 fixture-matrix replays pass passage safety/open-air, validator controls (10/10), L13
route parity, L9 proof checks (zero violations), and walkability. `FloorProfileBlend` still
reports 2.544 vox in style 1 and 3.645 vox in style 3, unchanged from L29.
- Audit scope caveat: the L29 files named `floating-islands` were run with
`--recipe=surface-world`. With the actual `--recipe=floating-islands` option, the rock-column
audit fails on all four styles on both L29 and L30: connected ends are 1/2, 3/4, 1/2, 3/4.
The open-air audit passes. This is inherited, but means the L29 report's “two recipes” matrix did
not exercise the FloatingIslands CLI recipe.
## Failed and retried runs
- Broad air-gap experiments first lost a SurfaceWorld style-2 support sample. Route/radius masks
and support restoration then caused open-air violations. Widening the fade restored that case,
but measurement placed the ring far outside the fade, so those variants were discarded. The
final owner-only gate and signed-distance face pass the targeted support audit.
- Early speed variants missed the target: tile-only `+4.04%`, Z-point `+3.11%`, scalar path
`+4.33%` vs L24. The final band and fade-tile culls meet the target.
- The first counter-instrumentation compile failed; the counter hook was corrected and rebuilt
with Clang and GCC. One duplicated timing sequence was discarded; only the clean five-pair runs
are reported.
- The first 24 m crossing comparison supplied an extra camera override and mismatched. Rerunning
with the L29 camera setup and only `--camera-step=24,0,0` matches all hashes.
- An early Hard export hit `std::bad_alloc`; retry passed. The first EGL render used an unwritable
cache; retry with `XDG_CACHE_HOME` under `Saved/Linux/l30` passed. The first map conversion also
stopped before the Hard/Interleaved maps; both were rerun individually and have full raster
coverage.
- The first passage-matrix summary script assumed a different marker order and reported failure;
checking each audit marker by name confirms the core matrix passes. A `check=True` true-recipe
control runner stopped on the expected L29 exit code 10; rerunning while recording return codes
confirmed the same four inherited rock-column failures on L29 and L30.
No build or run exceeded 30 minutes or remained stuck for 15 minutes. Builds and runs used CPUs
0–11, at most 12 workers, normal priority, and the 6 GiB address-space cap. No Unreal build was
attempted.
## Orchestrator review (Claude)
- Merged: the ring was a real field defect (air-side gap left solid, face snapped to voxel levels), now fixed
(RMS 0.36 → 0.11 m). Cost back to SW +2.7% / FI +0.2% vs L24. The speed part is bit-identical; final v16 is
deterministic.
- Still visible: `fi-floor-gradient-after.jpg` shows faint concentric lines. Unknown whether that is residual
geometry (≤0.25 m steps) or the readable shader's height-tint banding; L31 measures it.
- **Important finding (thanks to Luna's caveat):** L29's "both recipes" passage matrix ran SurfaceWorld twice. On
the real `--recipe=floating-islands`, the rock-column connected-ends audit fails in all 4 styles (1/2 or 3/4).
Since L27, FI column results were never really tested. L31 priority.