- Startup apply boost (24 meshes / 14 ms) now ends on initial LOD0-2 + collision readiness or the 30 s timeout, not on the first desired-epoch change: FI LOD0-2 settled 3.49 -> 3.40 s. - Known-empty LOD0 collision classifications persist across unloads within a modification epoch and are invalidated on edits; commandlet readiness accepts CollisionNotRequired tiles. The 30 m/s movement trace now passes (no re-requests of the 4 support tiles). - Startup trace events: SerializeResolvedWorld ~466 ms synchronous in BeginPlay (unchanged); SW bReady at 2.74 s vs FI 0.75 s (to investigate). Redundant second parse removed. - Core output identical. Fast tier PASS; Linux UE builds. R42 notes attached. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
37 lines
14 KiB
Markdown
37 lines
14 KiB
Markdown
## Ranked findings
|
||
|
||
1. **[CODE] L91’s large gradient measurements do not come through the packed-density route, and they are not measurements of the field entering passage composition.** The sampler finds sign-changing edges in mesh debug densities, then probes `passageSourceDensityAt` at the interpolated location and at ±1 voxel on each axis. That API calls `NativePassageDensityAt`, which evaluates a native FI/surface field or the analytic field, then applies the boundary band; it does not call `PackedDensityAt` or the full cavern graph → boundary → passage composition chain. The actual passage composer receives the output of that graph and boundary chain. See [`StreamBenchmarkPipeline.h:346`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Source/StreamBenchmarkPipeline.h:346), [`VoxelForgeCore.cpp:1912`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/VoxelForgeCore.cpp:1912), [`ShapeWorldInternal.h:6847`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:6847), and [`ShapeWorldInternal.h:2558`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:2558). **Falsifier:** a trace showing the L91 probe taking a packed or fully composed route would overturn this; the current call chain shows neither.
|
||
|
||
2. **[MEASURED] The steep tail is real in that probe, but the logs do not locate its cause.** The sampler excludes approximate passage-region category 3, takes every 32nd eligible crossing, keeps source values with `|d|≤2`, and uses central differences with a one-voxel radius. The logs report FI p50/p90/max `1.00068 / 511.674 / 893.726`, TN `0.992669 / 1.04725 / 893.726`, and S3 `0.932169 / 1.03606 / 444.254` vox/vox. The collector retains magnitudes, not the sample coordinates or intermediate field values, so it cannot attribute the outliers to a specific operator. See [`StreamBenchmarkPipeline.h:355`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Source/StreamBenchmarkPipeline.h:355) and the [FI log:15851](/home/jahni/VoxelM/Plugins/VoxelForge/Saved/Linux/l91/clamp-effects/fi-effects.log:15851), [TN log:17515](/home/jahni/VoxelM/Plugins/VoxelForge/Saved/Linux/l91/clamp-effects/tn-effects.log:17515), and [S3 log:17515](/home/jahni/VoxelM/Plugins/VoxelForge/Saved/Linux/l91/clamp-effects/s3-effects.log:17515). **Falsifier:** the corresponding logged summaries or source stamp disagreeing with these values.
|
||
|
||
3. **[CODE] Packed proxies and sentinel values are not the explanation for those recorded 511–894 gradients.** In the packed path, a candidate sample uses an `int16` proxy in 1/256-voxel units, clamped to ±32767/256 = **±127.9961 voxels**; a noncandidate sample uses fixed **±4.125 voxels**. Those values are below the FI p90 and max, and the L91 probe bypasses the packed path anyway. The floating-island sentinel is much larger: `MaxDensity=10¹²` subvoxels, or **3,906,250,000 voxels** at 256 subvoxels/voxel. A finite-difference stencil that crossed directly between that sentinel and an ordinary near-surface value would produce a gradient many orders above the logged maximum; the logs do not show that direct sentinel jump. See [`ShapeWorldInternal.h:7164`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:7164), [`ShapeWorldInternal.h:12242`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:12242), [`VoxelForgeCore.h:339`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h:339), and [`FloatingIslandsInternal.h:26`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/FloatingIslandsInternal.h:26). **Falsifier:** a coordinate-level probe finding packed values or a sentinel transition in the same L91 finite-difference stencil.
|
||
|
||
4. **[INFERENCE] The best-supported candidates are native-field steepness and source/boundary route changes, but no current evidence identifies one as the measured cause.** The native FI path includes a detailed island/root field, quantized fixed-point values and a local mouth filter. The boundary operator can replace density with signed distance inside transition bands, preserve negative native rock on one branch, and switch stratum adapters by chunk. The code also explicitly avoids a native-lattice/boundary substitution that it says can create a discontinuity at a wide transition mouth. By contrast, the smooth-min blend depths themselves are small: the generic `width/6` formula dips at most 2 voxels for width 12 and 2.67 for width 16; FI’s `width/4` formula dips at most 1.25 voxels for 5-voxel root blends and 1.5 voxels for 6-voxel anchor blends. Those blend depths alone do not explain hundreds of vox/vox. A native cave host adapter is constant at −32m, which is **−128 voxels** at a 0.25m voxel; boundary remapping or an adapter transition can change that field locally. See [`ShapeWorldInternal.h:1171`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:1171), [`ShapeWorldInternal.h:726`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:726), [`ShapeWorldInternal.h:2571`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:2571), [`ShapeWorldInternal.h:192`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:192), [`ShapeWorldInternal.h:9146`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:9146), and [`FloatingIslandsInternal.h:132`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/FloatingIslandsInternal.h:132). **Falsifier:** stage-by-stage values at the L91 maximum showing a different operation or a smooth, continuous native field with no route/boundary transition there.
|
||
|
||
5. **[CODE] Deep negative values matter because the passage carve uses them as both input and reach.** Its output includes `max(composed, -roughSignedDistance/Q)`, then blends that result back by a geometry-dependent weight. The per-passage reach proof uses the running `composed` value, which may already include earlier passages. With Q=256 subvoxels/voxel and a 0.25m voxel, the L90 reach is `−d·0.25m + 0.24m`. Solving for a 10m reach gives `d=−39.04 voxels`; more-negative values require fallback. This is a density magnitude, not a gradient: the L91 gradient maximum cannot be substituted for `d`. See [`ShapeWorldInternal.h:1689`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:1689), [`ShapeWorldInternal.h:2109`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:2109), and [`Linux90 REPORT.md:3`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux90/REPORT.md:3). **Falsifier:** a composer trace showing that the bound does not use the running `composed` value or that the max cannot change the output outside the tube.
|
||
|
||
## What uses sign, and what uses magnitude
|
||
|
||
- **[CODE] Sign checks are only gates in several places.** Packed rock bits, `density<0` support eligibility, and some native-air preservation checks decide which branch to take. They do not preserve the value needed by the later field operations. **Falsifier:** a code path showing one of these branches is the only consumer of the density before meshing.
|
||
|
||
- **[CODE] The passage and support results use magnitude.** The carve max and its reach depend directly on `composed`; bridge handling uses a `min`; support uses `min` against a support SDF, and mouth restoration lerps toward the original density. The support sign test gates application, but the applied value still changes density magnitude. See [`ShapeWorldInternal.h:2044`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:2044), [`ShapeWorldInternal.h:2109`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:2109), and [`ShapeWorldInternal.h:2478`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:2478). **Falsifier:** an output audit proving those operations depend only on sign.
|
||
|
||
- **[CODE] Other composition stages also consume magnitude.** Cavern graph CSG, boundary signed distances, SDF stamps, and compatibility floor caps apply numeric min/max or smooth min/max operations. Their order is graph → boundary → passage/support → stamps → floor caps on the legacy path; native-lattice fields bypass legacy boundary and passage composition, and native cave graph evaluation ignores its incoming density. See [`ShapeWorldInternal.h:2558`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:2558), [`ShapeWorldInternal.h:9420`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:9420), [`ShapeWorldInternal.h:9386`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:9386), and [`ShapeWorldInternal.h:9750`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:9750). **Falsifier:** a path audit showing the tested FI/TN samples bypass these numeric operations.
|
||
|
||
- **[MEASURED] L91 demonstrates why sign preservation is insufficient for the mesh.** At c=6, FI and TN had no sign flips but still had moved crossings and up to 43.7793cm displacement; S3 had zero flips at every tested floor but up to 165.434cm displacement at c=6. Marching-cubes edge positions depend on the endpoint values, so changing a negative value while keeping its sign can move the interpolated crossing. See [`Linux91 REPORT.md:27`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux91/REPORT.md:27) and [`StreamBenchmarkPipeline.h:349`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Source/StreamBenchmarkPipeline.h:349). **Falsifier:** paired endpoint values and crossing positions showing no movement when the negative endpoint changes.
|
||
|
||
## Bounded-reach options, ranked
|
||
|
||
1. **[INFERENCE] Best same-world route: keep the current scalar formula and accelerate exact candidate lookup, including the >10m cases.** An exact spatial program can retain the incoming source magnitude, passage order and support semantics while reducing route-search work. If its candidate coverage includes the full source-dependent reach, L90 reach fallback can fall, but candidate counts will grow; whether total time improves is unmeasured. The current 10m census had 18.28% weighted fallback and active carve/mouth p90 of 13 candidates, so it has not yet shown a fast common path. See [`Linux90 REPORT.md:7`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux90/REPORT.md:7) and [`Linux90 REPORT.md:14`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux90/REPORT.md:14). **Falsifier:** a same-world exact evaluator with full candidate proofs showing the longer-reach lookup is no faster or cannot reduce the fallback cost.
|
||
|
||
2. **[INFERENCE] Best bounded-work experiment with a surface-preservation goal: use a conservative surface-cell halo, not a raw source clamp.** Keep the original evaluator at every lattice corner needed by a source crossing, a passage-created surface, or support, mouth, transition, stamp and cap surfaces; only skip the expensive passage work at samples proven irrelevant to final mesh cells. This could reduce the number of L90 queries that need candidate lists, but it does not automatically reduce the reach needed at a surface-relevant corner. Exactness requires proving the halo includes all affected cells and keeping the original values there. **Falsifier:** any changed final crossing, vertex, normal or relevant walkable/support sample outside the covered set.
|
||
|
||
3. **[INFERENCE] Replacing raw `d` with a distance-normalized source or clipping the reach would lower candidate counts and fallback, but changes the sampled field and likely the mesh.** A true source distance is not a safe upper bound on the current formula’s raw-density reach; substituting it makes a new operator. L91 already rejected simple source floors c=2–6: the c=6 reach would be 1.74m, yet c=6 still moved crossings by up to 165.434cm. A distance transform may preserve the continuous source zero set, but that alone does not preserve discrete edge interpolation. See [`Linux91 REPORT.md:11`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux91/REPORT.md:11) and [`Linux91 REPORT.md:43`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux91/REPORT.md:43). **Falsifier:** a normalized-source implementation matching the baseline crossing positions and all passage/support audits across strata and LODs.
|
||
|
||
4. **[INFERENCE] Moving passage composition after stamps/caps is unlikely to fix the census by itself and changes operation order.** Unless the passage operator’s source or formula also changes, it still needs a source-dependent reach; applying it later also means stamps/caps no longer see the passage output in the same order. **Falsifier:** a reordered implementation with unchanged reach distribution and bit-identical final field, mesh and audits.
|
||
|
||
## Passage cost
|
||
|
||
**[MEASURED]** Astra’s profile attributes about 40% of passage time to carve distance, 21–24% to wall relief, 14% to support/columns, 4% to mouth shaping, and the remainder to other work. The total passage contribution is reported as roughly 1.4–1.6s. The L90 compiler census was not wired into production and stopped before a prototype. Earlier cache shortcuts regressed timing, and the L90 census still had substantial fallback and candidate counts. See [`BRIEF-pass3.md:7`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Astra1/BRIEF-pass3.md:7), [`BRIEF-pass3.md:22`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Astra1/BRIEF-pass3.md:22), and [`Linux90 REPORT.md:24`](/home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux90/REPORT.md:24). **Falsifier:** a corrected profile or prototype record contradicting those measurements.
|
||
|
||
**[INFERENCE]** Same-world acceleration is not logically ruled out: an exact rewrite can precompute route data and speed feature selection while keeping the existing formula and order. But the evidence does **not** show that the full 1.4–1.6s is avoidable, or that the ~1s readiness goal is reachable without changing semantics. A hard geometric reach cap would be a redefinition unless paired with a proven surface-preserving evaluation strategy. **Falsifier:** a complete same-world prototype either meeting the target, which would show the cost is avoidable in practice, or a demonstrated lower bound showing exact evaluation cannot meet it. |