@forgeax/engine-runtime 0.1.4 → 0.1.6

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 +49 -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 +3 -3
  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 +19 -81
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.mjs +105 -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 +575 -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 +0 -18
  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 +1203 -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 +16 -500
  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 +14 -21
  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 +81 -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 +60 -558
  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 +59 -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 +43 -261
  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 +12 -11
  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 +64 -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 +28 -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 +47 -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
@@ -0,0 +1,207 @@
1
+ // w31 -- transcode fallback dispatch unit tests (AC-04, section 8 P3).
2
+ //
3
+ // `loadTextureAsset` grows a Basis arm (w34): when a catalog row's
4
+ // `compression` is a `basis-*` member, the loader parses the KTX2 container,
5
+ // picks a transcode target from `ctx.transcodeCaps` via the codec's pure
6
+ // `selectTranscodeTarget`, transcodes, and stamps `TextureAsset.format` with the
7
+ // chosen target. Degradation is silent but OBSERVABLE: with no compression cap
8
+ // the arm lands on `rgba8unorm[-srgb]` and `tex.format` reflects that reality
9
+ // (never a black texture -- section 8 P3).
10
+ //
11
+ // This test keeps the REAL `selectTranscodeTarget` (its priority chain is
12
+ // codec-w8's concern) and mocks only the container-parse + WASM-transcode seams
13
+ // (`parseKtx2` / `transcodeKtx2`), so it validates the LOADER's dispatch:
14
+ // caps + build-time model -> target -> `tex.format`.
15
+ //
16
+ // TDD-RED before w33 (LoadContext.transcodeCaps) + w34 (the Basis arm).
17
+ //
18
+ // Constraints (plan-tasks w31):
19
+ // - no real transcoder WASM execution (mocked transcode echoes the target)
20
+ // - no equirect fallback (w32 owns that)
21
+ // - degradation is not an error (only corrupt payloads raise transcode-failed)
22
+
23
+ import { AssetRegistry } from '@forgeax/engine-assets-runtime';
24
+ import { AssetGuid } from '@forgeax/engine-pack/guid';
25
+ import type { TranscodeCaps } from '@forgeax/engine-types';
26
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
27
+ import { makeMockShaderRegistry } from './helpers/mock-shader-registry';
28
+
29
+ // Mock only the container-parse + WASM-transcode seams; keep the real
30
+ // selectTranscodeTarget / KTX2_IDENTIFIER / block-format table.
31
+ vi.mock('@forgeax/engine-codec', async (importActual) => {
32
+ const actual = await importActual<typeof import('@forgeax/engine-codec')>();
33
+ return {
34
+ ...actual,
35
+ // Basis colorModel echoed via header/dfd; the loader derives the model from
36
+ // the catalog `compression` member, so the parsed shape only needs a valid
37
+ // header + rawBytes.
38
+ parseKtx2: vi.fn(async (bytes: Uint8Array) => ({
39
+ ok: true as const,
40
+ value: {
41
+ header: {
42
+ vkFormat: 0,
43
+ typeSize: 1,
44
+ pixelWidth: 4,
45
+ pixelHeight: 4,
46
+ pixelDepth: 0,
47
+ layerCount: 0,
48
+ faceCount: 1,
49
+ levelCount: 1,
50
+ supercompressionScheme: 1,
51
+ },
52
+ index: {
53
+ dfdByteOffset: 0,
54
+ dfdByteLength: 0,
55
+ kvdByteOffset: 0,
56
+ kvdByteLength: 0,
57
+ sgdByteOffset: 0,
58
+ sgdByteLength: 0,
59
+ },
60
+ levelIndex: [{ byteOffset: 0, byteLength: bytes.length, uncompressedByteLength: 0 }],
61
+ dfd: null,
62
+ kvEntries: [],
63
+ sgd: null,
64
+ rawBytes: bytes,
65
+ },
66
+ })),
67
+ ktx2ColorSpace: vi.fn(() => mockedColorSpace),
68
+ // Echo the requested target so tex.format == the selected transcode target.
69
+ transcodeKtx2: vi.fn(async (_parsed: unknown, targetFormat: GPUTextureFormat) => ({
70
+ ok: true as const,
71
+ value: {
72
+ format: targetFormat,
73
+ width: 4,
74
+ height: 4,
75
+ mips: [{ level: 0, width: 4, height: 4, data: new Uint8Array(16) }],
76
+ },
77
+ })),
78
+ };
79
+ });
80
+
81
+ const GUID_TEX = 'c0000000-0000-4000-a000-000074657874';
82
+ const PACK_INDEX_URL = '/test-transcode-fallback-pack-index.json';
83
+ let mockedColorSpace: 'srgb' | 'linear' = 'srgb';
84
+ // A minimal buffer whose first 12 bytes are the KTX2 identifier so the loader's
85
+ // magic dispatch enters the codec arm.
86
+ const KTX2_MAGIC = new Uint8Array([
87
+ 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a,
88
+ ]);
89
+
90
+ function parseGuid(g: string): AssetGuid {
91
+ const parsed = AssetGuid.parse(g);
92
+ if (!parsed.ok) throw new Error(`bad guid ${g}`);
93
+ return parsed.value;
94
+ }
95
+
96
+ let originalFetch: typeof globalThis.fetch;
97
+
98
+ function wireFetch(
99
+ compression: 'basis-uastc' | 'basis-etc1s',
100
+ colorSpace: 'srgb' | 'linear',
101
+ ): void {
102
+ mockedColorSpace = colorSpace;
103
+ globalThis.fetch = vi.fn().mockImplementation((input: string) => {
104
+ const url = typeof input === 'string' ? input : String(input);
105
+ if (url === PACK_INDEX_URL) {
106
+ return Promise.resolve({
107
+ ok: true,
108
+ json: () =>
109
+ Promise.resolve([
110
+ {
111
+ guid: GUID_TEX,
112
+ packageUrl: `/ddc/${GUID_TEX}.pack.json`,
113
+ kind: 'texture',
114
+ },
115
+ ]),
116
+ });
117
+ }
118
+ if (url === `/ddc/${GUID_TEX}.pack.json`) {
119
+ return Promise.resolve({
120
+ ok: true,
121
+ json: () =>
122
+ Promise.resolve({
123
+ schemaVersion: '2.0.0',
124
+ kind: 'internal-text-package',
125
+ assets: [
126
+ {
127
+ guid: GUID_TEX,
128
+ kind: 'texture',
129
+ payload: { width: 4, height: 4, colorSpace },
130
+ refs: [],
131
+ artifacts: {
132
+ body: {
133
+ path: `${GUID_TEX}.ktx2`,
134
+ mediaType: 'image/ktx2',
135
+ assetCodec: {
136
+ name: 'basis',
137
+ container: 'ktx2',
138
+ profile: compression.slice(6),
139
+ },
140
+ },
141
+ },
142
+ },
143
+ ],
144
+ }),
145
+ });
146
+ }
147
+ return Promise.resolve({ ok: true, arrayBuffer: () => Promise.resolve(KTX2_MAGIC.buffer) });
148
+ }) as typeof globalThis.fetch;
149
+ }
150
+
151
+ async function loadFormat(
152
+ caps: TranscodeCaps,
153
+ compression: 'basis-uastc' | 'basis-etc1s',
154
+ colorSpace: 'srgb' | 'linear' = 'srgb',
155
+ ): Promise<{ ok: boolean; format?: GPUTextureFormat }> {
156
+ wireFetch(compression, colorSpace);
157
+ const reg = new AssetRegistry(makeMockShaderRegistry());
158
+ reg.configurePackIndex(PACK_INDEX_URL);
159
+ reg.setTranscodeCaps(caps);
160
+ const result = await reg.loadByGuid(parseGuid(GUID_TEX));
161
+ if (!result.ok) return { ok: false };
162
+ return { ok: true, format: (result.value as { format: GPUTextureFormat }).format };
163
+ }
164
+
165
+ const NO_CAPS: TranscodeCaps = { bc: false, etc2: false, astc: false };
166
+ const BC_ONLY: TranscodeCaps = { bc: true, etc2: false, astc: false };
167
+
168
+ describe('loadTextureAsset -- transcode fallback dispatch (w31, AC-04)', () => {
169
+ beforeEach(() => {
170
+ originalFetch = globalThis.fetch;
171
+ });
172
+ afterEach(() => {
173
+ globalThis.fetch = originalFetch;
174
+ vi.clearAllMocks();
175
+ });
176
+
177
+ it('no cap -> rgba8unorm-srgb fallback, format field reflects reality', async () => {
178
+ const out = await loadFormat(NO_CAPS, 'basis-uastc', 'srgb');
179
+ expect(out.ok).toBe(true);
180
+ expect(out.format).toBe('rgba8unorm-srgb');
181
+ });
182
+
183
+ it('no cap + linear -> rgba8unorm fallback', async () => {
184
+ const out = await loadFormat(NO_CAPS, 'basis-etc1s', 'linear');
185
+ expect(out.ok).toBe(true);
186
+ expect(out.format).toBe('rgba8unorm');
187
+ });
188
+
189
+ it('bc-only -> BC7 target, format field is the block format', async () => {
190
+ const out = await loadFormat(BC_ONLY, 'basis-uastc', 'srgb');
191
+ expect(out.ok).toBe(true);
192
+ expect(out.format).toBe('bc7-rgba-unorm-srgb');
193
+ });
194
+
195
+ it('bc-only linear -> bc7-rgba-unorm (no srgb suffix)', async () => {
196
+ const out = await loadFormat(BC_ONLY, 'basis-etc1s', 'linear');
197
+ expect(out.ok).toBe(true);
198
+ expect(out.format).toBe('bc7-rgba-unorm');
199
+ });
200
+
201
+ it('every caps path loads without throwing (degradation is normal, not an error)', async () => {
202
+ for (const caps of [NO_CAPS, BC_ONLY, { bc: false, etc2: true, astc: false }] as const) {
203
+ const out = await loadFormat(caps, 'basis-uastc', 'srgb');
204
+ expect(out.ok).toBe(true);
205
+ }
206
+ });
207
+ });
@@ -4,7 +4,7 @@
4
4
  // Dawn integration test mirroring the hello-transform-hierarchy smoke
