@forgeax/engine-runtime 0.1.4 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (606) hide show
  1. package/README.md +65 -83
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/animation-graph-collect-roundtrip.test.d.ts +2 -0
  4. package/dist/__tests__/animation-graph-collect-roundtrip.test.d.ts.map +1 -0
  5. package/dist/__tests__/animation-graph-serialize.unit.test.d.ts +2 -0
  6. package/dist/__tests__/animation-graph-serialize.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/asset-brand-and-name-retirement.test.d.ts +2 -0
  8. package/dist/__tests__/asset-brand-and-name-retirement.test.d.ts.map +1 -0
  9. package/dist/__tests__/asset-error-exhaustive.test-d.d.ts +11 -0
  10. package/dist/__tests__/asset-error-exhaustive.test-d.d.ts.map +1 -0
  11. package/dist/__tests__/asset-registry-guid-reverse.test.d.ts +2 -0
  12. package/dist/__tests__/asset-registry-guid-reverse.test.d.ts.map +1 -0
  13. package/dist/__tests__/asset-registry-hdr-equirect.test.d.ts +2 -0
  14. package/dist/__tests__/asset-registry-hdr-equirect.test.d.ts.map +1 -0
  15. package/dist/__tests__/asset-registry-mesh-pack-payload.dawn.test.d.ts +2 -0
  16. package/dist/__tests__/asset-registry-mesh-pack-payload.dawn.test.d.ts.map +1 -0
  17. package/dist/__tests__/asset-registry-mounts.test.d.ts +2 -0
  18. package/dist/__tests__/asset-registry-mounts.test.d.ts.map +1 -0
  19. package/dist/__tests__/asset-registry.browser.test.d.ts +2 -0
  20. package/dist/__tests__/asset-registry.browser.test.d.ts.map +1 -0
  21. package/dist/__tests__/asset-registry.dawn.test.d.ts +2 -0
  22. package/dist/__tests__/asset-registry.dawn.test.d.ts.map +1 -0
  23. package/dist/__tests__/asset-registry.listCatalog.test.d.ts +2 -0
  24. package/dist/__tests__/asset-registry.listCatalog.test.d.ts.map +1 -0
  25. package/dist/__tests__/asset-registry.mesh-bin.test.d.ts +2 -0
  26. package/dist/__tests__/asset-registry.mesh-bin.test.d.ts.map +1 -0
  27. package/dist/__tests__/asset-registry.pack-cache.test.d.ts +2 -0
  28. package/dist/__tests__/asset-registry.pack-cache.test.d.ts.map +1 -0
  29. package/dist/__tests__/asset-registry.raw-container-failfast.test.d.ts +2 -0
  30. package/dist/__tests__/asset-registry.raw-container-failfast.test.d.ts.map +1 -0
  31. package/dist/__tests__/asset-registry.recursive.spec.d.ts +2 -0
  32. package/dist/__tests__/asset-registry.recursive.spec.d.ts.map +1 -0
  33. package/dist/__tests__/asset-registry.unit.test.d.ts +2 -0
  34. package/dist/__tests__/asset-registry.unit.test.d.ts.map +1 -0
  35. package/dist/__tests__/asset.unit.test.d.ts +2 -0
  36. package/dist/__tests__/asset.unit.test.d.ts.map +1 -0
  37. package/dist/__tests__/audio-load-by-guid.unit.test.d.ts +2 -0
  38. package/dist/__tests__/audio-load-by-guid.unit.test.d.ts.map +1 -0
  39. package/dist/__tests__/backend-selection.integration.test.d.ts +2 -0
  40. package/dist/__tests__/backend-selection.integration.test.d.ts.map +1 -0
  41. package/dist/__tests__/basis-catalog-dispatch.integration.test.d.ts +2 -0
  42. package/dist/__tests__/basis-catalog-dispatch.integration.test.d.ts.map +1 -0
  43. package/dist/__tests__/builtin-asset-registry.unit.test.d.ts +2 -0
  44. package/dist/__tests__/builtin-asset-registry.unit.test.d.ts.map +1 -0
  45. package/dist/__tests__/collect-scene-asset.test.d.ts +1 -2
  46. package/dist/__tests__/collect-scene-asset.test.d.ts.map +1 -1
  47. package/dist/__tests__/collect-scene-mount-collapse.test.d.ts +2 -0
  48. package/dist/__tests__/collect-scene-mount-collapse.test.d.ts.map +1 -0
  49. package/dist/__tests__/collect-transient-roundtrip.test.d.ts +1 -1
  50. package/dist/__tests__/collect-transient-roundtrip.test.d.ts.map +1 -1
  51. package/dist/__tests__/collect-transient-skip.test.d.ts +1 -2
  52. package/dist/__tests__/collect-transient-skip.test.d.ts.map +1 -1
  53. package/dist/__tests__/compressed-texture-physical-extent.integration.test.d.ts +2 -0
  54. package/dist/__tests__/compressed-texture-physical-extent.integration.test.d.ts.map +1 -0
  55. package/dist/__tests__/dawn/mesh-update-dawn.test.d.ts +2 -0
  56. package/dist/__tests__/dawn/mesh-update-dawn.test.d.ts.map +1 -0
  57. package/dist/__tests__/dawn/upload-texture.dawn.test.d.ts +2 -0
  58. package/dist/__tests__/dawn/upload-texture.dawn.test.d.ts.map +1 -0
  59. package/dist/__tests__/draw-published.d.ts +2 -2
  60. package/dist/__tests__/draw-published.d.ts.map +1 -1
  61. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts +2 -0
  62. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts.map +1 -0
  63. package/dist/__tests__/errors.unit.test.d.ts +2 -0
  64. package/dist/__tests__/errors.unit.test.d.ts.map +1 -0
  65. package/dist/__tests__/extract-skin-mismatch.unit.test.d.ts +2 -0
  66. package/dist/__tests__/extract-skin-mismatch.unit.test.d.ts.map +1 -0
  67. package/dist/__tests__/fetch-binary-decompress.test.d.ts +2 -0
  68. package/dist/__tests__/fetch-binary-decompress.test.d.ts.map +1 -0
  69. package/dist/__tests__/four-path-compression.integration.test.d.ts +2 -0
  70. package/dist/__tests__/four-path-compression.integration.test.d.ts.map +1 -0
  71. package/dist/__tests__/fullscreen-feature-host.dawn.test.d.ts +2 -0
  72. package/dist/__tests__/fullscreen-feature-host.dawn.test.d.ts.map +1 -0
  73. package/dist/__tests__/guid-for-asset.unit.test.d.ts +2 -0
  74. package/dist/__tests__/guid-for-asset.unit.test.d.ts.map +1 -0
  75. package/dist/__tests__/handle-migration.test.d.ts +2 -0
  76. package/dist/__tests__/handle-migration.test.d.ts.map +1 -0
  77. package/dist/__tests__/helpers/register-runtime-components.d.ts.map +1 -1
  78. package/dist/__tests__/host-custom-kind-contract.test-d.d.ts +2 -0
  79. package/dist/__tests__/host-custom-kind-contract.test-d.d.ts.map +1 -0
  80. package/dist/__tests__/host-custom-kind-contract.test.d.ts +2 -0
  81. package/dist/__tests__/host-custom-kind-contract.test.d.ts.map +1 -0
  82. package/dist/__tests__/inspect-name.test.d.ts +2 -0
  83. package/dist/__tests__/inspect-name.test.d.ts.map +1 -0
  84. package/dist/__tests__/instantiate-mount-deferred-wiring.test.d.ts +2 -0
  85. package/dist/__tests__/instantiate-mount-deferred-wiring.test.d.ts.map +1 -0
  86. package/dist/__tests__/loadbyguid-payload.unit.test.d.ts +2 -0
  87. package/dist/__tests__/loadbyguid-payload.unit.test.d.ts.map +1 -0
  88. package/dist/__tests__/loadbyguid-texture-intern.unit.test.d.ts +2 -0
  89. package/dist/__tests__/loadbyguid-texture-intern.unit.test.d.ts.map +1 -0
  90. package/dist/__tests__/loader-extract-graceful.test.d.ts +2 -0
  91. package/dist/__tests__/loader-extract-graceful.test.d.ts.map +1 -0
  92. package/dist/__tests__/loader-name-survival.test.d.ts +2 -0
  93. package/dist/__tests__/loader-name-survival.test.d.ts.map +1 -0
  94. package/dist/__tests__/mesh-bin-contract.test.d.ts +2 -0
  95. package/dist/__tests__/mesh-bin-contract.test.d.ts.map +1 -0
  96. package/dist/__tests__/mesh-bin-skin-roundtrip.unit.test.d.ts +2 -0
  97. package/dist/__tests__/mesh-bin-skin-roundtrip.unit.test.d.ts.map +1 -0
  98. package/dist/__tests__/mesh-bin.test.d.ts +2 -0
  99. package/dist/__tests__/mesh-bin.test.d.ts.map +1 -0
  100. package/dist/__tests__/mesh-loader-skin-contract.unit.test.d.ts +2 -0
  101. package/dist/__tests__/mesh-loader-skin-contract.unit.test.d.ts.map +1 -0
  102. package/dist/__tests__/new-kind-refs-contract.test.d.ts +2 -0
  103. package/dist/__tests__/new-kind-refs-contract.test.d.ts.map +1 -0
  104. package/dist/__tests__/package-promotion.test.d.ts +2 -0
  105. package/dist/__tests__/package-promotion.test.d.ts.map +1 -0
  106. package/dist/__tests__/package-rename.test.d.ts +2 -0
  107. package/dist/__tests__/package-rename.test.d.ts.map +1 -0
  108. package/dist/__tests__/recover-error-exhaustive.test-d.d.ts +1 -1
  109. package/dist/__tests__/recover-error-exhaustive.test-d.d.ts.map +1 -1
  110. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +1 -1
  111. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +1 -1
  112. package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts +10 -0
  113. package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts.map +1 -0
  114. package/dist/__tests__/render-system-extract.unit.test.d.ts +2 -0
  115. package/dist/__tests__/render-system-extract.unit.test.d.ts.map +1 -0
  116. package/dist/__tests__/renderer-test-utils.d.ts +10 -0
  117. package/dist/__tests__/renderer-test-utils.d.ts.map +1 -0
  118. package/dist/__tests__/renderer.test-d.d.ts +2 -0
  119. package/dist/__tests__/renderer.test-d.d.ts.map +1 -0
  120. package/dist/__tests__/resolve-asset-handle-err.test.d.ts +2 -0
  121. package/dist/__tests__/resolve-asset-handle-err.test.d.ts.map +1 -0
  122. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts +2 -0
  123. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts.map +1 -0
  124. package/dist/__tests__/resolveName-fallback.test.d.ts +2 -0
  125. package/dist/__tests__/resolveName-fallback.test.d.ts.map +1 -0
  126. package/dist/__tests__/resolveName-null-package.test.d.ts +2 -0
  127. package/dist/__tests__/resolveName-null-package.test.d.ts.map +1 -0
  128. package/dist/__tests__/resolveName-unified-entry.test.d.ts +2 -0
  129. package/dist/__tests__/resolveName-unified-entry.test.d.ts.map +1 -0
  130. package/dist/__tests__/resolveName.test.d.ts +2 -0
  131. package/dist/__tests__/resolveName.test.d.ts.map +1 -0
  132. package/dist/__tests__/roots-to-scene-asset.test.d.ts +1 -1
  133. package/dist/__tests__/roots-to-scene-asset.test.d.ts.map +1 -1
  134. package/dist/__tests__/roundtrip-primitive.test.d.ts +2 -0
  135. package/dist/__tests__/roundtrip-primitive.test.d.ts.map +1 -0
  136. package/dist/__tests__/scene-bare-guid-refs-instantiate.test.d.ts +2 -0
  137. package/dist/__tests__/scene-bare-guid-refs-instantiate.test.d.ts.map +1 -0
  138. package/dist/__tests__/scene-instance-authoring.integration.test.d.ts +2 -0
  139. package/dist/__tests__/scene-instance-authoring.integration.test.d.ts.map +1 -0
  140. package/dist/__tests__/scene-mount-fixed-point.test.d.ts +2 -0
  141. package/dist/__tests__/scene-mount-fixed-point.test.d.ts.map +1 -0
  142. package/dist/__tests__/scene-mount-roundtrip.test.d.ts +2 -0
  143. package/dist/__tests__/scene-mount-roundtrip.test.d.ts.map +1 -0
  144. package/dist/__tests__/scene-mount-wrapper-roundtrip.test.d.ts +2 -0
  145. package/dist/__tests__/scene-mount-wrapper-roundtrip.test.d.ts.map +1 -0
  146. package/dist/__tests__/scene-sugar-instantiate.test.d.ts +2 -0
  147. package/dist/__tests__/scene-sugar-instantiate.test.d.ts.map +1 -0
  148. package/dist/__tests__/serialize-mounts-roundtrip.test.d.ts +2 -0
  149. package/dist/__tests__/serialize-mounts-roundtrip.test.d.ts.map +1 -0
  150. package/dist/__tests__/serialize-scene-asset.test.d.ts +1 -1
  151. package/dist/__tests__/serialize-scene-asset.test.d.ts.map +1 -1
  152. package/dist/__tests__/template-game-default-api-contract.test.d.ts +2 -0
  153. package/dist/__tests__/template-game-default-api-contract.test.d.ts.map +1 -0
  154. package/dist/__tests__/tileset-asset-validate.test.d.ts +2 -0
  155. package/dist/__tests__/tileset-asset-validate.test.d.ts.map +1 -0
  156. package/dist/__tests__/transcode-fallback.unit.test.d.ts +2 -0
  157. package/dist/__tests__/transcode-fallback.unit.test.d.ts.map +1 -0
  158. package/dist/__tests__/transient-runtime-behavior.test.d.ts +2 -0
  159. package/dist/__tests__/transient-runtime-behavior.test.d.ts.map +1 -0
  160. package/dist/__tests__/video-loader-consumption.test.d.ts +2 -0
  161. package/dist/__tests__/video-loader-consumption.test.d.ts.map +1 -0
  162. package/dist/__tests__/video-loader-smoke.dawn.test.d.ts +2 -0
  163. package/dist/__tests__/video-loader-smoke.dawn.test.d.ts.map +1 -0
  164. package/dist/backend-selection.d.ts +13 -0
  165. package/dist/backend-selection.d.ts.map +1 -0
  166. package/dist/collect-scene-asset.d.ts +7 -4
  167. package/dist/collect-scene-asset.d.ts.map +1 -1
  168. package/dist/createRenderer.d.ts +14 -2
  169. package/dist/createRenderer.d.ts.map +1 -1
  170. package/dist/errors/environment.d.ts +1 -1
  171. package/dist/errors/environment.d.ts.map +1 -1
  172. package/dist/index.d.ts +20 -82
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.mjs +107 -108
  175. package/dist/index.mjs.map +1 -1
  176. package/dist/renderer-host.d.ts +9 -0
  177. package/dist/renderer-host.d.ts.map +1 -0
  178. package/dist/renderer-host.mjs +62 -0
  179. package/dist/renderer-host.mjs.map +1 -0
  180. package/dist/scene-instances/index.d.ts +2 -0
  181. package/dist/scene-instances/index.d.ts.map +1 -0
  182. package/dist/scene-utils/mount-override-fold.d.ts +1 -2
  183. package/dist/scene-utils/mount-override-fold.d.ts.map +1 -1
  184. package/dist/systems/sprite-animation-tick.d.ts +1 -1
  185. package/dist/systems/sprite-animation-tick.d.ts.map +1 -1
  186. package/dist/systems/transparent-sort.d.ts +1 -2
  187. package/dist/systems/transparent-sort.d.ts.map +1 -1
  188. package/dist/tilemap-register-validate.d.ts.map +1 -1
  189. package/package.json +34 -33
  190. package/src/__tests__/active-camera.unit.test.ts +19 -9
  191. package/src/__tests__/animation-graph-collect-roundtrip.test.ts +213 -0
  192. package/src/__tests__/animation-graph-serialize.unit.test.ts +171 -0
  193. package/src/__tests__/append-injection.test.ts +1 -1
  194. package/src/__tests__/asset-brand-and-name-retirement.test.ts +102 -0
  195. package/src/__tests__/asset-error-exhaustive.test-d.ts +62 -0
  196. package/src/__tests__/asset-registry-guid-reverse.test.ts +608 -0
  197. package/src/__tests__/asset-registry-hdr-equirect.test.ts +78 -0
  198. package/src/__tests__/asset-registry-mesh-pack-payload.dawn.test.ts +232 -0
  199. package/src/__tests__/asset-registry-mounts.test.ts +806 -0
  200. package/src/__tests__/asset-registry.browser.test.ts +81 -0
  201. package/src/__tests__/asset-registry.dawn.test.ts +94 -0
  202. package/src/__tests__/asset-registry.listCatalog.test.ts +170 -0
  203. package/src/__tests__/asset-registry.mesh-bin.test.ts +316 -0
  204. package/src/__tests__/asset-registry.pack-cache.test.ts +969 -0
  205. package/src/__tests__/asset-registry.raw-container-failfast.test.ts +225 -0
  206. package/src/__tests__/asset-registry.recursive.spec.ts +1397 -0
  207. package/src/__tests__/asset-registry.unit.test.ts +1030 -0
  208. package/src/__tests__/asset.unit.test.ts +7107 -0
  209. package/src/__tests__/audio-load-by-guid.unit.test.ts +126 -0
  210. package/src/__tests__/backend-selection.integration.test.ts +11 -0
  211. package/src/__tests__/basis-catalog-dispatch.integration.test.ts +320 -0
  212. package/src/__tests__/bind-group-cache-keying.test.ts +4 -4
  213. package/src/__tests__/block-upload-math.unit.test.ts +2 -2
  214. package/src/__tests__/builtin-asset-registry.unit.test.ts +112 -0
  215. package/src/__tests__/builtin-shader-register-e2e.test.ts +1 -1
  216. package/src/__tests__/cache-false-eviction.test.ts +2 -1
  217. package/src/__tests__/cache-isolation-matrix.test.ts +2 -1
  218. package/src/__tests__/camera-clear-snapshot-equivalence.unit.test.ts +5 -6
  219. package/src/__tests__/clamp-to-last.e2e.browser.test.ts +29 -19
  220. package/src/__tests__/collect-scene-asset.test.ts +49 -52
  221. package/src/__tests__/collect-scene-mount-collapse.test.ts +391 -0
  222. package/src/__tests__/collect-subtree.unit.test.ts +1 -2
  223. package/src/__tests__/collect-transient-children-absent.test.ts +24 -10
  224. package/src/__tests__/collect-transient-roundtrip.test.ts +44 -20
  225. package/src/__tests__/collect-transient-skip.test.ts +24 -13
  226. package/src/__tests__/components.test-d.ts +1 -6
  227. package/src/__tests__/components.unit.test.ts +20 -19
  228. package/src/__tests__/composite-skybox-cross-world.browser.test.ts +59 -27
  229. package/src/__tests__/compressed-texture-physical-extent.integration.test.ts +139 -0
  230. package/src/__tests__/create-renderer-assembly.integration.test.ts +42 -29
  231. package/src/__tests__/createRenderer-dispose.test.ts +35 -402
  232. package/src/__tests__/createRenderer.browser-no-webgpu.test.ts +25 -30
  233. package/src/__tests__/createRenderer.unit.test.ts +1 -1
  234. package/src/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.ts +27 -63
  235. package/src/__tests__/dawn/ibl-precompute-readback.dawn.test.ts +56 -47
  236. package/src/__tests__/dawn/instances-per-instance-pbr.dawn.test.ts +49 -29
  237. package/src/__tests__/dawn/instances-shadow.dawn.test.ts +26 -15
  238. package/src/__tests__/dawn/instances-uniform-fallback.dawn.test.ts +13 -14
  239. package/src/__tests__/dawn/material-alpha.dawn.test.ts +23 -31
  240. package/src/__tests__/dawn/material-cooked-fixture.dawn.test.ts +24 -9
  241. package/src/__tests__/dawn/{mesh-update.dawn.test.ts → mesh-update-dawn.test.ts} +42 -134
  242. package/src/__tests__/dawn/mipmap-srgb-linear.dawn.test.ts +14 -7
  243. package/src/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.ts +16 -28
  244. package/src/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.ts +23 -39
  245. package/src/__tests__/dawn/upload-texture.dawn.test.ts +198 -0
  246. package/src/__tests__/dawn/user-handle-mesh-render.dawn.test.ts +12 -14
  247. package/src/__tests__/dawn/user-mesh-upload.dawn.test.ts +27 -22
  248. package/src/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.ts +25 -28
  249. package/src/__tests__/dawn/zero-manifest-ready.dawn.test.ts +10 -11
  250. package/src/__tests__/demo-sortscope-migration.unit.test.ts +5 -5
  251. package/src/__tests__/derive-bgl-integration.test.ts +34 -44
  252. package/src/__tests__/derive-render-data-skin.unit.test.ts +1 -1
  253. package/src/__tests__/draw-published.ts +11 -4
  254. package/src/__tests__/dynamic-texture-store.unit.test.ts +190 -0
  255. package/src/__tests__/equirect-bc6h.integration.test.ts +144 -21
  256. package/src/__tests__/errors.unit.test.ts +1227 -0
  257. package/src/__tests__/extract-frames-graceful-degradation.test.ts +3 -7
  258. package/src/__tests__/extract-frames-merge.test.ts +35 -22
  259. package/src/__tests__/extract-record-no-hardcoded-texture-fields.test.ts +5 -16
  260. package/src/__tests__/extract-skin-mismatch.unit.test.ts +322 -0
  261. package/src/__tests__/fetch-binary-decompress.test.ts +356 -0
  262. package/src/__tests__/four-path-compression.integration.test.ts +395 -0
  263. package/src/__tests__/frame-targets-shadow-regression.unit.test.ts +1 -1
  264. package/src/__tests__/fullscreen-feature-host.dawn.test.ts +80 -0
  265. package/src/__tests__/fullscreen-post-bgl-depth.test.ts +4 -2
  266. package/src/__tests__/fullscreen-post-depth-params-arity.test.ts +3 -3
  267. package/src/__tests__/fullscreen-post-process-pass.dawn.test.ts +39 -23
  268. package/src/__tests__/fullscreen-post-process-pass.unit.test.ts +4 -2
  269. package/src/__tests__/fxaa-pixel-diff.dawn.test.ts +28 -17
  270. package/src/__tests__/fxaa-validation-and-resize.dawn.test.ts +29 -18
  271. package/src/__tests__/fxaa-zero-overhead.dawn.test.ts +16 -12
  272. package/src/__tests__/geometry.unit.test.ts +525 -159
  273. package/src/__tests__/glyph-tilemap-worldid.test.ts +1 -1
  274. package/src/__tests__/gpu-resource-cow-survivor.test.ts +6 -4
  275. package/src/__tests__/guid-for-asset.unit.test.ts +102 -0
  276. package/src/__tests__/handle-migration.test.ts +136 -0
  277. package/src/__tests__/helpers/register-runtime-components.ts +4 -2
  278. package/src/__tests__/helpers/register-scene-components.ts +1 -1
  279. package/src/__tests__/host-custom-kind-contract.test-d.ts +47 -0
  280. package/src/__tests__/host-custom-kind-contract.test.ts +578 -0
  281. package/src/__tests__/inspect-name.test.ts +139 -0
  282. package/src/__tests__/instances.test-d.ts +1 -1
  283. package/src/__tests__/instantiate-mount-deferred-wiring.test.ts +112 -0
  284. package/src/__tests__/light-casters-9-light.browser.test.ts +73 -76
  285. package/src/__tests__/light-gpu-byte-neutral.unit.test.ts +7 -10
  286. package/src/__tests__/light-snapshot.test-d.ts +2 -2
  287. package/src/__tests__/lights-vec-negative.unit.test.ts +1 -1
  288. package/src/__tests__/lights.unit.test.ts +31 -511
  289. package/src/__tests__/loadbyguid-payload.unit.test.ts +117 -0
  290. package/src/__tests__/loadbyguid-texture-intern.unit.test.ts +213 -0
  291. package/src/__tests__/loader-extract-graceful.test.ts +146 -0
  292. package/src/__tests__/loader-name-survival.test.ts +213 -0
  293. package/src/__tests__/m3-vec-negative.unit.test.ts +3 -2
  294. package/src/__tests__/material-texture-uv-scale.unit.test.ts +101 -31
  295. package/src/__tests__/materials.unit.test.ts +10 -27
  296. package/src/__tests__/mesh-bin-contract.test.ts +28 -0
  297. package/src/__tests__/mesh-bin-skin-roundtrip.unit.test.ts +149 -0
  298. package/src/__tests__/mesh-bin.test.ts +38 -0
  299. package/src/__tests__/mesh-loader-skin-contract.unit.test.ts +120 -0
  300. package/src/__tests__/mesh-ssbo-grow.unit.test.ts +3 -3
  301. package/src/__tests__/mip-gate.unit.test.ts +1 -1
  302. package/src/__tests__/msaa-sprite-pixel-diff.dawn.test.ts +29 -68
  303. package/src/__tests__/new-kind-refs-contract.test.ts +132 -0
  304. package/src/__tests__/node-shims.d.ts +4 -6
  305. package/src/__tests__/package-promotion.test.ts +88 -0
  306. package/src/__tests__/package-rename.test.ts +103 -0
  307. package/src/__tests__/pass-selector.unit.test.ts +2 -2
  308. package/src/__tests__/pbr-pipeline.unit.test.ts +21 -25
  309. package/src/__tests__/pipeline-builder-msaa.unit.test.ts +6 -9
  310. package/src/__tests__/pipeline-cache-keying.unit.test.ts +6 -9
  311. package/src/__tests__/pipeline-spec.test.ts +16 -177
  312. package/src/__tests__/pipeline.unit.test.ts +154 -1693
  313. package/src/__tests__/point-light-shadow.dawn.test.ts +33 -42
  314. package/src/__tests__/point-light-shadow.unit.test.ts +19 -60
  315. package/src/__tests__/post-process-error-codes.unit.test.ts +4 -1
  316. package/src/__tests__/post-process-params-component.unit.test.ts +1 -1
  317. package/src/__tests__/post-process-params-extract.unit.test.ts +2 -5
  318. package/src/__tests__/postprocess-camera-consistency.test.ts +4 -7
  319. package/src/__tests__/profiler-assembly.integration.test.ts +1 -1
  320. package/src/__tests__/propagate-transforms.dawn.test.ts +12 -11
  321. package/src/__tests__/record-worldid-isolation.test.ts +7 -29
  322. package/src/__tests__/recover-error-exhaustive.test-d.ts +1 -1
  323. package/src/__tests__/render-error-exhaustive.test-d.ts +117 -71
  324. package/src/__tests__/render-feature-assembly.test-d.ts +20 -9
  325. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +8 -6
  326. package/src/__tests__/render-feature-prepared-graphics.browser.test.ts +65 -559
  327. package/src/__tests__/render-feature-prepared-graphics.dawn.test.ts +57 -544
  328. package/src/__tests__/render-feature-prepared-graphics.fixture.ts +104 -0
  329. package/src/__tests__/render-feature-prepared-graphics.integration.test.ts +40 -248
  330. package/src/__tests__/render-feature-prepared-graphics.regression.integration.test.ts +83 -340
  331. package/src/__tests__/render-feature-recover.integration.test.ts +9 -49
  332. package/src/__tests__/render-feature-runtime-surface.test-d.ts +17 -20
  333. package/src/__tests__/render-schema-consumer.integration.test.ts +20 -13
  334. package/src/__tests__/render-schema-owner-boundary.unit.test.ts +2 -6
  335. package/src/__tests__/render-system-cross-world-overlay-queue.test.ts +5 -5
  336. package/src/__tests__/render-system-extract-dispatch-ordering.test.ts +16 -31
  337. package/src/__tests__/render-system-extract.test.ts +36 -51
  338. package/src/__tests__/render-system-extract.unit.test.ts +360 -0
  339. package/src/__tests__/render-system-fold-bucket.unit.test.ts +3 -5
  340. package/src/__tests__/render-system-fold-fallback.unit.test.ts +6 -3
  341. package/src/__tests__/render-system-fold-material.unit.test.ts +3 -5
  342. package/src/__tests__/render-system-fold-metrics.unit.test.ts +5 -5
  343. package/src/__tests__/render-system-fold-modegate.unit.test.ts +6 -6
  344. package/src/__tests__/render-system-fold.dawn.test.ts +7 -5
  345. package/src/__tests__/render-system-mega.test.ts +292 -190
  346. package/src/__tests__/render-system-owner-split-contract.test.ts +10 -32
  347. package/src/__tests__/render-system-record-multi-material-textureview.test.ts +59 -45
  348. package/src/__tests__/render-system-record-per-submesh-transparency.test.ts +23 -29
  349. package/src/__tests__/render-system-record.test.ts +398 -235
  350. package/src/__tests__/render-system-record.unit.test.ts +25 -26
  351. package/src/__tests__/render-system-skin-bg.unit.test.ts +8 -12
  352. package/src/__tests__/renderer-consumer.test-d.ts +16 -3
  353. package/src/__tests__/renderer-health.unit.test.ts +26 -916
  354. package/src/__tests__/renderer-lifecycle.integration.test.ts +19 -6
  355. package/src/__tests__/renderer-recover.unit.test.ts +49 -1069
  356. package/src/__tests__/renderer-result.test-d.ts +19 -9
  357. package/src/__tests__/renderer-surface.unit.test.ts +3 -5
  358. package/src/__tests__/renderer-test-utils.ts +56 -0
  359. package/src/__tests__/renderer.test-d.ts +61 -0
  360. package/src/__tests__/resolve-asset-handle-err.test.ts +111 -0
  361. package/src/__tests__/resolve-asset-handle.unit.test.ts +64 -0
  362. package/src/__tests__/resolve-depth-only-view.test.ts +1 -1
  363. package/src/__tests__/resolveName-fallback.test.ts +64 -0
  364. package/src/__tests__/resolveName-null-package.test.ts +38 -0
  365. package/src/__tests__/resolveName-unified-entry.test.ts +65 -0
  366. package/src/__tests__/resolveName.test.ts +64 -0
  367. package/src/__tests__/rhi-null-command-flow.unit.test.ts +56 -260
  368. package/src/__tests__/rhi-null-renderer-lifecycle.unit.test.ts +41 -169
  369. package/src/__tests__/roots-to-scene-asset.test.ts +199 -93
  370. package/src/__tests__/roundtrip-primitive.test.ts +351 -0
  371. package/src/__tests__/scene-bare-guid-refs-instantiate.test.ts +123 -0
  372. package/src/__tests__/scene-equirect-roundtrip.test.ts +103 -16
  373. package/src/__tests__/scene-instance-authoring.integration.test.ts +8 -0
  374. package/src/__tests__/scene-instance-bridge.integration.test.ts +1 -1
  375. package/src/__tests__/scene-instance-component.test.ts +1 -1
  376. package/src/__tests__/scene-mount-fixed-point.test.ts +257 -0
  377. package/src/__tests__/scene-mount-roundtrip.test.ts +987 -0
  378. package/src/__tests__/scene-mount-wrapper-roundtrip.test.ts +202 -0
  379. package/src/__tests__/scene-sugar-instantiate.test.ts +324 -0
  380. package/src/__tests__/serialize-mounts-roundtrip.test.ts +533 -0
  381. package/src/__tests__/serialize-scene-asset.test.ts +219 -22
  382. package/src/__tests__/shadow-caster-empty-schema.test.ts +3 -3
  383. package/src/__tests__/shadow-csm-cascade-loadop.test.ts +37 -17
  384. package/src/__tests__/shadow-csm-component.test.ts +3 -5
  385. package/src/__tests__/shadow-csm-extract.test.ts +2 -100
  386. package/src/__tests__/shadow-csm-orthoz.test.ts +2 -16
  387. package/src/__tests__/shadow-csm-runtime-vary.dawn.test.ts +19 -14
  388. package/src/__tests__/shadow-csm-tile-consistency.test.ts +32 -26
  389. package/src/__tests__/shadow-csm-ubo.dawn.test.ts +8 -49
  390. package/src/__tests__/shadow-csm-ubo.test.ts +3 -25
  391. package/src/__tests__/shadow-csm-viewport.browser.test.ts +1 -1
  392. package/src/__tests__/shadow-fields-observable.dawn.test.ts +67 -56
  393. package/src/__tests__/shadow-m1.dawn.test.ts +8 -9
  394. package/src/__tests__/shadow-mesh-ssbo-order.test.ts +11 -27
  395. package/src/__tests__/skin-errors.unit.test.ts +1 -1
  396. package/src/__tests__/skin-extract-getarrayview-count.unit.test.ts +7 -5
  397. package/src/__tests__/skylight-lazy-projection.test.ts +36 -15
  398. package/src/__tests__/sparse-tag-scene-roundtrip.test.ts +5 -5
  399. package/src/__tests__/sprite-cullmode-flip.dawn.test.ts +47 -64
  400. package/src/__tests__/sprite-lit-bgl-byte-identical.test.ts +15 -14
  401. package/src/__tests__/sprite-lit-extract-branch.test.ts +1 -1
  402. package/src/__tests__/sprite-lit-pipeline-cache-key.test.ts +1 -1
  403. package/src/__tests__/ssao-bgl.test.ts +16 -9
  404. package/src/__tests__/ssao-buffers.test.ts +2 -2
  405. package/src/__tests__/ssao-data.test.ts +2 -2
  406. package/src/__tests__/ssao-errors.test.ts +1 -1
  407. package/src/__tests__/ssao-passes.test.ts +68 -392
  408. package/src/__tests__/ssao-pipelines.test.ts +1 -1
  409. package/src/__tests__/ssao-uniform-layout.test.ts +8 -6
  410. package/src/__tests__/stencil-outline-pixel.dawn.test.ts +25 -17
  411. package/src/__tests__/swap-chain-format.unit.test.ts +5 -7
  412. package/src/__tests__/systems.unit.test.ts +536 -1326
  413. package/src/__tests__/template-game-default-api-contract.test.ts +362 -0
  414. package/src/__tests__/text.unit.test.ts +56 -33
  415. package/src/__tests__/tilemap-childed-despawn.test.ts +8 -14
  416. package/src/__tests__/tilemap-chunk-extract.overhang-bounds.test.ts +8 -12
  417. package/src/__tests__/tilemap-chunk-extract.propagate-order.test.ts +2 -1
  418. package/src/__tests__/tilemap-chunk-extract.test.ts +13 -17
  419. package/src/__tests__/tilemap-dirty-rebuild.test.ts +7 -11
  420. package/src/__tests__/tilemap-material-cache.test.ts +8 -13
  421. package/src/__tests__/tilemap-multi-atlas.test.ts +12 -32
  422. package/src/__tests__/tilemap-owner-boundary.unit.test.ts +5 -2
  423. package/src/__tests__/tilemap-region-pack.test.ts +8 -12
  424. package/src/__tests__/tilemap-spawn-flip-pivot.test.ts +8 -12
  425. package/src/__tests__/tilemap-uv-inset.test.ts +11 -14
  426. package/src/__tests__/tilemap-validate.test.ts +1 -1
  427. package/src/__tests__/tileset-asset-validate.test.ts +638 -0
  428. package/src/__tests__/transcode-fallback.unit.test.ts +207 -0
  429. package/src/__tests__/transform-hierarchy-pixel-diff.dawn.test.ts +36 -28
  430. package/src/__tests__/transient-fields-collect.test.ts +28 -21
  431. package/src/__tests__/transient-runtime-behavior.test.ts +227 -0
  432. package/src/__tests__/transparent-sort-tilemap-sprite-interleave.test.ts +4 -4
  433. package/src/__tests__/variant-selection.unit.test.ts +1 -1
  434. package/src/__tests__/video-extract-bindgroup.dawn.test.ts +89 -136
  435. package/src/__tests__/video-loader-consumption.test.ts +86 -0
  436. package/src/__tests__/video-loader-smoke.dawn.test.ts +60 -0
  437. package/src/__tests__/view-ubo-layout.browser.test.ts +0 -22
  438. package/src/__tests__/world-entity-key.test.ts +1 -1
  439. package/src/__tests__/world-scene-despawn.test.ts +1 -1
  440. package/src/__tests__/world-scene-instantiate.test.ts +2 -36
  441. package/src/__tests__/world-scene-nested.test.ts +1 -1
  442. package/src/__tests__/world-scene-override.test.ts +1 -1
  443. package/src/backend-selection.ts +69 -0
  444. package/src/collect-scene-asset.ts +35 -23
  445. package/src/components/__tests__/camera.test-d.ts +1 -1
  446. package/src/components/__tests__/camera.test.ts +1 -1
  447. package/src/components/__tests__/sprite-animation.test-d.ts +2 -2
  448. package/src/components/__tests__/tile-layer.test-d.ts +1 -1
  449. package/src/components/__tests__/tile-layer.unit.test.ts +2 -2
  450. package/src/createRenderer.ts +24 -36
  451. package/src/errors/environment.ts +1 -1
  452. package/src/index.ts +51 -113
  453. package/src/renderer-host.ts +33 -0
  454. package/src/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.ts +1 -1
  455. package/src/scene-instances/index.ts +4 -0
  456. package/src/scene-utils/mount-override-fold.ts +3 -7
  457. package/src/systems/__tests__/transparent-sort.bench.ts +3 -3
  458. package/src/systems/sprite-animation-tick.ts +1 -1
  459. package/src/systems/transparent-sort.ts +38 -38
  460. package/src/tilemap-register-validate.ts +4 -4
  461. package/dist/__tests__/bind-group-cache-binding.test.d.ts +0 -2
  462. package/dist/__tests__/bind-group-cache-binding.test.d.ts.map +0 -1
  463. package/dist/__tests__/bind-group-cache-frame.test.d.ts +0 -2
  464. package/dist/__tests__/bind-group-cache-frame.test.d.ts.map +0 -1
  465. package/dist/__tests__/dawn/mesh-update.dawn.test.d.ts +0 -2
  466. package/dist/__tests__/dawn/mesh-update.dawn.test.d.ts.map +0 -1
  467. package/dist/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.d.ts +0 -2
  468. package/dist/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.d.ts.map +0 -1
  469. package/dist/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.d.ts +0 -2
  470. package/dist/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.d.ts.map +0 -1
  471. package/dist/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.d.ts +0 -2
  472. package/dist/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.d.ts.map +0 -1
  473. package/dist/__tests__/dispatch-fullscreen-pass-params.unit.test.d.ts +0 -2
  474. package/dist/__tests__/dispatch-fullscreen-pass-params.unit.test.d.ts.map +0 -1
  475. package/dist/__tests__/fog-producer-manifest.d.ts +0 -131
  476. package/dist/__tests__/fog-producer-manifest.d.ts.map +0 -1
  477. package/dist/__tests__/fog-producer-pixel-probe.d.ts +0 -42
  478. package/dist/__tests__/fog-producer-pixel-probe.d.ts.map +0 -1
  479. package/dist/__tests__/fog-producer-pixel.browser.test.d.ts +0 -2
  480. package/dist/__tests__/fog-producer-pixel.browser.test.d.ts.map +0 -1
  481. package/dist/__tests__/fog-producer-pixel.dawn.test.d.ts +0 -2
  482. package/dist/__tests__/fog-producer-pixel.dawn.test.d.ts.map +0 -1
  483. package/dist/__tests__/fog-producer-real-fixture.d.ts +0 -5
  484. package/dist/__tests__/fog-producer-real-fixture.d.ts.map +0 -1
  485. package/dist/__tests__/fog-producer-vfx-effect.d.ts +0 -3
  486. package/dist/__tests__/fog-producer-vfx-effect.d.ts.map +0 -1
  487. package/dist/__tests__/fog-scene-asset.integration.test.d.ts +0 -2
  488. package/dist/__tests__/fog-scene-asset.integration.test.d.ts.map +0 -1
  489. package/dist/__tests__/gpu-resource-store-cubemap-status.test.d.ts +0 -2
  490. package/dist/__tests__/gpu-resource-store-cubemap-status.test.d.ts.map +0 -1
  491. package/dist/__tests__/gpu-resource.test.d.ts +0 -2
  492. package/dist/__tests__/gpu-resource.test.d.ts.map +0 -1
  493. package/dist/__tests__/hdrp-bgl-slots.browser.test.d.ts +0 -2
  494. package/dist/__tests__/hdrp-bgl-slots.browser.test.d.ts.map +0 -1
  495. package/dist/__tests__/hdrp-buffers.unit.test.d.ts +0 -2
  496. package/dist/__tests__/hdrp-buffers.unit.test.d.ts.map +0 -1
  497. package/dist/__tests__/hdrp-execute-filter.unit.test.d.ts +0 -2
  498. package/dist/__tests__/hdrp-execute-filter.unit.test.d.ts.map +0 -1
  499. package/dist/__tests__/hdrp-gbuffer-attachments.browser.test.d.ts +0 -2
  500. package/dist/__tests__/hdrp-gbuffer-attachments.browser.test.d.ts.map +0 -1
  501. package/dist/__tests__/hdrp-pipeline-asset-type.test-d.d.ts +0 -2
  502. package/dist/__tests__/hdrp-pipeline-asset-type.test-d.d.ts.map +0 -1
  503. package/dist/__tests__/hdrp-ssao-boundary.test.d.ts +0 -2
  504. package/dist/__tests__/hdrp-ssao-boundary.test.d.ts.map +0 -1
  505. package/dist/__tests__/hdrp-ssao-falsification.test.d.ts +0 -2
  506. package/dist/__tests__/hdrp-ssao-falsification.test.d.ts.map +0 -1
  507. package/dist/__tests__/helpers/primitive-world.d.ts +0 -8
  508. package/dist/__tests__/helpers/primitive-world.d.ts.map +0 -1
  509. package/dist/__tests__/helpers/render-asset-port.d.ts +0 -15
  510. package/dist/__tests__/helpers/render-asset-port.d.ts.map +0 -1
  511. package/dist/__tests__/helpers/scene-asset-port.d.ts +0 -9
  512. package/dist/__tests__/helpers/scene-asset-port.d.ts.map +0 -1
  513. package/dist/__tests__/material-derived-coordinates.integration.test.d.ts +0 -2
  514. package/dist/__tests__/material-derived-coordinates.integration.test.d.ts.map +0 -1
  515. package/dist/__tests__/pipeline-layout-selection.test.d.ts +0 -2
  516. package/dist/__tests__/pipeline-layout-selection.test.d.ts.map +0 -1
  517. package/dist/__tests__/post-process-reads-narrowing.test-d.d.ts +0 -2
  518. package/dist/__tests__/post-process-reads-narrowing.test-d.d.ts.map +0 -1
  519. package/dist/__tests__/post-process-register-roundtrip.dawn.test.d.ts +0 -2
  520. package/dist/__tests__/post-process-register-roundtrip.dawn.test.d.ts.map +0 -1
  521. package/dist/__tests__/render-feature-zero-feature.browser.test.d.ts +0 -2
  522. package/dist/__tests__/render-feature-zero-feature.browser.test.d.ts.map +0 -1
  523. package/dist/__tests__/render-pipeline-trivial.dawn.test.d.ts +0 -2
  524. package/dist/__tests__/render-pipeline-trivial.dawn.test.d.ts.map +0 -1
  525. package/dist/__tests__/shadow-csm-caster-membership.test.d.ts +0 -2
  526. package/dist/__tests__/shadow-csm-caster-membership.test.d.ts.map +0 -1
  527. package/dist/__tests__/shadow-csm-pssm.test.d.ts +0 -2
  528. package/dist/__tests__/shadow-csm-pssm.test.d.ts.map +0 -1
  529. package/dist/__tests__/shadow-csm-temporal.browser.test.d.ts +0 -2
  530. package/dist/__tests__/shadow-csm-temporal.browser.test.d.ts.map +0 -1
  531. package/dist/__tests__/shadow-csm-viewport.test.d.ts +0 -2
  532. package/dist/__tests__/shadow-csm-viewport.test.d.ts.map +0 -1
  533. package/dist/__tests__/shadow-m2.dawn.test.d.ts +0 -2
  534. package/dist/__tests__/shadow-m2.dawn.test.d.ts.map +0 -1
  535. package/dist/__tests__/shadow-m3-calibrate-run.dawn.test.d.ts +0 -2
  536. package/dist/__tests__/shadow-m3-calibrate-run.dawn.test.d.ts.map +0 -1
  537. package/dist/__tests__/shadow-m3-calibrate.d.ts +0 -83
  538. package/dist/__tests__/shadow-m3-calibrate.d.ts.map +0 -1
  539. package/dist/__tests__/shadow-m3.dawn.test.d.ts +0 -2
  540. package/dist/__tests__/shadow-m3.dawn.test.d.ts.map +0 -1
  541. package/dist/__tests__/shadow-probe-control-flow.dawn.test.d.ts +0 -2
  542. package/dist/__tests__/shadow-probe-control-flow.dawn.test.d.ts.map +0 -1
  543. package/dist/__tests__/shadow-quality-metrics.dawn.test.d.ts +0 -2
  544. package/dist/__tests__/shadow-quality-metrics.dawn.test.d.ts.map +0 -1
  545. package/dist/__tests__/temporal-off-path.unit.test.d.ts +0 -2
  546. package/dist/__tests__/temporal-off-path.unit.test.d.ts.map +0 -1
  547. package/dist/__tests__/video-cache-regression.unit.test.d.ts +0 -2
  548. package/dist/__tests__/video-cache-regression.unit.test.d.ts.map +0 -1
  549. package/dist/asset-kind.d.ts +0 -4
  550. package/dist/asset-kind.d.ts.map +0 -1
  551. package/dist/errors/sprite-animation.d.ts +0 -3
  552. package/dist/errors/sprite-animation.d.ts.map +0 -1
  553. package/dist/scene-asset-port.d.ts +0 -17
  554. package/dist/scene-asset-port.d.ts.map +0 -1
  555. package/dist/scene-collect-errors.d.ts +0 -22
  556. package/dist/scene-collect-errors.d.ts.map +0 -1
  557. package/dist/shadow-m3-calibrate.d.ts +0 -40
  558. package/dist/shadow-m3-calibrate.d.ts.map +0 -1
  559. package/src/__tests__/bind-group-cache-binding.test.ts +0 -2513
  560. package/src/__tests__/bind-group-cache-frame.test.ts +0 -1511
  561. package/src/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.ts +0 -204
  562. package/src/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.ts +0 -297
  563. package/src/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.ts +0 -271
  564. package/src/__tests__/dispatch-fullscreen-pass-params.unit.test.ts +0 -321
  565. package/src/__tests__/fog-producer-manifest.ts +0 -162
  566. package/src/__tests__/fog-producer-pixel-probe.ts +0 -263
  567. package/src/__tests__/fog-producer-pixel.browser.test.ts +0 -26
  568. package/src/__tests__/fog-producer-pixel.dawn.test.ts +0 -55
  569. package/src/__tests__/fog-producer-real-fixture.ts +0 -805
  570. package/src/__tests__/fog-producer-vfx-effect.ts +0 -272
  571. package/src/__tests__/fog-scene-asset.integration.test.ts +0 -123
  572. package/src/__tests__/gpu-resource-store-cubemap-status.test.ts +0 -207
  573. package/src/__tests__/gpu-resource.test.ts +0 -1206
  574. package/src/__tests__/hdrp-bgl-slots.browser.test.ts +0 -50
  575. package/src/__tests__/hdrp-buffers.unit.test.ts +0 -70
  576. package/src/__tests__/hdrp-execute-filter.unit.test.ts +0 -200
  577. package/src/__tests__/hdrp-gbuffer-attachments.browser.test.ts +0 -64
  578. package/src/__tests__/hdrp-pipeline-asset-type.test-d.ts +0 -139
  579. package/src/__tests__/hdrp-ssao-boundary.test.ts +0 -237
  580. package/src/__tests__/hdrp-ssao-falsification.test.ts +0 -289
  581. package/src/__tests__/helpers/primitive-world.ts +0 -91
  582. package/src/__tests__/helpers/render-asset-port.ts +0 -65
  583. package/src/__tests__/helpers/scene-asset-port.ts +0 -23
  584. package/src/__tests__/material-derived-coordinates.integration.test.ts +0 -100
  585. package/src/__tests__/pipeline-layout-selection.test.ts +0 -298
  586. package/src/__tests__/post-process-reads-narrowing.test-d.ts +0 -52
  587. package/src/__tests__/post-process-register-roundtrip.dawn.test.ts +0 -230
  588. package/src/__tests__/render-feature-zero-feature.browser.test.ts +0 -152
  589. package/src/__tests__/render-pipeline-trivial.dawn.test.ts +0 -525
  590. package/src/__tests__/shadow-csm-caster-membership.test.ts +0 -232
  591. package/src/__tests__/shadow-csm-pssm.test.ts +0 -142
  592. package/src/__tests__/shadow-csm-temporal.browser.test.ts +0 -145
  593. package/src/__tests__/shadow-csm-viewport.test.ts +0 -74
  594. package/src/__tests__/shadow-m2.dawn.test.ts +0 -394
  595. package/src/__tests__/shadow-m3-calibrate-run.dawn.test.ts +0 -248
  596. package/src/__tests__/shadow-m3-calibrate.ts +0 -203
  597. package/src/__tests__/shadow-m3.dawn.test.ts +0 -288
  598. package/src/__tests__/shadow-probe-control-flow.dawn.test.ts +0 -264
  599. package/src/__tests__/shadow-quality-metrics.dawn.test.ts +0 -324
  600. package/src/__tests__/temporal-off-path.unit.test.ts +0 -69
  601. package/src/__tests__/video-cache-regression.unit.test.ts +0 -186
  602. package/src/asset-kind.ts +0 -7
  603. package/src/errors/sprite-animation.ts +0 -5
  604. package/src/scene-asset-port.ts +0 -32
  605. package/src/scene-collect-errors.ts +0 -30
  606. package/src/shadow-m3-calibrate.ts +0 -171
