Files
Fr0zkaandClaude Opus 5.5 8753f6dbe4 wip(assembler): round L21 -- resolved strate layout snapshot + validator (no world change)
Core ResolvedLayoutSnapshotV1 (canonical JSON, stable identity): per strate stable ID, generator,
recipe, interior bounds in metres, ceiling/bedrock bands as Core really applies them, transition
mode/width, dispatch provenance. Validator: compat mode reports today's deviations; strict mode
enforces ceiling -> content -> bedrock -> next ceiling (owner rule), two separate bands, nominal
contiguity, interpenetration only within the declared EVoxelStrateTransition width; 7 negative
controls rejected. Findings: SW built at -120..-632 m although the params say -60 m; a 60 m unowned
gap filled by analytic FI fallback; no active bedrock bands; transitions ignored by Core.
All L19 hashes unchanged (28 + 14 crossing runs). The Unreal adapter exports resolved_layout
(uncompiled here).

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

14 KiB
Raw Permalink Blame History

World Assembler L21 — resolved strate layout

This round adds a read-only layout snapshot and validator. It does not change density or mesh evaluation.

Snapshot and current stack

World identity is owner-world/seed/0; Core voxel size is 0.25 m, owner voxel size is 0.125 m, and all lattice origins are (0,0,0). Intervals below are half-open [bottom, top) metres. Stable strate IDs are owner-world/seed/0/strate/<index>/generator/<kind>. The shared Core record uses canonical JSON schema v1 and an FNV-1a payload identity.

The required structure, top to bottom, is:

strate N       ceiling band
               content
               bedrock band
strate N+1     ceiling band
               content
               bedrock band

Ceiling and bedrock remain distinct bands owned by their own strate. Their nominal edges touch; a separate EVoxelStrateTransition declaration describes possible interpenetration.

Prototype Order / stable suffix Generator; recipe version Interior/content (m) Current ceiling Current bedrock Transition at lower interface
SurfaceWorld 0 / TunnelNetwork TunnelNetwork; legacy.TunnelNetwork v0 [-120, 8) No Core density band. Manager configures a 1 m upper VF_ApplyBoundarySeal at [8,9), but the compiled analytic Core path does not apply it. No Core density band. Manager configures a 1 m lower VF_ApplyBoundarySeal at [-121,-120), but the compiled analytic Core path does not apply it. Gradient, 2 chunks = 8 m by the 4 m manager chunk. Core does not apply it; manager/dispatch chunk widths are 4/8 m.
SurfaceWorld 1 / SurfaceWorld SurfaceWorld; SurfaceWorld.Heightfield2D v1 [-632,-120) No separate volumetric band; cap profile is in content, with AppendStratumBoundaryCeilings mesh fallback. None. Gradient, 1 chunk = 4 m by manager units; no lower strate in this plan. Manager/dispatch widths are 4/8 m.
FloatingIslands 0 / FloatingIslands FloatingIslands; FloatingIslands.ClusterField geometry v3 [-60,4) Active one-sided upper seal [3.5,4) = 0.5 m. It overlaps the content range by 0.5 m. None in geometry v3. Gradient, 2 chunks = 8 m. Core does not apply it; manager/dispatch widths are both 4 m.
FloatingIslands 1 / SurfaceWorld SurfaceWorld; SurfaceWorld.Heightfield2D v1 [-632,-120) No separate volumetric band; cap profile is in content, with mesh fallback. None. Gradient, 1 chunk = 4 m; no lower strate in this plan. Manager/dispatch widths are 4/8 m.

Dispatch provenance is recorded per stratum in the JSON snapshot:

  • SurfaceWorld bounds come from BuildSurfaceStratumPlan, which converts each chunk with 32 Core voxels = 8 m. NativeSurfaceDensityAt selects with floor(CoreZ/32), then calls GetGeneratorTypeForChunk / GetStrateIndex. The manager's owner chunk is 4 m.
  • FI bounds come from BuildFloatingIslandStratumPlan, which converts each 32-voxel owner chunk through the 12.5/25 cm owner/Core ratio = 16 Core voxels = 4 m. NativeFloatingIslandDensityAt uses the same conversion before the manager lookup.
  • Legacy TunnelNetwork selection uses the Core 32-voxel chunk lookup. The manager helper assigns the upper strate's transition to its lower interface.

