# Linux40 — immutable field binding ## Change `ShapeWorldInternal.h` now has concrete immutable SurfaceWorld, FloatingIslands and legacy adapters with a common `densityAt(x,y,z,out)` call shape. `FGeneratorFieldAdapterV1` stores them in a variant, so hot sampling uses concrete dispatch without a virtual call. FI retains its fixed-point sampler and captures the legacy boundary parameters while binding. `BindResolvedStratumFields` creates a sorted table of resolved strate bounds, plan references and evaluator objects during world construction/initialization. Native SurfaceWorld and FI sampling, boundary composition lookup, legacy SurfaceWorld bridging and `ClassifyBoxDetailed` select from that table. The manager layout width is captured once for the legacy-compatible chunk projection. ## Lookup boundary and identity The direct manager selection lookups in native SurfaceWorld/FI evaluation and box classification are removed. `DensityAt` now selects native fields through the bound table. Legacy `UVoxelGenerator::GetDensityAt` still performs its own manager routing when reached through the legacy bridge or an out-of-plan fallback. Manager-derived layout width/FI compatibility parameters are captured at bind time; manager access also remains in build/planning helpers. Generator-specific boundary and passage policy still lives in `FStandaloneShapeWorld`. No density arithmetic, fixed-point conversion order, evaluator version or Unreal adapter changed. The canonical owner FI and SurfaceWorld hashes are identical to L37/L39 for W1 and W12. The owner layout IDs also match L39: FI `b7a7d9ecc48d8f26`, SurfaceWorld `8a52e84c26ed92d2`. Fast logs and hash summaries: `Saved/Linux/l40/fast-trial1.log` and `Saved/Linux/l40/fast-summary.json`. ## Cost Five interleaved pairs against the L39 Clang binary, using the canonical owner recipes: | Recipe | L39 median | L40 median | Median change | Paired changes (L40 vs L39) | |---|---:|---:|---:|---| | FloatingIslands | 17.556 s | 17.440 s | −0.66% | +2.26%, −3.99%, −0.66%, −0.87%, −0.47% | | SurfaceWorld | 1.829 s | 1.805 s | −1.31% | −2.64%, −0.22%, +0.55%, −0.44%, −1.48% | Both deltas are within observed pair noise; no per-voxel regression was measured. Raw output is in `Saved/Linux/l40/cost-l40-vs-l39-run.log` and `cost-l40-vs-l39-summary.json`. ## Verification | Tier | Result | Wall time | Evidence | |---|---|---:|---| | Fast | PASS | 162.0 s | Canonical owner hashes match L37 for both recipes at W1/W12; all controls pass. | | Medium | PASS | 468.6 s | Transition, route/proof, LOD0–8 ring, owner shape and capture matrix pass. | | Full | TIMED OUT | 1740 s (29 min) | GCC build and supplement passed; L25 and crossing24 determinism passed for both compilers, and Clang upper-SW style0 W1/W8/W12 passed. The run timed out during the GCC upper-SW style0 W1 cell; no full summary or cost-baseline/pair results were produced. | Clang and GCC candidate builds succeeded with source stamp `f35bc59c6172370e98dc83ec8ee5ba51dfab83a3faf075c26189fc83172f4ac8`. The full run used the requested CPU/memory limits and a 1740-second timeout. At the stop, host load was 20.5. The partial log is `Saved/Linux/l40/full-final.log`; a `full-summary.json` was not written. Other tier and build logs are under `Saved/Linux/l40/`. ## Failed attempts - The first Clang build passed `unique_ptr` objects to adapter constructors expecting raw observer pointers; corrected with `.get()`, then the build passed. - Two early cost-harness launches failed before starting measurements: one shell quoting error and two Python `-c` quoting errors. The later logged five-pair run completed successfully. - The single full-tier run reached its 1740-second timeout while the GCC upper-SW fixture style0 W1 determinism cell was still running. The cell has no completion record; the run returned timeout status 124. No full-tier L36 baseline build or full-tier cost pairs ran. No Unreal compile was run; no Unreal adapter or `VoxelWorld.cpp` source change was required. ## Orchestrator review (Claude) Accepted. The full tier had timed out here under load (two Lunas plus host load of about 20). I re-ran it alone on the final source (stamp `f35bc59c…`): **PASS, 407 gates, 2857 s.** Its built-in cost comparison is against **L36** and shows FI +3.03% (all five pairs positive) and SW +0.38%. That FI delta is L37's mouth geometry; this round's own L39→L40 pairs are −0.66% FI and −1.31% SW. Two follow-ups for the tool: - the full tier's cost baseline is hard-coded to L36; it should follow the previous commit; - the full tier now needs about 48 minutes including builds, so its timeout must be above 29 minutes.