Switches verified inactive before first settlement; moving gains hold (near 43.7 -> 55.5%, far holes 1.8 -> 0%, p99 7.21 -> 6.48 ms, worst 12.32 -> 12.27 ms). Arrival median +1.28% (4/7 pairs slower) though the switches did no work then; defaults remain off (WaitForAllCriticalTiles=1, ApplyBudget=0). Source/: VoxelWorld.cpp, VoxelWorld.h. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
56 lines
4.6 KiB
Markdown
56 lines
4.6 KiB
Markdown
# L170 — Gate early admission on settled arrival
|
||
|
||
**Result:** The initial-arrival latch works: fast-travel admission and its 1 ms apply budget stayed inactive until the LOD0–2 desired set and required collision set settled, then became active during 30 m/s movement. Promotion still fails the arrival gate, so the source defaults remain off. The candidate was 1.282% slower on the per-condition arrival medians and was slower in four of seven pairs.
|
||
|
||
## First-arrival census
|
||
|
||
The UE matrix used seven interleaved W8 pairs against `assembler/world` `ca0bf76`, 30 m/s, 12 seconds of movement plus 5 seconds of dwell, and one excluded warm-up per binary. The candidate binary was compiled with the two early-admission defaults on; there were no CVar command-line overrides. Its raw first-settled LOD0–2 median was 1.691450 s versus 1.670039 s for baseline (+21.411 ms, +1.282%). The median paired delta was +12.176 ms; the candidate was not slower in only three pairs. Times from the first streaming sample to settlement had medians 1.2965 s and 1.3132 s respectively.
|
||
|
||
I counted startup-window trace timers from each run's first streaming sample through its first settled LOD0–2 sample. Candidate fast-travel mode was active in zero pre-settlement scheduler samples, and its apply budget remained at the normal 2 ms. During that same window:
|
||
|
||
- Level candidate scanning summed to 2.896 ms baseline and 3.758 ms candidate (paired median delta +0.895 ms). Partial level sorting fell from 2.195 ms to 0.727 ms (−1.452 ms paired median).
|
||
- Desired rebuild totals were effectively unchanged: 3.046 ms versus 3.047 ms per window (paired median delta −0.035 ms). The candidate spent 0.149 ms in its transition-index phase; the baseline has no matching phase.
|
||
- Result-drain time was 127.986 ms versus 131.521 ms (paired median delta +5.001 ms). Apply time was 121.509 ms versus 125.095 ms (+5.416 ms paired median), while the candidate had applied 10 fewer meshes by settlement at the paired median.
|
||
|
||
These timers locate the largest measured difference in result draining and apply work, but they do not isolate why that work costs more; some phase timers may overlap and should not be added. The early-admission switches themselves did no work before settlement, so the census does not attribute the remaining arrival regression to those switches.
|
||
|
||
## Movement results
|
||
|
||
Medians over the seven 30 m/s moving windows:
|
||
|
||
| Metric | `ca0bf76` | Candidate | Change |
|
||
|---|---:|---:|---:|
|
||
| Near LOD0–2 readiness | 43.65% | 55.46% | +11.82 pp |
|
||
| Forward-cone readiness | 15.79% | 18.69% | +2.90 pp |
|
||
| Far holes | 1.80% | 0.00% | −1.80 pp |
|
||
| Tick p99 | 7.214 ms | 6.476 ms | lower |
|
||
| Worst tick | 12.315 ms | 12.272 ms | lower |
|
||
|
||
All runs met p99 ≤ 11 ms and worst tick ≤ 14 ms; the largest observed values across both conditions were 7.281 ms and 12.881 ms. Candidate fast-travel mode and the 1 ms budget were active in every moving run. The movement gains met the L169-relative gates; only the two arrival gates failed.
|
||
|
||
## Defaults and checks
|
||
|
||
| CVar | Final source default | Candidate test default |
|
||
|---|---:|---:|
|
||
| `voxel.StreamingFastTravelWaitForAllCriticalTiles` | 1 | 0 |
|
||
| `voxel.StreamingFastTravelApplyBudgetMilliseconds` | 0 ms | 1 ms |
|
||
| `voxel.StreamingIncrementalDesiredSet` | 1 | 1 |
|
||
| `voxel.StreamingFastTravelForwardFirst` | 0 | 0 |
|
||
| `voxel.StreamingRebuildOnCoreRegionCompletion` | 1 | 1 |
|
||
| `voxel.StreamingCoreDesiredCacheByCenter` | 0 | 0 |
|
||
| `voxel.StreamingIncrementalDesiredAuditEvery` | 0 | 0 |
|
||
| `voxel.StreamingIncrementalDesiredMaterializationAuditEvery` | 0 | 0 |
|
||
| `voxel.StreamingIncrementalDesiredAuditInjectMismatch` | 0 | 0 |
|
||
|
||
- VFHost UE Linux Development builds passed for the candidate-on measurement binary and final defaults-off source (`-NoUBA -MaxParallelActions=4`); three existing deprecated RealtimeMesh API warnings remain.
|
||
- `Standalone/Tools/verify/verify.py fast` passed on the final source in 280.7 s: 268 passes, zero failures, five non-gating hash-baseline diagnostics. Worker-count determinism checks passed.
|
||
- The L170 movement runner completed all seven pairs. Its exit was nonzero only because the two arrival promotion gates failed. Runner AST parsing and `git diff --check` passed.
|
||
- UE W12 movement timing was not run; the VFHost procedure reported eight effective tile slots. Fast-tier W1/W8/W12 determinism checks ran.
|
||
|
||
No geometry or evaluator code changed. Remaining risk is the unexplained arrival regression in result-drain/apply work; promotion should wait for a measurement that isolates that cost.
|
||
|
||
Changed Unreal `Source/` files:
|
||
|
||
- `Source/VoxelForge/Private/VoxelWorld.cpp`
|
||
- `Source/VoxelForge/Public/VoxelWorld.h`
|