5
5
  // (apps/hello/transform-hierarchy/scripts/smoke-dawn.mjs): AC-08
6
6
  // parent-moves-child-follows. Single World wires the consume path
7
- // through renderer.attachWorld, spawns a non-identity parent + a ChildOf
7
+ // through renderer.attach, spawns a non-identity parent + a ChildOf
8
8
  // child + a static reference sphere, then proves moving the PARENT moves the
9
9
  // CHILD's rendered world position (the child gets no Transform write of its
10
10
  // own between frames; the only change is the parent's resolved Transform.world
@@ -16,17 +16,12 @@
16
16
  // Follows the fxaa-pixel-diff.dawn.test.ts pattern for canvas mock,
17
17
  // device capture, and pixel readback.
18
18
 
19
+ import { HANDLE_CUBE, HANDLE_SPHERE } from '@forgeax/engine-assets-runtime';
19
20
  import { World } from '@forgeax/engine-ecs';
20
- import { createPrimitiveMesh } from '@forgeax/engine-geometry';
21
- import {
22
- Camera,
23
- DirectionalLight,
24
- MeshFilter,
25
- MeshRenderer,
26
- } from '@forgeax/engine-render/internal';
21
+ import { Camera, DirectionalLight, MeshFilter, MeshRenderer } from '@forgeax/engine-render';
27
22
  import { ChildOf, Transform } from '@forgeax/engine-scene';
