From ebae71b1429c35950199eaa4ef0e16ca2b88e16a Mon Sep 17 00:00:00 2001 From: Fr0zka Date: Sat, 31 Oct 2026 02:11:29 +0100 Subject: [PATCH] research: R46 generator capability matrix (read-only) Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1 --- .../WorldAssemblerM3/Research46/PROMPT.md | 35 ++++++++++++++++ .../WorldAssemblerM3/Research46/REPORT.md | 41 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 Standalone/Research/WorldAssemblerM3/Research46/PROMPT.md create mode 100644 Standalone/Research/WorldAssemblerM3/Research46/REPORT.md diff --git a/Standalone/Research/WorldAssemblerM3/Research46/PROMPT.md b/Standalone/Research/WorldAssemblerM3/Research46/PROMPT.md new file mode 100644 index 0000000..7d6256c --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Research46/PROMPT.md @@ -0,0 +1,35 @@ +# VoxelForge — research R46 (read-only): generator capability matrix + +You are a researcher. **Read only: do not edit, create or delete any file, and do not build, run or test anything.** +Read the code, reports and design docs. Be thorough: verify each claim by hand in the code, and mark each one +[CODE] file:line, [MEASURED] report, or [INFERENCE]. Branch `assembler/world` (`cbbfd46`). + +## Why + +The owner approved the next focus (from `Standalone/Research/WorldAssemblerM3/Astra4/REVIEW.md` #3): turn generator +breadth into playable variety. First we need an honest picture of what each strate/generator family can do today. + +## Task + +Find every generator family / strate type: surface world, floating islands, caves/cavern, tunnel network, vertical +shafts, dreamcore/liminal, and any others in the code (Core native, legacy fallback, op stack, composer). For each, +fill one row: +- **Core path:** native Core evaluator, legacy fallback, or not in Core at all? Where is it dispatched? +- **Entrances/exits:** arrival and departure mouths, and the primordial law (arrival → departure walkable). +- **Interior connectivity:** walkable, and audited by what? +- **Edits:** does digging (diff layer) work on it in the Core path? +- **Materials/content:** material IDs, decorations, foliage, lights, anything placeable. +- **Far terrain:** does it have far LOD/shells? +- **Performance:** latest measured near-ready, with the report. +- **Identity:** what makes it look and feel distinct today; is it recognisable without a label? +- **Owner world:** used in `Standalone/data/owner_world.json`? Which strate letter (SW/FI/TN/VS)? +- **Gaps:** what's missing for it to be a "place" with its own identity and a destination. + +Then: +1. Which three families are closest to being distinct places (the owner's example: a grounded cave, an island + environment, one liminal identity)? What is the smallest work to get each there? +2. What does the composer (`VoxelSeasonManifest.cpp`, `COMPOSER-NOTES.md`) already do for tagged content, and what's + the smallest next step? +3. Risks: places where the Core path silently falls back, or where a family exists in docs but not in code. + +Write plain Markdown: the matrix plus ≤ ~800 words of findings. diff --git a/Standalone/Research/WorldAssemblerM3/Research46/REPORT.md b/Standalone/Research/WorldAssemblerM3/Research46/REPORT.md new file mode 100644 index 0000000..1c427ac --- /dev/null +++ b/Standalone/Research/WorldAssemblerM3/Research46/REPORT.md @@ -0,0 +1,41 @@ +# VoxelForge R46 — generator capability matrix + +Read-only review of `assembler/world` at `cbbfd46`; no files changed, and no builds, runs, or tests were performed. + +## Shared dispatch and contracts + +[CODE] The eight `ECaveGeneratorType` values are TunnelNetwork, FlatPlain, CrystalChamber, Maze, SurfaceWorld, VerticalShafts, FloatingIslands, and Underwater. `NativeCaves`, `NativeLattice`, and `ProfiledHeightfield` are optional Core recipes layered onto those types, not additional strate types. [VoxelStrateTypes.h:175]() [VoxelStrateTypes.h:203]() + +[CODE] Core binds native SurfaceWorld and FloatingIslands evaluators when matching plans exist; it binds native cave/lattice graph fields when their capabilities are present. Otherwise it attaches a legacy generator adapter. The density dispatcher exposes paths such as `SurfaceWorld-native`, `SurfaceWorld-legacy`, `Caves-native`, and `compiled-analytic/`. [ShapeWorldInternal.h:600]() [ShapeWorldInternal.h:640]() [ShapeWorldInternal.h:649]() [ShapeWorldInternal.h:3101]() + +[CODE] The adapter plans inter-strate passages and resolves the layout before Core evaluates it. The composer’s primordial law checks a player-fit, walk-only path between the center-column interior endpoints; it is an arrival-to-departure test, not a requirement that every disconnected room or shaft join the largest component. [VoxelForgeCoreAdapter.cpp:1545]() [VoxelSeasonManifest.cpp:2194]() [VoxelStrateMeasure.h:315]() + +[CODE] Core edit transactions become density brushes applied after field composition. The same stage covers native and fallback density paths. [VoxelForgeCore.cpp:3307]() [ShapeWorldInternal.h:3036]() [ShapeWorldInternal.h:5201]() + +[CODE] Any strate can author decorations, landmarks, ambient actors, and creatures. Placement supports actors or instanced meshes; Core material samples default to host ID 1 and can carry two resource IDs. These are shared content hooks, not a distinct palette per generator family. [VoxelStrateDefinition.h:352]() [VoxelStrateTypes.h:2204]() [VoxelForgeCore.h:1273]() + +**Performance key:** L125 is the latest absolute owner four-strata LOD0–2 timing table I found; L130’s paired comparison found no measurable change. L125 labels rows S0–S3, so mapping them to SW/FI/TN/VS in the explicit L109 order is an **[INFERENCE]**. Values below are W8/W12 medians in seconds; they measure the owner layout, not isolated native evaluator costs. [L125:24]() [L125:28]() [L125:35]() [L130:9]() [L109:21]() + +## Matrix + +| Family / owner | Core path | Entrances, connectivity, and primordial law | Edits, materials, and content | Far terrain and performance | Identity and gaps | +|---|---|---|---|---|---| +| **SurfaceWorld — SW** | [CODE] Native `Heightfield2D` when a matching surface plan binds; legacy SurfaceWorld fallback otherwise. [ShapeWorldInternal.h:600]() [ShapeWorldInternal.h:6685]() | [CODE] Owner export enables an open surface entry; SW also supplies the 0–1 departure mouth. [MEASURED] The shared route audit passed 21,425/21,425 centerline samples. [owner_world.json:1]() [L125:39]() | [CODE] Digging works. Surface supports biome terrain/material signals, water, and the shared placement hooks; no family-specific content pack is proven in the owner export. [VoxelStrateTypes.h:1609]() | [CODE] Common mesh LOD and far shells; native surface plans also get far ground/cap refinement. [MEASURED] **SW:** 0.780/0.807 near-ready. [VoxelForgeCore.cpp:2996]() [VoxelForgeCore.cpp:3073]() | [INFERENCE] Outdoor hills, mountains, rivers, and beaches have a legible silhouette. It still needs distinctive foliage/materials, sound, and a destination to read as a complete place. | +| **FloatingIslands — FI** | [CODE] Native island field when a matching island plan binds; otherwise falls through to the legacy analytic path. [ShapeWorldInternal.h:620]() [ShapeWorldInternal.h:6692]() | [CODE] Owner route enters from SW and departs toward TN; native island route audits check capsule clearance and support. [MEASURED] The owner passage checks passed. [MEASURED] L67 reported the owner FI path as `compiled-analytic/FloatingIslands`, not native; the reason was unresolved in R36. [L67:5]() [Research36:11]() | [CODE] Digging works; foliage, landmarks, ambient actors, and lights can use shared placement systems. [INFERENCE] No island-specific owner palette/content is established by the export. | [CODE] Common far mesh and shell paths. [MEASURED] **FI:** 0.981/0.962 near-ready in the owner layout. | [INFERENCE] Floating land silhouettes can be immediately recognizable. Confirm native dispatch, then add an island ecology, a landmark, and a clear route/destination. | +| **TunnelNetwork — TN** | [CODE] The owner’s regular path is Core’s legacy/compiled-analytic fallback. `NativeCaves` is optional for TN/Underwater and evaluates authored room/tunnel graphs. [VoxelForgeCoreAdapter.cpp:145]() [VoxelGenerator.cpp:2645]() | [CODE] Owner arrival from FI and departure toward VS. [MEASURED] Inter-strate walkability passes; that does not prove every interior room is connected. Native cave fixture flood-fill connected its chosen arrival/departure pair. [L54:21]() | [CODE] Digging works. Generic cave decorations/landmarks/lighting are available; there is no family-specific Core material palette. | [CODE] Common far LOD/shells. [MEASURED] **TN:** 1.025/0.965 near-ready in the owner layout. Optional native-cave fixture: 0.177 s near ring and 0.706 s cold whole view, a different workload. [L54:37]() | [INFERENCE] Rooms and tunnels read as caves, but the owner route lacks a content-defined destination. Small cave graph and a landmark/content pack would make it a place; translating the owner’s legacy parameters to native cave records remains separate work. | +| **FlatPlain** | [CODE] Legacy fallback/op stack only; it uses the slab builder. [VoxelGenerator.cpp:2600]() [VoxelDensityOpStack.cpp:9373]() | [CODE] No intrinsic mouths; shared passage planner supplies endpoints. [INFERENCE] Its open floor/ceiling band may connect the selected endpoints, but no family-specific arrival/departure audit was found. | [CODE] Digging works; shared decorations/landmarks can populate the chamber. | [CODE] Common far LOD/shells. [MEASURED] No separate near-ready timing found. | [INFERENCE] Open underground plain with columns. Needs a distinctive floor/ceiling profile, content, and destination; it has no native Core slab recipe. | +| **CrystalChamber** | [CODE] Same slab op-stack builder as FlatPlain; distinctness comes from parameter values, especially ceiling roughness. [VoxelGenerator.cpp:2600]() | [CODE] Same shared-mouth arrangement as FlatPlain; no family-specific walk audit found. | [CODE] Digging works. Crystal decoration is authorable through shared placement, not guaranteed by the geometry type. [VoxelStrateTypes.h:169]() | [CODE] Common far LOD/shells. [MEASURED] No separate near-ready timing found. | [INFERENCE] Hanging formations could distinguish it, but parameters alone do not supply crystal materials, lighting, or a destination. | +| **Maze** | [CODE] Legacy maze op stack; optional `NativeLattice` graph recipe, which is shared with VerticalShafts rather than a dedicated native maze generator. [VoxelForgeCoreAdapter.cpp:159]() [VoxelGenerator.cpp:2592]() | [CODE] Mouths are shared-planner endpoints; native lattice fixtures test capsule reachability between chosen endpoints. [MEASURED] L60 native lattice fixture: 0.561 s near ring, 1.701 s whole view—not the owner near-ready workload. [L60:19]() [L60:36]() | [CODE] Digging works; common content hooks apply. | [CODE] Common far LOD/shells; L60 streamed the lattice fixture through LOD0–8. [L60:15]() | [INFERENCE] Tight branching corridors are a recognizable grammar, but the native fixture’s helix/maze graph needs a content destination and stronger per-seed identity. | +| **VerticalShafts — VS** | [CODE] Legacy shaft op stack; optional `NativeLattice` is a generic authored graph, not a shaft-specific Core evaluator. [VoxelGenerator.cpp:2622]() | [CODE] Owner arrival comes from TN; the four-strata export has no lower fifth-stratum passage. [MEASURED] The composer found a VerticalShafts arrival/departure violation; L58’s lattice route passed but was a helix. [COMPOSER-NOTES.md:1437]() [Linux58:11]() | [CODE] Digging works; generic props and lights can be placed. | [CODE] Common far LOD/shells. [MEASURED] **VS:** 0.879/0.838 near-ready in owner layout. | [INFERENCE] Vertical silhouettes could distinguish it, but the native graph example is not an open shaft. Needs a shaft-specific core, safe landings, and a proven route. | +| **Underwater** | [CODE] TunnelNetwork density plus water behavior; optional NativeCaves recipe is accepted. No separate native water generator recipe. [VoxelGenerator.cpp:2638]() [Unreal1:131]() | [CODE] Shared passage mouths; composer’s law is walk-only, so it does not certify swimming or water traversal. [INFERENCE] A flooded route needs dry walkable sections or a separate traversal rule. | [CODE] Digging works; water and shared content are available, but the native assembly recipe does not itself provide an authored water feature. | [CODE] Common far terrain; far water presentation is not established here. [MEASURED] No separate near-ready timing found. | [INFERENCE] “Flooded cave” is a plausible identity, but water, lighting, air pockets, and destination spaces need authored treatment. | +| **Dreamcore / liminal** | [CODE] No `Dreamcore` generator type. Existing Core stamps/motif fields are overlays; motif override currently requires a resolved SurfaceWorld strate. [VoxelStrateTypes.h:175]() [WorldAssemblyPrototype.h:568]() | [CODE] Inherits mouths and connectivity from its base family; motif fixtures preserve route keepouts. [MEASURED] L60 motif overlay: 0.493 s near ring, 1.326 s whole view. [Linux56:21]() [L60:35]() | [CODE] Digging applies to the composed field; current motif kinds include carve arch/ellipsoid and fill pillar/dais/monolith/platform. [VoxelStrateTypes.h:222]() | [CODE] Base field uses common far LOD/shells. Motifs have LOD coverage, but no liminal-specific far treatment. | [INFERENCE] Motifs alone do not read as dreamcore. It needs a repeated spatial grammar, coherent palette/light/sound, and an explorable destination. Not in owner world. | + +Owner mapping: [MEASURED] the owner export references four fixed strata and opens the surface; the named four-family owner route is SW/FI/TN/VS. [CODE] The L125–L130 timings are for that owner layout. [owner_world.json:1]() [L109:21]() [L120:23]() + +## Findings + +1. **Closest to distinct places: TN caves, FI, and liminal overlays.** [INFERENCE] TN already has cave geometry and route proof: add one authored destination chamber plus a small landmark/material/light kit. FI already has a distinctive suspended-land silhouette and route support: first confirm its native dispatch, then add foliage, a landmark, and route cues. Liminal is the smallest overlay slice: reuse the flat/profiled base and existing monolith/platform stamps, then define one repeatable anomaly pattern and a matching content kit. These need authored destinations and themes more than new density families. + +2. **Composer status and smallest next step.** [CODE] `VoxelSeasonManifest.cpp` rolls candidates from a corpus, measures them, rejects vacuous/fragmented/primordial-law failures, and selects for grounded/outlier mix plus archetype/recipe variety. Promoted records carry an archetype tag and corpus provenance is tagged `project`, `default`, or `promoted`. [VoxelSeasonManifest.cpp:2523]() [COMPOSER-NOTES.md:431]() [COMPOSER-NOTES.md:1466]() Strate and biome gameplay tags are stored, but theme draws for materials, creatures, decorations, and audio are still open. [VoxelStrateDefinition.h:389]() [COMPOSER-NOTES.md:1484]() [INFERENCE] Smallest step: tag one real content class with multiple theme tags and let one seed-selected family draw a coherent, reviewable mini-pack. + +3. **Risks.** [CODE] Missing native plans/capabilities reach the legacy binding; path diagnostics are needed to distinguish them. [ShapeWorldInternal.h:649]() [MEASURED] The latest explicit owner dispatch note I found says FI/TN/VS used compiled analytic fields; L130 reports timing but not dispatch, so that path should be rechecked before calling those owner generators native. [Linux67:5]() [Linux130:9]() [INFERENCE] Dreamcore exists as a design goal, not a generator; NativeLattice proves routes but not a shaft identity; FlatPlain/CrystalChamber remain legacy slab fields; and water presentation remains outside the native Core recipe. \ No newline at end of file