Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux65/REPORT.md
T
Fr0zkaandClaude Opus 5.5 47148e0a0d build: VoxelForge compiles in Unreal 5.7 on Linux (L65); Linux-only Unreal trace timing fields
Linux UE builds failed on the Core wrapper module: the Linux-only PerModuleInline.gen.cpp saw Standalone/Compat
shadow headers instead of the engine's, and WITH_EDITOR was redefined under -Werror. Compat headers now forward
to the engine headers with include_next for generated Linux module TUs (canonical Core TUs opt into the Compat
definitions via CoreNamespacePreamble.h); CoreMinimal.h undefines WITH_EDITOR first. VoxelForgeCore.Build.cs
enables that forwarding and AVX2 on Linux only; VoxelForge.Build.cs disables Unity on Linux only. Portability:
std::int64_t consistently in VoxelContentManager.cpp; grouped &&/|| in VoxelRedefinedDensityField.cpp. Linux-only
trace fields split Core generateTile / mesh copy / RMC stream build. Standalone Clang and GCC whole-view hashes
are unchanged vs 3202193. The Unreal spawn trace is blocked by the owner's new assets (SW route sweep fails).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
2026-10-26 19:19:07 +01:00

7.4 KiB
Raw Blame History

Linux65 report

Date: 2026-10-26. No commit, push, or stash was made. The pre-existing untracked Linux18/exports/ was left alone.

Linux Unreal build

UE 5.7.4 / bundled Clang 20 builds pass with zero errors. The clean HEAD build completed 78 actions in 93.54 s; L14 (a176d07) completed 157 actions in 170.69 s. Final incremental builds after the Linux-only trace timing guards also pass. Logs are Saved/Linux/l65/head-build5.log, l14-build1.log, head-build-final.log, and l14-build-final.log.

Builds used CPUs 0–11, a 6 GiB RSS limit, at most 8 actions, AVX2, and -NoUBA. UBA stalled before starting compiler actions. Three existing RMC deprecation warnings remain: two RemoveSectionGroup calls and one CreateSectionGroup call in VoxelWorld.cpp.

Fixes:

  • The Compat wrappers now forward to UE headers with include_next for generated Linux module TUs. CoreNamespacePreamble.h opts canonical Core TUs into the Compat definitions. CoreMinimal.h undefines WITH_EDITOR before defining the standalone value.
  • VoxelForgeCore.Build.cs enables that forwarding and AVX2 only on Linux. VoxelForge.Build.cs disables Unity only on Linux to avoid duplicate anonymous test helpers.
  • VoxelContentManager.cpp uses std::int64_t consistently; VoxelRedefinedDensityField.cpp groups the mixed &&/|| expression.
  • Linux-only trace fields measure Core generateTile, mesh copy, and RMC stream-set construction. The PLATFORM_LINUX guards keep Windows worker behavior and trace JSON unchanged.

Files changed for the owner's Windows build review

All Source/ changes:

  • Source/VoxelForge/Private/VoxelContentManager.cpp
  • Source/VoxelForge/Private/VoxelRedefinedDensityField.cpp
  • Source/VoxelForge/Private/VoxelStartupTrace.cpp
  • Source/VoxelForge/Private/VoxelWorld.cpp
  • Source/VoxelForge/Public/VoxelStartupTrace.h
  • Source/VoxelForge/Public/VoxelWorld.h
  • Source/VoxelForge/VoxelForge.Build.cs
  • Source/VoxelForgeCore/VoxelForgeCore.Build.cs

All changed Standalone/Compat headers:

  • AssetRegistry/AssetData.h, AssetRegistry/AssetRegistryModule.h
  • Async/ParallelFor.h, CoreMinimal.h
  • Dom/JsonObject.h, Dom/JsonValue.h, Engine/DataAsset.h, GameplayTagContainer.h
  • HAL/CriticalSection.h, HAL/Event.h, HAL/FileManager.h, HAL/IConsoleManager.h, HAL/PlatformProcess.h, HAL/PlatformTime.h
  • Json.h, Math/RandomStream.h
  • Misc/CommandLine.h, Misc/Crc.h, Misc/FileHelper.h, Misc/Parse.h, Misc/Paths.h, Misc/ScopeLock.h, Misc/ScopeRWLock.h, Misc/SecureHash.h
  • Modules/ModuleManager.h, ProfilingDebugging/CpuProfilerTrace.h
  • Serialization/CustomVersion.h, Serialization/JsonSerializer.h, Serialization/JsonWriter.h, Stats/Stats.h
  • Templates/SubclassOf.h, Templates/UniquePtr.h
  • UObject/EnumProperty.h, UObject/FieldIterator.h, UObject/Object.h, UObject/UObjectGlobals.h, UObject/UnrealType.h

