wip(assembler): M1 round 5 -- native SurfaceWorld manifest delivered into the Unreal Core route

Manifest imported into UVoxelSettings (hash 8933693d9560ba9f), folded into the season
content hash only when Core is on. BuildHost: W1/W8/W16 stable, 2553 surface tiles match
standalone, 432 LOD transitions, collision on all 36 expected tiles. Matched timing
96.8 s native vs 197.3 s bridge (2.04x). Collision support tiles wait for Core region admission.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-10-09 15:31:48 +02:00
1 parent 2d0cec90e4
commit f67b519e75
11 files changed
+1002 -45

No files matched your search

+119 -7
View File
@@ -508,12 +508,10 @@ profiles are in `round4/final/logs/mesh-hash-final-w{1,8,16}.stdout.txt` and
- **Round 4:** Complete. The route and cap are in the research manifest; field sweep, negative
controls, bounds, determinism, headless query and matched captures are recorded above. Physics
collision cooking and Unreal light-leak behavior remain owner-build checks.
- **Round 5 — before Unreal delivery:** Integrate the reviewed manifest into the season asset/content
hash path and connect Core behind `bUseVoxelForgeCore`; prove that flag-off behavior remains
unchanged. The owner builds and reviews the in-game two-biome surface, enclosed cap lighting and
capsule-walkable route. Run the matched 23.085 s workload, report full-view and local query/
collision readiness separately, and assess the approximately 1.57 s aim. No BuildHost or owner
project build was done here.
- **Round 5:** Complete for plugin-side delivery. The manifest/content-hash path, native Core
surface, BuildHost tile/collision coverage, source-level switch-off check, matched timing and
handoff are recorded below. The owner's project build, in-game walk, and cap-lighting review are
the remaining owner checks.
### Run log
@@ -538,4 +536,118 @@ profiles are in `round4/final/logs/mesh-hash-final-w{1,8,16}.stdout.txt` and
`Saved/BuildHost/HostProject/Saved/Crashes/` folder contains one older `UECC-Windows-*` directory
from 2026-09-17; there was no new crash folder from this round.
No Unreal route or asset was changed in this round, so there is no owner rebuild handoff yet.
No Unreal route or asset was changed in round 4, so there was no owner rebuild handoff then. Round 5
supersedes that status.
## Round 5 — native SurfaceWorld in Unreal
The reviewed round-4 manifest now enters the opt-in Unreal Core route through `UVoxelSettings`.
The editor-only `SourceWorldAssemblyManifestJson` file picker plus `ImportWorldAssemblyManifestJson`
button reads the reviewed JSON into the settings asset as canonical serialized JSON and stores its
Core content hash. Import validates the recipe seed against the effective settings seed. The Core
adapter revalidates the manifest and requires a unique exact match for every planned stratum index,
top chunk and bottom chunk against resolved `SurfaceWorld` slots; invalid or incomplete plans fail
Core world initialization rather than silently falling back. With no manifest, existing Core cave
layouts retain their prior schema and route. With `bUseVoxelForgeCore` off, the legacy route and its
season identity hash are unchanged; the manifest only contributes to that hash while Core is active.
### Headless BuildHost evidence
`Tools/TestVoxelForgeCoreWorldHost.ps1` staged the reviewed JSON only under BuildHost and passed it
transiently to `-run=VoxelForgeExplore -coreworldtest=1 -coreworldassembly=...`; no data asset was
edited by the test. Manifest hash `8933693d9560ba9f`, recipe hash `c37de78b759c0a4c`, and plan hash
`1ca84619c8600ee5` were read back in Core. The field probe sampled 4,096 points over 3,200 voxels,
found three native biome IDs (including surface biome ID 4099), and generated native `Heightfield2D`
surface tiles. The actor's W1/W8/W16 initial hashes remained identical.
The final surface-strate travel phase passed at Core-local `(37,165,-2011)` voxels. All 2,553
expected visual keys matched independently generated standalone Core tile hashes; 573 local tiles,
3,438 neighbour faces and 432 LOD transition faces were checked. Of 125 collision-desired tiles,
36 had cooked bodies and 89 correctly had no body because their expected geometry was empty. The
gate checked each non-empty collision expectation individually. The log records the native surface
aggregate hashes as density `56ccc76575aa5f5f`, mesh `f3aeb31de1f967c1`, payload `95cb4781a1be4b73`,
topology `26ac366d430599bd`. Initial cave streaming, anchor release, and sequenced carve also passed.
Unreal's BuildHost exercised the RealtimeMesh/Chaos collision-body path; standalone does not cook
physics bodies. Full final output is in [CoreWorldValidation.stdout.log](../Saved/BuildHost/HostProject/Plugins/VoxelForge/Saved/CoreWorldValidation/Logs/CoreWorldValidation.stdout.log)
and [CoreWorldValidation.log](../Saved/BuildHost/HostProject/Plugins/VoxelForge/Saved/CoreWorldValidation/Logs/CoreWorldValidation.log).
Failed-attempt archives use the `CoreWorldValidation-backup-2026.10.09-*` names in the same log
directory.
### Switch-off check
The chosen narrow check is a source-level route and identity audit, not a runtime flag-off actor
comparison. `bUseVoxelForgeCore` remains default-false; `UpdateChunksAroundPosition` branches to the
existing legacy path when false; manifest import/adapter initialization and the new collision-support
deferral are Core-only; and `GetCurrentSeasonContentHash()` returns the pre-existing season hash
before inspecting the manifest when Core is off. This verifies the affected route boundaries and
content identity, but does not claim bit-for-bit runtime output from a second legacy actor session.
### Matched timing and the 1.57 s aim
In one BuildHost session, native `Heightfield2D` and the legacy-surface bridge generated the same
2,553 surface tile keys with hashes enabled. Region compilation took 0.015903 s native and 0.012752 s
bridge. Summed serial tile generation took 96.800984 s native versus 197.333401 s bridge; including
region compilation, 96.816887 s versus 197.346153 s (2.038× native speedup). This is a headless
same-key tile-generation comparison, not game-thread apply time or a full rendered-view timing.
The approximately 1.57 s aim is still unmet. The last matched standalone full 529-tile LOD8 stream
took 4.446 s wall, about 2.83× the aim. This round did not run a viewer/full-view benchmark; the
2,553-key BuildHost timing has a different workload and should not be compared directly to the aim.
### Ridge review and owner handoff
I inspected only the existing 17.6 KB downscaled `cliff-final4-overlook-native.jpg` and its 20.5 KB
owner comparison. The pointed ridge peaks are attached to continuous highland terrain and have no
detached shard or broad fanned-plate trail. They read as sharp native mountain peaks, not a mesher
artifact, so no terrain change was made. The frame remains an owner-review item for taste.
For the owner's project build and walk:
1. In the Content Browser, open the existing `DA_Settings` (`UVoxelSettings`) and confirm its
effective seed is `0` (the manifest seed). Set `SourceWorldAssemblyManifestJson` to
`Standalone/Research/WorldAssemblerM1/round4/world_assembly.json` in this plugin checkout, click
**Import World Assembly Manifest JSON**, confirm hash `8933693d9560ba9f`, then save the settings
asset. Assign that settings asset to the project's `AVoxelWorld` if it is not already assigned.
2. Select the `AVoxelWorld`, enable **Voxel World → Core → Use VoxelForge Core**. Keep the shipped
Core clip settings `CoreClipRadius=3` and `CoreMaxClipLevel=8` for the first review. Do not change
the legacy clip settings for this check. Coordinates below are actor-local Unreal centimetres;
Core scale is 25 cm per voxel.
3. To inspect the surface, place the gameplay/free camera near `(0,-3500,-48794)` cm and look toward
ground target `(0,0,-50394)` cm. The coast view is near camera `(33600,-6700,-47776)` cm,
targeting `(33600,-3200,-49376)` cm. The biome-border view is near camera
`(12800,-24300,-49291)` cm, targeting `(12800,-20800,-50891)` cm. The attached cliff/overhang is
near camera `(-16800,7000,-44571)` cm, targeting `(-16800,10500,-46171)` cm. To inspect the cap,
use the surface view and pitch upward/outward about 25°; the cap is hundreds of metres above the
surface floor, so look for the enclosing roof and distant horizon, not a nearby ceiling.
4. Walk the native ground route beginning near `(925,4125,-50275)` cm. The route is terrain support
geometry, not a painted path. Expect two inland terrain profiles, a coastal transition, one
attached cliff shelf, a closed cap and a collision-supported path. Check lighting inside the cap
and the small ridge peaks in the game.
Likely compile touchpoints if the project reports an error are `VoxelSettings.h/.cpp` (UHT/editor
import property and exported methods), `VoxelForgeCoreAdapter.cpp` (JSON parser and exact strate
match), `VoxelWorld.cpp` (manifest content hash and collision admission order), and
`VoxelForgeExploreCommandlet.cpp` (editor-only commandlet path). The plugin BuildHost compile passed;
the owner's project has not been built or opened here. No `.uasset` was modified.
### Round-5 run ledger
| Run | Result |
|---|---|
| First BuildHost UBT compile | Failed at Editor link because the new `UVoxelSettings` getter/setter definitions were not exported. Added `VOXELFORGE_API`; retry passed UBT and the Core link-safety audit. |
| Surface actor test attempt 1 | Failed tile-hash parity while moving to the surface, at support tile `(1,5,-63)`. |
| Surface actor test attempt 2 | Retried after route-fixture correction; the same support tile still differed. Root cause was a non-desired collision support request generating before Core region admission. |
| Surface actor test attempt 3 | Failed the old `GetBiomeAtWorldLocation` assertion: that API is the legacy biome/decorator query and is empty for this native Core surface. Replaced it with direct native `Heightfield2D` sampling from the resolved snapshot and added a native biome-field assertion. |
| BuildHost compile and actor test after collision fix | Passed after collision support was deferred until the tile enters desired-set region compilation. UBT and Core symbol audit passed; the complete actor test passed the gates above. |
| Final BuildHost rerun after switch-off hash gate | UBT/link-safety passed. Actor test passed in 9m20s with peak sampled private memory 3,880,357,888 bytes (3.61 GiB), including matched native/bridge timing and every surface coverage/collision gate. |
All actor attempts stayed below 15 minutes and below 8 GiB per process. No `0xC0000142` retry
occurred, and there was no new UECC crash folder; the only BuildHost crash directory is the older
2026-09-17 `UECC-Windows-F1A3EFD5469F5DD62E68EBBACAC84376_0000`. No owner project/editor was opened,
no owner build or `.uasset` edit occurred, and no commit, push or stash was made.
New source files: none. Modified source files:
`Source/VoxelForge/Public/VoxelSettings.h`, `Source/VoxelForge/Private/VoxelSettings.cpp`,
`Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp`, `Source/VoxelForge/Private/VoxelWorld.cpp`, and
`Source/VoxelForgeEditor/Private/VoxelForgeExploreCommandlet.cpp`. Modified BuildHost test tool:
`Tools/TestVoxelForgeCoreWorldHost.ps1`.