# L172 — repair the UE harness and restore level refill **Result:** The scheduler now keeps the full stable candidate order and refills a level when a slot opens during its pass. The UE harness uses all three links from one tree and rejects mixed DWARF layouts. The 10-pair decision passed, so early admission is now the default. The final default-on UE build and fast tier passed. ## L171 findings and harness The reviewer’s mixed-build diagnosis matches the saved evidence. L171’s A/A warm-up logged `surface_strates=1`, then `858993460` (`0x33333334`) before throwing `std::length_error: vector`. Its `aa-build-1.log` has only two link actions and no `Compile VoxelWorld.cpp`; the staged `aa-build-1`, `aa-build-2`, and `l170-head-off` plugin binaries contain the L170-only `initial_arrival_set_settled` and `tile_apply_deferred` UTF-16 strings, while the saved `ca0bf76` binary does not. The L171 DWARF inspection showed `WorldAssemblyStratumPlanV1` as 600 bytes in the stale `VoxelWorld.cpp.o` and 480 bytes in the adapter and Core shim. This is consistent with the vector corruption being an ABI mismatch. At L172 start, `Source`, `Standalone`, and `VoxelForge.uplugin` in `VFHost/PluginDeps/VoxelForge` all resolved to the main checkout on `wip/l141-liminal`. Earlier round reports document restoring `Source` alone. L172 switches all three links together and asserts their common root. Each run manifest records that root’s `HEAD` and `git status --porcelain`. The `ca0bf76` comparison used a fresh detached `git worktree` with its own `Source` and `Standalone`; it built `VoxelWorld.cpp`, passed the 480/480/480-byte DWARF gate, and ran the owner world in its warm-up and all ten pairs. Fixed-tree builds also compiled `VoxelWorld.cpp` and passed the same gate. All three VFHost links were restored to the main checkout after the last build and run. ## Scheduler change `VoxelWorld.cpp` no longer sorts only the pass-start free-slot prefix and truncates `LevelTiles`. It stable-sorts the complete level and checks current capacity as each candidate is admitted. This preserves full-sort order and lets the same level refill when work completes mid-pass. The regression test frees a slot after the first submission, checks the submitted sequence against the full-sort order, and includes the old partial-sort/truncation path as a negative control. The frame-resolution arrival is the first `scheduler_admission` frame with both `desired_missing_by_lod[0:3]` and `pending_by_lod[0:3]` summing to zero. Re-scoring saved L169 and L170 traces gives paired median deltas of **+48.762 ms** and **+60.475 ms** respectively; each candidate was slower in all 7 pairs (14/14 combined). The 0.25 s `streaming_sample` arrival had obscured this difference. ## L172 movement results Runs used the same fixed binary for both CVar arms, 30 m/s, one warm-up per arm, and ten counterbalanced pairs per batch. The measured movement window was 12 s (first moving samples near 6.05 s, stop near 18.02 s). The trace continued through 45.00 s after movement; those post-move samples were excluded from movement metrics. The pre-run load was 0.45 / 1.43 / 2.00 (1/5/15 min), with no UE or build process running. The harness reported eight effective tile slots. | Check | Result | | --- | ---: | | A/A absolute paired-delta p90 | 36.815 ms | | Fixed-off slower than true `ca0bf76` | 6/10 pairs (stop rule: 8/10) | | Fixed-on minus fixed-off arrival, paired median | −12.203 ms | | Fixed-on slower on arrival | 4/10 pairs | | Arrival tolerance | 36.815 ms | | Near readiness change, fixed-on vs fixed-off | +11.951 pp (55.276% vs 43.325%) | | Near readiness change, fixed-on vs `ca0bf76` | +12.457 pp (55.276% vs 42.820%) | | Far-hole change, fixed-on vs either control | −1.800 pp (0.000% vs 1.800%) | | Fixed-on maximum p99 / worst tick | 7.460 / 12.305 ms | | Maximum p99 / worst tick across both on/off arms | 7.460 / 13.266 ms | All decision gates pass. For the CVar promotion, movement gates use the fixed-on treatment against fixed-off, and the fixed-on arm also clears the L169-relative near/far gates against `ca0bf76`. The A/A and true-baseline runs are measurement controls, not the promotion treatment; the baseline control contained one 16.7 ms worst-tick outlier. Both on/off arms stayed below 14 ms. The per-pair traces, manifests, summaries, and decision are in `Saved/Linux/l172/ue/`. The default-on smoke run omitted both command-line CVar overrides. Its backend readback was wait=0 and apply budget=1.0 ms; frame arrival was 1.500 s, p99 6.971 ms, and worst tick 13.052 ms. ## Defaults, checks, and limits | CVar | Final default | | --- | ---: | | `voxel.StreamingFastTravelWaitForAllCriticalTiles` | 0 | | `voxel.StreamingFastTravelApplyBudgetMilliseconds` | 1.0 ms | | `voxel.CoreRegionConcurrentAdmission` | 1 | | `voxel.StreamingIncrementalDesiredSet` | 1 | | `voxel.StreamingFastTravelForwardFirst` | 0 | | `voxel.StreamingRebuildOnCoreRegionCompletion` | 1 | | `voxel.StreamingCoreDesiredCacheByCenter` | 0 | | `voxel.StreamingIncrementalDesiredAuditEvery` | 0 | | `voxel.StreamingIncrementalDesiredMaterializationAuditEvery` | 0 | | `voxel.StreamingIncrementalDesiredAuditInjectMismatch` | 0 | - Fast tier: **PASS**, 269 checks and 5 non-gating diagnostics, 284.7 s. The new mid-pass refill regression and owner W1/W8/W12 determinism checks passed. - Final default-on VFHost build: **PASS**, 150.58 s; `VoxelWorld.cpp` compiled and the DWARF sizes were 480/480/480 bytes. - Default-on owner-world smoke: **PASS**, 52.33 s. Saved L169/L170 rescoring, all three 10-pair batches, runner syntax compilation, and `git diff --check` passed. - Two failed preflight launches were excluded: UE first inherited the standalone 6 GiB address-space limit, then the runner used an export path outside the plugin Saved directory. An initial fixed-off warm-up produced a valid trace but exposed an overstrict latch assertion; the check was corrected and the final warm-up and measured pairs passed. None of these launches contributed paired timing values. - UE W12 movement was not run; the harness exposes eight effective tile slots. The timing experiment covers the owner four-stratum plan under Null RHI. Changed Unreal `Source/` files: - `Source/VoxelForge/Private/VoxelWorld.cpp` - `Source/VoxelForge/Private/VoxelStreamingAdmissionOrder.h`