L99 treated a missing exact-grid sweep sample as "no route here", so off-grid queries exposed the FI/TN boundary band inside passage 1-2 (flat ceiling/floor). In-bound misses now evaluate the exact route; a conservative route-feature bound still skips out-of-extent misses. Composition order unchanged (graph -> bands -> passage -> stamps -> floor caps). Comparison now counts added/removed crossings and triangles: 0/0 crossings on all four strates (FI +56 triangles). 1-2 mid-tunnel: L98->L100 changes 32k px (L99 changed 1.14M). Near-ready @W12 (L98/L99/L100): FI 2.62/1.78/2.05, TN 2.36/1.55/1.80, SW 1.17/0.95/1.04, VS 1.16/1.03/1.08 s. All walk audits pass; 24/24 Clang/GCC W1/W8/W12 determinism; fast tier PASS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
65 lines
5.9 KiB
Markdown
65 lines
5.9 KiB
Markdown
# L100 — swept-tube boundary regression
|
||
|
||
Branch: `wip/l99-swept-tube` (`fa6363b`, unchanged HEAD). L100 source stamp: `7224bf6e668d06ed71a92f0857820e3ae2b0eca40574a491331ab5979a88f698`.
|
||
|
||
## Cause and fix
|
||
|
||
**Measured:** the 1–2 midpoint query at `(-8.5, 12.5, -741.989990 m)` has band density `−0.499936938`; stamps and caverns are absent, and the cap leaves that value unchanged. The direct route query finds segment 8 at SDF `−1.83728031 m`, with reach, floor, and combined weights all 1, and returns `+7.35348845`. The bounded sweep leaves `−0.499936938` at this point. At the nearby exact `z=−742 m` lattice point both paths carve; at `z=−741.989990 m` the sweep has no exact cache entry. The strate field itself is `−1032.04004` and is masked by the boundary band. This identifies the band as the flat sheet; the 0.5 m blend, stamps, and caps are not the cause.
|
||
|
||
**Code-path conclusion:** L99 treated a missing exact-grid sweep sample as proof that no route affected the query and skipped route evaluation. Off-grid seam/field queries therefore exposed the band inside the tube. L100 evaluates the exact route on an in-bound cache miss. A conservative route-feature bound still skips misses outside candidate extents; mouth and column supports keep their separate paths. Composition stays `graph → bands → passage → stamps → floor caps`, so the tunnel cuts bands while authored stamps and landing caps retain precedence. This adds the missing ownership without restoring the old full route scan.
|
||
|
||
## Comparison metric
|
||
|
||
The comparison now counts added and removed edge crossings per tile, alongside moved shared crossings, and reports added/removed non-skirt triangles. The old mean/max displacement summarized only crossings shared by both meshes; a missing or new crossing had no displacement to average. `changed_mesh` could flag the tile but did not say whether surface appeared or disappeared.
|
||
|
||
Final direct-route versus bounded-sweep audit (LOD 0–2 near sets):
|
||
|
||
| Strate | Tiles | Added / removed crossings | Added / removed triangles | Moved crossings | Mean / max displacement (cm) | Pairing failures | Audit |
|
||
|---|---:|---:|---:|---:|---:|---:|---|
|
||
| SW | 1,408/1,408 | 0 / 0 | 0 / 0 | 9,214 | 0.0180 / 20.1114 | 5 | exit 14 |
|
||
| FI | 1,216/1,216 | 0 / 0 | 56 / 0 | 10,238 | 0.0185 / 19.7997 | 37 | exit 14 |
|
||
| TN | 1,344/1,344 | 0 / 0 | 0 / 0 | 11,370 | 0.0387 / 21.7442 | 41 | exit 14 |
|
||
| VS | 1,344/1,344 | 0 / 0 | 0 / 0 | 5,087 | 0.0178 / 25.8798 | 4 | exit 14 |
|
||
|
||
All four comparison commands hit the legacy strict displacement/normal acceptance gate (1 cm maximum displacement, 2° maximum normal change, and no normal-pairing failures); they completed and found no added/removed crossing edges. Exit 14 is that diagnostic result, not a build or timeout failure. FI has 56 net added triangles.
|
||
|
||
## Readiness and timing
|
||
|
||
Fast tier: **PASS**, 274 blocking checks across 80 runs, including all resolved-passage and adjacent-interface walkability audits. Evaluator version 216 hashes are re-pinned. Determinism: 24/24 Clang/GCC runs at W1/W8/W12 and 20/20 cross-worker/compiler comparisons match exactly for all four strates.
|
||
|
||
L80 timings are medians of three measured repetitions in rotating L98/L99/L100 order, after a warmup for each version, stratum, and worker count. Values are seconds (`L98 / L99 / L100`). All 72 measured invocations completed; each L100 run reported source stamp `7224bf6e…`.
|
||
|
||
| Workers | Strate | Near ready, LOD 0–2 | Whole view |
|
||
|---:|---|---:|---:|
|
||
| 8 | SW | 1.364 / 0.940 / 1.425 | 3.035 / 2.413 / 3.429 |
|
||
| 8 | FI | 2.792 / 1.719 / 2.157 | 4.385 / 2.931 / 3.409 |
|
||
| 8 | TN | 2.746 / 1.723 / 2.175 | 4.022 / 2.790 / 3.294 |
|
||
| 8 | VS | 1.631 / 1.352 / 1.522 | 2.779 / 2.553 / 2.745 |
|
||
| 12 | SW | 1.174 / 0.949 / 1.039 | 2.509 / 2.148 / 2.280 |
|
||
| 12 | FI | 2.617 / 1.783 / 2.054 | 3.919 / 2.902 / 3.197 |
|
||
| 12 | TN | 2.358 / 1.547 / 1.802 | 3.458 / 2.539 / 2.813 |
|
||
| 12 | VS | 1.158 / 1.032 / 1.083 | 2.181 / 2.027 / 2.097 |
|
||
|
||
On FI/TN, L100 remains 18–24% faster than L98 for near-ready and whole-view medians. It is 10–26% slower than L99, reflecting the exact fallback needed for off-grid misses.
|
||
|
||
## Captures
|
||
|
||
[`captures/INDEX.md`](captures/INDEX.md) lists all 15 paired views: both mouths and 25/50/75 route stations for each passage. All 30 PNGs pass the programmatic geometry gate (over 3,000 non-dominant-background pixels and at least two RGB colors); the index reports each pair’s changed-pixel count. It also records the 1–2 same-camera three-version check: visible geometry is 1,407,415 px in L98, 1,206,362 in L99, and 1,407,415 in L100; changed pixels are 1,135,959 L98→L99 and 1,134,150 L99→L100. L98→L100 changes 32,217 px. The 0–1 mid-25 and 2–3 mid-25/mid-50 cameras use documented nearest-surface targets where the forward route view had no visible L98 surface.
|
||
|
||
## Failed runs
|
||
|
||
- The four density-comparison audits exit 14 on their legacy strict geometry gate; the new added/removed crossing counts are zero in all four.
|
||
- An intermediate composition-order experiment put passage carving after floor caps and failed the landmark walk audit. Restoring the L99 stamp/cap precedence made the final fast tier green.
|
||
- The first Unreal build attempt exited before compilation because UBT could not rotate its log under read-only `/home/jahni/.config`. The retry redirected UBT config and logging under `Saved/Linux/l100` and succeeded (27/27 actions; three RealtimeMesh deprecation warnings).
|
||
|
||
No benchmark or capture process timed out.
|
||
|
||
## Evidence files
|
||
|
||
- Source point trace: `Saved/Linux/l100/logs/column-sweep.log`, `column-direct.log`.
|
||
- Density comparison: `Saved/Linux/l100/density-compare/summary.json`.
|
||
- Hash matrix: `Saved/Linux/l100/hashes/summary.json`.
|
||
- Fast tier: `Saved/Linux/l100/fast-summary.json`.
|
||
- L80 triple: `Saved/Linux/l100/readiness/l98-l99-l100/summary.json`.
|
||
- Build, Clang, GCC, captures, and per-run logs: `Saved/Linux/l100/logs/` and `Saved/Linux/l100/`.
|