28
23
  import { describe, expect, it } from 'vitest';
29
- import { createRenderer } from '../index';
24
+ import { constructRuntimeRendererHost } from '../renderer-host';
30
25
 
31
26
  const WIDTH = 256;
32
27
  const HEIGHT = 256;
@@ -139,30 +134,31 @@ describe('feat-20260531 M3 w13: AC-08 parent moves -> child follows (dawn)', ()
139
134
  removeEventListener() {},
140
135
  } as unknown as HTMLCanvasElement;
141
136
 
142
- let renderer: Awaited<ReturnType<typeof createRenderer>>;
137
+ let host: Awaited<ReturnType<typeof constructRuntimeRendererHost>>;
143
138
  try {
144
- renderer = await createRenderer(mockCanvas, {}, { shaderManifestUrl: ENGINE_MANIFEST_URL });
139
+ host = await constructRuntimeRendererHost(
140
+ mockCanvas,
141
+ {},
142
+ {
143
+ shaderManifestUrl: ENGINE_MANIFEST_URL,
144
+ },
145
+ );
145
146
  } finally {
146
147
  globalThis.navigator.gpu.requestAdapter = originalRequestAdapter;
147
148
  }
148
- expect(renderer.backend).toBe('webgpu');
149
- const ready = await renderer.ready;
150
- expect(ready.ok).toBe(true);
151
- if (!ready.ok) return;
149
+ expect(host.ok).toBe(true);
150
+ if (!host.ok) throw host.error;
151
+ const { renderer } = host.value;
152
+ expect(renderer.inspect().state).toBe('alive');
152
153
  const device = sharedDevice;
