wip(assembler): round L29 -- strate transitions honoured at the bedrock/ceiling interface

EVoxelStrateTransition from the upper strate shapes the bedrock(N)/ceiling(N+1) interface in the
shared composition layer: Hard flat; Gradient = smooth 2D hash surface (16 m owner width, about 4 m
measured undulation); Interleaved = 3D domain-warped fingered overlap within the width. Each band
keeps >= 2 Core voxels solid; faces return to the seam near passage mouths. Interface audit over
512 m: 0 hole columns for all modes; wider-than-declared and too-thin controls rejected. All passage,
route, proof and validator audits pass; deterministic Clang = GCC. Evaluator 15. Cost +4% SW,
+1.3% FI vs L28. Open: ring-like artifact on the FI floor capture; transition look unverified.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-10-21 09:16:12 +02:00
1 parent f23ab7b9fa
commit 63c7e563d0
16 files changed
+794 -42

No files matched your search

@@ -0,0 +1,110 @@
# World Assembler L29 — bedrock/ceiling transitions
**Core now honors the upper strate's `EVoxelStrateTransition` at the shared interface.** The owner
world's upper two-chunk Gradient resolves to 16 m at the 8 m layout chunk size. SurfaceWorld's
one-chunk setting remains in the resolved strate record. Core does not blend unrelated generator
parameters. `WorldAssemblyEvaluatorVersion` is 15; recipe versions and resolved-layout schema V3
are unchanged.
## Appearance and safety
| Mode | Result |
|---|---|
| Hard | The original flat, touching boundary. No displacement or overlap. |
| Gradient | Both faces follow one smooth 2D hash surface. On the 16 m interface, the measured peak-to-peak undulation is 3.988 m. |
| Interleaved | A deterministic 3D domain-warped hash field moves both faces inward, producing fingered overlap. Measured peak crossing was 6.487 m in FloatingIslands and 6.952 m in SurfaceWorld, within the declared 16 m. |
Each boundary band keeps at least **two Core voxels** of solid thickness: 0.5 m at the default
25 cm voxel size. The owner bands measured 0.5–1.0 m on the upper side and 6.25 m on the lower
side. Interleaved is capped by both the declared width and the bands' combined thickness, so the
solid intervals still touch or overlap.
The strict interface audit covers a 512 m square: 4,221 columns per interface, with four passage
columns excluded from the hole sweep. Hard, Gradient and Interleaved each report zero hole columns
and zero air samples. Both negative controls reject as expected: crossing one micrometre wider than
declared, and either band one micrometre thinner than the minimum. All six recipe/mode runs pass.
Transition faces return to the nominal seam near passage mouths: the protected radius is the mouth
radius plus 1 m, followed by a 2 m smooth fade. This kept the style-2 FI landing supported; its
final capsule/support audit passes.
## Passage and parity audits
The final matrix has 4 styles × 2 recipes × 2 compilers (16 runs). Capsule and walkability,
open-air, naturalness, no-long-bridge, route bindings, strict-validator controls, L13 route parity,
and L9 proof audits pass. Open-air reports zero violations; validator controls reject 10/10;
route-parity and proof audits report zero mismatches/violations. The L23/L24/L26 negative controls
are detected.
The L28 `FloorProfileBlend` diagnostic still exceeds its 2-voxel threshold in styles 1 and 3:
2.544 and 3.645 voxels. L28 records the same values on both compilers, so this is inherited and
unchanged.
## Hashes
The L25 W1/W8/W12 hash matrix is identical across Clang and GCC for both recipes: full-detail,
whole-view, all LOD rows and exact-query hashes match. Hash order below is density / mesh / payload /
topology.
| Recipe | Full detail (960 tiles) | Whole view (2,370 tiles) | Exact-query density / detail / collision |
|---|---|---|---|
| SurfaceWorld | `ace56c8f205238ad / a9c603a1248de6b8 / ea55f1f4fcc6a894 / 5ea7bc78a1b678ae` | `0e8c5af01df96b14 / 70099e89b77811ed / dbce0fdcf6764126 / ddaf81a1228f9b4b` | `c949c4df2ce6f9d9 / 114c501e2d830d94 / e6011d3a248d4849` |
| FloatingIslands | `ed550e0c8b182695 / 0e410a8e80a3e7f7 / 0751926f0c67d8a4 / f01208bc2f7841ec` | `a492eefa4f534975 / 141f00f3e411a0df / 93f50c569526c5cb / d83b53c8e53df81c` | `7b7c50ac24ccadcc / efcba20c0c70c415 / e604823a249029bf` |
The 24 m moving crossing processed 314 entering tiles per recipe; Clang/GCC crossing hashes match.
SurfaceWorld's away-from-interface probe at z = −400 m also matches L28: all 960 full-detail
tiles and the exact-query density/detail/collision hashes are identical. The broader whole-view
hash differs because its far-LOD coverage also includes the changed interface.
## Cost
Five clean, alternating W12 pairs against
`Saved/Linux/bin/VoxelForgeCoreHeadless-linux28-clang-r28`, hashing off:
| Recipe | L28 whole-view ready | L29 whole-view ready | Change |
|---|---:|---:|---:|
| SurfaceWorld | 1.581 s | 1.644 s | +3.97% |
| FloatingIslands | 16.605 s | 16.814 s | +1.26% |
FloatingIslands is within the ~3% target. SurfaceWorld is about one percentage point above it.
## Captures
All are 1280×720 JPEGs, each under 21 KB (well below 300 KB):
- `captures/fi-floor-gradient-above.jpg` — FI floor from above, inside FI.
- `captures/sw-ceiling-gradient-below.jpg` — SW ceiling from below, inside SW.
- `captures/interface-hard-side-cutaway.jpg`
- `captures/interface-gradient-side-cutaway.jpg`
- `captures/interface-interleaved-side-cutaway.jpg`
## Changes and run history
Core transition evaluation/validation and the shared composition path changed, along with the
headless transition audit, architecture/codemap, and the two Unreal files
`Source/VoxelForge/Public/VoxelStrateTypes.h` and
`Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp`. Unreal was unavailable here, so those edits
were not compiled. No commit, push or stash was made.
Failed or retried runs:
- An early Clang build used a nonexistent dispatch helper; corrected to the current query method and rebuilt with Clang and GCC.
- The first Interleaved overlap used the full sum of band thicknesses and opened gaps (1,085 columns / 20,313 air samples). Capping overlap to `min(declared width, combined thickness)` removed the gaps.
- An initial hole sweep sampled a half-open band edge and reported 752 boundary-rounding holes. Sampling half a voxel inside each band removed those edge artifacts; final sweeps report zero holes.
- The first FI style-2 passage audit had 11 unsupported probes after Gradient moved the mouth face. The local mouth taper fixed it; all 16 final passage runs pass.
- A resolved-layout-only command initially omitted required pipeline flags and exited 2; rerun with the required flags passed. Early cutaway camera/clip settings produced blank framing; the final orientation and clip plane produced the captures above.
- One cost folder contained a duplicated timing sequence and was discarded. The five-pair clean run above was sequential. A cache experiment did not improve cost and was removed. A cost-extraction `sed` typo was rerun with Python; benchmark logs were unaffected.
No build or audit exceeded 30 minutes, and no step remained stuck for 15 minutes. All builds and runs
used CPUs 0–11, at most 12 workers, normal priority, and the 6 GiB address-space cap.
## Orchestrator review (Claude)
- Merged: transitions honoured safely (0 holes over 4,221 columns per interface, negative controls reject, all
passage audits pass, deterministic).
- **The look is not verified by the captures:** `interface-interleaved-side-cutaway.jpg` shows flat faces
(black = uncapped solid between faces), with no visible fingers; `sw-ceiling-gradient-below.jpg` is a flat
plane; `fi-floor-gradient-above.jpg` shows **concentric dashed rings** on the FI floor, which looks like an
artifact (possibly the passage-mouth protected-radius fade, or quantised undulation), not a smooth Gradient.
- Cumulative SW cost vs L24 is now ~+8% (L28 +3.7% plus L29 +4%). L30 covers the ring artifact, readable
transition captures, and cost recovery.
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB