Standalone/DESIGN_STRATA_UNITS_AND_LAYERS.md: maps today's code to the three layers, ranks 9 violations (top: no single physical stratum-bounds/interface record; SurfaceWorld 8 m vs FloatingIslands 4 m per chunk), defines the director-resolved generator request/result contract, moves seals/caps/voids/interfaces into shared composition, and proposes an explicit LOD-stable interface surface for the L19 ledges. 6-step migration plan with "worlds don't move" checks; owner decisions listed. No code or world change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
82 lines
5.3 KiB
Markdown
82 lines
5.3 KiB
Markdown
# Linux20 — design research for metre-based strata and generation layers
|
||
|
||
**Date:** 2026-10-20
|
||
**Scope:** read current owner/Core code and L19 evidence; measure unit conversions and LOD ring
|
||
errors; write the L20 design only.
|
||
|
||
## Findings
|
||
|
||
- `CHUNK_SIZE` is 32 and legacy `VOXEL_SIZE` is 12.5 cm, so the owner chunk is 4 m
|
||
(`Source/VoxelForge/Public/VoxelTypes.h`). Core defaults to 25 cm and keeps 32 voxels per tile.
|
||
- `BuildSurfaceStratumPlan` computes SurfaceWorld layout from `Slot.*ChunkZ × CHUNK_SIZE` in Core
|
||
voxel units. This is 32 × 25 cm = **8 m per slot chunk**. L18 records this as the retained
|
||
SurfaceWorld `topChunkZ × 32` interpretation.
|
||
- `BuildFloatingIslandStratumPlan` serializes owner/Core voxel size and the reduced ratio. At the
|
||
default 12.5/25 cm ratio, its slot chunk is 32 × 0.5 = 16 Core voxels = **4 m**. Core reverses
|
||
sample Z using `GetCoreVoxelsPerOwnerChunk` in `ShapeWorldInternal.h`.
|
||
- This factor-of-two difference is real, but it is not enough to claim that it caused the L19 ring
|
||
heights. L19's ring evidence points to LOD-dependent extraction of the lower SurfaceWorld field.
|
||
It does mean there is no single metres-per-chunk conversion that both preserves the current native
|
||
bounds and makes their shared slot indices one physical interface. The design records the current
|
||
resolved bounds and treats a later interface unification as an explicit change.
|
||
- The L19 FloatingIslands-camera table reports LOD1→2 median / p95 / max = 147.141 / 148.403 /
|
||
149.862 cm, zero no-hit samples; LOD2→3 = 128.603 / 200.789 / 773.318 cm, with 8 no-hit samples
|
||
among 308. LOD1/2/3 step sizes at 25 cm are 0.5/1/2 m. The ring audit excludes skirts and masked
|
||
triangles. Native far-ground refinement starts at LOD4, so it cannot fix those two transitions.
|
||
- The exact location and current geometry evidence are from `Linux19/REPORT.md`: lower SurfaceWorld
|
||
terrain at approximately −60…−73 m; its terrain triangles remain visible below FloatingIslands.
|
||
The worst sampled LOD1→2 roots are −60.497 m and −61.996 m. The LOD2→3 pair is −73.080 m and
|
||
−65.347 m.
|
||
|
||
## Layer map
|
||
|
||
The owner-facing layout is composed by `VoxelStrateComposer.cpp`, stored/loaded by
|
||
`VoxelSeasonManifest.cpp`, and resolved into `FStrateSlot`s by `VoxelStrateManager.cpp`. The Core
|
||
snapshot adapter (`VoxelForgeCoreAdapter.cpp`) builds separate SurfaceWorld and FloatingIslands
|
||
plans. Core streams work from `VoxelForgeCore.cpp` and evaluates native fields in
|
||
`WorldAssemblerInternal.h` / `FloatingIslandsInternal.h`; legacy `UVoxelGenerator::GetDensityAt`
|
||
and operator-stack/cave paths remain in `VoxelGenerator.cpp`, `VoxelDensityOpStack.cpp`, and
|
||
`VoxelCaveMorphology.cpp`.
|
||
|
||
Shared pieces already include Core's FP-contract preamble, fixed-point field code, feature bounds,
|
||
column caches, and interval proofs. `ShapeWorldInternal.h` still chooses among native fields, manager
|
||
state, and the copied legacy evaluator. `World::generateTile` in `VoxelForgeCore.cpp` owns MC setup,
|
||
recipe feature branches, native SurfaceWorld far-ground/cap refinement, and recipe identity salts.
|
||
`FarShellsInternal.h` adds shared boundary ceilings and GPU far-shell repairs; its connector repair
|
||
input is prepared from FloatingIslands geometry in `ShapeWorldInternal.h`.
|
||
|
||
The complete mapping, boundary proposal, ranked violations, generator contract, and migration plan
|
||
are in [`DESIGN_STRATA_UNITS_AND_LAYERS.md`](../../../DESIGN_STRATA_UNITS_AND_LAYERS.md).
|
||
|
||
## Direction review
|
||
|
||
The proposed metre authoring, 25 cm per-strate default, fixed 32³ internal tiles, and separation of
|
||
director/generators/shared composition/mesher are sound. Two qualifications are recorded in the
|
||
design:
|
||
|
||
1. “Units cost nothing” is true for metre conversion itself. Voxel size affects the physical width
|
||
of 32³ tiles and the number of tiles/tasks/caches; halving spacing in XYZ implies about 8× the
|
||
density samples per physical volume, with more per-tile overhead on top.
|
||
2. A no-movement migration cannot use one global chunk-to-metre multiplier. Current Core paths use
|
||
8 m per SurfaceWorld slot chunk and 4 m per FloatingIslands slot chunk at defaults. Preserve and
|
||
report those current resolved bounds first; decide separately whether to leave any gap/overlap or
|
||
intentionally make the new metre-authored interface contiguous.
|
||
|
||
The L19 density/mesh evidence supports LOD extraction as the direct cause of the measured lower-ground
|
||
ring steps. A shared explicit ceiling surface is the right approach for seals/caps, but not sufficient
|
||
for those upward-facing ground ledges. Step 5 therefore exposes the SurfaceWorld ground profile to a
|
||
generic explicit-surface/transition contract and remains subject to the protected LOD2 approval.
|
||
|
||
## Output and worktree status
|
||
|
||
No source, manifest, generator, mesher, or build input was changed. No build or world run was made.
|
||
Thus no new W12 hash claim is needed for this documentation-only round. The L19 reference hashes
|
||
remain the expected equality gates for later source changes:
|
||
|
||
- SurfaceWorld whole view: `c10697a8f48380c7 / 4197fc1072f0ff58 / 7b3e616ec9459851 / c879e35592bf33e5`
|
||
- FloatingIslands whole view: `00bc3607a7839854 / 4baa66127c2b0892 / e11ef05e851a1517 / 1278bc4b1fffb869`
|
||
|
||
The pre-existing untracked `Standalone/Research/WorldAssemblerM3/Linux18/exports/` directory was
|
||
left untouched. No commit, push, or stash was made.
|
||
|