SurfaceWorld strata carry four cap profiles, 33 route points and their attached passages. The FI strate carries four island anchors and its attached passages. The snapshot preserves these recipe anchors in their source fixed-point units.

The owner configuration’s non-Hard transitions are currently not honored by Core at these interfaces. UVoxelStrateManager::GetGenerationParams contains legacy vector blending, but Core’s compiled dispatcher selects the resolved/native per-strate fields without applying that blend. FI v3 calls VF_ApplyUpperBoundarySeal for its ceiling; player edit brushes are applied after the native field, so that seal remains diggable. Bands default to diggable=true, protected=false; protection is an explicit option.

Current SurfaceWorld plan, top → bottom
  TunnelNetwork ceiling [8,9) (configured; inactive in Core density)
  TunnelNetwork content                                      [-120,8)
  TunnelNetwork bedrock [-121,-120) (configured; inactive in Core)
  SurfaceWorld ceiling: none
  SurfaceWorld content                                       [-632,-120)
  SurfaceWorld bedrock: none

Current FI prototype, top → bottom
  FI ceiling [3.5,4) active, inset into FI content by 0.5 m
  FI content                                                  [-60,4)
  FI bedrock: missing
  Unassigned interval                                        [-120,-60) = 60 m
  SurfaceWorld ceiling: none
  SurfaceWorld content                                       [-632,-120)
  SurfaceWorld bedrock: none

The SurfaceWorld and FI content interiors therefore do not overlap: the FI prototype has a 60 m gap. The owner manager slots meet at −60 m when both use 4 m owner chunks, but SurfaceWorld plan/query dispatch converts chunks at 8 m while FI converts at 4 m. In the gap, Core answers through the compiled analytic FloatingIslands fallback, not either planned recipe; probes at −68 m returned solid density −4.125. SurfaceWorld and TunnelNetwork content interiors touch at −120 m in the SurfaceWorld prototype, but Core does not apply the declared Gradient there.

Compatibility validation and boundary probes

Compatibility mode accepted both layouts with seven reported issues apiece. SurfaceWorld reports unhonored transition, 4/8 m dispatch-unit ambiguity on both strates, and missing current-field ceiling and bedrock bands on both. FI reports its unhonored transition, missing FI bedrock, the 0.5 m ceiling/content overlap, the 60 m uncovered interval, and missing SurfaceWorld ceiling and bedrock. These are recorded as compatibility deviations, not world changes.

Strict mode accepted a valid synthetic two-strate fixture. Its seven negative controls rejected:

Control Strict check that rejects it
Nominal band overlap Bedrock(N) bottom must equal ceiling(N+1) top.
Nominal band gap The same exact nominal contiguity check.
Missing bedrock bedrock.present is required.
Missing ceiling ceiling.present is required.
Wrong band order Each band kind and the ceiling → content → bedrock edges must match.
Gap between bedrock(N) and ceiling(N+1) Their nominal endpoints must be equal.
Interpenetration wider than transition Explicit overlap must be at most the mode’s limit; this control uses 4,000,001 µm against a 4,000,000 µm Gradient zone.

Hard has a 0 m limit. Gradient uses TransitionBlendChunks × 4 m; Interleaved adds its recorded two-manager-chunk warp amplitude to the blend width. The nominal bands still touch exactly; the separate interpenetration field records any permitted physical crossing. Current Core interpenetration is 0 m because it does not apply the declared blends.

Each plan audited 21 points: one Core voxel (0.25 m) below, at, and above every distinct content, active-band, configured-band, and transition-zone endpoint. The remaining points agreed with the snapshot. Every disagreement was an uncovered snapshot point answered by a named compiled analytic fallback:

Prototype Probe Z (m) Actual Core dispatch Density / occupancy
SurfaceWorld −632.250 compiled-analytic/TunnelNetwork +1, air
SurfaceWorld 8.000, 8.250, 8.750, 9.000, 9.250 compiled-analytic/TunnelNetwork +9.648438, +10.64844, +12.64844, +13.64844, +14.64844; all air
FI −632.250 compiled-analytic/TunnelNetwork +1, air
FI −120.000, −119.750 compiled-analytic/FloatingIslands −108.4793, −107.4969; solid
FI −68.250, −68.000, −67.750, −60.250 compiled-analytic/FloatingIslands −4.125; solid at each point
FI 4.000, 4.250 compiled-analytic/FloatingIslands +0.671875, +2.253906; air

Probe summaries: SurfaceWorld 6/21 disagreements; FI 9/21. Full per-point records are in Saved/Linux/linux21/boundary-probes-{surface-world,floating-islands}.log.

Identity, output parity and cost

Snapshots round-tripped through canonical JSON. At W1/W8/W12 their bytes were identical per recipe:

Recipe Stable identity Canonical JSON SHA-256
SurfaceWorld resolved-layout-v1-fnv64:63cf4d2661149fcd 267586b3da9bc5c08c654c097559b205222f53c594c4c4332cb4929fd3d75c05
FloatingIslands resolved-layout-v1-fnv64:1d90167f37ef9323 7bb9e9d745de3a2edf4276f507a5e4c082ff86aa73d9c1ad7e77c1b4d8b8bea8

The 28 hash runs (both recipes, Clang fp-contract=off and GCC default, W1/W8/W12 and W12×5) matched all 12 L19 rows per run. The 14 dedicated 24 m crossing runs also matched all 12 L19 crossing rows. The table gives the final Clang W12×5 rows, in density/mesh/payload/topology order; each equals its L19 reference.

Scope SurfaceWorld FloatingIslands
Full detail 0ee0579bd15cbbe4 / 32e5d4964d610fee / 1932b96ee4b1d910 / 69743c6bad3447dc 43034299d33f2536 / a41e8353ec4bbe9c / cd0e3e15eef827b0 / 0b3c3f13cc1d6f8a
Whole view c10697a8f48380c7 / 4197fc1072f0ff58 / 7b3e616ec9459851 / c879e35592bf33e5 00bc3607a7839854 / 4baa66127c2b0892 / e11ef05e851a1517 / 1278bc4b1fffb869
LOD 0 769f2a706d585a72 / 33eeeb39fa443816 / 645621a1d968983f / c2457ed905036c9d ccf97d8e95163a35 / 3333fa0ddebdece2 / d1906bffc2b9d6f2 / a261f3d965e15c12
LOD 1 69cc5a5c0a2c60af / b48335f5410c57d5 / d15c5480162ab8ba / feca1bd025823604 25fa2f0fa7fbb6e6 / c549c519707ac1d7 / 66f797cde4ebdecf / 2383982a12a27ee5
LOD 2 85deed5683a77202 / 53469895987aeea2 / e55f8ae7e1532033 / d5feb12a0e85c09b c0577decd8a02cab / 3ccf08b7be6edc5b / 0abcbbda5a06c110 / 11c77b71b606fe75
LOD 3 6518caefb3be7e7f / ec513c90b853a614 / f62fa1137ff17f82 / ccf1dcf681965816 386e0c0ef2d7c920 / 1ee2c82d34ad9918 / 000a6514ba018406 / 1b4523b19e90f305
LOD 4 62d4be96021992f4 / 42706847cb9c744a / eab76f9634e4b9bd / 207ffbb6ef184397 e8117a3a803be9f8 / 8a6c36cae1fe0e30 / c839f1b1629eff8c / 0ce9d7ea77b4f62b
LOD 5 5e4a8c38b8cea6fc / 76adc9ae86988e27 / 938975bf7cc6d94d / 42e135856abdbcac ca6d1df453c6b600 / 02c90d834d9a3fb6 / 4364c37d526f4104 / 1b1cf40d25e50ddf
LOD 6 e036e95b9006945b / a880cc101a4ed957 / bd82f1aefad6dd89 / 5e9f3408345d95b3 6764e347b08603a0 / 46c6ed9a1f029b94 / 5b8dc9d5b7cb0d3d / a10a4a69a93eac4d
LOD 7 8ee358af56a30d8d / 5cbd8e5965a2cc3f / d4a7fe5d9e4bde30 / 4dd52cd090a9af78 c7cd1b483c598595 / a545eb567dc4a0df / b0a1fb225437e05a / 301d1b884c509550
LOD 8 c3458e1cbdb9c471 / fba3698d21dd1be0 / 77dfb814eac3a24c / c9514f1580c42449 7b6e9279b4993109 / cc63440d9867a18d / 12f5cec78b38fa1b / eed919db6db6b2a7