153
154
  if (device === undefined) throw new Error('GPUDevice not captured');
154
155
 
155
- const assets = renderer.assets;
156
- if (assets === null) throw new Error('AssetRegistry is null');
157
-
158
- // Single World wires the consume path through renderer.attachWorld so the
156
+ // Single World wires the consume path through renderer.attach so the
159
157
  // child's resolved Transform.world mat4 is derived each frame. feat-20260614
160
158
  // M8: the material is a per-World column handle minted via allocSharedRef
161
159
  // (AssetRegistry has no handle concept).
162
160
  const world = new World();
163
- const cubeHandle = world.internSharedRef('MeshAsset', createPrimitiveMesh('cube').unwrap());
164
- const sphereHandle = world.internSharedRef('MeshAsset', createPrimitiveMesh('sphere').unwrap());
165
- const attachment = renderer.attachWorld(world);
161
+ const attachment = renderer.attach(world);
166
162
  if (!attachment.ok) throw attachment.error;
167
163
 
168
164
  const materialHandle = world.allocSharedRef('MaterialAsset', {
@@ -187,7 +183,7 @@ describe('feat-20260531 M3 w13: AC-08 parent moves -> child follows (dawn)', ()
187
183
  scale: [0.4, 0.4, 0.4],
188
184
  },
189
185
  },
190
- { component: MeshFilter, data: { assetHandle: cubeHandle } },
186
+ { component: MeshFilter, data: { assetHandle: HANDLE_CUBE } },
191
187
  { component: MeshRenderer, data: { materials: [materialHandle] } },
192
188
  )
193
189
  .unwrap();
@@ -199,7 +195,7 @@ describe('feat-20260531 M3 w13: AC-08 parent moves -> child follows (dawn)', ()
199
195
  data: { pos: [0, 2.0, 0], quat: [0, 0, 0, 1], scale: [1, 1, 1] },
200
196
  },
201
197
  { component: ChildOf, data: { parent } },
202
- { component: MeshFilter, data: { assetHandle: cubeHandle } },
198
+ { component: MeshFilter, data: { assetHandle: HANDLE_CUBE } },
203
199
  { component: MeshRenderer, data: { materials: [materialHandle] } },
204
200
  )
205
201
  .unwrap();
@@ -210,7 +206,7 @@ describe('feat-20260531 M3 w13: AC-08 parent moves -> child follows (dawn)', ()
210
206
  component: Transform,
211
207
  data: { pos: [1.4, 0, 0], quat: [0, 0, 0, 1], scale: [0.4, 0.4, 0.4] },
212
208
  },
213
- { component: MeshFilter, data: { assetHandle: sphereHandle } },
209
+ { component: MeshFilter, data: { assetHandle: HANDLE_SPHERE } },
214
210
  { component: MeshRenderer, data: { materials: [materialHandle] } },
215
211
  )
216
212
  .unwrap();
