Island-only worker context replaced by a shared worker-local candidate domain (WorldAssemblyFeatureTileListV1 / ScopedWorldAssemblyFeatureQueriesV1) serving SurfaceWorld, FloatingIslands and far-shell queries; a per-domain cost hint keeps the full scan on small plans. Content placement prepares the same queries and skips proven air: owner island cell p95 7.07 -> 0.24 ms; populated fixture 572 exact placements, 3.27 s -> 29 ms. Full/candidate hashes equal with dropped-feature controls on both families; S1 default W1/W8/W16 hashes reproduced; Core-off and M2 fixtures pass. Default contract for future families in ARCHITECTURE 8.23. Run on gpt-6.1-sol medium. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
270 lines
18 KiB
Markdown
270 lines
18 KiB
Markdown
# World assembler S2 / M3 Round 6
|
||
|
||
Date: 2026-10-18. Author: Sol. Base: `d6e6942`, branch `assembler/world`. No commit, push or stash.
|
||
|
||
## Shared engine change
|
||
|
||
The island-only worker context has been removed from `ShapeWorldInternal.h`.
|
||
`WorldAssemblyFeatureTileListV1` and `ScopedWorldAssemblyFeatureQueriesV1` now carry a shared,
|
||
worker-local candidate domain, keyed by immutable recipe/plan identity. Nested scopes restore their
|
||
predecessor; samples outside the prepared domain use the full evaluator. Tile preparation includes
|
||
the mesher's normal halo and prepares both existing native families. Derived far-shell field calls
|
||
stay in that scope too. The old island payload names remain aliases so S1 research tools still build.
|
||
|
||
Families retain their mathematics: SurfaceWorld declares XY influence for column writers and finite
|
||
no-op boxes for volumetric exceptions; islands retain S1's root-aware positive-density certificate
|
||
and ordered island/connector groups. The engine never assumes that density magnitude is Euclidean
|
||
distance. Unknown operations stay active. A shared `candidateEvaluationUseful` cost hint is resolved
|
||
once per domain. The measured one-feature SurfaceWorld and four-island plans prefer the full scan;
|
||
larger plans retain culling. Audits force candidates on small plans to prove their bounds too. No density arithmetic, recipe serialization/version,
|
||
voxel-size resolution, queue, Epoch, edit lock or streaming policy was changed.
|
||
|
||
The default contract for future caves, shafts, pits, passages and rivers is documented in
|
||
ARCHITECTURE §8.23. Declare conservative bounds and any value-side proof needed to preserve exact
|
||
positive values. Preserve operation order; unknown proofs evaluate normally. An air-base family can
|
||
also declare conservative solid support, allowing the shared column union to shorten a search.
|
||
Solid-base caves cannot use that air proof. Every new proof needs equal full/candidate hashes and a
|
||
dropped-needed-feature control.
|
||
|
||
Surface biome-site selection already searches a fixed local lattice and is cached by XY. It is not
|
||
a global feature scan. We preserve that machinery and target its finite feature loops. Existing
|
||
cave extraction keeps its existing line/spatial bins; this round makes no new cave performance claim.
|
||
FarShells remains derived repair geometry with existing connector/stratum candidate filtering, rather
|
||
than becoming another canonical generator. Its field queries inherit the shared scope.
|
||
|
||
## Placement cause and correction
|
||
|
||
Native island placement previously scanned the entire owner strate, calling a full-plan evaluator
|
||
at each step. The owner workload used about 7,763 density queries per cell in S1. Its sampling cell
|
||
was mostly air, so optimizing only the top-anchor helper did not remove the dominant work.
|
||
|
||
Snapshots now declare conservative support bounds once. Decoration cells and landmark columns
|
||
prepare the same shared feature queries as meshing. A shared support-union query skips proven air,
|
||
including entirely empty columns. The march retains its original lattice phase, crossing budget,
|
||
four bisections, interpolation, normals and placement hashes. No alternate approximate top surface
|
||
was introduced. Companion queries get their own nested domain when needed.
|
||
|
||
Validation preserves the owner's palette and reports it separately from a deliberately populated
|
||
fixture. That fixture uses dense deterministic floor placements, both water classifications, the
|
||
resolved biome tags, and a staged decoration mesh (engine cube fallback if none is available).
|
||
It checks exact full/candidate transforms and canonical island density residuals, then merges and
|
||
applies real HISM regions and clears them immediately. CPU totals include cell preparation, merge
|
||
and region application; the identical application/merge cost is shared by both comparison totals.
|
||
The isolated HISM fixture bypasses live landmark footprints, which otherwise suppress its instances.
|
||
Normal region application keeps those footprints enabled. Null RHI does not measure GPU upload,
|
||
rendering, a rendered frame, or asynchronous cluster-tree completion. Existing native content
|
||
snapshots still describe the planned base field; this round does not add edit-aware reanchoring.
|
||
|
||
## Measurements and proof
|
||
|
||
The field audit replays the plans exported from BuildHost's staged owner route. These are the
|
||
same transient owner-height fixtures described in Round 4: the saved settings point to `DA_Strate4`,
|
||
while the logged SurfaceWorld layout is reconstructed from `DA_Strate1` without saving an asset.
|
||
No Season is assigned in these copies. The island plan has 4 islands and 3 connectors; the surface
|
||
plan has one finite type-4 shelf. The stress cases extend those plans to 256 islands/240 connectors
|
||
and 64 surface shelves plus one XY height writer and one XY cap writer. They do not change any production recipe.
|
||
|
||
### Forced candidate proof and cost
|
||
|
||
Each island row samples 64 tiles / 64,000 points, including the normal halo. Each surface row
|
||
samples 64 tiles / 46,656 points and hashes density, ground, cap and biome ID (186,624 values).
|
||
Surface timings start both paths with cold column caches by changing only the local validation
|
||
cache epoch. Final timing replay ran without an overlapping build or Unreal process.
|
||
|
||
| Family / plan | Full-scan p95 ms | Forced-candidate p95 ms | List build p95 ms | Full and candidate hash | Negative control |
|
||
|---|---:|---:|---:|---|---|
|
||
| Islands, staged owner | 0.9803 | 1.0194 | 0.0012 | `cb94db3ca317d001` | detected |
|
||
| Islands, 256 stress | 110.570 | 7.3619 | 0.0803 | `d83bac7778f3d62a` | detected |
|
||
| Surface, staged owner | 0.4748 | 0.4559 | 0.0003 | `4207efd4ac869108` | detected |
|
||
| Surface, 64 shelves + height/cap writers | 0.7084 | 0.4078 | 0.0011 | `f1c6ea123284cc38` | detected |
|
||
|
||
Every row has zero mismatches. Each control removes a needed feature; the island control removes
|
||
its group certificate too. The shared-scope audit also checks identity/domain fallback, nested empty
|
||
scope restoration, scope teardown and the full-scan cost hint.
|
||
|
||
The owner island point audit offers no useful culling gain. Stress p95 improves about **15×**;
|
||
3,362 stress lists cost 216.615 ms in total (108 owner lists cost 0.0766 ms). The stress template comes
|
||
from the actual staged owner plan, whereas S1's standalone audit used Round 3's manifest; its 57×
|
||
figure is not an apples-to-apples regression comparison.
|
||
|
||
Surface's single feature has no material point-query gain. Its column computation alone is about
|
||
0.368 ms of the 0.475 ms p95, and the existing bounded biome/cap path stays intact. The stress case
|
||
reduces p95 by about 42% while column cost stays similar (0.3699/0.3552 ms). There is no reason to
|
||
force a global biome/cap feature list into this owner plan.
|
||
|
||
Warmed BuildHost tile timings initially exposed a 7–13% island regression from forcing group
|
||
bookkeeping on four islands. That led to the shared cost hint. The final default path keeps its small-plan timing:
|
||
|
||
| Staged plan | LOD | Full tile p95 ms | Default shared-engine p95 ms | Full / shared shell p95 ms |
|
||
|---|---:|---:|---:|---:|
|
||
| Islands | 0 | 94.984 | 95.094 | 0.0002 / 0.0003 |
|
||
| Islands | 1 | 87.280 | 87.577 | 0.0005 / 0.0003 |
|
||
| Islands | 7 | 20.442 | 20.409 | 16.918 / 16.882 |
|
||
| Islands | 8 | 73.038 | 72.923 | 69.930 / 69.844 |
|
||
| Surface | 0 | 11.238 | 11.178 | 0.0001 / 0.0001 |
|
||
| Surface | 1 | 7.346 | 7.354 | 0.0001 / 0.0001 |
|
||
| Surface | 7 | 32.739 | 32.381 | 26.378 / 26.021 |
|
||
| Surface | 8 | 168.545 | 168.063 | 135.960 / 136.310 |
|
||
|
||
Each row measures eight owner clipmap keys after warming both routes, including list preparation,
|
||
meshing and density hashes. All four output hashes match on every paired key. This is a small,
|
||
hash-capture workload, not a rendered-frame percentile. The far-shell stage excludes LOD8 cap
|
||
refinement. There is no measured reason to add another shell-specific feature index for these
|
||
small owner plans; larger canonical fields inherit their family culling through the shared scope.
|
||
|
||
### Island placement and active populated cost
|
||
|
||
| Workload | Full scan | Shared engine | Result |
|
||
|---|---:|---:|---|
|
||
| Owner palette, cell p95 | 7.0706 ms | 0.2385 ms | about 29.6× faster |
|
||
| Owner palette, 64-cell preparation | 412.960 ms | 3.840 ms | same zero authored placements |
|
||
| Populated fixture, populated-cell p95 | 53.9875 ms | 2.1501 ms | 14 populated cells / 572 placements |
|
||
| Populated fixture, all 64 cells | 3270.478 ms | 28.436 ms | exact transforms match |
|
||
| Merge / real HISM apply | 0.0623 / 0.6068 ms | same products/cost | 572 applied instances |
|
||
| Populated active batch CPU total | 3271.147 ms | 29.105 ms | about 112× faster |
|
||
|
||
Candidate density calls are 58.84 per authored cell, versus S1's 7,763.38 for the same owner plan.
|
||
Legacy remains 193.25 calls/cell and 0.2855 ms p95. Stationary manager update p95 is 0.0005 ms;
|
||
that idle number is separate from the active batch totals above.
|
||
|
||
All 572 populated transforms match their full-scan counterparts exactly. All 572 canonical island
|
||
anchor checks pass; maximum density residual is 0.035156 Core voxel density units. The existing
|
||
terrain/content tests pass on both island and connector: island height difference is 0.373 cm,
|
||
connector difference 0.096 cm. Capsule contacts, Blueprint carve/fill, water and atmosphere pass.
|
||
No approximate anchor shortcut is used.
|
||
|
||
The six-entry authored palette still produces zero placements in these 64 cells. The populated
|
||
fixture is explicit synthetic coverage; it does not claim the cost of the owner's tree Blueprint
|
||
logic or rendered foliage. Active totals sum worker preparation and synchronous merge/application
|
||
calls over the whole batch, not one frame. Footprint suppression is disabled only for the isolated
|
||
fixture, which is immediately cleared. Async HISM tree completion and rendering are not included.
|
||
The earlier SurfaceWorld populated diagnostic produced 8,192 synthetic transforms with exact
|
||
full/candidate agreement, but had no mesh application in that build and warm-cache ordering;
|
||
its speed figures are not used as a SurfaceWorld improvement claim.
|
||
|
||
### Default identity
|
||
|
||
No recipe version was bumped: all changes select exact evaluators or skip certified air.
|
||
The full SurfaceWorld actor run reproduced S1's W1/W8/W16 matrix:
|
||
`0cd2a1a4152ee4aa / 17775c835711e5a3 / a27224958fc27d7b / 3821fea90b134ce4`
|
||
(density / mesh / payload / topology). Island assembly/recipe/plan remain
|
||
`9c372e7bfb5b8310 / 5e0370d9f95f1c15 / dbbda4932378047a`.
|
||
The final-source island W1/W8/W16 matrix is also exactly S1:
|
||
`4dcfb37585d7d986 / 725a18374c5623de / fb345d8cb319d18b / 76f2846be8efb5f4`.
|
||
|
||
The full SurfaceWorld actor pass precedes the final cost hint; the final-source focused replay
|
||
checks its LOD0/1/7/8 full-versus-default hashes after that selection-only change. Core-off's separate
|
||
final run proves unchanged legacy density at three probes and 12.5 cm. M2 V1/V2 five-fixture repeats,
|
||
same-LOD borders, V2 MC identity and 125 doorway phases all pass. Existing doorway contour
|
||
mismatch remains 22.844 cm in that fixture audit; this round does not claim a new seam solution.
|
||
|
||
### Run ledger and limits
|
||
|
||
| Run | Result / limit |
|
||
|---|---|
|
||
| Standalone Core library builds (four iterations) | all first-attempt passes; final link-safety audit checks 220,200 symbol lines |
|
||
| BuildHost UBT/UHT builds (six iterations) | all first-attempt passes; latest 62.03 s; 18 Core shims, link-safety 95,738 symbol lines; five staged asset hashes verified |
|
||
| Preliminary island actor | pass, about 3m57s, 3.19 GiB peak; canonical hashes and 572 anchor checks |
|
||
| Full SurfaceWorld actor | pass, about 12m15s, 3.58 GiB peak; streaming, collisions, motion, edits, geometry/anchors, W1/W8/W16 |
|
||
| Island actor with new HISM fixture | exit 1, about 4m14s; landmark footprint suppression hit the fixture count assertion; field/worker/anchor gates passed |
|
||
| Final island actor, cost hint and isolated HISM fixture | pass, about 3m52s, 3.03 GiB peak; W1/W8/W16, 572 exact anchors and applied instances |
|
||
| Final focused SurfaceWorld tile replay | pass, about 21s, 2.70 GiB peak; 32 paired LOD0/1/7/8 keys, all hashes equal |
|
||
| Final M2 V1/V2 fixtures | pass, about 17s, 2.34 GiB peak; repeats, borders, MC identity, 125 doorway phases |
|
||
| Final Core-off | pass, about 14s, 2.14 GiB peak; legacy density and scale unchanged |
|
||
| Final composed standalone audit | pass, 7.87s, about 64 MiB peak; all four full/candidate rows exact and controls detected |
|
||
|
||
Build iterations cover initial integration, added diagnostics, active fixture application, warmed
|
||
measurements, duplicate-validation removal, and the cost-hint/fixture fix. Their logs are the six
|
||
`results/host_build*.log` files and four `results/core_build*.log` files. The standalone audit was
|
||
replayed as those diagnostics were refined; the final composed stress also exercises XY height/cap
|
||
writers at unrelated Z values. Every replay passed its field/control assertions.
|
||
|
||
One actor run failed its new populated-HISM count
|
||
assertion after passing field/worker/anchor gates: normal `ApplyRegion` also clears live landmark
|
||
footprints. The fixture now explicitly isolates those footprints; normal application defaults to
|
||
keeping them enabled. The failed log is `results/islands_hism_fixture_failed.log` (exit 1, no crash).
|
||
|
||
Preliminary surface tile timings used a cold full path followed by a warm candidate path. Those
|
||
numbers are discarded; the final focused replay warms both paths. The first standalone audit
|
||
also overlapped compilation; it passed functional controls, but its timings are discarded. Idle
|
||
replays and the final-source replay are all recorded in `results/shared_audit_ledger.txt`.
|
||
An audit iteration removed duplicate plan validation from scoped island samples. All standalone
|
||
field audits passed; `vswhere.exe` was not found by the installed VC setup script, but CL compiled
|
||
and the audit ran successfully. A documentation-edit attempt failed on Python's default Windows
|
||
encoding; it changed no files and was corrected with UTF-8/apply_patch.
|
||
|
||
The first preliminary island launch used the existing launcher; I applied 12-CPU affinity during
|
||
that run, then added `-corelimit=12` and 12-CPU affinity to the launcher for subsequent runs. Builds
|
||
used at most eight UBT actions, or eight UBT plus four standalone compiler actions. W16 remains a
|
||
logical determinism partition under the 12-CPU execution cap. Each Unreal launch checks 4 GiB free
|
||
RAM and refuses another Unreal process. Every process is guarded at 8 GiB and 900 seconds.
|
||
No viewer or GPU capture was launched. No run exceeded its memory/time guard, no timeout occurred,
|
||
and no run returned `0xC0000142` (so its one-retry rule was never needed).
|
||
|
||
Crash audit: `Saved/BuildHost/HostProject/Saved/Crashes/` still contains only
|
||
`UECC-Windows-F1A3EFD5469F5DD62E68EBBACAC84376_0000` (2026-09-17). The isolated User crash root
|
||
still contains only `UECC-Windows-7B23387E4235BCFEDE42BC9D637E41CB_0000` (2026-10-08).
|
||
No new UECC folder exists in the host, staged plugin or isolated User crash roots. The final
|
||
commandlets finished with zero errors; known missing staged `/Game/VoxelForge/Blocks/NewDataAsset`
|
||
and certificate-store warnings remain. The failed fixture run logged its explicit test error and
|
||
exited normally.
|
||
|
||
Evidence: `results/SUMMARY.json`, `results/shared_audit_attempt_1.stdout.log`,
|
||
`results/island_tile_lists.json`, `results/shared_audit_ledger.txt`, `results/surface_full_actor.log`,
|
||
`results/islands_full_actor_final.log`, `results/surface_warmed_final.log`,
|
||
`results/m2_fixtures_final.log` and `results/core_off_final.log`. Owner plans exported under
|
||
BuildHost's isolated User Saved directory are the standalone replay inputs.
|
||
|
||
No owner project/editor was opened, closed or built, no `.uasset` was edited, and no junction,
|
||
symlink, commit, push or stash was created. All authored writes and build outputs stayed inside
|
||
this plugin's workspace/BuildHost.
|
||
|
||
|
||
## My view of the boundary
|
||
|
||
The next structural improvement should be a prepared immutable family-provider table per strate.
|
||
Today the shared scope is generic, but the world and content snapshot adapters still enumerate the
|
||
two concrete field families, and preparation rebuilds metadata vectors for each query. A provider
|
||
could publish stable feature IDs, bounds, an optional value certificate and optional surface/support
|
||
queries once, while the engine handles consumer domains, ordering, cache lifetime and instrumentation.
|
||
That would also give future cave/rivers placement the same entry point without adding another
|
||
content snapshot class. I have not rebuilt the architecture for that proposal in this round.
|
||
|
||
Evidence required before doing it: a many-strate preparation profile showing the cost of rebuilding
|
||
bounds/group summaries; separate point-evaluation and list-build allocation counts; equal full versus
|
||
prepared hashes across owner plans, halos and edited epochs; a deliberately stale-provider control;
|
||
and no regression in time to collision-ready terrain or peak memory. Preserve the current bounded
|
||
lattice path for procedural biomes and the current cave interval engine until a measured replacement
|
||
wins. A universal list of shapes would not capture those processes or their proofs.
|
||
|
||
## Files and compile spots
|
||
|
||
New source files:
|
||
|
||
- `Standalone/Research/WorldAssemblerM3/Round6/SharedFeatureListAudit.cpp` — standalone owner/stress audit.
|
||
- `Standalone/Research/WorldAssemblerM3/Round6/BuildSharedFeatureListAudit.ps1` — guarded audit compile/run script.
|
||
|
||
Modified runtime/Core sources:
|
||
|
||
- `Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h`
|
||
- `Standalone/Core/src/WorldAssemblerInternal.h`
|
||
- `Standalone/Core/src/FloatingIslandsInternal.h`
|
||
- `Standalone/Core/src/ShapeWorldInternal.h`
|
||
- `Standalone/Core/src/VoxelForgeCore.cpp`
|
||
- `Source/VoxelForge/Private/VoxelContentManager.cpp`
|
||
- `Source/VoxelForge/Public/VoxelContentManager.h`
|
||
- `Source/VoxelForgeEditor/Private/VoxelForgeExploreCommandlet.cpp`
|
||
|
||
Also updated `Tools/TestVoxelForgeCoreWorldHost.ps1`, CODEMAP §3, ARCHITECTURE §8.23 and the dialogue.
|
||
Likely compile spots: the public Core API/export boundary and canonical Core shim; shared scope/TLS
|
||
linkage; `VoxelContentManager.h` parsing and its runtime translation unit; editor commandlet timing
|
||
and fixture code. No new runtime translation unit or manifest shim is required.
|
||
|
||
## Owner note
|
||
|
||
Keep Core enabled at the existing 25 cm setting. There is no new generator setting to configure.
|
||
The shared engine now narrows terrain searches for both native families and skips empty space when
|
||
placing island content. Terrain shapes and default hashes are preserved. The populated validation
|
||
fixture measures placement without changing your decoration assets. Ready to build your project
|
||
when you choose; I only build and launch the isolated plugin BuildHost.
|