# Linux150 — cave planner merge evidence **Result:** `assembler/world` merges cleanly into `wip/l134-cave-planner`. The planner HEAD passes 15/16 seeds for each cave layer; seed 2 retains its known shell/seam failure. Linux Unreal start and movement runs completed. L80 shows slower near-ready medians in six of eight cells, while whole-view medians are lower in seven of eight cells. No generation code changed in L150. Branch HEAD was `b8382eed`; target `assembler/world` was `eb47d722`. The UE baseline project uses `c743f2a`, code-equivalent to the target. The planner source stamp is `c6b8a100355e271ddc40eb5973569d2ff4e2ba8d9c628c72f8e0af2493f0609f`; the `assembler/world` baseline binary stamp is `4499fb2a8a4ede7d6cbc68d1b794f104658cdaae93ed9cacbc91fe7ff3fc3621`. ## Evidence table L80 used one warm-up per binary and five interleaved measured runs per cell at W8/W12 across all four owner layers. The quiet-host gate passed at load 0.50 and 99.3% CPU idle. The L137 A/A floor is ±1%. Time deltas are planner HEAD versus `assembler/world`; positive means slower. UE start rows are one L121 start per stratum and build, measuring start through the full LOD0–2 set. Movement rows are medians over five interleaved L127 runs at 30 m/s (12 s moving plus 5 s dwell, eight effective tile slots). Coverage and hole figures describe the moving window. For L80, S0–S3 are Surface World, Floating Islands, Tunnel Network, and Vertical Shafts. | Measure | assembler/world | planner HEAD | Delta / result | |---|---:|---:|---:| | UE start → LOD0–2, S0 (512/448/448 tiles) | 2.453159 s | 2.481646 s | +1.16% | | UE start → LOD0–2, S1 (512/448/256 tiles) | 2.424691 s | 2.206180 s | −9.02% | | UE start → LOD0–2, S2 (513/448/384 tiles) | 2.454927 s | 2.477987 s | +0.94% | | UE start → LOD0–2, S3 (513/448/384 tiles) | 2.216523 s | 2.459258 s | +10.95% | | 30 m/s near-ready moving mean | 44.2432% | 38.5307% | −5.71 pp (−12.91% relative) | | 30 m/s far-hole moving mean | 3.2596% | 3.3208% | +0.0611 pp (+1.88% relative) | | 30 m/s game-thread tick p99 | 10.7288 ms | 10.9596 ms | +2.15% | | 30 m/s median per-run worst tick | 13.5996 ms | 14.4242 ms | +6.06% | | 30 m/s worst tick observed across five runs | 14.9833 ms | 14.6717 ms | −2.08% | | L80 S0 near-ready median, W8 / W12 | 0.737599 / 0.768684 s | 0.775814 / 0.829089 s | +5.18% / +7.86% | | L80 S0 whole-view median, W8 / W12 | 1.737 / 1.705 s | 1.711 / 1.705 s | −1.50% / 0.00% | | L80 S1 near-ready median, W8 / W12 | 1.006966 / 0.974332 s | 1.021554 / 1.029940 s | +1.45% / +5.71% | | L80 S1 whole-view median, W8 / W12 | 1.907 / 1.812 s | 1.803 / 1.803 s | −5.45% / −0.50% | | L80 S2 near-ready median, W8 / W12 | 1.044179 / 0.959096 s | 1.039310 / 1.026140 s | −0.47% / +6.99% | | L80 S2 whole-view median, W8 / W12 | 1.913 / 1.751 s | 1.821 / 1.733 s | −4.81% / −1.03% | | L80 S3 near-ready median, W8 / W12 | 0.875773 / 0.838977 s | 0.852260 / 0.853215 s | −2.68% / +1.70% | | L80 S3 whole-view median, W8 / W12 | 1.788 / 1.687 s | 1.660 / 1.605 s | −7.16% / −4.86% | | Tunnel Network composed sweep | — | 15/16 | Seed 2: passages, seams, shell | | Vertical Shafts composed sweep | — | 15/16 | Seed 2: passages, seams, shell | | Seed-0 capture quality | 1/4 pass | 4/4 pass | All exports/renders completed; three baseline viewpoints have no visible mesh surface | Both moving runs reached 100% near-ready coverage and 0% far holes by dwell end (3.40 s baseline, 3.78 s HEAD). The five-run maximum tick was lower on HEAD, while its median of per-run maxima was higher. For both sweeps, every gate other than the three seed-2 checks passed, including dispatch, route, naturalness, mouth, ripple, interior air, and negative controls. The seed-2 failure is the known interface 2–3 shell/seam failure. ## Owner-world captures Four eye-height viewpoints use the same camera coordinates for both versions. Poses come from the planner layout resolved against the owner fixture’s embedded Core plan at seed 0. The capture layout identity is `cc87ee727c483039` on planner HEAD and `0589300eb07dfe06` on the baseline. The seed sweeps use the established `--seed=0` regeneration path (layout identity `d310515572977ebf`); the captures intentionally use the owner fixture’s embedded Core plan. For the baseline, a seed override makes the older route setup fail, so the capture runner imports the saved plan without an override. The planner images pass the capture-quality gate. Three baseline images fail its image-variance threshold because the baseline mesh has no visible surface from those exact poses; export and render processes succeeded. | View | assembler/world | planner HEAD | |---|---|---| | Tunnel Network — route joint | ![assembler/world route joint](captures/assembler-world-tunnel-network-route.jpg) | ![planner HEAD route joint](captures/planner-head-tunnel-network-route.jpg) | | Tunnel Network — departure joint | ![assembler/world departure joint](captures/assembler-world-tunnel-network-departure.jpg) | ![planner HEAD departure joint](captures/planner-head-tunnel-network-departure.jpg) | | Vertical Shafts — looking down | ![assembler/world shaft looking down](captures/assembler-world-vertical-shafts-looking-down.jpg) | ![planner HEAD shaft looking down](captures/planner-head-vertical-shafts-looking-down.jpg) | | Vertical Shafts — looking up | ![assembler/world shaft looking up](captures/assembler-world-vertical-shafts-looking-up.jpg) | ![planner HEAD shaft looking up](captures/planner-head-vertical-shafts-looking-up.jpg) | Capture source stamps, coordinates, and quality output are in [`captures/manifest.json`](captures/manifest.json). The runner is [`RunL150Captures.py`](RunL150Captures.py). ## Merge risks - Seed 2 fails the passage, seam, and shell checks in both cave-layer sweeps. Other current sweep gates pass. - Near-ready L80 time is above the ±1% floor in six of eight cells. S0 W8/W12 and S1 W12 have the largest regressions; whole-view time is lower in seven cells and unchanged in one. - During 30 m/s movement, HEAD has 12.91% lower near-ready coverage, 1.88% more far holes, 2.15% higher tick p99, and a 6.06% higher median per-run worst tick. Both builds fill near coverage and far holes during dwell. - Three baseline captures cannot show an exposed mesh at the corresponding underground camera positions. The planner views render and pass image quality. - Seed sweeps and owner-world captures both use seed 0, but use the regenerated standalone plan and embedded owner Core plan respectively; the images describe the owner-export plan path. - The merge adds one Unreal `Source/` change for the owner’s Windows compile: `Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp` (5 insertions, 3 deletions; 8 changed lines). ## Checks and artifacts - Merge check: clean in `Saved/Linux/l150/merge-worktree`; no unmerged paths and no merge commit. Details and hashes: [`merge-check.md`](../../../../Saved/Linux/l150/merge-check.md). - Linux `VFHostEditor` Development build passed with `-NoUBA -MaxParallelActions=4` (27 actions, 68.79 s). It emitted three existing deprecated RenderMeshComponent API warnings in `VoxelWorld.cpp`; [build log](../../../../Saved/Linux/l150/ubt-console.log). - L80: 80 measured runs plus warm-ups; [summary](../../../../Saved/Linux/l150/timing/summary.json) and per-run logs are under `Saved/Linux/l150/timing/`. - Linux Unreal: four L121 starts per build and five interleaved L127 movement runs per build; [summary](../../../../Saved/Linux/l150/ue/summary.json) and run logs are under `Saved/Linux/l150/ue/`. - Tunnel Network and Vertical Shafts sweeps: 16 seeds each; [Tunnel Network summary](../../../../Saved/Linux/l150/seeds/tunnel-network/summary.json), [Vertical Shafts summary](../../../../Saved/Linux/l150/seeds/vertical-shafts/summary.json), and per-seed logs under `Saved/Linux/l150/seeds/`. - The fast tier was not rerun in L150. L147 passed it on the same standalone source stamp (`c6b8a100…f0609f`); no generation source changed here. A Windows UE build was not run.