{"version":3,"sources":["../src/asset-kind.ts","../src/payload-validate.ts","../src/registry/validate-material.ts","../src/prepare-payload.ts","../src/terrain-closure.ts","../src/internal/pack-envelope.ts","../src/internal/package-read.ts","../src/internal/publication-references.ts","../src/internal/retained-pack-json.ts","../src/material/loader.ts","../src/registry/load-trace.ts","../src/registry/artifact-io.ts","../src/registry/catalog.ts","../src/runtime-content.ts","../src/builtin-asset-registry.ts","../src/resolve-asset-handle.ts","../src/scene-handle-fields.ts","../src/registry/scene-publication-fence.ts","../src/registry/instantiate.ts","../src/registry/runtime-projection.ts","../src/registry/load-by-guid.ts","../src/internal/wait-for-asset.ts","../src/internal/pack-reader.ts","../src/registry/plugin-definition.ts","../src/loader-registry.ts","../src/loaders/ies-profile.ts","../src/errors/asset.ts","../src/handles.ts","../src/scene-payload.ts","../src/loaders/mesh-bin.ts","../src/loaders/pack-artifact.ts","../src/loaders/inline-pack.ts","../src/loaders/navigation-mesh.ts","../src/loaders/plugin.ts","../src/loaders/terrain.ts","../src/wire-default-loaders.ts","../src/validate-publication.ts","../src/material/runtime-shader.ts","../src/registry/asset-evidence.ts","../src/registry/catalog-state.ts","../src/registry/load-state.ts","../src/asset-registry.ts","../src/capture-publication.ts","../src/catalog-source.ts","../src/image-error.ts","../src/decode-image-bytes.ts","../src/dynamic-texture-store.ts","../src/internal/artifact-cache.ts","../src/internal/immutable-payload.ts","../src/internal/asset-graph.ts","../src/internal/validate-runtime-row.ts","../src/internal/catalog-session.ts","../src/internal/decoder-registry.ts","../src/internal/load-asset.ts","../src/material/generation-cache.ts","../src/material/inspection.ts","../src/mipmap-generator.ts","../src/plugin.ts","../src/resolve-tileset-runtime.ts","../src/retain-publication.ts"],"names":["AssetError","err","ok","invalid","key","row","output","record","missing","validateArtifactPath","ASSET_ERROR_HINTS","entries","deriveVertexLayoutProjection","deriveVertexCount","handleSlot","BUILTIN_BASE","AssetGuid","guidKey","entry","validateCookedMaterialRecord","materialChildForbiddenFields","failure","decompressZstd","value","validateMeshCardLayout","input","artifact","isMaterialTextureParameterType","validatePluginAsset","validateTerrain","terrainDerivedClosureValid","pass","sameRevision","copyPackData","MaterialArtifactRegistry","publication","invalidated","existing","epoch","promise","resolveComponents","componentSchema","unwrapHandle","guid","authoringCapabilityForAssetKind","projections","name","freezeSnapshot","current","sha256","pin","path"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { AssetKind } from '@forgeax/engine-types';\n\n/** Create the type witness shared by one custom decoder lease and its loads. */\nexport function defineAssetKind<P, K extends string = string>(kind: K): AssetKind<P, K> {\n  return Object.freeze({ kind }) as AssetKind<P, K>;\n}\n","import { isStripTopology } from '@forgeax/engine-types';\n// @forgeax/engine-assets-runtime -- register-time payload validation\n// (feat-20260705-runtime-tier2-decomposition M1 / w4, D-4 F1 straight-cut).\n// Pure move from asset-registry.ts; zero identifier changes.\n\nimport {\n  DEFAULT_VERTEX_ATTRIBUTE_MAP,\n  deriveVertexCount,\n  deriveVertexLayoutProjection,\n} from '@forgeax/engine-geometry';\nimport type {\n  Asset,\n  AssetErrorDetail,\n  TilesetAsset,\n  MeshAsset as TypesMeshAsset,\n} from '@forgeax/engine-types';\nimport { ASSET_ERROR_HINTS, AssetError } from '@forgeax/engine-types';\n\n/**\n * Register-stage fail-fast for `kind: 'mesh'` payloads whose vertices buffer\n * does not match the geometry-owned attribute projection.\n *\n * Validation spec (plan-strategy D-3):\n *   (a) asset.kind !== 'mesh' -> return null immediately\n *   (b) vertices.length === 0 && indices.length === 0 -> return null (empty mesh legal)\n *   (c) vertices.byteLength % projection.arrayStride !== 0 -> `AssetError` with\n *       code='mesh-vertex-stride-mismatch', detail = { vertexCount: 0,\n *       floatsPerVertex: vertices.length / projectedFloatsPerVertex } (non-integer)\n *   (d) otherwise compute vertexCount from the same projection;\n *       scan indices for maxIndex;\n *       if maxIndex >= vertexCount -> same AssetError shape with\n *       detail = { vertexCount: maxIndex + 1, floatsPerVertex: vertices.length / (maxIndex + 1) }\n *\n * Isomorphic with `validateMaterialPayload` — both are private module-level helpers,\n * both return `AssetError | null`, and both are called from `register()` at entry.\n *\n * Anchors: charter P3 (structured failure); plan-strategy D-2 (gate at register stage);\n *          plan-strategy D-3 (three-branch validation: empty / non-divisible-12 / maxIndex mismatch);\n *          plan-strategy D-5 (physical location co-located with validateMaterialPayload).\n */\nexport function validateMeshPayload(asset: Asset): AssetError | null {\n  if (asset.kind !== 'mesh') return null;\n\n  // feat-20260604-mesh-topology-debug-draw M5 / w13: semantic topology gate\n  // (plan-strategy D-A2).\n  //\n  // feat-20260608 M2 / w9: topology is now per-submesh (MeshAsset.submeshes[]).\n  // All topology + submesh-empty + index-OOB validation runs here.\n  const submeshes = (asset as TypesMeshAsset).submeshes;\n  if (submeshes.length === 0) {\n    // TypesMeshAsset POD does not carry an inline GUID; the registry assigns\n    // one on register, but at validation time we only have the payload. Emit\n    // a stable sentinel so the closed AssetErrorDetail union still narrows.\n    const guid = '<no-guid>';\n    return new AssetError({\n      code: 'mesh-asset-submeshes-empty',\n      expected: 'submeshes array has at least one Submesh entry',\n      hint: ASSET_ERROR_HINTS['mesh-asset-submeshes-empty'],\n      detail: { meshAssetGuid: guid },\n    });\n  }\n\n  const materialSlots = (asset as TypesMeshAsset).materialSlots;\n  if (!Array.isArray(materialSlots) || materialSlots.length === 0) {\n    return new AssetError({\n      code: 'mesh-asset-material-slot-index-out-of-range',\n      expected: 'a non-empty materialSlots table for a mesh with submeshes',\n      hint: ASSET_ERROR_HINTS['mesh-asset-material-slot-index-out-of-range'],\n      detail: {\n        meshAssetGuid: '<no-guid>',\n        submeshIndex: 0,\n        materialSlot: -1,\n        materialSlotCount: 0,\n      },\n    });\n  }\n  const slotNames = new Set<string>();\n  const sourceKeys = new Set<string>();\n  for (let slotIndex = 0; slotIndex < materialSlots.length; slotIndex++) {\n    const slot = materialSlots[slotIndex];\n    const slotName = slot?.slotName.trim() ?? '';\n    const sourceKey = slot?.sourceKey?.trim();\n    if (slotName.length === 0 || slotNames.has(slotName)) {\n      return new AssetError({\n        code: 'asset-invalid-value',\n        expected: `materialSlots[${slotIndex}].slotName is non-empty and unique`,\n        hint: 'give every Mesh material slot a stable unique slotName',\n        detail: {\n          field: `materialSlots[${slotIndex}].slotName`,\n          value: slotName,\n          reason: 'empty-or-duplicate',\n        },\n      });\n    }\n    slotNames.add(slotName);\n    if (sourceKey !== undefined && sourceKey.length > 0) {\n      if (sourceKeys.has(sourceKey)) {\n        return new AssetError({\n          code: 'asset-invalid-value',\n          expected: `materialSlots[${slotIndex}].sourceKey is unique when present`,\n          hint: 'derive a stable unique source identity for every imported Mesh material slot',\n          detail: {\n            field: `materialSlots[${slotIndex}].sourceKey`,\n            value: sourceKey,\n            reason: 'duplicate',\n          },\n        });\n      }\n      sourceKeys.add(sourceKey);\n    }\n  }\n\n  const hasIndices = (asset.indices?.length ?? 0) > 0;\n  const indexBufferLength = asset.indices?.length ?? 0;\n  for (let i = 0; i < submeshes.length; i++) {\n    const sm = submeshes[i];\n    if (sm === undefined) continue;\n    const topology = sm.topology;\n    if (\n      !Number.isInteger(sm.materialSlot) ||\n      sm.materialSlot < 0 ||\n      sm.materialSlot >= materialSlots.length\n    ) {\n      return new AssetError({\n        code: 'mesh-asset-material-slot-index-out-of-range',\n        expected: `submesh[${i}].materialSlot in [0, ${materialSlots.length})`,\n        hint: ASSET_ERROR_HINTS['mesh-asset-material-slot-index-out-of-range'],\n        detail: {\n          meshAssetGuid: '<no-guid>',\n          submeshIndex: i,\n          materialSlot: sm.materialSlot,\n          materialSlotCount: materialSlots.length,\n        },\n      });\n    }\n    if (isStripTopology(topology) && !hasIndices) {\n      return new AssetError({\n        code: 'asset-invalid-value',\n        expected: `submesh[${i}] strip topology carries an index buffer`,\n        hint: 'line-strip / triangle-strip meshes must provide indices; add MeshAsset.indices or use line-list / triangle-list',\n        detail: {\n          field: `submeshes[${i}].topology`,\n          value: topology,\n          reason: 'strip-topology-without-indices',\n        },\n      });\n    }\n    if (asset.vertices.length === 0 && topology !== 'triangle-list') {\n      return new AssetError({\n        code: 'asset-invalid-value',\n        expected: `submesh[${i}]: empty geometry uses 'triangle-list'`,\n        hint: 'a zero-vertex mesh has nothing to draw; change submesh topology to triangle-list or provide vertices',\n        detail: {\n          field: `submeshes[${i}].topology`,\n          value: topology,\n          reason: 'empty-geometry-non-default-topology',\n        },\n      });\n    }\n    // feat-20260608 M2 / w9: index-range-out-of-bounds per submesh\n    if (sm.indexOffset + sm.indexCount > indexBufferLength) {\n      // TypesMeshAsset POD does not carry an inline GUID; the registry assigns\n      // one on register, but at validation time we only have the payload. Emit\n      // a stable sentinel so the closed AssetErrorDetail union still narrows.\n      const guid = '<no-guid>';\n      return new AssetError({\n        code: 'mesh-submesh-index-range-out-of-bounds',\n        expected: `submesh[${i}].indexOffset + indexCount <= index buffer length (${indexBufferLength})`,\n        hint: ASSET_ERROR_HINTS['mesh-submesh-index-range-out-of-bounds'],\n        detail: {\n          submeshIndex: i,\n          indexOffset: sm.indexOffset,\n          indexCount: sm.indexCount,\n          indexBufferLength,\n          meshAssetGuid: guid,\n        },\n      });\n    }\n  }\n\n  // indices is optional (vertex-only meshes omit it); read defensively. The\n  // stride invariant below stays null-safe for vertex-only meshes (D-A4).\n  if (asset.vertices.length === 0 && (asset.indices?.length ?? 0) === 0) return null;\n\n  const attrs = (asset as TypesMeshAsset).attributes;\n  const candidateProjection =\n    attrs !== undefined && Object.keys(attrs).length > 0\n      ? deriveVertexLayoutProjection(attrs)\n      : deriveVertexLayoutProjection(DEFAULT_VERTEX_ATTRIBUTE_MAP);\n  const projection =\n    candidateProjection.attributes.length > 0\n      ? candidateProjection\n      : deriveVertexLayoutProjection(DEFAULT_VERTEX_ATTRIBUTE_MAP);\n  const projectedFloatsPerVertex = projection.arrayStride / Float32Array.BYTES_PER_ELEMENT;\n  const isSkinned =\n    projection.attributes.some((attribute) => attribute.key === 'skinIndex') &&\n    projection.attributes.some((attribute) => attribute.key === 'skinWeight');\n  const expectedStride =\n    isSkinned && projectedFloatsPerVertex === 18\n      ? '18 floats per vertex (= position vec3 + normal vec3 + uv vec2 + tangent vec4 + skinIndex u16x4 + skinWeight vec4)'\n      : projectedFloatsPerVertex === 12\n        ? '12 floats per vertex (= position vec3 + normal vec3 + uv vec2 + tangent vec4)'\n        : `${projectedFloatsPerVertex} floats per vertex from the geometry-owned attribute projection`;\n  const vertexCount = deriveVertexCount(asset.vertices, projection);\n\n  if (vertexCount === undefined) {\n    return new AssetError({\n      code: 'mesh-vertex-stride-mismatch',\n      expected: expectedStride,\n      hint: 'repack MeshAsset.vertices with the geometry-owned VertexLayoutProjection',\n      detail: {\n        vertexCount: 0,\n        floatsPerVertex: asset.vertices.length / projectedFloatsPerVertex,\n      },\n    });\n  }\n\n  // Vertex-only meshes (no indices) skip the maxIndex-vs-vertexCount invariant:\n  // there is no index buffer to bound-check against the vertex array (D-A4).\n  const indices = asset.indices;\n  if (indices === undefined || indices.length === 0) return null;\n  let maxIndex = 0;\n  for (let i = 0; i < indices.length; i++) {\n    const idx = indices[i];\n    if (idx !== undefined && idx > maxIndex) maxIndex = idx;\n  }\n\n  // Indexed draws may share a larger vertex allocation; unused vertices are legal.\n  if (maxIndex >= vertexCount) {\n    return new AssetError({\n      code: 'mesh-vertex-stride-mismatch',\n      expected: expectedStride,\n      hint: 'repack MeshAsset.vertices with the geometry-owned VertexLayoutProjection',\n      detail: {\n        vertexCount: maxIndex + 1,\n        floatsPerVertex: vertexCount > 0 ? asset.vertices.length / (maxIndex + 1) : 0,\n      },\n    });\n  }\n\n  return null;\n}\n\n// === Tileset / Tilemap / TileLayer validators (feat-20260608 M0 baseline rebuild) ===\n//\n// R-6 first-error path (plan-strategy §R-6 ordering, M1 extended):\n//   (1) `atlases.length >= 1`                -> 'tileset-tile-entry-malformed'\n//                                                .field='atlases' .scope='tileset-asset' (M1)\n//   (2) region rectangle stays in atlas      -> 'tileset-region-index-out-of-range' (M0)\n//   (3) `region.atlasIndex` in atlases range -> 'tileset-tile-entry-malformed'\n//                                                .field='atlasIndex' .scope='tileset-asset' (M1)\n//   (4) `tiles[i].regionIndex` in regions    -> 'tileset-region-index-out-of-range' (M0)\n//   (5) tile entry widthCells / heightCells  -> 'tileset-tile-entry-malformed'\n//        / pivotX / pivotY / collider           .field=<field> .scope='tile-entry'\n//                                                .tileEntryIndex=i (M1)\n//\n// Tilemap / TileLayer register-time invariants use `AssetError\n// 'asset-invalid-value'` with `.detail = { field, value, reason }` so the\n// closed AssetErrorDetail discriminated union narrows uniformly (charter\n// P4 consistent abstraction with `validateMeshPayload`).\n\n/**\n * Optional atlas extent for `validateTilesetPayload`. When omitted, the\n * region-rectangle bounds-check is skipped — only the\n * `tiles[].regionIndex` in `[0, regions.length)` invariant runs.\n */\nexport interface TilesetValidateOptions {\n  readonly atlasWidth?: number;\n  readonly atlasHeight?: number;\n}\n\n/**\n * Construct an `AssetError` for the M1 `tileset-tile-entry-malformed`\n * code with structured `.detail` (closed 7-variant `.field` enum +\n * 2-variant `.scope` + optional `.tileEntryIndex`). The helper centralises\n * the boilerplate so each call site stays a one-liner (charter F1 single\n * affordance) and the `.detail` shape stays SSOT-aligned with\n * `AssetTilesetTileEntryMalformedDetail`.\n */\nfunction tileEntryMalformed(args: {\n  tilesetGuid: string;\n  field: 'widthCells' | 'heightCells' | 'pivotX' | 'pivotY' | 'collider' | 'atlases' | 'atlasIndex';\n  scope: 'tileset-asset' | 'tile-entry';\n  tileEntryIndex?: number;\n  expected: string;\n}): AssetError {\n  const detail: AssetErrorDetail = {\n    code: 'tileset-tile-entry-malformed',\n    field: args.field,\n    scope: args.scope,\n    tilesetGuid: args.tilesetGuid,\n    ...(args.tileEntryIndex !== undefined ? { tileEntryIndex: args.tileEntryIndex } : {}),\n    expected: args.expected,\n    hint: ASSET_ERROR_HINTS['tileset-tile-entry-malformed'],\n  };\n  return new AssetError({\n    code: 'tileset-tile-entry-malformed',\n    expected: args.expected,\n    hint: ASSET_ERROR_HINTS['tileset-tile-entry-malformed'],\n    detail,\n  });\n}\n\n/**\n * Validate the shape of a `TilesetTileCollider` value (R-6 step 5d).\n * Returns `null` when the collider is well-formed, otherwise an\n * `AssetError` with code `'tileset-tile-entry-malformed'` and\n * `.detail.field = 'collider'` (charter P3 closed schema).\n *\n * Rules per variant:\n *   - `'none'` -- always accepted.\n *   - `'rect'` -- `rect.length === 4`; each component in `[0, 1]`;\n *     `w > 0`, `h > 0`; `x + w <= 1`, `y + h <= 1`.\n *   - `'polygon'` -- `points.length >= 3`; each point's `x` and `y` in\n *     `[0, 1]`.\n *   - any other `type` discriminator surfaces the same `.field='collider'`\n *     fail-fast (unreachable through the typed surface but defends\n *     against unchecked JSON loaders, charter P4 fail-fast in depth).\n */\nfunction validateColliderShape(\n  collider: NonNullable<TilesetTileEntryColliderField>,\n  tilesetGuid: string,\n  tileEntryIndex: number,\n): AssetError | null {\n  if (collider.type === 'none') return null;\n  if (collider.type === 'rect') {\n    const rect = collider.rect;\n    if (!Array.isArray(rect) || rect.length !== 4) {\n      return tileEntryMalformed({\n        tilesetGuid,\n        field: 'collider',\n        scope: 'tile-entry',\n        tileEntryIndex,\n        expected: `tiles[${tileEntryIndex}].collider.rect length === 4`,\n      });\n    }\n    const [rx, ry, rw, rh] = rect;\n    const valid =\n      typeof rx === 'number' &&\n      typeof ry === 'number' &&\n      typeof rw === 'number' &&\n      typeof rh === 'number' &&\n      rx >= 0 &&\n      ry >= 0 &&\n      rw > 0 &&\n      rh > 0 &&\n      rx + rw <= 1 &&\n      ry + rh <= 1;\n    if (!valid) {\n      return tileEntryMalformed({\n        tilesetGuid,\n        field: 'collider',\n        scope: 'tile-entry',\n        tileEntryIndex,\n        expected: `tiles[${tileEntryIndex}].collider.rect in [0, 1]^2 with w > 0, h > 0, x + w <= 1, y + h <= 1`,\n      });\n    }\n    return null;\n  }\n  if (collider.type === 'polygon') {\n    const points = collider.points;\n    if (!Array.isArray(points) || points.length < 3) {\n      return tileEntryMalformed({\n        tilesetGuid,\n        field: 'collider',\n        scope: 'tile-entry',\n        tileEntryIndex,\n        expected: `tiles[${tileEntryIndex}].collider.points length >= 3`,\n      });\n    }\n    for (let j = 0; j < points.length; j++) {\n      const p = points[j];\n      if (\n        !Array.isArray(p) ||\n        p.length !== 2 ||\n        typeof p[0] !== 'number' ||\n        typeof p[1] !== 'number' ||\n        p[0] < 0 ||\n        p[0] > 1 ||\n        p[1] < 0 ||\n        p[1] > 1\n      ) {\n        return tileEntryMalformed({\n          tilesetGuid,\n          field: 'collider',\n          scope: 'tile-entry',\n          tileEntryIndex,\n          expected: `tiles[${tileEntryIndex}].collider.points[${j}] in [0, 1]^2`,\n        });\n      }\n    }\n    return null;\n  }\n  // Unknown discriminator (only reachable via unchecked JSON loaders bypassing\n  // the typed surface). Closed enum -> fail-fast (charter P3).\n  return tileEntryMalformed({\n    tilesetGuid,\n    field: 'collider',\n    scope: 'tile-entry',\n    tileEntryIndex,\n    expected: `tiles[${tileEntryIndex}].collider.type in {'none', 'rect', 'polygon'}`,\n  });\n}\n\n/**\n * Internal alias for the optional `collider` field on `TilesetTileEntry`.\n * Localised to keep the validator helper signature math-free.\n */\ntype TilesetTileEntryColliderField = TilesetAsset['tiles'][number]['collider'];\n\n/**\n * Validate a `TilesetAsset` payload at register time (M0 baseline rebuild\n * + M1 schema extension). Returns `null` on success or an `AssetError`\n * carrying the first-error details (charter P3 fail-fast). R-6 ordering:\n *\n *   1. `atlases.length >= 1` -- 'tileset-tile-entry-malformed' .field='atlases'.\n *   2. Region rectangle escapes atlas extent (when extent is supplied) --\n *      M0 code 'tileset-region-index-out-of-range'.\n *   3. `regions[i].atlasIndex` in `[0, atlases.length)` -- 'tileset-tile-entry-malformed'\n *      .field='atlasIndex'.\n *   4. `tiles[i].regionIndex` in `[0, regions.length)` -- M0 code.\n *   5. Per-tile-entry boundaries -- 'tileset-tile-entry-malformed'\n *      .field=widthCells | heightCells | pivotX | pivotY | collider,\n *      in that order, .scope='tile-entry' .tileEntryIndex=i.\n */\nexport function validateTilesetPayload(\n  asset: TilesetAsset,\n  opts: TilesetValidateOptions = {},\n): AssetError | null {\n  const assetGuid = '<no-guid>';\n  // (1) atlases empty fail-fast (M1 R-6 top-level invariant).\n  if (asset.atlases.length < 1) {\n    return tileEntryMalformed({\n      tilesetGuid: assetGuid,\n      field: 'atlases',\n      scope: 'tileset-asset',\n      expected: 'atlases.length >= 1',\n    });\n  }\n\n  const regionCount = asset.regions.length;\n  const atlasesLength = asset.atlases.length;\n  // (2) region rectangle bounds-check. Negative coords / non-positive size are\n  // rejected regardless of whether an atlas extent is supplied; the optional\n  // atlasWidth / atlasHeight tightens the upper bound when present.\n  const atlasWidth = opts.atlasWidth;\n  const atlasHeight = opts.atlasHeight;\n  for (let i = 0; i < regionCount; i++) {\n    const region = asset.regions[i];\n    if (region === undefined) continue;\n    const negativeOrZero = region.x < 0 || region.y < 0 || region.width <= 0 || region.height <= 0;\n    const exceedsAtlas =\n      typeof atlasWidth === 'number' &&\n      typeof atlasHeight === 'number' &&\n      (region.x + region.width > atlasWidth || region.y + region.height > atlasHeight);\n    if (negativeOrZero || exceedsAtlas) {\n      return new AssetError({\n        code: 'tileset-region-index-out-of-range',\n        expected: `regions[${i}] rectangle (x/y >= 0, width/height > 0${\n          typeof atlasWidth === 'number' && typeof atlasHeight === 'number'\n            ? `, x + width <= ${atlasWidth}, y + height <= ${atlasHeight}`\n            : ''\n        })`,\n        hint: ASSET_ERROR_HINTS['tileset-region-index-out-of-range'],\n        detail: {\n          code: 'tileset-region-index-out-of-range',\n          tilesetGuid: assetGuid,\n          tileId: 0,\n          regionIndex: i,\n          regionCount,\n        },\n      });\n    }\n    // (3) per-region atlasIndex bounds-check (M1; optional field defaults 0).\n    if (region.atlasIndex !== undefined) {\n      const ai = region.atlasIndex;\n      if (!Number.isInteger(ai) || ai < 0 || ai >= atlasesLength) {\n        return tileEntryMalformed({\n          tilesetGuid: assetGuid,\n          field: 'atlasIndex',\n          scope: 'tileset-asset',\n          expected: `regions[${i}].atlasIndex in [0, ${atlasesLength})`,\n        });\n      }\n    }\n  }\n  // (4) tile entry regionIndex in [0, regions.length) (M0 code).\n  for (let i = 0; i < asset.tiles.length; i++) {\n    const entry = asset.tiles[i];\n    if (entry === undefined) continue;\n    const ri = entry.regionIndex;\n    if (!Number.isInteger(ri) || ri < 0 || ri >= regionCount) {\n      return new AssetError({\n        code: 'tileset-region-index-out-of-range',\n        expected: `tiles[${i}].regionIndex in [0, ${regionCount})`,\n        hint: ASSET_ERROR_HINTS['tileset-region-index-out-of-range'],\n        detail: {\n          code: 'tileset-region-index-out-of-range',\n          tilesetGuid: assetGuid,\n          tileId: i + 1,\n          regionIndex: ri,\n          regionCount,\n        },\n      });\n    }\n  }\n  // (5) per-tile-entry M1 boundaries -- widthCells > heightCells > pivotX >\n  // pivotY > collider, per plan-strategy §R-6 first-error order. Each loop\n  // iteration runs the full sub-order on entry i before advancing to i+1 so\n  // the deterministic global order is (i=0 widthCells, i=0 heightCells, ...,\n  // i=0 collider, i=1 widthCells, ...). Tests in tileset-asset-validate.test.ts\n  // R-6 block exercise the sub-order on a single entry.\n  for (let i = 0; i < asset.tiles.length; i++) {\n    const entry = asset.tiles[i];\n    if (entry === undefined) continue;\n    if (entry.widthCells !== undefined) {\n      const w = entry.widthCells;\n      if (!Number.isFinite(w) || w <= 0 || w > 64) {\n        return tileEntryMalformed({\n          tilesetGuid: assetGuid,\n          field: 'widthCells',\n          scope: 'tile-entry',\n          tileEntryIndex: i,\n          expected: `tiles[${i}].widthCells in (0, 64]`,\n        });\n      }\n    }\n    if (entry.heightCells !== undefined) {\n      const h = entry.heightCells;\n      if (!Number.isFinite(h) || h <= 0 || h > 64) {\n        return tileEntryMalformed({\n          tilesetGuid: assetGuid,\n          field: 'heightCells',\n          scope: 'tile-entry',\n          tileEntryIndex: i,\n          expected: `tiles[${i}].heightCells in (0, 64]`,\n        });\n      }\n    }\n    if (entry.pivotX !== undefined) {\n      const px = entry.pivotX;\n      if (!Number.isFinite(px) || px < 0 || px > 1) {\n        return tileEntryMalformed({\n          tilesetGuid: assetGuid,\n          field: 'pivotX',\n          scope: 'tile-entry',\n          tileEntryIndex: i,\n          expected: `tiles[${i}].pivotX in [0, 1]`,\n        });\n      }\n    }\n    if (entry.pivotY !== undefined) {\n      const py = entry.pivotY;\n      if (!Number.isFinite(py) || py < 0 || py > 1) {\n        return tileEntryMalformed({\n          tilesetGuid: assetGuid,\n          field: 'pivotY',\n          scope: 'tile-entry',\n          tileEntryIndex: i,\n          expected: `tiles[${i}].pivotY in [0, 1]`,\n        });\n      }\n    }\n    if (entry.collider !== undefined) {\n      const colliderErr = validateColliderShape(entry.collider, assetGuid, i);\n      if (colliderErr !== null) return colliderErr;\n    }\n  }\n  return null;\n}\n\n/**\n * Compute the implicit atlas extent of a `TilesetAsset` from its grid metadata\n * (`columns * tileWidth` x `rows * tileHeight`). Used by the register-time\n * region-bounds check when the caller does not supply explicit extents.\n */\nexport function inferAtlasExtent(asset: TilesetAsset): { atlasWidth: number; atlasHeight: number } {\n  return {\n    atlasWidth: asset.columns * asset.tileWidth,\n    atlasHeight: asset.rows * asset.tileHeight,\n  };\n}\n","import {\n  AssetError,\n  isMaterialTextureParameterType,\n  type MaterialAsset,\n} from '@forgeax/engine-types';\nimport type { AssetRegistry } from '../asset-registry';\n\n/** Validate the asset-owned parameter schema and pass module identifiers. */\nexport function validateMaterialPasses(asset: MaterialAsset): AssetError | null {\n  const passes = asset.passes;\n  // undefined passes is valid (material inherits from parent at resolve time);\n  // only explicit empty passes[] is an error.\n  if (passes === undefined || passes.length === 0) {\n    if (passes !== undefined && passes.length === 0) {\n      return new AssetError({\n        code: 'asset-invalid-value',\n        expected: 'MaterialAsset with at least one pass',\n        hint: 'add at least one pass descriptor to passes[] before register',\n        detail: { passCount: 0 },\n      });\n    }\n    // passes undefined: skip validation (inherits from parent later)\n    return null;\n  }\n\n  for (let passIndex = 0; passIndex < passes.length; passIndex++) {\n    const pass = passes[passIndex];\n    if (pass === undefined) continue;\n    if (pass.program.module.length === 0) {\n      return new AssetError({\n        code: 'asset-invalid-value',\n        expected: 'pass.program.module to be a non-empty module identifier',\n        hint: `pass[${passIndex}] has an empty program.module`,\n      });\n    }\n  }\n\n  const values: Record<string, unknown> = (asset.values as Record<string, unknown>) ?? {};\n\n  // The first declaration of each asset parameter owns its value contract.\n  const missingParams: string[] = [];\n  const seen = new Set<string>();\n  for (const entry of asset.parameters ?? []) {\n    if (seen.has(entry.name)) continue;\n    seen.add(entry.name);\n    const value = values[entry.name];\n    if (value === undefined) {\n      if (\n        entry.default !== undefined ||\n        entry.optional ||\n        isMaterialTextureParameterType(entry.type)\n      ) {\n        continue;\n      }\n      missingParams.push(entry.name);\n      continue;\n    }\n    if (value === null && entry.optional) continue;\n    // Type-check supplied values\n    const typeOk = validateParamType(entry.type, value);\n    if (!typeOk) {\n      return new AssetError({\n        code: 'asset-invalid-value',\n        expected: `values.${entry.name} to be of type ${entry.type}`,\n        hint: `values['${entry.name}'] has type ${typeof value} but paramSchema declares ${entry.type}`,\n        detail: { paramName: entry.name, expectedType: entry.type, got: typeof value },\n      });\n    }\n  }\n\n  if (missingParams.length > 0) {\n    return new AssetError({\n      code: 'asset-invalid-value',\n      expected: `values to contain keys: ${missingParams.join(', ')}`,\n      hint: `missing required params: ${missingParams.join(', ')}`,\n      detail: { missingParams },\n    });\n  }\n\n  return null;\n}\n\n/**\n * Sprite 9-slice values fail-fast validation\n * (feat-20260527-sprite-nineslice M2 / w8, plan-strategy §D-1 + AC-08).\n *\n * Fires when:\n *  - asset.kind === 'material'\n *  - first pass shader === 'forgeax::sprite'\n *  - values.slices is present\n *\n * Six fail-fast branches (1:1 with w4 test):\n *   (1) any component is negative\n *   (2) slices.x + slices.z >= region.zw[0]   (X-axis overlap)\n *   (3) slices.y + slices.w >= region.zw[1]   (Y-axis overlap)\n *   (4) any component is NaN\n *   (5) any component is Infinity\n *   (6) length !== 4\n *\n * Reuses the existing 'asset-invalid-value' member of the closed\n * `AssetErrorCode` 13-member union (no new code added per\n * AGENTS.md §Error model). The `.expected` literal mirrors the AI-User\n * Charter §3 string; `.hint` inlines the offending sum + the relevant\n * `region.zw` numeral so AI users can copy-paste the prompt straight\n * back into the IDE for self-recovery (plan-strategy §R-4).\n *\n * @returns AssetError on failure, null on success.\n */\nexport function validateSpriteSlices(asset: MaterialAsset): AssetError | null {\n  const passes = asset.passes;\n  if (passes === undefined || passes.length === 0) return null;\n  const firstPass = passes[0];\n  if (firstPass === undefined || firstPass.program.module !== 'forgeax_material::sprite')\n    return null;\n  const pv = (asset.values ?? {}) as Record<string, unknown>;\n  const slicesRaw = pv.slices;\n  // Field absent — caller relies on paramSchema default [0, 0, 0, 0]; nothing to check.\n  if (slicesRaw === undefined) return null;\n  const expected =\n    'values.slices: [number, number, number, number] with 0 ≤ left + right < region.zw[0] and 0 ≤ top + bottom < region.zw[1]';\n  if (!Array.isArray(slicesRaw)) {\n    return new AssetError({\n      code: 'asset-invalid-value',\n      expected,\n      hint: `values.slices is not an array (got ${typeof slicesRaw}); must be a 4-tuple [left, top, right, bottom]`,\n      detail: { paramName: 'slices', got: typeof slicesRaw },\n    });\n  }\n  // (6) length check\n  if (slicesRaw.length !== 4) {\n    return new AssetError({\n      code: 'asset-invalid-value',\n      expected,\n      hint: `values.slices length is ${slicesRaw.length}; must be 4 ([left, top, right, bottom])`,\n      detail: { paramName: 'slices', got: slicesRaw.length },\n    });\n  }\n  const slices = slicesRaw as readonly unknown[];\n  // Type check each component first.\n  for (let i = 0; i < 4; i++) {\n    if (typeof slices[i] !== 'number') {\n      return new AssetError({\n        code: 'asset-invalid-value',\n        expected,\n        hint: `values.slices[${i}] is not a number (got ${typeof slices[i]})`,\n        detail: { paramName: 'slices', got: typeof slices[i] },\n      });\n    }\n  }\n  const left = slices[0] as number;\n  const top = slices[1] as number;\n  const right = slices[2] as number;\n  const bottom = slices[3] as number;\n  // (4) NaN\n  for (let i = 0; i < 4; i++) {\n    if (Number.isNaN(slices[i] as number)) {\n      return new AssetError({\n        code: 'asset-invalid-value',\n        expected,\n        hint: `values.slices[${i}] is NaN; all four components must be finite non-negative numbers`,\n        detail: { paramName: 'slices', got: 'NaN' },\n      });\n    }\n  }\n  // (5) Infinity\n  for (let i = 0; i < 4; i++) {\n    if (!Number.isFinite(slices[i] as number)) {\n      return new AssetError({\n        code: 'asset-invalid-value',\n        expected,\n        hint: `values.slices[${i}] is Infinity; all four components must be finite non-negative numbers`,\n        detail: { paramName: 'slices', got: 'Infinity' },\n      });\n    }\n  }\n  // (1) negative — D-3 sentinel uses negative .w for tile mode but only\n  // after extract; at register-time the user-supplied tuple must be all\n  // non-negative (the engine encodes the sign downstream).\n  for (let i = 0; i < 4; i++) {\n    if ((slices[i] as number) < 0) {\n      return new AssetError({\n        code: 'asset-invalid-value',\n        expected,\n        hint: `values.slices[${i}] = ${slices[i]}; all four components must be non-negative`,\n        detail: { paramName: 'slices', got: slices[i] as number },\n      });\n    }\n  }\n  // (2)/(3) overlap with region. region default is [0, 0, 1, 1];\n  // user override comes via values.region (vec4).\n  const regionRaw = pv.region;\n  let regionZ = 1;\n  let regionW = 1;\n  if (Array.isArray(regionRaw) && regionRaw.length >= 4) {\n    const rz = regionRaw[2];\n    const rw = regionRaw[3];\n    if (typeof rz === 'number') regionZ = rz;\n    if (typeof rw === 'number') regionW = rw;\n  }\n  const sumX = left + right;\n  if (sumX >= regionZ) {\n    return new AssetError({\n      code: 'asset-invalid-value',\n      expected,\n      hint: `received slices=[${left}, ${top}, ${right}, ${bottom}]; left + right = ${sumX} ≥ ${regionZ} (region.z)`,\n      detail: { paramName: 'slices', got: sumX },\n    });\n  }\n  const sumY = top + bottom;\n  if (sumY >= regionW) {\n    return new AssetError({\n      code: 'asset-invalid-value',\n      expected,\n      hint: `received slices=[${left}, ${top}, ${right}, ${bottom}]; top + bottom = ${sumY} ≥ ${regionW} (region.w)`,\n      detail: { paramName: 'slices', got: sumY },\n    });\n  }\n  return null;\n}\n\nexport function validateParamType(type: string, value: unknown): boolean {\n  switch (type) {\n    case 'f32':\n    case 'i32':\n    case 'u32':\n      return typeof value === 'number';\n    case 'vec2':\n      return Array.isArray(value) && value.length >= 2 && value.every((v) => typeof v === 'number');\n    case 'vec3':\n      return Array.isArray(value) && value.length >= 3 && value.every((v) => typeof v === 'number');\n    case 'vec4':\n      return Array.isArray(value) && value.length >= 4 && value.every((v) => typeof v === 'number');\n    case 'color':\n      return (\n        Array.isArray(value) &&\n        (value.length === 3 || value.length === 4) &&\n        value.every((v) => typeof v === 'number')\n      );\n    case 'texture':\n    case 'texture_2d_array':\n    case 'texture_3d':\n    case 'texture_cube':\n    case 'texture_external':\n      // A cooked pack may keep an asset GUID as the compact texture\n      // shorthand. The render material resolver expands that reference at\n      // the resource boundary; rejecting it here makes authored packs fail\n      // before the same value can reach the resolver.\n      return (\n        typeof value === 'string' ||\n        (typeof value === 'object' && value !== null && !Array.isArray(value))\n      );\n    case 'bool':\n      return typeof value === 'boolean';\n    default:\n      return false;\n  }\n}\n\n/**\n * feat-20260527-sprite-nineslice M4 / w18 (D-9): register-time soft-warn\n * for sliceMode=1 (tile) bound to a sampler whose addressMode is not\n * 'repeat'. Bumps `nineslice.tile-needs-repeat-sampler` once per offending\n * catalogue call. Never throws -- the counter is the sole AI-user-facing\n * signal (charter P3 machine-readable; AC-08 closed, never extends\n * AssetErrorCode).\n *\n * feat-20260614 M8 (D-19): `values.sampler` is now an embedded GUID\n * string (dash-form), resolved against the catalogue rather than a handle.\n */\nexport function detectTileNeedsRepeatSampler(registry: AssetRegistry, asset: MaterialAsset): void {\n  if (registry.metrics === null) return;\n  const passes = asset.passes;\n  if (passes === undefined || passes.length === 0) return;\n  const firstPass = passes[0];\n  if (\n    firstPass === undefined ||\n    (firstPass.program.module !== 'forgeax_material::sprite' &&\n      firstPass.program.module !== 'forgeax::sprite')\n  )\n    return;\n  const pv = (asset.values ?? {}) as Record<string, unknown>;\n  const slicesAndMode = pv.slicesAndMode;\n  const encodedTile =\n    Array.isArray(slicesAndMode) && typeof slicesAndMode[3] === 'number'\n      ? slicesAndMode[3] < 0\n      : false;\n  const legacyTile = typeof pv.sliceMode === 'number' && pv.sliceMode === 1;\n  if (!encodedTile && !legacyTile) return;\n  const samplerGuid = typeof pv.sampler === 'string' ? pv.sampler : undefined;\n  if (samplerGuid === undefined) return;\n  const samplerEnvelope = registry.assetCatalog.get(samplerGuid.toLowerCase());\n  if (samplerEnvelope === undefined || samplerEnvelope.kind !== 'sampler') return;\n  const samplerAsset = samplerEnvelope.payload;\n  if (samplerAsset.kind !== 'sampler') return;\n  const u = samplerAsset.addressModeU;\n  const v = samplerAsset.addressModeV;\n  if (u !== 'repeat' || v !== 'repeat') {\n    registry.metrics.increment('nineslice.tile-needs-repeat-sampler');\n  }\n}\n\n/**\n * feat-20260613-material-paramschema-driven-binding M4 / w23 (D-5 graceful):\n * Return the texture-field name set for the given material-shader id,\n * derived from the registered shader's paramSchema via `derive(paramSchema)\n * .textureFieldNames`. Returns `undefined` when the shader is not yet\n * registered (cross-worktree shader-late-register, plan R-4).\n *\n * Used by `extractFrame` to know which values fields the shader\n * declares as texture handles; the extract layer validates handle-vs-\n * scalar typing and drops misclassified slots so the record stage's\n * MISSING_TEXTURE_HANDLE fallback can take over (white default texture)\n * rather than letting a stray handle reach `device.createBindGroup`.\n */\nexport function materialShaderTextureFieldNames(\n  registry: AssetRegistry,\n  shaderId: string,\n): ReadonlySet<string> | undefined {\n  const lookup = registry.shaderRegistry.findMaterialArtifact(shaderId);\n  if (!lookup.ok) return undefined;\n  return lookup.value.paramSchemaProjection.derivedInterface.textureFieldNames;\n}\n","import { AssetGuid } from '@forgeax/engine-pack/guid';\nimport { copyPackData, packArrayStorage } from '@forgeax/engine-pack/runtime';\nimport { validateTerrain } from '@forgeax/engine-terrain';\nimport {\n  type Asset,\n  AssetError,\n  type AssetRef,\n  err,\n  type MaterialAsset,\n  materialChildForbiddenFields,\n  ok,\n  type Result,\n} from '@forgeax/engine-types';\nimport { withMeshAabb } from './aabb.js';\nimport {\n  inferAtlasExtent,\n  validateMeshPayload,\n  validateTilesetPayload,\n} from './payload-validate.js';\nimport { validateMaterialPasses, validateSpriteSlices } from './registry/validate-material.js';\n\nexport function assertPrivateMeshStorage(value: unknown, seen = new Set<object>()): void {\n  if (value === null || typeof value !== 'object' || seen.has(value)) return;\n  seen.add(value);\n  if (ArrayBuffer.isView(value)) {\n    packArrayStorage(value); // Uses intrinsic getters and rejects shared backing storage.\n    return;\n  }\n  if (value instanceof ArrayBuffer) return;\n  const prototype = Object.getPrototypeOf(value);\n  if (!Array.isArray(value) && prototype !== Object.prototype && prototype !== null)\n    throw new TypeError('prepared Mesh requires plain data and private binary storage');\n  for (const descriptor of Object.values(Object.getOwnPropertyDescriptors(value))) {\n    if (!Object.hasOwn(descriptor, 'value'))\n      throw new TypeError('prepared Mesh requires data properties');\n    assertPrivateMeshStorage(descriptor.value, seen);\n  }\n}\n\n/** Copy private domain data before exposing it to a mutable consumer. */\nexport function copyPreparedAsset(asset: Asset): Asset {\n  if (asset.kind === 'mesh') {\n    try {\n      // Native Mesh buffers can be copied without structured-clone serialization.\n      return copyPackData(asset) as Asset;\n    } catch (cause) {\n      // Loader output is wider than Pack input (ArrayBuffer, undefined, -0).\n      // Preserve that domain contract without relaxing untrusted input capture.\n      if (!(cause instanceof TypeError)) throw cause;\n      // structuredClone preserves SharedArrayBuffer aliases, so it alone cannot isolate bytes.\n      assertPrivateMeshStorage(asset);\n    }\n  }\n  return structuredClone(asset);\n}\n\n/** Domain preparation has no Catalog, World or GPU side effects. */\nexport function prepareAssetPayload(asset: Asset): Result<Asset, AssetError> {\n  let prepared = asset;\n  if (asset.kind === 'terrain') {\n    const valid = validateTerrain(asset);\n    if (!valid.ok)\n      return err(\n        new AssetError({\n          code: 'asset-parse-failed',\n          expected: valid.error.expected,\n          hint: valid.error.hint,\n        }),\n      );\n  }\n  if (asset.kind === 'material' && 'parentGuid' in asset && typeof asset.parentGuid === 'string') {\n    const parentGuid = String(asset.parentGuid);\n    const parent = AssetGuid.parse(parentGuid);\n    if (!parent.ok)\n      return err(\n        new AssetError({\n          code: 'asset-parse-failed',\n          expected: 'a valid material parent GUID',\n          hint: `parent GUID '${parentGuid}' is not a valid UUID format`,\n        }),\n      );\n    const child = { ...asset, parent: parent.value };\n    const forbidden = materialChildForbiddenFields(child as unknown as MaterialAsset);\n    if (forbidden.length)\n      return err(\n        new AssetError({\n          code: 'asset-parse-failed',\n          expected: 'parent-bearing material to contain only parent and values',\n          hint: 'remove root-owned colorSpace, passes, and parameters from the child payload',\n          detail: { field: 'material-child-contract', got: forbidden },\n        }),\n      );\n    prepared = {\n      kind: 'material',\n      parent: parent.value,\n      ...(asset.values === undefined ? {} : { values: asset.values }),\n    };\n  }\n  const meshError = validateMeshPayload(prepared);\n  if (meshError) return err(meshError);\n  if (prepared.kind === 'tileset') {\n    const error = validateTilesetPayload(prepared, inferAtlasExtent(prepared));\n    if (error) return err(error);\n  }\n  if (prepared.kind === 'material') {\n    const error = validateMaterialPasses(prepared) ?? validateSpriteSlices(prepared);\n    if (error) return err(error);\n  }\n  return ok(prepared.kind === 'mesh' ? withMeshAabb(prepared) : prepared);\n}\n\n/** Validate typed domain edges against the same fixed reference closure for both input forms. */\nexport function validateAssetReferences(\n  asset: Asset,\n  guid: string,\n  refs: readonly AssetRef[],\n  kind: (guid: string) => string | undefined,\n): AssetError | undefined {\n  const direct = new Set(refs.map((ref) => ref.guid.toLowerCase()));\n  if (asset.kind === 'material' && asset.parent !== undefined) {\n    const parent = AssetGuid.format(asset.parent).toLowerCase();\n    if (!direct.has(parent) || kind(parent) !== 'material')\n      return new AssetError({\n        code: 'asset-parse-failed',\n        expected: `parent GUID ${parent} to reference a MaterialAsset`,\n        hint: `loading parent material ${parent} for child ${guid}: repair the material reference`,\n      });\n  }\n  if (asset.kind !== 'mesh') return undefined;\n  for (const [slotIndex, slot] of asset.materialSlots.entries()) {\n    if (slot.defaultMaterial === undefined) continue;\n    const defaultMaterialGuid = AssetGuid.format(slot.defaultMaterial).toLowerCase();\n    const actualKind = direct.has(defaultMaterialGuid)\n      ? (kind(defaultMaterialGuid) ?? 'missing')\n      : 'missing-ref-edge';\n    if (actualKind === 'material') continue;\n    return new AssetError({\n      code: 'asset-parse-failed',\n      expected: `mesh ${guid} materialSlots[${slotIndex}] (${slot.slotName}) default ${defaultMaterialGuid} to reference a MaterialAsset`,\n      hint: `recook mesh ${guid}; slot ${slotIndex} '${slot.slotName}' resolves to ${actualKind}, not 'material'`,\n      detail: {\n        meshAssetGuid: guid,\n        slotIndex,\n        slotName: slot.slotName,\n        defaultMaterialGuid,\n        actualKind,\n      },\n    });\n  }\n  for (const lod of asset.lods ?? []) {\n    const target = AssetGuid.format(lod.mesh).toLowerCase();\n    if (!direct.has(target) || kind(target) !== 'mesh')\n      return new AssetError({\n        code: 'asset-parse-failed',\n        expected: 'each LOD to reference a MeshAsset in the declared closure',\n        hint: `repair LOD ${target} of mesh ${guid}`,\n      });\n  }\n  return undefined;\n}\n","import { terrainDerivedClosureValid } from '@forgeax/engine-terrain';\nimport type { Asset, TerrainAsset } from '@forgeax/engine-types';\nimport type { AssetRegistry } from './asset-registry.js';\n\nconst closures = new WeakMap<AssetRegistry, WeakMap<TerrainAsset, ReadonlyMap<string, Asset>>>();\n\n/** Terrain derived outputs are adopted with the root, never repinned after a partial rewrite. */\nexport function captureTerrainClosure(registry: AssetRegistry, root: TerrainAsset): boolean {\n  let roots = closures.get(registry);\n  if (roots === undefined) {\n    roots = new WeakMap();\n    closures.set(registry, roots);\n  }\n  const held = roots.get(root);\n  if (held !== undefined)\n    return [...held].every(([guid, asset]) => registry.lookup(guid) === asset);\n  const direct = [\n    ...root.grids,\n    ...root.layers.flatMap((layer) =>\n      layer.blend === 'height' ? [layer.material, layer.height] : [layer.material],\n    ),\n    ...root.sections.flatMap((section) => [\n      section.heightTexture,\n      section.weightTexture,\n      section.material,\n    ]),\n  ];\n  const pending = [...direct],\n    assets = new Map<string, Asset>();\n  while (pending.length) {\n    const next = pending.pop();\n    if (next === undefined) break;\n    const guid = next.toLowerCase();\n    if (assets.has(guid)) continue;\n    const asset = registry.lookup<Asset>(guid);\n    if (asset === undefined) return false;\n    assets.set(guid, asset);\n    for (const ref of registry.assetCatalog.get(guid)?.refs ?? []) pending.push(ref.guid);\n    // Inline Standard materials have the same GUID values but need not carry refs metadata.\n    if (asset.kind === 'material')\n      for (const value of Object.values(asset.values ?? {})) {\n        if (typeof value === 'string') pending.push(value);\n        else if (\n          value !== null &&\n          typeof value === 'object' &&\n          !Array.isArray(value) &&\n          'texture' in value\n        ) {\n          if (typeof value.texture === 'string') pending.push(value.texture);\n          if ('sampler' in value && typeof value.sampler === 'string') pending.push(value.sampler);\n        }\n      }\n  }\n  if (!terrainDerivedClosureValid(root, assets)) return false;\n  roots.set(root, assets);\n  return true;\n}\nexport function terrainClosureCurrent(registry: AssetRegistry, root: TerrainAsset): boolean {\n  const held = closures.get(registry)?.get(root);\n  return held !== undefined && [...held].every(([guid, asset]) => registry.lookup(guid) === asset);\n}\n","/** Shared admission for HTTP Pack envelopes, before any lookup or cache write. */\nexport function packEnvelopeIssue(value: unknown): string | undefined {\n  if (value === null || typeof value !== 'object' || Array.isArray(value)) return 'envelope';\n  const asset = value as Record<string, unknown>;\n  if (typeof asset.guid !== 'string' || !isGuid(asset.guid)) return 'guid';\n  if (typeof asset.kind !== 'string' || asset.kind.length === 0) return 'kind';\n  if (asset.payload === undefined) return 'payload';\n  if (asset.refs !== undefined) {\n    if (!Array.isArray(asset.refs)) return 'refs';\n    const invalid = asset.refs.findIndex((ref) => typeof ref !== 'string' || !isGuid(ref));\n    if (invalid !== -1) return `refs[${invalid}]`;\n  }\n  if (asset.artifacts !== undefined) {\n    if (\n      asset.artifacts === null ||\n      typeof asset.artifacts !== 'object' ||\n      Array.isArray(asset.artifacts)\n    ) {\n      return 'artifacts';\n    }\n    for (const [key, descriptor] of Object.entries(asset.artifacts)) {\n      if (\n        key.length === 0 ||\n        descriptor === null ||\n        typeof descriptor !== 'object' ||\n        Array.isArray(descriptor)\n      ) {\n        return `artifacts.${key}`;\n      }\n      if (typeof descriptor.mediaType !== 'string') return `artifacts.${key}.mediaType`;\n      if (\n        descriptor.integrity !== undefined &&\n        (descriptor.integrity === null ||\n          typeof descriptor.integrity !== 'object' ||\n          typeof descriptor.integrity.digest !== 'string' ||\n          descriptor.integrity.algorithm !== 'sha256')\n      )\n        return `artifacts.${key}.integrity`;\n      if (typeof descriptor.path !== 'string' || descriptor.path.length === 0)\n        return `artifacts.${key}.path`;\n    }\n  }\n  return undefined;\n}\n\nfunction isGuid(value: string): boolean {\n  return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value);\n}\n","import { err, ok, type Result } from '@forgeax/engine-types';\n\n// Public gateways drop idempotent package GETs, including HTTP/2 streams reset\n// mid-body. Every catalog, Pack, artifact, and loader-binary read shares this\n// bounded recovery: interrupted transfers (fetch's TypeError) and transient\n// statuses retry after these delays, bypassing a possibly poisoned HTTP cache.\n// Aborts, permanent statuses, and fetcher-specific failures surface at once.\nconst RETRY_DELAYS_MS = [250, 750] as const;\nconst TRANSIENT_STATUS: ReadonlySet<number> = new Set([408, 429, 500, 502, 503, 504]);\n\nexport type PackageFetcher = (url: string, init?: RequestInit) => Promise<Response>;\n\nexport interface PackageReadFailure {\n  /** Last observation, e.g. `HTTP 404` or `TypeError: network error`. */\n  readonly observed: string;\n  readonly attempts: number;\n  /** The transfer completed but `body` rejected its content (e.g. invalid JSON). */\n  readonly malformed: boolean;\n}\n\nfunction pause(ms: number, signal: AbortSignal | null | undefined): Promise<void> {\n  return new Promise((resolve) => {\n    const timer = setTimeout(done, ms);\n    signal?.addEventListener('abort', done, { once: true });\n    function done() {\n      clearTimeout(timer);\n      signal?.removeEventListener('abort', done);\n      resolve();\n    }\n  });\n}\n\n/** Read one package resource in full through `body`, so a body reset is retried too. */\nexport async function readPackage<T>(\n  fetcher: PackageFetcher,\n  url: string,\n  body: (response: Response) => Promise<T>,\n  init?: RequestInit,\n): Promise<Result<T, PackageReadFailure>> {\n  for (let attempt = 1; ; attempt++) {\n    let observed: string;\n    let retryable: boolean;\n    let malformed = false;\n    let response: Response | undefined;\n    try {\n      response = await (attempt === 1\n        ? init === undefined\n          ? fetcher(url)\n          : fetcher(url, init)\n        : fetcher(url, { cache: 'reload', ...init }));\n      if (response.ok) return ok(await body(response));\n      observed = `HTTP ${response.status}`;\n      retryable = TRANSIENT_STATUS.has(response.status);\n    } catch (cause) {\n      observed = cause instanceof Error ? `${cause.name}: ${cause.message}` : String(cause);\n      retryable = cause instanceof TypeError;\n      malformed = response?.ok === true && !retryable;\n    }\n    const delay = RETRY_DELAYS_MS[attempt - 1];\n    if (!retryable || delay === undefined || init?.signal?.aborted) {\n      return err({ observed, attempts: attempt, malformed });\n    }\n    if (response !== undefined && !response.bodyUsed) {\n      try {\n        await response.body?.cancel();\n      } catch {\n        // The retry below remains authoritative.\n      }\n    }\n    await pause(delay, init?.signal);\n    if (init?.signal?.aborted) return err({ observed, attempts: attempt, malformed });\n  }\n}\n\nexport const bytesOf = async (response: Response): Promise<Uint8Array> =>\n  new Uint8Array(await response.arrayBuffer());\nexport const jsonOf = (response: Response): Promise<unknown> => response.json();\n","import {\n  type AssetLoadError,\n  type CatalogEntry,\n  err,\n  ok,\n  type Result,\n} from '@forgeax/engine-types';\n\ntype PublicationRow = Pick<CatalogEntry, 'publication'>;\n\n/** Check fixed evidence without loading referenced assets, including deferred plugin references. */\nexport function validatePublicationReferences(\n  guid: string,\n  row: PublicationRow | undefined,\n  lookup: (guid: string) => PublicationRow | undefined,\n): Result<void, AssetLoadError> {\n  const visited = new Set<string>();\n  const visit = (\n    current: string,\n    row: PublicationRow | undefined,\n  ): Result<void, AssetLoadError> => {\n    if (visited.has(current)) return ok(undefined);\n    visited.add(current);\n    const publication = row?.publication;\n    if (!publication) return ok(undefined);\n    for (const evidence of publication.externalEvidence) {\n      if (evidence.usage === 'content') continue;\n      const actual = lookup(evidence.guid)?.publication;\n      const output = actual?.outputs.find(\n        (output) => output.guid.toLowerCase() === evidence.guid.toLowerCase(),\n      );\n      if (\n        (evidence.digest !== undefined && evidence.digest !== output?.digest) ||\n        (evidence.generation !== undefined && evidence.generation !== actual?.generation)\n      ) {\n        return err({\n          code: 'asset-dependency-failed',\n          expected: `reference ${evidence.guid} to retain its recorded version ${evidence.digest ?? evidence.generation}`,\n          hint: 'restore the recorded dependency version or rebuild this publication before switching consumers',\n          detail: { guid, dependencyGuid: evidence.guid },\n        });\n      }\n    }\n    for (const ref of publication.outputs.find(\n      (output) => output.guid.toLowerCase() === current.toLowerCase(),\n    )?.refs ?? []) {\n      const result = visit(ref, lookup(ref));\n      if (!result.ok) return result;\n    }\n    return ok(undefined);\n  };\n  return visit(guid, row);\n}\n","// Capture optional platform methods without consulting response.text or function.call.\n// The fast path assumes standard platform Body semantics, not arbitrary polyfills.\n// A global subclass or adapter prototype must retain the original json-reader path.\nconst responsePrototype = globalThis.Response?.prototype;\nconst platformResponsePrototype =\n  responsePrototype !== null &&\n  typeof responsePrototype === 'object' &&\n  Object.getPrototypeOf(responsePrototype) === Object.prototype\n    ? responsePrototype\n    : undefined;\nconst platformReadJson =\n  platformResponsePrototype === undefined\n    ? undefined\n    : Object.getOwnPropertyDescriptor(platformResponsePrototype, 'json')?.value;\nconst platformReadText =\n  platformResponsePrototype === undefined\n    ? undefined\n    : Object.getOwnPropertyDescriptor(platformResponsePrototype, 'text')?.value;\n\n/** Retain only owner-parsed platform JSON; custom readers keep their original ownership. */\nexport async function readRetainedPackJson(response: Pick<Response, 'json'>): Promise<unknown> {\n  const readJson = response.json;\n  if (\n    typeof platformReadJson === 'function' &&\n    typeof platformReadText === 'function' &&\n    readJson === platformReadJson &&\n    Object.getPrototypeOf(response) === platformResponsePrototype &&\n    !Object.hasOwn(response, 'json') &&\n    !Object.hasOwn(response, 'text') &&\n    Object.getOwnPropertyDescriptor(platformResponsePrototype, 'json')?.value ===\n      platformReadJson &&\n    Object.getOwnPropertyDescriptor(platformResponsePrototype, 'text')?.value === platformReadText\n  ) {\n    return parseRetainedPackJson(await Reflect.apply(platformReadText, response, []));\n  }\n  return Reflect.apply(readJson, response, []);\n}\n\n// Only JSON text parsed by this owner can acquire the retained-tree brand.\n// Public cache objects, including proxies around parsed nodes, are never branded.\nconst parsedNodes = new WeakSet<object>();\nconst parsedKeys = new WeakMap<object, readonly string[]>();\n\nexport function parseRetainedPackJson(text: string): unknown {\n  const value: unknown = JSON.parse(text);\n  const pending = [value];\n  while (pending.length > 0) {\n    const node = pending.pop();\n    if (node === null || typeof node !== 'object') continue;\n    parsedNodes.add(node);\n    const keys = Reflect.ownKeys(node) as string[];\n    parsedKeys.set(node, keys);\n    for (const key of keys) {\n      if (Array.isArray(node) && key === 'length') continue;\n      pending.push((node as Record<string, unknown>)[key]);\n    }\n  }\n  return value;\n}\n\n/** Recheck current data descriptors and ownership; a parse-time brand alone is insufficient. */\nexport function isRetainedJsonTree(value: unknown): boolean {\n  if (value === null || typeof value !== 'object' || !parsedNodes.has(value)) return false;\n  const pending = [value];\n  const visited = new WeakSet<object>();\n  while (pending.length > 0) {\n    const node = pending.pop();\n    if (node === null || typeof node === 'string' || typeof node === 'boolean') continue;\n    if (typeof node === 'number') {\n      if (!Number.isFinite(node)) return false;\n      continue;\n    }\n    if (typeof node !== 'object' || !parsedNodes.has(node) || visited.has(node)) return false;\n    visited.add(node);\n    const array = Array.isArray(node);\n    if (Object.getPrototypeOf(node) !== (array ? Array.prototype : Object.prototype)) return false;\n    const original = parsedKeys.get(node);\n    const keys = Reflect.ownKeys(node);\n    if (original === undefined || keys.length !== original.length) return false;\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      if (typeof key !== 'string' || key !== original[i]) return false;\n      const descriptor = Object.getOwnPropertyDescriptor(node, key);\n      if (descriptor === undefined || !Object.hasOwn(descriptor, 'value')) return false;\n      if (array && key === 'length') {\n        if (\n          descriptor.enumerable ||\n          !Number.isSafeInteger(descriptor.value) ||\n          descriptor.value !== keys.length - 1\n        )\n          return false;\n        continue;\n      }\n      if (!descriptor.enumerable) return false;\n      pending.push(descriptor.value);\n    }\n  }\n  return true;\n}\n","import {\n  type CookedMaterialRecord,\n  createMaterialArtifactDigest,\n  type MaterialCookProgramContext,\n  materialLayerPlanIdentity,\n  validateCookedMaterialRecord,\n} from '@forgeax/engine-pack';\nimport type { MaterialProgramAddress } from '@forgeax/engine-types';\n\nexport interface MaterialLoadRequest {\n  readonly guid: string;\n  readonly specializationKey: string;\n}\n\nexport interface MaterialReady {\n  readonly status: 'Ready';\n  readonly record: CookedMaterialRecord &\n    Required<\n      Pick<\n        CookedMaterialRecord,\n        | 'materialGuid'\n        | 'publicationGeneration'\n        | 'specializationKey'\n        | 'artifactDigest'\n        | 'sourceClosure'\n        | 'parameterContract'\n      >\n    >;\n}\n\nexport interface MaterialPublication {\n  readonly guid: string;\n  readonly record: unknown;\n  readonly artifactError?: {\n    readonly code: 'asset-artifact-missing' | 'asset-artifact-integrity-mismatch';\n    readonly expected: string;\n    readonly actual?: string;\n  };\n  readonly artifacts?: Readonly<\n    Record<string, { readonly bytes: Uint8Array; readonly digest?: string }>\n  >;\n}\n\nexport type MaterialLoadErrorCode =\n  | 'material-specialization-not-cooked'\n  | 'asset-artifact-missing'\n  | 'asset-artifact-integrity-mismatch'\n  | 'material-cook-record-invalid'\n  | 'material-reference-not-ready';\n\nexport interface MaterialLoadErrorDetail {\n  readonly guid: string;\n  readonly specializationKey: string;\n  readonly publicationGeneration?: number;\n  readonly field?: string;\n  readonly pass?: string;\n  readonly context?: MaterialCookProgramContext;\n  readonly address?: MaterialProgramAddress;\n  readonly matches?: number;\n  readonly vertexColorAvailable?: boolean;\n  readonly missing?: readonly string[];\n  readonly expected?: string;\n  readonly actual?: string;\n}\n\nexport interface MaterialLoadError {\n  readonly status: 'Error';\n  readonly error: {\n    readonly code: MaterialLoadErrorCode;\n    readonly expected: string;\n    readonly hint: string;\n    readonly retryable: boolean;\n    readonly recoveryActions: readonly string[];\n    readonly detail: MaterialLoadErrorDetail;\n  };\n}\n\nexport interface MaterialLoaderOptions {\n  readonly loadPublication: (\n    guid: string,\n    specializationKey: string,\n  ) => Promise<MaterialPublication | undefined>;\n  readonly loadReference?: (guid: string) => Promise<boolean>;\n}\n\nfunction materialError(\n  request: MaterialLoadRequest,\n  code: MaterialLoadErrorCode,\n  expected: string,\n  hint: string,\n  detail: Omit<MaterialLoadErrorDetail, 'guid' | 'specializationKey'> = {},\n  retryable = false,\n): MaterialLoadError {\n  return {\n    status: 'Error',\n    error: {\n      code,\n      expected,\n      hint,\n      retryable,\n      recoveryActions: retryable ? ['retry-material-load'] : ['recook-material-publication'],\n      detail: { guid: request.guid, specializationKey: request.specializationKey, ...detail },\n    },\n  };\n}\n\nfunction missingCook(request: MaterialLoadRequest): MaterialLoadError {\n  return materialError(\n    request,\n    'material-specialization-not-cooked',\n    'a cooked material specialization record and artifact',\n    'run the build-time material cooker for this specialization before loading it at runtime',\n    {},\n    true,\n  );\n}\n\nfunction recordError(\n  request: MaterialLoadRequest,\n  field: string,\n  expected = 'a complete material-cook/4 publication record',\n): MaterialLoadError {\n  return materialError(\n    request,\n    'material-cook-record-invalid',\n    expected,\n    're-publish the material record and its artifact as one immutable publication',\n    { field },\n  );\n}\n\nfunction immutableBytes(bytes: Uint8Array): Uint8Array<ArrayBuffer> {\n  return new Uint8Array(bytes);\n}\n\n/** Native hashing is optional; the existing digest remains the correctness fallback. */\nfunction nativeMaterialArtifactDigest():\n  | ((bytes: Uint8Array<ArrayBuffer>) => Promise<string>)\n  | undefined {\n  try {\n    const subtle = globalThis.crypto?.subtle;\n    const digest = subtle?.digest;\n    if (subtle === undefined || typeof digest !== 'function') return undefined;\n    return async (bytes) => {\n      try {\n        // Keep the SubtleCrypto receiver and the exact private view, including its offset.\n        const hash = await digest.call(subtle, 'SHA-256', bytes);\n        return `sha256:${[...new Uint8Array(hash)]\n          .map((byte) => byte.toString(16).padStart(2, '0'))\n          .join('')}`;\n      } catch {\n        return createMaterialArtifactDigest(bytes);\n      }\n    };\n  } catch {\n    return undefined;\n  }\n}\n\n/** Plain own data only; descriptor admission never invokes an adapter getter. */\nfunction materialDataProperties(value: unknown): PropertyDescriptorMap | undefined {\n  if (value === null || typeof value !== 'object') return undefined;\n  const prototype = Object.getPrototypeOf(value);\n  if (prototype !== Object.prototype && prototype !== null) return undefined;\n  const properties = Object.getOwnPropertyDescriptors(value);\n  Object.setPrototypeOf(properties, null);\n  return Reflect.ownKeys(properties).every(\n    (key) =>\n      typeof key === 'string' &&\n      'value' in (properties[key] as PropertyDescriptor) &&\n      (properties[key] as PropertyDescriptor).enumerable === true,\n  )\n    ? properties\n    : undefined;\n}\n\n/** Metadata adapters keep their complete original synchronous behavior. */\nfunction snapshotMaterialRecord(record: CookedMaterialRecord): CookedMaterialRecord | undefined {\n  try {\n    // The validator owns these views. They are excluded from structuredClone below.\n    const programBytes = new Set(record.programs.map((program) => program.artifact.bytes));\n    const complete = new WeakSet<object>();\n    const active = new WeakSet<object>();\n    const dataOnly = (value: unknown): boolean => {\n      if (value === null || typeof value !== 'object') return typeof value !== 'function';\n      if (programBytes.has(value as Uint8Array)) return true;\n      const prototype = Object.getPrototypeOf(value);\n      const array = Array.isArray(value);\n      if (array ? prototype !== Array.prototype : prototype !== Object.prototype) {\n        return false;\n      }\n      if (active.has(value)) return false;\n      if (complete.has(value)) return true;\n      const properties = Object.getOwnPropertyDescriptors(value);\n      const keys = Reflect.ownKeys(properties);\n      if (\n        !keys.every((key) => {\n          if (typeof key !== 'string') return false;\n          const property = properties[key] as PropertyDescriptor;\n          if (!('value' in property)) return false;\n          return (\n            property.enumerable === true ||\n            (array &&\n              key === 'length' &&\n              property.enumerable === false &&\n              property.configurable === false)\n          );\n        })\n      )\n        return false;\n      const fields = keys.map((key) => properties[key as string] as PropertyDescriptor);\n      active.add(value);\n      const accepted = fields.every((property) => dataOnly(property.value));\n      active.delete(value);\n      if (accepted) complete.add(value);\n      return accepted;\n    };\n    if (!dataOnly(record)) return undefined;\n    const metadata = structuredClone({\n      ...record,\n      programs: record.programs.map((program) => ({\n        ...program,\n        artifact: { ...program.artifact, bytes: undefined },\n      })),\n    });\n    return {\n      ...metadata,\n      programs: metadata.programs.map((program, index) => ({\n        ...program,\n        artifact: {\n          ...program.artifact,\n          bytes: (record.programs[index] as CookedMaterialRecord['programs'][number]).artifact\n            .bytes,\n        },\n      })),\n    };\n  } catch {\n    return undefined;\n  }\n}\n\n/** Admit every artifact descriptor before metadata capture or body copies. */\nfunction materialArtifactData(\n  publication: MaterialPublication,\n  record: CookedMaterialRecord,\n): readonly { readonly bytes: Uint8Array; readonly digest: string | undefined }[] | undefined {\n  try {\n    const publicationFields = materialDataProperties(publication);\n    if (publicationFields === undefined) return undefined;\n    const artifactFields = materialDataProperties(publicationFields.artifacts?.value);\n    if (artifactFields === undefined) return undefined;\n    const captured: { bytes: Uint8Array; digest: string | undefined }[] = [];\n    for (const program of record.programs) {\n      const published = artifactFields[program.artifact.path]?.value;\n      const fields = materialDataProperties(published);\n      if (fields === undefined || fields.bytes === undefined) return undefined;\n      const prototype = Object.getPrototypeOf(published);\n      if (\n        fields.digest === undefined &&\n        prototype !== null &&\n        Object.getOwnPropertyDescriptor(prototype, 'digest') !== undefined\n      )\n        return undefined;\n      const bytes = fields.bytes.value;\n      if (\n        !(bytes instanceof Uint8Array) ||\n        Object.getPrototypeOf(bytes) !== Uint8Array.prototype ||\n        Object.getOwnPropertyDescriptor(bytes, 'buffer') !== undefined ||\n        Object.getPrototypeOf(bytes.buffer) !== ArrayBuffer.prototype\n      )\n        return undefined;\n      captured.push({ bytes, digest: fields.digest?.value });\n    }\n    return captured;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction copyMaterialArtifacts(\n  artifacts: readonly { readonly bytes: Uint8Array; readonly digest: string | undefined }[],\n):\n  | readonly { readonly bytes: Uint8Array<ArrayBuffer>; readonly digest: string | undefined }[]\n  | undefined {\n  try {\n    return artifacts.map(({ bytes, digest }) => ({ bytes: immutableBytes(bytes), digest }));\n  } catch {\n    // An ordered old-path body error must not preempt an earlier integrity failure.\n    return undefined;\n  }\n}\n\nfunction immutableParameterContract(\n  parameterContract: NonNullable<CookedMaterialRecord['parameterContract']>,\n): NonNullable<CookedMaterialRecord['parameterContract']> {\n  return Object.freeze({\n    parameters: Object.freeze([...parameterContract.parameters]),\n    values: Object.freeze({ ...parameterContract.values }),\n  });\n}\n\nfunction sameBytes(left: Uint8Array, right: Uint8Array): boolean {\n  const length = left.byteLength;\n  if (length !== right.byteLength) return false;\n  // Preserve TypedArray.every's detached/out-of-bounds validation without a byte callback.\n  Uint8Array.prototype.values.call(left);\n  for (let index = 0; index < length; index += 1) {\n    if (left[index] !== right[index]) return false;\n  }\n  return true;\n}\n\nfunction completeTupleField(record: CookedMaterialRecord): string | undefined {\n  if (\n    typeof record.materialGuid !== 'string' ||\n    !Number.isSafeInteger(record.publicationGeneration) ||\n    (record.publicationGeneration as number) < 1\n  )\n    return 'publicationGeneration';\n  if (typeof record.specializationKey !== 'string' || record.specializationKey.length === 0)\n    return 'specializationKey';\n  if (typeof record.artifactDigest !== 'string' || record.artifactDigest.length === 0)\n    return 'artifactDigest';\n  if (\n    !Array.isArray(record.sourceClosure) ||\n    record.sourceClosure.some((path) => typeof path !== 'string' || path.length === 0)\n  )\n    return 'sourceClosure';\n  const parameterContract = record.parameterContract;\n  if (\n    parameterContract === undefined ||\n    !Array.isArray(parameterContract.parameters) ||\n    parameterContract.values === null ||\n    typeof parameterContract.values !== 'object' ||\n    Array.isArray(parameterContract.values)\n  )\n    return 'parameterContract';\n  const receipt = record.receipt;\n  if (\n    !Array.isArray(receipt.sourceClosure) ||\n    receipt.sourceClosure.some((path) => typeof path !== 'string' || path.length === 0) ||\n    receipt.sourceClosure.length !== record.sourceClosure.length ||\n    receipt.sourceClosure.some((path, index) => path !== record.sourceClosure?.[index])\n  )\n    return 'receipt.sourceClosure';\n  if (\n    typeof receipt.profile !== 'string' ||\n    receipt.profile.length === 0 ||\n    typeof receipt.compilerVersion !== 'string' ||\n    receipt.compilerVersion.length === 0 ||\n    typeof receipt.identity.cookIdentity !== 'string' ||\n    receipt.identity.cookIdentity.length === 0 ||\n    receipt.identity.artifactDigest !== record.artifactDigest ||\n    receipt.identity.cookGeneration !== record.publicationGeneration\n  )\n    return 'receipt';\n  if (\n    typeof receipt.identity.layoutIdentity !== 'string' ||\n    receipt.identity.layoutIdentity.length === 0 ||\n    receipt.derivedInterface?.layoutIdentity !== receipt.identity.layoutIdentity\n  )\n    return 'receipt.identity.layoutIdentity';\n  let expectedLayerPlanIdentity: string | undefined;\n  try {\n    expectedLayerPlanIdentity = materialLayerPlanIdentity(record);\n  } catch {\n    return 'resolved.layerPlanIdentity';\n  }\n  if (\n    expectedLayerPlanIdentity !== undefined &&\n    receipt.derivedInterface.layerPlanIdentity !== expectedLayerPlanIdentity\n  )\n    return 'receipt.derivedInterface.layerPlanIdentity';\n  return undefined;\n}\n\nexport function createMaterialLoader(options: MaterialLoaderOptions) {\n  return {\n    async load(request: MaterialLoadRequest): Promise<MaterialReady | MaterialLoadError> {\n      const publication = await options.loadPublication(request.guid, request.specializationKey);\n      if (publication === undefined) return missingCook(request);\n      if (publication.artifactError !== undefined) {\n        return materialError(\n          request,\n          publication.artifactError.code,\n          publication.artifactError.expected,\n          'restore the published material artifact and retry the load',\n          {\n            expected: publication.artifactError.expected,\n            ...(publication.artifactError.actual === undefined\n              ? {}\n              : { actual: publication.artifactError.actual }),\n          },\n          true,\n        );\n      }\n      const parsed = validateCookedMaterialRecord(publication.record);\n      if (!parsed.ok) return recordError(request, parsed.error.detail.field);\n      let record = parsed.value;\n      const invalidTupleField = completeTupleField(record);\n      if (invalidTupleField !== undefined) return recordError(request, invalidTupleField);\n      const publicationGeneration = record.publicationGeneration;\n      const sourceClosure = record.sourceClosure;\n      const parameterContract = record.parameterContract;\n      const materialGuid = record.materialGuid;\n      const recordSpecializationKey = record.specializationKey;\n      const artifactDigest = record.artifactDigest;\n      if (publicationGeneration === undefined) return recordError(request, 'publicationGeneration');\n      if (sourceClosure === undefined) return recordError(request, 'sourceClosure');\n      if (parameterContract === undefined) return recordError(request, 'parameterContract');\n      if (materialGuid === undefined) return recordError(request, 'materialGuid');\n      if (recordSpecializationKey === undefined) return recordError(request, 'specializationKey');\n      if (artifactDigest === undefined) return recordError(request, 'artifactDigest');\n      if (\n        publication.guid.toLowerCase() !== request.guid.toLowerCase() ||\n        record.guid.toLowerCase() !== request.guid.toLowerCase()\n      ) {\n        return recordError(\n          request,\n          'guid',\n          `record GUID ${request.guid} to match the requested GUID`,\n        );\n      }\n      if (materialGuid.toLowerCase() !== request.guid.toLowerCase())\n        return recordError(request, 'materialGuid');\n      if (recordSpecializationKey !== request.specializationKey) return missingCook(request);\n      let digest = nativeMaterialArtifactDigest();\n      // Close native mode before snapshot/copy/await for unknown adapter semantics.\n      let artifacts: ReturnType<typeof materialArtifactData>;\n      try {\n        artifacts =\n          digest === undefined || materialDataProperties(request) === undefined\n            ? undefined\n            : materialArtifactData(publication, record);\n      } catch {\n        artifacts = undefined;\n      }\n      const snapshot = artifacts === undefined ? undefined : snapshotMaterialRecord(record);\n      const capturedArtifacts =\n        snapshot === undefined || artifacts === undefined\n          ? undefined\n          : copyMaterialArtifacts(artifacts);\n      if (snapshot === undefined || capturedArtifacts === undefined) digest = undefined;\n      else record = snapshot;\n      const readySourceClosure =\n        digest === undefined\n          ? sourceClosure\n          : (record.sourceClosure as NonNullable<CookedMaterialRecord['sourceClosure']>);\n      const readyParameterContract =\n        digest === undefined\n          ? parameterContract\n          : (record.parameterContract as NonNullable<CookedMaterialRecord['parameterContract']>);\n      // New digest awaits use one already admitted publication and request snapshot.\n      if (digest !== undefined) request = { ...request };\n      const programs: CookedMaterialRecord['programs'][number][] = [];\n      for (const [programIndex, program] of record.programs.entries()) {\n        const artifact = program.artifact;\n        const captured = digest === undefined ? undefined : capturedArtifacts?.[programIndex];\n        const published = captured ?? publication.artifacts?.[artifact.path];\n        if (published === undefined)\n          return materialError(\n            request,\n            'asset-artifact-missing',\n            `published artifact ${artifact.path}`,\n            'publish every program artifact before loading the material',\n            { publicationGeneration, field: artifact.path },\n            true,\n          );\n        const bytes = captured?.bytes ?? immutableBytes(published.bytes);\n        const actualDigest =\n          digest === undefined ? createMaterialArtifactDigest(bytes) : await digest(bytes);\n        if (\n          actualDigest !== artifact.digest ||\n          (published.digest !== undefined && published.digest !== actualDigest)\n        ) {\n          return materialError(\n            request,\n            'asset-artifact-integrity-mismatch',\n            `artifact digest ${artifact.digest}`,\n            'restore the complete published generation or re-cook the material',\n            {\n              publicationGeneration,\n              field: artifact.path,\n              expected: artifact.digest,\n              actual: actualDigest,\n            },\n          );\n        }\n        if (!sameBytes(artifact.bytes, bytes))\n          return recordError(\n            request,\n            `programs.${program.specializationKey}.artifact.bytes`,\n            'record bytes to match the published program artifact',\n          );\n        programs.push(\n          Object.freeze({\n            ...program,\n            selections: Object.freeze(\n              program.selections.map((selection) =>\n                Object.freeze({ ...selection, context: Object.freeze({ ...selection.context }) }),\n              ),\n            ),\n            artifact: Object.freeze({ ...artifact, bytes }),\n          }),\n        );\n      }\n      const refs = [\n        ...record.refs.parent,\n        ...record.refs.textures,\n        ...record.refs.samplers,\n        ...record.refs.modules,\n      ];\n      const missing = options.loadReference\n        ? (\n            await Promise.all(\n              refs.map(async (reference) =>\n                (await options.loadReference?.(reference)) ? undefined : reference,\n              ),\n            )\n          ).filter((reference): reference is string => reference !== undefined)\n        : [];\n      if (missing.length > 0) {\n        return materialError(\n          request,\n          'material-reference-not-ready',\n          'all cooked material references to be available',\n          'load referenced parent, texture, sampler, and module assets before publishing Ready',\n          { publicationGeneration, missing },\n          true,\n        );\n      }\n      return {\n        status: 'Ready',\n        record: {\n          ...record,\n          materialGuid,\n          publicationGeneration,\n          specializationKey: recordSpecializationKey,\n          artifactDigest,\n          sourceClosure: Object.freeze([...readySourceClosure]),\n          parameterContract: immutableParameterContract(readyParameterContract),\n          programs: Object.freeze(programs),\n        },\n      };\n    },\n  };\n}\n","/**\n * Internal, opt-in asset load tracing for bounded browser diagnostics.\n *\n * The runtime does not publish this hook. A browser fixture may install the\n * global sink for one load and remove it afterwards; normal consumers pay only\n * for the guarded lookup.\n */\n\nexport interface AssetLoadTraceEvent {\n  readonly phase: string;\n  readonly at: number;\n  readonly guid?: string;\n  readonly packageUrl?: string;\n  readonly artifactKey?: string;\n  readonly detail?: Readonly<Record<string, unknown>>;\n}\n\ntype AssetLoadTraceSink = (event: AssetLoadTraceEvent) => void;\n\nconst TRACE_KEY = '__forgeaxAssetLoadTrace';\n\nexport function traceAssetLoadPhase(\n  phase: string,\n  context: Omit<AssetLoadTraceEvent, 'phase' | 'at'> = {},\n): void {\n  const sink = (\n    globalThis as typeof globalThis & {\n      [TRACE_KEY]?: AssetLoadTraceSink;\n    }\n  )[TRACE_KEY];\n  if (sink === undefined) return;\n  try {\n    sink({ phase, at: Date.now(), ...context });\n  } catch {\n    // Diagnostics must never change the asset load result.\n  }\n}\n","import { decompressZstd } from '@forgeax/engine-codec';\nimport { validateArtifactPath } from '@forgeax/engine-pack';\nimport type { ArtifactDescriptor, AssetArtifactError } from '@forgeax/engine-types';\nimport { err, ok, type Result } from '@forgeax/engine-types';\nimport { bytesOf, type PackageFetcher, readPackage } from '../internal/package-read.js';\nimport { traceAssetLoadPhase } from './load-trace';\n\nexport interface ArtifactReadRequest {\n  readonly packageUrl: string;\n  readonly guid: string;\n  readonly artifactKey: string;\n  readonly descriptor: ArtifactDescriptor;\n}\n\nexport type ArtifactFetcher = PackageFetcher;\n\nfunction failure(\n  code: AssetArtifactError['code'],\n  request: ArtifactReadRequest,\n  expected: string,\n  hint: string,\n  observed: string,\n): AssetArtifactError {\n  if (code === 'asset-artifact-missing') {\n    return {\n      code,\n      expected,\n      hint,\n      detail: {\n        guid: request.guid,\n        artifactKey: request.artifactKey,\n        path: request.descriptor.path,\n        observed,\n        expected,\n      },\n    };\n  }\n  return {\n    code,\n    expected,\n    hint,\n    detail: {\n      guid: request.guid,\n      artifactKey: request.artifactKey,\n      observed,\n      expected,\n    },\n  };\n}\n\nexport function artifactUrl(packageUrl: string, path: string): string {\n  try {\n    return new URL(path, new URL(packageUrl, globalThis.location?.href)).toString();\n  } catch {\n    const queryIndex = packageUrl.search(/[?#]/);\n    const cleanPackageUrl = queryIndex < 0 ? packageUrl : packageUrl.slice(0, queryIndex);\n    const slash = cleanPackageUrl.lastIndexOf('/');\n    return `${slash < 0 ? '' : cleanPackageUrl.slice(0, slash + 1)}${path}`;\n  }\n}\n\nfunction encodedBytes(bytes: Uint8Array): string {\n  let binary = '';\n  for (const byte of bytes) binary += String.fromCharCode(byte);\n  return globalThis.btoa(binary);\n}\n\nfunction hexBytes(bytes: Uint8Array): string {\n  return [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');\n}\n\nasync function sha256(bytes: Uint8Array): Promise<{ base64: string; hex: string } | undefined> {\n  const subtle = globalThis.crypto?.subtle;\n  if (subtle === undefined) return undefined;\n  const digest = await subtle.digest('SHA-256', bytes.slice().buffer as ArrayBuffer);\n  const digestBytes = new Uint8Array(digest);\n  return { base64: encodedBytes(digestBytes), hex: hexBytes(digestBytes) };\n}\n\nasync function decodeOuter(\n  bytes: Uint8Array,\n  request: ArtifactReadRequest,\n): Promise<Result<Uint8Array, AssetArtifactError>> {\n  const encoding = request.descriptor.contentEncoding ?? 'identity';\n  if (encoding === 'identity') return ok(bytes);\n  if (encoding !== 'zstd') {\n    return err(\n      failure(\n        'asset-artifact-encoding-unsupported',\n        request,\n        \"contentEncoding 'identity' or 'zstd'\",\n        'change the descriptor to a supported outer content encoding and re-cook the package',\n        encoding,\n      ),\n    );\n  }\n  const decoded = await decompressZstd(bytes);\n  if (!decoded.ok) {\n    return err(\n      failure(\n        'asset-artifact-decode-failed',\n        request,\n        'valid bytes for the declared outer content encoding',\n        're-cook the artifact and verify the stored bytes before loading again',\n        JSON.stringify(decoded.error.detail),\n      ),\n    );\n  }\n  return ok(decoded.value);\n}\n\nasync function verifyBytes(\n  bytes: Uint8Array,\n  request: ArtifactReadRequest,\n): Promise<Result<Uint8Array, AssetArtifactError>> {\n  const expectedLength = request.descriptor.byteLength;\n  if (expectedLength !== undefined && expectedLength !== bytes.byteLength) {\n    return err(\n      failure(\n        'asset-artifact-integrity-mismatch',\n        request,\n        `decoded artifact byteLength ${expectedLength}`,\n        're-cook the package or update its artifact descriptor to match the bytes',\n        String(bytes.byteLength),\n      ),\n    );\n  }\n  const integrity = request.descriptor.integrity;\n  if (integrity === undefined) return ok(bytes);\n  const digest = await sha256(bytes);\n  if (digest === undefined) {\n    return err(\n      failure(\n        'asset-artifact-integrity-mismatch',\n        request,\n        'a runtime with Web Crypto SHA-256 support',\n        'enable Web Crypto or remove the unverifiable artifact from the package',\n        'crypto.subtle unavailable',\n      ),\n    );\n  }\n  const expectedDigest = integrity.digest.startsWith('sha256:')\n    ? integrity.digest.slice('sha256:'.length)\n    : integrity.digest;\n  if (expectedDigest !== digest.base64 && expectedDigest.toLowerCase() !== digest.hex) {\n    return err(\n      failure(\n        'asset-artifact-integrity-mismatch',\n        request,\n        `sha256 digest ${integrity.digest}`,\n        're-cook the artifact or replace the corrupted stored bytes',\n        digest.base64,\n      ),\n    );\n  }\n  return ok(bytes);\n}\n\nexport async function readArtifact(\n  request: ArtifactReadRequest,\n  fetcher: ArtifactFetcher = (url, init) => globalThis.fetch(url, init),\n): Promise<Result<Uint8Array, AssetArtifactError>> {\n  if (request.descriptor.mediaType.trim().length === 0) {\n    return err(\n      failure(\n        'asset-artifact-media-unsupported',\n        request,\n        'a non-empty durable artifact mediaType',\n        'set the artifact mediaType during production and re-publish the package',\n        request.descriptor.mediaType,\n      ),\n    );\n  }\n  const path = validateArtifactPath(request.descriptor.path, {\n    packageRoot: request.packageUrl,\n    guid: request.guid,\n    artifactKey: request.artifactKey,\n  });\n  if (!path.ok) return path;\n\n  const encoding = request.descriptor.contentEncoding ?? 'identity';\n  if (encoding !== 'identity' && encoding !== 'zstd') {\n    return err(\n      failure(\n        'asset-artifact-encoding-unsupported',\n        request,\n        \"contentEncoding 'identity' or 'zstd'\",\n        'change the descriptor to a supported outer content encoding and re-cook the package',\n        encoding,\n      ),\n    );\n  }\n\n  const url = artifactUrl(request.packageUrl, path.value);\n  traceAssetLoadPhase('artifact.fetch.start', {\n    guid: request.guid,\n    packageUrl: request.packageUrl,\n    artifactKey: request.artifactKey,\n    detail: { url },\n  });\n  const read = await readPackage(fetcher, url, bytesOf);\n  if (!read.ok) {\n    return err(\n      failure(\n        'asset-artifact-missing',\n        request,\n        `readable artifact at ${path.value}`,\n        `publish the artifact at the declared package-relative path and retry the load (${read.error.attempts} request(s))`,\n        read.error.observed,\n      ),\n    );\n  }\n  const bytes = read.value;\n  traceAssetLoadPhase('artifact.body.complete', {\n    guid: request.guid,\n    packageUrl: request.packageUrl,\n    artifactKey: request.artifactKey,\n    detail: { byteLength: bytes.byteLength },\n  });\n  const decoded = await decodeOuter(bytes, request);\n  if (!decoded.ok) return decoded;\n  traceAssetLoadPhase('artifact.decode.complete', {\n    guid: request.guid,\n    packageUrl: request.packageUrl,\n    artifactKey: request.artifactKey,\n    detail: { byteLength: decoded.value.byteLength },\n  });\n  const verified = await verifyBytes(decoded.value, request);\n  traceAssetLoadPhase('artifact.verify.complete', {\n    guid: request.guid,\n    packageUrl: request.packageUrl,\n    artifactKey: request.artifactKey,\n    detail: { ok: verified.ok },\n  });\n  return verified;\n}\n\nexport class ArtifactReadCache {\n  private readonly cache = new Map<string, Promise<Result<Uint8Array, AssetArtifactError>>>();\n\n  read(\n    key: string,\n    reader: () => Promise<Result<Uint8Array, AssetArtifactError>>,\n  ): Promise<Result<Uint8Array, AssetArtifactError>> {\n    const existing = this.cache.get(key);\n    if (existing !== undefined) return existing;\n    const pending = reader();\n    this.cache.set(key, pending);\n    void pending.then((result) => {\n      // An invalidated old read must not erase a newer read of the same key.\n      if (!result.ok && this.cache.get(key) === pending) this.cache.delete(key);\n    });\n    return pending;\n  }\n\n  clear(key?: string): void {\n    if (key === undefined) this.cache.clear();\n    else this.cache.delete(key);\n  }\n\n  clearPrefix(prefix: string): void {\n    for (const key of this.cache.keys()) if (key.startsWith(prefix)) this.cache.delete(key);\n  }\n}\n","import { decodeCatalogWire } from '@forgeax/engine-pack';\nimport { err, ok, type Result } from '@forgeax/engine-rhi';\nimport {\n  ASSET_ERROR_HINTS,\n  type Asset,\n  type AssetAuthoringCapability,\n  type AssetEnvelope,\n  AssetError,\n  type AssetPublicationEnvelope,\n  type AssetRelation,\n  authoringCapabilityForAssetKind,\n  type CatalogDiagnostic,\n  type CatalogEntry,\n  type CatalogProjection,\n  type ProviderProvenance,\n  type ResourceRevision,\n  type RuntimeAssetBinding,\n  type SourceOverrideDescriptor,\n  type SourceOverrideMap,\n} from '@forgeax/engine-types';\nimport type { AssetRegistry } from '../asset-registry';\nimport { jsonOf, type PackageFetcher, readPackage } from '../internal/package-read.js';\n\n/**\n * Runtime catalog row parsed from the shared pack-index POD shape. GUID is the\n * catalog key, and inline assets have no source declaration to navigate.\n */\nexport type CatalogRecord = Omit<CatalogEntry, 'guid' | 'sourcePath'> & {\n  readonly sourcePath?: string;\n};\n\n/** Build the canonical row for an inline asset without inventing producer facts. */\nexport function createInlineCatalogRecord(\n  envelope: AssetEnvelope<Asset>,\n  name: string,\n): CatalogRecord {\n  return {\n    packageUrl: '',\n    kind: envelope.payload.kind,\n    authoring: authoringCapabilityForAssetKind(envelope.payload.kind),\n    name,\n    ...(envelope.refs.length > 0 ? { refs: envelope.refs.map((ref) => ref.guid) } : {}),\n  };\n}\n\nfunction parseError(\n  expected: string,\n  detail?: object,\n  hint = ASSET_ERROR_HINTS['asset-parse-failed'],\n): AssetError {\n  return new AssetError({\n    code: 'asset-parse-failed',\n    expected,\n    hint,\n    ...(detail === undefined ? {} : { detail: detail as never }),\n  });\n}\n\nfunction sameRevision(left: ResourceRevision, right: ResourceRevision): boolean {\n  return (\n    left.digest === right.digest &&\n    left.observedAt === right.observedAt &&\n    left.rootId === right.rootId\n  );\n}\n\nexport function checkExpectedRevision(\n  records: readonly CatalogRecord[],\n  expectedRevision: ResourceRevision | undefined,\n): AssetError | undefined {\n  if (expectedRevision === undefined || records.length === 0) return undefined;\n  const actualRevisions = records.flatMap((record) =>\n    record.revision === undefined ? [] : [record.revision],\n  );\n  if (\n    actualRevisions.length > 0 &&\n    actualRevisions.every((revision) => sameRevision(revision, expectedRevision))\n  ) {\n    return undefined;\n  }\n  return parseError(\n    'every catalog entry to carry the expected producer revision',\n    { expectedRevision, actualRevisions },\n    'restore a verified catalog revision before applying the source',\n  );\n}\n\n/** Resolve a catalog entry URL against the configured pack-index URL. */\nexport function resolveCatalogAssetUrl(\n  registry: Pick<AssetRegistry, 'packIndexUrl'>,\n  packageUrl: string,\n): string {\n  const packIndexUrl = registry.packIndexUrl;\n  if (packIndexUrl === undefined) return packageUrl;\n\n  try {\n    const baseUrl = new URL(packIndexUrl, globalThis.location?.href).href;\n    return new URL(packageUrl, baseUrl).href;\n  } catch {\n    return packageUrl;\n  }\n}\n\nfunction isRawSourceLocator(packageUrl: string): boolean {\n  const path = packageUrl.split(/[?#]/, 1)[0]?.toLowerCase() ?? packageUrl.toLowerCase();\n  if (path.endsWith('.pack.json')) return false;\n  return (\n    /\\.(bin|fbx|gltf|glb|hdr|jpg|jpeg|png|wav|mp3|ogg|ttf|otf|woff|woff2|svg)$/.test(path) ||\n    path.endsWith('.particle-effect.json')\n  );\n}\n\n/** Parse the shared pack-index/catalog wire shape without loading payloads. */\nexport function parseCatalog(\n  raw: unknown,\n  resolveUrl: (packageUrl: string) => string = (packageUrl) => packageUrl,\n  expectedRevision?: ResourceRevision,\n  expectedScope?: Pick<RuntimeAssetBinding, 'scopeId' | 'generation'>,\n): Result<Map<string, CatalogRecord>, AssetError> {\n  let rows: readonly unknown[];\n  if (expectedScope !== undefined) {\n    if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {\n      return err(\n        parseError(\n          'scoped catalog snapshot to be an object with schema, scopeId, generation, authority, and entries',\n        ),\n      );\n    }\n    const snapshot = raw as Record<string, unknown>;\n    if (\n      snapshot.schemaVersion !== 'runtime-catalog-snapshot-v1' ||\n      typeof snapshot.scopeId !== 'string' ||\n      typeof snapshot.generation !== 'number' ||\n      !Number.isSafeInteger(snapshot.generation) ||\n      !Array.isArray(snapshot.entries)\n    ) {\n      return err(parseError('scoped catalog snapshot to satisfy its runtime schema'));\n    }\n    if (\n      snapshot.scopeId !== expectedScope.scopeId ||\n      snapshot.generation !== expectedScope.generation\n    ) {\n      return err(\n        parseError('scoped catalog snapshot to match the active scope and generation', {\n          expectedScope,\n          actualScope: { scopeId: snapshot.scopeId, generation: snapshot.generation },\n        }),\n      );\n    }\n    if (snapshot.authority !== 'authoritative') {\n      return err(\n        parseError(\n          'scoped catalog snapshot authority to be authoritative before identity lookup',\n          { authority: snapshot.authority, diagnostics: snapshot.diagnostics },\n          'repair the active game catalog before loading assets',\n        ),\n      );\n    }\n    rows = snapshot.entries;\n  } else {\n    const decoded = decodeCatalogWire(raw);\n    if (!decoded.ok) return decoded;\n    rows = decoded.value;\n  }\n\n  const catalog = new Map<string, CatalogRecord>();\n  for (const item of rows) {\n    if (item === null || typeof item !== 'object') {\n      return err(parseError('each catalog row to be an object'));\n    }\n    const rawRow = item as Record<string, unknown>;\n    const legacyLocator = ['relative', 'Url'].join('');\n    if (\n      legacyLocator in rawRow ||\n      'metadata' in rawRow ||\n      'compression' in rawRow ||\n      'artifacts' in rawRow ||\n      'assetCodec' in rawRow ||\n      'contentEncoding' in rawRow\n    ) {\n      return err(parseError('catalog rows to expose navigation fields only'));\n    }\n    if (\n      typeof rawRow.guid !== 'string' ||\n      rawRow.guid.length === 0 ||\n      typeof rawRow.packageUrl !== 'string' ||\n      rawRow.packageUrl.length === 0 ||\n      typeof rawRow.kind !== 'string' ||\n      rawRow.kind.length === 0\n    ) {\n      return err(parseError('each catalog row to contain guid, packageUrl, and kind strings'));\n    }\n    if (isRawSourceLocator(rawRow.packageUrl)) {\n      return err(\n        parseError(`catalog packageUrl ${rawRow.packageUrl} to identify a cooked package`),\n      );\n    }\n    const guid = rawRow.guid.toLowerCase();\n    if (catalog.has(guid)) return err(parseError(`catalog GUID ${rawRow.guid} to be unique`));\n    const refs = rawRow.refs;\n    if (\n      refs !== undefined &&\n      (!Array.isArray(refs) || !refs.every((ref) => typeof ref === 'string'))\n    ) {\n      return err(parseError(`catalog refs for GUID ${rawRow.guid} to be a string array`));\n    }\n    if (\n      rawRow.sourceOverrides !== undefined &&\n      (rawRow.sourceOverrides === null ||\n        typeof rawRow.sourceOverrides !== 'object' ||\n        Array.isArray(rawRow.sourceOverrides))\n    ) {\n      return err(parseError(`catalog sourceOverrides for GUID ${rawRow.guid} to be an object`));\n    }\n    if (\n      rawRow.sourceOverrideDescriptors !== undefined &&\n      !Array.isArray(rawRow.sourceOverrideDescriptors)\n    ) {\n      return err(\n        parseError(`catalog sourceOverrideDescriptors for GUID ${rawRow.guid} to be an array`),\n      );\n    }\n    let resolvedUrl: string;\n    try {\n      resolvedUrl = resolveUrl(rawRow.packageUrl);\n    } catch (error) {\n      return err(\n        parseError(`catalog entry ${rawRow.guid} to resolve its packageUrl`, {\n          packageUrl: rawRow.packageUrl,\n          reason: error instanceof Error ? error.message : String(error),\n        }),\n      );\n    }\n    const row: CatalogRecord = {\n      packageUrl: resolvedUrl,\n      kind: rawRow.kind,\n      ...(rawRow.authoring !== undefined\n        ? { authoring: rawRow.authoring as AssetAuthoringCapability }\n        : {}),\n      ...(typeof rawRow.name === 'string' ? { name: rawRow.name } : {}),\n      ...(typeof rawRow.sourcePath === 'string' ? { sourcePath: rawRow.sourcePath } : {}),\n      ...(refs !== undefined ? { refs: refs as readonly string[] } : {}),\n      ...(typeof rawRow.cookReceiptUrl === 'string'\n        ? { cookReceiptUrl: rawRow.cookReceiptUrl }\n        : {}),\n      ...(typeof rawRow.packageId === 'string' ? { packageId: rawRow.packageId } : {}),\n      ...(rawRow.provenance !== undefined\n        ? { provenance: rawRow.provenance as ProviderProvenance }\n        : {}),\n      ...(rawRow.revision !== undefined ? { revision: rawRow.revision as ResourceRevision } : {}),\n      ...(typeof rawRow.sourceKey === 'string' ? { sourceKey: rawRow.sourceKey } : {}),\n      ...(typeof rawRow.sourceIndex === 'number' ? { sourceIndex: rawRow.sourceIndex } : {}),\n      ...(rawRow.sourceOverrides !== undefined\n        ? { sourceOverrides: rawRow.sourceOverrides as SourceOverrideMap }\n        : {}),\n      ...(rawRow.sourceOverrideDescriptors !== undefined\n        ? {\n            sourceOverrideDescriptors:\n              rawRow.sourceOverrideDescriptors as readonly SourceOverrideDescriptor[],\n          }\n        : {}),\n      ...(Array.isArray(rawRow.relations)\n        ? { relations: rawRow.relations as readonly AssetRelation[] }\n        : {}),\n      ...(Array.isArray(rawRow.diagnostics)\n        ? { diagnostics: rawRow.diagnostics as readonly CatalogDiagnostic[] }\n        : {}),\n      ...(rawRow.subject === 'internal-asset' || rawRow.subject === 'imported-output'\n        ? { subject: rawRow.subject }\n        : {}),\n      ...(rawRow.execution === 'direct' || rawRow.execution === 'cooked'\n        ? { execution: rawRow.execution }\n        : {}),\n      ...(rawRow.lifecycle === 'missing' ||\n      rawRow.lifecycle === 'cooking' ||\n      rawRow.lifecycle === 'current' ||\n      rawRow.lifecycle === 'stale' ||\n      rawRow.lifecycle === 'failed'\n        ? { lifecycle: rawRow.lifecycle }\n        : {}),\n      ...(rawRow.projection !== undefined\n        ? { projection: rawRow.projection as CatalogProjection }\n        : {}),\n      ...(rawRow.publication !== undefined\n        ? { publication: rawRow.publication as AssetPublicationEnvelope }\n        : {}),\n    };\n    catalog.set(guid, row);\n  }\n  const revisionError = checkExpectedRevision([...catalog.values()], expectedRevision);\n  if (revisionError !== undefined) return err(revisionError);\n  return ok(catalog);\n}\n\n/** Fetch and parse a catalog using the shared JSON/error boundary. */\nexport async function fetchCatalog(\n  url: string,\n  fetch: PackageFetcher,\n  resolveUrl?: (packageUrl: string) => string,\n  expectedRevision?: ResourceRevision,\n  expectedScope?: Pick<RuntimeAssetBinding, 'scopeId' | 'generation'>,\n  requestInit?: { readonly cache?: 'no-store' },\n): Promise<Result<Map<string, CatalogRecord>, AssetError>> {\n  const read = await readPackage(fetch, url, jsonOf, requestInit);\n  if (!read.ok) {\n    return err(\n      new AssetError({\n        code: 'asset-fetch-failed',\n        expected: `${read.error.malformed ? 'JSON' : 'readable'} catalog at ${url}`,\n        hint: `${read.error.observed} after ${read.error.attempts} request(s); ${ASSET_ERROR_HINTS['asset-fetch-failed']}`,\n        detail: { field: 'request', value: url, reason: read.error.observed },\n      }),\n    );\n  }\n  const raw = read.value;\n  return parseCatalog(raw, resolveUrl, expectedRevision, expectedScope);\n}\n\nexport function fetchPackIndex(\n  registry: AssetRegistry,\n): Promise<Result<Map<string, CatalogRecord>, AssetError>> {\n  const expectedScope =\n    registry.runtimeBinding !== undefined &&\n    registry.packIndexUrl === registry.runtimeBinding.catalogUrl\n      ? registry.runtimeBinding\n      : undefined;\n  return fetchCatalog(\n    registry.packIndexUrl as string,\n    globalThis.fetch,\n    (packageUrl) => resolveCatalogAssetUrl(registry, packageUrl),\n    undefined,\n    expectedScope,\n    { cache: 'no-store' },\n  );\n}\n","import { defineComponent, type EntityHandle, type World } from '@forgeax/engine-ecs';\nimport { createStateProjection, type StateProjection } from '@forgeax/engine-ecs/projection';\nimport { deriveVertexCount, deriveVertexLayoutProjection } from '@forgeax/engine-geometry';\nimport { box3 } from '@forgeax/engine-math';\nimport {\n  type Asset,\n  AssetError,\n  err,\n  type MaterialAsset,\n  type MaterialValue,\n  type MeshAsset,\n  ok,\n  type Result,\n  type VertexAttributeMap,\n} from '@forgeax/engine-types';\nimport { validateMeshPayload } from './payload-validate';\n\n/** One shared material parameter, stored and versioned by the World. */\nexport const RuntimeMaterialValue = defineComponent('RuntimeMaterialValue', {\n  asset: 'shared<MaterialAsset>',\n  parameter: 'string',\n  kind: { type: 'enum', labels: { number: 0, boolean: 1, vector: 2 }, default: 0 },\n  value: 'array<f32>',\n});\n\n/** One shared mesh's managed numeric buffers; empty indices retain the base topology. */\nexport const RuntimeMeshVertices = defineComponent('RuntimeMeshVertices', {\n  asset: 'shared<MeshAsset>',\n  vertices: 'array<f32>',\n  indices: 'array<u32>',\n});\n\ntype ContentRow = { readonly entity: EntityHandle; readonly asset: number } & (\n  | { readonly kind: 'material'; readonly parameter: string; readonly value: MaterialValue }\n  | {\n      readonly kind: 'mesh';\n      readonly vertices: Float32Array;\n      readonly indices: Uint32Array | undefined;\n    }\n);\ninterface RuntimeContentProjection {\n  readonly source: StateProjection;\n  readonly rows: Map<number, ContentRow>;\n  readonly assets: Map<number, Map<number, ContentRow>>;\n  readonly payloads: Map<number, { base: Asset; value: Asset }>;\n}\nconst projections = new WeakMap<World, RuntimeContentProjection>();\n\nfunction contentProjection(world: World): RuntimeContentProjection {\n  let projection = projections.get(world);\n  if (projection === undefined) {\n    projection = {\n      source: createStateProjection(world, [RuntimeMaterialValue, RuntimeMeshVertices]),\n      rows: new Map(),\n      assets: new Map(),\n      payloads: new Map(),\n    };\n    projections.set(world, projection);\n  }\n  if (projection.source.isCurrent()) return projection;\n  const batch = projection.source.read();\n  for (const index of batch.indices) {\n    const previous = projection.rows.get(index);\n    if (previous !== undefined) {\n      const entries = projection.assets.get(previous.asset);\n      entries?.delete(index);\n      if (entries?.size === 0) projection.assets.delete(previous.asset);\n      projection.payloads.delete(previous.asset);\n      projection.rows.delete(index);\n    }\n    const entity = projection.source.entity(index);\n    if (entity === undefined) continue;\n    const material = world.hasComponent(entity, RuntimeMaterialValue)\n      ? world.get(entity, RuntimeMaterialValue)\n      : undefined;\n    const mesh = world.hasComponent(entity, RuntimeMeshVertices)\n      ? world.get(entity, RuntimeMeshVertices)\n      : undefined;\n    let row: ContentRow;\n    if (material?.ok) {\n      const data = material.value;\n      row = {\n        kind: 'material',\n        entity,\n        asset: Number(data.asset),\n        parameter: data.parameter,\n        value:\n          data.kind === 2\n            ? Object.freeze(Array.from(data.value))\n            : data.kind === 1\n              ? (data.value[0] ?? 0) !== 0\n              : (data.value[0] ?? 0),\n      };\n    } else if (mesh?.ok) {\n      row = {\n        kind: 'mesh',\n        entity,\n        asset: Number(mesh.value.asset),\n        vertices: mesh.value.vertices.slice(),\n        indices: mesh.value.indices.length === 0 ? undefined : mesh.value.indices.slice(),\n      };\n    } else continue;\n    let entries = projection.assets.get(row.asset);\n    if (entries === undefined) {\n      entries = new Map();\n      projection.assets.set(row.asset, entries);\n    }\n    entries.set(index, row);\n    projection.rows.set(index, row);\n    projection.payloads.delete(row.asset);\n  }\n  batch.accept();\n  return projection;\n}\n\nfunction meshContent(base: MeshAsset, row: Extract<ContentRow, { kind: 'mesh' }>): MeshAsset {\n  const vertices = row.vertices;\n  const layout = deriveVertexLayoutProjection(base.attributes);\n  const count = deriveVertexCount(vertices, layout);\n  if (count === undefined)\n    throw new AssetError({\n      code: 'mesh-vertex-stride-mismatch',\n      expected: 'complete rows of the source vertex layout',\n      hint: 'Write a vertex buffer matching the source mesh layout, then resolve the same asset again.',\n    });\n  const attributes: Record<string, Float32Array | Uint16Array> = {};\n  const bytes = new DataView(vertices.buffer, vertices.byteOffset, vertices.byteLength);\n  for (const attribute of layout.attributes) {\n    const integer = attribute.format.startsWith('uint16');\n    const width = integer ? 2 : 4;\n    const arity = attribute.byteLength / width;\n    const values = integer ? new Uint16Array(count * arity) : new Float32Array(count * arity);\n    for (let row = 0; row < count; row++)\n      for (let lane = 0; lane < arity; lane++) {\n        const offset = row * layout.arrayStride + attribute.offset + lane * width;\n        values[row * arity + lane] = integer\n          ? bytes.getUint16(offset, true)\n          : bytes.getFloat32(offset, true);\n      }\n    attributes[attribute.key] = values;\n  }\n  const position = attributes.position;\n  if (position === undefined)\n    throw new AssetError({\n      code: 'asset-invalid-value',\n      expected: 'runtime mesh position attribute',\n      hint: 'Use a source mesh with a position attribute.',\n    });\n  const { cardLayout: _, distanceField: __, collision: ___, ...geometry } = base;\n  return Object.freeze({\n    ...geometry,\n    vertices,\n    ...(row.indices === undefined ? {} : { indices: row.indices }),\n    attributes: Object.freeze(attributes) as VertexAttributeMap,\n    aabb: box3.fromPositions(box3.create(), position),\n  });\n}\n\n/** Asset resolution's runtime-value projection; the SharedRefStore remains identity-only. */\nexport function projectRuntimeAsset<T extends Asset>(\n  world: World,\n  handle: number,\n  base: T,\n): Result<T, AssetError> {\n  if (base.kind !== 'material' && base.kind !== 'mesh') return ok(base);\n  const projection = contentProjection(world);\n  const rows = projection.assets.get(handle);\n  if (rows === undefined) return ok(base);\n  const cached = projection.payloads.get(handle);\n  if (cached?.base === base) return ok(cached.value as T);\n  let result: Asset = base;\n  if (base.kind === 'material') {\n    const material = base as MaterialAsset;\n    const values: Record<string, MaterialValue | null> = { ...material.values };\n    const parameters = new Set<string>();\n    for (const row of rows.values())\n      if (row.kind === 'material') {\n        if (parameters.has(row.parameter))\n          return err(\n            new AssetError({\n              code: 'asset-invalid-value',\n              expected: 'one content entity per material parameter',\n              hint: 'Remove the duplicate RuntimeMaterialValue or rebind its asset/parameter.',\n            }),\n          );\n        parameters.add(row.parameter);\n        values[row.parameter] = row.value;\n      }\n    result = Object.freeze({ ...material, values: Object.freeze(values) });\n  } else {\n    try {\n      let found = false;\n      for (const row of rows.values())\n        if (row.kind === 'mesh') {\n          if (found)\n            return err(\n              new AssetError({\n                code: 'asset-invalid-value',\n                expected: 'one content entity per mesh',\n                hint: 'Remove the duplicate RuntimeMeshVertices or rebind its asset.',\n              }),\n            );\n          found = true;\n          result = meshContent(base, row);\n          const invalid = validateMeshPayload(result);\n          if (invalid !== null) return err(invalid);\n        }\n    } catch (cause) {\n      if (cause instanceof AssetError) return err(cause);\n      throw cause;\n    }\n  }\n  projection.payloads.set(handle, { base, value: result });\n  return ok(result as T);\n}\n","// ─── BuiltinAssetRegistry (D-15 process-static tier) ────────────────────────\n//\n// D-15 two-tier asset resolution. Builtin payloads (the 5 procedural meshes\n// the engine ships with) are PROCESS-STATIC: a frozen const keyed by a fixed\n// slot u32 in [1, BUILTIN_BASE). They never enter a World's SharedRefStore,\n// never participate in reference counting, and resolve without any World\n// reference — so a builtin handle (HANDLE_CUBE etc.) is transparent across\n// every World and every renderer.\n//\n// R-13 (module init-order): all five payload consts are constructed\n// synchronously at module load, are module-level, and have no side effect.\n// Importing this module then calling resolve() observes fully-constructed\n// frozen payloads — there is no lazy getter and no circular-dependency\n// init hazard.\n//\n// The companion AssetRegistry (asset-registry.ts) retreats to a thin\n// guid<->handle index; user-tier payloads live in World.sharedRefs at\n// slots >= BUILTIN_BASE. AssetRegistry.get(handle) dispatches by slot range:\n// slot < BUILTIN_BASE -> BuiltinAssetRegistry.resolve, else world.sharedRefs.\n\nimport {\n  createBoxGeometry,\n  createCylinderGeometry,\n  createPlaneGeometry,\n  createSphereGeometry,\n  meshFromInterleaved,\n} from '@forgeax/engine-geometry';\nimport type { Handle, MeshAsset as TypesMeshAsset } from '@forgeax/engine-types';\nimport { BUILTIN_BASE, handleSlot } from '@forgeax/engine-types';\n\n// D-16: BUILTIN_BASE is the slot boundary [1, BUILTIN_BASE) builtin /\n// [BUILTIN_BASE, +inf) user-tier. It lives in @forgeax/engine-types (the\n// single shared dependency of ecs + runtime) to avoid a cross-package cycle;\n// re-exported from the runtime barrel here for AI-user discoverability.\nexport { BUILTIN_BASE };\n\n// ─── Builtin geometry data (12F: position + normal + uv + tangent) ──────────\n// bug-20260709-builtin-quad-withoutaabb-disables-sprite-frustum-cu: every\n// builtin geometry payload keeps the local-space AABB produced by its geometry\n// factory. Builtins are ordinary MeshAssets at the render boundary, so removing\n// their bounds silently turns them into always-visible renderables and defeats\n// the same frustum-culling path used by imported meshes.\n\n// BUILTIN_CUBE is synthesized from `createBoxGeometry(1, 1, 1)` so the cube\n// inherits Three.js-aligned per-face UV unwrap and per-vertex tangent vec4.\n// The procedural factory always returns Result.ok for valid (>0) extents,\n// hence the unwrap-with-throw is safe at module init.\nconst builtinCubeRes = createBoxGeometry(1, 1, 1);\nif (!builtinCubeRes.ok) {\n  throw new Error(\n    `[builtin-asset-registry] createBoxGeometry(1,1,1) failed: ${builtinCubeRes.error.code}`,\n  );\n}\nexport const BUILTIN_CUBE: TypesMeshAsset = Object.freeze(builtinCubeRes.value);\n\n// BUILTIN_TRIANGLE: 3 vertices in the XY plane facing +Z, with a [0..1]² UV\n// triangle so a textured triangle samples the texture (apex = top-centre,\n// base = bottom-left / bottom-right). meshFromInterleaved expands the\n// 8-floats interleaved input (pos + normal + uv) to the runtime 12-floats\n// stride (adds tangent vec4 per `geometry/tangent.ts` path A).\nconst builtinTriangleRes = meshFromInterleaved(\n  new Float32Array([\n    // pos.xyz                normal.xyz       uv.xy\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);\nif (!builtinTriangleRes.ok) {\n  throw new Error(\n    `[builtin-asset-registry] builtin triangle geometry failed: ${builtinTriangleRes.error.code}`,\n  );\n}\nexport const BUILTIN_TRIANGLE: TypesMeshAsset = Object.freeze(builtinTriangleRes.value);\n\n// BUILTIN_QUAD: unit-size plane on XY facing +Z (4 vertices, 2 triangles,\n// 6 indices). Synthesised from `createPlaneGeometry(1, 1)` (which itself\n// chains through `meshFromInterleaved`) so the resulting MeshAsset is\n// byte-identical to procedural plane output — zero new layout\n// discriminator, AI users reason about UV / pivot semantics by reading\n// `packages/runtime/src/geometry/plane.ts` (charter P4 consistent\n// abstraction; feat-20260520 M-1 / w06).\n// bug-20260709-builtin-quad-withoutaabb-disables-sprite-frustum-cu: this\n// payload follows the same local-AABB contract as every other builtin.\nconst builtinQuadRes = createPlaneGeometry(1, 1);\nif (!builtinQuadRes.ok) {\n  throw new Error(\n    `[builtin-asset-registry] createPlaneGeometry(1,1) failed: ${builtinQuadRes.error.code}`,\n  );\n}\nexport const BUILTIN_QUAD: TypesMeshAsset = Object.freeze(builtinQuadRes.value);\n\n// BUILTIN_SPHERE: UV-sphere synthesised from createSphereGeometry(1, 16, 12).\n// Vertices are at exact radius-1 positions (sphere.ts:40-45) so the\n// |hypot(pos)-1| < 1e-6 radius invariant holds by construction. Index\n// buffer is Uint32Array — downstream consumers (step-3 upload loop,\n// createRenderer.ts) auto-select 'uint32' indexFormat via\n// `instanceof Uint32Array`.\nconst builtinSphereRes = createSphereGeometry(1, 16, 12);\nif (!builtinSphereRes.ok) {\n  throw new Error(\n    `[builtin-asset-registry] createSphereGeometry(1,16,12) failed: ${builtinSphereRes.error.code}`,\n  );\n}\nexport const BUILTIN_SPHERE: TypesMeshAsset = Object.freeze(builtinSphereRes.value);\n\n// BUILTIN_CYLINDER: procedural cylinder synthesised from createCylinderGeometry(0.5, 0.5, 1, 16, 1).\n// Radius-top=radius-bottom=0.5, height=1, 16 radial segments, 1 height segment — a\n// unit-height open cylinder (no caps). meshFromInterleaved expands the 8-floats\n// interleaved input (pos + normal + uv) to the runtime 12-floats stride (adds\n// tangent vec4 per geometry/tangent.ts path A).\n// feat-20260701-editor-world-container-doc-ecs-collapse M0 / AC-16:\n// handle=6, GUID = deriveBuiltin('HANDLE_CYLINDER') UUIDv5\n// (plan-strategy §2 D-6 + §5.6 builtin-guid-ssot gate)\nconst builtinCylinderRes = createCylinderGeometry(0.5, 0.5, 1, 16, 1);\nif (!builtinCylinderRes.ok) {\n  throw new Error(\n    `[builtin-asset-registry] createCylinderGeometry(0.5,0.5,1,16,1) failed: ${builtinCylinderRes.error.code}`,\n  );\n}\nexport const BUILTIN_CYLINDER: TypesMeshAsset = Object.freeze(builtinCylinderRes.value);\n\n// BUILTIN_NINESLICE_QUAD: 4×4 grid plane synthesised from\n// createPlaneGeometry(1, 1, 3, 3) — 16 vertices, 9 sub-quads × 6 indices = 54.\n// Reuses the unit-quad vertex layout (12F: pos + normal + uv + tangent) so\n// HANDLE_NINESLICE_QUAD funnels through the same sprite-pipeline binding\n// table as HANDLE_QUAD; only the vertex_index → (i, j) decomposition in\n// sprite.wgsl branches on slices presence (feat-20260527-sprite-nineslice\n// M3, plan-strategy §D-2 + §D-4).\nconst builtinNineSliceQuadRes = createPlaneGeometry(1, 1, 3, 3);\nif (!builtinNineSliceQuadRes.ok) {\n  throw new Error(\n    `[builtin-asset-registry] createPlaneGeometry(1,1,3,3) failed: ${builtinNineSliceQuadRes.error.code}`,\n  );\n}\nexport const BUILTIN_NINESLICE_QUAD: TypesMeshAsset = Object.freeze(builtinNineSliceQuadRes.value);\n\n// Slot u32 -> frozen payload. Slot ids 1..5 are the fixed builtin handle\n// values (HANDLE_CUBE=1 .. HANDLE_NINESLICE_QUAD=5) defined in asset-registry.\nconst BUILTIN_BY_SLOT: ReadonlyMap<number, TypesMeshAsset> = new Map([\n  [1, BUILTIN_CUBE],\n  [2, BUILTIN_TRIANGLE],\n  [3, BUILTIN_QUAD],\n  [4, BUILTIN_SPHERE],\n  [5, BUILTIN_NINESLICE_QUAD],\n  [6, BUILTIN_CYLINDER],\n]);\n\n/**\n * Process-static builtin asset resolver (D-15). `resolve(handle)` returns the\n * frozen builtin payload when `slot < BUILTIN_BASE`, else `null` (the slot\n * belongs to the user tier — resolve it through `world.sharedRefs.resolve`).\n *\n * Read-only: there is no register / mint surface. The five builtin payloads\n * are fixed at module load. AI users `import { BuiltinAssetRegistry } from\n * '@forgeax/engine-runtime'` and resolve a builtin handle without a World.\n */\nexport const BuiltinAssetRegistry = Object.freeze({\n  resolve<T extends TypesMeshAsset>(handle: Handle<string, 'shared'>): T | null {\n    const slot = handleSlot(handle);\n    if (slot >= BUILTIN_BASE) return null;\n    const payload = BUILTIN_BY_SLOT.get(slot);\n    return payload === undefined ? null : (payload as T);\n  },\n});\n","import { projectRuntimeAsset } from './runtime-content';\n// M8 w59 (round 5 D-18 atomic): two-tier resolution + material-walk over\n// world.sharedRefs.\n//\n// D-15 two-tier asset resolution: slots in [1, BUILTIN_BASE) are builtins\n// (process-static, resolve through BuiltinAssetRegistry.resolve, never\n// reference-counted); slots >= BUILTIN_BASE are user-tier (resolve through\n// world.sharedRefs.resolve). Resolution is entirely ECS/render-side -- it\n// never goes through AssetRegistry (human-inputs implement-architecture-\n// correction 2026-06-16T12:35:07Z: AssetRegistry has NO handle concept).\n//\n// AI-user surface: `resolveAssetHandle(world, handle)` is the single entry\n// point for handle-to-payload resolution; `walkMaterialPassesOverSharedRefs`\n// is the material parent-chain walk used by the render extract stage. Charter\n// F1 single-entry indexability -- one import, one call, no dual-path leak.\n\nimport type { SharedRefStaleError, UniqueRefStaleError, World } from '@forgeax/engine-ecs';\nimport type { AssetGuid } from '@forgeax/engine-pack/guid';\nimport { err, ok, type Result } from '@forgeax/engine-rhi';\nimport type {\n  Asset,\n  AssetError as AssetErrorType,\n  Handle,\n  MaterialAsset,\n  MaterialError,\n  MaterialPass,\n} from '@forgeax/engine-types';\nimport {\n  ASSET_ERROR_HINTS,\n  AssetError,\n  BUILTIN_BASE,\n  handleSlot,\n  materialGuidText,\n  resolveMaterialAsset,\n} from '@forgeax/engine-types';\nimport { BuiltinAssetRegistry } from './builtin-asset-registry';\n\n/** A realm-local asset view; publication receivers never construct a World. */\nexport interface AssetReader {\n  readonly identity: string;\n  resolveAsset<T extends Asset>(\n    handle: Handle<string, 'shared'>,\n  ): Result<T, AssetErrorType | SharedRefStaleError | UniqueRefStaleError>;\n}\n\nexport type AssetReadSource = World | AssetReader;\n\n/**\n * Resolve a handle to its asset payload with two-tier slot-range dispatch.\n *\n *   slot <  BUILTIN_BASE -> BuiltinAssetRegistry.resolve(handle) (process-static)\n *   slot >= BUILTIN_BASE -> world.sharedRefs.resolve(handle)     (user-tier RC)\n *\n * Callers must specify the expected asset type explicitly:\n * `resolveAssetHandle<MeshAsset>(world, handle)`. The type parameter is an\n * assertion -- the runtime dispatch returns the correct payload based on slot\n * range; the type parameter mirrors the caller's expectation.\n *\n * @param world - The World owning the per-World SharedRefStore (user-tier).\n * @param handle - The branded handle to resolve.\n * @returns `Result.ok(payload)` on hit, `Result.err(AssetError)` on miss.\n */\nexport function resolveAssetHandle<T extends Asset>(\n  world: AssetReadSource,\n  handle: Handle<string, 'shared'>,\n): Result<T, AssetErrorType | SharedRefStaleError | UniqueRefStaleError> {\n  if ('resolveAsset' in world) return world.resolveAsset<T>(handle);\n  const slot = handleSlot(handle);\n  if (slot < BUILTIN_BASE) {\n    const builtin = BuiltinAssetRegistry.resolve(handle);\n    if (builtin !== null)\n      return projectRuntimeAsset(world, Number(handle), builtin as unknown as T);\n    return err(\n      new AssetError({\n        code: 'asset-not-found',\n        expected: `builtin slot ${slot} present in BuiltinAssetRegistry`,\n        hint: ASSET_ERROR_HINTS['asset-not-found'],\n      }),\n    );\n  }\n  const res = world.sharedRefs.resolve<string, T>(handle);\n  if (res.ok) return projectRuntimeAsset(world, Number(handle), res.value);\n  // Forward the closed error code transparently. Checking the discriminant,\n  // rather than constructor identity, preserves the structured stale detail\n  // when a browser bundles the bridge and its World through different module\n  // instances.\n  switch (res.error.code) {\n    case 'shared-ref-stale':\n      return err(res.error);\n    case 'shared-ref-released':\n    case 'builtin-slot-not-owned':\n      break;\n  }\n  return err(\n    new AssetError({\n      code: 'asset-not-found',\n      expected: `user-tier slot ${slot} present in world.sharedRefs`,\n      hint: ASSET_ERROR_HINTS['asset-not-found'],\n    }),\n  );\n}\n\n/**\n * Walk a MaterialAsset parent chain to produce the inherited passes +\n * shallow-merged values (W-1..W-7 semantics). feat-20260614 M8 (D-19):\n * the starting material is resolved from a column `handle` via\n * {@link resolveAssetHandle} (builtin / user-tier world.sharedRefs); each\n * ancestor `material.parent` is an embedded GUID (AssetGuid) resolved through\n * the AssetRegistry catalogue ({@link AssetRegistry.lookup}). The registry\n * holds no handles -- it is the GUID->payload SSOT for parent resolution.\n *\n * Zero-cache (AC-04): every call builds the same table-shaped input and delegates\n * inheritance semantics to the MaterialAsset resolver in `@forgeax/engine-types`.\n * Compiler and runtime therefore share root-contract ownership and child-value\n * override semantics instead of maintaining two subtly different walks.\n */\nexport function walkMaterialPassesOverSharedRefs(\n  world: World,\n  handle: Handle<'MaterialAsset', 'shared'>,\n  registry: { lookup(guid: AssetGuid | string): Asset | undefined },\n): Result<\n  {\n    passes: MaterialPass[];\n    parameters: MaterialAsset['parameters'];\n    values: NonNullable<MaterialAsset['values']>;\n    colorSpace: MaterialAsset['colorSpace'];\n    surface: MaterialAsset['surface'];\n  },\n  AssetErrorType | MaterialError | SharedRefStaleError | UniqueRefStaleError\n> {\n  // Resolve the root material payload from its column handle.\n  const rootRes = resolveAssetHandle<MaterialAsset>(\n    world,\n    handle as unknown as Handle<string, 'shared'>,\n  );\n\n  const rootLabel = `handle-${handleSlot(handle)}`;\n  if (!rootRes.ok) return err(rootRes.error);\n\n  const table: Record<string, MaterialAsset> = {};\n  const visited = new Set<string>();\n  const collect = (label: string, material: MaterialAsset): void => {\n    if (visited.has(label)) return;\n    visited.add(label);\n    table[label] = material;\n    if (material.parent === undefined) return;\n    const parentId = materialGuidText(material.parent);\n    const parent = registry.lookup(material.parent);\n    if (parent?.kind === 'material') collect(parentId, parent);\n  };\n  collect(rootLabel, rootRes.value);\n\n  const resolved = resolveMaterialAsset(rootLabel, table);\n  if (!resolved.ok) return err(resolved.error);\n  return ok({\n    passes: [...(resolved.value.asset.passes ?? [])],\n    parameters: resolved.value.asset.parameters ?? [],\n    values: {\n      ...Object.fromEntries(\n        (resolved.value.asset.parameters ?? []).flatMap((parameter) =>\n          parameter.default === undefined ? [] : [[parameter.name, parameter.default]],\n        ),\n      ),\n      ...(resolved.value.asset.values ?? {}),\n    },\n    colorSpace: resolved.value.asset.colorSpace,\n    surface: resolved.value.asset.surface,\n  });\n}\n","// @forgeax/engine-assets-runtime — scene-handle-fields: shared reflection helper for\n// SceneAsset handle-field extraction (plan-strategy D-4 / requirements B-5).\n//\n// `buildSceneChildContext` (breadcrumb)\n// consume this helper so the \"identify shared<...> / array<shared<...>> schema\n// fields + read GUID string\" logic has exactly one authoritative location\n// (Derive, Don't Duplicate).\n//\n// This helper returns raw GUID strings WITHOUT mutating the registry; resolution\n// to Handle numbers is the caller's responsibility.\n//\n// Both consumers prefer the structured `envelope.refs` edges (D-3) when an\n// envelope is catalogued for the scene, and fall back to this entity-component\n// walk only when no envelope (or no per-entity edge detail) is available:\n//  - `buildSceneChildContext`: prod GUID-only refs[] edges whose `sourceField`\n//    was stripped at the serialization boundary (w7 D-10), plus direct\n//    `catalog()` scene registration with no refs. The walk recovers the\n//    (entityKey, componentName, fieldName, arrayIndex) triple the bare\n//    edge no longer carries.\n\nimport type { Component } from '@forgeax/engine-ecs';\nimport { componentSchema } from '@forgeax/engine-ecs/internal';\n\n/**\n * A single handle-field reference extracted from a SceneAsset entity.\n *\n * `entityKey` is the stable keyed SceneAsset identity; `componentName` and `fieldName`\n * identify the schema field whose `fieldType` starts with `shared\\<` or\n * `array\\<shared\\<`. `guidString` is the raw GUID string value from the\n * entity's component data (NOT a parsed `AssetGuid` — callers parse or\n * resolve as needed).\n *\n * `arrayIndex` is `undefined` for plain `handle<T>` fields; for\n * `array<handle<T>>` fields it is the 0-based index into the array.\n */\nexport interface SceneHandleFieldEntry {\n  readonly entityKey: string;\n  readonly componentName: string;\n  readonly fieldName: string;\n  readonly guidString: string;\n  /** 0-based index for `array<handle<T>>` elements; `undefined` for plain `handle<T>` fields. */\n  readonly arrayIndex?: number;\n}\n\n/**\n * Shape of one keyed entity passed to {@link extractSceneEntityHandleGuids}.\n */\ninterface SceneEntityLike {\n  readonly components: Partial<Record<string, Record<string, unknown>>>;\n}\n\n/**\n * Walk every `SceneEntityLike` in `entities` and extract all GUID strings\n * bound to schema fields with `handle<...>` or `array<handle<...>>` fieldType.\n *\n * Unknown component names (absent from the supplied World-local catalog) are\n * silently skipped — the ecs layer's `additionalProperties` check will catch\n * unknowns at spawn time if appropriate.\n *\n * Values that are already numbers (resolved Handles) or non-strings are\n * skipped (they are not GUID refs).\n *\n * @internal Shared by `buildSceneChildContext` as the entity-walk fallback used when the structured\n * `envelope.refs` edges are unavailable or carry no per-entity detail.\n */\nexport function extractSceneEntityHandleGuids(\n  components: ReadonlyMap<string, Component>,\n  entities: Readonly<Record<string, SceneEntityLike>>,\n): SceneHandleFieldEntry[] {\n  const entries: SceneHandleFieldEntry[] = [];\n\n  for (const [entityKey, node] of Object.entries(entities)) {\n    const rawComponents: Record<string, Record<string, unknown>> = node.components as Record<\n      string,\n      Record<string, unknown>\n    >;\n\n    for (const compName of Object.keys(rawComponents)) {\n      const rawFields = rawComponents[compName];\n      if (!rawFields) continue;\n\n      const comp = components.get(compName);\n      if (!comp) continue;\n\n      for (const fieldName of Object.keys(rawFields)) {\n        forEachHandleGuid(\n          componentSchema(comp)[fieldName],\n          rawFields[fieldName],\n          (guidString, arrayIndex) => {\n            entries.push({\n              entityKey,\n              componentName: compName,\n              fieldName,\n              guidString,\n              ...(arrayIndex !== undefined ? { arrayIndex } : {}),\n            });\n          },\n        );\n      }\n    }\n  }\n\n  return entries;\n}\n\n/**\n * Shared handle-GUID identification core (feat-20260713 M3 / w12 SSOT): given a\n * schema `fieldType` and a `value`, invoke `sink(guidString, arrayIndex?)` for\n * every GUID string the field binds — once for a `shared<T>` scalar string, once\n * per string element of an `array<shared<T>>`. Non-shared fields, non-string\n * scalars, and non-string array elements (already-resolved handle numbers, D-8)\n * are skipped. Both the entity walk and the override walk route through here so\n * the \"is this a shared handle field + read its GUID\" logic has one home\n * (architecture-principles §1 SSOT).\n */\nfunction forEachHandleGuid(\n  fieldType: string | undefined,\n  value: unknown,\n  sink: (guidString: string, arrayIndex?: number) => void,\n): void {\n  if (fieldType === undefined || typeof fieldType !== 'string') return;\n  if (fieldType.startsWith('shared<')) {\n    if (typeof value === 'string') sink(value);\n    return;\n  }\n  if (fieldType.startsWith('array<shared<') && Array.isArray(value)) {\n    for (let elemIdx = 0; elemIdx < value.length; elemIdx++) {\n      const elem = value[elemIdx];\n      if (typeof elem === 'string') sink(elem, elemIdx);\n    }\n  }\n}\n","import { err, ok, type Result } from '@forgeax/engine-rhi';\nimport type {\n  AssetPublicationEnvelope,\n  CatalogEntry,\n  ScenePublicationFence as EngineScenePublicationFence,\n} from '@forgeax/engine-types';\n\nexport const SCENE_PUBLICATION_FENCE_SCHEMA = 'scene-publication-fence/1' as const;\nexport const SCENE_PUBLICATION_RECOVERY_ACTIONS = Object.freeze([\n  'continue-last-known-good',\n  'retry-rebuild',\n  'fresh-reopen',\n] as const);\n\nexport type ScenePublicationFence = EngineScenePublicationFence;\n\nexport type ScenePublicationFencePhase = 'publication' | 'catalog' | 'observation' | 'instantiate';\n\nexport interface ScenePublicationFenceError {\n  readonly code: 'asset-generation-fence-mismatch';\n  readonly phase: ScenePublicationFencePhase;\n  readonly hint: string;\n  readonly sourcePath?: string;\n  readonly sourceRevision?: string;\n  readonly expected?: ScenePublicationFence;\n  readonly actual?: ScenePublicationFence;\n  readonly currentGeneration?: number;\n  readonly lastKnownGood?: ScenePublicationFence;\n  readonly retryable: boolean;\n  readonly recoveryActions: readonly string[];\n}\n\nexport interface ScenePublicationObservation {\n  readonly fence: ScenePublicationFence;\n  readonly outputs: readonly string[];\n}\n\nfunction errorFor(\n  phase: ScenePublicationFencePhase,\n  hint: string,\n  input: {\n    readonly publication?: AssetPublicationEnvelope;\n    readonly expected?: ScenePublicationFence;\n    readonly actual?: ScenePublicationFence;\n    readonly lastKnownGood?: ScenePublicationFence;\n    readonly retryable?: boolean;\n  } = {},\n): ScenePublicationFenceError {\n  return {\n    code: 'asset-generation-fence-mismatch',\n    phase,\n    hint,\n    ...(input.publication === undefined\n      ? {}\n      : {\n          sourcePath: input.publication.sourcePath,\n          sourceRevision: input.publication.sourceRevision,\n        }),\n    ...(input.expected === undefined ? {} : { expected: input.expected }),\n    ...(input.actual === undefined ? {} : { actual: input.actual }),\n    ...(input.actual === undefined\n      ? {}\n      : { currentGeneration: input.actual.publicationGeneration }),\n    ...(input.lastKnownGood === undefined ? {} : { lastKnownGood: input.lastKnownGood }),\n    retryable: input.retryable ?? false,\n    recoveryActions: SCENE_PUBLICATION_RECOVERY_ACTIONS,\n  };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction sameFence(left: ScenePublicationFence, right: ScenePublicationFence): boolean {\n  return (\n    left.schemaVersion === right.schemaVersion &&\n    left.sourcePath === right.sourcePath &&\n    left.sourceRevision === right.sourceRevision &&\n    left.publicationGeneration === right.publicationGeneration &&\n    left.outputDigest === right.outputDigest &&\n    left.outputSetDigest === right.outputSetDigest &&\n    left.receiptIdentity === right.receiptIdentity\n  );\n}\n\n/** Convert one complete Engine publication into the serializable Scene fence. */\nexport function createScenePublicationFence(\n  publication: AssetPublicationEnvelope,\n): Result<ScenePublicationFence, ScenePublicationFenceError> {\n  if (publication.outputs.length === 0) {\n    return err(\n      errorFor('publication', 'publication must contain at least one output', { publication }),\n    );\n  }\n  if (!Number.isSafeInteger(publication.generation) || publication.generation < 1) {\n    return err(\n      errorFor('publication', 'publication generation must be a positive integer', { publication }),\n    );\n  }\n  const receipt = publication.receipt;\n  if (\n    receipt.schemaVersion !== 'asset-publication-receipt/1' ||\n    receipt.sourcePath !== publication.sourcePath ||\n    receipt.sourceRevision !== publication.sourceRevision ||\n    receipt.outputDigest !== publication.digest ||\n    receipt.outputSetDigest !== publication.outputSetDigest\n  ) {\n    return err(\n      errorFor('publication', 'publication receipt does not match the complete output tuple', {\n        publication,\n      }),\n    );\n  }\n  const outputGuids = new Set<string>();\n  for (const output of publication.outputs) {\n    const key = output.guid.toLowerCase();\n    if (outputGuids.has(key)) {\n      return err(\n        errorFor('publication', 'publication output GUIDs must be unique', { publication }),\n      );\n    }\n    outputGuids.add(key);\n  }\n  return ok({\n    schemaVersion: SCENE_PUBLICATION_FENCE_SCHEMA,\n    sourcePath: publication.sourcePath,\n    sourceRevision: publication.sourceRevision,\n    publicationGeneration: publication.generation,\n    outputDigest: publication.digest,\n    outputSetDigest: publication.outputSetDigest,\n    receiptIdentity: receipt.inputFingerprint,\n  });\n}\n\n/** Parse the persisted fence without guessing legacy generation or identity. */\nexport function parseScenePublicationFence(\n  value: unknown,\n): Result<ScenePublicationFence, ScenePublicationFenceError> {\n  if (\n    !isRecord(value) ||\n    value.schemaVersion !== SCENE_PUBLICATION_FENCE_SCHEMA ||\n    typeof value.sourcePath !== 'string' ||\n    typeof value.sourceRevision !== 'string' ||\n    !Number.isSafeInteger(value.publicationGeneration) ||\n    (value.publicationGeneration as number) < 1 ||\n    typeof value.outputDigest !== 'string' ||\n    typeof value.outputSetDigest !== 'string' ||\n    typeof value.receiptIdentity !== 'string'\n  ) {\n    return err(errorFor('publication', 'publication fence shape is incomplete or invalid'));\n  }\n  const generation = value.publicationGeneration as number;\n  return ok(\n    Object.freeze({\n      schemaVersion: SCENE_PUBLICATION_FENCE_SCHEMA,\n      sourcePath: value.sourcePath,\n      sourceRevision: value.sourceRevision,\n      publicationGeneration: generation,\n      outputDigest: value.outputDigest,\n      outputSetDigest: value.outputSetDigest,\n      receiptIdentity: value.receiptIdentity,\n    }),\n  );\n}\n\n/** Compare all fence fields; no single generation or GUID may stand in for it. */\nexport function compareScenePublicationFences(\n  expected: ScenePublicationFence,\n  actual: ScenePublicationFence,\n  lastKnownGood?: ScenePublicationFence,\n): Result<ScenePublicationFence, ScenePublicationFenceError> {\n  if (sameFence(expected, actual)) return ok(actual);\n  const input = {\n    expected,\n    actual,\n    retryable: true,\n    ...(lastKnownGood === undefined ? {} : { lastKnownGood }),\n  };\n  return err(\n    errorFor('observation', 'publication fence does not match the expected complete tuple', input),\n  );\n}\n\n/** Derive a fence only when every Catalog row for the source publication is present and aligned. */\nexport function scenePublicationFenceFromCatalog(\n  entries: readonly CatalogEntry[],\n  outputGuid: string,\n): Result<ScenePublicationFence, ScenePublicationFenceError> {\n  const row = entries.find((entry) => entry.guid.toLowerCase() === outputGuid.toLowerCase());\n  const publication = row?.publication;\n  if (publication === undefined) {\n    return err(errorFor('catalog', 'Catalog row has no complete publication tuple'));\n  }\n  const expected = new Set(publication.outputs.map((output) => output.guid.toLowerCase()));\n  const observed = entries.filter((entry) => expected.has(entry.guid.toLowerCase()));\n  if (\n    observed.length !== expected.size ||\n    observed.some(\n      (entry) =>\n        entry.publication?.sourcePath !== publication.sourcePath ||\n        entry.publication?.generation !== publication.generation ||\n        entry.publication?.digest !== publication.digest ||\n        entry.publication?.outputSetDigest !== publication.outputSetDigest,\n    )\n  ) {\n    return err(\n      errorFor('catalog', 'Catalog does not contain one complete publication tuple', {\n        publication,\n      }),\n    );\n  }\n  return createScenePublicationFence(publication);\n}\n\nexport async function observeScenePublication(input: {\n  readonly publication: AssetPublicationEnvelope;\n  readonly waitForOutput: (guid: string) => Promise<void>;\n  readonly timeoutMs?: number;\n  readonly lastKnownGood?: ScenePublicationFence;\n}): Promise<Result<ScenePublicationObservation, ScenePublicationFenceError>> {\n  const created = createScenePublicationFence(input.publication);\n  if (!created.ok) return created;\n  const timeoutMs = input.timeoutMs ?? 5_000;\n  const wait = Promise.all(\n    input.publication.outputs.map((output) => input.waitForOutput(output.guid)),\n  );\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  try {\n    await Promise.race([\n      wait,\n      new Promise<never>((_, reject) => {\n        timer = setTimeout(() => reject(new Error('publication-observation-timeout')), timeoutMs);\n      }),\n    ]);\n  } catch {\n    const failureInput = {\n      publication: input.publication,\n      actual: created.value,\n      retryable: true,\n      ...(input.lastKnownGood === undefined ? {} : { lastKnownGood: input.lastKnownGood }),\n    };\n    return err(\n      errorFor(\n        'observation',\n        'publication output observation did not complete before the fence deadline',\n        failureInput,\n      ),\n    );\n  } finally {\n    if (timer !== undefined) clearTimeout(timer);\n  }\n  return ok({\n    fence: created.value,\n    outputs: input.publication.outputs.map((output) => output.guid),\n  });\n}\n","// @forgeax/engine-assets-runtime -- scene instantiate collaboration module\n// (feat-20260705-runtime-tier2-decomposition M1 / w6, D-4 + D-1). Free functions\n// taking the AssetRegistry instance as first param; logic byte-preserved from the\n// class body (this. -> registry.). Hosts the SkinJointResolver + PostSpawnHook\n// hook-contract types relocated from scene-instances/post-spawn-resolve-joints.ts\n// (D-1); w9 wires PostSpawnHook into the AssetRegistry constructor.\n\nimport type { EcsError, EntityHandle, World } from '@forgeax/engine-ecs';\nimport type { PackError } from '@forgeax/engine-pack/errors';\nimport { AssetGuid } from '@forgeax/engine-pack/guid';\nimport { err, ok, type Result } from '@forgeax/engine-rhi';\nimport {\n  worldDespawnScene,\n  worldInstantiateScene,\n  worldInstantiateSceneFlat,\n  worldSetSceneAssetResolver,\n} from '@forgeax/engine-scene';\nimport type { SkinError } from '@forgeax/engine-skinning';\nimport {\n  type Asset,\n  type AssetEnvelope,\n  AssetError,\n  type CatalogEntry,\n  type Handle,\n  PACK_ERROR_HINTS,\n  type SceneAsset,\n  type SkeletonAsset,\n  type SkinAsset,\n  type TagOf,\n  unwrapHandle,\n} from '@forgeax/engine-types';\nimport type { AssetRegistry } from '../asset-registry';\nimport { resolveAssetHandle } from '../resolve-asset-handle';\nimport { extractSceneEntityHandleGuids, type SceneHandleFieldEntry } from '../scene-handle-fields';\nimport {\n  compareScenePublicationFences,\n  type ScenePublicationFence,\n  type ScenePublicationFenceError,\n  scenePublicationFenceFromCatalog,\n} from './scene-publication-fence';\n\n/**\n * Resolver contract consumed by {@link postSpawnResolveJoints} (D-1: relocated\n * here from scene-instances/post-spawn-resolve-joints.ts so the hook contract\n * travels with the instantiate cluster into @forgeax/engine-assets-runtime).\n */\nexport interface SkinJointResolver {\n  resolveSkinAsset(skeletonHandleRaw: number): SkinAsset | undefined;\n}\n\n/** Merge the live Edit Catalog and the Play pack-index projection for fences. */\nfunction catalogEntriesForFence(registry: AssetRegistry): readonly CatalogEntry[] {\n  const byGuid = new Map<string, CatalogEntry>();\n  for (const entry of registry.catalogSnapshot()?.entries ?? []) {\n    byGuid.set(entry.guid.toLowerCase(), entry);\n  }\n  for (const [guid, record] of registry.packIndexCache ?? []) {\n    if (record.sourcePath === undefined) continue;\n    const candidate = { ...record, guid, sourcePath: record.sourcePath } as CatalogEntry;\n    const current = byGuid.get(guid.toLowerCase());\n    if (current === undefined || candidate.publication !== undefined) {\n      // A persisted Scene fence is captured from the complete pack-index\n      // publication at save time. If the CatalogReplica is still carrying its\n      // previous tuple during the watcher handoff, keep the same pack-index\n      // authority here or the freshly reopened scene will reject its own\n      // mount with asset-generation-fence-mismatch.\n      byGuid.set(guid.toLowerCase(), candidate);\n    }\n  }\n  return [...byGuid.values()];\n}\n\n/** Resolve the authored SceneEntity identity from the Catalog projection. */\nfunction sceneSourceKeyForGuid(\n  registry: AssetRegistry,\n  guid: string | undefined,\n): string | undefined {\n  if (guid === undefined) return undefined;\n  const key = guid.toLowerCase();\n  const snapshotEntry = registry\n    .catalogSnapshot()\n    ?.entries.find((entry) => entry.guid.toLowerCase() === key);\n  if (snapshotEntry?.sourceKey !== undefined) return snapshotEntry.sourceKey;\n  return registry.packIndexCache?.get(key)?.sourceKey;\n}\n\n/** Derive a publication fence from the registry's unified live projections. */\nexport function scenePublicationFenceFromRegistry(\n  registry: AssetRegistry,\n  outputGuid: string,\n): Result<ScenePublicationFence, ScenePublicationFenceError> {\n  return scenePublicationFenceFromCatalog(catalogEntriesForFence(registry), outputGuid);\n}\n\n/**\n * Validate the producer receipt for every keyed instance edge before the\n * Scene owner starts spawning. The authored declaration carries only the\n * child GUID; the expected generation/digest comes from the parent\n * publication's external evidence, so publication state never leaks into the\n * SceneAsset model.\n */\n/** @internal */\nexport function validateKeyedScenePublication(\n  registry: AssetRegistry,\n  scene: SceneAsset,\n  rootGuid: string | undefined,\n): Result<void, ScenePublicationFenceError> {\n  if (rootGuid === undefined) return ok(undefined);\n  const entries = catalogEntriesForFence(registry);\n  const byGuid = new Map(entries.map((entry) => [entry.guid.toLowerCase(), entry]));\n  const rootEntry = byGuid.get(rootGuid.toLowerCase());\n  const rootPublication = rootEntry?.publication;\n  if (rootPublication === undefined) return ok(undefined);\n  const visited = new Set<string>();\n\n  const visit = (\n    current: SceneAsset,\n    parentPublication: typeof rootPublication,\n    path: readonly string[],\n  ): Result<void, ScenePublicationFenceError> => {\n    for (const [entityKey, node] of Object.entries(current.entities)) {\n      const source = node.instance?.source;\n      if (source === undefined) continue;\n      const childGuid = source.toLowerCase();\n      const childEntry = byGuid.get(childGuid);\n      const childPublication = childEntry?.publication;\n      const address = [...path, entityKey].join('/');\n      if (childPublication === undefined) {\n        return err({\n          code: 'asset-generation-fence-mismatch',\n          phase: 'instantiate',\n          hint: `nested SceneAsset publication is unavailable at ${address}`,\n          ...(childEntry?.sourcePath === undefined ? {} : { sourcePath: childEntry.sourcePath }),\n          retryable: true,\n          recoveryActions: ['continue-last-known-good', 'retry-rebuild', 'fresh-reopen'],\n        });\n      }\n      const evidence = parentPublication.externalEvidence.find(\n        (item) => item.guid.toLowerCase() === childGuid,\n      );\n      const childOutput = childPublication.outputs.find(\n        (output) => output.guid.toLowerCase() === childGuid,\n      );\n      if (\n        evidence !== undefined &&\n        (evidence.generation !== undefined || evidence.digest !== undefined)\n      ) {\n        if (\n          (evidence.generation !== undefined &&\n            evidence.generation !== childPublication.generation) ||\n          (evidence.digest !== undefined &&\n            (childOutput === undefined || evidence.digest !== childOutput.digest))\n        ) {\n          return err({\n            code: 'asset-generation-fence-mismatch',\n            phase: 'instantiate',\n            hint: `nested SceneAsset publication changed at ${address}`,\n            sourcePath: childPublication.sourcePath,\n            sourceRevision: childPublication.sourceRevision,\n            currentGeneration: childPublication.generation,\n            retryable: true,\n            recoveryActions: ['continue-last-known-good', 'retry-rebuild', 'fresh-reopen'],\n          });\n        }\n      }\n      if (visited.has(childGuid)) continue;\n      visited.add(childGuid);\n      const child =\n        childEntry?.guid === undefined ? undefined : registry.assetCatalog.get(childGuid)?.payload;\n      if (child?.kind === 'scene') {\n        const nested = visit(child, childPublication, [...path, entityKey]);\n        if (!nested.ok) return nested;\n      }\n    }\n    return ok(undefined);\n  };\n\n  return visit(scene, rootPublication, []);\n}\n\n/** Resolve one schema-declared shared-field GUID to a World-owned handle. */\nexport function resolveHandleGuid(\n  registry: AssetRegistry,\n  world: World,\n  guidString: string,\n  guidToHandle: Map<string, number>,\n  fieldPath: string,\n  location: string,\n): Result<number, AssetError> {\n  const guidRes = AssetGuid.parse(guidString);\n  if (!guidRes.ok) {\n    return err(\n      new AssetError({\n        code: 'asset-not-found',\n        expected: `valid GUID string for field ${fieldPath}`,\n        hint: `GUID \"${guidString}\" could not be parsed; at ${location}, field=${fieldPath}`,\n      }),\n    );\n  }\n  const guidKey = guidString.toLowerCase();\n  let slot = guidToHandle.get(guidKey);\n  if (slot === undefined) {\n    const envelope = registry.assetCatalog.get(guidKey);\n    if (envelope === undefined) {\n      return err(\n        new AssetError({\n          code: 'asset-not-found',\n          expected: `GUID ${guidString} catalogued in AssetRegistry`,\n          hint:\n            `GUID ${guidString} not catalogued; ` +\n            `call loadByGuid('${guidString}') before instantiate; ` +\n            `at ${location}, field=${fieldPath}`,\n        }),\n      );\n    }\n    slot = unwrapHandle(world.sharedRefs.acquire(envelope.payload.kind, envelope.payload));\n    guidToHandle.set(guidKey, slot);\n  }\n  return ok(slot);\n}\n\n/** Match a spawned Skin's skeleton handle to the catalogued SkinAsset bound to that skeleton. */\nfunction skinJointResolver(registry: AssetRegistry, world: World): SkinJointResolver {\n  return {\n    resolveSkinAsset(skeletonHandleRaw: number) {\n      const skelRes = resolveAssetHandle<SkeletonAsset>(\n        world,\n        skeletonHandleRaw as unknown as Handle<string, 'shared'>,\n      );\n      if (!skelRes.ok) return undefined;\n      const skeletonGuid = registry._guidForAsset(skelRes.value as Asset);\n      if (skeletonGuid === undefined) return undefined;\n      for (const [, envelope] of registry.assetCatalog) {\n        const asset = envelope.payload;\n        if (asset.kind !== 'skin') continue;\n        if (asset.skeletonGuid?.toLowerCase() === skeletonGuid) return asset;\n      }\n      return undefined;\n    },\n  };\n}\n\n/**\n * Post-spawn hook contract (D-1). A hook runs after instantiate spawns the\n * scene subtree; the shipped implementation is runtime's `postSpawnResolveJoints`\n * (auto-wire Skin.joints). Injected at the sole production assembly point\n * (createRenderer) in w9/w10; when absent, instantiate skips joint wiring.\n */\nexport type PostSpawnHook = (\n  world: World,\n  resolver: SkinJointResolver,\n  root: EntityHandle,\n) => { ok: true } | { ok: false; error: SkinError };\n\n/** All structured failures produced by either public Scene spawn shape. */\nexport type SceneInstantiateError =\n  | AssetError\n  | PackError\n  | EcsError\n  | ScenePublicationFenceError\n  | SkinError;\n\n/** Remove only the entities and grants acquired by this instantiate call. */\nfunction rollbackSpawn(\n  world: World,\n  roots: readonly EntityHandle[],\n  allocHandles: readonly number[],\n): void {\n  for (const root of new Set(roots)) void worldDespawnScene(world, root);\n  for (const raw of allocHandles) void world.sharedRefs.release(raw as never);\n}\n\n/** Validate publication and resolve one temporary Scene grant for either spawn shape. */\nfunction prepareSceneInstantiation(\n  registry: AssetRegistry,\n  sceneAsset: SceneAsset,\n  world: World,\n  allocHandles: number[],\n  expectedPublication?: ScenePublicationFence,\n): Result<Handle<'SceneAsset', 'shared'>, SceneInstantiateError> {\n  const sceneGuidKey = registry._guidForAsset(sceneAsset);\n  const nestedPublication = validateKeyedScenePublication(registry, sceneAsset, sceneGuidKey);\n  if (!nestedPublication.ok) return nestedPublication;\n  if (expectedPublication !== undefined) {\n    const entries = catalogEntriesForFence(registry);\n    if (sceneGuidKey === undefined) {\n      return err({\n        code: 'asset-generation-fence-mismatch',\n        phase: 'instantiate',\n        hint: 'generated Scene source has no Catalog identity for publication fence validation',\n        retryable: true,\n        recoveryActions: ['continue-last-known-good', 'retry-rebuild', 'fresh-reopen'],\n      } as const);\n    }\n    const current = scenePublicationFenceFromCatalog(entries, sceneGuidKey);\n    if (!current.ok) return current;\n    const matches = compareScenePublicationFences(expectedPublication, current.value);\n    if (!matches.ok) return matches;\n  }\n  const guidToHandle = new Map<string, number>();\n  const resolvedSceneHandles = new Map<string, number>();\n  const sceneRes = registry._resolveSceneGuids(\n    sceneAsset,\n    world,\n    sceneGuidKey,\n    undefined,\n    guidToHandle,\n    resolvedSceneHandles,\n  );\n  if (!sceneRes.ok) {\n    rollbackSpawn(world, [], [...resolvedSceneHandles.values(), ...guidToHandle.values()]);\n    return sceneRes;\n  }\n  allocHandles.push(...guidToHandle.values());\n  allocHandles.push(...resolvedSceneHandles.values());\n\n  // feat-20260703 M1 (D-1): register the resolved copy -> original\n  // catalog GUID in the origin reverse-index so _guidForAsset can\n  // find it even after the local sceneGuidKey variable is discarded.\n  if (sceneGuidKey !== undefined) {\n    registry._originIndex.set(sceneRes.value, sceneGuidKey);\n  }\n\n  // Register the GUID-resolved SceneAsset as a shared ref so\n  // Scene owner resolves it transparently. The shared\n  // grant remains temporary; the SceneInstance source column retains its\n  // own reference before this call releases its grant.\n  const sharedHandle = world.allocSharedRef('SceneAsset', sceneRes.value);\n  allocHandles.push(unwrapHandle(sharedHandle));\n\n  // Wire the identity resolver so keyed instance.source GUIDs resolved by\n  // the registry pass through to the Scene owner.\n  // Scene mount resolution calls this resolver; when source is a number (live handle),\n  // return it as-is; when source is a string (unresolved GUID),\n  // fail (should not happen after resolution, but fail-safe).\n  worldSetSceneAssetResolver(world, (source, _parentHandle) => {\n    if (typeof source === 'number') {\n      return ok(source as unknown as Handle<'SceneAsset', 'shared'>);\n    }\n    const resolved = resolvedSceneHandles.get(source.toLowerCase());\n    if (resolved !== undefined) {\n      return ok(resolved as unknown as Handle<'SceneAsset', 'shared'>);\n    }\n    return err({\n      code: 'asset-not-found' as const,\n      expected: `mount source GUID ${source} resolved before instantiate`,\n      hint: PACK_ERROR_HINTS['pack-cyclic-reference'],\n    });\n  });\n  return ok(sharedHandle);\n}\n\n/**\n * Materialise a `SceneAsset` into an existing `World` and return the\n * synthetic root `Entity` (feat-20260514 w31 sugar wrapper; AC-03 +\n * requirements §IN-3; M3: returns Entity not SceneInstanceId).\n *\n * Before spawning, handle-type component fields (e.g. `assetHandle`,\n * `material`, `skeleton`) containing GUID strings are resolved to fresh\n * user-tier `Handle` numbers via `world.allocSharedRef` (feat-20260614 M8\n * D-19 instantiate-time GUID->handle mint; supersedes the pre-D-17\n * `resolveGuid` map). GUIDs that fail to parse or are not catalogued return\n * `AssetError(code='asset-not-found')` with a hint containing the GUID,\n * node localId, and field name.\n *\n * Errors propagate verbatim through the closed\n * `AssetError | PackError | EcsError` union so AI users that already\n * narrow `loadByGuid<SceneAsset>` results reuse the same `switch\n * (err.code)` exhaustively (charter proposition 3 machine-readable\n * union; plan-strategy §3.3 closed-union transparency).\n *\n * @example\n * ```ts\n * const sceneRes = await engine.assets.loadByGuid<SceneAsset>(roomGuid); // payload (D-17)\n * if (!sceneRes.ok) return;\n * const handle = world.allocSharedRef('SceneAsset', sceneRes.value);     // mint column handle\n * const r = engine.assets.instantiate(handle, world);\n * if (!r.ok) {\n *   switch (r.error.code) {\n *     case 'asset-not-found':\n *     case 'pack-cyclic-reference':\n *     // ... AssetErrorCode | PackErrorCode | EcsErrorCode exhaustive\n *   }\n * }\n * ```\n */\nexport function instantiate<T extends SceneAsset>(\n  registry: AssetRegistry,\n  handle: Handle<TagOf<T>, 'shared'>,\n  world: World,\n  parent?: EntityHandle,\n  expectedPublication?: ScenePublicationFence,\n): Result<EntityHandle, SceneInstantiateError> {\n  const allocHandles: number[] = [];\n  // feat-20260614 M8 (D-15 / D-17): resolve the SceneAsset payload from the\n  // handle through the two-tier `resolveAssetHandle` (builtin / user-tier\n  // world.sharedRefs) -- the registry holds no handle->payload map. Scene\n  // GUID-type component fields are then resolved to fresh user-tier handles\n  // via `world.allocSharedRef` (instantiate-time GUID->handle mint). When the\n  // handle does not resolve to a scene payload, fall through to the ecs-only\n  // path (an externally-resolved SceneAssetResolver handle).\n  let instantiateResult: Result<EntityHandle, AssetError | PackError | EcsError>;\n  const sceneRes0 = resolveAssetHandle<SceneAsset>(\n    world,\n    handle as unknown as Handle<string, 'shared'>,\n  );\n  const sceneAsset = sceneRes0.ok ? sceneRes0.value : undefined;\n  if (sceneAsset !== undefined && sceneAsset.kind !== 'scene') {\n    return err(\n      new AssetError({\n        code: 'asset-invalid-value',\n        expected: 'instantiate handle resolves to a SceneAsset',\n        hint: `resolved asset kind was ${sceneAsset.kind}`,\n      }),\n    );\n  }\n  if (sceneAsset !== undefined && sceneAsset.kind === 'scene') {\n    // feat-20260622 M3 / w8: find the scene's GUID key in the catalog\n    // so _resolveSceneGuids can reverse-decode from envelope.refs edges.\n    const sceneSourceKey = sceneSourceKeyForGuid(registry, registry._guidForAsset(sceneAsset));\n    const prepared = prepareSceneInstantiation(\n      registry,\n      sceneAsset,\n      world,\n      allocHandles,\n      expectedPublication,\n    );\n    if (!prepared.ok) return prepared;\n    const sharedHandle = prepared.value;\n\n    // The Scene API still returns `{ root, diagnostics }` on success. This\n    // runtime API keeps its `Result<EntityHandle>` contract and unwraps\n    // `root`; schema-invalid authored fields fail before spawning.\n    const sceneInst = worldInstantiateScene(world, sharedHandle, parent, sceneSourceKey);\n    if (!sceneInst.ok) {\n      rollbackSpawn(world, [], allocHandles);\n      return sceneInst as unknown as Result<EntityHandle, AssetError | PackError | EcsError>;\n    }\n    instantiateResult = ok(sceneInst.value.root);\n  } else {\n    // Non-resolvable handle: original ecs direct path (backward compat).\n    const sceneInst = worldInstantiateScene(\n      world,\n      handle as Handle<'SceneAsset', 'shared'>,\n      parent,\n    );\n    if (!sceneInst.ok) {\n      return sceneInst as unknown as Result<EntityHandle, AssetError | PackError | EcsError>;\n    }\n    instantiateResult = ok(sceneInst.value.root);\n  }\n\n  // Post-spawn hook: auto-wire Skin.joints from jointPaths. feat-20260614 M8\n  // (D-15): the Skin column holds a user-tier SkeletonAsset handle; resolve\n  // it to the payload via the two-tier `resolveAssetHandle`, then match the\n  // catalogued SkinAsset whose resolved skeleton payload is the same object\n  // (the registry holds no handle->guid index).\n  //\n  // feat-20260705-runtime-tier2-decomposition M1 / w9 (D-1): the hook is\n  // injected via `registry.postSpawnHook` (the sole production assembly point\n  // createRenderer wires `postSpawnResolveJoints`). When no hook is present\n  // (standalone / test registries without joint-wiring needs), instantiate\n  // skips the post-spawn wiring silently -- the resolver closure below stays\n  // inline (it reads registry-internal state: assetCatalog / _guidForAsset).\n  const hook = registry.postSpawnHook;\n  if (hook !== undefined) {\n    const resolver = skinJointResolver(registry, world);\n    const jointResolveResult = hook(world, resolver, instantiateResult.value);\n    if (!jointResolveResult.ok) {\n      rollbackSpawn(world, [instantiateResult.value], allocHandles);\n      return err(jointResolveResult.error);\n    }\n  }\n\n  // The spawned source and component columns now own their retained references.\n  for (const raw of allocHandles) void world.sharedRefs.release(raw as never);\n  return instantiateResult;\n}\n\n/**\n * Materialise a `SceneAsset` FLAT into an existing `World` — the \"edit the\n * scene itself\" registry entry (#655). Shares the GUID-resolution + shared-ref +\n * SceneAssetResolver prelude with {@link instantiate}, but calls\n * `worldInstantiateSceneFlat` instead of `worldInstantiateScene`: NO synthetic\n * SceneInstance root, NO forced `ChildOf` on top-level members. The scene's own\n * entities become plain top-level world entities; nested prefabs (`mounts[]`)\n * still become their own SceneInstance anchors. Returns the set of top-level\n * entity handles.\n *\n * Use this to OPEN a scene for authoring; use {@link instantiate} (anchor) at\n * runtime / Play and for nested prefabs.\n *\n * The post-spawn Skin.joints hook (when wired via `registry.postSpawnHook`)\n * runs once per top-level root: each GLB root keeps its own `ChildOf` subtree,\n * so joint resolution is scoped to each subtree exactly as the anchor path\n * scopes it to the single synthetic root.\n */\nexport function instantiateFlat<T extends SceneAsset>(\n  registry: AssetRegistry,\n  handle: Handle<TagOf<T>, 'shared'>,\n  world: World,\n  expectedPublication?: ScenePublicationFence,\n): Result<EntityHandle[], SceneInstantiateError> {\n  const allocHandles: number[] = [];\n  let roots: EntityHandle[];\n  let mountEntities: EntityHandle[];\n  const sceneRes0 = resolveAssetHandle<SceneAsset>(\n    world,\n    handle as unknown as Handle<string, 'shared'>,\n  );\n  const sceneAsset = sceneRes0.ok ? sceneRes0.value : undefined;\n  if (sceneAsset !== undefined && sceneAsset.kind === 'scene') {\n    const prepared = prepareSceneInstantiation(\n      registry,\n      sceneAsset,\n      world,\n      allocHandles,\n      expectedPublication,\n    );\n    if (!prepared.ok) return prepared;\n    const sharedHandle = prepared.value;\n    const sceneInst = worldInstantiateSceneFlat(world, sharedHandle);\n    if (!sceneInst.ok) {\n      rollbackSpawn(world, [], allocHandles);\n      return sceneInst as unknown as Result<EntityHandle[], AssetError | PackError | EcsError>;\n    }\n    roots = sceneInst.value.roots;\n    mountEntities = sceneInst.value.mountEntities;\n  } else {\n    const sceneInst = worldInstantiateSceneFlat(world, handle as Handle<'SceneAsset', 'shared'>);\n    if (!sceneInst.ok) {\n      return sceneInst as unknown as Result<EntityHandle[], AssetError | PackError | EcsError>;\n    }\n    roots = sceneInst.value.roots;\n    mountEntities = sceneInst.value.mountEntities;\n  }\n\n  // Post-spawn Skin.joints wiring, per top-level root. Mirrors the anchor\n  // path's hook (D-1: injected via `registry.postSpawnHook`); when no hook is\n  // present the flat path skips joint wiring silently.\n  const hook = registry.postSpawnHook;\n  if (hook !== undefined) {\n    const resolver = skinJointResolver(registry, world);\n    const hookRoots = new Set<EntityHandle>(roots);\n    for (const mountEntity of mountEntities) hookRoots.add(mountEntity);\n    for (const root of hookRoots) {\n      const jointResolveResult = hook(world, resolver, root);\n      if (!jointResolveResult.ok) {\n        rollbackSpawn(world, [...roots, ...mountEntities], allocHandles);\n        return err(jointResolveResult.error);\n      }\n    }\n  }\n\n  // Spawned component columns retain their resources; the flat top-level\n  // scene has no source column to own these temporary producer grants.\n  for (const raw of allocHandles) void world.sharedRefs.release(raw as never);\n  return ok(roots);\n}\n\n/**\n * tweak-20260609 M1 helper: build the per-sub-ref parent context for a\n * SceneAsset child. feat-20260622 M3 / w9: re-sourced to lookup in the\n * scene envelope's ``refs[]`` edges instead of walking entity components\n * via extractSceneEntityHandleGuids (D-7). When the scene envelope is not\n * found in the catalog, falls back to the entity-walk path (backward compat\n * for call sites that lack a catalogued envelope).\n *\n * Texture edges (sourceField=undefined) produce ``componentField:\n * undefined`` — the breadcrumb will show GUID+kind only, no per-entity\n * detail (D-2: texture has no per-entity origin).\n */\nexport function buildSceneChildContext(\n  registry: AssetRegistry,\n  scene: Asset & { kind: 'scene' },\n  subGuidKey: string,\n  sceneGuidKey?: string,\n):\n  | {\n      sceneEntityKey?: string;\n      componentField?: string;\n      sourceField?: {\n        componentName?: string;\n        fieldName: string;\n        arrayIndex?: number;\n      };\n    }\n  | undefined {\n  return createSceneChildContextLookup(registry, scene)(subGuidKey, sceneGuidKey);\n}\n\n/** @internal One synchronous dependency traversal owns this lazy origin index. */\nexport function createSceneChildContextLookup(\n  registry: AssetRegistry,\n  scene: Asset & { kind: 'scene' },\n): (subGuidKey: string, sceneGuidKey?: string) => ReturnType<typeof buildSceneChildContext> {\n  let origins: Map<string, SceneHandleFieldEntry> | undefined;\n  return (subGuidKey, sceneGuidKey) => {\n    // feat-20260622 M3 / w9: direct lookup in envelope.refs edges.\n    // feat-20260622 review r1: address the recursing scene's OWN envelope by\n    // its guidKey, not the first scene in the catalog -- under a multi-scene\n    // glTF catalog the first-scene scan attributes the breadcrumb to the wrong\n    // scene. Fall back to the first-scene scan only when no guidKey is given\n    // (legacy call sites lacking a catalogued envelope).\n    let sceneEnvelope: AssetEnvelope | undefined;\n    if (sceneGuidKey !== undefined) {\n      const env = registry.assetCatalog.get(sceneGuidKey);\n      if (env?.kind === 'scene') sceneEnvelope = env;\n    }\n    if (sceneEnvelope === undefined) {\n      for (const [, env] of registry.assetCatalog) {\n        if (env.kind === 'scene' && env.refs !== undefined && env.refs.length > 0) {\n          sceneEnvelope = env;\n          break;\n        }\n      }\n    }\n    let edgeResult:\n      | {\n          sceneEntityKey?: string;\n          componentField?: string;\n        }\n      | undefined;\n    if (sceneEnvelope?.refs !== undefined) {\n      for (const ref of sceneEnvelope.refs) {\n        if (ref.guid.toLowerCase() === subGuidKey) {\n          const { sceneEntityKey, sourceField } = ref;\n          const result: {\n            sceneEntityKey?: string;\n            componentField?: string;\n            sourceField?: {\n              componentName?: string;\n              fieldName: string;\n              arrayIndex?: number;\n            };\n          } = {};\n          if (sceneEntityKey !== undefined) {\n            result.sceneEntityKey = sceneEntityKey;\n          }\n          if (sourceField?.componentName !== undefined && sourceField?.fieldName !== undefined) {\n            result.componentField =\n              `${sourceField.componentName}.${sourceField.fieldName}` +\n              (sourceField.arrayIndex !== undefined ? `[${sourceField.arrayIndex}]` : '');\n          }\n          if (sourceField !== undefined) {\n            result.sourceField = sourceField;\n          }\n          // A rich edge (dev register path) carries full detail — return now.\n          if (result.sceneEntityKey !== undefined || result.componentField !== undefined) {\n            return result;\n          }\n          // feat-20260622 M4 / w14: a GUID-only edge (prod path: on-disk refs[]\n          // strip sourceField / sceneEntityKey at the serialization boundary, w7\n          // D-10) carries no per-entity detail. Keep this empty-but-defined\n          // result as the fallback, then try the entity walk below to recover\n          // the entity localId + component.field path (D-7 / B-8). The walk\n          // recovers handle-field edges (mesh / material); a texture edge (D-2:\n          // no per-entity origin) is not found by the walk, so the empty\n          // edgeResult is returned (w10 texture-edge contract preserved).\n          edgeResult = result;\n          break;\n        }\n      }\n    }\n    // Backward compat: fall back to entity walk when the envelope edge carries\n    // no per-entity detail (prod path: GUID-only refs[]) or no envelope is\n    // available (e.g. direct catalog() registration with scene payload, no refs).\n    if (origins === undefined) {\n      const extracted = extractSceneEntityHandleGuids(registry.componentCatalog, scene.entities);\n      const index = new Map<string, SceneHandleFieldEntry>();\n      for (const entry of extracted) {\n        const key = entry.guidString.toLowerCase();\n        if (!index.has(key)) index.set(key, entry);\n      }\n      origins = index;\n    }\n    const entry = origins.get(subGuidKey);\n    if (entry !== undefined) {\n      return {\n        sceneEntityKey: entry.entityKey,\n        componentField: `${entry.componentName}.${entry.fieldName}${entry.arrayIndex !== undefined ? `[${entry.arrayIndex}]` : ''}`,\n        // feat-20260622 verify r1: also surface the recovered provenance in\n        // structured parts so the failure `.detail` can expose them for AI\n        // property access (charter P3), not only the concatenated hint string.\n        sourceField: {\n          componentName: entry.componentName,\n          fieldName: entry.fieldName,\n          ...(entry.arrayIndex !== undefined ? { arrayIndex: entry.arrayIndex } : {}),\n        },\n      };\n    }\n    return edgeResult;\n  };\n}\n\n/**\n * tweak-20260609 M1 helper: build the error-hint breadcrumb string\n * containing the parent asset's GUID + kind, enriched with the\n * caller-provided `parentContext` (entity localId + component.field).\n *\n * Per D-7 / B-8: the breadcrumb appears before the sub-asset's own hint,\n * separated by \" / \".\n */\nexport function buildBreadcrumbHint(\n  parentGuidKey: string,\n  parentKind: string,\n  subGuidKey: string,\n  parentContext?: {\n    sceneEntityKey?: string;\n    componentField?: string;\n  },\n): string {\n  let breadcrumb = `sub-asset ${subGuidKey} referenced by ${parentKind} ${parentGuidKey}`;\n  const entity = parentContext?.sceneEntityKey;\n  if (entity !== undefined && parentContext?.componentField !== undefined) {\n    breadcrumb += ` (entity ${entity}, field ${parentContext.componentField})`;\n  }\n  return breadcrumb;\n}\n","import { err, ok, type Result } from '@forgeax/engine-rhi';\nimport { ASSET_ERROR_HINTS, AssetError, type CatalogProjection } from '@forgeax/engine-types';\nimport type { CatalogRecord } from './catalog';\n\nexport interface RuntimeProjection {\n  readonly subject: CatalogProjection['subject'];\n  readonly execution: CatalogProjection['execution'];\n  readonly lifecycle: CatalogProjection['lifecycle'];\n  readonly packageUrl: string;\n}\n\nfunction projectionError(guid: string, expected: string): AssetError {\n  return new AssetError({\n    code: 'asset-not-imported',\n    expected,\n    hint: `${ASSET_ERROR_HINTS['asset-not-imported']} (GUID ${guid})`,\n  });\n}\n\n/**\n * Resolve the producer-declared runtime projection. Legacy rows return\n * undefined so inline/dev assets retain their existing registration path;\n * rows that publish any projection axis must publish all three axes.\n */\nexport function resolveRuntimeProjection(\n  guid: string,\n  record: CatalogRecord,\n): Result<RuntimeProjection | undefined, AssetError> {\n  const hasAxes =\n    record.subject !== undefined ||\n    record.execution !== undefined ||\n    record.lifecycle !== undefined ||\n    record.projection !== undefined;\n  if (!hasAxes) return ok(undefined);\n\n  const projection = record.projection;\n  if (\n    projection === undefined ||\n    record.subject === undefined ||\n    record.execution === undefined ||\n    record.lifecycle === undefined\n  ) {\n    return err(\n      projectionError(\n        guid,\n        'catalog entry to publish subject, execution, lifecycle, and projection together',\n      ),\n    );\n  }\n  if (\n    projection.subject !== record.subject ||\n    projection.execution !== record.execution ||\n    projection.lifecycle !== record.lifecycle\n  ) {\n    return err(projectionError(guid, 'catalog projection axes to agree with their row fields'));\n  }\n  return ok({\n    subject: projection.subject,\n    execution: projection.execution,\n    lifecycle: projection.lifecycle,\n    packageUrl: record.packageUrl,\n  });\n}\n","import { copyPreparedAsset, validateAssetReferences } from '../prepare-payload.js';\nimport { captureTerrainClosure } from '../terrain-closure.js';\n// @forgeax/engine-assets-runtime -- load-by-guid + pack-fetch collaboration module\n// (feat-20260705-runtime-tier2-decomposition M1 / w7, D-4). Free functions\n// taking the AssetRegistry instance as first param; logic byte-preserved from the\n// class body (this. -> registry.). This is the largest method cluster (loadByGuid\n// + the DDC / pack-index / pack-file fetch + parse pipeline).\n\nimport { decompressZstd } from '@forgeax/engine-codec';\nimport { validateArtifactPath } from '@forgeax/engine-pack/artifact-path';\nimport { AssetGuid } from '@forgeax/engine-pack/guid';\nimport { validateCookedMaterialRecord } from '@forgeax/engine-pack/material-cook';\nimport { err, ok, type Result, type RhiError } from '@forgeax/engine-rhi';\nimport { isEngineMaterial } from '@forgeax/engine-shader';\nimport {\n  type ArtifactDescriptor,\n  ASSET_ERROR_HINTS,\n  type Asset,\n  type AssetCompression,\n  AssetError,\n  type AssetErrorCode,\n  type AssetErrorDetail,\n  type AssetRef,\n  type CatalogSubject,\n  type ImageError,\n  type ImageMetadata,\n  type LoadContext,\n  type MaterialAsset,\n  materialChildForbiddenFields,\n  type ParseErrorDetail,\n} from '@forgeax/engine-types';\nimport type { AssetRegistry, ParsedPackFile } from '../asset-registry';\nimport { packEnvelopeIssue } from '../internal/pack-envelope.js';\nimport { bytesOf, type PackageReadFailure, readPackage } from '../internal/package-read.js';\nimport { validatePublicationReferences } from '../internal/publication-references.js';\nimport { readRetainedPackJson } from '../internal/retained-pack-json.js';\nimport {\n  createMaterialLoader,\n  type MaterialLoadError,\n  type MaterialLoadRequest,\n  type MaterialPublication,\n  type MaterialReady,\n} from '../material/loader';\nimport { artifactUrl, readArtifact } from './artifact-io';\nimport { type CatalogRecord, resolveCatalogAssetUrl } from './catalog';\nimport { buildBreadcrumbHint, createSceneChildContextLookup } from './instantiate';\nimport { traceAssetLoadPhase } from './load-trace';\nimport { resolveRuntimeProjection } from './runtime-projection';\n\n/**\n * Load an asset and all its transitively referenced sub-assets by GUID;\n * returns `ok(handle)` only when the asset and every sub-asset are in the\n * registry.\n *\n * **Post-condition:** `ok(payload)` is returned ONLY when the asset AND every\n * transitively referenced sub-asset (per the asset envelope's `refs[]`) are\n * present in this registry. The implementation walks `envelope.refs` and\n * recursively calls `loadByGuid` on each ref before cataloguing the top-level\n * asset. The resolved value is the PAYLOAD `T`\n * (D-17), never a handle -- mint a column handle with\n * `world.allocSharedRef('Kind', payload)` when one is needed (e.g. before\n * `instantiate`).\n *\n * Two paths:\n * - **Dev / fallback** (no `configurePackIndex` call): synchronous catalogue\n *   lookup wrapped in `Promise.resolve`. Returns `Err(asset-not-found)` if not\n *   catalogued.\n * - **Prod** (after `configurePackIndex(url)`): fetches `pack-index.json`\n *   on the first call (cached as a `Map<guid, {packageUrl, kind}>`), then\n *   fetches the individual resource URL and parses the asset payload, then\n *   catalogues it (GUID -> payload) and returns the payload.\n *\n * Error union: `AssetError | PackError | ImageError | RhiError` (closed -- no\n * new codes were introduced by the recursive walk; every code is pre-existing).\n *\n * An in-flight `Map` (D-5) deduplicates concurrent calls for the same GUID and\n * prevents stack overflow on cycles (A->B->A).\n *\n * **Breaking-change classification:** this is a semantic strengthening, not a\n * shape change. Sub-assets catalogued by a prior `catalog(guid, payload)` /\n * `loadByGuid` call are protected by the catalogue fast-path: the recursive\n * walk hits cache on every node and incurs zero additional fetch.\n *\n * @example\n * ```ts\n * const res = await engine.assets.loadByGuid<SceneAsset>(sceneGuid);\n * if (!res.ok) {\n *   switch (res.error.code) {\n *     case 'asset-not-found':\n *       // top GUID or any sub-asset GUID is missing from the catalog\n *       break;\n *     case 'asset-fetch-failed':\n *       // network / CORS\n *       break;\n *     case 'asset-parse-failed':\n *       // payload malformed\n *       break;\n *     // ... AssetErrorCode | PackErrorCode | ImageErrorCode | RhiErrorCode exhaustive\n *   }\n *   return;\n * }\n * ```\n */\nexport async function loadByGuid<T = Asset>(\n  registry: AssetRegistry,\n  guid: AssetGuid,\n  parentContext?: {\n    sceneEntityKey?: string;\n    componentField?: string;\n  },\n): Promise<Result<T, AssetError | ImageError | RhiError>> {\n  const key = AssetGuid.format(guid).toLowerCase();\n  const isCurrent = currentLoad(registry, key);\n  const before = validateRegistryReferences(registry, key);\n  if (!before.ok) {\n    registry.invalidate(key);\n    return before;\n  }\n  const result = await loadByGuidInternal<T>(registry, guid, parentContext, new Set());\n  if (!isCurrent()) return invalidated(key);\n  if (!result.ok) return result;\n  const loaded = result.value as Asset;\n  if (loaded.kind === 'terrain' && !captureTerrainClosure(registry, loaded)) {\n    registry.invalidate(key);\n    return err(\n      new AssetError({\n        code: 'asset-invalidated',\n        expected: 'an unchanged complete terrain closure',\n        hint: 'reload the entire terrain publication',\n      }),\n    );\n  }\n  const after = validateRegistryReferences(registry, key);\n  if (!after.ok) registry.invalidate(key);\n  return after.ok ? result : after;\n}\n\n/** Reuse the accepted Catalog projection; no second dependency graph for the legacy reader. */\nexport function validateRegistryReferences(\n  registry: AssetRegistry,\n  guid: string,\n): Result<void, AssetError> {\n  const lookup = (key: string) => registry.packIndexCache?.get(key.toLowerCase());\n  const checked = validatePublicationReferences(guid, lookup(guid), lookup);\n  return checked.ok\n    ? checked\n    : err(\n        new AssetError({\n          code: 'asset-invalidated',\n          expected: checked.error.expected,\n          hint: checked.error.hint,\n        }),\n      );\n}\n\nfunction currentLoad(registry: AssetRegistry, guidKey: string): () => boolean {\n  const generation = registry.generations.get(guidKey) ?? 0;\n  const globalGeneration = registry.globalGeneration;\n  return () =>\n    generation === (registry.generations.get(guidKey) ?? 0) &&\n    globalGeneration === registry.globalGeneration;\n}\n\nfunction invalidated(guidKey: string): Result<never, AssetError> {\n  return err(\n    new AssetError({\n      code: 'asset-invalidated',\n      expected: `GUID ${guidKey} to remain current until publication`,\n      hint: ASSET_ERROR_HINTS['asset-invalidated'],\n    }),\n  );\n}\n\nfunction cookedRecordFromPayload(payload: Record<string, unknown>): unknown {\n  if (payload.schemaVersion === 'material-cook/4') return payload;\n  if (payload.cooked !== null && typeof payload.cooked === 'object') return payload.cooked;\n  if (payload.record !== null && typeof payload.record === 'object') return payload.record;\n  return undefined;\n}\n\nasync function loadMaterialPublicationByGuid(\n  registry: AssetRegistry,\n  request: MaterialLoadRequest,\n  isCurrent = currentLoad(registry, request.guid.toLowerCase()),\n  boundFetcher?: typeof globalThis.fetch,\n): Promise<MaterialPublication | undefined> {\n  const parsedGuid = AssetGuid.parse(request.guid);\n  if (!parsedGuid.ok) return undefined;\n  const resolved = await resolveCatalogEntry(registry, request.guid.toLowerCase());\n  if (!resolved.ok) throw resolved.error;\n  const entry = resolved.value;\n  if (!isCurrent() || entry === undefined) return undefined;\n  const fetcher = boundFetcher ?? registry.openPackage(entry.packageUrl);\n  let pack = registry.packFiles.get(entry.packageUrl)?.value;\n  if (pack === undefined) {\n    const fetched = await fetchAndCachePackFile(\n      registry,\n      entry.packageUrl,\n      request.guid.toLowerCase(),\n      fetcher,\n    );\n    if (!isCurrent() || !fetched.ok) return undefined;\n    pack = registry.packFiles.get(entry.packageUrl)?.value;\n  }\n  const asset = pack?.assets.find(\n    (candidate) => candidate.guid.toLowerCase() === request.guid.toLowerCase(),\n  );\n  if (asset === undefined || asset.kind !== 'material') return undefined;\n  let record = cookedRecordFromPayload(asset.payload);\n  if (record === undefined) return undefined;\n  const artifacts: Record<string, { bytes: Uint8Array; digest?: string }> = {};\n  const descriptors = Object.entries(asset.artifacts ?? {});\n  // Legacy inline-only records keep the original validation and byte route.\n  if (descriptors.length === 0) {\n    const parsed = validateCookedMaterialRecord(record);\n    if (!parsed.ok) return { guid: request.guid, record };\n    for (const { artifact } of parsed.value.programs)\n      artifacts[artifact.path] ??= { bytes: artifact.bytes, digest: artifact.digest };\n    return { guid: request.guid, record, artifacts };\n  }\n\n  // Compact production transport restores bytes before the existing complete\n  // record validator runs. Inline records retain their bytes for equality checks.\n  const rawPrograms = (record as { programs?: unknown }).programs;\n  if (!Array.isArray(rawPrograms)) return { guid: request.guid, record };\n  const artifactReads = new Map<string, ReturnType<typeof registry.artifactCache.read>>();\n  const pendingPrograms = rawPrograms\n    .map(async (rawProgram) => {\n      if (rawProgram === null || typeof rawProgram !== 'object') return undefined;\n      const program = rawProgram as Record<string, unknown>;\n      if (program.artifact === null || typeof program.artifact !== 'object') return undefined;\n      const artifact = program.artifact as Record<string, unknown>;\n      if (typeof artifact.path !== 'string' || typeof artifact.digest !== 'string')\n        return undefined;\n\n      // Start independent reads together; retain first-path deduplication and the\n      // original ordered publication/error decision below.\n      let pending = artifactReads.get(artifact.path);\n      if (pending === undefined) {\n        const artifactKey = artifact.path;\n        const descriptor = asset.artifacts?.[artifactKey];\n        if (descriptor === undefined)\n          return {\n            publication: {\n              guid: request.guid,\n              record,\n              artifactError: {\n                code: 'asset-artifact-missing',\n                expected: `one artifact descriptor for '${artifact.path}'`,\n              },\n            } satisfies MaterialPublication,\n          };\n        // Share the bound publication read with generic GUID loading. The\n        // descriptor and material record still verify the bytes independently;\n        // GUID invalidation clears both consumers' cached and pending reads.\n        const artifactCacheKey = `${request.guid.toLowerCase()}\\0${entry.packageUrl}\\0${artifactKey}`;\n        pending = registry.artifactCache.read(artifactCacheKey, () =>\n          readArtifact(\n            { packageUrl: entry.packageUrl, guid: request.guid, artifactKey, descriptor },\n            fetcher,\n          ),\n        );\n        artifactReads.set(artifact.path, pending);\n      }\n      const loaded = await pending;\n      if (!isCurrent()) return undefined;\n      if (!loaded.ok)\n        return {\n          publication: {\n            guid: request.guid,\n            record,\n            artifactError: {\n              code:\n                loaded.error.code === 'asset-artifact-integrity-mismatch'\n                  ? loaded.error.code\n                  : 'asset-artifact-missing',\n              expected: loaded.error.expected,\n              actual: loaded.error.detail.observed,\n            },\n          } satisfies MaterialPublication,\n        };\n      return { program, artifact, path: artifact.path, bytes: loaded.value };\n    })\n    .map((pending) =>\n      pending.then(\n        (value) => ({ value }),\n        (error: unknown) => ({ error }),\n      ),\n    );\n  const hydratedPrograms: unknown[] = [];\n  for (const pending of pendingPrograms) {\n    const settled = await pending;\n    if ('error' in settled) throw settled.error;\n    if (!isCurrent()) return undefined;\n    const hydrated = settled.value;\n    if (hydrated === undefined) return { guid: request.guid, record };\n    if ('publication' in hydrated) return hydrated.publication;\n    artifacts[hydrated.path] ??= { bytes: hydrated.bytes };\n    hydratedPrograms.push(\n      hydrated.artifact.bytes === undefined\n        ? { ...hydrated.program, artifact: { ...hydrated.artifact, bytes: hydrated.bytes } }\n        : hydrated.program,\n    );\n  }\n  record = { ...(record as Record<string, unknown>), programs: hydratedPrograms };\n  if (!validateCookedMaterialRecord(record).ok) return { guid: request.guid, record };\n  return { guid: request.guid, record, artifacts };\n}\n\nexport async function loadMaterialReadyByGuid(\n  registry: AssetRegistry,\n  request: MaterialLoadRequest,\n): Promise<MaterialReady | MaterialLoadError> {\n  const isCurrent = currentLoad(registry, request.guid.toLowerCase());\n  const publication = await loadMaterialPublicationByGuid(registry, request, isCurrent);\n  return loadMaterialReadyPublication(registry, request, publication, isCurrent);\n}\n\nfunction publicationSpecializationKey(publication: MaterialPublication | undefined): string {\n  const record = publication?.record;\n  if (record === null || typeof record !== 'object') return '';\n  const specializationKey = (record as { readonly specializationKey?: unknown }).specializationKey;\n  return typeof specializationKey === 'string' ? specializationKey : '';\n}\n\nasync function loadMaterialReadyPublication(\n  registry: AssetRegistry,\n  request: MaterialLoadRequest,\n  publication: MaterialPublication | undefined,\n  isCurrent = currentLoad(registry, request.guid.toLowerCase()),\n): Promise<MaterialReady | MaterialLoadError> {\n  const fence = (): MaterialLoadError | undefined => {\n    const checked = validateRegistryReferences(registry, request.guid);\n    if (isCurrent() && checked.ok) return undefined;\n    return {\n      status: 'Error',\n      error: {\n        code: 'material-reference-not-ready',\n        expected: checked.ok\n          ? 'the same material publication until readiness completes'\n          : checked.error.expected,\n        hint: 'restore the recorded material and reference versions before switching consumers',\n        retryable: true,\n        recoveryActions: ['retry-material-load'],\n        detail: { ...request },\n      },\n    };\n  };\n  const before = fence();\n  if (before) {\n    if (isCurrent()) registry.recordMaterialReadiness(request.guid, before);\n    return before;\n  }\n  const loader = createMaterialLoader({\n    loadPublication: async () => publication,\n    loadReference: async (guid) => {\n      const parsed = AssetGuid.parse(guid);\n      if (!parsed.ok) return true;\n      const result = await loadByGuid(registry, parsed.value);\n      return result.ok;\n    },\n  });\n  const loaded = await loader.load(request);\n  const readiness = fence() ?? loaded;\n  if (isCurrent()) registry.recordMaterialReadiness(request.guid, readiness);\n  return readiness;\n}\n\nasync function loadByGuidInternal<T = Asset>(\n  registry: AssetRegistry,\n  guid: AssetGuid,\n  parentContext:\n    | {\n        sceneEntityKey?: string;\n        componentField?: string;\n      }\n    | undefined,\n  ancestry: ReadonlySet<string>,\n): Promise<Result<T, AssetError | ImageError | RhiError>> {\n  const guidKey = AssetGuid.format(guid).toLowerCase();\n\n  // feat-20260614 M8 (D-17): the registry catalogues GUID -> payload and\n  // returns the PAYLOAD (never a handle). Fast path: already catalogued\n  // (covers dev catalog() + prod cached repeat calls).\n  const existing = registry.assetCatalog.get(guidKey);\n  if (existing !== undefined) {\n    const state = registry.loadState.get(guidKey);\n    if (state?.status === 'provisional') {\n      // A provisional value is only a legal bridge for a true SCC back-edge.\n      // A sibling or unrelated concurrent load must await its owning promise;\n      // otherwise the parent reaches promoteReady while the dependency is\n      // still provisional and reports a spurious public-readiness failure.\n      if (ancestry.has(guidKey)) {\n        const provisional = registry.loadState.getProvisional<T>(guidKey);\n        if (provisional !== undefined) return ok(provisional);\n      } else {\n        const inFlight = registry.inFlight.get(guidKey);\n        if (inFlight !== undefined) {\n          return inFlight as Promise<Result<T, AssetError | ImageError | RhiError>>;\n        }\n      }\n      return err(\n        new AssetError({\n          code: 'asset-parse-failed',\n          expected: `GUID ${guidKey} to be promoted to Ready before public load`,\n          hint: 'wait for the active load to finish or retry after the referenced assets are ready',\n        }),\n      );\n    }\n    if (state?.status === 'ready' || (state === undefined && registry.packIndexUrl === undefined)) {\n      const ready = registry.loadState.getReady<T>(guidKey);\n      if (ready !== undefined) return ok(ready);\n      if (state === undefined) return ok(existing.payload as T);\n    }\n  }\n\n  // In-flight dedup (D-5 / B-10): if another call is already loading this\n  // GUID, return that same Promise — covers (a) concurrent same-GUID calls\n  // and (b) cycle A→B→A termination (B reaches A's in-flight entry).\n  const inFlightPromise = registry.inFlight.get(guidKey);\n  if (inFlightPromise !== undefined) {\n    return inFlightPromise as Promise<Result<T, AssetError | ImageError | RhiError>>;\n  }\n\n  // Prod fetch path: only enabled when packIndexUrl is configured.\n  if (registry.packIndexUrl !== undefined || registry.hasCatalogSource) {\n    const isCurrent = currentLoad(registry, guidKey);\n    const promise = (async () => {\n      try {\n        const result = await loadByGuidProd<T>(\n          registry,\n          guid,\n          guidKey,\n          parentContext,\n          ancestry,\n          isCurrent,\n        );\n        return isCurrent() ? result : invalidated(guidKey);\n      } catch (cause) {\n        if (!isCurrent()) return invalidated(guidKey);\n        throw cause;\n      }\n    })();\n    registry.inFlight.set(guidKey, promise);\n    try {\n      return await promise;\n    } finally {\n      if (registry.inFlight.get(guidKey) === promise) registry.inFlight.delete(guidKey);\n    }\n  }\n\n  // Dev / fallback: synchronous catalogue miss (no network).\n  return Promise.resolve(\n    err(\n      new AssetError({\n        code: 'asset-not-found',\n        expected: `GUID ${guidKey} catalogued in AssetRegistry`,\n        hint: ASSET_ERROR_HINTS['asset-not-found'],\n      }),\n    ),\n  );\n}\n\n/**\n * Internal: prod fetch path for `loadByGuid`.\n * Fetches pack-index.json (cached), then fetches the pack file, parses the\n * asset payload, and registers it.\n */\nexport async function loadByGuidProd<T = Asset>(\n  registry: AssetRegistry,\n  guid: AssetGuid,\n  guidKey: string,\n  parentContext?: {\n    sceneEntityKey?: string;\n    componentField?: string;\n  },\n  ancestry: ReadonlySet<string> = new Set(),\n  isCurrent = currentLoad(registry, guidKey),\n): Promise<Result<T, AssetError | ImageError | RhiError>> {\n  // feat-20260603-asset-import-loader-injection M4 / w31 (AC-19 lazy iron law):\n  // wrap the DDC fetch + load path so a DDC miss can be routed through the\n  // injected ImportTransport (studio form) or fail-fast with\n  // `asset-not-imported` (shipped form, AC-22). The load path after a\n  // successful DDC resolve is identical in both forms -- zero branches on\n  // `registry.importTransport` (AC-23 key invariant).\n  //\n  // A DDC miss is: (a) the GUID is absent from the catalog, OR (b) the\n  // `.pack.json` fetch returns `asset-not-found` / `asset-fetch-failed`.\n  // In case (a) the transport is probed first (the pack-index may have been\n  // built before the asset was imported); in case (b) the transport is the\n  // only fallback (the pack file is genuinely missing).\n\n  traceAssetLoadPhase('catalog.resolve.start', { guid: guidKey });\n  const resolved = await resolveCatalogEntry(registry, guidKey);\n  if (!resolved.ok) return resolved;\n  const entry = resolved.value;\n  if (!isCurrent()) return invalidated(guidKey);\n  traceAssetLoadPhase('catalog.resolve.complete', {\n    guid: guidKey,\n    ...(entry === undefined ? {} : { packageUrl: entry.packageUrl }),\n    detail: { found: entry !== undefined },\n  });\n  if (entry !== undefined) {\n    const projection = resolveRuntimeProjection(guidKey, entry);\n    if (!projection.ok) return projection;\n    if (projection.value?.lifecycle !== undefined && projection.value.lifecycle !== 'current') {\n      return transportOrFail<T>(registry, guid, guidKey, undefined, isCurrent);\n    }\n    // Catalog hit: try the DDC load path.\n    const result = await ddcLoad<T>(\n      registry,\n      guid,\n      guidKey,\n      entry,\n      parentContext,\n      ancestry,\n      isCurrent,\n    );\n    if (result.ok) return result;\n    // DDC miss: only route through transport when the error indicates a\n    // missing pack file (not a parse / validation failure inside the pack) or\n    // an unimported texture source (feat-20260604 M2 / D-1: import-on-demand).\n    // `texture-source-not-imported` is an AssetError, so it passes the\n    // `instanceof AssetError` guard naturally. `image-decode-failed` is an\n    // ImageError (a genuinely corrupt imported .bin) -- it fails the guard and\n    // is therefore never transport-eligible (Risk-1), so a real decode\n    // failure is never silently lazy-imported.\n    const ddcError = result.error;\n    const transportEligible =\n      ddcError instanceof AssetError &&\n      (ddcError.code === 'asset-not-found' ||\n        ddcError.code === 'asset-fetch-failed' ||\n        ddcError.code === 'texture-source-not-imported' ||\n        // perf-20260706: the raw-container fail-fast (mesh/material/scene whose\n        // packageUrl is still a .glb/.gltf/.fbx) surfaces source-not-imported;\n        // it is transport-eligible so the import runs once and rewrites the row\n        // to .bin/.pack.json (the shipped form, with no transport, fails fast).\n        // Distinct from the generic asset-not-imported, which must stay\n        // NON-eligible so the parent-missing breadcrumb is never masked.\n        ddcError.code === 'source-not-imported');\n    if (transportEligible) {\n      return transportOrFail<T>(registry, guid, guidKey, ddcError, isCurrent);\n    }\n    return result;\n  }\n\n  // Catalog miss: the GUID is not in the pack-index. In the studio form the\n  // import transport can lazily create the missing DDC.\n  return transportOrFail<T>(registry, guid, guidKey, undefined, isCurrent);\n}\n\n/**\n * Resolve the catalog entry for a GUID, lazily fetching the pack-index on\n * first call. A successful miss is `ok(undefined)`; admission failures retain\n * their original error and never become an absent GUID or import fallback.\n */\nexport async function resolveCatalogEntry(\n  registry: AssetRegistry,\n  guidKey: string,\n): Promise<Result<CatalogRecord | undefined, AssetError>> {\n  const key = guidKey.toLowerCase();\n  // Re-fetch the pack-index when it has never been fetched (=== undefined) OR\n  // when the cached Map lacks this GUID. The miss case covers invalidate(guid)\n  // round-2 M-A, which deletes the per-GUID index entry (targeted, bystanders\n  // survive) without nuking the whole Map to undefined: the next loadByGuid\n  // must re-consult the source so the GUID re-resolves and its freshly-cleared\n  // body cache re-fetches. A genuinely absent GUID re-fetches once then still\n  // misses, falling through to the transport / asset-not-found path as before.\n  if (registry.packIndexCache === undefined || !registry.packIndexCache.has(key)) {\n    // AssetRegistry joins the accepted URL-backed CatalogSource baseline with\n    // this GUID lookup when both explicitly name the same authority. This\n    // keeps enumerateCatalog() -> loadByGuid() and concurrent callers on one\n    // per-instance fetch while preserving the legacy path for distinct sources.\n    const catalogResult = await registry.ensurePackIndexCache(\n      registry.packIndexCache !== undefined,\n    );\n    if (!catalogResult.ok) return catalogResult;\n  }\n  return ok(registry.packIndexCache?.get(key));\n}\n\n/**\n * feat-20260618 M3 (D-2): once the pack-index is parsed, group every row by\n * its `packageUrl` and register each package fully -- all of its GUIDs and\n * their entry display names in one `registerPackage` call. Registering the\n * whole package at once (rather than one GUID per load) means the package\n * cardinality is known up front, so `resolveName` preserves an explicit entry\n * name for both single- and multi-asset packages and uses the package basename\n * only as a fallback. There is no incremental 1->N promotion needed on the\n * prod path. The name travels entry -> Package, never through the payload\n * (Risk-3 JSON-roundtrip safety), and covers both the sync (parseAssetPayload)\n * and async (texture/font) loads.\n */\nexport function registerPackagesFromIndex(\n  registry: AssetRegistry,\n  catalog: Map<\n    string,\n    {\n      packageUrl: string;\n      name?: string;\n      sourcePath?: string;\n      subject?: CatalogSubject;\n    }\n  >,\n): void {\n  const byPath = new Map<string, { guids: string[]; names: Map<string, string> }>();\n  for (const [guidKey, entry] of catalog) {\n    // Imported outputs are published under generated DDC/package URLs, but\n    // their stable package identity is the authored source. Keeping that\n    // source path here preserves `sky.hdr` (and equivalent source names) for\n    // single-asset lazy imports; authored internal packages retain their\n    // package URL semantics.\n    const packagePath =\n      entry.subject === 'imported-output' && entry.sourcePath !== undefined\n        ? entry.sourcePath\n        : entry.packageUrl;\n    let group = byPath.get(packagePath);\n    if (group === undefined) {\n      group = { guids: [], names: new Map() };\n      byPath.set(packagePath, group);\n    }\n    group.guids.push(guidKey);\n    if (entry.name !== undefined) group.names.set(guidKey, entry.name);\n  }\n  for (const [path, group] of byPath) {\n    registry._registerPackage(path, group.guids, group.names);\n  }\n}\n\n/**\n * Load an asset through the DDC (catalog entry -> fetch pack -> loader.load\n * -> register). Returns `Err(asset-not-found)` or `Err(asset-fetch-failed)`\n * on DDC miss (the caller then decides whether to route through the\n * import transport).\n *\n * This path is IDENTICAL in studio and shipped forms -- the only difference\n * between the two is whether `registry.importTransport` exists when the caller\n * falls back to `transportOrFail` (AC-23 key invariant).\n */\nexport async function ddcLoad<T = Asset>(\n  registry: AssetRegistry,\n  guid: AssetGuid,\n  guidKey: string,\n  entry: {\n    packageUrl: string;\n    kind: string;\n    name?: string;\n    metadata?: ImageMetadata | undefined;\n    compression?: AssetCompression;\n  },\n  parentContext?: {\n    sceneEntityKey?: string;\n    componentField?: string;\n  },\n  ancestry: ReadonlySet<string> = new Set(),\n  isCurrent = currentLoad(registry, guidKey),\n): Promise<Result<T, AssetError | ImageError | RhiError>> {\n  if (typeof entry.packageUrl !== 'string' || entry.packageUrl.length === 0) {\n    return err(\n      new AssetError({\n        code: 'asset-not-imported',\n        expected: `catalog entry for GUID ${guidKey} to contain a packageUrl locator`,\n        hint: ASSET_ERROR_HINTS['asset-not-imported'],\n      }),\n    );\n  }\n  traceAssetLoadPhase('pack.load.start', {\n    guid: guidKey,\n    packageUrl: entry.packageUrl,\n  });\n  const fetcher = registry.openPackage(entry.packageUrl);\n  const packResult = await loadPackV2Asset(registry, guidKey, entry.packageUrl, isCurrent, fetcher);\n  if (!isCurrent()) return invalidated(guidKey);\n  traceAssetLoadPhase('pack.load.complete', {\n    guid: guidKey,\n    packageUrl: entry.packageUrl,\n    detail: { ok: packResult?.ok === true },\n  });\n  if (packResult === undefined) {\n    return err(\n      new AssetError({\n        code: 'asset-parse-failed',\n        expected: `Pack v2 package for GUID ${guidKey}`,\n        hint: 'legacy top-level asset payloads are not accepted',\n      }),\n    );\n  }\n  if (!packResult.ok) {\n    return packResult as Result<T, AssetError>;\n  }\n\n  const asset = packResult.value.asset;\n  // feat-20260622 M4 / w12: project the pack-entry refs[] (GUID strings) into\n  // AssetRef[] for the envelope. The on-disk pack.json refs[] carries only\n  // GUID strings (sourceField / sceneEntityKey are stripped at the\n  // serialization boundary, w7 D-10), so prod-loaded edges have no per-entity\n  // metadata — the scene breadcrumb fallback (buildSceneChildContext) still\n  // walks the payload for entity/field detail. Dev-server register paths that\n  // carry rich AssetRef[] keep their edge metadata end-to-end.\n  const packRefs: readonly AssetRef[] = packResult.value.refs.map((g) => ({ guid: g }));\n\n  registry.loadState.begin(\n    guidKey,\n    registry.loaders.referencePolicy(asset.kind) === 'deferred'\n      ? []\n      : packRefs.map((ref) => ref.guid),\n  );\n\n  // The provisional record lets cycle back-edges terminate internally while\n  // lookup()/inspect() remain limited to the ready domain.\n  // tweak-20260609 M1: catalogue the asset BEFORE recursing into its\n  // sub-assets. This way, when a cycle (A→B→A) reaches back to A during\n  // B's recursion, A is already catalogued (fast-path hit) and the inFlight\n  // Promise for A can be fulfilled. The inFlight entry in `loadByGuid` is\n  // the second line of defense — it catches concurrent same-GUID calls\n  // before the asset is catalogued.\n  const registerResult = registerParsedAsset<T>(registry, guid, asset, guidKey, packRefs);\n  if (!registerResult.ok) {\n    purgeFailedLoad(registry, guidKey, entry.packageUrl, registerResult.error);\n    return registerResult;\n  }\n  const registeredPayload = registerResult.value;\n  registry.loadState.resolveAsset(guidKey, registeredPayload);\n  // The material parent edge loads through the unified refs loop below;\n  // `catalog` already normalized a wire `parentGuid` into `parent`.\n  const registeredAsset = registeredPayload as Asset;\n  const parentGuidKey =\n    registeredAsset.kind === 'material' && registeredAsset.parent !== undefined\n      ? AssetGuid.format(registeredAsset.parent).toLowerCase()\n      : undefined;\n\n  // feat-20260622 M4 / w12 (D-5): the recursion source is the just-catalogued\n  // envelope's refs[]. The for-loop is kind-agnostic\n  // — every AssetRef carries the GUID to recurse on; scene/material/skin all\n  // flow through this one loop. Each edge optionally carries sourceField /\n  // sceneEntityKey; when present the childContext is built straight from the\n  // edge, otherwise the scene branch falls back to walking the payload\n  // (buildSceneChildContext) so the prod-path breadcrumb keeps its entity /\n  // field detail (on-disk refs[] are GUID-string-only, w7 D-10).\n  const envelope = registry.assetCatalog.get(guidKey);\n  const refs: readonly AssetRef[] =\n    registry.loaders.referencePolicy(asset.kind) === 'deferred' ? [] : (envelope?.refs ?? []);\n  if (refs.length > 0) {\n    const sceneChildContext =\n      asset.kind === 'scene' ? createSceneChildContextLookup(registry, asset) : undefined;\n    const subResults = await Promise.all(\n      refs.map((ref) => {\n        const refGuidKey = ref.guid.toLowerCase();\n        const parsedRef = AssetGuid.parse(ref.guid);\n        if (!parsedRef.ok) {\n          return Promise.resolve({\n            guidKey: refGuidKey,\n            result: err(\n              new AssetError({\n                code: 'asset-parse-failed',\n                expected: `valid sub-asset GUID referenced by ${asset.kind} ${guidKey}`,\n                hint: `refs[] entry '${ref.guid}' is not a valid UUID format`,\n              }),\n            ) as Result<Asset, AssetError | ImageError | RhiError>,\n            childContext: undefined as\n              | {\n                  sceneEntityKey?: string;\n                  componentField?: string;\n                  sourceField?: {\n                    componentName?: string;\n                    fieldName: string;\n                    arrayIndex?: number;\n                  };\n                }\n              | undefined,\n            isParentEdge: false,\n            edge: ref,\n          });\n        }\n        let childContext:\n          | {\n              sceneEntityKey?: string;\n              componentField?: string;\n              sourceField?: {\n                componentName?: string;\n                fieldName: string;\n                arrayIndex?: number;\n              };\n            }\n          | undefined;\n        if (ref.sceneEntityKey !== undefined || ref.sourceField !== undefined) {\n          childContext = {};\n          if (ref.sceneEntityKey !== undefined) childContext.sceneEntityKey = ref.sceneEntityKey;\n          if (ref.sourceField?.fieldName !== undefined) {\n            childContext.componentField =\n              (ref.sourceField.componentName !== undefined\n                ? `${ref.sourceField.componentName}.`\n                : '') +\n              ref.sourceField.fieldName +\n              (ref.sourceField.arrayIndex !== undefined ? `[${ref.sourceField.arrayIndex}]` : '');\n            childContext.sourceField = ref.sourceField;\n          }\n        } else if (sceneChildContext !== undefined) {\n          childContext = sceneChildContext(refGuidKey, guidKey);\n        }\n        // feat-20260622 M5 / w17 (D-8): the material parent edge. Identify it\n        // by either the rich dev-path marker (sourceField.fieldName==='parent')\n        // or the prod-path GUID match against the resolved parent GUID\n        // (on-disk refs[] strip sourceField, w7 D-10, so the GUID is the only\n        // signal). The parent edge carries the distinct `loading parent\n        // material X for child Y` breadcrumb (AC-10) instead of the generic\n        // buildBreadcrumbHint form, and is guarded to be a material.\n        const isParentEdge =\n          asset.kind === 'material' &&\n          (ref.sourceField?.fieldName === 'parent' ||\n            (parentGuidKey !== undefined && refGuidKey === parentGuidKey));\n        const childAncestry = new Set(ancestry);\n        childAncestry.add(guidKey);\n        return loadByGuidInternal(\n          registry,\n          parsedRef.value,\n          childContext ?? parentContext,\n          childAncestry,\n        ).then((r) => ({\n          guidKey: refGuidKey,\n          result: r,\n          childContext,\n          isParentEdge,\n          edge: ref,\n        }));\n      }),\n    );\n\n    if (!isCurrent()) return invalidated(guidKey);\n\n    // If any sub-asset load failed, propagate the first error enriched with\n    // parent breadcrumb.\n    for (const {\n      guidKey: subGuidKey,\n      result: subResult,\n      childContext: subChildContext,\n      isParentEdge,\n      edge: subEdge,\n    } of subResults) {\n      // feat-20260622 M5 / w17: parent-edge breadcrumb migration (former Path\n      // B). On load failure, carry the distinct `loading parent material X for\n      // child Y: <subErr.hint>` form (AC-10 downstream literal assertion) and\n      // propagate the parent's own error code verbatim.\n      if (isParentEdge && !subResult.ok) {\n        const subErr = subResult.error;\n        const code: AssetErrorCode =\n          subErr instanceof AssetError ? subErr.code : 'asset-parse-failed';\n        purgeFailedLoad(registry, guidKey, entry.packageUrl, subErr);\n        return err(\n          new AssetError({\n            code,\n            expected: subErr.expected,\n            hint: `loading parent material ${subGuidKey} for child ${guidKey}: ${\n              subErr.hint ?? ''\n            }`,\n            ...(subErr instanceof AssetError && subErr.detail !== undefined\n              ? { detail: subErr.detail as Readonly<AssetErrorDetail> }\n              : {}),\n          }),\n        );\n      }\n      // feat-20260622 M5 / w17: parent edge loaded but is not a material —\n      // same guard the former Path B carried, with the matching breadcrumb.\n      if (isParentEdge && subResult.ok && subResult.value?.kind !== 'material') {\n        const error = new AssetError({\n          code: 'asset-parse-failed',\n          expected: `parent GUID ${subGuidKey} to reference a MaterialAsset`,\n          hint: `loading parent material ${subGuidKey} for child ${guidKey}: referenced asset is ${subResult.value?.kind ?? 'unknown'}, not 'material'`,\n        });\n        purgeFailedLoad(registry, guidKey, entry.packageUrl, error);\n        return err(error);\n      }\n      if (!subResult.ok) {\n        const subErr = subResult.error;\n        const breadcrumb = buildBreadcrumbHint(\n          guidKey,\n          asset.kind,\n          subGuidKey,\n          subChildContext ?? parentContext,\n        );\n        const code: AssetErrorCode =\n          subErr instanceof AssetError ? subErr.code : 'asset-fetch-failed';\n        // feat-20260622 verify r1: deliver the breadcrumb provenance in\n        // structured form so AI users locate the broken edge by property\n        // access (charter P3), not by parsing the hint. Preserve the sub\n        // error's own detail when it carries one (more specific); otherwise\n        // expose the edge provenance (entity / source field).\n        // Prefer the rich dev-path edge provenance; on the prod path the\n        // on-disk edge is GUID-only (sourceField stripped, w7 D-10), so fall\n        // back to the entity-walk-recovered provenance carried on the\n        // childContext (verify r1).\n        const provEntityKey = subEdge?.sceneEntityKey ?? subChildContext?.sceneEntityKey;\n        const provSourceField = subEdge?.sourceField ?? subChildContext?.sourceField;\n        const breadcrumbDetail: Readonly<AssetErrorDetail> = {\n          referencedByGuid: guidKey,\n          referencedByKind: asset.kind,\n          subAssetGuid: subGuidKey,\n          ...(provEntityKey !== undefined ? { sceneEntityKey: provEntityKey } : {}),\n          ...(provSourceField !== undefined ? { sourceField: provSourceField } : {}),\n        };\n        const detail: Readonly<AssetErrorDetail> =\n          subErr instanceof AssetError && subErr.detail !== undefined\n            ? subErr.detail\n            : breadcrumbDetail;\n        purgeFailedLoad(registry, guidKey, entry.packageUrl, subErr);\n        return err(\n          new AssetError({\n            code,\n            expected: subErr.expected,\n            hint: `${breadcrumb} / ${subErr.hint ?? ''}`,\n            detail,\n          }),\n        );\n      }\n    }\n  }\n\n  // A Mesh default is a typed dependency, not merely a loadable GUID. This\n  // check deliberately lives outside the `refs.length > 0` branch: a producer\n  // that puts a default GUID in the payload but omits the matching refs[] edge\n  // must fail closed instead of publishing a Mesh whose dependency closure is\n  // incomplete.\n  const typedReferenceError = validateAssetReferences(\n    asset,\n    guidKey,\n    refs,\n    (key) => registry.assetCatalog.get(key)?.payload.kind,\n  );\n  if (typedReferenceError) {\n    purgeFailedLoad(registry, guidKey, entry.packageUrl, typedReferenceError);\n    return err(typedReferenceError);\n  }\n\n  registry.loadState.promoteReady(guidKey);\n  if (asset.kind === 'terrain' && !captureTerrainClosure(registry, asset)) {\n    const error = new AssetError({\n      code: 'asset-invalidated',\n      expected: 'the complete terrain closure adopted with this root',\n      hint: 'reload the whole terrain publication after repairing partial dependency replacement',\n    });\n    purgeFailedLoad(registry, guidKey, entry.packageUrl, error);\n    return err(error);\n  }\n  traceAssetLoadPhase('catalog.promote-ready.complete', {\n    guid: guidKey,\n    packageUrl: entry.packageUrl,\n  });\n  if (registry.loadState.getReady(guidKey) === undefined) {\n    const error = new AssetError({\n      code: 'asset-parse-failed',\n      expected: `GUID ${guidKey} and all referenced assets to be public-ready`,\n      hint: 'retry after every referenced GUID has loaded successfully',\n    });\n    purgeFailedLoad(registry, guidKey, entry.packageUrl, error);\n    return err(error);\n  }\n  if (registeredAsset.kind === 'material') {\n    const publication = await loadMaterialPublicationByGuid(\n      registry,\n      {\n        guid: guidKey,\n        specializationKey: '',\n      },\n      isCurrent,\n      fetcher,\n    );\n    if (!isCurrent()) return invalidated(guidKey);\n    const hasCookedPublication =\n      publication !== undefined &&\n      (publication.record !== undefined || publication.artifacts !== undefined);\n    if (!isEngineMaterial(registeredAsset) || hasCookedPublication) {\n      await loadMaterialReadyPublication(\n        registry,\n        {\n          guid: guidKey,\n          specializationKey: publicationSpecializationKey(publication),\n        },\n        publication,\n        isCurrent,\n      );\n      if (!isCurrent()) return invalidated(guidKey);\n    }\n  }\n  return ok(registeredPayload as T);\n}\n\nasync function loadPackV2Asset(\n  registry: AssetRegistry,\n  guidKey: string,\n  packageUrl: string,\n  isCurrent: () => boolean,\n  fetcher: typeof globalThis.fetch = registry.openPackage(packageUrl),\n): Promise<\n  | Result<\n      {\n        asset: Asset;\n        refs: readonly string[];\n      },\n      AssetError\n    >\n  | undefined\n> {\n  const prepared = registry.loadState.getPrepared<Asset>(guidKey);\n  if (prepared !== undefined)\n    return ok({\n      asset: copyPreparedAsset(prepared),\n      refs: registry.loadState.get(guidKey)?.refs ?? [],\n    });\n  traceAssetLoadPhase('pack.v2.start', { guid: guidKey, packageUrl });\n  const cached = registry.packFiles.get(packageUrl)?.value;\n  if (cached === undefined) {\n    const inFlight = registry.packFiles.get(packageUrl)?.pending;\n    if (inFlight !== undefined) await inFlight.catch(() => undefined);\n    if (!isCurrent()) return invalidated(guidKey);\n    traceAssetLoadPhase('pack.fetch.start', { guid: guidKey, packageUrl });\n    const fetched =\n      registry.packFiles.get(packageUrl)?.value === undefined\n        ? await fetchAndCachePackFile(registry, packageUrl, guidKey, fetcher)\n        : undefined;\n    if (!isCurrent()) return invalidated(guidKey);\n    traceAssetLoadPhase('pack.fetch.complete', {\n      guid: guidKey,\n      packageUrl,\n      detail: {\n        cached: registry.packFiles.get(packageUrl)?.value !== undefined,\n        ok: fetched?.ok ?? true,\n      },\n    });\n    if (registry.packFiles.get(packageUrl)?.value === undefined) {\n      if (fetched === undefined) {\n        return err(\n          new AssetError({\n            code: 'asset-fetch-failed',\n            expected: `pack file ${packageUrl} to be cached after its shared fetch`,\n            hint: ASSET_ERROR_HINTS['asset-fetch-failed'],\n          }),\n        );\n      }\n      return fetched as unknown as Result<{ asset: Asset; refs: readonly string[] }, AssetError>;\n    }\n  }\n  const pack = registry.packFiles.get(packageUrl)?.value;\n  if (pack?.schemaVersion !== '2.0.0') return undefined;\n  const asset = pack.assets.find((candidate) => candidate.guid.toLowerCase() === guidKey);\n  traceAssetLoadPhase('pack.parse.complete', {\n    guid: guidKey,\n    packageUrl,\n    detail: { found: asset !== undefined, kind: asset?.kind },\n  });\n  if (asset === undefined) {\n    return err(\n      new AssetError({\n        code: 'asset-not-found',\n        expected: `GUID ${guidKey} present in Pack v2 package ${packageUrl}`,\n        hint: ASSET_ERROR_HINTS['asset-not-found'],\n      }),\n    );\n  }\n  const streams: Record<string, { descriptor: ArtifactDescriptor; url: string }> = {};\n  const artifacts: Record<string, { descriptor: ArtifactDescriptor; bytes: Uint8Array }> = {};\n  const pendingArtifacts = Object.entries(asset.artifacts ?? {})\n    .map(async ([artifactKey, descriptor]) => {\n      if (descriptor.delivery === 'stream')\n        return { stream: true as const, artifactKey, descriptor };\n      const cacheKey = `${guidKey}\\0${packageUrl}\\0${artifactKey}`;\n      const artifact = await registry.artifactCache.read(cacheKey, () =>\n        readArtifact({ packageUrl, guid: guidKey, artifactKey, descriptor }, fetcher),\n      );\n      return { stream: false as const, artifactKey, descriptor, artifact };\n    })\n    .map((pending) =>\n      pending.then(\n        (value) => ({ value }),\n        (error: unknown) => ({ error }),\n      ),\n    );\n  for (const pending of pendingArtifacts) {\n    const settled = await pending;\n    if ('error' in settled) throw settled.error;\n    const loadedArtifact = settled.value;\n    const { artifactKey, descriptor } = loadedArtifact;\n    if (loadedArtifact.stream) {\n      const path = validateArtifactPath(descriptor.path, {\n        packageRoot: packageUrl,\n        guid: guidKey,\n        artifactKey,\n      });\n      if (!path.ok)\n        return err(\n          new AssetError({\n            code: 'asset-parse-failed',\n            expected: path.error.expected,\n            hint: path.error.hint,\n            detail: { sourcePath: `${packageUrl}#${artifactKey}` },\n          }),\n        );\n      streams[artifactKey] = { descriptor, url: artifactUrl(packageUrl, path.value) };\n      continue;\n    }\n    if (!isCurrent()) return invalidated(guidKey);\n    const artifact = loadedArtifact.artifact;\n    if (!artifact.ok)\n      return artifact as unknown as Result<{ asset: Asset; refs: readonly string[] }, AssetError>;\n    artifacts[artifactKey] = { descriptor, bytes: artifact.value };\n  }\n  if (!isCurrent()) return invalidated(guidKey);\n  traceAssetLoadPhase('loader.load.start', { guid: guidKey, packageUrl });\n  const loaded = await registry.loaders.loadPack(\n    {\n      guid: guidKey,\n      kind: asset.kind,\n      payload: structuredClone(asset.payload),\n      refs: asset.refs ?? [],\n      artifacts,\n      streams,\n    },\n    makeLoadContext(registry, fetcher),\n  );\n  traceAssetLoadPhase('loader.load.complete', {\n    guid: guidKey,\n    packageUrl,\n    detail: { ok: loaded.ok },\n  });\n  if (!loaded.ok) return err(loaded.error as AssetError);\n  if (loaded.value === undefined || typeof loaded.value !== 'object') {\n    return err(\n      new AssetError({\n        code: 'asset-parse-failed',\n        expected: `loader '${asset.kind}' to return an asset payload`,\n        hint: 'register a loader that accepts the Pack v2 asset-local input',\n      }),\n    );\n  }\n  return ok({ asset: loaded.value as Asset, refs: asset.refs ?? [] });\n}\n\nfunction purgeFailedLoad(\n  registry: AssetRegistry,\n  guidKey: string,\n  packageUrl: string,\n  error: unknown,\n): void {\n  const doomed = registry.loadState.fail(guidKey, error);\n  for (const key of doomed) {\n    if (registry.assetCatalog.delete(key)) registry.catalogEpoch++;\n  }\n  const state = registry.packFiles.get(packageUrl);\n  if (state !== undefined) {\n    delete state.value;\n    if (state.pending === undefined) registry.packFiles.delete(packageUrl);\n  }\n}\n\n/**\n * M4 transport fallback: try the injected {@link ImportTransport} to lazily\n * import a missing DDC, then re-enter the DDC load path. When no transport\n * is wired (shipped form), fail fast with `asset-not-imported` (AC-22).\n */\nexport async function transportOrFail<T = Asset>(\n  registry: AssetRegistry,\n  guid: AssetGuid,\n  guidKey: string,\n  miss: AssetError | undefined,\n  isCurrent = currentLoad(registry, guidKey),\n): Promise<Result<T, AssetError | ImageError | RhiError>> {\n  if (registry.importTransport === undefined) {\n    // shipped form: no transport wired -> fail fast, never degrade to\n    // runtime import (AC-22, charter P3 explicit failure).\n    return err(\n      new AssetError({\n        code: 'asset-not-imported',\n        expected: `GUID ${guidKey} to have been pre-imported at build time or to have an ImportTransport wired`,\n        // Keep the DDC read evidence (URL, HTTP/network reason, attempts).\n        hint:\n          miss === undefined\n            ? ASSET_ERROR_HINTS['asset-not-imported']\n            : `${ASSET_ERROR_HINTS['asset-not-imported']}; DDC ${miss.code}: ${miss.hint}`,\n        ...(miss?.detail === undefined ? {} : { detail: miss.detail }),\n      }),\n    );\n  }\n\n  // studio form: request the transport to import this GUID on-the-fly.\n  // After a successful transport call the DDC is available; re-enter the\n  // catalog + DDC load path (the transport writes the DDC but does NOT\n  // register the asset — that's the Loader's job).\n  const transportResult = await registry.importTransport.fetchPack(\n    guidKey,\n    registry.runtimeBinding,\n  );\n  if (!isCurrent()) return invalidated(guidKey);\n  if (!transportResult.ok) {\n    return err(\n      new AssetError({\n        code: 'asset-not-imported',\n        expected: `import transport to fetch pack for GUID ${guidKey}`,\n        hint: ASSET_ERROR_HINTS['asset-not-imported'],\n      }),\n    );\n  }\n\n  // Patch ONLY the freshly imported rows into the catalog cache (per-asset\n  // incremental, the four-verb redesign 2026-06-06) instead of nuking the\n  // cache and re-fetching the whole pack-index. The transport returns the one\n  // imported entry (+ sub-asset siblings); each becomes / overwrites a cache\n  // row. This keeps 122 concurrent texture imports O(N) instead of O(N^2)\n  // whole-catalog re-fetches and never resets a sibling's imported row.\n  const importedEntries = 'entries' in transportResult ? transportResult.entries : undefined;\n  if (importedEntries !== undefined && importedEntries.length > 0) {\n    // F20: serialise packIndexCache writes through a per-cache Promise queue.\n    // The \"check -> new Map -> set\" block is not atomic across concurrent\n    // transportOrFail calls; chaining through the queue ensures each patch\n    // completes before the next starts, preventing new-Map overwrite races.\n    registry.packIndexCachePatchQueue = registry.packIndexCachePatchQueue.then(() => {\n      if (!isCurrent()) return;\n      if (registry.packIndexCache === undefined) registry.packIndexCache = new Map();\n      for (const e of importedEntries) {\n        if (typeof e.packageUrl !== 'string' || e.packageUrl.length === 0) continue;\n        registry.packIndexCache.set(e.guid.toLowerCase(), {\n          packageUrl: resolveCatalogAssetUrl(registry, e.packageUrl),\n          kind: e.kind,\n          // Carry the transport's derived display name into the cache row.\n          // buildCatalog already resolves it through deriveAssetName (authored\n          // names are preserved and the source basename is the fallback, so a\n          // freshly imported GLB's 1000+ sub-assets show as \"<file>.glb\" in the\n          // Content Browser\n          // instead of blank. Dropping it here made listCatalog fall back to\n          // `entry.name ?? ''` — the whole-index re-read path (else branch) kept\n          // names, so only the incremental patch path was blank.\n          ...(e.name !== undefined ? { name: e.name } : {}),\n          // Carry refs on the incremental patch path too, else an asset\n          // imported via POST /__import shows missing dependency edges until\n          // the next full pack-index refresh (feat: listCatalog refs).\n          ...(e.refs !== undefined ? { refs: e.refs } : {}),\n          ...(e.packageId !== undefined ? { packageId: e.packageId } : {}),\n          ...(e.provenance !== undefined ? { provenance: e.provenance } : {}),\n          ...(e.revision !== undefined ? { revision: e.revision } : {}),\n          ...(e.authoring !== undefined ? { authoring: e.authoring } : {}),\n          ...(e.sourceKey !== undefined ? { sourceKey: e.sourceKey } : {}),\n          ...(e.sourceIndex !== undefined ? { sourceIndex: e.sourceIndex } : {}),\n          ...(e.relations !== undefined ? { relations: e.relations } : {}),\n          ...(e.diagnostics !== undefined ? { diagnostics: e.diagnostics } : {}),\n          // Carry sourcePath on the incremental patch path too (same red-line\n          // as refs above): an asset imported via POST /__import would\n          // otherwise expose no source-file path in listCatalog until the next\n          // full pack-index refresh, breaking editor CRUD sidecar lookup for\n          // freshly imported assets. `sourcePath` is a required PackIndexEntry\n          // field, so it is always present on the transport row.\n          ...(e.sourcePath !== undefined ? { sourcePath: e.sourcePath } : {}),\n        });\n      }\n    });\n    await registry.packIndexCachePatchQueue;\n    if (!isCurrent()) return invalidated(guidKey);\n  } else {\n    // No inline rows -- re-read the whole pack-index so the freshly imported DDC\n    // entry is visible (legacy / non-row-returning transports). Dropping the\n    // cache first keeps the import's own row change from invalidating this load;\n    // forcing the read queues it behind any in-flight read, whose pre-import\n    // response must not be the index this load resolves against.\n    registry.packIndexCache = undefined;\n    await registry.refreshCatalog();\n    if (!isCurrent()) return invalidated(guidKey);\n  }\n  const resolved = await resolveCatalogEntry(registry, guidKey);\n  if (!resolved.ok) return resolved;\n  const entry = resolved.value;\n  if (!isCurrent()) return invalidated(guidKey);\n  if (entry === undefined) {\n    return err(\n      new AssetError({\n        code: 'asset-not-imported',\n        expected: `import transport to produce a catalog entry for GUID ${guidKey}`,\n        hint: ASSET_ERROR_HINTS['asset-not-imported'],\n      }),\n    );\n  }\n\n  // Re-enter the DDC load path (identical to the catalog-hit path).\n  return ddcLoad<T>(registry, guid, guidKey, entry, undefined, new Set(), isCurrent);\n}\n\n/**\n * Register a parsed asset POD (the synchronous tail of the DDC load path:\n * `registerWithGuid`). Material parent preload is handled asynchronously\n * inside `ddcLoad` before calling this method; the registered asset is\n * always fully resolved by the time it reaches here.\n *\n * Extracted from the old `loadByGuidProd` body so `ddcLoad` and\n * `transportOrFail` share an identical load path (AC-23 key invariant).\n */\nexport function registerParsedAsset<T = Asset>(\n  registry: AssetRegistry,\n  guid: AssetGuid,\n  asset: Asset,\n  _guidKey: string,\n  refs?: readonly AssetRef[],\n): Result<T, AssetError | ImageError | RhiError> {\n  // feat-20260614 M8 (D-17): catalogue the parsed payload under its GUID and\n  // return the PAYLOAD. `catalog` validates mesh stride + material passes and\n  // returns Result.err on failure (no throw), so the loadByGuid surface stays\n  // a consistent Result (charter P4 consistent abstraction).\n  //\n  // feat-20260622 M4 / w12 (D-9): the pack-entry refs[] ride onto the\n  // catalogued envelope here so the recursive core can read envelope.refs as\n  // its single recursion source.\n  return registry.catalog<T>(guid, asset as T, refs) as Result<\n    T,\n    AssetError | ImageError | RhiError\n  >;\n}\n\n/**\n * Fetch one pack file, locate the requested asset entry, and either parse it\n * inline or expose the entry to the caller (for kinds that need to preload\n * `refs[]` BEFORE running the loader — currently 'material', whose\n * values handle fields are rewritten to their refs[] GUID strings\n * (feat-20260614 M8 / D-19: GUID verbatim, no handle minting at load time)).\n *\n * bug-20260610 Fix B (M3 / D-4): the fetch+parse result is cached per\n * `packageUrl` in `packFiles`; concurrent calls for the same URL share\n * a single in-flight promise via `packFiles`. Only the raw parsed\n * body is cached — `parseAssetPayload` still runs per-call (CON-2).\n */\nexport async function fetchPackFile(\n  registry: AssetRegistry,\n  packageUrl: string,\n  guidKey: string,\n  _kind: string,\n): Promise<Result<{ asset: Asset; refs: readonly string[] }, AssetError>> {\n  // ── cache hit ───────────────────────────────────────────────────────\n  const cached = registry.packFiles.get(packageUrl)?.value;\n  if (cached !== undefined) {\n    const assetEntry = cached.assets.find((a) => a.guid.toLowerCase() === guidKey.toLowerCase());\n    if (assetEntry === undefined) {\n      return err(\n        new AssetError({\n          code: 'asset-not-found',\n          expected: `GUID ${guidKey} present in pack file ${packageUrl}`,\n          hint: ASSET_ERROR_HINTS['asset-not-found'],\n        }),\n      );\n    }\n    return parseAndReturnAsset(registry, assetEntry);\n  }\n\n  // ── in-flight dedup ─────────────────────────────────────────────────\n  const inFlight = registry.packFiles.get(packageUrl)?.pending;\n  if (inFlight !== undefined) {\n    try {\n      const packFile = await inFlight;\n      const assetEntry = packFile.assets.find(\n        (a) => a.guid.toLowerCase() === guidKey.toLowerCase(),\n      );\n      if (assetEntry === undefined) {\n        return err(\n          new AssetError({\n            code: 'asset-not-found',\n            expected: `GUID ${guidKey} present in pack file ${packageUrl}`,\n            hint: ASSET_ERROR_HINTS['asset-not-found'],\n          }),\n        );\n      }\n      return parseAndReturnAsset(registry, assetEntry);\n    } catch {\n      // In-flight promise rejected (network failure) — fall through to\n      // re-fetch. The in-flight entry was already cleaned by the\n      // catch block in the original miss path.\n    }\n  }\n\n  // ── miss: fetch + parse + cache ─────────────────────────────────────\n  return fetchAndCachePackFile(registry, packageUrl, guidKey);\n}\n\n/**\n * Parse the asset payload from a pack-file entry and return the result.\n * Extracted so cache-hit and in-flight-dedup paths share the same\n * parseAssetPayload + error-wrapping logic.\n */\nexport function parseAndReturnAsset(\n  registry: AssetRegistry,\n  assetEntry: {\n    kind: string;\n    payload: Record<string, unknown>;\n    refs?: string[];\n  },\n): Result<{ asset: Asset; refs: readonly string[] }, AssetError> {\n  const parsed = parseAssetPayload(registry, assetEntry.kind, assetEntry.payload, assetEntry.refs);\n  // F21: the scene loader returns its structured ParseErrorDetail inline via\n  // the LoaderOutput `{ ok: false, error }` arm, surfaced here through\n  // parseAssetPayload's return value -- no shared instance slot.\n  if (parsed !== undefined && typeof parsed === 'object' && 'ok' in parsed) {\n    const e = (parsed as { readonly ok: false; readonly error: ParseErrorDetail }).error;\n    const detail = {\n      entityKey: e.entityKey,\n      component: e.component,\n      field: e.field,\n      index: e.index,\n      refsLength: e.refsLength,\n    };\n    return err(\n      new AssetError({\n        code: 'asset-parse-failed',\n        expected: `refs index ${e.index} within [0, ${e.refsLength})`,\n        detail,\n        hint:\n          `at node key=${e.entityKey}, component=${e.component}, ` +\n          `field=${e.field}: index ${e.index} is out of bounds ` +\n          `(refs has ${e.refsLength} entries)`,\n      }),\n    );\n  }\n  if (parsed === undefined) {\n    const parent =\n      typeof assetEntry.payload.parent === 'string'\n        ? assetEntry.payload.parent\n        : typeof assetEntry.payload.parent === 'number' &&\n            Number.isInteger(assetEntry.payload.parent)\n          ? assetEntry.refs?.[assetEntry.payload.parent]\n          : undefined;\n    const childForValidation =\n      assetEntry.kind === 'material' && typeof parent === 'string'\n        ? ({ ...assetEntry.payload, parent } as unknown as MaterialAsset)\n        : undefined;\n    const forbidden =\n      childForValidation === undefined ? [] : materialChildForbiddenFields(childForValidation);\n    return err(\n      new AssetError({\n        code: 'asset-parse-failed',\n        expected: `parseable asset payload for kind ${assetEntry.kind}`,\n        hint:\n          forbidden.length > 0\n            ? 'remove root-owned colorSpace, passes, and parameters from the child payload'\n            : ASSET_ERROR_HINTS['asset-parse-failed'],\n        ...(forbidden.length > 0\n          ? { detail: { field: 'material-child-contract', got: forbidden } }\n          : {}),\n      }),\n    );\n  }\n  // feat-20260622 M4 / w12: surface the pack-entry refs[] (GUID-string\n  // projection) alongside the parsed payload so ddcLoad can store them on\n  // the catalogued envelope. The recursive core then reads envelope.refs\n  // as the single recursion source (D-5), never re-deriving them from\n  // the payload.\n  return ok({ asset: parsed as Asset, refs: assetEntry.refs ?? [] });\n}\n\nfunction packageReadFailed(url: string, failure: PackageReadFailure): AssetError {\n  return new AssetError({\n    code: 'asset-fetch-failed',\n    expected: `readable package resource at ${url}`,\n    hint: `${failure.observed} after ${failure.attempts} request(s); ${ASSET_ERROR_HINTS['asset-fetch-failed']}`,\n    detail: { field: 'request', value: url, reason: failure.observed },\n  });\n}\n\nasync function readPackFile(\n  registry: AssetRegistry,\n  packageUrl: string,\n  fetcher: typeof globalThis.fetch = registry.openPackage(packageUrl),\n): Promise<Result<ParsedPackFile, AssetError>> {\n  const invalid = (field: string) =>\n    err(\n      new AssetError({\n        code: 'asset-parse-failed',\n        expected: `valid Pack field ${field} at ${packageUrl}`,\n        hint: 'repair the Pack envelope at the reported field and republish, then retry the same GUID',\n        detail: { field, value: packageUrl, reason: 'invalid Pack envelope' },\n      }),\n    );\n  const read = await readPackage(fetcher, packageUrl, readRetainedPackJson);\n  if (!read.ok) {\n    return read.error.malformed ? invalid('JSON') : err(packageReadFailed(packageUrl, read.error));\n  }\n  const raw = read.value;\n  if (\n    raw === null ||\n    typeof raw !== 'object' ||\n    !Array.isArray((raw as { assets?: unknown }).assets)\n  ) {\n    return invalid('assets');\n  }\n  const pack = raw as ParsedPackFile;\n  const guids = new Set<string>();\n  for (const [index, asset] of pack.assets.entries()) {\n    const issue = packEnvelopeIssue(asset);\n    if (issue !== undefined) return invalid(`assets[${index}].${issue}`);\n    if (\n      asset.payload === null ||\n      typeof asset.payload !== 'object' ||\n      Array.isArray(asset.payload)\n    ) {\n      return invalid(`assets[${index}].payload`);\n    }\n    const guid = asset.guid.toLowerCase();\n    if (guids.has(guid)) return invalid(`assets[${index}].guid`);\n    guids.add(guid);\n  }\n  return ok(pack);\n}\n\n/**\n * Fetch a pack file from the network, parse the JSON body, store the\n * result in the cache, and return the requested asset entry.\n *\n * Registers the in-flight promise in `packFiles` so concurrent\n * callers share a single fetch. On success the body moves to\n * `packFiles`; on failure the in-flight entry is removed so\n * subsequent retries re-fetch (D-7).\n */\nexport async function fetchAndCachePackFile(\n  registry: AssetRegistry,\n  packageUrl: string,\n  guidKey: string,\n  fetcher: typeof globalThis.fetch = registry.openPackage(packageUrl),\n  isCurrent: () => boolean = () => true,\n): Promise<Result<{ asset: Asset; refs: readonly string[] }, AssetError>> {\n  const fetchPromise = readPackFile(registry, packageUrl, fetcher).then((result) => {\n    if (!result.ok) throw result.error;\n    return result.value;\n  });\n\n  const state = registry.packFiles.get(packageUrl) ?? {};\n  state.pending = fetchPromise;\n  registry.packFiles.set(packageUrl, state);\n\n  try {\n    const packFile = await fetchPromise;\n    if (!isCurrent()) {\n      registry.settlePackFile(packageUrl, fetchPromise);\n      return invalidated(guidKey);\n    }\n    registry.settlePackFile(packageUrl, fetchPromise, packFile);\n\n    const assetEntry = packFile.assets.find((a) => a.guid.toLowerCase() === guidKey.toLowerCase());\n    if (assetEntry === undefined) {\n      return err(\n        new AssetError({\n          code: 'asset-not-found',\n          expected: `GUID ${guidKey} present in pack file ${packageUrl}`,\n          hint: ASSET_ERROR_HINTS['asset-not-found'],\n        }),\n      );\n    }\n    return parseAndReturnAsset(registry, assetEntry);\n  } catch (e) {\n    registry.settlePackFile(packageUrl, fetchPromise);\n    if (e instanceof AssetError) {\n      return err(e);\n    }\n    throw e;\n  }\n}\n\n/**\n * Reconstruct a typed `Asset` from a raw payload object.\n *\n * @param kind The asset kind discriminant (matches the pack entry or\n *   dev-register dispatch).\n * @param payload The serialised asset payload (keys mirror the asset\n *   interface field names).\n * @param refs Pack-file refs array for Handle fields — when a field\n *   value is `number` it resolves to `refs[N]` (glTF-style index).\n *   Optional to preserve compatibility with callers outside the pack\n *   ingestion path (e.g., direct `registerWithGuid`).\n */\nexport function parseAssetPayload(\n  registry: AssetRegistry,\n  kind: string,\n  payload: Record<string, unknown>,\n  refs?: string[],\n):\n  | Asset\n  | Record<string, unknown>\n  | undefined\n  | { readonly ok: false; readonly error: ParseErrorDetail } {\n  // feat-20260603-asset-import-loader-injection M1 / w4: dispatch on\n  // `kind` through the injected LoaderRegistry instead of a hardcoded\n  // `if (kind === ...)` chain (D-1 / AC-01). The seven inline pack-payload\n  // loaders parse synchronously; texture / font live on the upstream\n  // loadByGuidProd branch (w6) and are never reached here.\n  // feat-20260623 M2 / w5: unknown kinds pass through the raw payload so\n  // host-registered loaders can parse their own kind. The engine does not\n  // parse payloads it cannot match; parse responsibility is explicit on the\n  // missing loader (charter P3).\n  const loader = registry.loaders.get(kind);\n  if (loader === undefined) return { ...payload, kind };\n  const out = loader.load(payload, refs, makeLoadContext(registry));\n  // The inline pack-payload loaders are synchronous (`Asset | undefined`);\n  // the async texture / font loaders are dispatched from loadByGuidProd, not\n  // here. A Promise here would mean a misregistered loader -> treat as a\n  // parse miss rather than leaking a thenable into the sync return.\n  if (out !== undefined && typeof (out as { then?: unknown }).then === 'function') {\n    return undefined;\n  }\n  // F21: the scene loader returns { ok: false, error: ParseErrorDetail } for\n  // structured parse errors. Pass the error arm straight through the return\n  // value so the caller constructs a precise AssetError -- no instance slot.\n  if (out !== undefined && out !== null && typeof out === 'object' && 'ok' in out) {\n    return out as { readonly ok: false; readonly error: ParseErrorDetail };\n  }\n  return out as Asset | undefined;\n}\n\n/**\n * Build the {@link LoadContext} passed to a loader's `load`.\n * `fetchBinary` / `resolveRef` / `device` are wired for the async texture /\n * font loaders (w6).\n */\nexport function makeLoadContext(\n  registry: AssetRegistry,\n  fetcher: typeof globalThis.fetch = registry.fetchAsset,\n): LoadContext {\n  return {\n    /**\n     * feat-20260706 M3 / w19: fetchBinary signature extended per D-2.\n     * `opts?.compression` triggers the single decompression gate (AC-02).\n     * 'zstd' → lazy-init codec decompressZstd · 'none' / undefined → pass-through.\n     * On decompression failure, the codec error is nested in asset-fetch-failed\n     * detail (D-8: runtime error union NOT extended).\n     */\n    fetchBinary: async (url: string, opts?: { readonly compression?: AssetCompression }) => {\n      try {\n        const read = await readPackage(fetcher, url, bytesOf);\n        if (!read.ok) return { ok: false as const, error: packageReadFailed(url, read.error) };\n        let bytes: Uint8Array = read.value;\n\n        // --- Decompression gate (AC-02: single gate inside fetchBinary) ---\n        if (opts?.compression === 'zstd') {\n          const decRes = await decompressZstd(bytes);\n          if (!decRes.ok) {\n            return {\n              ok: false as const,\n              error: new AssetError({\n                code: 'asset-parse-failed',\n                expected: `zstd decompression for ${url}`,\n                hint: `[${decRes.error.code}] ${decRes.error.hint}`,\n                detail: { sourcePath: url },\n              }),\n            };\n          }\n          bytes = new Uint8Array(\n            decRes.value.buffer,\n            decRes.value.byteOffset,\n            decRes.value.byteLength,\n          );\n        }\n        // compression === 'none' / undefined → E1 pass-through\n\n        return { ok: true as const, value: bytes };\n      } catch {\n        return {\n          ok: false as const,\n          error: new AssetError({\n            code: 'asset-fetch-failed',\n            expected: `fetch(${url}) to succeed`,\n            hint: ASSET_ERROR_HINTS['asset-fetch-failed'],\n          }),\n        };\n      }\n    },\n    resolveRef: async (guid: string) => {\n      const parsed = AssetGuid.parse(guid);\n      if (!parsed.ok) {\n        return { ok: false as const, error: parsed.error };\n      }\n      const r = await loadByGuid(registry, parsed.value);\n      if (!r.ok) return { ok: false as const, error: r.error };\n      // feat-20260614 M8 (D-19): resolveRef ensures the sub-asset is\n      // catalogued (recursive load). The numeric value is vestigial -- the\n      // registry mints no handles; callers store the GUID, not this number.\n      return { ok: true as const, value: 0 };\n    },\n    // feat-20260613-material-paramschema-driven-binding M4 / w22 (D-5 graceful):\n    // expose the registered shader's derive(paramSchema).textureFieldNames to\n    // the materialLoader so it can decide which values fields carry\n    // refs[] indices without a hardcoded texture-field allowlist Set\n    // (AC-03). Returns `undefined` when the shader is not registered (cross-\n    // worktree shader-late-register, plan R-4) — the loader then falls back\n    // to a graceful \"try every int paramValue\" walk.\n    getMaterialShaderTextureFieldNames: (shaderId: string) => {\n      const lookup = registry.shaderRegistry.findMaterialArtifact(shaderId);\n      if (!lookup.ok) return undefined;\n      return lookup.value.paramSchemaProjection.derivedInterface.textureFieldNames;\n    },\n    transcodeCaps: registry.transcodeCaps,\n    device: undefined,\n  };\n}\n\n/**\n * Return a runtime snapshot of every catalogued asset. Each entry exposes\n * `{ guid, kind, name }` where `kind` is the asset discriminant string\n * from `payload.kind`. feat-20260614 M8 (D-15): the registry holds no\n * handles -- entries are keyed by GUID (the catalogue key).\n *\n * AI-user narrowing flow (AC-11 + plan-strategy §7.4):\n * ```ts\n * for (const e of registry.inspect().assets) {\n *   if (e.kind === 'texture') {\n *     // re-query via registry.lookup(e.guid) to get the typed Asset value.\n *   }\n * }\n * ```\n */\n","import { type AssetLoadError, err, type Result } from '@forgeax/engine-types';\n\n/** Cancel one wait without cancelling the owner's shared operation. */\nexport function waitForAsset<T>(\n  request: Promise<Result<T, AssetLoadError>>,\n  signal: AbortSignal,\n  guid: string,\n): Promise<Result<T, AssetLoadError>> {\n  if (signal.aborted) return Promise.resolve(err(assetLoadCancelled(guid)));\n  return new Promise((resolve, reject) => {\n    const abort = () => resolve(err(assetLoadCancelled(guid)));\n    signal.addEventListener('abort', abort, { once: true });\n    request.then(\n      (result) => {\n        signal.removeEventListener('abort', abort);\n        resolve(result);\n      },\n      (cause: unknown) => {\n        signal.removeEventListener('abort', abort);\n        reject(cause);\n      },\n    );\n  });\n}\n\nexport function assetLoadCancelled(guid: string): AssetLoadError {\n  return {\n    code: 'asset-load-cancelled',\n    expected: 'the request AbortSignal to remain live until the load completes',\n    hint: 'retry with a live AbortSignal when the request is still needed',\n    detail: { guid },\n  };\n}\n","import type {\n  AssetEnvelopeV2,\n  AssetLoadError,\n  AssetPublicationTuple,\n  PackV2,\n  Result,\n} from '@forgeax/engine-types';\nimport { err, ok } from '@forgeax/engine-types';\nimport { packEnvelopeIssue } from './pack-envelope.js';\nimport { jsonOf, readPackage } from './package-read.js';\nimport { assetLoadCancelled, waitForAsset } from './wait-for-asset.js';\n\nexport interface PackReaderOptions {\n  readonly fetcher?: typeof globalThis.fetch;\n}\n\nexport type VerifiedPack = PackV2<unknown>;\n\nfunction invalid(guid: string, reason: string): Result<never, AssetLoadError> {\n  return err({\n    code: 'asset-package-invalid',\n    expected: 'a verified Pack v2 envelope with complete runtime artifacts',\n    hint: 're-cook the Pack v2 publication and retry the current tuple',\n    detail: { guid, reason },\n  });\n}\n\n/** Freeze an owned value; never pass a mutable retained Pack to this helper. */\nexport function freezePackValue<T>(value: T): T {\n  if (\n    value !== null &&\n    typeof value === 'object' &&\n    !ArrayBuffer.isView(value) &&\n    !Object.isFrozen(value)\n  ) {\n    Object.freeze(value);\n    for (const child of Object.values(value as Record<string, unknown>)) freezePackValue(child);\n  }\n  return value;\n}\n\nfunction sameTuple(left: AssetPublicationTuple, right: AssetPublicationTuple): boolean {\n  return (\n    left.scopeId === right.scopeId &&\n    left.generation === right.generation &&\n    left.digest === right.digest &&\n    left.outputSetDigest === right.outputSetDigest\n  );\n}\n\nexport class PackReader {\n  private readonly fetcher: typeof globalThis.fetch | undefined;\n  private readonly lifetime = new AbortController();\n  private readonly verified = new Map<string, VerifiedPack>();\n  private readonly pending = new Map<string, Promise<Result<VerifiedPack, AssetLoadError>>>();\n\n  constructor(options: PackReaderOptions = {}) {\n    // An injected fetcher is an explicit transport lease and is fixed for the\n    // reader lifetime. With no injection, resolve the host fetch at read time:\n    // App assembly can precede a dev/test host installing its transport.\n    this.fetcher = options.fetcher?.bind(globalThis);\n  }\n\n  async read(\n    packageUrl: string,\n    expected: AssetPublicationTuple,\n    signal: AbortSignal,\n    fetcher?: typeof globalThis.fetch,\n  ): Promise<Result<VerifiedPack, AssetLoadError>> {\n    if (signal.aborted || this.lifetime.signal.aborted) return err(assetLoadCancelled(packageUrl));\n    const key = this.key(packageUrl, expected);\n    const cached = this.verified.get(key);\n    if (cached !== undefined) return ok(cached);\n    let request = this.pending.get(key);\n    if (request === undefined) {\n      const current = this.fetchAndVerify(packageUrl, expected, this.lifetime.signal, fetcher).then(\n        (result) => {\n          if (this.pending.get(key) === current) {\n            this.pending.delete(key);\n            if (result.ok) this.verified.set(key, result.value);\n          }\n          return result;\n        },\n      );\n      this.pending.set(key, current);\n      request = current;\n    }\n    return waitForAsset(request, AbortSignal.any([signal, this.lifetime.signal]), packageUrl);\n  }\n\n  dispose(): void {\n    this.lifetime.abort();\n    this.pending.clear();\n    this.verified.clear();\n  }\n\n  private async fetchAndVerify(\n    packageUrl: string,\n    expected: AssetPublicationTuple,\n    signal: AbortSignal,\n    boundFetcher?: typeof globalThis.fetch,\n  ): Promise<Result<VerifiedPack, AssetLoadError>> {\n    const fetcher = boundFetcher ?? this.fetcher ?? globalThis.fetch.bind(globalThis);\n    const read = await readPackage(fetcher, packageUrl, jsonOf, { signal });\n    if (!read.ok) {\n      if (read.error.malformed) return invalid(packageUrl, 'invalid JSON');\n      if (signal.aborted) return err(assetLoadCancelled(packageUrl));\n      return err({\n        code: 'asset-fetch-failed',\n        expected: 'HTTP 200 for the current Pack URL',\n        hint: `${read.error.observed} after ${read.error.attempts} request(s); verify the package locator and republish the Pack`,\n        detail: { guid: packageUrl, packageUrl },\n      });\n    }\n    const value = read.value;\n    const verified = this.verify(value, expected);\n    if (!verified.ok && verified.error.code === 'asset-package-invalid') {\n      return invalid(packageUrl, verified.error.detail.reason);\n    }\n    return verified;\n  }\n\n  private key(packageUrl: string, tuple: AssetPublicationTuple): string {\n    return `${packageUrl}\\u0000${tuple.scopeId}\\u0000${tuple.generation}\\u0000${tuple.digest}\\u0000${tuple.outputSetDigest}`;\n  }\n\n  verify(value: unknown, expected: AssetPublicationTuple): Result<VerifiedPack, AssetLoadError> {\n    const checked = validatePackEnvelope(value, expected);\n    if (!checked.ok) return checked;\n    return ok(freezePackValue(value as VerifiedPack));\n  }\n}\n\n/** Complete Pack validation without freezing or retaining the caller's mutable input. */\nexport function validatePackEnvelope(\n  value: unknown,\n  expected: AssetPublicationTuple,\n): Result<void, AssetLoadError> {\n  if (value === null || typeof value !== 'object') return invalid('', 'Pack is not an object');\n  const pack = value as Partial<PackV2<unknown>>;\n  if (pack.schemaVersion !== '2.0.0' || pack.kind !== 'internal-text-package') {\n    return invalid('', 'schemaVersion or kind');\n  }\n  if (\n    typeof pack.scopeId !== 'string' ||\n    !Number.isSafeInteger(pack.generation) ||\n    typeof pack.digest !== 'string' ||\n    typeof pack.outputSetDigest !== 'string' ||\n    !sameTuple(pack as AssetPublicationTuple, expected)\n  ) {\n    return invalid('', 'publication tuple mismatch');\n  }\n  if (!Array.isArray(pack.assets)) return invalid('', 'assets');\n  const guids = new Set<string>();\n  for (const raw of pack.assets) {\n    const issue = packEnvelopeIssue(raw);\n    if (issue !== undefined) return invalid('', issue);\n    const asset = raw as Partial<AssetEnvelopeV2<unknown>>;\n    const guid = typeof asset.guid === 'string' ? asset.guid : '';\n    if (guid.length === 0 || guids.has(guid.toLowerCase())) return invalid(guid, 'duplicate guid');\n    guids.add(guid.toLowerCase());\n    if (\n      typeof asset.kind !== 'string' ||\n      asset.payload === undefined ||\n      !Array.isArray(asset.refs) ||\n      asset.refs.some((ref) => typeof ref !== 'string') ||\n      asset.artifacts === null ||\n      typeof asset.artifacts !== 'object'\n    ) {\n      return invalid(guid, 'asset envelope fields');\n    }\n    for (const [artifactKey, descriptor] of Object.entries(asset.artifacts)) {\n      if (!validArtifact(guid, artifactKey, descriptor)) {\n        return invalid(guid, `artifact ${artifactKey}`);\n      }\n    }\n  }\n  return ok(undefined);\n}\n\nfunction validArtifact(_guid: string, key: string, value: unknown): boolean {\n  if (value === null || typeof value !== 'object') return false;\n  const descriptor = value as Record<string, unknown>;\n  const integrity = descriptor.integrity;\n  return (\n    key.length > 0 &&\n    typeof descriptor.path === 'string' &&\n    descriptor.path.length > 0 &&\n    typeof descriptor.mediaType === 'string' &&\n    descriptor.mediaType.length > 0 &&\n    (descriptor.contentEncoding === 'identity' || descriptor.contentEncoding === 'zstd') &&\n    Number.isSafeInteger(descriptor.byteLength) &&\n    Number(descriptor.byteLength) >= 0 &&\n    integrity !== null &&\n    typeof integrity === 'object' &&\n    (integrity as Record<string, unknown>).algorithm === 'sha256' &&\n    typeof (integrity as Record<string, unknown>).digest === 'string' &&\n    /^sha256:[0-9a-f]{64}$/i.test(String((integrity as Record<string, unknown>).digest))\n  );\n}\n","import { AssetGuid } from '@forgeax/engine-pack/guid';\nimport { validatePluginAsset } from '@forgeax/engine-pack/runtime';\nimport {\n  AssetError,\n  type AssetPublicationTuple,\n  err,\n  ok,\n  type PackV2,\n  type PluginAssetDefinition,\n  type Result,\n} from '@forgeax/engine-types';\nimport type { AssetRegistry } from '../asset-registry.js';\nimport { freezePackValue, PackReader, validatePackEnvelope } from '../internal/pack-reader.js';\nimport { isRetainedJsonTree } from '../internal/retained-pack-json.js';\nimport {\n  fetchAndCachePackFile,\n  resolveCatalogEntry,\n  validateRegistryReferences,\n} from './load-by-guid.js';\n\nexport async function readPluginDefinition(\n  registry: AssetRegistry,\n  guid: string,\n  expectedScope?: string,\n  isSourceCurrent: () => boolean = () => true,\n): Promise<Result<PluginAssetDefinition, unknown>> {\n  const parsed = AssetGuid.parse(guid);\n  if (!parsed.ok) return err(parsed.error);\n  const generation = registry.generations.get(guid.toLowerCase());\n  const globalGeneration = registry.globalGeneration;\n  const resolved = await resolveCatalogEntry(registry, guid);\n  if (!resolved.ok) return resolved;\n  const entry = resolved.value;\n  if (!entry || entry.kind !== 'plugin')\n    return err(\n      new AssetError({\n        code: 'asset-not-found',\n        expected: `a plugin Catalog row for ${guid}`,\n        hint: 'inspect and rebuild the plugin Pack',\n      }),\n    );\n  const before = validateRegistryReferences(registry, guid);\n  if (!before.ok) return before;\n  if (registry.packFiles.get(entry.packageUrl)?.value === undefined) {\n    const loaded = await fetchAndCachePackFile(\n      registry,\n      entry.packageUrl,\n      guid,\n      undefined,\n      isSourceCurrent,\n    );\n    if (!loaded.ok) return loaded;\n  }\n  const retained = registry.packFiles.get(entry.packageUrl)?.value;\n  const jsonTree = isRetainedJsonTree(retained);\n  // Arbitrary public cache values retain whole-clone semantics, including\n  // unrelated non-cloneable payloads and getters evaluated only by the clone.\n  const raw = jsonTree ? retained : structuredClone(retained);\n  const observed = raw as unknown as AssetPublicationTuple;\n  const expected = {\n    ...observed,\n    ...entry.publication,\n    scopeId: expectedScope ?? observed?.scopeId,\n  };\n  const checked = jsonTree\n    ? validatePackEnvelope(raw, expected)\n    : new PackReader().verify(raw, expected);\n  if (!checked.ok) return checked;\n  const pack = raw as unknown as PackV2<unknown>;\n  const envelope = pack.assets.find((asset) => asset.guid === guid);\n  // Only an owner-parsed, currently intact JSON tree skips the whole-Pack copy.\n  // The slow path already owns and freezes the complete clone through verify.\n  const payload = jsonTree\n    ? freezePackValue(structuredClone(envelope?.payload))\n    : envelope?.payload;\n  const definition = validatePluginAsset(payload);\n  if (!definition.ok) return definition;\n  const after = validateRegistryReferences(registry, guid);\n  if (!after.ok) return after;\n  const current = registry.packIndexCache?.get(guid.toLowerCase());\n  if (\n    !isSourceCurrent() ||\n    registry.globalGeneration !== globalGeneration ||\n    registry.generations.get(guid.toLowerCase()) !== generation ||\n    current?.packageUrl !== entry.packageUrl ||\n    current?.publication?.generation !== entry.publication?.generation ||\n    current?.publication?.digest !== entry.publication?.digest ||\n    current?.publication?.outputSetDigest !== entry.publication?.outputSetDigest\n  )\n    return err(\n      new AssetError({\n        code: 'asset-invalidated',\n        expected: 'the same plugin publication after reading its definition',\n        hint: 'read the current definition before mounting',\n      }),\n    );\n  const { scopeId, generation: publicationGeneration, digest, outputSetDigest } = pack;\n  return ok({\n    guid,\n    asset: definition.value,\n    evidence: {\n      kind: 'publication',\n      publication: { scopeId, generation: publicationGeneration, digest, outputSetDigest },\n    },\n  });\n}\n","// @forgeax/engine-assets-runtime - LoaderRegistry (feat-20260603-asset-import-loader-injection M1 / w2).\n//\n// The runtime half of the engine's third DIP instance (after RHI + Console):\n// an injectable table that maps `asset.kind` -> a `Loader` (the contract SSOT\n// lives in `@forgeax/engine-types`, plan-strategy D-2). `AssetRegistry` holds\n// one of these (constructor-injected, D-7) and dispatches `loadByGuid` through\n// `get(kind)` instead of a hardcoded `if (kind === ...)` chain (D-1).\n//\n// Shape mirrors the Console `Registry` (packages/console/src/registry.ts)\n// register/lookup pattern (research Finding 8), with one deliberate\n// difference: the injected unit here is an **object** `{ kind, load }`, not a\n// bare function, because a \"one kind -> one loader\" dispatch table is the\n// natural shape (plan-strategy D-1 alt-B rejection).\n//\n// Fail-fast semantics (charter P3): `register` throws on a malformed loader\n// or duplicate kind at wire time, so one canonical owner cannot be silently\n// replaced by a later seed table.\n\nimport type { ArtifactDescriptor, LoadContext, Loader } from '@forgeax/engine-types';\n\nexport interface PackArtifactInput {\n  readonly descriptor: ArtifactDescriptor;\n  readonly bytes: Uint8Array;\n}\n\nexport interface PackLoaderInput {\n  readonly guid: string;\n  readonly kind: string;\n  readonly payload: Record<string, unknown>;\n  readonly refs: readonly string[];\n  readonly streams?: Readonly<\n    Record<string, { readonly descriptor: ArtifactDescriptor; readonly url: string }>\n  >;\n  readonly artifacts: Readonly<Record<string, PackArtifactInput>>;\n}\n\nexport interface PackLoader {\n  readonly kind: string;\n  readonly references?: 'eager' | 'deferred';\n  load(input: PackLoaderInput, ctx: LoadContext): unknown;\n}\n\nexport type PackLoadResult =\n  | { readonly ok: true; readonly value: unknown }\n  | { readonly ok: false; readonly error: unknown };\n\n/**\n * Injectable `asset.kind` -> {@link Loader} table held by `AssetRegistry`.\n *\n * @example Wire + dispatch (host side)\n * ```ts\n * import { LoaderRegistry, wireDefaultLoaders } from '@forgeax/engine-assets-runtime';\n * const loaders = new LoaderRegistry();\n * wireDefaultLoaders(loaders);\n * const meshLoader = loaders.get('mesh'); // Loader | undefined\n * ```\n */\nexport class LoaderRegistry {\n  referencePolicy(kind: string): 'eager' | 'deferred' {\n    return this.packLoaders.get(kind)?.references ?? this.loaders.get(kind)?.references ?? 'eager';\n  }\n  // feat-20260623 M4 / w13: the Map stores Loader<unknown> so host custom kinds\n  // (Loader<MyPayload>) are accepted. The P in Loader<P> is covariant (output\n  // only: load() returns P), so Loader<Asset> is assignable to Loader<unknown>.\n  private readonly loaders = new Map<string, Loader<unknown>>();\n  private readonly packLoaders = new Map<string, PackLoader>();\n\n  /**\n   * Register a loader for its `loader.kind`. Fail-fast on a malformed loader\n   * (charter P3); rejects a repeated kind so the canonical owner cannot be replaced.\n   *\n   * @param loader the `{ kind, load }` object to register.\n   * @throws TypeError when `loader.kind` is empty or `loader.load` is not a\n   *   function — a wire-time misconfiguration the host must fix.\n   */\n  register(loader: Loader<unknown>): () => void {\n    if (typeof loader.kind !== 'string' || loader.kind.length === 0) {\n      throw new TypeError(\n        `LoaderRegistry.register: loader.kind must be a non-empty string (got ${JSON.stringify(loader.kind)})`,\n      );\n    }\n    if (typeof loader.load !== 'function') {\n      throw new TypeError(\n        `LoaderRegistry.register: loader.load must be a function for kind \"${loader.kind}\"`,\n      );\n    }\n    if (this.loaders.has(loader.kind)) {\n      throw new TypeError(`LoaderRegistry.register: duplicate loader kind \"${loader.kind}\"`);\n    }\n    this.loaders.set(loader.kind, loader);\n    return () => {\n      if (this.loaders.get(loader.kind) === loader) this.loaders.delete(loader.kind);\n    };\n  }\n\n  registerPackLoader(loader: PackLoader): () => void {\n    if (typeof loader.kind !== 'string' || loader.kind.length === 0) {\n      throw new TypeError('LoaderRegistry.registerPackLoader: kind must be non-empty');\n    }\n    if (typeof loader.load !== 'function') {\n      throw new TypeError(\n        `LoaderRegistry.registerPackLoader: load must be a function for ${loader.kind}`,\n      );\n    }\n    if (this.packLoaders.has(loader.kind)) {\n      throw new TypeError(\n        `LoaderRegistry.registerPackLoader: duplicate loader kind \"${loader.kind}\"`,\n      );\n    }\n    this.packLoaders.set(loader.kind, loader);\n    return () => {\n      if (this.packLoaders.get(loader.kind) === loader) this.packLoaders.delete(loader.kind);\n    };\n  }\n\n  async loadPack(input: PackLoaderInput, ctx: LoadContext): Promise<PackLoadResult> {\n    const packLoader = this.packLoaders.get(input.kind);\n    if (packLoader !== undefined) {\n      const output = await packLoader.load(input, ctx);\n      if (isPackLoadResult(output)) return output;\n      return { ok: true, value: output };\n    }\n    const loader = this.loaders.get(input.kind);\n    if (loader === undefined) {\n      return { ok: false, error: new Error(`no loader registered for ${input.kind}`) };\n    }\n    if (loader.loadPack !== undefined) {\n      const output = await loader.loadPack(input, ctx);\n      if (isPackLoadResult(output)) return output;\n      return { ok: true, value: output };\n    }\n    const output = await loader.load(input.payload, input.refs, ctx);\n    if (isPackLoadResult(output)) return output;\n    return { ok: true, value: output };\n  }\n\n  /**\n   * Look up the loader registered for `kind`. Returns `undefined` when no\n   * loader is wired — the `AssetRegistry` consumer maps that to a structured\n   * `AssetError(code='loader-not-registered')` with the registered kinds in\n   * `.detail` (charter P3).\n   */\n  get(kind: string): Loader<unknown> | undefined {\n    return this.loaders.get(kind);\n  }\n\n  /**\n   * The kinds currently wired, in insertion order. Fed into the\n   * `loader-not-registered` error `.detail.registeredKinds` so AI users see\n   * exactly what is injectable.\n   */\n  registeredKinds(): readonly string[] {\n    return [...this.loaders.keys()];\n  }\n}\n\nfunction isPackLoadResult(value: unknown): value is PackLoadResult {\n  return (\n    value !== null &&\n    typeof value === 'object' &&\n    'ok' in value &&\n    typeof (value as { ok?: unknown }).ok === 'boolean'\n  );\n}\n","import type { IesProfileAsset, Loader } from '@forgeax/engine-types';\nimport { IES_PROFILE_BYTE_LENGTH } from '@forgeax/engine-types';\n\nfunction isFiniteFloat16(bytes: Uint8Array): boolean {\n  for (let offset = 0; offset < bytes.byteLength; offset += 2) {\n    const bits = (bytes[offset] ?? 0) | ((bytes[offset + 1] ?? 0) << 8);\n    if (((bits >>> 10) & 0x1f) === 0x1f && (bits & 0x03ff) !== 0) return false;\n  }\n  return true;\n}\n\nfunction readPayload(payload: Record<string, unknown>): IesProfileAsset | undefined {\n  if (payload.kind !== 'ies-profile') return undefined;\n  const data = payload.data;\n  const bytes =\n    data instanceof Uint8Array\n      ? data\n      : Array.isArray(data) &&\n          data.every((value) => Number.isInteger(value) && value >= 0 && value <= 255)\n        ? Uint8Array.from(data)\n        : undefined;\n  if (bytes === undefined || bytes.byteLength !== IES_PROFILE_BYTE_LENGTH) return undefined;\n  return isFiniteFloat16(bytes) ? { kind: 'ies-profile', data: bytes } : undefined;\n}\n\nexport const iesProfileLoader = {\n  kind: 'ies-profile',\n  load(payload, _refs, _ctx) {\n    const value = readPayload(payload);\n    return value;\n  },\n} satisfies Loader<IesProfileAsset>;\n","// @forgeax/engine-assets-runtime -- asset cluster error classes.\n//\n// feat-20260704-runtime-tier1-decomposition M2 / w8 (D-3): asset-resolution\n// cluster -- material parent-chain resolve, mesh-SSBO grow ceiling, and\n// scene-collect GUID / forest-closure fail-fast errors. Class names, .code\n// literals, and .detail shapes preserved byte-for-byte (OOS-4).\n//\n// The cluster union type is named AssetRuntimeError / AssetRuntimeErrorCode\n// (not AssetError / AssetErrorCode) because @forgeax/engine-types already owns\n// the AssetError class + AssetErrorCode union (asset-system-v1); D-8 grep\n// uniqueness forbids the collision.\n\nimport type { MeshBinHeader } from '@forgeax/engine-pack';\nimport {\n  AssetError,\n  type AssetErrorDetail,\n  type AssetMeshBinContractFacts,\n  type AssetMeshBinContractViolationReason,\n} from '@forgeax/engine-types';\n\nexport class MeshBinAssetError extends AssetError {\n  readonly subject = 'mesh-bin' as const;\n  readonly sourceKey: string;\n  readonly actual: string;\n  readonly recovery = 're-cook the source with its Meta sidecar through the build-time importer';\n\n  constructor(args: {\n    readonly sourceKey: string;\n    readonly expected: string;\n    readonly actual: string;\n    readonly header?: Partial<MeshBinHeader> & { readonly byteLength?: number };\n    readonly reason?: AssetMeshBinContractViolationReason;\n    readonly expectedFacts?: AssetMeshBinContractFacts;\n    readonly actualFacts?: AssetMeshBinContractFacts;\n  }) {\n    const expectedFacts: AssetMeshBinContractFacts = args.expectedFacts ?? {\n      version: args.header?.version ?? 5,\n      projectionVersion: 1,\n    };\n    const actualFacts: AssetMeshBinContractFacts = {\n      ...(args.header ?? {}),\n      ...(args.actualFacts ?? {}),\n    };\n    const detail: AssetErrorDetail = {\n      code: 'mesh-bin-contract-violation',\n      sourceKey: args.sourceKey,\n      reason: args.reason ?? 'header-invalid',\n      expected: expectedFacts,\n      actual: actualFacts,\n    };\n    super({\n      code: 'mesh-bin-contract-violation',\n      expected: args.expected,\n      hint: 're-cook the source with its Meta sidecar through the build-time importer',\n      detail,\n    });\n    this.sourceKey = args.sourceKey;\n    this.actual = args.actual;\n  }\n}\n\n// ── MaterialResolvedEmptyPassesError ──────────────────────────────────────\n\n/**\n * Detail for `RuntimeErrorCode 'material-resolved-empty-passes'`.\n *\n * Emitted at material parent chain walk time when the resolved passes list\n * is empty. Two reasons: `'missing-parent'` (a parent handle is not\n * registered) and `'no-pass-in-chain'` (the entire parent chain has no\n * pass declarations). AI users switch on `.detail.reason` to surface the\n * right recovery guidance.\n *\n * plan-strategy D-2/D-3: empty-passes is a runtime-layer error\n * (RuntimeErrorCode, not AssetErrorCode).\n */\nexport interface MaterialResolvedEmptyPassesDetail {\n  /** GUID of the material whose resolve produced empty passes. */\n  readonly materialGuid: string;\n  /** Root cause of the empty passes: missing parent vs entire chain has no passes. */\n  readonly reason: 'missing-parent' | 'no-pass-in-chain';\n  /** The raw numeric handle id of the unregistered parent. Only populated when reason='missing-parent'. */\n  readonly missingParentHandle?: number;\n}\n\n/**\n * Structured error for material parent chain resolve yielding zero passes.\n *\n * Emitted by `AssetRegistry.passesOf` when the parent chain walk produces\n * an empty passes list (AC-09, D-3 two-reason). Four-field surface:\n *   - `.code = 'material-resolved-empty-passes'` (closed RuntimeErrorCode)\n *   - `.expected` — expected-state description\n *   - `.hint` — actionable recovery guidance (differs per reason)\n *   - `.detail = { materialGuid, reason, missingParentHandle? }`\n */\nexport class MaterialResolvedEmptyPassesError extends Error {\n  readonly code = 'material-resolved-empty-passes' as const;\n  readonly expected: string;\n  readonly hint: string;\n  readonly detail: MaterialResolvedEmptyPassesDetail;\n\n  constructor(\n    materialGuid: string,\n    reason: 'missing-parent' | 'no-pass-in-chain',\n    missingParentHandle?: number,\n  ) {\n    const expected =\n      reason === 'missing-parent'\n        ? `parent handle ${missingParentHandle} present in AssetRegistry`\n        : 'at least one material in the parent chain declares passes';\n    const hint =\n      reason === 'missing-parent'\n        ? `material ${materialGuid} references parent handle ${missingParentHandle} which is not registered; inspect AssetRegistry, register the parent first, or rebuild the material chain`\n        : `material ${materialGuid} has no passes and its entire parent chain also has no pass declarations; inspect the chain, add pass declarations to one member, then rebuild`;\n    const message =\n      reason === 'missing-parent'\n        ? `material ${materialGuid} parent handle ${missingParentHandle} not registered`\n        : `material ${materialGuid} parent chain resolves to zero passes`;\n\n    super(message);\n    this.name = 'MaterialResolvedEmptyPassesError';\n    this.expected = expected;\n    this.hint = hint;\n    this.detail = {\n      materialGuid,\n      reason,\n      ...(reason === 'missing-parent' && missingParentHandle !== undefined\n        ? { missingParentHandle }\n        : {}),\n    };\n  }\n}\n\n// ── MeshSsboCapacityExceededError ────────────────────────────────────────────\n\n/**\n * Detail for `RuntimeErrorCode 'mesh-ssbo-capacity-exceeded'`.\n *\n * Fired by `growMeshSsbo` (createRenderer.ts grow factory) when, after\n * attempting pow2 doubling, the resulting `slotCount` still cannot\n * accommodate the requested `requested` slot count under the device's\n * `maxStorageBufferBindingSize` ceiling. This is a defensive fallback —\n * the primary path for \"request past device limit\" is\n * `mesh-ssbo-ceiling-reached`. The two codes share the same detail shape so\n * AI users handle both arms identically; the discriminant identifies which\n * branch fired so diagnostics can distinguish the primary vs defensive\n * surface (research §F6.c).\n *\n *   - `requested` — slot count requested by the caller (entity count for the frame)\n *   - `capacity`  — current `slotCount` in the grow controller's state\n *   - `ceiling`   — `device.limits.maxStorageBufferBindingSize` in BYTES (not slots)\n */\nexport interface MeshSsboCapacityExceededDetail {\n  readonly requested: number;\n  readonly capacity: number;\n  readonly ceiling: number;\n}\n\n/**\n * Structured error for the post-grow defensive fallback when mesh-SSBO\n * capacity cannot accommodate the requested slot count.\n *\n * Emitted by `growMeshSsbo` in `createRenderer.ts` (D-5: fire, never\n * throw). Four-field surface aligned with `SkinPaletteOverflowError`:\n *   - `.code = 'mesh-ssbo-capacity-exceeded'`\n *   - `.expected` — capacity >= requested\n *   - `.hint` — reduce per-frame entity count or split work across frames\n *   - `.detail = { requested, capacity, ceiling }`\n */\nexport class MeshSsboCapacityExceededError extends Error {\n  readonly code = 'mesh-ssbo-capacity-exceeded' as const;\n  readonly expected: string;\n  readonly hint: string;\n  readonly detail: MeshSsboCapacityExceededDetail;\n\n  constructor(requested: number, capacity: number, ceiling: number) {\n    const expected = `mesh SSBO slotCount >= ${requested} (currently ${capacity}; device ceiling ${ceiling} B)`;\n    const hint =\n      `mesh SSBO grow could not satisfy needed=${requested} slots (capacity=${capacity}, ceiling=${ceiling} B); ` +\n      'reduce per-frame entity count or split work across frames (defensive fallback path)';\n    super(\n      `mesh SSBO capacity exceeded: needed ${requested} slots, capacity ${capacity}, ceiling ${ceiling} B`,\n    );\n    this.name = 'MeshSsboCapacityExceededError';\n    this.expected = expected;\n    this.hint = hint;\n    this.detail = { requested, capacity, ceiling };\n  }\n}\n\n// ── MeshSsboCeilingReachedError ──────────────────────────────────────────────\n\n/**\n * Detail for `RuntimeErrorCode 'mesh-ssbo-ceiling-reached'`.\n *\n * Fired by `growMeshSsbo` when the requested slot count would exceed the\n * device's `maxStorageBufferBindingSize` (the only ceiling per D-1; engine\n * carries no private capacity constant). Same detail shape as\n * `MeshSsboCapacityExceededDetail`.\n *\n *   - `requested` — slot count requested by the caller\n *   - `capacity`  — current `slotCount` in the grow controller's state\n *   - `ceiling`   — `device.limits.maxStorageBufferBindingSize` in BYTES\n */\nexport interface MeshSsboCeilingReachedDetail {\n  readonly requested: number;\n  readonly capacity: number;\n  readonly ceiling: number;\n}\n\n/**\n * Structured error for mesh-SSBO grow refused because the request exceeds\n * `device.limits.maxStorageBufferBindingSize`.\n *\n * Emitted by `growMeshSsbo` (D-5: fire, never throw). The frame renders a\n * degraded subset (truncated to pre-grow capacity) per plan-strategy D-2 —\n * no black frame. Four-field surface aligned with `SkinPaletteOverflowError`:\n *   - `.code = 'mesh-ssbo-ceiling-reached'`\n *   - `.expected` — requested * stride <= device.limits.maxStorageBufferBindingSize\n *   - `.hint` — reduce per-frame entity count or pick a higher-tier adapter\n *   - `.detail = { requested, capacity, ceiling }`\n */\nexport class MeshSsboCeilingReachedError extends Error {\n  readonly code = 'mesh-ssbo-ceiling-reached' as const;\n  readonly expected: string;\n  readonly hint: string;\n  readonly detail: MeshSsboCeilingReachedDetail;\n\n  constructor(requested: number, capacity: number, ceiling: number) {\n    const expected = `mesh SSBO slot byte size <= device.limits.maxStorageBufferBindingSize (${ceiling} B)`;\n    const hint =\n      `requested ${requested} mesh SSBO slots would exceed device.limits.maxStorageBufferBindingSize (${ceiling} B); ` +\n      'reduce per-frame entity count or run on an adapter with a larger storage buffer binding size';\n    super(\n      `mesh SSBO ceiling reached: needed ${requested} slots; capacity ${capacity}; ceiling ${ceiling} B`,\n    );\n    this.name = 'MeshSsboCeilingReachedError';\n    this.expected = expected;\n    this.hint = hint;\n    this.detail = { requested, capacity, ceiling };\n  }\n}\n\n// ── SceneCollectEntityRefOutOfClosureError ──────────────────────────\n\n/**\n * Detail for `RuntimeErrorCode 'scene-collect-entity-ref-out-of-closure'`.\n *\n * Emitted during rootsToSceneAsset when an entity field references a target\n * outside the collected forest closure.\n */\nexport interface SceneCollectEntityRefOutOfClosureDetail {\n  readonly entity: number;\n  readonly field: string;\n  readonly target: number;\n}\n\n/**\n * Structured error for entity ref pointing outside the forest closure.\n *\n * Emitted during rootsToSceneAsset collect; fail-fast per charter P3.\n *   - `.code = 'scene-collect-entity-ref-out-of-closure'`\n *   - `.expected` — all entity refs resolve within the closure\n *   - `.hint` — Expand roots to include the target entity, or remove the reference.\n *   - `.detail = { entity, field, target }`\n */\nexport class SceneCollectEntityRefOutOfClosureError extends Error {\n  readonly code = 'scene-collect-entity-ref-out-of-closure' as const;\n  readonly expected: string;\n  readonly hint: string;\n  readonly detail: SceneCollectEntityRefOutOfClosureDetail;\n\n  constructor(entity: number, field: string, target: number) {\n    const expected = `entity ${entity}.${field} references entity ${target} which is inside the forest closure`;\n    const hint = 'Expand roots to include the target entity, or remove the reference.';\n    super(`${expected} — ${hint}`);\n    this.name = 'SceneCollectEntityRefOutOfClosureError';\n    this.expected = expected;\n    this.hint = hint;\n    this.detail = { entity, field, target };\n  }\n}\n\n// ── SceneCollectAssetGuidUnresolvedError ────────────────────────────\n\n/**\n * Detail for `RuntimeErrorCode 'scene-collect-asset-guid-unresolved'`.\n *\n * Emitted at two points with different context on hand:\n *   - collect (handle→GUID): the shared handle is known → `.handle` is set.\n *   - serialize (GUID→refs): the GUID string is known but absent from the\n *     refs index → `.guid` is set. (`.handle` is meaningless there.)\n * Exactly one of `handle` / `guid` is present per instance.\n */\nexport interface SceneCollectAssetGuidUnresolvedDetail {\n  readonly field: string;\n  readonly handle?: number;\n  readonly guid?: string;\n}\n\n/**\n * Structured error for a shared asset reference whose GUID cannot be resolved.\n *\n * Emitted during rootsToSceneAsset collect (handle) or\n * serializeSceneAssetToPack (guid); fail-fast per charter P3.\n *   - `.code = 'scene-collect-asset-guid-unresolved'`\n *   - `.expected` — every shared asset reference has a catalogued GUID\n *   - `.hint` — Register the asset in AssetRegistry before collecting.\n *   - `.detail = { field, handle }` (collect) or `{ field, guid }` (serialize)\n */\nexport class SceneCollectAssetGuidUnresolvedError extends Error {\n  readonly code = 'scene-collect-asset-guid-unresolved' as const;\n  readonly expected: string;\n  readonly hint: string;\n  readonly detail: SceneCollectAssetGuidUnresolvedDetail;\n\n  constructor(field: string, ref: number | string) {\n    const where = typeof ref === 'number' ? `handle ${ref}` : `guid '${ref}'`;\n    const expected = `shared field '${field}' (${where}) resolves to an asset whose GUID is catalogued`;\n    const hint =\n      'source SceneAsset is not catalogued: call registry.catalog(guid, payload) first, ' +\n      'or load through loadByGuid() which auto-catalogs GUID-scoped assets';\n    super(`${expected} — ${hint}`);\n    this.name = 'SceneCollectAssetGuidUnresolvedError';\n    this.expected = expected;\n    this.hint = hint;\n    this.detail = typeof ref === 'number' ? { field, handle: ref } : { field, guid: ref };\n  }\n}\n\n// -- AssetRuntimeErrorCode / AssetRuntimeError closed unions --------------------\n\n/**\n * Closed union of asset-cluster error codes. AI users perform exhaustive\n * `switch (err.code)` without default; TS guards completeness.\n */\nexport type AssetRuntimeErrorCode = AssetRuntimeError['code'];\n\n/**\n * Closed union of the asset-cluster structured error classes, each carrying\n * an `AssetRuntimeErrorCode` discriminant on `.code`.\n */\nexport type AssetRuntimeError =\n  | MaterialResolvedEmptyPassesError\n  | MeshSsboCapacityExceededError\n  | MeshSsboCeilingReachedError\n  | SceneCollectEntityRefOutOfClosureError\n  | SceneCollectAssetGuidUnresolvedError;\n","// @forgeax/engine-assets-runtime -- builtin mesh handles + scene-parse handle field\n// name sets (feat-20260705-runtime-tier2-decomposition M1 / w4, D-4 F1\n// straight-cut). Pure move from asset-registry.ts; zero identifier changes.\n\nimport type { Handle } from '@forgeax/engine-types';\nimport { handleSlot, toShared } from '@forgeax/engine-types';\n\n// ─── Builtin handles (D-S9 / backward compat with hello-triangle + hello-cube) ─\n\n/**\n * Builtin unit-cube mesh handle (8 vertices + 36 indices, pos+normal\n * interleaved). Pair with `MeshFilter` to spawn a cube entity.\n *\n * @remarks Typed as `Handle<'MeshAsset', 'shared'>` — feat-20260517\n * unifies the engine-types and engine-ecs Handle brand SSOT into a single\n * `Handle<T extends string, M extends 'unique'|'shared'>` declaration\n * (research Finding 4 import-path-decoupled identity), and constructs the\n * value via the brand-creation factory `toShared<'MeshAsset'>(N)` so\n * the caller-side `as unknown as` cast is eliminated (AC-05). The\n * `'shared'` mode signals the AssetRegistry owns the lifecycle — the\n * ECS does not release the slot on despawn / removeComponent / set.\n * Runtime value is a small u32 (1).\n */\nexport const HANDLE_CUBE: Handle<'MeshAsset', 'shared'> = toShared<'MeshAsset'>(1);\n\n/**\n * Builtin triangle mesh handle (3 vertices). Pair with `MeshFilter`.\n *\n * @remarks Typed as `Handle<'MeshAsset', 'shared'>` (same narrow brand\n * as HANDLE_CUBE; constructed via the `toShared<'MeshAsset'>(N)`\n * factory per AC-05).\n */\nexport const HANDLE_TRIANGLE: Handle<'MeshAsset', 'shared'> = toShared<'MeshAsset'>(2);\n\n/**\n * Builtin unit-quad mesh handle — 4 vertices, 6 indices, 2 triangles on\n * the XY plane facing +Z. Pair with `MeshFilter` to spawn a sprite quad\n * (feat-20260520-2d-sprite-layer-mvp / M-1 / w06).\n *\n * @derives Same-shape sibling of {@link HANDLE_CUBE} / {@link HANDLE_TRIANGLE}\n *   per requirements §2.1.C: built via the `toShared<'MeshAsset'>(N)`\n *   brand-creation factory; reserved-id 3 fills the namespace hole between\n *   HANDLE_TRIANGLE=2 and FIRST_USER_HANDLE=1024 (no `BUILTIN_HANDLE_`\n *   prefix per Q2 naming decision — discoverable next to existing\n *   builtins in IDE autocomplete; charter F1 single-entry indexability).\n *\n * @reuses {@link createPlaneGeometry}(1, 1) — the procedural plane factory\n *   already produces 8-floats-per-vertex interleaved (position + normal +\n *   uv) and is then expanded to the runtime 12-floats layout (adds\n *   tangent vec4) by {@link meshFromInterleaved}. This funnels HANDLE_QUAD\n *   onto the exact same vertex pipeline branch as BUILTIN_CUBE /\n *   BUILTIN_TRIANGLE and the procedural geometry factories — zero new\n *   layout discriminator (plan-strategy §3 RT4 + D-9 + charter P4\n *   consistent abstraction).\n *\n * @reuses `PROCEDURAL_FLOATS_PER_VERTEX` = 12 from\n *   `@forgeax/engine-geometry` (the single layout SSOT; the procedural\n *   `createPlaneGeometry` factory already returns 12F via\n *   `meshFromInterleaved`).\n */\nexport const HANDLE_QUAD: Handle<'MeshAsset', 'shared'> = toShared<'MeshAsset'>(3);\n\n/**\n * Id=4 reserved builtin; occupies the next available slot under\n * FIRST_USER_HANDLE=1024. BUILTIN_SPHERE is synthesised from\n * `createSphereGeometry(1, 16, 12)` through the same\n * `meshFromInterleaved` path as BUILTIN_QUAD, so the runtime\n * 12-float stride is byte-identical to procedural output — zero\n * new layout discriminator (charter P4 consistent abstraction).\n */\nexport const HANDLE_SPHERE: Handle<'MeshAsset', 'shared'> = toShared<'MeshAsset'>(4);\n\n/**\n * Builtin cylinder mesh handle — procedural open cylinder (unit-height,\n * radius=0.5, 16 radial segments, no caps). Pair with `MeshFilter`.\n *\n * @derives Same-shape sibling of {@link HANDLE_SPHERE}: synthesised from\n *   `createCylinderGeometry(0.5, 0.5, 1, 16, 1)` through the same\n *   `meshFromInterleaved` path as BUILTIN_SPHERE, so the runtime\n *   12-float stride is byte-identical to all other built-in meshes —\n *   zero new layout discriminator (charter P4 consistent abstraction).\n *\n * @remarks Id=6 follows {@link HANDLE_NINESLICE_QUAD}=5 in the builtin slot\n *   sequence (FIRST_USER_HANDLE=1024 untouched).\n *   feat-20260701-editor-world-container-doc-ecs-collapse M0 / AC-16:\n *   GUID = deriveBuiltin('HANDLE_CYLINDER') UUIDv5\n *   (plan-strategy §2 D-6 + §5.6 builtin-guid-ssot gate)\n */\nexport const HANDLE_CYLINDER: Handle<'MeshAsset', 'shared'> = toShared<'MeshAsset'>(6);\n\n/**\n * Builtin 9-slice quad mesh handle — 4×4 grid (16 vertices, 9 sub-quads,\n * 54 indices) on the XY plane facing +Z. Pair with `MeshFilter` and a\n * `MaterialAsset` whose first pass shader is `'forgeax::sprite'` and whose\n * `values.slices` is non-zero to render a 9-sliced UI panel\n * (feat-20260527-sprite-nineslice / M2 / w9).\n *\n * @derives Same-shape sibling of {@link HANDLE_QUAD}: synthesised from\n *   `createPlaneGeometry(1, 1, 3, 3)` which subdivides the unit quad into\n *   3×3 sub-quads (9 cells). The 16 grid points and 54 indices feed\n *   {@link meshFromInterleaved} so the runtime 12-float vertex stride is\n *   byte-identical to all other built-in / procedural meshes — zero new\n *   layout discriminator (charter P4 consistent abstraction).\n *\n * @remarks Id=5 follows {@link HANDLE_SPHERE}=4 in the builtin slot\n *   sequence (FIRST_USER_HANDLE=1024 untouched). The vertex shader uses\n *   `vertex_index % 4` / `vertex_index / 4` to recover (i, j) grid\n *   coordinates and four anchor vec4s to map each grid cell to the right\n *   region of the source texture; only required when the sprite material\n *   declares non-zero `slices`. For the legacy zero-slice sprite path use\n *   {@link HANDLE_QUAD}.\n *\n * @reuses `PROCEDURAL_FLOATS_PER_VERTEX` = 12 from\n *   `@forgeax/engine-geometry` (sprite-pipeline binding table / vertex layout\n *   untouched). plan-strategy §D-2 NOTE clarifies\n *   the id=5 vs original-plan id=4 drift: HANDLE_SPHERE took id=4 in\n *   feat-20260529-fxaa-sphere-builtin before this feat landed.\n */\nexport const HANDLE_NINESLICE_QUAD: Handle<'MeshAsset', 'shared'> = toShared<'MeshAsset'>(5);\n\n/**\n * Stable GUIDs for the builtin meshes — the dash-form of\n * `deriveBuiltin('HANDLE_<NAME>')` (UUIDv5, ForgeaX namespace) in\n * `@forgeax/engine-pack`. The fixed values avoid runtime SHA-1 work when\n * constructing the builtin handle table.\n *\n * The single source of truth remains `deriveBuiltin`: a cross-package\n * guard test (`builtin-guid-ssot.test.ts`) asserts each literal equals the\n * derived value, so any drift in the derivation reds the suite. This pairs\n * the previously-disconnected dual truths (the u32 `HANDLE_*` constants and\n * the pack GUID strings) into one bidirectionally-resolvable table, so\n * `guidOf(HANDLE_CUBE)` no longer returns `undefined`\n * (docs/feedbacks/2026-06-03 §6.2 Tier 0).\n */\nexport const BUILTIN_MESH_GUIDS: ReadonlyArray<readonly [Handle<'MeshAsset', 'shared'>, string]> = [\n  [HANDLE_CUBE, 'cbe42beb-8975-5096-b3a1-3dda4cb4c077'],\n  [HANDLE_TRIANGLE, '22592f07-d967-5116-b29c-fa9781929ba8'],\n  [HANDLE_QUAD, '339338aa-a338-581c-9fc5-744267ef8a51'],\n  [HANDLE_SPHERE, '95730fd2-9846-5f84-8658-0b3c971eb263'],\n  [HANDLE_NINESLICE_QUAD, '692d38b4-8cac-5fb2-9dcf-f389e076d6bf'],\n  // feat-20260701-editor-world-container-doc-ecs-collapse M0 / AC-16:\n  // cylinder builtin handle=6, GUID = deriveBuiltin('HANDLE_CYLINDER') UUIDv5\n  // (plan-strategy §5.6 builtin-guid-ssot gate)\n  [HANDLE_CYLINDER, 'ab20af21-0764-55be-a7f2-b80ab3d46a0a'],\n];\n\n/** Resolve the stable producer GUID for one process-static builtin mesh handle. */\nexport function builtinMeshGuid(handle: Handle<string, 'shared'>): string | undefined {\n  const slot = handleSlot(handle);\n  return BUILTIN_MESH_GUIDS.find(([candidate]) => handleSlot(candidate) === slot)?.[1];\n}\n\n/**\n * Field names known to carry handle<> schema-vocab references (plan-strategy\n * D-4).  parseScenePayload uses this allowlist to replace integer values\n * with GUID strings from refs[] only for handle fields — a Transform.pos lane of 0,\n * ChildOf.parent=0 and similar non-handle integers are left untouched.\n *\n * When a new handle<> field is added to a runtime component, its field name\n * MUST be added here so parseScenePayload correctly resolves it.\n */\nexport const HANDLE_FIELD_NAMES: ReadonlySet<string> = new Set([\n  'assetHandle',\n  'material',\n  'skeleton',\n  'clip',\n  // ParticleEffectPlayer.effect (shared<ParticleEffectAsset>) uses the same\n  // scene-pack refs[] index contract as every other scalar shared field.\n  'effect',\n  'density',\n  // feat-20260630-equirect-kind-internalized-ibl-declarative-skyligh M3 / w27:\n  // Skylight.equirect + SkyboxBackground.equirect (shared<EquirectAsset>). The\n  // generic extractSceneEntityHandleGuids path already covers shared< fields by\n  // schema; this allowlist is the second scene-parse path (parseScenePayload),\n  // so the new handle field name is registered here too (R-1).\n  'equirect',\n  'iesProfile',\n  'cookie',\n]);\n\n/**\n * Field names known to carry `array<handle<X>>` schema-vocab references\n * (feat-20260608 M2 / w7: MeshRenderer.materials). Each element is a refs\n * index that resolves to a GUID string. Coexists with HANDLE_FIELD_NAMES;\n * a field name lives in exactly one set.\n */\nexport const HANDLE_ARRAY_FIELD_NAMES: ReadonlySet<string> = new Set(['materials', 'clips']);\n","// @forgeax/engine-assets-runtime -- keyed scene payload parse + ref resolution\n\nimport type { SceneAsset, SceneEntity, SceneInstanceOverride } from '@forgeax/engine-types';\nimport { HANDLE_ARRAY_FIELD_NAMES, HANDLE_FIELD_NAMES } from './handles';\n\ninterface ParseSceneError {\n  readonly entityKey: string;\n  readonly component: string;\n  readonly field: string;\n  readonly index: number;\n  readonly refsLength: number;\n}\n\nfunction isParseSceneError(value: unknown): value is ParseSceneError {\n  return typeof value === 'object' && value !== null && 'entityKey' in value && 'index' in value;\n}\n\nfunction resolveFields(\n  entityKey: string,\n  componentName: string,\n  rawFields: Record<string, unknown>,\n  refs: readonly string[] | undefined,\n): Record<string, unknown> | ParseSceneError | undefined {\n  const resolved: Record<string, unknown> = {};\n  for (const [fieldName, value] of Object.entries(rawFields)) {\n    if (HANDLE_FIELD_NAMES.has(fieldName) && value === null) {\n      resolved[fieldName] = 0;\n      continue;\n    }\n    if (\n      refs !== undefined &&\n      HANDLE_FIELD_NAMES.has(fieldName) &&\n      typeof value === 'number' &&\n      Number.isInteger(value)\n    ) {\n      if (value < 0 || value >= refs.length) {\n        return {\n          entityKey,\n          component: componentName,\n          field: fieldName,\n          index: value,\n          refsLength: refs.length,\n        };\n      }\n      resolved[fieldName] = refs[value];\n      continue;\n    }\n    if (HANDLE_ARRAY_FIELD_NAMES.has(fieldName) && Array.isArray(value)) {\n      const values: unknown[] = [];\n      for (const [arrayIndex, item] of value.entries()) {\n        if (item === null) {\n          values.push(0);\n          continue;\n        }\n        if (refs === undefined || typeof item !== 'number' || !Number.isInteger(item)) {\n          values.push(item);\n          continue;\n        }\n        if (item < 0 || item >= refs.length) {\n          return {\n            entityKey,\n            component: componentName,\n            field: `${fieldName}[${arrayIndex}]`,\n            index: item,\n            refsLength: refs.length,\n          };\n        }\n        values.push(refs[item]);\n      }\n      resolved[fieldName] = values;\n      continue;\n    }\n    resolved[fieldName] = value;\n  }\n  return resolved;\n}\n\nfunction resolveComponents(\n  entityKey: string,\n  rawComponents: unknown,\n  refs: readonly string[] | undefined,\n): Record<string, Record<string, unknown>> | ParseSceneError | undefined {\n  if (rawComponents === null || typeof rawComponents !== 'object' || Array.isArray(rawComponents))\n    return undefined;\n  const components: Record<string, Record<string, unknown>> = {};\n  for (const [componentName, rawFields] of Object.entries(\n    rawComponents as Record<string, unknown>,\n  )) {\n    if (rawFields === null || typeof rawFields !== 'object' || Array.isArray(rawFields))\n      return undefined;\n    const resolved = resolveFields(\n      entityKey,\n      componentName,\n      rawFields as Record<string, unknown>,\n      refs,\n    );\n    if (resolved === undefined) return undefined;\n    if (isParseSceneError(resolved)) return resolved;\n    components[componentName] = resolved as Record<string, unknown>;\n  }\n  return components;\n}\n\nfunction resolveSkinGuids(\n  raw: unknown,\n  refs: readonly string[] | undefined,\n): readonly string[] | undefined {\n  if (!Array.isArray(raw)) return undefined;\n  const out: string[] = [];\n  for (const value of raw) {\n    if (typeof value === 'string') {\n      out.push(value);\n    } else if (\n      typeof value === 'number' &&\n      Number.isInteger(value) &&\n      refs !== undefined &&\n      refs[value] !== undefined\n    ) {\n      out.push(refs[value] as string);\n    } else {\n      return undefined;\n    }\n  }\n  return out;\n}\n\n/** Reconstruct and resolve a keyed SceneAsset from one pack payload. */\nexport function parseScenePayload(\n  payload: Record<string, unknown>,\n  refs?: string[],\n): SceneAsset | ParseSceneError | undefined {\n  const rawEntities = payload.entities;\n  if (rawEntities === null || typeof rawEntities !== 'object' || Array.isArray(rawEntities))\n    return undefined;\n  const entities: Record<string, SceneEntity> = {};\n  for (const [entityKey, rawEntity] of Object.entries(rawEntities as Record<string, unknown>)) {\n    if (\n      entityKey.length === 0 ||\n      rawEntity === null ||\n      typeof rawEntity !== 'object' ||\n      Array.isArray(rawEntity)\n    ) {\n      return undefined;\n    }\n    const entity = rawEntity as { components?: unknown; instance?: unknown };\n    const components = resolveComponents(entityKey, entity.components ?? {}, refs);\n    if (components === undefined || isParseSceneError(components)) return components;\n    let instance: SceneEntity['instance'];\n    if (entity.instance !== undefined) {\n      if (\n        entity.instance === null ||\n        typeof entity.instance !== 'object' ||\n        Array.isArray(entity.instance)\n      )\n        return undefined;\n      const rawInstance = entity.instance as { source?: unknown; overrides?: unknown };\n      let source: string;\n      if (typeof rawInstance.source === 'string') {\n        source = rawInstance.source;\n      } else if (\n        typeof rawInstance.source === 'number' &&\n        Number.isInteger(rawInstance.source) &&\n        refs !== undefined &&\n        refs[rawInstance.source] !== undefined\n      ) {\n        source = refs[rawInstance.source] as string;\n      } else {\n        return undefined;\n      }\n      if (rawInstance.overrides !== undefined && !Array.isArray(rawInstance.overrides))\n        return undefined;\n      const overrides: SceneInstanceOverride[] = [];\n      for (const rawOverride of (rawInstance.overrides ?? []) as readonly unknown[]) {\n        if (rawOverride === null || typeof rawOverride !== 'object' || Array.isArray(rawOverride))\n          return undefined;\n        const override = rawOverride as { target?: unknown; components?: unknown };\n        if (\n          !Array.isArray(override.target) ||\n          override.target.length === 0 ||\n          override.target.some((part) => typeof part !== 'string' || part.length === 0)\n        ) {\n          return undefined;\n        }\n        const overrideComponents = resolveComponents(entityKey, override.components ?? {}, refs);\n        if (overrideComponents === undefined || isParseSceneError(overrideComponents))\n          return overrideComponents;\n        overrides.push({\n          target: [...override.target] as [string, ...string[]],\n          components: overrideComponents,\n        });\n      }\n      instance = {\n        source,\n        ...(overrides.length === 0 && rawInstance.overrides === undefined ? {} : { overrides }),\n      };\n    }\n    entities[entityKey] = {\n      components,\n      ...(instance === undefined ? {} : { instance }),\n    };\n  }\n  const skinGuids = resolveSkinGuids(payload.skinGuids, refs);\n  if (Array.isArray(payload.skinGuids) && skinGuids === undefined) return undefined;\n  return {\n    kind: 'scene',\n    entities,\n    ...(skinGuids === undefined ? {} : { skinGuids }),\n  };\n}\n","import {\n  deriveVertexLayoutProjectionFromMask,\n  type MeshCardLayout,\n  unpackInterleavedVertexAttributes,\n  type VertexLayoutProjection,\n  validateMeshCardLayout,\n} from '@forgeax/engine-geometry';\nimport {\n  decodeMeshBinHeader,\n  decodeMeshBinMorphs,\n  MESH_BIN_HEADER_BYTES,\n  type MeshBinHeader,\n} from '@forgeax/engine-pack';\nimport { err, ok, type Result, type VertexAttributeMap } from '@forgeax/engine-types';\nimport { MeshBinAssetError } from '../errors/asset';\n\nexport interface UnpackedMeshBin {\n  readonly version: 4 | 5;\n  readonly projection: VertexLayoutProjection;\n  readonly vertices: Float32Array;\n  readonly attributes: VertexAttributeMap;\n  readonly indices?: Uint16Array | Uint32Array;\n  readonly submeshes: ReadonlyArray<Record<string, unknown>>;\n  readonly cardLayout?: MeshCardLayout;\n  readonly materialSlots: readonly {\n    readonly slotName: string;\n    readonly sourceKey?: string;\n    readonly defaultMaterialRef?: number;\n  }[];\n  readonly aabb?: Float32Array;\n  readonly morphTargets?: ReadonlyArray<Record<string, Float32Array>>;\n  readonly morphWeights?: Float32Array;\n  /** Lower-detail mesh references encoded as indexes into the enclosing pack refs table. */\n  readonly lods?: readonly {\n    readonly meshRef: number;\n    readonly screenCoverage: number;\n  }[];\n  readonly lodHysteresis?: number;\n}\n\nfunction fail(\n  sourceKey: string,\n  expected: string,\n  actual: string,\n  header?: Partial<MeshBinHeader>,\n  reason: import('@forgeax/engine-types').AssetMeshBinContractViolationReason = 'header-invalid',\n  expectedFacts?: import('@forgeax/engine-types').AssetMeshBinContractFacts,\n  actualFacts?: import('@forgeax/engine-types').AssetMeshBinContractFacts,\n): Result<UnpackedMeshBin, MeshBinAssetError> {\n  return err(\n    new MeshBinAssetError({\n      sourceKey,\n      expected,\n      actual,\n      ...(header === undefined ? {} : { header }),\n      reason,\n      ...(expectedFacts === undefined ? {} : { expectedFacts }),\n      ...(actualFacts === undefined ? {} : { actualFacts }),\n    }),\n  );\n}\n\nexport function unpackMeshBin(\n  bytes: Uint8Array,\n  sourceKey: string,\n): Result<UnpackedMeshBin, MeshBinAssetError> {\n  const headerResult = decodeMeshBinHeader(bytes, sourceKey);\n  if (!headerResult.ok) {\n    const reason =\n      headerResult.error.code === 'mesh-bin-header-truncated'\n        ? 'header-truncated'\n        : headerResult.error.code === 'mesh-bin-version-unsupported'\n          ? 'version-unsupported'\n          : 'header-invalid';\n    const actualFacts = {\n      byteLength: bytes.byteLength,\n      ...(bytes.byteLength >= 4\n        ? {\n            version: new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(\n              0,\n              true,\n            ),\n          }\n        : {}),\n    };\n    return fail(\n      sourceKey,\n      headerResult.error.expected,\n      headerResult.error.actual,\n      undefined,\n      reason,\n      reason === 'header-truncated'\n        ? { field: 'byteLength', byteLength: MESH_BIN_HEADER_BYTES }\n        : reason === 'version-unsupported'\n          ? { field: 'version', version: 5 }\n          : undefined,\n      actualFacts,\n    );\n  }\n  const header = headerResult.value;\n  const projectionResult = deriveVertexLayoutProjectionFromMask(header.mask);\n  if (!projectionResult.ok) {\n    return fail(\n      sourceKey,\n      projectionResult.error.expected,\n      `mask=${header.mask}`,\n      header,\n      'projection-mismatch',\n      {\n        field: 'mask',\n        mask: projectionResult.error.detail.knownMask,\n      },\n      {\n        field: 'mask',\n        mask: header.mask,\n        projectionVersion: header.projectionVersion,\n        stride: header.stride,\n        digest: header.digest,\n      },\n    );\n  }\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 fail(\n      sourceKey,\n      'wire projection version, mask, stride, and digest to match geometry projection',\n      `projection=${projection.schemaVersion}/${projection.arrayStride}/${projection.digest}; wire=${header.projectionVersion}/${header.stride}/${header.digest}`,\n      header,\n      'projection-mismatch',\n      {\n        field: 'projectionVersion',\n        projectionVersion: projection.schemaVersion,\n        mask: projection.mask,\n        stride: projection.arrayStride,\n        digest: projection.digest,\n      },\n    );\n  }\n  const payloadBytes =\n    header.vertexBytes + header.morphBytes + header.indexBytes + header.jsonBytes;\n  if (MESH_BIN_HEADER_BYTES + payloadBytes !== bytes.byteLength) {\n    return fail(\n      sourceKey,\n      `exactly ${MESH_BIN_HEADER_BYTES + payloadBytes} bytes`,\n      `${bytes.byteLength} bytes`,\n      header,\n      'payload-length-mismatch',\n      { field: 'byteLength', byteLength: MESH_BIN_HEADER_BYTES + payloadBytes },\n      {\n        field: 'byteLength',\n        byteLength: bytes.byteLength,\n        vertexBytes: header.vertexBytes,\n        indexBytes: header.indexBytes,\n        jsonBytes: header.jsonBytes,\n      },\n    );\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 {\n      indices = new Uint32Array(header.indexCount);\n      new Uint8Array(indices.buffer).set(indexBytes);\n    }\n    offset += header.indexBytes;\n  }\n  const jsonBytes = bytes.subarray(offset, offset + header.jsonBytes);\n  let meta: {\n    submeshes?: ReadonlyArray<Record<string, unknown>>;\n    cardLayout?: MeshCardLayout;\n    materialSlots?: readonly {\n      readonly slotName: string;\n      readonly sourceKey?: string;\n      readonly defaultMaterialRef?: number;\n    }[];\n    aabb?: readonly number[];\n    morphTargets?: ReadonlyArray<Record<string, readonly number[]>>;\n    morphWeights?: readonly number[];\n    morphTargetMasks?: unknown;\n    lods?: readonly {\n      readonly meshRef?: unknown;\n      readonly screenCoverage?: unknown;\n    }[];\n    lodHysteresis?: unknown;\n  };\n  try {\n    meta = JSON.parse(new TextDecoder().decode(jsonBytes)) as typeof meta;\n  } catch (error) {\n    return fail(\n      sourceKey,\n      'valid mesh-bin JSON metadata',\n      error instanceof Error ? error.message : String(error),\n      header,\n      'metadata-invalid',\n      { field: 'metadata' },\n      { field: 'metadata' },\n    );\n  }\n  if (\n    meta === null ||\n    typeof meta !== 'object' ||\n    Array.isArray(meta) ||\n    !Array.isArray(meta.submeshes) ||\n    meta.submeshes.length === 0 ||\n    !Array.isArray(meta.materialSlots)\n  ) {\n    return fail(\n      sourceKey,\n      'non-empty submeshes and materialSlots metadata',\n      'metadata table missing',\n      header,\n      'metadata-invalid',\n      { field: 'metadata' },\n      { field: 'metadata' },\n    );\n  }\n  let lods:\n    | readonly {\n        readonly meshRef: number;\n        readonly screenCoverage: number;\n      }[]\n    | undefined;\n  if (meta.lods !== undefined) {\n    if (!Array.isArray(meta.lods) || meta.lods.length > 7) {\n      return fail(\n        sourceKey,\n        'LOD metadata to contain at most seven lower-detail levels',\n        'lods is not an array or exceeds the level limit',\n        header,\n        'metadata-invalid',\n        { field: 'metadata' },\n        { field: 'metadata' },\n      );\n    }\n    let previousCoverage = 1;\n    const decodedLods: {\n      readonly meshRef: number;\n      readonly screenCoverage: number;\n    }[] = [];\n    for (const [lodIndex, rawLod] of meta.lods.entries()) {\n      if (rawLod === null || typeof rawLod !== 'object') {\n        return fail(\n          sourceKey,\n          `LOD ${lodIndex} metadata object`,\n          'LOD entry is not an object',\n          header,\n          'metadata-invalid',\n          { field: 'metadata' },\n          { field: 'metadata' },\n        );\n      }\n      const meshRef = rawLod.meshRef;\n      const screenCoverage = rawLod.screenCoverage;\n      if (!Number.isInteger(meshRef) || (meshRef as number) < 0) {\n        return fail(\n          sourceKey,\n          `LOD ${lodIndex} meshRef to be a non-negative integer`,\n          `meshRef=${String(meshRef)}`,\n          header,\n          'metadata-invalid',\n          { field: 'metadata' },\n          { field: 'metadata' },\n        );\n      }\n      if (\n        typeof screenCoverage !== 'number' ||\n        !Number.isFinite(screenCoverage) ||\n        screenCoverage <= 0 ||\n        screenCoverage > 1 ||\n        screenCoverage >= previousCoverage\n      ) {\n        return fail(\n          sourceKey,\n          `LOD ${lodIndex} screenCoverage to be finite, in (0, 1], and strictly decreasing`,\n          `screenCoverage=${String(screenCoverage)}`,\n          header,\n          'metadata-invalid',\n          { field: 'metadata' },\n          { field: 'metadata' },\n        );\n      }\n      decodedLods.push({ meshRef: meshRef as number, screenCoverage });\n      previousCoverage = screenCoverage;\n    }\n    lods = decodedLods;\n  }\n  let lodHysteresis: number | undefined;\n  if (meta.lodHysteresis !== undefined) {\n    if (\n      typeof meta.lodHysteresis !== 'number' ||\n      !Number.isFinite(meta.lodHysteresis) ||\n      meta.lodHysteresis < 0 ||\n      meta.lodHysteresis >= 1\n    ) {\n      return fail(\n        sourceKey,\n        'lodHysteresis to be finite and in [0, 1)',\n        `lodHysteresis=${String(meta.lodHysteresis)}`,\n        header,\n        'metadata-invalid',\n        { field: 'metadata' },\n        { field: 'metadata' },\n      );\n    }\n    lodHysteresis = meta.lodHysteresis;\n  }\n  const attributes = unpackInterleavedVertexAttributes(vertices, projection);\n  if (attributes === undefined)\n    return fail(\n      sourceKey,\n      'whole canonical vertices',\n      'vertex stride mismatch',\n      header,\n      'attribute-invalid',\n    );\n  for (const attribute of projection.attributes) {\n    const value = attributes[attribute.key];\n    if (value === undefined)\n      return fail(\n        sourceKey,\n        `decoded ${attribute.key} attribute`,\n        'attribute missing',\n        header,\n        'attribute-invalid',\n        {\n          field: 'attribute',\n          attribute: attribute.key,\n          expectedLength:\n            header.vertexCount * (attribute.byteLength / (attribute.format === 'uint16x4' ? 2 : 4)),\n        },\n        {\n          field: 'attribute',\n          attribute: attribute.key,\n          mask: header.mask,\n          stride: header.stride,\n          vertexCount: header.vertexCount,\n        },\n      );\n    if (value instanceof ArrayBuffer) continue;\n    for (let elementIndex = 0; elementIndex < value.length; elementIndex++) {\n      const component = value[elementIndex] as number;\n      if (!Number.isFinite(component))\n        return fail(\n          sourceKey,\n          'finite vertex payload',\n          `non-finite ${attribute.key}`,\n          header,\n          'payload-non-finite',\n          { field: 'attribute', attribute: attribute.key },\n          {\n            field: 'attribute',\n            attribute: attribute.key,\n            mask: header.mask,\n            stride: header.stride,\n            vertexCount: header.vertexCount,\n            elementIndex,\n            actualValue: Number.isNaN(component)\n              ? 'nan'\n              : component === Number.POSITIVE_INFINITY\n                ? 'positive-infinity'\n                : 'negative-infinity',\n          },\n        );\n    }\n  }\n  let morphTargets: ReadonlyArray<Record<string, Float32Array>> | undefined;\n  try {\n    if (header.version === 5) {\n      if (meta.morphTargets !== undefined)\n        throw new TypeError('v5 morph targets must use binary lanes');\n      morphTargets = decodeMeshBinMorphs(morphBytes, header.vertexCount, meta.morphTargetMasks);\n    } else {\n      if (meta.morphTargetMasks !== undefined)\n        throw new TypeError('v4 cannot declare binary morph lanes');\n      morphTargets = meta.morphTargets?.map((target) =>\n        Object.fromEntries(\n          Object.entries(target).map(([key, value]) => [key, new Float32Array(value)]),\n        ),\n      );\n    }\n  } catch (error) {\n    return fail(\n      sourceKey,\n      'valid morph lane metadata and finite values',\n      String(error),\n      header,\n      'metadata-invalid',\n    );\n  }\n  if (\n    meta.morphWeights !== undefined &&\n    (!Array.isArray(meta.morphWeights) ||\n      !meta.morphWeights.every(\n        (value) => typeof value === 'number' && Number.isFinite(Math.fround(value)),\n      ) ||\n      (morphTargets !== undefined && meta.morphWeights.length !== morphTargets.length))\n  )\n    return fail(\n      sourceKey,\n      'finite morph weights matching the target count',\n      'invalid morph weights',\n      header,\n      'metadata-invalid',\n    );\n  if (meta.cardLayout !== undefined && !validateMeshCardLayout(meta.cardLayout).ok)\n    return fail(\n      sourceKey,\n      'valid whole-mesh card layout',\n      'invalid card metadata',\n      header,\n      'metadata-invalid',\n    );\n  const mesh: UnpackedMeshBin = {\n    version: header.version,\n    projection,\n    vertices,\n    attributes,\n    ...(indices === undefined ? {} : { indices }),\n    submeshes: meta.submeshes,\n    ...(meta.cardLayout === undefined ? {} : { cardLayout: meta.cardLayout }),\n    materialSlots: meta.materialSlots,\n    ...(meta.aabb === undefined ? {} : { aabb: new Float32Array(meta.aabb) }),\n    ...(morphTargets === undefined ? {} : { morphTargets }),\n    ...(meta.morphWeights === undefined\n      ? {}\n      : { morphWeights: new Float32Array(meta.morphWeights) }),\n    ...(lods === undefined ? {} : { lods }),\n    ...(lodHysteresis === undefined ? {} : { lodHysteresis }),\n  };\n  return ok(mesh);\n}\n","import type { CodecError, TranscodeModel } from '@forgeax/engine-codec';\nimport {\n  ktx2ColorSpace,\n  parseKtx2,\n  selectTranscodeTarget,\n  transcodeBasis,\n  transcodeKtx2,\n} from '@forgeax/engine-codec';\nimport { AssetGuid } from '@forgeax/engine-pack/guid';\nimport type {\n  AssetCodec,\n  AssetCodecFailureDetail,\n  EquirectAsset,\n  FontAsset,\n  LoadContext,\n  Loader,\n  LoaderAsyncResult,\n  RenderPipelineAsset,\n  TextureAsset,\n  TilesetAsset,\n} from '@forgeax/engine-types';\nimport { AssetError } from '@forgeax/engine-types';\nimport type { PackLoaderInput } from '../loader-registry';\nimport { traceAssetLoadPhase } from '../registry/load-trace';\n\ntype PackArtifact = PackLoaderInput['artifacts'][string];\n\ntype CodecFailureProjection = {\n  readonly code: string;\n  readonly expected: string;\n  readonly hint: string;\n  readonly detail: Readonly<Record<string, unknown>>;\n};\n\nfunction firstArtifact(input: PackLoaderInput): PackArtifact | undefined {\n  return input.artifacts.body ?? Object.values(input.artifacts)[0];\n}\n\nfunction payloadNumber(payload: Record<string, unknown>, key: string, fallback: number): number {\n  const value = payload[key];\n  return typeof value === 'number' ? value : fallback;\n}\n\nfunction payloadColorSpace(payload: Record<string, unknown>): 'srgb' | 'linear' {\n  return payload.colorSpace === 'linear' ? 'linear' : 'srgb';\n}\n\nfunction payloadTextureShape(payload: Record<string, unknown>): TextureAsset['shape'] | undefined {\n  const shape = payload.shape;\n  if (!record(shape) || typeof shape.viewDimension !== 'string' || !record(shape.extent)) {\n    return undefined;\n  }\n  const { width, height, layers, depth } = shape.extent;\n  if (!positiveInteger(width) || !positiveInteger(height)) return undefined;\n  if (shape.viewDimension === '2d' && layers === undefined && depth === undefined) {\n    return { viewDimension: '2d', extent: { width, height } };\n  }\n  if (shape.viewDimension === '2d-array' && positiveInteger(layers) && depth === undefined) {\n    return { viewDimension: '2d-array', extent: { width, height, layers } };\n  }\n  if (shape.viewDimension === '3d' && positiveInteger(depth) && layers === undefined) {\n    return { viewDimension: '3d', extent: { width, height, depth } };\n  }\n  return undefined;\n}\n\nfunction payloadTextureMips(payload: Record<string, unknown>): TextureAsset['mips'] | undefined {\n  const mips = payload.mips;\n  if (!record(mips) || typeof mips.kind !== 'string') return undefined;\n  if (mips.kind === 'none') return { kind: 'none' };\n  if (mips.kind === 'generate') return { kind: 'generate' };\n  if (mips.kind === 'packed' && positiveInteger(mips.levelCount)) {\n    return { kind: 'packed', levelCount: mips.levelCount };\n  }\n  return undefined;\n}\n\nfunction invalidPackAsset<T>(input: PackLoaderInput, expected: string): LoaderAsyncResult<T> {\n  return {\n    ok: false,\n    error: new AssetError({\n      code: 'asset-parse-failed',\n      expected,\n      hint: `Pack v2 asset ${input.guid} must provide an asset-local artifact`,\n      detail: { sourcePath: input.guid },\n    }),\n  };\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction finiteNumber(value: unknown): value is number {\n  return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction positiveInteger(value: unknown): value is number {\n  return finiteNumber(value) && Number.isInteger(value) && value > 0;\n}\n\nfunction validRenderPipelineConfig(value: unknown): value is Record<string, unknown> {\n  if (!record(value)) return false;\n  const passCount = value.passCount;\n  if (passCount !== undefined && !positiveInteger(passCount)) return false;\n  const clusterGrid = value.clusterGrid;\n  if (clusterGrid !== undefined) {\n    if (\n      !record(clusterGrid) ||\n      !['x', 'y', 'z'].every((axis) => {\n        const size = clusterGrid[axis];\n        return positiveInteger(size) && size <= 64;\n      })\n    ) {\n      return false;\n    }\n  }\n  const ssao = value.ssao;\n  if (ssao !== undefined && (!record(ssao) || typeof ssao.enabled !== 'boolean')) return false;\n  const outputDither = value.outputDither;\n  if (outputDither !== undefined && typeof outputDither !== 'boolean') return false;\n  const gpuOcclusion = value.gpuOcclusion;\n  if (gpuOcclusion !== undefined && typeof gpuOcclusion !== 'boolean') return false;\n  const postEffects = value.postEffects;\n  return (\n    postEffects === undefined ||\n    (Array.isArray(postEffects) &&\n      postEffects.every((effect) => typeof effect === 'string' && effect.length > 0))\n  );\n}\n\nfunction validTilesetRegion(value: unknown, atlasCount: number): boolean {\n  if (!record(value)) return false;\n  const { x, y, width, height, atlasIndex } = value;\n  return (\n    finiteNumber(x) &&\n    finiteNumber(y) &&\n    positiveInteger(width) &&\n    positiveInteger(height) &&\n    (atlasIndex === undefined ||\n      (typeof atlasIndex === 'number' &&\n        Number.isInteger(atlasIndex) &&\n        atlasIndex >= 0 &&\n        atlasIndex < atlasCount))\n  );\n}\n\nfunction validTilesetTile(value: unknown, regionCount: number): boolean {\n  if (!record(value)) return false;\n  const regionIndex = value.regionIndex;\n  return (\n    typeof regionIndex === 'number' &&\n    Number.isInteger(regionIndex) &&\n    regionIndex >= 0 &&\n    regionIndex < regionCount\n  );\n}\n\nfunction validAtlasSize(value: unknown): boolean {\n  return record(value) && positiveInteger(value.pixelWidth) && positiveInteger(value.pixelHeight);\n}\n\nfunction readJsonArtifact(\n  input: PackLoaderInput,\n  kind: string,\n): Record<string, unknown> | undefined {\n  const artifact = firstArtifact(input);\n  if (artifact === undefined) return undefined;\n  try {\n    const value: unknown = JSON.parse(new TextDecoder().decode(artifact.bytes));\n    return record(value) && value.kind === kind ? value : undefined;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction renderPipelineDescriptor(value: Record<string, unknown>): RenderPipelineAsset | undefined {\n  if (value.kind !== 'render-pipeline') return undefined;\n  const pipelineId = value.pipelineId;\n  if (pipelineId !== 'forgeax::standard') return undefined;\n  const renderPath = value.renderPath;\n  if (renderPath !== undefined && renderPath !== 'forward' && renderPath !== 'deferred') {\n    return undefined;\n  }\n  const config = value.config;\n  if (config !== undefined && !validRenderPipelineConfig(config)) return undefined;\n  return {\n    kind: 'render-pipeline',\n    pipelineId,\n    ...(renderPath === undefined ? {} : { renderPath }),\n    ...(config === undefined\n      ? {}\n      : { config: config as NonNullable<RenderPipelineAsset['config']> }),\n  };\n}\n\nfunction tilesetDescriptor(\n  value: Record<string, unknown>,\n  refs: readonly string[],\n): TilesetAsset | undefined {\n  if (value.kind !== 'tileset') return undefined;\n  const rawAtlases = value.atlases;\n  if (!Array.isArray(rawAtlases) || rawAtlases.length === 0) return undefined;\n  if (!rawAtlases.every((atlas) => typeof atlas === 'string' && atlas.length > 0)) return undefined;\n  const atlases = rawAtlases as string[];\n  if (atlases.length !== refs.length || atlases.some((guid, index) => guid !== refs[index])) {\n    return undefined;\n  }\n  const { tileWidth, tileHeight, columns, rows, regions, tiles, atlasSizes } = value;\n  if (\n    typeof tileWidth !== 'number' ||\n    tileWidth <= 0 ||\n    typeof tileHeight !== 'number' ||\n    tileHeight <= 0 ||\n    typeof columns !== 'number' ||\n    !Number.isInteger(columns) ||\n    columns <= 0 ||\n    typeof rows !== 'number' ||\n    !Number.isInteger(rows) ||\n    rows <= 0 ||\n    !Array.isArray(regions) ||\n    !regions.every((region) => record(region) && validTilesetRegion(region, atlases.length)) ||\n    !Array.isArray(tiles) ||\n    !tiles.every((tile) => validTilesetTile(tile, regions.length)) ||\n    (atlasSizes !== undefined &&\n      (!Array.isArray(atlasSizes) ||\n        atlasSizes.length !== atlases.length ||\n        !atlasSizes.every((size) => validAtlasSize(size))))\n  ) {\n    return undefined;\n  }\n  return {\n    kind: 'tileset',\n    atlases: [...atlases],\n    tileWidth,\n    tileHeight,\n    columns,\n    rows,\n    regions: regions as TilesetAsset['regions'],\n    tiles: tiles as TilesetAsset['tiles'],\n    ...(Array.isArray(atlasSizes)\n      ? { atlasSizes: atlasSizes as NonNullable<TilesetAsset['atlasSizes']> }\n      : {}),\n  };\n}\n\nfunction codecProfile(codec: AssetCodec | undefined): string | undefined {\n  return codec?.profile;\n}\n\nexport type CodecContextFailure =\n  | {\n      readonly code: 'basis-profile-unsupported';\n      readonly detail: { readonly profile: string };\n    }\n  | {\n      readonly code: 'ktx2-color-space-mismatch';\n      readonly detail: {\n        readonly authoredColorSpace: 'srgb' | 'linear';\n        readonly dfdColorSpace: 'srgb' | 'linear' | 'unknown';\n      };\n    };\n\nfunction projectCodecFailureDetail(\n  input: PackLoaderInput,\n  codec: AssetCodec,\n  caps: LoadContext['transcodeCaps'],\n  failure: CodecFailureProjection,\n  targetFormat?: GPUTextureFormat,\n): AssetCodecFailureDetail {\n  return {\n    sourcePath: input.guid,\n    codecCode: failure.code,\n    codecExpected: failure.expected,\n    codecHint: failure.hint,\n    codecDetail: failure.detail,\n    container: codec.container ?? 'basis',\n    ...(codec.profile === undefined ? {} : { profile: codec.profile }),\n    ...(targetFormat === undefined ? {} : { targetFormat }),\n    capabilities: caps,\n  };\n}\n\nfunction codecFailure(\n  input: PackLoaderInput,\n  codec: AssetCodec,\n  caps: LoadContext['transcodeCaps'],\n  failure: CodecError['error'],\n  targetFormat?: GPUTextureFormat,\n): AssetError {\n  const detail = projectCodecFailureDetail(input, codec, caps, failure, targetFormat);\n  return new AssetError({\n    code: 'asset-parse-failed',\n    expected: failure.expected,\n    hint: failure.hint,\n    detail,\n  });\n}\n\nfunction codecContextFailure(\n  input: PackLoaderInput,\n  codec: AssetCodec,\n  caps: LoadContext['transcodeCaps'],\n  failure: CodecContextFailure,\n  expected: string,\n  hint: string,\n  targetFormat?: GPUTextureFormat,\n): AssetError {\n  const detail = projectCodecFailureDetail(\n    input,\n    codec,\n    caps,\n    {\n      code: failure.code,\n      expected,\n      hint,\n      detail: failure.detail,\n    },\n    targetFormat,\n  );\n  return new AssetError({\n    code: 'asset-parse-failed',\n    expected,\n    hint,\n    detail,\n  });\n}\n\nfunction transcodeModel(profile: string): TranscodeModel | undefined {\n  if (profile === 'etc1s') return 'etc1s';\n  if (profile === 'uastc' || profile === 'uastc-ldr') return 'uastc-ldr';\n  if (profile === 'uastc-hdr') return 'uastc-hdr';\n  return undefined;\n}\n\nasync function loadTexturePack(\n  input: PackLoaderInput,\n  ctx: LoadContext,\n): Promise<LoaderAsyncResult<TextureAsset>> {\n  traceAssetLoadPhase('texture.loader.start', {\n    guid: input.guid,\n    detail: { codec: input.artifacts.body?.descriptor.assetCodec?.name },\n  });\n  const artifact = firstArtifact(input);\n  if (artifact === undefined)\n    return invalidPackAsset<TextureAsset>(input, 'texture asset-local image artifact');\n  const payload = input.payload;\n  const colorSpace = payloadColorSpace(payload);\n  const codec = artifact.descriptor.assetCodec;\n  const profile = codecProfile(codec);\n  const model =\n    codec?.name === 'basis' && profile !== undefined ? transcodeModel(profile) : undefined;\n\n  const rawBasis = codec?.name === 'basis' && codec.container === 'basis';\n  if (rawBasis && model === undefined) {\n    return {\n      ok: false,\n      error: codecContextFailure(\n        input,\n        codec,\n        ctx.transcodeCaps,\n        {\n          code: 'basis-profile-unsupported',\n          detail: { profile: codec.profile ?? 'missing' },\n        },\n        'raw Basis artifact with an explicit ETC1S or UASTC-LDR profile',\n        'set assetCodec.profile to etc1s or uastc-ldr and re-cook the source',\n      ),\n    };\n  }\n\n  if (model !== undefined && codec !== undefined) {\n    try {\n      let parsedKtx: Parameters<typeof transcodeKtx2>[0] | undefined;\n      if (!rawBasis) {\n        traceAssetLoadPhase('codec.ktx2.parse.start', { guid: input.guid });\n        const parsed = await parseKtx2(artifact.bytes);\n        traceAssetLoadPhase('codec.ktx2.parse.complete', {\n          guid: input.guid,\n          detail: { ok: parsed.ok },\n        });\n        if (!parsed.ok) {\n          return {\n            ok: false,\n            error: codecFailure(input, codec, ctx.transcodeCaps, parsed.error),\n          };\n        }\n        const projectedColorSpace = ktx2ColorSpace(parsed.value);\n        if (projectedColorSpace === undefined || projectedColorSpace !== colorSpace) {\n          return {\n            ok: false,\n            error: codecContextFailure(\n              input,\n              codec,\n              ctx.transcodeCaps,\n              {\n                code: 'ktx2-color-space-mismatch',\n                detail: {\n                  authoredColorSpace: colorSpace,\n                  dfdColorSpace: projectedColorSpace ?? 'unknown',\n                },\n              },\n              'Basis KTX2 DFD transfer function matching the texture colorSpace',\n              'align the texture payload colorSpace with the KTX2 DFD and re-cook the source',\n            ),\n          };\n        }\n        parsedKtx = parsed.value;\n      }\n      const target = selectTranscodeTarget(\n        { model, srgb: colorSpace === 'srgb', channels: 'rgba' },\n        ctx.transcodeCaps,\n      );\n      const phase = rawBasis ? 'codec.basis' : 'codec.ktx2';\n      traceAssetLoadPhase(`${phase}.transcode.start`, {\n        guid: input.guid,\n        detail: { target },\n      });\n      const transcoded =\n        parsedKtx === undefined\n          ? await transcodeBasis(artifact.bytes, target)\n          : await transcodeKtx2(parsedKtx, target);\n      traceAssetLoadPhase(`${phase}.transcode.complete`, {\n        guid: input.guid,\n        detail: { ok: transcoded.ok, target },\n      });\n      if (!transcoded.ok) {\n        return {\n          ok: false,\n          error: codecFailure(input, codec, ctx.transcodeCaps, transcoded.error, target),\n        };\n      }\n      const data = new Uint8Array(\n        transcoded.value.mips.reduce((size, mip) => size + mip.data.length, 0),\n      );\n      let offset = 0;\n      for (const mip of transcoded.value.mips) {\n        data.set(mip.data, offset);\n        offset += mip.data.length;\n      }\n      return {\n        ok: true,\n        value: {\n          kind: 'texture',\n          shape: {\n            viewDimension: '2d',\n            extent: { width: transcoded.value.width, height: transcoded.value.height },\n          },\n          format: target,\n          data,\n          colorSpace,\n          mips: { kind: 'packed', levelCount: Math.max(1, transcoded.value.mips.length) },\n        },\n      };\n    } catch (error) {\n      if (!rawBasis && error instanceof AssetError) return { ok: false, error };\n      const expected = rawBasis\n        ? 'loadable raw Basis texture artifact'\n        : 'loadable Basis KTX2 texture artifact';\n      const hint = error instanceof Error ? error.message : String(error);\n      return {\n        ok: false,\n        error: new AssetError({\n          code: 'asset-fetch-failed',\n          expected,\n          hint,\n          detail: {\n            sourcePath: input.guid,\n            codecCode: 'runtime-loader-exception',\n            codecExpected: expected,\n            codecHint: hint,\n            codecDetail: { reason: 'runtime-loader-exception' },\n            container: codec.container ?? (rawBasis ? 'basis' : 'ktx2'),\n            ...(codec.profile === undefined ? {} : { profile: codec.profile }),\n            capabilities: ctx.transcodeCaps,\n          },\n        }),\n      };\n    }\n  }\n\n  const shape = payloadTextureShape(payload);\n  const mips = payloadTextureMips(payload);\n  if (shape === undefined || mips === undefined) {\n    return invalidPackAsset<TextureAsset>(\n      input,\n      'texture payload with a valid shape and mip policy',\n    );\n  }\n  return {\n    ok: true,\n    value: {\n      kind: 'texture',\n      shape,\n      format: (payload.format ??\n        (colorSpace === 'srgb' ? 'rgba8unorm-srgb' : 'rgba8unorm')) as GPUTextureFormat,\n      data: artifact.bytes,\n      colorSpace,\n      mips,\n    },\n  };\n}\n\nasync function loadEquirectPack(input: PackLoaderInput): Promise<LoaderAsyncResult<EquirectAsset>> {\n  const artifact = firstArtifact(input);\n  if (artifact === undefined)\n    return invalidPackAsset<EquirectAsset>(input, 'equirect asset-local image artifact');\n  const payload = input.payload;\n  return {\n    ok: true,\n    value: {\n      kind: 'equirect',\n      width: payloadNumber(payload, 'width', 0),\n      height: payloadNumber(payload, 'height', 0),\n      format: (payload.format ?? 'rgba16float') as GPUTextureFormat,\n      data: artifact.bytes,\n      colorSpace: payloadColorSpace(payload),\n    },\n  };\n}\n\nfunction parseGlyphs(value: unknown): FontAsset['glyphs'] {\n  if (typeof value !== 'object' || value === null) return {};\n  const glyphs: FontAsset['glyphs'] = {};\n  for (const [codepoint, raw] of Object.entries(value as Record<string, unknown>)) {\n    if (typeof raw !== 'object' || raw === null) continue;\n    const metric = raw as Record<string, unknown>;\n    const size = metric.size as Record<string, unknown> | undefined;\n    const region = metric.region as Record<string, unknown> | undefined;\n    if (\n      typeof metric.advance !== 'number' ||\n      typeof metric.bearingX !== 'number' ||\n      typeof metric.bearingY !== 'number' ||\n      typeof size?.w !== 'number' ||\n      typeof size.h !== 'number' ||\n      typeof region?.x !== 'number' ||\n      typeof region.y !== 'number' ||\n      typeof region.w !== 'number' ||\n      typeof region.h !== 'number'\n    ) {\n      continue;\n    }\n    glyphs[Number(codepoint)] = {\n      advance: metric.advance,\n      bearingX: metric.bearingX,\n      bearingY: metric.bearingY,\n      size: { w: size.w, h: size.h },\n      region: { x: region.x, y: region.y, w: region.w, h: region.h },\n    };\n  }\n  return glyphs;\n}\n\nasync function loadFontPack(\n  input: PackLoaderInput,\n  ctx: LoadContext,\n): Promise<LoaderAsyncResult<FontAsset>> {\n  const payload = input.payload;\n  const atlasGuid = payload.atlasGuid;\n  const samplerGuid = payload.samplerGuid;\n  const common = payload.common;\n  if (\n    typeof atlasGuid !== 'string' ||\n    typeof samplerGuid !== 'string' ||\n    typeof common !== 'object' ||\n    common === null\n  ) {\n    return invalidPackAsset<FontAsset>(\n      input,\n      'font payload with atlasGuid, samplerGuid, and common',\n    );\n  }\n  const parsedAtlas = AssetGuid.parse(atlasGuid);\n  const parsedSampler = AssetGuid.parse(samplerGuid);\n  if (!parsedAtlas.ok) return { ok: false, error: parsedAtlas.error };\n  if (!parsedSampler.ok) return { ok: false, error: parsedSampler.error };\n  const atlasResolved = await ctx.resolveRef(atlasGuid);\n  if (!atlasResolved.ok) return atlasResolved;\n  const samplerResolved = await ctx.resolveRef(samplerGuid);\n  if (!samplerResolved.ok) return samplerResolved;\n  const commonRecord = common as Record<string, unknown>;\n  const commonFields = [\n    'lineHeight',\n    'base',\n    'distanceRange',\n    'pxRange',\n    'atlasWidth',\n    'atlasHeight',\n  ];\n  if (commonFields.some((key) => typeof commonRecord[key] !== 'number')) {\n    return invalidPackAsset<FontAsset>(input, 'font common block with numeric layout fields');\n  }\n  return {\n    ok: true,\n    value: {\n      kind: 'font',\n      atlas: parsedAtlas.value,\n      sampler: parsedSampler.value,\n      glyphs: parseGlyphs(payload.glyphs),\n      common: {\n        lineHeight: commonRecord.lineHeight as number,\n        base: commonRecord.base as number,\n        distanceRange: commonRecord.distanceRange as number,\n        pxRange: commonRecord.pxRange as number,\n        atlasWidth: commonRecord.atlasWidth as number,\n        atlasHeight: commonRecord.atlasHeight as number,\n      },\n    },\n  };\n}\n\nexport const textureLoader: Loader = {\n  kind: 'texture',\n  load: () => undefined,\n  loadPack: loadTexturePack,\n};\n\nexport const equirectLoader: Loader = {\n  kind: 'equirect',\n  load: () => undefined,\n  loadPack: loadEquirectPack,\n};\n\nexport const fontLoader: Loader = {\n  kind: 'font',\n  load: () => undefined,\n  loadPack: loadFontPack,\n};\n\nexport const renderPipelineLoader: Loader = {\n  kind: 'render-pipeline',\n  load: (payload) => renderPipelineDescriptor({ ...payload, kind: 'render-pipeline' }),\n  loadPack: async (input) => {\n    if (firstArtifact(input) === undefined) {\n      const value = renderPipelineDescriptor({ ...input.payload, kind: 'render-pipeline' });\n      return value === undefined\n        ? invalidPackAsset<RenderPipelineAsset>(input, 'a valid render-pipeline descriptor')\n        : { ok: true, value };\n    }\n    const payload = readJsonArtifact(input, 'render-pipeline');\n    const value = payload === undefined ? undefined : renderPipelineDescriptor(payload);\n    return payload === undefined\n      ? invalidPackAsset<RenderPipelineAsset>(input, 'render-pipeline JSON descriptor artifact')\n      : value === undefined\n        ? invalidPackAsset<RenderPipelineAsset>(input, 'a complete render-pipeline descriptor')\n        : { ok: true, value };\n  },\n};\n\nexport const tilesetLoader: Loader = {\n  kind: 'tileset',\n  load: (payload, refs) => {\n    const rawAtlases = payload.atlases;\n    const resolved = Array.isArray(rawAtlases)\n      ? rawAtlases.map((value) => (typeof value === 'number' ? refs?.[value] : value))\n      : undefined;\n    return resolved === undefined || resolved.some((value) => typeof value !== 'string')\n      ? undefined\n      : tilesetDescriptor({ ...payload, kind: 'tileset', atlases: resolved }, resolved);\n  },\n  loadPack: async (input) => {\n    if (firstArtifact(input) === undefined) {\n      const value = tilesetDescriptor({ ...input.payload, kind: 'tileset' }, input.refs);\n      return value === undefined\n        ? invalidPackAsset<TilesetAsset>(input, 'a valid tileset descriptor')\n        : { ok: true, value };\n    }\n    const payload = readJsonArtifact(input, 'tileset');\n    const value = payload === undefined ? undefined : tilesetDescriptor(payload, input.refs);\n    return payload === undefined\n      ? invalidPackAsset<TilesetAsset>(input, 'tileset JSON descriptor artifact')\n      : value === undefined\n        ? invalidPackAsset<TilesetAsset>(input, 'a tileset descriptor matching envelope refs')\n        : { ok: true, value };\n  },\n};\n\nexport const PACK_ARTIFACT_LOADERS: readonly Loader[] = [\n  textureLoader,\n  fontLoader,\n  equirectLoader,\n  renderPipelineLoader,\n  tilesetLoader,\n];\n","import { admitsMeshCardLayout, validateMeshCardLayout } from '@forgeax/engine-geometry';\n// @forgeax/engine-assets-runtime -- inline pack-payload loader bodies\n// (feat-20260705-runtime-tier2-decomposition M1 / w4, D-4 F1 straight-cut).\n// Pure move from asset-registry.ts; zero identifier changes.\n\nimport {\n  attachMeshDistanceField,\n  createProceduralMesh,\n  deriveVertexLayoutProjection,\n  MESH_VISIBILITY_DISTANCE_FIELD_CODEC,\n  PROCEDURAL_FLOATS_PER_VERTEX,\n  prepareMeshData,\n} from '@forgeax/engine-geometry';\nimport { AssetGuid } from '@forgeax/engine-pack/guid';\nimport type {\n  AddressMode,\n  AnimationChannel,\n  AnimationGraph,\n  AnimationGraphNode,\n  Asset,\n  AssetGuid as AssetGuidType,\n  AudioClipAsset,\n  CompareFunction,\n  FilterMode,\n  LoadContext,\n  Loader,\n  MaterialAsset,\n  MaterialPass,\n  MaterialTextureCoordinates,\n  ParseErrorDetail,\n  ParticleEffectAsset,\n  MeshAsset as TypesMeshAsset,\n} from '@forgeax/engine-types';\nimport {\n  AssetError,\n  isMaterialTextureParameterType,\n  MATERIAL_CHILD_FORBIDDEN_FIELDS,\n  parseShadowCapsuleSet,\n  resolveMaterialTextureCoordinates,\n} from '@forgeax/engine-types';\nimport { MeshBinAssetError } from '../errors/asset';\nimport { parseScenePayload } from '../scene-payload';\nimport { unpackMeshBin } from './mesh-bin';\nimport { renderPipelineLoader, tilesetLoader } from './pack-artifact';\n\ntype ParsedMeshLodPayload = {\n  readonly lods?: TypesMeshAsset['lods'];\n  readonly lodHysteresis?: number;\n};\n\nfunction parseLodGuid(\n  raw: unknown,\n  refs: readonly string[] | undefined,\n): AssetGuidType | undefined {\n  if (raw instanceof Uint8Array) {\n    return raw.byteLength === 16 ? (raw as AssetGuidType) : undefined;\n  }\n  if (Array.isArray(raw)) {\n    if (\n      raw.length !== 16 ||\n      raw.some((byte) => !Number.isInteger(byte) || (byte as number) < 0 || (byte as number) > 255)\n    )\n      return undefined;\n    return new Uint8Array(raw as number[]) as AssetGuidType;\n  }\n  if (typeof raw === 'string') {\n    const parsed = AssetGuid.parse(raw);\n    return parsed.ok ? parsed.value : undefined;\n  }\n  if (typeof raw === 'number' && Number.isInteger(raw) && refs !== undefined) {\n    const ref = refs[raw];\n    if (ref === undefined) return undefined;\n    const parsed = AssetGuid.parse(ref);\n    return parsed.ok ? parsed.value : undefined;\n  }\n  return undefined;\n}\n\nfunction parseMeshLodPayload(\n  rawLods: unknown,\n  rawHysteresis: unknown,\n  refs: readonly string[] | undefined,\n): { readonly ok: true; readonly value: ParsedMeshLodPayload } | { readonly ok: false } {\n  if (rawLods !== undefined && !Array.isArray(rawLods)) return { ok: false };\n  if (\n    rawHysteresis !== undefined &&\n    (typeof rawHysteresis !== 'number' ||\n      !Number.isFinite(rawHysteresis) ||\n      rawHysteresis < 0 ||\n      rawHysteresis >= 1)\n  )\n    return { ok: false };\n  if (rawLods === undefined) {\n    return {\n      ok: true,\n      value: rawHysteresis === undefined ? {} : { lodHysteresis: rawHysteresis as number },\n    };\n  }\n  if (rawLods.length > 7) return { ok: false };\n  let previousCoverage = 1;\n  const lods: NonNullable<TypesMeshAsset['lods']>[number][] = [];\n  for (const rawLod of rawLods) {\n    if (rawLod === null || typeof rawLod !== 'object') return { ok: false };\n    const entry = rawLod as Record<string, unknown>;\n    const mesh = parseLodGuid(entry.mesh ?? entry.meshRef, refs);\n    const screenCoverage = entry.screenCoverage;\n    if (\n      mesh === undefined ||\n      typeof screenCoverage !== 'number' ||\n      !Number.isFinite(screenCoverage) ||\n      screenCoverage <= 0 ||\n      screenCoverage > 1 ||\n      screenCoverage >= previousCoverage\n    )\n      return { ok: false };\n    lods.push({ mesh, screenCoverage });\n    previousCoverage = screenCoverage;\n  }\n  return {\n    ok: true,\n    value: {\n      lods,\n      ...(rawHysteresis === undefined ? {} : { lodHysteresis: rawHysteresis as number }),\n    },\n  };\n}\n\n// === Inline pack-payload loader bodies (feat-20260603-asset-import-loader-injection\n// M1 / w4) ===\n//\n// The eight `if (kind === ...)` arms that lived inside\n// `AssetRegistry.parseAssetPayload` (research Finding 1) are extracted here as\n// module-level `{ kind, load }` objects so they register into a\n// `LoaderRegistry` (D-1) and can be imported by `wireDefaultLoaders` (w5). The\n// body logic is copied verbatim — M1 is a pure refactor (AC-03), no behavioural\n// change. Each parses an inline `.pack.json` payload synchronously and returns\n// the `Asset` POD or `undefined` (parse rejected). The `scene` arm routes its\n// structured out-of-bounds-ref error back through the LoaderOutput return\n// value instead of the old shared instance slot (D-8 channel replaced by F21).\n\n/** mesh loader — Float32Array / Uint16Array | Uint32Array normalisation -> MeshAsset.\n *\n * feat-20260611: skinIndex (Uint16Array) and skinWeight (Float32Array) accept\n * both their native typed-array shape (in-memory: dawn smoke / direct\n * `register` test) AND `number[]` (post-`JSON.stringify` shape produced by the\n * dev-server / build-mode pack-body round-trip — `JSON.stringify(pack) -> fetch\n * -> JSON.parse` flattens every typed array to a plain Array). Same dual\n * contract `skeletonLoader` / `animationClipLoader` already honour (PR #350);\n * without the array arm, every Fox.glb / Khronos skinned glTF surfaces as\n * `asset-parse-failed` on the browser path while dawn smoke stays green.\n */\nexport const meshLoader: Loader = {\n  kind: 'mesh',\n  load(payload) {\n    if (payload.distanceField !== undefined) return undefined;\n    const procedural = createProceduralMesh(payload);\n    if (procedural !== undefined) return procedural.ok ? procedural.value : undefined;\n\n    const vertexData = payload.vertices;\n    const indexData = payload.indices;\n    const rawAttributes = (payload.attributes as Record<string, unknown> | undefined) ?? {};\n    const attributes: Record<string, unknown> = { ...rawAttributes };\n    // JSON transport must restore every canonical attribute before derived geometry admission.\n    for (const attribute of deriveVertexLayoutProjection(\n      rawAttributes as TypesMeshAsset['attributes'],\n    ).attributes) {\n      const value = rawAttributes[attribute.key];\n      if (Array.isArray(value))\n        attributes[attribute.key] =\n          attribute.key === 'skinIndex' ? new Uint16Array(value) : new Float32Array(value);\n    }\n\n    const rawAabb = payload.aabb;\n    let aabb: Float32Array | undefined;\n    if (rawAabb instanceof Float32Array) {\n      aabb = rawAabb;\n    } else if (Array.isArray(rawAabb)) {\n      aabb = new Float32Array(rawAabb as number[]);\n    } else if (rawAabb !== undefined) {\n      return undefined;\n    }\n\n    let morphTargets: TypesMeshAsset['morphTargets'];\n    const rawMorphTargets = payload.morphTargets;\n    if (rawMorphTargets !== undefined) {\n      if (\n        !Array.isArray(rawMorphTargets) ||\n        rawMorphTargets.length < 1 ||\n        rawMorphTargets.length > 8\n      ) {\n        return undefined;\n      }\n      const parsedTargets: NonNullable<TypesMeshAsset['morphTargets']>[number][] = [];\n      for (const rawTarget of rawMorphTargets) {\n        if (typeof rawTarget !== 'object' || rawTarget === null) return undefined;\n        const source = rawTarget as Record<string, unknown>;\n        const target: {\n          position?: Float32Array;\n          normal?: Float32Array;\n          tangent?: Float32Array;\n        } = {};\n        for (const [key, value] of Object.entries(source)) {\n          if (key !== 'position' && key !== 'normal' && key !== 'tangent') return undefined;\n          if (value instanceof Float32Array) target[key] = value;\n          else if (Array.isArray(value)) target[key] = new Float32Array(value as number[]);\n          else return undefined;\n        }\n        if (Object.keys(target).length === 0) return undefined;\n        parsedTargets.push(target);\n      }\n      morphTargets = parsedTargets;\n    }\n    let morphWeights: Float32Array | undefined;\n    const rawMorphWeights = payload.morphWeights;\n    if (rawMorphWeights !== undefined) {\n      if (rawMorphWeights instanceof Float32Array) morphWeights = rawMorphWeights;\n      else if (Array.isArray(rawMorphWeights))\n        morphWeights = new Float32Array(rawMorphWeights as number[]);\n      else return undefined;\n      if (morphTargets !== undefined && morphWeights.length !== morphTargets.length)\n        return undefined;\n    }\n\n    const parsedLods = parseMeshLodPayload(payload.lods, payload.lodHysteresis, undefined);\n    if (!parsedLods.ok) return undefined;\n\n    const skinIndexRaw = attributes.skinIndex;\n    if (skinIndexRaw instanceof Uint16Array) {\n      attributes.skinIndex = skinIndexRaw;\n    } else if (Array.isArray(skinIndexRaw)) {\n      attributes.skinIndex = new Uint16Array(skinIndexRaw as number[]);\n    } else if (skinIndexRaw !== undefined) {\n      return undefined;\n    }\n\n    const skinWeightRaw = attributes.skinWeight;\n    if (skinWeightRaw instanceof Float32Array) {\n      attributes.skinWeight = skinWeightRaw;\n    } else if (Array.isArray(skinWeightRaw)) {\n      attributes.skinWeight = new Float32Array(skinWeightRaw as number[]);\n    } else if (skinWeightRaw !== undefined) {\n      return undefined;\n    }\n\n    let vertices: Float32Array;\n    let indices: Uint16Array | Uint32Array | undefined;\n\n    if (vertexData instanceof Float32Array) {\n      vertices = vertexData;\n    } else if (Array.isArray(vertexData)) {\n      vertices = new Float32Array(vertexData as number[]);\n    } else {\n      return undefined;\n    }\n\n    // bug-20260610: index width must follow vertex count, not a hard-coded\n    // Uint16Array. A glTF mesh (e.g. Sponza, ~192k merged verts) overflows\n    // Uint16; round-tripping through Uint16Array silently wraps and\n    // `mesh-vertex-stride-mismatch` then fires because `maxIndex + 1` no\n    // longer equals `vertexCount`. Mirrors `meshIrToMeshAsset` in\n    // packages/gltf/src/bridge.ts which picks Uint32 above 0xffff.\n    //\n    // feat-20260612 M2 fixup: when the input carries an empty index array\n    // (Fox.glb-style non-indexed primitives flattened through the mesh-bin\n    // sidecar with `ilen=0`), drop the indices field rather than emit a\n    // 0-byte typed array. The downstream `gpu-resource-store` chooses the\n    // indexed-vs-vertex-only path on `mesh.indices !== undefined`; a 0-byte\n    // typed array still satisfies !== undefined and triggers a 0-size IBO\n    // allocation, whose `setIndexBuffer(buffer.slice(0..0), ...)` panics\n    // wgpu's `BufferSlice` \"buffer slices can not be empty\" assertion.\n    if (indexData instanceof Uint16Array || indexData instanceof Uint32Array) {\n      indices = indexData.length > 0 ? indexData : undefined;\n    } else if (Array.isArray(indexData)) {\n      const arr = indexData as number[];\n      if (arr.length === 0) {\n        indices = undefined;\n      } else {\n        const vertexCount = vertices.length / PROCEDURAL_FLOATS_PER_VERTEX;\n        const useUint32 = vertexCount > 0xffff;\n        indices = useUint32 ? new Uint32Array(arr) : new Uint16Array(arr);\n      }\n    } else if (indexData === undefined) {\n      indices = undefined;\n    } else {\n      return undefined;\n    }\n\n    // feat-20260608 M5 / w27: pack-payload mesh assets default to a single\n    // triangle-list submesh covering the full index/vertex range. Inline\n    // .pack.json mesh payloads do not carry submesh tables (single-prim\n    // legacy shape); render code unconditionally reads `submeshes[0]`.\n    // vertexCount stored as full vertices.length (downstream computes per-\n    // attribute strides; submesh keeps the buffer-element-count for now).\n    //\n    // bug-20260610: when the payload carries an explicit `submeshes` table\n    // (gltf importer emits one per primitive), respect it. The\n    // `triangle-list 0..indices.length` default fits only single-prim packs.\n    const payloadSubmeshes = payload.submeshes;\n    const rawSubmeshes =\n      Array.isArray(payloadSubmeshes) && payloadSubmeshes.length > 0\n        ? (payloadSubmeshes as unknown as TypesMeshAsset['submeshes'])\n        : [\n            {\n              indexOffset: 0,\n              indexCount: indices?.length ?? 0,\n              vertexCount: vertices.length,\n              topology: 'triangle-list' as const,\n            },\n          ];\n    const payloadSlots = payload.materialSlots;\n    const materialSlots: TypesMeshAsset['materialSlots'] = Array.isArray(payloadSlots)\n      ? payloadSlots.map((raw, slotIndex) => {\n          if (typeof raw !== 'object' || raw === null)\n            return { slotName: `LegacySlot_${slotIndex}` };\n          const slot = raw as Record<string, unknown>;\n          let defaultMaterial: AssetGuidType | undefined;\n          if (slot.defaultMaterial instanceof Uint8Array) {\n            defaultMaterial = slot.defaultMaterial as AssetGuidType;\n          } else if (typeof slot.defaultMaterial === 'string') {\n            const parsed = AssetGuid.parse(slot.defaultMaterial);\n            if (!parsed.ok) return { slotName: `LegacySlot_${slotIndex}` };\n            defaultMaterial = parsed.value;\n          }\n          return {\n            slotName:\n              typeof slot.slotName === 'string' && slot.slotName.trim().length > 0\n                ? slot.slotName\n                : `LegacySlot_${slotIndex}`,\n            ...(typeof slot.sourceKey === 'string' ? { sourceKey: slot.sourceKey } : {}),\n            ...(defaultMaterial !== undefined ? { defaultMaterial } : {}),\n          };\n        })\n      : rawSubmeshes.map((_, slotIndex) => ({ slotName: `LegacySlot_${slotIndex}` }));\n    const submeshes: TypesMeshAsset['submeshes'] = rawSubmeshes.map((submesh, submeshIndex) => ({\n      ...submesh,\n      materialSlot: Number.isInteger((submesh as { materialSlot?: unknown }).materialSlot)\n        ? (submesh as { materialSlot: number }).materialSlot\n        : submeshIndex,\n    }));\n\n    const cardLayout = payload.cardLayout as TypesMeshAsset['cardLayout'];\n    if (submeshes.some((section) => 'cardLayout' in section)) return undefined;\n    if (\n      cardLayout !== undefined &&\n      (!validateMeshCardLayout(cardLayout).ok ||\n        !admitsMeshCardLayout({ submeshes, morphTargets, skinIndex: attributes.skinIndex }))\n    )\n      return undefined;\n    return {\n      kind: 'mesh',\n      ...(cardLayout === undefined ? {} : { cardLayout }),\n      vertices,\n      ...(indices !== undefined ? { indices } : {}),\n      attributes: attributes as TypesMeshAsset['attributes'],\n      ...(aabb !== undefined ? { aabb } : {}),\n      ...(morphTargets !== undefined ? { morphTargets } : {}),\n      ...(morphWeights !== undefined ? { morphWeights } : {}),\n      ...(parsedLods.value.lods === undefined ? {} : { lods: parsedLods.value.lods }),\n      ...(parsedLods.value.lodHysteresis === undefined\n        ? {}\n        : { lodHysteresis: parsedLods.value.lodHysteresis }),\n      submeshes,\n      materialSlots,\n    };\n  },\n  loadPack(input, ctx) {\n    const distanceField = input.payload.distanceField;\n    const fieldArtifact = input.artifacts['distance-field.bin'];\n    const original = input;\n    const loadGeometry = () => {\n      let input = original;\n      if (distanceField !== undefined) {\n        const { distanceField: _, ...geometry } = original.payload;\n        input = { ...original, payload: geometry };\n      }\n      if (input.payload.vertices instanceof Float32Array && input.payload.kind === 'mesh') {\n        if (input.artifacts.body !== undefined)\n          return {\n            ok: false,\n            error: new AssetError({\n              code: 'asset-parse-failed',\n              expected: 'one Mesh geometry source',\n              hint: 'submit native Mesh data or a body artifact, never both',\n            }),\n          } as never;\n        const result = prepareMeshData(\n          input.payload as unknown as TypesMeshAsset,\n          input.guid,\n          input.refs,\n        );\n        if (!result.ok) return { ok: false, error: result.error } as never;\n        return input.payload as unknown as TypesMeshAsset;\n      }\n      const artifact = input.artifacts.body;\n      if (artifact === undefined) return meshLoader.load(input.payload, input.refs, ctx);\n      const decoded = unpackMeshBin(artifact.bytes, input.guid);\n      if (!decoded.ok) return { ok: false, error: decoded.error } as never;\n      const materialSlots = decoded.value.materialSlots.map((slot) => {\n        const refIndex = slot.defaultMaterialRef;\n        const ref = refIndex === undefined ? undefined : input.refs[refIndex];\n        if (refIndex !== undefined && ref === undefined) return undefined;\n        if (ref === undefined) {\n          return {\n            slotName: String(slot.slotName),\n            ...(typeof slot.sourceKey === 'string' ? { sourceKey: slot.sourceKey } : {}),\n          };\n        }\n        const parsed = AssetGuid.parse(ref);\n        if (!parsed.ok) return undefined;\n        return {\n          slotName: String(slot.slotName),\n          ...(typeof slot.sourceKey === 'string' ? { sourceKey: slot.sourceKey } : {}),\n          defaultMaterial: parsed.value,\n        };\n      });\n      if (materialSlots.some((slot) => slot === undefined)) {\n        return {\n          ok: false,\n          error: new MeshBinAssetError({\n            sourceKey: input.guid,\n            expected: 'material slot references must resolve through the pack refs table',\n            actual: 'material reference is out of bounds or is not a valid AssetGuid',\n            reason: 'metadata-invalid',\n            actualFacts: { field: 'metadata' },\n          }),\n        } as never;\n      }\n      const parsedLods = parseMeshLodPayload(\n        decoded.value.lods,\n        decoded.value.lodHysteresis,\n        input.refs,\n      );\n      if (!parsedLods.ok) {\n        return {\n          ok: false,\n          error: new MeshBinAssetError({\n            sourceKey: input.guid,\n            expected: 'LOD mesh references must resolve through the pack refs table',\n            actual: 'LOD reference is out of bounds, malformed, or has invalid coverage metadata',\n            reason: 'metadata-invalid',\n            actualFacts: { field: 'metadata' },\n          }),\n        } as never;\n      }\n      return meshLoader.load(\n        {\n          vertices: decoded.value.vertices,\n          ...(decoded.value.indices !== undefined ? { indices: decoded.value.indices } : {}),\n          submeshes: decoded.value.submeshes,\n          ...(decoded.value.cardLayout === undefined\n            ? {}\n            : { cardLayout: decoded.value.cardLayout }),\n          materialSlots,\n          ...(decoded.value.aabb !== undefined ? { aabb: decoded.value.aabb } : {}),\n          ...(decoded.value.morphTargets !== undefined\n            ? { morphTargets: decoded.value.morphTargets }\n            : {}),\n          ...(decoded.value.morphWeights !== undefined\n            ? { morphWeights: decoded.value.morphWeights }\n            : {}),\n          ...(parsedLods.value.lods === undefined ? {} : { lods: parsedLods.value.lods }),\n          ...(parsedLods.value.lodHysteresis === undefined\n            ? {}\n            : { lodHysteresis: parsedLods.value.lodHysteresis }),\n          attributes: decoded.value.attributes,\n        },\n        input.refs,\n        ctx,\n      );\n    };\n    const mesh = loadGeometry();\n    if (distanceField === undefined && fieldArtifact === undefined) return mesh;\n    const failure = (reason: string) =>\n      ({\n        ok: false,\n        error: new AssetError({\n          code: 'asset-parse-failed',\n          expected: 'a complete Mesh distance field matching geometry and source sidedness',\n          hint: 'Recook and republish the same mesh GUID through its source Meta.',\n          detail: { field: 'distanceField', value: distanceField, reason },\n        }),\n      }) as never;\n    if (mesh === undefined || !('kind' in mesh) || mesh.kind !== 'mesh') return mesh;\n    if (!fieldArtifact) return failure('mesh distance field artifact is missing');\n    const { assetCodec, integrity } = fieldArtifact.descriptor;\n    if (\n      assetCodec?.name !== MESH_VISIBILITY_DISTANCE_FIELD_CODEC.name ||\n      assetCodec.version !== MESH_VISIBILITY_DISTANCE_FIELD_CODEC.version ||\n      assetCodec.profile !== MESH_VISIBILITY_DISTANCE_FIELD_CODEC.profile\n    )\n      return failure('unsupported mesh distance field artifact codec');\n    if (!integrity) return failure('mesh distance field artifact integrity is missing');\n    const artifact = { integrity: { ...integrity }, assetCodec: { ...assetCodec } };\n    return attachMeshDistanceField(mesh as TypesMeshAsset, distanceField, fieldArtifact.bytes).then(\n      (result) => {\n        if (!result.ok) return failure(result.error.detail.reason);\n        const field = result.value.distanceField;\n        if (!field) return failure('mesh distance field attachment is missing');\n        return {\n          ok: true as const,\n          value: {\n            ...result.value,\n            distanceField: {\n              ...field,\n              artifact,\n            },\n          },\n        };\n      },\n    );\n  },\n};\n\n/** scene loader — delegates to parseScenePayload; routes structured ref error via ctx. */\nexport const sceneLoader: Loader = {\n  kind: 'scene',\n  load(payload, refs, _ctx: LoadContext) {\n    const result = parseScenePayload(payload, refs === undefined ? undefined : [...refs]);\n    if (result === undefined) return undefined;\n    // Structured ParseSceneError (has an `index` field absent on SceneAsset):\n    // return it inline through LoaderOutput so the caller (parseAndReturnAsset)\n    // can build a precise AssetError without a shared instance slot (F21).\n    if ('index' in result) {\n      return { ok: false, error: result as unknown as ParseErrorDetail };\n    }\n    return result as Asset;\n  },\n};\n\n/**\n * feat-20260613-material-paramschema-driven-binding M4 / w22 (D-5 graceful):\n * the legacy hardcoded texture-field allowlist Set has been removed\n * (AC-03). The materialLoader now consults `ctx.getMaterialShaderTextureFieldNames`\n * (paramSchema-derived via derive()) to know which values fields carry\n * refs[] indices. When the shader is not yet registered (cross-worktree\n * shader-late-register path, plan R-4), the loader falls back to attempting\n * resolution on every int-typed paramValue in [0, refs.length) — M4 / w23's\n * extract-layer paramSchema validation catches misclassifications and routes\n * unresolved texture slots through `MISSING_TEXTURE_HANDLE`.\n */\nfunction collectShaderTextureFieldNames(\n  passesFromPayload: unknown,\n  ctx: LoadContext,\n): ReadonlySet<string> | undefined {\n  if (!Array.isArray(passesFromPayload) || passesFromPayload.length === 0) return undefined;\n  const lookup = ctx.getMaterialShaderTextureFieldNames;\n  if (lookup === undefined) return undefined;\n  const collected = new Set<string>();\n  let anyResolved = false;\n  for (const pass of passesFromPayload) {\n    const shaderId = (pass as { program?: { module?: unknown } }).program?.module;\n    if (typeof shaderId !== 'string' || shaderId.length === 0) continue;\n    const fields = lookup(shaderId);\n    if (fields === undefined) continue;\n    anyResolved = true;\n    for (const name of fields) collected.add(name);\n  }\n  return anyResolved ? collected : undefined;\n}\n\nfunction refGuidAt(refs: readonly unknown[] | undefined, index: number): string | undefined {\n  if (!Number.isInteger(index) || index < 0 || index >= (refs?.length ?? 0)) return undefined;\n  const guid = refs?.[index];\n  if (typeof guid === 'string') return guid;\n  if (typeof guid === 'object' && guid !== null && 'guid' in guid) {\n    const nestedGuid = (guid as { guid?: unknown }).guid;\n    return typeof nestedGuid === 'string' ? nestedGuid : undefined;\n  }\n  return undefined;\n}\n\nfunction isIdentityTextureCoordinates(value: unknown): boolean {\n  if (value === undefined) return true;\n  if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n  const coordinates = value as Record<string, unknown>;\n  if (Object.keys(coordinates).some((key) => key !== 'set' && key !== 'transform')) return false;\n  const transform = coordinates.transform;\n  if (\n    transform !== undefined &&\n    (typeof transform !== 'object' || transform === null || Array.isArray(transform))\n  ) {\n    return false;\n  }\n  if (\n    transform !== undefined &&\n    Object.keys(transform as Record<string, unknown>).some(\n      (key) => key !== 'offset' && key !== 'scale' && key !== 'rotation',\n    )\n  ) {\n    return false;\n  }\n  const resolved = resolveMaterialTextureCoordinates(coordinates as MaterialTextureCoordinates);\n  return (\n    resolved.set === 0 &&\n    resolved.transform.offset[0] === 0 &&\n    resolved.transform.offset[1] === 0 &&\n    resolved.transform.scale[0] === 1 &&\n    resolved.transform.scale[1] === 1 &&\n    resolved.transform.rotation === 0\n  );\n}\n\nfunction compactTextureValue(value: Record<string, unknown>): unknown {\n  const compact = { ...value };\n  if (isIdentityTextureCoordinates(compact.coordinates)) delete compact.coordinates;\n  return compact;\n}\n\n/** material loader — passes + values + serialized parent GUID -> parentGuid. */\nexport const materialLoader: Loader = {\n  kind: 'material',\n  load(payload, refs, ctx: LoadContext) {\n    const matPayload = payload;\n    const passesFromPayload = matPayload.passes;\n    const rawParamValues = (matPayload.values as Record<string, unknown>) ?? {};\n\n    let parentGuid: string | undefined;\n    if (typeof matPayload.parent === 'string') {\n      parentGuid = matPayload.parent;\n    } else if (typeof matPayload.parent === 'number') {\n      const idx = matPayload.parent;\n      const refsArr = refs ?? [];\n      if (idx >= 0 && idx < refsArr.length) {\n        parentGuid = refGuidAt(refsArr, idx);\n      }\n      if (parentGuid === undefined) {\n        return undefined;\n      }\n    }\n\n    // A parent-bearing row is a strict child contract. Root-owned fields are\n    // rejected before values/ref projection so an invalid child can never be\n    // registered with a half-inherited pass/schema payload. Object.hasOwn is\n    // intentional: even `{ passes: undefined }` is an authored forbidden\n    // field at the JSON loading boundary.\n    if (\n      parentGuid !== undefined &&\n      MATERIAL_CHILD_FORBIDDEN_FIELDS.some((field) => Object.hasOwn(matPayload, field))\n    ) {\n      return undefined;\n    }\n\n    // Numeric refs require a declared texture field. Children carry no schema,\n    // so their serialized texture references use { texture, sampler? }; bare\n    // numbers remain values even when they happen to index refs (including parent).\n    const values: Record<string, unknown> = { ...rawParamValues };\n    if (refs && refs.length > 0) {\n      const shaderTextureFields = collectShaderTextureFieldNames(passesFromPayload, ctx);\n      const authoredTextureFields = Array.isArray(matPayload.parameters)\n        ? new Set(\n            matPayload.parameters\n              .filter(\n                (parameter): parameter is { name: string; type: string } =>\n                  typeof parameter === 'object' &&\n                  parameter !== null &&\n                  'name' in parameter &&\n                  typeof parameter.name === 'string' &&\n                  'type' in parameter &&\n                  isMaterialTextureParameterType(parameter.type),\n              )\n              .map((parameter) => parameter.name),\n          )\n        : undefined;\n      const textureFields =\n        authoredTextureFields !== undefined\n          ? new Set([...(shaderTextureFields ?? []), ...authoredTextureFields])\n          : shaderTextureFields;\n      // Walk every value so the structured MaterialTextureValue shape remains\n      // resolvable even when a shader is registered with an empty/late\n      // paramSchema (pbr-skin currently takes this path). Scalar values still\n      // require schema membership below, so metallic/roughness integers are\n      // never mistaken for refs indices merely because the schema is empty.\n      const candidateFields = Object.keys(values);\n      for (const fieldName of candidateFields) {\n        const value = values[fieldName];\n        if (typeof value === 'number' && Number.isInteger(value)) {\n          if (!textureFields?.has(fieldName)) {\n            continue;\n          }\n          const refGuid = refGuidAt(refs, value);\n          if (refGuid === undefined) {\n            delete values[fieldName];\n            continue;\n          }\n          values[fieldName] = { texture: refGuid };\n          continue;\n        }\n\n        // glTF materials use the engine's structured MaterialTextureValue\n        // shape (`{ texture: <refs index> }`), not the legacy scalar form.\n        // Resolve that nested index at the same loader boundary; leaving zero\n        // here is a valid-looking handle that silently renders the material\n        // white and never reaches the browser console as an exception.\n        if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n          const textureIndex = (value as { texture?: unknown }).texture;\n          if (typeof textureIndex !== 'number' || !Number.isInteger(textureIndex)) continue;\n          const textureGuid = refGuidAt(refs, textureIndex);\n          if (textureGuid === undefined) {\n            if (textureFields !== undefined) delete values[fieldName];\n            continue;\n          }\n          const resolved: Record<string, unknown> = {\n            ...(value as Record<string, unknown>),\n            texture: textureGuid,\n          };\n          const samplerIndex = resolved.sampler;\n          if (typeof samplerIndex === 'number' && Number.isInteger(samplerIndex)) {\n            const samplerGuid = refGuidAt(refs, samplerIndex);\n            if (samplerGuid === undefined) delete resolved.sampler;\n            else resolved.sampler = samplerGuid;\n          }\n          values[fieldName] = compactTextureValue(resolved);\n        }\n      }\n    }\n\n    if (Array.isArray(passesFromPayload) && passesFromPayload.length > 0) {\n      return {\n        kind: 'material',\n        passes: passesFromPayload as readonly MaterialPass[],\n        parameters: matPayload.parameters,\n        ...(matPayload.particleInputs === undefined\n          ? {}\n          : { particleInputs: matPayload.particleInputs as MaterialAsset['particleInputs'] }),\n        ...(matPayload.surface === undefined\n          ? {}\n          : { surface: matPayload.surface as MaterialAsset['surface'] }),\n        values,\n        colorSpace: matPayload.colorSpace,\n        parentGuid,\n      } as MaterialAsset & { parentGuid?: string };\n    }\n\n    if (parentGuid !== undefined) {\n      return {\n        kind: 'material',\n        values,\n        parentGuid,\n      } as unknown as MaterialAsset & { parentGuid?: string };\n    }\n\n    return undefined;\n  },\n};\n\n/** sampler loader — preserve the serialised SamplerAsset descriptor. */\nexport const samplerLoader: Loader = {\n  kind: 'sampler',\n  load(payload) {\n    const filters = new Set<FilterMode>(['nearest', 'linear']);\n    const mipmapFilters = new Set<GPUMipmapFilterMode>(['nearest', 'linear']);\n    const addressModes = new Set<AddressMode>(['clamp-to-edge', 'repeat', 'mirror-repeat']);\n    const compareFunctions = new Set<CompareFunction>([\n      'never',\n      'less',\n      'equal',\n      'less-equal',\n      'greater',\n      'not-equal',\n      'greater-equal',\n      'always',\n    ]);\n    const stringField = <T extends string>(\n      key: string,\n      allowed: ReadonlySet<T>,\n    ): T | undefined | null => {\n      const value = payload[key];\n      if (value === undefined) return undefined;\n      return typeof value === 'string' && allowed.has(value as T) ? (value as T) : null;\n    };\n    const magFilter = stringField('magFilter', filters);\n    const minFilter = stringField('minFilter', filters);\n    const mipmapFilter = stringField('mipmapFilter', mipmapFilters);\n    const addressModeU = stringField('addressModeU', addressModes);\n    const addressModeV = stringField('addressModeV', addressModes);\n    const addressModeW = stringField('addressModeW', addressModes);\n    const compare = stringField('compare', compareFunctions);\n    if (\n      magFilter === null ||\n      minFilter === null ||\n      mipmapFilter === null ||\n      addressModeU === null ||\n      addressModeV === null ||\n      addressModeW === null ||\n      compare === null\n    ) {\n      return undefined;\n    }\n    const numericField = (key: string): number | undefined | null => {\n      const value = payload[key];\n      if (value === undefined) return undefined;\n      return typeof value === 'number' && Number.isFinite(value) ? value : null;\n    };\n    const lodMinClamp = numericField('lodMinClamp');\n    const lodMaxClamp = numericField('lodMaxClamp');\n    const maxAnisotropy = numericField('maxAnisotropy');\n    if (lodMinClamp === null || lodMaxClamp === null || maxAnisotropy === null) return undefined;\n    return {\n      kind: 'sampler',\n      ...(magFilter === undefined ? {} : { magFilter }),\n      ...(minFilter === undefined ? {} : { minFilter }),\n      ...(mipmapFilter === undefined ? {} : { mipmapFilter }),\n      ...(addressModeU === undefined ? {} : { addressModeU }),\n      ...(addressModeV === undefined ? {} : { addressModeV }),\n      ...(addressModeW === undefined ? {} : { addressModeW }),\n      ...(lodMinClamp === undefined ? {} : { lodMinClamp }),\n      ...(lodMaxClamp === undefined ? {} : { lodMaxClamp }),\n      ...(compare === undefined ? {} : { compare }),\n      ...(maxAnisotropy === undefined ? {} : { maxAnisotropy }),\n    };\n  },\n};\n\n/** skeleton loader — inverseBindMatrices stride validation.\n *\n * bug-20260611: accept both `Float32Array` (in-memory: dawn smoke / direct\n * `register` test) AND `number[]` (post-`JSON.stringify` shape: `normaliseForPack`\n * in @forgeax/engine-import flattens every typed array to a plain Array so\n * `JSON.stringify(pack)` survives the dev-server / build-mode round-trip --\n * the same dual contract `meshLoader` already honours). Without the array arm\n * the .pack.json -> fetch -> JSON.parse path lands a plain object whose\n * `instanceof Float32Array` check fails, surfacing as `asset-parse-failed`\n * for any glTF carrying a Skin (e.g. Khronos Fox.glb).\n */\nexport const skeletonLoader: Loader = {\n  kind: 'skeleton',\n  load(payload) {\n    const ibmRaw = payload.inverseBindMatrices;\n    const jointCount = typeof payload.jointCount === 'number' ? payload.jointCount : 0;\n    let ibm: Float32Array;\n    if (ibmRaw instanceof Float32Array) {\n      ibm = ibmRaw;\n    } else if (Array.isArray(ibmRaw)) {\n      ibm = new Float32Array(ibmRaw as number[]);\n    } else {\n      return undefined;\n    }\n    if (ibm.byteLength !== jointCount * 64) return undefined;\n    const boundsRaw = payload.bounds;\n    const bounds =\n      boundsRaw instanceof Float32Array\n        ? boundsRaw\n        : Array.isArray(boundsRaw)\n          ? new Float32Array(boundsRaw as number[])\n          : undefined;\n    if (bounds !== undefined && bounds.length !== 6) return undefined;\n    const shadowCapsules =\n      payload.shadowCapsules === undefined\n        ? undefined\n        : parseShadowCapsuleSet(payload.shadowCapsules, jointCount);\n    if (payload.shadowCapsules !== undefined && shadowCapsules === undefined) return undefined;\n    return {\n      kind: 'skeleton',\n      inverseBindMatrices: ibm,\n      jointCount,\n      ...(bounds === undefined ? {} : { bounds }),\n      ...(shadowCapsules === undefined ? {} : { shadowCapsules }),\n    };\n  },\n};\n\n/** skin loader — skeletonGuid + jointPaths validation. */\nexport const skinLoader: Loader = {\n  kind: 'skin',\n  load(payload) {\n    const skeletonGuid = payload.skeletonGuid;\n    const jointPathsRaw = payload.jointPaths;\n    if (typeof skeletonGuid !== 'string') return undefined;\n    if (!Array.isArray(jointPathsRaw)) return undefined;\n    const jointPaths: string[] = [];\n    for (const item of jointPathsRaw) {\n      if (typeof item !== 'string') return undefined;\n      jointPaths.push(item);\n    }\n    return { kind: 'skin', skeletonGuid, jointPaths };\n  },\n};\n\n/** animation-clip loader — channels / sampler validation.\n *\n * bug-20260611: sampler.input / sampler.output accept both `Float32Array`\n * (in-memory) and `number[]` (post-`JSON.stringify` shape produced by\n * `normaliseForPack`). Same dual contract as `skeletonLoader` /\n * `meshLoader`; without it the dev `.pack.json` round-trip surfaces every\n * skinned-with-animation glTF as `asset-parse-failed`.\n */\nexport const animationClipLoader: Loader = {\n  kind: 'animation-clip',\n  load(payload) {\n    const duration = typeof payload.duration === 'number' ? payload.duration : 0;\n    if (!Number.isFinite(duration) || duration < 0) return undefined;\n    const channelsRaw = payload.channels;\n    if (!Array.isArray(channelsRaw)) return undefined;\n    const channels: AnimationChannel[] = [];\n    for (const ch of channelsRaw) {\n      if (typeof ch !== 'object' || ch === null) return undefined;\n      const chObj = ch as Record<string, unknown>;\n      const targetId = chObj.targetId;\n      const property = chObj.property;\n      const samplerObj = chObj.sampler as Record<string, unknown> | undefined;\n      if (\n        typeof targetId !== 'string' ||\n        !/^[0-9a-f]{32}$/.test(targetId) ||\n        Object.keys(chObj).some(\n          (key) =>\n            key !== 'targetId' &&\n            key !== 'property' &&\n            key !== 'sampler' &&\n            !(chObj.property === 'property' && key === 'binding'),\n        )\n      ) {\n        return undefined;\n      }\n      if (\n        property !== 'translation' &&\n        property !== 'rotation' &&\n        property !== 'scale' &&\n        property !== 'weights' &&\n        property !== 'property'\n      )\n        return undefined;\n      if (samplerObj === undefined) return undefined;\n      const inputRaw = samplerObj.input;\n      const outputRaw = samplerObj.output;\n      const interpolation = samplerObj.interpolation;\n      let input: Float32Array;\n      if (inputRaw instanceof Float32Array) {\n        input = inputRaw;\n      } else if (Array.isArray(inputRaw)) {\n        input = new Float32Array(inputRaw as number[]);\n      } else {\n        return undefined;\n      }\n      if (\n        input.length === 0 ||\n        input.some(\n          (time, index) =>\n            !Number.isFinite(time) || time < 0 || (index > 0 && time <= (input[index - 1] ?? NaN)),\n        )\n      )\n        return undefined;\n      if (\n        property === 'property' &&\n        Array.isArray(outputRaw) &&\n        (outputRaw.every((value) => typeof value === 'string') ||\n          outputRaw.every((value) => typeof value === 'boolean'))\n      ) {\n        if (\n          interpolation !== 'STEP' ||\n          typeof chObj.binding !== 'string' ||\n          chObj.binding.length === 0\n        )\n          return undefined;\n        channels.push({\n          targetId: targetId as AnimationChannel['targetId'],\n          property,\n          binding: chObj.binding,\n          sampler: { input, output: outputRaw as string[] | boolean[], interpolation },\n        });\n        continue;\n      }\n      let output: Float32Array;\n      if (outputRaw instanceof Float32Array) {\n        output = outputRaw;\n      } else if (Array.isArray(outputRaw)) {\n        output = new Float32Array(outputRaw as number[]);\n      } else {\n        return undefined;\n      }\n      if (interpolation !== 'LINEAR' && interpolation !== 'STEP' && interpolation !== 'CUBICSPLINE')\n        return undefined;\n      const factor = interpolation === 'CUBICSPLINE' ? 3 : 1;\n      const width = output.length / input.length / factor;\n      if (\n        input.length < (factor === 3 ? 2 : 1) ||\n        !Number.isInteger(width) ||\n        width < 1 ||\n        output.some((value) => !Number.isFinite(value)) ||\n        ((property === 'translation' || property === 'scale') && width !== 3) ||\n        (property === 'rotation' && width !== 4) ||\n        (property === 'weights' && width > 8)\n      )\n        return undefined;\n      if (property === 'property') {\n        if (typeof chObj.binding !== 'string' || chObj.binding.length === 0) return undefined;\n        channels.push({\n          targetId: targetId as AnimationChannel['targetId'],\n          property,\n          binding: chObj.binding,\n          sampler: { input, output, interpolation },\n        });\n      } else\n        channels.push({\n          targetId: targetId as AnimationChannel['targetId'],\n          property,\n          sampler: { input, output, interpolation },\n        });\n    }\n    if (payload.events !== undefined && !Array.isArray(payload.events)) return undefined;\n    return {\n      kind: 'animation-clip',\n      duration,\n      channels,\n      ...(payload.events === undefined ? {} : { events: payload.events }),\n    };\n  },\n};\n\n/** animation-graph loader — pack payload -> AnimationGraph POD.\n *\n * feat-20260713-animation-state-machine-plugin M4 / w30 (plan D-4 landing (3)):\n * the inverse of `serializeAnimationGraph` (runtime). Each Clip leaf's `clip`\n * field arrives as a `refs[]` index (small int); the loader resolves it back to\n * the GUID string verbatim, leaving GUID -> handle re-resolution to the ECS/use\n * time (the same \"GUID at load, handle at use\" contract materialLoader honours\n * for parentGuid / values texture fields, asset-registry D-19). Blend/Add\n * node references + `root` are intra-graph node indices, validated against the\n * node count. A malformed payload (out-of-range refs / node index, bad node\n * shape, non-finite weight) returns `undefined` so the load-by-guid path\n * surfaces the existing `asset-parse-failed` error code (AC-14).\n *\n * OOS-7: reconstructs only an engine-authored graph's topology; no DCC-import\n * metadata is consumed.\n */\nexport const animationGraphLoader: Loader = {\n  kind: 'animation-graph',\n  load(payload, refs) {\n    const rawNodes = payload.nodes;\n    const root = payload.root;\n    if (!Array.isArray(rawNodes)) return undefined;\n    const nodeCount = rawNodes.length;\n    const isNodeIndex = (value: unknown): value is number =>\n      typeof value === 'number' && Number.isInteger(value) && value >= 0 && value < nodeCount;\n    if (!isNodeIndex(root)) return undefined;\n    const refsArr = refs ?? [];\n\n    const nodes: AnimationGraphNode[] = [];\n    for (const rawNode of rawNodes) {\n      if (typeof rawNode !== 'object' || rawNode === null) return undefined;\n      const node = rawNode as Record<string, unknown>;\n      const weight = node.weight;\n      if (typeof weight !== 'number' || !Number.isFinite(weight)) return undefined;\n\n      if (node.type === 'clip') {\n        const refIndex = node.clip;\n        if (typeof refIndex !== 'number' || !Number.isInteger(refIndex)) return undefined;\n        if (refIndex < 0 || refIndex >= refsArr.length) return undefined;\n        const guid = refsArr[refIndex];\n        if (typeof guid !== 'string') return undefined;\n        // GUID verbatim at load; re-resolved to a handle at use time (D-19).\n        nodes.push({\n          type: 'clip',\n          clip: guid,\n          weight,\n        });\n      } else if (node.type === 'blend') {\n        const children = node.children;\n        if (!Array.isArray(children) || !children.every(isNodeIndex)) return undefined;\n        nodes.push({ type: 'blend', children: [...(children as number[])], weight });\n      } else if (node.type === 'add') {\n        const base = node.base;\n        const additive = node.additive;\n        if (!isNodeIndex(base)) return undefined;\n        if (!Array.isArray(additive) || !additive.every(isNodeIndex)) return undefined;\n        nodes.push({ type: 'add', base, additive: [...(additive as number[])], weight });\n      } else {\n        return undefined;\n      }\n    }\n\n    return { kind: 'animation-graph', nodes, root } as AnimationGraph;\n  },\n};\n\n/** audio loader -- restore the durable descriptor; host decode stays elsewhere. */\nexport const audioLoader: Loader = {\n  kind: 'audio',\n  load(payload) {\n    const sourceKey = payload.sourceKey;\n    const mediaType = payload.mediaType;\n    if (typeof sourceKey !== 'string' || sourceKey.length === 0) return undefined;\n    if (typeof mediaType !== 'string' || mediaType.length === 0) return undefined;\n    const rawBytes = payload.bytes;\n    const bytes =\n      rawBytes instanceof Uint8Array\n        ? rawBytes\n        : Array.isArray(rawBytes)\n          ? new Uint8Array(rawBytes as number[])\n          : undefined;\n    return {\n      kind: 'audio',\n      sourceKey,\n      mediaType,\n      ...(bytes === undefined ? {} : { bytes }),\n    } as AudioClipAsset;\n  },\n};\n\n/** particle loader -- restore the complete cooked program without a GPU device. */\nexport const particleEffectLoader: Loader = {\n  kind: 'particle-effect',\n  load(payload) {\n    if (typeof payload.program !== 'object' || payload.program === null) return undefined;\n    if (typeof (payload.program as Record<string, unknown>).fingerprint !== 'string') {\n      return undefined;\n    }\n    return { ...payload, kind: 'particle-effect' } as ParticleEffectAsset;\n  },\n};\n\nexport { renderPipelineLoader, tilesetLoader } from './pack-artifact';\n\n/**\n * The eight inline pack-payload loaders, in the historical `if`-chain order\n * (the animation-graph loader, feat-20260713 M4 / w30, appends after the clip\n * loader). `wireDefaultLoaders` (w5) registers these plus the texture / font /\n * equirect loaders (w6) and the audio placeholder (w8).\n */\nexport const INLINE_PACK_LOADERS: readonly Loader[] = [\n  meshLoader,\n  sceneLoader,\n  samplerLoader,\n  materialLoader,\n  skeletonLoader,\n  skinLoader,\n  animationClipLoader,\n  animationGraphLoader,\n  renderPipelineLoader,\n  tilesetLoader,\n  audioLoader,\n  particleEffectLoader,\n];\n","import type { Loader, NavigationMeshAsset } from '@forgeax/engine-types';\n/** Load portable POD. Navigation validates geometric topology when constructing a query. */\nexport const navigationMeshLoader = {\n  kind: 'navigation-mesh',\n  load(payload) {\n    if (\n      payload.kind !== 'navigation-mesh' ||\n      payload.version !== 'recast-poly/1' ||\n      typeof payload.sourceDigest !== 'string' ||\n      !payload.sourceDigest ||\n      !Array.isArray(payload.vertices) ||\n      !Array.isArray(payload.polygons) ||\n      typeof payload.settings !== 'object' ||\n      payload.settings === null\n    )\n      return undefined;\n    return payload as unknown as NavigationMeshAsset;\n  },\n} satisfies Loader<NavigationMeshAsset>;\n","import { validatePluginAsset } from '@forgeax/engine-pack/runtime';\nimport type { AssetDecoder, Loader, PluginAsset } from '@forgeax/engine-types';\nimport { err, ok } from '@forgeax/engine-types';\n\nexport const pluginAssetLoader: Loader<PluginAsset> = {\n  kind: 'plugin',\n  references: 'deferred',\n  load(payload) {\n    const parsed = validatePluginAsset(payload);\n    return parsed.ok ? parsed.value : undefined;\n  },\n};\n\nexport const pluginAssetDecoder: AssetDecoder<PluginAsset> = {\n  references: 'deferred',\n  async decode({ envelope }) {\n    const parsed = validatePluginAsset(envelope.payload);\n    return parsed.ok\n      ? ok(parsed.value)\n      : err({\n          code: 'asset-decode-failed',\n          expected: parsed.error.expected,\n          hint: parsed.error.hint,\n          detail: { guid: envelope.guid, kind: 'plugin' },\n        });\n  },\n};\n","import { AssetGuid } from '@forgeax/engine-pack/guid';\nimport { terrainDerivedLayoutValid, validateTerrain } from '@forgeax/engine-terrain';\nimport { AssetError, type Loader, type TerrainAsset } from '@forgeax/engine-types';\n\nfunction readTerrain(\n  payload: Record<string, unknown>,\n  refs?: readonly string[],\n): TerrainAsset | undefined {\n  const floats = (value: unknown) =>\n    value instanceof Float32Array\n      ? value\n      : Array.isArray(value) && value.every((v) => typeof v === 'number' && Number.isFinite(v))\n        ? Float32Array.from(value)\n        : undefined;\n  const heights = floats(payload.heights),\n    weights = floats(payload.weights);\n  if (!heights || !weights || payload.kind !== 'terrain') return undefined;\n  const terrain = { ...payload, heights, weights } as unknown as TerrainAsset;\n  if (!validateTerrain(terrain).ok || !terrainDerivedLayoutValid(terrain)) return undefined;\n  const dependencies = [\n    ...terrain.grids,\n    ...terrain.layers.flatMap((l) =>\n      l.blend === 'height' ? [l.material, l.height] : [l.material],\n    ),\n  ];\n  for (const s of terrain.sections) {\n    dependencies.push(s.heightTexture, s.weightTexture, s.material);\n  }\n  if (\n    dependencies.some(\n      (guid) =>\n        typeof guid !== 'string' ||\n        !AssetGuid.parse(guid).ok ||\n        (refs !== undefined && !refs.includes(guid)),\n    )\n  )\n    return undefined;\n  return terrain;\n}\n\n/** Array bytes are reconstructed explicitly after JSON fetch, never cast to a typed array. */\nexport const terrainLoader: Loader<TerrainAsset> = {\n  kind: 'terrain',\n  load: (payload, refs) => readTerrain(payload, refs),\n  loadPack: (input) => {\n    let payload = input.payload;\n    try {\n      if (input.artifacts.body)\n        payload = JSON.parse(new TextDecoder().decode(input.artifacts.body.bytes)) as Record<\n          string,\n          unknown\n        >;\n    } catch {\n      throw new AssetError({\n        code: 'asset-parse-failed',\n        expected: 'terrain JSON with finite height/weight arrays',\n        hint: 'rebuild the terrain producer for the same GUID',\n      });\n    }\n    const value = readTerrain(payload, input.refs);\n    if (value === undefined)\n      throw new AssetError({\n        code: 'asset-parse-failed',\n        expected: 'complete validated Landscape asset and declared GUID closure',\n        hint: 'repair terrain dimensions, layers or missing references and recook',\n      });\n    return value;\n  },\n};\n","// @forgeax/engine-assets-runtime - wireDefaultLoaders + seed-table SSOT\n// (feat-20260603-asset-import-loader-injection M1 / w5 + w8; restructured by\n// feat-20260705-runtime-tier2-decomposition M1 / w8, D-2).\n//\n// wireDefaultLoaders is a one-line host helper that wires the engine's default\n// loader set onto a `LoaderRegistry`, mirroring the Console\n// `wireDefaultInspectors` shape (packages/console/src/wire-default-inspectors.ts;\n// research Finding 8). An AI user that has wired inspectors once recognises the\n// same form here at near-zero cost (requirements §AI User Affordances).\n//\n// The two seed tables INLINE_PACK_LOADERS + PACK_ARTIFACT_LOADERS are the\n// default set. videoLoader lives in graphics-extras and is wired here. The\n// complete ordinary Asset vocabulary is registered once at this boundary;\n// host-specific loaders may extend the table through `extraLoaders`.\n//\n// Default set wired internally: every runtime Asset kind plus the existing UI\n// consumer loader. Host-only execution remains separate from descriptor load.\n//\nimport { videoLoader } from '@forgeax/engine-graphics-extras';\nimport type { Loader } from '@forgeax/engine-types';\nimport { createUiLoader, type UiAsset } from '@forgeax/engine-ui';\nimport { LoaderRegistry } from './loader-registry';\nimport { iesProfileLoader } from './loaders/ies-profile';\nimport { INLINE_PACK_LOADERS } from './loaders/inline-pack';\nimport { navigationMeshLoader } from './loaders/navigation-mesh.js';\nimport { PACK_ARTIFACT_LOADERS } from './loaders/pack-artifact';\nimport { pluginAssetLoader } from './loaders/plugin.js';\nimport { terrainLoader } from './loaders/terrain.js';\n\nconst uiPayloadLoader = createUiLoader();\nconst uiLoader: Loader<UiAsset> = {\n  kind: 'ui',\n  load: (payload) => {\n    const result = uiPayloadLoader.load(payload);\n    return result.ok ? result.value : undefined;\n  },\n};\n\n/**\n * Wire the engine's default loader set plus any `extraLoaders` onto `registry` in\n * one call. Returns the same `registry` for chaining (so `wireDefaultLoaders(new\n * LoaderRegistry())` is a one-expression wired registry). The `extraLoaders` are\n * appended after the defaults and must use kinds outside the ordinary set.\n *\n * @example\n * ```ts\n * import { LoaderRegistry, wireDefaultLoaders } from '@forgeax/engine-assets-runtime';\n * const loaders = wireDefaultLoaders(new LoaderRegistry());\n * // loaders.get('mesh') / .get('texture') / .get('font') / .get('video') are\n * // non-undefined; all ordinary Asset kinds share this same owner table.\n * ```\n */\nexport function wireDefaultLoaders(\n  registry: LoaderRegistry,\n  extraLoaders: readonly Loader[] = [],\n): LoaderRegistry {\n  const extraKinds = new Set(extraLoaders.map((loader) => loader.kind));\n  const seeded = new Set<string>();\n  for (const loader of [\n    ...INLINE_PACK_LOADERS,\n    ...PACK_ARTIFACT_LOADERS,\n    iesProfileLoader,\n    terrainLoader,\n    navigationMeshLoader,\n    pluginAssetLoader,\n  ]) {\n    if (extraKinds.has(loader.kind)) continue;\n    if (seeded.has(loader.kind)) continue;\n    seeded.add(loader.kind);\n    registry.register(loader);\n  }\n  registry.register(videoLoader);\n  registry.register(uiLoader);\n  for (const loader of extraLoaders) registry.register(loader);\n  return registry;\n}\n\n/**\n * Convenience factory: a fresh `LoaderRegistry` pre-wired with the default\n * loader set (plus any `extraLoaders`). The production assembly point\n * (`createRenderer`) and tests pass the result into `new LoaderRegistry()` (D-7\n * constructor-injection; loaders always wired at construction -- used by\n * `AssetRegistry` internally via `createDefaultLoaderRegistry(extraLoaders)` and\n * by host code / tests independently) -- no setter / no illegal intermediate\n * state).\n */\nexport function createDefaultLoaderRegistry(extraLoaders: readonly Loader[] = []): LoaderRegistry {\n  return wireDefaultLoaders(new LoaderRegistry(), extraLoaders);\n}\n","import type { RuntimePackEnvelope } from '@forgeax/engine-pack/runtime';\nimport { ShaderRegistry } from '@forgeax/engine-shader';\nimport { terrainDerivedClosureValid } from '@forgeax/engine-terrain';\nimport {\n  type ArtifactDescriptor,\n  type Asset,\n  AssetError,\n  type CatalogEntry,\n  err,\n  type LoadContext,\n  type Loader,\n  ok,\n  type Result,\n} from '@forgeax/engine-types';\nimport type { AssetRegistry } from './asset-registry.js';\nimport type { CatalogSource } from './catalog-source.js';\nimport { PackReader } from './internal/pack-reader.js';\nimport { validatePublicationReferences } from './internal/publication-references.js';\nimport type { LoaderRegistry } from './loader-registry.js';\nimport {\n  assertPrivateMeshStorage,\n  prepareAssetPayload,\n  validateAssetReferences,\n} from './prepare-payload.js';\nimport { readArtifact } from './registry/artifact-io.js';\nimport { createDefaultLoaderRegistry } from './wire-default-loaders.js';\n\nexport interface PublicationPreparationServices {\n  readonly registry?: AssetRegistry;\n  readonly shaderRegistry?: ShaderRegistry;\n  readonly pack?: RuntimePackEnvelope | undefined;\n  readonly loaders?: readonly Loader<unknown>[];\n  readonly dependencies?: ReadonlyMap<\n    string,\n    { readonly asset?: unknown; readonly row: CatalogEntry }\n  >;\n}\n\n/** Adapter for producer injection. App supplies its actual consuming owner. */\nexport async function validateAssetPublication(\n  rows: readonly CatalogEntry[],\n  fetcher: typeof fetch,\n  external?: { readonly catalog: CatalogSource; readonly fetcher: typeof fetch },\n  services: PublicationPreparationServices = {},\n): Promise<Result<ReadonlyMap<string, Asset | (() => Promise<Asset>)>, unknown>> {\n  if (services.registry)\n    return services.registry.preparePublication(rows, fetcher, external, services);\n  const shaderRegistry = services.shaderRegistry ?? new ShaderRegistry({ manifestUrl: undefined });\n  const context: LoadContext = {\n    fetchBinary: async (url) => {\n      const response = await fetcher(url);\n      return response.ok\n        ? ok(new Uint8Array(await response.arrayBuffer()))\n        : err(\n            new AssetError({\n              code: 'asset-fetch-failed',\n              expected: `asset bytes at ${url}`,\n              hint: 'restore the source artifact',\n            }),\n          );\n    },\n    resolveRef: async (guid) =>\n      services.dependencies?.has(guid) || rows.some((row) => row.guid === guid)\n        ? ok(0)\n        : err(\n            new AssetError({\n              code: 'asset-not-found',\n              expected: `fixed dependency ${guid}`,\n              hint: 'retain the complete dependency closure',\n            }),\n          ),\n    getMaterialShaderTextureFieldNames: (id) => {\n      const result = shaderRegistry.findMaterialArtifact(id);\n      return result.ok\n        ? result.value.paramSchemaProjection.derivedInterface.textureFieldNames\n        : undefined;\n    },\n    device: undefined,\n    transcodeCaps: { bc: false, etc2: false, astc: false },\n  };\n  return preparePublicationPayloads(\n    rows,\n    fetcher,\n    external,\n    services,\n    createDefaultLoaderRegistry(services.loaders as readonly Loader[] | undefined),\n    context,\n  );\n}\n\n/** Private staging uses the owner's domain loaders; no Catalog or temporary Registry is installed. */\nexport async function preparePublicationPayloads(\n  rows: readonly CatalogEntry[],\n  fetcher: typeof fetch,\n  external: { readonly catalog: CatalogSource; readonly fetcher: typeof fetch } | undefined,\n  services: PublicationPreparationServices,\n  loaders: LoaderRegistry,\n  context: LoadContext,\n): Promise<Result<ReadonlyMap<string, Asset>, unknown>> {\n  const reader = new PackReader();\n  try {\n    const base = external ? (await external.catalog.enumerate()).unwrap() : [];\n    const catalog = new Map(base.map((row) => [row.guid.toLowerCase(), row]));\n    for (const [guid, dependency] of services.dependencies ?? []) catalog.set(guid, dependency.row);\n    for (const row of rows) {\n      if (services.dependencies?.has(row.guid))\n        throw new TypeError('candidate overlaps a retained dependency');\n      catalog.set(row.guid, row);\n    }\n    const prepared = new Map<string, Asset>();\n    const packs = new Map<string, RuntimePackEnvelope>();\n    const read = async (input: RequestInfo | URL, init?: RequestInit) => {\n      const response = await fetcher(input, init);\n      return response.status === 404 && external ? external.fetcher(input, init) : response;\n    };\n    for (const row of rows) {\n      const references = validatePublicationReferences(row.guid, row, (guid) =>\n        catalog.get(guid.toLowerCase()),\n      );\n      if (!references.ok) return references;\n      let pack = packs.get(row.packageUrl) ?? services.pack;\n      if (!pack) {\n        const response = await read(row.packageUrl);\n        if (!response.ok) throw new TypeError('candidate Pack unavailable');\n        pack = (await response.json()) as RuntimePackEnvelope;\n      }\n      if (!packs.has(row.packageUrl)) {\n        const tuple = row.publication;\n        if (!tuple) throw new TypeError('candidate publication missing');\n        const verified = reader.verify(pack, { ...tuple, scopeId: pack.scopeId });\n        if (!verified.ok) return verified;\n        packs.set(row.packageUrl, pack);\n      }\n      const envelope = pack.assets.find((asset) => asset.guid === row.guid);\n      if (!envelope || envelope.kind !== row.kind)\n        throw new TypeError('candidate output differs from its Catalog');\n      const artifacts: Record<string, { descriptor: ArtifactDescriptor; bytes: Uint8Array }> = {};\n      for (const [key, raw] of Object.entries(envelope.artifacts)) {\n        const descriptor = raw as ArtifactDescriptor;\n        const bytes = await readArtifact(\n          { guid: row.guid, packageUrl: row.packageUrl, artifactKey: key, descriptor },\n          read,\n        );\n        if (!bytes.ok) return bytes;\n        artifacts[key] = { descriptor, bytes: bytes.value };\n      }\n      const loaded = await loaders.loadPack(\n        {\n          guid: row.guid,\n          kind: row.kind,\n          payload: envelope.payload as Record<string, unknown>,\n          refs: envelope.refs,\n          artifacts,\n        },\n        context,\n      );\n      if (!loaded.ok) return err(loaded.error);\n      if (\n        !loaded.value ||\n        typeof loaded.value !== 'object' ||\n        !('kind' in loaded.value) ||\n        loaded.value.kind !== row.kind\n      )\n        throw new TypeError('domain loader did not prepare the declared asset kind');\n      const result = prepareAssetPayload(loaded.value as Asset);\n      if (!result.ok) return result;\n      if (result.value.kind === 'mesh') assertPrivateMeshStorage(result.value);\n      prepared.set(row.guid, result.value);\n    }\n    for (const row of rows) {\n      const asset = prepared.get(row.guid);\n      const envelope = packs.get(row.packageUrl)?.assets.find((entry) => entry.guid === row.guid);\n      if (!asset || !envelope) throw new TypeError(`missing prepared output ${row.guid}`);\n      const refs = envelope.refs.map((guid) => ({ guid }));\n      for (const ref of refs)\n        if (!catalog.has(ref.guid)) throw new TypeError(`missing candidate dependency ${ref.guid}`);\n      const error = validateAssetReferences(\n        asset,\n        row.guid,\n        refs,\n        (guid) => prepared.get(guid)?.kind ?? catalog.get(guid.toLowerCase())?.kind,\n      );\n      if (error) return err(error);\n    }\n    // Geometry is validated while all outputs are still private. A failed derived\n    // texture must not displace the currently accepted publication.\n    for (const asset of prepared.values()) {\n      if (asset.kind !== 'terrain') continue;\n      const closure = new Map<string, Asset>([\n        ...[...(services.dependencies ?? [])].map(\n          ([guid, value]) => [guid, value.asset as Asset] as const,\n        ),\n        ...prepared,\n      ]);\n      if (!terrainDerivedClosureValid(asset, closure))\n        throw new TypeError(\n          'terrain derived geometry/height/control/layer closure differs from its author samples',\n        );\n    }\n    return ok(prepared);\n  } catch (cause) {\n    return err(\n      new AssetError({\n        code: 'asset-parse-failed',\n        expected: 'a complete domain-valid candidate publication',\n        hint: cause instanceof Error ? cause.message : String(cause),\n      }),\n    );\n  } finally {\n    reader.dispose();\n  }\n}\n","import type { CookedMaterialRecord, MaterialCookProgramContext } from '@forgeax/engine-pack';\nimport { materialProgramContextKey } from '@forgeax/engine-pack/material-cook';\nimport {\n  type MaterialArtifactConflictError,\n  MaterialArtifactRegistry,\n  type MaterialRuntimeArtifact,\n  type ShaderRegistry,\n} from '@forgeax/engine-shader';\nimport type {\n  MaterialParameter,\n  MaterialProgramAbi,\n  MaterialProgramAddress,\n  MaterialSurfaceDeclaration,\n  MaterialValue,\n  ParamSchemaEntry,\n} from '@forgeax/engine-types';\nimport { projectMaterialParameterSchema } from '@forgeax/engine-types';\nimport type { MaterialLoadError, MaterialReady } from './loader';\n\nexport interface MaterialRenderPassProjection {\n  readonly name: string;\n  readonly module: string;\n  readonly outputs?: import('@forgeax/engine-types').MaterialPass['outputs'];\n  readonly vertexEntry?: string;\n  readonly fragmentEntry?: string;\n  readonly moduleSlots?: Readonly<Record<string, string>>;\n  readonly renderState?: Readonly<Record<string, unknown>>;\n  readonly programs: readonly {\n    readonly context: MaterialCookProgramContext;\n    readonly specializationKey: string;\n    readonly artifactHash: string;\n    readonly address?: MaterialProgramAddress;\n    readonly entry?: string;\n    readonly abi?: MaterialProgramAbi;\n  }[];\n}\n\nexport interface MaterialRenderProjection {\n  readonly materialGuid: string;\n  readonly publicationGeneration: number;\n  readonly specializationKey: string;\n  readonly artifactHash: string;\n  readonly passes: readonly MaterialRenderPassProjection[];\n  readonly runtimeValues: Readonly<Record<string, MaterialValue | null>>;\n  /** Root-published Surface model; Render owns preparation and admission. */\n  readonly surface?: MaterialSurfaceDeclaration;\n  readonly staticSelection: readonly string[];\n}\n\n/** Exact Pass/context lookup; the renderer supplies all domain-owned axes. */\nexport function selectMaterialPassProgram(\n  projection: MaterialRenderProjection,\n  passName: string,\n  context: MaterialCookProgramContext,\n  address: MaterialProgramAddress = 'direct',\n  vertexColorAvailable = false,\n): MaterialRenderPassProjection['programs'][number] {\n  const key = materialProgramContextKey(context);\n  const modernPublication = projection.passes.some((pass) =>\n    pass.programs.some(\n      (program) =>\n        program.context.pipeline !== 'ray' &&\n        (program.address !== undefined || program.entry !== undefined || program.abi !== undefined),\n    ),\n  );\n  const candidates = projection.passes\n    .filter((pass) => pass.name === passName)\n    .flatMap((pass) =>\n      pass.programs.filter(\n        (program) =>\n          materialProgramContextKey(program.context) === key &&\n          (context.pipeline === 'ray'\n            ? address === 'direct'\n            : modernPublication\n              ? program.address === address\n              : (program.address ?? 'direct') === address),\n      ),\n    );\n  // Extra mesh attributes need no shader input. Prefer the color variant when\n  // published; shaders that do not consume color can still draw colored meshes.\n  const hasColor = (program: MaterialRenderPassProjection['programs'][number]) =>\n    program.abi?.vertexInputs.some((input) => input.semantic === 'color') === true;\n  const selectColor = vertexColorAvailable && candidates.some(hasColor);\n  const matches = candidates.filter((program) => hasColor(program) === selectColor);\n  if (matches.length !== 1 || matches[0] === undefined) {\n    throw Object.assign(\n      new Error(\n        `Material ${projection.materialGuid} has no unique published program for ${passName} in ${key}`,\n      ),\n      {\n        code: 'material-specialization-not-cooked',\n        expected: 'exactly one program for the selected Pass and renderer context',\n        hint: 'cook the required context before rendering this material',\n        retryable: false,\n        recoveryActions: ['recook-material-publication'],\n        detail: {\n          guid: projection.materialGuid,\n          specializationKey: projection.specializationKey,\n          pass: passName,\n          context,\n          address,\n          vertexColorAvailable,\n          matches: matches.length,\n        },\n      } satisfies MaterialLoadError['error'],\n    );\n  }\n  return matches[0];\n}\n\n/** Project authored MaterialAsset parameters into the runtime shader schema. */\nexport function materialParametersToParamSchema(\n  parameters: readonly MaterialParameter[],\n  material = '<runtime>',\n): readonly ParamSchemaEntry[] {\n  const schema = projectMaterialParameterSchema(parameters, material, 'runtime');\n  if (!schema.ok) throw Object.assign(new Error(schema.error.message), schema.error);\n  return schema.value;\n}\n\n/** Project authored pass module ids onto the renderer's canonical ids. */\nexport function runtimeMaterialShaderId(\n  module: string | undefined,\n  passName?: string,\n): string | undefined {\n  if (\n    passName === 'shadow-caster' &&\n    (module === 'forgeax_material::standard' || module === 'forgeax::default-standard-pbr')\n  ) {\n    return 'forgeax::default-shadow-caster';\n  }\n  switch (module) {\n    case 'forgeax_material::standard':\n      return 'forgeax::default-standard-pbr';\n    case 'forgeax_material::unlit':\n      return 'forgeax::default-unlit';\n    case 'forgeax_material::sprite':\n      return 'forgeax::sprite';\n    case 'forgeax_material::sprite-lit':\n      return 'forgeax::sprite-lit';\n    default:\n      return module;\n  }\n}\n\nexport function projectMaterialRecord(record: CookedMaterialRecord): MaterialRenderProjection {\n  return {\n    materialGuid: record.materialGuid ?? record.guid,\n    publicationGeneration: record.publicationGeneration ?? record.receipt.identity.cookGeneration,\n    specializationKey: record.specializationKey ?? record.receipt.identity.artifactDigest,\n    artifactHash: record.receipt.identity.artifactDigest,\n    passes: record.resolved.passes.map((pass) => ({\n      name: pass.name,\n      module: pass.program.module,\n      ...(pass.outputs === undefined ? {} : { outputs: pass.outputs }),\n      ...(pass.program.vertexEntry === undefined ? {} : { vertexEntry: pass.program.vertexEntry }),\n      ...(pass.program.fragmentEntry === undefined\n        ? {}\n        : { fragmentEntry: pass.program.fragmentEntry }),\n      ...(pass.program.moduleSlots === undefined ? {} : { moduleSlots: pass.program.moduleSlots }),\n      ...(pass.renderState === undefined ? {} : { renderState: pass.renderState }),\n      programs: record.programs.flatMap((program) =>\n        program.selections\n          .filter((selection) => selection.pass === pass.name)\n          .map((selection) => ({\n            context: selection.context,\n            specializationKey: program.specializationKey,\n            artifactHash: program.artifact.digest,\n            ...(selection.address === undefined ? {} : { address: selection.address }),\n            ...(selection.entry === undefined ? {} : { entry: selection.entry }),\n            ...(selection.abi === undefined ? {} : { abi: selection.abi }),\n          })),\n      ),\n    })),\n    runtimeValues: record.resolved.values,\n    ...(record.resolved.surface === undefined ? {} : { surface: record.resolved.surface }),\n    staticSelection: [],\n  };\n}\n\nfunction conflictError(error: MaterialArtifactConflictError): Error {\n  return Object.assign(new Error(`${error.code}: ${error.detail.key}`), error);\n}\n\n/** Preflight the complete set before mutating either runtime registry. */\nexport function installMaterialReadyShaders(\n  shaderRegistry: ShaderRegistry,\n  readiness: MaterialReady,\n  artifactRegistry: MaterialArtifactRegistry,\n): MaterialRenderProjection {\n  // Defaults belong to the root value contract, not an immutable shared program.\n  const paramSchema = materialParametersToParamSchema(\n    readiness.record.parameterContract.parameters,\n    readiness.record.guid,\n  ).map(({ default: _default, ...parameter }) => parameter);\n  const entries = readiness.record.programs.map((program) => {\n    const source = new TextDecoder().decode(program.artifact.bytes);\n    if (source.length === 0)\n      throw new Error(\n        `MaterialReady ${readiness.record.guid} contains an empty shader program ${program.specializationKey}`,\n      );\n    const pass = readiness.record.resolved.passes.find((pass) =>\n      program.selections.some((selection) => selection.pass === pass.name),\n    );\n    const abi = program.selections.find((selection) => selection.abi !== undefined)?.abi;\n    const artifact: MaterialRuntimeArtifact = {\n      key: program.specializationKey,\n      bytes: new Uint8Array(program.artifact.bytes),\n      digest: program.artifact.digest,\n      metadata: Object.freeze({\n        module: pass?.program.module,\n        paramSchema,\n        ...(abi === undefined ? {} : { abi, receipt: abi }),\n      }),\n    };\n    return { artifact, source, ...(abi === undefined ? {} : { abi }) };\n  });\n  const validation = new MaterialArtifactRegistry();\n  for (const { artifact, source, abi } of entries) {\n    const previous = artifactRegistry.get(artifact.key);\n    if (previous !== undefined) validation.register(previous).unwrap();\n    const checked = validation.register(artifact);\n    if (!checked.ok) throw conflictError(checked.error);\n    const shader = shaderRegistry.findMaterialArtifact(artifact.key);\n    if (\n      shader.ok &&\n      (shader.value.source !== source ||\n        JSON.stringify(shader.value.paramSchema) !== JSON.stringify(paramSchema) ||\n        JSON.stringify(shader.value.receipt) !== JSON.stringify(abi))\n    ) {\n      throw conflictError({\n        code: 'material-artifact-conflict',\n        expected: 'one immutable source, interface, and ABI receipt per program key',\n        hint: 're-cook the conflicting program',\n        detail: {\n          key: artifact.key,\n          dimension:\n            shader.value.source !== source\n              ? 'bytes'\n              : JSON.stringify(shader.value.paramSchema) !== JSON.stringify(paramSchema)\n                ? 'param-schema'\n                : 'receipt',\n        },\n      });\n    }\n  }\n  for (const { artifact, source, abi } of entries) {\n    artifactRegistry.register(artifact).unwrap();\n    if (!shaderRegistry.findMaterialArtifact(artifact.key).ok)\n      shaderRegistry.installMaterialArtifact(artifact.key, {\n        source,\n        paramSchema,\n        ...(abi === undefined ? {} : { receipt: abi }),\n      });\n  }\n  return projectMaterialRecord(readiness.record);\n}\n","import {\n  type AssetEvidence,\n  type AssetEvidenceError,\n  type AssetEvidenceInputs,\n  err,\n  projectAssetEvidence,\n  type Result,\n} from '@forgeax/engine-types';\n\n/** Host-injected runtime bridge; the adapter never imports CLI, Vite, or Node policy. */\nexport interface RuntimeEvidenceSource {\n  readonly evidence: (\n    guid: string,\n  ) => Promise<AssetEvidenceInputs | Result<AssetEvidenceInputs, AssetEvidenceError>>;\n}\n\n/** Runtime SDK view over the shared AssetEvidence projector. */\nexport interface RuntimeAssetEvidenceAdapter {\n  readonly inspect: (guid: string) => Promise<Result<AssetEvidence, AssetEvidenceError>>;\n  readonly verifyByGuid: (guid: string) => Promise<Result<AssetEvidence, AssetEvidenceError>>;\n}\n\nfunction missingCapability(guid: string): Result<never, AssetEvidenceError> {\n  return err({\n    code: 'asset-evidence-capability-missing',\n    expected: 'an injected runtime evidence source',\n    hint: 'configure an evidence source before calling inspect(guid) or verifyByGuid(guid)',\n    detail: { capability: 'runtime evidence source', stage: `guid:${guid}` },\n  });\n}\n\nasync function project(\n  source: RuntimeEvidenceSource,\n  guid: string,\n): Promise<Result<AssetEvidence, AssetEvidenceError>> {\n  const input = await source.evidence(guid);\n  if ('ok' in input) {\n    if (!input.ok) return input;\n    return projectAssetEvidence(input.value);\n  }\n  return projectAssetEvidence(input);\n}\n\n/** Create an adapter; omitted source intentionally returns capability-missing errors. */\nexport function createRuntimeAssetEvidenceAdapter(\n  source?: RuntimeEvidenceSource,\n): RuntimeAssetEvidenceAdapter {\n  const read = async (guid: string): Promise<Result<AssetEvidence, AssetEvidenceError>> =>\n    source === undefined ? missingCapability(guid) : project(source, guid);\n  return { inspect: read, verifyByGuid: read };\n}\n","import { ok, type Result } from '@forgeax/engine-rhi';\nimport type {\n  AssetError,\n  CatalogDelta,\n  CatalogDiagnostic,\n  CatalogEntry,\n  CatalogRevisionWindow,\n  ResourceRevision,\n  RuntimeAssetBinding,\n} from '@forgeax/engine-types';\nimport type { CatalogSource } from '../catalog-source';\n\nexport interface CatalogReplicaSnapshot {\n  readonly version: number;\n  readonly entries: readonly CatalogEntry[];\n  readonly stale: boolean;\n  readonly diagnostics: readonly CatalogDiagnostic[];\n}\n\ntype SnapshotResult = Result<CatalogReplicaSnapshot, AssetError>;\ntype CatalogDeltaListener = (delta: CatalogDelta) => void;\n\nfunction guidKey(guid: string): string {\n  return guid.toLowerCase();\n}\n\nfunction freezeEntry(entry: CatalogEntry): CatalogEntry {\n  return Object.freeze({ ...entry });\n}\n\nfunction freezeSnapshot(snapshot: CatalogReplicaSnapshot): CatalogReplicaSnapshot {\n  return Object.freeze({\n    ...snapshot,\n    entries: Object.freeze(snapshot.entries.map(freezeEntry)),\n    diagnostics: Object.freeze([...snapshot.diagnostics]),\n  });\n}\n\nfunction revisionIsOlder(\n  incoming: ResourceRevision | undefined,\n  current: ResourceRevision | undefined,\n): boolean {\n  return (\n    incoming !== undefined && current !== undefined && incoming.observedAt < current.observedAt\n  );\n}\n\nfunction sameRevision(left: ResourceRevision, right: ResourceRevision): boolean {\n  return (\n    left.digest === right.digest &&\n    left.observedAt === right.observedAt &&\n    left.rootId === right.rootId\n  );\n}\n\nfunction sameValue(left: unknown, right: unknown): boolean {\n  return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction diagnosticForGap(): CatalogDiagnostic {\n  return {\n    code: 'catalog-gap',\n    severity: 'blocking',\n    expected: 'a contiguous producer revision window',\n    hint: 'reconcile the catalog before consuming incremental changes',\n    authority: 'catalog',\n  };\n}\n\nfunction diagnosticForDegradedRows(): CatalogDiagnostic {\n  return {\n    code: 'catalog-degraded-rows',\n    severity: 'blocking',\n    expected: 'a degraded catalog delta to contain no identity-bearing rows',\n    hint: 'keep the last verified catalog and reconcile before applying a replacement',\n    authority: 'catalog',\n  };\n}\n\nfunction hasIdentityChanges(delta: CatalogDelta): boolean {\n  return delta.added.length > 0 || delta.changed.length > 0 || delta.removed.length > 0;\n}\n\nfunction revisionDiagnostic(\n  revisions: CatalogRevisionWindow,\n  hasChanges: boolean,\n): CatalogDiagnostic | undefined {\n  const baselineByRoot = new Map(revisions.baseline.map((point) => [point.rootId, point]));\n  const currentByRoot = new Map(revisions.current.map((point) => [point.rootId, point]));\n\n  for (const point of revisions.current) {\n    const baseline = baselineByRoot.get(point.rootId);\n    if (baseline === undefined) {\n      return {\n        code: 'catalog-revision-conflict',\n        severity: 'blocking',\n        expected: 'every current root to have a verified baseline',\n        actual: point.rootId,\n        hint: 'restore the latest verified snapshot for this root before applying the delta',\n        authority: 'catalog',\n      };\n    }\n    if (point.revision < baseline.revision) {\n      return {\n        code: 'catalog-revision-stale',\n        severity: 'blocking',\n        expected: 'current revision to be at least the verified baseline',\n        actual: `${baseline.revision} -> ${point.revision}`,\n        hint: 'discard the stale update and request a fresh catalog snapshot',\n        authority: 'catalog',\n      };\n    }\n    if (point.revision === baseline.revision && hasChanges) {\n      return {\n        code: 'catalog-revision-conflict',\n        severity: 'blocking',\n        expected: 'a changed delta to advance the root revision',\n        actual: `${baseline.revision} -> ${point.revision}`,\n        hint: 'keep the verified baseline and serialize concurrent updates before retrying',\n        authority: 'catalog',\n      };\n    }\n    if (point.revision > baseline.revision + 1) {\n      return {\n        code: 'catalog-revision-conflict',\n        severity: 'blocking',\n        expected: 'the next revision to be exactly baseline + 1',\n        actual: `${baseline.revision} -> ${point.revision}`,\n        hint: 'request the missing revisions or rebuild from the latest verified snapshot',\n        authority: 'catalog',\n      };\n    }\n  }\n\n  for (const point of revisions.baseline) {\n    if (!currentByRoot.has(point.rootId)) {\n      return {\n        code: 'catalog-revision-conflict',\n        severity: 'blocking',\n        expected: 'every baseline root to be present in the current revision set',\n        actual: point.rootId,\n        hint: 'do not apply a partial root set over the verified baseline',\n        authority: 'catalog',\n      };\n    }\n  }\n\n  return undefined;\n}\n\nfunction rowRevisionDiagnostic(\n  entries: ReadonlyMap<string, CatalogEntry>,\n  delta: CatalogDelta,\n): CatalogDiagnostic | undefined {\n  for (const entry of [...delta.added, ...delta.changed]) {\n    const prior = entries.get(guidKey(entry.guid));\n    if (prior?.revision === undefined) continue;\n    if (prior !== undefined && sameValue(prior, entry)) continue;\n    if (entry.revision === undefined) {\n      return {\n        code: 'catalog-revision-conflict',\n        severity: 'blocking',\n        expected: 'a replacement row to carry a newer producer revision',\n        actual: `${prior.revision.rootId}@${prior.revision.observedAt} -> missing`,\n        hint: 'restore the producer revision before applying the catalog change',\n        authority: 'catalog',\n      };\n    }\n    if (entry.revision.observedAt < prior.revision.observedAt) {\n      return {\n        code: 'catalog-revision-stale',\n        severity: 'blocking',\n        expected: 'a replacement row to carry a non-decreasing producer revision',\n        actual: `${prior.revision.observedAt} -> ${entry.revision.observedAt}`,\n        hint: 'discard the stale update and request a fresh catalog snapshot',\n        authority: 'catalog',\n      };\n    }\n    if (entry.revision.observedAt === prior.revision.observedAt) {\n      return {\n        code: 'catalog-revision-conflict',\n        severity: 'blocking',\n        expected: 'a changed row to advance its producer revision',\n        actual: sameRevision(prior.revision, entry.revision)\n          ? `${prior.revision.observedAt} -> ${entry.revision.observedAt}`\n          : `${prior.revision.digest} -> ${entry.revision.digest}`,\n        hint: 'publish a new producer revision for changed payload bytes',\n        authority: 'catalog',\n      };\n    }\n  }\n  return undefined;\n}\n\nfunction diagnosticForScopeMismatch(): CatalogDiagnostic {\n  return {\n    code: 'catalog-scope-mismatch',\n    severity: 'blocking',\n    expected: 'catalog delta scopeId and generation to match the active runtime binding',\n    hint: 'discard the stale publication and reconcile the active runtime catalog',\n    authority: 'catalog',\n  };\n}\n\nfunction appendDiagnostic(\n  diagnostics: readonly CatalogDiagnostic[],\n  incoming: readonly CatalogDiagnostic[] | undefined,\n): readonly CatalogDiagnostic[] {\n  const next = [...diagnostics];\n  for (const diagnostic of incoming ?? []) {\n    if (!next.some((existing) => existing.code === diagnostic.code)) next.push(diagnostic);\n  }\n  return next;\n}\n\n/**\n * One authoritative catalog read model owned by AssetRegistry.\n *\n * The source subscription is installed before the first enumeration. Deltas\n * observed during that baseline read are buffered and folded afterwards, so\n * an early publication cannot disappear between the two operations.\n */\nexport class CatalogReplica {\n  private readonly source: CatalogSource;\n  private readonly listeners = new Set<CatalogDeltaListener>();\n  private readonly entries = new Map<string, CatalogEntry>();\n  private pendingBeforeBaseline: CatalogDelta[] = [];\n  private pendingDuringReconcile: CatalogDelta[] | undefined;\n  private unsubscribe: (() => void) | undefined;\n  private startPromise: Promise<SnapshotResult> | undefined;\n  private baselineReady = false;\n  private version = 0;\n  private stale = false;\n  private diagnostics: readonly CatalogDiagnostic[] = [];\n  private currentSnapshot: CatalogReplicaSnapshot | undefined;\n  private readonly expectedScope: Pick<RuntimeAssetBinding, 'scopeId' | 'generation'> | undefined;\n\n  constructor(source: CatalogSource) {\n    this.source = source;\n    this.expectedScope = source.expectedScope;\n    this.currentSnapshot = freezeSnapshot({\n      version: 0,\n      entries: [],\n      stale: false,\n      diagnostics: [],\n    });\n  }\n\n  subscribe(listener: CatalogDeltaListener): () => void {\n    this.listeners.add(listener);\n    return () => this.listeners.delete(listener);\n  }\n\n  snapshot(): CatalogReplicaSnapshot {\n    return this.currentSnapshot ?? this.makeSnapshot();\n  }\n\n  /** Read an accepted row without materializing or sorting the full observation. */\n  get(guid: string): CatalogEntry | undefined {\n    return this.entries.get(guidKey(guid));\n  }\n\n  /**\n   * Adopt an already accepted baseline without reading the source again.\n   *\n   * AssetRegistry uses this when a URL-backed pack index was loaded before a\n   * CatalogSource was attached. The replica still subscribes before exposing\n   * the baseline, so later deltas retain the same ordering and validation\n   * semantics as a normal `start()`.\n   */\n  seed(entries: readonly CatalogEntry[]): void {\n    if (this.startPromise !== undefined || this.baselineReady) return;\n    if (this.unsubscribe === undefined) {\n      this.unsubscribe = this.source.subscribe((delta) => this.receive(delta));\n    }\n    this.entries.clear();\n    for (const entry of entries) this.entries.set(guidKey(entry.guid), freezeEntry(entry));\n    this.stale = false;\n    this.diagnostics = [];\n    this.baselineReady = true;\n    const pending = this.pendingBeforeBaseline;\n    this.pendingBeforeBaseline = [];\n    this.pendingDuringReconcile = undefined;\n    for (const delta of pending) this.fold(delta, false);\n    this.currentSnapshot = this.makeSnapshot();\n  }\n\n  dispose(): void {\n    this.unsubscribe?.();\n    this.unsubscribe = undefined;\n    this.startPromise = undefined;\n    this.pendingBeforeBaseline = [];\n    this.pendingDuringReconcile = undefined;\n    this.listeners.clear();\n  }\n\n  async start(): Promise<SnapshotResult> {\n    if (this.startPromise !== undefined) return this.startPromise;\n    // `reconcile()` accepts a fresh baseline without populating startPromise.\n    // Once that baseline is ready, a later consumer start is only another\n    // view of the same authoritative snapshot; fetching again would duplicate\n    // the catalog read for constrained sources that must reconcile first.\n    // Disposal removes the subscription, so a deliberately restarted replica\n    // still takes the normal subscribe-and-load path.\n    if (this.baselineReady && this.unsubscribe !== undefined) {\n      return Promise.resolve(ok(this.snapshot()));\n    }\n    if (this.unsubscribe === undefined) {\n      this.unsubscribe = this.source.subscribe((delta) => this.receive(delta));\n    }\n    const promise = this.loadBaseline(false);\n    this.startPromise = promise;\n    void promise.then((result) => {\n      if (!result.ok) this.startPromise = undefined;\n    });\n    return promise;\n  }\n\n  async reconcile(): Promise<SnapshotResult> {\n    if (this.unsubscribe === undefined) {\n      this.unsubscribe = this.source.subscribe((delta) => this.receive(delta));\n    }\n    this.pendingDuringReconcile = [];\n    return this.loadBaseline(true);\n  }\n\n  private async loadBaseline(isReconcile: boolean): Promise<SnapshotResult> {\n    const result = await this.source.enumerate();\n    if (!result.ok) {\n      this.stale = true;\n      this.currentSnapshot = this.makeSnapshot();\n      if (!isReconcile) this.pendingBeforeBaseline = [];\n      this.pendingDuringReconcile = undefined;\n      return result;\n    }\n\n    this.entries.clear();\n    for (const entry of result.value) this.entries.set(guidKey(entry.guid), freezeEntry(entry));\n    this.stale = false;\n    this.diagnostics = [];\n    this.baselineReady = true;\n    const pending = isReconcile ? (this.pendingDuringReconcile ?? []) : this.pendingBeforeBaseline;\n    this.pendingBeforeBaseline = [];\n    this.pendingDuringReconcile = undefined;\n    for (const delta of pending) this.fold(delta, false);\n    this.currentSnapshot = this.makeSnapshot();\n    return ok(this.currentSnapshot);\n  }\n\n  private receive(delta: CatalogDelta): void {\n    if (!this.baselineReady) {\n      if (this.pendingDuringReconcile !== undefined) this.pendingDuringReconcile.push(delta);\n      else this.pendingBeforeBaseline.push(delta);\n      this.publish(this.safeDelta(delta));\n      return;\n    }\n    if (this.pendingDuringReconcile !== undefined) {\n      this.pendingDuringReconcile.push(delta);\n      this.publish(this.safeDelta(delta));\n      return;\n    }\n    this.fold(delta, true);\n  }\n\n  private fold(delta: CatalogDelta, publish: boolean): void {\n    const safeDelta = this.safeDelta(delta);\n    const degraded = safeDelta.authority === 'degraded';\n    this.stale = this.stale || degraded;\n    this.diagnostics = appendDiagnostic(\n      this.diagnostics,\n      safeDelta.diagnostics?.some((diagnostic) => diagnostic.code === 'catalog-gap')\n        ? [...(safeDelta.diagnostics ?? []), diagnosticForGap()]\n        : safeDelta.diagnostics,\n    );\n\n    if (degraded) {\n      // A failed producer observation cannot replace asset identity or payload.\n      // Retain recovery evidence from our accepted baseline, never from the\n      // rejected delta's rows or locators.\n      const affected = new Set(\n        (safeDelta.diagnostics ?? [])\n          .filter((diagnostic) => diagnostic.code.startsWith('source-package-'))\n          .flatMap((diagnostic) =>\n            (diagnostic.evidence ?? [])\n              .filter((evidence) => evidence.type === 'asset')\n              .map((evidence) => guidKey(evidence.id)),\n          ),\n      );\n      for (const key of affected) {\n        const entry = this.entries.get(key);\n        if (\n          entry?.lifecycle !== 'current' ||\n          entry.revision === undefined ||\n          entry.projection === undefined ||\n          entry.projection.lastKnownGood !== undefined\n        )\n          continue;\n        this.entries.set(\n          key,\n          freezeEntry({\n            ...entry,\n            projection: { ...entry.projection, lastKnownGood: { packageUrl: entry.packageUrl } },\n          }),\n        );\n      }\n    }\n\n    if (!degraded) {\n      let changed = false;\n      for (const entry of [...safeDelta.added, ...safeDelta.changed]) {\n        const key = guidKey(entry.guid);\n        const prior = this.entries.get(key);\n        if (revisionIsOlder(entry.revision, prior?.revision)) continue;\n        if (prior !== undefined && sameValue(prior, entry)) continue;\n        this.entries.set(key, freezeEntry(entry));\n        changed = true;\n      }\n      for (const guid of safeDelta.removed) {\n        if (this.entries.delete(guidKey(guid))) changed = true;\n      }\n      if (changed) this.version += 1;\n    }\n\n    this.currentSnapshot = undefined;\n    if (publish) {\n      this.publish(safeDelta);\n    }\n  }\n\n  private safeDelta(delta: CatalogDelta): CatalogDelta {\n    const diagnostic =\n      this.expectedScope !== undefined &&\n      (delta.scopeId !== this.expectedScope.scopeId ||\n        delta.generation !== this.expectedScope.generation)\n        ? diagnosticForScopeMismatch()\n        : delta.revisions === undefined\n          ? rowRevisionDiagnostic(this.entries, delta)\n          : (revisionDiagnostic(delta.revisions, hasIdentityChanges(delta)) ??\n            rowRevisionDiagnostic(this.entries, delta));\n    const degradedRows = delta.authority === 'degraded' && hasIdentityChanges(delta);\n    if (diagnostic === undefined && !degradedRows) return delta;\n    return {\n      ...delta,\n      added: [],\n      changed: [],\n      removed: [],\n      authority: 'degraded',\n      diagnostics: appendDiagnostic(\n        [],\n        [\n          ...(diagnostic === undefined ? [] : [diagnostic]),\n          ...(degradedRows ? [diagnosticForDegradedRows()] : []),\n        ],\n      ),\n    };\n  }\n\n  private publish(delta: CatalogDelta): void {\n    for (const listener of [...this.listeners]) {\n      try {\n        listener(delta);\n      } catch {\n        // One observer cannot prevent the remaining catalog observers from seeing a fact.\n      }\n    }\n  }\n\n  private makeSnapshot(): CatalogReplicaSnapshot {\n    const entries = [...this.entries.values()].sort((left, right) =>\n      guidKey(left.guid).localeCompare(guidKey(right.guid)),\n    );\n    this.currentSnapshot = freezeSnapshot({\n      version: this.version,\n      entries,\n      stale: this.stale,\n      diagnostics: this.diagnostics,\n    });\n    return this.currentSnapshot;\n  }\n}\n","export type LoadStatus = 'unloaded' | 'prepared' | 'provisional' | 'ready' | 'failed';\n\nexport interface LoadRecord {\n  readonly status: LoadStatus;\n  readonly refs: readonly string[];\n  readonly value?: unknown;\n  readonly error?: unknown;\n}\n\ninterface MutableLoadRecord {\n  status: LoadStatus;\n  refs: readonly string[];\n  value?: unknown;\n  error?: unknown;\n}\n\nexport class LoadStateStore {\n  private readonly records = new Map<string, MutableLoadRecord>();\n  private readonly consumers = new Map<string, Set<string>>();\n\n  private set(guid: string, record: MutableLoadRecord): void {\n    this.remove(guid);\n    this.records.set(guid, record);\n    for (const ref of record.refs) {\n      const key = ref.toLowerCase();\n      let consumers = this.consumers.get(key);\n      if (!consumers) {\n        consumers = new Set();\n        this.consumers.set(key, consumers);\n      }\n      consumers.add(guid);\n    }\n  }\n\n  /** Reverse edges derive from existing load records; visit only the affected closure. */\n  affected(guid: string): ReadonlySet<string> {\n    const affected = new Set<string>();\n    const visit = (key: string): void => {\n      if (affected.has(key)) return;\n      affected.add(key);\n      for (const consumer of this.consumers.get(key) ?? []) visit(consumer);\n    };\n    visit(guid.toLowerCase());\n    return affected;\n  }\n\n  prepare(guid: string, value: unknown, refs: readonly string[]): void {\n    this.set(guid.toLowerCase(), { status: 'prepared', value, refs });\n  }\n\n  getPrepared<T>(guid: string): T | undefined {\n    const record = this.records.get(guid.toLowerCase());\n    return record?.status === 'prepared' ? (record.value as T) : undefined;\n  }\n\n  get(guid: string): LoadRecord | undefined {\n    return this.records.get(guid.toLowerCase());\n  }\n\n  getReady<T = unknown>(guid: string): T | undefined {\n    const record = this.records.get(guid.toLowerCase());\n    return record?.status === 'ready' ? (record.value as T) : undefined;\n  }\n\n  /**\n   * Return a provisional value only for the internal SCC back-edge bridge.\n   * Public callers must use getReady so promotion remains the visibility gate.\n   */\n  getProvisional<T = unknown>(guid: string): T | undefined {\n    const record = this.records.get(guid.toLowerCase());\n    return record?.status === 'provisional' ? (record.value as T) : undefined;\n  }\n\n  begin(guid: string, refs: readonly string[]): LoadRecord {\n    const key = guid.toLowerCase();\n    const existing = this.records.get(key);\n    if (existing?.status === 'provisional' || existing?.status === 'ready') return existing;\n    const record: MutableLoadRecord = {\n      status: 'provisional',\n      refs: refs.map((ref) => ref.toLowerCase()),\n    };\n    this.set(key, record);\n    return record;\n  }\n\n  resolveAsset(guid: string, value: unknown): void {\n    const key = guid.toLowerCase();\n    const record = this.records.get(key);\n    if (record === undefined) {\n      this.set(key, { status: 'provisional', refs: [], value });\n      return;\n    }\n    record.value = value;\n  }\n\n  registerReady(guid: string, value: unknown): void {\n    this.begin(guid, []);\n    this.resolveAsset(guid, value);\n    this.promoteReady(guid);\n  }\n\n  promoteReady(guid: string): void {\n    const root = guid.toLowerCase();\n    const group = this.provisionalGroup(root);\n    if (group.size === 0) return;\n    for (const key of group) {\n      const record = this.records.get(key);\n      if (record?.value === undefined) return;\n      for (const ref of record.refs) {\n        const dependency = this.records.get(ref);\n        if (dependency === undefined || (dependency.status !== 'ready' && !group.has(ref))) return;\n      }\n    }\n    for (const key of group) {\n      const record = this.records.get(key);\n      if (record !== undefined) record.status = 'ready';\n    }\n  }\n\n  fail(guid: string, error: unknown): readonly string[] {\n    const doomed = this.provisionalGroup(guid.toLowerCase());\n    if (doomed.size === 0) doomed.add(guid.toLowerCase());\n    for (const key of doomed) {\n      this.set(key, { status: 'unloaded', refs: [] });\n    }\n    const root = this.records.get(guid.toLowerCase());\n    if (root !== undefined) root.error = error;\n    return [...doomed];\n  }\n\n  remove(guid: string): void {\n    const key = guid.toLowerCase();\n    for (const ref of this.records.get(key)?.refs ?? []) {\n      const consumers = this.consumers.get(ref.toLowerCase());\n      consumers?.delete(key);\n      if (consumers?.size === 0) this.consumers.delete(ref.toLowerCase());\n    }\n    this.records.delete(key);\n  }\n\n  clear(): void {\n    this.records.clear();\n    this.consumers.clear();\n  }\n\n  private provisionalGroup(root: string): Set<string> {\n    const group = new Set<string>();\n    const visit = (key: string): void => {\n      if (group.has(key)) return;\n      const record = this.records.get(key);\n      if (record?.status !== 'provisional') return;\n      group.add(key);\n      for (const ref of record.refs) visit(ref);\n    };\n    visit(root);\n    return group;\n  }\n}\n","import type { RuntimePackEnvelope } from '@forgeax/engine-pack/runtime';\nimport { copyPackData } from '@forgeax/engine-pack/runtime';\nimport { copyPreparedAsset, prepareAssetPayload } from './prepare-payload.js';\nimport { makeLoadContext } from './registry/load-by-guid.js';\nimport { readPluginDefinition } from './registry/plugin-definition.js';\nimport { captureTerrainClosure, terrainClosureCurrent } from './terrain-closure.js';\nimport {\n  type PublicationPreparationServices,\n  preparePublicationPayloads,\n} from './validate-publication.js';\n// @forgeax/engine-assets-runtime - AssetRegistry v2 (feat-20260513-guid-asset-package-system).\n//\n// Entrypoints (feat-20260614 M8 de-handle cut, D-15/D-17/D-19): the registry\n// is a GUID->payload catalogue. It no longer mints or maps handles -- column\n// handles are minted on the World via `world.allocSharedRef('Kind', payload)`,\n// and resolved through the two-tier `resolveAssetHandle` (BuiltinAssetRegistry\n// process-static slots [1,1024) + per-World `world.sharedRefs` slots >=1024).\n//\n//   - catalog<T extends Asset>(guid, asset): Result<T, AssetError>\n//       stores the GUID->payload entry loadByGuid resolves (dev/inline path)\n//   - parseGuid(guidStr): AssetGuid\n//   - lookup(guid): Asset | undefined          (catalogued payload, no fetch)\n//   - loadByGuid<T extends Asset>(guid): Promise<Result<T, AssetError | ImageError | RhiError>>\n//       returns the PAYLOAD T (never a handle, D-17)\n//       dev/fallback: synchronous catalogue lookup wrapped in Promise\n//       prod: fetch(packIndexUrl) -> parse catalog -> fetch entry -> parse Asset\n//   - instantiate<T extends SceneAsset>(handle, world, parent?): Result<EntityHandle, ...>\n//       handle is a `world.allocSharedRef('SceneAsset', payload)` column handle\n//   - inspect(): InspectSnapshot\n//\n// v1 load(url) removed in feat-20260513-guid-asset-package-system (w12).\n// loadByGuid is the replacement; M4/w23 adds real fetch-from-pack-index.\n//\n// feat-20260514-ecs-children-instances-managed-buffer-array M3 / w15: the\n// `createInstancedBuffer` / `updateInstancedBuffer` / `getInstancedGpuBuffer`\n// triplet is removed alongside the `InstancedBufferAsset` POD; per-entity\n// instance transforms are now stored inside the ECS via the `Instances {\n// transforms: 'array<f32>' }` component (the RenderSystem record stage owns\n// the GPU storage buffer + dirty-version upload). Asset closed-union narrows\n// 5 -> 4; the registry surface loses the optional `RhiDevice` constructor\n// argument (no remaining device consumer).\n//\n// Dual-backend audited: the registry is engine-agnostic (no @webgpu/types\n// imports + no rhi-webgpu / rhi-wgpu references); the same instance drives\n// both dual-impl shim backends through the @forgeax/engine-rhi interface\n// SSOT at the consumer site.\n\nimport type { Component, EntityHandle, World } from '@forgeax/engine-ecs';\nimport { AssetGuid } from '@forgeax/engine-pack/guid';\nimport { deriveAssetName } from '@forgeax/engine-pack/name';\nimport { err, ok, type Result, type RhiError } from '@forgeax/engine-rhi';\nimport { MaterialArtifactRegistry, type ShaderRegistry } from '@forgeax/engine-shader';\nimport {\n  ASSET_ERROR_HINTS,\n  type Asset,\n  type AssetEnvelope,\n  AssetError,\n  type AssetEvidence,\n  type AssetEvidenceError,\n  type AssetRef,\n  authoringCapabilityForAssetKind,\n  type CatalogDelta,\n  type CatalogEntry,\n  catalogOperationsFor,\n  type EngineMetrics,\n  type Handle,\n  handleSlot,\n  type ImageError,\n  type ImportTransport,\n  type InspectEntry,\n  type InspectSnapshot,\n  type Loader,\n  type MaterialAsset,\n  type Package,\n  type ParseErrorDetail,\n  type RuntimeAssetBinding,\n  type SceneAsset,\n  type SceneEntity,\n  type TagOf,\n  type TranscodeCaps,\n  type MeshAsset as TypesMeshAsset,\n  unwrapHandle,\n} from '@forgeax/engine-types';\nimport {\n  BUILTIN_CUBE,\n  BUILTIN_CYLINDER,\n  BUILTIN_NINESLICE_QUAD,\n  BUILTIN_QUAD,\n  BUILTIN_SPHERE,\n  BUILTIN_TRIANGLE,\n} from './builtin-asset-registry.js';\nimport type { LoaderRegistry } from './loader-registry.js';\nimport { createDefaultLoaderRegistry } from './wire-default-loaders.js';\n\n/**\n * Strip readonly from all fields of T. Used to mutate the MeshAsset.aabb slot\n * after mesh validation passes (the interface is readonly but register-time\n * computation writes the real AABB into the caller's placeholder).\n */\n\nimport { componentSchema } from '@forgeax/engine-ecs/internal';\n// feat-20260705-runtime-tier2-decomposition M1 / w4 (D-4 F1): the pre-class\n// constants, loaders, scene-payload / payload-validate / aabb helpers were\n// straight-cut into sibling modules. The thin class value-imports only what its\n// method bodies still reference; the full public consumer face (barrel + tests)\n// is preserved via the `export ... from` re-export block below (pre-w14 shim,\n// removed when consumers repoint in w14/w15).\nimport type { CatalogListener, CatalogSource } from './catalog-source.js';\nimport {\n  BUILTIN_MESH_GUIDS,\n  HANDLE_CUBE,\n  HANDLE_CYLINDER,\n  HANDLE_NINESLICE_QUAD,\n  HANDLE_QUAD,\n  HANDLE_SPHERE,\n  HANDLE_TRIANGLE,\n} from './handles.js';\nimport type { MaterialLoadError, MaterialReady } from './material/loader.js';\nimport {\n  installMaterialReadyShaders,\n  type MaterialRenderProjection,\n} from './material/runtime-shader.js';\nimport { ArtifactReadCache } from './registry/artifact-io.js';\nimport {\n  createRuntimeAssetEvidenceAdapter,\n  type RuntimeAssetEvidenceAdapter,\n  type RuntimeEvidenceSource,\n} from './registry/asset-evidence.js';\nimport {\n  type CatalogRecord,\n  fetchPackIndex,\n  parseCatalog,\n  resolveCatalogAssetUrl,\n} from './registry/catalog.js';\nimport { CatalogReplica, type CatalogReplicaSnapshot } from './registry/catalog-state.js';\nimport {\n  instantiateFlat as instantiateFlatImpl,\n  instantiate as instantiateImpl,\n  type PostSpawnHook,\n  resolveHandleGuid,\n  type SceneInstantiateError,\n} from './registry/instantiate.js';\nimport {\n  loadByGuid as loadByGuidImpl,\n  parseAndReturnAsset as parseAndReturnAssetImpl,\n  parseAssetPayload as parseAssetPayloadImpl,\n  registerPackagesFromIndex,\n} from './registry/load-by-guid.js';\nimport { LoadStateStore } from './registry/load-state.js';\nimport type { ScenePublicationFence } from './registry/scene-publication-fence.js';\nimport {\n  detectTileNeedsRepeatSampler,\n  materialShaderTextureFieldNames as materialShaderTextureFieldNamesImpl,\n} from './registry/validate-material.js';\n\n// Public re-export surface (pre-w14 consumer face preservation): the extracted\n// modules are the new SSOT; asset-registry re-exports them until w14/w15 repoint\n// every consumer to the sibling modules / the new package.\nexport {\n  HANDLE_CUBE,\n  HANDLE_CYLINDER,\n  HANDLE_NINESLICE_QUAD,\n  HANDLE_QUAD,\n  HANDLE_SPHERE,\n  HANDLE_TRIANGLE,\n} from './handles.js';\nexport {\n  animationClipLoader,\n  animationGraphLoader,\n  INLINE_PACK_LOADERS,\n  materialLoader,\n  meshLoader,\n  sceneLoader,\n  skeletonLoader,\n  skinLoader,\n} from './loaders/inline-pack.js';\nexport {\n  equirectLoader,\n  fontLoader,\n  PACK_ARTIFACT_LOADERS,\n  textureLoader,\n} from './loaders/pack-artifact.js';\nexport { type TilesetValidateOptions, validateTilesetPayload } from './payload-validate.js';\n\n// ─── Re-exports for engine-runtime-local consumers ──────────────────────────\n//\n// Legacy re-exports: `Asset` widens to the 4-variant engine-types union;\n// `MeshAsset` keeps the engine-types shape (with `attributes`). Consumers\n// that previously imported from `./asset-registry` keep working through\n// the type alias re-exports below.\n\nexport type { Asset, TypesMeshAsset as MeshAsset };\n\n// D-15: the BUILTIN_* mesh payloads moved to builtin-asset-registry.ts (the\n// process-static payload SSOT); the shared runtime vertex layout remains owned\n// by @forgeax/engine-geometry.\n// imported at the top of this file. The constructor still pre-populates the\n// handle->payload map from those imports (the map itself retires in w49).\n\n// feat-20260618-asset-and-pack-name-fields M3 (D-1 / D-3): the mutable runtime\n// package object every GUID of the same import path shares. `assetGuids` grows\n// as `registerPackage` adds GUIDs; `assetCount` (the engine-types `Package`\n// view) is derived from `assetGuids.size`, never stored (#2 Derive). The public\n// `packageOf(guid)` projects this to the readonly `Package` interface.\ninterface MutablePackage {\n  path: string;\n  readonly assetGuids: Set<string>;\n}\n\n// ─── Runtime brand helper ──────────────────────────────────────────────────\n//\n// AC-11 inspect() `.brand` is a 4-member string literal union mirroring the\n// engine-types Asset discriminated union. Map a stored Asset value to its\n// brand via the `.kind` discriminator (+ `.shadingModel` refinement for\n// `MaterialAsset`, preserved for forward compatibility though the runtime\n// brand stays at the asset-kind level per AC-11 spec).\n//\n// feat-20260514 M3 / w15: the `'InstancedBufferAsset'` brand is retired\n// alongside the deleted POD + 3 registry methods; the runtime brand union\n// shrinks 5 -> 4 to mirror the Asset closed-union shape.\n// feat-20260514 w3: re-extends to 5 with the addition of the `'SceneAsset'`\n// brand mirroring the new `'scene'` kind in the Asset discriminated union.\n// feat-20260618-asset-and-pack-name-fields M1 / w3: AssetBrand moved to\n// @forgeax/engine-types (public, single-entry discoverability per charter F1).\n// feat-20260608-tilemap-object-layer-rendering M0: AssetBrand union grows\n// 13 -> 14 with `'TilesetAsset'` in @forgeax/engine-types.\n\n// feat-20260622 D-4/D-8: the 14-arm assetBrand switch and ASSET_BRAND Record\n// table are both retired (PR #496 eliminated the brand concept entirely).\n// New Asset union members no longer need a brand mapping; the closed union\n// exhaustive switch in test-d files is the sole type-level guard.\n\n// ─── Schema-driven material parse result (feat-20260523 M4-T01) ──────────\n// ─── AssetRegistry class ────────────────────────────────────────────────────\n\n/**\n * Asset registry (instance-per-engine; `engine.assets: AssetRegistry | null`).\n *\n * The builtin meshes (`HANDLE_CUBE` / `HANDLE_TRIANGLE` / ...) are served by\n * the process-static `BuiltinAssetRegistry`, so AI users see usable handles in\n * the very first frame without registration ceremony (charter proposition 1).\n *\n * @example Catalogue a texture by GUID, load its payload, and bind a material:\n * ```ts\n * const guid = engine.assets.parseGuid('00000000-0000-7000-8000-000000000001');\n * engine.assets.catalog(guid, myTexture);                       // GUID -> payload\n * const res = await engine.assets.loadByGuid(guid);             // payload (D-17)\n * if (!res.ok) {\n *   switch (res.error.code) {\n *     case 'asset-not-found':  // guid not catalogued\n *   }\n *   return;\n * }\n * const material = world.allocSharedRef('MaterialAsset', {       // mint column handle\n *   kind: 'material',\n *   passes: [{ name: 'Forward', program: { module: 'forgeax::default-standard-pbr' }, tags: { LightMode: 'Forward' }, queue: 2000 }],\n *   values: { baseColorTexture: res.value },\n * });\n * world.spawn({ component: MeshRenderer, data: { materials: [material] } });\n * ```\n */\n\n// bug-20260610 Fix B: parsed pack-file body stored in the fetchPackFile\n// in-memory cache + in-flight dedup maps (D-4). Only the raw JSON shape is\n// cached -- parseAssetPayload still runs per-call to look up the per-GUID\n// entry (CON-2 register-before-recurse cycle safety).\nexport interface ParsedPackFile {\n  schemaVersion?: string;\n  kind?: string;\n  assets: Array<{\n    guid: string;\n    kind: string;\n    payload: Record<string, unknown>;\n    refs?: string[];\n    artifacts?: Record<string, import('@forgeax/engine-types').ArtifactDescriptor>;\n  }>;\n}\n\nexport type CatalogReconcileError = AssetError;\nexport type CatalogReconcileResult = Result<CatalogReplicaSnapshot, CatalogReconcileError>;\n\nfunction catalogSourceUnconfigured<T>(): Result<T, AssetError> {\n  return err(\n    new AssetError({\n      code: 'catalog-source-unconfigured',\n      expected: 'a configured catalog source',\n      hint: ASSET_ERROR_HINTS['catalog-source-unconfigured'],\n    }),\n  );\n}\n\nexport class AssetRegistry {\n  readonly #publicationCandidates = new WeakMap<\n    RuntimePackEnvelope,\n    {\n      readonly assets: ReadonlyMap<string, Asset>;\n      readonly pack: RuntimePackEnvelope;\n      readonly rows: readonly CatalogEntry[];\n      readonly epoch: number;\n      readonly source: CatalogReplica | undefined;\n      readonly generations: ReadonlyMap<string, number>;\n    }\n  >();\n\n  /** Prepare in a private scope using this consuming owner's loaders and services. */\n  async preparePublication(\n    rows: readonly CatalogEntry[],\n    fetcher: typeof fetch,\n    external: { readonly catalog: CatalogSource; readonly fetcher: typeof fetch } | undefined,\n    services: PublicationPreparationServices,\n  ): Promise<Result<ReadonlyMap<string, Asset | (() => Promise<Asset>)>, unknown>> {\n    // Capture before yielding: the caller owns its transport envelope, never our proof.\n    const key = services.pack;\n    const dependencies = new Map(\n      [...(services.dependencies ?? [])].map(([guid, pin]) => [\n        guid,\n        { ...pin, row: structuredClone(pin.row) },\n      ]),\n    );\n    let owned: { rows: readonly CatalogEntry[]; pack: RuntimePackEnvelope | undefined };\n    try {\n      owned = {\n        rows: structuredClone(rows),\n        pack: key === undefined ? undefined : (copyPackData(key) as RuntimePackEnvelope),\n      };\n    } catch (cause) {\n      return err(\n        new AssetError({\n          code: 'asset-parse-failed',\n          expected: 'isolated lossless publication data',\n          hint: cause instanceof Error ? cause.message : String(cause),\n        }),\n      );\n    }\n    const source = this.catalogReplica;\n    const epoch = this.globalGeneration;\n    const generations = new Map(\n      [...owned.rows.map((row) => row.guid), ...dependencies.keys()].map((guid) => [\n        guid,\n        this.generations.get(guid) ?? 0,\n      ]),\n    );\n    const baseline = await this.ensurePackIndexCache();\n    if (!baseline.ok) return baseline;\n    if (source !== this.catalogReplica || epoch !== this.globalGeneration)\n      return err(\n        new AssetError({\n          code: 'asset-invalidated',\n          expected: 'unchanged source during preparation',\n          hint: 'retry in the current asset context',\n        }),\n      );\n    const context = makeLoadContext(this, fetcher);\n    const result = await preparePublicationPayloads(\n      owned.rows,\n      fetcher,\n      external,\n      { ...services, pack: owned.pack, dependencies },\n      this.loaders,\n      {\n        ...context,\n        resolveRef: async (guid) =>\n          owned.rows.some((row) => row.guid === guid) || dependencies.has(guid)\n            ? ok(0)\n            : context.resolveRef(guid),\n      },\n    );\n    if (!result.ok) return result;\n    if (key && owned.pack)\n      this.#publicationCandidates.set(key, {\n        assets: result.value,\n        pack: owned.pack,\n        rows: owned.rows,\n        source,\n        epoch,\n        generations,\n      });\n    // Public retention reads copy on demand. Neither a Map edit nor a byte write can forge readiness.\n    return ok(\n      new Map(\n        [...result.value].map(([guid, asset]) => [guid, async () => copyPreparedAsset(asset)]),\n      ),\n    );\n  }\n\n  /** Commit only a candidate prepared by this owner; it enters existing load state. */\n  commitPreparedPublication(pack: RuntimePackEnvelope, beforeCommit?: () => void): void {\n    const candidate = this.#publicationCandidates.get(pack);\n    const current = () =>\n      candidate !== undefined &&\n      candidate.epoch === this.globalGeneration &&\n      candidate.source === this.catalogReplica &&\n      [...candidate.generations].every(\n        ([guid, generation]) => (this.generations.get(guid) ?? 0) === generation,\n      );\n    if (!candidate || !current())\n      throw new TypeError('candidate was not prepared in the current asset context');\n    const parsed = parseCatalog(candidate.rows, (url) =>\n      resolveCatalogAssetUrl(this, url),\n    ).unwrap();\n    const prepared = candidate.rows.map((row) => {\n      const asset = candidate.assets.get(row.guid);\n      const envelope = candidate.pack.assets.find((entry) => entry.guid === row.guid);\n      if (!asset || !envelope) throw new TypeError(`missing prepared output ${row.guid}`);\n      return { guid: row.guid, asset, refs: envelope.refs };\n    });\n    // Consume before invoking a provider: synchronous observers cannot commit the same proof twice.\n    this.#publicationCandidates.delete(pack);\n    beforeCommit?.();\n    if (!current()) throw new TypeError('asset context changed during publication commit');\n    this.applyCatalogRecords(parsed, new Set(parsed.keys()));\n    for (const row of prepared) this.loadState.prepare(row.guid, row.asset, row.refs);\n    const metadata: ParsedPackFile = {\n      ...candidate.pack,\n      assets: candidate.pack.assets.map((asset) => ({\n        ...asset,\n        payload: asset.payload as Record<string, unknown>,\n        refs: [...asset.refs],\n        artifacts: asset.artifacts as Record<\n          string,\n          import('@forgeax/engine-types').ArtifactDescriptor\n        >,\n      })),\n    };\n    for (const row of candidate.rows) this.cachePackFile(row.packageUrl, metadata);\n  }\n\n  readPluginDefinition(guid: string) {\n    const replica = this.catalogReplica;\n    const binding = this.runtimeBinding;\n    const indexUrl = this.packIndexUrl;\n    return readPluginDefinition(\n      this,\n      guid,\n      this.catalogSource?.expectedScope?.scopeId ?? binding?.scopeId,\n      () =>\n        this.catalogReplica === replica &&\n        this.runtimeBinding === binding &&\n        this.packIndexUrl === indexUrl,\n    );\n  }\n  private catalogSource: CatalogSource | undefined;\n  private assetFetcher: typeof globalThis.fetch | undefined;\n  readonly fetchAsset: typeof globalThis.fetch = (input, init) =>\n    (this.assetFetcher ?? globalThis.fetch)(input, init);\n\n  openPackage(packageUrl: string): typeof globalThis.fetch {\n    return (\n      this.catalogSource?.openPackage?.(packageUrl) ??\n      this.assetFetcher ??\n      globalThis.fetch.bind(globalThis)\n    );\n  }\n\n  get hasCatalogSource(): boolean {\n    return this.catalogSource !== undefined;\n  }\n  private catalogEnumerating: Promise<Result<readonly CatalogEntry[], AssetError>> | undefined;\n  private readonly catalogListeners = new Set<CatalogListener>();\n  private catalogSourceDispose: (() => void) | undefined;\n  private catalogReplica: CatalogReplica | undefined;\n  // feat-20260614 M8 (D-15 / D-17 / D-19): the registry is a GUID -> payload\n  // catalogue. It holds NO handle concept -- it cannot mint a column handle\n  // (it has no World). `loadByGuid` returns the PAYLOAD; column minting\n  // (`world.allocSharedRef`) is the caller's job on the ECS/render side.\n  // Sub-asset refs embedded in a payload stay as GUID strings (AssetGuid /\n  // dash-form), never minted at load time. Keyed by lowercased GUID string.\n  // feat-20260705-runtime-tier2-decomposition M1 / w5 (D-4): public so the\n  // extracted `./registry/validate-material` free functions (detectTileNeeds-\n  // RepeatSampler) can read it. No underscore + genuinely public is the\n  // lint-compliant exposure (D-internal R-internal-C ties `@internal` to `_`).\n  readonly assetCatalog: Map<string, AssetEnvelope<Asset>> = new Map();\n  private guidIndex = new WeakMap<Asset, string>();\n  private guidIndexEpoch = -1;\n\n  /** Owner-injected component catalog used for scene breadcrumb projection. */\n  readonly componentCatalog: ReadonlyMap<string, Component>;\n\n  // feat-20260618-asset-and-pack-name-fields M3 (D-1): the package index that\n  // backs the two-segment asset identity `<packagePath>.<name>`. `packages`\n  // maps a lowercased GUID key to its `MutablePackage` (a shared object every\n  // GUID of the same import path points at), or `null` for assets with no\n  // package (catalog() inline + builtin, D-5). All three registration entry\n  // points (catalog / loadByGuid / builtin) funnel through the single\n  // `registerPackage` primitive so the display-name invariant lands once (#1 SSOT).\n  private readonly packages: Map<string, MutablePackage | null> = new Map();\n\n  // Secondary index path -> shared MutablePackage so every GUID of the same\n  // import path points at one object (the 1->N promotion + assetCount derive\n  // depend on this sharing). Not a duplicate of `packages` (#2): `packages` is\n  // the per-GUID lookup; this is the per-path dedup used only inside\n  // registerPackage to find-or-create the shared object.\n  private readonly packageByPath: Map<string, MutablePackage> = new Map();\n\n  // Per-GUID stored display names now live on the asset envelope's `name` field\n  // (the single home, replacing the retired storedNameOf side table; D-6).\n  // resolveName reads `assetCatalog.get(key)?.name` as the `storedName` argument\n  // of deriveAssetName. `pendingNames` bridges the one ordering where a name is\n  // known before its envelope exists: the prod disk path registers the package\n  // (entry names) during resolveCatalogEntry, then catalogues the body later --\n  // catalog() drains the pending name into the new envelope, so nothing persists\n  // here once the envelope is in place.\n  private readonly pendingNames: Map<string, string> = new Map();\n\n  // ─── Prod pack-index fetch state (M4/w23) ──────────────────────────────\n  // When packIndexUrl is configured, loadByGuid fetches pack-index.json on\n  // first call, caches the parsed catalog in packIndexCache, then fetches\n  // each resource URL resolved against that index and registers the asset.\n  packIndexUrl: string | undefined = undefined;\n  packIndexCache: Map<string, CatalogRecord> | undefined = undefined;\n  /** In-flight accepted catalog projection shared by enumeration and GUID load. */\n  private catalogPackIndexSync: Promise<Result<Map<string, CatalogRecord>, AssetError>> | undefined;\n  /** A targeted or wholesale invalidation requests one fresh source baseline. */\n  private catalogPackIndexNeedsRefresh = false;\n  /** Fences a late catalog response after invalidation or authority replacement. */\n  private catalogPackIndexEpoch = 0;\n  /** Current browser-facing asset realm; absent for inline/shipped legacy use. */\n  runtimeBinding: RuntimeAssetBinding | undefined = undefined;\n\n  // tweak-20260609 M1: in-flight Map for recursive loadByGuid dedup + cycle\n  // prevention (D-5 / B-10). Maps guidKey → Promise<Result<Handle, ...>> so\n  // concurrent calls for the same GUID share the same fetch + register chain,\n  // and cycles (A→B→A) terminate when the second visit hits the in-flight\n  // entry for A instead of re-entering fetch.\n  readonly inFlight: Map<string, Promise<Result<unknown, AssetError | ImageError | RhiError>>> =\n    new Map();\n\n  /** One URL owns its retained body and current request independently. */\n  readonly packFiles = new Map<\n    string,\n    {\n      value?: ParsedPackFile;\n      pending?: Promise<ParsedPackFile>;\n    }\n  >();\n\n  cachePackFile(url: string, value: ParsedPackFile): void {\n    const state = this.packFiles.get(url) ?? {};\n    state.value = value;\n    this.packFiles.set(url, state);\n  }\n\n  /** Only the current request may settle; a failed refresh retains a prior body. */\n  settlePackFile(url: string, pending: Promise<ParsedPackFile>, value?: ParsedPackFile): void {\n    const state = this.packFiles.get(url);\n    if (state?.pending !== pending) return;\n    delete state.pending;\n    if (value !== undefined) state.value = value;\n    if (state.value === undefined) this.packFiles.delete(url);\n  }\n  readonly artifactCache = new ArtifactReadCache();\n  readonly loadState = new LoadStateStore();\n  /** Current GUID publication; payload projections retain older handle identities separately. */\n  private readonly materialPublications = new Map<\n    string,\n    {\n      catalogRevision: number;\n      readiness?: MaterialReady | MaterialLoadError;\n      projection?: MaterialRenderProjection;\n      readinessCatalogRevision?: number;\n    }\n  >();\n  readonly materialArtifactRegistry = new MaterialArtifactRegistry();\n  readonly materialPayloadProjections = new WeakMap<object, MaterialRenderProjection>();\n  private assetEvidenceAdapter: RuntimeAssetEvidenceAdapter = createRuntimeAssetEvidenceAdapter();\n\n  // feat-20260621-asset-registry-robustness-invalidate-inflight-cach F17c:\n  // per-GUID generation counter incremented on each invalidate(guid) call.\n  // loadByGuid captures this value at Promise creation and discards the\n  // result (returning asset-invalidated) if the generation has changed by\n  // the time the fetch completes.\n  // F22: invalidateAll increments a single globalGeneration counter instead,\n  // which invalidates every in-flight Promise regardless of GUID.\n  readonly generations: Map<string, number> = new Map();\n  globalGeneration: number = 0;\n  /**\n   * Monotonic payload-cache epoch. Render-side derived snapshots use this\n   * single stamp to skip re-walking an unchanged material parent chain on\n   * every frame; catalog/invalidation mutations advance it conservatively.\n   */\n  catalogEpoch: number = 0;\n\n  // F20: per-cache Promise queue to serialise packIndexCache write operations\n  // in transportOrFail. The \"check -> new Map() -> set\" three-step block is\n  // not atomic across concurrent transportOrFail calls; chaining through a\n  // single queue Promise ensures each patch completes before the next starts.\n  packIndexCachePatchQueue: Promise<void> = Promise.resolve();\n\n  // feat-20260527-sprite-nineslice M4 / w16 + w18 (D-5 + D-9): per-Renderer\n  // EngineMetrics shared with the runtime so register-time soft-warns\n  // (`nineslice.tile-needs-repeat-sampler` for sliceMode=1 + sampler not\n  // 'repeat') and runtime soft-warns (`nineslice.scale-too-small`) increment\n  // the SAME counter map. `createRenderer.ts` calls `assets.setMetrics(metrics)`\n  // immediately after constructing the registry; standalone test fixtures\n  // that do not go through `createRenderer` may leave this null and the\n  // soft-warn paths simply no-op (charter P9 graceful degradation: the\n  // structured fail-fast branches still fire; only the metric is dropped).\n  // feat-20260705-runtime-tier2-decomposition M1 / w5 (D-4): public so the\n  // extracted `./registry/validate-material` free functions (detectTileNeeds-\n  // RepeatSampler) can read + increment it. No underscore + genuinely public\n  // is the lint-compliant exposure (D-internal R-internal-C ties `@internal`\n  // to `_`).\n  metrics: EngineMetrics | null = null;\n\n  // feat-20260707 M5 / w33 (D-11): device texture-compression caps the Basis\n  // texture / equirect arms feed to `selectTranscodeTarget`. `createRenderer`\n  // projects `RhiCaps` -> `TranscodeCaps` and calls `setTranscodeCaps` right\n  // after construction (D-8 one-line projection). A standalone registry (test /\n  // headless) keeps the all-false default, which drives the uncompressed\n  // fallback path (section 8 P3, AC-04) rather than a hard failure.\n  transcodeCaps: TranscodeCaps = { bc: false, etc2: false, astc: false };\n\n  // feat-20260703-collect-nested-sceneinstance-to-mount-roundtrip M1 (D-1):\n  // origin reverse-index: a payload object -> its catalog GUID, for payloads\n  // that are NOT the current catalog identity. WeakMap so entries auto-GC when\n  // the world despawns and the object is no longer held by sharedRefs.\n  // _guidForAsset consults it after the catalog identity scan MISSes.\n  // SSOT for the \"payload-to-GUID provenance\" fact (architecture-principles #1).\n  //\n  // Two writers populate it:\n  //   1. instantiate (registry/instantiate.ts): the resolved SceneAsset copy ->\n  //      its original catalog GUID (the deep-copied envelope is never the catalog\n  //      identity).\n  //   2. feat-20260713 M4 / w15 (D-6, root cause a): catalog() records the\n  //      SUPERSEDED payload here when re-cataloguing a GUID with a fresh object.\n  //      A handle minted before the override still points at the old object; this\n  //      keeps that object reverse-lookupable so save/collect resolves its GUID\n  //      instead of failing with a GUID-unresolved error (the 2026-07-06 crash).\n  //\n  // Key type is `object` (not `SceneAsset`) because both material and scene\n  // payloads are recorded (material payloads flow through writer 2).\n  /** @internal */\n  _originIndex: WeakMap<object, string> = new WeakMap();\n\n  /**\n   * Construct a fresh registry pre-populated with the builtin cube + triangle\n   * mesh handles (`HANDLE_CUBE` / `HANDLE_TRIANGLE`).\n   *\n   * feat-20260514 M3 / w15: the previous optional `RhiDevice` constructor\n   * argument (consumed by the now-deleted `createInstancedBuffer` triplet)\n   * is removed; the registry surface is engine-agnostic again. Per-entity\n   * instance transforms now live inside the ECS `Instances { transforms:\n   * 'array<f32>' }` component; the RenderSystem record stage owns GPU\n   * storage buffer allocation + cap-gate.\n   */\n  // feat-20260603-asset-import-loader-injection M1 / w5 (D-7): the registry\n  // dispatches `parseAssetPayload` / the texture+font upstream branches through\n  // this `LoaderRegistry`. feat-20260623 M3 / w9: the loader registry is now\n  // internally built by `createDefaultLoaderRegistry()` (public readonly field)\n  // so host apps can reach `engine.assets.loaders.register(...)` without a\n  // constructor-injection slot or a phantom passthrough wrapper.\n  // The loader set is wired at construction from the complete ordinary Asset\n  // vocabulary (including video and audio) plus caller-supplied extensions.\n  // Assigned here so the optional loaders cannot appear after a load begins.\n  readonly loaders: LoaderRegistry;\n\n  // feat-20260603-asset-import-loader-injection M4 / w31 (AC-19 / AC-22):\n  // the optional `ImportTransport` is the *only* difference between the studio\n  // form (transport injected, dev DDC miss triggers lazy import) and the shipped\n  // form (transport absent, DDC miss fails fast with `asset-not-imported`).\n  // The load path AFTER a successful DDC fetch is identical in both forms --\n  // zero branching on transport (AC-23 key invariant). Set at construction (no\n  // setter, no illegal intermediate state), same D-7 stance as LoaderRegistry.\n  readonly importTransport: ImportTransport | undefined;\n\n  // feat-20260705-runtime-tier2-decomposition M1 / w9 (D-1): optional post-spawn\n  // hook invoked by `instantiate` after the scene subtree spawns. The shipped\n  // implementation is runtime's `postSpawnResolveJoints` (auto-wire Skin.joints),\n  // injected at the sole production assembly point (createRenderer, w10). When\n  // absent (standalone / test registries), instantiate skips joint wiring\n  // silently. Public so the extracted `./registry/instantiate` free function can\n  // read it (D-internal R-internal-C ties `@internal` to a `_` prefix;\n  // genuinely-public is the lint-compliant exposure).\n  readonly postSpawnHook: PostSpawnHook | undefined;\n\n  /** @internal Stored for M2 validation; TS suppressor reference */\n  constructor(\n    // feat-20260705-runtime-tier2-decomposition M1 / w5 (D-4): public so the\n    // extracted `./registry/validate-material` free functions can read it. No\n    // underscore + genuinely public is the lint-compliant exposure (an\n    // `@internal` tag would require a `_` prefix per D-internal R-internal-C).\n    readonly shaderRegistry: ShaderRegistry,\n    importTransport?: ImportTransport | undefined,\n    // Caller-supplied loaders extend the ordinary default set. Duplicate kinds\n    // are rejected by LoaderRegistry so no consumer can observe replacement\n    // order as an accidental ownership rule.\n    extraLoaders?: readonly Loader[] | undefined,\n    // feat-20260705-runtime-tier2-decomposition M1 / w9 (D-1): optional\n    // post-spawn hook; createRenderer injects `postSpawnResolveJoints`.\n    postSpawnHook?: PostSpawnHook | undefined,\n    runtimeBinding?: RuntimeAssetBinding | undefined,\n    componentCatalog: ReadonlyMap<string, Component> = new Map(),\n  ) {\n    void this.shaderRegistry;\n    this.importTransport = importTransport;\n    this.postSpawnHook = postSpawnHook;\n    this.runtimeBinding = runtimeBinding;\n    this.componentCatalog = componentCatalog;\n    this.loaders = createDefaultLoaderRegistry(extraLoaders);\n    this.registerBuiltins();\n  }\n\n  /**\n   * Restore the engine-owned GUID catalogue after a runtime-realm transition.\n   *\n   * Builtin meshes are process-static engine assets, not game-owned catalog\n   * rows. A realm transition clears the user catalog and load caches, but must\n   * leave these assets addressable so a scene in the newly bound game can keep\n   * resolving its builtin mesh references.\n   */\n  private registerBuiltins(): void {\n    // feat-20260614 M8 (D-15): builtins are GUID-addressable catalogue rows.\n    // The builtin payloads also live process-static in BuiltinAssetRegistry\n    // (slot < BUILTIN_BASE) for handle-tier resolution; here they are\n    // catalogued by GUID so loadByGuid(builtinGuid) returns the payload and\n    // scene refs[] pointing at a builtin GUID resolve without a hand-\n    // maintained table (docs/feedbacks/2026-06-03 §6.2 Tier 0).\n    const builtinByHandle = new Map<number, Asset>([\n      [handleSlot(HANDLE_CUBE), BUILTIN_CUBE],\n      [handleSlot(HANDLE_TRIANGLE), BUILTIN_TRIANGLE],\n      [handleSlot(HANDLE_QUAD), BUILTIN_QUAD],\n      [handleSlot(HANDLE_SPHERE), BUILTIN_SPHERE],\n      [handleSlot(HANDLE_NINESLICE_QUAD), BUILTIN_NINESLICE_QUAD],\n      [handleSlot(HANDLE_CYLINDER), BUILTIN_CYLINDER],\n    ]);\n    for (const [handle, guidStr] of BUILTIN_MESH_GUIDS) {\n      const parsed = AssetGuid.parse(guidStr);\n      if (!parsed.ok) {\n        throw new Error(`[asset-registry] builtin GUID ${guidStr} is not a valid UUID`);\n      }\n      const payload = builtinByHandle.get(handleSlot(handle));\n      if (payload !== undefined)\n        this.assetCatalog.set(guidStr.toLowerCase(), {\n          guid: guidStr,\n          kind: payload.kind,\n          payload,\n          refs: [],\n        });\n      if (payload !== undefined) this.loadState.registerReady(guidStr, payload);\n    }\n    // D-5: builtin meshes have no import path and no source name -- register\n    // them with a null package so resolveName returns '' (the detectable\n    // \"genuinely no name\" signal). They are deliberately NOT given a synthetic\n    // package + derived name (memory builtin-guid-preregister-collides).\n    this._registerPackage(\n      null,\n      BUILTIN_MESH_GUIDS.map(([, guidStr]) => guidStr),\n    );\n  }\n\n  /**\n   * feat-20260527-sprite-nineslice M4 / w16 prep + w18 (D-5 + D-9): inject the\n   * per-Renderer `EngineMetrics` so register-time soft-warns can bump the same\n   * counter map the runtime reads through `renderer.metrics.snapshot()`. Called\n   * by `createRenderer` after constructing both the registry and the metrics\n   * instance; safe to skip in standalone tests (the soft-warn arms simply do\n   * not record).\n   */\n  setMetrics(metrics: EngineMetrics): void {\n    this.metrics = metrics;\n  }\n\n  /**\n   * feat-20260707 M5 / w33 (D-11): wire the device compression caps used by the\n   * Basis texture / equirect transcode arms. `createRenderer` calls this right\n   * after construction with `RhiCaps` projected to `TranscodeCaps` (D-8). Left\n   * at the all-false default, the loaders transcode to the uncompressed\n   * `rgba8unorm` / `rgba16float` fallback (AC-04, section 8 P3).\n   */\n  setTranscodeCaps(caps: TranscodeCaps): void {\n    this.transcodeCaps = caps;\n  }\n\n  /**\n   * Inject authoritative runtime evidence without importing CLI or Node policy.\n   * `inspect(guid)` and `verifyByGuid(guid)` return the shared state model; an\n   * omitted capability remains an explicit structured error, never a pass.\n   */\n  configureAssetEvidence(source: RuntimeEvidenceSource): void {\n    this.assetEvidenceAdapter = createRuntimeAssetEvidenceAdapter(source);\n  }\n\n  /**\n   * @internal — read the metrics handle for register-time soft-warn paths.\n   * Returns `null` when no `createRenderer` wired the registry to a renderer\n   * (the standalone-test path; the structured fail-fast branches still fire).\n   */\n  _getMetrics(): EngineMetrics | null {\n    return this.metrics;\n  }\n\n  /**\n   * @internal — reverse-lookup: find the GUID key for a catalogued asset\n   * payload by identity comparison (===). Returns the GUID string if found,\n   * `undefined` otherwise. Rebuild the derived identity index only when the\n   * catalog changes; rendering and scene collection share constant-time reads.\n   * The first current identity wins over historical provenance.\n   */\n  _guidForAsset(asset: Asset): string | undefined {\n    if (this.guidIndexEpoch !== this.catalogEpoch) {\n      this.guidIndex = new WeakMap();\n      for (const [key, envelope] of this.assetCatalog) {\n        if (!this.guidIndex.has(envelope.payload)) this.guidIndex.set(envelope.payload, key);\n      }\n      this.guidIndexEpoch = this.catalogEpoch;\n    }\n    // feat-20260703 M1 (D-1): fallback to the origin reverse-index. Covers two\n    // MISS cases the catalog identity scan cannot: (1) _resolveSceneGuids deep\n    // copies — the copy is never the catalogued original; (2) feat-20260713 M4\n    // (D-6): a payload superseded by a catalog override, still live behind a\n    // handle minted before the override.\n    return this.guidIndex.get(asset) ?? this._originIndex.get(asset);\n  }\n\n  /** Public identity projection consumed by scene collection boundaries. */\n  guidOf(asset: Asset): string | undefined {\n    return this._guidForAsset(asset);\n  }\n\n  /** Return the production MaterialReady/Error result for one material GUID. */\n  getMaterialReadiness(guid: string): MaterialReady | MaterialLoadError | undefined {\n    return this.materialPublications.get(guid.toLowerCase())?.readiness;\n  }\n\n  /** Return the current cooked render projection for one material GUID. */\n  getMaterialProjection(guid: string): MaterialRenderProjection | undefined {\n    return this.materialPublications.get(guid.toLowerCase())?.projection;\n  }\n\n  /** Resolve the program owner through the same parent catalogue as the root contract. */\n  getMaterialProjectionForPayload(material: MaterialAsset): MaterialRenderProjection | undefined {\n    const visited = new Set<MaterialAsset>();\n    let current: MaterialAsset = material;\n    while (!visited.has(current)) {\n      visited.add(current);\n      const projection = this.materialPayloadProjections.get(current);\n      if (projection !== undefined) return projection;\n      if (current.parent === undefined) return undefined;\n      const parent = this.lookup(current.parent);\n      if (parent?.kind !== 'material') return undefined;\n      current = parent;\n    }\n    return undefined;\n  }\n\n  /** Return one immutable cooked artifact by specialization key. */\n  getMaterialArtifact(specializationKey: string) {\n    return this.materialArtifactRegistry.get(specializationKey);\n  }\n\n  private materialPublication(key: string) {\n    let publication = this.materialPublications.get(key);\n    if (publication === undefined) {\n      publication = { catalogRevision: 0 };\n      this.materialPublications.set(key, publication);\n    }\n    return publication;\n  }\n\n  /** Record the canonical result produced by the production material loader. */\n  recordMaterialReadiness(guid: string, readiness: MaterialReady | MaterialLoadError): void {\n    const key = guid.toLowerCase();\n    if (readiness.status !== 'Ready') {\n      const publication = this.materialPublication(key);\n      publication.readiness = readiness;\n      delete publication.projection;\n      return;\n    }\n    const projection = installMaterialReadyShaders(\n      this.shaderRegistry,\n      readiness,\n      this.materialArtifactRegistry,\n    );\n    const publication = this.materialPublication(key);\n    publication.readiness = readiness;\n    publication.projection = projection;\n    const { catalogRevision, readinessCatalogRevision: previousRevision } = publication;\n    if (previousRevision === undefined || previousRevision !== catalogRevision) {\n      const currentPayload = this.assetCatalog.get(key)?.payload;\n      if (currentPayload?.kind === 'material') {\n        this.materialPayloadProjections.set(currentPayload, projection);\n      }\n    }\n    publication.readinessCatalogRevision = catalogRevision;\n  }\n\n  /**\n   * Configure a catalog URL for `loadByGuid`.\n   *\n   * Call this once during engine initialization with the URL where\n   * `pack-index.json` is served (emitted by `@forgeax/engine-vite-plugin-pack`\n   * during `vite build`). In a Vite dev host, use `configureRuntimeBinding`\n   * instead so the catalog remains bound to its scope and generation. The\n   * index is also the canonical base URL for every\n   * catalog entry: relative, root-relative, and absolute entry URLs are resolved\n   * against it before the registry fetches a pack body. After configuration,\n   * `loadByGuid` will fetch the catalog on its first invocation and cache it for\n   * subsequent calls.\n   *\n   * @example\n   * ```ts\n   * engine.assets.configurePackIndex('/pack-index.json');\n   * const payloadRes = await engine.assets.loadByGuid(guid); // payload, not a handle (D-17)\n   * ```\n   */\n  configurePackIndex(url: string): void {\n    this.catalogPackIndexEpoch++;\n    this.packIndexUrl = url;\n    this.packIndexCache = undefined; // reset cache if URL changes\n    this.catalogPackIndexSync = undefined;\n    this.catalogPackIndexNeedsRefresh = false;\n  }\n\n  private catalogSourceOwnsPackIndex(): boolean {\n    return (\n      this.catalogSource !== undefined &&\n      (this.assetFetcher !== undefined ||\n        (this.catalogSource.url === undefined && this.catalogSource.openPackage !== undefined) ||\n        this.packIndexUrl === undefined ||\n        (this.catalogSource.url !== undefined && this.catalogSource.url === this.packIndexUrl))\n    );\n  }\n\n  /**\n   * A cache loaded through the unscoped pack-index path cannot prove a later\n   * source's producer admission constraints. Constrained sources must run\n   * their own enumerate validation before the replica becomes authoritative.\n   */\n  private catalogSourceCanReusePackIndex(): boolean {\n    return (\n      this.catalogSource?.expectedRevision === undefined &&\n      this.catalogSource?.expectedScope === undefined\n    );\n  }\n\n  private acceptCatalogEntries(\n    entries: readonly CatalogEntry[],\n    invalidatedGuids: readonly string[] = [],\n  ): Result<Map<string, CatalogRecord>, AssetError> {\n    const parsed = parseCatalog(entries, (packageUrl) => resolveCatalogAssetUrl(this, packageUrl));\n    if (!parsed.ok) return parsed;\n    this.acceptPackIndex(parsed.value, invalidatedGuids);\n    return parsed;\n  }\n\n  private acceptPackIndex(\n    next: Map<string, CatalogRecord>,\n    invalidatedGuids: readonly string[] = [],\n  ): void {\n    // A fresh baseline can contain changes whose deltas never arrived. Retire\n    // their payloads while the old rows still locate the cached package bytes.\n    // Unchanged rows retain their loaded identity and in-flight requests.\n    const invalidated = new Set(invalidatedGuids);\n    for (const [guid, previous] of this.packIndexCache ?? []) {\n      if (JSON.stringify(previous) !== JSON.stringify(next.get(guid))) invalidated.add(guid);\n    }\n    for (const guid of invalidated) this.invalidate(guid);\n    this.packIndexCache = next;\n    registerPackagesFromIndex(this, next);\n    this.catalogPackIndexNeedsRefresh = false;\n  }\n\n  /** Consume accepted changes without rebuilding unrelated package rows. */\n  private acceptCatalogDelta(delta: CatalogDelta): Result<void, AssetError> {\n    if (this.packIndexCache === undefined || this.catalogReplica === undefined)\n      return ok(undefined);\n    const keys = new Set(\n      [\n        ...delta.added.map((row) => row.guid),\n        ...delta.changed.map((row) => row.guid),\n        ...delta.removed,\n      ].map((guid) => guid.toLowerCase()),\n    );\n    // The replica may still be buffering a source notification during reconciliation.\n    // Its accepted rows, rather than the incoming event, are the authority.\n    const entries = [...keys].flatMap((guid) => {\n      const row = this.catalogReplica?.get(guid);\n      return row === undefined ? [] : [row];\n    });\n    const parsed = parseCatalog(entries, (url) => resolveCatalogAssetUrl(this, url));\n    if (!parsed.ok) return parsed;\n    this.applyCatalogRecords(parsed.value, keys);\n    return ok(undefined);\n  }\n\n  private applyCatalogRecords(\n    nextRecords: ReadonlyMap<string, CatalogRecord>,\n    keys: ReadonlySet<string>,\n  ): void {\n    this.packIndexCache ??= new Map();\n    const changed = new Map<string, CatalogRecord>();\n    const retained = new Map<string, CatalogRecord>();\n    for (const guid of keys) {\n      if (JSON.stringify(this.packIndexCache.get(guid)) === JSON.stringify(nextRecords.get(guid)))\n        continue;\n      for (const affected of this.loadState.affected(guid)) {\n        const row = this.packIndexCache.get(affected);\n        if (!keys.has(affected) && row) retained.set(affected, row);\n      }\n    }\n    for (const guid of keys) {\n      const previous = this.packIndexCache.get(guid);\n      const next = nextRecords.get(guid);\n      if (JSON.stringify(previous) === JSON.stringify(next)) continue;\n      if (previous !== undefined) this.invalidate(guid);\n      const pkg = this.packages.get(guid);\n      if (pkg) {\n        pkg.assetGuids.delete(guid);\n        if (pkg.assetGuids.size === 0) this.packageByPath.delete(pkg.path);\n      }\n      this.packages.delete(guid);\n      this.pendingNames.delete(guid);\n      if (next !== undefined) {\n        this.packIndexCache.set(guid, next);\n        changed.set(guid, next);\n      }\n    }\n    for (const [guid, row] of retained) this.packIndexCache.set(guid, row);\n    registerPackagesFromIndex(this, changed);\n    this.catalogPackIndexNeedsRefresh = false;\n  }\n\n  /**\n   * Resolve the one accepted pack-index projection for this registry.\n   *\n   * URL-backed CatalogSource and `configurePackIndex` are joined only when\n   * their explicit URL authorities are identical. Their CatalogReplica start\n   * or reconcile promise is then shared by enumeration and GUID loading, so a\n   * running instance accepts one baseline payload instead of fetching the same\n   * URL through two independent paths. Deliberately different sources retain\n   * the legacy fetch path and per-instance caches.\n   */\n  async ensurePackIndexCache(\n    force = false,\n  ): Promise<Result<Map<string, CatalogRecord>, AssetError>> {\n    if (\n      !force &&\n      this.packIndexCache !== undefined &&\n      !this.catalogPackIndexNeedsRefresh &&\n      (!this.catalogSourceOwnsPackIndex() || this.catalogSourceCanReusePackIndex())\n    ) {\n      return ok(this.packIndexCache);\n    }\n\n    if (this.catalogSourceOwnsPackIndex() && this.catalogReplica !== undefined) {\n      const existing = this.catalogPackIndexSync;\n      if (existing !== undefined) {\n        if (!force) return existing;\n        this.catalogPackIndexNeedsRefresh = true;\n        return existing.then(() => this.ensurePackIndexCache(true));\n      }\n\n      const replica = this.catalogReplica;\n      const epoch = this.catalogPackIndexEpoch;\n      const read =\n        force || this.catalogPackIndexNeedsRefresh ? replica.reconcile() : replica.start();\n      const promise = read.then((result) => {\n        if (!result.ok) return result;\n        if (epoch !== this.catalogPackIndexEpoch) {\n          this.catalogPackIndexNeedsRefresh = true;\n          return err(\n            new AssetError({\n              code: 'asset-invalidated',\n              expected: 'the active catalog epoch to remain current',\n              hint: 'retry the load against the current runtime binding',\n            }),\n          );\n        }\n        if (this.catalogReplica !== replica || !this.catalogSourceOwnsPackIndex()) {\n          return err(\n            new AssetError({\n              code: 'asset-invalidated',\n              expected: 'the active catalog source to remain installed',\n              hint: 'retry the load against the current runtime binding',\n            }),\n          );\n        }\n        // A delta can land after the baseline resolves but before this\n        // continuation. Project the replica's current accepted snapshot.\n        return this.acceptCatalogEntries(replica.snapshot().entries);\n      });\n      this.catalogPackIndexSync = promise;\n      void promise.then(() => {\n        if (this.catalogPackIndexSync === promise) this.catalogPackIndexSync = undefined;\n      });\n      return promise;\n    }\n\n    const existing = this.catalogPackIndexSync;\n    if (existing !== undefined) {\n      if (!force) return existing;\n      this.catalogPackIndexNeedsRefresh = true;\n      return existing.then(() => this.ensurePackIndexCache(true));\n    }\n\n    const epoch = this.catalogPackIndexEpoch;\n    const promise = fetchPackIndex(this).then((result) => {\n      if (!result.ok) return result;\n      if (epoch !== this.catalogPackIndexEpoch) {\n        return err(\n          new AssetError({\n            code: 'asset-invalidated',\n            expected: 'the active catalog epoch to remain current',\n            hint: 'retry the load against the current runtime binding',\n          }),\n        );\n      }\n      this.acceptPackIndex(result.value);\n      return result;\n    });\n    this.catalogPackIndexSync = promise;\n    void promise.then(() => {\n      if (this.catalogPackIndexSync === promise) this.catalogPackIndexSync = undefined;\n    });\n    return promise;\n  }\n\n  /**\n   * Atomically replace the browser-side asset realm. The binding owns the\n   * catalog URL and generation; no cache from the previous game survives the\n   * transition.\n   */\n  configureRuntimeBinding(binding: RuntimeAssetBinding): void {\n    this.clearCatalogSource();\n    this.runtimeBinding = binding;\n    this.configurePackIndex(binding.catalogUrl);\n    this.invalidateAll();\n    this.registerBuiltins();\n  }\n\n  /**\n   * feat-20260621 F17c: invalidate a single cached asset by GUID so the next\n   * `loadByGuid` performs a genuinely fresh fetch. Clears, for this GUID only:\n   * the catalogue entry, the in-flight dedup entry, the cached pack-file body\n   * (keyed by the index entry's packageUrl), and the pack-index entry. Then\n   * increments the per-GUID generation counter so any still in-flight Promise\n   * for this GUID discards its result (returns `asset-invalidated`). The body +\n   * index clears are targeted (other GUIDs' cached bodies and index entries\n   * survive); deleting the index entry forces `resolveCatalogEntry` to re-fetch\n   * the pack-index on the next load, re-resolving the packageUrl whose body\n   * cache was just dropped. No-op when the GUID is not catalogued.\n   *\n   * Does NOT touch `packages` (a re-load's registerPackage overwrites them; D-8)\n   * and does NOT trigger GPU resource release (OOS-1,\n   * q1 boundary: the asset is CPU-only; GPU resources follow the ECS).\n   *\n   * @param guid - Case-insensitive GUID string or AssetGuid.\n   */\n  invalidate(guid: string): void {\n    for (const key of this.loadState.affected(guid)) this.invalidateOne(key);\n  }\n\n  private invalidateOne(guid: string): void {\n    const guidKey = guid.toLowerCase();\n    this.artifactCache.clearPrefix(`${guidKey}\\0`);\n    // D-6: the stored name lives on the envelope; preserve it across the delete\n    // (the `packages` mapping survives, so resolveName must still see the name\n    // until a re-load's registerPackage overwrites it) by parking it on\n    // pendingNames -- the next catalog() of this GUID drains it back.\n    const survivingEnvelope = this.assetCatalog.get(guidKey);\n    const survivingName = survivingEnvelope?.name;\n    if (survivingName !== undefined) this.pendingNames.set(guidKey, survivingName);\n    if (survivingEnvelope !== undefined) this._originIndex.set(survivingEnvelope.payload, guidKey);\n    this.assetCatalog.delete(guidKey);\n    this.loadState.remove(guidKey);\n    const material = this.materialPublications.get(guidKey);\n    if (material !== undefined) {\n      delete material.readiness;\n      delete material.projection;\n      delete material.readinessCatalogRevision;\n    }\n    // R-1 hard fix (research-decisions.md): delete inFlight entry so the\n    // next loadByGuid does not hit the old Promise whose generation no\n    // longer matches (AC-04 requires a fresh fetch, not asset-invalidated).\n    this.inFlight.delete(guidKey);\n    // Round-2 M-A: widen the clear so a COMPLETED reload re-fetches fresh\n    // bytes instead of serving the stale cached body. Ordering is load-bearing:\n    // read packageUrl from the index entry FIRST, then delete the body, then\n    // delete the index entry. Targeted delete (not wholesale undefined) keeps\n    // other GUIDs' cached bodies/index entries intact (per-GUID precision).\n    const entry = this.packIndexCache?.get(guidKey);\n    if (entry !== undefined) {\n      this.packFiles.delete(entry.packageUrl);\n    }\n    this.packIndexCache?.delete(guidKey);\n    this.catalogPackIndexEpoch++;\n    if (this.catalogSourceOwnsPackIndex()) this.catalogPackIndexNeedsRefresh = true;\n    this.generations.set(guidKey, (this.generations.get(guidKey) ?? 0) + 1);\n    this.catalogEpoch++;\n  }\n\n  /**\n   * Adopt freshly loaded Mesh material slots into an object that is already\n   * pinned by live World shared refs. Geometry and GPU-backed fields deliberately\n   * remain untouched: this primitive is only for a default-material source\n   * override, never a general Mesh reimport. This is the atomic cutover: Catalog,\n   * Ready load state, and payload-to-GUID provenance must all name the same\n   * object after the call. Call only after invalidate(guid) + loadByGuid(guid)\n   * has completed successfully.\n   */\n  adoptReloadedMeshMaterialSlots(guid: string, livePayload: Asset): Result<Asset, AssetError> {\n    const key = guid.toLowerCase();\n    const envelope = this.assetCatalog.get(key);\n    const freshPayload = this.loadState.getReady<Asset>(key);\n    if (envelope === undefined || freshPayload === undefined || envelope.payload !== freshPayload) {\n      return err(\n        new AssetError({\n          code: 'asset-not-found',\n          expected: `GUID ${key} to have one freshly loaded Ready payload`,\n          hint: 'complete invalidate + loadByGuid before adopting a live Mesh identity',\n        }),\n      );\n    }\n    if (livePayload.kind !== 'mesh' || freshPayload.kind !== 'mesh') {\n      return err(\n        new AssetError({\n          code: 'asset-parse-failed',\n          expected: `GUID ${key} live and fresh payloads to both be MeshAsset`,\n          hint: 'use Mesh identity adoption only for a recooked MeshAsset',\n        }),\n      );\n    }\n    if (this._guidForAsset(livePayload) !== key) {\n      return err(\n        new AssetError({\n          code: 'asset-not-found',\n          expected: `live Mesh payload to retain GUID provenance for ${key}`,\n          hint: 'capture the catalogued live payload before invalidating and reloading the same GUID',\n        }),\n      );\n    }\n    if (livePayload === freshPayload) return ok(livePayload);\n\n    (livePayload as unknown as { materialSlots: TypesMeshAsset['materialSlots'] }).materialSlots =\n      freshPayload.materialSlots;\n    this._originIndex.set(freshPayload as object, key);\n    this.assetCatalog.set(key, { ...envelope, payload: livePayload });\n    this.loadState.registerReady(key, livePayload);\n    this.catalogEpoch++;\n    return ok(livePayload);\n  }\n\n  /**\n   * feat-20260621 F17c: invalidate ALL cached assets so the next `loadByGuid`\n   * re-fetches both the pack-index and the asset body. Clears assetCatalog,\n   * inFlight, and packFiles (wholesale), and resets packIndexCache to\n   * `undefined` (NOT `.clear()` -- an empty Map would short-circuit\n   * `resolveCatalogEntry`'s `=== undefined` re-fetch guard and serve\n   * asset-not-imported for every later load; undefined forces a fresh\n   * fetchPackIndex). Then increments a single globalGeneration counter so every\n   * in-flight Promise (regardless of GUID) discards its result. Returns the\n   * number of assets that were catalogued before the call.\n   *\n   * Idempotent: second call on an already-empty catalogue returns clearedCount 0\n   * (AC-06). Does NOT trigger GPU resource release (OOS-1).\n   */\n  invalidateAll(): { clearedCount: number } {\n    const count = this.assetCatalog.size;\n    this.artifactCache.clear();\n    this.assetCatalog.clear();\n    this.loadState.clear();\n    this.materialPublications.clear();\n    this.inFlight.clear();\n    this.globalGeneration++;\n    // Round-2 M-A: wholesale clear of the shared body cache, and reset the\n    // index cache to UNDEFINED (R2-1) -- NOT .clear(). packFiles uses\n    // .clear() because fetchPackFile checks `.get(packageUrl)` per URL, so an\n    // empty Map correctly misses and re-fetches. packIndexCache uses =undefined\n    // because resolveCatalogEntry's re-fetch guard tests `=== undefined`; an\n    // empty Map would short-circuit it and serve asset-not-imported for every\n    // later load -- the exact F17b pollution this feat fixes. The asymmetry is\n    // intentional; do not normalise the two operations.\n    this.packFiles.clear();\n    this.packIndexCache = undefined;\n    this.catalogPackIndexEpoch++;\n    if (this.catalogSourceOwnsPackIndex()) this.catalogPackIndexNeedsRefresh = true;\n    this.catalogEpoch++;\n    return { clearedCount: count };\n  }\n\n  /**\n   * Force a re-fetch of the configured pack-index NOW and repopulate the cache,\n   * so a synchronous `listCatalog()` immediately reflects assets added on disk\n   * since boot (a freshly imported GLB's sub-assets). `loadByGuid`'s lazy\n   * re-fetch only fires on a per-GUID miss and `invalidateAll()` merely clears\n   * the cache (leaving `listCatalog()` empty until the next load), so neither\n   * makes a Content Browser or `loadByGuid`-driven \"Add to Scene\" see a new\n   * asset without a page reload. This does.\n   *\n   * No-op (returns false) when no pack-index URL is configured (dev inline\n   * catalogue path) or the fetch fails — callers keep the stale cache rather\n   * than blanking it. Returns true when the cache was repopulated.\n   */\n  async refreshCatalog(): Promise<boolean> {\n    if (this.packIndexUrl === undefined && !this.hasCatalogSource) return false;\n    const result = await this.ensurePackIndexCache(true);\n    return result.ok;\n  }\n\n  /** Read the exact source version; it never grants Ready state or bypasses domain checks. */\n\n  setCatalogSource(source: CatalogSource, fetcher?: typeof globalThis.fetch): void {\n    this.clearCatalogSource();\n    this.catalogSource = source;\n    this.assetFetcher = fetcher;\n    this.catalogReplica = new CatalogReplica(source);\n    this.catalogSourceDispose = this.catalogReplica.subscribe((delta) => {\n      if (this.catalogSourceOwnsPackIndex() && delta.authority !== 'degraded') {\n        const accepted = this.acceptCatalogDelta(delta);\n        if (!accepted.ok) {\n          delta = {\n            added: [],\n            changed: [],\n            removed: [],\n            authority: 'degraded',\n            diagnostics: [\n              {\n                code: accepted.error.code,\n                severity: 'blocking',\n                expected: accepted.error.expected,\n                hint: accepted.error.hint,\n                authority: 'catalog',\n              },\n            ],\n          };\n        }\n      }\n      for (const listener of [...this.catalogListeners]) {\n        try {\n          listener(delta);\n        } catch {\n          // One host listener cannot prevent the remaining listeners from seeing a fact.\n        }\n      }\n    });\n    if (this.catalogSourceOwnsPackIndex()) {\n      if (\n        (this.packIndexCache !== undefined &&\n          (fetcher !== undefined || source.url === undefined)) ||\n        !this.catalogSourceCanReusePackIndex()\n      )\n        this.catalogPackIndexNeedsRefresh = true;\n      const cachedEntries =\n        this.packIndexCache !== undefined &&\n        !this.catalogPackIndexNeedsRefresh &&\n        this.catalogSourceCanReusePackIndex()\n          ? [...this.packIndexCache].map(([guid, record]) => ({ guid, ...record }) as CatalogEntry)\n          : undefined;\n      if (cachedEntries !== undefined) this.catalogReplica.seed(cachedEntries);\n      void this.ensurePackIndexCache();\n    } else {\n      void this.catalogReplica.start();\n    }\n  }\n\n  /** Stop the catalog transport and remove its replica without clearing payload caches. */\n  clearCatalogSource(): void {\n    this.catalogPackIndexEpoch++;\n    this.catalogReplica?.dispose();\n    this.catalogSourceDispose?.();\n    this.catalogSourceDispose = undefined;\n    this.catalogSource = undefined;\n    this.assetFetcher = undefined;\n    this.catalogReplica = undefined;\n    this.catalogEnumerating = undefined;\n    this.catalogPackIndexSync = undefined;\n  }\n\n  enumerateCatalog(): Promise<Result<readonly CatalogEntry[], AssetError>> {\n    if (this.catalogEnumerating !== undefined) return this.catalogEnumerating;\n    if (this.catalogSource === undefined || this.catalogReplica === undefined) {\n      return Promise.resolve(catalogSourceUnconfigured());\n    }\n    const replica = this.catalogReplica;\n    const pending =\n      this.packIndexUrl !== undefined && this.catalogSource.url === this.packIndexUrl\n        ? this.ensurePackIndexCache()\n        : replica.start();\n    const promise = pending.then((result): Result<readonly CatalogEntry[], AssetError> => {\n      if (replica !== this.catalogReplica)\n        return err(\n          new AssetError({\n            code: 'asset-invalidated',\n            expected: 'the same Catalog source while enumerating assets',\n            hint: 'enumerate the current source after the host transition',\n          }),\n        );\n      // start() joins the initial baseline. Later calls must observe the live replica.\n      return result.ok ? ok(replica.snapshot().entries) : result;\n    });\n    this.catalogEnumerating = promise;\n    void promise.then(() => {\n      if (this.catalogEnumerating === promise) this.catalogEnumerating = undefined;\n    });\n    return promise;\n  }\n\n  /** Read the immutable catalog projection folded by this registry. */\n  catalogSnapshot(): CatalogReplicaSnapshot | undefined {\n    return this.catalogReplica?.snapshot();\n  }\n\n  /** Explicitly recover the registry's single catalog replica from its configured source. */\n  reconcileCatalog(): Promise<CatalogReconcileResult> {\n    if (this.catalogSource === undefined || this.catalogReplica === undefined) {\n      return Promise.resolve(catalogSourceUnconfigured());\n    }\n    if (this.catalogSourceOwnsPackIndex()) {\n      return this.ensurePackIndexCache(true).then((result) => {\n        if (!result.ok) return result;\n        return ok(\n          this.catalogReplica?.snapshot() ?? {\n            version: 0,\n            entries: [],\n            stale: false,\n            diagnostics: [],\n          },\n        );\n      });\n    }\n    return this.catalogReplica.reconcile();\n  }\n\n  subscribeCatalog(listener: CatalogListener): () => void {\n    this.catalogListeners.add(listener);\n    return () => {\n      this.catalogListeners.delete(listener);\n    };\n  }\n\n  /**\n   * Materialise a `SceneAsset` into an existing `World` and return the\n   * synthetic root `Entity` (feat-20260514 w31 sugar wrapper; AC-03 +\n   * requirements §IN-3; M3: returns Entity not SceneInstanceId).\n   *\n   * Before spawning, handle-type component fields (e.g. `assetHandle`,\n   * `material`, `skeleton`) containing GUID strings are resolved to fresh\n   * user-tier `Handle` numbers via `world.allocSharedRef` (feat-20260614 M8\n   * D-19 instantiate-time GUID->handle mint; supersedes the pre-D-17\n   * `resolveGuid` map). GUIDs that fail to parse or are not catalogued return\n   * `AssetError(code='asset-not-found')` with a hint containing the GUID,\n   * node localId, and field name.\n   *\n   * Errors propagate verbatim through the closed\n   * `AssetError | PackError | EcsError` union so AI users that already\n   * narrow `loadByGuid<SceneAsset>` results reuse the same `switch\n   * (err.code)` exhaustively (charter proposition 3 machine-readable\n   * union; plan-strategy §3.3 closed-union transparency).\n   *\n   * @example\n   * ```ts\n   * const sceneRes = await engine.assets.loadByGuid<SceneAsset>(roomGuid); // payload (D-17)\n   * if (!sceneRes.ok) return;\n   * const handle = world.allocSharedRef('SceneAsset', sceneRes.value);     // mint column handle\n   * const r = engine.assets.instantiate(handle, world);\n   * if (!r.ok) {\n   *   switch (r.error.code) {\n   *     case 'asset-not-found':\n   *     case 'pack-cyclic-reference':\n   *     // ... AssetErrorCode | PackErrorCode | EcsErrorCode exhaustive\n   *   }\n   * }\n   * ```\n   */\n  instantiate<T extends SceneAsset>(\n    handle: Handle<TagOf<T>, 'shared'>,\n    world: World,\n    parent?: EntityHandle,\n  ): Result<EntityHandle, SceneInstantiateError> {\n    return instantiateImpl(this, handle, world, parent);\n  }\n\n  instantiateWithPublicationFence<T extends SceneAsset>(\n    handle: Handle<TagOf<T>, 'shared'>,\n    world: World,\n    parent: EntityHandle | undefined,\n    expectedPublication: ScenePublicationFence,\n  ): Result<EntityHandle, SceneInstantiateError>;\n  instantiateWithPublicationFence<T extends SceneAsset>(\n    handle: Handle<TagOf<T>, 'shared'>,\n    world: World,\n    parent: EntityHandle | undefined,\n    expectedPublication: ScenePublicationFence,\n  ): Result<EntityHandle, SceneInstantiateError> {\n    return instantiateImpl(this, handle, world, parent, expectedPublication);\n  }\n\n  /**\n   * Materialise a `SceneAsset` FLAT into an existing `World` — the \"open a scene\n   * for authoring\" registry entry (#655): NO synthetic SceneInstance root, NO\n   * forced `ChildOf` on top-level members. Returns the top-level entity handles.\n   * Nested prefabs (`mounts[]`) still materialise as their own SceneInstance\n   * anchors. Use {@link instantiate} (anchor) at runtime / Play and for nested\n   * prefabs.\n   */\n  instantiateFlat<T extends SceneAsset>(\n    handle: Handle<TagOf<T>, 'shared'>,\n    world: World,\n  ): Result<EntityHandle[], SceneInstantiateError> {\n    return instantiateFlatImpl(this, handle, world);\n  }\n\n  instantiateFlatWithPublicationFence<T extends SceneAsset>(\n    handle: Handle<TagOf<T>, 'shared'>,\n    world: World,\n    expectedPublication: ScenePublicationFence,\n  ): Result<EntityHandle[], SceneInstantiateError> {\n    return instantiateFlatImpl(this, handle, world, expectedPublication);\n  }\n\n  private resolveKeyedSceneGuids(\n    scene: SceneAsset,\n    world: World,\n    sceneGuidKey: string | undefined,\n    visited: ReadonlySet<string>,\n    guidToHandle: Map<string, number>,\n    resolvedSceneHandles: Map<string, number>,\n  ): Result<SceneAsset, AssetError> {\n    const active = new Set(visited);\n    if (sceneGuidKey !== undefined) active.add(sceneGuidKey.toLowerCase());\n\n    const resolveComponents = (\n      entityKey: string,\n      source: Partial<SceneEntity['components']>,\n    ): Result<Partial<SceneEntity['components']>, AssetError> => {\n      const output: Record<string, Record<string, unknown>> = {};\n      for (const [componentName, raw] of Object.entries(source)) {\n        if (raw === undefined) continue;\n        const fields = { ...(raw as Record<string, unknown>) };\n        const token = world.components.resolve(componentName);\n        if (token === undefined) {\n          output[componentName] = fields;\n          continue;\n        }\n        const schema = componentSchema(token) as Record<string, string>;\n        for (const [fieldName, value] of Object.entries(fields)) {\n          const fieldType = schema[fieldName];\n          if (fieldType?.startsWith('shared<') && typeof value === 'string') {\n            const resolved = resolveHandleGuid(\n              this,\n              world,\n              value,\n              guidToHandle,\n              `${componentName}.${fieldName}`,\n              `scene entity ${entityKey}`,\n            );\n            if (!resolved.ok) return resolved;\n            fields[fieldName] = resolved.value;\n          } else if (fieldType?.startsWith('array<shared<') && Array.isArray(value)) {\n            const array: unknown[] = [];\n            for (const [index, item] of value.entries()) {\n              if (typeof item !== 'string') {\n                array.push(item);\n                continue;\n              }\n              const resolved = resolveHandleGuid(\n                this,\n                world,\n                item,\n                guidToHandle,\n                `${componentName}.${fieldName}[${index}]`,\n                `scene entity ${entityKey}`,\n              );\n              if (!resolved.ok) return resolved;\n              array.push(resolved.value);\n            }\n            fields[fieldName] = array;\n          }\n        }\n        output[componentName] = fields;\n      }\n      return ok(output);\n    };\n\n    const entities: Record<string, SceneEntity> = {};\n    for (const [entityKey, node] of Object.entries(scene.entities)) {\n      const components = resolveComponents(entityKey, node.components);\n      if (!components.ok) return components;\n      let instance = node.instance;\n      if (instance !== undefined) {\n        const childKey = instance.source.toLowerCase();\n        if (active.has(childKey)) {\n          return err(\n            new AssetError({\n              code: 'asset-parse-failed',\n              expected: 'an acyclic keyed SceneAsset instance graph',\n              hint: `recursive SceneAsset instance at ${entityKey} -> ${instance.source}`,\n            }),\n          );\n        }\n        const child = this.assetCatalog.get(childKey)?.payload;\n        if (child?.kind === 'scene') {\n          const childResult = this.resolveKeyedSceneGuids(\n            child,\n            world,\n            childKey,\n            new Set([...active, childKey]),\n            guidToHandle,\n            resolvedSceneHandles,\n          );\n          if (!childResult.ok) return childResult;\n          if (!resolvedSceneHandles.has(childKey)) {\n            const childHandle = unwrapHandle(world.allocSharedRef('SceneAsset', childResult.value));\n            resolvedSceneHandles.set(childKey, childHandle);\n            this._originIndex.set(childResult.value, childKey);\n          }\n          const overrides = [];\n          for (const override of instance.overrides ?? []) {\n            const overrideComponents = resolveComponents(\n              `${entityKey}.${override.target.join('.')}`,\n              override.components,\n            );\n            if (!overrideComponents.ok) return overrideComponents;\n            overrides.push({ ...override, components: overrideComponents.value });\n          }\n          instance = {\n            source: instance.source,\n            ...(overrides.length === 0 && instance.overrides === undefined ? {} : { overrides }),\n          };\n        }\n      }\n      entities[entityKey] = {\n        components: components.value,\n        ...(instance === undefined ? {} : { instance }),\n      };\n    }\n    return ok({\n      kind: 'scene',\n      entities,\n      ...(scene.skinGuids === undefined ? {} : { skinGuids: scene.skinGuids }),\n    });\n  }\n\n  /**\n   * @internal\n   * Transform a SceneAsset whose handle-type component fields hold GUID\n   * strings (post-parseScenePayload intermediate state) into a copy whose\n   * handle fields hold resolved Handle numbers.\n   *\n   * Schema-driven field detection (plan-strategy D-4): for each component\n   * field whose Component.schema fieldType starts with `shared\\<`, the\n   * value is treated as a GUID string and resolved via `AssetGuid.parse` +\n   * catalogue lookup + `world.internSharedRef` (feat-20260614 M8 D-15/D-17;\n   * the registry mints nothing). Unknown component names are silently passed\n   * through (the ecs layer's additionalProperties check will catch unknowns at\n   * spawn if appropriate).\n   *\n   * Stop-on-first-error (AC-08): the first unresolvable GUID aborts\n   * iteration and returns `AssetError(code='asset-not-found')` with a hint\n   * containing the GUID string, node localId, and field name for AI-user\n   * debuggability (P3).\n   */\n  _resolveSceneGuids(\n    scene: SceneAsset,\n    world: World,\n    sceneGuidKey?: string,\n    visitedMountGuids?: Set<string>,\n    guidToHandle?: Map<string, number>,\n    resolvedSceneHandles?: Map<string, number>,\n    _materialGraphPreflighted = false,\n  ): Result<SceneAsset, AssetError> {\n    // SceneAsset has one public keyed representation. The Scene owner derives\n    // numeric slots only during instantiation; no legacy array/mount reader is\n    // retained here.\n    void _materialGraphPreflighted;\n    return this.resolveKeyedSceneGuids(\n      scene,\n      world,\n      sceneGuidKey,\n      visitedMountGuids ?? new Set(),\n      guidToHandle ?? new Map(),\n      resolvedSceneHandles ?? new Map(),\n    );\n  }\n\n  /**\n   * Register an asset and return a fresh\n   * `Result<Handle<TagOf<T>, 'shared'>, AssetError>`. The brand `target`\n   * tag is derived from the Asset's `kind` discriminator via `AssetTagMap`\n   * (charter F1 single-entry indexability). The runtime representation is\n   * an auto-incrementing u32 starting at 1024 (builtins reserve 1-2).\n   *\n   * feat-20260526 M4: `shadingModel` field is retired in favour of\n   * pass-based MaterialAsset. This generic surface covers the full\n   * `Asset` closed union (mesh / texture / sampler / scene / equirect\n   * / material).\n   */\n  /**\n   * feat-20260614 M8 (D-15 / D-17): catalogue a payload under its GUID.\n   * Replaces the old `register` / `registerWithGuid` mint pair -- the registry\n   * stores the PAYLOAD and never produces a handle (it owns no World).\n   * Column minting is the caller's job via `world.allocSharedRef`.\n   *\n   * Validates mesh stride + material passes / sprite slices at catalogue entry\n   * (same fail-fast surface as the old register path). Returns\n   * `Result.err(AssetError)` on validation failure; `Result.ok(payload)` with\n   * the stored payload (mesh payloads gain an `aabb`) on success.\n   */\n  catalog<T = Asset>(\n    guid: AssetGuid | string,\n    asset: T,\n    refs?: readonly AssetRef[],\n  ): Result<T, AssetError> {\n    // D-5: narrow T to Asset for kind-discriminate branches. The runtime\n    // catalog only accepts Asset-kind payloads (host custom kinds enter\n    // through loadByGuid + registerParsedAsset, not catalog directly).\n    const a: Asset = asset as unknown as Asset;\n    const prepared = prepareAssetPayload(a);\n    if (!prepared.ok) return prepared as Result<T, AssetError>;\n    const stored = prepared.value;\n    if (stored.kind === 'material') detectTileNeedsRepeatSampler(this, stored);\n    const key =\n      typeof guid === 'string' ? guid.toLowerCase() : AssetGuid.format(guid).toLowerCase();\n    const kind = a.kind;\n    if (\n      stored.kind === 'terrain' &&\n      this.loadState.get(key)?.status !== 'provisional' &&\n      !captureTerrainClosure(this, stored)\n    )\n      return err(\n        new AssetError({\n          code: 'asset-parse-failed',\n          expected:\n            'complete terrain dependencies with height bytes derived from the author samples',\n          hint: 'catalog the whole cooked closure before its root; do not replace derived heights independently',\n        }),\n      );\n    // Drain any name recorded by an earlier _registerPackage call whose body had\n    // not yet been catalogued (prod disk path; D-6). Preserve a name already on\n    // a prior envelope for this key (re-catalog of the same GUID).\n    const pendingName = this.pendingNames.get(key);\n    const priorEnvelope = this.assetCatalog.get(key);\n    const priorName = priorEnvelope?.name;\n    const name = pendingName ?? priorName;\n    this.pendingNames.delete(key);\n    // feat-20260713 M4 / w15 (D-6, root cause a): when this GUID is being\n    // re-catalogued with a DIFFERENT payload object, the prior object may still\n    // be live behind a handle minted before the override (asset-registry.ts:513\n    // identity scan would then MISS it). Record the superseded object -> GUID in\n    // the origin reverse-index so `_guidForAsset` keeps resolving it — save/\n    // collect of an owned entity holding that handle no longer fails with a\n    // GUID-unresolved error (the 2026-07-06 crash). Structurally-modified copies\n    // (a fresh object never catalogued) stay uncatalogued and correctly surface a\n    // structured error at collect (requirements edge case \"modified payload judged\n    // as a new asset, not silently zeroed\").\n    if (priorEnvelope !== undefined && priorEnvelope.payload !== stored) {\n      this._originIndex.set(priorEnvelope.payload, key);\n    }\n    this.assetCatalog.set(key, {\n      guid: key,\n      kind,\n      ...(name !== undefined ? { name } : {}),\n      payload: stored,\n      refs: refs ?? [],\n    });\n    if (stored.kind === 'material') {\n      const publication = this.materialPublication(key);\n      publication.catalogRevision++;\n      const { projection } = publication;\n      if (projection !== undefined) this.materialPayloadProjections.set(stored, projection);\n    }\n    this.catalogEpoch++;\n    this.loadState.registerReady(key, stored);\n    if (stored.kind === 'terrain') captureTerrainClosure(this, stored);\n    // D-1: catalog() inline path defaults every GUID to the no-package state\n    // (null). loadByGuid + builtin override via their own registerPackage calls\n    // before / after this so the package mapping is populated for all assets\n    // through the single primitive (#1 SSOT). Do not clobber a package mapping\n    // a prior registerPackage already established for this GUID.\n    if (!this.packages.has(key)) this.packages.set(key, null);\n    return ok(stored as T);\n  }\n\n  /**\n   * @internal feat-20260618-asset-and-pack-name-fields M3 (D-1): the single\n   * package-mapping write primitive. All three registration entry points funnel\n   * here so the display-name invariant is implemented once (#1 SSOT):\n   *   - catalog() inline path -> registerPackage(null, [guid])          (no package)\n   *   - loadByGuid disk path  -> registerPackage(packageUrl, [g1,g2,...], names)\n   *   - constructor builtin    -> registerPackage(null, [...guids])      (D-5 null)\n   *\n   * `path === null` registers the GUIDs with no package (resolveName reads their\n   * storedName or returns ''). A non-null `path` finds-or-creates the shared\n   * MutablePackage for that path and adds the GUIDs to it; per-GUID entry names\n   * (D-2: name flows entry -> Package, never the payload) are taken from\n   * `names`. The 1->N promotion branch (D-3) is added by w11. Never throws --\n   * it only writes maps; resolution + validation happen in resolveName / rename.\n   */\n  _registerPackage(\n    path: string | null,\n    guids: readonly string[],\n    names?: Map<string, string>,\n  ): void {\n    if (path === null) {\n      for (const g of guids) {\n        const key = g.toLowerCase();\n        this.packages.set(key, null);\n        const n = names?.get(g) ?? names?.get(key);\n        if (n !== undefined) this.setStoredName(key, n);\n      }\n      return;\n    }\n\n    const pkg = this.packageByPath.get(path) ?? { path, assetGuids: new Set<string>() };\n    this.packageByPath.set(path, pkg);\n\n    // D-3: 1->N promotion. When this path already holds exactly one unnamed\n    // asset and a new member is arriving, freeze the original asset's derived\n    // basename as its stored name. An explicitly authored name is already the\n    // stable identity and must be preserved without reporting a violation.\n    const addsNewMember = guids.some((g) => !pkg.assetGuids.has(g.toLowerCase()));\n    if (pkg.assetGuids.size === 1 && addsNewMember) {\n      const [originalKey] = pkg.assetGuids;\n      if (originalKey !== undefined) {\n        if (!this.hasStoredName(originalKey)) {\n          this.setStoredName(originalKey, deriveAssetName(pkg.path, 1));\n        }\n      }\n    }\n\n    for (const g of guids) {\n      const key = g.toLowerCase();\n      pkg.assetGuids.add(key);\n      this.packages.set(key, pkg);\n      const n = names?.get(g) ?? names?.get(key);\n      if (n !== undefined) this.setStoredName(key, n);\n    }\n  }\n\n  /**\n   * Read the per-GUID stored display name (D-6 home: the envelope's `name`\n   * field, with `pendingNames` covering the prod-disk ordering where the name is\n   * known before the body is catalogued). Single read point for resolveName /\n   * the 1->N promotion stability check.\n   */\n  private storedNameFor(key: string): string | undefined {\n    return this.assetCatalog.get(key)?.name ?? this.pendingNames.get(key);\n  }\n\n  private hasStoredName(key: string): boolean {\n    return this.storedNameFor(key) !== undefined;\n  }\n\n  /**\n   * Write the per-GUID stored display name. When the envelope exists, replace it\n   * with one carrying the new `name` (the envelope is immutable; D-6 keeps the\n   * payload free of the name). Before the envelope is catalogued (prod disk\n   * path), stash on `pendingNames` so catalog() can drain it into the new\n   * envelope. `name === undefined` clears the name in both homes.\n   */\n  private setStoredName(key: string, name: string | undefined): void {\n    const envelope = this.assetCatalog.get(key);\n    if (envelope !== undefined) {\n      const { name: _drop, ...rest } = envelope;\n      this.assetCatalog.set(key, name === undefined ? rest : { ...rest, name });\n      this.pendingNames.delete(key);\n      return;\n    }\n    if (name === undefined) this.pendingNames.delete(key);\n    else this.pendingNames.set(key, name);\n  }\n\n  /**\n   * Return the `Package` this GUID belongs to, or `null` when the asset has no\n   * package (catalog() inline + builtin, D-5), or `undefined` when the GUID was\n   * never registered. The returned `Package` is a readonly snapshot whose\n   * `assetCount` is derived from the live member set (#2 Derive).\n   */\n  packageOf(guid: AssetGuid | string): Package | null | undefined {\n    const key =\n      typeof guid === 'string' ? guid.toLowerCase() : AssetGuid.format(guid).toLowerCase();\n    const pkg = this.packages.get(key);\n    if (pkg === undefined) return undefined;\n    if (pkg === null) return null;\n    return { path: pkg.path, assetGuids: pkg.assetGuids, assetCount: pkg.assetGuids.size };\n  }\n\n  /**\n   * Resolve an asset's human-readable display name -- the single source of truth\n   * for the two-segment identity's `name` segment (D-6). Every name consumer\n   * (inspect / catalog builder / CLI) reads this or the same `deriveAssetName`\n   * pure function it delegates to (AC-04); no consumer re-implements the\n   * display-name rule. Returns a deterministic fallback rather than throwing on a missing\n   * name (AC-15): an explicit stored name wins for any packaged or no-package\n   * asset; otherwise a packaged asset falls back to `basename(path)`, and a\n   * no-package asset resolves to `''` (the detectable \"genuinely no name\"\n   * signal, charter P3). An unregistered GUID is treated as the no-package\n   * branch.\n   */\n  resolveName(guid: AssetGuid | string): string {\n    const key =\n      typeof guid === 'string' ? guid.toLowerCase() : AssetGuid.format(guid).toLowerCase();\n    const pkg = this.packages.get(key);\n    const storedName = this.storedNameFor(key);\n    const path = pkg == null ? null : pkg.path;\n    const assetCount = pkg == null ? 0 : pkg.assetGuids.size;\n    return deriveAssetName(path, assetCount, storedName);\n  }\n\n  /**\n   * Rename an asset's display name in memory (D-4). Three classes by package\n   * shape:\n   *   - no-package asset      -> set the stored self name\n   *   - multi-asset package   -> set the entry stored name\n   *   - single-asset package  -> rewrite the package path's leaf segment so the\n   *                              derived basename becomes `newName` (the package\n   *                              stays single-asset; the leaf IS the name)\n   *\n   * In-memory only (OOS-1: no disk write-back). Returns structured failures via\n   * the closed `AssetErrorCode` union with no new members (D-4): a name that\n   * collides with another member of the same package -> `asset-invalid-value`;\n   * an unregistered GUID -> `asset-not-found`. AI users consume `.code` through\n   * a `switch`, not by parsing `.message` (charter P3).\n   */\n  rename(guid: AssetGuid | string, newName: string): Result<void, AssetError> {\n    const key =\n      typeof guid === 'string' ? guid.toLowerCase() : AssetGuid.format(guid).toLowerCase();\n    if (!this.packages.has(key)) {\n      return err(\n        new AssetError({\n          code: 'asset-not-found',\n          expected: `a registered asset for GUID ${key}`,\n          hint: ASSET_ERROR_HINTS['asset-not-found'],\n        }),\n      );\n    }\n\n    const pkg = this.packages.get(key) ?? null;\n\n    const collision = pkg !== null ? this.nameCollisionIn(pkg, key, newName) : null;\n    if (collision !== null) return err(collision);\n\n    if (pkg !== null && pkg.assetGuids.size === 1) {\n      // Single-asset package: the leaf segment IS the derived name; rewrite it so\n      // basename(path) === newName. Keep the directory prefix intact.\n      const slash = pkg.path.lastIndexOf('/');\n      const oldPath = pkg.path;\n      pkg.path = slash >= 0 ? `${pkg.path.slice(0, slash + 1)}${newName}` : newName;\n      this.packageByPath.delete(oldPath);\n      this.packageByPath.set(pkg.path, pkg);\n      this.setStoredName(key, undefined);\n      return ok(undefined);\n    }\n\n    this.setStoredName(key, newName);\n    return ok(undefined);\n  }\n\n  /**\n   * Return an `asset-invalid-value` AssetError if another member of `pkg`\n   * already resolves to `newName`, else null. Extracted from `rename` to keep\n   * the collision-detection control flow flat (D-4 reuses the closed error code;\n   * the detail narrows via the `{ field, value, reason }` union variant).\n   */\n  private nameCollisionIn(\n    pkg: MutablePackage,\n    selfKey: string,\n    newName: string,\n  ): AssetError | null {\n    for (const memberKey of pkg.assetGuids) {\n      if (memberKey !== selfKey && this.resolveName(memberKey) === newName) {\n        return new AssetError({\n          code: 'asset-invalid-value',\n          expected: `a name unique within package \"${pkg.path}\"`,\n          hint: `another asset in \"${pkg.path}\" is already named \"${newName}\"; choose a distinct name`,\n          detail: {\n            field: 'name',\n            value: newName,\n            reason: `duplicate name within package ${pkg.path}`,\n          },\n        });\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Parse a dash-form GUID string into an `AssetGuid`. Thin convenience over\n   * `AssetGuid.parse` for the `loadByGuid` / `catalog` call sites; throws\n   * `AssetError` on a malformed GUID (caller-error, mirrors `parseInt`-style\n   * eager validation -- the GUID literal is author-supplied, not user data).\n   */\n  parseGuid(guidStr: string): AssetGuid {\n    const parsed = AssetGuid.parse(guidStr);\n    if (!parsed.ok) {\n      throw new AssetError({\n        code: 'asset-parse-failed',\n        expected: `valid dash-form GUID, got \"${guidStr}\"`,\n        hint: ASSET_ERROR_HINTS['asset-parse-failed'],\n      });\n    }\n    return parsed.value;\n  }\n\n  /**\n   * Look up a catalogued payload by GUID, or `undefined` on miss. Used by the\n   * ECS/render side (e.g. `walkMaterialParents` in `resolve-asset-handle.ts`)\n   * to resolve a payload's embedded sub-asset GUIDs (D-19) without minting.\n   */\n  /** Terrain-derived dependencies remain paired with their adopted root payload. */\n  terrainClosureCurrent(root: import('@forgeax/engine-types').TerrainAsset): boolean {\n    return terrainClosureCurrent(this, root);\n  }\n\n  lookup<T = Asset>(guid: AssetGuid | string): T | undefined {\n    const key =\n      typeof guid === 'string' ? guid.toLowerCase() : AssetGuid.format(guid).toLowerCase();\n    const ready = this.loadState.getReady<T>(key);\n    if (ready !== undefined) return ready;\n    if (this.packIndexUrl === undefined)\n      return this.assetCatalog.get(key)?.payload as T | undefined;\n    return undefined;\n  }\n\n  /**\n   * feat-20260613-material-paramschema-driven-binding M4 / w23 (D-5 graceful):\n   * Return the texture-field name set for the given material-shader id,\n   * derived from the registered shader's paramSchema via `derive(paramSchema)\n   * .textureFieldNames`. Returns `undefined` when the shader is not yet\n   * registered (cross-worktree shader-late-register, plan R-4).\n   *\n   * Used by `extractFrame` to know which values fields the shader\n   * declares as texture handles; the extract layer validates handle-vs-\n   * scalar typing and drops misclassified slots so the record stage's\n   * MISSING_TEXTURE_HANDLE fallback can take over (white default texture)\n   * rather than letting a stray handle reach `device.createBindGroup`.\n   *\n   * feat-20260705-runtime-tier2-decomposition M1 / w5 (D-4): delegates to the\n   * extracted `./registry/validate-material` free function (signature stable).\n   */\n  materialShaderTextureFieldNames(shaderId: string): ReadonlySet<string> | undefined {\n    return materialShaderTextureFieldNamesImpl(this, shaderId);\n  }\n\n  /**\n   * Load an asset and all its transitively referenced sub-assets by GUID.\n   * The result is a durable Asset payload. Consumer owners may narrow the\n   * success type, then call their own World/Host projection; this registry does\n   * not create a generic GUID-to-handle materializer.\n   * Delegates to the load-by-guid collaboration module (w7 / D-4); see\n   * registry/load-by-guid.ts for the full DDC / pack-fetch pipeline.\n   */\n  async loadByGuid<T = Asset>(\n    guid: AssetGuid,\n    parentContext?: {\n      sceneEntityKey?: string;\n      componentField?: string;\n    },\n  ): Promise<Result<T, AssetError | ImageError | RhiError>> {\n    return loadByGuidImpl<T>(this, guid, parentContext);\n  }\n\n  /**\n   * Dispatch a pack payload through the injected LoaderRegistry. Delegates to\n   * the load-by-guid collaboration module (w7 / D-4). Kept as a class method so\n   * existing structural-cast test access keeps resolving.\n   */\n  parseAssetPayload(\n    kind: string,\n    payload: Record<string, unknown>,\n    refs?: string[],\n  ):\n    | Asset\n    | Record<string, unknown>\n    | undefined\n    | { readonly ok: false; readonly error: ParseErrorDetail } {\n    return parseAssetPayloadImpl(this, kind, payload, refs);\n  }\n\n  /**\n   * Parse a pack asset entry and return the payload + refs. Delegates to the\n   * load-by-guid collaboration module (w7 / D-4). Kept as a class method so\n   * existing structural-cast test access keeps resolving.\n   */\n  parseAndReturnAsset(assetEntry: {\n    kind: string;\n    payload: Record<string, unknown>;\n    refs?: string[];\n  }): Result<{ asset: Asset; refs: readonly string[] }, AssetError> {\n    return parseAndReturnAssetImpl(this, assetEntry);\n  }\n  /** Return the legacy catalog snapshot when no GUID is supplied. */\n  inspect(): InspectSnapshot;\n  /** Return joined source/cook/package/runtime evidence for one GUID. */\n  inspect(guid: string): Promise<Result<AssetEvidence, AssetEvidenceError>>;\n  inspect(guid?: string): InspectSnapshot | Promise<Result<AssetEvidence, AssetEvidenceError>> {\n    if (guid !== undefined) return this.assetEvidenceAdapter.inspect(guid);\n    const assets: InspectEntry[] = [];\n    for (const [guid, envelope] of this.assetCatalog) {\n      assets.push({\n        guid,\n        kind: envelope.payload.kind,\n        name: this.resolveName(guid),\n      });\n    }\n    return { assets };\n  }\n\n  /** Verify the same GUID evidence chain through the injected SDK capability. */\n  verifyByGuid(guid: string): Promise<Result<AssetEvidence, AssetEvidenceError>> {\n    return this.assetEvidenceAdapter.verifyByGuid(guid);\n  }\n\n  /**\n   * Return a readonly snapshot of all catalogued assets (inlined + pack-index)\n   * for enumeration by asset panels (AC-03 single source of truth).\n   *\n   * Merges entries from the private `packIndexCache` (prod path, carries\n   * `packageUrl`) and `assetCatalog` (inlined / dev path, no URL). Each\n   * GUID appears exactly once. Returns a fresh array on every call — the\n   * internal Maps are never exposed (charter P4 consistent abstraction).\n   *\n   * plan-strategy section 2 D1; requirements AC-03; research Finding 5.\n   *\n   * @example\n   * ```ts\n   * for (const e of registry.listCatalog()) {\n   *   console.log(e.guid, e.kind, e.name, e.packageUrl);\n   * }\n   * ```\n   */\n  listCatalog(): readonly {\n    guid: string;\n    kind: string;\n    name?: string;\n    packageUrl: string;\n    packageId?: CatalogEntry['packageId'];\n    provenance?: CatalogEntry['provenance'];\n    revision?: CatalogEntry['revision'];\n    sourceKey?: CatalogEntry['sourceKey'];\n    sourceIndex?: CatalogEntry['sourceIndex'];\n    sourceOverrides?: CatalogEntry['sourceOverrides'];\n    sourceOverrideDescriptors?: CatalogEntry['sourceOverrideDescriptors'];\n    authoring?: CatalogEntry['authoring'];\n    relations?: CatalogEntry['relations'];\n    diagnostics?: CatalogEntry['diagnostics'];\n    refs?: readonly string[];\n    subject?: import('@forgeax/engine-types').CatalogSubject;\n    execution?: import('@forgeax/engine-types').CookExecution;\n    lifecycle?: import('@forgeax/engine-types').CatalogLifecycle;\n    projection?: import('@forgeax/engine-types').CatalogProjection;\n    /**\n     * On-disk source-file path for external imported assets (FBX / GLB / HDR /\n     * audio / font), relative to the game root. Editors locate the\n     * `.meta.json` sidecar via `sourcePath + '.meta.json'` for CRUD; unlike\n     * `packageUrl` (the runtime load artefact) it is stable across DDC cook\n     * state. `undefined` for inline / dev-path assets (no sidecar, no CRUD).\n     */\n    sourcePath?: string;\n  }[] {\n    const seen = new Set<string>();\n    const result: {\n      guid: string;\n      kind: string;\n      name?: string;\n      packageUrl: string;\n      packageId?: CatalogEntry['packageId'];\n      provenance?: CatalogEntry['provenance'];\n      revision?: CatalogEntry['revision'];\n      sourceKey?: CatalogEntry['sourceKey'];\n      sourceIndex?: CatalogEntry['sourceIndex'];\n      sourceOverrides?: CatalogEntry['sourceOverrides'];\n      sourceOverrideDescriptors?: CatalogEntry['sourceOverrideDescriptors'];\n      authoring?: CatalogEntry['authoring'];\n      relations?: CatalogEntry['relations'];\n      diagnostics?: CatalogEntry['diagnostics'];\n      refs?: readonly string[];\n      subject?: import('@forgeax/engine-types').CatalogSubject;\n      execution?: import('@forgeax/engine-types').CookExecution;\n      lifecycle?: import('@forgeax/engine-types').CatalogLifecycle;\n      projection?: import('@forgeax/engine-types').CatalogProjection;\n      sourcePath?: string;\n      cookReceiptUrl?: string;\n    }[] = [];\n\n    // Prod entries: packIndexCache carries packageUrl + optional name + refs.\n    if (this.packIndexCache) {\n      for (const [guidKey, entry] of this.packIndexCache) {\n        seen.add(guidKey);\n        result.push({\n          guid: guidKey,\n          kind: entry.kind,\n          ...(entry.name !== undefined ? { name: entry.name } : {}),\n          packageUrl: entry.packageUrl,\n          ...(entry.packageId !== undefined ? { packageId: entry.packageId } : {}),\n          ...(entry.provenance !== undefined ? { provenance: entry.provenance } : {}),\n          ...(entry.revision !== undefined ? { revision: entry.revision } : {}),\n          ...(entry.sourceKey !== undefined ? { sourceKey: entry.sourceKey } : {}),\n          ...(entry.sourceIndex !== undefined ? { sourceIndex: entry.sourceIndex } : {}),\n          ...(entry.sourceOverrides !== undefined\n            ? { sourceOverrides: entry.sourceOverrides }\n            : {}),\n          ...(entry.sourceOverrideDescriptors !== undefined\n            ? { sourceOverrideDescriptors: entry.sourceOverrideDescriptors }\n            : {}),\n          authoring: entry.authoring ?? authoringCapabilityForAssetKind(entry.kind),\n          ...(entry.relations !== undefined ? { relations: entry.relations } : {}),\n          ...(entry.diagnostics !== undefined ? { diagnostics: entry.diagnostics } : {}),\n          ...(entry.refs !== undefined ? { refs: entry.refs } : {}),\n          ...(entry.sourcePath !== undefined ? { sourcePath: entry.sourcePath } : {}),\n          ...(entry.cookReceiptUrl !== undefined ? { cookReceiptUrl: entry.cookReceiptUrl } : {}),\n          ...(entry.subject !== undefined ? { subject: entry.subject } : {}),\n          ...(entry.execution !== undefined ? { execution: entry.execution } : {}),\n          ...(entry.lifecycle !== undefined ? { lifecycle: entry.lifecycle } : {}),\n          ...(entry.projection !== undefined ? { projection: entry.projection } : {}),\n        });\n      }\n    }\n\n    // Inlined / dev-path entries: assetCatalog, no pack-index URL. The envelope\n    // holds the authoritative AssetRef[] graph; flatten it to plain GUID edges\n    // so both catalog paths expose the same refs: readonly string[] shape.\n    for (const [guidKey, envelope] of this.assetCatalog) {\n      if (!seen.has(guidKey)) {\n        const name = envelope.name ?? this.resolveName(guidKey);\n        result.push({\n          guid: guidKey,\n          kind: envelope.payload.kind,\n          name,\n          packageUrl: '',\n          authoring: authoringCapabilityForAssetKind(envelope.payload.kind),\n          subject: 'internal-asset',\n          execution: 'direct',\n          lifecycle: 'current',\n          projection: {\n            subject: 'internal-asset',\n            execution: 'direct',\n            lifecycle: 'current',\n            operations: catalogOperationsFor({\n              subject: 'internal-asset',\n              execution: 'direct',\n              lifecycle: 'current',\n            }),\n          },\n          ...(envelope.refs.length > 0 ? { refs: envelope.refs.map((r) => r.guid) } : {}),\n        });\n      }\n    }\n\n    return result;\n  }\n}\n","import {\n  type FixedPackExecution,\n  type FixedPackPublication,\n  type PackProgram,\n  type PackProgramError,\n  validateFixedPackPublication,\n} from '@forgeax/engine-pack/runtime';\nimport { type PluginProgramEntry, samePluginEvidence } from '@forgeax/engine-plugin';\nimport {\n  type AssetArtifactError,\n  type AssetLoadError,\n  type CatalogEntry,\n  err,\n  type PackV2Error,\n  type PluginAssetDefinition,\n  type PluginBuildTarget,\n  type Result,\n} from '@forgeax/engine-types';\nimport type { AssetRegistry, ParsedPackFile } from './asset-registry.js';\nimport type { CatalogSource } from './catalog-source.js';\nimport { PackReader } from './internal/pack-reader.js';\nimport { assetLoadCancelled } from './internal/wait-for-asset.js';\nimport { readArtifact } from './registry/artifact-io.js';\nimport { resolveCatalogAssetUrl } from './registry/catalog.js';\n\n/** Capture one complete publication; replay must still pass the normal domain loaders. */\nexport async function captureAssetPublication(\n  selected: CatalogEntry,\n  entries: readonly CatalogEntry[],\n  source: CatalogSource,\n  fetcher: typeof fetch,\n  options: {\n    readonly registry?: AssetRegistry;\n    readonly executions?: readonly {\n      readonly target: PluginBuildTarget;\n      readonly programs: ReadonlyMap<string, Pick<PluginProgramEntry, 'exportSource'>>;\n      readonly tools: ReadonlyMap<string, FixedPackExecution['tools'][string]>;\n      readonly definitions: ReadonlyMap<string, PluginAssetDefinition['evidence']>;\n    }[];\n    readonly signal?: AbortSignal;\n  } = {},\n): Promise<\n  Result<FixedPackPublication, AssetLoadError | AssetArtifactError | PackV2Error | PackProgramError>\n> {\n  const reader = new PackReader();\n  try {\n    options.signal?.throwIfAborted();\n    // Freeze metadata and the source-owned byte lease before the first asynchronous boundary.\n    const normalize = (entry: CatalogEntry): CatalogEntry => {\n      const row = structuredClone(entry);\n      const publication = row.publication;\n      if (!publication?.current) return row;\n      return {\n        ...row,\n        publication: {\n          ...publication,\n          current: {\n            ...publication.current,\n            packageUrl: resolveCatalogAssetUrl(\n              { packIndexUrl: source.url },\n              publication.current.packageUrl,\n            ),\n          },\n        },\n      };\n    };\n    const row = normalize(selected);\n    const rows = entries.filter((entry) => entry.packageUrl === row.packageUrl).map(normalize);\n    const bound = source.openPackage?.(row.packageUrl) ?? fetcher;\n    const scopeId = source.expectedScope?.scopeId;\n    const projections = (options.executions ?? []).map((projection) => ({\n      target: projection.target,\n      programs: new Map(\n        [...projection.programs].map(([name, entry]) => [name, entry.exportSource]),\n      ),\n      tools: structuredClone(new Map(projection.tools)),\n      definitions: structuredClone(new Map(projection.definitions)),\n    }));\n    if (new Set(projections.map((projection) => projection.target)).size !== projections.length)\n      throw new TypeError('duplicate fixed execution target');\n    const publication = row.publication;\n    if (\n      !publication ||\n      publication.failure ||\n      row.lifecycle === 'failed' ||\n      row.lifecycle === 'stale'\n    )\n      throw new TypeError('a fixed capture requires a current publication');\n    const request = { signal: options.signal ?? null };\n    const cached = options.registry?.packFiles.get(row.packageUrl)?.value;\n    const raw =\n      cached ??\n      (await (async () => {\n        const response = await bound(row.packageUrl, request);\n        if (!response.ok) throw new TypeError('fixed Pack is unavailable');\n        return response.json();\n      })());\n    options.signal?.throwIfAborted();\n    const verifiedPack = reader.verify(raw, {\n      scopeId: scopeId ?? raw?.scopeId,\n      generation: publication.generation,\n      digest: publication.digest,\n      outputSetDigest: publication.outputSetDigest,\n    });\n    if (!verifiedPack.ok) return verifiedPack;\n    const pack = verifiedPack.value;\n    if (options.registry)\n      options.registry.cachePackFile(row.packageUrl, {\n        ...pack,\n        assets: pack.assets.map((asset) => ({\n          ...asset,\n          payload: asset.payload as Record<string, unknown>,\n          refs: [...asset.refs],\n        })),\n      } as ParsedPackFile);\n    const bodies = new Map<string, Uint8Array<ArrayBuffer>>();\n    const executions: Partial<\n      Record<\n        PluginBuildTarget,\n        {\n          programs: Record<string, PackProgram>;\n          tools: Record<string, FixedPackExecution['tools'][string]>;\n        }\n      >\n    > = Object.create(null);\n    for (const asset of pack.assets) {\n      options.signal?.throwIfAborted();\n      if (asset.kind === 'plugin')\n        for (const projection of projections) {\n          if (!projection.tools.has(asset.guid)) continue;\n          const { programs: availablePrograms, tools: availableTools, definitions } = projection;\n          const execution = executions[projection.target] ?? {\n            programs: Object.create(null),\n            tools: Object.create(null),\n          };\n          executions[projection.target] = execution;\n          const { programs, tools } = execution;\n          const exportProgram = async (name: string) => {\n            if (Object.hasOwn(programs, name)) return;\n            const producer = availablePrograms.get(name);\n            if (!producer) throw new TypeError(`missing portable plugin program ${name}`);\n            programs[name] = structuredClone(await producer());\n            options.signal?.throwIfAborted();\n          };\n          const evidence = definitions.get(asset.guid);\n          if (!evidence) throw new TypeError(`missing plugin program evidence ${asset.guid}`);\n          if (evidence.kind === 'publication') {\n            if (\n              !samePluginEvidence(evidence, {\n                kind: 'publication',\n                publication: {\n                  scopeId: pack.scopeId,\n                  generation: pack.generation,\n                  digest: pack.digest,\n                  outputSetDigest: pack.outputSetDigest,\n                },\n              })\n            )\n              throw new TypeError(`plugin program publication differs ${asset.guid}`);\n          } else {\n            const bytes = new Uint8Array(\n              await crypto.subtle.digest(\n                'SHA-256',\n                new TextEncoder().encode(JSON.stringify(asset.payload)),\n              ),\n            );\n            const digest = `sha256:${Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('')}`;\n            if (evidence.revision !== publication.sourceRevision || evidence.digest !== digest)\n              throw new TypeError(`plugin program source differs ${asset.guid}`);\n          }\n          const name = (asset.payload as { readonly program?: unknown })?.program;\n          if (typeof name !== 'string')\n            throw new TypeError(`missing portable plugin program ${String(name)}`);\n          await exportProgram(name);\n          const contract = availableTools.get(asset.guid);\n          if (!contract) throw new TypeError(`missing portable plugin tool contract ${asset.guid}`);\n          tools[asset.guid] = contract;\n          for (const declaration of contract.commands) {\n            if (declaration.executor === undefined) continue;\n            await exportProgram(declaration.executor);\n          }\n        }\n      for (const [artifactKey, descriptor] of Object.entries(asset.artifacts)) {\n        const verified = await readArtifact(\n          { packageUrl: row.packageUrl, guid: asset.guid, artifactKey, descriptor },\n          async (url) => {\n            const previous = bodies.get(descriptor.path);\n            if (previous !== undefined) return new Response(previous);\n            const response = await bound(url, request);\n            if (!response.ok) return response;\n            // Descriptor integrity describes decoded bytes. Persist the original encoding intact.\n            const bytes = new Uint8Array(await response.arrayBuffer());\n            bodies.set(descriptor.path, bytes);\n            return new Response(bytes);\n          },\n        );\n        options.signal?.throwIfAborted();\n        if (!verified.ok) return verified;\n        await options.registry?.artifactCache.read(\n          `${asset.guid}\\0${row.packageUrl}\\0${artifactKey}`,\n          async () => verified,\n        );\n      }\n    }\n    options.signal?.throwIfAborted();\n    return validateFixedPackPublication(\n      {\n        pack,\n        rows,\n        blobs: Object.fromEntries(bodies),\n        ...(Object.keys(executions).length ? { executions } : {}),\n      },\n      row,\n    );\n  } catch (cause) {\n    if (options.signal?.aborted) return err(assetLoadCancelled(selected.guid));\n    return err({\n      code: 'asset-package-invalid',\n      expected: 'one complete fixed publication with portable artifacts and programs',\n      hint: 'restore the published bytes and program closure before saving this dependency',\n      detail: {\n        guid: selected.guid,\n        reason: cause instanceof Error ? cause.message : String(cause),\n      },\n    });\n  } finally {\n    reader.dispose();\n  }\n}\n","import { err, ok, type Result } from '@forgeax/engine-rhi';\nimport {\n  ASSET_ERROR_HINTS,\n  AssetError,\n  type CatalogDelta,\n  type CatalogEntry,\n  type ImportTransport,\n  type ResourceRevision,\n  type RuntimeAssetBinding,\n  validateCatalogDelta,\n} from '@forgeax/engine-types';\nimport { checkExpectedRevision, fetchCatalog, resolveCatalogAssetUrl } from './registry/catalog';\n\nexport type CatalogListener = (delta: CatalogDelta) => void;\n\n/** Read-only catalog source backed by static entries or a canonical URL. */\nexport interface CatalogSource {\n  enumerate(): Promise<Result<readonly CatalogEntry[], AssetError>>;\n  /** Ask the producer for one GUID and its published siblings; enumeration remains navigation-only. */\n  get?(guid: string): Promise<Result<readonly CatalogEntry[], AssetError>>;\n  subscribe(listener: CatalogListener): () => void;\n  /** Bind one immutable publication through Pack, artifacts and decode. The closure owns its bytes. */\n  openPackage?(packageUrl: string): typeof globalThis.fetch | undefined;\n  /** Same-domain immutable data; ordinary Registry domain/reference checks still apply. */\n  /** Canonical transport authority when this source is URL-backed. */\n  readonly url?: string;\n  /** Producer revision required before a source may expose its entries. */\n  readonly expectedRevision?: ResourceRevision;\n  readonly expectedScope?: Pick<RuntimeAssetBinding, 'scopeId' | 'generation'>;\n}\n\n/**\n * Create a read-only catalog source while preserving the schema SSOT.\n *\n * Static and fetched sources use the same `CatalogEntry` and revision fields;\n * an expected revision rejects unverified data before it reaches consumers.\n */\nexport function createCatalogSource(options: {\n  readonly url?: string;\n  readonly entries?: readonly CatalogEntry[];\n  readonly fetch?: typeof globalThis.fetch;\n  readonly expectedRevision?: ResourceRevision;\n  readonly expectedScope?: Pick<RuntimeAssetBinding, 'scopeId' | 'generation'>;\n  readonly subscribe?: (listener: CatalogListener) => () => void;\n  readonly importTransport?: ImportTransport;\n}): CatalogSource {\n  const entries = options.entries;\n  const importTransport = options.importTransport;\n  const resolveEntry = (entry: CatalogEntry): CatalogEntry =>\n    options.url === undefined\n      ? entry\n      : {\n          ...entry,\n          packageUrl: resolveCatalogAssetUrl({ packIndexUrl: options.url }, entry.packageUrl),\n        };\n  let pending: ReturnType<CatalogSource['enumerate']> | undefined;\n  return {\n    async enumerate() {\n      if (entries !== undefined) {\n        if (options.expectedRevision === undefined) return ok(entries);\n        const actualRevisions = entries.flatMap((entry) =>\n          entry.revision === undefined ? [] : [entry.revision],\n        );\n        const matches =\n          actualRevisions.length > 0 &&\n          actualRevisions.every(\n            (revision) =>\n              revision.digest === options.expectedRevision?.digest &&\n              revision.observedAt === options.expectedRevision?.observedAt &&\n              revision.rootId === options.expectedRevision?.rootId,\n          );\n        if (!matches) {\n          return err(\n            new AssetError({\n              code: 'asset-parse-failed',\n              expected: 'static catalog entries to carry the expected producer revision',\n              hint: 'restore a verified catalog revision before applying the source',\n              detail: { expectedRevision: options.expectedRevision, actualRevisions } as never,\n            }),\n          );\n        }\n        return ok(entries);\n      }\n      if (options.url === undefined) {\n        return err(\n          new AssetError({\n            code: 'catalog-source-unconfigured',\n            expected: 'a configured catalog source',\n            hint: ASSET_ERROR_HINTS['catalog-source-unconfigured'],\n          }),\n        );\n      }\n      if (pending !== undefined) return pending;\n      const url = options.url;\n      const fetcher = options.fetch ?? globalThis.fetch;\n      const expectedRevision = options.expectedRevision;\n      const expectedScope = options.expectedScope;\n      const read = Promise.resolve().then(async () => {\n        const result = await fetchCatalog(\n          url,\n          fetcher,\n          (packageUrl) => resolveCatalogAssetUrl({ packIndexUrl: options.url }, packageUrl),\n          expectedRevision,\n          expectedScope,\n        );\n        if (!result.ok) return result;\n        return ok(\n          [...result.value].map(([guid, entry]) => ({ guid, ...entry })) as readonly CatalogEntry[],\n        );\n      });\n      pending = read;\n      const release = () => {\n        if (pending === read) pending = undefined;\n      };\n      void read.then(release, release);\n      return read;\n    },\n    subscribe(listener) {\n      return (\n        options.subscribe?.((delta) => {\n          pending = undefined;\n          listener(delta);\n        }) ?? (() => {})\n      );\n    },\n    ...(importTransport === undefined\n      ? {}\n      : {\n          async get(guid: string) {\n            const imported = await importTransport.fetchPack(\n              guid,\n              options.expectedScope === undefined\n                ? undefined\n                : { ...options.expectedScope, status: 'ready' },\n            );\n            if (!imported.ok || imported.entries === undefined) {\n              return err(\n                new AssetError({\n                  code: 'asset-not-imported',\n                  expected: 'the producer to publish the requested GUID',\n                  hint: `repair the owning Pack and retry GUID ${guid}`,\n                }),\n              );\n            }\n            const validated = validateCatalogDelta({\n              added: imported.entries,\n              changed: [],\n              removed: [],\n            });\n            if (!validated.ok)\n              return err(\n                new AssetError({\n                  code: 'asset-parse-failed',\n                  expected: validated.error.expected,\n                  hint: validated.error.hint,\n                }),\n              );\n            if (!imported.entries.some((entry) => entry.guid.toLowerCase() === guid.toLowerCase()))\n              return err(\n                new AssetError({\n                  code: 'asset-not-imported',\n                  expected: 'the producer to publish the requested GUID',\n                  hint: `repair the owning Pack and retry GUID ${guid}`,\n                }),\n              );\n            const revisionError = checkExpectedRevision(imported.entries, options.expectedRevision);\n            if (revisionError) return err(revisionError);\n            return ok(imported.entries.map(resolveEntry));\n          },\n        }),\n    ...(options.url === undefined ? {} : { url: options.url }),\n    ...(options.expectedRevision === undefined\n      ? {}\n      : { expectedRevision: options.expectedRevision }),\n    ...(options.expectedScope === undefined ? {} : { expectedScope: options.expectedScope }),\n  };\n}\n\nexport interface CatalogHotChannel {\n  on(event: string, listener: (data: unknown) => void): void;\n  off(event: string, listener: (data: unknown) => void): void;\n}\n\n/** Fold `forgeax:catalog-delta` into an open catalog source. Invalid deltas leave the replica unchanged. */\nexport function createCatalogHotSubscription(\n  hot: CatalogHotChannel | undefined,\n): (listener: CatalogListener) => () => void {\n  return (listener) => {\n    if (hot === undefined) return () => {};\n    const onDelta = (data: unknown): void => {\n      const validation = validateCatalogDelta(data);\n      if (!validation.ok) return;\n      listener(validation.value);\n    };\n    hot.on('forgeax:catalog-delta', onDelta);\n    return () => hot.off('forgeax:catalog-delta', onDelta);\n  };\n}\n","// @forgeax/engine-assets-runtime -- runtime-local ImageError constructor\n// (feat-20260705-runtime-tier2-decomposition M1 / w4, D-4 F1 straight-cut).\n// Pure move from asset-registry.ts; zero identifier changes.\n\nimport type { ImageErrorDetailFor, ImageErrorFor } from '@forgeax/engine-types';\nimport { IMAGE_ERROR_HINTS } from '@forgeax/engine-types';\n\n// Local minimal `ImageError` constructor (charter P5 producer / consumer\n// split: the runtime AssetRegistry should not import @forgeax/engine-image\n// errors module because the image package is the disk-side decoder; the\n// runtime is the GPU consumer. Both packages share the `ImageError`\n// interface SSOT in @forgeax/engine-types so runtime constructs the\n// 4-field surface (.code / .expected / .hint / .detail) directly without\n// duplicating the @forgeax/engine-image errors.ts class).\ntype UnsupportedMimeImageError = ImageErrorFor<'image-format-unsupported'>;\ntype UnsupportedMimeImageErrorDetail = ImageErrorDetailFor<'image-format-unsupported'>;\n\nconst IMAGE_ERROR_EXPECTED_LOCAL: Readonly<\n  Record<UnsupportedMimeImageErrorDetail['code'], string>\n> = {\n  'image-format-unsupported':\n    \"mime is one of ['image/png', 'image/jpeg', 'image/x-tga']; texture format <-> colorSpace family agrees\",\n};\n\nclass RuntimeImageError extends Error implements UnsupportedMimeImageError {\n  readonly code: UnsupportedMimeImageError['code'];\n  readonly expected: string;\n  readonly hint: string;\n  readonly detail: UnsupportedMimeImageErrorDetail;\n  constructor(detail: UnsupportedMimeImageErrorDetail) {\n    const code = detail.code;\n    const expected = IMAGE_ERROR_EXPECTED_LOCAL[code];\n    const hint = IMAGE_ERROR_HINTS[code];\n    super(`[ImageError ${code}] expected: ${expected}; hint: ${hint}`);\n    this.name = 'ImageError';\n    this.code = code;\n    this.expected = expected;\n    this.hint = hint;\n    this.detail = detail;\n  }\n}\n\nexport function makeImageError(detail: UnsupportedMimeImageErrorDetail): UnsupportedMimeImageError {\n  return new RuntimeImageError(detail);\n}\n","// @forgeax/engine-assets-runtime -- runtime image byte decoder\n// (tweak-20260714-runtime-image-bytes-decoder-add-decodeimagebytes M2 / m2-1).\n//\n// M1 established the signature + TSDoc contract + red test skeleton. M2\n// fills the body:\n//   1. mime whitelist pre-check (PNG / JPEG); non-match -> structured\n//      `image-format-unsupported` err (charter P3 explicit failure).\n//   2. Delegate to `@forgeax/engine-image::decodeImageInBrowser` (SSOT\n//      browser-safe decoder; charter architecture principle 1 SSOT).\n//   3. Map `DecodedImage` -> `TextureAsset` POD; `format` derives from\n//      `opts.colorSpace` (srgb -> 'rgba8unorm-srgb' / linear ->\n//      'rgba8unorm', mirrors `image-importer.ts` colorSpaceToFormat); when\n//      `opts.mipmap !== false`, the mip policy derives from the decoded shape\n//      (charter Derive-Don't-Duplicate).\n//\n// decode-image-bytes.ts is the SINGLE assets-runtime file allowed to\n// statically import @forgeax/engine-image (charter D-2; the\n// scripts/check-image-pipeline-isolation.mjs Path (a.2-anti) whitelist\n// row anchors this exact path). The gate's (a.1) forbidden-symbol regex\n// `\\basync\\s+function\\s+decodeImage\\b` does NOT match `decodeImageBytes`\n// because `\\b` between `e` and `B` fails (both are word chars) --\n// verified at M2 by running the gate locally.\nimport { decodeImageInBrowser } from '@forgeax/engine-image';\nimport type { ImageError, Result, TextureAsset } from '@forgeax/engine-types';\nimport { err, ok } from '@forgeax/engine-types';\nimport { makeImageError } from './image-error';\n\n/** v1 mime whitelist -- PNG / JPEG only (charter P1 progressive disclosure). */\nconst SUPPORTED_MIMES = ['image/png', 'image/jpeg'] as const;\ntype SupportedMime = (typeof SUPPORTED_MIMES)[number];\n\nfunction isSupportedMime(mime: string): mime is SupportedMime {\n  return SUPPORTED_MIMES.some((supportedMime) => supportedMime === mime);\n}\n\n/**\n * Decode a PNG / JPEG byte stream into a `TextureAsset` POD.\n *\n * Runtime SDK entry for AI users who hold image bytes (fetched over the\n * network, embedded as base64, produced by an out-of-tree decoder, etc.) and\n * want to feed them into `world.allocSharedRef('TextureAsset', pod)` +\n * `GpuResourceStore.ensureResident` without the disk-side importer / build\n * pipeline in the loop (charter P1 progressive disclosure: one-step \"bytes\n * in, POD out\").\n *\n * v1 supports the two universally-decodable mime types: `image/png` and\n * `image/jpeg`. Failure surfaces are all structured via the closed\n * `ImageError` union (`.code` / `.expected` / `.hint` / `.detail`); the\n * function never throws for expected failures (AGENTS.md Error model +\n * charter P3 explicit failure).\n *\n * Error codes possible (subset of the closed `ImageErrorCode` union):\n * - `image-format-unsupported` -- mime not in the v1 whitelist (`detail.actualMime`)\n * - `image-decode-failed` -- decoder rejected the bytes, or the environment\n *   lacks `createImageBitmap` (`detail.reason`)\n *\n * @param bytes - Encoded image byte stream (`Uint8Array` or `ArrayBuffer`).\n * @param mime - Byte-stream mime type. v1 whitelist: `'image/png' | 'image/jpeg'`.\n * @param opts - Optional decode overrides:\n *   - `colorSpace`: `'srgb'` (default) or `'linear'`. Derives POD `format`:\n *     `srgb -> 'rgba8unorm-srgb'`, `linear -> 'rgba8unorm'`.\n *   - `mipmap`: `true` (default) or `false`. When true, the producer requests\n *     generated mips; when false, it keeps one authored level.\n * @returns `ok(TextureAsset)` on success; `err(ImageError)` on failure.\n *\n * @example\n * ```ts\n * import { decodeImageBytes } from '@forgeax/engine-assets-runtime';\n *\n * const bytes = new Uint8Array(await (await fetch(url)).arrayBuffer());\n * const result = await decodeImageBytes(bytes, 'image/png');\n * if (!result.ok) {\n *   // The ImageError code and detail are one correlated discriminated union.\n *   switch (result.error.code) {\n *     case 'image-format-unsupported':\n *       console.error('bad mime:', result.error.detail.actualMime);\n *       break;\n *     case 'image-decode-failed':\n *       console.error('decode reason:', result.error.detail.reason);\n *       break;\n *   }\n *   return;\n * }\n * const handle = world.allocSharedRef('TextureAsset', result.value);\n * ```\n */\nexport async function decodeImageBytes(\n  bytes: Uint8Array | ArrayBuffer,\n  mime: string,\n  opts: { colorSpace?: 'srgb' | 'linear'; mipmap?: boolean } = {},\n): Promise<Result<TextureAsset, ImageError>> {\n  if (!isSupportedMime(mime)) {\n    return err(\n      makeImageError({\n        code: 'image-format-unsupported',\n        actualMime: mime,\n      }),\n    );\n  }\n\n  const colorSpace = opts.colorSpace ?? 'srgb';\n  const mipmap = opts.mipmap ?? true;\n\n  const u8 = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);\n  const decoded = await decodeImageInBrowser(u8, mime, { colorSpace, mipmap });\n  if (!decoded.ok) {\n    return err(decoded.error);\n  }\n\n  const dec = decoded.value;\n  const format: GPUTextureFormat = colorSpace === 'srgb' ? 'rgba8unorm-srgb' : 'rgba8unorm';\n  const pod: TextureAsset = {\n    kind: 'texture',\n    shape: { viewDimension: '2d', extent: { width: dec.width, height: dec.height } },\n    format,\n    data: dec.bytes,\n    colorSpace,\n    mips: mipmap ? { kind: 'generate' } : { kind: 'none' },\n  };\n  return ok(pod);\n}\n","import type { Result, RhiDevice, RhiError, Texture, TextureView } from '@forgeax/engine-rhi';\nimport { ok } from '@forgeax/engine-rhi';\nimport type { Handle } from '@forgeax/engine-types';\n\n/**\n * The host-owned external image the engine copies an image from\n * (HTMLVideoElement / VideoFrame / ImageBitmap / canvas). Mirrors the `source`\n * member of the WebGPU `GPUCopyExternalImageSourceInfo` the RHI\n * `copyExternalImageToTexture` consumes; aliased here so the store does not pull\n * the whole webgpu descriptor type into its surface.\n */\nexport type CopyExternalImageSource = GPUCopyExternalImageSourceInfo['source'];\n\n/**\n * GPUTextureUsage bits an external-image destination texture needs: COPY_DST (the\n * copyExternalImageToTexture write target), TEXTURE_BINDING (sampled in the\n * material bind group), and RENDER_ATTACHMENT (required by the WebGPU spec for\n * a copyExternalImageToTexture destination). Mirrors the literals\n * gpu-resource-store.ts uses for its upload textures (no shared const exists to\n * import without coupling the two stores — D-3 keeps them independent).\n */\nconst DYNAMIC_TEXTURE_USAGE = 0x2 | 0x4 | 0x10;\n\n/** rgba8unorm-srgb: Canvas and decoded video color are sRGB; sampling returns linear. */\nconst DYNAMIC_TEXTURE_FORMAT = 'rgba8unorm-srgb' as const;\n\n/**\n * The minimal RHI device surface DynamicTextureStore needs. Declared structurally\n * (not the full RhiDevice) so unit tests drive it with a small mock and the store\n * stays decoupled from the rest of the device surface (Pipeline Isolation).\n */\nexport interface DynamicTextureDevice {\n  createTexture(desc: {\n    readonly size: {\n      readonly width: number;\n      readonly height: number;\n      readonly depthOrArrayLayers: number;\n    };\n    readonly format: typeof DYNAMIC_TEXTURE_FORMAT;\n    readonly usage: number;\n    readonly label?: string;\n  }): Result<Texture, RhiError>;\n  createTextureView(texture: Texture, desc: Record<string, never>): Result<TextureView, RhiError>;\n  destroyTexture(texture: Texture): Result<void, RhiError>;\n  readonly queue: {\n    copyExternalImageToTexture(\n      source: { readonly source: CopyExternalImageSource; readonly flipY?: boolean },\n      destination: { readonly texture: Texture },\n      copySize: {\n        readonly width: number;\n        readonly height: number;\n        readonly depthOrArrayLayers: number;\n      },\n    ): Result<void, RhiError>;\n  };\n}\n\n/** Adapt the opaque RHI device to the store's intentionally small upload seam. */\nexport function adaptDynamicTextureDevice(device: RhiDevice): DynamicTextureDevice {\n  return {\n    createTexture: (descriptor) =>\n      device.createTexture({\n        ...descriptor,\n        mipLevelCount: undefined,\n        sampleCount: undefined,\n        dimension: undefined,\n        viewFormats: undefined,\n        textureBindingViewDimension: undefined,\n      }),\n    createTextureView: (texture) =>\n      device.createTextureView(texture, {\n        label: undefined,\n        format: undefined,\n        dimension: undefined,\n        usage: undefined,\n        aspect: undefined,\n        baseMipLevel: undefined,\n        mipLevelCount: undefined,\n        baseArrayLayer: undefined,\n        arrayLayerCount: undefined,\n      }),\n    destroyTexture: (texture) => device.destroyTexture(texture),\n    queue: {\n      copyExternalImageToTexture: (source, destination, copySize) =>\n        device.queue.copyExternalImageToTexture(\n          { source: source.source, origin: [0, 0], flipY: source.flipY ?? false },\n          { texture: destination.texture, origin: [0, 0, 0] },\n          copySize,\n        ),\n    },\n  };\n}\n\ntype DynamicTextureKey = Handle<'VideoAsset', 'shared'> | object;\n\ninterface TransientEntry {\n  texture: Texture;\n  view: TextureView;\n  width: number;\n  height: number;\n  version?: number | undefined;\n  unsubscribe?: (() => void) | undefined;\n}\n\n/**\n * Transient texture store for video frames and versioned Canvas sources. Independent of\n * GpuResourceStore: it neither imports nor reaches into the static residency\n * cache (AC-08 / D-3).\n */\nexport class DynamicTextureStore {\n  private device: DynamicTextureDevice | undefined = undefined;\n  private readonly entries = new Map<DynamicTextureKey, TransientEntry>();\n\n  /**\n   * Wire the GPU device the store uploads through. Called once after the\n   * renderer captures its device (mirrors GpuResourceStore.configureGpuDevice).\n   * A replacement device invalidates every cached texture: the handles in the\n   * map belong to the old device and cannot be reused after renderer recovery.\n   */\n  configureGpuDevice(device: DynamicTextureDevice): void {\n    if (this.device !== undefined && this.device !== device) {\n      this.destroyAll();\n    }\n    this.device = device;\n  }\n\n  /**\n   * Upload an image for `key` from the caller-owned source image\n   * (HTMLVideoElement / VideoFrame / ImageBitmap / Canvas), (re)allocating the transient\n   * texture when its size changes, and return the current-frame view to bind.\n   *\n   * Returns `undefined` (not an error) when the device is not yet wired or the\n   * source has no decodable dimensions yet (metadata pending) — the caller binds\n   * the default view that frame. A structured RhiError surfaces only when a wired\n   * device rejects the allocation or the copy (charter P3).\n   */\n  uploadFrame(\n    key: DynamicTextureKey,\n    source: CopyExternalImageSource,\n    width: number,\n    height: number,\n    options?: {\n      readonly version?: number | undefined;\n      readonly signal?: AbortSignal | undefined;\n      readonly flipY?: boolean;\n    },\n  ): Result<TextureView, RhiError> | undefined {\n    const device = this.device;\n    if (device === undefined) return undefined;\n    if (options?.signal?.aborted) {\n      this.release(key);\n      return undefined;\n    }\n    if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height) || width <= 0 || height <= 0)\n      return undefined;\n\n    const previous = this.entries.get(key);\n    const sameSize = previous?.width === width && previous.height === height;\n    if (sameSize && options?.version !== undefined && previous.version === options.version)\n      return ok(previous.view);\n    const ensured = sameSize ? ok(previous) : this.createEntry(device, width, height);\n    if (!ensured.ok) return ensured;\n    const entry = ensured.value;\n    const copied = device.queue.copyExternalImageToTexture(\n      { source, flipY: options?.flipY ?? true },\n      { texture: entry.texture },\n      { width, height, depthOrArrayLayers: 1 },\n    );\n    if (!copied.ok) {\n      if (entry !== previous) device.destroyTexture(entry.texture);\n      return copied;\n    }\n    entry.version = options?.version;\n    if (entry !== previous) {\n      this.release(key);\n      this.entries.set(key, entry);\n      const signal = options?.signal;\n      if (signal !== undefined) {\n        const release = () => this.release(key);\n        signal.addEventListener('abort', release, { once: true });\n        entry.unsubscribe = () => signal.removeEventListener('abort', release);\n      }\n    }\n    return ok(entry.view);\n  }\n\n  /**\n   * The current-frame view for a clip, if one has been uploaded this session,\n   * else undefined. The record stage reads this when assembling the bind group\n   * (a frame that has not uploaded yet falls back to the default view).\n   */\n  getView(key: DynamicTextureKey): TextureView | undefined {\n    return this.entries.get(key)?.view;\n  }\n\n  /** Release one source without disturbing other videos or canvases. */\n  release(key: DynamicTextureKey): void {\n    const entry = this.entries.get(key);\n    if (entry === undefined) return;\n    entry.unsubscribe?.();\n    this.device?.destroyTexture(entry.texture);\n    this.entries.delete(key);\n  }\n\n  /** Renderer teardown or device replacement invalidates all uploaded versions. */\n  destroyAll(): void {\n    for (const key of this.entries.keys()) this.release(key);\n  }\n\n  private createEntry(\n    device: DynamicTextureDevice,\n    width: number,\n    height: number,\n  ): Result<TransientEntry, RhiError> {\n    const texture = device.createTexture({\n      size: { width, height, depthOrArrayLayers: 1 },\n      format: DYNAMIC_TEXTURE_FORMAT,\n      usage: DYNAMIC_TEXTURE_USAGE,\n      label: 'dynamic-texture',\n    });\n    if (!texture.ok) return texture;\n    const view = device.createTextureView(texture.value, {});\n    if (!view.ok) {\n      device.destroyTexture(texture.value);\n      return view;\n    }\n    return ok({ texture: texture.value, view: view.value, width, height });\n  }\n}\n","import { type AssetLoadError, ok, type Result } from '@forgeax/engine-types';\n\nexport interface ArtifactCacheSnapshot {\n  readonly entries: number;\n  readonly pending: number;\n  readonly hits: number;\n  readonly misses: number;\n}\n\nexport class ArtifactCache {\n  private readonly values = new Map<string, Uint8Array>();\n  private readonly pending = new Map<string, Promise<Result<Uint8Array, AssetLoadError>>>();\n  private hits = 0;\n  private misses = 0;\n\n  read(\n    contentAddress: string,\n    reader: () => Promise<Result<Uint8Array, AssetLoadError>>,\n  ): Promise<Result<Uint8Array, AssetLoadError>> {\n    const value = this.values.get(contentAddress);\n    if (value !== undefined) {\n      this.hits += 1;\n      return Promise.resolve(ok(new Uint8Array(value)));\n    }\n    const pending = this.pending.get(contentAddress);\n    if (pending !== undefined) {\n      this.hits += 1;\n      return pending;\n    }\n    this.misses += 1;\n    const request = Promise.resolve()\n      .then(reader)\n      .then((result) => {\n        if (result.ok && this.pending.get(contentAddress) === request) {\n          this.values.set(contentAddress, new Uint8Array(result.value));\n        }\n        return result;\n      })\n      .finally(() => {\n        if (this.pending.get(contentAddress) === request) this.pending.delete(contentAddress);\n      });\n    this.pending.set(contentAddress, request);\n    return request;\n  }\n\n  clear(contentAddress?: string): void {\n    if (contentAddress === undefined) {\n      this.values.clear();\n      this.pending.clear();\n      return;\n    }\n    this.values.delete(contentAddress);\n    this.pending.delete(contentAddress);\n  }\n\n  snapshot(): ArtifactCacheSnapshot {\n    return Object.freeze({\n      entries: this.values.size,\n      pending: this.pending.size,\n      hits: this.hits,\n      misses: this.misses,\n    });\n  }\n}\n","/**\n * Decoder output becomes an owner fact at this boundary. Freeze the ordinary\n * POD graph so a caller cannot mutate the cached payload between loads.\n * Typed-array storage is deliberately left as an opaque byte/vector carrier:\n * JavaScript cannot freeze a non-empty typed array without changing its public\n * engine type, so owners must treat those carriers as read-only by contract.\n */\nexport function freezeRuntimePayload<T>(value: T): T {\n  const seen = new WeakSet<object>();\n  return freeze(value, seen);\n}\n\nfunction freeze<T>(value: T, seen: WeakSet<object>): T {\n  if (value === null || typeof value !== 'object') return value;\n  if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) return value;\n  if (seen.has(value)) return value;\n  seen.add(value);\n  for (const child of Object.values(value as Record<string, unknown>)) freeze(child, seen);\n  return Object.freeze(value);\n}\n","import type { AssetLoadError, Result } from '@forgeax/engine-types';\nimport { err, ok } from '@forgeax/engine-types';\nimport { freezeRuntimePayload } from './immutable-payload.js';\nimport { assetLoadCancelled as cancelled, waitForAsset } from './wait-for-asset.js';\n\nexport interface AssetGraphOptions<\n  P extends { readonly value: unknown; readonly refs: readonly string[] },\n> {\n  readonly read: (guid: string, signal: AbortSignal) => Promise<Result<P, AssetLoadError>>;\n  readonly maxConcurrentReads?: number;\n}\n\nexport interface AssetGraphCounters {\n  readonly loads: number;\n  readonly cacheHits: number;\n  readonly readErrors: number;\n  readonly noChange: number;\n  readonly listenerFailures: number;\n}\n\nexport interface AssetGraphSnapshot {\n  readonly epoch: number;\n  readonly ready: readonly string[];\n  readonly pending: number;\n  readonly resources: number;\n  readonly sccs: readonly (readonly string[])[];\n  readonly counters: AssetGraphCounters;\n}\n\ntype GraphResult<P> = Result<P, AssetLoadError>;\ntype GraphListener = (snapshot: AssetGraphSnapshot) => void;\n\nfunction disposed(scopeId = 'asset-runtime'): AssetLoadError {\n  return {\n    code: 'asset-runtime-disposed',\n    expected: 'an active asset runtime scope',\n    hint: 'obtain a new Registry from the current realm',\n    detail: { scopeId },\n  };\n}\n\nfunction superseded(guid: string, generation: number): AssetLoadError {\n  return {\n    code: 'asset-superseded',\n    expected: 'the load ticket to remain current until promotion',\n    hint: 'load the current publication after the Catalog change',\n    detail: { guid, generation },\n  };\n}\n\nfunction thrown(guid: string): AssetLoadError {\n  return {\n    code: 'asset-decode-failed',\n    expected: 'the graph reader to return a Result',\n    hint: 'repair the owner reader and retry the current publication',\n    detail: { guid, kind: 'asset-graph-reader' },\n  };\n}\n\nfunction freezeSnapshot(snapshot: AssetGraphSnapshot): AssetGraphSnapshot {\n  return Object.freeze({\n    ...snapshot,\n    ready: Object.freeze([...snapshot.ready]),\n    sccs: Object.freeze(snapshot.sccs.map((scc) => Object.freeze([...scc]))),\n    counters: Object.freeze({ ...snapshot.counters }),\n  });\n}\n\nexport class AssetGraph<P extends { readonly value: unknown; readonly refs: readonly string[] }> {\n  private readonly read: AssetGraphOptions<P>['read'];\n  private readonly limit: number;\n  private readonly ready = new Map<string, P>();\n  private readonly forward = new Map<string, Set<string>>();\n  private readonly reverse = new Map<string, Set<string>>();\n  private readonly reads = new Map<string, Promise<GraphResult<P>>>();\n  private readonly requests = new Map<string, Promise<GraphResult<P>>>();\n  private readonly listeners = new Set<GraphListener>();\n  private readonly lifetime = new AbortController();\n  private readonly sccs: (readonly string[])[] = [];\n  private activeReads = 0;\n  private readWaiters: (() => void)[] = [];\n  private disposed = false;\n  private epoch = 0;\n  private counters: AssetGraphCounters = {\n    loads: 0,\n    cacheHits: 0,\n    readErrors: 0,\n    noChange: 0,\n    listenerFailures: 0,\n  };\n  private currentSnapshot: AssetGraphSnapshot | undefined;\n\n  constructor(options: AssetGraphOptions<P>) {\n    this.read = options.read;\n    this.limit = Math.max(1, Math.floor(options.maxConcurrentReads ?? 8));\n    this.currentSnapshot = freezeSnapshot({\n      epoch: 0,\n      ready: [],\n      pending: 0,\n      resources: 0,\n      sccs: [],\n      counters: this.counters,\n    });\n  }\n\n  load(guid: string, signal = new AbortController().signal): Promise<GraphResult<P>> {\n    const canonicalGuid = guid.toLowerCase();\n    if (this.disposed) return Promise.resolve(err(disposed()));\n    if (signal.aborted) return Promise.resolve(err(cancelled(canonicalGuid)));\n    const cached = this.ready.get(canonicalGuid);\n    if (cached !== undefined) {\n      this.counters = {\n        ...this.counters,\n        cacheHits: this.counters.cacheHits + 1,\n        noChange: this.counters.noChange + 1,\n      };\n      this.publish();\n      return Promise.resolve(ok(cached));\n    }\n    const existing = this.requests.get(canonicalGuid);\n    if (existing !== undefined) {\n      this.counters = { ...this.counters, cacheHits: this.counters.cacheHits + 1 };\n      return waitForAsset(existing, signal, canonicalGuid);\n    }\n    this.counters = { ...this.counters, loads: this.counters.loads + 1 };\n    const ticketEpoch = this.epoch;\n    const current = () => this.requests.get(canonicalGuid) === request;\n    const request = this.loadClosure(\n      canonicalGuid,\n      this.lifetime.signal,\n      ticketEpoch,\n      current,\n    ).finally(() => {\n      if (this.requests.get(canonicalGuid) === request) this.requests.delete(canonicalGuid);\n      this.publish();\n    });\n    this.requests.set(canonicalGuid, request);\n    this.publish();\n    return waitForAsset(request, signal, canonicalGuid);\n  }\n\n  invalidate(guid: string): readonly string[] {\n    const affected = this.collectAffected([guid.toLowerCase()]);\n    this.drop(affected);\n    this.epoch += 1;\n    this.publish();\n    return [...affected].sort();\n  }\n\n  invalidateForCatalogChange(guids?: readonly string[]): void {\n    if (this.disposed) return;\n    const affected =\n      guids === undefined || guids.length === 0\n        ? new Set([...this.ready.keys(), ...this.requests.keys(), ...this.reads.keys()])\n        : this.collectAffected(guids.map((item) => item.toLowerCase()));\n    this.drop(affected);\n    this.epoch += 1;\n    this.publish();\n  }\n\n  subscribe(listener: GraphListener): () => void {\n    this.listeners.add(listener);\n    return () => this.listeners.delete(listener);\n  }\n\n  snapshot(): AssetGraphSnapshot {\n    this.currentSnapshot ??= freezeSnapshot({\n      epoch: this.epoch,\n      ready: [...this.ready.keys()].sort(),\n      pending: this.requests.size + this.reads.size,\n      resources: this.ready.size,\n      sccs: this.sccs,\n      counters: this.counters,\n    });\n    return this.currentSnapshot;\n  }\n\n  lookup(guid: string): P['value'] | undefined {\n    return this.ready.get(guid.toLowerCase())?.value;\n  }\n\n  guidOf(value: P['value']): string | undefined {\n    for (const [guid, entry] of this.ready) {\n      if (entry.value === value) return guid;\n    }\n    return undefined;\n  }\n\n  dispose(): void {\n    if (this.disposed) return;\n    this.disposed = true;\n    this.lifetime.abort();\n    this.epoch += 1;\n    this.ready.clear();\n    this.forward.clear();\n    this.reverse.clear();\n    this.reads.clear();\n    this.requests.clear();\n    const waiters = this.readWaiters;\n    this.readWaiters = [];\n    for (const resolve of waiters) resolve();\n    this.publish();\n  }\n\n  private async loadClosure(\n    root: string,\n    signal: AbortSignal,\n    ticketEpoch: number,\n    current: () => boolean,\n  ): Promise<GraphResult<P>> {\n    const values = new Map<string, P>();\n    const seen = new Set<string>();\n    const result = await this.visit(root, signal, seen, values, ticketEpoch, current);\n    if (this.disposed) return err(disposed());\n    if (!current()) return err(superseded(root, ticketEpoch));\n    if (!result.ok) return result;\n    if (signal.aborted) return err(cancelled(root));\n    for (const [guid, value] of values) this.promote(guid, value);\n    this.recordScc();\n    return ok(values.get(root) as P);\n  }\n\n  private async visit(\n    guid: string,\n    signal: AbortSignal,\n    seen: Set<string>,\n    values: Map<string, P>,\n    ticketEpoch: number,\n    current: () => boolean,\n  ): Promise<GraphResult<void>> {\n    if (seen.has(guid)) return ok(undefined);\n    const cached = this.ready.get(guid);\n    if (cached !== undefined) {\n      values.set(guid, cached);\n      seen.add(guid);\n      return ok(undefined);\n    }\n    seen.add(guid);\n    const read = await this.readOnce(guid, signal);\n    if (!read.ok) {\n      seen.delete(guid);\n      return read;\n    }\n    if (this.disposed) return err(disposed());\n    if (!current()) return err(superseded(guid, ticketEpoch));\n    values.set(guid, read.value);\n    this.link(guid, read.value.refs);\n    const references = (read.value as P & { readonly references?: 'eager' | 'deferred' })\n      .references;\n    for (const ref of references === 'deferred' ? [] : read.value.refs) {\n      const child = await this.visit(ref, signal, seen, values, ticketEpoch, current);\n      if (!child.ok) {\n        seen.delete(guid);\n        return err({\n          code: 'asset-dependency-failed',\n          expected: 'every referenced asset to load successfully',\n          hint: 'repair the dependency publication and retry the root asset',\n          detail: { guid, dependencyGuid: ref },\n        });\n      }\n    }\n    return ok(undefined);\n  }\n\n  private readOnce(guid: string, signal: AbortSignal): Promise<GraphResult<P>> {\n    const existing = this.reads.get(guid);\n    if (existing !== undefined) return existing;\n    const request = this.withPermit(async () => {\n      if (this.disposed) return err(disposed());\n      if (signal.aborted) return err(cancelled(guid));\n      try {\n        const result = await waitForAsset(this.read(guid, signal), signal, guid);\n        if (signal.aborted) return err(cancelled(guid));\n        if (!result.ok)\n          this.counters = { ...this.counters, readErrors: this.counters.readErrors + 1 };\n        return result;\n      } catch {\n        this.counters = { ...this.counters, readErrors: this.counters.readErrors + 1 };\n        return err(thrown(guid));\n      }\n    });\n    this.reads.set(guid, request);\n    void request.finally(() => {\n      if (this.reads.get(guid) === request) this.reads.delete(guid);\n    });\n    return request;\n  }\n\n  private async withPermit<T>(operation: () => Promise<T>): Promise<T> {\n    if (this.activeReads >= this.limit) {\n      await new Promise<void>((resolve) => this.readWaiters.push(resolve));\n    }\n    this.activeReads += 1;\n    try {\n      return await operation();\n    } finally {\n      this.activeReads -= 1;\n      this.readWaiters.shift()?.();\n    }\n  }\n\n  private link(guid: string, refs: readonly string[]): void {\n    const previous = this.forward.get(guid) ?? new Set<string>();\n    for (const ref of previous) this.reverse.get(ref)?.delete(guid);\n    const next = new Set(refs.map((ref) => ref.toLowerCase()));\n    this.forward.set(guid, next);\n    for (const ref of next) {\n      const dependents = this.reverse.get(ref) ?? new Set<string>();\n      dependents.add(guid);\n      this.reverse.set(ref, dependents);\n    }\n  }\n\n  private collectAffected(guids: readonly string[]): Set<string> {\n    const affected = new Set<string>();\n    const queue = [...guids];\n    while (queue.length > 0) {\n      const current = queue.shift();\n      if (current === undefined || affected.has(current)) continue;\n      affected.add(current);\n      for (const dependent of this.reverse.get(current) ?? []) queue.push(dependent);\n    }\n    return affected;\n  }\n\n  private drop(affected: ReadonlySet<string>): void {\n    for (const item of affected) {\n      for (const ref of this.forward.get(item) ?? []) this.reverse.get(ref)?.delete(item);\n      for (const dependent of this.reverse.get(item) ?? []) {\n        this.forward.get(dependent)?.delete(item);\n      }\n    }\n    for (const item of affected) {\n      this.ready.delete(item);\n      this.requests.delete(item);\n      this.reads.delete(item);\n      this.forward.delete(item);\n      this.reverse.delete(item);\n    }\n    this.sccs.splice(0, this.sccs.length);\n  }\n\n  private promote(guid: string, value: P): void {\n    if (value === undefined) return;\n    this.ready.set(\n      guid,\n      Object.freeze({\n        ...value,\n        value: freezeRuntimePayload(value.value),\n        refs: Object.freeze([...value.refs]),\n      }) as P,\n    );\n  }\n\n  private recordScc(): void {\n    interface Vertex {\n      readonly guid: string;\n      readonly index: number;\n      low: number;\n      onStack: boolean;\n    }\n    const vertices = new Map<string, Vertex>();\n    const stack: Vertex[] = [];\n    const components: string[][] = [];\n    const visit = (guid: string): Vertex => {\n      const vertex: Vertex = { guid, index: vertices.size, low: vertices.size, onStack: true };\n      vertices.set(guid, vertex);\n      stack.push(vertex);\n      for (const ref of this.forward.get(guid) ?? []) {\n        const child = vertices.get(ref);\n        if (child === undefined) {\n          vertex.low = Math.min(vertex.low, visit(ref).low);\n        } else if (child.onStack) {\n          vertex.low = Math.min(vertex.low, child.index);\n        }\n      }\n      if (vertex.low !== vertex.index) return vertex;\n      const component: string[] = [];\n      let member: Vertex | undefined;\n      do {\n        member = stack.pop();\n        if (member === undefined) break;\n        member.onStack = false;\n        component.push(member.guid);\n      } while (member !== vertex);\n      if (component.length > 1 || this.forward.get(guid)?.has(guid) === true)\n        components.push(component.sort());\n      return vertex;\n    };\n    for (const guid of this.forward.keys()) if (!vertices.has(guid)) visit(guid);\n    this.sccs.splice(\n      0,\n      this.sccs.length,\n      ...components.map((component) => Object.freeze(component)),\n    );\n  }\n\n  private publish(): void {\n    this.currentSnapshot = undefined;\n    if (this.listeners.size === 0) return;\n    this.currentSnapshot = this.snapshot();\n    for (const listener of [...this.listeners]) {\n      try {\n        listener(this.currentSnapshot);\n      } catch {\n        this.counters = {\n          ...this.counters,\n          listenerFailures: Math.min(1024, this.counters.listenerFailures + 1),\n        };\n        this.currentSnapshot = freezeSnapshot({\n          ...this.currentSnapshot,\n          counters: this.counters,\n        });\n      }\n    }\n  }\n}\n","import type { CatalogEntry } from '@forgeax/engine-types';\nimport { type AssetLoadError, err, ok, type Result } from '@forgeax/engine-types';\n\nexport interface RuntimeCatalogRow extends CatalogEntry {\n  readonly publication: NonNullable<CatalogEntry['publication']>;\n}\n\nfunction invalidRow(guid: string, reason: string): Result<never, AssetLoadError> {\n  return err({\n    code: 'asset-package-invalid',\n    expected: 'one complete current runtime Catalog row',\n    hint: 'rebuild the producer Catalog and publish one Pack v2 tuple',\n    detail: { guid, reason },\n  });\n}\n\nexport function validateCatalogRow(row: CatalogEntry): Result<CatalogEntry, AssetLoadError> {\n  if (row === null || typeof row !== 'object') return invalidRow('', 'row');\n  const candidate = row as Partial<CatalogEntry>;\n  const guid = typeof candidate.guid === 'string' ? candidate.guid : '';\n  if (guid.trim().length === 0) return invalidRow(guid, 'guid');\n  if (typeof candidate.kind !== 'string' || candidate.kind.trim().length === 0)\n    return invalidRow(guid, 'kind');\n  if (typeof candidate.packageUrl !== 'string' || candidate.packageUrl.trim().length === 0)\n    return invalidRow(guid, 'packageUrl');\n  if (typeof candidate.sourcePath !== 'string' || candidate.sourcePath.trim().length === 0)\n    return invalidRow(guid, 'sourcePath');\n  return ok(Object.freeze({ ...candidate, guid }) as CatalogEntry);\n}\n\nexport function validateRuntimeRow(row: CatalogEntry): Result<RuntimeCatalogRow, AssetLoadError> {\n  const navigation = validateCatalogRow(row);\n  if (!navigation.ok) return navigation;\n  const candidate = navigation.value;\n  const guid = candidate.guid;\n  if (!Number.isSafeInteger(candidate.publication?.generation))\n    return invalidRow(guid, 'publication generation');\n  if (candidate.publication === undefined) return invalidRow(guid, 'publication');\n  const publication = candidate.publication;\n  if (\n    publication.schemaVersion !== 'asset-publication/1' ||\n    typeof publication.sourcePath !== 'string' ||\n    publication.sourcePath.trim().length === 0 ||\n    typeof publication.sourceRevision !== 'string' ||\n    publication.sourceRevision.trim().length === 0 ||\n    publication.generation < 0 ||\n    typeof publication.digest !== 'string' ||\n    publication.digest.trim().length === 0 ||\n    typeof publication.outputSetDigest !== 'string' ||\n    publication.outputSetDigest.trim().length === 0 ||\n    !Array.isArray(publication.outputs) ||\n    publication.receipt === null ||\n    typeof publication.receipt !== 'object' ||\n    !Array.isArray(publication.externalEvidence)\n  ) {\n    return invalidRow(guid, 'publication tuple');\n  }\n  return ok(Object.freeze({ ...candidate, guid, publication }) as RuntimeCatalogRow);\n}\n","import type {\n  CatalogDelta,\n  CatalogDiagnostic,\n  CatalogEntry,\n  ResourceRevision,\n} from '@forgeax/engine-types';\nimport { type AssetLoadError, err, ok, type Result } from '@forgeax/engine-types';\nimport type { CatalogSource } from '../catalog-source.js';\nimport { resolveCatalogAssetUrl } from '../registry/catalog.js';\nimport {\n  type RuntimeCatalogRow,\n  validateCatalogRow,\n  validateRuntimeRow,\n} from './validate-runtime-row.js';\nimport { waitForAsset } from './wait-for-asset.js';\n\nexport interface CatalogSessionOptions {\n  readonly scopeId?: string;\n  readonly generation?: number;\n}\n\nexport interface CatalogSessionSnapshot {\n  readonly scopeId: string;\n  readonly generation: number;\n  readonly epoch: number;\n  readonly revision?: ResourceRevision;\n  readonly entries: readonly CatalogEntry[];\n  readonly changed: readonly string[];\n  readonly removed: readonly string[];\n  readonly diagnostics: readonly CatalogDiagnostic[];\n  readonly listenerFailures: number;\n  readonly stale: boolean;\n}\n\ntype SessionResult = Result<CatalogSessionSnapshot, AssetLoadError>;\ntype SessionListener = (snapshot: CatalogSessionSnapshot) => void;\n\nfunction runtimeError(\n  code: AssetLoadError['code'],\n  guid: string,\n  detail: Record<string, unknown>,\n): AssetLoadError {\n  if (code === 'catalog-discontinuous') {\n    return {\n      code,\n      expected: 'an ordered catalog revision window',\n      hint: 'reconcile the current Catalog before consuming this delta',\n      detail: {\n        scopeId: String(detail.scopeId ?? 'unknown'),\n        expectedGeneration: Number(detail.expectedGeneration ?? 0),\n        actualGeneration: Number(detail.actualGeneration ?? 0),\n      },\n    };\n  }\n  return {\n    code: 'asset-package-invalid',\n    expected: 'a verified Catalog source',\n    hint: 'repair the producer Catalog and retry with the current publication',\n    detail: { guid, reason: String(detail.reason ?? 'catalog source failed') },\n  };\n}\n\nfunction freezeSnapshot(snapshot: CatalogSessionSnapshot): CatalogSessionSnapshot {\n  return Object.freeze({\n    ...snapshot,\n    entries: Object.freeze([...snapshot.entries]),\n    changed: Object.freeze([...snapshot.changed]),\n    removed: Object.freeze([...snapshot.removed]),\n    diagnostics: Object.freeze([...snapshot.diagnostics]),\n  });\n}\n\nfunction sameEntry(left: CatalogEntry, right: CatalogEntry): boolean {\n  return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction key(guid: string): string {\n  return guid.toLowerCase();\n}\n\nfunction validateSessionRow(row: CatalogEntry): Result<CatalogEntry, AssetLoadError> {\n  if (row?.lifecycle === 'missing' && row.publication === undefined) {\n    return validateCatalogRow(row);\n  }\n  return validateRuntimeRow(row);\n}\n\nexport class CatalogSession {\n  private readonly source: CatalogSource;\n  private readonly scopeId: string;\n  private readonly generation: number;\n  private readonly entries = new Map<string, CatalogEntry>();\n  private readonly reads = new Map<string, Promise<Result<RuntimeCatalogRow, AssetLoadError>>>();\n  private readonly lifetime = new AbortController();\n  private readonly listeners = new Set<SessionListener>();\n  private unsubscribe: (() => void) | undefined;\n  private baselinePromise: Promise<SessionResult> | undefined;\n  private reconcilePromise: Promise<SessionResult> | undefined;\n  private pending: CatalogDelta[] = [];\n  private currentSnapshot: CatalogSessionSnapshot;\n  private revision: ResourceRevision | undefined;\n  private diagnostics: CatalogDiagnostic[] = [];\n  private listenerFailures = 0;\n  private changed = new Set<string>();\n  private removed = new Set<string>();\n  private epoch = 0;\n  private stale = false;\n  private staleGeneration = 0;\n  private started = false;\n  private disposed = false;\n\n  constructor(source: CatalogSource, options: CatalogSessionOptions = {}) {\n    this.source = source;\n    this.scopeId = options.scopeId ?? source.expectedScope?.scopeId ?? 'asset-runtime';\n    this.generation = options.generation ?? source.expectedScope?.generation ?? 0;\n    this.currentSnapshot = freezeSnapshot({\n      scopeId: this.scopeId,\n      generation: this.generation,\n      epoch: 0,\n      entries: [],\n      changed: [],\n      removed: [],\n      diagnostics: [],\n      listenerFailures: 0,\n      stale: false,\n    });\n  }\n\n  start(): Promise<SessionResult> {\n    if (this.baselinePromise !== undefined) return this.baselinePromise;\n    if (this.disposed) return Promise.resolve(err(this.disposedError()));\n    this.unsubscribe = this.source.subscribe((delta) => this.receive(delta));\n    const promise = this.source\n      .enumerate()\n      .then((result) => {\n        if (!result.ok) {\n          this.markStale();\n          this.publish();\n          return err(runtimeError('asset-package-invalid', '', { reason: result.error.code }));\n        }\n        this.entries.clear();\n        for (const entry of result.value) {\n          const validated = validateSessionRow(this.resolveRow(entry));\n          if (!validated.ok) {\n            this.markStale();\n            this.publish();\n            return err(validated.error);\n          }\n          this.entries.set(key(validated.value.guid), validated.value);\n        }\n        this.started = true;\n        this.stale = false;\n        this.staleGeneration = this.generation;\n        this.diagnostics = [];\n        for (const delta of this.pending) this.fold(delta, false);\n        this.pending = [];\n        this.publish();\n        return ok(this.currentSnapshot);\n      })\n      .catch((cause: unknown) => {\n        this.markStale();\n        this.addDiagnostic('catalog-degraded-rows', 'Catalog enumeration must resolve a Result');\n        this.publish();\n        return err(\n          runtimeError('asset-package-invalid', '', {\n            reason: cause instanceof Error ? cause.message : String(cause),\n          }),\n        );\n      });\n    this.baselinePromise = promise;\n    void promise.then(\n      (result) => {\n        if (!result.ok) this.baselinePromise = undefined;\n      },\n      () => {\n        this.baselinePromise = undefined;\n      },\n    );\n    return promise;\n  }\n\n  reconcile(): Promise<SessionResult> {\n    if (this.disposed) return Promise.resolve(err(this.disposedError()));\n    if (this.reconcilePromise !== undefined) return this.reconcilePromise;\n    this.unsubscribe?.();\n    this.unsubscribe = undefined;\n    this.started = false;\n    this.reads.clear();\n    this.pending = [];\n    this.baselinePromise = undefined;\n    this.epoch += 1;\n    const promise = this.start();\n    this.reconcilePromise = promise;\n    void promise.then(\n      () => {\n        if (this.reconcilePromise === promise) this.reconcilePromise = undefined;\n      },\n      () => {\n        if (this.reconcilePromise === promise) this.reconcilePromise = undefined;\n      },\n    );\n    return promise;\n  }\n\n  current(guid: string): CatalogEntry | undefined {\n    return this.entries.get(key(guid));\n  }\n\n  get(guid: string): Promise<Result<RuntimeCatalogRow, AssetLoadError>> {\n    const row = this.current(guid);\n    const get = this.source.get?.bind(this.source);\n    if (this.disposed) return Promise.resolve(err(this.disposedError()));\n    if (row === undefined)\n      return Promise.resolve(\n        err({\n          code: 'asset-not-found',\n          expected: 'the current Catalog to declare the requested GUID',\n          hint: 'inspect the producer Catalog',\n          detail: { guid },\n        }),\n      );\n    if (row.lifecycle !== 'missing' || row.publication !== undefined || get === undefined) {\n      return Promise.resolve(validateRuntimeRow(row));\n    }\n    const id = key(guid);\n    const existing = this.reads.get(id);\n    if (existing) return existing;\n    const baseline = [...this.entries.values()].filter(\n      (candidate) => candidate.sourcePath === row.sourcePath,\n    );\n    const current = () => this.reads.get(id) === request;\n    const request = (async (): Promise<Result<RuntimeCatalogRow, AssetLoadError>> => {\n      const imported = await waitForAsset(\n        Promise.resolve()\n          .then(() => get(guid))\n          .then((result) =>\n            result.ok\n              ? ok(result.value)\n              : err(runtimeError('asset-package-invalid', guid, { reason: result.error.code })),\n          )\n          .catch((cause: unknown) =>\n            err(\n              runtimeError('asset-package-invalid', guid, {\n                reason: cause instanceof Error ? cause.message : String(cause),\n              }),\n            ),\n          ),\n        this.lifetime.signal,\n        guid,\n      );\n      if (this.disposed) return err(this.disposedError());\n      if (!current())\n        return err({\n          code: 'asset-superseded',\n          expected: 'the same declared GUID until publication completes',\n          hint: 'retry the current Catalog publication',\n          detail: { guid, generation: this.generation },\n        });\n      const discontinuity = this.discontinuity();\n      if (discontinuity) return err(discontinuity);\n      if (!imported.ok) return imported;\n      const rows: RuntimeCatalogRow[] = [];\n      for (const candidate of imported.value) {\n        const validated = validateRuntimeRow(this.resolveRow(candidate));\n        if (!validated.ok) return validated;\n        rows.push(validated.value);\n      }\n      const published = rows.find((candidate) => key(candidate.guid) === id);\n      if (published === undefined)\n        return err(\n          runtimeError('asset-package-invalid', guid, {\n            reason: 'producer omitted the requested GUID',\n          }),\n        );\n      for (const candidate of rows) {\n        const prior = baseline.find((entry) => key(entry.guid) === key(candidate.guid));\n        const current = this.current(candidate.guid);\n        if (\n          (prior !== undefined && current === undefined) ||\n          (current !== undefined &&\n            !sameEntry(current, candidate) &&\n            (prior === undefined || current !== prior))\n        ) {\n          return err({\n            code: 'asset-superseded',\n            expected: 'the same declared source until publication completes',\n            hint: 'retry the current Catalog publication',\n            detail: { guid: candidate.guid, generation: this.generation },\n          });\n        }\n      }\n      this.fold(\n        {\n          added: rows,\n          changed: [],\n          removed: [],\n          scopeId: this.scopeId,\n          generation: this.generation,\n        },\n        true,\n      );\n      return ok(published);\n    })();\n    this.reads.set(id, request);\n    void request.finally(() => {\n      if (this.reads.get(id) === request) this.reads.delete(id);\n    });\n    return request;\n  }\n\n  snapshot(): CatalogSessionSnapshot {\n    return this.currentSnapshot;\n  }\n\n  discontinuity(): AssetLoadError | undefined {\n    if (!this.stale) return undefined;\n    return {\n      code: 'catalog-discontinuous',\n      expected: 'an ordered, authoritative catalog revision window',\n      hint: 'reconcile the Catalog source and retry the current publication',\n      detail: {\n        scopeId: this.scopeId,\n        expectedGeneration: this.generation,\n        actualGeneration: this.staleGeneration,\n      },\n    };\n  }\n\n  subscribe(listener: SessionListener): () => void {\n    this.listeners.add(listener);\n    return () => this.listeners.delete(listener);\n  }\n\n  dispose(): void {\n    if (this.disposed) return;\n    this.disposed = true;\n    this.lifetime.abort();\n    this.unsubscribe?.();\n    this.unsubscribe = undefined;\n    this.pending = [];\n    this.reads.clear();\n    this.listeners.clear();\n  }\n\n  private receive(delta: CatalogDelta): void {\n    if (this.disposed) return;\n    if (!this.started) {\n      this.pending.push(delta);\n      return;\n    }\n    this.fold(delta, true);\n  }\n\n  private resolveRow(row: CatalogEntry): CatalogEntry {\n    if (this.source.url === undefined || typeof row?.packageUrl !== 'string') return row;\n    const packageUrl = resolveCatalogAssetUrl({ packIndexUrl: this.source.url }, row.packageUrl);\n    return packageUrl === row.packageUrl ? row : { ...row, packageUrl };\n  }\n\n  private fold(delta: CatalogDelta, publish: boolean): void {\n    if (\n      (delta.scopeId !== undefined && delta.scopeId !== this.scopeId) ||\n      (delta.generation !== undefined && delta.generation !== this.generation)\n    ) {\n      this.markStale(delta.generation);\n      this.addDiagnostic('catalog-scope-mismatch', 'delta scope does not match the session');\n      if (publish) this.publish();\n      return;\n    }\n    if (delta.authority === 'degraded') {\n      this.markStale(delta.generation);\n      this.addDiagnostic('catalog-degraded-rows', 'degraded rows are not identity-bearing');\n      if (publish) this.publish();\n      return;\n    }\n    if (delta.revisions !== undefined) {\n      const baseline = delta.revisions.baseline;\n      const current = delta.revisions.current;\n      const valid =\n        baseline.length === current.length &&\n        current.every((point) => {\n          const prior = baseline.find((item) => item.rootId === point.rootId);\n          return prior !== undefined && point.revision === prior.revision + 1;\n        });\n      if (!valid) {\n        this.markStale(delta.generation);\n        this.addDiagnostic('catalog-gap', 'delta revision window is not contiguous');\n        if (publish) this.publish();\n        return;\n      }\n    }\n    let changed = false;\n    for (const entry of [...delta.added, ...delta.changed]) {\n      const validated = validateSessionRow(this.resolveRow(entry));\n      if (!validated.ok) {\n        this.markStale(delta.generation);\n        this.addDiagnostic('catalog-degraded-rows', 'delta contains an invalid runtime row');\n        if (publish) this.publish();\n        return;\n      }\n      const entryKey = key(validated.value.guid);\n      const prior = this.entries.get(entryKey);\n      if (prior === undefined || !sameEntry(prior, validated.value)) {\n        this.entries.set(entryKey, validated.value);\n        this.changed.add(entryKey);\n        changed = true;\n        if (validated.value.revision !== undefined) this.revision = validated.value.revision;\n      }\n    }\n    for (const guid of delta.removed) {\n      const entryKey = key(guid);\n      this.reads.delete(entryKey);\n      if (this.entries.delete(entryKey)) {\n        this.removed.add(entryKey);\n        changed = true;\n      }\n    }\n    if (changed) this.epoch += 1;\n    if (publish) this.publish();\n  }\n\n  private addDiagnostic(code: CatalogDiagnostic['code'], expected: string): void {\n    if (this.diagnostics.some((diagnostic) => diagnostic.code === code)) return;\n    this.diagnostics.push({\n      code,\n      severity: 'blocking',\n      expected,\n      hint: 'reconcile the Catalog before loading the affected publication',\n      authority: 'catalog',\n    });\n  }\n\n  private markStale(actualGeneration = this.generation): void {\n    this.stale = true;\n    this.staleGeneration = actualGeneration;\n    this.epoch += 1;\n  }\n\n  private publish(): void {\n    this.currentSnapshot = freezeSnapshot({\n      scopeId: this.scopeId,\n      generation: this.generation,\n      epoch: this.epoch,\n      ...(this.revision === undefined ? {} : { revision: this.revision }),\n      entries: [...this.entries.values()].sort((left, right) =>\n        key(left.guid).localeCompare(key(right.guid)),\n      ),\n      changed: [...this.changed].sort(),\n      removed: [...this.removed].sort(),\n      diagnostics: this.diagnostics,\n      listenerFailures: this.listenerFailures,\n      stale: this.stale,\n    });\n    this.changed.clear();\n    this.removed.clear();\n    for (const listener of [...this.listeners]) {\n      try {\n        listener(this.currentSnapshot);\n      } catch {\n        this.listenerFailures = Math.min(1024, this.listenerFailures + 1);\n        this.currentSnapshot = freezeSnapshot({\n          ...this.currentSnapshot,\n          listenerFailures: this.listenerFailures,\n        });\n      }\n    }\n  }\n\n  private disposedError(): AssetLoadError {\n    return {\n      code: 'asset-runtime-disposed',\n      expected: 'a live asset runtime',\n      hint: 'create a new runtime after disposal',\n      detail: { scopeId: this.scopeId },\n    };\n  }\n}\n","import type {\n  AssetDecoder,\n  AssetDecoderInput,\n  AssetDecoderLease,\n  AssetKind,\n  AssetLoadError,\n  Result,\n} from '@forgeax/engine-types';\nimport { err, ok } from '@forgeax/engine-types';\nimport { freezeRuntimePayload } from './immutable-payload.js';\n\ninterface DecoderEntry {\n  readonly identity: symbol;\n  readonly decoder: AssetDecoder<unknown>;\n  readonly decode: (input: AssetDecoderInput<unknown>) => Promise<Result<unknown, AssetLoadError>>;\n  references: number;\n}\n\nexport interface DecoderRegistryOptions {\n  readonly scopeId?: string;\n}\n\nexport class DecoderRegistry {\n  referencePolicy(kind: string): 'eager' | 'deferred' {\n    return this.dispatch.get(kind)?.decoder.references ?? 'eager';\n  }\n  private readonly dispatch = new Map<string, DecoderEntry>();\n  private readonly scopeId: string;\n  private disposed = false;\n\n  constructor(options: DecoderRegistryOptions = {}) {\n    this.scopeId = options.scopeId ?? 'asset-runtime';\n  }\n\n  install<P, K extends string>(kind: AssetKind<P, K>, decoder: AssetDecoder<P>): AssetDecoderLease {\n    if (this.disposed) throw new TypeError('asset runtime decoder registry is disposed');\n    const normalizedDecoder = decoder as AssetDecoder<unknown>;\n    const existing = this.dispatch.get(kind.kind);\n    if (existing !== undefined) {\n      if (existing.decoder !== normalizedDecoder) {\n        throw new TypeError(`duplicate decoder kind \"${kind.kind}\"`);\n      }\n      existing.references += 1;\n      return this.createLease(kind.kind, existing);\n    }\n    const identity = Symbol(kind.kind);\n    const entry: DecoderEntry = {\n      identity,\n      decoder: normalizedDecoder,\n      decode: (input) =>\n        decoder.decode(input as AssetDecoderInput<P>) as Promise<Result<unknown, AssetLoadError>>,\n      references: 1,\n    };\n    this.dispatch.set(kind.kind, entry);\n    return this.createLease(kind.kind, entry);\n  }\n\n  private createLease(kind: string, entry: DecoderEntry): AssetDecoderLease {\n    let released = false;\n    return {\n      kind,\n      dispose: () => {\n        if (released) return;\n        released = true;\n        entry.references -= 1;\n        if (entry.references === 0 && this.dispatch.get(kind)?.identity === entry.identity) {\n          this.dispatch.delete(kind);\n        }\n      },\n    };\n  }\n\n  has<P, K extends string>(kind: AssetKind<P, K>): boolean {\n    return this.dispatch.has(kind.kind);\n  }\n\n  load<P, K extends string>(\n    kind: AssetKind<P, K>,\n    input: AssetDecoderInput<P>,\n  ): Promise<Result<P, AssetLoadError>> {\n    return this.decode(kind, input);\n  }\n\n  loadByKind(\n    kind: string,\n    input: AssetDecoderInput<unknown>,\n  ): Promise<Result<unknown, AssetLoadError>> {\n    if (this.disposed) return Promise.resolve(err(disposedError(this.scopeId)));\n    const entry = this.dispatch.get(kind);\n    if (entry === undefined) {\n      return Promise.resolve(\n        err({\n          code: 'asset-decoder-missing',\n          expected: `an active decoder for kind \"${kind}\"`,\n          hint: 'install the owner decoder lease before loading this kind',\n          detail: { kind },\n        }),\n      );\n    }\n    return this.decodeEntry(kind, entry, input);\n  }\n\n  async decode<P, K extends string>(\n    kind: AssetKind<P, K>,\n    input: AssetDecoderInput<P>,\n  ): Promise<Result<P, AssetLoadError>> {\n    if (this.disposed) return err(disposedError(this.scopeId));\n    if (input.signal.aborted) return err(cancelledError(input.envelope.guid));\n    const entry = this.dispatch.get(kind.kind);\n    if (entry === undefined) {\n      return err({\n        code: 'asset-decoder-missing',\n        expected: `an active decoder for kind \"${kind.kind}\"`,\n        hint: 'install the owner decoder lease before loading this kind',\n        detail: { kind: kind.kind },\n      });\n    }\n    return (await this.decodeEntry(kind.kind, entry, input)) as Result<P, AssetLoadError>;\n  }\n\n  private async decodeEntry(\n    kind: string,\n    entry: DecoderEntry,\n    input: AssetDecoderInput<unknown>,\n  ): Promise<Result<unknown, AssetLoadError>> {\n    if (this.disposed) return err(disposedError(this.scopeId));\n    if (input.signal.aborted) return err(cancelledError(input.envelope.guid));\n    try {\n      const result = await entry.decode(input);\n      if (this.disposed) return err(disposedError(this.scopeId));\n      if (this.dispatch.get(kind)?.identity !== entry.identity) {\n        return err(supersededError(input.envelope.guid, kind));\n      }\n      if (input.signal.aborted) return err(cancelledError(input.envelope.guid));\n      return result.ok ? ok(freezeRuntimePayload(result.value)) : result;\n    } catch {\n      return err({\n        code: 'asset-decode-failed',\n        expected: `decoder for kind \"${kind}\" to return a Result`,\n        hint: 'inspect the owner decoder and retry the current publication',\n        detail: { guid: input.envelope.guid, kind },\n      });\n    }\n  }\n\n  dispose(): void {\n    if (this.disposed) return;\n    this.disposed = true;\n    this.dispatch.clear();\n  }\n}\n\nfunction cancelledError(guid: string): AssetLoadError {\n  return {\n    code: 'asset-load-cancelled',\n    expected: 'the request AbortSignal to remain live until decode completes',\n    hint: 'retry with a live AbortSignal when the request is still needed',\n    detail: { guid },\n  };\n}\n\nfunction disposedError(scopeId: string): AssetLoadError {\n  return {\n    code: 'asset-runtime-disposed',\n    expected: 'an active asset runtime decoder scope',\n    hint: 'obtain a new Registry from the current realm',\n    detail: { scopeId },\n  };\n}\n\nfunction supersededError(guid: string, kind: string): AssetLoadError {\n  return {\n    code: 'asset-superseded',\n    expected: `the decoder lease for kind \"${kind}\" to remain current until decode completes`,\n    hint: 'retry the current publication after reinstalling its owner decoder',\n    detail: { guid, generation: 0 },\n  };\n}\n","import { validateArtifactPath } from '@forgeax/engine-pack/artifact-path';\nimport type {\n  Asset,\n  AssetArtifactReader,\n  AssetDecoder,\n  AssetDecoderInput,\n  AssetDecoderLease,\n  AssetKind,\n  AssetLoadError,\n  AssetPublicationTuple,\n  BuiltinAssetKind,\n  BuiltinAssetPayload,\n  PluginAssetDefinition,\n  Result,\n} from '@forgeax/engine-types';\nimport { err, ok } from '@forgeax/engine-types';\nimport { defineAssetKind } from '../asset-kind.js';\nimport type { CatalogSource } from '../catalog-source.js';\nimport { pluginAssetDecoder } from '../loaders/plugin.js';\nimport { ArtifactCache } from './artifact-cache.js';\nimport { AssetGraph, type AssetGraphSnapshot } from './asset-graph.js';\nimport { CatalogSession, type CatalogSessionOptions } from './catalog-session.js';\nimport { DecoderRegistry } from './decoder-registry.js';\nimport { freezeRuntimePayload } from './immutable-payload.js';\nimport { PackReader } from './pack-reader.js';\nimport { bytesOf, readPackage } from './package-read.js';\nimport { validatePublicationReferences } from './publication-references.js';\nimport type { RuntimeCatalogRow } from './validate-runtime-row.js';\nimport { validateRuntimeRow } from './validate-runtime-row.js';\nimport { assetLoadCancelled, waitForAsset } from './wait-for-asset.js';\n\nexport interface AssetRegistryOptions extends CatalogSessionOptions {\n  readonly catalog: CatalogSource;\n  readonly fetcher?: typeof globalThis.fetch;\n  readonly maxConcurrentReads?: number;\n}\n\nexport interface AssetLoadOptions {\n  readonly signal?: AbortSignal;\n}\n\nexport type AssetRegistrySnapshot = AssetGraphSnapshot;\n\nexport interface AssetRegistry {\n  readPluginDefinition(guid: string): Promise<Result<PluginAssetDefinition, AssetLoadError>>;\n  installDecoder<P, K extends string>(\n    kind: AssetKind<P, K>,\n    decoder: AssetDecoder<P>,\n  ): AssetDecoderLease;\n  load<K extends BuiltinAssetKind>(\n    guid: string,\n    kind: K,\n    options?: AssetLoadOptions,\n  ): Promise<Result<BuiltinAssetPayload<K>, AssetLoadError>>;\n  load<P, K extends string>(\n    guid: string,\n    kind: AssetKind<P, K>,\n    options?: AssetLoadOptions,\n  ): Promise<Result<P, AssetLoadError>>;\n  snapshot(): AssetRegistrySnapshot;\n  subscribe(listener: (snapshot: AssetRegistrySnapshot) => void): () => void;\n  dispose(): void;\n}\n\n/** Internal render projection; the root Registry keeps only its five actions. */\nexport interface AssetRegistryResolver {\n  readonly epoch: number;\n  lookup<T extends Asset>(guid: string): T | undefined;\n  guidOf(asset: Asset): string | undefined;\n}\n\nconst REGISTRY_RESOLVER = Symbol.for('forgeax.assets-runtime.registry-resolver');\ntype RegistryWithResolver = AssetRegistry & {\n  [REGISTRY_RESOLVER]?: AssetRegistryResolver;\n};\n\nexport function getAssetRegistryResolver(registry: AssetRegistry): AssetRegistryResolver {\n  const resolver = (registry as RegistryWithResolver)[REGISTRY_RESOLVER];\n  if (resolver === undefined) {\n    throw new TypeError('AssetRegistry resolver is not owned by this asset runtime');\n  }\n  return resolver;\n}\n\nfunction missing(guid: string): AssetLoadError {\n  return {\n    code: 'asset-not-found',\n    expected: `the current Catalog to contain GUID \"${guid}\"`,\n    hint: 'inspect the producer Catalog and rebuild the missing publication',\n    detail: { guid },\n  };\n}\n\nfunction mismatch(guid: string, expectedKind: string, actualKind: string): AssetLoadError {\n  return {\n    code: 'asset-kind-mismatch',\n    expected: `Catalog kind \"${actualKind}\" to match \"${expectedKind}\"`,\n    hint: 'pass the Catalog kind or the matching custom AssetKind token',\n    detail: { guid, expectedKind, actualKind },\n  };\n}\n\nfunction artifactError(guid: string, reason: string): AssetLoadError {\n  return {\n    code: 'asset-integrity-failed',\n    expected: 'the verified artifact byte length and digest',\n    hint: 'verify the artifact digest and recook the Pack',\n    detail: {\n      guid,\n      artifactKey: reason,\n      expectedDigest: 'descriptor integrity',\n      actualDigest: reason,\n    },\n  };\n}\n\nconst ASSET_GUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nfunction invalidGuid(guid: string): AssetLoadError {\n  return {\n    code: 'asset-guid-invalid',\n    expected: 'a 36-character dash-form asset GUID',\n    hint: 'pass the producer GUID from the current Catalog row',\n    detail: { guid },\n  };\n}\n\nexport function createAssetRegistry(options: AssetRegistryOptions): AssetRegistry {\n  const session = new CatalogSession(options.catalog, options);\n  const admit = async (\n    guid: string,\n    seen = new Set<string>(),\n  ): Promise<Result<RuntimeCatalogRow, AssetLoadError>> => {\n    const admitted = await session.get(guid);\n    if (\n      !admitted.ok ||\n      seen.has(guid.toLowerCase()) ||\n      decoders.referencePolicy(admitted.value.kind) === 'deferred'\n    )\n      return admitted;\n    seen.add(guid.toLowerCase());\n    for (const ref of admitted.value.publication.outputs.find(\n      (output) => output.guid.toLowerCase() === guid.toLowerCase(),\n    )?.refs ?? []) {\n      const dependency = await admit(ref, seen);\n      if (!dependency.ok) return dependency;\n    }\n    return admitted;\n  };\n  const reader = new PackReader(options.fetcher === undefined ? {} : { fetcher: options.fetcher });\n  const cache = new ArtifactCache();\n  const decoders = new DecoderRegistry(\n    options.scopeId === undefined ? {} : { scopeId: options.scopeId },\n  );\n  decoders.install(defineAssetKind('plugin'), pluginAssetDecoder);\n  const graph = new AssetGraph<{\n    readonly value: unknown;\n    readonly refs: readonly string[];\n    readonly publication: AssetPublicationTuple;\n    readonly references: 'eager' | 'deferred';\n  }>({\n    ...(options.maxConcurrentReads === undefined\n      ? {}\n      : { maxConcurrentReads: options.maxConcurrentReads }),\n    read: async (guid, signal) => {\n      const row = session.current(guid);\n      if (row === undefined) return err(missing(guid));\n      const fetcher =\n        options.catalog.openPackage?.(row.packageUrl) ??\n        options.fetcher ??\n        globalThis.fetch.bind(globalThis);\n      const validated = validateRuntimeRow(row);\n      if (!validated.ok) return validated;\n      const publication = validated.value.publication;\n      const tuple = {\n        scopeId: session.snapshot().scopeId,\n        generation: publication.generation,\n        digest: publication.digest,\n        outputSetDigest: publication.outputSetDigest,\n      };\n      const pack = await reader.read(row.packageUrl, tuple, signal, fetcher);\n      if (!pack.ok) return pack;\n      const envelope = pack.value.assets.find(\n        (asset) => asset.guid.toLowerCase() === guid.toLowerCase(),\n      );\n      if (envelope === undefined) return err(missing(guid));\n      const artifacts: AssetArtifactReader = {\n        locate: (descriptor) => {\n          const path = validateArtifactPath(descriptor.path, {\n            packageRoot: row.packageUrl,\n            guid,\n            artifactKey: descriptor.path,\n          });\n          return path.ok ? resolveArtifactUrl(row.packageUrl, path.value) : undefined;\n        },\n        read: (descriptor) => {\n          const integrity = descriptor.integrity;\n          if (integrity === undefined)\n            return Promise.resolve(err(artifactError(guid, descriptor.path)));\n          const key = `${tuple.scopeId}:${tuple.generation}:${tuple.outputSetDigest}:${integrity.digest}`;\n          return cache.read(key, async () => {\n            const url = resolveArtifactUrl(row.packageUrl, descriptor.path);\n            const read = await readPackage(fetcher, url, bytesOf, { signal });\n            if (!read.ok) return err(artifactError(guid, descriptor.path));\n            const bytes = read.value;\n            if (descriptor.byteLength === undefined || bytes.byteLength !== descriptor.byteLength) {\n              return err(artifactError(guid, descriptor.path));\n            }\n            const actualDigest = await sha256(bytes);\n            if (actualDigest !== descriptor.integrity?.digest.toLowerCase()) {\n              return err(artifactError(guid, `${descriptor.path}:${actualDigest}`));\n            }\n            return ok(bytes);\n          });\n        },\n      };\n      const input: AssetDecoderInput<unknown> = { envelope, artifacts, signal };\n      const decoded = await decoders.loadByKind(envelope.kind, input);\n      if (!decoded.ok) return decoded;\n      return ok({\n        value: freezeRuntimePayload(decoded.value),\n        refs: [\n          ...new Set([\n            ...envelope.refs,\n            ...publication.externalEvidence\n              .filter((edge) => edge.usage !== 'content')\n              .map((edge) => edge.guid),\n          ]),\n        ],\n        publication: tuple,\n        references: decoders.referencePolicy(envelope.kind),\n      });\n    },\n  });\n\n  let catalogEpoch = session.snapshot().epoch;\n  const unsubscribeCatalog = session.subscribe((snapshot) => {\n    if (snapshot.epoch === catalogEpoch) return;\n    catalogEpoch = snapshot.epoch;\n    graph.invalidateForCatalogChange(\n      snapshot.stale ? undefined : [...snapshot.changed, ...snapshot.removed],\n    );\n  });\n\n  const registry: AssetRegistry = {\n    readPluginDefinition: async (guid) => {\n      const loaded = await registry.load(guid, 'plugin');\n      if (!loaded.ok) return loaded;\n      const snapshot = await graph.load(guid);\n      if (!snapshot.ok) return snapshot;\n      const checked = checkCurrent(guid, snapshot.value.publication);\n      if (!checked.ok) return checked;\n      const asset = snapshot.value.value as Asset;\n      if (asset.kind !== 'plugin') return err(mismatch(guid, 'plugin', asset.kind));\n      return ok({\n        guid,\n        asset,\n        evidence: { kind: 'publication', publication: snapshot.value.publication },\n      });\n    },\n    installDecoder: (kind, decoder) => decoders.install(kind, decoder),\n    load: (async (\n      guid: string,\n      kind: BuiltinAssetKind | AssetKind<unknown, string>,\n      loadOptions: AssetLoadOptions = {},\n    ): Promise<Result<unknown, AssetLoadError>> => {\n      if (!ASSET_GUID_PATTERN.test(guid)) return err(invalidGuid(guid));\n      if (loadOptions.signal?.aborted) return err(assetLoadCancelled(guid));\n      const request = (async () => {\n        const expectedKind = typeof kind === 'string' ? kind : kind.kind;\n        const started = await session.start();\n        if (!started.ok) return err(started.error);\n        if (session.snapshot().stale) {\n          const reconciled = await session.reconcile();\n          if (!reconciled.ok) return err(reconciled.error);\n          const discontinuity = session.discontinuity();\n          if (discontinuity !== undefined) return err(discontinuity);\n        }\n        const declared = session.current(guid);\n        if (declared !== undefined && declared.kind !== expectedKind)\n          return err(mismatch(guid, expectedKind, declared.kind));\n        const admitted = await admit(guid);\n        if (!admitted.ok) return admitted;\n        const row = admitted.value;\n        if (row.kind !== expectedKind) return err(mismatch(guid, expectedKind, row.kind));\n        const before = validatePublicationReferences(guid, row, (guid) => session.current(guid));\n        if (!before.ok) {\n          graph.invalidate(guid);\n          return before;\n        }\n        const result = await graph.load(guid, loadOptions.signal);\n        if (!result.ok) return result;\n        const current = checkCurrent(guid, result.value.publication);\n        if (!current.ok) return current;\n        const after = validatePublicationReferences(guid, row, (guid) => session.current(guid));\n        if (!after.ok) {\n          graph.invalidate(guid);\n          return after;\n        }\n        return result.ok ? ok(result.value.value) : result;\n      })();\n      return loadOptions.signal === undefined\n        ? request\n        : waitForAsset(request, loadOptions.signal, guid);\n    }) as AssetRegistry['load'],\n    snapshot: () => graph.snapshot(),\n    subscribe: (listener) => graph.subscribe(listener),\n    dispose: () => {\n      graph.dispose();\n      reader.dispose();\n      unsubscribeCatalog();\n      decoders.dispose();\n      cache.clear();\n      session.dispose();\n    },\n  };\n  function checkCurrent(\n    guid: string,\n    expected: AssetPublicationTuple,\n  ): Result<void, AssetLoadError> {\n    const row = session.current(guid);\n    const actual = row?.publication;\n    if (\n      session.snapshot().stale ||\n      expected.scopeId !== session.snapshot().scopeId ||\n      actual?.generation !== expected.generation ||\n      actual.digest !== expected.digest ||\n      actual.outputSetDigest !== expected.outputSetDigest\n    ) {\n      graph.invalidate(guid);\n      return err({\n        code: 'asset-superseded',\n        expected: 'the same root publication until its read completes',\n        hint: 'load the current Catalog publication',\n        detail: { guid, generation: expected.generation },\n      });\n    }\n    const references = validatePublicationReferences(guid, row, (guid) => session.current(guid));\n    if (!references.ok) graph.invalidate(guid);\n    return references;\n  }\n  const resolver: AssetRegistryResolver = {\n    get epoch() {\n      return graph.snapshot().epoch;\n    },\n    lookup: <T extends Asset>(guid: string) => graph.lookup(guid) as T | undefined,\n    guidOf: (asset: Asset) => graph.guidOf(asset),\n  };\n  Object.defineProperty(registry, REGISTRY_RESOLVER, {\n    value: resolver,\n    enumerable: false,\n  });\n  return registry;\n}\n\nasync function sha256(bytes: Uint8Array): Promise<string> {\n  const digest = await globalThis.crypto.subtle.digest('SHA-256', bytes as unknown as BufferSource);\n  return `sha256:${Array.from(new Uint8Array(digest), (byte) =>\n    byte.toString(16).padStart(2, '0'),\n  ).join('')}`;\n}\n\nfunction resolveArtifactUrl(packageUrl: string, path: string): string {\n  const separator = packageUrl.lastIndexOf('/');\n  const packageDirectory = separator < 0 ? '' : packageUrl.slice(0, separator + 1);\n  try {\n    return new URL(path, new URL(packageDirectory, globalThis.location?.href)).toString();\n  } catch {\n    return `${packageDirectory}${path.replace(/^\\//, '')}`;\n  }\n}\n","import {\n  createMaterialError,\n  err,\n  type MaterialErrorFor,\n  type MaterialGenerationVector,\n  ok,\n  type Result,\n} from '@forgeax/engine-types';\n\nexport type { MaterialGenerationVector } from '@forgeax/engine-types';\n\nexport interface MaterialCachedArtifact {\n  readonly bytes: Uint8Array;\n}\n\nexport type MaterialStaleGenerationError =\n  MaterialErrorFor<'material-specialization-stale-generation'>;\n\nfunction sameVector(left: MaterialGenerationVector, right: MaterialGenerationVector): boolean {\n  const names = new Set([...Object.keys(left.dependencies), ...Object.keys(right.dependencies)]);\n  return [...names].every((name) => left.dependencies[name] === right.dependencies[name]);\n}\n\ninterface MaterialGenerationState {\n  readonly resolved: Map<string, Promise<unknown>>;\n  dependencies: readonly string[];\n  specializationKey?: string;\n  error?: MaterialStaleGenerationError;\n}\n\nexport class MaterialGenerationCache {\n  readonly #materials = new Map<string, MaterialGenerationState>();\n  readonly #artifacts = new Map<string, MaterialCachedArtifact>();\n  readonly #generations = new Map<string, number>();\n  readonly #dependents = new Map<string, Set<string>>();\n\n  resolve<T>(\n    materialGuid: string,\n    specializationKey: string,\n    load: () => Promise<T>,\n    publicationGeneration = 0,\n  ): Promise<T> {\n    const cacheKey = `${materialGuid}:${specializationKey}:${publicationGeneration}`;\n    const previous = this.#materials.get(materialGuid)?.resolved.get(cacheKey);\n    if (previous !== undefined) return previous as Promise<T>;\n    const promise = load();\n    this.material(materialGuid).resolved.set(cacheKey, promise);\n    void promise.then(\n      (value) => {\n        if (isStaleGenerationResult(value)) this.removeResolved(materialGuid, cacheKey, promise);\n      },\n      () => this.removeResolved(materialGuid, cacheKey, promise),\n    );\n    return promise;\n  }\n\n  linkResolved(materialGuid: string, specializationKey: string): void {\n    this.material(materialGuid).specializationKey = specializationKey;\n  }\n\n  getResolvedKey(materialGuid: string): string | undefined {\n    return this.#materials.get(materialGuid)?.specializationKey;\n  }\n\n  storeArtifact(key: string, artifact: MaterialCachedArtifact): void {\n    this.#artifacts.set(key, artifact);\n  }\n\n  getArtifact(key: string): MaterialCachedArtifact | undefined {\n    return this.#artifacts.get(key);\n  }\n\n  bump(dependency: string): number {\n    const generation = (this.#generations.get(dependency) ?? 0) + 1;\n    this.#generations.set(dependency, generation);\n    for (const materialGuid of this.#dependents.get(dependency) ?? []) {\n      this.#materials.get(materialGuid)?.resolved.clear();\n    }\n    return generation;\n  }\n\n  generationError(materialGuid: string): MaterialStaleGenerationError | undefined {\n    return this.#materials.get(materialGuid)?.error;\n  }\n\n  async loadWithGeneration<T>(\n    materialGuid: string,\n    dependencies: readonly string[],\n    load: (\n      generation: MaterialGenerationVector,\n    ) => Promise<{ readonly generation: MaterialGenerationVector; readonly value: T }>,\n  ): Promise<Result<T, MaterialStaleGenerationError>> {\n    const dependencySet = Object.freeze([...dependencies]);\n    this.trackDependencies(materialGuid, dependencySet);\n    for (let attempt = 0; attempt < 2; attempt += 1) {\n      const generation = this.vector(dependencySet);\n      const loaded = await load(generation);\n      const observed = snapshotVector(loaded.generation);\n      const current = this.vector(dependencySet);\n      if (sameVector(observed, current)) {\n        delete this.material(materialGuid).error;\n        return ok(loaded.value);\n      }\n      if (attempt === 1) {\n        const error = staleGenerationError(materialGuid, dependencySet, observed, current);\n        this.material(materialGuid).error = error;\n        return err(error);\n      }\n    }\n    const current = this.vector(dependencySet);\n    return err(staleGenerationError(materialGuid, dependencySet, current, current));\n  }\n\n  private trackDependencies(materialGuid: string, dependencies: readonly string[]): void {\n    const state = this.material(materialGuid);\n    for (const dependency of state.dependencies) {\n      const dependents = this.#dependents.get(dependency);\n      dependents?.delete(materialGuid);\n      if (dependents?.size === 0) this.#dependents.delete(dependency);\n    }\n    state.dependencies = dependencies;\n    for (const dependency of dependencies) {\n      const dependents = this.#dependents.get(dependency) ?? new Set<string>();\n      dependents.add(materialGuid);\n      this.#dependents.set(dependency, dependents);\n    }\n  }\n\n  private removeResolved(materialGuid: string, cacheKey: string, promise: Promise<unknown>): void {\n    const state = this.#materials.get(materialGuid);\n    if (state?.resolved.get(cacheKey) !== promise) return;\n    state.resolved.delete(cacheKey);\n    if (\n      state.resolved.size === 0 &&\n      state.dependencies.length === 0 &&\n      state.specializationKey === undefined &&\n      state.error === undefined\n    )\n      this.#materials.delete(materialGuid);\n  }\n\n  private material(materialGuid: string): MaterialGenerationState {\n    let state = this.#materials.get(materialGuid);\n    if (state === undefined) {\n      state = { resolved: new Map(), dependencies: [] };\n      this.#materials.set(materialGuid, state);\n    }\n    return state;\n  }\n\n  private vector(dependencies: readonly string[]): MaterialGenerationVector {\n    return snapshotVector({\n      dependencies: Object.fromEntries(\n        dependencies.map((dependency) => [dependency, this.#generations.get(dependency) ?? 0]),\n      ),\n    });\n  }\n}\n\nfunction snapshotVector(vector: MaterialGenerationVector): MaterialGenerationVector {\n  return Object.freeze({ dependencies: Object.freeze({ ...vector.dependencies }) });\n}\n\nfunction staleGenerationError(\n  material: string,\n  dependencies: readonly string[],\n  observed: MaterialGenerationVector,\n  current: MaterialGenerationVector,\n): MaterialStaleGenerationError {\n  const detail = Object.freeze({\n    code: 'material-specialization-stale-generation' as const,\n    material,\n    dependencies,\n    observed,\n    current,\n  });\n  return Object.freeze(createMaterialError('material-specialization-stale-generation', detail));\n}\n\nfunction isStaleGenerationResult(value: unknown): boolean {\n  if (value === null || typeof value !== 'object') return false;\n  const result = value as { readonly ok?: unknown; readonly error?: unknown };\n  if (result.ok !== false || result.error === null || typeof result.error !== 'object')\n    return false;\n  return (\n    (result.error as { readonly code?: unknown }).code ===\n    'material-specialization-stale-generation'\n  );\n}\n","import { isStandardMaterialRecord, type MaterialCookProgram } from '@forgeax/engine-pack';\nimport type { MaterialSurfaceDeclaration, StandardLayerPlan } from '@forgeax/engine-types';\nimport { deriveStandardLayerPlan } from '@forgeax/engine-types';\nimport type { MaterialLoadError, MaterialReady } from './loader.js';\n\n/** JSON-safe Standard projection carried by the runtime material inspection. */\nexport interface MaterialRuntimeStandardInfo {\n  readonly mode: StandardLayerPlan['mode'];\n  readonly layers: StandardLayerPlan['layers'];\n  readonly passFamily: StandardLayerPlan['passFamily'];\n  readonly layerPlanIdentity: string;\n  readonly passNames: readonly string[];\n}\n\n/**\n * Read-only facts for one GUID after the MaterialReady gate succeeds.\n * `status` is retained for the existing runtime API; `readiness` is the\n * machine-readable first-level field for inspection consumers. This owner\n * does not invent transport provenance or compare transport URLs.\n */\nexport interface MaterialRuntimeInfo {\n  readonly materialGuid: string;\n  readonly readiness: 'ready';\n  readonly publicationGeneration: number;\n  readonly specializationKey: string;\n  readonly artifactDigest: string;\n  readonly layoutIdentity: string;\n  /** Derived program identities and selection conditions; never shader source bytes. */\n  readonly programs: readonly {\n    readonly specializationKey: string;\n    readonly artifactDigest: string;\n    readonly byteLength: number;\n    readonly selections: readonly Omit<MaterialCookProgram['selections'][number], 'abi'>[];\n  }[];\n  readonly dependencies: readonly string[];\n  readonly profile: string;\n  readonly sourceClosure: readonly string[];\n  readonly parameterContract: MaterialReady['record']['parameterContract'];\n  readonly refs: MaterialReady['record']['refs'];\n  readonly receipt: MaterialReady['record']['receipt'];\n  /** Present for the built-in Standard module; absent for custom materials. */\n  readonly standard?: MaterialRuntimeStandardInfo;\n  /** Root-published Surface model, when the material declares one. */\n  readonly surface?: MaterialSurfaceDeclaration;\n  readonly status: 'Ready';\n}\n\nexport interface MaterialRuntimePendingInput {\n  readonly status: 'Pending';\n  readonly guid: string;\n  readonly specializationKey: string;\n  readonly reason?: string;\n}\n\nexport interface MaterialRuntimeLastKnownGoodInput {\n  readonly status: 'LastKnownGood';\n  readonly ready: MaterialReady;\n  readonly failure: MaterialLoadError;\n}\n\nexport interface MaterialRuntimeFailureInfo {\n  readonly materialGuid: string;\n  readonly readiness: 'failed';\n  readonly specializationKey: string;\n  readonly publicationGeneration: number | undefined;\n  readonly preparationFailure: MaterialLoadError['error'];\n  readonly status: 'Error';\n}\n\nexport interface MaterialRuntimePendingInfo {\n  readonly materialGuid: string;\n  readonly readiness: 'pending';\n  readonly specializationKey: string;\n  readonly reason: string | undefined;\n  readonly status: 'Pending';\n}\n\nexport interface MaterialRuntimeLastKnownGoodInfo {\n  readonly materialGuid: string;\n  readonly readiness: 'last-known-good';\n  readonly specializationKey: string;\n  readonly lastKnownGood: MaterialRuntimeInfo;\n  readonly preparationFailure: MaterialLoadError['error'];\n  readonly status: 'LastKnownGood';\n}\n\nexport type MaterialRuntimeInput =\n  | MaterialReady\n  | MaterialLoadError\n  | MaterialRuntimePendingInput\n  | MaterialRuntimeLastKnownGoodInput;\n\nexport type MaterialRuntimeInspection =\n  | MaterialRuntimeInfo\n  | MaterialRuntimeFailureInfo\n  | MaterialRuntimePendingInfo\n  | MaterialRuntimeLastKnownGoodInfo;\n\nfunction inspectReady(ready: MaterialReady): MaterialRuntimeInfo {\n  const standard = isStandardMaterialRecord(ready.record);\n  const standardInfo = !standard\n    ? undefined\n    : (() => {\n        const layerPlan = deriveStandardLayerPlan(\n          ready.record.resolved.parameters,\n          ready.record.resolved.passes,\n        );\n        return Object.freeze({\n          mode: layerPlan.mode,\n          layers: layerPlan.layers,\n          passFamily: layerPlan.passFamily,\n          layerPlanIdentity: layerPlan.identity,\n          passNames: Object.freeze(ready.record.resolved.passes.map((pass) => pass.name)),\n        });\n      })();\n  return {\n    materialGuid: ready.record.materialGuid,\n    readiness: 'ready',\n    publicationGeneration: ready.record.publicationGeneration,\n    specializationKey: ready.record.specializationKey,\n    artifactDigest: ready.record.artifactDigest,\n    layoutIdentity: ready.record.receipt.identity.layoutIdentity,\n    programs: ready.record.programs.map(({ specializationKey, artifact, selections }) => ({\n      specializationKey,\n      artifactDigest: artifact.digest,\n      byteLength: artifact.bytes.byteLength,\n      selections: selections.map(({ pass, context, address, entry }) => ({\n        pass,\n        context: { ...context },\n        ...(address === undefined ? {} : { address }),\n        ...(entry === undefined ? {} : { entry }),\n      })),\n    })),\n    dependencies: [\n      ...ready.record.refs.parent,\n      ...ready.record.refs.textures,\n      ...ready.record.refs.samplers,\n      ...ready.record.refs.modules,\n    ],\n    profile: ready.record.receipt.profile,\n    sourceClosure: ready.record.sourceClosure,\n    parameterContract: ready.record.parameterContract,\n    refs: ready.record.refs,\n    ...(ready.record.resolved.surface === undefined\n      ? {}\n      : { surface: ready.record.resolved.surface }),\n    receipt: ready.record.receipt,\n    ...(standardInfo === undefined ? {} : { standard: standardInfo }),\n    status: 'Ready',\n  };\n}\n\n/**\n * Project only the producer's material lifecycle result into a detached,\n * bounded inspection POD. Renderer code should consume resident bindings and\n * must not copy this producer state into a second readiness ledger.\n */\nexport function inspectMaterialRuntime(ready: MaterialReady): MaterialRuntimeInfo;\nexport function inspectMaterialRuntime(input: MaterialRuntimeInput): MaterialRuntimeInspection;\nexport function inspectMaterialRuntime(input: MaterialRuntimeInput): MaterialRuntimeInspection {\n  if (input.status === 'Ready') return inspectReady(input);\n  if (input.status === 'Error') {\n    return {\n      materialGuid: input.error.detail.guid,\n      readiness: 'failed',\n      specializationKey: input.error.detail.specializationKey,\n      publicationGeneration: input.error.detail.publicationGeneration,\n      preparationFailure: { ...input.error },\n      status: 'Error',\n    };\n  }\n  if (input.status === 'Pending') {\n    return {\n      materialGuid: input.guid,\n      readiness: 'pending',\n      specializationKey: input.specializationKey,\n      reason: input.reason,\n      status: 'Pending',\n    };\n  }\n  const lastKnownGood = inspectReady(input.ready);\n  return {\n    materialGuid: input.ready.record.materialGuid,\n    readiness: 'last-known-good',\n    specializationKey: input.ready.record.specializationKey,\n    lastKnownGood,\n    preparationFailure: { ...input.failure.error },\n    status: 'LastKnownGood',\n  };\n}\n","// @forgeax/engine-assets-runtime - mipmap-generator.ts (T-M3-04).\n//\n// Independent-file home of the runtime mipmap auto-generation utility\n// (plan-strategy section 2.6 D Open Q-5 selection (a)). Purposefully lives\n// outside `asset-registry.ts` so the asset-registry stays single-purpose\n// (charter proposition 5 producer / consumer split; architecture-principles\n// pipeline isolation).\n//\n// Shader-module DI boundary (bug-20260518 D-1): the per-device pipeline\n// cache builds its single ShaderModule via an injected\n// `MipmapShaderModuleFactory`, NOT via `device.createShaderModule` -- the\n// post-fix-f3 `RhiDevice` surface has no synchronous `createShaderModule`\n// member, and the runtime mipmap utility must NOT reverse-import the\n// rhi-webgpu shim package (charter F1 layering). The factory is wired\n// once at `createRenderer.ts` from `pack.createShaderModule` and threaded\n// through `AssetRegistry.configureGpuDevice` -> `generateMipmaps` ->\n// `getOrCreateMipmapPipeline` -> `ensureDeviceCache`.\n//\n// SSOT three-source convergence (research F-1 + F-2):\n//   - webgpufundamentals importing-textures-mipmaps  (formula + main loop)\n//   - toji web-texture-tool webgpu-mipmap-generator  (oversized triangle WGSL)\n//   - greggman webgpu-utils generate-mipmap          (WeakMap<GPUDevice> cache)\n//\n// Public surface (charter F2 minimal):\n//   - numMipLevels({ width, height })                    -> number      (formula SSOT)\n//   - getOrCreateMipmapPipeline(device, format)          -> Result      (cache lookup; per-format)\n//   - mipmapCacheSize(device)                            -> number      (introspection)\n//   - generateMipmaps(device, texture, descriptor)       -> Result<void>(per-mip render-pass blit-loop)\n//\n// Per-device cache structure (greggman SSOT):\n//   WeakMap<MipmapDevice, MipmapPipelineCache>\n//     where MipmapPipelineCache = {\n//       sampler:  Sampler,                    // shared linear / linear / linear sampler (F-5)\n//       module:   ShaderModule,               // shared oversized-triangle vertex + sampling fragment WGSL\n//       layout:   BindGroupLayout,            // shared sampler @binding(0) + texture_2d<f32> @binding(1)\n//       pipelines: Map<GPUTextureFormat, RenderPipeline>  // per-format pipeline (F-2 cache key)\n//     }\n// Per-device isolation prevents pipeline leak across `createRenderer` calls\n// (charter P5 consistent abstraction; greggman 36-44 anchor).\n//\n// Why this layout (not closure / not class):\n//   - `getOrCreateMipmapPipeline` is module-level for test surface (T-M3-01\n//     directly imports it; cache reference equality assertions need stable\n//     identity across calls).\n//   - `numMipLevels` is pure (no device argument); the WeakMap lookup only\n//     happens at pipeline-create time.\n\nimport {\n  type CommandBuffer,\n  err,\n  ok,\n  type Result,\n  type RhiCommandEncoder,\n  RhiError,\n  type RhiRenderPassEncoder,\n} from '@forgeax/engine-rhi';\n\n/**\n * Subset of `RhiDevice` consumed by the mipmap utility (charter F2: only\n * the methods the algorithm actually invokes; the dawn integration tests\n * pass a real `RhiDevice` and the unit cache tests pass a hand-rolled stub).\n *\n * Four entry-points (all synchronous Result):\n *   - createSampler       (default linear / linear / linear)\n *   - createBindGroupLayout\n *   - createPipelineLayout\n *   - createRenderPipeline (per-format pipeline cache miss)\n *\n * Shader module is NOT an entry-point here; it is supplied by an injected\n * `MipmapShaderModuleFactory` (bug-20260518 D-1) so the utility does not\n * reach into the rhi-webgpu shim package from the runtime layer.\n *\n * Plus `createCommandEncoder` + `queue.submit` are added once the upload\n * call-site (T-M3-05) wires generateMipmaps in; the cache-only public hooks\n * exercised by T-M3-01 do not need them, so they live behind an extended\n * MipmapDeviceForBlit alias.\n */\nexport type MipmapDevice = {\n  // biome-ignore lint/suspicious/noExplicitAny: shim accepts any descriptor\n  createSampler(desc?: any): Result<any, any>;\n  // biome-ignore lint/suspicious/noExplicitAny: shim accepts any descriptor\n  createBindGroupLayout(desc: any): Result<any, any>;\n  // biome-ignore lint/suspicious/noExplicitAny: shim accepts any descriptor\n  createPipelineLayout(desc: any): Result<any, any>;\n  // biome-ignore lint/suspicious/noExplicitAny: shim accepts any descriptor\n  createRenderPipeline(desc: any): Result<any, any>;\n};\n\n/**\n * Async shader-module factory injected through the call-chain\n * `createRenderer.ts` -> `AssetRegistry.configureGpuDevice` ->\n * `generateMipmaps` -> `getOrCreateMipmapPipeline` -> `ensureDeviceCache`\n * (bug-20260518 D-1 / D-4).\n *\n * Signature mirrors the top-level async `createShaderModule(device, desc)`\n * exposed by the rhi-webgpu shim (and the rhi-wgpu shim) so the\n * call-site in createRenderer can pass `pack.createShaderModule` directly\n * without a structural cast. The opaque module value is typed `unknown`\n * here -- callers do not introspect it; they hand the value back to\n * `createRenderPipeline` descriptors via the cached `MipmapPipelineCache`.\n */\nexport type MipmapShaderModuleFactory = (\n  device: MipmapDevice,\n  desc: { code: string; label?: string },\n) => Promise<Result<unknown, RhiError>>;\n\n/**\n * Per-device pipeline cache structure (research F-2 SSOT).\n * Held under a module-private `WeakMap<MipmapDevice, MipmapPipelineCache>`.\n */\ninterface MipmapPipelineCache {\n  // biome-ignore lint/suspicious/noExplicitAny: cached opaque GPU sampler\n  readonly sampler: any;\n  // biome-ignore lint/suspicious/noExplicitAny: cached opaque GPU shader module\n  readonly module: any;\n  // biome-ignore lint/suspicious/noExplicitAny: cached opaque GPU bind-group layout\n  readonly layout: any;\n  // biome-ignore lint/suspicious/noExplicitAny: per-format render pipeline cache\n  readonly pipelines: Map<GPUTextureFormat, any>;\n}\n\n// Module-private cache (greggman 36-44 SSOT). WeakMap so that destroying a\n// device naturally clears its cache (no manual cleanup hook needed).\nconst deviceCache: WeakMap<MipmapDevice, MipmapPipelineCache> = new WeakMap();\n\n/**\n * Oversized-triangle WGSL (toji + greggman convergent template).\n *\n * Vertex stage emits a single triangle covering the entire NDC, and texCoord\n * is computed from clip-space position via `pos * vec2(0.5, -0.5) +\n * vec2(0.5)` (NDC -> UV with Y-flip in one fused MAD; saves a 6-vertex quad).\n *\n * Fragment stage samples the bound `texture_2d<f32>` with the linear /\n * linear / linear sampler -- bilinear when the source mip is read by the\n * destination mip, automatic sRGB decode / encode happens in the spec when\n * source AND destination views are the SAME `*-srgb` format (research F-3).\n */\nconst MIPMAP_WGSL = `\nstruct VsOut {\n  @builtin(position) clip : vec4<f32>,\n  @location(0)       uv   : vec2<f32>,\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vid : u32) -> VsOut {\n  // 3 vertices forming an oversized triangle: (-1,-1), (-1,3), (3,-1)\n  var positions = array<vec2<f32>, 3>(\n    vec2<f32>(-1.0, -1.0),\n    vec2<f32>(-1.0,  3.0),\n    vec2<f32>( 3.0, -1.0),\n  );\n  let pos = positions[vid];\n  var out : VsOut;\n  out.clip = vec4<f32>(pos, 0.0, 1.0);\n  // NDC -> UV with Y-flip fused into a single MAD.\n  out.uv = pos * vec2<f32>(0.5, -0.5) + vec2<f32>(0.5);\n  return out;\n}\n\n@group(0) @binding(0) var src_sampler : sampler;\n@group(0) @binding(1) var src_texture : texture_2d<f32>;\n\n@fragment\nfn fs_main(in : VsOut) -> @location(0) vec4<f32> {\n  return textureSample(src_texture, src_sampler, in.uv);\n}\n`;\n\n/**\n * Compute mip-level count for a 2D texture (research F-1 SSOT formula).\n *\n * Spec-anchor: WebGPU §3.6 texture-creation says `mipLevelCount` defaults\n * to 1; the runtime utility opts AI users into a full chain via\n * `floor(log2(max(width, height))) + 1` -- the same formula greggman /\n * toji / webgpufundamentals all converge on.\n *\n * @example\n *   numMipLevels({ width: 256, height: 256 }) // 9\n *   numMipLevels({ width: 1, height: 1 })     // 1\n */\nexport function numMipLevels(size: { width: number; height: number }): number {\n  const max = Math.max(size.width, size.height);\n  if (max <= 1) return 1;\n  return Math.floor(Math.log2(max)) + 1;\n}\n\n/**\n * Number of cached pipelines for the device (introspection hook used by\n * T-M3-01 (c) cache-hit / (d) per-device-isolation tests; charter P3\n * explicit failure: a cache size of 0 on a fresh device is a witnessed\n * pre-condition rather than a swept-under hint).\n */\nexport function mipmapCacheSize(device: MipmapDevice): number {\n  const cache = deviceCache.get(device);\n  return cache?.pipelines.size ?? 0;\n}\n\n/**\n * Get the existing per-format render pipeline or build a fresh one.\n *\n * Per-device WeakMap + per-format `Map<GPUTextureFormat, RenderPipeline>`\n * (greggman 36-44 + 119-122). The shared sampler / shader-module /\n * bind-group-layout are constructed lazily on the first cache miss for a\n * given device and reused across all formats on that device.\n */\nexport async function getOrCreateMipmapPipeline(\n  device: MipmapDevice,\n  format: GPUTextureFormat,\n  asyncCreateShaderModule: MipmapShaderModuleFactory,\n  // biome-ignore lint/suspicious/noExplicitAny: returns opaque GPU pipeline\n): Promise<Result<any, unknown>> {\n  const cache = await ensureDeviceCache(device, asyncCreateShaderModule);\n  if (!cache.ok) return cache;\n  const existing = cache.value.pipelines.get(format);\n  if (existing !== undefined) {\n    return ok(existing);\n  }\n  const layoutRes = device.createPipelineLayout({\n    label: 'mipmap-pl',\n    bindGroupLayouts: [cache.value.layout],\n  });\n  if (!layoutRes.ok) return layoutRes;\n  const pipelineRes = device.createRenderPipeline({\n    label: `mipmap-pipeline-${format}`,\n    layout: layoutRes.value,\n    vertex: { module: cache.value.module, entryPoint: 'vs_main' },\n    fragment: {\n      module: cache.value.module,\n      entryPoint: 'fs_main',\n      targets: [{ format }],\n    },\n    primitive: { topology: 'triangle-list' },\n  });\n  if (!pipelineRes.ok) return pipelineRes;\n  cache.value.pipelines.set(format, pipelineRes.value);\n  return pipelineRes;\n}\n\nasync function ensureDeviceCache(\n  device: MipmapDevice,\n  asyncCreateShaderModule: MipmapShaderModuleFactory,\n): Promise<Result<MipmapPipelineCache, RhiError>> {\n  const existing = deviceCache.get(device);\n  if (existing !== undefined) return ok(existing);\n\n  const moduleRes = await asyncCreateShaderModule(device, {\n    code: MIPMAP_WGSL,\n    label: 'mipmap-wgsl',\n  });\n  if (!moduleRes.ok) return moduleRes;\n\n  const samplerRes = device.createSampler({\n    magFilter: 'linear',\n    minFilter: 'linear',\n    mipmapFilter: 'linear',\n  });\n  if (!samplerRes.ok) return samplerRes;\n\n  // GPUShaderStage.FRAGMENT = 0x2 spec constant; embedded literally to keep\n  // the utility math-free (charter F2 minimal surface; spec value is stable).\n  const FRAGMENT_STAGE = 0x2;\n  const layoutRes = device.createBindGroupLayout({\n    label: 'mipmap-bgl',\n    entries: [\n      { binding: 0, visibility: FRAGMENT_STAGE, sampler: { type: 'filtering' } },\n      {\n        binding: 1,\n        visibility: FRAGMENT_STAGE,\n        texture: { sampleType: 'float', viewDimension: '2d' },\n      },\n    ],\n  });\n  if (!layoutRes.ok) return layoutRes;\n\n  const cache: MipmapPipelineCache = {\n    sampler: samplerRes.value,\n    module: moduleRes.value,\n    layout: layoutRes.value,\n    pipelines: new Map(),\n  };\n  deviceCache.set(device, cache);\n  return ok(cache);\n}\n\n/**\n * Extended device shape used by `generateMipmaps` (call-site T-M3-05).\n * Adds command-encoder + bind-group + texture-view + queue surfaces beyond\n * the cache-only `MipmapDevice` so the pipeline-cache unit tests still\n * compile against the smaller surface.\n */\nexport type MipmapBlitDevice = MipmapDevice & {\n  // biome-ignore lint/suspicious/noExplicitAny: shim accepts any descriptor\n  createTexture(desc: any): Result<any, any>;\n  // biome-ignore lint/suspicious/noExplicitAny: shim accepts any descriptor\n  createBindGroup(desc: any): Result<any, any>;\n  // biome-ignore lint/suspicious/noExplicitAny: shim accepts any descriptor\n  createTextureView(texture: any, desc: any): Result<any, any>;\n  // biome-ignore lint/suspicious/noExplicitAny: shim accepts any descriptor\n  createCommandEncoder(desc?: any): Result<any, any>;\n  readonly queue: {\n    // biome-ignore lint/suspicious/noExplicitAny: shim accepts any descriptor\n    submit(buffers: ReadonlyArray<any>): Result<void, any>;\n  };\n};\n\nfunction encodeMipmapBlit(\n  device: MipmapBlitDevice,\n  encoder: RhiCommandEncoder,\n  // biome-ignore lint/suspicious/noExplicitAny: opaque GPU texture handle\n  texture: any,\n  levels: number,\n  // biome-ignore lint/suspicious/noExplicitAny: opaque GPU pipeline handle\n  pipeline: any,\n  cache: MipmapPipelineCache,\n): Result<void, RhiError> {\n  for (let i = 1; i < levels; i++) {\n    const srcViewRes = device.createTextureView(texture, {\n      baseMipLevel: i - 1,\n      mipLevelCount: 1,\n      dimension: '2d',\n    });\n    if (!srcViewRes.ok) return srcViewRes as Result<void, RhiError>;\n\n    const dstViewRes = device.createTextureView(texture, {\n      baseMipLevel: i,\n      mipLevelCount: 1,\n      dimension: '2d',\n    });\n    if (!dstViewRes.ok) return dstViewRes as Result<void, RhiError>;\n\n    const bindGroupRes = device.createBindGroup({\n      label: `mipmap-bg-${i}`,\n      layout: cache.layout,\n      entries: [\n        { binding: 0, resource: { kind: 'sampler', value: cache.sampler } },\n        { binding: 1, resource: { kind: 'textureView', value: srcViewRes.value } },\n      ],\n    });\n    if (!bindGroupRes.ok) return bindGroupRes as Result<void, RhiError>;\n\n    const pass = encoder.beginRenderPass({\n      label: `mipmap-pass-${i}`,\n      colorAttachments: [\n        {\n          view: dstViewRes.value,\n          clearValue: { r: 0, g: 0, b: 0, a: 1 },\n          loadOp: 'clear',\n          storeOp: 'store',\n        },\n      ],\n    });\n    pass.setPipeline(pipeline);\n    pass.setBindGroup(0, bindGroupRes.value);\n    pass.draw(3, 1, 0, 0);\n    pass.end();\n  }\n\n  return ok(undefined);\n}\n\n/**\n * A caller-owned mip transaction. Preparation records render passes into one\n * encoder but never finishes or submits it; the recovery owner decides when\n * the setup command buffer crosses its candidate generation boundary.\n */\nexport interface MipmapEncoderWork {\n  readonly finish: () => Result<CommandBuffer | undefined, RhiError>;\n  /** Close unsubmitted encoder work when its candidate transaction aborts. */\n  readonly discard: () => void;\n}\n\n/**\n * Prepare a prewarmed mip chain without creating a hidden submission.\n * `finish()` is the explicit transaction boundary and is intentionally\n * separate from `queue.submit()` so recovery can guard candidate ownership.\n */\nexport function prepareMipmaps(\n  device: MipmapBlitDevice,\n  // biome-ignore lint/suspicious/noExplicitAny: opaque GPU texture handle\n  texture: any,\n  descriptor: {\n    readonly format: GPUTextureFormat;\n    readonly width: number;\n    readonly height: number;\n    readonly levels?: number;\n  },\n): Result<MipmapEncoderWork, RhiError> {\n  const levels = descriptor.levels ?? numMipLevels(descriptor);\n  if (levels <= 1) return ok({ finish: () => ok(undefined), discard: () => undefined });\n\n  const cache = deviceCache.get(device);\n  if (cache === undefined) {\n    return err(\n      new RhiError({\n        code: 'rhi-not-available',\n        expected: 'mipmap pipeline cache prewarmed for this device before prepareMipmaps',\n        hint: 'call prewarmMipmapPipeline(device, formats) before preparing recovery mip work',\n      }),\n    );\n  }\n  const pipeline = cache.pipelines.get(descriptor.format);\n  if (pipeline === undefined) {\n    return err(\n      new RhiError({\n        code: 'rhi-not-available',\n        expected: `mipmap pipeline for format ${descriptor.format} prewarmed`,\n        hint: `format ${descriptor.format} was not prewarmed; add it to the prewarmMipmapPipeline format list`,\n      }),\n    );\n  }\n  const encoderRes = device.createCommandEncoder({ label: 'mipmap-recovery-setup-encoder' });\n  if (!encoderRes.ok) return encoderRes as Result<MipmapEncoderWork, RhiError>;\n  const encoded = encodeMipmapBlit(device, encoderRes.value, texture, levels, pipeline, cache);\n  if (!encoded.ok) {\n    try {\n      encoderRes.value.finish();\n    } catch {\n      // The preparation error is authoritative; the encoder has no separate\n      // abort operation, so best-effort close is the only cleanup boundary.\n    }\n    return encoded;\n  }\n  let closed = false;\n  return ok({\n    finish: () => {\n      if (closed) {\n        return err(\n          new RhiError({\n            code: 'webgpu-runtime-error',\n            expected: 'mipmap recovery setup work is finished at most once',\n            hint: 'discard the candidate transaction after finish and do not reuse its encoder',\n          }),\n        );\n      }\n      closed = true;\n      return encoderRes.value.finish();\n    },\n    discard: () => {\n      if (closed) return;\n      closed = true;\n      try {\n        encoderRes.value.finish();\n      } catch {\n        // Candidate cleanup is idempotent and does not submit the discarded\n        // command buffer.\n      }\n    },\n  });\n}\n\n/**\n * Per-mip render-pass blit-loop (research F-1 SSOT main template).\n *\n * For mip levels 1..levels-1: source view = previous mip {baseMipLevel:i-1,\n * mipLevelCount:1}; destination view = current mip {baseMipLevel:i,\n * mipLevelCount:1, usage: RENDER_ATTACHMENT}; oversized-triangle pipeline\n * draws 3 vertices, fragment shader samples source via linear sampler.\n *\n * Spec sRGB correctness (F-3): when format is `*-srgb`, both views inherit\n * the sRGB encoding so hardware decode -> bilinear in linear -> encode back\n * happens automatically; no special-casing required.\n *\n * `levels` defaults to `numMipLevels({ width, height })`. AI users that\n * already created the texture with explicit `mipLevelCount` should pass the\n * same value here.\n */\nexport async function generateMipmaps(\n  device: MipmapBlitDevice,\n  // biome-ignore lint/suspicious/noExplicitAny: opaque GPU texture handle\n  texture: any,\n  descriptor: {\n    readonly format: GPUTextureFormat;\n    readonly width: number;\n    readonly height: number;\n    readonly levels?: number;\n  },\n  asyncCreateShaderModule: MipmapShaderModuleFactory,\n): Promise<Result<void, unknown>> {\n  const levels = descriptor.levels ?? numMipLevels(descriptor);\n  if (levels <= 1) return ok(undefined);\n\n  const pipelineRes = await getOrCreateMipmapPipeline(\n    device,\n    descriptor.format,\n    asyncCreateShaderModule,\n  );\n  if (!pipelineRes.ok) return pipelineRes;\n  const prepared = prepareMipmaps(device, texture, descriptor);\n  if (!prepared.ok) return prepared;\n  const finished = prepared.value.finish();\n  if (!finished.ok) return finished;\n  return finished.value === undefined ? ok(undefined) : device.queue.submit([finished.value]);\n}\n\n/**\n * Synchronous sibling of `generateMipmaps` (feat-20260601-gpu-resource-store\n * -extraction D-9). Identical per-mip blit loop, but reads the per-format\n * pipeline + shared sampler / layout from the prewarmed device cache instead\n * of building them. The pipeline MUST already be present (via a prior\n * `getOrCreateMipmapPipeline` / `prewarmMipmapPipeline` async call) -- an\n * un-prewarmed device or format returns a structured `RhiError` rather than\n * awaiting a build, so the synchronous `draw(world)` frame contract is never\n * broken. The async build itself does not affect the written bytes (same\n * shader, same encoder sequence), so prewarm + sync blit reproduces the\n * pre-extraction async `generateMipmaps` byte-for-byte (D-9 sub-contract 5).\n */\nexport function blitMipmapsSync(\n  device: MipmapBlitDevice,\n  // biome-ignore lint/suspicious/noExplicitAny: opaque GPU texture handle\n  texture: any,\n  descriptor: {\n    readonly format: GPUTextureFormat;\n    readonly width: number;\n    readonly height: number;\n    readonly levels?: number;\n  },\n): Result<void, RhiError> {\n  const levels = descriptor.levels ?? numMipLevels(descriptor);\n  if (levels <= 1) return ok(undefined);\n\n  const prepared = prepareMipmaps(device, texture, descriptor);\n  if (!prepared.ok) return prepared;\n  const finished = prepared.value.finish();\n  if (!finished.ok) return finished;\n  return finished.value === undefined ? ok(undefined) : device.queue.submit([finished.value]);\n}\n\n/** Encode one prewarmed mip level into a caller-owned graph render pass. */\nexport function encodeMipmapLevel(\n  device: MipmapBlitDevice,\n  pass: RhiRenderPassEncoder,\n  sourceView: unknown,\n  format: GPUTextureFormat,\n): Result<void, RhiError> {\n  const cache = deviceCache.get(device);\n  if (cache === undefined) {\n    return err(\n      new RhiError({\n        code: 'rhi-not-available',\n        expected: 'mipmap pipeline cache prewarmed for the graph device before encoding',\n        hint: 'call prewarmMipmapPipeline(device, formats) at renderer.ready',\n      }),\n    );\n  }\n  const pipeline = cache.pipelines.get(format);\n  if (pipeline === undefined) {\n    return err(\n      new RhiError({\n        code: 'rhi-not-available',\n        expected: `mipmap pipeline for format ${format} prewarmed`,\n        hint: `format ${format} was not prewarmed; add it to the renderer prewarm list`,\n      }),\n    );\n  }\n  const bindGroup = device.createBindGroup({\n    label: 'mipmap-graph-bind-group',\n    layout: cache.layout,\n    entries: [\n      { binding: 0, resource: { kind: 'sampler', value: cache.sampler } },\n      { binding: 1, resource: { kind: 'textureView', value: sourceView } },\n    ],\n  });\n  if (!bindGroup.ok) return bindGroup;\n  pass.setPipeline(pipeline);\n  pass.setBindGroup(0, bindGroup.value);\n  pass.draw(3, 1, 0, 0);\n  return ok(undefined);\n}\n","import type { Plugin } from '@forgeax/engine-plugin';\nimport type { Loader } from '@forgeax/engine-types';\n\nimport type { AssetRegistry } from './asset-registry';\nimport type { PackLoader } from './loader-registry';\n\ndeclare module '@forgeax/engine-plugin' {\n  interface EngineContextServices {\n    assets?: AssetRegistry;\n  }\n}\n\n/** Provide one renderer-owned asset registry to the current Cordis realm. */\nexport function assetsPlugin(assets: AssetRegistry): Plugin {\n  return {\n    name: 'assets',\n    provide: 'assets',\n    apply(ctx) {\n      ctx.provide('assets', assets);\n    },\n  };\n}\n\n/** Reversibly register one runtime asset loader. */\nexport function assetLoaderPlugin(loader: Loader<unknown>): Plugin {\n  return {\n    name: `asset-loader:${loader.kind}`,\n    inject: ['assets'],\n    apply(ctx) {\n      const assets = ctx.assets;\n      if (assets === undefined) throw new Error('asset loader plugin requires the assets service');\n      ctx.effect(() => assets.loaders.register(loader), `assets/loader:${loader.kind}`);\n    },\n  };\n}\n\n/** Reversibly register one pack loader. */\nexport function packLoaderPlugin(loader: PackLoader): Plugin {\n  return {\n    name: `pack-loader:${loader.kind}`,\n    inject: ['assets'],\n    apply(ctx) {\n      const assets = ctx.assets;\n      if (assets === undefined) throw new Error('pack loader plugin requires the assets service');\n      ctx.effect(() => assets.loaders.registerPackLoader(loader), `assets/pack:${loader.kind}`);\n    },\n  };\n}\n","import type { World } from '@forgeax/engine-ecs';\nimport type { Asset, Handle, Result, TextureAsset } from '@forgeax/engine-types';\nimport { err, ok } from '@forgeax/engine-types';\n\nexport type TilesetRuntimeErrorCode =\n  | 'tileset-atlas-not-found'\n  | 'tileset-atlas-stale'\n  | 'tileset-atlas-kind-mismatch';\n\nexport interface TilesetRuntimeError {\n  readonly code: TilesetRuntimeErrorCode;\n  readonly expected: string;\n  readonly hint: string;\n  readonly detail: {\n    readonly guid: string;\n    readonly actualKind?: string;\n  };\n}\n\nexport interface ResolvedTilesetRuntime {\n  readonly guid: string;\n  readonly payload: TextureAsset;\n  readonly handle: Handle<'TextureAsset', 'shared'>;\n}\n\nexport type TilesetAtlasLookup = Asset | { readonly code: 'stale' } | undefined;\n\n/** Project one durable atlas GUID into the current World at the tilemap owner. */\nexport function resolveTilesetRuntime(\n  world: World,\n  guid: string,\n  lookup: (guid: string) => TilesetAtlasLookup,\n): Result<ResolvedTilesetRuntime, TilesetRuntimeError> {\n  if (guid.length === 0) {\n    return err({\n      code: 'tileset-atlas-not-found',\n      expected: 'a non-empty durable atlas GUID',\n      hint: 'load the atlas payload before extracting the tilemap',\n      detail: { guid },\n    });\n  }\n  const payload = lookup(guid);\n  if (payload === undefined) {\n    return err({\n      code: 'tileset-atlas-not-found',\n      expected: `a loaded texture payload for atlas GUID ${guid}`,\n      hint: 'load or retain the atlas before extracting the tilemap',\n      detail: { guid },\n    });\n  }\n  if ('code' in payload) {\n    return err({\n      code: 'tileset-atlas-stale',\n      expected: `a current texture payload for atlas GUID ${guid}`,\n      hint: 'rebuild the stale atlas projection before extracting the tilemap',\n      detail: { guid },\n    });\n  }\n  if (payload.kind !== 'texture') {\n    return err({\n      code: 'tileset-atlas-kind-mismatch',\n      expected: 'a texture atlas payload',\n      hint: `replace atlas GUID ${guid} with a texture asset`,\n      detail: { guid, actualKind: payload.kind },\n    });\n  }\n  return ok({\n    guid,\n    payload,\n    handle: world.internSharedRef('TextureAsset', payload),\n  });\n}\n","import type { FixedPackPublication } from '@forgeax/engine-pack/runtime';\nimport type { Asset, AssetPublicationOutput, CatalogEntry } from '@forgeax/engine-types';\nimport type { AssetRegistry } from './asset-registry.js';\nimport { captureAssetPublication } from './capture-publication.js';\nimport { type CatalogSource, createCatalogSource } from './catalog-source.js';\nimport { makeLoadContext } from './registry/load-by-guid.js';\nimport { preparePublicationPayloads } from './validate-publication.js';\n\ntype RetainedData = Asset | (() => Promise<Asset>);\ninterface RetainedAsset {\n  readonly row: CatalogEntry;\n  readonly asset: RetainedData;\n  readonly digest: string;\n  readonly generation: number;\n  readonly recipe: {\n    readonly fixed: FixedPackPublication;\n    readonly dependencies: ReadonlyMap<string, RetainedAsset>;\n    readonly outputs: readonly AssetPublicationOutput[];\n    readonly assets: ReadonlyMap<string, RetainedData>;\n  };\n}\n\n/** Retain fixed bytes once; domain data is prepared only when a generator actually reads it. */\nexport async function retainAssetPublications(\n  registry: AssetRegistry,\n  requested: ReadonlyMap<string, string>,\n  entries: readonly CatalogEntry[],\n  source: CatalogSource,\n  fetcher: typeof fetch,\n  options: Omit<NonNullable<Parameters<typeof captureAssetPublication>[4]>, 'registry'> = {},\n): Promise<ReadonlyMap<string, RetainedAsset>> {\n  (await registry.ensurePackIndexCache()).unwrap();\n  const rows = new Map(entries.map((row) => [row.guid.toLowerCase(), row]));\n  const pins = new Map<string, RetainedAsset>();\n  const retain = async (guid: string, ancestors = new Set<string>()): Promise<RetainedAsset> => {\n    const prior = pins.get(guid);\n    if (prior) return prior;\n    options.signal?.throwIfAborted();\n    const row = rows.get(guid);\n    const publication = row?.publication;\n    if (!row || !publication) throw new TypeError(`missing dependency publication ${guid}`);\n    if (ancestors.has(row.packageUrl)) throw new TypeError('cyclic delivered dependency');\n    const fixed = (\n      await captureAssetPublication(row, entries, source, fetcher, { ...options, registry })\n    ).unwrap();\n    const own = new Set(publication.outputs.map((output) => output.guid));\n    const dependencies = new Map<string, RetainedAsset>();\n    const references = new Set([\n      ...publication.outputs.flatMap((output) => output.refs),\n      ...publication.externalEvidence.map((edge) => edge.guid),\n    ]);\n    for (const ref of references) {\n      if (own.has(ref)) continue;\n      const pin = await retain(ref, new Set([...ancestors, row.packageUrl]));\n      const evidence = publication.externalEvidence.find((edge) => edge.guid === ref);\n      if (\n        (evidence?.digest !== undefined && evidence.digest !== pin.digest) ||\n        (evidence?.generation !== undefined && evidence.generation !== pin.generation)\n      )\n        throw new TypeError(`dependency version changed ${ref}`);\n      dependencies.set(ref, pin);\n    }\n    const assets = new Map<string, RetainedData>();\n    const recipe = { fixed, dependencies, assets, outputs: publication.outputs };\n    const bound: typeof fetch = async (input) => {\n      const url = String(input);\n      const path = [...Object.keys(fixed.blobs)].find(\n        (path) => new URL(path, row.packageUrl).href === url,\n      );\n      if (!path) return new Response('', { status: 404 });\n      const bytes = fixed.blobs[path];\n      if (!(bytes instanceof Uint8Array))\n        throw new TypeError('retained transport bytes are not resident');\n      return new Response(bytes);\n    };\n    for (const output of publication.outputs) {\n      const outputRow = rows.get(output.guid);\n      if (!outputRow) throw new TypeError(`missing dependency sibling ${output.guid}`);\n      const current = registry.packIndexCache?.get(output.guid)?.publication;\n      if (\n        current?.generation !== publication.generation ||\n        current.digest !== publication.digest ||\n        current.outputSetDigest !== publication.outputSetDigest\n      )\n        throw new TypeError(`dependency changed during retention ${output.guid}`);\n      let pending: Promise<Asset> | undefined;\n      // Public Ready payloads may have been edited; fixed bytes alone identify this version.\n      const data: RetainedData = () => {\n        if (!pending)\n          pending = (async () => {\n            const result = await preparePublicationPayloads(\n              [outputRow],\n              bound,\n              { catalog: createCatalogSource({ entries }), fetcher: bound },\n              { pack: fixed.pack, dependencies },\n              registry.loaders,\n              {\n                ...makeLoadContext(registry, bound),\n                resolveRef: async (ref) => {\n                  const pin = pins.get(ref) ?? dependencies.get(ref);\n                  if (!pin) throw new TypeError(`missing retained reference ${ref}`);\n                  if (typeof pin.asset === 'function') await pin.asset();\n                  return { ok: true, value: 0 } as const;\n                },\n              },\n            );\n            const asset = result.unwrap().get(output.guid);\n            if (!asset) throw new TypeError(`missing retained payload ${output.guid}`);\n            return asset;\n          })().catch((error) => {\n            pending = undefined;\n            throw error;\n          });\n        return pending;\n      };\n      assets.set(output.guid, data);\n      pins.set(output.guid, {\n        asset: data,\n        row: outputRow,\n        recipe,\n        digest: output.digest,\n        generation: publication.generation,\n      });\n    }\n    const pin = pins.get(guid);\n    if (!pin) throw new TypeError(`missing retained output ${guid}`);\n    return pin;\n  };\n  for (const [guid, digest] of requested) {\n    const pin = await retain(guid);\n    if (pin.digest !== digest) throw new TypeError(`dependency version differs ${guid}`);\n  }\n  return new Map([...pins].filter(([guid]) => requested.has(guid)));\n}\n"]}