# Linux 92 report ## Startup timing All Unreal runs were pinned to CPUs 0–11 and had no address-space limit. Medians below use three runs per row. `LOD0–2 settled` means every currently desired LOD0–2 key was in `LoadedTiles` or `CollisionNotRequiredTiles`. | Stratum | Measure | Before | Final | Runs | |---|---|---:|---:|---:| | FI | Snapshot serialization | 491.8 ms | 465.6 ms | 3 / 3 | | FI | `FromJson` | 20.0 ms | 18.9 ms | 3 / 3 | | FI | Compile launch | 0.608 s | 0.569 s | 3 / 3 | | FI | `bReady` | 0.764 s | 0.750 s | 3 / 3 | | FI | BeginPlay end | 0.609 s | 0.570 s | 3 / 3 | | FI | First admission | 0.780 s | 0.762 s | 3 / 3 | | SW | Snapshot serialization | 465.1 ms | 468.0 ms | 3 / 3 | | SW | `FromJson` | 18.9 ms | 19.3 ms | 3 / 3 | | SW | Compile launch | 0.575 s | 0.581 s | 3 / 3 | | SW | `bReady` | 2.738 s | 2.738 s | 3 / 3 | | SW | BeginPlay end | 0.577 s | 0.582 s | 3 / 3 | | SW | First admission | 2.751 s | 2.747 s | 3 / 3 | The final FI first-admission times were 0.761, 0.762 and 0.802 s. SW was 2.795, 2.747 and 2.632 s. These are measured timings; the small before/after differences are not a defensible 0.7 s saving. The exporter still runs synchronously in BeginPlay and measured 466 ms FI / 468 ms SW. Attribution of that time to asset reflection and Core assembly preparation is an inference; the trace measures the enclosing `SerializeResolvedWorld` call. I removed a redundant second parse in `ResolvedWorldSnapshot::FromJson`. Its measured stage stayed around 19 ms, so this cleanup did not materially move first admission. The serialization/parse/compile/bReady trace events are in `Saved/Linux/l92/unreal-arrival/*.trace.jsonl`. Core output stayed identical: world assembly `1ecc162755ab83ac`, recipe `52b010081ad4b550`, plan `a06d76fd11d7a08e`. ## LOD0–2 arrival Times are seconds from BeginPlay start. Before runs used the old `LoadedTiles` count; final runs use the settled predicate above. | Stratum | Before, boost on | Final, boost on | Median before → final | |---|---|---|---:| | FI | 3.464, 3.632, 3.588 | 3.396, 3.395, 3.419 | 3.588 → 3.396 s | | SW | 5.072, 5.183, 5.063 | 5.198, 9.256, 5.060 | 5.072 → 5.198 s | The LOD result improves for FI and has a long SW tail. Baseline SW commandlets exited 1 because readiness rejected `CollisionNotRequired` tiles; all final boost-on SW commandlets exited 0 with the aligned predicate. ## Startup apply boost A/B The 24-apply / 14 ms boost now spans desired-epoch churn and ends on initial LOD0–2 plus collision-set readiness, or the existing 30 s timeout. All boost-on traces ended on readiness. It remained active 2.2–2.5 s in FI and 2.2–6.4 s in SW. | Stratum | Boost on | Boost off | Readout | |---|---|---|---| | FI | 3.396, 3.395, 3.419 s (median 3.396) | 3.490, 3.681, 3.460 s (median 3.490) | 94 ms faster on | | SW | 5.198, 9.256, 5.060 s (median 5.198) | 5.053, incomplete, 5.045 s | No demonstrated gain; one off run did not fully settle by 20 s | ## Empty collision cache and movement Known-empty LOD0 classifications persist across unloads within the current modification epoch, are restored on desired-set rebuilds, and are cleared for affected tiles in both modification paths. The commandlet readiness checks now accept `LoadedTiles` or `CollisionNotRequiredTiles` and separately require the collision desired set to settle. The policy-3 30 m/s Unreal trace passed: process and Core world test exited 0, with 46 moving samples and 105 dwell samples. Moving means were 5.568% far holes and 24.709% near readiness; dwell ended at 0% far holes and 100% near readiness. For each target key `(47,-2,-99..-102)`, the trace logged one empty classification, one request/tile result and one unload-preserve event; there were no repeated tile requests. The Core edit integration test passed. No cached-empty key was edited in these traces, so runtime `tile_data_changed` invalidation was not observed; that path is wired and per-key traced in source. ## Builds, verification and failed runs - Final Linux UE build succeeded with `-NoUBA -MaxParallelActions=4`, pinned to CPUs 0–11, without `--as`. Log: `Saved/Linux/l92/unreal-build-final-direct-json.log`. - Final fast tier passed: 274 checks in 288.4 s. Headless build and verification were pinned to CPUs 0–11 and limited to 6 GiB. Logs: `Saved/Linux/l92/fast-build-final.log`, `Saved/Linux/l92/fast-tier-final.log`. - The first fast-tier launch stopped immediately because its stamped binary was missing; the built-binary rerun passed. - Baseline SW commandlets failed the old readiness predicate despite usable arrival samples. One initial SW trace also reached movement before full residency; it was rerun with a 20 s hold. The final SW boost-off repeat 2 remained two LOD0 tiles short at the hold boundary and is reported as incomplete, not assigned an arrival time. - A temporary route-candidate prefilter produced a much shorter export trace, but it touched passage route planning. It was removed; those timings are excluded. The final worktree does not modify the passage composer. - No run exceeded 30 minutes. No commit, push or stash was made. ## Source files - `Source/VoxelForge/Private/VoxelWorld.cpp` - `Source/VoxelForge/Public/VoxelWorld.h` - `Source/VoxelForgeEditor/Private/VoxelForgeExploreCommandlet.cpp` - `Standalone/Core/src/VoxelForgeCore.cpp`