Exact-query rows (density/unclamped, detail, collision): SurfaceWorld e4d4a8eb95b35933 / e4d4a8eb95b35933, efcba20c0c70c415, e604823a249029bf; FloatingIslands 87e5c0dbf9ee9ee2 / 87e5c0dbf9ee9ee2, efcba20c0c70c415, e604823a249029bf. The representative 24 m crossing W12×5 whole-view row is the SurfaceWorld row above; all crossing full-detail, LOD and exact-query rows matched the L19 crossing reference.

Five interleaved hashing-off W12 pairs against L19 measured SurfaceWorld medians 1.510 s old / 1.512 s new (+0.14%) and FI 13.487 s old / 13.381 s new (−0.79%). The opt-in snapshot is constructed once at plan time, outside tile workers; ordinary standalone evaluation does not request it. No hash rows were produced during these pairs.

Clang and GCC builds passed at 12 jobs. Final build peak process-tree/single-process RSS was 2,697,676/450,248 KiB (Clang) and 4,570,704/897,024 KiB (GCC). The final evidence runner's maximum single-process RSS was 583,736 KiB. All runs used CPUs 0–11 and stayed below the per-run limit; no governor or system changes were made.

Failed and retried runs

  • An initial snapshot invocation omitted --stream-benchmark --stream-pipeline and exited 2; adding the required flags passed.
  • Early Clang builds caught a strates member typo, then an audit initializer/type error. Both were fixed; the final Clang builds passed.
  • The first complete evidence pass exited 1 at boundary probing because the audit read the host manager after the harness had released it. Dispatch provenance was moved to Core's live selector; the final audits passed.
  • One GCC build wrapper was interrupted (exit 130) while diagnosing an empty progress log, then rerun successfully. No runtime/hash run timed out or exceeded 15 minutes, and no L19 hash mismatch remained.

Owner note

This records the present strata and confirms the selected ceiling → content → bedrock model. FI still has no floor in v3; SurfaceWorld has no volumetric floor or separate ceiling; the 8 m / 4 m dispatch conversions leave a 60 m FI-prototype gap answered by analytic fallback. Core currently ignores the configured transition blend at these interfaces. Bedrock and ceiling protection remain explicit options with diggable defaults. This round changes no world output.

The Unreal adapter adds only a separate resolved_layout JSON field beside world_assembly; that small edit could not be compiled on this Linux machine. No async path, density evaluator, hash input, or recipe version changed. No commit, push, or stash was made.

Orchestrator review (Claude)

  • Merged: read-only snapshot + validator, no world change (28 hash runs and 14 crossing runs equal L19; cost within noise). The Unreal adapter gains a 193-line resolved_layout export beside world_assembly. It is export-only, but UNCOMPILED here; it must be built on the owner PC.
  • Key facts for the owner: the authored params put the SW top at −60 m (4 m owner chunks), Core builds SW at −120…−632 m (8 m conversion); the 60 m between FI and SW is unowned and answered by the analytic FloatingIslands fallback as solid. No strate has an active bedrock band; SW has no ceiling band (mesh fallback only); configured Gradient transitions are ignored by Core.
  • To check next: whether the "ledges" ground seen under the islands is this fallback solid in the unowned gap rather than SW terrain (L19 attributed them to SW at about −60…−73 m).