@@ -32,12 +32,12 @@
32
32
  //
33
33
  // Runs via pnpm test:browser against wgpu-wasm/WebGL2 backend.
34
34
 
35
+ import { HANDLE_CUBE } from '@forgeax/engine-assets-runtime';
35
36
  import { World } from '@forgeax/engine-ecs';
36
- import { createPrimitiveMesh } from '@forgeax/engine-geometry';
37
- import { Camera, MeshFilter, MeshRenderer } from '@forgeax/engine-render/internal';
37
+ import { Camera, MeshFilter, MeshRenderer } from '@forgeax/engine-render';
38
38
  import { Transform } from '@forgeax/engine-scene';
39
39
  import { afterEach, describe, expect, it } from 'vitest';
40
- import { Engine } from '../index';
40
+ import { constructRuntimeRendererHost } from '../renderer-host';
41
41
 
42
42
  const W = 256;
43
43
  const H = 256;
@@ -61,12 +61,8 @@ const SUT_ATTRIBUTABLE_RENDER_CODES: ReadonlySet<string> = new Set([
61
61
  'vertex-storage-buffer-unavailable',
62
62
  'mesh-ssbo-capacity-exceeded',
63
63
  'mesh-ssbo-ceiling-reached',
64
- 'hdrp-caps-insufficient',
65
64
  'hdrp-light-budget-exceeded',
66
65
  'hdrp-index-list-overflow',
67
- 'hdrp-deferred-caps-insufficient',
68
- 'gbuffer-rt-alloc-failed',
69
- 'gbuffer-attachment-count-mismatch',
70
66
  ]);