Also changed: Standalone/Core/src/CoreNamespacePreamble.h.

Unreal spawn trace

The U1 trace is Tools/TestVoxelForgeCoreWorldHost.ps1 -TimeoutSeconds 900 -CoreVoxelSizeCm 25 -StreamingTraceOnly. It runs UnrealEditor-Cmd -run=VoxelForgeExplore with -coreworldtest=1, -coreworldstreamtrace=1, /Game/VoxelForge/DA_Settings.DA_Settings, seed 0, 25 cm Core voxels, 600 cm/s movement, and the Legacy/default streaming flags. It creates a transient UWorld; no map is loaded.

The exact pre-U2 owner packages are unavailable in this Linux workspace. Both hosts used identical copies of the five current /home/jahni/VoxelM/DA_*.uasset files (post-U2), with matching SHA-256s in both projects:

Asset SHA-256
DA_Settings 8abe8243104980260feca0a6f4cf4927768e8e568221a6f6a2c2694f6d15d454
DA_Strate1 a9ca6cddd102250a893e379350b1d0f4aaf04c4f7fca70e0db46052a067d2cfb
DA_Strate2 8f9a12a3181635149e6f79f192e0ddaf6b6577442ee324071a7749dcc78b9a0c
DA_Strate3 5470d538c3c5e88237463e71bca9e2eb170dfe3a0543c0f33298d9fb010fd2f9
DA_Strate4 a98e33e1cd42f374d6cb70f5071e8ebba74d91ed59d2fd3201782dab84d28f5c

The minimal host lacked the two First Person Blueprints used by the commandlet's speed fixture. Stock UE template copies also lacked a valid sprint graph, so the isolated trace build trees used the test's established 600/6000 speed defaults only for -StreamingTraceOnly; no tracked source was changed for this workaround. The trace loop itself takes its 600 cm/s movement value from the command line.

Measure L14 HEAD (e157847)
Tiles per LOD Not reached Not reached
Cells per tile Not reached Not reached
Initial worker-seconds Not reached Not reached
LOD0 tile worker p50 / p95 Not reached Not reached
Full initial set ready Not reached Not reached
Walkable ring count / ready time Not reached Not reached
generateTile / mesh copy / RMC stream build Not reached Not reached

Both commandlets stop before spawning AVoxelWorld with the same error: SurfaceWorld route candidates failed the capsule and support sweep. No tile trace file was produced. Thus this run cannot identify the Windows worker-time regression or separate Core generation from Unreal packaging. The failure is consistent across L14 and HEAD, but whether the post-U2 asset set or the route audit itself is responsible is unresolved; no fix is justified from this run.

L14 was exported from a176d07 to the requested Saved/Linux/l65/l14tree/Plugins/VoxelForge. The sandbox did not permit creating the sibling /home/jahni/VFHostL14, so its second host project is nested at /home/jahni/VFHost/VFHostL14/VFHostL14.uproject. The supplied /home/jahni/VFHost/VFHost.uproject was restored byte-for-byte after testing. RealtimeMeshComponent's original source tree was not modified.

Failed runs

  • Initial builds hit a read-only UBT config path, then a read-only RMC intermediate timestamp, then a UBA stall. The next compile found Linux Unity duplicate test helpers; disabling Unity on Linux fixed it. A final incremental attempt made after restoring the original host descriptor again hit the RMC read-only timestamp; rebuilding with the local RMC copy passed.
  • Two early trace launches rejected an output directory outside the host project. The next launch stopped on the absent staged character Blueprint. Stock UE template Blueprints then failed to provide a sprint value; the trace-only defaults got past that gate. Both final revisions then stopped at the identical SurfaceWorld route audit above.

There were 12 build invocations, within the 15-attempt Part A limit.

Orchestrator review (Claude)

Accepted. The Linux UE build compiles VoxelForge with 0 errors (HEAD and L14). I checked that the Compat and Source/ changes don't alter Core output: standalone Clang and GCC rebuilds produce identical whole-view hashes to 3202193 on the pre-U2 data, for both SW and FI. The RealtimeMeshComponent tree is unmodified: its 203 git "M" entries are CRLF-only (empty diff with whitespace and CR ignored, no file newer than this round outside Intermediate/Binaries). The Unreal trace is blocked for both L14 and HEAD by the owner's new assets: SurfaceWorld route candidates failed the capsule and support sweep before AVoxelWorld spawns (consistent with L64: SW route 24/33 unsupported). The verify.py tiers still assume the old two-strate owner data and fail on the U2 export; they need a pinned regression dataset plus new-plan baselines. Source/ files to include in the owner's next Windows build are listed above.