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
This commit is contained in:
1 parent
55c26a05a7
commit
71d09a8c52
14 files changed
+1465
-112
No files matched your search
@@ -0,0 +1,158 @@
|
||||
# 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/`):
|
||||
|
||||
- [FI passage mouth](captures/fi-mouth.jpg)
|
||||
- [Tunnel at the FI bedrock / SW ceiling interface](captures/tunnel-interface.jpg)
|
||||
- [Arrival in SurfaceWorld](captures/sw-arrival.jpg)
|
||||
|
||||
## 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.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Reference in new issue
Block a user