wip(assembler): M1 round 4 PARTIAL -- stopped at owner's request (GPU coil whine at night)

Unverified mid-round state (cliff plates / horizon slab / routes in progress). Resume from here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-10-09 02:12:39 +02:00
1 parent 2c20f9eaea
commit 20c6d86f0e
11 files changed
+839 -47

No files matched your search

+26 -10
View File
@@ -79,14 +79,15 @@ Pass `analyticOnly = false` to retain the reference packed-page compiler. Packed
parent-cell coordinates and an 8-voxel apron; each covers a 128-voxel cube or one larger coarse
tile. This path remains available for parity checks and workloads that need the packed lattice.
## World assembler manifest v1 (prototype; evaluator v1 and v2)
## World assembler manifest v1 (evaluator v1–v4)
`ResolvedWorldSnapshot::FromJson` accepts an optional `world_assembly` object alongside the owner
snapshot. The object is the shipped-plan payload shape: a fixed-scale recipe and finite-strate plan
with hashes, no generated mesh or voxel samples. The current evaluator-v2 review payload is
[`round2/world_assembly.json`](../Research/WorldAssemblerM1/round2/world_assembly.json); the
evaluator-v1 sample remains at [`round1-manifest.json`](../Research/WorldAssemblerM1/round1-manifest.json).
Round 4 still needs to connect this payload to the season asset/hash path.
with hashes, no generated mesh or voxel samples. The current review payload is written to
[`round4/world_assembly.json`](../Research/WorldAssemblerM1/round4/world_assembly.json).
Evaluator 1–3 payloads remain readable with their original hashes and field semantics. Evaluator 4
adds a minimum two-voxel shelf thickness and a versioned route support contract; it requires at
least two route waypoints.
Every coordinate and scalar uses signed integer units of 1/256 voxel (`units_per_voxel: 256`),
independent of the plugin's 25 cm Core voxel and of tile size. The schema version is 1; evaluator
@@ -96,8 +97,10 @@ order and hashed as 4- or 8-byte little-endian words with FNV-1a 64. Hashes are
lowercase hexadecimal characters; JSON key order and whitespace do not affect them. The root,
recipe, plan and each stratum carry a content hash. The recipe stores its seed, warped biome-map
settings and one to eight biome profiles; the plan stores finite-strate extents, cap settings,
stable-ID features, fixed-season water and route points. Bounds, feature count and route count are
validated before a manifest is accepted.
stable-ID features, fixed-season water, route points and (for evaluator 4) player-capsule, grade,
support and sweep-spacing constraints. Route points are fixed-scale capsule-center locations with
stable IDs and a protected automatic-change corridor radius. Bounds, feature count, route count, route
IDs, corridor widths and finite-strate capsule extents are validated before a manifest is accepted.
Evaluator 2 adds climate-based biome assignment, output-space blending of both ground and cap
profiles, per-biome relief and height warp, beach width, cliff limits, and optional per-biome cap
@@ -120,8 +123,11 @@ neighbor biome IDs, Q16 blend weight and signed density. Evaluator 2 also return
surface and water-fill sample values. Negative density is solid. Its contract reads `biome` and
writes `height`, `rock`, `water` and `waterSurface`; route and `surfaceTags` remain declared channels
for later blocks. The detail envelope reports maximum absolute displacement and minimum feature
size. Influence is global in XY and limited to the finite stratum's Z extent, except for the
explicitly bounded evaluator-v2 feature boxes.
size. Evaluator 4 defines the shelf's minimum solid thickness as two Core voxels (0.5 m) and applies
its feather to the horizontal footprint so it cannot thin the roof-to-floor section.
`AuditHeightfieldShelfThickness` samples shelf sections against the pre-feature field and includes
the previous sub-voxel taper as a negative control. Influence is global in XY and limited to the
finite stratum's Z extent, except for the explicitly bounded feature boxes.
`interval(minXQ, minYQ, minZQ, maxXQ, maxYQ, maxZQ)` returns a conservative density range or
`known == false`; callers must keep evaluating when it is unknown. The current heightfield range
@@ -131,9 +137,19 @@ negative-coordinate and overhang boxes, and includes a deliberately false one-si
negative control. A pass means no sampled point escaped and the negative control was rejected; it
is an audit of this block implementation, not a proof for future blocks.
`AuditHeightfieldRoute` sweeps the recorded route through the final composed field using the
versioned player capsule (0.34 m radius, 1.76 m height), checks a 15-degree maximum grade, samples
capsule clearance at no more than half-voxel intervals, and probes support below five foot locations
at each swept center. Automatic changes must be composed first and pass this audit before the plan is
accepted. Player carve/fill edits remain unrestricted. This validates analytic field collision and
support; it does not cook an Unreal physics mesh.
## Queries and tiles
`densityAt(position)` returns signed density; negative is solid and nonnegative is air.
`densityAt(position)` returns signed density; negative is solid and nonnegative is air. Server and
authority code can compile/query a `World` and run `AuditHeightfieldRoute` without calling
`generateTile`; generated render meshes are not part of this query path. Unreal physics collision
cooking remains the adapter's separate readiness step.
`isSolidAt` wraps that sign test. `isSolidAlongSegment(start, end, spacing)` samples evenly along
the segment with no interval wider than `spacing` voxels; it returns true if any sample is solid.
`classifyBox(origin, step, cells)` returns `allSolid`, `allAir` or `mixed` for mesher tile