- Shared composer: a passage's restored support is applied after a physically overlapping later bore, instead of being carved away by it (0-1: 59 -> 0 unsupported). - Capsule clearance for support restoration is tested against nearby route segments only (1-2: 3 -> 0, 2-3: 2 -> 0 unsupported). - L66 index switches replaced by a physical criterion (both mouths inside their strata bands, neither a SurfaceWorld landing). - Audit: floor zero-crossing refined by bisection (the 0.2498 m "step" was the gauge); wall ripple keeps the authored radius, cubic detrend per 32 m window. Controls detected: L35 ribs, beads, synthetic 0.25 m step, L36 washboard, L23 terrace. - Result: 0-1 and 2-3 pass all audits; 1-2 fails wall ripple 7.27 cm (limit 3.5) from an authored-radius beat at 7.06 m. Fast tier was green before the final gauge change and was not re-run after it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
8.6 KiB
L67 — four-strate passage walkability
Cause and fix
The FI, TN, and VS paths use the compiled analytic base evaluator and then the shared strate composer. The “native” 5/5 result was the same composed field with resolved passages removed; it was not a raw-generator probe. The band stage is therefore not the difference. The passage carve and the support/capsule gates are.
- 0–1 SW→FI: at the failed probe
(21.366, -11.480, -726.367), passage 0 first restored support, then passage 1’s bore changed density to+1.613(carve_sdf=-0.292), removing it. The shared composer now defers that support only when a physically overlapping later bore can reach it, then applies it after the later carve. The column’s natural relief is predictor-driven and tapers at the root; relief rose from0.172 mto0.219 m. - 1–2 FI→TN: at
(2.419, -13.433, -735.870), support restoration was rejected by an adjacent route segment’s player-capsule test (clearance=-0.245 m, required0.045 m). The segment-specific overlap candidates now keep that test local to physically relevant route geometry. The reported0.2498 mstep came from the audit switching to a neighboring zero crossing on its0.25 mscan. Refining and following the same root shows a continuous floor; the step audit now reports0.000 m. - 2–3 TN→VS: at
(-1.365, -15.673, -897.088), the same capsule gate rejected support next to route segment 81 (clearance=-0.329 m). The shared segment-overlap handling fixes this link too.
The L66 passageIndex>0 / strates.size()>2 switches are gone. “Internal chain” now means both mouths lie inside their endpoint strata content bands and neither endpoint is a SurfaceWorld landing. Lower-mouth body overlap uses actual 3D distance to the mouth and tread, independent of plan length or passage index.
Audit
All existing thresholds are unchanged. The L66 baseline binary reproduced the original failures.
| Passage | L66 negative control | L67 result |
|---|---|---|
| 0–1 SW→FI | 59 unsupported; column relief 0.172 m < 0.20 m |
0 unsupported / 0 blocked / 0 grade failures; wall/floor ripple 1.49 / 0.06 cm; column relief 0.219 m; wall relief 0.267 m |
| 1–2 FI→TN | 3 unsupported; wall/floor ripple 6.78 / 2.90 cm; apparent 0.2498 m step |
0 / 0 / 0; wall/floor ripple 2.29 / 1.23 cm; refined step 0.000 m; wall relief 0.257 m |
| 2–3 TN→VS | 2 unsupported | 0 / 0 / 0; wall/floor ripple 1.48 / 0.47 cm; wall relief 0.248 m |
All three now pass support, blocked, grade, mouth-binding, ripple, and naturalness gates. The detailed final audit is in owner-four-strata-route4.log; the measured composition trace is in l66-root-refined-audit.log.
Controls, hashes, and builds
- The L66 build remains a negative control: it reproduces
59 / 3 / 2unsupported and the0.172 mcolumn relief failure. The expected audit exit is 10. - The pinned fast tier passes: 269 PASS, 5 diagnostic, overall PASS. The prior L52 surface-world hash comparison is diagnostic because the route output changed; the changed style-1 baseline is pinned at v212. See the fast summary.
- Evaluator version is 212 (from 211), required because shared tread composition and route selection changed generated output. Source stamp:
d49aa8d941fb390818569243d7783f3e2799795244a8d7ca48e3e640d4a2876f. - All four strata produced 12 equal hash rows at each of W1/W8/W12 (determinism summary). Clang and GCC builds both pass.
- Changed implementation files are
Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h,Standalone/Core/src/ResolvedLayoutInternal.h,Standalone/Core/src/ShapeWorldInternal.h,Standalone/Source/OwnerWorldLoader.h,Standalone/Source/StreamBenchmarkPipeline.h, andStandalone/Tools/verify/verify.py. No UnrealSource/files changed.
Cost
Three interleaved whole-view pairs per strate, L66→L67 median seconds (summary):
| Strate | L66 | L67 | Change |
|---|---|---|---|
| 0 | 1.101 | 1.121 | +1.8% |
| 1 | 1.575 | 1.552 | −1.5% |
| 2 | 0.581 | 0.602 | +3.6% |
| 3 | 0.216 | 0.212 | −1.9% |
Strate 2’s samples overlap (0.582–0.600 s) and paired results are within observed run variation. The route chooser now selects the shortest candidate within 0.10 m of maximum sampled tread clearance, with tangent alignment as a tie-breaker. It also skips an extra closure turn when mouth separation exceeds the tread envelope; the FI→TN route is 114.231 m rather than the earlier 165.799 m candidate.
Captures
Seven JPEGs are in captures/; each is under 300 KB. The TN→VS endpoint meshes are sparse in these offscreen views, so those two frames show the nearby cave/strate surface more clearly than the tread.
- 0–1 arrival 26,342 B, departure 40,012 B
- 1–2 arrival 34,298 B, departure 42,450 B
- 2–3 arrival 23,937 B, departure 23,380 B
- Mid-tunnel, 1–2 22,392 B
Failed runs
- The expected L66 negative-control audit exited 10 after reproducing the failures.
- One p0 clipped arrival-camera trial exited 3 because the clip plane left two open contours. It was replaced by the successful uncut SurfaceWorld entrance view.
- A p2 clipped arrival-camera trial also exited 3 on open contours. The final endpoint image uses the no-clip interior view. Both cap failures are recorded in
failed-capture-trials.log. - No final capture, Clang/GCC build, determinism run, fast-tier gate, or cost run failed. No run exceeded 30 minutes.
Audit controls (follow-up)
This section supersedes the earlier wall-ripple values; the support, blocked, grade, mouth, and column results remain as reported. The residual-only gauge omitted pose.radius and hid an authored-radius beat:
| Field / gauge | Old gauge (authored radius, linear detrend) | Residual-only gauge |
|---|---|---|
| L66 four-strata field | 6.78 cm | 2.21 cm |
| L67 four-strata field | 14.52 cm | 2.29 cm |
On the old gauge, the geometry change raised 1–2 by 7.74 cm. On L67 geometry, the residual-only gauge then removed 12.23 cm; the reported 6.78→2.29 cm drop therefore masked the radius beat. The final gauge keeps sampleRadius + 0.5*(left+right) and cubic-detrends each 32 m window. The 0.18 m is the probe depth inside the authored radius; its former standalone subtraction is removed. The cubic baseline leaves the 0–1 and 2–3 taper profiles below 0.01 cm, while 1–2 retains a 4.77 cm authored-radius beat at 7.06 m. Final ripple results are 1.45 / 7.27 / 0.92 cm: 1–2 fails the unchanged 3.5 cm wall limit. Support, blocked, grade, and mouth-binding checks still pass for all three; overall passage audit is 2/3. See audit-control-l67-final-owner.log and audit-control-authored-radius-all.log.
| Negative control under the updated gauge | Measured | Result |
|---|---|---|
| L35 wall ribs | 9.75 cm at 6.50 m; limit 3.50 cm | Detected |
| Synthetic wall spheres / floor beads | 5.98 / 5.98 cm; limits 3.50 / 2.50 cm | Detected |
| Synthetic signed-distance floor step | 0.25 m step; 2.97 cm ripple vs 2.50 cm limit | Detected |
| L36 washboard field, five-step root refinement | 6.46 cm; limit 2.50 cm | Detected |
| L23 terrace profile | 2.00 m flat then 0.25 m step | Detected |
No control passed, so no old audit behavior was restored. Logs: L35 ribs, L36 washboard. The L67 synthetic controls are in the final owner log above. One direct link of the current headless code against archived Core libraries failed route setup and was discarded; the control runs used source/Core-matched L35 builds. The follow-up changed only Standalone/Source/StreamBenchmarkPipeline.h; Clang Linux build succeeded. No timing run, commit, push, or stash was made.