71
67
 
72
68
  // Suppress WebGPU teardown race: chromium fires unhandled OperationError
@@ -83,11 +79,21 @@ if (typeof window !== 'undefined') {
83
79
 
84
80
  const browserReady = typeof navigator !== 'undefined' && navigator.gpu !== undefined;
85
81
 
86
- type EngineRenderer = Awaited<ReturnType<typeof Engine.create>>;
82
+ type EngineRenderer = import('@forgeax/engine-render').Renderer;
87
83
 
88
84
  async function buildRenderer(canvas: HTMLCanvasElement): Promise<EngineRenderer> {
89
- const r = await Engine.create(canvas, {}, { shaderManifestUrl: '/shaders/manifest.json' });
90
- return r;
85
+ const host = await constructRuntimeRendererHost(
86
+ canvas,
87
+ {},
88
+ {
89
+ shaderManifestUrl: '/shaders/manifest.json',
90
+ },
91
+ );
92
+ if (!host.ok) throw host.error;
93
+ if (host.value.renderer.inspect().state !== 'alive') {
94
+ throw new Error('runtime renderer host did not reach alive state');
95
+ }
96
+ return host.value.renderer;
91
97
  }
92
98
 
93
99
  describe('clamp-to-last e2e browser (m3-w6)', () => {
@@ -117,7 +123,7 @@ describe('clamp-to-last e2e browser (m3-w6)', () => {
117
123
  //
118
124
  // Design: built-in PBR falls back to single UV; multi-UV is consumed
119
125
  // only by custom materials (per user verdict in implement-review).
120
- // The unit cube carries exactly 1 UV set, which is the default PBR
126
+ // HANDLE_CUBE carries exactly 1 UV set, which is the default PBR
121
127
  // baseline — PSO build must succeed and draw must not fire
122
128
  // SUT-attributable errors.
123
129
  //
@@ -136,11 +142,8 @@ describe('clamp-to-last e2e browser (m3-w6)', () => {
136
142
  document.body.appendChild(canvas);
137
143
 
138
144
  renderer = await buildRenderer(canvas);
139
- const ready = await renderer.ready;
140
- expect(ready.ok).toBe(true);
141
145
 
142
146
  const world = new World();
143
- const cubeHandle = world.internSharedRef('MeshAsset', createPrimitiveMesh('cube').unwrap());
144
147
  world.spawn(
145
148
  {
146
149
  component: Transform,
@@ -150,7 +153,7 @@ describe('clamp-to-last e2e browser (m3-w6)', () => {
150
153
  scale: [1, 1, 1],
151
154
  },
152
155
  },
153
- { component: MeshFilter, data: { assetHandle: cubeHandle } },
156
+ { component: MeshFilter, data: { assetHandle: HANDLE_CUBE } },
154
157
  { component: MeshRenderer, data: {} },
155
158
  );
156
159
  world.spawn(
@@ -166,14 +169,21 @@ describe('clamp-to-last e2e browser (m3-w6)', () => {
166
169
  );
167
170
 
168
171
  const sutErrors: Array<{ code: string }> = [];
169
- renderer.onError((e) => {
170
- sutErrors.push(e);
172
+ renderer.subscribe((event) => {
173
+ if (event.kind !== 'error') return;
174
+ sutErrors.push(event.error);
171
175
  });
172
176
 
173
- expect(renderer.attachWorld(world).ok).toBe(true);
177
+ const attachment = renderer.attach(world);
178
+ expect(attachment.ok).toBe(true);
179
+ if (!attachment.ok) throw attachment.error;
174
180
  for (let f = 0; f < 10; f++) {
175
181
  world.update(1 / 60).unwrap();
176
- const drawn = renderer.draw([world], { cameraOwner: 0, resourceOwner: 0 });
182
+ const drawn = renderer.draw({
183
+ leases: [attachment.value],
184
+ camera: { lease: attachment.value },
185
+ environment: { lease: attachment.value },
186
+ });
177
187
  expect(drawn.ok).toBe(true);
178
188
  }
179
189
 
@@ -1,3 +1,5 @@
1
+ import * as SceneOwner from '@forgeax/engine-scene';
2
+
1
3
  // w9 — writeback round-trip semantic equivalence tests, migrated to
2
4
  // rootsToSceneAsset (plan-strategy D-1: semantic equivalence not byte
3
5
  // equivalence because full writeback materializes defaults — decisions #8 OOS).
@@ -20,33 +22,32 @@
20
22
  // component-level keys, not entity-level entries.
21
23
  // VERDICT: zero expectations encoded pre-fix bug.
22
24
 
25
+ import { AssetRegistry } from '@forgeax/engine-assets-runtime';
23
26
  import { type Component, defineComponent as defineEcsComponent, World } from '@forgeax/engine-ecs';
24
27
  import { AssetGuid } from '@forgeax/engine-pack/guid';
28
+ import { SceneInstance } from '@forgeax/engine-render';
29
+ import { ChildOf, Children, Transform } from '@forgeax/engine-scene';
25
30
  import type { LocalEntityId, SceneAsset, SceneEntity } from '@forgeax/engine-types';
26
31
  import { describe, expect, it } from 'vitest';
27
- import '@forgeax/engine-render/internal';
28
- import '@forgeax/engine-render/internal';
29
- import * as SceneOwner from '@forgeax/engine-scene';
30
- import { Transform } from '@forgeax/engine-scene';
31
32
  import { rootsToSceneAsset, serializeSceneAssetToPack } from '../collect-scene-asset';
32
- import { registerSceneComponents } from './helpers/register-scene-components';
33
- import { createTestSceneAssetStore } from './helpers/scene-asset-port';
33
+ import { makeMockShaderRegistry } from './helpers/mock-shader-registry';
34
34
 
35
35
  const TEST_COMPONENTS: Component[] = [];
36
- type EcsDefineComponent = typeof defineEcsComponent;
37
-
38
- function defineComponent(
39
- name: Parameters<EcsDefineComponent>[0],
40
- fields: Parameters<EcsDefineComponent>[1],
41
- options?: Parameters<EcsDefineComponent>[2],
42
- ): ReturnType<EcsDefineComponent> {
43
- const component = defineEcsComponent(name, fields, options);
36
+
37
+ function defineComponent(name: string, fields: Record<string, unknown>): Component {
38
+ const component = defineEcsComponent(name, fields as never);
44
39
  TEST_COMPONENTS.push(component);
45
40
  return component;
46
41
  }
47
42
 
48
- function makeRegistry() {
49
- return createTestSceneAssetStore();
43
+ function registerSceneComponents(world: World): void {
44
+ for (const component of [SceneInstance, ChildOf, Children, Transform, ...TEST_COMPONENTS]) {
45
+ world.components.register(component).unwrap();
46
+ }
47
+ }
48
+
49
+ function makeRegistry(): AssetRegistry {
50
+ return new AssetRegistry(makeMockShaderRegistry());
50
51
  }
51
52
 
52
53
  function localId(n: number): LocalEntityId {
@@ -55,7 +56,7 @@ function localId(n: number): LocalEntityId {
55
56
 
56
57
  // biome-ignore lint/suspicious/noExplicitAny: allocSharedRef('SceneAsset') returns branded Handle<"SceneAsset", ...> but instantiateScene expects Handle<string, ...>
57
58
  function registerSceneAsset(world: World, asset: SceneAsset): any {
58
- registerSceneComponents(world, TEST_COMPONENTS);
59
+ registerSceneComponents(world);
59
60
  return world.allocSharedRef('SceneAsset', asset);
60
61
  }
61
62
 
@@ -96,14 +97,14 @@ describe('w9 — round-trip semantic equivalence', () => {
96
97
  const world = new World();
97
98
  const reg = makeRegistry();
98
99
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
99
- if (sg.ok) reg.add(sg.value, asset);
100
+ if (sg.ok) reg.catalog(sg.value, asset);
100
101
  const handle = registerSceneAsset(world, asset);
101
102
  const res = SceneOwner.worldInstantiateScene(world, handle);
102
103
  expect(res.ok).toBe(true);
103
104
  if (!res.ok) return;
104
105
  const root = res.value.root;
105
106
 
106
- const collected = rootsToSceneAsset(reg.port, world, [root]);
107
+ const collected = rootsToSceneAsset(reg, world, [root]);
107
108
  expect(collected.ok).toBe(true);
108
109
  if (!collected.ok) return;
109
110
  const scene = collected.value;
@@ -130,14 +131,14 @@ describe('w9 — round-trip semantic equivalence', () => {
130
131
  const world = new World();
131
132
  const reg = makeRegistry();
132
133
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
133
- if (sg.ok) reg.add(sg.value, asset);
134
+ if (sg.ok) reg.catalog(sg.value, asset);
134
135
  const handle = registerSceneAsset(world, asset);
135
136
  const res = SceneOwner.worldInstantiateScene(world, handle);
136
137
  expect(res.ok).toBe(true);
137
138
  if (!res.ok) return;
138
139
  const root = res.value.root;
139
140
 
140
- const collected = rootsToSceneAsset(reg.port, world, [root]);
141
+ const collected = rootsToSceneAsset(reg, world, [root]);
141
142
  expect(collected.ok).toBe(true);
142
143
  if (!collected.ok) return;
143
144
  const scene = collected.value;
@@ -164,14 +165,14 @@ describe('w9 — round-trip semantic equivalence', () => {
164
165
  const world = new World();
165
166
  const reg = makeRegistry();
166
167
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
167
- if (sg.ok) reg.add(sg.value, asset);
168
+ if (sg.ok) reg.catalog(sg.value, asset);
168
169
  const handle = registerSceneAsset(world, asset);
169
170
  const res = SceneOwner.worldInstantiateScene(world, handle);
170
171
  expect(res.ok).toBe(true);
171
172
  if (!res.ok) return;
172
173
  const root = res.value.root;
173
174
 
174
- const collected = rootsToSceneAsset(reg.port, world, [root]);
175
+ const collected = rootsToSceneAsset(reg, world, [root]);
175
176
  expect(collected.ok).toBe(true);
176
177
  if (!collected.ok) return;
177
178
  const scene = collected.value;
@@ -187,7 +188,7 @@ describe('w9 — round-trip semantic equivalence', () => {
187
188
  const world = new World();
188
189
  const reg = makeRegistry();
189
190
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
190
- if (sg.ok) reg.add(sg.value, asset);
191
+ if (sg.ok) reg.catalog(sg.value, asset);
191
192
  const handle = registerSceneAsset(world, asset);
192
193
  const res = SceneOwner.worldInstantiateScene(world, handle);
193
194
  // Empty scene may still instantiate; root should be present.
@@ -195,7 +196,7 @@ describe('w9 — round-trip semantic equivalence', () => {
195
196
  if (!res.ok) return;
196
197
  const root = res.value.root;
197
198
 
198
- const collected = rootsToSceneAsset(reg.port, world, [root]);
199
+ const collected = rootsToSceneAsset(reg, world, [root]);
199
200
  expect(collected.ok).toBe(true);
200
201
  if (!collected.ok) return;
201
202
  const scene = collected.value;
@@ -217,14 +218,14 @@ describe('w9 — round-trip semantic equivalence', () => {
217
218
  const world = new World();
218
219
  const reg = makeRegistry();
219
220
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
220
- if (sg.ok) reg.add(sg.value, asset);
221
+ if (sg.ok) reg.catalog(sg.value, asset);
221
222
  const handle = registerSceneAsset(world, asset);
222
223
  const res = SceneOwner.worldInstantiateScene(world, handle);
223
224
  expect(res.ok).toBe(true);
224
225
  if (!res.ok) return;
225
226
  const root = res.value.root;
226
227
 
227
- const collected = rootsToSceneAsset(reg.port, world, [root]);
228
+ const collected = rootsToSceneAsset(reg, world, [root]);
228
229
  expect(collected.ok).toBe(true);
229
230
  if (!collected.ok) return;
230
231
  const scene = collected.value;
@@ -256,14 +257,14 @@ describe('w9 — round-trip semantic equivalence', () => {
256
257
  const world = new World();
257
258
  const reg = makeRegistry();
258
259
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
259
- if (sg.ok) reg.add(sg.value, asset);
260
+ if (sg.ok) reg.catalog(sg.value, asset);
260
261
  const handle = registerSceneAsset(world, asset);
261
262
  const res = SceneOwner.worldInstantiateScene(world, handle);
262
263
  expect(res.ok).toBe(true);
263
264
  if (!res.ok) return;
264
265
  const root = res.value.root;
265
266
 
266
- const collected = rootsToSceneAsset(reg.port, world, [root]);
267
+ const collected = rootsToSceneAsset(reg, world, [root]);
267
268
  expect(collected.ok).toBe(true);
268
269
  if (!collected.ok) return;
269
270
  const scene = collected.value;
@@ -288,14 +289,14 @@ describe('w9 — round-trip semantic equivalence', () => {
288
289
  const world = new World();
289
290
  const reg = makeRegistry();
290
291
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
291
- if (sg.ok) reg.add(sg.value, asset);
292
+ if (sg.ok) reg.catalog(sg.value, asset);
292
293
  const handle = registerSceneAsset(world, asset);
293
294
  const res = SceneOwner.worldInstantiateScene(world, handle);
294
295
  expect(res.ok).toBe(true);
295
296
  if (!res.ok) return;
296
297
  const root = res.value.root;
297
298
 
298
- const collected = rootsToSceneAsset(reg.port, world, [root]);
299
+ const collected = rootsToSceneAsset(reg, world, [root]);
299
300
  expect(collected.ok).toBe(true);
300
301
  if (!collected.ok) return;
301
302
  const scene = collected.value;
@@ -317,9 +318,7 @@ describe('w9 — round-trip semantic equivalence', () => {
317
318
  });
318
319
 
319
320
  it('(h) serializeSceneAssetToPack produces valid pack envelope', () => {
320
- const component = defineComponent('Test_Pack', { a: 'f32' });
321
- const world = new World();
322
- world.components.register(component).unwrap();
321
+ defineComponent('Test_Pack', { a: 'f32' });
323
322
 
324
323
  const asset: SceneAsset = {
325
324
  kind: 'scene',
@@ -328,7 +327,7 @@ describe('w9 — round-trip semantic equivalence', () => {
328
327
 
329
328
  const packResult = serializeSceneAssetToPack(
330
329
  asset,
331
- world.components.entries(),
330
+ new Map(),
332
331
  'aaaaaaaa-bbbb-4ccc-dddd-eeeeeeeeeeee',
333
332
  );
334
333
  expect(packResult.ok).toBe(true);
@@ -368,7 +367,7 @@ describe('w9 — round-trip semantic equivalence', () => {
368
367
  });
369
368
 
370
369
  it('(j) full round-trip instantiate->collect->serialize->check', () => {
371
- const component = defineComponent('Test_Full', {
370
+ defineComponent('Test_Full', {
372
371
  posX: 'f32',
373
372
  posY: 'f32',
374
373
  name: 'string',
@@ -383,17 +382,16 @@ describe('w9 — round-trip semantic equivalence', () => {
383
382
  };
384
383
 
385
384
  const world = new World();
386
- world.components.register(component).unwrap();
387
385
  const reg = makeRegistry();
388
386
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
389
- if (sg.ok) reg.add(sg.value, asset);
387
+ if (sg.ok) reg.catalog(sg.value, asset);
390
388
  const handle = registerSceneAsset(world, asset);
391
389
  const res = SceneOwner.worldInstantiateScene(world, handle);
392
390
  expect(res.ok).toBe(true);
393
391
  if (!res.ok) return;
394
392
  const root = res.value.root;
395
393
 
396
- const collected = rootsToSceneAsset(reg.port, world, [root]);
394
+ const collected = rootsToSceneAsset(reg, world, [root]);
397
395
  expect(collected.ok).toBe(true);
398
396
  if (!collected.ok) return;
399
397
  // root + 2 children = 3 entities.
@@ -452,13 +450,13 @@ describe('w1 — field-level transient collect skip (AC-02 + AC-03)', () => {
452
450
  const world = new World();
453
451
  const reg = makeRegistry();
454
452
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
455
- if (sg.ok) reg.add(sg.value, asset);
453
+ if (sg.ok) reg.catalog(sg.value, asset);
456
454
  const handle = registerSceneAsset(world, asset);
457
455
  const res = SceneOwner.worldInstantiateScene(world, handle);
458
456
  expect(res.ok).toBe(true);
459
457
  if (!res.ok) return;
460
458
 
461
- const collected = rootsToSceneAsset(reg.port, world, [res.value.root]);
459
+ const collected = rootsToSceneAsset(reg, world, [res.value.root]);
462
460
  expect(collected.ok).toBe(true);
463
461
  if (!collected.ok) return;
464
462
 
@@ -506,13 +504,13 @@ describe('w1 — field-level transient collect skip (AC-02 + AC-03)', () => {
506
504
  const world = new World();
507
505
  const reg = makeRegistry();
508
506
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
509
- if (sg.ok) reg.add(sg.value, asset);
507
+ if (sg.ok) reg.catalog(sg.value, asset);
510
508
  const handle = registerSceneAsset(world, asset);
511
509
  const res = SceneOwner.worldInstantiateScene(world, handle);
512
510
  expect(res.ok).toBe(true);
513
511
  if (!res.ok) return;
514
512
 
515
- const collected = rootsToSceneAsset(reg.port, world, [res.value.root]);
513
+ const collected = rootsToSceneAsset(reg, world, [res.value.root]);
516
514
  expect(collected.ok).toBe(true);
517
515
  if (!collected.ok) return;
518
516
 
@@ -538,13 +536,13 @@ describe('w1 — field-level transient collect skip (AC-02 + AC-03)', () => {
538
536
  const world = new World();
539
537
  const reg = makeRegistry();
540
538
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
541
- if (sg.ok) reg.add(sg.value, asset);
539
+ if (sg.ok) reg.catalog(sg.value, asset);
542
540
  const handle = registerSceneAsset(world, asset);
543
541
  const res = SceneOwner.worldInstantiateScene(world, handle);
544
542
  expect(res.ok).toBe(true);
545
543
  if (!res.ok) return;
546
544
 
547
- const collected = rootsToSceneAsset(reg.port, world, [res.value.root]);
545
+ const collected = rootsToSceneAsset(reg, world, [res.value.root]);
548
546
  expect(collected.ok).toBe(true);
549
547
  if (!collected.ok) return;
550
548
 
@@ -560,23 +558,22 @@ describe('w1 — field-level transient collect skip (AC-02 + AC-03)', () => {
560
558
  // Pack v2 payload so marker components such as AudioListener survive reopen.
561
559
  describe('marker component scene-pack round-trip', () => {
562
560
  it('preserves an authored empty-schema component', () => {
563
- const component = defineComponent('Test_EmptySchemaMarker', {});
561
+ defineComponent('Test_EmptySchemaMarker', {});
564
562
  const asset: SceneAsset = {
565
563
  kind: 'scene',
566
564
  entities: [{ localId: localId(0), components: { Test_EmptySchemaMarker: {} } }],
567
565
  };
568
566
 
569
567
  const world = new World();
570
- world.components.register(component).unwrap();
571
568
  const reg = makeRegistry();
572
569
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
573
- if (sg.ok) reg.add(sg.value, asset);
570
+ if (sg.ok) reg.catalog(sg.value, asset);
574
571
  const handle = registerSceneAsset(world, asset);
575
572
  const instantiated = SceneOwner.worldInstantiateScene(world, handle);
576
573
  expect(instantiated.ok).toBe(true);
577
574
  if (!instantiated.ok) return;
578
575
 
579
- const collected = rootsToSceneAsset(reg.port, world, [instantiated.value.root]);
576
+ const collected = rootsToSceneAsset(reg, world, [instantiated.value.root]);
580
577
  expect(collected.ok).toBe(true);
581
578
  if (!collected.ok) return;
582
579
  const collectedEntity = findEntityWith(collected.value.entities, 'Test_EmptySchemaMarker');
@@ -615,7 +612,7 @@ describe('w4 -- Transform vec serialization shape (AC-05)', () => {
615
612
  })
616
613
  .unwrap();
617
614
 
618
- const collected = rootsToSceneAsset(reg.port, world, [e]);
615
+ const collected = rootsToSceneAsset(reg, world, [e]);
619
616
  expect(collected.ok).toBe(true);
620
617
  if (!collected.ok) return;
621
618
 
@@ -656,7 +653,7 @@ describe('w4 -- old-shape scene JSON downgrade regression (research Finding 3)',
656
653
  const world = new World();
657
654
  const reg = makeRegistry();
658
655
  const sg = AssetGuid.parse('00000000-0000-0000-0000-000000000000');
659
- if (sg.ok) reg.add(sg.value, asset);
656
+ if (sg.ok) reg.catalog(sg.value, asset);
660
657
  const handle = registerSceneAsset(world, asset);
661
658
  const res = SceneOwner.worldInstantiateScene(world, handle);
662
659
  expect(res.ok).toBe(true);
@@ -672,7 +669,7 @@ describe('w4 -- old-shape scene JSON downgrade regression (research Finding 3)',
672
669
  // The carrying entity degrades to the identity transform (defaults).
673
670
  const tfEntity = findEntityWith(
674
671
  (() => {
675
- const collected = rootsToSceneAsset(reg.port, world, [res.value.root]);
672
+ const collected = rootsToSceneAsset(reg, world, [res.value.root]);
676
673
  if (!collected.ok) throw new Error('collect failed');
677
674
  return collected.value.entities;
678
675
  })(),