@@ -241,7 +237,11 @@ describe('feat-20260531 M3 w13: AC-08 parent moves -> child follows (dawn)', ()
241
237
 
242
238
  // Frame A: parent at rest. world.update(1 / 60).unwrap() runs propagateTransforms.
243
239
  world.update(1 / 60).unwrap();
244
- const drawA = renderer.draw([world], { cameraOwner: 0, resourceOwner: 0 });
240
+ const drawA = renderer.draw({
241
+ leases: [attachment.value],
242
+ camera: { lease: attachment.value },
243
+ environment: { lease: attachment.value },
244
+ });
245
245
  expect(drawA.ok).toBe(true);
246
246
  await device.queue.onSubmittedWorkDone();
247
247
  if (renderTarget === undefined) throw new Error('renderTarget not configured');
@@ -249,7 +249,11 @@ describe('feat-20260531 M3 w13: AC-08 parent moves -> child follows (dawn)', ()
249
249
 
250
250
  // Stability: a second render of the rest scene must be pixel-stable.
251
251
  world.update(1 / 60).unwrap();
252
- const drawAA = renderer.draw([world], { cameraOwner: 0, resourceOwner: 0 });
252
+ const drawAA = renderer.draw({
253
+ leases: [attachment.value],
254
+ camera: { lease: attachment.value },
255
+ environment: { lease: attachment.value },
256
+ });
253
257
  expect(drawAA.ok).toBe(true);
254
258
  await device.queue.onSubmittedWorkDone();
255
259
  const pixelsAA = await doReadPixels(device, renderTarget);
@@ -259,7 +263,11 @@ describe('feat-20260531 M3 w13: AC-08 parent moves -> child follows (dawn)', ()
259
263
  const setRes = world.set(parent, Transform, { pos: [PARENT_X_MOVED, 0, 0] });
260
264
  expect(setRes.ok).toBe(true);
261
265
  world.update(1 / 60).unwrap();
262
- const drawB = renderer.draw([world], { cameraOwner: 0, resourceOwner: 0 });
266
+ const drawB = renderer.draw({
267
+ leases: [attachment.value],
268
+ camera: { lease: attachment.value },
269
+ environment: { lease: attachment.value },
270
+ });
263
271
  expect(drawB.ok).toBe(true);
264
272
  await device.queue.onSubmittedWorkDone();
265
273
  const pixelsB = await doReadPixels(device, renderTarget);
@@ -1,3 +1,4 @@
1
+ import * as SceneOwner from '@forgeax/engine-scene';
1
2
  // feat-20260709-component-vec-fields-and-field-transient-batch M1 / w1 + w2:
2
3
  // w1: AC-07 transient exclusion tests for SpriteAnimation and VideoPlayer.
3
4
  // w2: AC-08 round-trip + rebuild tests for SpriteAnimation and VideoPlayer.
@@ -10,15 +11,19 @@
10
11
  // - currentFrame + accumDt ← spriteAnimationTickSystem (sprite-animation-tick.ts:255-256)
11
12
  // - VideoPlayer.currentTime: NO ECS rebuild system (D-R2); playback head on host HTMLVideoElement
12
13
 
14
+ import { AssetRegistry } from '@forgeax/engine-assets-runtime';
13
15
  import { type EntityHandle, World } from '@forgeax/engine-ecs';
14
16
  import { VideoPlayer } from '@forgeax/engine-graphics-extras';
15
17
  import { SpriteAnimation } from '@forgeax/engine-render/authoring';
16
- import * as SceneOwner from '@forgeax/engine-scene';
17
18
  import type { SceneEntity } from '@forgeax/engine-types';
18
19
  import { describe, expect, it } from 'vitest';
19
20
  import { rootsToSceneAsset } from '../collect-scene-asset';
20
- import { registerSceneComponents } from './helpers/register-scene-components';
21
- import { createTestSceneAssetStore } from './helpers/scene-asset-port';
21
+ import { makeMockShaderRegistry } from './helpers/mock-shader-registry';
22
+ import { registerRuntimeComponents } from './helpers/register-runtime-components';
23
+
24
+ function makeRegistry(): AssetRegistry {
25
+ return new AssetRegistry(makeMockShaderRegistry());
26
+ }
22
27
 
23
28
  function compField(entity: SceneEntity, compName: string, fieldName: string): unknown {
24
29
  const comp = (entity.components as Record<string, Record<string, unknown>>)[compName];
@@ -29,22 +34,18 @@ function hasComp(entity: SceneEntity, compName: string): boolean {
29
34
  return (entity.components as Record<string, Record<string, unknown>>)[compName] !== undefined;
30
35
  }
31
36
 
32
- function registerTransientWorld(world: World): void {
33
- registerSceneComponents(world, [SpriteAnimation, VideoPlayer]);
34
- }
35
-
36
37
  describe('w1 — AC-07 transient exclusion (SpriteAnimation, VideoPlayer)', () => {
37
38
  it('SpriteAnimation: currentFrame and accumDt are absent from collect output', () => {
38
39
  const world = new World();
39
- registerTransientWorld(world);
40
+ registerRuntimeComponents(world);
40
41
  const e = world.spawn({
41
42
  component: SpriteAnimation,
42
43
  data: { frameCount: 4, frameDuration: 0.1, regions: new Float32Array(16) },
43
44
  });
44
45
  if (!e.ok) return expect(e.ok).toBe(true);
45
46
 
46
- const assets = createTestSceneAssetStore();
47
- const collected = rootsToSceneAsset(assets.port, world, [e.value]);
47
+ const reg = makeRegistry();
48
+ const collected = rootsToSceneAsset(reg, world, [e.value]);
48
49
  expect(collected.ok).toBe(true);
49
50
  if (!collected.ok) return;
50
51
 
@@ -67,15 +68,15 @@ describe('w1 — AC-07 transient exclusion (SpriteAnimation, VideoPlayer)', () =
67
68
 
68
69
  it('VideoPlayer: currentTime is absent from collect output', () => {
69
70
  const world = new World();
70
- registerTransientWorld(world);
71
+ registerRuntimeComponents(world);
71
72
  const e = world.spawn({
72
73
  component: VideoPlayer,
73
74
  data: { playing: true, loop: false, currentTime: 5.5 },
74
75
  });
75
76
  if (!e.ok) return expect(e.ok).toBe(true);
76
77
 
77
- const assets = createTestSceneAssetStore();
78
- const collected = rootsToSceneAsset(assets.port, world, [e.value]);
78
+ const reg = makeRegistry();
79
+ const collected = rootsToSceneAsset(reg, world, [e.value]);
79
80
  expect(collected.ok).toBe(true);
80
81
  if (!collected.ok) return;
81
82
 
@@ -98,7 +99,7 @@ describe('w1 — AC-07 transient exclusion (SpriteAnimation, VideoPlayer)', () =
98
99
  describe('w2 — AC-08 round-trip tests (SpriteAnimation, VideoPlayer)', () => {
99
100
  it('SpriteAnimation: currentFrame/accumDt excluded, round-trip defaults to 0', () => {
100
101
  const world = new World();
101
- registerTransientWorld(world);
102
+ registerRuntimeComponents(world);
102
103
  const e = world.spawn({
103
104
  component: SpriteAnimation,
104
105
  data: {
@@ -111,8 +112,8 @@ describe('w2 — AC-08 round-trip tests (SpriteAnimation, VideoPlayer)', () => {
111
112
  });
112
113
  if (!e.ok) return expect(e.ok).toBe(true);
113
114
 
114
- const assets = createTestSceneAssetStore();
115
- const collected = rootsToSceneAsset(assets.port, world, [e.value]);
115
+ const reg = makeRegistry();
116
+ const collected = rootsToSceneAsset(reg, world, [e.value]);
116
117
  expect(collected.ok).toBe(true);
117
118
  if (!collected.ok) return;
118
119
 
@@ -126,7 +127,10 @@ describe('w2 — AC-08 round-trip tests (SpriteAnimation, VideoPlayer)', () => {
126
127
 
127
128
  // Round-trip: instantiate the collected scene → read ECS state directly.
128
129
  const handle = world.allocSharedRef('SceneAsset', collected.value);
129
- const inst = SceneOwner.worldInstantiateScene(world, handle);
130
+ const inst = SceneOwner.worldInstantiateScene(
131
+ world,
132
+ handle as Parameters<typeof SceneOwner.worldInstantiateScene>[1],
133
+ );
130
134
  expect(inst.ok).toBe(true);
131
135
  if (!inst.ok) return;
132
136
 
@@ -157,15 +161,15 @@ describe('w2 — AC-08 round-trip tests (SpriteAnimation, VideoPlayer)', () => {
157
161
  // The playback head is authoritative on the host HTMLVideoElement.
158
162
  // This test asserts exclusion + round-trip to default 0 only.
159
163
  const world = new World();
160
- registerTransientWorld(world);
164
+ registerRuntimeComponents(world);
161
165
  const e = world.spawn({
162
166
  component: VideoPlayer,
163
167
  data: { playing: true, loop: true, currentTime: 42.0 },
164
168
  });
165
169
  if (!e.ok) return expect(e.ok).toBe(true);
166
170
 
167
- const assets = createTestSceneAssetStore();
168
- const collected = rootsToSceneAsset(assets.port, world, [e.value]);
171
+ const reg = makeRegistry();
172
+ const collected = rootsToSceneAsset(reg, world, [e.value]);
169
173
  expect(collected.ok).toBe(true);
170
174
  if (!collected.ok) return;
171
175
 
@@ -178,7 +182,10 @@ describe('w2 — AC-08 round-trip tests (SpriteAnimation, VideoPlayer)', () => {
178
182
 
179
183
  // Round-trip: instantiate the collected scene → read ECS state directly.
180
184
  const handle = world.allocSharedRef('SceneAsset', collected.value);
181
- const inst = SceneOwner.worldInstantiateScene(world, handle);
185
+ const inst = SceneOwner.worldInstantiateScene(
186
+ world,
187
+ handle as Parameters<typeof SceneOwner.worldInstantiateScene>[1],
188
+ );
182
189
  expect(inst.ok).toBe(true);
183
190
  if (!inst.ok) return;
184
191