diag: corrected passage-off ceiling + cold worker/tile timelines (L87); passages ARE the gate

L86's switch left ApplyResolvedStratePassageCarves running (near-tile service unchanged at ~21
worker-s), so its "no change" ceiling was wrong. Corrected (bands + carves off): FI LOD0-2
2.34 -> 0.66 s, whole 3.47 -> 1.49 s @W12; TN 2.27 -> 0.74 / 3.28 -> 1.52 s. Near-tile service
15.6-22.5 -> 2.6-3.8 worker-s. Critical chain: shape/base compile -> LOD0-1 -> far-parent build
(107-153 ms, pipeline thread) -> LOD2. Workers 81-85% busy in the direct window.
No production scheduling change; hashes equal L85. Fast tier PASS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-10-28 03:07:30 +01:00
1 parent 4f5f6667ae
commit 0fe7f371f7
8 files changed
+797 -20

No files matched your search

@@ -0,0 +1,67 @@
# Linux 87 — LOD0–2 readiness
## Finding
The L86 passage ceiling was not actually passage-off. Its flag stopped passage feature indexing and boundary bands, but `ApplyResolvedStratePassageCarves` still ran. L86 W12 near-tile worker service stayed at about 21.0 worker-s for FI and 20.5 worker-s for TN, consistent with its unchanged readiness.
With the diagnostic corrected to skip both boundary bands and passage carves, LOD0–2 readiness fell from 2.27–2.43 s to 0.66–0.74 s. Near-tile worker service fell from 15.6–22.5 worker-s to 2.6–3.8 worker-s across these runs. The corrected ceiling also removes boundary-band work, so its service reduction is broader than the L77 census's 58% passage attribution and is not a like-for-like percentage.
The secondary scheduling gate is real: far-parent construction runs synchronously on the pipeline thread after LOD0–1 drains. It took 107–153 ms in these traces. LOD2 was queued within 0.01 ms of that build ending. The near generated-ready to pipeline-drained mark gap was 0.2–5.2 ms; the standalone headless readiness path has no collision wait. Shape/base compile begins about 60–80 ms from cold start, just after the desired-set request, and ends at the compile times in the table.
## Worker timeline
Times are milliseconds from cold start. One traced run is shown for each camera, worker count and mode. “Busy/idle” is the worker-pool share of the requested-to-LOD0–2-drained window; idle means explicit worker wait intervals.
| Window | Mode | Base compile end | LOD0–1 drained | Far-parent build | LOD2 queued | LOD2 drained | Busy / idle |
|---|---|---:|---:|---:|---:|---:|---:|
| FI W8 | direct | 286 | 2,093 | 114 | 2,207 | 2,365 | 84.6% / 15.2% |
| FI W8 | passage off | 234 | 533 | 112 | 644 | 675 | 52.3% / 47.1% |
| FI W12 | direct | 340 | 2,085 | 109 | 2,194 | 2,344 | 82.8% / 17.0% |
| FI W12 | passage off | 244 | 528 | 136 | 664 | 699 | 47.9% / 50.8% |
| TN W8 | direct | 332 | 1,993 | 112 | 2,104 | 2,426 | 83.2% / 16.6% |
| TN W8 | passage off | 278 | 569 | 111 | 680 | 728 | 49.4% / 49.9% |
| TN W12 | direct | 341 | 1,788 | 107 | 1,895 | 2,186 | 80.8% / 18.8% |
| TN W12 | passage off | 273 | 547 | 153 | 701 | 763 | 44.9% / 53.8% |
The critical chain is shape/base compile → LOD0–1 tile work → far-parent build → LOD2 queue and tile work → final tile publication/drain. The LOD0–1 queue is admitted after shape compilation; admission calls take about 1–2 ms. In passage-off traces, the freed worker slots are mostly idle: non-near work accounts for at most 1.4% of the window, so far LODs do not absorb the capacity before near readiness.
Other hypotheses: shape compilation took about 0.23–0.33 s in direct traces and 0.18–0.22 s passage-off. No separate admission-cap stall appears in the event sequence. The readiness marks differ by only a few milliseconds after generation. These cold runs use a stationary camera, so L80 movement hysteresis and arrival-burst behavior were not exercised.
The CSVs contain each traced near tile's requested, admitted, started, finished, published and drained times, plus each worker's busy and idle intervals: [tile-lifecycle.csv](../../../../Saved/Linux/l87/timeline/final-hashsafe/tile-lifecycle.csv), [worker-intervals.csv](../../../../Saved/Linux/l87/timeline/final-hashsafe/worker-intervals.csv), [worker-utilization.csv](../../../../Saved/Linux/l87/timeline/final-hashsafe/worker-utilization.csv). The lifecycle file has 10,240 tile rows across the eight traces.
## Readiness
Medians of three measured runs after one warmup per window, mode and worker count. Each run completed the expected near and whole tile counts.
| Stratum | Workers | Mode | LOD0–2 ready (s) | Whole view ready (s) |
|---|---:|---|---:|---:|
| FI | 8 | direct | 2.379 | 3.604 |
| FI | 8 | passage off | 0.677 | 1.631 |
| FI | 12 | direct | 2.343 | 3.465 |
| FI | 12 | passage off | 0.663 | 1.486 |
| TN | 8 | direct | 2.426 | 3.482 |
| TN | 8 | passage off | 0.727 | 1.585 |
| TN | 12 | direct | 2.271 | 3.277 |
| TN | 12 | passage off | 0.741 | 1.524 |
## Fix, hashes and checks
The retained fix corrects the diagnostic ceiling and adds opt-in cold worker/tile timelines. No production scheduling change was retained. A trial that built far parents after LOD2 changed the canonical SurfaceWorld style 1 LOD2 hash, so the hash-safe order remains far parents before LOD2. The fast tier caught this and passed after the trial was reverted.
Direct FI and TN views match L85 per-tile and whole-view hashes: zero mismatches across 2,249 FI tiles and 2,233 TN tiles.
| Stratum | Density | Mesh | Payload | Topology |
|---|---|---|---|---|
| FI | `99ca213b21ce86e4` | `2977525405b79fff` | `3d7d2efb581710bd` | `af1916c949224871` |
| TN | `8d23c26f5c092be1` | `15c3aad2e29d9ea0` | `3d48f68d511c21df` | `5b1584676884edd8` |
Fast tier: **PASS**, 274 checks, 295.9 s. Source stamp: `ac3d8ea64e9ac4bd5526c61990070fb504528ff56dae52d33c1937327374032b`. No `VoxelWorld.cpp` change was made, so no Unreal build was needed.
## Failed runs
- The first L86-off implementation was incomplete and is excluded from the A/B table; its carver still ran.
- The asynchronous far-shape snapshot regressed FI W8 passage-off readiness to 1.159 s from 0.676 s. The parallel-bin trial raised far-shape time to 0.686 s from about 0.11 s. Both were removed.
- The LOD2-before-far trial failed the SurfaceWorld style 1 LOD2 hash check and was reverted. The final hash-safe build passes fast tier.
- The first fast-tier invocation had no verifier-named binary at its expected path and stopped before checks. The rerun used the current source-stamped L87 binary and passed.
No run exceeded 30 minutes. No commit, push or stash was made. Logs and analysis artifacts are under `Saved/Linux/l87/`.