Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux23/REPORT.md
T
Fr0zkaandClaude Opus 5.5 71d09a8c52 wip(assembler): round L23 -- inter-strate passages planned from the resolved layout and carved
After L22 the FI -> SW passage no longer connected the strates (legacy owner-voxel coordinates,
lower end 23 m above SW), and Core never carved passages through the bands. Now the director
plans passages from the resolved layout (PlanResolvedLayoutPassagesV1; deterministic hash of
seed/strates/connection; placement disk from PassageConfig, 8-24 m around (0,0)); shared
composition applies generator field -> bands -> bounded passage carve and support shelf, opening
the bands only along the tunnel. Mouths bind to the strate routes. Capsule audit: 0 blocked /
0 unsupported (325,962 samples FI, 284,319 TunnelNetwork), negative controls detected; all 8
generator kinds exercised. SW away from the passage is bit-identical. Layout V3, evaluator 9.
Open: look not yet natural (stepped tube in FI void, terraced SW arrival); SW-as-upper route
planning fails; Unreal adapter uncompiled.

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

10 KiB
Raw Blame History

L23 — inter-strate passage

Owner answer

After L22, Core did not have a resolved-layout passage through the new bands. L22 exported FVoxelPassage points as milli owner voxels metadata, but the native FloatingIslands and SurfaceWorld Core paths did not use that metadata to carve the resolved bands. The legacy manager still has UVoxelStrateManager::GeneratePassages; its coordinates are in owner voxels, not metres.

The owner voxel is 12.5 cm (OwnerVoxelSizeMicrons=125000); voxel_size_cm=25 is the Core voxel. The legacy 0→1 passage therefore had upper (-19.594, 3.137, -14.255) m and lower (-19.594, 3.137, -102.959) m, with radius 1 m. Its lower point was still in FloatingIslands content (-119.5…+7.5 m), 23.29 m above SurfaceWorld content (-625.75…-126.25 m). It did not open the FI bedrock (-120…-119.5 m) and SW ceiling (-126.25…-120 m). The JSON also contains a legacy 0→0 passage; L23 plans only adjacent resolved strata.

L23 now derives the passage from the director-resolved bands and route anchors. For the FI recipe, mouths are (9.800, 4.571, -54.831) m and (9.250, 9.250, -502.608) m. For the SurfaceWorld recipe the unanchored upper mouth is (10.732, -5.775, -107.766) m; the lower mouth is the same. Both locations are inside the actual content and within 24 m of (0,0).

Planner, radius, and routes

UVoxelStrateManager::GeneratePassages remains the legacy Unreal planner. L22's season manifest carried recipes/routes, while the adapter copied manager passage points into V2 anchors with the legacy units. L23's adapter and headless director convert each upper strate's PassageConfig to Core fixed units, build a V3 layout with route anchors, then call PlanResolvedLayoutPassagesV1. The planner hashes seed, upper/lower strate, connection, and salt, so peers with the same resolved input choose the same path. Strate moves and route changes trigger a new plan; exported root passages are not imported.

The placement disk comes from PassageConfig.DistanceMax=192 owner voxels = 24 m; when no route anchor is available, DistanceMin=64 owner voxels = 8 m supplies the inner annulus. OriginSpineRadius and spawn radius are separate settings. MouthRadius/MidRadius set tunnel cross-section; Core enforces a 1.25 m minimum radius for the player capsule. Neither ceiling nor cap parameters changed.

In the FI snapshot, route point 28 (last of 29) equals the FI departure mouth; SW route point 0 (first of 33) equals its arrival mouth. Both route audits pass. This owner layout has exactly two strata, so SW has no next interface/departure mouth; its free route endpoint is (54.750, 54.750, -502.308) m.

Passage audit

Capsule is 0.34 m × 1.76 m. A passage fails on any blocked capsule sample, unsupported floor probe, grade failure, mouth outside content/radius, route-mouth mismatch, or if the no-passage control does not detect blockage.

Recipe Interfaces Center samples Capsule samples Blocked Support probes / unsupported Grade failures Mouths in content / radius
FloatingIslands → SurfaceWorld 1/1 5,174 325,962 0 40,412 / 0 0 2/2 · 2/2
TunnelNetwork → SurfaceWorld 1/1 4,513 284,319 0 35,254 / 0 0 2/2 · 2/2

The deliberate no-passage controls found 17,218 blocked capsule samples (FI recipe) and 23,876 (SurfaceWorld recipe); both were detected. FI’s 29-point route and SW’s 33-point route pass with 0 blocked samples, 0 unsupported probes, 0 grade failures, and mouth binding 2/2. The SurfaceWorld-only route passes 33 points with the same zero failures and binding 1/1.

The shared composition layer applies each generator field, then bedrock/ceiling bands, then the bounded passage carve and support shelf. Only the tunnel path opens a band. The full 0→1 capsule audit crosses the FI bedrock and SW ceiling; support stays below the capsule. The audit samples the resolved Core field by interface owner and does not reuse the old ring-table probe, so it does not pair band and content samples from different surface owners.

Runtime passage checks covered all eight generator kinds: TunnelNetwork, FlatPlain, CrystalChamber, Maze, VerticalShafts, and Underwater as upper-strate fixtures; FloatingIslands in the FI recipe; SurfaceWorld as the real lower strate in both owner-world recipes. The SurfaceWorld-as-upper fixture could not produce its separate route: all 648 route candidates failed the grade filter. That fixture is recorded as a failed route setup, not counted as a passage pass. The real SurfaceWorld lower strate audits pass.

