Luna, M1 round 1 of 4 (plan in Standalone/ASSEMBLER_M1_REPORT.md): - Versioned fixed-scale world manifest (the shipped plan format) and the Core block contract: point evaluation, interval-or-unknown, influence bound, detail envelope, channels. - Interval audit: 256 boxes / 6,912 samples, 0 missed, 0 unknown; a deliberately false bound is detected (negative control). - Native Heightfield2D with biome input: 4,096-point hash fae2721c052aec5c identical at W1/W8/W16; point queries 2.059 ms vs 62.115 ms legacy -- but NOT a match yet (mean density error 274 voxels, 2,261 sign mismatches vs the legacy surface). 45 mesh-free Core queries match direct evaluation exactly. Existing cave world unchanged (walkability, 64/64 tiles). - Open: collision readiness, a valid full-view timing (viewer captures were occluded/empty; top-down height maps are the only usable pair). Also carries the design doc's owner decisions (fixed water; player edits unrestricted, route law for automatic changes only) and three plugin files + BuildHost scripts that earlier round commits had missed (also fixed on unreal/core-integration as 2574b56). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
12 KiB
World assembler M1 report
M1 has four implementation rounds. The gates at the end of the milestone remain the agreed two-biome SurfaceWorld in the owner's game, including coast, cliff/overhang, cap and a walkable route; conservative bound audits; route sweep; identical evaluator hashes at W1/W8/W16; separate local query/collision readiness and full-view timings; faster matched workload than the 23.085 s legacy bridge; and server field queries that do not depend on render meshes. The approximately 1.57 s whole-view aim (2 × the 0.785 s cave-only Core measurement) is an aim, not an acceptance gate.
Round 1 of 4 — native foundations
- Define the fixed-scale, versioned, hashed recipe and shipped-plan payload, including the Core field-block contract and explicit field channels.
- Add a brute-force interval audit with a deliberately false bound as a negative control.
- Implement the first native
Heightfield2Dblock with biome-map input and compare it with the SurfaceWorld legacy bridge in the standalone viewer. - Record current hashes, timings, audit results and a small owner/native capture pair. This round establishes a heightfield baseline; it does not claim the final two-biome/coast/cliff/route gate.
Round 2 of 4 — complete the surface recipe
- Add output-space biome blending, coast and beach shaping, cap detail, cliffs and bounded 3D overhang exceptions with stable feature IDs and certified influence bounds.
- Keep unknown or intersecting exception intervals on the evaluation path. Expand the brute-force audit across biome borders, cliffs, caps, negative coordinates and exception bounds.
- Measure surface field query cost separately from cave compilation and full-view rendering; tune caches only after the workload and cache identity are fixed.
Round 3 of 4 — route and query readiness
- Ship the finite-strate plan with route points, support constraints and stable IDs. Sweep the actual player capsule over the final composed field and repair/reject any failing candidate.
- Verify W1/W8/W16 evaluator hashes, route clearance/support and deterministic plan serialization.
- Keep the capsule-swept, supported route valid through generation and automatic/scripted changes. Player carve/fill edits are unrestricted and may break or plug the route. Seas and rivers stay fixed for the season, with shore behavior under edits measured separately.
- Report local field-query and collision readiness separately from render mesh readiness, and show a server-side field query path that does not build or require render meshes.
Round 4 of 4 — Unreal delivery and owner review
- Import the reviewed manifest into the season asset/content hash path and connect the native Core
evaluator behind
bUseVoxelForgeCore, preserving the legacy path when the flag is off. - Build only the isolated BuildHost target here; the owner builds the project. Review the two-biome surface and route in-game, then publish matched workload timings, hashes, audit logs and captures.
- Close every M1 gate or name the failed gate, its evidence and the additional repair round needed.
Round 1 results
Deliverables
- Added the public recipe, shipped-plan, hash, channel, block-contract, interval, influence and
detail-envelope types in
Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h. Recipe and evaluator schemas are version 1. All recipe, plan, feature, route and field coordinates use signed 1/256-voxel integers; the plugin's Core voxel remains 25 cm. - Added manifest parse/finalize/validate/serialize and canonical FNV-1a 64 hashing in
Standalone/Core/src/WorldAssemblerInternal.h. Fields hash in declared order as little-endian 4/8-byte words. Hashes are 16 lowercase hex digits; JSON key order and whitespace are ignored. The optional owner-snapshotworld_assemblyfield matches the payload shape planned for the season manifest. The current review artifact isround1-manifest.json; season asset/hash-path integration remains for round 4. - Added native
Heightfield2D: deterministic warped Voronoi biome selection with Q16 border blend, fixed integer profile noise, ground and cap heights, signed density (negative = solid), declared channels, a conservative global interval, unbounded XY/finite-stratum-Z influence and an explicit detail envelope. The current block readsbiomeand writesheightandrock. Water, route and surface-tag channels are declared for later blocks, not yet emitted by this block. - Connected that block to native Core density queries and added the standalone audit/viewer switches.
API.mddocuments the current data format and its limits.
Sample manifest and hashes
The viewer builds a sample from the owner's type_4_SurfaceWorld.json probe: one finite strate
(index 1, chunk Z -16 through -79), two synthetic stable biome IDs (4097 and 4098), no planned
features, and no route points yet. The compact manifest is 972 bytes.
| Content | Hash |
|---|---|
| Recipe | 5cc6cfb49073d366 |
| Plan | 9aa8b4c29a69233a |
| Manifest | c87ae279b0e26f53 |
| Heightfield sample stream, 4096 points | fae2721c052aec5c |
The sample block reports influence Z [-2528, -480] voxels, maximum displacement envelope
247 voxels, and minimum feature size 25 voxels. These prototype ranges are not the final
composer-supported recipe envelope.
Bounds and determinism audit
The brute-force audit tested 256 randomized boxes with a 3×3×3 sample grid per box (6,912 points). It found zero missed bounds and zero unknown bounds. Its deliberately false one-sided interval was rejected, so the negative control passed. This is evidence for the current Heightfield2D implementation and audit path, not a proof for future field blocks or the final cliff/overhang composition.
The 4,096-point evaluator output hash matched at W1, W8 and W16 (fae2721c052aec5c). The timing
scope was point evaluation only: W1 2.059 ms, W8 6.851 ms, W16 12.626 ms. W8 and W16 were slower
on this small batch, likely from thread-startup overhead; no parallel speedup was measured. These
numbers are not a full view or tile benchmark.
Legacy comparison and captures
For the same 4,096 points, the direct legacy density query took 62.115 ms. The prototype's mean absolute density error was 274.0383 voxels, maximum error 841.4257 voxels, with 2,261 sign mismatches (55.2%). The prototype is therefore not yet a parity replacement for the legacy field. The current biome map and two-profile output need further shaping against the reference.
The small top-down pair uses the same 3200-voxel XY span and one color ramp fitted to the observed
owner and native heights together (range [-2273.12, -1410.26] voxels): owner GetSurfaceHeightAt
reference and native Heightfield2D ground height. Each JPEG is below 6 KB.
| Owner reference | Native prototype |
|---|---|
![]() |
![]() |
The pair shows a large visible mismatch; it is a height-map comparison, not an in-game render. A
separate D3D window-backbuffer capture attempt was invalid: both viewer windows reported
DXGI_STATUS_OCCLUDED, the saved backbuffers were black, and the native prototype produced zero
mesh vertices/indices. The reduced diagnostic images were inspected only after downscaling. Do not
use those D3D files as visual evidence.
Query, collision and view readiness
The audit compiled a Core world around the sample heightfield, queried 45 positions through
World::densityAt, and compared them with direct Heightfield2D evaluation. Maximum error was zero;
the sample Core compile took 35.608 ms; no tile mesh was generated
(render_meshes_generated=0). This verifies the local Core field-query path without render meshes
for this sample. It does not yet verify a dedicated-server build or the Unreal adapter.
The no-manifest cave Core path also passed a constrained regression smoke on the existing
type_3_Maze.json fixture: the 5,642-point walkability audit passed, all 27 player-neighborhood
tiles and all 64 requested LOD0 tiles generated, and full-detail readiness was 0.157 s at W16.
The shape compile was 0.100 s. This small 64-tile LOD0 run confirms the additive no-plan path still
works; it is not the 23.085 s matched workload or the 0.785 s cave-only whole-view baseline.
Collision cooking is not available in the standalone audit and was not measured. Full-view time was also not measured by audit mode. Earlier small-view D3D attempt timings (owner 0.236 s, native 0.309 s) are not a valid full-view comparison because presentation was occluded and the native view had no geometry. The 23.085 s matched-workload gate remains open. The ~1.57 s aim remains reasonable, but round 1 has no valid full-view evidence to support or reject it.
Remaining work by round
- Round 2: Match the legacy reference more closely; add output-space biome blending, coast/beach, cap detail, cliffs and bounded 3D overhang features with stable IDs and certified influence bounds. Expand bound audits across borders, caps, negative coordinates and exceptions.
- Round 3: Add the finite-strate capsule route and support constraints, sweep it against the final composed field, and reject or repair any failing automatic plan. Verify full-evaluator W1/W8/W16 hashes. Measure collision readiness separately from query and mesh readiness; demonstrate a headless/server field query without render meshes. Keep the route valid during all automatic changes, leave player edits unrestricted, and keep seasonal water fixed.
- Round 4: Wire the reviewed manifest into the season asset/content-hash path and connect Core
behind
bUseVoxelForgeCore; prove the flag-off legacy path is unchanged. Build only the isolated BuildHost target here. The owner builds and reviews the in-game surface and walkable route. Re-run the matched 23.085 s workload, report full-view and local query/collision readiness separately, and assess the ~1.57 s aim with valid captures.
Run log
- First isolated full build compiled Core and passed the 199,209-line Core link-safety scan, then failed at viewer link: the new inline API symbols were not emitted and the standalone build lacked the GPU Far viewer implementation. No GPU Far source file exists in the standalone set.
- Retry adding the assumed
GpuFarViewer.cppfailed at compile withC1083because that source file is absent. The build was changed to use local CPU-viewer link stubs under ignoredStandalone/Build/AssemblerM1/output; Core remains GPU-free. - The next full standalone build succeeded after moving the new API definitions out of line and
isolating the GPU viewer stubs. Another full build succeeded after adding the height-map capture;
a further build succeeded after adding manifest output; the final full rebuild after marking the
manifest API for Core export also succeeded. The latest full build succeeded after changing the
capture ramp to the observed shared height range. Each successful build took under one minute,
used
/MP16, Normal priority and all 16 allowed CPUs; sampled compiler processes remained well below 8 GB. - Successful builds still print the environment's
'vswhere.exe' is not recognizedmessage and existing C4838 narrowing warnings inVoxelStrateManager.cpp:3974-3975. These did not stop the build. No0xC0000142retry occurred. A separate Git Bashtailinspection command failed with access denied while opening a file; it made no changes. - No BuildHost or owner-project build was run this round. The checked
Saved/BuildHost/HostProject/Saved/Crashes/folder contains one olderUECC-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.

