Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux27/REPORT.md
T
Fr0zkaandClaude Opus 5.5 07b3fe2852 wip(L27, side branch): passages cross open voids inside shared natural rock columns
Unsupported passage runs > 12.5 m become a solid relief-bearing column (ceiling/island to
ground, flared base) with the helix inside, for every recipe; FI anchor uses the same path.
All 4 styles x both recipes: 0/0/0, 0 open-air, naturalness pass; no-long-bridge audit (L26
fails it). Deterministic, Clang = GCC. Look approved; cost +35% SW / +19% FI blocks merge (L28).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
2026-10-21 04:14:14 +02:00

180 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# VoxelForge L27 — passage voids inside rock columns
## Owner summary
The SurfaceWorld passage now drops from the ceiling (about −138 to −143 m) to terrain near
−505 m inside one continuous, relief-bearing rock column. Its helix is cut inside the column; the
~2 km route no longer crosses the open sky as a bridge. FloatingIslands uses the same field and
planner path: the passage descends inside a column from its island to the bedrock floor. Styles 1
and 3 have a second, smaller cap crossing, so they get a second column. The FI style-0 anchor stays
at the L25 axis and remains connected. Its shared column is slimmer (11.25 m nominal radius vs
L25's 13.25 m) with a larger measured wall margin (3.25 m vs 1.938 m), visible in the new
exterior capture.
All four styles in both recipes pass on Clang and GCC: 0 blocked, 0 unsupported, 0 grade failures,
0 open-air violations, and naturalness passes. The new no-long-bridge audit detects the L26
SurfaceWorld bridge as its negative control.
## Column rule and size
The shared planner samples native support every 0.5 m. A contiguous unsupported route run longer
than **12.5 m** becomes one column; this is 2.5 times the former 5 m support-thickness limit. A
shorter span is allowed only while grounded. The column is a solid signed-distance union in the
shared composition field, so terrain queries, collision and meshes all see the same rock. The
recipe still chooses passage style; the helix applies inside a column and that style continues
outside it.
The minimum planned outer radius is maximum route offset + bore radius + 2 m; the nominal profile
adds 1.25 m. The base flares by up to 6 m and the ceiling end by up to 2 m; bounds extend 6 m
below and 5 m above the unsupported run to overlap the native rock. Measured wall margin is 1.75 m
minimum in SW and 3.0 m minimum in FI, above the 1.5 m requirement. SW columns span about
363–368 m vertically and have nominal radii 19.744–27.027 m. FI main columns span about 53–57 m
with nominal radii 9.251–12.746 m; styles 1 and 3 also have ~14 m cap columns.
| Recipe / style | Unsupported route run(s) | Column nominal radius; audited profile radius | Minimum wall |
|---|---:|---:|---:|
| SW 0 Straight | 2,004.815 m; z −142.687 to −505.109 m | 27.027 m; 25.527–27.777 m | 1.75 m |
| SW 1 Worm | 1,946.355 m; z −138.668 to −505.109 m | 24.187 m; 22.687–24.937 m | 1.75 m |
| SW 2 Spiral | 1,957.892 m; z −137.967 to −505.138 m | 19.744 m; 18.244–20.744 m | 1.75 m |
| SW 3 Cascading | 1,981.103 m; z −137.484 to −505.112 m | 22.791 m; 21.291–23.541 m | 1.75 m |
| FI 0 Straight | 249.982 m; z −65.846 to −122.390 m | 11.250 m; 11.250–12.500 m | 3.25 m |
| FI 1 Worm | 17.042 m and 249.965 m; z −61.574 to −122.416 m | 12.719 m and 12.746 m; 12.968–16.468 m and 12.746–13.996 m | 3.25 m |
| FI 2 Spiral | 244.479 m; z −68.891 to −122.382 m | 9.251 m; 9.000–10.500 m | 3.00 m |
| FI 3 Cascading | 17.955 m and 231.814 m; z −65.805 to −122.436 m | 11.250 m each; 11.250–14.000 m and 11.250–12.500 m | 3.25 m |
The helix path measurements are length / turns / mean path radius / vertical pitch. SW styles 0–3
measure **2,015.1 m / 16.88 / 18.96 m / 21.00 m**, **1,956.1 / 20.69 / 14.99 / 17.32 m**,
**1,963.0 / 61.62 / 5.02 / 5.81 m**, and **1,987.2 / 21.63 / 14.50 / 16.59 m**. FI styles 0–3
measure **254.0 m / 8.00 / 5.00 m / 5.78 m**, **254.0 / 7.99 / 4.97 / 5.72 m**,
**246.9 / 12.95 / 3.00 / 3.31 m**, and **235.5 / 7.94 / 4.50 / 5.37 m**. FI styles 1 and 3
also have short cap descents: respectively 22.1 m / 0.59 turns / 5.70 m radius / 6.71 m pitch,
and 22.2 m / 0.75 turns / 4.54 m radius / 5.37 m pitch. Main helix grades are about 10.0–10.5°;
the walkability audit reports zero grade failures.
## Audits
Clang and GCC each ran all eight recipe/style combinations. Every row has 0 blocked capsule
samples, 0 unsupported samples, 0 grade failures, 0 open-air violations, connected column ends
(2/2), 128/128 route-support samples for each main crossing, and passing walkability. The naturalness wall-relief audit measured 0.509–0.806 m against
the 0.200 m minimum; flat runs were 0 m against the 8 m limit. The strict V3 layout validator
accepted with zero issues and rejected its malformed controls 9/9.
The no-long-bridge threshold is 12.5 m. SW has 0 m uncolumned span in all styles. FI's longest
short grounded span is 4.464 m (style 0); every other span is shorter. The L26 SW bridge control
(1,946–2,005 m unsupported) was detected in all four SW styles. The L24 ungated-support and L23
smooth-wall naturalness controls were detected in all eight recipe/style rows. The 16 final matrix logs are
`Saved/Linux/linux27-final-audit-{surface-world,floating-islands}-style{0,1,2,3}-{clang,gcc}.log`.
## Captures
All five JPEGs are 16:9 and below 300 KB in `captures/`.
| Capture | View | Size | SHA-256 |
|---|---|---:|---|
| [sw-column-wide.jpg](captures/sw-column-wide.jpg) | Wide side section: ceiling, full column and local ground; 1280×720 | 27 KB | `63e621794a48747c5892b74d3313da1df93e95bc1fb5e23c511211f992023acf` |
| [sw-column-base.jpg](captures/sw-column-base.jpg) | Close base flare into terrain; 1280×720 | 27 KB | `c4dbf7bcbd4962cf0e2c4f567cceec798deac8686a85cd02716ebd3c21db43bf` |
| [sw-column-top.jpg](captures/sw-column-top.jpg) | Close ceiling blend and upper helix; 1280×720 | 30 KB | `fe83fbb0bf90ea51696f9f63129738eb55812c01bbbec65e7430b8a7e6b512ed` |
| [sw-column-cutaway.jpg](captures/sw-column-cutaway.jpg) | Full-height cutaway through the helix; 1920×1080 | 60 KB | `8233e80035aac69dec7fd6d2e77a46e5798f627aefe216671d884bf84b339c40` |
| [fi-anchor-pillar.jpg](captures/fi-anchor-pillar.jpg) | L27 FI anchor pillar from outside; 1280×720 | 21 KB | `5bb8ad6a0729818577764596d3fa9ccff9621b31217ee9d8e34401098e6b4ef6` |
## Cost, determinism and compatibility
The whole-view timing comparison alternated two L24 and two L27 Clang W12 runs per recipe. No
prebuilt L24 executable was present, so I rebuilt it from local commit `cb9236c` with Clang 19 and
FP contraction off under `Saved/Linux/l24-source/bin/linux/`.
| Recipe | L24 whole-view seconds, two runs (mean) | L27 whole-view seconds, two runs (mean) | Change | Tiles, both versions |
|---|---:|---:|---:|---:|
| SurfaceWorld | 1.644 / 1.663 (1.654) | 2.207 / 2.252 (2.230) | +0.576 s (+34.8%) | 2,370 total; 960 full detail |
| Floating Islands | 15.907 / 16.848 (16.378) | 19.403 / 19.649 (19.526) | +3.149 s (+19.2%) | 2,370 total; 960 full detail |
No tiles were added. The L24 and L27 per-run logs are `Saved/Linux/linux27-cost-interleaved-*.log`.
The L25 whole-view command produced identical hashes across Clang/GCC and W1/W8/W12. Hash order
is density / mesh / payload / topology:
| Recipe | L27 whole-view hash |
|---|---|
| SurfaceWorld | `117547e5e18c6847 / db5fa276315ff2d4 / b4e9d01d70413fea / 03caf881fa047f1c` |
| Floating Islands | `70ab5bc87dd174d2 / 6f357f9085a496f0 / 08ce7d4e036da65a / eb5eef04a5cb85d9` |
Full-detail hashes also match across the matrix: SW `ace56c8f205238ad / a9c603a1248de6b8 /
ea55f1f4fcc6a894 / 5ea7bc78a1b678ae`; FI `ed550e0c8b182695 / 0e410a8e80a3e7f7 /
0751926f0c67d8a4 / f01208bc2f7841ec`. Exact-query hashes (density / unclamped / detail / collision)
are SW `c949c4df2ce6f9d9 / c949c4df2ce6f9d9 / 114c501e2d830d94 / e6011d3a248d4849` and FI
`7b7c50ac24ccadcc / 7b7c50ac24ccadcc / efcba20c0c70c415 / e604823a249029bf`.
The 24 m crossing processed 314 moving tiles and matched across both compilers:
| Recipe | Moving-tile hash: density / mesh / payload / topology |
|---|---|
| SurfaceWorld | `fe83368d746bf44d / d4379e0f86fa5780 / 0d1d6659a251dcaf / 73940f21b0fdaf14` |
| Floating Islands | `e3d0ea833bca4215 / f4b27f4bd1adbb07 / 8aedcdc86e5f21a2 / 323f880d952306e9` |
L13 parity passed for both compilers and recipes: 8 page pairs, 14 higher-LOD pairs, one edit pair,
782,026 exact-query samples, zero mismatches. At a 10 km off-route view, L9 proofs checked 6,896
blocks / 9,178,576 samples with zero violations on both compilers. SW had 1,296 fallbacks and no
unknown blocks; FI had 18,704 fallbacks, 17,408 unknown blocks and zero violations.
At a 100 km SW view, L26 and L27 were bit-identical on Clang and GCC: full-detail hash
`3148a6af10901e4d / 7025b8fc8d4636cd / ca0a8081022340bf / 1c49e72a6636ae99`, whole-view hash
`a212129dc5f2bfcf / e9b3980b69c789bf / 785a394605885d1f / 8f7e3a55bf429175`, exact-query hash
`482500abbe835b11 / c4948c7179963784 / efcba20c0c70c415 / 137e8f6c0b03a624`; LOD0–8 also match.
At 10 km, the whole-view hash changes because the new column enters LOD8; full detail, exact queries
and LOD0–7 remain identical.
Headless binary SHA-256: Clang `81ae5a03765eb3937f53c10e8f8b82cf1b38d3e3b6240511a57e5d66d99a9755`,
GCC `30c8927eee3c8c2ec0e7ff72228872435d19527719bedbb2399e6dcaff4819a4`. Rebuilt L24 Clang
binary: `29bb68ed425b4770b1b4ddcc68996c5d680665014e7ab7ffb3c307523015cf0b`.
## Changes and invariants
The deterministic crossing planner and field composition are shared in
`Standalone/Core/src/ShapeWorldInternal.h`. `VoxelForgeCore.h/.cpp` expose the void-crossing audit;
`StreamBenchmarkPipeline.h` adds column, open-air and no-long-bridge audits with the L26 negative
control. `FloatingIslandsInternal.h` retires the old special-case root for geometry 8, while
`OwnerWorldLoader.h` and `WorldAssemblyPrototype.h` use the shared crossing plan and version.
Geometry/evaluator versions are now 8/14; resolved-layout schema V3 is unchanged. The only Unreal
edit is the matching geometry-version bump in `Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp`;
Unreal was not available to compile here.
L4 lazy caches, L7 shared cache, L9/L12 proofs, L11 readiness handling, L13 route parity, L18/L19
ceilings and L21/L22 layout behavior remain unchanged. No async path was added.
## Failed and retried runs
- Two temporary Clang backtrace builds failed on `signal` namespace qualification; corrected before
the instrumentation was removed. The first SW style-0 audit segfaulted because the planner read
shared-field intervals before they were built; build order was corrected. An early SW style-1
iteration had 3,816 open-air violations and 869 blocked samples at the lower mouth; the carve
guard fixed it.
- Early FI audit revisions mis-tagged segments and reported false open-air spans; corrected to use
the actual route ranges and physical field. FI style 2 briefly had two unsupported samples; the
seam extension fixed them. A 3 m cap left 13 FI style-0 open-air samples; the 5 m cap cleared
them. A relaxed tread guard introduced one SW style-1 blocked sample and was reverted.
- A layout-only invocation without the required streaming flags exited 2. During capture setup,
`--hash` and `--data=` were rejected; the correct switches are `--stream-hash` and a positional
data path. Those were corrected. A helix-metrics helper first failed while formatting a list and
was rerun successfully.
- The first close SW export at max clip level 1 hit the 160-million-node interval safety bound.
Two finer endpoint exports then grew past 1.2 GB without a final pipeline summary and were
stopped; the already-complete full-column cutaway mesh supplied the final base/top views. The
first wide camera hid the base; a cut-plane side view fixed it. The first FI close camera cropped
the endpoints and was moved back.
- The first FI max-clip-level-3 export grew past 1.6 GB without a summary and was stopped. The
max-clip-level-8 retry completed in 21.7 s with a 104 MB mesh. The final capture is from that
L27 mesh. All rejected, stopped and successful export logs are in `Saved/Linux/`.
No run exceeded 30 minutes or remained stuck for 15 minutes. Only the requested small JPEGs and
this report were written under `Standalone/Research/WorldAssemblerM3/Linux27/`; exports and logs
remain in `Saved/Linux/`. The pre-existing untracked `Linux18/exports/` directory was left alone.
No commit, push or stash was made.
## Orchestrator review (Claude) — side branch
- Look approved by me: `sw-column-wide.jpg` and `sw-column-cutaway.jpg` show one slender ceiling-to-ground
column with the helix inside; `sw-column-base.jpg` shows the base meeting the terrain with a natural crack
exit; `fi-anchor-pillar.jpg` shows a textured pillar with a flared base under the island.
- **Blocking merge: cost.** Whole view +34.8% SW (1.654 → 2.230 s) and +19.2% FI with no new tiles. A local
feature must cost locally. L28: bound column/helix evaluation spatially (feature lists / AABB culling), then
merge `wip/l25-helix` into `assembler/world`.