{"version":3,"sources":["../src/tangent.ts","../src/vertex-attribute-layout.ts","../src/box.ts","../src/distance-field-bricks.ts","../src/triangle-query.ts","../src/distance-field.ts","../src/mesh-card-layout.ts","../src/mesh-card-artifact.ts","../src/mesh-collision.ts","../src/assets/mesh-binary.ts","../src/cylinder.ts","../src/plane.ts","../src/pole-grid-indices.ts","../src/sphere.ts","../src/assets/primitive-mesh.ts","../src/assets/mesh-decoder.ts","../src/capsule.ts","../src/cone.ts","../src/decal.ts","../src/dim2.ts","../src/distance-field-artifact.ts","../src/edges.ts","../src/contour.ts","../src/polygon-mesh.ts","../src/extrusion.ts","../src/mesh-aabb.ts","../src/mesh-builder.ts","../src/mesh-data.ts","../src/visibility-distance-field.ts","../src/mesh-distance-field-product.ts","../src/procedural.ts","../src/profile-sweep.ts","../src/teapot.ts","../src/terrain-grid.ts","../src/torus.ts"],"names":["length","AssetError","ASSET_ERROR_HINTS","err","ok","invalid","point","digest","resolution","item","cross","dot","indices","best","MESH_BIN_HEADER_BYTES","box3","area","sub","cross3","ring","failure","attribute","indexArray","nativeLittleEndian","offset","v","nearest","start","finitePoint","normalize"],"mappings":"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A;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC5F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAChG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC9F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC5F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC5F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAC5F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC9F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAC/F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,GAAA;AAAA,EAAK,EAAA;AAAA,EAAI,GAAA;AAAA,EAAK,GAAA;AAAA,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","file":"index.mjs","sourcesContent":["// @forgeax/engine-runtime - per-vertex tangent (vec4) helper (M4 / w20).\n//\n// Implements the path A formula (LearnOpenGL section 5.4 + glTF 2.0 vec4\n// shape) for procedural geometry: per-triangle UV-derivative tangent ->\n// face-area-weighted average -> Gram-Schmidt re-orthogonalisation against\n// the supplied per-vertex normal -> handedness sign(det(deltaUV)) packed\n// into the .w channel.\n//\n// Output shape: Float32Array (vertexCount * 4) where each vertex is\n// [tx, ty, tz, w] with `.w` in {+1, -1}. The .w sign is forward-compatible\n// with glTF 2.0 spec / MikkTSpace baker (`B = cross(N, T.xyz) * T.w`),\n// satisfying feat-20260518 risk R-4 mitigation (path A vec4 -> path B\n// shader consumption is a no-op switch).\n//\n// Plan-strategy anchors: section 2 D-2 (path A); D-7 (single-file helper to\n// avoid 30-line per-geometry re-implementation -- SSOT #1 + DRY #2).\n// Knowledge-base anchor: .forgeax-harness/knowledge-base/wiki/normal-mapping-and-tbn.md\n// section 2 (math skeleton) and section 2.2 (per-vertex average +\n// handedness). Risk anchor: R-4 (vec4 + .w forward compatibility).\n//\n// Pure function with shared Result/AssetError vocabulary and no mutable state\n// or side effects. Indices may be Uint16Array, Uint32Array, or\n// undefined (sequential 0..vertexCount-1 -- triangle list). Degenerate\n// triangles (zero area UV; det ~ 0) are skipped from the accumulation;\n// Inputs with no valid UV-derived triangle fail closed. Procedural pole/seam\n// vertices may have no local contribution while sharing valid neighboring\n// faces; they retain the established deterministic frame until the material\n// admission layer has mesh-level tangent context.\n\nimport { ASSET_ERROR_HINTS, AssetError, err, ok, type Result } from '@forgeax/engine-types';\n\nconst EPSILON = 1e-8;\n\n/** Write a finite unit tangent in the normal plane; leave output unchanged on failure.\n * Writes xyz only, so the producer retains its own handedness policy.\n */\nexport function writeNormalPlaneTangent(\n  out: Float32Array,\n  offset: number,\n  nx: number,\n  ny: number,\n  nz: number,\n): boolean {\n  if (!Number.isInteger(offset) || offset < 0 || offset > out.length - 3) return false;\n  if (!Number.isFinite(nx) || !Number.isFinite(ny) || !Number.isFinite(nz)) return false;\n  const tx = Math.abs(nx) > Math.abs(nz) ? -ny : 0;\n  const ty = Math.abs(nx) > Math.abs(nz) ? nx : -nz;\n  const tz = Math.abs(nx) > Math.abs(nz) ? 0 : ny;\n  const length = Math.hypot(tx, ty, tz);\n  if (!(length > 0) || !Number.isFinite(length)) return false;\n  out[offset] = tx / length;\n  out[offset + 1] = ty / length;\n  out[offset + 2] = tz / length;\n  return true;\n}\n\nfunction tangentInputError(field: string, value: number, reason: string): AssetError {\n  return new AssetError({\n    code: 'asset-parse-failed',\n    expected: `valid tangent topology: ${reason}`,\n    hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n    detail: { field, value, reason },\n  });\n}\n\nfunction preflightTangentInput(\n  positions: Float32Array,\n  normals: Float32Array,\n  uvs: Float32Array,\n  indices: Uint16Array | Uint32Array | undefined,\n): Result<number, AssetError> {\n  if (positions.length % 3 !== 0) {\n    return err(\n      tangentInputError(\n        'positions',\n        positions.length,\n        'positions.length must be divisible by the position stride of 3',\n      ),\n    );\n  }\n  const vertexCount = positions.length / 3;\n  if (normals.length !== vertexCount * 3) {\n    return err(\n      tangentInputError(\n        'normals',\n        normals.length,\n        `normals.length must equal vertexCount * 3 (${vertexCount * 3})`,\n      ),\n    );\n  }\n  if (uvs.length !== vertexCount * 2) {\n    return err(\n      tangentInputError(\n        'uvs',\n        uvs.length,\n        `uvs.length must equal vertexCount * 2 (${vertexCount * 2})`,\n      ),\n    );\n  }\n  if (indices === undefined) {\n    if (vertexCount % 3 !== 0) {\n      return err(\n        tangentInputError(\n          'positions',\n          vertexCount,\n          'non-indexed vertexCount must be divisible by the triangle size of 3',\n        ),\n      );\n    }\n    return ok(vertexCount);\n  }\n  if (indices.length % 3 !== 0) {\n    return err(\n      tangentInputError(\n        'indices',\n        indices.length,\n        'indices.length must be divisible by the triangle size of 3',\n      ),\n    );\n  }\n  for (let indexPosition = 0; indexPosition < indices.length; indexPosition++) {\n    const index = indices[indexPosition];\n    if (index === undefined || !Number.isInteger(index) || index < 0 || index >= vertexCount) {\n      return err(\n        tangentInputError(\n          'indices',\n          index ?? -1,\n          `indices[${indexPosition}] must be an integer in [0, ${vertexCount})`,\n        ),\n      );\n    }\n  }\n  return ok(vertexCount);\n}\n\n/**\n * Compute per-vertex tangent (vec4) for a procedural mesh using path A\n * (UV-derivative + face-area-weighted average + Gram-Schmidt + handedness).\n *\n * @param positions Float32Array, vertexCount * 3 (xyz interleaved).\n * @param normals Float32Array, vertexCount * 3 (xyz interleaved); must be\n *   pre-normalised by the caller (procedural factories already produce\n *   unit-length normals at vertex emit time).\n * @param uvs Float32Array, vertexCount * 2 (uv interleaved).\n * @param indices optional Uint16Array | Uint32Array triangle list; when\n *   undefined, sequential triangulation 0,1,2,3,4,5,... is assumed.\n * @returns `Result<Float32Array, AssetError>` with a Float32Array of\n *   vertexCount * 4 on success. `.xyz` is the tangent and `.w` is the\n *   handedness sign in {+1, -1}; malformed topology returns the existing\n *   `asset-parse-failed` AssetError before working or output buffers exist.\n *\n * @remarks\n * Path A formula (per triangle):\n * ```\n * dP1 = p2 - p1; dP2 = p3 - p1\n * dUV1 = uv2 - uv1; dUV2 = uv3 - uv1\n * det = dUV1.u * dUV2.v - dUV2.u * dUV1.v\n * T_face = (dUV2.v * dP1 - dUV1.v * dP2) / det\n * sign = det >= 0 ? +1 : -1\n * ```\n * Per-vertex aggregation: accumulate `T_face * faceArea` into the three\n * vertices of the triangle; accumulate `sign` (the dominant sign per\n * vertex wins). After accumulation: Gram-Schmidt against the supplied\n * normal `T' = normalize(T - dot(T, N) * N)`; repack as vec4 with the\n * dominant handedness sign.\n */\nexport function computeTangentVec4(\n  positions: Float32Array,\n  normals: Float32Array,\n  uvs: Float32Array,\n  indices?: Uint16Array | Uint32Array,\n): Result<Float32Array, AssetError> {\n  const preflight = preflightTangentInput(positions, normals, uvs, indices);\n  if (!preflight.ok) return preflight;\n  const vertexCount = preflight.value;\n\n  // Working buffers: per-vertex accumulated tangent + accumulated handedness\n  // signed weight (sum of (face area * sign(det))). The dominant sign of\n  // the running sum is the per-vertex .w handedness.\n  const accumT = new Float32Array(vertexCount * 3);\n  const accumSign = new Float32Array(vertexCount);\n  let validTriangleCount = 0;\n\n  const triangleCount = indices !== undefined ? indices.length / 3 : vertexCount / 3;\n\n  for (let tri = 0; tri < triangleCount; tri++) {\n    const i0 = indices !== undefined ? (indices[tri * 3] ?? 0) : tri * 3;\n    const i1 = indices !== undefined ? (indices[tri * 3 + 1] ?? 0) : tri * 3 + 1;\n    const i2 = indices !== undefined ? (indices[tri * 3 + 2] ?? 0) : tri * 3 + 2;\n\n    const p0x = positions[i0 * 3] ?? 0;\n    const p0y = positions[i0 * 3 + 1] ?? 0;\n    const p0z = positions[i0 * 3 + 2] ?? 0;\n    const p1x = positions[i1 * 3] ?? 0;\n    const p1y = positions[i1 * 3 + 1] ?? 0;\n    const p1z = positions[i1 * 3 + 2] ?? 0;\n    const p2x = positions[i2 * 3] ?? 0;\n    const p2y = positions[i2 * 3 + 1] ?? 0;\n    const p2z = positions[i2 * 3 + 2] ?? 0;\n\n    const u0 = uvs[i0 * 2] ?? 0;\n    const v0 = uvs[i0 * 2 + 1] ?? 0;\n    const u1 = uvs[i1 * 2] ?? 0;\n    const v1 = uvs[i1 * 2 + 1] ?? 0;\n    const u2 = uvs[i2 * 2] ?? 0;\n    const v2 = uvs[i2 * 2 + 1] ?? 0;\n\n    const dP1x = p1x - p0x;\n    const dP1y = p1y - p0y;\n    const dP1z = p1z - p0z;\n    const dP2x = p2x - p0x;\n    const dP2y = p2y - p0y;\n    const dP2z = p2z - p0z;\n\n    const dU1 = u1 - u0;\n    const dV1 = v1 - v0;\n    const dU2 = u2 - u0;\n    const dV2 = v2 - v0;\n\n    const det = dU1 * dV2 - dU2 * dV1;\n    if (Math.abs(det) < EPSILON) {\n      // degenerate UV (collinear / zero-area in UV space); skip\n      continue;\n    }\n    const invDet = 1 / det;\n    const tx = invDet * (dV2 * dP1x - dV1 * dP2x);\n    const ty = invDet * (dV2 * dP1y - dV1 * dP2y);\n    const tz = invDet * (dV2 * dP1z - dV1 * dP2z);\n\n    // Face area (cross product magnitude / 2). Used as accumulation weight.\n    const cx = dP1y * dP2z - dP1z * dP2y;\n    const cy = dP1z * dP2x - dP1x * dP2z;\n    const cz = dP1x * dP2y - dP1y * dP2x;\n    const faceArea = 0.5 * Math.sqrt(cx * cx + cy * cy + cz * cz);\n    if (faceArea < EPSILON) continue;\n    validTriangleCount += 1;\n\n    const signDet = det >= 0 ? 1 : -1;\n    const signedWeight = faceArea * signDet;\n\n    for (const vi of [i0, i1, i2]) {\n      accumT[vi * 3] = (accumT[vi * 3] ?? 0) + tx * faceArea;\n      accumT[vi * 3 + 1] = (accumT[vi * 3 + 1] ?? 0) + ty * faceArea;\n      accumT[vi * 3 + 2] = (accumT[vi * 3 + 2] ?? 0) + tz * faceArea;\n      accumSign[vi] = (accumSign[vi] ?? 0) + signedWeight;\n    }\n  }\n\n  if (validTriangleCount === 0) {\n    return err(\n      tangentInputError(\n        'tangent',\n        0,\n        'material-tangent-required: no triangle has a valid UV-derived tangent',\n      ),\n    );\n  }\n\n  const out = new Float32Array(vertexCount * 4);\n  for (let v = 0; v < vertexCount; v++) {\n    let tx = accumT[v * 3] ?? 0;\n    let ty = accumT[v * 3 + 1] ?? 0;\n    let tz = accumT[v * 3 + 2] ?? 0;\n    const nx = normals[v * 3] ?? 0;\n    const ny = normals[v * 3 + 1] ?? 0;\n    const nz = normals[v * 3 + 2] ?? 0;\n\n    const tLen = Math.sqrt(tx * tx + ty * ty + tz * tz);\n    if (tLen < EPSILON) {\n      const ax = Math.abs(nx);\n      const ay = Math.abs(ny);\n      const az = Math.abs(nz);\n      let rx = 1;\n      let ry = 0;\n      let rz = 0;\n      if (ax > ay && ax > az) {\n        rx = 0;\n        ry = 1;\n      } else if (ay > ax && ay > az) {\n        rx = 0;\n        rz = 1;\n      }\n      tx = ny * rz - nz * ry;\n      ty = nz * rx - nx * rz;\n      tz = nx * ry - ny * rx;\n      const fallbackLength = Math.sqrt(tx * tx + ty * ty + tz * tz);\n      if (fallbackLength < EPSILON) {\n        return err(\n          tangentInputError(\n            'tangent',\n            v,\n            'material-tangent-required: supplied normal cannot define a tangent frame',\n          ),\n        );\n      }\n      tx /= fallbackLength;\n      ty /= fallbackLength;\n      tz /= fallbackLength;\n    } else {\n      tx /= tLen;\n      ty /= tLen;\n      tz /= tLen;\n    }\n\n    // Gram-Schmidt: T' = normalize(T - dot(T, N) * N)\n    const dotTN = tx * nx + ty * ny + tz * nz;\n    let gx = tx - dotTN * nx;\n    let gy = ty - dotTN * ny;\n    let gz = tz - dotTN * nz;\n    const gLen = Math.sqrt(gx * gx + gy * gy + gz * gz);\n    if (gLen < EPSILON) {\n      const ax = Math.abs(nx);\n      const ay = Math.abs(ny);\n      const az = Math.abs(nz);\n      let rx = 1;\n      let ry = 0;\n      let rz = 0;\n      if (ax > ay && ax > az) {\n        rx = 0;\n        ry = 1;\n      } else if (ay > ax && ay > az) {\n        rx = 0;\n        rz = 1;\n      }\n      gx = ny * rz - nz * ry;\n      gy = nz * rx - nx * rz;\n      gz = nx * ry - ny * rx;\n      const fallbackLength = Math.sqrt(gx * gx + gy * gy + gz * gz);\n      if (fallbackLength < EPSILON) {\n        return err(\n          tangentInputError(\n            'tangent',\n            v,\n            'material-tangent-required: supplied normal cannot define a tangent frame',\n          ),\n        );\n      }\n      gx /= fallbackLength;\n      gy /= fallbackLength;\n      gz /= fallbackLength;\n    } else {\n      gx /= gLen;\n      gy /= gLen;\n      gz /= gLen;\n    }\n\n    const accSign = accumSign[v] ?? 0;\n    const w = accSign >= 0 ? 1 : -1;\n\n    out[v * 4] = gx;\n    out[v * 4 + 1] = gy;\n    out[v * 4 + 2] = gz;\n    out[v * 4 + 3] = w;\n  }\n\n  return ok(out);\n}\n","// @forgeax/engine-runtime - Vertex attribute layout SSOT (14-key closed set\n// to GPUVertexBufferLayout derived function).\n//\n// deriveVertexBufferLayout(map, opts?) consumes a partial VertexAttributeMap and produces\n// a fixed-order array of GPUVertexBufferLayout entries — the single source of\n// truth for @location(N) assignment + GPUVertexFormat for every attribute the\n// engine pipeline can consume. Shader WGSL @location(N) declarations and\n// geometry factories are consumers of this SSOT; naga reflection deep-equal\n// tests (T-33 dawn-only) keep them in sync (AC-26 / plan-strategy D-7).\n//\n// Canonical interleaved order (plan-strategy F-1, must match bridge + import layers):\n//   position / normal / uv / tangent / skinIndex / skinWeight / uv1..uv7 / color\n//\n// Key index (plan-strategy D-4 / D-7):\n//   0: position   -> @location(0) float32x3\n//   1: normal     -> @location(1) float32x3\n//   2: uv         -> @location(2) float32x2  (set 0)\n//   3: tangent    -> @location(3) float32x4\n//   4: skinIndex  -> @location(4) uint16x4\n//   5: skinWeight -> @location(5) float32x4\n//   6: uv1        -> @location(6) float32x2  (set 1, fea-20260629 D-4)\n//   7: uv2        -> @location(7) float32x2  (set 2)\n//   8: uv3        -> @location(8) float32x2  (set 3)\n//   9: uv4        -> @location(9) float32x2  (set 4)\n//  10: uv5        -> @location(10) float32x2 (set 5)\n//  11: uv6        -> @location(11) float32x2 (set 6)\n//  12: uv7        -> @location(12) float32x2 (set 7)\n//\n// feat-20260523-skin-skeleton-animation M2 / T-22.\n// feat-20260629-multi-uv-set-support m3-w4: uv1..uv7 + clamp-to-last alias (D-1).\n\nimport {\n  ASSET_ERROR_HINTS,\n  AssetError,\n  err,\n  ok,\n  type Result,\n  type VertexAttributeMap,\n  type VertexAttributePackDetail,\n  type VertexAttributeStorage,\n} from '@forgeax/engine-types';\n\nconst ATTRIBUTE_FORMAT_MAP = {\n  position: 'float32x3' as const,\n  normal: 'float32x3' as const,\n  uv: 'float32x2' as const,\n  tangent: 'float32x4' as const,\n  skinIndex: 'uint16x4' as const,\n  skinWeight: 'float32x4' as const,\n  uv1: 'float32x2' as const,\n  uv2: 'float32x2' as const,\n  uv3: 'float32x2' as const,\n  uv4: 'float32x2' as const,\n  uv5: 'float32x2' as const,\n  uv6: 'float32x2' as const,\n  uv7: 'float32x2' as const,\n  color: 'float32x4' as const,\n} as const;\n\ntype AttributeKey = keyof typeof ATTRIBUTE_FORMAT_MAP;\n\nexport interface GpuVertexBufferLayoutEntry {\n  readonly arrayStride: number;\n  readonly attributes: ReadonlyArray<{\n    readonly shaderLocation: number;\n    readonly offset: number;\n    readonly format: string;\n  }>;\n  readonly stepMode?: 'vertex' | 'instance' | undefined;\n}\n\nconst isAttributeKey = (key: string): key is AttributeKey => key in ATTRIBUTE_FORMAT_MAP;\n\nconst CANONICAL_KEYS: readonly AttributeKey[] =\n  Object.keys(ATTRIBUTE_FORMAT_MAP).filter(isAttributeKey);\nconst UV_KEYS: readonly AttributeKey[] = CANONICAL_KEYS.filter(\n  (key) => key === 'uv' || key.startsWith('uv'),\n);\n\n// Empty typed-array values are presence sentinels for layout derivation. Keep\n// the common mesh maps here so renderers, recovery, and points/lines cannot\n// grow a second copy of the canonical attribute vocabulary.\nconst EMPTY_FLOAT32 = new Float32Array(0);\nconst EMPTY_UINT16 = new Uint16Array(0);\n\n/** Canonical position/normal/uv/tangent map for ordinary interleaved meshes. */\nexport const DEFAULT_VERTEX_ATTRIBUTE_MAP: VertexAttributeMap = Object.freeze({\n  position: EMPTY_FLOAT32,\n  normal: EMPTY_FLOAT32,\n  uv: EMPTY_FLOAT32,\n  tangent: EMPTY_FLOAT32,\n});\n\n/** Canonical six-attribute map for skinned interleaved meshes. */\nexport const SKIN_VERTEX_ATTRIBUTE_MAP: VertexAttributeMap = Object.freeze({\n  ...DEFAULT_VERTEX_ATTRIBUTE_MAP,\n  skinIndex: EMPTY_UINT16,\n  skinWeight: EMPTY_FLOAT32,\n});\n\ntype Entry = {\n  readonly key: AttributeKey;\n  readonly shaderLocation: number;\n  readonly offset: number;\n  readonly format: string;\n};\n\nfunction emitAliasEntries(entries: Entry[], toIndex: number, currentStride: number): number {\n  const lastUv = entries.filter((entry) => UV_KEYS.includes(entry.key)).at(-1);\n  const aliasOffset = lastUv?.offset ?? currentStride;\n  for (let k = 0; k < toIndex && k < UV_KEYS.length; k++) {\n    // biome-ignore lint/style/noNonNullAssertion: bounded index on const array\n    const uvKey = UV_KEYS[k]!;\n    if (entries.some((entry) => entry.key === uvKey)) continue;\n    entries.push({\n      key: uvKey,\n      shaderLocation: CANONICAL_KEYS.indexOf(uvKey),\n      offset: aliasOffset,\n      format: ATTRIBUTE_FORMAT_MAP[uvKey],\n    });\n  }\n  // When meshUvSetCount===0, allocate 8 bytes for the zero UV area.\n  // Otherwise no stride increase (aliased to existing offset).\n  return lastUv === undefined\n    ? currentStride + bytesForFormat(ATTRIBUTE_FORMAT_MAP.uv)\n    : currentStride;\n}\n\n/**\n * Build a non-skin `VertexAttributeMap` carrying exactly `uvSetCount` UV sets\n * (set 0 = `uv`, then `uv1..uv{uvSetCount-1}`). `deriveVertexBufferLayout`\n * reads only key presence, so the zero-length typed-array values are sentinels.\n *\n * feat-20260629-multi-uv-set-support: the forward record stage owns only the\n * mesh's `uvSetCount` (a scalar threaded through MeshGpuHandles), not the\n * original `MeshAsset.attributes` map. It synthesizes the map here so the\n * material PSO's vertex layout includes the real @location(6+) attributes and\n * its stride matches the interleaved buffer (a mesh with 2 real UV sets has a\n * 56 B stride; a 48 B PSO layout against it puts every vertex after the first\n * off-screen). uvSetCount <= 1 yields the canonical 4-attribute single-UV map.\n */\nexport function buildMeshAttributeMapForUvSets(uvSetCount: number): VertexAttributeMap {\n  const map = { ...DEFAULT_VERTEX_ATTRIBUTE_MAP } as unknown as Record<string, Float32Array>;\n  for (let set = 1; set < uvSetCount && set < UV_KEYS.length; set++) {\n    // biome-ignore lint/style/noNonNullAssertion: bounded index on const array\n    map[UV_KEYS[set]!] = new Float32Array(0);\n  }\n  return map as unknown as VertexAttributeMap;\n}\n\nexport function deriveVertexBufferLayout(\n  map: VertexAttributeMap,\n  opts?: { shaderUvSetCount?: number },\n): GpuVertexBufferLayoutEntry[] {\n  const shaderUvSetCount = opts?.shaderUvSetCount ?? 0;\n\n  // Process present keys in canonical order; absent keys reserve no space.\n  const entries: Entry[] = [];\n  let offset = 0;\n\n  for (const key of CANONICAL_KEYS) {\n    if (map[key] === undefined) continue;\n    entries.push({\n      key,\n      shaderLocation: CANONICAL_KEYS.indexOf(key),\n      offset,\n      format: ATTRIBUTE_FORMAT_MAP[key],\n    });\n    offset += bytesForFormat(ATTRIBUTE_FORMAT_MAP[key]);\n  }\n\n  const present = entries.length;\n\n  // ── clamp-to-last alias (plan-strategy D-1) ──\n  if (shaderUvSetCount > 0) {\n    offset = emitAliasEntries(entries, shaderUvSetCount, offset);\n  }\n\n  if (present === 0 && shaderUvSetCount === 0) return [];\n\n  // Sort by shaderLocation for deterministic vertex buffer descriptor\n  entries.sort((a, b) => a.shaderLocation - b.shaderLocation);\n\n  return [\n    {\n      arrayStride: offset,\n      attributes: entries.map(({ shaderLocation, offset: entryOffset, format }) => ({\n        shaderLocation,\n        offset: entryOffset,\n        format,\n      })),\n    },\n  ];\n}\n\n/** Build the GPU descriptor from an immutable projection, adding only shader UV aliases. */\nexport function deriveVertexBufferLayoutFromProjection(\n  projection: VertexLayoutProjection,\n  opts?: { shaderUvSetCount?: number },\n): GpuVertexBufferLayoutEntry[] {\n  const entries = projection.attributes.map(({ key, shaderLocation, offset, format }) => ({\n    key,\n    shaderLocation,\n    offset,\n    format,\n  }));\n  let arrayStride = projection.arrayStride;\n  const shaderUvSetCount = opts?.shaderUvSetCount ?? 0;\n  if (shaderUvSetCount > 0) {\n    arrayStride = emitAliasEntries(entries, shaderUvSetCount, arrayStride);\n  }\n  entries.sort((a, b) => a.shaderLocation - b.shaderLocation);\n  return projection.attributes.length === 0\n    ? []\n    : [\n        {\n          arrayStride,\n          attributes: entries.map(({ shaderLocation, offset, format }) => ({\n            shaderLocation,\n            offset,\n            format,\n          })),\n        },\n      ];\n}\n\nexport interface VertexLayoutProjectionAttribute {\n  readonly key: AttributeKey;\n  readonly shaderLocation: number;\n  readonly offset: number;\n  readonly format: (typeof ATTRIBUTE_FORMAT_MAP)[AttributeKey];\n  readonly byteLength: number;\n}\n\n/** Immutable geometry-owned projection consumed by packers and GPU consumers. */\nexport interface VertexLayoutProjection {\n  readonly schemaVersion: 1;\n  readonly attributes: readonly VertexLayoutProjectionAttribute[];\n  readonly mask: number;\n  readonly arrayStride: number;\n  readonly digest: string;\n}\n\n/**\n * Derive a vertex count from the geometry-owned projection.\n *\n * Every upload, morph write, and draw range must use this same byte-level\n * calculation. Returning `undefined` keeps malformed payloads out of GPU\n * resource construction instead of silently truncating a fractional count.\n */\nexport function deriveVertexCount(\n  vertices: { readonly byteLength: number },\n  projection: VertexLayoutProjection,\n): number | undefined {\n  const stride = projection.arrayStride;\n  const byteLength = vertices.byteLength;\n  if (\n    !Number.isSafeInteger(stride) ||\n    stride <= 0 ||\n    !Number.isSafeInteger(byteLength) ||\n    byteLength < 0 ||\n    byteLength % stride !== 0\n  ) {\n    return undefined;\n  }\n  const count = byteLength / stride;\n  return Number.isSafeInteger(count) ? count : undefined;\n}\n\nfunction bytesForFormat(format: string): number {\n  if (format === 'uint16x4' || format === 'float32x2') return 8;\n  if (format === 'float32x3') return 12;\n  return 16;\n}\n\nfunction storageOf(value: unknown): VertexAttributeStorage {\n  if (value instanceof ArrayBuffer) return 'array-buffer';\n  if (value instanceof Float32Array) return 'float32';\n  if (value instanceof Uint16Array) return 'uint16';\n  return 'other';\n}\n\nfunction elementView(\n  value: VertexAttributeMap[AttributeKey],\n  format: string,\n): Float32Array | Uint16Array | undefined {\n  if (value instanceof Float32Array || value instanceof Uint16Array) return value;\n  if (value instanceof ArrayBuffer) {\n    return format === 'uint16x4' ? new Uint16Array(value) : new Float32Array(value);\n  }\n  return undefined;\n}\n\nfunction fnv1a(input: string): string {\n  let hash = 0x811c9dc5;\n  for (let i = 0; i < input.length; i++) {\n    hash ^= input.charCodeAt(i);\n    hash = Math.imul(hash, 0x01000193);\n  }\n  return `vlp-v1-${(hash >>> 0).toString(16).padStart(8, '0')}`;\n}\n\n// The finite canonical mask is the complete layout identity. Do not key this\n// cache by a mesh/map object: authoring maps may change in place.\nconst layoutsByMask = new Map<number, VertexLayoutProjection>();\n\n/** Derive the one canonical immutable layout projection for a vertex map. */\nexport function deriveVertexLayoutProjection(map: VertexAttributeMap): VertexLayoutProjection {\n  let mask = 0;\n  for (let index = 0; index < CANONICAL_KEYS.length; index += 1) {\n    const key = CANONICAL_KEYS[index];\n    if (key !== undefined && map[key] !== undefined) mask |= 1 << index;\n  }\n  return layoutFromMask(mask);\n}\n\nfunction layoutFromMask(mask: number): VertexLayoutProjection {\n  const cached = layoutsByMask.get(mask);\n  if (cached !== undefined) return cached;\n  const attributes: VertexLayoutProjectionAttribute[] = [];\n  let offset = 0;\n  for (let index = 0; index < CANONICAL_KEYS.length; index += 1) {\n    const key = CANONICAL_KEYS[index];\n    if (key === undefined || (mask & (1 << index)) === 0) continue;\n    const format = ATTRIBUTE_FORMAT_MAP[key];\n    const byteLength = bytesForFormat(format);\n    attributes.push(Object.freeze({ key, shaderLocation: index, offset, format, byteLength }));\n    offset += byteLength;\n  }\n  const digestInput = [\n    '1',\n    String(mask),\n    String(offset),\n    ...attributes.map(\n      (entry) => `${entry.key},${entry.shaderLocation},${entry.offset},${entry.format}`,\n    ),\n  ].join('|');\n  const projection: VertexLayoutProjection = Object.freeze({\n    schemaVersion: 1,\n    attributes: Object.freeze(attributes),\n    mask,\n    arrayStride: offset,\n    digest: fnv1a(digestInput),\n  });\n  layoutsByMask.set(mask, projection);\n  return projection;\n}\n\nexport interface PackedVertexAttributes {\n  readonly projection: VertexLayoutProjection;\n  readonly vertices: Float32Array;\n}\n\nexport class VertexAttributePackError extends AssetError {\n  declare readonly detail: VertexAttributePackDetail;\n\n  constructor(detail: VertexAttributePackDetail) {\n    super({\n      code: 'asset-invalid-value',\n      expected: 'canonical vertex attributes with matching storage and cardinality',\n      hint: ASSET_ERROR_HINTS['asset-invalid-value'],\n      detail,\n    });\n  }\n}\n\nexport interface VertexLayoutProjectionMaskError {\n  readonly code: 'vertex-layout-mask-invalid';\n  readonly expected: string;\n  readonly hint: string;\n  readonly detail: {\n    readonly mask: number;\n    readonly knownMask: number;\n    readonly unknownMask: number;\n    readonly reason: 'empty' | 'unknown-bits';\n  };\n}\n\n/** Rebuild the canonical projection from a packed wire mask without a second schema. */\nexport function deriveVertexLayoutProjectionFromMask(\n  mask: number,\n): Result<VertexLayoutProjection, VertexLayoutProjectionMaskError> {\n  const knownMask = (1 << CANONICAL_KEYS.length) - 1;\n  const unsignedMask = Number.isInteger(mask) && mask >= 0 ? mask >>> 0 : 0xffffffff;\n  const unknownMask = unsignedMask & ~knownMask;\n  if (mask === 0) {\n    return err({\n      code: 'vertex-layout-mask-invalid',\n      expected: 'a non-empty canonical vertex attribute mask',\n      hint: 're-cook the mesh-bin payload from MeshAsset.attributes',\n      detail: { mask, knownMask, unknownMask, reason: 'empty' },\n    });\n  }\n  if (!Number.isInteger(mask) || mask < 0 || unknownMask !== 0) {\n    return err({\n      code: 'vertex-layout-mask-invalid',\n      expected: `a mask using only canonical bits 0..${CANONICAL_KEYS.length - 1}`,\n      hint: 're-cook the mesh-bin payload from MeshAsset.attributes',\n      detail: { mask, knownMask, unknownMask, reason: 'unknown-bits' },\n    });\n  }\n  return ok(layoutFromMask(unsignedMask));\n}\n\n/** Pack tightly-owned attributes into the projection's canonical interleaved bytes. */\nexport function packInterleavedVertexAttributes(\n  map: VertexAttributeMap,\n  vertexCount: number,\n): Result<PackedVertexAttributes, VertexAttributePackError> {\n  const invalid = (detail: VertexAttributePackDetail): Result<never, VertexAttributePackError> =>\n    err(new VertexAttributePackError(detail));\n  if (!Number.isInteger(vertexCount) || vertexCount < 0) {\n    return invalid({ field: 'vertexCount', reason: 'vertex-count-invalid', actual: vertexCount });\n  }\n  const projection = deriveVertexLayoutProjection(map);\n  if (projection.attributes.length === 0) {\n    return invalid({ field: 'attributes', reason: 'attributes-empty', actualCount: 0 });\n  }\n  const output = new ArrayBuffer(projection.arrayStride * vertexCount);\n  const outputFloats = new Float32Array(output);\n  const outputU16 = new Uint16Array(output);\n  for (const entry of projection.attributes) {\n    const sourceValue = map[entry.key];\n    if (sourceValue === undefined) continue;\n    const uint16 = entry.format === 'uint16x4';\n    const components = entry.byteLength / (uint16 ? 2 : 4);\n    const bytesPerComponent = uint16 ? 2 : 4;\n    if (sourceValue instanceof ArrayBuffer && sourceValue.byteLength % bytesPerComponent !== 0) {\n      return invalid({\n        field: entry.key,\n        reason: 'attribute-cardinality-mismatch',\n        vertexCount,\n        componentsPerVertex: components,\n        expectedLength: vertexCount * components,\n        actualLength: sourceValue.byteLength / bytesPerComponent,\n      });\n    }\n    const source = elementView(sourceValue, entry.format);\n    if (\n      source === undefined ||\n      (uint16\n        ? storageOf(sourceValue) !== 'uint16' && storageOf(sourceValue) !== 'array-buffer'\n        : storageOf(sourceValue) !== 'float32' && storageOf(sourceValue) !== 'array-buffer')\n    ) {\n      return invalid({\n        field: entry.key,\n        reason: 'attribute-storage-invalid',\n        expectedStorage: uint16 ? 'uint16' : 'float32',\n        actualStorage: storageOf(sourceValue),\n      });\n    }\n    const expectedLength = vertexCount * components;\n    if (source.length !== expectedLength) {\n      return invalid({\n        field: entry.key,\n        reason: 'attribute-cardinality-mismatch',\n        vertexCount,\n        componentsPerVertex: components,\n        expectedLength,\n        actualLength: source.length,\n      });\n    }\n    if (entry.key === 'color') {\n      for (let elementIndex = 0; elementIndex < source.length; elementIndex += 1) {\n        const component = source[elementIndex] as number;\n        if (!Number.isFinite(component)) {\n          return invalid({\n            field: 'color',\n            reason: 'attribute-non-finite',\n            elementIndex,\n            actual: Number.isNaN(component)\n              ? 'nan'\n              : component === Number.POSITIVE_INFINITY\n                ? 'positive-infinity'\n                : 'negative-infinity',\n          });\n        }\n      }\n    }\n    for (let vertex = 0; vertex < vertexCount; vertex += 1) {\n      for (let component = 0; component < components; component += 1) {\n        const sourceIndex = vertex * components + component;\n        const byteOffset =\n          vertex * projection.arrayStride + entry.offset + component * (uint16 ? 2 : 4);\n        if (uint16) outputU16[byteOffset / 2] = Number(source[sourceIndex] ?? 0);\n        else outputFloats[byteOffset / 4] = Number(source[sourceIndex] ?? 0);\n      }\n    }\n  }\n  return ok(Object.freeze({ projection, vertices: outputFloats }));\n}\n\nconst nativeLittleEndian = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n\n/** Copy canonical interleaved bytes to owned attributes; callers validate semantic values. */\nexport function unpackInterleavedVertexAttributes(\n  vertices: Float32Array,\n  projection: VertexLayoutProjection,\n): VertexAttributeMap | undefined {\n  const vertexCount = deriveVertexCount(vertices, projection);\n  if (vertexCount === undefined) return undefined;\n  const view = new DataView(vertices.buffer, vertices.byteOffset, vertices.byteLength);\n  const attributes: Record<string, Float32Array | Uint16Array> = {};\n  for (const entry of projection.attributes) {\n    const short = entry.format === 'uint16x4';\n    const width = short ? 2 : 4;\n    const components = entry.byteLength / width;\n    const target = short\n      ? new Uint16Array(vertexCount * components)\n      : new Float32Array(vertexCount * components);\n    if (nativeLittleEndian) {\n      const values = short\n        ? new Uint16Array(vertices.buffer, vertices.byteOffset, vertices.byteLength / 2)\n        : vertices;\n      const stride = projection.arrayStride / width;\n      let targetIndex = 0;\n      for (let base = entry.offset / width; targetIndex < target.length; base += stride) {\n        for (let component = 0; component < components; component++)\n          target[targetIndex++] = values[base + component] as number;\n      }\n    } else {\n      for (let vertex = 0; vertex < vertexCount; vertex++) {\n        for (let component = 0; component < components; component++) {\n          const offset = vertex * projection.arrayStride + entry.offset + component * width;\n          target[vertex * components + component] = short\n            ? view.getUint16(offset, true)\n            : view.getFloat32(offset, true);\n        }\n      }\n    }\n    attributes[entry.key] = target;\n  }\n  return attributes as VertexAttributeMap;\n}\n","// @forgeax/engine-runtime - Procedural Box geometry (M3 / w8).\n//\n// Mirrors Three.js r184 BoxGeometry signature: createBoxGeometry(width, height,\n// depth, widthSegments?, heightSegments?, depthSegments?) -> Result<MeshAsset, AssetError>.\n// Degenerate parameters (any dim <= 0 or segment < 1) fail-fast with\n// AssetError({ code: 'asset-parse-failed' }) — charter proposition 4 explicit\n// failure red line (requirements §9 geometry double-semantics for\n// 'asset-parse-failed').\n//\n// Attributes populated: position / normal / uv (Float32Array views of the\n// interleaved `vertices` buffer; 8 floats per vertex). This is the AC-15\n// narrowing anchor: each factory includes a\n// `for (const [key] of Object.entries(attrs))` loop that TypeScript infers as\n// the VertexAttributeMap key union (no `as` cast).\n//\n// Related: requirements §AC-06 / §AC-14 / §AC-15;\n//          plan-strategy §M3 + D-P5 (6 procedural geometries lowercase keys);\n//          plan-tasks.json w8 acceptanceCheck;\n//          research Finding 4 (Three.js r184 BufferGeometry mental migration).\n\nimport { box3 } from '@forgeax/engine-math';\nimport {\n  ASSET_ERROR_HINTS,\n  AssetError,\n  err,\n  type MeshAsset,\n  ok,\n  type Result,\n  type VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { computeTangentVec4 } from './tangent';\nimport { packInterleavedVertexAttributes } from './vertex-attribute-layout';\n\n/**\n * Floats per vertex for the procedural-geometry interleaved buffer that the\n * factory bodies fill in (position(3) + normal(3) + uv(2)). The\n * `meshFromInterleaved` helper expands this into the runtime 12-float\n * (position + normal + uv + tangent) layout consumed by the standard\n * pipeline (feat-20260518 M4 D-10).\n */\nexport const FACTORY_FLOATS_PER_VERTEX = 8;\n\n/**\n * Floats per vertex emitted by the factories' final MeshAsset\n * `vertices` Float32Array buffer: position(3) + normal(3) + uv(2) +\n * tangent(4) = 12. Procedural meshes feed both the standard and unlit\n * pipelines (D-10); BUILTIN_CUBE / TRIANGLE keep their 6-floats inline\n * shape (D-2 lock).\n */\nexport const PROCEDURAL_FLOATS_PER_VERTEX = 12;\n\nfunction interleavedInputError(field: string, value: number, reason: string): AssetError {\n  return new AssetError({\n    code: 'asset-parse-failed',\n    expected: `valid interleaved triangle topology: ${reason}`,\n    hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n    detail: { field, value, reason },\n  });\n}\n\n/**\n * Shared helper: build MeshAsset POD from the factory-emitted 8-floats\n * interleaved buffer (position + normal + uv) plus index list. Computes\n * per-vertex tangent (vec4) via `computeTangentVec4` (M4 / D-2 path A) and\n * expands the buffer to the runtime 12-floats stride (position + normal +\n * uv + tangent). All six procedural factories funnel through this helper\n * so the tangent SSOT lives in `geometry/tangent.ts` (D-7).\n */\nexport function meshFromInterleaved(\n  vertices: Float32Array,\n  indices: Uint16Array | Uint32Array,\n): Result<MeshAsset, AssetError> {\n  if (vertices.length % FACTORY_FLOATS_PER_VERTEX !== 0) {\n    return err(\n      interleavedInputError(\n        'vertices',\n        vertices.length,\n        `vertices.length must be divisible by the interleaved stride of ${FACTORY_FLOATS_PER_VERTEX}`,\n      ),\n    );\n  }\n  const vertexCount = vertices.length / FACTORY_FLOATS_PER_VERTEX;\n  if (indices.length % 3 !== 0) {\n    return err(\n      interleavedInputError(\n        'indices',\n        indices.length,\n        'indices.length must be divisible by the triangle size of 3',\n      ),\n    );\n  }\n  for (let indexPosition = 0; indexPosition < indices.length; indexPosition++) {\n    const index = indices[indexPosition];\n    if (index === undefined || !Number.isInteger(index) || index < 0 || index >= vertexCount) {\n      return err(\n        interleavedInputError(\n          'indices',\n          index ?? -1,\n          `indices[${indexPosition}] must be an integer in [0, ${vertexCount})`,\n        ),\n      );\n    }\n  }\n  // Slice positions / normals / uvs out of the 8-floats interleaved\n  // buffer for the tangent computation. The helper requires them in\n  // tight-packed Float32Array form per attribute.\n  const positions = new Float32Array(vertexCount * 3);\n  const normals = new Float32Array(vertexCount * 3);\n  const uvs = new Float32Array(vertexCount * 2);\n  for (let i = 0; i < vertexCount; i++) {\n    const base = i * FACTORY_FLOATS_PER_VERTEX;\n    positions[i * 3 + 0] = vertices[base + 0] as number;\n    positions[i * 3 + 1] = vertices[base + 1] as number;\n    positions[i * 3 + 2] = vertices[base + 2] as number;\n    normals[i * 3 + 0] = vertices[base + 3] as number;\n    normals[i * 3 + 1] = vertices[base + 4] as number;\n    normals[i * 3 + 2] = vertices[base + 5] as number;\n    uvs[i * 2 + 0] = vertices[base + 6] as number;\n    uvs[i * 2 + 1] = vertices[base + 7] as number;\n  }\n  const tangentResult = computeTangentVec4(positions, normals, uvs, indices);\n  if (!tangentResult.ok) return tangentResult;\n  const tangents = tangentResult.value;\n  const attributes: VertexAttributeMap = {\n    position: positions,\n    normal: normals,\n    uv: uvs,\n    tangent: tangents,\n  };\n  const packed = packInterleavedVertexAttributes(attributes, vertexCount);\n  if (!packed.ok) return packed;\n  return ok({\n    kind: 'mesh',\n    vertices: packed.value.vertices,\n    indices,\n    attributes,\n    submeshes: [\n      {\n        indexOffset: 0,\n        indexCount: indices.length,\n        vertexCount,\n        topology: 'triangle-list',\n        materialSlot: 0,\n      },\n    ],\n    materialSlots: [{ slotName: 'Default' }],\n    // Procedural meshes carry their own local-space AABB: after feat-20260614\n    // (D-15) `allocSharedRef` stores the payload verbatim -- there is no\n    // `withMeshAabb` pass like the old `register`/`catalog` path -- so the cull\n    // + pick path can only read an AABB the POD already holds.\n    aabb: box3.fromPositions(box3.create(), positions),\n  });\n}\n\n/** Shared helper: AssetError for degenerate geometry parameters. */\nexport function degenerate(detail: string): AssetError {\n  return new AssetError({\n    code: 'asset-parse-failed',\n    expected: `all dimensions > 0; segments >= 1 (${detail})`,\n    hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n  });\n}\n\n/**\n * Build a procedural box geometry aligned with Three.js r184 BoxGeometry.\n *\n * @param width positive X-axis extent\n * @param height positive Y-axis extent\n * @param depth positive Z-axis extent\n * @param widthSegments >= 1 subdivisions along X\n * @param heightSegments >= 1 subdivisions along Y\n * @param depthSegments >= 1 subdivisions along Z\n * @returns `Result<MeshAsset, AssetError>` with attributes populated\n */\nexport function createBoxGeometry(\n  width: number,\n  height: number,\n  depth: number,\n  widthSegments: number = 1,\n  heightSegments: number = 1,\n  depthSegments: number = 1,\n): Result<MeshAsset, AssetError> {\n  if (width <= 0 || height <= 0 || depth <= 0) {\n    return err(degenerate(`width=${width}, height=${height}, depth=${depth}`));\n  }\n  const ws = widthSegments | 0;\n  const hs = heightSegments | 0;\n  const ds = depthSegments | 0;\n  if (ws < 1 || hs < 1 || ds < 1) {\n    return err(degenerate(`widthSegments=${ws}, heightSegments=${hs}, depthSegments=${ds}`));\n  }\n\n  type FaceSpec = {\n    readonly uAxis: 0 | 1 | 2;\n    readonly vAxis: 0 | 1 | 2;\n    readonly wAxis: 0 | 1 | 2;\n    readonly uSign: 1 | -1;\n    readonly vSign: 1 | -1;\n    readonly wSign: 1 | -1;\n    readonly uSegs: number;\n    readonly vSegs: number;\n    readonly uSize: number;\n    readonly vSize: number;\n    readonly wSize: number;\n  };\n\n  const hw = width / 2;\n  const hh = height / 2;\n  const hd = depth / 2;\n\n  const faces: readonly FaceSpec[] = [\n    // +X face\n    {\n      uAxis: 2,\n      vAxis: 1,\n      wAxis: 0,\n      uSign: -1,\n      vSign: 1,\n      wSign: 1,\n      uSegs: ds,\n      vSegs: hs,\n      uSize: depth,\n      vSize: height,\n      wSize: width,\n    },\n    // -X face\n    {\n      uAxis: 2,\n      vAxis: 1,\n      wAxis: 0,\n      uSign: 1,\n      vSign: 1,\n      wSign: -1,\n      uSegs: ds,\n      vSegs: hs,\n      uSize: depth,\n      vSize: height,\n      wSize: width,\n    },\n    // +Y face\n    {\n      uAxis: 0,\n      vAxis: 2,\n      wAxis: 1,\n      uSign: 1,\n      vSign: 1,\n      wSign: 1,\n      uSegs: ws,\n      vSegs: ds,\n      uSize: width,\n      vSize: depth,\n      wSize: height,\n    },\n    // -Y face\n    {\n      uAxis: 0,\n      vAxis: 2,\n      wAxis: 1,\n      uSign: 1,\n      vSign: -1,\n      wSign: -1,\n      uSegs: ws,\n      vSegs: ds,\n      uSize: width,\n      vSize: depth,\n      wSize: height,\n    },\n    // +Z face\n    {\n      uAxis: 0,\n      vAxis: 1,\n      wAxis: 2,\n      uSign: 1,\n      vSign: 1,\n      wSign: 1,\n      uSegs: ws,\n      vSegs: hs,\n      uSize: width,\n      vSize: height,\n      wSize: depth,\n    },\n    // -Z face\n    {\n      uAxis: 0,\n      vAxis: 1,\n      wAxis: 2,\n      uSign: -1,\n      vSign: 1,\n      wSign: -1,\n      uSegs: ws,\n      vSegs: hs,\n      uSize: width,\n      vSize: height,\n      wSize: depth,\n    },\n  ];\n\n  let vertexCount = 0;\n  let indexCount = 0;\n  for (const f of faces) {\n    vertexCount += (f.uSegs + 1) * (f.vSegs + 1);\n    indexCount += f.uSegs * f.vSegs * 6;\n  }\n\n  const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n  const indices = new Uint32Array(indexCount);\n  let vIdx = 0;\n  let iIdx = 0;\n\n  const halves: readonly [number, number, number] = [hw, hh, hd];\n\n  for (const f of faces) {\n    const vStart = vIdx;\n    const halfU = halves[f.uAxis] as number;\n    const halfV = halves[f.vAxis] as number;\n    const halfW = halves[f.wAxis] as number;\n    for (let j = 0; j <= f.vSegs; j++) {\n      for (let i = 0; i <= f.uSegs; i++) {\n        const uCoord = ((i / f.uSegs) * f.uSize - f.uSize / 2) * f.uSign;\n        const vCoord = ((j / f.vSegs) * f.vSize - f.vSize / 2) * f.vSign;\n        const pos: [number, number, number] = [0, 0, 0];\n        pos[f.uAxis] = (uCoord / f.uSize) * halfU * 2;\n        pos[f.vAxis] = (vCoord / f.vSize) * halfV * 2;\n        pos[f.wAxis] = halfW * f.wSign;\n        const normal: [number, number, number] = [0, 0, 0];\n        normal[f.wAxis] = f.wSign;\n        const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n        vertices[base + 0] = pos[0];\n        vertices[base + 1] = pos[1];\n        vertices[base + 2] = pos[2];\n        vertices[base + 3] = normal[0];\n        vertices[base + 4] = normal[1];\n        vertices[base + 5] = normal[2];\n        vertices[base + 6] = i / f.uSegs;\n        // UV.v uses the WebGPU top-left convention (V=0 = image top).\n        vertices[base + 7] = j / f.vSegs;\n        vIdx++;\n      }\n    }\n    // bug-20260519: per-face winding correction.\n    //\n    // The natural quad `(a, b, d) + (a, d, c)` (with a/b/c/d at quad corners\n    // bottom-left / bottom-right / top-left / top-right of the (u, v) grid)\n    // winds CCW around the direction `(uHat x vHat) * uSign * vSign`. We\n    // want CCW around the outward normal `wSign * wHat`. The two agree iff\n    //   `(uHat x vHat) . wHat * uSign * vSign * wSign == +1`.\n    // The first factor is the Levi-Civita symbol of (uAxis, vAxis, wAxis):\n    // +1 for cyclic permutations of (0, 1, 2), -1 for anti-cyclic. The\n    // 6-face spec at the top of this function lands as:\n    //   +X / -X: (Z, Y, X) anti-cyclic -> levi = -1\n    //   +Y / -Y: (X, Z, Y) anti-cyclic -> levi = -1\n    //   +Z / -Z: (X, Y, Z) cyclic      -> levi = +1\n    // Combined with the per-face signs the product comes out to +1 for\n    // ±X, ±Z (no swap needed) and -1 for ±Y (swap). The swap branch is\n    // the diagonally mirrored CCW pair `(a, d, b) + (a, c, d)`.\n    const isCyclic = (f.vAxis - f.uAxis + 3) % 3 === 1 && (f.wAxis - f.vAxis + 3) % 3 === 1;\n    const levi = isCyclic ? 1 : -1;\n    const ccwOutward = levi * f.uSign * f.vSign * f.wSign > 0;\n    for (let j = 0; j < f.vSegs; j++) {\n      for (let i = 0; i < f.uSegs; i++) {\n        const a = vStart + j * (f.uSegs + 1) + i;\n        const b = vStart + j * (f.uSegs + 1) + i + 1;\n        const c = vStart + (j + 1) * (f.uSegs + 1) + i;\n        const d = vStart + (j + 1) * (f.uSegs + 1) + i + 1;\n        if (ccwOutward) {\n          indices[iIdx++] = a;\n          indices[iIdx++] = b;\n          indices[iIdx++] = d;\n          indices[iIdx++] = a;\n          indices[iIdx++] = d;\n          indices[iIdx++] = c;\n        } else {\n          indices[iIdx++] = a;\n          indices[iIdx++] = d;\n          indices[iIdx++] = b;\n          indices[iIdx++] = a;\n          indices[iIdx++] = c;\n          indices[iIdx++] = d;\n        }\n      }\n    }\n  }\n\n  return meshFromInterleaved(vertices, indices);\n}\n","import type { FieldVec3, MeshDistanceField } from '@forgeax/engine-types';\n\n/** Combined indirection and f32 payload budget, independent of virtual volume size. */\nexport const MAX_DISTANCE_FIELD_BYTES = 32 * 1024 * 1024;\n\n/** First lattice sample of brick `index`; bricks hold 4^3 samples in x-fastest order. */\nexport function fieldBrickStart(dimensions: FieldVec3, index: number): FieldVec3 {\n  const bx = Math.ceil(dimensions[0] / 4),\n    by = Math.ceil(dimensions[1] / 4);\n  return [(index % bx) * 4, (Math.floor(index / bx) % by) * 4, Math.floor(index / (bx * by)) * 4];\n}\n\n/** Lane holding brick sample (i, j, k): the sample itself inside the volume, the clamped edge sample in padding. */\nexport function fieldBrickLane(\n  dimensions: FieldVec3,\n  start: FieldVec3,\n  i: number,\n  j: number,\n  k: number,\n): number {\n  return (\n    (Math.min(k, dimensions[2] - 1 - start[2]) * 4 + Math.min(j, dimensions[1] - 1 - start[1])) *\n      4 +\n    Math.min(i, dimensions[0] - 1 - start[0])\n  );\n}\n\n/**\n * Build-time storage; full word comparison resolves hash collisions, including signed zero.\n * Producers write in-volume lanes only: `store` replicates edge samples into padded lanes.\n */\nexport class FieldBrickBuilder {\n  readonly bricks: Uint32Array;\n  private readonly dimensions: FieldVec3;\n  private values: Float32Array;\n  private words: Uint32Array;\n  private used = 0;\n  private readonly chains = new Map<number, number[]>();\n\n  constructor(dimensions: FieldVec3) {\n    this.dimensions = dimensions;\n    this.bricks = new Uint32Array(dimensions.reduce((n, v) => n * Math.ceil(v / 4), 1));\n    this.values = new Float32Array(1024);\n    this.words = new Uint32Array(this.values.buffer);\n  }\n\n  store(index: number, values: Float32Array): boolean {\n    const start = fieldBrickStart(this.dimensions, index);\n    for (let k = 0; k < 4; k++)\n      for (let j = 0; j < 4; j++)\n        for (let i = 0; i < 4; i++) {\n          const lane = (k * 4 + j) * 4 + i,\n            source = fieldBrickLane(this.dimensions, start, i, j, k);\n          if (source !== lane) values[lane] = values[source] ?? NaN;\n        }\n    const words = new Uint32Array(values.buffer, values.byteOffset, 64);\n    let hash = 2166136261;\n    for (const word of words) hash = Math.imul(hash ^ word, 16777619) >>> 0;\n    const candidates = this.chains.get(hash);\n    if (candidates)\n      for (const offset of candidates) {\n        let equal = true;\n        for (let i = 0; i < 64; i++)\n          if (this.words[offset + i] !== words[i]) {\n            equal = false;\n            break;\n          }\n        if (equal) {\n          this.bricks[index] = offset;\n          return true;\n        }\n      }\n    const end = this.used + 64;\n    if (this.bricks.byteLength + end * 4 > MAX_DISTANCE_FIELD_BYTES) return false;\n    if (end > this.values.length) {\n      const grown = new Float32Array(\n        Math.min(\n          this.values.length * 2,\n          Math.floor((MAX_DISTANCE_FIELD_BYTES - this.bricks.byteLength) / 256) * 64,\n        ),\n      );\n      grown.set(this.values);\n      this.values = grown;\n      this.words = new Uint32Array(grown.buffer);\n    }\n    this.words.set(words, this.used);\n    this.bricks[index] = this.used;\n    if (candidates) candidates.push(this.used);\n    else this.chains.set(hash, [this.used]);\n    this.used = end;\n    return true;\n  }\n\n  finish(): Pick<MeshDistanceField, 'bricks' | 'values'> {\n    return { bricks: this.bricks, values: this.values.slice(0, this.used) };\n  }\n}\n\n/** Exact lattice sample; callers use validated dimensions and coordinates. */\nexport function distanceFieldTexel(\n  field: Pick<MeshDistanceField, 'dimensions' | 'bricks' | 'values'>,\n  x: number,\n  y: number,\n  z: number,\n): number {\n  const [nx, ny] = field.dimensions;\n  const brick =\n    (Math.floor(z / 4) * Math.ceil(ny / 4) + Math.floor(y / 4)) * Math.ceil(nx / 4) +\n    Math.floor(x / 4);\n  const offset = field.bricks[brick];\n  if (offset === undefined) throw new RangeError('distance-field brick outside validated volume');\n  const value = field.values[offset + ((z % 4) * 4 + (y % 4)) * 4 + (x % 4)];\n  if (value === undefined) throw new RangeError('distance-field sample outside validated payload');\n  return value;\n}\n\n/** Geometric fields keep their exact dense computation, then publish the same brick contract. */\nexport function brickDistanceFieldValues(\n  dimensions: FieldVec3,\n  values: Float32Array,\n): Pick<MeshDistanceField, 'bricks' | 'values'> | null {\n  const builder = new FieldBrickBuilder(dimensions),\n    brick = new Float32Array(64);\n  const [nx, ny] = dimensions;\n  for (let index = 0; index < builder.bricks.length; index++) {\n    const start = fieldBrickStart(dimensions, index),\n      [x, y, z] = start;\n    for (let k = 0; k < 4; k++)\n      for (let j = 0; j < 4; j++)\n        for (let i = 0; i < 4; i++) {\n          const lane = (k * 4 + j) * 4 + i;\n          if (fieldBrickLane(dimensions, start, i, j, k) === lane)\n            brick[lane] = values[((z + k) * ny + y + j) * nx + x + i] ?? NaN;\n        }\n    if (!builder.store(index, brick)) return null;\n  }\n  return builder.finish();\n}\n\n/** Validate addresses, exact edge padding and the logical negative-sample count. */\nexport function fieldBrickNegativeSamples(field: MeshDistanceField): number | null {\n  const { dimensions, bricks, values } = field;\n  if (\n    !(bricks instanceof Uint32Array) ||\n    !(values instanceof Float32Array) ||\n    bricks.length !== dimensions.reduce((n, d) => n * Math.ceil(d / 4), 1) ||\n    values.length === 0 ||\n    values.length % 64 !== 0 ||\n    bricks.byteLength + values.byteLength > MAX_DISTANCE_FIELD_BYTES ||\n    !values.every(Number.isFinite)\n  )\n    return null;\n  const words = new Uint32Array(values.buffer, values.byteOffset, values.length);\n  const counts = new Int8Array(values.length / 64),\n    seen = new Uint8Array(counts.length);\n  for (let b = 0; b < counts.length; b++)\n    for (let i = 0; i < 64; i++)\n      if ((values[b * 64 + i] ?? 0) < 0) counts[b] = (counts[b] ?? 0) + 1;\n  const [nx, ny, nz] = dimensions;\n  let negative = 0;\n  for (const [index, offset] of bricks.entries()) {\n    if (offset % 64 || offset + 64 > values.length) return null;\n    seen[offset / 64] = 1;\n    const start = fieldBrickStart(dimensions, index),\n      [x, y, z] = start;\n    if (x + 4 <= nx && y + 4 <= ny && z + 4 <= nz) negative += counts[offset / 64] ?? 0;\n    else\n      for (let k = 0; k < 4; k++)\n        for (let j = 0; j < 4; j++)\n          for (let i = 0; i < 4; i++) {\n            const lane = (k * 4 + j) * 4 + i,\n              source = fieldBrickLane(dimensions, start, i, j, k);\n            if (source === lane) {\n              if ((values[offset + lane] ?? 0) < 0) negative++;\n            } else if (words[offset + lane] !== words[offset + source]) return null;\n          }\n  }\n  return seen.every((v) => v === 1) ? negative : null;\n}\n","import type { FieldVec3 } from '@forgeax/engine-types';\n\nexport type QueryTriangle = readonly [FieldVec3, FieldVec3, FieldVec3];\nexport interface TriangleRayHit {\n  primitive: number;\n  distance: number;\n  frontFace: boolean;\n}\n/** Shared work allowance for a build batch; exhausted queries never become misses. */\nexport interface TriangleQueryBudget {\n  remaining: number;\n}\n\n/** Exact squared distance, including segment/point degeneracies. */\nexport function triangleDistanceSquared(p: FieldVec3, triangle: QueryTriangle): number {\n  const [a, b, c] = triangle;\n  const abx = b[0] - a[0],\n    aby = b[1] - a[1],\n    abz = b[2] - a[2];\n  const acx = c[0] - a[0],\n    acy = c[1] - a[1],\n    acz = c[2] - a[2];\n  const nx = aby * acz - abz * acy;\n  const ny = abz * acx - abx * acz;\n  const nz = abx * acy - aby * acx;\n  const n2 = nx * nx + ny * ny + nz * nz;\n  if (n2 > 0) {\n    const apx = p[0] - a[0],\n      apy = p[1] - a[1],\n      apz = p[2] - a[2];\n    const d = apx * nx + apy * ny + apz * nz;\n    const px = apx - (nx * d) / n2,\n      py = apy - (ny * d) / n2,\n      pz = apz - (nz * d) / n2;\n    const u =\n      ((py * acz - pz * acy) * nx + (pz * acx - px * acz) * ny + (px * acy - py * acx) * nz) / n2;\n    const v =\n      ((aby * pz - abz * py) * nx + (abz * px - abx * pz) * ny + (abx * py - aby * px) * nz) / n2;\n    if (u >= 0 && v >= 0 && u + v <= 1) return (d * d) / n2;\n  }\n  let nearest = Infinity;\n  for (let edge = 0; edge < 3; edge++) {\n    const from = item(triangle, edge),\n      to = item(triangle, (edge + 1) % 3);\n    const x = to[0] - from[0],\n      y = to[1] - from[1],\n      z = to[2] - from[2];\n    const dx = p[0] - from[0],\n      dy = p[1] - from[1],\n      dz = p[2] - from[2];\n    const length2 = x * x + y * y + z * z;\n    const t = length2 === 0 ? 0 : Math.max(0, Math.min(1, (dx * x + dy * y + dz * z) / length2));\n    nearest = Math.min(nearest, (dx - t * x) ** 2 + (dy - t * y) ** 2 + (dz - t * z) ** 2);\n  }\n  return nearest;\n}\n\ninterface Bounds {\n  min: [number, number, number];\n  max: [number, number, number];\n}\n\ninterface Node extends Bounds {\n  escape: number;\n  first: number;\n  count: number;\n}\n\n/**\n * Build-time acceleration over validated producer-owned triangles. No source\n * arrays are mutated. The producer must retain its immutable input until done.\n * Closest-point and multi-hit ray callers share this one spatial index.\n */\nexport function createTriangleQuery(triangles: readonly QueryTriangle[]) {\n  const order = Uint32Array.from({ length: triangles.length }, (_, i) => i);\n  const nodes: Node[] = [];\n  const centers = new Float64Array(triangles.length * 3);\n  const scratch = new Uint32Array(triangles.length);\n  for (let primitive = 0; primitive < triangles.length; primitive++) {\n    const triangle = item(triangles, primitive);\n    for (const axis of [0, 1, 2] as const)\n      centers[primitive * 3 + axis] =\n        (triangle[0][axis] + triangle[1][axis] + triangle[2][axis]) / 3;\n  }\n  const build = (first: number, count: number): void => {\n    const node: Node = {\n      min: [Infinity, Infinity, Infinity],\n      max: [-Infinity, -Infinity, -Infinity],\n      first,\n      count: 0,\n      escape: 0,\n    };\n    nodes.push(node);\n    for (let i = first; i < first + count; i++) {\n      for (const p of item(triangles, item(order, i))) {\n        for (const axis of [0, 1, 2] as const) {\n          node.min[axis] = Math.min(node.min[axis], p[axis]);\n          node.max[axis] = Math.max(node.max[axis], p[axis]);\n        }\n      }\n    }\n    // Keep sign-ray and closest-point budgets focused on nearby primitives.\n    if (count <= 2) node.count = count;\n    else {\n      // Fixed-bin surface-area partitioning separates small nearby surfaces\n      // from large overlapping triangles without changing the primitive IDs.\n      const binCount = 12;\n      let bestCost = Infinity;\n      let split:\n        | { axis: number; bin: number; min: number; scale: number; left: number }\n        | undefined;\n      for (const axis of [0, 1, 2] as const) {\n        let min = Infinity,\n          max = -Infinity;\n        for (let i = first; i < first + count; i++) {\n          const center = item(centers, item(order, i) * 3 + axis);\n          min = Math.min(min, center);\n          max = Math.max(max, center);\n        }\n        if (!(max > min)) continue;\n        const scale = binCount / (max - min);\n        const bins = Array.from({ length: binCount }, () => ({ ...emptyBounds(), count: 0 }));\n        for (let i = first; i < first + count; i++) {\n          const primitive = item(order, i);\n          const bin = item(\n            bins,\n            Math.min(binCount - 1, Math.floor((item(centers, primitive * 3 + axis) - min) * scale)),\n          );\n          bin.count++;\n          for (const point of item(triangles, primitive))\n            for (const component of [0, 1, 2] as const) {\n              bin.min[component] = Math.min(bin.min[component], point[component]);\n              bin.max[component] = Math.max(bin.max[component], point[component]);\n            }\n        }\n        const rightAreas = new Float64Array(binCount);\n        const rightCounts = new Uint32Array(binCount);\n        const rightBounds = emptyBounds();\n        let rightCount = 0;\n        for (let i = binCount - 1; i >= 0; i--) {\n          const bin = item(bins, i);\n          includeBounds(rightBounds, bin);\n          rightCount += bin.count;\n          rightCounts[i] = rightCount;\n          rightAreas[i] = surfaceArea(rightBounds);\n        }\n        const leftBounds = emptyBounds();\n        let leftCount = 0;\n        for (let i = 0; i < binCount - 1; i++) {\n          const bin = item(bins, i);\n          includeBounds(leftBounds, bin);\n          leftCount += bin.count;\n          const right = item(rightCounts, i + 1);\n          if (!leftCount || !right) continue;\n          const cost = surfaceArea(leftBounds) * leftCount + item(rightAreas, i + 1) * right;\n          if (cost < bestCost) {\n            bestCost = cost;\n            split = { axis, bin: i, min, scale, left: leftCount };\n          }\n        }\n      }\n      const left = split?.left ?? Math.floor(count / 2);\n      if (split) {\n        let leftCursor = first,\n          rightCursor = first + left;\n        for (let i = first; i < first + count; i++) {\n          const primitive = item(order, i);\n          const bin = Math.min(\n            binCount - 1,\n            Math.floor((item(centers, primitive * 3 + split.axis) - split.min) * split.scale),\n          );\n          scratch[bin <= split.bin ? leftCursor++ : rightCursor++] = primitive;\n        }\n        order.set(scratch.subarray(first, first + count), first);\n      } else {\n        // Coincident centroids (including points) still form bounded leaves.\n        order.subarray(first, first + count).sort();\n      }\n      build(first, left);\n      build(first + left, count - left);\n    }\n    node.escape = nodes.length;\n  };\n  if (triangles.length) build(0, triangles.length);\n  return {\n    nodeCount: nodes.length,\n    /** Returns null on primitive-test exhaustion; a partial nearest value is not a distance bound. */\n    nearestSquared(\n      p: FieldVec3,\n      maxDistance = Infinity,\n      budget?: TriangleQueryBudget,\n    ): number | null {\n      let nearest = maxDistance * maxDistance;\n      const pending = nodes.length ? [0] : [];\n      const bounds = nodes.length ? [pointBoundSquared(p, item(nodes, 0))] : [];\n      while (pending.length) {\n        const bound = item(bounds, bounds.length - 1);\n        const cursor = item(pending, pending.length - 1);\n        bounds.pop();\n        pending.pop();\n        if (bound > nearest) continue;\n        const node = item(nodes, cursor);\n        if (node.count === 0) {\n          const left = cursor + 1,\n            right = item(nodes, left).escape;\n          const leftBound = pointBoundSquared(p, item(nodes, left));\n          const rightBound = pointBoundSquared(p, item(nodes, right));\n          // Push the farther child first so the next leaf tightens the bound.\n          if (leftBound <= rightBound) {\n            pending.push(right, left);\n            bounds.push(rightBound, leftBound);\n          } else {\n            pending.push(left, right);\n            bounds.push(leftBound, rightBound);\n          }\n          continue;\n        }\n        for (let i = node.first; i < node.first + node.count; i++) {\n          if (budget) {\n            if (budget.remaining <= 0) return null;\n            budget.remaining--;\n          }\n          nearest = Math.min(nearest, triangleDistanceSquared(p, item(triangles, item(order, i))));\n        }\n      }\n      return nearest;\n    },\n    /** Ray parameter distances. False leaves out unchanged; null is exhausted, not a miss. */\n    trace(\n      out: TriangleRayHit,\n      origin: FieldVec3,\n      direction: FieldVec3,\n      tMin: number,\n      tMax: number,\n      budget?: TriangleQueryBudget,\n    ): boolean | null {\n      let nearest = tMax,\n        found = false;\n      const pending = nodes.length ? [0] : [];\n      const bounds = nodes.length ? [rayBound(origin, direction, item(nodes, 0), tMin, tMax)] : [];\n      while (pending.length) {\n        const bound = item(bounds, bounds.length - 1);\n        const cursor = item(pending, pending.length - 1);\n        pending.pop();\n        bounds.pop();\n        if (!Number.isFinite(bound) || bound > nearest) continue;\n        const node = item(nodes, cursor);\n        if (node.count === 0) {\n          const left = cursor + 1,\n            right = item(nodes, left).escape;\n          const a = rayBound(origin, direction, item(nodes, left), tMin, nearest);\n          const b = rayBound(origin, direction, item(nodes, right), tMin, nearest);\n          if (a <= b) {\n            pending.push(right, left);\n            bounds.push(b, a);\n          } else {\n            pending.push(left, right);\n            bounds.push(a, b);\n          }\n          continue;\n        }\n        for (let i = node.first; i < node.first + node.count; i++) {\n          if (budget) {\n            if (budget.remaining <= 0) return null;\n            budget.remaining--;\n          }\n          const primitive = item(order, i),\n            [a, b, c] = item(triangles, primitive);\n          const ex = b[0] - a[0],\n            ey = b[1] - a[1],\n            ez = b[2] - a[2];\n          const fx = c[0] - a[0],\n            fy = c[1] - a[1],\n            fz = c[2] - a[2];\n          const px = direction[1] * fz - direction[2] * fy;\n          const py = direction[2] * fx - direction[0] * fz;\n          const pz = direction[0] * fy - direction[1] * fx;\n          const det = ex * px + ey * py + ez * pz;\n          if (det === 0) continue;\n          const tx = origin[0] - a[0],\n            ty = origin[1] - a[1],\n            tz = origin[2] - a[2];\n          const u = (tx * px + ty * py + tz * pz) / det;\n          if (u < 0 || u > 1) continue;\n          const qx = ty * ez - tz * ey,\n            qy = tz * ex - tx * ez,\n            qz = tx * ey - ty * ex;\n          const v = (direction[0] * qx + direction[1] * qy + direction[2] * qz) / det;\n          if (v < 0 || u + v > 1) continue;\n          const t = (fx * qx + fy * qy + fz * qz) / det;\n          if (t < tMin || t > nearest || (found && t === nearest && primitive >= out.primitive))\n            continue;\n          nearest = t;\n          found = true;\n          out.primitive = primitive;\n          out.distance = t;\n          out.frontFace = det > 0;\n        }\n      }\n      return found;\n    },\n  };\n}\n\nfunction emptyBounds(): Bounds {\n  return { min: [Infinity, Infinity, Infinity], max: [-Infinity, -Infinity, -Infinity] };\n}\n\nfunction includeBounds(target: Bounds, source: Bounds): void {\n  for (const axis of [0, 1, 2] as const) {\n    target.min[axis] = Math.min(target.min[axis], source.min[axis]);\n    target.max[axis] = Math.max(target.max[axis], source.max[axis]);\n  }\n}\n\nfunction surfaceArea(bounds: Bounds): number {\n  const x = Math.max(0, bounds.max[0] - bounds.min[0]);\n  const y = Math.max(0, bounds.max[1] - bounds.min[1]);\n  const z = Math.max(0, bounds.max[2] - bounds.min[2]);\n  return 2 * (x * y + y * z + z * x);\n}\n\nfunction rayBound(\n  origin: FieldVec3,\n  direction: FieldVec3,\n  node: Node,\n  tMin: number,\n  tMax: number,\n): number {\n  let near = tMin,\n    far = tMax;\n  for (const axis of [0, 1, 2] as const) {\n    if (direction[axis] === 0) {\n      if (origin[axis] < node.min[axis] || origin[axis] > node.max[axis]) return Infinity;\n    } else {\n      const a = (node.min[axis] - origin[axis]) / direction[axis];\n      const b = (node.max[axis] - origin[axis]) / direction[axis];\n      // Slab division and triangle intersection can round the same distance\n      // differently. Widen only the pruning interval; triangles retain the\n      // caller's exact interval and deterministic equal-distance identity.\n      const roundoff = 8 * Number.EPSILON * Math.max(Math.abs(a), Math.abs(b));\n      near = Math.max(near, Math.min(a, b) - roundoff);\n      far = Math.min(far, Math.max(a, b) + roundoff);\n    }\n  }\n  return far < near ? Infinity : near;\n}\n\nfunction pointBoundSquared(p: FieldVec3, node: Node): number {\n  let bound = 0;\n  for (const axis of [0, 1, 2] as const) {\n    const delta = Math.max(node.min[axis] - p[axis], 0, p[axis] - node.max[axis]);\n    bound += delta * delta;\n  }\n  return bound;\n}\n\nfunction item<T>(values: ArrayLike<T>, index: number): T {\n  const value = values[index];\n  if (value === undefined) throw new RangeError('Triangle query index outside validated input');\n  return value;\n}\n","import { err, ok, type Result } from '@forgeax/engine-types';\nimport { brickDistanceFieldValues, distanceFieldTexel } from './distance-field-bricks';\nimport { createTriangleQuery } from './triangle-query';\n\nexport type {\n  DistanceFieldPolicy,\n  FieldBounds,\n  FieldVec3,\n  MeshDistanceField,\n} from '@forgeax/engine-types';\n\nimport type { DistanceFieldPolicy, FieldVec3, MeshDistanceField } from '@forgeax/engine-types';\nexport const MAX_VISIBILITY_DISTANCE_FIELD_AXIS = 514;\n/** Advance when the builder policy changes, independently of artifact encoding. */\nexport const MESH_DISTANCE_FIELD_GENERATION_VERSION = 5;\nexport type GeometricDistanceField = MeshDistanceField & {\n  readonly policy: Extract<DistanceFieldPolicy, { readonly errorBound: number }>;\n};\nexport interface DistanceFieldError {\n  readonly code: 'distance-field-invalid' | 'distance-field-unsupported' | 'distance-field-limit';\n  readonly expected: string;\n  readonly hint: string;\n  readonly detail: { readonly reason: string };\n}\nexport function distanceFieldFailure(\n  reason: string,\n  code: DistanceFieldError['code'] = 'distance-field-invalid',\n): Result<never, DistanceFieldError> {\n  return err({\n    code,\n    expected:\n      'bounded resolved geometry with an explicit distance-bound or sampled-visibility policy',\n    hint:\n      code === 'distance-field-limit'\n        ? 'Inspect the declared bounds; reduce resolution or geometry workload on preparation-budget exhaustion, then rebuild.'\n        : 'Inspect topology and voxel coverage; repair the mesh or increase resolution before rebuilding.',\n    detail: { reason },\n  });\n}\nconst sub = (a: FieldVec3, b: FieldVec3): FieldVec3 => [a[0] - b[0], a[1] - b[1], a[2] - b[2]];\nconst dot = (a: FieldVec3, b: FieldVec3) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\nconst cross = (a: FieldVec3, b: FieldVec3): FieldVec3 => [\n  a[1] * b[2] - a[2] * b[1],\n  a[2] * b[0] - a[0] * b[2],\n  a[0] * b[1] - a[1] * b[0],\n];\nconst length = (a: FieldVec3) => Math.hypot(...a);\n/** Canonical derived-data identity; source validation belongs to buildMeshDistanceField. */\nexport async function distanceFieldMeshDigest(\n  positions: ArrayLike<number>,\n  indices: ArrayLike<number>,\n): Promise<string> {\n  const bytes = new Uint8Array(8 + (positions.length + indices.length) * 4),\n    v = new DataView(bytes.buffer);\n  v.setUint32(0, positions.length, true);\n  v.setUint32(4, indices.length, true);\n  for (let i = 0; i < positions.length; i++) v.setFloat32(8 + i * 4, positions[i] ?? NaN, true);\n  for (let i = 0; i < indices.length; i++)\n    v.setUint32(8 + (positions.length + i) * 4, indices[i] ?? 0xffffffff, true);\n  const digest = await crypto.subtle.digest('SHA-256', bytes);\n  return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/** Explicit preparation work. Never invoked by Renderer or on an ordinary frame path. */\nexport async function buildMeshDistanceField(\n  positions: ArrayLike<number>,\n  indices: ArrayLike<number>,\n  options: { readonly resolution?: number; readonly twoSided?: boolean } = {},\n): Promise<Result<GeometricDistanceField, DistanceFieldError>> {\n  const { resolution = 24, twoSided = false } = options;\n  if (typeof twoSided !== 'boolean') return distanceFieldFailure('twoSided must be boolean');\n  if (!Number.isInteger(resolution) || resolution < 8 || resolution > 64)\n    return distanceFieldFailure('resolution must be an integer in 8..64', 'distance-field-limit');\n  if (\n    positions.length < (twoSided ? 9 : 12) ||\n    positions.length % 3 !== 0 ||\n    indices.length < (twoSided ? 3 : 12) ||\n    indices.length % 3 !== 0\n  )\n    return distanceFieldFailure(\n      'expected indexed xyz triangles, enclosing a volume for signed fields',\n    );\n  if (positions.length > 3_145_728 || indices.length > (twoSided ? 196608 : 3072))\n    return distanceFieldFailure(\n      'at most 1048576 source vertices; 1024 signed or 65536 two-sided triangles',\n      'distance-field-limit',\n    );\n  const points: FieldVec3[] = [],\n    welded: number[] = [],\n    weld = new Map<string, number>();\n  for (let i = 0; i < positions.length; i += 3) {\n    const p: FieldVec3 = [\n      Math.fround(positions[i] ?? NaN),\n      Math.fround(positions[i + 1] ?? NaN),\n      Math.fround(positions[i + 2] ?? NaN),\n    ];\n    if (!p.every(Number.isFinite)) return distanceFieldFailure('positions must be finite f32');\n    const key = p.join(',');\n    let id = weld.get(key);\n    if (id === undefined) {\n      id = weld.size;\n      weld.set(key, id);\n    }\n    points.push(p);\n    welded.push(id);\n  }\n  const triangles: [FieldVec3, FieldVec3, FieldVec3][] = [],\n    edges = new Map<string, { count: number; balance: number }>();\n  for (let i = 0; i < indices.length; i += 3) {\n    const ids = [indices[i] ?? -1, indices[i + 1] ?? -1, indices[i + 2] ?? -1];\n    if (ids.some((v) => !Number.isInteger(v) || v < 0 || v >= points.length))\n      return distanceFieldFailure('index outside source vertices');\n    const a = item(points, item(ids, 0)),\n      b = item(points, item(ids, 1)),\n      c = item(points, item(ids, 2));\n    if (length(cross(sub(b, a), sub(c, a))) === 0)\n      return distanceFieldFailure('degenerate triangle');\n    triangles.push([a, b, c]);\n    for (let e = 0; !twoSided && e < 3; e++) {\n      const x = item(welded, item(ids, e)),\n        y = item(welded, item(ids, (e + 1) % 3)),\n        key = `${Math.min(x, y)}:${Math.max(x, y)}`;\n      const edge = edges.get(key) ?? { count: 0, balance: 0 };\n      edge.count++;\n      edge.balance += x < y ? 1 : -1;\n      edges.set(key, edge);\n    }\n  }\n  if (!twoSided && [...edges.values()].some((e) => e.count !== 2 || e.balance !== 0))\n    return distanceFieldFailure(\n      'open, non-manifold or inconsistently wound edges',\n      'distance-field-unsupported',\n    );\n  const anchor = triangles[0]?.[0] ?? [0, 0, 0];\n  const volume6 = triangles.reduce(\n    (sum, [a, b, c]) => sum + dot(sub(a, anchor), cross(sub(b, anchor), sub(c, anchor))),\n    0,\n  );\n  if (!twoSided && volume6 <= 0)\n    return distanceFieldFailure(\n      'closed mesh must be outward wound with positive volume',\n      'distance-field-unsupported',\n    );\n  const min: [number, number, number] = [Infinity, Infinity, Infinity],\n    max: [number, number, number] = [-Infinity, -Infinity, -Infinity];\n  for (const [a, b, c] of triangles)\n    for (const p of [a, b, c])\n      for (const axis of [0, 1, 2] as const) {\n        min[axis] = Math.min(min[axis], p[axis]);\n        max[axis] = Math.max(max[axis], p[axis]);\n      }\n  const spacing = Math.fround(Math.max(...max.map((v, i) => v - item(min, i))) / resolution);\n  if (!Number.isFinite(spacing) || spacing <= 0)\n    return distanceFieldFailure('invalid field extent');\n  const origin = min.map((v) => Math.fround(v - spacing)) as [number, number, number];\n  const dimensions = max.map((v, i) => Math.ceil((v - item(min, i)) / spacing) + 3) as [\n    number,\n    number,\n    number,\n  ];\n  const count = dimensions[0] * dimensions[1] * dimensions[2];\n  if (!twoSided && count * triangles.length > 32_000_000)\n    return distanceFieldFailure(\n      'voxel/triangle preparation budget exceeded',\n      'distance-field-limit',\n    );\n  const query = createTriangleQuery(triangles);\n  // A bounded allowance per sample caps all closest-point primitive evaluations at 32M.\n  const queryBudget = Math.floor(32_000_000 / count);\n  const values = new Float32Array(count);\n  let interiorSamples = 0,\n    rounding = 0;\n  const surfaceEpsilon = Math.max(\n    spacing * 1e-7,\n    Math.max(...min.map(Math.abs), ...max.map(Math.abs)) * 1e-7,\n  );\n  for (let z = 0; z < dimensions[2]; z++)\n    for (let y = 0; y < dimensions[1]; y++)\n      for (let x = 0; x < dimensions[0]; x++) {\n        const p: FieldVec3 = [\n          origin[0] + x * spacing,\n          origin[1] + y * spacing,\n          origin[2] + z * spacing,\n        ];\n        const distanceSquared = query.nearestSquared(p, Infinity, { remaining: queryBudget });\n        if (distanceSquared === null)\n          return distanceFieldFailure(\n            'closest-point preparation budget exhausted',\n            'distance-field-limit',\n          );\n        const nearest = Math.sqrt(distanceSquared);\n        let angle = 0;\n        if (!twoSided)\n          for (const [a, b, c] of triangles) {\n            const u = sub(a, p),\n              v = sub(b, p),\n              w = sub(c, p),\n              lu = length(u),\n              lv = length(v),\n              lw = length(w);\n            angle +=\n              2 *\n              Math.atan2(\n                dot(u, cross(v, w)),\n                lu * lv * lw + dot(u, v) * lw + dot(v, w) * lu + dot(w, u) * lv,\n              );\n          }\n        const winding = Math.abs(angle) / (4 * Math.PI);\n        if (nearest > surfaceEpsilon && (winding > 1.01 || (winding > 0.01 && winding < 0.99)))\n          return distanceFieldFailure(\n            'ambiguous sampled winding; intersecting or nested shells are not qualified',\n            'distance-field-unsupported',\n          );\n        const signed = nearest <= surfaceEpsilon ? 0 : nearest * (winding > 0.5 ? -1 : 1),\n          sample = Math.fround(signed);\n        values[(z * dimensions[1] + y) * dimensions[0] + x] = sample;\n        rounding = Math.max(rounding, Math.abs(signed - sample));\n        if (sample < 0) interiorSamples++;\n      }\n  if (!twoSided && interiorSamples === 0)\n    return distanceFieldFailure(\n      'thin solid has no interior voxel support',\n      'distance-field-unsupported',\n    );\n  // Bounded surface coverage diagnostic. It is not a proof about every sub-voxel feature.\n  if (!twoSided)\n    for (const [a, b, c] of triangles) {\n      const center: FieldVec3 = [\n        (a[0] + b[0] + c[0]) / 3,\n        (a[1] + b[1] + c[1]) / 3,\n        (a[2] + b[2] + c[2]) / 3,\n      ];\n      const cell = center.map((v, i) => Math.floor((v - item(origin, i)) / spacing));\n      let supported = false;\n      for (let dz = -2; dz <= 2; dz++)\n        for (let dy = -2; dy <= 2; dy++)\n          for (let dx = -2; dx <= 2; dx++) {\n            const x = item(cell, 0) + dx,\n              y = item(cell, 1) + dy,\n              z = item(cell, 2) + dz;\n            if (\n              x >= 0 &&\n              y >= 0 &&\n              z >= 0 &&\n              x < dimensions[0] &&\n              y < dimensions[1] &&\n              z < dimensions[2] &&\n              item(values, (z * dimensions[1] + y) * dimensions[0] + x) < 0\n            )\n              supported = true;\n          }\n      if (!supported)\n        return distanceFieldFailure(\n          'triangle centroid has no nearby interior voxel support',\n          'distance-field-unsupported',\n        );\n    }\n  const errorBound = Math.fround(\n    (Math.sqrt(3) * spacing) / 2 + rounding + surfaceEpsilon * 4 + spacing * 1e-5,\n  );\n  const storage = brickDistanceFieldValues(dimensions, values);\n  if (!storage)\n    return distanceFieldFailure('distance-field storage exceeds 32 MiB', 'distance-field-limit');\n  return ok({\n    meshDigest: await distanceFieldMeshDigest(positions, indices),\n    policy: { kind: twoSided ? 'two-sided' : 'signed-solid', errorBound },\n    dimensions,\n    origin,\n    spacing,\n    ...storage,\n    bounds: { min, max },\n    quality: { negativeSamples: interiorSamples, testedTriangles: triangles.length },\n  });\n}\n\n/** Trilinear local-space distance under the published sign policy; null means outside the volume. */\nexport function sampleMeshDistanceField(field: MeshDistanceField, p: FieldVec3): number | null {\n  const q = p.map((v, i) => (v - item(field.origin, i)) / field.spacing);\n  if (q.some((v, i) => !Number.isFinite(v) || v < 0 || v > item(field.dimensions, i) - 1))\n    return null;\n  const cell = q.map((v, i) => Math.min(Math.floor(v), item(field.dimensions, i) - 2));\n  let result = 0;\n  for (let z = 0; z < 2; z++)\n    for (let y = 0; y < 2; y++)\n      for (let x = 0; x < 2; x++) {\n        const w =\n          (x ? item(q, 0) - item(cell, 0) : 1 - (item(q, 0) - item(cell, 0))) *\n          (y ? item(q, 1) - item(cell, 1) : 1 - (item(q, 1) - item(cell, 1))) *\n          (z ? item(q, 2) - item(cell, 2) : 1 - (item(q, 2) - item(cell, 2)));\n        result +=\n          distanceFieldTexel(field, item(cell, 0) + x, item(cell, 1) + y, item(cell, 2) + z) * w;\n      }\n  return result;\n}\n\nfunction item<T>(values: ArrayLike<T>, index: number): T {\n  const value = values[index];\n  if (value === undefined)\n    throw new RangeError(`distance field index ${index} outside validated span`);\n  return value;\n}\n","import { AssetError, err, ok, type Result } from '@forgeax/engine-types';\nimport { distanceFieldMeshDigest, type FieldVec3 } from './distance-field';\nimport { createTriangleQuery, type QueryTriangle } from './triangle-query';\n\nexport type { MeshCardLayout, MeshCardProjection } from '@forgeax/engine-types';\n\nimport type { MeshCardLayout, MeshCardProjection } from '@forgeax/engine-types';\n\ninterface Surfel {\n  x: number;\n  y: number;\n  z: number;\n  near: number;\n  weight: number;\n  samples: { position: FieldVec3; normal: FieldVec3 }[];\n}\ninterface Cluster {\n  direction: number;\n  plane: number;\n  samples: number[];\n  weight: number;\n  minX: number;\n  minY: number;\n  maxX: number;\n  maxY: number;\n  minZ: number;\n  maxZ: number;\n}\nconst cross = (a: FieldVec3, b: FieldVec3): FieldVec3 => [\n  a[1] * b[2] - a[2] * b[1],\n  a[2] * b[0] - a[0] * b[2],\n  a[0] * b[1] - a[1] * b[0],\n];\nconst dot = (a: FieldVec3, b: FieldVec3) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\nconst normalize = (a: FieldVec3): FieldVec3 => {\n  const size = Math.hypot(...a);\n  return size === 0 ? [0, 0, 0] : [a[0] / size, a[1] / size, a[2] / size];\n};\nexport function meshCardFailure(reason: string, value: unknown): Result<never, AssetError> {\n  return err(\n    new AssetError({\n      code: 'asset-parse-failed',\n      expected: 'bounded indexed mesh and finite card sampling settings',\n      hint: 'Repair the source mesh or card build settings, then rebuild the same mesh GUID.',\n      detail: { field: 'mesh-card-layout', value, reason },\n    }),\n  );\n}\n\n/**\n * Offline six-axis, multiple-depth card fitting. UE MeshCardRepresentationUtilities\n * motivates the near-plane visibility constraint and global coverage budget;\n * this bounded implementation does not copy its world-unit defaults.\n */\nexport async function buildMeshCardLayout(\n  positions: ArrayLike<number>,\n  indices: ArrayLike<number>,\n  settings: {\n    readonly resolution?: number;\n    readonly maxCards?: number;\n    readonly triangleSidedness?: ArrayLike<number>;\n  } = {},\n): Promise<Result<MeshCardLayout, AssetError>> {\n  const resolution = settings.resolution ?? 16,\n    maxCards = settings.maxCards ?? 24;\n  if (\n    !Number.isInteger(resolution) ||\n    resolution < 8 ||\n    resolution > 32 ||\n    !Number.isInteger(maxCards) ||\n    maxCards < 1 ||\n    maxCards > 64 ||\n    positions.length < 9 ||\n    positions.length % 3 !== 0 ||\n    positions.length > 3_145_728 ||\n    indices.length < 3 ||\n    indices.length % 3 !== 0 ||\n    indices.length > 3_145_728\n  )\n    return meshCardFailure('resolution 8..32, maxCards 1..64, at most 1048576 vertices/triangles', {\n      resolution,\n      maxCards,\n      triangleCount: indices.length / 3,\n      positions: positions.length,\n      indices: indices.length,\n    });\n  const triangleCount = indices.length / 3;\n  const flags = settings.triangleSidedness;\n  if (\n    flags !== undefined &&\n    (flags.length !== triangleCount ||\n      Array.from(flags).some((value) => value !== 0 && value !== 1))\n  )\n    return meshCardFailure('triangleSidedness must contain one 0 or 1 per indexed triangle', null);\n  const sidedness = flags === undefined ? new Uint8Array(triangleCount) : Uint8Array.from(flags);\n  // UE MeshRepresentationCommon derives the foliage fitting hint at one quarter.\n  // Individual hits still use the originating triangle, never this aggregate hint.\n  const mostlyTwoSided = sidedness.reduce((sum, value) => sum + value, 0) * 4 >= triangleCount;\n  const points: FieldVec3[] = [];\n  for (let i = 0; i < positions.length; i += 3) {\n    const p: FieldVec3 = [\n      Math.fround(item(positions, i)),\n      Math.fround(item(positions, i + 1)),\n      Math.fround(item(positions, i + 2)),\n    ];\n    if (!p.every(Number.isFinite)) return meshCardFailure('positions must be finite f32', p);\n    points.push(p);\n  }\n  const triangles: QueryTriangle[] = [],\n    normals: FieldVec3[] = [],\n    triangleSides: number[] = [];\n  const min: [number, number, number] = [Infinity, Infinity, Infinity],\n    max: [number, number, number] = [-Infinity, -Infinity, -Infinity];\n  for (let i = 0; i < indices.length; i += 3) {\n    const ids = [item(indices, i), item(indices, i + 1), item(indices, i + 2)];\n    if (ids.some((id) => !Number.isInteger(id) || id < 0 || id >= points.length))\n      return meshCardFailure('index outside source vertices', ids);\n    const a = item(points, item(ids, 0)),\n      b = item(points, item(ids, 1)),\n      c = item(points, item(ids, 2));\n    const normal = normalize(\n      cross([b[0] - a[0], b[1] - a[1], b[2] - a[2]], [c[0] - a[0], c[1] - a[1], c[2] - a[2]]),\n    );\n    // Collapsed source triangles have no raster coverage, as in the exact query path.\n    if (dot(normal, normal) === 0) continue;\n    triangles.push([a, b, c]);\n    triangleSides.push(item(sidedness, i / 3));\n    normals.push(normal);\n    for (const p of [a, b, c])\n      for (const axis of [0, 1, 2] as const) {\n        min[axis] = Math.min(min[axis], p[axis]);\n        max[axis] = Math.max(max[axis], p[axis]);\n      }\n  }\n  if (triangles.length === 0) return meshCardFailure('mesh has no nondegenerate surface', 0);\n  const spacing = Math.max(...max.map((x, i) => x - item(min, i))) / resolution;\n  if (!(spacing > 0) || !Number.isFinite(spacing))\n    return meshCardFailure('invalid spatial extent', spacing);\n  const query = createTriangleQuery(triangles),\n    hit = { primitive: -1, distance: 0, frontFace: false };\n  const bases: MeshCardProjection[] = [],\n    allSurfels: Surfel[][] = [],\n    clusters: Cluster[] = [];\n  let rays = 0,\n    rejectedInside = 0;\n  const epsilon = Math.max(\n    spacing * 1e-5,\n    Number.EPSILON * Math.max(...min.map(Math.abs), ...max.map(Math.abs)) * 16,\n  );\n  for (let direction = 0; direction < 6; direction++) {\n    const axis = Math.floor(direction / 2),\n      sign = direction % 2 ? -1 : 1;\n    const n: [number, number, number] = [0, 0, 0],\n      u: [number, number, number] = [0, 0, 0];\n    n[axis] = sign;\n    u[(axis + 1) % 3] = 1;\n    const v = cross(u, n),\n      size = max.map((x, i) => x - item(min, i));\n    const extent = (a: FieldVec3) =>\n      Math.abs(a[0]) * item(size, 0) +\n      Math.abs(a[1]) * item(size, 1) +\n      Math.abs(a[2]) * item(size, 2);\n    const columns = Math.max(1, Math.ceil(extent(u) / spacing)),\n      rows = Math.max(1, Math.ceil(extent(v) / spacing));\n    const width = columns * spacing,\n      height = rows * spacing,\n      depth = Math.max(spacing, extent(n));\n    const origin: FieldVec3 = [0, 1, 2].map(\n      (i) =>\n        (item(min, i) + item(max, i)) / 2 +\n        (item(n, i) * depth) / 2 -\n        (item(u, i) * width) / 2 -\n        (item(v, i) * height) / 2,\n    ) as [number, number, number];\n    bases.push({ origin, u, v, n, width, height, depth });\n    const cast: FieldVec3 = [-n[0], -n[1], -n[2]],\n      surfels = new Map<string, Surfel>();\n    for (let y = 0; y < rows; y++)\n      for (let x = 0; x < columns; x++)\n        for (let sample = 0; sample < 32; sample++) {\n          let bits = sample,\n            inverse = 0,\n            fraction = 0.5;\n          while (bits > 0) {\n            inverse += (bits & 1) * fraction;\n            bits >>>= 1;\n            fraction *= 0.5;\n          }\n          const jitter = [(sample + 0.5) / 32, inverse];\n          const start: FieldVec3 = [0, 1, 2].map(\n            (i) =>\n              item(origin, i) +\n              item(u, i) * (x + item(jitter, 0)) * spacing +\n              item(v, i) * (y + item(jitter, 1)) * spacing +\n              item(n, i) * 2 * spacing,\n          ) as [number, number, number];\n          let near = 0,\n            lastCell = -2;\n          while (near <= depth + 2 * spacing + epsilon) {\n            rays++;\n            if (!query.trace(hit, start, cast, near, depth + 2 * spacing + epsilon)) break;\n            const cell = Math.max(0, Math.floor((hit.distance - 2 * spacing) / spacing));\n            const originalNormal = item(normals, hit.primitive),\n              alignment = dot(originalNormal, n),\n              twoSided = item(triangleSides, hit.primitive) === 1;\n            // Advancing the query already skips the occupied cell. An adjacent\n            // cell may contain a separate visible surface across an air gap.\n            if ((twoSided ? Math.abs(alignment) : alignment) >= 0.5 && cell > lastCell) {\n              const normal: FieldVec3 =\n                twoSided && alignment < 0\n                  ? [-originalNormal[0], -originalNormal[1], -originalNormal[2]]\n                  : originalNormal;\n              const position: FieldVec3 = [\n                start[0] + cast[0] * hit.distance + normal[0] * epsilon,\n                start[1] + cast[1] * hit.distance + normal[1] * epsilon,\n                start[2] + cast[2] * hit.distance + normal[2] * epsilon,\n              ];\n              const nearPlane = Math.max(0, lastCell + 1),\n                key = `${x},${y},${cell},${nearPlane}`;\n              const surfel = surfels.get(key) ?? {\n                x,\n                y,\n                z: cell,\n                near: nearPlane,\n                weight: 0,\n                samples: [],\n              };\n              surfel.samples.push({ position, normal });\n              surfels.set(key, surfel);\n            }\n            lastCell = cell;\n            near = 2 * spacing + (cell + 1) * spacing + epsilon;\n          }\n        }\n    const samples = [...surfels.values()].filter((surfel) => {\n      let hits = 0,\n        backHits = 0;\n      // Visibility is sampled across the actual surface points, never at a mean\n      // point which may lie inside curved geometry. Reuse the compacted span.\n      for (let sample = 0; sample < 8; sample++) {\n        const { position, normal } = item(surfel.samples, sample % surfel.samples.length);\n        const tangent = normalize(cross(normal, Math.abs(normal[2]) < 0.9 ? [0, 0, 1] : [0, 1, 0]));\n        const bitangent = cross(normal, tangent);\n        const z = (sample + 0.5) / 8,\n          radius = Math.sqrt(1 - z * z),\n          phi = sample * 2.399963229728653;\n        const ray: FieldVec3 = [0, 1, 2].map(\n          (i) =>\n            item(normal, i) * z +\n            radius * (item(tangent, i) * Math.cos(phi) + item(bitangent, i) * Math.sin(phi)),\n        ) as [number, number, number];\n        rays++;\n        if (query.trace(hit, position, ray, 0, Infinity)) {\n          hits++;\n          if (!hit.frontFace && item(triangleSides, hit.primitive) === 0) backHits++;\n        }\n      }\n      surfel.weight = ((2 - hits / 8) * surfel.samples.length) / 32;\n      surfel.samples.length = 0;\n      if (hits > 8 * 0.8 && backHits > 8 * 0.2) {\n        rejectedInside++;\n        return false;\n      }\n      return true;\n    });\n    allSurfels.push(samples);\n    if (allSurfels.reduce((sum, list) => sum + list.length, 0) > 32768)\n      return meshCardFailure(\n        'surfel budget exceeded; rebuild with lower sampling resolution',\n        allSurfels.reduce((sum, list) => sum + list.length, 0),\n      );\n    const assigned = new Set<number>();\n    const fit = (plane: number): Cluster | undefined => {\n      const eligible: number[] = [];\n      samples.forEach((s, index) => {\n        if (!assigned.has(index) && s.z >= plane && s.near <= plane) eligible.push(index);\n      });\n      const enclose = (indices: number[]): Cluster => {\n        const cluster: Cluster = {\n          direction,\n          plane,\n          samples: indices,\n          weight: 0,\n          minX: Infinity,\n          minY: Infinity,\n          maxX: -Infinity,\n          maxY: -Infinity,\n          minZ: Infinity,\n          maxZ: -Infinity,\n        };\n        for (const index of indices) {\n          const s = item(samples, index);\n          cluster.weight += s.weight;\n          cluster.minX = Math.min(cluster.minX, s.x);\n          cluster.minY = Math.min(cluster.minY, s.y);\n          cluster.maxX = Math.max(cluster.maxX, s.x);\n          cluster.maxY = Math.max(cluster.maxY, s.y);\n          cluster.minZ = Math.min(cluster.minZ, s.z);\n          cluster.maxZ = Math.max(cluster.maxZ, s.z);\n        }\n        return cluster;\n      };\n      const valid = (cluster: Cluster) =>\n        cluster.weight >= 0.25 &&\n        cluster.weight / ((cluster.maxX - cluster.minX + 1) * (cluster.maxY - cluster.minY + 1)) >=\n          0.05;\n      const whole = enclose(eligible);\n      if (valid(whole)) return whole;\n      // Empty space between disconnected surfaces must not dilute each surface's\n      // density. Keep the same admission thresholds and global Card budget.\n      const cells = new Map<number, number[]>();\n      for (const index of eligible) {\n        const s = item(samples, index),\n          key = s.y * columns + s.x;\n        const cell = cells.get(key) ?? [];\n        cell.push(index);\n        cells.set(key, cell);\n      }\n      const islands: Cluster[] = [];\n      while (cells.size > 0) {\n        const first = cells.keys().next().value;\n        if (first === undefined) break;\n        const queue = [first],\n          indices: number[] = [];\n        for (let cursor = 0; cursor < queue.length; cursor++) {\n          const key = item(queue, cursor),\n            cell = cells.get(key);\n          if (cell === undefined) continue;\n          cells.delete(key);\n          indices.push(...cell);\n          const x = key % columns,\n            y = Math.floor(key / columns);\n          for (let dy = -1; dy <= 1; dy++)\n            for (let dx = -1; dx <= 1; dx++) {\n              const nx = x + dx,\n                ny = y + dy;\n              if (nx < 0 || nx >= columns || ny < 0 || ny >= rows) continue;\n              const neighbor = ny * columns + nx;\n              if (cells.has(neighbor)) queue.push(neighbor);\n            }\n        }\n        islands.push(enclose(indices));\n      }\n      islands.sort((a, b) => b.weight - a.weight);\n      const seed = islands.find(valid);\n      if (seed === undefined) return undefined;\n      let best = seed;\n      // Pack nearby islands when their union is admissible, so splitting does\n      // not spend the finite budget on unnecessarily small projections.\n      for (const island of islands) {\n        if (island === seed) continue;\n        const combined = enclose([...best.samples, ...island.samples]);\n        if (valid(combined)) best = combined;\n      }\n      return best;\n    };\n    let best = fit(0);\n    while (true) {\n      if (best !== undefined) {\n        clusters.push(best);\n        for (const index of best.samples) assigned.add(index);\n      }\n      best = undefined;\n      for (let plane = 0; plane <= (mostlyTwoSided ? 0 : resolution); plane++) {\n        const candidate = fit(plane);\n        if (candidate !== undefined && (best === undefined || candidate.weight > best.weight))\n          best = candidate;\n      }\n      if (best === undefined) break;\n    }\n  }\n  clusters.sort((a, b) => b.weight - a.weight || a.direction - b.direction || a.plane - b.plane);\n  const selected = clusters.slice(0, maxCards);\n  const cards = selected.map((cluster): MeshCardProjection => {\n    const base = item(bases, cluster.direction);\n    return {\n      origin: [0, 1, 2].map(\n        (i) =>\n          item(base.origin, i) +\n          item(base.u, i) * cluster.minX * spacing +\n          item(base.v, i) * cluster.minY * spacing -\n          item(base.n, i) * (cluster.minZ - 0.5) * spacing,\n      ) as [number, number, number],\n      u: base.u,\n      v: base.v,\n      n: base.n,\n      width: (cluster.maxX - cluster.minX + 1) * spacing,\n      height: (cluster.maxY - cluster.minY + 1) * spacing,\n      // UE SerializeLOD encloses occupied cells with half a voxel on each depth boundary.\n      depth: (cluster.maxZ - cluster.minZ + 2) * spacing,\n    };\n  });\n  return ok({\n    meshDigest: await distanceFieldMeshDigest(positions, indices),\n    bounds: { min, max },\n    cards,\n    sidednessDigest: await meshCardSidednessDigest(sidedness),\n    sampling: {\n      resolution,\n      spacing,\n      rays,\n      surfels: allSurfels.reduce((sum, list) => sum + list.length, 0),\n      weightedCoverage: allSurfels.reduce(\n        (sum, list) => sum + list.reduce((s, surfel) => s + surfel.weight, 0),\n        0,\n      ),\n      representedWeight: selected.reduce((sum, cluster) => sum + cluster.weight, 0),\n      rejectedInside,\n    },\n  });\n}\n\nfunction item<T>(values: ArrayLike<T>, index: number): T {\n  const value = values[index];\n  if (value === undefined) throw new RangeError('Card layout index outside validated input');\n  return value;\n}\n\n/** Representation policy identity; independent of geometry and material values. */\nexport async function meshCardSidednessDigest(flags: Uint8Array): Promise<string> {\n  const digest = await crypto.subtle.digest('SHA-256', new Uint8Array(flags));\n  return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, '0')).join('');\n}\n","import { type AssetError, ok, type Result } from '@forgeax/engine-types';\nimport { type MeshCardLayout, meshCardFailure } from './mesh-card-layout';\n\nconst MAX_ARTIFACT_BYTES = 256 * 1024;\n\nexport function validateMeshCardLayout(layout: MeshCardLayout): Result<void, AssetError> {\n  const vec = (value: unknown): value is readonly [number, number, number] =>\n    Array.isArray(value) &&\n    value.length === 3 &&\n    value.every((x) => typeof x === 'number' && Number.isFinite(Math.fround(x)));\n  const dot = (a: readonly number[], b: readonly number[]) =>\n    a.reduce((sum, x, i) => sum + x * (b[i] ?? NaN), 0);\n  const count = (x: number) => Number.isSafeInteger(x) && x >= 0;\n  if (\n    !layout ||\n    !/^[a-f0-9]{64}$/.test(layout.meshDigest) ||\n    !/^[a-f0-9]{64}$/.test(layout.sidednessDigest) ||\n    !layout.bounds ||\n    !vec(layout.bounds.min) ||\n    !vec(layout.bounds.max) ||\n    layout.bounds.min.some((x, i) => x > (layout.bounds.max[i] ?? -Infinity)) ||\n    !Array.isArray(layout.cards) ||\n    layout.cards.length > 64 ||\n    !layout.sampling\n  )\n    return meshCardFailure('invalid mesh card layout identity or bounds', null);\n  const s = layout.sampling;\n  if (\n    !Number.isInteger(s.resolution) ||\n    s.resolution < 8 ||\n    s.resolution > 32 ||\n    !Number.isFinite(s.spacing) ||\n    s.spacing <= 0 ||\n    !count(s.rays) ||\n    !count(s.surfels) ||\n    s.surfels > 32768 ||\n    !count(s.rejectedInside) ||\n    !Number.isFinite(s.weightedCoverage) ||\n    s.weightedCoverage < 0 ||\n    !Number.isFinite(s.representedWeight) ||\n    s.representedWeight < 0 ||\n    s.representedWeight > s.weightedCoverage + 1e-8 ||\n    (layout.cards.length === 0 && s.representedWeight !== 0)\n  )\n    return meshCardFailure('invalid card sampling and coverage evidence', s);\n  for (const card of layout.cards) {\n    if (\n      !card ||\n      !vec(card.origin) ||\n      !vec(card.u) ||\n      !vec(card.v) ||\n      !vec(card.n) ||\n      ![card.width, card.height, card.depth].every(\n        (x) => x > 0 && Number.isFinite(Math.fround(x)),\n      ) ||\n      [card.u, card.v, card.n].some((axis) => Math.abs(dot(axis, axis) - 1) > 1e-5) ||\n      Math.abs(dot(card.u, card.v)) > 1e-5 ||\n      Math.abs(dot(card.u, card.n)) > 1e-5 ||\n      Math.abs(dot(card.v, card.n)) > 1e-5 ||\n      dot(\n        [\n          card.u[1] * card.n[2] - card.u[2] * card.n[1],\n          card.u[2] * card.n[0] - card.u[0] * card.n[2],\n          card.u[0] * card.n[1] - card.u[1] * card.n[0],\n        ],\n        card.v,\n      ) <\n        1 - 1e-5\n    )\n      return meshCardFailure('card requires finite orthonormal axes and positive extents', card);\n  }\n  return ok(undefined);\n}\n\n/** Card layouts describe static triangle-list geometry; the producer and every decoder admit them by this rule. */\nexport function admitsMeshCardLayout(mesh: {\n  readonly submeshes: readonly { readonly topology?: unknown }[];\n  readonly morphTargets?: unknown;\n  readonly skinIndex?: unknown;\n}): boolean {\n  return (\n    mesh.submeshes.every((section) => section.topology === 'triangle-list') &&\n    mesh.morphTargets === undefined &&\n    mesh.skinIndex === undefined\n  );\n}\n\n/** Pack/DDC owns byte integrity; this codec owns representation version and geometry identity. */\nexport function encodeMeshCardLayout(layout: MeshCardLayout): Result<Uint8Array, AssetError> {\n  const valid = validateMeshCardLayout(layout);\n  if (!valid.ok) return valid;\n  const bytes = new TextEncoder().encode(JSON.stringify({ version: 2, layout }));\n  return bytes.byteLength <= MAX_ARTIFACT_BYTES\n    ? ok(bytes)\n    : meshCardFailure('card artifact exceeds 256 KiB metadata limit', bytes.byteLength);\n}\n\nexport function decodeMeshCardLayout(\n  bytes: Uint8Array,\n  expectedMeshDigest: string,\n): Result<MeshCardLayout, AssetError> {\n  if (bytes.byteLength > MAX_ARTIFACT_BYTES)\n    return meshCardFailure('card artifact exceeds 256 KiB metadata limit', bytes.byteLength);\n  try {\n    const parsed = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes));\n    if (parsed.version !== 2 || parsed.layout?.meshDigest !== expectedMeshDigest)\n      return meshCardFailure(\n        'unsupported card artifact version or stale source geometry',\n        expectedMeshDigest,\n      );\n    const valid = validateMeshCardLayout(parsed.layout);\n    return valid.ok ? ok(parsed.layout) : valid;\n  } catch {\n    return meshCardFailure('malformed card artifact', null);\n  }\n}\n","import {\n  AssetError,\n  err,\n  type MeshAsset,\n  type MeshCollision,\n  ok,\n  type Result,\n} from '@forgeax/engine-types';\n\nfunction failure(reason: string): Result<never, AssetError> {\n  return err(\n    new AssetError({\n      code: 'asset-parse-failed',\n      expected: 'bounded static triangle geometry with finite positions and valid section ranges',\n      hint: 'Repair the source mesh or meshCollision setting, then recook the same GUID.',\n      detail: { field: 'collision', value: undefined, reason },\n    }),\n  );\n}\n\n/** Weld exact positions across material/UV seams; include only authored triangle coverage. */\nexport function buildMeshCollision(mesh: MeshAsset): Result<MeshCollision, AssetError> {\n  const source = mesh.attributes?.position;\n  if (\n    !(source instanceof Float32Array) ||\n    source.length < 9 ||\n    source.length % 3 ||\n    source.length > 3_145_728 ||\n    (mesh.indices?.length ?? 0) > 3_145_728 ||\n    mesh.morphTargets?.length ||\n    mesh.attributes.skinIndex ||\n    mesh.attributes.skinWeight\n  )\n    return failure(\n      'collision cooking requires a static mesh with at most 1,048,576 vertices and triangles',\n    );\n  if (\n    !Array.isArray(mesh.submeshes) ||\n    !mesh.submeshes.length ||\n    mesh.submeshes.some((section) => section.topology !== 'triangle-list')\n  )\n    return failure('collision sections must be triangle-list');\n  const vertices: number[] = [],\n    triangles: number[] = [];\n  const welded = new Map<string, number>();\n  const remap = new Map<number, number>();\n  const vertex = (index: number): number => {\n    const prior = remap.get(index);\n    if (prior !== undefined) return prior;\n    const x = Number(source[index * 3]),\n      y = Number(source[index * 3 + 1]),\n      z = Number(source[index * 3 + 2]);\n    if (![x, y, z].every(Number.isFinite)) throw new TypeError('collision position is not finite');\n    const key = `${x},${y},${z}`;\n    let target = welded.get(key);\n    if (target === undefined) {\n      target = vertices.length / 3;\n      welded.set(key, target);\n      vertices.push(x, y, z);\n    }\n    remap.set(index, target);\n    return target;\n  };\n  try {\n    let nextVertex = 0,\n      end = 0;\n    for (const section of mesh.submeshes) {\n      const offset = mesh.indices ? section.indexOffset : nextVertex;\n      const count = mesh.indices ? section.indexCount : section.vertexCount;\n      if (\n        !Number.isInteger(offset) ||\n        !Number.isInteger(count) ||\n        offset < end ||\n        count < 3 ||\n        count % 3 ||\n        offset + count > (mesh.indices?.length ?? source.length / 3) ||\n        triangles.length + count > 3_145_728\n      )\n        return failure('invalid or overlapping triangle section range');\n      for (let i = offset; i < offset + count; i += 3) {\n        const a = mesh.indices?.[i] ?? i,\n          b = mesh.indices?.[i + 1] ?? i + 1,\n          c = mesh.indices?.[i + 2] ?? i + 2;\n        if (\n          ![a, b, c].every(\n            (index) => Number.isInteger(index) && index >= 0 && index < source.length / 3,\n          )\n        )\n          throw new TypeError('collision index is out of range');\n        const ax = Number(source[a * 3]),\n          ay = Number(source[a * 3 + 1]),\n          az = Number(source[a * 3 + 2]);\n        const abx = Number(source[b * 3]) - ax,\n          aby = Number(source[b * 3 + 1]) - ay,\n          abz = Number(source[b * 3 + 2]) - az;\n        const acx = Number(source[c * 3]) - ax,\n          acy = Number(source[c * 3 + 1]) - ay,\n          acz = Number(source[c * 3 + 2]) - az;\n        if (\n          aby * acz - abz * acy === 0 &&\n          abz * acx - abx * acz === 0 &&\n          abx * acy - aby * acx === 0\n        )\n          continue;\n        // Hull consumers use every point. Admit points only after triangle coverage survives.\n        triangles.push(vertex(a), vertex(b), vertex(c));\n      }\n      end = offset + count;\n      nextVertex = end;\n    }\n    if (!triangles.length) return failure('collision mesh has no nondegenerate triangles');\n    return ok({ positions: new Float32Array(vertices), indices: new Uint32Array(triangles) });\n  } catch (cause) {\n    return failure(cause instanceof Error ? cause.message : String(cause));\n  }\n}\n\n/** Binary/JSON admission refuses stale products rather than silently rebuilding them. */\nexport function validateMeshCollisionAttachment(\n  mesh: MeshAsset,\n  value: unknown,\n): Result<MeshCollision, AssetError> {\n  if (!value || typeof value !== 'object') return failure('missing collision product');\n  const raw = value as { positions?: unknown; indices?: unknown };\n  const validPositions = raw.positions instanceof Float32Array || Array.isArray(raw.positions);\n  const validIndices = raw.indices instanceof Uint32Array || Array.isArray(raw.indices);\n  if (!validPositions || !validIndices)\n    return failure('collision product requires position and index arrays');\n  const positions = raw.positions as ArrayLike<number>,\n    indices = raw.indices as ArrayLike<number>;\n  if (positions.length > 3_145_728 || indices.length > 3_145_728)\n    return failure('collision product exceeds geometry limits');\n  const expected = buildMeshCollision(mesh);\n  if (!expected.ok) return expected;\n  if (\n    positions.length !== expected.value.positions.length ||\n    indices.length !== expected.value.indices.length\n  )\n    return failure('collision product does not match source geometry');\n  for (let i = 0; i < positions.length; i++)\n    if (positions[i] !== expected.value.positions[i])\n      return failure('collision positions are stale or malformed');\n  for (let i = 0; i < indices.length; i++)\n    if (indices[i] !== expected.value.indices[i])\n      return failure('collision triangles are stale or malformed');\n  return expected;\n}\n","import {\n  decodeMeshBinHeader,\n  decodeMeshBinMorphs,\n  MESH_BIN_HEADER_BYTES,\n  type MeshBinHeader,\n} from '@forgeax/engine-pack';\nimport type {\n  AssetGuid,\n  MeshAsset,\n  MeshCardLayout,\n  MeshMaterialSlot,\n  MorphTarget,\n  Submesh,\n  VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { PROCEDURAL_FLOATS_PER_VERTEX } from '../box';\nimport { admitsMeshCardLayout, validateMeshCardLayout } from '../mesh-card-artifact';\nimport { validateMeshCollisionAttachment } from '../mesh-collision';\nimport {\n  deriveVertexLayoutProjection,\n  deriveVertexLayoutProjectionFromMask,\n  unpackInterleavedVertexAttributes,\n  type VertexLayoutProjection,\n} from '../vertex-attribute-layout';\n\ninterface PackedMesh {\n  readonly version: 4 | 5;\n  readonly vertices: Float32Array;\n  readonly attributes?: VertexAttributeMap;\n  readonly indices?: Uint16Array | Uint32Array;\n  readonly submeshes?: readonly Record<string, unknown>[];\n  readonly cardLayout?: MeshCardLayout;\n  readonly collision?: unknown;\n  readonly materialSlots?: readonly {\n    readonly slotName: string;\n    readonly sourceKey?: string;\n    readonly defaultMaterialRef?: number;\n    /** Direct Pack JSON keeps the authoring GUID until the producer boundary. */\n    readonly defaultMaterial?: string;\n  }[];\n  readonly aabb?: Float32Array;\n  readonly skinIndex?: Uint16Array;\n  readonly skinWeight?: Float32Array;\n  readonly uvSetCount: number;\n  readonly floatsPerVertex: number;\n  readonly morphTargets?: readonly MorphTarget[];\n  readonly morphWeights?: Float32Array;\n  readonly projection?: VertexLayoutProjection;\n}\n\nfunction parseGuid(value: string): AssetGuid | undefined {\n  const compact = value.replaceAll('-', '');\n  if (!/^[0-9a-f]{32}$/i.test(compact)) return undefined;\n  const bytes = new Uint8Array(16);\n  for (let index = 0; index < bytes.length; index += 1) {\n    const pair = compact.slice(index * 2, index * 2 + 2);\n    const parsed = Number.parseInt(pair, 16);\n    if (!Number.isInteger(parsed)) return undefined;\n    bytes[index] = parsed;\n  }\n  return bytes as AssetGuid;\n}\n\nfunction floatArray(value: unknown): Float32Array | undefined {\n  if (value instanceof Float32Array) return value;\n  if (Array.isArray(value)) return new Float32Array(value as number[]);\n  return undefined;\n}\n\nfunction indexArray(value: unknown): Uint16Array | Uint32Array | undefined {\n  if (value instanceof Uint16Array || value instanceof Uint32Array) {\n    return value.length === 0 ? undefined : value;\n  }\n  if (!Array.isArray(value)) return undefined;\n  if (value.length === 0) return undefined;\n  return value.some((entry) => entry > 0xffff)\n    ? new Uint32Array(value as number[])\n    : new Uint16Array(value as number[]);\n}\n\nfunction integerArray(value: unknown): Uint16Array | undefined {\n  if (value instanceof Uint16Array) return value;\n  if (Array.isArray(value)) return new Uint16Array(value as number[]);\n  return undefined;\n}\n\nfunction morphTargets(value: unknown): readonly MorphTarget[] | undefined {\n  if (value === undefined) return undefined;\n  if (!Array.isArray(value) || value.length === 0 || value.length > 8) return undefined;\n  const targets: MorphTarget[] = [];\n  for (const raw of value) {\n    if (raw === null || typeof raw !== 'object') return undefined;\n    const target: { position?: Float32Array; normal?: Float32Array; tangent?: Float32Array } = {};\n    for (const [key, stream] of Object.entries(raw as Record<string, unknown>)) {\n      if (key !== 'position' && key !== 'normal' && key !== 'tangent') return undefined;\n      const typed = floatArray(stream);\n      if (typed === undefined) return undefined;\n      if (key === 'position') target.position = typed;\n      else if (key === 'normal') target.normal = typed;\n      else target.tangent = typed;\n    }\n    if (Object.keys(target).length === 0) return undefined;\n    targets.push(target);\n  }\n  return targets;\n}\n\nfunction unpackMeshBinary(bytes: Uint8Array): PackedMesh | undefined {\n  const headerResult = decodeMeshBinHeader(bytes);\n  if (!headerResult.ok) return undefined;\n  const header: MeshBinHeader = headerResult.value;\n  const projectionResult = deriveVertexLayoutProjectionFromMask(header.mask);\n  if (!projectionResult.ok) return undefined;\n  const projection = projectionResult.value;\n  if (\n    projection.schemaVersion !== header.projectionVersion ||\n    projection.arrayStride !== header.stride ||\n    projection.digest !== header.digest\n  ) {\n    return undefined;\n  }\n  const payloadBytes =\n    header.vertexBytes + header.morphBytes + header.indexBytes + header.jsonBytes;\n  if (MESH_BIN_HEADER_BYTES + payloadBytes !== bytes.byteLength) return undefined;\n\n  let offset = MESH_BIN_HEADER_BYTES;\n  const vertexBytes = bytes.subarray(offset, offset + header.vertexBytes);\n  const vertices = new Float32Array(vertexBytes.byteLength / 4);\n  new Uint8Array(vertices.buffer).set(vertexBytes);\n  offset += header.vertexBytes;\n  const morphBytes = bytes.subarray(offset, offset + header.morphBytes);\n  offset += header.morphBytes;\n  let indices: Uint16Array | Uint32Array | undefined;\n  if (header.indexCount > 0) {\n    const indexBytes = bytes.subarray(offset, offset + header.indexBytes);\n    if (header.indexWidth === 2) {\n      indices = new Uint16Array(header.indexCount);\n      new Uint8Array(indices.buffer).set(indexBytes);\n    } else if (header.indexWidth === 4) {\n      indices = new Uint32Array(header.indexCount);\n      new Uint8Array(indices.buffer).set(indexBytes);\n    } else {\n      return undefined;\n    }\n    offset += header.indexBytes;\n  }\n\n  let metadata: {\n    readonly submeshes?: readonly Record<string, unknown>[];\n    readonly cardLayout?: MeshCardLayout;\n    readonly collision?: unknown;\n    readonly materialSlots?: PackedMesh['materialSlots'];\n    readonly aabb?: readonly number[];\n    readonly morphTargets?: readonly Record<string, readonly number[]>[];\n    readonly morphWeights?: readonly number[];\n    readonly morphTargetMasks?: unknown;\n  };\n  try {\n    metadata = JSON.parse(\n      new TextDecoder().decode(bytes.subarray(offset, offset + header.jsonBytes)),\n    ) as typeof metadata;\n  } catch {\n    return undefined;\n  }\n  if (\n    metadata === null ||\n    typeof metadata !== 'object' ||\n    Array.isArray(metadata) ||\n    metadata.submeshes === undefined ||\n    metadata.submeshes.length === 0 ||\n    metadata.materialSlots === undefined\n  ) {\n    return undefined;\n  }\n  const attributes = unpackInterleavedVertexAttributes(vertices, projection);\n  if (attributes === undefined) return undefined;\n  for (const value of Object.values(attributes)) {\n    if (value instanceof Float32Array && value.some((component) => !Number.isFinite(component)))\n      return undefined;\n  }\n  let decodedMorphTargets: readonly MorphTarget[] | undefined;\n  try {\n    if (header.version === 5) {\n      if (metadata.morphTargets !== undefined) return undefined;\n      decodedMorphTargets = decodeMeshBinMorphs(\n        morphBytes,\n        header.vertexCount,\n        metadata.morphTargetMasks,\n      );\n    } else {\n      if (metadata.morphTargetMasks !== undefined) return undefined;\n      decodedMorphTargets = morphTargets(metadata.morphTargets);\n    }\n  } catch {\n    return undefined;\n  }\n  if (\n    metadata.morphWeights !== undefined &&\n    (!Array.isArray(metadata.morphWeights) ||\n      !metadata.morphWeights.every(\n        (value) => typeof value === 'number' && Number.isFinite(Math.fround(value)),\n      ))\n  )\n    return undefined;\n  const morphWeightValues =\n    metadata.morphWeights === undefined ? undefined : new Float32Array(metadata.morphWeights);\n  if (\n    decodedMorphTargets !== undefined &&\n    morphWeightValues !== undefined &&\n    decodedMorphTargets.length !== morphWeightValues.length\n  ) {\n    return undefined;\n  }\n  return {\n    version: header.version,\n    vertices,\n    attributes,\n    projection,\n    ...(indices === undefined ? {} : { indices }),\n    submeshes: metadata.submeshes,\n    ...(metadata.collision === undefined ? {} : { collision: metadata.collision }),\n    ...(metadata.cardLayout === undefined ? {} : { cardLayout: metadata.cardLayout }),\n    materialSlots: metadata.materialSlots,\n    ...(metadata.aabb === undefined ? {} : { aabb: new Float32Array(metadata.aabb) }),\n    // MeshAsset.vertices remains a Float32Array, so translate the wire stride\n    // (bytes) back to the legacy float-count input expected by meshFromParts.\n    floatsPerVertex: header.stride / Float32Array.BYTES_PER_ELEMENT,\n    uvSetCount: 1,\n    ...(decodedMorphTargets === undefined ? {} : { morphTargets: decodedMorphTargets }),\n    ...(morphWeightValues === undefined ? {} : { morphWeights: morphWeightValues }),\n  };\n}\n\nfunction materialSlotsFor(\n  raw: PackedMesh['materialSlots'],\n  submeshes: readonly Submesh[],\n  refs: readonly string[],\n): readonly MeshMaterialSlot[] {\n  if (raw === undefined)\n    return submeshes.map((_submesh, index) => ({ slotName: `LegacySlot_${index}` }));\n  return raw.map((slot, index) => {\n    const reference =\n      slot.defaultMaterialRef === undefined ? slot.defaultMaterial : refs[slot.defaultMaterialRef];\n    const defaultMaterial = reference === undefined ? undefined : parseGuid(reference);\n    return {\n      slotName:\n        typeof slot.slotName === 'string' && slot.slotName.trim().length > 0\n          ? slot.slotName\n          : `LegacySlot_${index}`,\n      ...(typeof slot.sourceKey === 'string' ? { sourceKey: slot.sourceKey } : {}),\n      ...(defaultMaterial === undefined ? {} : { defaultMaterial }),\n    };\n  });\n}\n\nfunction submeshesFor(\n  raw: readonly Record<string, unknown>[] | undefined,\n  vertexCount: number,\n  indexCount: number,\n): readonly Submesh[] {\n  const values =\n    raw === undefined || raw.length === 0\n      ? [{ indexOffset: 0, indexCount, vertexCount, topology: 'triangle-list' }]\n      : raw;\n  return values.map((value, index) => ({\n    indexOffset: typeof value.indexOffset === 'number' ? value.indexOffset : 0,\n    indexCount: typeof value.indexCount === 'number' ? value.indexCount : indexCount,\n    vertexCount: typeof value.vertexCount === 'number' ? value.vertexCount : vertexCount,\n    topology:\n      value.topology === 'line-list' ||\n      value.topology === 'line-strip' ||\n      value.topology === 'point-list' ||\n      value.topology === 'triangle-strip'\n        ? value.topology\n        : 'triangle-list',\n    materialSlot: typeof value.materialSlot === 'number' ? value.materialSlot : index,\n  }));\n}\n\nfunction deriveAabb(vertices: Float32Array, stride: number): Float32Array | undefined {\n  if (stride < 3 || vertices.length < 3 || vertices.length % stride !== 0) return undefined;\n  let minX = Number.POSITIVE_INFINITY;\n  let minY = Number.POSITIVE_INFINITY;\n  let minZ = Number.POSITIVE_INFINITY;\n  let maxX = Number.NEGATIVE_INFINITY;\n  let maxY = Number.NEGATIVE_INFINITY;\n  let maxZ = Number.NEGATIVE_INFINITY;\n  for (let offset = 0; offset < vertices.length; offset += stride) {\n    const x = vertices[offset];\n    const y = vertices[offset + 1];\n    const z = vertices[offset + 2];\n    if (x === undefined || y === undefined || z === undefined) return undefined;\n    minX = Math.min(minX, x);\n    minY = Math.min(minY, y);\n    minZ = Math.min(minZ, z);\n    maxX = Math.max(maxX, x);\n    maxY = Math.max(maxY, y);\n    maxZ = Math.max(maxZ, z);\n  }\n  return Float32Array.of(minX, minY, minZ, maxX, maxY, maxZ);\n}\n\nfunction meshFromParts(\n  parts: {\n    readonly vertices: unknown;\n    readonly indices?: unknown;\n    readonly attributes?: unknown;\n    readonly aabb?: unknown;\n    readonly submeshes?: readonly Record<string, unknown>[];\n    readonly cardLayout?: MeshCardLayout;\n    readonly collision?: unknown;\n    readonly materialSlots?: PackedMesh['materialSlots'];\n    readonly morphTargets?: unknown;\n    readonly morphWeights?: unknown;\n    readonly floatsPerVertex?: number;\n    readonly uvSetCount?: number;\n  },\n  refs: readonly string[],\n): MeshAsset | undefined {\n  const vertices = floatArray(parts.vertices);\n  if (vertices === undefined || vertices.length === 0) return undefined;\n  const indices = indexArray(parts.indices);\n  const sourceAttributes =\n    parts.attributes !== null && typeof parts.attributes === 'object'\n      ? (parts.attributes as Record<string, unknown>)\n      : {};\n  const attributes: VertexAttributeMap = {};\n  for (const key of [\n    'position',\n    'normal',\n    'uv',\n    'tangent',\n    'uv1',\n    'uv2',\n    'uv3',\n    'uv4',\n    'uv5',\n    'uv6',\n    'uv7',\n    'color',\n  ] as const) {\n    const value = floatArray(sourceAttributes[key]);\n    if (value !== undefined) attributes[key] = value;\n  }\n  const skinIndex = integerArray(sourceAttributes.skinIndex);\n  const skinWeight = floatArray(sourceAttributes.skinWeight);\n  if (skinIndex !== undefined) attributes.skinIndex = skinIndex;\n  if (skinWeight !== undefined) attributes.skinWeight = skinWeight;\n  const stride = parts.floatsPerVertex ?? 0;\n  const vertexCount = stride > 0 ? vertices.length / stride : vertices.length;\n  const submeshes = submeshesFor(parts.submeshes, vertexCount, indices?.length ?? 0);\n  if (parts.submeshes?.some((section) => section.cardLayout !== undefined)) return undefined;\n  if (\n    parts.cardLayout !== undefined &&\n    (!validateMeshCardLayout(parts.cardLayout).ok ||\n      !admitsMeshCardLayout({\n        submeshes,\n        morphTargets: parts.morphTargets,\n        skinIndex: attributes.skinIndex,\n      }))\n  )\n    return undefined;\n  const materialSlots = materialSlotsFor(parts.materialSlots, submeshes, refs);\n  const aabb = floatArray(parts.aabb) ?? deriveAabb(vertices, stride);\n  if (aabb === undefined) return undefined;\n  const morph = morphTargets(parts.morphTargets);\n  const weights = floatArray(parts.morphWeights);\n  if (morph !== undefined && weights !== undefined && morph.length !== weights.length)\n    return undefined;\n  const uvSetCount = parts.uvSetCount ?? 1;\n  if (stride > 0 && uvSetCount > 1) {\n    const hasSkin = stride === 18 + (uvSetCount - 1) * 2;\n    const firstOffset = hasSkin ? 18 : PROCEDURAL_FLOATS_PER_VERTEX;\n    const extraUvKeys = ['uv1', 'uv2', 'uv3', 'uv4', 'uv5', 'uv6', 'uv7'] as const;\n    for (let set = 1; set < uvSetCount; set += 1) {\n      const key = extraUvKeys[set - 1];\n      if (key === undefined) return undefined;\n      const values = new Float32Array(vertexCount * 2);\n      const sourceOffset = firstOffset + (set - 1) * 2;\n      for (let vertex = 0; vertex < vertexCount; vertex += 1) {\n        const source = vertex * stride + sourceOffset;\n        values[vertex * 2] = vertices[source] ?? 0;\n        values[vertex * 2 + 1] = vertices[source + 1] ?? 0;\n      }\n      attributes[key] = values;\n    }\n  }\n  const collision =\n    parts.collision === undefined\n      ? undefined\n      : validateMeshCollisionAttachment(\n          {\n            kind: 'mesh',\n            vertices,\n            attributes,\n            submeshes,\n            materialSlots,\n            ...(indices === undefined ? {} : { indices }),\n            ...(morph === undefined ? {} : { morphTargets: morph }),\n          },\n          parts.collision,\n        );\n  if (collision !== undefined && !collision.ok) return undefined;\n  return {\n    kind: 'mesh',\n    vertices,\n    ...(indices === undefined ? {} : { indices }),\n    attributes,\n    aabb,\n    submeshes,\n    ...(collision?.ok ? { collision: collision.value } : {}),\n    ...(parts.cardLayout === undefined ? {} : { cardLayout: parts.cardLayout }),\n    materialSlots,\n    ...(morph === undefined ? {} : { morphTargets: morph }),\n    ...(weights === undefined ? {} : { morphWeights: weights }),\n  };\n}\n\nexport function decodeMeshBinary(\n  bytes: Uint8Array,\n  refs: readonly string[],\n): MeshAsset | undefined {\n  const decoded = unpackMeshBinary(bytes);\n  if (decoded === undefined) return undefined;\n  return meshFromParts(\n    {\n      vertices: decoded.vertices,\n      ...(decoded.collision === undefined ? {} : { collision: decoded.collision }),\n      ...(decoded.cardLayout === undefined ? {} : { cardLayout: decoded.cardLayout }),\n      ...(decoded.attributes === undefined ? {} : { attributes: decoded.attributes }),\n      ...(decoded.indices === undefined ? {} : { indices: decoded.indices }),\n      ...(decoded.aabb === undefined ? {} : { aabb: decoded.aabb }),\n      ...(decoded.submeshes === undefined ? {} : { submeshes: decoded.submeshes }),\n      ...(decoded.materialSlots === undefined ? {} : { materialSlots: decoded.materialSlots }),\n      ...(decoded.morphTargets === undefined ? {} : { morphTargets: decoded.morphTargets }),\n      ...(decoded.morphWeights === undefined ? {} : { morphWeights: decoded.morphWeights }),\n      ...(decoded.skinIndex === undefined && decoded.skinWeight === undefined\n        ? {}\n        : {\n            attributes: {\n              ...(decoded.skinIndex === undefined ? {} : { skinIndex: decoded.skinIndex }),\n              ...(decoded.skinWeight === undefined ? {} : { skinWeight: decoded.skinWeight }),\n            },\n          }),\n      floatsPerVertex: decoded.floatsPerVertex,\n      uvSetCount: decoded.uvSetCount,\n    },\n    refs,\n  );\n}\n\nexport function normalizeMeshPayload(\n  payload: unknown,\n  refs: readonly string[],\n): MeshAsset | undefined {\n  if (payload === null || typeof payload !== 'object' || Array.isArray(payload)) return undefined;\n  const source = payload as Record<string, unknown>;\n  if (source.kind !== 'mesh' || source.distanceField !== undefined) return undefined;\n  const sourceAttributes =\n    source.attributes !== null && typeof source.attributes === 'object'\n      ? (source.attributes as VertexAttributeMap)\n      : undefined;\n  const projection =\n    sourceAttributes === undefined ? undefined : deriveVertexLayoutProjection(sourceAttributes);\n  const floatsPerVertex =\n    projection === undefined || projection.attributes.length === 0\n      ? PROCEDURAL_FLOATS_PER_VERTEX\n      : projection.arrayStride / Float32Array.BYTES_PER_ELEMENT;\n  return meshFromParts(\n    {\n      vertices: source.vertices,\n      ...(source.collision === undefined ? {} : { collision: source.collision }),\n      ...(source.cardLayout === undefined\n        ? {}\n        : { cardLayout: source.cardLayout as MeshCardLayout }),\n      ...(source.indices === undefined ? {} : { indices: source.indices }),\n      ...(source.attributes === undefined ? {} : { attributes: source.attributes }),\n      ...(source.aabb === undefined ? {} : { aabb: source.aabb }),\n      submeshes: Array.isArray(source.submeshes)\n        ? (source.submeshes as Record<string, unknown>[])\n        : [],\n      ...(Array.isArray(source.materialSlots)\n        ? { materialSlots: source.materialSlots as PackedMesh['materialSlots'] }\n        : {}),\n      ...(source.morphTargets === undefined ? {} : { morphTargets: source.morphTargets }),\n      ...(source.morphWeights === undefined ? {} : { morphWeights: source.morphWeights }),\n      floatsPerVertex,\n    },\n    refs,\n  );\n}\n","// @forgeax/engine-runtime - Procedural Cylinder geometry (M3 / w8).\n//\n// Mirrors Three.js r184 CylinderGeometry: createCylinderGeometry(radiusTop,\n// radiusBottom, height, radialSegments?, heightSegments?) ->\n// Result<MeshAsset, AssetError>.\n// Degenerate parameters (both radii <= 0, height <= 0, radialSegments < 3,\n// heightSegments < 1) fail-fast with AssetError('asset-parse-failed').\n// Note: one radius may be zero (degenerate end collapses to a cone tip),\n// but NOT both — a zero cylinder has no surface area.\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n//          plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nexport function createCylinderGeometry(\n  radiusTop: number,\n  radiusBottom: number,\n  height: number,\n  radialSegments: number = 16,\n  heightSegments: number = 1,\n): Result<MeshAsset, AssetError> {\n  if (radiusTop < 0 || radiusBottom < 0 || height <= 0) {\n    return err(\n      degenerate(`radiusTop=${radiusTop}, radiusBottom=${radiusBottom}, height=${height}`),\n    );\n  }\n  if (radiusTop === 0 && radiusBottom === 0) {\n    return err(degenerate(`radiusTop=0 and radiusBottom=0; at least one must be > 0`));\n  }\n  const rs = radialSegments | 0;\n  const hs = heightSegments | 0;\n  if (rs < 3) return err(degenerate(`radialSegments=${rs}; minimum 3`));\n  if (hs < 1) return err(degenerate(`heightSegments=${hs}; minimum 1`));\n\n  const halfHeight = height / 2;\n  // Side: (rs + 1) * (hs + 1) vertices\n  const sideVertexCount = (rs + 1) * (hs + 1);\n  // Caps: each cap has 1 center + (rs + 1) ring vertices if the radius is > 0\n  const topCap = radiusTop > 0;\n  const bottomCap = radiusBottom > 0;\n  const topCount = topCap ? rs + 2 : 0;\n  const bottomCount = bottomCap ? rs + 2 : 0;\n  const vertexCount = sideVertexCount + topCount + bottomCount;\n\n  const sideIndexCount = rs * hs * 6;\n  const topIdxCount = topCap ? rs * 3 : 0;\n  const bottomIdxCount = bottomCap ? rs * 3 : 0;\n  const indexCount = sideIndexCount + topIdxCount + bottomIdxCount;\n\n  const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n  const indices = new Uint32Array(indexCount);\n\n  // --- side ---\n  let vIdx = 0;\n  const slope = (radiusBottom - radiusTop) / height;\n  for (let iy = 0; iy <= hs; iy++) {\n    const v = iy / hs;\n    const y = halfHeight - v * height;\n    const radius = v * (radiusBottom - radiusTop) + radiusTop;\n    for (let ix = 0; ix <= rs; ix++) {\n      const u = ix / rs;\n      const theta = u * Math.PI * 2;\n      const sinT = Math.sin(theta);\n      const cosT = Math.cos(theta);\n      const x = radius * sinT;\n      const z = radius * cosT;\n      const nx = sinT;\n      const ny = slope;\n      const nz = cosT;\n      // normalize\n      const nlen = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;\n      const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n      vertices[base + 0] = x;\n      vertices[base + 1] = y;\n      vertices[base + 2] = z;\n      vertices[base + 3] = nx / nlen;\n      vertices[base + 4] = ny / nlen;\n      vertices[base + 5] = nz / nlen;\n      vertices[base + 6] = u;\n      // UV.v uses the WebGPU top-left convention (V=0 = image top).\n      vertices[base + 7] = v;\n      vIdx++;\n    }\n  }\n\n  let iIdx = 0;\n  for (let iy = 0; iy < hs; iy++) {\n    for (let ix = 0; ix < rs; ix++) {\n      const a = (rs + 1) * iy + ix;\n      const b = (rs + 1) * (iy + 1) + ix;\n      const c = (rs + 1) * (iy + 1) + ix + 1;\n      const d = (rs + 1) * iy + ix + 1;\n      indices[iIdx++] = a;\n      indices[iIdx++] = b;\n      indices[iIdx++] = d;\n      indices[iIdx++] = b;\n      indices[iIdx++] = c;\n      indices[iIdx++] = d;\n    }\n  }\n\n  // Caps share their geometry; their orientation supplies the normal and winding.\n  for (const [radius, direction] of [\n    [radiusTop, 1],\n    [radiusBottom, -1],\n  ] as const) {\n    if (!(radius > 0)) continue;\n    const centerIdx = vIdx;\n    const cBase = vIdx * FACTORY_FLOATS_PER_VERTEX;\n    vertices[cBase + 1] = direction * halfHeight;\n    vertices[cBase + 4] = direction;\n    vertices[cBase + 6] = 0.5;\n    vertices[cBase + 7] = 0.5;\n    vIdx++;\n    const ringStart = vIdx;\n    for (let ix = 0; ix <= rs; ix++) {\n      const theta = (ix / rs) * Math.PI * 2;\n      const sinT = Math.sin(theta);\n      const cosT = Math.cos(theta);\n      const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n      vertices[base + 0] = radius * sinT;\n      vertices[base + 1] = direction * halfHeight;\n      vertices[base + 2] = radius * cosT;\n      vertices[base + 4] = direction;\n      vertices[base + 6] = sinT * 0.5 + 0.5;\n      vertices[base + 7] = cosT * 0.5 + 0.5;\n      vIdx++;\n    }\n    for (let ix = 0; ix < rs; ix++) {\n      indices[iIdx++] = centerIdx;\n      indices[iIdx++] = ringStart + ix + (direction < 0 ? 1 : 0);\n      indices[iIdx++] = ringStart + ix + (direction > 0 ? 1 : 0);\n    }\n  }\n\n  return meshFromInterleaved(vertices, indices);\n}\n","// @forgeax/engine-runtime - Procedural Plane geometry (M3 / w8).\n//\n// Mirrors Three.js r184 PlaneGeometry: createPlaneGeometry(width, height,\n// widthSegments?, heightSegments?) -> Result<MeshAsset, AssetError>. The plane\n// lies on the XY plane with +Z normal (standard three.js orientation).\n// Degenerate parameters fail-fast with AssetError('asset-parse-failed').\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n//          plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nexport function createPlaneGeometry(\n  width: number,\n  height: number,\n  widthSegments: number = 1,\n  heightSegments: number = 1,\n): Result<MeshAsset, AssetError> {\n  if (width <= 0 || height <= 0) {\n    return err(degenerate(`width=${width}, height=${height}`));\n  }\n  const ws = widthSegments | 0;\n  const hs = heightSegments | 0;\n  if (ws < 1 || hs < 1) {\n    return err(degenerate(`widthSegments=${ws}, heightSegments=${hs}`));\n  }\n\n  const halfW = width / 2;\n  const halfH = height / 2;\n  const gridX1 = ws + 1;\n  const gridY1 = hs + 1;\n  const segW = width / ws;\n  const segH = height / hs;\n\n  const vertexCount = gridX1 * gridY1;\n  const indexCount = ws * hs * 6;\n  const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n  const indices = new Uint32Array(indexCount);\n\n  let vIdx = 0;\n  for (let iy = 0; iy < gridY1; iy++) {\n    const y = iy * segH - halfH;\n    for (let ix = 0; ix < gridX1; ix++) {\n      const x = ix * segW - halfW;\n      const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n      vertices[base + 0] = x;\n      vertices[base + 1] = -y;\n      vertices[base + 2] = 0;\n      vertices[base + 3] = 0;\n      vertices[base + 4] = 0;\n      vertices[base + 5] = 1;\n      vertices[base + 6] = ix / ws;\n      // UV.v uses the WebGPU top-left convention (V=0 = image top).\n      vertices[base + 7] = iy / hs;\n      vIdx++;\n    }\n  }\n\n  let iIdx = 0;\n  for (let iy = 0; iy < hs; iy++) {\n    for (let ix = 0; ix < ws; ix++) {\n      const a = ix + gridX1 * iy;\n      const b = ix + gridX1 * (iy + 1);\n      const c = ix + 1 + gridX1 * (iy + 1);\n      const d = ix + 1 + gridX1 * iy;\n      indices[iIdx++] = a;\n      indices[iIdx++] = b;\n      indices[iIdx++] = d;\n      indices[iIdx++] = b;\n      indices[iIdx++] = c;\n      indices[iIdx++] = d;\n    }\n  }\n\n  return meshFromInterleaved(vertices, indices);\n}\n","/** Stitch latitude rings, omitting the collapsed triangle at each pole. */\nexport function poleGridIndices(columns: number, rows: number): Uint32Array {\n  const indices = new Uint32Array(columns * (rows - 1) * 6);\n  const stride = columns + 1;\n  let index = 0;\n  for (let row = 0; row < rows - 1; row++) {\n    for (let column = 0; column < columns; column++) {\n      const a = row * stride + column + 1;\n      const b = a - 1;\n      const c = (row + 1) * stride + column;\n      const d = c + 1;\n      if (row !== 0) {\n        indices[index++] = a;\n        indices[index++] = b;\n        indices[index++] = d;\n      }\n      if (row !== rows - 2) {\n        indices[index++] = b;\n        indices[index++] = c;\n        indices[index++] = d;\n      }\n    }\n  }\n  return indices.slice(0, index);\n}\n","// @forgeax/engine-runtime - Procedural Sphere geometry (M3 / w8).\n//\n// Mirrors Three.js r184 SphereGeometry signature:\n// createSphereGeometry(radius, widthSegments?, heightSegments?) ->\n// Result<MeshAsset, AssetError>. Degenerate parameters (radius <= 0, widthSegments\n// < 3, heightSegments < 2) fail-fast with AssetError('asset-parse-failed').\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n//          plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\nimport { poleGridIndices } from './pole-grid-indices';\n\nexport function createSphereGeometry(\n  radius: number,\n  widthSegments: number = 16,\n  heightSegments: number = 12,\n): Result<MeshAsset, AssetError> {\n  if (radius <= 0) return err(degenerate(`radius=${radius}`));\n  const ws = widthSegments | 0;\n  const hs = heightSegments | 0;\n  if (ws < 3) return err(degenerate(`widthSegments=${ws}; minimum 3`));\n  if (hs < 2) return err(degenerate(`heightSegments=${hs}; minimum 2`));\n\n  const vertexCount = (ws + 1) * (hs + 1);\n  const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n\n  let vIdx = 0;\n  for (let iy = 0; iy <= hs; iy++) {\n    const v = iy / hs;\n    const phi = v * Math.PI;\n    for (let ix = 0; ix <= ws; ix++) {\n      const u = ix / ws;\n      const theta = u * Math.PI * 2;\n      const x = -radius * Math.cos(theta) * Math.sin(phi);\n      const y = radius * Math.cos(phi);\n      const z = radius * Math.sin(theta) * Math.sin(phi);\n      const nx = x / radius;\n      const ny = y / radius;\n      const nz = z / radius;\n      const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n      vertices[base + 0] = x;\n      vertices[base + 1] = y;\n      vertices[base + 2] = z;\n      vertices[base + 3] = nx;\n      vertices[base + 4] = ny;\n      vertices[base + 5] = nz;\n      vertices[base + 6] = u;\n      // UV.v uses the WebGPU top-left convention (V=0 = image top).\n      vertices[base + 7] = v;\n      vIdx++;\n    }\n  }\n\n  return meshFromInterleaved(vertices, poleGridIndices(ws, hs + 1));\n}\n","import type { AssetError, MeshAsset, Result } from '@forgeax/engine-types';\nimport { createBoxGeometry, meshFromInterleaved } from '../box';\nimport { createCylinderGeometry } from '../cylinder';\nimport { createPlaneGeometry } from '../plane';\nimport { createSphereGeometry } from '../sphere';\n\nexport type PrimitiveMeshKind =\n  | 'cube'\n  | 'triangle'\n  | 'quad'\n  | 'sphere'\n  | 'cylinder'\n  | 'nine-slice-quad';\n\nconst PROCEDURAL_MESH_KINDS: Readonly<Record<string, PrimitiveMeshKind>> = {\n  'procedural-cube': 'cube',\n  'procedural-triangle': 'triangle',\n  'procedural-quad': 'quad',\n  'procedural-sphere': 'sphere',\n  'procedural-cylinder': 'cylinder',\n  'procedural-nine-slice-quad': 'nine-slice-quad',\n};\n\n/** Create one ordinary mesh payload for allocation or interning by an owning World. */\nexport function createPrimitiveMesh(kind: PrimitiveMeshKind): Result<MeshAsset, AssetError> {\n  switch (kind) {\n    case 'cube':\n      return createBoxGeometry(1, 1, 1);\n    case 'triangle':\n      return meshFromInterleaved(\n        new Float32Array([\n          0, 0.7, 0, 0, 0, 1, 0.5, 1, -0.7, -0.6, 0, 0, 0, 1, 0, 0, 0.7, -0.6, 0, 0, 0, 1, 1, 0,\n        ]),\n        new Uint16Array([0, 1, 2]),\n      );\n    case 'quad':\n      return createPlaneGeometry(1, 1);\n    case 'sphere':\n      return createSphereGeometry(1, 16, 12);\n    case 'cylinder':\n      return createCylinderGeometry(0.5, 0.5, 1, 16, 1);\n    case 'nine-slice-quad':\n      return createPlaneGeometry(1, 1, 3, 3);\n  }\n}\n\n/** Resolve the canonical Pack v2 procedural mesh descriptor without duplicating its alias table. */\nexport function createProceduralMesh(payload: unknown): Result<MeshAsset, AssetError> | undefined {\n  if (payload === null || typeof payload !== 'object' || Array.isArray(payload)) return undefined;\n  const geometry = (payload as { readonly geometry?: unknown }).geometry;\n  if (typeof geometry !== 'string') return undefined;\n  const kind = PROCEDURAL_MESH_KINDS[geometry];\n  if (kind === undefined) return undefined;\n  return createPrimitiveMesh(kind);\n}\n","import {\n  type AssetDecoder,\n  type AssetDecoderContribution,\n  type AssetKind,\n  type AssetLoadError,\n  err,\n  type MeshAsset,\n  ok,\n  type Result,\n} from '@forgeax/engine-types';\nimport { validateMeshCollisionAttachment } from '../mesh-collision';\nimport { decodeMeshBinary, normalizeMeshPayload } from './mesh-binary';\nimport { createProceduralMesh } from './primitive-mesh';\n\nexport const meshAssetKind: AssetKind<MeshAsset, 'mesh'> = {\n  kind: 'mesh',\n} as AssetKind<MeshAsset, 'mesh'>;\n\nfunction proceduralMesh(payload: unknown): Result<MeshAsset, AssetLoadError> | undefined {\n  const result = createProceduralMesh(payload);\n  if (result === undefined) return undefined;\n  if (result.ok) return result;\n  return err({\n    code: 'asset-package-invalid',\n    expected: result.error.expected,\n    hint: 'recook the authored procedural mesh descriptor',\n    detail: { guid: '', reason: 'procedural mesh creation failed' },\n  });\n}\n\n/** Geometry validates mesh payload shape before any render owner consumes it. */\nexport const meshAssetDecoder: AssetDecoder<MeshAsset> = {\n  async decode({ envelope, artifacts }): Promise<Result<MeshAsset, AssetLoadError>> {\n    const payload = envelope.payload;\n    const procedural = proceduralMesh(payload);\n    if (procedural !== undefined) {\n      if (!procedural.ok) {\n        return err<AssetLoadError>({\n          code: 'asset-package-invalid',\n          expected: procedural.error.expected,\n          hint: procedural.error.hint,\n          detail: { guid: envelope.guid, reason: 'procedural mesh creation failed' },\n        });\n      }\n      return procedural;\n    }\n    const body = envelope.artifacts.body;\n    if (body !== undefined) {\n      const bytes = await artifacts.read(body);\n      if (!bytes.ok) return err<AssetLoadError>(bytes.error);\n      const decoded = decodeMeshBinary(bytes.value, envelope.refs);\n      if (decoded === undefined) {\n        return err({\n          code: 'asset-package-invalid',\n          expected: 'a valid mesh-binary/4 or /5 body artifact with a local-space AABB',\n          hint: 'recook the mesh binary and publish its validated geometry payload',\n          detail: { guid: envelope.guid, reason: 'mesh binary decode failed' },\n        });\n      }\n      return ok(decoded);\n    }\n    const normalized = normalizeMeshPayload(payload, envelope.refs);\n    if (normalized !== undefined) return ok(normalized);\n    if (\n      payload.kind !== 'mesh' ||\n      !(payload.vertices instanceof Float32Array) ||\n      payload.vertices.length === 0 ||\n      payload.aabb === undefined ||\n      (payload.collision !== undefined &&\n        !validateMeshCollisionAttachment(payload as MeshAsset, payload.collision).ok)\n    ) {\n      return err({\n        code: 'asset-package-invalid',\n        expected: 'a mesh payload with vertices and a local-space AABB',\n        hint: 'recook the mesh binary and publish its validated geometry payload',\n        detail: { guid: envelope.guid, reason: 'mesh payload failed geometry validation' },\n      });\n    }\n    return ok(payload);\n  },\n};\n\nexport const meshAssetContribution: AssetDecoderContribution<MeshAsset, 'mesh'> = {\n  kind: meshAssetKind,\n  decoder: meshAssetDecoder,\n  consumer: 'Geometry',\n};\n","// @forgeax/engine-runtime - Procedural Capsule geometry.\n//\n// A capsule is a cylinder mid-band of height `length` capped by two radius-\n// `radius` hemispheres, so the total height is `length + 2 * radius`. The\n// convention matches Bevy `Capsule3d::new(radius, height)` (its `height` is\n// the mid-section; the radius is added to each end) and Three.js r184\n// CapsuleGeometry(radius, length, capSegments, radialSegments).\n//\n// Generation mirrors sphere.ts's ring sweep rather than composing separate\n// cylinder + sphere meshes (no mesh-merge primitive exists): a single\n// top-to-bottom latitude sweep emits the top hemisphere (offset +halfLength),\n// the two equator rings that bound the cylinder band, and the bottom\n// hemisphere (offset -halfLength). Consecutive rings are stitched by the same\n// quad connector sphere.ts uses, so the vertical wall between the equator\n// rings is filled with no dedicated cylinder code. Per-vertex normals are\n// `normalize(pos - hemisphereCenter)` (radial on the caps, horizontal on the\n// wall) so the surface is seam-free by construction.\n//\n// Degenerate parameters (radius <= 0, length < 0, capSegments < 1,\n// radialSegments < 3) fail-fast with AssetError('asset-parse-failed'),\n// matching the 6 sibling factories.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\nimport { poleGridIndices } from './pole-grid-indices';\n\n/**\n * Build a procedural capsule geometry aligned with Bevy `Capsule3d` /\n * Three.js r184 CapsuleGeometry.\n *\n * @param radius hemisphere + cylinder radius (> 0)\n * @param length cylinder mid-section height (>= 0; total height = length + 2*radius)\n * @param capSegments latitude bands per hemisphere (>= 1); default 4\n * @param radialSegments longitudes around the axis (>= 3); default 8\n * @returns `Result<MeshAsset, AssetError>` with attributes populated\n */\nexport function createCapsuleGeometry(\n  radius: number,\n  length: number,\n  capSegments: number = 4,\n  radialSegments: number = 8,\n): Result<MeshAsset, AssetError> {\n  if (radius <= 0) return err(degenerate(`radius=${radius}`));\n  if (length < 0) return err(degenerate(`length=${length}`));\n  const cs = capSegments | 0;\n  const rs = radialSegments | 0;\n  if (cs < 1) return err(degenerate(`capSegments=${cs}; minimum 1`));\n  if (rs < 3) return err(degenerate(`radialSegments=${rs}; minimum 3`));\n\n  const halfLength = length / 2;\n  // Latitude rows: cs+1 for the top hemisphere (0..pi/2) and cs+1 for the\n  // bottom (pi/2..pi). The equator is shared: the top's last row and the\n  // bottom's first row are BOTH at the equator radius but at y=+halfLength\n  // and y=-halfLength respectively (they coincide only when length===0).\n  // Total rows = 2*(cs+1); the middle quad band between the two equator rows\n  // becomes the cylinder wall.\n  const latRows = 2 * (cs + 1);\n  const vertexCount = latRows * (rs + 1);\n\n  const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n\n  let vIdx = 0;\n  // Emit rows top -> bottom. `row` in [0, latRows-1]. The first cs+1 rows are\n  // the top hemisphere (phi 0..pi/2, center y=+halfLength); the last cs+1 rows\n  // are the bottom hemisphere (phi pi/2..pi, center y=-halfLength).\n  for (let row = 0; row < latRows; row++) {\n    const topHemi = row <= cs;\n    // Ring radius + y from hemisphere-local latitude so the caps are exact\n    // hemispheres and the two equator rings sit at y=+-halfLength.\n    let ringR: number;\n    let y: number;\n    let centerY: number;\n    if (topHemi) {\n      const t = row / cs; // 0 at north pole, 1 at equator\n      const a = t * (Math.PI / 2);\n      ringR = radius * Math.sin(a);\n      centerY = halfLength;\n      y = centerY + radius * Math.cos(a);\n    } else {\n      const t = (row - (cs + 1)) / cs; // 0 at equator (bottom), 1 at south pole\n      const a = t * (Math.PI / 2);\n      ringR = radius * Math.cos(a);\n      centerY = -halfLength;\n      y = centerY - radius * Math.sin(a);\n    }\n    // v texture coord: monotonic 0..1 top->bottom across all rows.\n    const v = row / (latRows - 1);\n    for (let ix = 0; ix <= rs; ix++) {\n      const u = ix / rs;\n      const theta = u * Math.PI * 2;\n      const sinT = Math.sin(theta);\n      const cosT = Math.cos(theta);\n      const x = ringR * sinT;\n      const z = ringR * cosT;\n      // Normal = normalize(pos - hemisphereCenter): radial on caps, horizontal\n      // on the equatorial wall (cos component is 0 there).\n      const nx = x;\n      const ny = y - centerY;\n      const nz = z;\n      const nlen = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;\n      const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n      vertices[base + 0] = x;\n      vertices[base + 1] = y;\n      vertices[base + 2] = z;\n      vertices[base + 3] = nx / nlen;\n      vertices[base + 4] = ny / nlen;\n      vertices[base + 5] = nz / nlen;\n      vertices[base + 6] = u;\n      // UV.v uses the WebGPU top-left convention (V=0 = image top).\n      vertices[base + 7] = v;\n      vIdx++;\n    }\n  }\n\n  return meshFromInterleaved(vertices, poleGridIndices(rs, latRows));\n}\n","// @forgeax/engine-runtime - Procedural Cone geometry (M3 / w8).\n//\n// Mirrors Three.js r184 ConeGeometry: createConeGeometry(radius, height,\n// radialSegments?, heightSegments?) -> Result<MeshAsset, AssetError>.\n// Cone is the cylinder-with-top-radius=0 degenerate, delegated directly.\n// Byte-identical output to createCylinderGeometry(0, radius, height, ...)\n// by contract (test in geometry.test.ts enforces the equivalence).\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n//          plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate } from './box';\nimport { createCylinderGeometry } from './cylinder';\n\nexport function createConeGeometry(\n  radius: number,\n  height: number,\n  radialSegments: number = 16,\n  heightSegments: number = 1,\n): Result<MeshAsset, AssetError> {\n  if (radius <= 0) return err(degenerate(`radius=${radius}`));\n  if (height <= 0) return err(degenerate(`height=${height}`));\n  return createCylinderGeometry(0, radius, height, radialSegments, heightSegments);\n}\n","import { type Mat4Like, mat4, vec3 } from '@forgeax/engine-math';\nimport {\n  ASSET_ERROR_HINTS,\n  AssetError,\n  err,\n  type MeshAsset,\n  ok,\n  type Result,\n} from '@forgeax/engine-types';\nimport { meshFromInterleaved } from './box';\n\nexport interface DecalGeometryOptions {\n  /** Maps the unit projection box [-0.5, 0.5] into the source mesh's local space. */\n  readonly transform: Mat4Like;\n  /** Minimum face-normal cosine against the projector's +Z axis, in [-1, 1]. */\n  readonly normalThreshold?: number;\n}\n\ntype Point = readonly [number, number, number];\ninterface Vertex {\n  readonly position: Point;\n  readonly normal: Point;\n  readonly projected: Point;\n}\n\nfunction invalid(field: string, reason: string): Result<never, AssetError> {\n  return err(\n    new AssetError({\n      code: 'asset-parse-failed',\n      expected: `valid decal geometry ${field}: ${reason}`,\n      hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n      detail: { field, value: reason, reason },\n    }),\n  );\n}\n\nfunction attribute(raw: unknown): Float32Array | undefined {\n  if (raw instanceof Float32Array) return raw;\n  if (raw instanceof ArrayBuffer && raw.byteLength % 4 === 0) return new Float32Array(raw);\n  return undefined;\n}\n\nfunction point(values: ArrayLike<number>, offset: number): Point {\n  return [values[offset] as number, values[offset + 1] as number, values[offset + 2] as number];\n}\n\nfunction interpolate(a: Point, b: Point, t: number): Point {\n  return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t];\n}\n\n/** Sutherland-Hodgman clipping preserves both receiver positions and normals. */\nfunction clip(vertices: readonly Vertex[], axis: number, sign: number): Vertex[] {\n  const result: Vertex[] = [];\n  let previous = vertices[vertices.length - 1];\n  if (previous === undefined) return result;\n  let previousDistance = sign * (previous.projected[axis] as number) - 0.5;\n  for (const current of vertices) {\n    const distance = sign * (current.projected[axis] as number) - 0.5;\n    if (distance > 0 !== previousDistance > 0) {\n      const t = previousDistance / (previousDistance - distance);\n      result.push({\n        position: interpolate(previous.position, current.position, t),\n        normal: interpolate(previous.normal, current.normal, t),\n        projected: interpolate(previous.projected, current.projected, t),\n      });\n    }\n    if (distance <= 0) result.push(current);\n    previous = current;\n    previousDistance = distance;\n  }\n  return result;\n}\n\n/**\n * Pure local-space mesh projection, suitable for Pack generation or occasional\n * runtime placement. The result uses ordinary materials and follows the receiver\n * Transform. No intersecting, projectable triangles returns null. It does not bind skin/morph deformation or change receiver geometry.\n */\nexport function createDecalGeometry(\n  source: MeshAsset,\n  options: DecalGeometryOptions,\n): Result<MeshAsset | null, AssetError> {\n  const transform = options.transform;\n  const threshold = options.normalThreshold ?? 0;\n  if (\n    transform.length !== 16 ||\n    !Array.from(transform).every(Number.isFinite) ||\n    transform[3] !== 0 ||\n    transform[7] !== 0 ||\n    transform[11] !== 0 ||\n    transform[15] !== 1\n  )\n    return invalid('transform', 'expected a finite affine matrix');\n  if (!Number.isFinite(threshold) || threshold < -1 || threshold > 1)\n    return invalid('normalThreshold', 'expected a finite cosine in [-1, 1]');\n  const x = point(transform, 0);\n  const y = point(transform, 4);\n  const z = point(transform, 8);\n  const cross = vec3.cross(vec3.create(), x, y);\n  const determinant = vec3.dot(cross, z);\n  const scale = Math.hypot(...x) * Math.hypot(...y) * Math.hypot(...z);\n  if (scale === 0 || !Number.isFinite(scale) || Math.abs(determinant) <= scale * 1e-8)\n    return invalid('transform', 'projection box must be invertible');\n  const inverse = mat4.invert(mat4.create(), transform);\n  if (\n    !Array.from(inverse).every(Number.isFinite) ||\n    !mat4.equals(\n      mat4.multiply(mat4.create(), inverse, transform),\n      mat4.identity(mat4.create()),\n      1e-4,\n    )\n  )\n    return invalid('transform', 'projection box must have a stable float32 inverse');\n  const direction = vec3.normalize(vec3.create(), z);\n  const positions = attribute(source.attributes?.position);\n  const normals = attribute(source.attributes?.normal);\n  if (positions === undefined || positions.length % 3 !== 0 || !positions.every(Number.isFinite))\n    return invalid('attributes.position', 'expected finite float32 XYZ tuples');\n  if (\n    source.attributes?.normal !== undefined &&\n    (normals === undefined ||\n      normals.length !== positions.length ||\n      !normals.every(Number.isFinite))\n  )\n    return invalid('attributes.normal', 'expected finite XYZ tuples matching positions');\n  const indices = source.indices;\n  if (\n    indices !== undefined &&\n    !(indices instanceof Uint16Array) &&\n    !(indices instanceof Uint32Array)\n  )\n    return invalid('indices', 'expected Uint16Array or Uint32Array');\n  const vertexCount = positions.length / 3;\n  if (indices !== undefined && !indices.every((index) => index < vertexCount))\n    return invalid('indices', 'index outside position array');\n  if (source.submeshes.length === 0 || (indices === undefined && source.submeshes.length !== 1))\n    return invalid('submeshes', 'expected indexed submeshes or one non-indexed submesh');\n  for (const submesh of source.submeshes) {\n    if (submesh.topology !== 'triangle-list') return invalid('topology', 'expected triangle-list');\n    const count = indices === undefined ? submesh.vertexCount : submesh.indexCount;\n    if (\n      !Number.isInteger(count) ||\n      count < 0 ||\n      count % 3 !== 0 ||\n      !Number.isInteger(submesh.indexOffset) ||\n      submesh.indexOffset < 0 ||\n      (indices === undefined\n        ? submesh.indexOffset !== 0 || submesh.indexCount !== 0 || count !== vertexCount\n        : submesh.indexOffset + count > indices.length)\n    )\n      return invalid('submeshes', 'invalid triangle range');\n  }\n  const output: number[] = [];\n  const outputIndices: number[] = [];\n  const projected = vec3.create();\n  const ab = vec3.create();\n  const ac = vec3.create();\n  const faceNormal = vec3.create();\n  for (const submesh of source.submeshes) {\n    const count = indices === undefined ? submesh.vertexCount : submesh.indexCount;\n    for (let offset = 0; offset < count; offset += 3) {\n      const vertexIds = [0, 1, 2].map((corner) =>\n        indices === undefined\n          ? offset + corner\n          : (indices[submesh.indexOffset + offset + corner] as number),\n      );\n      const p = vertexIds.map((index) => point(positions, index * 3));\n      vec3.sub(ab, p[1] as Point, p[0] as Point);\n      vec3.sub(ac, p[2] as Point, p[0] as Point);\n      vec3.cross(faceNormal, ab, ac);\n      if (Math.hypot(...faceNormal) === 0) continue;\n      vec3.normalize(faceNormal, faceNormal);\n      if (vec3.dot(faceNormal, direction) < threshold) continue;\n      let polygon: Vertex[] = vertexIds.map((index, corner) => {\n        const position = p[corner] as Point;\n        mat4.transformVec3(projected, inverse, position);\n        return {\n          position,\n          projected: point(projected, 0),\n          normal: normals === undefined ? point(faceNormal, 0) : point(normals, index * 3),\n        };\n      });\n      for (let axis = 0; axis < 3 && polygon.length >= 3; axis++) {\n        polygon = clip(polygon, axis, 1);\n        polygon = clip(polygon, axis, -1);\n      }\n      for (let corner = 1; corner + 1 < polygon.length; corner++) {\n        const triangle = [polygon[0], polygon[corner], polygon[corner + 1]] as Vertex[];\n        const [a, b, c] = triangle as [Vertex, Vertex, Vertex];\n        if (\n          Math.abs(\n            (b.projected[0] - a.projected[0]) * (c.projected[1] - a.projected[1]) -\n              (b.projected[1] - a.projected[1]) * (c.projected[0] - a.projected[0]),\n          ) < 1e-12\n        )\n          continue;\n        vec3.sub(ab, (triangle[1] as Vertex).position, (triangle[0] as Vertex).position);\n        vec3.sub(ac, (triangle[2] as Vertex).position, (triangle[0] as Vertex).position);\n        vec3.cross(projected, ab, ac);\n        if (Math.hypot(...projected) === 0) continue;\n        for (const vertex of triangle) {\n          const length = Math.hypot(...vertex.normal);\n          const normal = length > 0 ? vertex.normal.map((value) => value / length) : faceNormal;\n          outputIndices.push(output.length / 8);\n          output.push(\n            ...vertex.position,\n            ...normal,\n            vertex.projected[0] + 0.5,\n            0.5 - vertex.projected[1],\n          );\n        }\n      }\n    }\n  }\n  if (outputIndices.length === 0) return ok(null);\n  return meshFromInterleaved(new Float32Array(output), new Uint32Array(outputIndices));\n}\n","import { box2, box3, circle2 } from '@forgeax/engine-math';\nimport type { AssetError, MeshAsset, PrimitiveTopology } from '@forgeax/engine-types';\nimport { err, ok, type Result } from '@forgeax/engine-types';\nimport { degenerate } from './box';\nimport { packInterleavedVertexAttributes } from './vertex-attribute-layout';\n\nexport type Vec2 = readonly [number, number];\n\nexport type Shape2d =\n  | { readonly kind: 'circle'; readonly radius: number; readonly resolution?: number }\n  | {\n      readonly kind: 'circular-sector';\n      readonly radius: number;\n      readonly angle: number;\n      readonly resolution?: number;\n    }\n  | {\n      readonly kind: 'circular-segment';\n      readonly radius: number;\n      readonly angle: number;\n      readonly resolution?: number;\n    }\n  | {\n      readonly kind: 'ellipse';\n      readonly halfWidth: number;\n      readonly halfHeight: number;\n      readonly resolution?: number;\n    }\n  | {\n      readonly kind: 'annulus';\n      readonly innerRadius: number;\n      readonly outerRadius: number;\n      readonly resolution?: number;\n    }\n  | {\n      readonly kind: 'capsule';\n      readonly radius: number;\n      readonly halfLength: number;\n      readonly resolution?: number;\n    }\n  | { readonly kind: 'rhombus'; readonly halfWidth: number; readonly halfHeight: number }\n  | { readonly kind: 'rectangle'; readonly width: number; readonly height: number }\n  | { readonly kind: 'regular-polygon'; readonly radius: number; readonly sides: number }\n  | { readonly kind: 'triangle'; readonly vertices: readonly [Vec2, Vec2, Vec2] }\n  | { readonly kind: 'segment'; readonly vertices: readonly [Vec2, Vec2] }\n  | { readonly kind: 'polyline'; readonly vertices: readonly Vec2[] };\n\nexport type Shape2dPose = {\n  readonly translation?: Vec2;\n  readonly rotation?: number;\n};\n\nexport type Shape2dMeshOptions = {\n  readonly uv?: { readonly kind: 'circular-mask'; readonly angle: number };\n};\n\nexport type Shape2dBounds = {\n  readonly aabb: box2.Box2;\n  readonly circle: circle2.Circle2;\n};\n\ntype UvProjection = {\n  readonly kind: 'circular-mask';\n  readonly radius: number;\n  readonly angle: number;\n};\n\nconst DEFAULT_RESOLUTION = 32;\n\nfunction invalid(detail: string): Result<never, AssetError> {\n  return err(degenerate(detail));\n}\n\nfunction resolution(value: number | undefined): number | undefined {\n  const resolved = value ?? DEFAULT_RESOLUTION;\n  const integer = resolved | 0;\n  return integer >= 3 && integer === resolved ? integer : undefined;\n}\n\nfunction finitePoint(point: Vec2): boolean {\n  return Number.isFinite(point[0]) && Number.isFinite(point[1]);\n}\n\nfunction maskRadius(shape: Shape2d): number | undefined {\n  switch (shape.kind) {\n    case 'circle':\n    case 'circular-sector':\n    case 'circular-segment':\n      return shape.radius;\n    case 'ellipse':\n    case 'annulus':\n    case 'capsule':\n    case 'rhombus':\n    case 'rectangle':\n    case 'regular-polygon':\n    case 'triangle':\n    case 'segment':\n    case 'polyline':\n      return undefined;\n  }\n}\n\nfunction validateMeshOptions(\n  shape: Shape2d,\n  options: Shape2dMeshOptions | undefined,\n): Result<UvProjection | undefined, AssetError> {\n  const uv = options?.uv;\n  if (uv === undefined) return ok(undefined);\n  const radius = maskRadius(shape);\n  return radius !== undefined && radius > 0 && Number.isFinite(uv.angle)\n    ? ok({ kind: 'circular-mask', radius, angle: uv.angle })\n    : invalid(`circular-mask UV requires a circular shape and finite angle`);\n}\n\nfunction area(points: readonly Vec2[]): number {\n  let value = 0;\n  for (let i = 0; i < points.length; i++) {\n    const a = points[i];\n    const b = points[(i + 1) % points.length];\n    if (!a || !b) continue;\n    value += a[0] * b[1] - b[0] * a[1];\n  }\n  return value / 2;\n}\n\nfunction centroid(points: readonly Vec2[]): Vec2 {\n  let x = 0;\n  let y = 0;\n  for (const point of points) {\n    x += point[0];\n    y += point[1];\n  }\n  const count = Math.max(1, points.length);\n  return [x / count, y / count];\n}\n\nfunction counterClockwise(points: readonly Vec2[]): Vec2[] {\n  return area(points) < 0 ? [...points].reverse() : [...points];\n}\n\nfunction circleBoundary(radius: number, count: number, start = -Math.PI / 2): Vec2[] {\n  return Array.from({ length: count }, (_, i) => {\n    const angle = start + (i / count) * Math.PI * 2;\n    return [Math.cos(angle) * radius, Math.sin(angle) * radius] as const;\n  });\n}\n\nfunction arcBoundary(radius: number, angle: number, count: number, start: number): Vec2[] {\n  return Array.from({ length: count + 1 }, (_, i) => {\n    const t = i / count;\n    const current = start + angle * t;\n    return [Math.cos(current) * radius, Math.sin(current) * radius] as const;\n  });\n}\n\nfunction ellipseBoundary(halfWidth: number, halfHeight: number, count: number): Vec2[] {\n  return Array.from({ length: count }, (_, i) => {\n    const angle = -Math.PI / 2 + (i / count) * Math.PI * 2;\n    return [Math.cos(angle) * halfWidth, Math.sin(angle) * halfHeight] as const;\n  });\n}\n\nfunction capsuleBoundary(radius: number, halfLength: number, count: number): Vec2[] {\n  const points: Vec2[] = [];\n  for (let i = 0; i <= count; i++) {\n    const angle = (i / count) * Math.PI;\n    points.push([Math.cos(angle) * radius, halfLength + Math.sin(angle) * radius]);\n  }\n  for (let i = 0; i <= count; i++) {\n    const angle = Math.PI + (i / count) * Math.PI;\n    points.push([Math.cos(angle) * radius, -halfLength + Math.sin(angle) * radius]);\n  }\n  points.pop();\n  points.shift();\n  return points;\n}\n\nfunction buildMesh(\n  points: readonly Vec2[],\n  indices: readonly number[],\n  topology: PrimitiveTopology,\n  uvProjection?: UvProjection,\n): Result<MeshAsset, AssetError> {\n  const positions = new Float32Array(points.length * 3);\n  const normals = new Float32Array(points.length * 3);\n  const uvs = new Float32Array(points.length * 2);\n  const tangents = new Float32Array(points.length * 4);\n  let minX = Infinity;\n  let minY = Infinity;\n  let maxX = -Infinity;\n  let maxY = -Infinity;\n\n  for (const point of points) {\n    minX = Math.min(minX, point[0]);\n    minY = Math.min(minY, point[1]);\n    maxX = Math.max(maxX, point[0]);\n    maxY = Math.max(maxY, point[1]);\n  }\n\n  const width = Math.max(maxX - minX, 1);\n  const height = Math.max(maxY - minY, 1);\n  for (let i = 0; i < points.length; i++) {\n    const point = points[i];\n    if (!point) continue;\n    const [x, y] = point;\n    const positionOffset = i * 3;\n    const uvOffset = i * 2;\n    const tangentOffset = i * 4;\n    positions[positionOffset] = x;\n    positions[positionOffset + 1] = y;\n    normals[positionOffset + 2] = 1;\n    const cos = uvProjection === undefined ? 1 : Math.cos(uvProjection.angle);\n    const sin = uvProjection === undefined ? 0 : Math.sin(uvProjection.angle);\n    const projectedX = x * cos - y * sin;\n    const projectedY = x * sin + y * cos;\n    const u =\n      uvProjection === undefined\n        ? (x - minX) / width\n        : 0.5 + projectedX / (2 * uvProjection.radius);\n    const v =\n      uvProjection === undefined\n        ? (maxY - y) / height\n        : 0.5 - projectedY / (2 * uvProjection.radius);\n    uvs[uvOffset] = u;\n    uvs[uvOffset + 1] = v;\n    tangents[tangentOffset] = 1;\n    tangents[tangentOffset + 3] = 1;\n  }\n\n  const attributes = { position: positions, normal: normals, uv: uvs, tangent: tangents };\n  const packed = packInterleavedVertexAttributes(attributes, points.length);\n  if (!packed.ok) return packed;\n  return ok({\n    kind: 'mesh',\n    vertices: packed.value.vertices,\n    indices: new Uint32Array(indices),\n    attributes,\n    submeshes: [\n      {\n        indexOffset: 0,\n        indexCount: indices.length,\n        vertexCount: points.length,\n        topology,\n        materialSlot: 0,\n      },\n    ],\n    materialSlots: [{ slotName: 'Default' }],\n    aabb: box3.fromPositions(box3.create(), positions),\n  });\n}\n\nfunction fill(points: readonly Vec2[], uvProjection?: UvProjection): Result<MeshAsset, AssetError> {\n  const boundary = counterClockwise(points);\n  const center = centroid(boundary);\n  const vertices = [center, ...boundary];\n  const indices: number[] = [];\n  for (let i = 0; i < boundary.length; i++) {\n    const next = (i + 1) % boundary.length;\n    indices.push(0, i + 1, next + 1);\n  }\n  return buildMesh(vertices, indices, 'triangle-list', uvProjection);\n}\n\nfunction ring(outer: readonly Vec2[], inner: readonly Vec2[]): Result<MeshAsset, AssetError> {\n  const outside = counterClockwise(outer);\n  const inside = counterClockwise(inner);\n  const count = Math.min(outside.length, inside.length);\n  const vertices = [...outside.slice(0, count), ...inside.slice(0, count)];\n  const indices: number[] = [];\n  for (let i = 0; i < count; i++) {\n    const next = (i + 1) % count;\n    indices.push(i, next, count + i, next, count + next, count + i);\n  }\n  return buildMesh(vertices, indices, 'triangle-list');\n}\n\nfunction segment(points: readonly Vec2[]): Result<MeshAsset, AssetError> {\n  const indices: number[] = [];\n  for (let i = 0; i + 1 < points.length; i += 1) indices.push(i, i + 1);\n  return buildMesh(points, indices, 'line-list');\n}\n\n/** Outer outline of any shape: an annulus's outer circle, an open path's own vertices. */\nfunction shapeBoundary(shape: Shape2d, count: number): Vec2[] {\n  switch (shape.kind) {\n    case 'circle':\n      return circleBoundary(shape.radius, count);\n    case 'annulus':\n      return circleBoundary(shape.outerRadius, count);\n    case 'circular-sector':\n      return [\n        ...arcBoundary(shape.radius, shape.angle, count, -Math.PI / 2 - shape.angle / 2),\n        [0, 0],\n      ];\n    case 'circular-segment':\n      return arcBoundary(shape.radius, shape.angle, count, -Math.PI / 2 - shape.angle / 2);\n    case 'ellipse':\n      return ellipseBoundary(shape.halfWidth, shape.halfHeight, count);\n    case 'capsule':\n      return capsuleBoundary(shape.radius, shape.halfLength, Math.max(2, Math.floor(count / 2)));\n    case 'rhombus':\n      return [\n        [0, shape.halfHeight],\n        [shape.halfWidth, 0],\n        [0, -shape.halfHeight],\n        [-shape.halfWidth, 0],\n      ];\n    case 'rectangle':\n      return [\n        [-shape.width / 2, -shape.height / 2],\n        [shape.width / 2, -shape.height / 2],\n        [shape.width / 2, shape.height / 2],\n        [-shape.width / 2, shape.height / 2],\n      ];\n    case 'regular-polygon':\n      return Array.from({ length: shape.sides }, (_, i) => {\n        const angle = -Math.PI / 2 + (i / shape.sides) * Math.PI * 2;\n        return [Math.cos(angle) * shape.radius, Math.sin(angle) * shape.radius] as const;\n      });\n    case 'triangle':\n    case 'segment':\n    case 'polyline':\n      return [...shape.vertices];\n  }\n}\n\nfunction scaleAround(points: readonly Vec2[], factor: number): Vec2[] {\n  const center = centroid(points);\n  return points.map(([x, y]) => [\n    center[0] + (x - center[0]) * factor,\n    center[1] + (y - center[1]) * factor,\n  ]);\n}\n\nfunction withResolution(\n  value: number | undefined,\n  valid: boolean,\n  detail: string,\n): Result<number, AssetError> {\n  const count = resolution(value);\n  return valid && count !== undefined ? ok(count) : invalid(detail);\n}\n\nfunction validateCommon(shape: Shape2d): Result<number, AssetError> {\n  switch (shape.kind) {\n    case 'circle':\n      return withResolution(\n        shape.resolution,\n        shape.radius > 0 && Number.isFinite(shape.radius),\n        `circle radius=${shape.radius}, resolution=${shape.resolution}`,\n      );\n    case 'circular-sector':\n    case 'circular-segment':\n      return withResolution(\n        shape.resolution,\n        shape.radius > 0 &&\n          shape.angle > 0 &&\n          shape.angle <= Math.PI * 2 &&\n          Number.isFinite(shape.radius) &&\n          Number.isFinite(shape.angle),\n        `${shape.kind} radius=${shape.radius}, angle=${shape.angle}, resolution=${shape.resolution}`,\n      );\n    case 'ellipse':\n      return withResolution(\n        shape.resolution,\n        shape.halfWidth > 0 &&\n          shape.halfHeight > 0 &&\n          Number.isFinite(shape.halfWidth) &&\n          Number.isFinite(shape.halfHeight),\n        `ellipse halfWidth=${shape.halfWidth}, halfHeight=${shape.halfHeight}, resolution=${shape.resolution}`,\n      );\n    case 'annulus':\n      return withResolution(\n        shape.resolution,\n        shape.innerRadius >= 0 &&\n          shape.outerRadius > shape.innerRadius &&\n          Number.isFinite(shape.innerRadius) &&\n          Number.isFinite(shape.outerRadius),\n        `annulus innerRadius=${shape.innerRadius}, outerRadius=${shape.outerRadius}, resolution=${shape.resolution}`,\n      );\n    case 'capsule':\n      return withResolution(\n        shape.resolution,\n        shape.radius > 0 &&\n          shape.halfLength >= 0 &&\n          Number.isFinite(shape.radius) &&\n          Number.isFinite(shape.halfLength),\n        `capsule radius=${shape.radius}, halfLength=${shape.halfLength}, resolution=${shape.resolution}`,\n      );\n    case 'rhombus':\n      return shape.halfWidth > 0 &&\n        shape.halfHeight > 0 &&\n        Number.isFinite(shape.halfWidth) &&\n        Number.isFinite(shape.halfHeight)\n        ? ok(0)\n        : invalid(`rhombus halfWidth=${shape.halfWidth}, halfHeight=${shape.halfHeight}`);\n    case 'rectangle':\n      return shape.width > 0 &&\n        shape.height > 0 &&\n        Number.isFinite(shape.width) &&\n        Number.isFinite(shape.height)\n        ? ok(0)\n        : invalid(`rectangle width=${shape.width}, height=${shape.height}`);\n    case 'regular-polygon':\n      return shape.radius > 0 &&\n        Number.isFinite(shape.radius) &&\n        Number.isInteger(shape.sides) &&\n        shape.sides >= 3\n        ? ok(0)\n        : invalid(`regular-polygon radius=${shape.radius}, sides=${shape.sides}`);\n    case 'triangle':\n      return shape.vertices.every(finitePoint) && Math.abs(area(shape.vertices)) > 1e-7\n        ? ok(0)\n        : invalid('triangle vertices must be finite and non-collinear');\n    case 'segment':\n      return shape.vertices.every(finitePoint) &&\n        (shape.vertices[0][0] !== shape.vertices[1][0] ||\n          shape.vertices[0][1] !== shape.vertices[1][1])\n        ? ok(0)\n        : invalid('segment endpoints must be finite and distinct');\n    case 'polyline':\n      return shape.vertices.length >= 2 && shape.vertices.every(finitePoint)\n        ? ok(0)\n        : invalid('polyline needs at least two finite vertices');\n  }\n}\n\nexport function create2dGeometry(\n  shape: Shape2d,\n  options?: Shape2dMeshOptions,\n): Result<MeshAsset, AssetError> {\n  const checked = validateCommon(shape);\n  if (!checked.ok) return checked;\n  const meshOptions = validateMeshOptions(shape, options);\n  if (!meshOptions.ok) return meshOptions;\n  const boundary = shapeBoundary(shape, checked.value);\n  if (shape.kind === 'segment' || shape.kind === 'polyline') return segment(boundary);\n  if (shape.kind === 'annulus') {\n    return ring(boundary, circleBoundary(shape.innerRadius, checked.value));\n  }\n  return fill(boundary, meshOptions.value);\n}\n\nexport function compute2dBounds(\n  shape: Shape2d,\n  pose: Shape2dPose = {},\n): Result<Shape2dBounds, AssetError> {\n  const checked = validateCommon(shape);\n  if (!checked.ok) return checked;\n  const translation = pose.translation ?? [0, 0];\n  const rotation = pose.rotation ?? 0;\n  if (!finitePoint(translation) || !Number.isFinite(rotation)) {\n    return invalid('2d bounds pose must contain finite translation and rotation');\n  }\n  const points = shapeBoundary(shape, checked.value);\n  const cos = Math.cos(rotation);\n  const sin = Math.sin(rotation);\n  const transformed = points.map(\n    ([x, y]) => [translation[0] + x * cos - y * sin, translation[1] + x * sin + y * cos] as const,\n  );\n  let radius = 0;\n  for (const [x, y] of points) radius = Math.max(radius, Math.hypot(x, y));\n  return ok({\n    aabb: box2.fromPoints(box2.create(), transformed),\n    circle: circle2.create(translation[0], translation[1], radius),\n  });\n}\n\nexport function create2dRingGeometry(\n  shape: Shape2d,\n  thickness: number,\n  resolutionOverride?: number,\n): Result<MeshAsset, AssetError> {\n  if (!(thickness > 0) || !Number.isFinite(thickness))\n    return invalid(`ring thickness=${thickness}`);\n  const checked = validateCommon(shape);\n  if (!checked.ok) return checked;\n  if (shape.kind === 'segment' || shape.kind === 'polyline' || shape.kind === 'annulus') {\n    return invalid(`rings require a closed non-annulus shape, got ${shape.kind}`);\n  }\n  const count = resolutionOverride === undefined ? checked.value : resolution(resolutionOverride);\n  if (count === undefined) return invalid(`ring resolution=${resolutionOverride}`);\n  const outer = shapeBoundary(shape, count);\n  const extent = Math.max(...outer.map(([x, y]) => Math.hypot(x, y)));\n  const factor = (extent - thickness) / extent;\n  if (!(factor > 1e-5))\n    return invalid(`ring thickness=${thickness} exceeds shape extent=${extent}`);\n  return ring(outer, scaleAround(outer, factor));\n}\n","import { ok, type Result } from '@forgeax/engine-types';\nimport {\n  type DistanceFieldError,\n  distanceFieldFailure,\n  MAX_VISIBILITY_DISTANCE_FIELD_AXIS,\n  type MeshDistanceField,\n} from './distance-field';\nimport { fieldBrickNegativeSamples, MAX_DISTANCE_FIELD_BYTES } from './distance-field-bricks';\n\n/** Structural admission is shared by decoded artifacts and direct query snapshots. */\nexport function validateMeshDistanceField(\n  field: MeshDistanceField,\n): Result<void, DistanceFieldError> {\n  const policy = field.policy;\n  if (!policy || !['signed-solid', 'two-sided', 'sampled-visibility'].includes(policy.kind))\n    return distanceFieldFailure('unknown distance-field policy');\n  const visibility = policy.kind === 'sampled-visibility';\n  if (\n    !/^[a-f0-9]{64}$/.test(field.meshDigest) ||\n    field.dimensions.length !== 3 ||\n    field.origin.length !== 3 ||\n    field.bounds.min.length !== 3 ||\n    field.bounds.max.length !== 3 ||\n    field.dimensions.some(\n      (v) =>\n        !Number.isInteger(v) || v < 3 || v > (visibility ? MAX_VISIBILITY_DISTANCE_FIELD_AXIS : 68),\n    ) ||\n    !Number.isFinite(field.spacing) ||\n    field.spacing <= 0 ||\n    ![...field.origin, ...field.bounds.min, ...field.bounds.max].every((v) =>\n      Number.isFinite(Math.fround(v)),\n    ) ||\n    field.bounds.min.some(\n      (v, a) =>\n        (policy.kind === 'signed-solid'\n          ? v >= (field.bounds.max[a] ?? -Infinity)\n          : v > (field.bounds.max[a] ?? -Infinity)) || v < (field.origin[a] ?? Infinity),\n    ) ||\n    field.bounds.max.some(\n      (v, a) => v > (field.origin[a] ?? 0) + ((field.dimensions[a] ?? 0) - 1) * field.spacing,\n    ) ||\n    !Number.isInteger(field.quality.negativeSamples) ||\n    field.quality.negativeSamples < 0 ||\n    (policy.kind === 'two-sided' && field.quality.negativeSamples !== 0) ||\n    (policy.kind === 'signed-solid' && field.quality.negativeSamples < 1) ||\n    !Number.isInteger(field.quality.testedTriangles) ||\n    field.quality.testedTriangles < (policy.kind === 'signed-solid' ? 4 : 1) ||\n    field.quality.testedTriangles >\n      (visibility ? 1_048_576 : policy.kind === 'two-sided' ? 65536 : 1024)\n  )\n    return distanceFieldFailure('invalid, incomplete or inconsistent distance-field payload');\n  if (fieldBrickNegativeSamples(field) !== field.quality.negativeSamples)\n    return distanceFieldFailure(\n      'invalid brick addresses, padding, storage budget or negative count',\n    );\n  if (policy.kind !== 'sampled-visibility') {\n    if (\n      !Number.isFinite(policy.errorBound) ||\n      policy.errorBound < (Math.sqrt(3) * field.spacing) / 2\n    )\n      return distanceFieldFailure('invalid geometric distance bound');\n  } else {\n    const bounds = policy.traceBounds;\n    if (\n      !/^[a-f0-9]{64}$/.test(policy.sourceDigest) ||\n      typeof policy.mostlyTwoSided !== 'boolean' ||\n      !bounds ||\n      bounds.min.length !== 3 ||\n      bounds.max.length !== 3 ||\n      ![...bounds.min, ...bounds.max, policy.distanceBand].every((v) =>\n        Number.isFinite(Math.fround(v)),\n      ) ||\n      policy.distanceBand !== Math.fround(4 * Math.sqrt(3) * field.spacing) ||\n      field.values.some((v) => Math.abs(v) > policy.distanceBand) ||\n      bounds.min.some(\n        (v, a) =>\n          v >= (bounds.max[a] ?? -Infinity) ||\n          v > (field.bounds.min[a] ?? -Infinity) ||\n          v !== Math.fround((field.origin[a] ?? NaN) + field.spacing) ||\n          v - (field.origin[a] ?? Infinity) < field.spacing * 0.99,\n      ) ||\n      bounds.max.some(\n        (v, a) =>\n          v < (field.bounds.max[a] ?? Infinity) ||\n          (field.origin[a] ?? 0) + ((field.dimensions[a] ?? 0) - 1) * field.spacing - v <\n            field.spacing * 0.99,\n      )\n    )\n      return distanceFieldFailure('invalid visibility bounds, band or source policy');\n    for (const axis of [0, 1, 2] as const) {\n      let previous = -Infinity;\n      for (let i = 0; i < field.dimensions[axis]; i++) {\n        const center = Math.fround(field.origin[axis] + Math.fround(i * field.spacing));\n        if (!Number.isFinite(center) || center <= previous)\n          return distanceFieldFailure('visibility samples must have distinct finite f32 centers');\n        previous = center;\n      }\n    }\n  }\n  return ok(undefined);\n}\nasync function digest(bytes: Uint8Array): Promise<string> {\n  return Array.from(\n    new Uint8Array(await crypto.subtle.digest('SHA-256', new Uint8Array(bytes))),\n    (b) => b.toString(16).padStart(2, '0'),\n  ).join('');\n}\n/** Version 4 stores one brick address table and exact little-endian f32 payloads. */\nexport async function encodeMeshDistanceField(\n  field: MeshDistanceField,\n): Promise<Result<Uint8Array, DistanceFieldError>> {\n  const valid = validateMeshDistanceField(field);\n  if (!valid.ok) return valid;\n  const samples = new Uint8Array(field.bricks.byteLength + field.values.byteLength),\n    view = new DataView(samples.buffer);\n  field.bricks.forEach((offset, i) => {\n    view.setUint32(i * 4, offset, true);\n  });\n  field.values.forEach((value, i) => {\n    view.setFloat32(field.bricks.byteLength + i * 4, value, true);\n  });\n  const { values: _, bricks: __, ...metadata } = field;\n  const header = new TextEncoder().encode(JSON.stringify({ version: 4, ...metadata }));\n  const bytes = new Uint8Array(4 + header.length + samples.length + 64);\n  new DataView(bytes.buffer).setUint32(0, header.length, true);\n  bytes.set(header, 4);\n  bytes.set(samples, 4 + header.length);\n  bytes.set(new TextEncoder().encode(await digest(bytes.subarray(0, -64))), bytes.length - 64);\n  return ok(bytes);\n}\n/** Stale dense artifacts require a producer rebuild; no second runtime representation. */\nexport async function decodeMeshDistanceField(\n  bytes: Uint8Array,\n  expectedMeshDigest: string,\n): Promise<Result<MeshDistanceField, DistanceFieldError>> {\n  try {\n    if (bytes.byteLength < 68 || bytes.byteLength > 4 + 4096 + MAX_DISTANCE_FIELD_BYTES + 64)\n      return distanceFieldFailure('invalid artifact byte length');\n    if ((await digest(bytes.subarray(0, -64))) !== new TextDecoder().decode(bytes.subarray(-64)))\n      return distanceFieldFailure('distance-field artifact digest mismatch');\n    const headerLength = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(\n      0,\n      true,\n    );\n    if (headerLength > 4096 || headerLength + 4 >= bytes.length - 64)\n      return distanceFieldFailure('missing artifact header or samples');\n    const header = JSON.parse(\n      new TextDecoder('utf-8', { fatal: true }).decode(bytes.subarray(4, 4 + headerLength)),\n    );\n    if (header.version !== 4 || header.meshDigest !== expectedMeshDigest)\n      return distanceFieldFailure(\n        'unsupported or stale distance-field artifact; rebuild its producer',\n      );\n    if (\n      !Array.isArray(header.dimensions) ||\n      header.dimensions.length !== 3 ||\n      header.dimensions.some(\n        (n: number) => !Number.isInteger(n) || n < 3 || n > MAX_VISIBILITY_DISTANCE_FIELD_AXIS,\n      )\n    )\n      return distanceFieldFailure('invalid artifact dimensions');\n    const brickCount = header.dimensions.reduce((n: number, d: number) => n * Math.ceil(d / 4), 1);\n    const samples = bytes.subarray(4 + headerLength, -64);\n    if (samples.length % 4 !== 0 || samples.length < brickCount * 4 + 256)\n      return distanceFieldFailure('truncated distance-field samples');\n    const view = new DataView(samples.buffer, samples.byteOffset, samples.byteLength),\n      bricks = new Uint32Array(brickCount),\n      values = new Float32Array(samples.length / 4 - brickCount);\n    for (let i = 0; i < bricks.length; i++) bricks[i] = view.getUint32(i * 4, true);\n    for (let i = 0; i < values.length; i++)\n      values[i] = view.getFloat32(bricks.byteLength + i * 4, true);\n    const { version: _, ...metadata } = header;\n    const field: MeshDistanceField = { ...metadata, bricks, values };\n    const valid = validateMeshDistanceField(field);\n    return valid.ok ? ok(field) : valid;\n  } catch {\n    return distanceFieldFailure('malformed distance-field artifact');\n  }\n}\n","import { box3 } from '@forgeax/engine-math';\nimport {\n  ASSET_ERROR_HINTS,\n  AssetError,\n  err,\n  type MeshAsset,\n  ok,\n  type Result,\n  type VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { packInterleavedVertexAttributes } from './vertex-attribute-layout';\n\nconst WELD_EPSILON = 1e-4;\nconst DEFAULT_THRESHOLD_DEGREES = 1;\n\ntype Vec3 = readonly [number, number, number];\n\ninterface Endpoint {\n  readonly value: Vec3;\n  readonly exactKey: string;\n  readonly weldKey: string;\n}\n\ninterface Triangle {\n  readonly a: Endpoint;\n  readonly b: Endpoint;\n  readonly c: Endpoint;\n  readonly normal: Vec3;\n}\n\ninterface PreparedMesh {\n  readonly triangles: readonly Triangle[];\n}\n\ninterface WireEdge {\n  readonly a: Endpoint;\n  readonly b: Endpoint;\n}\n\ninterface SurfaceEdge {\n  readonly aWeldKey: string;\n  readonly bWeldKey: string;\n  a: Endpoint;\n  b: Endpoint;\n  readonly normals: Vec3[];\n}\n\nfunction parseFailure(field: string, value: unknown, reason: string): AssetError {\n  return new AssetError({\n    code: 'asset-parse-failed',\n    expected: `a valid triangle-list MeshAsset: ${reason}`,\n    hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n    detail: { field, value, reason },\n  });\n}\n\nfunction f32Bits(value: number): number {\n  const buffer = new ArrayBuffer(4);\n  new Float32Array(buffer)[0] = value;\n  return new Uint32Array(buffer)[0] as number;\n}\n\nfunction normalizedValue(value: number): number {\n  return value === 0 ? 0 : value;\n}\n\nfunction exactKey(value: Vec3): string {\n  return value\n    .map((component) => f32Bits(normalizedValue(component)).toString(16).padStart(8, '0'))\n    .join(':');\n}\n\nfunction weldComponent(value: number): string {\n  const scaled = normalizedValue(value) / WELD_EPSILON;\n  return String(Math.round(scaled));\n}\n\nfunction weldKey(value: Vec3): string {\n  return value.map(weldComponent).join(':');\n}\n\nfunction endpoint(position: Vec3): Endpoint {\n  const value: Vec3 = [\n    normalizedValue(position[0]),\n    normalizedValue(position[1]),\n    normalizedValue(position[2]),\n  ];\n  return { value, exactKey: exactKey(value), weldKey: weldKey(value) };\n}\n\nfunction compareText(left: string, right: string): number {\n  return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction compareEndpoint(left: Endpoint, right: Endpoint): number {\n  return compareText(left.exactKey, right.exactKey);\n}\n\nfunction compareWireEdge(left: WireEdge, right: WireEdge): number {\n  return compareEndpoint(left.a, right.a) || compareEndpoint(left.b, right.b);\n}\n\nfunction compareSurfaceEdge(left: SurfaceEdge, right: SurfaceEdge): number {\n  return compareText(left.aWeldKey, right.aWeldKey) || compareText(left.bWeldKey, right.bWeldKey);\n}\n\nfunction readPosition(raw: Float32Array | ArrayBuffer): Float32Array {\n  return raw instanceof Float32Array ? raw : new Float32Array(raw);\n}\n\nfunction validatePosition(source: MeshAsset): Result<Float32Array, AssetError> {\n  if (source === null || typeof source !== 'object' || source.kind !== 'mesh') {\n    return err(parseFailure('kind', source?.kind, 'kind must be mesh'));\n  }\n  const attributes = source.attributes;\n  const raw = attributes?.position;\n  if (raw === undefined) {\n    return err(parseFailure('attributes.position', undefined, 'position is required'));\n  }\n  if (raw instanceof ArrayBuffer) {\n    if (raw.byteLength % 4 !== 0) {\n      return err(\n        parseFailure(\n          'attributes.position',\n          raw.byteLength,\n          'ArrayBuffer byte length must align to f32',\n        ),\n      );\n    }\n  } else if (!(raw instanceof Float32Array)) {\n    return err(\n      parseFailure(\n        'attributes.position',\n        raw === null ? null : typeof raw,\n        'position storage must be Float32Array or ArrayBuffer',\n      ),\n    );\n  }\n  const position = readPosition(raw);\n  if (position.length % 3 !== 0) {\n    return err(\n      parseFailure(\n        'attributes.position',\n        position.length,\n        'position length must be divisible by 3',\n      ),\n    );\n  }\n  for (let index = 0; index < position.length; index += 1) {\n    const value = position[index] as number;\n    if (!Number.isFinite(value)) {\n      return err(parseFailure('attributes.position', value, `position[${index}] must be finite`));\n    }\n  }\n  return ok(position);\n}\n\nfunction validateThreshold(threshold: number): Result<number, AssetError> {\n  if (!Number.isFinite(threshold) || threshold < 0 || threshold > 180) {\n    return err(\n      parseFailure('thresholdAngleDegrees', threshold, 'threshold must be finite and in [0, 180]'),\n    );\n  }\n  return ok(threshold);\n}\n\nfunction validateSubmeshShape(source: MeshAsset, positionCount: number): Result<void, AssetError> {\n  if (!Array.isArray(source.submeshes) || source.submeshes.length === 0) {\n    return err(parseFailure('submeshes', source.submeshes, 'at least one submesh is required'));\n  }\n  const indexed = source.indices !== undefined;\n  if (!indexed && source.submeshes.length !== 1) {\n    return err(\n      parseFailure('submeshes', source.submeshes.length, 'non-indexed meshes require one submesh'),\n    );\n  }\n  if (!indexed && positionCount % 3 !== 0) {\n    return err(\n      parseFailure(\n        'attributes.position',\n        positionCount,\n        'non-indexed positions require triangle cardinality',\n      ),\n    );\n  }\n  for (let index = 0; index < source.submeshes.length; index += 1) {\n    const submesh = source.submeshes[index];\n    if (submesh === undefined || submesh === null || submesh.topology !== 'triangle-list') {\n      return err(\n        parseFailure(\n          `submeshes[${index}].topology`,\n          submesh?.topology,\n          'topology must be triangle-list',\n        ),\n      );\n    }\n    if (!Number.isInteger(submesh.indexOffset) || submesh.indexOffset < 0) {\n      return err(\n        parseFailure(\n          `submeshes[${index}].indexOffset`,\n          submesh.indexOffset,\n          'index offset must be a non-negative integer',\n        ),\n      );\n    }\n    if (!Number.isInteger(submesh.indexCount) || submesh.indexCount < 0) {\n      return err(\n        parseFailure(\n          `submeshes[${index}].indexCount`,\n          submesh.indexCount,\n          'index count must be a non-negative integer',\n        ),\n      );\n    }\n    if (\n      !Number.isInteger(submesh.vertexCount) ||\n      submesh.vertexCount < 0 ||\n      submesh.vertexCount > positionCount\n    ) {\n      return err(\n        parseFailure(\n          `submeshes[${index}].vertexCount`,\n          submesh.vertexCount,\n          'vertex count must be an integer within position count',\n        ),\n      );\n    }\n    if (submesh.indexCount % 3 !== 0) {\n      return err(\n        parseFailure(\n          `submeshes[${index}].indexCount`,\n          submesh.indexCount,\n          'index count must be divisible by 3',\n        ),\n      );\n    }\n    if (!indexed && submesh.indexOffset !== 0) {\n      return err(\n        parseFailure(\n          `submeshes[${index}].indexOffset`,\n          submesh.indexOffset,\n          'non-indexed submesh index offset must be zero',\n        ),\n      );\n    }\n    if (!indexed && submesh.indexCount !== 0) {\n      return err(\n        parseFailure(\n          `submeshes[${index}].indexCount`,\n          submesh.indexCount,\n          'non-indexed submesh index count must be zero',\n        ),\n      );\n    }\n    if (!indexed && submesh.vertexCount !== positionCount) {\n      return err(\n        parseFailure(\n          `submeshes[${index}].vertexCount`,\n          submesh.vertexCount,\n          'non-indexed submesh must span all positions',\n        ),\n      );\n    }\n  }\n  return ok(undefined);\n}\n\nfunction validateIndices(source: MeshAsset, positionCount: number): Result<void, AssetError> {\n  const indices = source.indices;\n  if (indices === undefined) return ok(undefined);\n  if (!(indices instanceof Uint16Array) && !(indices instanceof Uint32Array)) {\n    return err(\n      parseFailure('indices', indices, 'indices storage must be Uint16Array or Uint32Array'),\n    );\n  }\n  for (let index = 0; index < source.submeshes.length; index += 1) {\n    const submesh = source.submeshes[index];\n    if (submesh === undefined) continue;\n    if (submesh.indexOffset + submesh.indexCount > indices.length) {\n      return err(\n        parseFailure(`submeshes[${index}]`, submesh, 'submesh index range exceeds indices length'),\n      );\n    }\n    for (\n      let offset = submesh.indexOffset;\n      offset < submesh.indexOffset + submesh.indexCount;\n      offset += 1\n    ) {\n      const value = indices[offset] as number;\n      if (!Number.isInteger(value) || value < 0 || value >= positionCount) {\n        return err(\n          parseFailure(`indices[${offset}]`, value, 'index must address a position vertex'),\n        );\n      }\n    }\n  }\n  return ok(undefined);\n}\n\nfunction cross(a: Vec3, b: Vec3): Vec3 {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\nfunction subtract(a: Vec3, b: Vec3): Vec3 {\n  return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];\n}\n\nfunction triangleNormal(a: Vec3, b: Vec3, c: Vec3): Vec3 | undefined {\n  const normal = cross(subtract(b, a), subtract(c, a));\n  const length = Math.hypot(normal[0], normal[1], normal[2]);\n  if (!Number.isFinite(length) || length === 0) return undefined;\n  return [normal[0] / length, normal[1] / length, normal[2] / length];\n}\n\nfunction positionAt(position: Float32Array, index: number): Vec3 {\n  const base = index * 3;\n  return [position[base] as number, position[base + 1] as number, position[base + 2] as number];\n}\n\nfunction makeTriangle(\n  position: Float32Array,\n  indices: readonly [number, number, number],\n): Triangle | undefined {\n  const a = endpoint(positionAt(position, indices[0]));\n  const b = endpoint(positionAt(position, indices[1]));\n  const c = endpoint(positionAt(position, indices[2]));\n  const normal = triangleNormal(a.value, b.value, c.value);\n  return normal === undefined ? undefined : { a, b, c, normal };\n}\n\nfunction collectTriangles(source: MeshAsset, position: Float32Array): Triangle[] {\n  const triangles: Triangle[] = [];\n  for (const submesh of source.submeshes) {\n    if (source.indices === undefined) {\n      for (let offset = 0; offset < submesh.vertexCount; offset += 3) {\n        const triangle = makeTriangle(position, [offset, offset + 1, offset + 2]);\n        if (triangle !== undefined) triangles.push(triangle);\n      }\n      continue;\n    }\n    for (\n      let offset = submesh.indexOffset;\n      offset < submesh.indexOffset + submesh.indexCount;\n      offset += 3\n    ) {\n      const a = source.indices[offset] as number;\n      const b = source.indices[offset + 1] as number;\n      const c = source.indices[offset + 2] as number;\n      const triangle = makeTriangle(position, [a, b, c]);\n      if (triangle !== undefined) triangles.push(triangle);\n    }\n  }\n  return triangles;\n}\n\nfunction prepare(source: MeshAsset, threshold?: number): Result<PreparedMesh, AssetError> {\n  const positionResult = validatePosition(source);\n  if (!positionResult.ok) return positionResult;\n  if (threshold !== undefined) {\n    const thresholdResult = validateThreshold(threshold);\n    if (!thresholdResult.ok) return thresholdResult;\n  }\n  const submeshResult = validateSubmeshShape(source, positionResult.value.length / 3);\n  if (!submeshResult.ok) return submeshResult;\n  const indexResult = validateIndices(source, positionResult.value.length / 3);\n  if (!indexResult.ok) return indexResult;\n  return ok({ triangles: collectTriangles(source, positionResult.value) });\n}\n\nfunction addWireEdge(edges: Map<string, WireEdge>, left: Endpoint, right: Endpoint): void {\n  if (left.exactKey === right.exactKey) return;\n  const [a, b] = compareEndpoint(left, right) < 0 ? [left, right] : [right, left];\n  const key = `${a.exactKey}|${b.exactKey}`;\n  if (!edges.has(key)) edges.set(key, { a, b });\n}\n\nfunction collectWireEdges(triangles: readonly Triangle[]): WireEdge[] {\n  const edges = new Map<string, WireEdge>();\n  for (const triangle of triangles) {\n    addWireEdge(edges, triangle.a, triangle.b);\n    addWireEdge(edges, triangle.b, triangle.c);\n    addWireEdge(edges, triangle.c, triangle.a);\n  }\n  return Array.from(edges.values()).sort(compareWireEdge);\n}\n\nfunction updateRepresentative(current: Endpoint, candidate: Endpoint): Endpoint {\n  return compareEndpoint(candidate, current) < 0 ? candidate : current;\n}\n\nfunction addSurfaceEdge(\n  edges: Map<string, SurfaceEdge>,\n  left: Endpoint,\n  right: Endpoint,\n  normal: Vec3,\n): void {\n  if (left.weldKey === right.weldKey) return;\n  const leftFirst = compareText(left.weldKey, right.weldKey) < 0;\n  const a = leftFirst ? left : right;\n  const b = leftFirst ? right : left;\n  const key = `${a.weldKey}|${b.weldKey}`;\n  const current = edges.get(key);\n  if (current === undefined) {\n    edges.set(key, {\n      aWeldKey: a.weldKey,\n      bWeldKey: b.weldKey,\n      a,\n      b,\n      normals: [normal],\n    });\n    return;\n  }\n  current.a = updateRepresentative(current.a, a);\n  current.b = updateRepresentative(current.b, b);\n  current.normals.push(normal);\n}\n\nfunction collectSurfaceEdges(triangles: readonly Triangle[]): SurfaceEdge[] {\n  const edges = new Map<string, SurfaceEdge>();\n  for (const triangle of triangles) {\n    addSurfaceEdge(edges, triangle.a, triangle.b, triangle.normal);\n    addSurfaceEdge(edges, triangle.b, triangle.c, triangle.normal);\n    addSurfaceEdge(edges, triangle.c, triangle.a, triangle.normal);\n  }\n  return Array.from(edges.values()).sort(compareSurfaceEdge);\n}\n\nfunction keepSurfaceEdge(edge: SurfaceEdge, thresholdDegrees: number): boolean {\n  if (edge.normals.length !== 2) return true;\n  const first = edge.normals[0];\n  const second = edge.normals[1];\n  if (first === undefined || second === undefined) return true;\n  const dot = Math.min(\n    1,\n    Math.max(-1, first[0] * second[0] + first[1] * second[1] + first[2] * second[2]),\n  );\n  return dot <= Math.cos((thresholdDegrees * Math.PI) / 180);\n}\n\nfunction lineMesh(edges: readonly WireEdge[]): Result<MeshAsset, AssetError> {\n  const positions = new Float32Array(edges.length * 6);\n  for (let edgeIndex = 0; edgeIndex < edges.length; edgeIndex += 1) {\n    const edge = edges[edgeIndex] as WireEdge;\n    positions.set(edge.a.value, edgeIndex * 6);\n    positions.set(edge.b.value, edgeIndex * 6 + 3);\n  }\n  const vertexCount = positions.length / 3;\n  const attributes: VertexAttributeMap = {\n    position: positions,\n    normal: new Float32Array(vertexCount * 3),\n    uv: new Float32Array(vertexCount * 2),\n    tangent: new Float32Array(vertexCount * 4),\n  };\n  const packed = packInterleavedVertexAttributes(attributes, vertexCount);\n  if (!packed.ok) return err(packed.error);\n  return ok({\n    kind: 'mesh',\n    vertices: packed.value.vertices,\n    attributes,\n    submeshes: [\n      {\n        indexOffset: 0,\n        indexCount: 0,\n        vertexCount,\n        topology: 'line-list',\n        materialSlot: 0,\n      },\n    ],\n    materialSlots: [{ slotName: 'Default' }],\n    aabb: box3.fromPositions(box3.create(), positions),\n  });\n}\n\n/** Convert every unique exact triangle edge into a sorted non-indexed line carrier. */\nexport function createWireframeGeometry(source: MeshAsset): Result<MeshAsset, AssetError> {\n  const prepared = prepare(source);\n  if (!prepared.ok) return prepared;\n  return lineMesh(collectWireEdges(prepared.value.triangles));\n}\n\n/** Convert boundary, non-manifold, and threshold-surviving surface edges into a line carrier. */\nexport function createEdgesGeometry(\n  source: MeshAsset,\n  thresholdAngleDegrees: number = DEFAULT_THRESHOLD_DEGREES,\n): Result<MeshAsset, AssetError> {\n  const prepared = prepare(source, thresholdAngleDegrees);\n  if (!prepared.ok) return prepared;\n  const edges = collectSurfaceEdges(prepared.value.triangles).filter((edge) =>\n    keepSurfaceEdge(edge, thresholdAngleDegrees),\n  );\n  return lineMesh(edges.map(({ a, b }) => ({ a, b })));\n}\n","import { ASSET_ERROR_HINTS, AssetError, err, ok, type Result } from '@forgeax/engine-types';\nimport earcut from 'earcut';\nimport type { Vec2Point } from './procedural';\n\nexport interface PolygonShape {\n  readonly contour: readonly Vec2Point[];\n  readonly holes?: readonly (readonly Vec2Point[])[];\n}\n\nexport function geometryError(field: string, reason: string): AssetError {\n  return new AssetError({\n    code: 'asset-parse-failed',\n    expected: `valid procedural ${field}`,\n    hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n    detail: { field, value: reason, reason },\n  });\n}\nexport function area(points: readonly Vec2Point[]): number {\n  return (\n    points.reduce((sum, a, i) => {\n      const b = points[(i + 1) % points.length] as Vec2Point;\n      return sum + a.x * b.y - b.x * a.y;\n    }, 0) / 2\n  );\n}\nconst cross = (a: Vec2Point, b: Vec2Point, c: Vec2Point) =>\n  (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);\nfunction on(a: Vec2Point, b: Vec2Point, p: Vec2Point): boolean {\n  return (\n    cross(a, b, p) === 0 &&\n    p.x >= Math.min(a.x, b.x) &&\n    p.x <= Math.max(a.x, b.x) &&\n    p.y >= Math.min(a.y, b.y) &&\n    p.y <= Math.max(a.y, b.y)\n  );\n}\nfunction intersects(a: Vec2Point, b: Vec2Point, c: Vec2Point, d: Vec2Point): boolean {\n  if (\n    Math.max(a.x, b.x) < Math.min(c.x, d.x) ||\n    Math.max(c.x, d.x) < Math.min(a.x, b.x) ||\n    Math.max(a.y, b.y) < Math.min(c.y, d.y) ||\n    Math.max(c.y, d.y) < Math.min(a.y, b.y)\n  )\n    return false;\n  return (\n    on(a, b, c) ||\n    on(a, b, d) ||\n    on(c, d, a) ||\n    on(c, d, b) ||\n    (cross(a, b, c) > 0 !== cross(a, b, d) > 0 && cross(c, d, a) > 0 !== cross(c, d, b) > 0)\n  );\n}\nexport function contains(loop: readonly Vec2Point[], p: Vec2Point): boolean {\n  let inside = false;\n  for (let i = 0, j = loop.length - 1; i < loop.length; j = i++) {\n    const a = loop[i] as Vec2Point,\n      b = loop[j] as Vec2Point;\n    if (on(a, b, p)) return false;\n    if (a.y > p.y !== b.y > p.y && p.x < ((b.x - a.x) * (p.y - a.y)) / (b.y - a.y) + a.x)\n      inside = !inside;\n  }\n  return inside;\n}\n/** Copy and orient material on the left: outer CCW, holes CW. No input mutation. */\nexport function preparePolygon(shape: PolygonShape): Result<Vec2Point[][], AssetError> {\n  const input = [shape.contour, ...(shape.holes ?? [])];\n  if (input.reduce((n, loop) => n + loop.length, 0) > 4096)\n    return err(geometryError('contour', 'at most 4096 total contour points'));\n  const loops: Vec2Point[][] = [];\n  for (const [index, source] of input.entries()) {\n    const loop = source.map((p) => ({ x: p.x, y: p.y }));\n    if (loop.length > 1 && loop[0]?.x === loop.at(-1)?.x && loop[0]?.y === loop.at(-1)?.y)\n      loop.pop();\n    if (loop.length < 3 || loop.some((p) => !Number.isFinite(p.x) || !Number.isFinite(p.y)))\n      return err(geometryError('contour', 'needs at least three finite points'));\n    for (let i = 0; i < loop.length; i++) {\n      const a = loop[i] as Vec2Point,\n        b = loop[(i + 1) % loop.length] as Vec2Point;\n      if (a.x === b.x && a.y === b.y)\n        return err(geometryError('contour', 'repeated adjacent point'));\n    }\n    // Earcut drops collinear boundary vertices. Remove them once here so caps\n    // and walls retain the same boundary topology; reject backtracking edges.\n    for (let i = 0; i < loop.length; i++) {\n      const a = loop[(i + loop.length - 1) % loop.length] as Vec2Point;\n      const b = loop[i] as Vec2Point,\n        c = loop[(i + 1) % loop.length] as Vec2Point;\n      if (cross(a, b, c) !== 0) continue;\n      if ((b.x - a.x) * (c.x - b.x) + (b.y - a.y) * (c.y - b.y) <= 0)\n        return err(geometryError('contour', 'boundary edges must not backtrack'));\n      if (loop.length > 3) {\n        loop.splice(i, 1);\n        i = -1;\n      }\n    }\n    if (area(loop) === 0) return err(geometryError('contour', 'area must be non-zero'));\n    for (let i = 0; i < loop.length; i++) {\n      const a = loop[i] as Vec2Point,\n        b = loop[(i + 1) % loop.length] as Vec2Point;\n      for (let j = i + 1; j < loop.length; j++) {\n        if (j === i + 1 || (j + 1) % loop.length === i) continue;\n        if (intersects(a, b, loop[j] as Vec2Point, loop[(j + 1) % loop.length] as Vec2Point))\n          return err(geometryError('contour', 'must not self-intersect'));\n      }\n    }\n    if (area(loop) > 0 !== (index === 0)) loop.reverse();\n    loops.push(loop);\n  }\n  for (let i = 1; i < loops.length; i++) {\n    const hole = loops[i] as Vec2Point[];\n    if (!contains(loops[0] as Vec2Point[], hole[0] as Vec2Point))\n      return err(geometryError('holes', 'holes must lie strictly inside contour'));\n    for (let j = 0; j < i; j++) {\n      const other = loops[j] as Vec2Point[];\n      if (j > 0 && (contains(other, hole[0] as Vec2Point) || contains(hole, other[0] as Vec2Point)))\n        return err(geometryError('holes', 'nested holes are not a material domain'));\n      for (let a = 0; a < hole.length; a++)\n        for (let b = 0; b < other.length; b++)\n          if (\n            intersects(\n              hole[a] as Vec2Point,\n              hole[(a + 1) % hole.length] as Vec2Point,\n              other[b] as Vec2Point,\n              other[(b + 1) % other.length] as Vec2Point,\n            )\n          )\n            return err(geometryError('holes', 'boundaries must not touch or intersect'));\n    }\n  }\n  return ok(loops);\n}\nexport function triangulatePolygon(\n  loops: readonly (readonly Vec2Point[])[],\n): Result<number[], AssetError> {\n  const flat: number[] = [],\n    holes: number[] = [];\n  for (const [index, loop] of loops.entries()) {\n    if (index > 0) holes.push(flat.length / 2);\n    for (const p of loop) flat.push(p.x, p.y);\n  }\n  const triangles = earcut(flat, holes, 2);\n  const expected = loops.reduce((sum, loop) => sum + area(loop), 0);\n  let actual = 0;\n  for (let i = 0; i < triangles.length; i += 3) {\n    const a = (triangles[i] as number) * 2,\n      b = (triangles[i + 1] as number) * 2,\n      c = (triangles[i + 2] as number) * 2;\n    actual +=\n      (((flat[b] as number) - (flat[a] as number)) *\n        ((flat[c + 1] as number) - (flat[a + 1] as number))) /\n        2 -\n      (((flat[b + 1] as number) - (flat[a + 1] as number)) *\n        ((flat[c] as number) - (flat[a] as number))) /\n        2;\n  }\n  if (!(expected > 0) || !Number.isFinite(actual) || Math.abs(actual - expected) > expected * 1e-8)\n    return err(geometryError('contour', 'triangulation must cover the complete material domain'));\n  return ok(triangles);\n}\n\n/** Inset offset-line intersections. Refuse topology changes rather than clipping silently. */\nexport function insetPolygon(\n  loops: Vec2Point[][],\n  distance: number,\n): Result<Vec2Point[][], AssetError> {\n  const offset = loops.map((loop) =>\n    loop.map((p, i) => {\n      const a = loop[(i + loop.length - 1) % loop.length] as Vec2Point;\n      const b = loop[(i + 1) % loop.length] as Vec2Point;\n      const la = Math.hypot(p.x - a.x, p.y - a.y),\n        lb = Math.hypot(b.x - p.x, b.y - p.y);\n      const nx = -(p.y - a.y) / la,\n        ny = (p.x - a.x) / la;\n      const mx = -(b.y - p.y) / lb,\n        my = (b.x - p.x) / lb;\n      const denominator = 1 + nx * mx + ny * my;\n      return {\n        x: p.x + (distance * (nx + mx)) / denominator,\n        y: p.y + (distance * (ny + my)) / denominator,\n      };\n    }),\n  );\n  for (let l = 0; l < loops.length; l++) {\n    const old = loops[l] as Vec2Point[],\n      next = offset[l] as Vec2Point[];\n    for (let i = 0; i < old.length; i++) {\n      const a = old[i] as Vec2Point,\n        b = old[(i + 1) % old.length] as Vec2Point;\n      const c = next[i] as Vec2Point,\n        d = next[(i + 1) % old.length] as Vec2Point;\n      if ((b.x - a.x) * (d.x - c.x) + (b.y - a.y) * (d.y - c.y) <= 0)\n        return err(geometryError('bevel', 'offset collapses a contour edge'));\n    }\n  }\n  const prepared = preparePolygon({ contour: offset[0] as Vec2Point[], holes: offset.slice(1) });\n  if (!prepared.ok) return prepared;\n  if (prepared.value.some((loop, i) => loop.length !== loops[i]?.length))\n    return err(geometryError('bevel', 'offset changes contour topology'));\n  return prepared;\n}\n","import type { AssetError, MeshAsset, Result } from '@forgeax/engine-types';\nimport { err } from '@forgeax/engine-types';\nimport { meshFromInterleaved } from './box';\nimport { geometryError, triangulatePolygon } from './contour';\nimport type { Vec2Point, Vec3Point } from './procedural';\n\nexport interface PolygonRing {\n  readonly v: number;\n  readonly points: readonly Vec3Point[];\n  readonly section: readonly (readonly Vec2Point[])[];\n}\nconst sub = (a: Vec3Point, b: Vec3Point): Vec3Point => [a[0] - b[0], a[1] - b[1], a[2] - b[2]];\nexport const cross3 = (a: Vec3Point, b: Vec3Point): Vec3Point => [\n  a[1] * b[2] - a[2] * b[1],\n  a[2] * b[0] - a[0] * b[2],\n  a[0] * b[1] - a[1] * b[0],\n];\nexport function unit3(a: Vec3Point): Vec3Point {\n  const length = Math.hypot(...a);\n  return [a[0] / length, a[1] / length, a[2] / length];\n}\n\n/** Triangle wall strips and independent cap normals, sharing canonical mesh preparation. */\nexport function polygonMesh(\n  rings: readonly PolygonRing[],\n  capped: boolean,\n): Result<MeshAsset, AssetError> {\n  const first = rings[0];\n  if (!first || first.points.length * rings.length > 262144)\n    return err(geometryError('mesh', 'at most 262144 ring vertices'));\n  const vertices: number[] = [],\n    indices: number[] = [];\n  const vertex = (p: Vec3Point, n: Vec3Point, u: number, v: number) => {\n    const index = vertices.length / 8;\n    vertices.push(p[0], p[1], p[2], n[0], n[1], n[2], u, v);\n    return index;\n  };\n  for (let row = 0; row < rings.length - 1; row++) {\n    const lower = rings[row] as PolygonRing,\n      upper = rings[row + 1] as PolygonRing;\n    let base = 0;\n    for (const loop of lower.section) {\n      let distance = 0;\n      const perimeter = loop.reduce((sum, p, i) => {\n        const q = loop[(i + 1) % loop.length] as Vec2Point;\n        return sum + Math.hypot(q.x - p.x, q.y - p.y);\n      }, 0);\n      for (let i = 0; i < loop.length; i++) {\n        const j = (i + 1) % loop.length;\n        const a = lower.points[base + i] as Vec3Point,\n          b = lower.points[base + j] as Vec3Point;\n        const c = upper.points[base + j] as Vec3Point,\n          d = upper.points[base + i] as Vec3Point;\n        const n1 = cross3(sub(b, a), sub(c, a)),\n          n2 = cross3(sub(c, a), sub(d, a));\n        if (!(Math.hypot(...n1) > 0) || !(Math.hypot(...n2) > 0))\n          return err(geometryError('mesh', 'collapsed wall triangle'));\n        // Each triangle retains its geometric normal, including non-planar path quads.\n        const edge = Math.hypot(b[0] - a[0], b[1] - a[1], b[2] - a[2]);\n        const u = distance / perimeter,\n          v = (distance + edge) / perimeter;\n        const t = lower.v,\n          s = upper.v;\n        const normal1 = unit3(n1),\n          normal2 = unit3(n2);\n        indices.push(\n          vertex(a, normal1, u, t),\n          vertex(b, normal1, v, t),\n          vertex(c, normal1, v, s),\n          vertex(a, normal2, u, t),\n          vertex(c, normal2, v, s),\n          vertex(d, normal2, u, s),\n        );\n        distance += edge;\n      }\n      base += loop.length;\n    }\n  }\n  if (capped)\n    for (const [end, ring] of [\n      [false, first],\n      [true, rings.at(-1) as PolygonRing],\n    ] as const) {\n      const triangulated = triangulatePolygon(ring.section);\n      if (!triangulated.ok) return triangulated;\n      const triangles = triangulated.value,\n        flat = ring.section.flat();\n      for (let i = 0; i < triangles.length; i += 3) {\n        const order = triangles.slice(i, i + 3);\n        if (!end) order.reverse();\n        const p = order.map((index) => ring.points[index] as Vec3Point);\n        const n = unit3(\n          cross3(\n            sub(p[1] as Vec3Point, p[0] as Vec3Point),\n            sub(p[2] as Vec3Point, p[0] as Vec3Point),\n          ),\n        );\n        for (const index of order) {\n          const uv = flat[index] as Vec2Point;\n          indices.push(vertex(ring.points[index] as Vec3Point, n, uv.x, uv.y));\n        }\n      }\n    }\n  const packed = new Float32Array(vertices);\n  for (let i = 0; i < indices.length; i += 3) {\n    const a = (indices[i] as number) * 8,\n      b = (indices[i + 1] as number) * 8,\n      c = (indices[i + 2] as number) * 8;\n    const abx = (packed[b] as number) - (packed[a] as number),\n      aby = (packed[b + 1] as number) - (packed[a + 1] as number),\n      abz = (packed[b + 2] as number) - (packed[a + 2] as number);\n    const acx = (packed[c] as number) - (packed[a] as number),\n      acy = (packed[c + 1] as number) - (packed[a + 1] as number),\n      acz = (packed[c + 2] as number) - (packed[a + 2] as number);\n    const nx = aby * acz - abz * acy,\n      ny = abz * acx - abx * acz,\n      nz = abx * acy - aby * acx;\n    const size = Math.hypot(nx, ny, nz);\n    if (\n      !Number.isFinite(size) ||\n      size === 0 ||\n      nx * (packed[a + 3] as number) +\n        ny * (packed[a + 4] as number) +\n        nz * (packed[a + 5] as number) <=\n        0\n    )\n      return err(geometryError('mesh', 'triangle collapses, reverses or overflows in f32'));\n  }\n  return meshFromInterleaved(packed, new Uint32Array(indices));\n}\n","import { type AssetError, err, type MeshAsset, type Result } from '@forgeax/engine-types';\nimport { geometryError, insetPolygon, preparePolygon } from './contour';\nimport { type PolygonRing, polygonMesh } from './polygon-mesh';\nimport type { Vec2Point, Vec3Point } from './procedural';\n\nexport interface ExtrusionOptions {\n  readonly holes?: readonly (readonly Vec2Point[])[];\n  /** Rim inset and axial depth, in source units. Zero disables bevel. */\n  readonly bevelSize?: number;\n  /** One is a chamfer; additional layers approximate a quarter-circle. */\n  readonly bevelSegments?: number;\n}\nexport function createExtrusionGeometry(\n  contour: readonly Vec2Point[],\n  depth: number,\n  options: ExtrusionOptions = {},\n): Result<MeshAsset, AssetError> {\n  if (!Number.isFinite(depth) || depth <= 0)\n    return err(geometryError('depth', 'must be positive and finite'));\n  const shape = preparePolygon({ contour, holes: options.holes ?? [] });\n  if (!shape.ok) return shape;\n  const bevel = options.bevelSize ?? 0,\n    segments = options.bevelSegments ?? 1;\n  if (\n    !Number.isFinite(bevel) ||\n    bevel < 0 ||\n    bevel >= depth / 2 ||\n    !Number.isSafeInteger(segments) ||\n    segments < 1 ||\n    segments > 64\n  )\n    return err(\n      geometryError('bevel', 'size must be non-negative and less than half depth; segments 1..64'),\n    );\n  const loops = shape.value;\n  if (loops.flat().length * (bevel === 0 ? 2 : 2 * (segments + 1)) > 262144)\n    return err(geometryError('mesh', 'at most 262144 ring vertices'));\n  const rings: PolygonRing[] = [];\n  const add = (section: Vec2Point[][], z: number) =>\n    rings.push({\n      v: (z + depth / 2) / depth,\n      section,\n      points: section.flat().map((p): Vec3Point => [p.x, p.y, z]),\n    });\n  if (bevel === 0) {\n    add(loops, -depth / 2);\n    add(loops, depth / 2);\n  } else {\n    for (const upper of [false, true])\n      for (let i = 0; i <= segments; i++) {\n        const angle = ((upper ? i / segments : 1 - i / segments) * Math.PI) / 2;\n        const inset = bevel * (1 - Math.cos(angle));\n        const section = inset === 0 ? shape : insetPolygon(loops, inset);\n        if (!section.ok) return section;\n        const z = (depth / 2 - bevel + bevel * Math.sin(angle)) * (upper ? 1 : -1);\n        add(section.value, z);\n      }\n  }\n  return polygonMesh(rings, true);\n}\n","import type { MeshAsset as TypesMeshAsset } from '@forgeax/engine-types';\n\n/**\n * Compute the local-space AABB of a mesh from its position attribute.\n *\n * Reads every third float from the position buffer as (x, y, z) and computes\n * [minX, minY, minZ, maxX, maxY, maxZ]. When position is absent, empty, or\n * less than 3 floats, returns an inverted-infinity empty box ([+Inf,+Inf,+Inf,\n * -Inf,-Inf,-Inf]) — consumers interpret this as \"always-visible\" (no culling).\n *\n * The position attribute can be Float32Array, ArrayBuffer (re-wrapped as\n * Float32Array), or Uint16Array (unlikely for position data; treated as\n * absent). Empty vertices (0 x 12 = 0) also produce empty box.\n *\n * Anchors: plan-strategy D-7 (register-time computation); D-1 (Float32Array\n * bare type); requirements AC-02 (empty -> inverted-infinity).\n */\nfunction computeAABB(asset: TypesMeshAsset): Float32Array {\n  const pos = asset.attributes.position;\n  // Convert to Float32Array if possible; bail to empty-box otherwise.\n  let floatPos: Float32Array;\n  if (pos instanceof Float32Array) {\n    floatPos = pos;\n  } else if (pos instanceof ArrayBuffer) {\n    floatPos = new Float32Array(pos);\n  } else {\n    return emptyBox();\n  }\n  if (floatPos.length < 3) return emptyBox();\n\n  let minX = floatPos[0] ?? 0;\n  let minY = floatPos[1] ?? 0;\n  let minZ = floatPos[2] ?? 0;\n  let maxX = minX;\n  let maxY = minY;\n  let maxZ = minZ;\n  for (let i = 3; i < floatPos.length; i += 3) {\n    const x = floatPos[i] ?? 0;\n    const y = floatPos[i + 1] ?? 0;\n    const z = floatPos[i + 2] ?? 0;\n    if (x < minX) minX = x;\n    if (y < minY) minY = y;\n    if (z < minZ) minZ = z;\n    if (x > maxX) maxX = x;\n    if (y > maxY) maxY = y;\n    if (z > maxZ) maxZ = z;\n  }\n  return Float32Array.of(minX, minY, minZ, maxX, maxY, maxZ);\n}\n\nfunction emptyBox(): Float32Array {\n  return Float32Array.of(Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity);\n}\n\nfunction hasPositionData(position: unknown): boolean {\n  if (position instanceof Float32Array) return position.length >= 3;\n  return (\n    position instanceof ArrayBuffer && position.byteLength >= 3 * Float32Array.BYTES_PER_ELEMENT\n  );\n}\n\nfunction isFiniteAabb(aabb: unknown): aabb is Float32Array {\n  if (!(aabb instanceof Float32Array) || aabb.length !== 6) return false;\n  for (const value of aabb) {\n    if (!Number.isFinite(value)) return false;\n  }\n  const minX = aabb[0];\n  const minY = aabb[1];\n  const minZ = aabb[2];\n  const maxX = aabb[3];\n  const maxY = aabb[4];\n  const maxZ = aabb[5];\n  return (\n    minX !== undefined &&\n    minY !== undefined &&\n    minZ !== undefined &&\n    maxX !== undefined &&\n    maxY !== undefined &&\n    maxZ !== undefined &&\n    minX <= maxX &&\n    minY <= maxY &&\n    minZ <= maxZ\n  );\n}\n\n// Assigns the computed AABB to the mesh in place when the object is\n// extensible; falls back to a shallow copy when frozen / sealed (e.g.\n// BUILTIN_CUBE / BUILTIN_TRIANGLE / BUILTIN_QUAD reused via registerWithGuid).\nexport function withMeshAabb(asset: TypesMeshAsset): TypesMeshAsset {\n  // Packed mesh binaries intentionally omit `attributes.position`; their\n  // producer-computed AABB is the only available culling fact. Preserve it\n  // instead of replacing it with the empty-box result from computeAABB().\n  if (!hasPositionData(asset.attributes.position) && isFiniteAabb(asset.aabb)) {\n    return asset;\n  }\n  const aabb = computeAABB(asset);\n  // The producer envelope may include shader deformation beyond position data.\n  if (isFiniteAabb(asset.aabb) && isFiniteAabb(aabb)) {\n    for (let axis = 0; axis < 3; axis += 1) {\n      aabb[axis] = Math.min(aabb[axis] ?? Infinity, asset.aabb[axis] ?? Infinity);\n      aabb[axis + 3] = Math.max(aabb[axis + 3] ?? -Infinity, asset.aabb[axis + 3] ?? -Infinity);\n    }\n  }\n  if (Object.isExtensible(asset)) {\n    (asset as { aabb: Float32Array }).aabb = aabb;\n    return asset;\n  }\n  return { ...asset, aabb };\n}\n","import { box3 } from '@forgeax/engine-math';\nimport {\n  ASSET_ERROR_HINTS,\n  AssetError,\n  err,\n  isStripTopology,\n  type MeshAsset,\n  type MeshMaterialSlot,\n  ok,\n  type PrimitiveTopology,\n  type Result,\n  type Submesh,\n  type VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport {\n  deriveVertexLayoutProjection,\n  packInterleavedVertexAttributes,\n  type VertexLayoutProjectionAttribute,\n} from './vertex-attribute-layout';\n\ntype AttributeKey = VertexLayoutProjectionAttribute['key'];\ntype AttributeSource = NonNullable<VertexAttributeMap[AttributeKey]>;\ntype AttributeView = Float32Array | Uint16Array;\n\nconst TOPOLOGIES: readonly PrimitiveTopology[] = [\n  'point-list',\n  'line-list',\n  'line-strip',\n  'triangle-list',\n  'triangle-strip',\n];\n\n/** Input shape for one independently drawn submesh. */\nexport type MeshBuilderSubmesh = Partial<Submesh> & {\n  readonly topology?: PrimitiveTopology;\n};\n\n/** All authoring facts accepted by {@link createMeshBuilder}. */\nexport interface MeshBuilderOptions {\n  readonly attributes?: VertexAttributeMap;\n  readonly indices?: ArrayLike<number>;\n  readonly submeshes?: readonly MeshBuilderSubmesh[];\n  readonly materialSlots?: readonly MeshMaterialSlot[];\n}\n\nexport interface MeshBuilder {\n  /** Append one equally-cardinal attribute batch to the accumulated source. */\n  appendVertices(attributes: VertexAttributeMap): Result<void, AssetError>;\n  /** Append raw index values; width is derived during build. */\n  appendIndices(indices: ArrayLike<number>): Result<void, AssetError>;\n  /** Add a draw range; omitted ranges are completed from the final source. */\n  addSubmesh(submesh: MeshBuilderSubmesh): Result<void, AssetError>;\n  /** Derive one immutable MeshAsset from the accumulated source. */\n  build(): Result<MeshAsset, AssetError>;\n}\n\nfunction failure(field: string, value: unknown, reason: string): Result<never, AssetError> {\n  return err(\n    new AssetError({\n      code: 'asset-invalid-value',\n      expected: `valid MeshBuilder ${field}: ${reason}`,\n      hint: ASSET_ERROR_HINTS['asset-invalid-value'],\n      detail: { field, value, reason },\n    }),\n  );\n}\n\nfunction sourceView(key: AttributeKey, value: AttributeSource): AttributeView | undefined {\n  if (key === 'skinIndex') {\n    if (value instanceof Uint16Array) return value;\n    if (value instanceof ArrayBuffer && value.byteLength % Uint16Array.BYTES_PER_ELEMENT === 0) {\n      return new Uint16Array(value);\n    }\n    return undefined;\n  }\n  if (value instanceof Float32Array) return value;\n  if (value instanceof ArrayBuffer && value.byteLength % Float32Array.BYTES_PER_ELEMENT === 0) {\n    return new Float32Array(value);\n  }\n  return undefined;\n}\n\nfunction cloneAttribute(key: AttributeKey, value: AttributeSource): AttributeView | undefined {\n  const view = sourceView(key, value);\n  if (view === undefined) return undefined;\n  return view.slice();\n}\n\nfunction attributeKeys(attributes: VertexAttributeMap): AttributeKey[] {\n  return deriveVertexLayoutProjection(attributes).attributes.map((attribute) => attribute.key);\n}\n\nfunction appendArray(target: AttributeView, source: AttributeView): AttributeView {\n  if (target instanceof Uint16Array && source instanceof Uint16Array) {\n    const output = new Uint16Array(target.length + source.length);\n    output.set(target, 0);\n    output.set(source, target.length);\n    return output;\n  }\n  if (target instanceof Float32Array && source instanceof Float32Array) {\n    const output = new Float32Array(target.length + source.length);\n    output.set(target, 0);\n    output.set(source, target.length);\n    return output;\n  }\n  // The caller groups batches by canonical key, so this branch only protects\n  // against an internally inconsistent future storage change.\n  return target;\n}\n\nfunction copySlots(slots: readonly MeshMaterialSlot[] | undefined): MeshMaterialSlot[] {\n  return (slots ?? [{ slotName: 'Default' }]).map((slot) => ({\n    slotName: slot.slotName,\n    ...(slot.sourceKey === undefined ? {} : { sourceKey: slot.sourceKey }),\n    ...(slot.defaultMaterial === undefined ? {} : { defaultMaterial: slot.defaultMaterial }),\n  }));\n}\n\nfunction validateAttributeBatch(\n  attributes: VertexAttributeMap,\n): Result<{ readonly keys: readonly AttributeKey[]; readonly vertexCount: number }, AssetError> {\n  const keys = attributeKeys(attributes);\n  if (keys.length === 0)\n    return failure('attributes', [], 'at least one canonical attribute is required');\n  const position = attributes.position;\n  if (position === undefined)\n    return failure('attributes.position', undefined, 'position is required');\n  const positionView = sourceView('position', position);\n  if (positionView === undefined) {\n    return failure(\n      'attributes.position',\n      typeof position,\n      'position must use Float32Array or ArrayBuffer',\n    );\n  }\n  if (positionView.length === 0 || positionView.length % 3 !== 0) {\n    return failure(\n      'attributes.position',\n      positionView.length,\n      'position cardinality must be a non-zero multiple of 3',\n    );\n  }\n  const vertexCount = positionView.length / 3;\n  for (const { key, byteLength, format } of deriveVertexLayoutProjection(attributes).attributes) {\n    const value = attributes[key];\n    if (value === undefined) continue;\n    const view = sourceView(key, value);\n    if (view === undefined) {\n      return failure(\n        key,\n        typeof value,\n        key === 'skinIndex' ? 'storage must be Uint16Array' : 'storage must be Float32Array',\n      );\n    }\n    const expectedLength = vertexCount * (byteLength / (format === 'uint16x4' ? 2 : 4));\n    if (view.length !== expectedLength) {\n      return failure(key, view.length, `cardinality must be ${expectedLength}`);\n    }\n    for (let elementIndex = 0; elementIndex < view.length; elementIndex += 1) {\n      const valueAt = view[elementIndex];\n      if (valueAt === undefined || !Number.isFinite(valueAt)) {\n        return failure(key, valueAt, `${key}[${elementIndex}] must be finite`);\n      }\n      if (key === 'skinIndex' && (!Number.isInteger(valueAt) || valueAt < 0 || valueAt > 0xffff)) {\n        return failure(key, valueAt, `${key}[${elementIndex}] must be an integer in [0, 65535]`);\n      }\n    }\n  }\n  return ok({ keys, vertexCount });\n}\n\nfunction validateSlots(slots: readonly MeshMaterialSlot[]): Result<void, AssetError> {\n  if (slots.length === 0)\n    return failure('materialSlots', slots.length, 'at least one material slot is required');\n  const names = new Set<string>();\n  for (let index = 0; index < slots.length; index += 1) {\n    const slot = slots[index];\n    const name = slot?.slotName.trim() ?? '';\n    if (name.length === 0 || names.has(name)) {\n      return failure(`materialSlots[${index}].slotName`, name, 'must be non-empty and unique');\n    }\n    names.add(name);\n  }\n  return ok(undefined);\n}\n\nfunction completedSubmeshes(\n  requested: readonly MeshBuilderSubmesh[],\n  vertexCount: number,\n  indexCount: number,\n  materialSlotCount: number,\n): Result<readonly Submesh[], AssetError> {\n  const source =\n    requested.length === 0\n      ? [\n          {\n            indexOffset: 0,\n            indexCount,\n            vertexCount,\n            topology: 'triangle-list' as const,\n            materialSlot: 0,\n          },\n        ]\n      : requested;\n  const output: Submesh[] = [];\n  for (let index = 0; index < source.length; index += 1) {\n    const candidate = source[index];\n    if (candidate === undefined)\n      return failure(`submeshes[${index}]`, undefined, 'entry is required');\n    const indexOffset = candidate.indexOffset ?? 0;\n    const submeshIndexCount = candidate.indexCount ?? (indexCount > 0 ? indexCount : 0);\n    const submeshVertexCount = candidate.vertexCount ?? vertexCount;\n    const topology = candidate.topology ?? 'triangle-list';\n    const materialSlot = candidate.materialSlot ?? index;\n    if (!TOPOLOGIES.includes(topology)) {\n      return failure(\n        `submeshes[${index}].topology`,\n        topology,\n        'must be a WebGPU primitive topology',\n      );\n    }\n    if (\n      !Number.isInteger(indexOffset) ||\n      indexOffset < 0 ||\n      !Number.isInteger(submeshIndexCount) ||\n      submeshIndexCount < 0 ||\n      !Number.isInteger(submeshVertexCount) ||\n      submeshVertexCount < 0 ||\n      submeshVertexCount > vertexCount ||\n      !Number.isInteger(materialSlot) ||\n      materialSlot < 0 ||\n      materialSlot >= materialSlotCount\n    ) {\n      return failure(\n        `submeshes[${index}]`,\n        JSON.stringify(candidate),\n        'range and material slot are invalid',\n      );\n    }\n    if (indexCount === 0 && (indexOffset !== 0 || submeshIndexCount !== 0)) {\n      return failure(\n        `submeshes[${index}]`,\n        JSON.stringify(candidate),\n        'non-indexed meshes use indexOffset=0 and indexCount=0',\n      );\n    }\n    if (indexCount > 0 && indexOffset + submeshIndexCount > indexCount) {\n      return failure(\n        `submeshes[${index}]`,\n        JSON.stringify(candidate),\n        'index range exceeds the accumulated index buffer',\n      );\n    }\n    if (indexCount === 0 && isStripTopology(topology)) {\n      return failure(\n        `submeshes[${index}].topology`,\n        topology,\n        'strip topology requires an index buffer',\n      );\n    }\n    output.push({\n      indexOffset,\n      indexCount: submeshIndexCount,\n      vertexCount: submeshVertexCount,\n      topology,\n      materialSlot,\n    });\n  }\n  return ok(Object.freeze(output));\n}\n\n/**\n * Create a geometry-owned builder. All derived facts are computed once in\n * `build()` from the accumulated canonical attribute source.\n */\nexport function createMeshBuilder(options: MeshBuilderOptions = {}): MeshBuilder {\n  const attributes: Partial<Record<AttributeKey, AttributeView>> = {};\n  const indices: number[] = [];\n  const submeshes: MeshBuilderSubmesh[] = [];\n  const materialSlots = copySlots(options.materialSlots);\n\n  const appendVertices = (batch: VertexAttributeMap): Result<void, AssetError> => {\n    const checked = validateAttributeBatch(batch);\n    if (!checked.ok) return checked;\n    const incomingKeys = checked.value.keys;\n    const existingKeys = Object.keys(attributes);\n    if (existingKeys.length > 0 && existingKeys.join('|') !== incomingKeys.join('|')) {\n      return failure(\n        'attributes',\n        incomingKeys.join(','),\n        'every appended batch must carry the same canonical keys',\n      );\n    }\n    for (const key of incomingKeys) {\n      const value = batch[key];\n      if (value === undefined) continue;\n      const cloned = cloneAttribute(key, value);\n      if (cloned === undefined) return failure(key, typeof value, 'storage could not be cloned');\n      const previous = attributes[key];\n      attributes[key] = previous === undefined ? cloned : appendArray(previous, cloned);\n    }\n    return ok(undefined);\n  };\n\n  const appendIndices = (batch: ArrayLike<number>): Result<void, AssetError> => {\n    for (let index = 0; index < batch.length; index += 1) {\n      const value = Number(batch[index]);\n      if (!Number.isInteger(value) || value < 0 || value > 0xffffffff) {\n        return failure('indices', value, `indices[${index}] must be an integer in [0, 2^32-1]`);\n      }\n      indices.push(value);\n    }\n    return ok(undefined);\n  };\n\n  const addSubmesh = (submesh: MeshBuilderSubmesh): Result<void, AssetError> => {\n    if (submesh === null || typeof submesh !== 'object') {\n      return failure('submeshes', submesh, 'entry must be an object');\n    }\n    submeshes.push({ ...submesh });\n    return ok(undefined);\n  };\n\n  const build = (): Result<MeshAsset, AssetError> => {\n    const source = attributes as VertexAttributeMap;\n    const checked = validateAttributeBatch(source);\n    if (!checked.ok) return checked;\n    const slotCheck = validateSlots(materialSlots);\n    if (!slotCheck.ok) return slotCheck;\n    const vertexCount = checked.value.vertexCount;\n    const position = source.position;\n    if (position === undefined)\n      return failure('attributes.position', undefined, 'position is required');\n    const positionView = sourceView('position', position);\n    if (!(positionView instanceof Float32Array)) {\n      return failure('attributes.position', typeof position, 'position storage is invalid');\n    }\n\n    let maxIndex = 0;\n    for (const value of indices) maxIndex = Math.max(maxIndex, value);\n    const indexArray =\n      indices.length === 0\n        ? undefined\n        : maxIndex <= 0xffff\n          ? new Uint16Array(indices)\n          : new Uint32Array(indices);\n    if (indexArray !== undefined) {\n      for (let index = 0; index < indexArray.length; index += 1) {\n        const value = indexArray[index];\n        if (value === undefined || value >= vertexCount) {\n          return failure(\n            'indices',\n            value ?? -1,\n            `indices[${index}] must be less than vertexCount (${vertexCount})`,\n          );\n        }\n      }\n    }\n\n    const packed = packInterleavedVertexAttributes(source, vertexCount);\n    if (!packed.ok) return packed;\n    const ranges = completedSubmeshes(\n      submeshes,\n      vertexCount,\n      indexArray?.length ?? 0,\n      materialSlots.length,\n    );\n    if (!ranges.ok) return ranges;\n    const aabb = box3.fromPositions(box3.create(), positionView);\n    const copiedAttributes: VertexAttributeMap = {};\n    for (const key of checked.value.keys) {\n      const value = source[key];\n      if (value === undefined) continue;\n      const cloned = cloneAttribute(key, value);\n      if (cloned === undefined) return failure(key, typeof value, 'storage could not be cloned');\n      if (key === 'skinIndex') {\n        if (!(cloned instanceof Uint16Array)) {\n          return failure(key, typeof value, 'skinIndex storage must be Uint16Array');\n        }\n        copiedAttributes.skinIndex = cloned;\n      } else {\n        if (!(cloned instanceof Float32Array)) {\n          return failure(key, typeof value, `${key} storage must be Float32Array`);\n        }\n        copiedAttributes[key] = cloned;\n      }\n    }\n    const mesh: MeshAsset = {\n      kind: 'mesh',\n      vertices: packed.value.vertices.slice(),\n      ...(indexArray === undefined ? {} : { indices: indexArray.slice() }),\n      attributes: copiedAttributes,\n      aabb: Float32Array.from(aabb),\n      submeshes: ranges.value,\n      materialSlots: Object.freeze(materialSlots.map((slot) => ({ ...slot }))),\n    };\n    return ok(Object.freeze(mesh));\n  };\n\n  if (options.attributes !== undefined) {\n    const result = appendVertices(options.attributes);\n    if (!result.ok) {\n      // Keep construction side-effect free; the structured error is surfaced\n      // by build() because the builder itself intentionally has no throw path.\n      const constructionError = result.error;\n      return {\n        appendVertices,\n        appendIndices,\n        addSubmesh,\n        build: () => err(constructionError),\n      };\n    }\n  }\n  if (options.indices !== undefined) {\n    const result = appendIndices(options.indices);\n    if (!result.ok) {\n      const constructionError = result.error;\n      return {\n        appendVertices,\n        appendIndices,\n        addSubmesh,\n        build: () => err(constructionError),\n      };\n    }\n  }\n  for (const submesh of options.submeshes ?? []) submeshes.push({ ...submesh });\n  return { appendVertices, appendIndices, addSubmesh, build };\n}\n","import { AssetGuid } from '@forgeax/engine-pack/guid';\nimport {\n  MESH_BIN_HEADER_BYTES,\n  MESH_BIN_MORPH_CHANNELS,\n  type MeshBinContractError,\n  type MeshBinHeader,\n  writeMeshBinHeader,\n} from '@forgeax/engine-pack/mesh-bin-contract';\nimport {\n  err,\n  type MeshAsset,\n  ok,\n  type Result,\n  type VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { admitsMeshCardLayout, validateMeshCardLayout } from './mesh-card-artifact';\nimport { validateMeshCollisionAttachment } from './mesh-collision';\nimport { deriveVertexLayoutProjection } from './vertex-attribute-layout.js';\n\nconst nativeLittleEndian = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n\ntype MeshPayloadIn = { readonly [Key in keyof MeshAsset]?: MeshAsset[Key] | undefined } & {\n  readonly vertexCount?: number;\n};\n\nexport type MeshBinEncodeError =\n  | MeshBinContractError\n  | {\n      readonly code: 'mesh-bin-payload-invalid';\n      readonly subject: 'mesh-bin';\n      readonly sourceKey: string;\n      readonly expected: string;\n      readonly actual: string;\n      readonly recovery: string;\n    };\n\nfunction failure(sourceKey: string, expected: string, actual: string): MeshBinEncodeError {\n  return {\n    code: 'mesh-bin-payload-invalid',\n    subject: 'mesh-bin',\n    sourceKey,\n    expected,\n    actual,\n    recovery: 're-cook the source with its Meta sidecar through the build-time importer',\n  };\n}\n\nfunction asAttributeMap(value: unknown): VertexAttributeMap {\n  return (value ?? {}) as VertexAttributeMap;\n}\n\nfunction jsonValue(value: unknown): unknown {\n  if (value instanceof Float32Array || value instanceof Uint16Array) return Array.from(value);\n  if (Array.isArray(value)) return value.map(jsonValue);\n  if (value !== null && typeof value === 'object') {\n    return Object.fromEntries(\n      Object.entries(value).map(([key, nested]) => [key, jsonValue(nested)]),\n    );\n  }\n  return value;\n}\n\nfunction refsMeta(\n  payload: MeshPayloadIn,\n  refs: readonly string[],\n  morphTargetMasks?: readonly number[],\n): Record<string, unknown> {\n  if (payload.submeshes?.some((submesh) => 'cardLayout' in submesh))\n    throw new Error('section-owned card layouts are obsolete; recook the whole mesh');\n  if (payload.cardLayout !== undefined) {\n    const valid = validateMeshCardLayout(payload.cardLayout);\n    if (!valid.ok) throw valid.error;\n    if (\n      !payload.submeshes?.length ||\n      !admitsMeshCardLayout({\n        submeshes: payload.submeshes,\n        morphTargets: payload.morphTargets,\n        skinIndex: payload.attributes?.skinIndex,\n      })\n    )\n      throw new Error('card layouts require static triangle-list geometry');\n  }\n  if (payload.collision !== undefined) {\n    const valid = validateMeshCollisionAttachment(payload as MeshAsset, payload.collision);\n    if (!valid.ok) throw valid.error;\n  }\n  const materialSlots = (payload.materialSlots ?? [{ slotName: 'Default' }]).map(\n    (slot, slotIndex) => {\n      const defaultMaterial = slot.defaultMaterial;\n      let defaultMaterialRef: number | undefined;\n      if (defaultMaterial !== undefined) {\n        const guid = AssetGuid.format(defaultMaterial);\n        defaultMaterialRef = refs.findIndex((candidate) => candidate.toLowerCase() === guid);\n        if (defaultMaterialRef < 0) {\n          throw new Error(\n            `material slot ${slotIndex} default material ${guid} is absent from refs`,\n          );\n        }\n      }\n      return {\n        slotName: slot.slotName,\n        ...(slot.sourceKey === undefined ? {} : { sourceKey: slot.sourceKey }),\n        ...(defaultMaterialRef === undefined ? {} : { defaultMaterialRef }),\n      };\n    },\n  );\n  if (payload.lods !== undefined && payload.lods.length > 7) {\n    throw new Error('MeshAsset LOD chain supports at most seven lower-detail levels');\n  }\n  let previousCoverage = 1;\n  const seenLodGuids = new Set<string>();\n  const lods = payload.lods?.map((lod, lodIndex) => {\n    const guid = AssetGuid.format(lod.mesh).toLowerCase();\n    const meshRef = refs.findIndex((candidate) => candidate.toLowerCase() === guid);\n    if (meshRef < 0) {\n      throw new Error(`LOD ${lodIndex} mesh ${guid} is absent from refs`);\n    }\n    if (seenLodGuids.has(guid)) {\n      throw new Error(`LOD ${lodIndex} mesh ${guid} is duplicated`);\n    }\n    if (\n      !Number.isFinite(lod.screenCoverage) ||\n      lod.screenCoverage <= 0 ||\n      lod.screenCoverage > 1 ||\n      lod.screenCoverage >= previousCoverage\n    ) {\n      throw new Error(\n        `LOD ${lodIndex} screenCoverage must be finite, in (0, 1], and strictly decreasing`,\n      );\n    }\n    seenLodGuids.add(guid);\n    previousCoverage = lod.screenCoverage;\n    return { meshRef, screenCoverage: lod.screenCoverage };\n  });\n  if (\n    payload.lodHysteresis !== undefined &&\n    (!Number.isFinite(payload.lodHysteresis) ||\n      payload.lodHysteresis < 0 ||\n      payload.lodHysteresis >= 1)\n  ) {\n    throw new Error('lodHysteresis must be finite and in [0, 1)');\n  }\n  return {\n    submeshes:\n      payload.submeshes === undefined || payload.submeshes.length === 0\n        ? [{ indexOffset: 0, indexCount: payload.indices?.length ?? 0, materialSlot: 0 }]\n        : payload.submeshes,\n    materialSlots,\n    ...(payload.collision === undefined\n      ? {}\n      : {\n          collision: {\n            positions: Array.from(payload.collision.positions),\n            indices: Array.from(payload.collision.indices),\n          },\n        }),\n    ...(payload.cardLayout === undefined ? {} : { cardLayout: payload.cardLayout }),\n    ...(payload.aabb === undefined ? {} : { aabb: jsonValue(payload.aabb) }),\n    ...(morphTargetMasks === undefined ? {} : { morphTargetMasks }),\n    ...(payload.morphWeights === undefined\n      ? {}\n      : { morphWeights: jsonValue(payload.morphWeights) }),\n    ...(lods === undefined ? {} : { lods }),\n    ...(payload.lodHysteresis === undefined ? {} : { lodHysteresis: payload.lodHysteresis }),\n  };\n}\n\ninterface PreparedMeshData {\n  readonly projection: ReturnType<typeof deriveVertexLayoutProjection>;\n  readonly attributes: VertexAttributeMap;\n  readonly vertexCount: number;\n  readonly vertexBytes: number;\n  readonly indexCount: number;\n  readonly indexWidth: 0 | 2 | 4;\n  readonly indexBytes: number;\n  readonly indices: MeshAsset['indices'] | undefined;\n  readonly streams: readonly Float32Array[];\n  readonly morphBytes: number;\n  readonly metadata: Record<string, unknown>;\n}\n\n/** Canonical fields are finite and agree bit-for-bit with their interleaved projection. */\nfunction validateMeshInterleaving(\n  vertices: Float32Array,\n  attributes: VertexAttributeMap,\n  projection: ReturnType<typeof deriveVertexLayoutProjection>,\n): void {\n  const floats = new Uint32Array(vertices.buffer, vertices.byteOffset, vertices.length);\n  const shorts = new Uint16Array(vertices.buffer, vertices.byteOffset, vertices.byteLength / 2);\n  for (const attribute of projection.attributes) {\n    const value = attributes[attribute.key] as Float32Array | Uint16Array;\n    const short = attribute.format === 'uint16x4';\n    const width = short ? 2 : 4;\n    const source = short\n      ? value\n      : new Uint32Array(value.buffer, value.byteOffset, value.byteLength / 4);\n    const target = short ? shorts : floats;\n    const components = attribute.byteLength / width;\n    const stride = projection.arrayStride / width;\n    let index = 0;\n    for (let base = attribute.offset / width; index < source.length; base += stride)\n      for (let component = 0; component < components; component++, index++) {\n        if (!short && !Number.isFinite(value[index]))\n          throw new TypeError(`non-finite ${attribute.key}`);\n        if (target[base + component] !== source[index])\n          throw new TypeError(`inconsistent ${attribute.key} interleaving`);\n      }\n  }\n}\n\n/** Canonical mesh validation shared by file encoding and runtime preparation. */\nexport function prepareMeshData(\n  payload: MeshPayloadIn,\n  sourceKey: string,\n  refs: readonly string[] = [],\n): Result<PreparedMeshData, MeshBinEncodeError> {\n  try {\n    const vertices = payload.vertices;\n    const indices = payload.indices;\n    if (!(vertices instanceof Float32Array)) {\n      return err(\n        failure(sourceKey, 'Float32Array interleaved vertices', 'vertices is not Float32Array'),\n      );\n    }\n    if (\n      indices !== undefined &&\n      !(indices instanceof Uint16Array || indices instanceof Uint32Array)\n    ) {\n      return err(\n        failure(sourceKey, 'Uint16Array or Uint32Array indices', 'indices has an unsupported type'),\n      );\n    }\n    const attributes = asAttributeMap(payload.attributes);\n    const projection = deriveVertexLayoutProjection(attributes);\n    if (projection.attributes.length === 0 || projection.arrayStride === 0) {\n      return err(\n        failure(\n          sourceKey,\n          'a non-empty canonical geometry projection',\n          'projection has no attributes',\n        ),\n      );\n    }\n    const vertexCount = payload.vertexCount ?? vertices.byteLength / projection.arrayStride;\n    if (!Number.isSafeInteger(vertexCount) || vertexCount < 0) {\n      return err(\n        failure(sourceKey, 'a non-negative safe vertex cardinality', `vertexCount=${vertexCount}`),\n      );\n    }\n    if (vertices.byteLength !== vertexCount * projection.arrayStride) {\n      return err(\n        failure(\n          sourceKey,\n          `vertices.byteLength=${vertexCount * projection.arrayStride}`,\n          `vertices.byteLength=${vertices.byteLength}; stride=${projection.arrayStride}`,\n        ),\n      );\n    }\n    for (const attribute of projection.attributes) {\n      const value = attributes[attribute.key];\n      const components = attribute.byteLength / (attribute.format === 'uint16x4' ? 2 : 4);\n      if (\n        value === undefined ||\n        (!(value instanceof Float32Array) && !(value instanceof Uint16Array)) ||\n        (attribute.format === 'uint16x4'\n          ? !(value instanceof Uint16Array)\n          : !(value instanceof Float32Array)) ||\n        value.length !== vertexCount * components\n      ) {\n        return err(\n          failure(\n            sourceKey,\n            `${attribute.key} cardinality=${vertexCount * components}`,\n            `${attribute.key} cardinality=${value?.byteLength ?? 'missing'}`,\n          ),\n        );\n      }\n    }\n    validateMeshInterleaving(vertices, attributes, projection);\n    const vertexBytes = vertexCount * projection.arrayStride;\n    const indexCount = indices?.length ?? 0;\n    const indexWidth = indices === undefined || indexCount === 0 ? 0 : indices.BYTES_PER_ELEMENT;\n    const indexBytes = indexCount * indexWidth;\n    if (!Number.isSafeInteger(indexBytes) || indexBytes > 0xffffffff) {\n      return err(failure(sourceKey, 'safe index payload byte length', `indexBytes=${indexBytes}`));\n    }\n    const streams: Float32Array[] = [];\n    let morphBytes = 0;\n    if (\n      payload.morphTargets !== undefined &&\n      (payload.morphTargets.length < 1 || payload.morphTargets.length > 8)\n    )\n      throw new TypeError('expected one to eight morph targets');\n    const morphTargetMasks = payload.morphTargets?.map((target) => {\n      let mask = 0;\n      for (const key of Object.keys(target))\n        if (!MESH_BIN_MORPH_CHANNELS.some((channel) => channel.key === key))\n          throw new TypeError(`unknown morph channel ${key}`);\n      for (const channel of MESH_BIN_MORPH_CHANNELS) {\n        const values = target[channel.key];\n        if (values === undefined) continue;\n        if (!(values instanceof Float32Array) || values.length !== vertexCount * channel.components)\n          throw new TypeError(`invalid morph ${channel.key} cardinality`);\n        let zero = true;\n        for (let i = 0; i < values.length; i++) {\n          const value = values[i];\n          if (!Number.isFinite(value)) throw new TypeError(`non-finite morph ${channel.key}`);\n          if (zero && (value !== 0 || Object.is(value, -0))) zero = false;\n        }\n        mask |= channel.mask;\n        if (zero) mask |= channel.mask << 3;\n        else {\n          streams.push(values);\n          morphBytes += values.byteLength;\n        }\n      }\n      if (!mask) throw new TypeError('empty morph target');\n      return mask;\n    });\n    const weights = payload.morphWeights;\n    if (\n      weights !== undefined &&\n      (!(weights instanceof Float32Array) ||\n        (morphTargetMasks !== undefined && weights.length !== morphTargetMasks.length) ||\n        !weights.every(Number.isFinite))\n    )\n      throw new TypeError('invalid morph weights');\n    const metadata = refsMeta(payload, refs, morphTargetMasks);\n    return ok({\n      projection,\n      attributes,\n      vertexCount,\n      vertexBytes,\n      indexCount,\n      indexWidth: indexWidth as 0 | 2 | 4,\n      indexBytes,\n      indices,\n      streams,\n      morphBytes,\n      metadata,\n    });\n  } catch (error) {\n    return err(\n      failure(\n        sourceKey,\n        'valid canonical mesh payload',\n        error instanceof Error ? error.message : String(error),\n      ),\n    );\n  }\n}\n\n/** Encode canonical v5 bytes; published v4 assets remain readable. */\nexport function packMeshBin(\n  payload: MeshPayloadIn,\n  sourceKey: string,\n  refs: readonly string[] = [],\n): Result<Uint8Array, MeshBinEncodeError> {\n  if (payload.distanceField !== undefined)\n    return err(\n      failure(\n        sourceKey,\n        'complete Mesh publication for distance field artifacts',\n        'use the Mesh output producer to preserve the distance field attachment',\n      ),\n    );\n  try {\n    const prepared = prepareMeshData(payload, sourceKey, refs);\n    if (!prepared.ok) return prepared;\n    const {\n      projection,\n      attributes,\n      vertexCount,\n      vertexBytes,\n      indexCount,\n      indexWidth,\n      indexBytes,\n      indices,\n      streams,\n      morphBytes,\n      metadata,\n    } = prepared.value;\n    const meta = new TextEncoder().encode(JSON.stringify(metadata));\n    const header: MeshBinHeader = {\n      version: 5,\n      projectionVersion: projection.schemaVersion,\n      mask: projection.mask,\n      digest: projection.digest,\n      stride: projection.arrayStride,\n      vertexCount,\n      vertexBytes,\n      indexCount,\n      indexWidth: indexWidth as 0 | 2 | 4,\n      indexBytes,\n      jsonBytes: meta.byteLength,\n      morphBytes,\n    };\n    const total = MESH_BIN_HEADER_BYTES + vertexBytes + morphBytes + indexBytes + meta.byteLength;\n    if (!Number.isSafeInteger(total) || total > 0xffffffff) {\n      return err(failure(sourceKey, 'safe mesh binary byte length', `total=${total}`));\n    }\n    const out = new Uint8Array(total);\n    writeMeshBinHeader(header, out);\n    const interleaved = out.subarray(MESH_BIN_HEADER_BYTES, MESH_BIN_HEADER_BYTES + vertexBytes);\n    if (nativeLittleEndian) {\n      // Preparation proved every lane finite and bit-identical to attributes.\n      // The canonical layout is packed, so the existing interleaving is the wire body.\n      const vertices = payload.vertices as Float32Array;\n      interleaved.set(new Uint8Array(vertices.buffer, vertices.byteOffset, vertexBytes));\n    } else {\n      const view = new DataView(interleaved.buffer, interleaved.byteOffset, vertexBytes);\n      for (const attribute of projection.attributes) {\n        const value = attributes[attribute.key] as Float32Array | Uint16Array;\n        const short = attribute.format === 'uint16x4';\n        const width = short ? 2 : 4;\n        const components = attribute.byteLength / width;\n        for (let vertex = 0; vertex < vertexCount; vertex++) {\n          for (let component = 0; component < components; component++) {\n            const offset = vertex * projection.arrayStride + attribute.offset + component * width;\n            const scalar = value[vertex * components + component] as number;\n            if (short) view.setUint16(offset, scalar, true);\n            else view.setFloat32(offset, scalar, true);\n          }\n        }\n      }\n    }\n    let offset = MESH_BIN_HEADER_BYTES + vertexBytes;\n    const target = new DataView(out.buffer);\n    for (const values of streams) {\n      if (nativeLittleEndian)\n        out.set(new Uint8Array(values.buffer, values.byteOffset, values.byteLength), offset);\n      else\n        for (let i = 0; i < values.length; i++)\n          target.setFloat32(offset + i * 4, values[i] as number, true);\n      offset += values.byteLength;\n    }\n    if (indices !== undefined && indexBytes > 0) {\n      out.set(new Uint8Array(indices.buffer, indices.byteOffset, indices.byteLength), offset);\n      offset += indexBytes;\n    }\n    out.set(meta, offset);\n    return ok(out);\n  } catch (error) {\n    return err(\n      failure(\n        sourceKey,\n        'valid canonical mesh payload',\n        error instanceof Error ? error.message : String(error),\n      ),\n    );\n  }\n}\n","import { ok, type Result } from '@forgeax/engine-types';\nimport {\n  type DistanceFieldError,\n  distanceFieldFailure,\n  distanceFieldMeshDigest,\n  type FieldVec3,\n  MAX_VISIBILITY_DISTANCE_FIELD_AXIS,\n  type MeshDistanceField,\n} from './distance-field';\nimport { FieldBrickBuilder, fieldBrickLane, fieldBrickStart } from './distance-field-bricks';\nimport { createTriangleQuery, type QueryTriangle } from './triangle-query';\n\n/** Fixed stratification; independent deterministic RNG, not an Embree/UE byte reproduction. */\nfunction signDirections(): FieldVec3[] {\n  let seed = 0x6d2b79f5;\n  const random = () => {\n    seed ^= seed << 13;\n    seed ^= seed >>> 17;\n    seed ^= seed << 5;\n    return (seed >>> 0) / 4294967296;\n  };\n  const directions: FieldVec3[] = [];\n  for (const side of [1, -1])\n    for (let x = 0; x < 7; x++)\n      for (let y = 0; y < 7; y++) {\n        const a = (2 * (x + random())) / 7 - 1;\n        const b = (2 * (y + random())) / 7 - 1;\n        const r = Math.abs(a) > Math.abs(b) ? a : b;\n        const theta =\n          Math.abs(a) > Math.abs(b)\n            ? (Math.PI * b) / (4 * a)\n            : Math.PI / 2 - (Math.PI * a) / (4 * b);\n        const scale = r * Math.sqrt(2 - r * r);\n        directions.push([scale * Math.cos(theta), scale * Math.sin(theta), side * (1 - r * r)]);\n      }\n  return directions;\n}\nconst DIRECTIONS = signDirections();\n\n/**\n * Build-time approximate scene visibility. No watertightness or signed-distance\n * guarantee; the explicit voxel size is in source mesh units. Sidedness is per\n * triangle, not per material identity, and does not supply alpha coverage.\n */\nexport async function buildVisibilityDistanceField(\n  positions: ArrayLike<number>,\n  indices: ArrayLike<number>,\n  options: { readonly voxelSize: number; readonly triangleSidedness: ArrayLike<number> },\n): Promise<Result<MeshDistanceField, DistanceFieldError>> {\n  const spacing = Math.fround(options.voxelSize);\n  if (!Number.isFinite(spacing) || spacing <= 0)\n    return distanceFieldFailure('visibility voxel size must be positive finite f32');\n  if (positions.length < 9 || positions.length % 3 || indices.length < 3 || indices.length % 3)\n    return distanceFieldFailure('visibility fields require indexed xyz triangles');\n  if (positions.length > 3_145_728 || indices.length > 3_145_728)\n    return distanceFieldFailure(\n      'visibility fields allow at most 1048576 vertices and triangles',\n      'distance-field-limit',\n    );\n  if (options.triangleSidedness.length !== indices.length / 3)\n    return distanceFieldFailure('visibility sidedness must cover every triangle');\n  const points: FieldVec3[] = [];\n  const canonical = new Float32Array(positions.length);\n  for (let i = 0; i < positions.length; i += 3) {\n    const p: FieldVec3 = [\n      Math.fround(positions[i] ?? NaN),\n      Math.fround(positions[i + 1] ?? NaN),\n      Math.fround(positions[i + 2] ?? NaN),\n    ];\n    if (!p.every(Number.isFinite))\n      return distanceFieldFailure('visibility positions must be finite f32');\n    canonical.set(p, i);\n    points.push(p);\n  }\n  const topology = new Uint32Array(indices.length);\n  const flags = new Uint8Array(indices.length / 3);\n  const activeFlags: number[] = [];\n  const triangles: QueryTriangle[] = [];\n  const min: [number, number, number] = [Infinity, Infinity, Infinity];\n  const max: [number, number, number] = [-Infinity, -Infinity, -Infinity];\n  let twoSided = 0;\n  for (let i = 0; i < indices.length; i += 3) {\n    const ids = [indices[i] ?? -1, indices[i + 1] ?? -1, indices[i + 2] ?? -1];\n    if (ids.some((v) => !Number.isInteger(v) || v < 0 || v >= points.length))\n      return distanceFieldFailure('visibility index outside source vertices');\n    const a = points[ids[0] ?? -1],\n      b = points[ids[1] ?? -1],\n      c = points[ids[2] ?? -1];\n    if (!a || !b || !c) return distanceFieldFailure('missing visibility triangle');\n    const flag = options.triangleSidedness[i / 3];\n    if (flag !== 0 && flag !== 1) return distanceFieldFailure('triangle sidedness must be 0 or 1');\n    flags[i / 3] = flag;\n    twoSided += flag;\n    topology.set(ids, i);\n    const u = [b[0] - a[0], b[1] - a[1], b[2] - a[2]] as const;\n    const v = [c[0] - a[0], c[1] - a[1], c[2] - a[2]] as const;\n    if (\n      Math.hypot(\n        u[1] * v[2] - u[2] * v[1],\n        u[2] * v[0] - u[0] * v[2],\n        u[0] * v[1] - u[1] * v[0],\n      ) === 0\n    )\n      continue;\n    activeFlags.push(flag);\n    triangles.push([a, b, c]);\n    for (const p of [a, b, c])\n      for (const axis of [0, 1, 2] as const) {\n        min[axis] = Math.min(min[axis], p[axis]);\n        max[axis] = Math.max(max[axis], p[axis]);\n      }\n  }\n  if (!triangles.length)\n    return distanceFieldFailure('visibility geometry has no nondegenerate triangles');\n  const mostlyTwoSided = twoSided * 4 >= flags.length;\n  const allTwoSided = activeFlags.every((v) => v === 1);\n  // Positive plane volume, optional two-sided pullback room, then a distinct\n  // stored gradient border. Brick storage retains this isotropic sample lattice.\n  const lo: [number, number, number] = [0, 0, 0],\n    hi: [number, number, number] = [0, 0, 0];\n  for (const a of [0, 1, 2] as const) {\n    const center = (min[a] + max[a]) / 2;\n    const extent = Math.max((max[a] - min[a]) / 2, spacing / 2) + (mostlyTwoSided ? spacing : 0);\n    lo[a] = Math.fround(center - extent);\n    hi[a] = Math.fround(center + extent);\n  }\n  const origin = lo.map((v) => Math.fround(v - spacing)) as [number, number, number];\n  for (const a of [0, 1, 2] as const) {\n    // Undoing the border subtraction can round inward. Move the stored\n    // origin one f32 value outward before deriving the GPU trace boundary.\n    if (Math.fround(origin[a] + spacing) > lo[a]) {\n      if (origin[a] === 0) origin[a] = -(2 ** -149);\n      else {\n        const value = new Float32Array([origin[a]]),\n          bits = new Uint32Array(value.buffer);\n        bits[0] = (bits[0] ?? 0) + (origin[a] > 0 ? -1 : 1);\n        origin[a] = value[0] ?? NaN;\n      }\n    }\n    lo[a] = Math.fround(origin[a] + spacing);\n    if (lo[a] > min[a])\n      return distanceFieldFailure(\n        'visibility trace bounds lost source coverage to coordinate precision',\n      );\n  }\n  const dimensions = hi.map((v, a) => Math.ceil((v - (lo[a] ?? 0)) / spacing) + 3) as [\n    number,\n    number,\n    number,\n  ];\n  if (\n    dimensions.some((n) => !Number.isInteger(n) || n < 3 || n > MAX_VISIBILITY_DISTANCE_FIELD_AXIS)\n  )\n    return distanceFieldFailure(\n      `visibility field exceeds ${MAX_VISIBILITY_DISTANCE_FIELD_AXIS} samples per axis; choose voxel size or repair representation granularity`,\n      'distance-field-limit',\n    );\n  for (const axis of [0, 1, 2] as const) {\n    let previous = -Infinity;\n    for (let i = 0; i < dimensions[axis]; i++) {\n      const p = Math.fround(origin[axis] + Math.fround(i * spacing));\n      if (!Number.isFinite(p) || p <= previous)\n        return distanceFieldFailure('visibility samples must have distinct finite f32 centers');\n      previous = p;\n    }\n    if (lo[axis] - origin[axis] < spacing * 0.99 || previous - hi[axis] < spacing * 0.99)\n      return distanceFieldFailure('visibility gradient border was lost to coordinate precision');\n  }\n  const distanceBand = Math.fround(4 * Math.sqrt(3) * spacing);\n  if (!Number.isFinite(distanceBand))\n    return distanceFieldFailure('visibility distance band overflow');\n  const query = createTriangleQuery(triangles);\n  const nearestBudget = { remaining: 134_217_728 };\n  const rayBudget = { remaining: 1_073_741_824 };\n  const storage = new FieldBrickBuilder(dimensions),\n    brick = new Float32Array(64);\n  const hit = { primitive: -1, distance: 0, frontFace: false };\n  let negativeSamples = 0;\n  for (let index = 0; index < storage.bricks.length; index++) {\n    const start = fieldBrickStart(dimensions, index);\n    const lower = start.map((v, a) => Math.fround((origin[a] ?? 0) + Math.fround(v * spacing)));\n    const upper = start.map((v, a) =>\n      Math.fround(\n        (origin[a] ?? 0) + Math.fround(Math.min(v + 3, (dimensions[a] ?? 0) - 1) * spacing),\n      ),\n    );\n    const center = lower.map((v, a) => (v + (upper[a] ?? 0)) / 2) as [number, number, number];\n    const radius = Math.hypot(...upper.map((v, a) => (v - (lower[a] ?? 0)) / 2));\n    // The unsigned distance is 1-Lipschitz. An outward guard covers coordinate\n    // and nearest-query rounding; no sample within the band is discarded.\n    const guard =\n      distanceBand + radius + Math.max(spacing * 1e-5, ...center.map((v) => Math.abs(v) * 1e-7));\n    const nearest = query.nearestSquared(center, guard, nearestBudget);\n    if (nearest === null)\n      return distanceFieldFailure(\n        'visibility brick closest-point budget exhausted',\n        'distance-field-limit',\n      );\n    if (nearest >= guard * guard) brick.fill(distanceBand);\n    else\n      for (let k = 0; k < 4; k++)\n        for (let j = 0; j < 4; j++)\n          for (let i = 0; i < 4; i++) {\n            const lane = (k * 4 + j) * 4 + i;\n            if (fieldBrickLane(dimensions, start, i, j, k) !== lane) continue;\n            const x = start[0] + i,\n              y = start[1] + j,\n              z = start[2] + k;\n            const p: FieldVec3 = [\n              Math.fround(origin[0] + Math.fround(x * spacing)),\n              Math.fround(origin[1] + Math.fround(y * spacing)),\n              Math.fround(origin[2] + Math.fround(z * spacing)),\n            ];\n            const nearest = query.nearestSquared(p, distanceBand, nearestBudget);\n            if (nearest === null)\n              return distanceFieldFailure(\n                'visibility closest-point budget exhausted',\n                'distance-field-limit',\n              );\n            const distance = Math.sqrt(nearest);\n            let back = 0;\n            let remaining = DIRECTIONS.length;\n            // A capped nearest result contains no geometry reachable by a sign ray:\n            // its pulled-back start puts the far endpoint strictly inside the band.\n            if (!allTwoSided && nearest < distanceBand * distanceBand)\n              for (const d of DIRECTIONS) {\n                const start: FieldVec3 = [\n                  p[0] - 1e-4 * distanceBand * d[0],\n                  p[1] - 1e-4 * distanceBand * d[1],\n                  p[2] - 1e-4 * distanceBand * d[2],\n                ];\n                const found = query.trace(hit, start, d, 0, distanceBand, rayBudget);\n                if (found === null)\n                  return distanceFieldFailure(\n                    'visibility sign-ray budget exhausted',\n                    'distance-field-limit',\n                  );\n                if (found && !hit.frontFace && activeFlags[hit.primitive] === 0) back++;\n                remaining--;\n                // Remaining votes cannot undo a negative decision, or supply enough\n                // backfaces for one. Preserve the complete 98-direction predicate.\n                if (back > DIRECTIONS.length * 0.25 || back + remaining <= DIRECTIONS.length * 0.25)\n                  break;\n              }\n            const value = Math.fround(\n              Math.min(distance, distanceBand) * (back > DIRECTIONS.length * 0.25 ? -1 : 1),\n            );\n            brick[lane] = value;\n            if (value < 0) negativeSamples++;\n          }\n    if (!storage.store(index, brick))\n      return distanceFieldFailure(\n        'visibility field storage exceeds 32 MiB',\n        'distance-field-limit',\n      );\n  }\n  const meshDigest = await distanceFieldMeshDigest(canonical, topology);\n  const sourceDigest = await visibilityDistanceFieldSourceDigest(meshDigest, flags);\n  return ok({\n    meshDigest,\n    bounds: { min, max },\n    dimensions,\n    origin,\n    spacing,\n    ...storage.finish(),\n    policy: {\n      kind: 'sampled-visibility',\n      sourceDigest,\n      mostlyTwoSided,\n      traceBounds: { min: lo, max: hi },\n      distanceBand,\n    },\n    quality: { negativeSamples, testedTriangles: triangles.length },\n  });\n}\n\n/** Same canonical geometry and sidedness identity at cook and asset admission. */\nexport async function visibilityDistanceFieldSourceDigest(\n  meshDigest: string,\n  flags: Uint8Array,\n): Promise<string> {\n  const sourceBytes = new Uint8Array(64 + flags.length);\n  sourceBytes.set(new TextEncoder().encode(meshDigest));\n  sourceBytes.set(flags, 64);\n  return Array.from(new Uint8Array(await crypto.subtle.digest('SHA-256', sourceBytes)), (b) =>\n    b.toString(16).padStart(2, '0'),\n  ).join('');\n}\n","import { type MeshAsset, type MeshDistanceField, ok, type Result } from '@forgeax/engine-types';\nimport {\n  type DistanceFieldError,\n  distanceFieldFailure,\n  distanceFieldMeshDigest,\n  MESH_DISTANCE_FIELD_GENERATION_VERSION,\n} from './distance-field';\nimport { decodeMeshDistanceField, validateMeshDistanceField } from './distance-field-artifact';\nimport { visibilityDistanceFieldSourceDigest } from './visibility-distance-field';\n\n/** Existing asset codec profile binds this builder policy without a second identity field. */\nexport const MESH_VISIBILITY_DISTANCE_FIELD_CODEC = {\n  name: 'mesh-distance-field',\n  version: '4',\n  profile: `sampled-visibility/${MESH_DISTANCE_FIELD_GENERATION_VERSION}`,\n} as const;\n\n/** Geometry-independent source policy, carried once by the ordinary Mesh publication. */\nexport interface MeshDistanceFieldDescriptor {\n  readonly sectionSidedness: readonly (0 | 1)[];\n}\n\n/** Canonical triangle coverage shared by the producer and the ordinary asset loader. */\nexport function meshDistanceFieldSource(\n  mesh: MeshAsset,\n  descriptor: unknown,\n): Result<\n  {\n    positions: Float32Array;\n    indices: Uint16Array | Uint32Array;\n    triangleSidedness: Uint8Array;\n    descriptor: MeshDistanceFieldDescriptor;\n  },\n  DistanceFieldError\n> {\n  if (!descriptor || typeof descriptor !== 'object' || Array.isArray(descriptor))\n    return distanceFieldFailure('mesh distance field requires its source section sidedness');\n  const data = descriptor as Record<string, unknown>;\n  if (\n    Object.keys(data).some((key) => key !== 'sectionSidedness') ||\n    !Array.isArray(data.sectionSidedness) ||\n    data.sectionSidedness.length !== mesh.submeshes.length ||\n    data.sectionSidedness.some((v) => v !== 0 && v !== 1)\n  )\n    return distanceFieldFailure('distance field section sidedness must cover every mesh section');\n  const positions = mesh.attributes.position;\n  if (\n    !(positions instanceof Float32Array) ||\n    positions.length < 9 ||\n    positions.length % 3 ||\n    mesh.morphTargets !== undefined ||\n    mesh.attributes.skinIndex !== undefined ||\n    mesh.attributes.skinWeight !== undefined\n  )\n    return distanceFieldFailure('mesh distance fields require static float32 triangle geometry');\n  const indices = mesh.indices ?? Uint32Array.from({ length: positions.length / 3 }, (_, i) => i);\n  if (indices.length % 3 || indices.length > 3_145_728 || positions.length > 3_145_728)\n    return distanceFieldFailure('distance field source exceeds triangle geometry limits');\n  const flags = new Uint8Array(indices.length / 3);\n  let end = 0;\n  for (const [index, section] of mesh.submeshes.entries()) {\n    const count = mesh.indices ? section.indexCount : section.vertexCount;\n    const offset = mesh.indices ? section.indexOffset : end;\n    if (\n      section.topology !== 'triangle-list' ||\n      offset !== end ||\n      count < 3 ||\n      count % 3 ||\n      offset + count > indices.length\n    )\n      return distanceFieldFailure('distance field sections must partition the triangle buffer');\n    flags.fill(data.sectionSidedness[index], offset / 3, (offset + count) / 3);\n    end += count;\n  }\n  if (\n    end !== indices.length ||\n    !positions.every(Number.isFinite) ||\n    indices.some((i) => i >= positions.length / 3)\n  )\n    return distanceFieldFailure('distance field source has incomplete or invalid geometry');\n  return ok({\n    positions,\n    indices,\n    triangleSidedness: flags,\n    descriptor: data as unknown as MeshDistanceFieldDescriptor,\n  });\n}\n\nexport async function validateMeshDistanceFieldAttachment(\n  mesh: MeshAsset,\n  descriptor: unknown,\n  field: MeshDistanceField,\n): Promise<Result<void, DistanceFieldError>> {\n  const source = meshDistanceFieldSource(mesh, descriptor);\n  if (!source.ok) return source;\n  const valid = validateMeshDistanceField(field);\n  if (!valid.ok) return valid;\n  const meshDigest = await distanceFieldMeshDigest(source.value.positions, source.value.indices);\n  if (\n    field.meshDigest !== meshDigest ||\n    field.policy.kind !== 'sampled-visibility' ||\n    field.policy.sourceDigest !==\n      (await visibilityDistanceFieldSourceDigest(meshDigest, source.value.triangleSidedness)) ||\n    field.policy.mostlyTwoSided !==\n      source.value.triangleSidedness.reduce((sum, flag) => sum + flag, 0) * 4 >=\n        source.value.triangleSidedness.length\n  )\n    return distanceFieldFailure(\n      'distance field geometry or source sidedness policy is stale; recook the mesh',\n    );\n  return ok(undefined);\n}\n\n/** No builder or artifact work occurs when both optional publication members are omitted. */\nexport async function attachMeshDistanceField(\n  mesh: MeshAsset,\n  descriptor: unknown,\n  bytes?: Uint8Array,\n): Promise<Result<MeshAsset, DistanceFieldError>> {\n  if (descriptor === undefined && bytes === undefined) return ok(mesh);\n  const source = meshDistanceFieldSource(mesh, descriptor);\n  if (!source.ok) return source;\n  if (!bytes) return distanceFieldFailure('mesh distance field artifact is missing');\n  const digest = await distanceFieldMeshDigest(source.value.positions, source.value.indices);\n  const decoded = await decodeMeshDistanceField(bytes, digest);\n  if (!decoded.ok) return decoded;\n  const valid = await validateMeshDistanceFieldAttachment(mesh, descriptor, decoded.value);\n  if (!valid.ok) return valid;\n  return ok({\n    ...mesh,\n    distanceField: { ...decoded.value, sectionSidedness: source.value.descriptor.sectionSidedness },\n  });\n}\n","// @forgeax/engine-geometry - reusable contour, sweep, and revolution meshes.\n//\n// These factories stay pure and use meshFromInterleaved as the one MeshAsset\n// validation/tangent/AABB path. Invalid authored data fails before a browser or\n// renderer is involved.\n\nimport type { AssetError, MeshAsset, Result } from '@forgeax/engine-types';\nimport { err } from '@forgeax/engine-types';\nimport { FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\nimport { geometryError } from './contour';\n\nexport interface Vec2Point {\n  readonly x: number;\n  readonly y: number;\n}\n\nexport type Vec3Point = readonly [number, number, number];\n\nfunction invalid(field: string, detail: string): Result<MeshAsset, AssetError> {\n  return err(geometryError(field, detail));\n}\n\nfunction finitePoint(point: Vec2Point): boolean {\n  return Number.isFinite(point.x) && Number.isFinite(point.y);\n}\n\nfunction pushVertex(\n  vertices: number[],\n  position: readonly [number, number, number],\n  normal: readonly [number, number, number],\n  uv: readonly [number, number],\n): number {\n  const index = vertices.length / FACTORY_FLOATS_PER_VERTEX;\n  vertices.push(\n    position[0],\n    position[1],\n    position[2],\n    normal[0],\n    normal[1],\n    normal[2],\n    uv[0],\n    uv[1],\n  );\n  return index;\n}\n\n/** Sweep a circular profile along a 3D path. */\nexport function createSweepGeometry(\n  path: readonly Vec3Point[],\n  radius: number,\n  radialSegments = 12,\n): Result<MeshAsset, AssetError> {\n  if (!Number.isFinite(radius) || radius <= 0)\n    return invalid('radius', 'must be positive and finite');\n  const segments = radialSegments | 0;\n  if (\n    path.length < 2 ||\n    path.some((point) => point.length !== 3 || point.some((value) => !Number.isFinite(value)))\n  )\n    return invalid('path', 'needs at least two finite 3D points');\n  if (segments < 3) return invalid('radialSegments', 'must be at least 3');\n  // A repeated path point makes the local tangent undefined. A repeated first\n  // and last point is the explicit closed-path form used by authored railings;\n  // retain that seam while rejecting every other repeat before mesh creation.\n  const first = path[0] as Vec3Point;\n  const last = path[path.length - 1] as Vec3Point;\n  const closed =\n    path.length > 3 &&\n    Math.hypot(first[0] - last[0], first[1] - last[1], first[2] - last[2]) <= 1e-8;\n  for (let left = 0; left < path.length; left++) {\n    const a = path[left] as Vec3Point;\n    for (let right = left + 1; right < path.length; right++) {\n      const b = path[right] as Vec3Point;\n      if (closed && left === 0 && right === path.length - 1) continue;\n      if (Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]) <= 1e-8) {\n        return invalid('path', 'must not contain repeated points');\n      }\n    }\n  }\n  const lengths = [0];\n  for (let i = 1; i < path.length; i++) {\n    const previous = path[i - 1] as Vec3Point;\n    const current = path[i] as Vec3Point;\n    lengths.push(\n      (lengths[i - 1] as number) +\n        Math.hypot(current[0] - previous[0], current[1] - previous[1], current[2] - previous[2]),\n    );\n  }\n  const total = lengths[lengths.length - 1] as number;\n  if (!(total > 0)) return invalid('path', 'must contain distinct points');\n  const vertices: number[] = [];\n  const indices: number[] = [];\n  for (let row = 0; row < path.length; row++) {\n    const point = path[row] as Vec3Point;\n    const previous = path[Math.max(0, row - 1)] as Vec3Point;\n    const next = path[Math.min(path.length - 1, row + 1)] as Vec3Point;\n    let tx = next[0] - previous[0];\n    let ty = next[1] - previous[1];\n    let tz = next[2] - previous[2];\n    const tangentLength = Math.hypot(tx, ty, tz) || 1;\n    tx /= tangentLength;\n    ty /= tangentLength;\n    tz /= tangentLength;\n    const reference: Vec3Point = Math.abs(ty) < 0.95 ? [0, 1, 0] : [1, 0, 0];\n    let nx = ty * reference[2] - tz * reference[1];\n    let ny = tz * reference[0] - tx * reference[2];\n    let nz = tx * reference[1] - ty * reference[0];\n    const nLength = Math.hypot(nx, ny, nz) || 1;\n    nx /= nLength;\n    ny /= nLength;\n    nz /= nLength;\n    const bx = ty * nz - tz * ny;\n    const by = tz * nx - tx * nz;\n    const bz = tx * ny - ty * nx;\n    for (let column = 0; column <= segments; column++) {\n      const angle = (column / segments) * Math.PI * 2;\n      const radialX = Math.cos(angle) * nx + Math.sin(angle) * bx;\n      const radialY = Math.cos(angle) * ny + Math.sin(angle) * by;\n      const radialZ = Math.cos(angle) * nz + Math.sin(angle) * bz;\n      pushVertex(\n        vertices,\n        [point[0] + radialX * radius, point[1] + radialY * radius, point[2] + radialZ * radius],\n        [radialX, radialY, radialZ],\n        [column / segments, (lengths[row] as number) / total],\n      );\n    }\n  }\n  const stride = segments + 1;\n  const position = (index: number): Vec3Point => [\n    vertices[index * 8] as number,\n    vertices[index * 8 + 1] as number,\n    vertices[index * 8 + 2] as number,\n  ];\n  for (let row = 0; row < path.length - 1; row++) {\n    for (let column = 0; column < segments; column++) {\n      const a = row * stride + column;\n      const b = a + 1;\n      const c = (row + 1) * stride + column + 1;\n      const d = (row + 1) * stride + column;\n      const p = position(a);\n      const q = position(b);\n      const r = position(c);\n      const ab: Vec3Point = [q[0] - p[0], q[1] - p[1], q[2] - p[2]];\n      const ac: Vec3Point = [r[0] - p[0], r[1] - p[1], r[2] - p[2]];\n      const normal: Vec3Point = [\n        ab[1] * ac[2] - ab[2] * ac[1],\n        ab[2] * ac[0] - ab[0] * ac[2],\n        ab[0] * ac[1] - ab[1] * ac[0],\n      ];\n      const center = path[row] as Vec3Point;\n      const outward: Vec3Point = [p[0] - center[0], p[1] - center[1], p[2] - center[2]];\n      const dot = normal[0] * outward[0] + normal[1] * outward[1] + normal[2] * outward[2];\n      if (dot > 0) indices.push(a, b, c, a, c, d);\n      else indices.push(a, c, b, a, d, c);\n    }\n  }\n  return meshFromInterleaved(new Float32Array(vertices), new Uint32Array(indices));\n}\n\n/** Revolve a (radius, height) profile around the Y axis. */\nexport function createRevolutionGeometry(\n  profile: readonly Vec2Point[],\n  radialSegments = 24,\n): Result<MeshAsset, AssetError> {\n  const segments = radialSegments | 0;\n  if (profile.length < 2 || profile.some((point) => !finitePoint(point) || point.x < 0))\n    return invalid('profile', 'needs at least two finite points with non-negative radius');\n  if (segments < 3) return invalid('radialSegments', 'must be at least 3');\n  const first = profile[0];\n  if (first === undefined || !profile.some((point) => point.y !== first.y))\n    return invalid('profile', 'must span a non-zero height');\n  // A repeated profile point creates a zero-area ring strip.  Letting that\n  // reach MeshAsset validation produces a seemingly valid mesh with collapsed\n  // triangles, so reject the authored degeneracy at the geometry boundary.\n  for (let left = 0; left < profile.length; left++) {\n    const a = profile[left] as Vec2Point;\n    for (let right = left + 1; right < profile.length; right++) {\n      const b = profile[right] as Vec2Point;\n      if (Math.hypot(a.x - b.x, a.y - b.y) <= 1e-8) {\n        return invalid('profile', 'must not contain repeated points');\n      }\n    }\n  }\n  const vertices: number[] = [];\n  const indices: number[] = [];\n  for (let row = 0; row < profile.length; row++) {\n    const point = profile[row] as Vec2Point;\n    const previous = profile[Math.max(0, row - 1)] as Vec2Point;\n    const next = profile[Math.min(profile.length - 1, row + 1)] as Vec2Point;\n    const dr = next.x - previous.x;\n    const dy = next.y - previous.y;\n    const normalLength = Math.hypot(dy, dr) || 1;\n    for (let column = 0; column <= segments; column++) {\n      const u = column / segments;\n      const angle = u * Math.PI * 2;\n      const c = Math.cos(angle);\n      const s = Math.sin(angle);\n      pushVertex(\n        vertices,\n        [point.x * c, point.y, point.x * s],\n        [(c * dy) / normalLength, -dr / normalLength, (s * dy) / normalLength],\n        [u, row / (profile.length - 1)],\n      );\n    }\n  }\n  const stride = segments + 1;\n  for (let row = 0; row < profile.length - 1; row++) {\n    for (let column = 0; column < segments; column++) {\n      const a = row * stride + column;\n      const b = a + 1;\n      const c = (row + 1) * stride + column + 1;\n      const d = (row + 1) * stride + column;\n      indices.push(a, d, b, b, d, c);\n    }\n  }\n  return meshFromInterleaved(new Float32Array(vertices), new Uint32Array(indices));\n}\n","import { type AssetError, err, type MeshAsset, type Result } from '@forgeax/engine-types';\nimport { geometryError, type PolygonShape, preparePolygon } from './contour';\nimport { cross3, polygonMesh, unit3 } from './polygon-mesh';\nimport type { Vec3Point } from './procedural';\n\nexport interface ProfileSweepOptions {\n  readonly capped?: boolean;\n  /** Duplicate endpoint is required for a closed path; caps are then omitted. */\n  readonly closed?: boolean;\n  /** Initial cross-section X axis, projected perpendicular to the path tangent. */\n  readonly up?: Vec3Point;\n}\nconst dot = (a: Vec3Point, b: Vec3Point) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\nconst difference = (a: Vec3Point, b: Vec3Point): Vec3Point => [\n  a[0] - b[0],\n  a[1] - b[1],\n  a[2] - b[2],\n];\nfunction rotate(p: Vec3Point, axis: Vec3Point, angle: number): Vec3Point {\n  const c = Math.cos(angle),\n    s = Math.sin(angle),\n    cross = cross3(axis, p),\n    d = dot(axis, p) * (1 - c);\n  return [\n    p[0] * c + cross[0] * s + axis[0] * d,\n    p[1] * c + cross[1] * s + axis[1] * d,\n    p[2] * c + cross[2] * s + axis[2] * d,\n  ];\n}\n/** Minimal-rotation transport, with distributed closure twist for a repeated endpoint. */\nexport function createProfileSweepGeometry(\n  shape: PolygonShape,\n  path: readonly Vec3Point[],\n  options: ProfileSweepOptions = {},\n): Result<MeshAsset, AssetError> {\n  const prepared = preparePolygon(shape);\n  if (!prepared.ok) return prepared;\n  if (\n    path.length < 2 ||\n    path.length > 4096 ||\n    path.some((p) => p.length !== 3 || p.some((v) => !Number.isFinite(v)))\n  )\n    return err(geometryError('path', 'needs 2..4096 finite 3D points'));\n  if (prepared.value.flat().length * path.length > 262144)\n    return err(geometryError('mesh', 'at most 262144 ring vertices'));\n  const closed = options.closed ?? false;\n  if (\n    closed &&\n    (path.length < 4 ||\n      Math.hypot(...difference(path[0] as Vec3Point, path.at(-1) as Vec3Point)) !== 0)\n  )\n    return err(\n      geometryError(\n        'path',\n        'closed paths require a repeated endpoint and at least three distinct points',\n      ),\n    );\n  const directions: Vec3Point[] = [],\n    lengths = [0];\n  for (let i = 1; i < path.length; i++) {\n    const delta = difference(path[i] as Vec3Point, path[i - 1] as Vec3Point),\n      length = Math.hypot(...delta);\n    if (!(length > 0)) return err(geometryError('path', 'consecutive points must be distinct'));\n    directions.push(unit3(delta));\n    lengths.push((lengths[i - 1] as number) + length);\n  }\n  const tangents: Vec3Point[] = [];\n  for (let i = 0; i < path.length; i++) {\n    const previous = i === 0 ? (closed ? directions.at(-1) : directions[0]) : directions[i - 1];\n    const next =\n      i === path.length - 1 ? (closed ? directions[0] : directions.at(-1)) : directions[i];\n    const a = previous as Vec3Point,\n      b = next as Vec3Point;\n    if (dot(a, b) < -0.999999)\n      return err(geometryError('path', 'a reversal has no unique sweep frame'));\n    tangents.push(unit3([a[0] + b[0], a[1] + b[1], a[2] + b[2]]));\n  }\n  const tangent = tangents[0] as Vec3Point;\n  const reference = options.up ?? (Math.abs(tangent[1]) < 0.9 ? [0, 1, 0] : [1, 0, 0]);\n  if (reference.length !== 3 || reference.some((v) => !Number.isFinite(v)))\n    return err(geometryError('up', 'must be finite'));\n  const projection = dot(reference, tangent);\n  const initial: Vec3Point = [\n    reference[0] - projection * tangent[0],\n    reference[1] - projection * tangent[1],\n    reference[2] - projection * tangent[2],\n  ];\n  if (Math.hypot(...initial) < 1e-8)\n    return err(geometryError('up', 'must not be parallel to initial tangent'));\n  const axes: Vec3Point[] = [unit3(initial)];\n  for (let i = 1; i < tangents.length; i++) {\n    const a = tangents[i - 1] as Vec3Point,\n      b = tangents[i] as Vec3Point,\n      axis = cross3(a, b),\n      s = Math.hypot(...axis),\n      c = dot(a, b);\n    if (c < -0.999999) return err(geometryError('path', 'adjacent frames must not reverse'));\n    axes.push(\n      s < 1e-10\n        ? (axes[i - 1] as Vec3Point)\n        : rotate(axes[i - 1] as Vec3Point, unit3(axis), Math.atan2(s, c)),\n    );\n  }\n  if (closed) {\n    const first = axes[0] as Vec3Point,\n      last = axes.at(-1) as Vec3Point;\n    const twist = Math.atan2(dot(tangent, cross3(last, first)), dot(last, first));\n    for (let i = 1; i < axes.length; i++)\n      axes[i] = rotate(\n        axes[i] as Vec3Point,\n        tangents[i] as Vec3Point,\n        (twist * (lengths[i] as number)) / (lengths.at(-1) as number),\n      );\n    axes[axes.length - 1] = first;\n  }\n  const section = prepared.value;\n  return polygonMesh(\n    path.map((p, i) => {\n      const x = axes[i] as Vec3Point,\n        y = cross3(tangents[i] as Vec3Point, x);\n      return {\n        section,\n        v: (lengths[i] as number) / (lengths.at(-1) as number),\n        points: section\n          .flat()\n          .map(\n            (q): Vec3Point => [\n              p[0] + x[0] * q.x + y[0] * q.y,\n              p[1] + x[1] * q.x + y[1] * q.y,\n              p[2] + x[2] * q.x + y[2] * q.y,\n            ],\n          ),\n      };\n    }),\n    !closed && (options.capped ?? true),\n  );\n}\n","// Exact Utah teapot patch tessellation ported from Three.js TeapotGeometry.\n// Source: three.js ad005397bbd15b0a9fcd5159c782eba56e1cba2a, examples/jsm/geometries/TeapotGeometry.js\n// Three.js is MIT licensed; this file preserves the upstream attribution.\n\nimport type { MeshAsset } from '@forgeax/engine-types';\nimport { ASSET_ERROR_HINTS, AssetError, err, ok, type Result } from '@forgeax/engine-types';\nimport { FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nconst PATCHES = new Uint16Array([\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 3, 16, 17, 18, 7, 19, 20, 21, 11, 22, 23,\n  24, 15, 25, 26, 27, 18, 28, 29, 30, 21, 31, 32, 33, 24, 34, 35, 36, 27, 37, 38, 39, 30, 40, 41, 0,\n  33, 42, 43, 4, 36, 44, 45, 8, 39, 46, 47, 12, 12, 13, 14, 15, 48, 49, 50, 51, 52, 53, 54, 55, 56,\n  57, 58, 59, 15, 25, 26, 27, 51, 60, 61, 62, 55, 63, 64, 65, 59, 66, 67, 68, 27, 37, 38, 39, 62,\n  69, 70, 71, 65, 72, 73, 74, 68, 75, 76, 77, 39, 46, 47, 12, 71, 78, 79, 48, 74, 80, 81, 52, 77,\n  82, 83, 56, 56, 57, 58, 59, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 59, 66, 67, 68, 87,\n  96, 97, 98, 91, 99, 100, 101, 95, 102, 103, 104, 68, 75, 76, 77, 98, 105, 106, 107, 101, 108, 109,\n  110, 104, 111, 112, 113, 77, 82, 83, 56, 107, 114, 115, 84, 110, 116, 117, 88, 113, 118, 119, 92,\n  120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 123, 136, 137,\n  120, 127, 138, 139, 124, 131, 140, 141, 128, 135, 142, 143, 132, 132, 133, 134, 135, 144, 145,\n  146, 147, 148, 149, 150, 151, 68, 152, 153, 154, 135, 142, 143, 132, 147, 155, 156, 144, 151, 157,\n  158, 148, 154, 159, 160, 68, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,\n  175, 176, 164, 177, 178, 161, 168, 179, 180, 165, 172, 181, 182, 169, 176, 183, 184, 173, 173,\n  174, 175, 176, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 176, 183, 184, 173,\n  188, 197, 198, 185, 192, 199, 200, 189, 196, 201, 202, 193, 203, 203, 203, 203, 204, 205, 206,\n  207, 208, 208, 208, 208, 209, 210, 211, 212, 203, 203, 203, 203, 207, 213, 214, 215, 208, 208,\n  208, 208, 212, 216, 217, 218, 203, 203, 203, 203, 215, 219, 220, 221, 208, 208, 208, 208, 218,\n  222, 223, 224, 203, 203, 203, 203, 221, 225, 226, 204, 208, 208, 208, 208, 224, 227, 228, 209,\n  209, 210, 211, 212, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 212, 216, 217,\n  218, 232, 241, 242, 243, 236, 244, 245, 246, 240, 247, 248, 249, 218, 222, 223, 224, 243, 250,\n  251, 252, 246, 253, 254, 255, 249, 256, 257, 258, 224, 227, 228, 209, 252, 259, 260, 229, 255,\n  261, 262, 233, 258, 263, 264, 237, 265, 265, 265, 265, 266, 267, 268, 269, 270, 271, 272, 273, 92,\n  119, 118, 113, 265, 265, 265, 265, 269, 274, 275, 276, 273, 277, 278, 279, 113, 112, 111, 104,\n  265, 265, 265, 265, 276, 280, 281, 282, 279, 283, 284, 285, 104, 103, 102, 95, 265, 265, 265, 265,\n  282, 286, 287, 266, 285, 288, 289, 270, 95, 94, 93, 92,\n]);\nconst CONTROL_POINTS = new Float32Array([\n  1.4, 0, 2.4, 1.4, -0.784, 2.4, 0.784, -1.4, 2.4, 0, -1.4, 2.4, 1.3375, 0, 2.53125, 1.3375, -0.749,\n  2.53125, 0.749, -1.3375, 2.53125, 0, -1.3375, 2.53125, 1.4375, 0, 2.53125, 1.4375, -0.805,\n  2.53125, 0.805, -1.4375, 2.53125, 0, -1.4375, 2.53125, 1.5, 0, 2.4, 1.5, -0.84, 2.4, 0.84, -1.5,\n  2.4, 0, -1.5, 2.4, -0.784, -1.4, 2.4, -1.4, -0.784, 2.4, -1.4, 0, 2.4, -0.749, -1.3375, 2.53125,\n  -1.3375, -0.749, 2.53125, -1.3375, 0, 2.53125, -0.805, -1.4375, 2.53125, -1.4375, -0.805, 2.53125,\n  -1.4375, 0, 2.53125, -0.84, -1.5, 2.4, -1.5, -0.84, 2.4, -1.5, 0, 2.4, -1.4, 0.784, 2.4, -0.784,\n  1.4, 2.4, 0, 1.4, 2.4, -1.3375, 0.749, 2.53125, -0.749, 1.3375, 2.53125, 0, 1.3375, 2.53125,\n  -1.4375, 0.805, 2.53125, -0.805, 1.4375, 2.53125, 0, 1.4375, 2.53125, -1.5, 0.84, 2.4, -0.84, 1.5,\n  2.4, 0, 1.5, 2.4, 0.784, 1.4, 2.4, 1.4, 0.784, 2.4, 0.749, 1.3375, 2.53125, 1.3375, 0.749,\n  2.53125, 0.805, 1.4375, 2.53125, 1.4375, 0.805, 2.53125, 0.84, 1.5, 2.4, 1.5, 0.84, 2.4, 1.75, 0,\n  1.875, 1.75, -0.98, 1.875, 0.98, -1.75, 1.875, 0, -1.75, 1.875, 2, 0, 1.35, 2, -1.12, 1.35, 1.12,\n  -2, 1.35, 0, -2, 1.35, 2, 0, 0.9, 2, -1.12, 0.9, 1.12, -2, 0.9, 0, -2, 0.9, -0.98, -1.75, 1.875,\n  -1.75, -0.98, 1.875, -1.75, 0, 1.875, -1.12, -2, 1.35, -2, -1.12, 1.35, -2, 0, 1.35, -1.12, -2,\n  0.9, -2, -1.12, 0.9, -2, 0, 0.9, -1.75, 0.98, 1.875, -0.98, 1.75, 1.875, 0, 1.75, 1.875, -2, 1.12,\n  1.35, -1.12, 2, 1.35, 0, 2, 1.35, -2, 1.12, 0.9, -1.12, 2, 0.9, 0, 2, 0.9, 0.98, 1.75, 1.875,\n  1.75, 0.98, 1.875, 1.12, 2, 1.35, 2, 1.12, 1.35, 1.12, 2, 0.9, 2, 1.12, 0.9, 2, 0, 0.45, 2, -1.12,\n  0.45, 1.12, -2, 0.45, 0, -2, 0.45, 1.5, 0, 0.225, 1.5, -0.84, 0.225, 0.84, -1.5, 0.225, 0, -1.5,\n  0.225, 1.5, 0, 0.15, 1.5, -0.84, 0.15, 0.84, -1.5, 0.15, 0, -1.5, 0.15, -1.12, -2, 0.45, -2,\n  -1.12, 0.45, -2, 0, 0.45, -0.84, -1.5, 0.225, -1.5, -0.84, 0.225, -1.5, 0, 0.225, -0.84, -1.5,\n  0.15, -1.5, -0.84, 0.15, -1.5, 0, 0.15, -2, 1.12, 0.45, -1.12, 2, 0.45, 0, 2, 0.45, -1.5, 0.84,\n  0.225, -0.84, 1.5, 0.225, 0, 1.5, 0.225, -1.5, 0.84, 0.15, -0.84, 1.5, 0.15, 0, 1.5, 0.15, 1.12,\n  2, 0.45, 2, 1.12, 0.45, 0.84, 1.5, 0.225, 1.5, 0.84, 0.225, 0.84, 1.5, 0.15, 1.5, 0.84, 0.15,\n  -1.6, 0, 2.025, -1.6, -0.3, 2.025, -1.5, -0.3, 2.25, -1.5, 0, 2.25, -2.3, 0, 2.025, -2.3, -0.3,\n  2.025, -2.5, -0.3, 2.25, -2.5, 0, 2.25, -2.7, 0, 2.025, -2.7, -0.3, 2.025, -3, -0.3, 2.25, -3, 0,\n  2.25, -2.7, 0, 1.8, -2.7, -0.3, 1.8, -3, -0.3, 1.8, -3, 0, 1.8, -1.5, 0.3, 2.25, -1.6, 0.3, 2.025,\n  -2.5, 0.3, 2.25, -2.3, 0.3, 2.025, -3, 0.3, 2.25, -2.7, 0.3, 2.025, -3, 0.3, 1.8, -2.7, 0.3, 1.8,\n  -2.7, 0, 1.575, -2.7, -0.3, 1.575, -3, -0.3, 1.35, -3, 0, 1.35, -2.5, 0, 1.125, -2.5, -0.3, 1.125,\n  -2.65, -0.3, 0.9375, -2.65, 0, 0.9375, -2, -0.3, 0.9, -1.9, -0.3, 0.6, -1.9, 0, 0.6, -3, 0.3,\n  1.35, -2.7, 0.3, 1.575, -2.65, 0.3, 0.9375, -2.5, 0.3, 1.125, -1.9, 0.3, 0.6, -2, 0.3, 0.9, 1.7,\n  0, 1.425, 1.7, -0.66, 1.425, 1.7, -0.66, 0.6, 1.7, 0, 0.6, 2.6, 0, 1.425, 2.6, -0.66, 1.425, 3.1,\n  -0.66, 0.825, 3.1, 0, 0.825, 2.3, 0, 2.1, 2.3, -0.25, 2.1, 2.4, -0.25, 2.025, 2.4, 0, 2.025, 2.7,\n  0, 2.4, 2.7, -0.25, 2.4, 3.3, -0.25, 2.4, 3.3, 0, 2.4, 1.7, 0.66, 0.6, 1.7, 0.66, 1.425, 3.1,\n  0.66, 0.825, 2.6, 0.66, 1.425, 2.4, 0.25, 2.025, 2.3, 0.25, 2.1, 3.3, 0.25, 2.4, 2.7, 0.25, 2.4,\n  2.8, 0, 2.475, 2.8, -0.25, 2.475, 3.525, -0.25, 2.49375, 3.525, 0, 2.49375, 2.9, 0, 2.475, 2.9,\n  -0.15, 2.475, 3.45, -0.15, 2.5125, 3.45, 0, 2.5125, 2.8, 0, 2.4, 2.8, -0.15, 2.4, 3.2, -0.15, 2.4,\n  3.2, 0, 2.4, 3.525, 0.25, 2.49375, 2.8, 0.25, 2.475, 3.45, 0.15, 2.5125, 2.9, 0.15, 2.475, 3.2,\n  0.15, 2.4, 2.8, 0.15, 2.4, 0, 0, 3.15, 0.8, 0, 3.15, 0.8, -0.45, 3.15, 0.45, -0.8, 3.15, 0, -0.8,\n  3.15, 0, 0, 2.85, 0.2, 0, 2.7, 0.2, -0.112, 2.7, 0.112, -0.2, 2.7, 0, -0.2, 2.7, -0.45, -0.8,\n  3.15, -0.8, -0.45, 3.15, -0.8, 0, 3.15, -0.112, -0.2, 2.7, -0.2, -0.112, 2.7, -0.2, 0, 2.7, -0.8,\n  0.45, 3.15, -0.45, 0.8, 3.15, 0, 0.8, 3.15, -0.2, 0.112, 2.7, -0.112, 0.2, 2.7, 0, 0.2, 2.7, 0.45,\n  0.8, 3.15, 0.8, 0.45, 3.15, 0.112, 0.2, 2.7, 0.2, 0.112, 2.7, 0.4, 0, 2.55, 0.4, -0.224, 2.55,\n  0.224, -0.4, 2.55, 0, -0.4, 2.55, 1.3, 0, 2.55, 1.3, -0.728, 2.55, 0.728, -1.3, 2.55, 0, -1.3,\n  2.55, 1.3, 0, 2.4, 1.3, -0.728, 2.4, 0.728, -1.3, 2.4, 0, -1.3, 2.4, -0.224, -0.4, 2.55, -0.4,\n  -0.224, 2.55, -0.4, 0, 2.55, -0.728, -1.3, 2.55, -1.3, -0.728, 2.55, -1.3, 0, 2.55, -0.728, -1.3,\n  2.4, -1.3, -0.728, 2.4, -1.3, 0, 2.4, -0.4, 0.224, 2.55, -0.224, 0.4, 2.55, 0, 0.4, 2.55, -1.3,\n  0.728, 2.55, -0.728, 1.3, 2.55, 0, 1.3, 2.55, -1.3, 0.728, 2.4, -0.728, 1.3, 2.4, 0, 1.3, 2.4,\n  0.224, 0.4, 2.55, 0.4, 0.224, 2.55, 0.728, 1.3, 2.55, 1.3, 0.728, 2.55, 0.728, 1.3, 2.4, 1.3,\n  0.728, 2.4, 0, 0, 0, 1.425, 0, 0, 1.425, 0.798, 0, 0.798, 1.425, 0, 0, 1.425, 0, 1.5, 0, 0.075,\n  1.5, 0.84, 0.075, 0.84, 1.5, 0.075, 0, 1.5, 0.075, -0.798, 1.425, 0, -1.425, 0.798, 0, -1.425, 0,\n  0, -0.84, 1.5, 0.075, -1.5, 0.84, 0.075, -1.5, 0, 0.075, -1.425, -0.798, 0, -0.798, -1.425, 0, 0,\n  -1.425, 0, -1.5, -0.84, 0.075, -0.84, -1.5, 0.075, 0, -1.5, 0.075, 0.798, -1.425, 0, 1.425,\n  -0.798, 0, 0.84, -1.5, 0.075, 1.5, -0.84, 0.075,\n]);\n\nexport interface TeapotProvenance {\n  readonly source: 'three.js';\n  readonly commit: 'ad005397bbd15b0a9fcd5159c782eba56e1cba2a';\n  readonly path: 'examples/jsm/geometries/TeapotGeometry.js';\n  readonly license: 'MIT';\n}\n\nexport type TeapotMeshAsset = MeshAsset & { readonly provenance: TeapotProvenance };\n\nfunction basis(value: number): [number, number, number, number] {\n  const inverse = 1 - value;\n  return [\n    inverse * inverse * inverse,\n    3 * value * inverse * inverse,\n    3 * value * value * inverse,\n    value * value * value,\n  ];\n}\n\nfunction derivativeBasis(value: number): [number, number, number, number] {\n  const inverse = 1 - value;\n  return [\n    -3 * inverse * inverse,\n    3 * inverse * inverse - 6 * value * inverse,\n    6 * value * inverse - 3 * value * value,\n    3 * value * value,\n  ];\n}\n\nfunction evaluatePatch(\n  surface: number,\n  s: number,\n  t: number,\n  fitLid: boolean,\n  blinn: boolean,\n): {\n  point: [number, number, number];\n  ds: [number, number, number];\n  dt: [number, number, number];\n} {\n  const sb = basis(s);\n  const tb = basis(t);\n  const dsb = derivativeBasis(s);\n  const dtb = derivativeBasis(t);\n  const point: [number, number, number] = [0, 0, 0];\n  const ds: [number, number, number] = [0, 0, 0];\n  const dt: [number, number, number] = [0, 0, 0];\n  for (let row = 0; row < 4; row++) {\n    for (let column = 0; column < 4; column++) {\n      const control = PATCHES[surface * 16 + row * 4 + column] ?? 0;\n      const source = control * 3;\n      for (let axis = 0; axis < 3; axis++) {\n        const lidScale = fitLid && surface >= 20 && surface < 28 && axis !== 2 ? 1.077 : 1;\n        let value = (CONTROL_POINTS[source + axis] ?? 0) * lidScale;\n        if (!blinn && axis === 2) value *= 1.3;\n        const pointWeight = value * (sb[row] ?? 0) * (tb[column] ?? 0);\n        const dsWeight = value * (dsb[row] ?? 0) * (tb[column] ?? 0);\n        const dtWeight = value * (sb[row] ?? 0) * (dtb[column] ?? 0);\n        point[axis] = (point[axis] ?? 0) + pointWeight;\n        ds[axis] = (ds[axis] ?? 0) + dsWeight;\n        dt[axis] = (dt[axis] ?? 0) + dtWeight;\n      }\n    }\n  }\n  return { point, ds, dt };\n}\n\nfunction cross(\n  a: readonly [number, number, number],\n  b: readonly [number, number, number],\n): [number, number, number] {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\nfunction normalize(value: [number, number, number]): [number, number, number] {\n  const length = Math.hypot(value[0], value[1], value[2]);\n  return length > 0 ? [value[0] / length, value[1] / length, value[2] / length] : [0, 1, 0];\n}\n\n/** Build an exact Three.js TeapotGeometry-compatible Utah teapot mesh. */\nexport function createTeapotGeometry(\n  size = 0.8,\n  segments = 18,\n  bottom = true,\n  lid = true,\n  body = true,\n  fitLid = true,\n  blinn = true,\n): Result<TeapotMeshAsset, AssetError> {\n  if (!Number.isFinite(size) || size <= 0 || !Number.isFinite(segments) || segments < 2) {\n    return err(\n      new AssetError({\n        code: 'asset-parse-failed',\n        expected: 'finite positive size and segments >= 2',\n        hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n        detail: { field: 'parameters', value: size, reason: `segments=${segments}` },\n      }),\n    );\n  }\n  const steps = Math.max(2, Math.floor(segments));\n  const maxHeight = 3.15 * (blinn ? 1 : 1.3);\n  const maxHeight2 = maxHeight / 2;\n  const trueSize = size / maxHeight2;\n  const firstSurface = body ? 0 : 20;\n  const lastSurface = bottom ? 32 : 28;\n  const activeSurfaces: number[] = [];\n  for (let surface = firstSurface; surface < lastSurface; surface++) {\n    if (lid || surface < 20 || surface >= 28) activeSurfaces.push(surface);\n  }\n  const vertices = new Float32Array(\n    activeSurfaces.length * (steps + 1) * (steps + 1) * FACTORY_FLOATS_PER_VERTEX,\n  );\n  const indices: number[] = [];\n  const stride = steps + 1;\n  let vertex = 0;\n  const positions: Array<[number, number, number]> = [];\n  for (const surface of activeSurfaces) {\n    const surfaceStart = vertex;\n    for (let sStep = 0; sStep <= steps; sStep++) {\n      const s = sStep / steps;\n      for (let tStep = 0; tStep <= steps; tStep++) {\n        const t = tStep / steps;\n        const evaluated = evaluatePatch(surface, s, t, fitLid, blinn);\n        const normalRaw = cross(evaluated.dt, evaluated.ds);\n        const normal =\n          evaluated.point[0] === 0 && evaluated.point[1] === 0\n            ? ([0, evaluated.point[2] > maxHeight2 ? 1 : -1, 0] as [number, number, number])\n            : normalize([normalRaw[0], normalRaw[2], -normalRaw[1]]);\n        const position: [number, number, number] = [\n          Math.fround(trueSize * evaluated.point[0]),\n          Math.fround(trueSize * (evaluated.point[2] - maxHeight2)),\n          Math.fround(-trueSize * evaluated.point[1]),\n        ];\n        const base = vertex * FACTORY_FLOATS_PER_VERTEX;\n        vertices[base] = position[0];\n        vertices[base + 1] = position[1];\n        vertices[base + 2] = position[2];\n        vertices[base + 3] = normal[0];\n        vertices[base + 4] = normal[1];\n        vertices[base + 5] = normal[2];\n        vertices[base + 6] = 1 - t;\n        vertices[base + 7] = 1 - s;\n        positions.push(position);\n        vertex++;\n      }\n    }\n    for (let sStep = 0; sStep < steps; sStep++) {\n      for (let tStep = 0; tStep < steps; tStep++) {\n        const v1 = surfaceStart + sStep * stride + tStep;\n        const v2 = v1 + 1;\n        const v3 = v2 + stride;\n        const v4 = v1 + stride;\n        const same = (a: number, b: number) =>\n          positions[a]?.[0] === positions[b]?.[0] &&\n          positions[a]?.[1] === positions[b]?.[1] &&\n          positions[a]?.[2] === positions[b]?.[2];\n        if (!same(v1, v2) && !same(v1, v3) && !same(v2, v3)) indices.push(v1, v2, v3);\n        if (!same(v1, v3) && !same(v1, v4) && !same(v3, v4)) indices.push(v1, v3, v4);\n      }\n    }\n  }\n  const mesh = meshFromInterleaved(vertices, new Uint32Array(indices));\n  if (!mesh.ok) return mesh;\n  return ok({\n    ...mesh.value,\n    provenance: {\n      source: 'three.js',\n      commit: 'ad005397bbd15b0a9fcd5159c782eba56e1cba2a',\n      path: 'examples/jsm/geometries/TeapotGeometry.js',\n      license: 'MIT',\n    },\n  });\n}\n","import type { MeshAsset } from '@forgeax/engine-types';\nimport { meshFromInterleaved } from './box.js';\n\n/** One shared rule grid; all integer LODs retain the same vertex bytes. */\nexport function createTerrainGrids(vertices: number): readonly MeshAsset[] {\n  if (\n    !Number.isInteger(vertices) ||\n    vertices < 2 ||\n    vertices > 128 ||\n    (vertices & (vertices - 1)) !== 0\n  )\n    throw new RangeError('terrain grid requires power-of-two 2..128 vertices');\n  const data = new Float32Array(vertices * vertices * 8);\n  for (let z = 0; z < vertices; z++)\n    for (let x = 0; x < vertices; x++) {\n      const i = (z * vertices + x) * 8;\n      data.set([x, 0, z, 0, 1, 0, x / (vertices - 1), z / (vertices - 1)], i);\n    }\n  const grids: MeshAsset[] = [];\n  for (let step = 1; step < vertices; step *= 2) {\n    const n = vertices / step;\n    const indices = new Uint32Array((n - 1) ** 2 * 6);\n    let i = 0;\n    for (let z = 0; z < n - 1; z++)\n      for (let x = 0; x < n - 1; x++) {\n        const a = z * step * vertices + x * step;\n        const b = a + step;\n        const c = a + step * vertices;\n        const d = c + step;\n        indices.set([a, c, b, b, c, d], i);\n        i += 6;\n      }\n    const mesh = meshFromInterleaved(data, indices).unwrap();\n    const base = grids[0];\n    grids.push(base ? { ...mesh, vertices: base.vertices, attributes: base.attributes } : mesh);\n  }\n  return grids;\n}\n","// @forgeax/engine-runtime - Procedural Torus geometry (M3 / w8).\n//\n// Mirrors Three.js r184 TorusGeometry: createTorusGeometry(radius, tube,\n// radialSegments?, tubularSegments?) -> Result<MeshAsset, AssetError>.\n// `radius` is the distance from the torus center to the tube center (ring\n// radius); `tube` is the cross-section (tube) radius. Degenerate parameters\n// fail-fast with AssetError('asset-parse-failed').\n//\n// Related: requirements §AC-06 / §AC-14; plan-strategy §M3 + D-P5;\n//          plan-tasks.json w8 acceptanceCheck.\n\nimport type { AssetError, MeshAsset } from '@forgeax/engine-types';\nimport { err, type Result } from '@forgeax/engine-types';\nimport { degenerate, FACTORY_FLOATS_PER_VERTEX, meshFromInterleaved } from './box';\n\nexport function createTorusGeometry(\n  radius: number,\n  tube: number,\n  radialSegments: number = 8,\n  tubularSegments: number = 24,\n): Result<MeshAsset, AssetError> {\n  if (radius <= 0) return err(degenerate(`radius=${radius}`));\n  if (tube <= 0) return err(degenerate(`tube=${tube}`));\n  const rs = radialSegments | 0;\n  const ts = tubularSegments | 0;\n  if (rs < 3) return err(degenerate(`radialSegments=${rs}; minimum 3`));\n  if (ts < 3) return err(degenerate(`tubularSegments=${ts}; minimum 3`));\n\n  const vertexCount = (rs + 1) * (ts + 1);\n  const indexCount = rs * ts * 6;\n  const vertices = new Float32Array(vertexCount * FACTORY_FLOATS_PER_VERTEX);\n  const indices = new Uint32Array(indexCount);\n\n  let vIdx = 0;\n  for (let j = 0; j <= rs; j++) {\n    const v = (j / rs) * Math.PI * 2;\n    const cosV = Math.cos(v);\n    const sinV = Math.sin(v);\n    for (let i = 0; i <= ts; i++) {\n      const u = (i / ts) * Math.PI * 2;\n      const cosU = Math.cos(u);\n      const sinU = Math.sin(u);\n      const x = (radius + tube * cosV) * cosU;\n      const y = (radius + tube * cosV) * sinU;\n      const z = tube * sinV;\n      // normal = normalize(position - center_of_tube_at_u)\n      const centerX = radius * cosU;\n      const centerY = radius * sinU;\n      const nx = x - centerX;\n      const ny = y - centerY;\n      const nz = z;\n      const nlen = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1;\n      const base = vIdx * FACTORY_FLOATS_PER_VERTEX;\n      vertices[base + 0] = x;\n      vertices[base + 1] = y;\n      vertices[base + 2] = z;\n      vertices[base + 3] = nx / nlen;\n      vertices[base + 4] = ny / nlen;\n      vertices[base + 5] = nz / nlen;\n      vertices[base + 6] = i / ts;\n      vertices[base + 7] = j / rs;\n      vIdx++;\n    }\n  }\n\n  let iIdx = 0;\n  for (let j = 1; j <= rs; j++) {\n    for (let i = 1; i <= ts; i++) {\n      const a = (ts + 1) * j + i - 1;\n      const b = (ts + 1) * (j - 1) + i - 1;\n      const c = (ts + 1) * (j - 1) + i;\n      const d = (ts + 1) * j + i;\n      indices[iIdx++] = a;\n      indices[iIdx++] = b;\n      indices[iIdx++] = d;\n      indices[iIdx++] = b;\n      indices[iIdx++] = c;\n      indices[iIdx++] = d;\n    }\n  }\n\n  return meshFromInterleaved(vertices, indices);\n}\n"]}