Determinism, proofs, and content hashes

Clang 19 (--fp-contract=off) and GCC 14 (--fp-contract=default) builds passed. Both executables ran the mandatory Core FP-contraction self-test without rejection. For both recipes, W1/W8/W12×5 across both compilers produced one distinct result per hash class. The same 28-run matrix passed the 24 m region crossing: 314 moving tiles, stable within each recipe. Route parity passed on both compilers: 8/8 page pairs, 14 higher-LOD exact pairs, 782,026 exact-query samples, and one edit, all with zero mismatches. V3 strict validation accepted both layouts with 0 issues; all 9 malformed layout controls were rejected.

Passage-centered uniform-proof boxes are conservatively unknown/fallback (FI: 21,504 fallback and unknown, 0 violations); no false certificate is emitted around the new carve. Away from the passage, SurfaceWorld at (512,512,-500) m matches the L22 baseline bit-for-bit: 27,368 certified blocks, 36,426,808 samples, 1,304 fallbacks, 0 unknowns/violations. Full-detail hash is 66ac781666579e3e / 914873894a0e38c4 / ec8b03ade039cd56 / a2b621b0321d43dc (density/mesh/payload/ topology); whole-view hash is ddc6d1942db48f52 / bce985905e70dac4 / 266f5a008bcf4491 / e6fa520c5ad2817b. LOD0–3 and 9 exact-query hashes also match. The earlier unbounded comparison included the far horizon and was discarded; this comparison used render-distance 0 and max LOD 3.

Changes are limited to resolved passage planning, band openings along those paths, and supported landings. SurfaceWorld content away from the passage is unchanged by the hashes above. L3 FP contract setup/self-test, L4 FLazy, L7 shared cache, L9/L12 proof behavior, L11 readiness/crash path, L13 route binding, L18/L19 shared ceiling, L21/L22 layout bands, ARCHITECTURE §8.10, and CLAUDE.md async/Epoch rules remain intact. The route and passage audits exercise L13 binding; the async/cache files were not edited.

Captures

Small 1280×720 JPEGs (all render inputs/PNG intermediates stay in Saved/Linux/linux23/):

Changes and Windows checklist

Version bumps: resolved-layout snapshot V3, evaluator 9, FloatingIslands geometry 4. The only Unreal-side source edit is Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp: it binds V3 routes/configs and invokes the resolved planner. Core and standalone sources build here; the Unreal adapter cannot be compiled on this Linux host.

On Windows:

  1. Build the Editor/plugin with the updated Core header and adapter; check UHT and link.
  2. Load the owner world at seed 0 and verify strict V3 validation and stable mouth coordinates.
  3. Walk the FI route, passage, and SW route with the 0.34 m × 1.76 m capsule; inspect all three capture viewpoints in-engine.
  4. Move a strate or route anchor, reload, and verify the passage is re-derived and peer-identical.
  5. Confirm SW away from the passage and its ceiling/cap parameters remain unchanged.

Failed and retried runs

Failed development audit logs (all retained under Saved/Linux/linux23/): FI audit-floating-islands.log, r2–r5, r17–r19, r21–r36, r38–r41; SurfaceWorld audit-surface-world.log, audit-surface-world-diagnostic.log, audit-surface-world-diagnostic-r2/r3, and audit-surface-world-r2–r7, r19, r21–r22, r24–r26, r28–r31, r33, r35. The early failures were blocked capsule samples or unsupported landing probes. r35 still had 10 unsupported passage support probes; r36’s correction left 1,977 blocked capsule samples. r37 build failed on undeclared begin/end; r38 regressed to 10 unsupported probes. r39–r41 diagnostics traced support search across a non-monotone lower route tail; r42 build failed on continue inside a lambda. The lower-mouth split/index fix passed r43; final Clang/GCC builds and audits pass.

Other retries: plan-surface-world-r2.log used the wrong data path; two layout-only calls omitted the required benchmark/pipeline flags and exited 2. The first upper-SurfaceWorld fixture failed its 648-candidate route search as noted above. Initial offscreen renders hit the read-only Mesa cache location and were rerun with cache disabled and the CPU/address-space limits. Initial captures were also rerendered under affinity/memory limits. Camera trials were replaced by the three listed JPEGs. The first SurfaceWorld away hash comparison included the far horizon and was replaced with the bounded L22/L23 comparison. The hash parser initially reported missing rows because its regex was not multiline; corrected parsing found 28/28 runs and zero mismatches.

Runs were pinned to CPUs 0–11 and capped at 6 GiB address space; no task exceeded 30 minutes or stalled for 15. This shell inherited nice level 5; an attempt to restore normal priority was denied, so I made no priority or governor change. No commit, push, or stash was made.

Orchestrator review (Claude)

  • Merged as a correctness fix: the strates were not connected after L22 (and Core never carved the passage at all); now a planned, deterministic passage crosses FI bedrock and the SW ceiling, with a capsule audit of 0 blocked / 0 unsupported and a detected negative control.
  • The look is not yet "natural" (my capture review): fi-mouth.jpg shows a stepped tube hanging in FI's open void (there is no rock to carve between the island-level mouth at −54.8 m and the bedrock at −119.5 m); sw-arrival.jpg shows flat stacked terraces; tunnel-interface.jpg is too close to read. Owner input needed on where an FI passage should start (island vs bedrock floor) and how it should look.
  • Open: the SurfaceWorld-as-upper-strate fixture can't plan its route (648/648 grade-rejected), a real limit for future layouts.
  • Unreal adapter edit uncompiled here; Windows checklist above.