@forgeax/engine-runtime 0.0.0-dev.8d955ade1c79
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.
- package/LICENSE +202 -0
- package/README.md +165 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/__tests__/active-camera.unit.test.d.ts +2 -0
- package/dist/__tests__/active-camera.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-add.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-add.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-asset-union.test-d.d.ts +2 -0
- package/dist/__tests__/animation-graph-asset-union.test-d.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-blend.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-blend.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-build.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-build.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-clip-missing.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-clip-missing.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-clip.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-clip.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-collect-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-collect-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-default-path.integration.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-default-path.integration.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-describe.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-describe.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-errors.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-errors.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-nesting.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-nesting.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-orthogonal-weight.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-orthogonal-weight.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-serialize.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-serialize.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-slot-fill.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-slot-fill.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-nslot.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-nslot.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-slot-length-guard.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-slot-length-guard.unit.test.d.ts.map +1 -0
- package/dist/__tests__/append-injection.test.d.ts +2 -0
- package/dist/__tests__/append-injection.test.d.ts.map +1 -0
- package/dist/__tests__/asi-world-baseline-export.unit.test.d.ts +2 -0
- package/dist/__tests__/asi-world-baseline-export.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asi-world-ci-config.unit.test.d.ts +2 -0
- package/dist/__tests__/asi-world-ci-config.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asi-world-smoke.unit.test.d.ts +2 -0
- package/dist/__tests__/asi-world-smoke.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asset-brand-and-name-retirement.test.d.ts +2 -0
- package/dist/__tests__/asset-brand-and-name-retirement.test.d.ts.map +1 -0
- package/dist/__tests__/asset-error-exhaustive.test-d.d.ts +11 -0
- package/dist/__tests__/asset-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/asset-registry-guid-reverse.test.d.ts +2 -0
- package/dist/__tests__/asset-registry-guid-reverse.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry-hdr-equirect.test.d.ts +2 -0
- package/dist/__tests__/asset-registry-hdr-equirect.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry-mesh-pack-payload.dawn.test.d.ts +2 -0
- package/dist/__tests__/asset-registry-mesh-pack-payload.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry-mounts.test.d.ts +2 -0
- package/dist/__tests__/asset-registry-mounts.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry-scene.test-d.d.ts +2 -0
- package/dist/__tests__/asset-registry-scene.test-d.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.browser.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.browser.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.dawn.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.listCatalog.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.listCatalog.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.mesh-bin.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.mesh-bin.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.pack-cache.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.pack-cache.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.raw-container-failfast.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.raw-container-failfast.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.recursive.spec.d.ts +2 -0
- package/dist/__tests__/asset-registry.recursive.spec.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.unit.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asset.unit.test.d.ts +2 -0
- package/dist/__tests__/asset.unit.test.d.ts.map +1 -0
- package/dist/__tests__/audio-load-by-guid.unit.test.d.ts +2 -0
- package/dist/__tests__/audio-load-by-guid.unit.test.d.ts.map +1 -0
- package/dist/__tests__/backend-selection.integration.test.d.ts +2 -0
- package/dist/__tests__/backend-selection.integration.test.d.ts.map +1 -0
- package/dist/__tests__/basis-catalog-dispatch.integration.test.d.ts +2 -0
- package/dist/__tests__/basis-catalog-dispatch.integration.test.d.ts.map +1 -0
- package/dist/__tests__/bind-group-cache-keying.test.d.ts +2 -0
- package/dist/__tests__/bind-group-cache-keying.test.d.ts.map +1 -0
- package/dist/__tests__/block-upload-math.unit.test.d.ts +2 -0
- package/dist/__tests__/block-upload-math.unit.test.d.ts.map +1 -0
- package/dist/__tests__/builtin-asset-registry.unit.test.d.ts +2 -0
- package/dist/__tests__/builtin-asset-registry.unit.test.d.ts.map +1 -0
- package/dist/__tests__/builtin-shader-register-e2e.test.d.ts +2 -0
- package/dist/__tests__/builtin-shader-register-e2e.test.d.ts.map +1 -0
- package/dist/__tests__/cache-false-eviction.test.d.ts +2 -0
- package/dist/__tests__/cache-false-eviction.test.d.ts.map +1 -0
- package/dist/__tests__/cache-isolation-matrix.test.d.ts +2 -0
- package/dist/__tests__/cache-isolation-matrix.test.d.ts.map +1 -0
- package/dist/__tests__/camera-clear-snapshot-equivalence.unit.test.d.ts +2 -0
- package/dist/__tests__/camera-clear-snapshot-equivalence.unit.test.d.ts.map +1 -0
- package/dist/__tests__/clamp-to-last.e2e.browser.test.d.ts +2 -0
- package/dist/__tests__/clamp-to-last.e2e.browser.test.d.ts.map +1 -0
- package/dist/__tests__/clamp-to-last.e2e.dawn.test.d.ts +2 -0
- package/dist/__tests__/clamp-to-last.e2e.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/collect-scene-asset.test.d.ts +2 -0
- package/dist/__tests__/collect-scene-asset.test.d.ts.map +1 -0
- package/dist/__tests__/collect-scene-mount-collapse.test.d.ts +2 -0
- package/dist/__tests__/collect-scene-mount-collapse.test.d.ts.map +1 -0
- package/dist/__tests__/collect-subtree.unit.test.d.ts +2 -0
- package/dist/__tests__/collect-subtree.unit.test.d.ts.map +1 -0
- package/dist/__tests__/collect-transient-children-absent.test.d.ts +2 -0
- package/dist/__tests__/collect-transient-children-absent.test.d.ts.map +1 -0
- package/dist/__tests__/collect-transient-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/collect-transient-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/collect-transient-skip.test.d.ts +2 -0
- package/dist/__tests__/collect-transient-skip.test.d.ts.map +1 -0
- package/dist/__tests__/components.test-d.d.ts +2 -0
- package/dist/__tests__/components.test-d.d.ts.map +1 -0
- package/dist/__tests__/components.unit.test.d.ts +2 -0
- package/dist/__tests__/components.unit.test.d.ts.map +1 -0
- package/dist/__tests__/composite-skybox-cross-world.browser.test.d.ts +2 -0
- package/dist/__tests__/composite-skybox-cross-world.browser.test.d.ts.map +1 -0
- package/dist/__tests__/compressed-texture-physical-extent.integration.test.d.ts +2 -0
- package/dist/__tests__/compressed-texture-physical-extent.integration.test.d.ts.map +1 -0
- package/dist/__tests__/create-renderer-assembly.integration.test.d.ts +2 -0
- package/dist/__tests__/create-renderer-assembly.integration.test.d.ts.map +1 -0
- package/dist/__tests__/createRenderer-dispose.test.d.ts +2 -0
- package/dist/__tests__/createRenderer-dispose.test.d.ts.map +1 -0
- package/dist/__tests__/createRenderer-requiredFeatures.unit.test.d.ts +2 -0
- package/dist/__tests__/createRenderer-requiredFeatures.unit.test.d.ts.map +1 -0
- package/dist/__tests__/createRenderer.browser-no-webgpu.test.d.ts +2 -0
- package/dist/__tests__/createRenderer.browser-no-webgpu.test.d.ts.map +1 -0
- package/dist/__tests__/createRenderer.unit.test.d.ts +2 -0
- package/dist/__tests__/createRenderer.unit.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/ibl-compose.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/ibl-compose.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/ibl-modules-compose.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/ibl-modules-compose.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/ibl-precompute-readback.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/ibl-precompute-readback.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/instances-per-instance-pbr.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/instances-per-instance-pbr.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/instances-shadow.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/instances-shadow.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/instances-uniform-fallback.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/instances-uniform-fallback.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/material-alpha.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/material-alpha.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/material-cooked-fixture.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/material-cooked-fixture.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/mesh-ssbo-normal-matrix.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/mesh-ssbo-normal-matrix.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/mesh-update-dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/mesh-update-dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/mipmap-srgb-linear.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/mipmap-srgb-linear.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/tonemap.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/tonemap.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/upload-texture.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/upload-texture.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/user-handle-mesh-render.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/user-handle-mesh-render.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/user-mesh-upload.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/user-mesh-upload.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/zero-manifest-ready.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/zero-manifest-ready.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/demo-sortscope-migration.unit.test.d.ts +2 -0
- package/dist/__tests__/demo-sortscope-migration.unit.test.d.ts.map +1 -0
- package/dist/__tests__/derive-bgl-integration.test.d.ts +2 -0
- package/dist/__tests__/derive-bgl-integration.test.d.ts.map +1 -0
- package/dist/__tests__/derive-render-data-skin.unit.test.d.ts +2 -0
- package/dist/__tests__/derive-render-data-skin.unit.test.d.ts.map +1 -0
- package/dist/__tests__/draw-published.d.ts +5 -0
- package/dist/__tests__/draw-published.d.ts.map +1 -0
- package/dist/__tests__/dynamic-texture-store.unit.test.d.ts +2 -0
- package/dist/__tests__/dynamic-texture-store.unit.test.d.ts.map +1 -0
- package/dist/__tests__/environment-error-exhaustive.test-d.d.ts +8 -0
- package/dist/__tests__/environment-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/equirect-bc6h.integration.test.d.ts +2 -0
- package/dist/__tests__/equirect-bc6h.integration.test.d.ts.map +1 -0
- package/dist/__tests__/error-exhaustive.test.d.ts +2 -0
- package/dist/__tests__/error-exhaustive.test.d.ts.map +1 -0
- package/dist/__tests__/errors.unit.test.d.ts +2 -0
- package/dist/__tests__/errors.unit.test.d.ts.map +1 -0
- package/dist/__tests__/extract-frames-graceful-degradation.test.d.ts +2 -0
- package/dist/__tests__/extract-frames-graceful-degradation.test.d.ts.map +1 -0
- package/dist/__tests__/extract-frames-merge.test.d.ts +2 -0
- package/dist/__tests__/extract-frames-merge.test.d.ts.map +1 -0
- package/dist/__tests__/extract-frames-reset.test.d.ts +2 -0
- package/dist/__tests__/extract-frames-reset.test.d.ts.map +1 -0
- package/dist/__tests__/extract-record-no-hardcoded-texture-fields.test.d.ts +2 -0
- package/dist/__tests__/extract-record-no-hardcoded-texture-fields.test.d.ts.map +1 -0
- package/dist/__tests__/extract-skin-mismatch.unit.test.d.ts +2 -0
- package/dist/__tests__/extract-skin-mismatch.unit.test.d.ts.map +1 -0
- package/dist/__tests__/fetch-binary-decompress.test.d.ts +2 -0
- package/dist/__tests__/fetch-binary-decompress.test.d.ts.map +1 -0
- package/dist/__tests__/four-path-compression.integration.test.d.ts +2 -0
- package/dist/__tests__/four-path-compression.integration.test.d.ts.map +1 -0
- package/dist/__tests__/frame-targets-shadow-regression.unit.test.d.ts +2 -0
- package/dist/__tests__/frame-targets-shadow-regression.unit.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-feature-host.dawn.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-feature-host.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-post-bgl-depth.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-post-bgl-depth.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-post-depth-params-arity.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-post-depth-params-arity.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-post-process-pass.dawn.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-post-process-pass.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-post-process-pass.unit.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-post-process-pass.unit.test.d.ts.map +1 -0
- package/dist/__tests__/fxaa-pixel-diff.dawn.test.d.ts +2 -0
- package/dist/__tests__/fxaa-pixel-diff.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/fxaa-validation-and-resize.dawn.test.d.ts +2 -0
- package/dist/__tests__/fxaa-validation-and-resize.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/fxaa-zero-overhead.dawn.test.d.ts +2 -0
- package/dist/__tests__/fxaa-zero-overhead.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/geometry.unit.test.d.ts +2 -0
- package/dist/__tests__/geometry.unit.test.d.ts.map +1 -0
- package/dist/__tests__/glyph-tilemap-worldid.test.d.ts +2 -0
- package/dist/__tests__/glyph-tilemap-worldid.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-resource-cow-survivor.test.d.ts +2 -0
- package/dist/__tests__/gpu-resource-cow-survivor.test.d.ts.map +1 -0
- package/dist/__tests__/guid-for-asset.unit.test.d.ts +2 -0
- package/dist/__tests__/guid-for-asset.unit.test.d.ts.map +1 -0
- package/dist/__tests__/handle-migration.test.d.ts +2 -0
- package/dist/__tests__/handle-migration.test.d.ts.map +1 -0
- package/dist/__tests__/hello-tilemap-smoke-upgrade.unit.test.d.ts +2 -0
- package/dist/__tests__/hello-tilemap-smoke-upgrade.unit.test.d.ts.map +1 -0
- package/dist/__tests__/helpers/mock-shader-registry.d.ts +11 -0
- package/dist/__tests__/helpers/mock-shader-registry.d.ts.map +1 -0
- package/dist/__tests__/helpers/register-runtime-components.d.ts +4 -0
- package/dist/__tests__/helpers/register-runtime-components.d.ts.map +1 -0
- package/dist/__tests__/helpers/register-scene-components.d.ts +4 -0
- package/dist/__tests__/helpers/register-scene-components.d.ts.map +1 -0
- package/dist/__tests__/helpers/tilemap-assets.d.ts +6 -0
- package/dist/__tests__/helpers/tilemap-assets.d.ts.map +1 -0
- package/dist/__tests__/host-custom-kind-contract.test-d.d.ts +2 -0
- package/dist/__tests__/host-custom-kind-contract.test-d.d.ts.map +1 -0
- package/dist/__tests__/host-custom-kind-contract.test.d.ts +2 -0
- package/dist/__tests__/host-custom-kind-contract.test.d.ts.map +1 -0
- package/dist/__tests__/inspect-name.test.d.ts +2 -0
- package/dist/__tests__/inspect-name.test.d.ts.map +1 -0
- package/dist/__tests__/instances.test-d.d.ts +2 -0
- package/dist/__tests__/instances.test-d.d.ts.map +1 -0
- package/dist/__tests__/instantiate-mount-deferred-wiring.test.d.ts +2 -0
- package/dist/__tests__/instantiate-mount-deferred-wiring.test.d.ts.map +1 -0
- package/dist/__tests__/light-attenuation-formula.test.d.ts +2 -0
- package/dist/__tests__/light-attenuation-formula.test.d.ts.map +1 -0
- package/dist/__tests__/light-casters-9-light.browser.test.d.ts +2 -0
- package/dist/__tests__/light-casters-9-light.browser.test.d.ts.map +1 -0
- package/dist/__tests__/light-gpu-byte-neutral.unit.test.d.ts +2 -0
- package/dist/__tests__/light-gpu-byte-neutral.unit.test.d.ts.map +1 -0
- package/dist/__tests__/light-snapshot.test-d.d.ts +2 -0
- package/dist/__tests__/light-snapshot.test-d.d.ts.map +1 -0
- package/dist/__tests__/lights-vec-negative.unit.test.d.ts +2 -0
- package/dist/__tests__/lights-vec-negative.unit.test.d.ts.map +1 -0
- package/dist/__tests__/lights.unit.test.d.ts +2 -0
- package/dist/__tests__/lights.unit.test.d.ts.map +1 -0
- package/dist/__tests__/loadbyguid-payload.unit.test.d.ts +2 -0
- package/dist/__tests__/loadbyguid-payload.unit.test.d.ts.map +1 -0
- package/dist/__tests__/loadbyguid-texture-intern.unit.test.d.ts +2 -0
- package/dist/__tests__/loadbyguid-texture-intern.unit.test.d.ts.map +1 -0
- package/dist/__tests__/loader-extract-graceful.test.d.ts +2 -0
- package/dist/__tests__/loader-extract-graceful.test.d.ts.map +1 -0
- package/dist/__tests__/loader-name-survival.test.d.ts +2 -0
- package/dist/__tests__/loader-name-survival.test.d.ts.map +1 -0
- package/dist/__tests__/m3-vec-negative.unit.test.d.ts +2 -0
- package/dist/__tests__/m3-vec-negative.unit.test.d.ts.map +1 -0
- package/dist/__tests__/m5-browser-dawn-sweep.integration.test.d.ts +2 -0
- package/dist/__tests__/m5-browser-dawn-sweep.integration.test.d.ts.map +1 -0
- package/dist/__tests__/material-texture-uv-scale.unit.test.d.ts +2 -0
- package/dist/__tests__/material-texture-uv-scale.unit.test.d.ts.map +1 -0
- package/dist/__tests__/materials.unit.test.d.ts +2 -0
- package/dist/__tests__/materials.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-bin-contract.test.d.ts +2 -0
- package/dist/__tests__/mesh-bin-contract.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-bin-skin-roundtrip.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-bin-skin-roundtrip.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-bin.test.d.ts +2 -0
- package/dist/__tests__/mesh-bin.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-loader-skin-contract.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-loader-skin-contract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-ssbo-grow.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-ssbo-grow.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mip-gate.unit.test.d.ts +2 -0
- package/dist/__tests__/mip-gate.unit.test.d.ts.map +1 -0
- package/dist/__tests__/msaa-sprite-pixel-diff.dawn.test.d.ts +2 -0
- package/dist/__tests__/msaa-sprite-pixel-diff.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/multi-uv-8set.e2e.dawn.test.d.ts +2 -0
- package/dist/__tests__/multi-uv-8set.e2e.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/name.unit.test.d.ts +2 -0
- package/dist/__tests__/name.unit.test.d.ts.map +1 -0
- package/dist/__tests__/new-kind-refs-contract.test.d.ts +2 -0
- package/dist/__tests__/new-kind-refs-contract.test.d.ts.map +1 -0
- package/dist/__tests__/package-promotion.test.d.ts +2 -0
- package/dist/__tests__/package-promotion.test.d.ts.map +1 -0
- package/dist/__tests__/package-rename.test.d.ts +2 -0
- package/dist/__tests__/package-rename.test.d.ts.map +1 -0
- package/dist/__tests__/pass-selector.unit.test.d.ts +2 -0
- package/dist/__tests__/pass-selector.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pbr-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/pbr-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-builder-msaa.unit.test.d.ts +2 -0
- package/dist/__tests__/pipeline-builder-msaa.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-cache-keying.unit.test.d.ts +2 -0
- package/dist/__tests__/pipeline-cache-keying.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-spec.test.d.ts +2 -0
- package/dist/__tests__/pipeline-spec.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/point-light-shadow.browser.test.d.ts +2 -0
- package/dist/__tests__/point-light-shadow.browser.test.d.ts.map +1 -0
- package/dist/__tests__/point-light-shadow.dawn.test.d.ts +2 -0
- package/dist/__tests__/point-light-shadow.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/point-light-shadow.unit.test.d.ts +2 -0
- package/dist/__tests__/point-light-shadow.unit.test.d.ts.map +1 -0
- package/dist/__tests__/post-process-error-codes.unit.test.d.ts +2 -0
- package/dist/__tests__/post-process-error-codes.unit.test.d.ts.map +1 -0
- package/dist/__tests__/post-process-params-component.unit.test.d.ts +2 -0
- package/dist/__tests__/post-process-params-component.unit.test.d.ts.map +1 -0
- package/dist/__tests__/post-process-params-extract.unit.test.d.ts +2 -0
- package/dist/__tests__/post-process-params-extract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/postprocess-camera-consistency.test.d.ts +2 -0
- package/dist/__tests__/postprocess-camera-consistency.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-assembly.integration.test.d.ts +2 -0
- package/dist/__tests__/profiler-assembly.integration.test.d.ts.map +1 -0
- package/dist/__tests__/propagate-transforms.dawn.test.d.ts +2 -0
- package/dist/__tests__/propagate-transforms.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/record-worldid-isolation.test.d.ts +2 -0
- package/dist/__tests__/record-worldid-isolation.test.d.ts.map +1 -0
- package/dist/__tests__/recover-error-exhaustive.test-d.d.ts +11 -0
- package/dist/__tests__/recover-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts +11 -0
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-assembly.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.browser.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.browser.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts +10 -0
- package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.integration.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.regression.integration.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.regression.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-recover.integration.test.d.ts +2 -0
- package/dist/__tests__/render-feature-recover.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-runtime-surface.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-runtime-surface.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-schema-consumer.integration.test.d.ts +2 -0
- package/dist/__tests__/render-schema-consumer.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-schema-owner-boundary.unit.test.d.ts +2 -0
- package/dist/__tests__/render-schema-owner-boundary.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-cross-world-overlay-queue.test.d.ts +2 -0
- package/dist/__tests__/render-system-cross-world-overlay-queue.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-extract-dispatch-ordering.test.d.ts +2 -0
- package/dist/__tests__/render-system-extract-dispatch-ordering.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-extract.test.d.ts +2 -0
- package/dist/__tests__/render-system-extract.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-extract.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-extract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold-bucket.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold-bucket.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold-fallback.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold-fallback.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold-material.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold-material.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold-metrics.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold-metrics.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold-modegate.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold-modegate.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold-scene-instances.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold-scene-instances.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-mega.test.d.ts +2 -0
- package/dist/__tests__/render-system-mega.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-owner-split-contract.test.d.ts +2 -0
- package/dist/__tests__/render-system-owner-split-contract.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-record-multi-material-textureview.test.d.ts +2 -0
- package/dist/__tests__/render-system-record-multi-material-textureview.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-record-per-submesh-transparency.test.d.ts +2 -0
- package/dist/__tests__/render-system-record-per-submesh-transparency.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-record.test.d.ts +2 -0
- package/dist/__tests__/render-system-record.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-record.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-record.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-skin-bg.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-skin-bg.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-consumer.test-d.d.ts +2 -0
- package/dist/__tests__/renderer-consumer.test-d.d.ts.map +1 -0
- package/dist/__tests__/renderer-health.unit.test.d.ts +2 -0
- package/dist/__tests__/renderer-health.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +2 -0
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-recover.unit.test.d.ts +2 -0
- package/dist/__tests__/renderer-recover.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-result.test-d.d.ts +2 -0
- package/dist/__tests__/renderer-result.test-d.d.ts.map +1 -0
- package/dist/__tests__/renderer-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/renderer-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-test-utils.d.ts +10 -0
- package/dist/__tests__/renderer-test-utils.d.ts.map +1 -0
- package/dist/__tests__/renderer.test-d.d.ts +2 -0
- package/dist/__tests__/renderer.test-d.d.ts.map +1 -0
- package/dist/__tests__/resolve-asset-handle-err.test.d.ts +2 -0
- package/dist/__tests__/resolve-asset-handle-err.test.d.ts.map +1 -0
- package/dist/__tests__/resolve-asset-handle.unit.test.d.ts +2 -0
- package/dist/__tests__/resolve-asset-handle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/resolve-depth-only-view.test.d.ts +2 -0
- package/dist/__tests__/resolve-depth-only-view.test.d.ts.map +1 -0
- package/dist/__tests__/resolveName-fallback.test.d.ts +2 -0
- package/dist/__tests__/resolveName-fallback.test.d.ts.map +1 -0
- package/dist/__tests__/resolveName-null-package.test.d.ts +2 -0
- package/dist/__tests__/resolveName-null-package.test.d.ts.map +1 -0
- package/dist/__tests__/resolveName-unified-entry.test.d.ts +2 -0
- package/dist/__tests__/resolveName-unified-entry.test.d.ts.map +1 -0
- package/dist/__tests__/resolveName.test.d.ts +2 -0
- package/dist/__tests__/resolveName.test.d.ts.map +1 -0
- package/dist/__tests__/rhi-null-command-flow.unit.test.d.ts +2 -0
- package/dist/__tests__/rhi-null-command-flow.unit.test.d.ts.map +1 -0
- package/dist/__tests__/rhi-null-noop-behavior.unit.test.d.ts +2 -0
- package/dist/__tests__/rhi-null-noop-behavior.unit.test.d.ts.map +1 -0
- package/dist/__tests__/rhi-null-renderer-lifecycle.unit.test.d.ts +2 -0
- package/dist/__tests__/rhi-null-renderer-lifecycle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/roots-to-scene-asset.test.d.ts +2 -0
- package/dist/__tests__/roots-to-scene-asset.test.d.ts.map +1 -0
- package/dist/__tests__/roundtrip-primitive.test.d.ts +2 -0
- package/dist/__tests__/roundtrip-primitive.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-authority-scan.unit.test.d.ts +2 -0
- package/dist/__tests__/runtime-authority-scan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-domain-residue.unit.test.d.ts +2 -0
- package/dist/__tests__/runtime-domain-residue.unit.test.d.ts.map +1 -0
- package/dist/__tests__/scene-bare-guid-refs-instantiate.test.d.ts +2 -0
- package/dist/__tests__/scene-bare-guid-refs-instantiate.test.d.ts.map +1 -0
- package/dist/__tests__/scene-equirect-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/scene-equirect-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/scene-instance-authoring.integration.test.d.ts +2 -0
- package/dist/__tests__/scene-instance-authoring.integration.test.d.ts.map +1 -0
- package/dist/__tests__/scene-instance-bridge.integration.test.d.ts +2 -0
- package/dist/__tests__/scene-instance-bridge.integration.test.d.ts.map +1 -0
- package/dist/__tests__/scene-instance-component.test.d.ts +2 -0
- package/dist/__tests__/scene-instance-component.test.d.ts.map +1 -0
- package/dist/__tests__/scene-instantiate-cycle-runtime.test.d.ts +2 -0
- package/dist/__tests__/scene-instantiate-cycle-runtime.test.d.ts.map +1 -0
- package/dist/__tests__/scene-mount-fixed-point.test.d.ts +2 -0
- package/dist/__tests__/scene-mount-fixed-point.test.d.ts.map +1 -0
- package/dist/__tests__/scene-mount-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/scene-mount-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/scene-mount-wrapper-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/scene-mount-wrapper-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/scene-sugar-instantiate.test.d.ts +2 -0
- package/dist/__tests__/scene-sugar-instantiate.test.d.ts.map +1 -0
- package/dist/__tests__/serialize-mounts-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/serialize-mounts-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/serialize-scene-asset.test.d.ts +2 -0
- package/dist/__tests__/serialize-scene-asset.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-caster-empty-schema.test.d.ts +2 -0
- package/dist/__tests__/shadow-caster-empty-schema.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-atlas.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-atlas.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-blend.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-blend.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-cascade-loadop.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-cascade-loadop.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-component.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-component.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-extract.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-extract.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-orthoz.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-orthoz.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-runtime-vary.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-runtime-vary.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-shader.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-shader.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-tile-consistency.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-tile-consistency.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-ubo.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-ubo.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-ubo.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-ubo.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-viewport.browser.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-viewport.browser.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-fields-observable.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-fields-observable.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-m1.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-m1.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-mesh-ssbo-order.test.d.ts +2 -0
- package/dist/__tests__/shadow-mesh-ssbo-order.test.d.ts.map +1 -0
- package/dist/__tests__/skin-error-exhaustive.test-d.d.ts +11 -0
- package/dist/__tests__/skin-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/skin-errors.unit.test.d.ts +2 -0
- package/dist/__tests__/skin-errors.unit.test.d.ts.map +1 -0
- package/dist/__tests__/skin-extract-getarrayview-count.unit.test.d.ts +2 -0
- package/dist/__tests__/skin-extract-getarrayview-count.unit.test.d.ts.map +1 -0
- package/dist/__tests__/skin-parented-double-transform.test.d.ts +14 -0
- package/dist/__tests__/skin-parented-double-transform.test.d.ts.map +1 -0
- package/dist/__tests__/skylight-lazy-projection.test.d.ts +2 -0
- package/dist/__tests__/skylight-lazy-projection.test.d.ts.map +1 -0
- package/dist/__tests__/sparse-tag-scene-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/sparse-tag-scene-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/sprite-cullmode-flip.dawn.test.d.ts +2 -0
- package/dist/__tests__/sprite-cullmode-flip.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/sprite-lit-bgl-byte-identical.test.d.ts +2 -0
- package/dist/__tests__/sprite-lit-bgl-byte-identical.test.d.ts.map +1 -0
- package/dist/__tests__/sprite-lit-extract-branch.test.d.ts +2 -0
- package/dist/__tests__/sprite-lit-extract-branch.test.d.ts.map +1 -0
- package/dist/__tests__/sprite-lit-pipeline-cache-key.test.d.ts +2 -0
- package/dist/__tests__/sprite-lit-pipeline-cache-key.test.d.ts.map +1 -0
- package/dist/__tests__/sprite-param-values.test-d.d.ts +2 -0
- package/dist/__tests__/sprite-param-values.test-d.d.ts.map +1 -0
- package/dist/__tests__/ssao-bgl.test.d.ts +2 -0
- package/dist/__tests__/ssao-bgl.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-buffers.test.d.ts +2 -0
- package/dist/__tests__/ssao-buffers.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-data.test.d.ts +2 -0
- package/dist/__tests__/ssao-data.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-errors.test.d.ts +2 -0
- package/dist/__tests__/ssao-errors.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-manifest.test.d.ts +2 -0
- package/dist/__tests__/ssao-manifest.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-passes.test.d.ts +2 -0
- package/dist/__tests__/ssao-passes.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-pipelines.test.d.ts +2 -0
- package/dist/__tests__/ssao-pipelines.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-uniform-layout.test.d.ts +2 -0
- package/dist/__tests__/ssao-uniform-layout.test.d.ts.map +1 -0
- package/dist/__tests__/static-rig.integration.test.d.ts +2 -0
- package/dist/__tests__/static-rig.integration.test.d.ts.map +1 -0
- package/dist/__tests__/stencil-outline-pixel.dawn.test.d.ts +2 -0
- package/dist/__tests__/stencil-outline-pixel.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/swap-chain-format.unit.test.d.ts +2 -0
- package/dist/__tests__/swap-chain-format.unit.test.d.ts.map +1 -0
- package/dist/__tests__/systems.unit.test.d.ts +2 -0
- package/dist/__tests__/systems.unit.test.d.ts.map +1 -0
- package/dist/__tests__/template-game-default-api-contract.test.d.ts +2 -0
- package/dist/__tests__/template-game-default-api-contract.test.d.ts.map +1 -0
- package/dist/__tests__/text.unit.test.d.ts +2 -0
- package/dist/__tests__/text.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-childed-despawn.test.d.ts +2 -0
- package/dist/__tests__/tilemap-childed-despawn.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-chunk-extract.overhang-bounds.test.d.ts +2 -0
- package/dist/__tests__/tilemap-chunk-extract.overhang-bounds.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-chunk-extract.propagate-order.test.d.ts +2 -0
- package/dist/__tests__/tilemap-chunk-extract.propagate-order.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-chunk-extract.terrain-rewrite.unit.test.d.ts +2 -0
- package/dist/__tests__/tilemap-chunk-extract.terrain-rewrite.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-chunk-extract.test.d.ts +2 -0
- package/dist/__tests__/tilemap-chunk-extract.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-chunk-extract.unit.test.d.ts +2 -0
- package/dist/__tests__/tilemap-chunk-extract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-chunk-y-sort-bench.unit.test.d.ts +2 -0
- package/dist/__tests__/tilemap-chunk-y-sort-bench.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-dirty-rebuild.test.d.ts +2 -0
- package/dist/__tests__/tilemap-dirty-rebuild.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-material-cache.test.d.ts +2 -0
- package/dist/__tests__/tilemap-material-cache.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-multi-atlas.test.d.ts +2 -0
- package/dist/__tests__/tilemap-multi-atlas.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-owner-boundary.unit.test.d.ts +2 -0
- package/dist/__tests__/tilemap-owner-boundary.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-region-pack.test.d.ts +2 -0
- package/dist/__tests__/tilemap-region-pack.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-spawn-flip-pivot.test.d.ts +2 -0
- package/dist/__tests__/tilemap-spawn-flip-pivot.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-uv-inset.test.d.ts +2 -0
- package/dist/__tests__/tilemap-uv-inset.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-validate.test.d.ts +2 -0
- package/dist/__tests__/tilemap-validate.test.d.ts.map +1 -0
- package/dist/__tests__/tileset-asset-validate.test.d.ts +2 -0
- package/dist/__tests__/tileset-asset-validate.test.d.ts.map +1 -0
- package/dist/__tests__/transcode-fallback.unit.test.d.ts +2 -0
- package/dist/__tests__/transcode-fallback.unit.test.d.ts.map +1 -0
- package/dist/__tests__/transform-hierarchy-pixel-diff.dawn.test.d.ts +2 -0
- package/dist/__tests__/transform-hierarchy-pixel-diff.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/transient-fields-collect.test.d.ts +2 -0
- package/dist/__tests__/transient-fields-collect.test.d.ts.map +1 -0
- package/dist/__tests__/transient-runtime-behavior.test.d.ts +2 -0
- package/dist/__tests__/transient-runtime-behavior.test.d.ts.map +1 -0
- package/dist/__tests__/transitional-authoring.integration.test.d.ts +2 -0
- package/dist/__tests__/transitional-authoring.integration.test.d.ts.map +1 -0
- package/dist/__tests__/transparent-sort-tilemap-sprite-interleave.test.d.ts +2 -0
- package/dist/__tests__/transparent-sort-tilemap-sprite-interleave.test.d.ts.map +1 -0
- package/dist/__tests__/variant-selection.unit.test.d.ts +2 -0
- package/dist/__tests__/variant-selection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vertex-attribute-layout.test.d.ts +2 -0
- package/dist/__tests__/vertex-attribute-layout.test.d.ts.map +1 -0
- package/dist/__tests__/video-extract-bindgroup.dawn.test.d.ts +2 -0
- package/dist/__tests__/video-extract-bindgroup.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/video-loader-consumption.test.d.ts +2 -0
- package/dist/__tests__/video-loader-consumption.test.d.ts.map +1 -0
- package/dist/__tests__/video-loader-smoke.dawn.test.d.ts +2 -0
- package/dist/__tests__/video-loader-smoke.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/view-ubo-layout.browser.test.d.ts +2 -0
- package/dist/__tests__/view-ubo-layout.browser.test.d.ts.map +1 -0
- package/dist/__tests__/world-entity-key.test.d.ts +2 -0
- package/dist/__tests__/world-entity-key.test.d.ts.map +1 -0
- package/dist/__tests__/world-scene-despawn.test.d.ts +2 -0
- package/dist/__tests__/world-scene-despawn.test.d.ts.map +1 -0
- package/dist/__tests__/world-scene-instantiate.test.d.ts +2 -0
- package/dist/__tests__/world-scene-instantiate.test.d.ts.map +1 -0
- package/dist/__tests__/world-scene-nested.test.d.ts +2 -0
- package/dist/__tests__/world-scene-nested.test.d.ts.map +1 -0
- package/dist/__tests__/world-scene-override.test.d.ts +2 -0
- package/dist/__tests__/world-scene-override.test.d.ts.map +1 -0
- package/dist/__tests__/zero-compression-zero-load.integration.test.d.ts +2 -0
- package/dist/__tests__/zero-compression-zero-load.integration.test.d.ts.map +1 -0
- package/dist/asset-contributions.d.ts +3 -0
- package/dist/asset-contributions.d.ts.map +1 -0
- package/dist/backend-selection.d.ts +13 -0
- package/dist/backend-selection.d.ts.map +1 -0
- package/dist/collect-scene-asset.d.ts +19 -0
- package/dist/collect-scene-asset.d.ts.map +1 -0
- package/dist/components/__tests__/camera.test-d.d.ts +2 -0
- package/dist/components/__tests__/camera.test-d.d.ts.map +1 -0
- package/dist/components/__tests__/camera.test.d.ts +2 -0
- package/dist/components/__tests__/camera.test.d.ts.map +1 -0
- package/dist/components/__tests__/child-of.test.d.ts +2 -0
- package/dist/components/__tests__/child-of.test.d.ts.map +1 -0
- package/dist/components/__tests__/sprite-animation.test-d.d.ts +2 -0
- package/dist/components/__tests__/sprite-animation.test-d.d.ts.map +1 -0
- package/dist/components/__tests__/sprite-instances.unit.test.d.ts +2 -0
- package/dist/components/__tests__/sprite-instances.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/sprite-region-override.test-d.d.ts +2 -0
- package/dist/components/__tests__/sprite-region-override.test-d.d.ts.map +1 -0
- package/dist/components/__tests__/tile-layer.test-d.d.ts +2 -0
- package/dist/components/__tests__/tile-layer.test-d.d.ts.map +1 -0
- package/dist/components/__tests__/tile-layer.unit.test.d.ts +2 -0
- package/dist/components/__tests__/tile-layer.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/tilemap.test-d.d.ts +2 -0
- package/dist/components/__tests__/tilemap.test-d.d.ts.map +1 -0
- package/dist/components/__tests__/transform-vec-schema.test.d.ts +2 -0
- package/dist/components/__tests__/transform-vec-schema.test.d.ts.map +1 -0
- package/dist/create-renderer-env-classify.d.ts +21 -0
- package/dist/create-renderer-env-classify.d.ts.map +1 -0
- package/dist/createRenderer.d.ts +15 -0
- package/dist/createRenderer.d.ts.map +1 -0
- package/dist/dev-import-transport.d.ts +24 -0
- package/dist/dev-import-transport.d.ts.map +1 -0
- package/dist/errors/environment.d.ts +2 -0
- package/dist/errors/environment.d.ts.map +1 -0
- package/dist/index.d.ts +218 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +813 -0
- package/dist/index.mjs.map +1 -0
- package/dist/renderer-host.d.ts +9 -0
- package/dist/renderer-host.d.ts.map +1 -0
- package/dist/renderer-host.mjs +62 -0
- package/dist/renderer-host.mjs.map +1 -0
- package/dist/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.d.ts +2 -0
- package/dist/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.d.ts.map +1 -0
- package/dist/scene-instances/index.d.ts +2 -0
- package/dist/scene-instances/index.d.ts.map +1 -0
- package/dist/scene-utils/mount-override-fold.d.ts +15 -0
- package/dist/scene-utils/mount-override-fold.d.ts.map +1 -0
- package/dist/sprite-param-values.d.ts +62 -0
- package/dist/sprite-param-values.d.ts.map +1 -0
- package/dist/systems/__tests__/_xorshift.d.ts +28 -0
- package/dist/systems/__tests__/_xorshift.d.ts.map +1 -0
- package/dist/systems/__tests__/argsort-in-place.test.d.ts +2 -0
- package/dist/systems/__tests__/argsort-in-place.test.d.ts.map +1 -0
- package/dist/systems/__tests__/transparent-sort.bench.d.ts +2 -0
- package/dist/systems/__tests__/transparent-sort.bench.d.ts.map +1 -0
- package/dist/systems/sprite-animation-tick.d.ts +50 -0
- package/dist/systems/sprite-animation-tick.d.ts.map +1 -0
- package/dist/systems/tonemap.d.ts +27 -0
- package/dist/systems/tonemap.d.ts.map +1 -0
- package/dist/systems/transparent-sort.d.ts +50 -0
- package/dist/systems/transparent-sort.d.ts.map +1 -0
- package/dist/tilemap-register-validate.d.ts +21 -0
- package/dist/tilemap-register-validate.d.ts.map +1 -0
- package/package.json +101 -0
- package/src/__tests__/active-camera.unit.test.ts +203 -0
- package/src/__tests__/animation-graph-add.unit.test.ts +67 -0
- package/src/__tests__/animation-graph-asset-union.test-d.ts +83 -0
- package/src/__tests__/animation-graph-blend.unit.test.ts +66 -0
- package/src/__tests__/animation-graph-build.unit.test.ts +100 -0
- package/src/__tests__/animation-graph-clip-missing.unit.test.ts +62 -0
- package/src/__tests__/animation-graph-clip.unit.test.ts +77 -0
- package/src/__tests__/animation-graph-collect-roundtrip.test.ts +213 -0
- package/src/__tests__/animation-graph-default-path.integration.test.ts +65 -0
- package/src/__tests__/animation-graph-describe.unit.test.ts +68 -0
- package/src/__tests__/animation-graph-errors.unit.test.ts +75 -0
- package/src/__tests__/animation-graph-nesting.unit.test.ts +84 -0
- package/src/__tests__/animation-graph-orthogonal-weight.unit.test.ts +98 -0
- package/src/__tests__/animation-graph-serialize.unit.test.ts +171 -0
- package/src/__tests__/animation-graph-slot-fill.unit.test.ts +95 -0
- package/src/__tests__/animation-nslot.unit.test.ts +63 -0
- package/src/__tests__/animation-slot-length-guard.unit.test.ts +81 -0
- package/src/__tests__/append-injection.test.ts +105 -0
- package/src/__tests__/asi-world-baseline-export.unit.test.ts +173 -0
- package/src/__tests__/asi-world-ci-config.unit.test.ts +186 -0
- package/src/__tests__/asi-world-smoke.unit.test.ts +192 -0
- package/src/__tests__/asset-brand-and-name-retirement.test.ts +102 -0
- package/src/__tests__/asset-error-exhaustive.test-d.ts +62 -0
- package/src/__tests__/asset-registry-guid-reverse.test.ts +608 -0
- package/src/__tests__/asset-registry-hdr-equirect.test.ts +78 -0
- package/src/__tests__/asset-registry-mesh-pack-payload.dawn.test.ts +232 -0
- package/src/__tests__/asset-registry-mounts.test.ts +806 -0
- package/src/__tests__/asset-registry-scene.test-d.ts +49 -0
- package/src/__tests__/asset-registry.browser.test.ts +81 -0
- package/src/__tests__/asset-registry.dawn.test.ts +94 -0
- package/src/__tests__/asset-registry.listCatalog.test.ts +170 -0
- package/src/__tests__/asset-registry.mesh-bin.test.ts +316 -0
- package/src/__tests__/asset-registry.pack-cache.test.ts +969 -0
- package/src/__tests__/asset-registry.raw-container-failfast.test.ts +225 -0
- package/src/__tests__/asset-registry.recursive.spec.ts +1397 -0
- package/src/__tests__/asset-registry.unit.test.ts +1030 -0
- package/src/__tests__/asset.unit.test.ts +7107 -0
- package/src/__tests__/audio-load-by-guid.unit.test.ts +126 -0
- package/src/__tests__/backend-selection.integration.test.ts +11 -0
- package/src/__tests__/basis-catalog-dispatch.integration.test.ts +320 -0
- package/src/__tests__/bind-group-cache-keying.test.ts +295 -0
- package/src/__tests__/block-upload-math.unit.test.ts +192 -0
- package/src/__tests__/builtin-asset-registry.unit.test.ts +112 -0
- package/src/__tests__/builtin-shader-register-e2e.test.ts +151 -0
- package/src/__tests__/cache-false-eviction.test.ts +127 -0
- package/src/__tests__/cache-isolation-matrix.test.ts +183 -0
- package/src/__tests__/camera-clear-snapshot-equivalence.unit.test.ts +75 -0
- package/src/__tests__/clamp-to-last.e2e.browser.test.ts +193 -0
- package/src/__tests__/clamp-to-last.e2e.dawn.test.ts +325 -0
- package/src/__tests__/collect-scene-asset.test.ts +873 -0
- package/src/__tests__/collect-scene-mount-collapse.test.ts +391 -0
- package/src/__tests__/collect-subtree.unit.test.ts +75 -0
- package/src/__tests__/collect-transient-children-absent.test.ts +168 -0
- package/src/__tests__/collect-transient-roundtrip.test.ts +269 -0
- package/src/__tests__/collect-transient-skip.test.ts +176 -0
- package/src/__tests__/components.test-d.ts +231 -0
- package/src/__tests__/components.unit.test.ts +2666 -0
- package/src/__tests__/composite-skybox-cross-world.browser.test.ts +410 -0
- package/src/__tests__/compressed-texture-physical-extent.integration.test.ts +139 -0
- package/src/__tests__/create-renderer-assembly.integration.test.ts +55 -0
- package/src/__tests__/createRenderer-dispose.test.ts +49 -0
- package/src/__tests__/createRenderer-requiredFeatures.unit.test.ts +134 -0
- package/src/__tests__/createRenderer.browser-no-webgpu.test.ts +54 -0
- package/src/__tests__/createRenderer.unit.test.ts +231 -0
- package/src/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.ts +357 -0
- package/src/__tests__/dawn/ibl-compose.dawn.test.ts +151 -0
- package/src/__tests__/dawn/ibl-modules-compose.dawn.test.ts +223 -0
- package/src/__tests__/dawn/ibl-precompute-readback.dawn.test.ts +250 -0
- package/src/__tests__/dawn/instances-per-instance-pbr.dawn.test.ts +631 -0
- package/src/__tests__/dawn/instances-shadow.dawn.test.ts +454 -0
- package/src/__tests__/dawn/instances-uniform-fallback.dawn.test.ts +312 -0
- package/src/__tests__/dawn/material-alpha.dawn.test.ts +296 -0
- package/src/__tests__/dawn/material-cooked-fixture.dawn.test.ts +79 -0
- package/src/__tests__/dawn/mesh-ssbo-normal-matrix.dawn.test.ts +106 -0
- package/src/__tests__/dawn/mesh-update-dawn.test.ts +250 -0
- package/src/__tests__/dawn/mipmap-srgb-linear.dawn.test.ts +124 -0
- package/src/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.ts +555 -0
- package/src/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.ts +235 -0
- package/src/__tests__/dawn/tonemap.dawn.test.ts +107 -0
- package/src/__tests__/dawn/upload-texture.dawn.test.ts +198 -0
- package/src/__tests__/dawn/user-handle-mesh-render.dawn.test.ts +289 -0
- package/src/__tests__/dawn/user-mesh-upload.dawn.test.ts +209 -0
- package/src/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.ts +119 -0
- package/src/__tests__/dawn/zero-manifest-ready.dawn.test.ts +98 -0
- package/src/__tests__/demo-sortscope-migration.unit.test.ts +115 -0
- package/src/__tests__/derive-bgl-integration.test.ts +388 -0
- package/src/__tests__/derive-render-data-skin.unit.test.ts +90 -0
- package/src/__tests__/draw-published.ts +17 -0
- package/src/__tests__/dynamic-texture-store.unit.test.ts +190 -0
- package/src/__tests__/environment-error-exhaustive.test-d.ts +28 -0
- package/src/__tests__/equirect-bc6h.integration.test.ts +158 -0
- package/src/__tests__/error-exhaustive.test.ts +220 -0
- package/src/__tests__/errors.unit.test.ts +1227 -0
- package/src/__tests__/extract-frames-graceful-degradation.test.ts +294 -0
- package/src/__tests__/extract-frames-merge.test.ts +656 -0
- package/src/__tests__/extract-frames-reset.test.ts +158 -0
- package/src/__tests__/extract-record-no-hardcoded-texture-fields.test.ts +81 -0
- package/src/__tests__/extract-skin-mismatch.unit.test.ts +322 -0
- package/src/__tests__/fetch-binary-decompress.test.ts +356 -0
- package/src/__tests__/four-path-compression.integration.test.ts +395 -0
- package/src/__tests__/frame-targets-shadow-regression.unit.test.ts +28 -0
- package/src/__tests__/fullscreen-feature-host.dawn.test.ts +80 -0
- package/src/__tests__/fullscreen-post-bgl-depth.test.ts +133 -0
- package/src/__tests__/fullscreen-post-depth-params-arity.test.ts +84 -0
- package/src/__tests__/fullscreen-post-process-pass.dawn.test.ts +336 -0
- package/src/__tests__/fullscreen-post-process-pass.unit.test.ts +109 -0
- package/src/__tests__/fxaa-pixel-diff.dawn.test.ts +303 -0
- package/src/__tests__/fxaa-validation-and-resize.dawn.test.ts +369 -0
- package/src/__tests__/fxaa-zero-overhead.dawn.test.ts +258 -0
- package/src/__tests__/geometry.unit.test.ts +2631 -0
- package/src/__tests__/glyph-tilemap-worldid.test.ts +146 -0
- package/src/__tests__/gpu-resource-cow-survivor.test.ts +390 -0
- package/src/__tests__/guid-for-asset.unit.test.ts +102 -0
- package/src/__tests__/handle-migration.test.ts +136 -0
- package/src/__tests__/hello-tilemap-smoke-upgrade.unit.test.ts +147 -0
- package/src/__tests__/helpers/mock-shader-registry.ts +139 -0
- package/src/__tests__/helpers/register-runtime-components.ts +71 -0
- package/src/__tests__/helpers/register-scene-components.ts +10 -0
- package/src/__tests__/helpers/tilemap-assets.ts +29 -0
- package/src/__tests__/host-custom-kind-contract.test-d.ts +47 -0
- package/src/__tests__/host-custom-kind-contract.test.ts +578 -0
- package/src/__tests__/inspect-name.test.ts +139 -0
- package/src/__tests__/instances.test-d.ts +61 -0
- package/src/__tests__/instantiate-mount-deferred-wiring.test.ts +112 -0
- package/src/__tests__/light-attenuation-formula.test.ts +171 -0
- package/src/__tests__/light-casters-9-light.browser.test.ts +877 -0
- package/src/__tests__/light-gpu-byte-neutral.unit.test.ts +160 -0
- package/src/__tests__/light-snapshot.test-d.ts +84 -0
- package/src/__tests__/lights-vec-negative.unit.test.ts +52 -0
- package/src/__tests__/lights.unit.test.ts +2456 -0
- package/src/__tests__/loadbyguid-payload.unit.test.ts +117 -0
- package/src/__tests__/loadbyguid-texture-intern.unit.test.ts +213 -0
- package/src/__tests__/loader-extract-graceful.test.ts +146 -0
- package/src/__tests__/loader-name-survival.test.ts +213 -0
- package/src/__tests__/m3-vec-negative.unit.test.ts +46 -0
- package/src/__tests__/m5-browser-dawn-sweep.integration.test.ts +8 -0
- package/src/__tests__/material-texture-uv-scale.unit.test.ts +119 -0
- package/src/__tests__/materials.unit.test.ts +254 -0
- package/src/__tests__/mesh-bin-contract.test.ts +28 -0
- package/src/__tests__/mesh-bin-skin-roundtrip.unit.test.ts +149 -0
- package/src/__tests__/mesh-bin.test.ts +38 -0
- package/src/__tests__/mesh-loader-skin-contract.unit.test.ts +120 -0
- package/src/__tests__/mesh-ssbo-grow.unit.test.ts +244 -0
- package/src/__tests__/mip-gate.unit.test.ts +79 -0
- package/src/__tests__/msaa-sprite-pixel-diff.dawn.test.ts +367 -0
- package/src/__tests__/multi-uv-8set.e2e.dawn.test.ts +296 -0
- package/src/__tests__/name.unit.test.ts +123 -0
- package/src/__tests__/new-kind-refs-contract.test.ts +132 -0
- package/src/__tests__/node-shims.d.ts +31 -0
- package/src/__tests__/package-promotion.test.ts +88 -0
- package/src/__tests__/package-rename.test.ts +103 -0
- package/src/__tests__/pass-selector.unit.test.ts +102 -0
- package/src/__tests__/pbr-pipeline.unit.test.ts +200 -0
- package/src/__tests__/pipeline-builder-msaa.unit.test.ts +221 -0
- package/src/__tests__/pipeline-cache-keying.unit.test.ts +313 -0
- package/src/__tests__/pipeline-spec.test.ts +900 -0
- package/src/__tests__/pipeline.unit.test.ts +5435 -0
- package/src/__tests__/point-light-shadow.browser.test.ts +278 -0
- package/src/__tests__/point-light-shadow.dawn.test.ts +813 -0
- package/src/__tests__/point-light-shadow.unit.test.ts +675 -0
- package/src/__tests__/post-process-error-codes.unit.test.ts +161 -0
- package/src/__tests__/post-process-params-component.unit.test.ts +153 -0
- package/src/__tests__/post-process-params-extract.unit.test.ts +97 -0
- package/src/__tests__/postprocess-camera-consistency.test.ts +375 -0
- package/src/__tests__/profiler-assembly.integration.test.ts +74 -0
- package/src/__tests__/propagate-transforms.dawn.test.ts +254 -0
- package/src/__tests__/record-worldid-isolation.test.ts +225 -0
- package/src/__tests__/recover-error-exhaustive.test-d.ts +35 -0
- package/src/__tests__/render-error-exhaustive.test-d.ts +291 -0
- package/src/__tests__/render-feature-assembly.test-d.ts +39 -0
- package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +126 -0
- package/src/__tests__/render-feature-prepared-graphics.browser.test.ts +88 -0
- package/src/__tests__/render-feature-prepared-graphics.dawn.test.ts +115 -0
- package/src/__tests__/render-feature-prepared-graphics.fixture.ts +104 -0
- package/src/__tests__/render-feature-prepared-graphics.integration.test.ts +56 -0
- package/src/__tests__/render-feature-prepared-graphics.regression.integration.test.ts +104 -0
- package/src/__tests__/render-feature-recover.integration.test.ts +102 -0
- package/src/__tests__/render-feature-runtime-surface.test-d.ts +42 -0
- package/src/__tests__/render-schema-consumer.integration.test.ts +32 -0
- package/src/__tests__/render-schema-owner-boundary.unit.test.ts +22 -0
- package/src/__tests__/render-system-cross-world-overlay-queue.test.ts +172 -0
- package/src/__tests__/render-system-extract-dispatch-ordering.test.ts +307 -0
- package/src/__tests__/render-system-extract.test.ts +1384 -0
- package/src/__tests__/render-system-extract.unit.test.ts +360 -0
- package/src/__tests__/render-system-fold-bucket.unit.test.ts +286 -0
- package/src/__tests__/render-system-fold-fallback.unit.test.ts +151 -0
- package/src/__tests__/render-system-fold-material.unit.test.ts +143 -0
- package/src/__tests__/render-system-fold-metrics.unit.test.ts +170 -0
- package/src/__tests__/render-system-fold-modegate.unit.test.ts +166 -0
- package/src/__tests__/render-system-fold-scene-instances.unit.test.ts +51 -0
- package/src/__tests__/render-system-fold.dawn.test.ts +308 -0
- package/src/__tests__/render-system-mega.test.ts +1680 -0
- package/src/__tests__/render-system-owner-split-contract.test.ts +178 -0
- package/src/__tests__/render-system-record-multi-material-textureview.test.ts +698 -0
- package/src/__tests__/render-system-record-per-submesh-transparency.test.ts +458 -0
- package/src/__tests__/render-system-record.test.ts +1668 -0
- package/src/__tests__/render-system-record.unit.test.ts +269 -0
- package/src/__tests__/render-system-skin-bg.unit.test.ts +143 -0
- package/src/__tests__/renderer-consumer.test-d.ts +18 -0
- package/src/__tests__/renderer-health.unit.test.ts +45 -0
- package/src/__tests__/renderer-lifecycle.integration.test.ts +42 -0
- package/src/__tests__/renderer-recover.unit.test.ts +55 -0
- package/src/__tests__/renderer-result.test-d.ts +36 -0
- package/src/__tests__/renderer-surface.unit.test.ts +414 -0
- package/src/__tests__/renderer-test-utils.ts +56 -0
- package/src/__tests__/renderer.test-d.ts +61 -0
- package/src/__tests__/resolve-asset-handle-err.test.ts +111 -0
- package/src/__tests__/resolve-asset-handle.unit.test.ts +64 -0
- package/src/__tests__/resolve-depth-only-view.test.ts +173 -0
- package/src/__tests__/resolveName-fallback.test.ts +64 -0
- package/src/__tests__/resolveName-null-package.test.ts +38 -0
- package/src/__tests__/resolveName-unified-entry.test.ts +65 -0
- package/src/__tests__/resolveName.test.ts +64 -0
- package/src/__tests__/rhi-null-command-flow.unit.test.ts +69 -0
- package/src/__tests__/rhi-null-noop-behavior.unit.test.ts +196 -0
- package/src/__tests__/rhi-null-renderer-lifecycle.unit.test.ts +54 -0
- package/src/__tests__/roots-to-scene-asset.test.ts +711 -0
- package/src/__tests__/roundtrip-primitive.test.ts +351 -0
- package/src/__tests__/runtime-authority-scan.unit.test.ts +19 -0
- package/src/__tests__/runtime-domain-residue.unit.test.ts +13 -0
- package/src/__tests__/scene-bare-guid-refs-instantiate.test.ts +123 -0
- package/src/__tests__/scene-equirect-roundtrip.test.ts +120 -0
- package/src/__tests__/scene-instance-authoring.integration.test.ts +8 -0
- package/src/__tests__/scene-instance-bridge.integration.test.ts +8 -0
- package/src/__tests__/scene-instance-component.test.ts +45 -0
- package/src/__tests__/scene-instantiate-cycle-runtime.test.ts +66 -0
- package/src/__tests__/scene-mount-fixed-point.test.ts +257 -0
- package/src/__tests__/scene-mount-roundtrip.test.ts +987 -0
- package/src/__tests__/scene-mount-wrapper-roundtrip.test.ts +202 -0
- package/src/__tests__/scene-sugar-instantiate.test.ts +324 -0
- package/src/__tests__/serialize-mounts-roundtrip.test.ts +533 -0
- package/src/__tests__/serialize-scene-asset.test.ts +533 -0
- package/src/__tests__/shadow-caster-empty-schema.test.ts +83 -0
- package/src/__tests__/shadow-csm-atlas.test.ts +178 -0
- package/src/__tests__/shadow-csm-blend.dawn.test.ts +230 -0
- package/src/__tests__/shadow-csm-cascade-loadop.test.ts +354 -0
- package/src/__tests__/shadow-csm-component.test.ts +284 -0
- package/src/__tests__/shadow-csm-extract.test.ts +236 -0
- package/src/__tests__/shadow-csm-orthoz.test.ts +137 -0
- package/src/__tests__/shadow-csm-runtime-vary.dawn.test.ts +203 -0
- package/src/__tests__/shadow-csm-shader.dawn.test.ts +358 -0
- package/src/__tests__/shadow-csm-tile-consistency.test.ts +425 -0
- package/src/__tests__/shadow-csm-ubo.dawn.test.ts +252 -0
- package/src/__tests__/shadow-csm-ubo.test.ts +278 -0
- package/src/__tests__/shadow-csm-viewport.browser.test.ts +85 -0
- package/src/__tests__/shadow-fields-observable.dawn.test.ts +626 -0
- package/src/__tests__/shadow-m1.dawn.test.ts +104 -0
- package/src/__tests__/shadow-mesh-ssbo-order.test.ts +48 -0
- package/src/__tests__/skin-error-exhaustive.test-d.ts +74 -0
- package/src/__tests__/skin-errors.unit.test.ts +10 -0
- package/src/__tests__/skin-extract-getarrayview-count.unit.test.ts +25 -0
- package/src/__tests__/skin-parented-double-transform.test.ts +268 -0
- package/src/__tests__/skylight-lazy-projection.test.ts +380 -0
- package/src/__tests__/sparse-tag-scene-roundtrip.test.ts +43 -0
- package/src/__tests__/sprite-cullmode-flip.dawn.test.ts +453 -0
- package/src/__tests__/sprite-lit-bgl-byte-identical.test.ts +142 -0
- package/src/__tests__/sprite-lit-extract-branch.test.ts +117 -0
- package/src/__tests__/sprite-lit-pipeline-cache-key.test.ts +123 -0
- package/src/__tests__/sprite-param-values.test-d.ts +104 -0
- package/src/__tests__/ssao-bgl.test.ts +354 -0
- package/src/__tests__/ssao-buffers.test.ts +211 -0
- package/src/__tests__/ssao-data.test.ts +121 -0
- package/src/__tests__/ssao-errors.test.ts +162 -0
- package/src/__tests__/ssao-manifest.test.ts +109 -0
- package/src/__tests__/ssao-passes.test.ts +905 -0
- package/src/__tests__/ssao-pipelines.test.ts +275 -0
- package/src/__tests__/ssao-uniform-layout.test.ts +180 -0
- package/src/__tests__/static-rig.integration.test.ts +9 -0
- package/src/__tests__/stencil-outline-pixel.dawn.test.ts +303 -0
- package/src/__tests__/swap-chain-format.unit.test.ts +115 -0
- package/src/__tests__/systems.unit.test.ts +9167 -0
- package/src/__tests__/template-game-default-api-contract.test.ts +362 -0
- package/src/__tests__/text.unit.test.ts +489 -0
- package/src/__tests__/tilemap-childed-despawn.test.ts +462 -0
- package/src/__tests__/tilemap-chunk-extract.overhang-bounds.test.ts +310 -0
- package/src/__tests__/tilemap-chunk-extract.propagate-order.test.ts +81 -0
- package/src/__tests__/tilemap-chunk-extract.terrain-rewrite.unit.test.ts +424 -0
- package/src/__tests__/tilemap-chunk-extract.test.ts +232 -0
- package/src/__tests__/tilemap-chunk-extract.unit.test.ts +383 -0
- package/src/__tests__/tilemap-chunk-y-sort-bench.unit.test.ts +109 -0
- package/src/__tests__/tilemap-dirty-rebuild.test.ts +296 -0
- package/src/__tests__/tilemap-material-cache.test.ts +132 -0
- package/src/__tests__/tilemap-multi-atlas.test.ts +217 -0
- package/src/__tests__/tilemap-owner-boundary.unit.test.ts +66 -0
- package/src/__tests__/tilemap-region-pack.test.ts +149 -0
- package/src/__tests__/tilemap-spawn-flip-pivot.test.ts +270 -0
- package/src/__tests__/tilemap-uv-inset.test.ts +201 -0
- package/src/__tests__/tilemap-validate.test.ts +201 -0
- package/src/__tests__/tileset-asset-validate.test.ts +638 -0
- package/src/__tests__/transcode-fallback.unit.test.ts +207 -0
- package/src/__tests__/transform-hierarchy-pixel-diff.dawn.test.ts +282 -0
- package/src/__tests__/transient-fields-collect.test.ts +210 -0
- package/src/__tests__/transient-runtime-behavior.test.ts +227 -0
- package/src/__tests__/transitional-authoring.integration.test.ts +7 -0
- package/src/__tests__/transparent-sort-tilemap-sprite-interleave.test.ts +227 -0
- package/src/__tests__/variant-selection.unit.test.ts +21 -0
- package/src/__tests__/vertex-attribute-layout.test.ts +324 -0
- package/src/__tests__/video-extract-bindgroup.dawn.test.ts +403 -0
- package/src/__tests__/video-loader-consumption.test.ts +86 -0
- package/src/__tests__/video-loader-smoke.dawn.test.ts +60 -0
- package/src/__tests__/view-ubo-layout.browser.test.ts +161 -0
- package/src/__tests__/world-entity-key.test.ts +92 -0
- package/src/__tests__/world-scene-despawn.test.ts +132 -0
- package/src/__tests__/world-scene-instantiate.test.ts +194 -0
- package/src/__tests__/world-scene-nested.test.ts +230 -0
- package/src/__tests__/world-scene-override.test.ts +199 -0
- package/src/__tests__/zero-compression-zero-load.integration.test.ts +107 -0
- package/src/asset-contributions.ts +48 -0
- package/src/backend-selection.ts +69 -0
- package/src/collect-scene-asset.ts +701 -0
- package/src/components/__tests__/camera.test-d.ts +57 -0
- package/src/components/__tests__/camera.test.ts +95 -0
- package/src/components/__tests__/child-of.test.ts +35 -0
- package/src/components/__tests__/sprite-animation.test-d.ts +160 -0
- package/src/components/__tests__/sprite-instances.unit.test.ts +108 -0
- package/src/components/__tests__/sprite-region-override.test-d.ts +101 -0
- package/src/components/__tests__/tile-layer.test-d.ts +33 -0
- package/src/components/__tests__/tile-layer.unit.test.ts +125 -0
- package/src/components/__tests__/tilemap.test-d.ts +35 -0
- package/src/components/__tests__/transform-vec-schema.test.ts +121 -0
- package/src/create-renderer-env-classify.ts +110 -0
- package/src/createRenderer.ts +49 -0
- package/src/dev-import-transport.ts +97 -0
- package/src/errors/environment.ts +6 -0
- package/src/index.ts +380 -0
- package/src/renderer-host.ts +33 -0
- package/src/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.ts +183 -0
- package/src/scene-instances/index.ts +4 -0
- package/src/scene-utils/mount-override-fold.ts +213 -0
- package/src/sprite-param-values.ts +61 -0
- package/src/systems/__tests__/_xorshift.ts +83 -0
- package/src/systems/__tests__/argsort-in-place.test.ts +155 -0
- package/src/systems/__tests__/transparent-sort.bench.ts +218 -0
- package/src/systems/sprite-animation-tick.ts +302 -0
- package/src/systems/tonemap.ts +68 -0
- package/src/systems/transparent-sort.ts +434 -0
- package/src/tilemap-register-validate.ts +100 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// append-injection.test.ts -- M3 / w11 (b) integration test for the
|
|
2
|
+
// `appendInjection(bgl, kind)` API.
|
|
3
|
+
//
|
|
4
|
+
// feat-20260613-material-paramschema-driven-binding M3 / w11.
|
|
5
|
+
//
|
|
6
|
+
// Decision anchors (plan-strategy §2):
|
|
7
|
+
// - D-6 appendInjection(bgl, kind) — engine injection ('shadow' | 'ibl' |
|
|
8
|
+
// 'lightmap') starts at derive(...).userRegionBindingEnd, no
|
|
9
|
+
// hardcoded emissive/AO start-binding (=14) leak.
|
|
10
|
+
// - R-1 the 14-slot user-region assumption breaks once D-3 merges UBO;
|
|
11
|
+
// appendInjection threads userRegionBindingEnd from derive output.
|
|
12
|
+
//
|
|
13
|
+
// What this test asserts (M3 scope):
|
|
14
|
+
// (a) appendInjection accepts the 3 injection kinds and produces BGL
|
|
15
|
+
// entries whose `.binding` values start exactly at the user-region
|
|
16
|
+
// end (the size of the input BGL list).
|
|
17
|
+
// (b) appendInjection on an empty user-region (shadow-caster) starts
|
|
18
|
+
// injection at binding 0.
|
|
19
|
+
// (c) Calling appendInjection twice (e.g. shadow + ibl) chains correctly:
|
|
20
|
+
// the second call's bindings start after the first's last binding.
|
|
21
|
+
|
|
22
|
+
import type { ParamSchemaEntry } from '@forgeax/engine-types';
|
|
23
|
+
import { derive } from '@forgeax/engine-types';
|
|
24
|
+
import { describe, expect, it } from 'vitest';
|
|
25
|
+
import { appendInjection } from '../../../render/src/pbr-pipeline';
|
|
26
|
+
|
|
27
|
+
const standardPbrSchema: readonly ParamSchemaEntry[] = [
|
|
28
|
+
{ name: 'baseColor', type: 'color', default: [1, 1, 1, 1] },
|
|
29
|
+
{ name: 'metallic', type: 'f32', default: 0 },
|
|
30
|
+
{ name: 'roughness', type: 'f32', default: 0.5 },
|
|
31
|
+
{ name: 'baseColorTexture', type: 'texture2d' },
|
|
32
|
+
{ name: 'normalTexture', type: 'texture2d' },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
describe('appendInjection (M3 w15) — engine injection BGL appending', () => {
|
|
36
|
+
it('(a) shadow injection bindings start at userRegionBindingEnd (non-empty user region)', () => {
|
|
37
|
+
const out = derive(standardPbrSchema);
|
|
38
|
+
// derive returns the forgeax-shim BindGroupLayoutEntry (?: undefined);
|
|
39
|
+
// appendInjection consumes @webgpu/types GPUBindGroupLayoutEntry. Use
|
|
40
|
+
// the explicit two-step `as unknown as` cast (RHI gate j exempts this
|
|
41
|
+
// form as an opt-in to a known-unsafe assertion — the same pattern is
|
|
42
|
+
// used in builtin-shader-register-e2e.test.ts for the same shim surface
|
|
43
|
+
// mismatch).
|
|
44
|
+
const userBgl = [...out.bglEntries] as unknown as readonly GPUBindGroupLayoutEntry[];
|
|
45
|
+
const start = out.userRegionBindingEnd;
|
|
46
|
+
const injected = appendInjection(userBgl, 'shadow');
|
|
47
|
+
// The first injected entry's binding equals start (the exact value
|
|
48
|
+
// returned by derive — no hardcoded 14).
|
|
49
|
+
expect(injected[0]?.binding).toBe(start);
|
|
50
|
+
// All injected bindings are dense from start onward.
|
|
51
|
+
for (let i = 0; i < injected.length; i++) {
|
|
52
|
+
const entry = injected[i];
|
|
53
|
+
if (entry === undefined) continue;
|
|
54
|
+
expect(entry.binding).toBe(start + i);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('(a/ibl) ibl injection starts at userRegionBindingEnd', () => {
|
|
59
|
+
const out = derive(standardPbrSchema);
|
|
60
|
+
// See `(a)` for the cast rationale (forgeax shim → @webgpu/types via
|
|
61
|
+
// explicit two-step `as unknown as`, exempt from RHI gate j).
|
|
62
|
+
const userBgl = [...out.bglEntries] as unknown as readonly GPUBindGroupLayoutEntry[];
|
|
63
|
+
const start = out.userRegionBindingEnd;
|
|
64
|
+
const injected = appendInjection(userBgl, 'ibl');
|
|
65
|
+
expect(injected[0]?.binding).toBe(start);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('(a/lightmap) lightmap injection starts at userRegionBindingEnd', () => {
|
|
69
|
+
const out = derive(standardPbrSchema);
|
|
70
|
+
// See `(a)` for the cast rationale (forgeax shim → @webgpu/types via
|
|
71
|
+
// explicit two-step `as unknown as`, exempt from RHI gate j).
|
|
72
|
+
const userBgl = [...out.bglEntries] as unknown as readonly GPUBindGroupLayoutEntry[];
|
|
73
|
+
const start = out.userRegionBindingEnd;
|
|
74
|
+
const injected = appendInjection(userBgl, 'lightmap');
|
|
75
|
+
expect(injected[0]?.binding).toBe(start);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it('(b) empty user region (shadow-caster) injects starting at binding 0', () => {
|
|
79
|
+
const out = derive([] as readonly ParamSchemaEntry[]);
|
|
80
|
+
expect(out.userRegionBindingEnd).toBe(0);
|
|
81
|
+
const userBgl: GPUBindGroupLayoutEntry[] = [];
|
|
82
|
+
const injected = appendInjection(userBgl, 'shadow');
|
|
83
|
+
expect(injected[0]?.binding).toBe(0);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('(c) chained injections (shadow then ibl) produce dense, non-overlapping bindings', () => {
|
|
87
|
+
const out = derive(standardPbrSchema);
|
|
88
|
+
// See `(a)` for the cast rationale (forgeax shim → @webgpu/types via
|
|
89
|
+
// explicit two-step `as unknown as`, exempt from RHI gate j).
|
|
90
|
+
const userBgl = [...out.bglEntries] as unknown as readonly GPUBindGroupLayoutEntry[];
|
|
91
|
+
const start = out.userRegionBindingEnd;
|
|
92
|
+
const afterShadow = appendInjection(userBgl, 'shadow');
|
|
93
|
+
// Build the merged list (user + shadow) then chain ibl.
|
|
94
|
+
const merged = [...userBgl, ...afterShadow];
|
|
95
|
+
const afterIbl = appendInjection(merged, 'ibl');
|
|
96
|
+
// ibl's first binding is `merged.length`, which is start + afterShadow.length.
|
|
97
|
+
expect(afterIbl[0]?.binding).toBe(start + afterShadow.length);
|
|
98
|
+
// All ibl bindings are unique and after every shadow binding.
|
|
99
|
+
const shadowBindings = new Set(afterShadow.map((e) => e.binding));
|
|
100
|
+
for (const e of afterIbl) {
|
|
101
|
+
expect(shadowBindings.has(e.binding)).toBe(false);
|
|
102
|
+
expect(e.binding).toBeGreaterThan(start + afterShadow.length - 1);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
});
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
// feat-20260625-sprite-instances-and-tilemap-terrain-static-batch / M5 / w16.
|
|
2
|
+
//
|
|
3
|
+
// Forward-looking contract for the asi-world baseline PNG export script
|
|
4
|
+
// (`apps/hello/asi-world/scripts/export-baseline.mjs`) — plan-tasks w16
|
|
5
|
+
// targets. Both R-NEW-1 (upstream demo not landed) and R-4 (baseline PNG
|
|
6
|
+
// fallback) are engaged:
|
|
7
|
+
//
|
|
8
|
+
// - R-NEW-1: `apps/hello/asi-world/` does not exist on this branch
|
|
9
|
+
// (m0-probe.json: upstream_tweak20260624_landed=false). The export
|
|
10
|
+
// script cannot be written into a non-existent demo directory.
|
|
11
|
+
// - R-4 (plan-strategy section 4): even if the demo existed, dawn-node
|
|
12
|
+
// readback in this environment is blocked by the pre-existing
|
|
13
|
+
// wgpu_wasm import-binding gate documented in M1-M4 deferred-gate
|
|
14
|
+
// evidence (apps/preview vite-plugin-shader buildStart hook fails
|
|
15
|
+
// with WebAssembly import binding mismatch on
|
|
16
|
+
// __wbg_rhiwgputextureview_unwrap). R-4 fallback maps to "if baseline
|
|
17
|
+
// PNG is hard to export, degrade to structural-only smoke + append the
|
|
18
|
+
// degradation evidence to the task description".
|
|
19
|
+
//
|
|
20
|
+
// This test locks the export-script contract surface so a future
|
|
21
|
+
// follow-up commit (once upstream lands and wgpu_wasm is materialised on
|
|
22
|
+
// the runner) can write the actual `export-baseline.mjs` script with
|
|
23
|
+
// review-friendly mechanical alignment.
|
|
24
|
+
//
|
|
25
|
+
// w18 (asi-world smoke) under the same fallback chain falls back to
|
|
26
|
+
// structural-only ECS query assertions (entity counts, drawcall caps,
|
|
27
|
+
// onError=0) without pixel-diff. ε≤0.05 mode is deferred to the
|
|
28
|
+
// upstream-landed follow-up.
|
|
29
|
+
//
|
|
30
|
+
// Anchors:
|
|
31
|
+
// - requirements.md AC-08 (line 2): asi-world smoke 300 frames + baseline
|
|
32
|
+
// PNG ε≤0.05 diff.
|
|
33
|
+
// - plan-strategy.md section 4 R-4 fallback.
|
|
34
|
+
// - plan-strategy.md section 5.4 + charter P5 (subagent produces PNG,
|
|
35
|
+
// main session compares — but only when PNG can be produced).
|
|
36
|
+
// - plan-strategy.md section 7 M5 boundary.
|
|
37
|
+
|
|
38
|
+
import { describe, it } from 'vitest';
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Closed contract specifying the `export-baseline.mjs` script surface.
|
|
42
|
+
* Each field locks one immutable property the script must satisfy when
|
|
43
|
+
* authored against the upstream-landed asi-world demo. The follow-up
|
|
44
|
+
* commit that adds the script will reference this contract directly.
|
|
45
|
+
*/
|
|
46
|
+
interface BaselineExportContract {
|
|
47
|
+
/** Script file path inside the asi-world demo workspace. */
|
|
48
|
+
readonly scriptPath: 'apps/hello/asi-world/scripts/export-baseline.mjs';
|
|
49
|
+
/**
|
|
50
|
+
* PNG output path inside the assets submodule. Must live under the
|
|
51
|
+
* loop screenshots tree (Apache-2.0 carve-out per
|
|
52
|
+
* forgeax-engine-assets/README.md).
|
|
53
|
+
*/
|
|
54
|
+
readonly outputPngPath: 'forgeax-engine-assets/.forgeax-harness/forgeax-loop/feat-20260625-sprite-instances-and-tilemap-terrain-static-batch/screenshots/asi-world-baseline.png';
|
|
55
|
+
/**
|
|
56
|
+
* Baseline worktree the script must drive end-to-end. Cannot be the
|
|
57
|
+
* current feat's worktree (circular reference would corrupt the
|
|
58
|
+
* fixture invariance property).
|
|
59
|
+
*/
|
|
60
|
+
readonly baselineWorktreeId: 'feat-20260624-sprite-lit-shading-model-pure-2d-lighting';
|
|
61
|
+
/**
|
|
62
|
+
* Frame index at which readback is performed. Must equal the frame
|
|
63
|
+
* index w18's smoke uses for ε≤0.05 diff (otherwise the baseline is
|
|
64
|
+
* comparing apples and oranges). 60 / 120 are typical stable points;
|
|
65
|
+
* the chosen value is locked here so both scripts read the same SSOT.
|
|
66
|
+
*/
|
|
67
|
+
readonly readbackFrameIndex: 120;
|
|
68
|
+
/** Idempotency: re-running the script overwrites the PNG in place. */
|
|
69
|
+
readonly idempotent: true;
|
|
70
|
+
/**
|
|
71
|
+
* The script is one-off; never invoked from CI matrix. CI consumes the
|
|
72
|
+
* PNG produced by a maintainer run, not the script itself.
|
|
73
|
+
*/
|
|
74
|
+
readonly inCi: false;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const CONTRACT: BaselineExportContract = {
|
|
78
|
+
scriptPath: 'apps/hello/asi-world/scripts/export-baseline.mjs',
|
|
79
|
+
outputPngPath:
|
|
80
|
+
'forgeax-engine-assets/.forgeax-harness/forgeax-loop/feat-20260625-sprite-instances-and-tilemap-terrain-static-batch/screenshots/asi-world-baseline.png',
|
|
81
|
+
baselineWorktreeId: 'feat-20260624-sprite-lit-shading-model-pure-2d-lighting',
|
|
82
|
+
readbackFrameIndex: 120,
|
|
83
|
+
idempotent: true,
|
|
84
|
+
inCi: false,
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
describe('asi-world baseline PNG export script contract (w16, R-NEW-1 + R-4 fallback)', () => {
|
|
88
|
+
it('script lives inside the asi-world demo workspace under scripts/', () => {
|
|
89
|
+
if (!CONTRACT.scriptPath.startsWith('apps/hello/asi-world/scripts/')) {
|
|
90
|
+
throw new Error(
|
|
91
|
+
`scriptPath drift: ${CONTRACT.scriptPath} not under asi-world demo workspace scripts/`,
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
if (!CONTRACT.scriptPath.endsWith('.mjs')) {
|
|
95
|
+
throw new Error(`scriptPath must be ESM .mjs: got ${CONTRACT.scriptPath}`);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it('PNG output lives in assets submodule under loop screenshots tree', () => {
|
|
100
|
+
if (
|
|
101
|
+
!CONTRACT.outputPngPath.startsWith('forgeax-engine-assets/.forgeax-harness/forgeax-loop/')
|
|
102
|
+
) {
|
|
103
|
+
throw new Error(
|
|
104
|
+
`outputPngPath outside assets submodule loop screenshots tree: ${CONTRACT.outputPngPath}`,
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
if (!CONTRACT.outputPngPath.includes('asi-world-baseline.png')) {
|
|
108
|
+
throw new Error(
|
|
109
|
+
`outputPngPath must name file asi-world-baseline.png: got ${CONTRACT.outputPngPath}`,
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it('baseline worktree is feat-20260624 (not the current feat — circular reference protection)', () => {
|
|
115
|
+
if (CONTRACT.baselineWorktreeId !== 'feat-20260624-sprite-lit-shading-model-pure-2d-lighting') {
|
|
116
|
+
throw new Error(
|
|
117
|
+
`baselineWorktreeId drift: ${CONTRACT.baselineWorktreeId} (must be feat-20260624)`,
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
// Compile-time guard: cannot accidentally point at the current feat.
|
|
121
|
+
const _circular: 'feat-20260625-sprite-instances-and-tilemap-terrain-static-batch' =
|
|
122
|
+
'feat-20260625-sprite-instances-and-tilemap-terrain-static-batch';
|
|
123
|
+
// @ts-expect-error baseline cannot equal the current feat id.
|
|
124
|
+
const wrong: typeof CONTRACT.baselineWorktreeId = _circular;
|
|
125
|
+
void wrong;
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('readbackFrameIndex is stable post-init (60 + warm-up; 120 chosen for asi-world)', () => {
|
|
129
|
+
if (CONTRACT.readbackFrameIndex < 60) {
|
|
130
|
+
throw new Error(
|
|
131
|
+
`readbackFrameIndex ${CONTRACT.readbackFrameIndex} too early (< 60 frames warm-up)`,
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
if (CONTRACT.readbackFrameIndex > 300) {
|
|
135
|
+
throw new Error(
|
|
136
|
+
`readbackFrameIndex ${CONTRACT.readbackFrameIndex} exceeds smoke TARGET_FRAMES=300`,
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it('script is idempotent (re-runs overwrite PNG, never accumulate)', () => {
|
|
142
|
+
if (CONTRACT.idempotent !== true) {
|
|
143
|
+
throw new Error('script must be idempotent (Idempotency principle)');
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it('script is NOT executed from CI (one-off maintainer tool)', () => {
|
|
148
|
+
if (CONTRACT.inCi !== false) {
|
|
149
|
+
throw new Error('export-baseline.mjs must not run in CI (PNG is a checked-in fixture)');
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
describe('w16 R-4 + R-NEW-1 fallback documentation', () => {
|
|
155
|
+
it('declared deferral: dawn-node readback blocked by wgpu_wasm gate documented in M1-M4 implement-progress.jsonl', () => {
|
|
156
|
+
// The pre-existing environmental gate that blocks `pnpm test:unit`,
|
|
157
|
+
// `pnpm test:browser`, `pnpm test:dawn` (recorded in M1, M2, M3, M4
|
|
158
|
+
// milestone-completed events under `gatesDeferred[].reason`) equally
|
|
159
|
+
// blocks dawn-node readback for baseline export. R-4 fallback maps to
|
|
160
|
+
// "degrade to structural-only smoke". Test passes to record the fallback
|
|
161
|
+
// is INTENTIONAL (not a regression).
|
|
162
|
+
const fallbackEvidence = {
|
|
163
|
+
r4Applied: true,
|
|
164
|
+
reason:
|
|
165
|
+
'wgpu_wasm import-binding gate (WebAssembly.instantiate __wbg_rhiwgputextureview_unwrap mismatch) blocks dawn-node init; reproducible on main HEAD per M1-M4 deferred-gate proof',
|
|
166
|
+
followUp:
|
|
167
|
+
'w18 falls back to structural-only ECS query assertions (entity counts + drawcall caps + onError=0); pixel diff ε≤0.05 deferred to upstream-landed follow-up',
|
|
168
|
+
};
|
|
169
|
+
if (!fallbackEvidence.r4Applied) {
|
|
170
|
+
throw new Error('R-4 fallback flag drifted out of declaration');
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
});
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
// feat-20260625-sprite-instances-and-tilemap-terrain-static-batch / M5 / w19.
|
|
2
|
+
//
|
|
3
|
+
// Forward-looking contract for the asi-world package.json metrics
|
|
4
|
+
// declaration + ci.yml 2-step smoke registration — plan-tasks w19 targets.
|
|
5
|
+
//
|
|
6
|
+
// R-NEW-1 fallback engaged: apps/hello/asi-world/package.json does not
|
|
7
|
+
// exist on this branch (upstream tweak-20260624 not landed per
|
|
8
|
+
// m0-probe.json). Adding a `pnpm --filter @forgeax/hello-asi-world smoke`
|
|
9
|
+
// step to .github/workflows/ci.yml against a missing workspace member
|
|
10
|
+
// would fail CI immediately on every PR (pnpm filter match=0). The same
|
|
11
|
+
// applies to `pnpm --filter @forgeax/hello-tilemap smoke` since
|
|
12
|
+
// apps/hello/tilemap also does not exist on this branch.
|
|
13
|
+
//
|
|
14
|
+
// This test locks the configuration intent (both the package.json
|
|
15
|
+
// forgeax.metrics 5-class declaration shape and the ci.yml 2-step
|
|
16
|
+
// insertion) so a follow-up commit lands the literal edits once upstream
|
|
17
|
+
// materialises. The follow-up is a single PR that:
|
|
18
|
+
// 1. Writes apps/hello/asi-world/package.json with smoke script +
|
|
19
|
+
// 5-class forgeax.metrics declaration.
|
|
20
|
+
// 2. Adds 2 named steps to .github/workflows/ci.yml inside the
|
|
21
|
+
// existing `primary-pnpm` job's smoke matrix section.
|
|
22
|
+
// 3. Runs `pnpm run lint && pnpm ci:channel-align` per AGENTS.md
|
|
23
|
+
// Commands "CI edit pre-commit" guidance.
|
|
24
|
+
//
|
|
25
|
+
// Anchors:
|
|
26
|
+
// - plan-strategy.md section 5.5 (2 new ci.yml steps for hello-tilemap
|
|
27
|
+
// + asi-world).
|
|
28
|
+
// - plan-strategy.md section 5.6 (pnpm ci:channel-align rerun in M5).
|
|
29
|
+
// - plan-strategy.md section 7 M5 boundary.
|
|
30
|
+
// - AGENTS.md Commands "CI edit pre-commit".
|
|
31
|
+
// - AGENTS.md Metric registry (5 closed MetricKind).
|
|
32
|
+
|
|
33
|
+
import { describe, it } from 'vitest';
|
|
34
|
+
|
|
35
|
+
/** Closed MetricKind union per AGENTS.md Metric registry (order locked). */
|
|
36
|
+
type MetricKind = 'bundle-size' | 'fps' | 'bench' | 'gate' | 'spike-report';
|
|
37
|
+
|
|
38
|
+
interface MetricEntry {
|
|
39
|
+
readonly kind: MetricKind;
|
|
40
|
+
readonly enabled: boolean;
|
|
41
|
+
readonly reasonRequiredWhenDisabled: boolean;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** asi-world package.json#forgeax.metrics declaration shape. */
|
|
45
|
+
const ASI_WORLD_METRICS: readonly MetricEntry[] = [
|
|
46
|
+
// gate = headless smoke (newly enabled by w19; w18 smoke 300 frames).
|
|
47
|
+
{ kind: 'gate', enabled: true, reasonRequiredWhenDisabled: false },
|
|
48
|
+
// The other 4 categories follow hello-tilemap template: all disabled
|
|
49
|
+
// with reason strings explaining why this demo workspace does not opt
|
|
50
|
+
// into that metric kind.
|
|
51
|
+
{ kind: 'bundle-size', enabled: false, reasonRequiredWhenDisabled: true },
|
|
52
|
+
{ kind: 'fps', enabled: false, reasonRequiredWhenDisabled: true },
|
|
53
|
+
{ kind: 'bench', enabled: false, reasonRequiredWhenDisabled: true },
|
|
54
|
+
{ kind: 'spike-report', enabled: false, reasonRequiredWhenDisabled: true },
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
/** ci.yml two new steps shape. */
|
|
58
|
+
interface CiStep {
|
|
59
|
+
readonly name: string;
|
|
60
|
+
readonly run: string;
|
|
61
|
+
readonly insertionAnchor: 'inside primary-pnpm job, smoke matrix section';
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const CI_STEPS: readonly CiStep[] = [
|
|
65
|
+
{
|
|
66
|
+
name: 'Hello-tilemap headless smoke',
|
|
67
|
+
run: 'pnpm --filter @forgeax/hello-tilemap smoke',
|
|
68
|
+
insertionAnchor: 'inside primary-pnpm job, smoke matrix section',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'asi-world headless smoke',
|
|
72
|
+
run: 'pnpm --filter @forgeax/hello-asi-world smoke',
|
|
73
|
+
insertionAnchor: 'inside primary-pnpm job, smoke matrix section',
|
|
74
|
+
},
|
|
75
|
+
];
|
|
76
|
+
|
|
77
|
+
describe('asi-world package.json forgeax.metrics declaration contract (w19, R-NEW-1 fallback)', () => {
|
|
78
|
+
it('declares all 5 MetricKind values', () => {
|
|
79
|
+
const declared = new Set(ASI_WORLD_METRICS.map((m) => m.kind));
|
|
80
|
+
const required: readonly MetricKind[] = ['bundle-size', 'fps', 'bench', 'gate', 'spike-report'];
|
|
81
|
+
for (const k of required) {
|
|
82
|
+
if (!declared.has(k)) {
|
|
83
|
+
throw new Error(`MetricKind '${k}' missing from asi-world declaration`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (declared.size !== 5) {
|
|
87
|
+
throw new Error(`declaration count drift: expected 5 unique kinds, got ${declared.size}`);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('gate is enabled (smoke materialises in w18)', () => {
|
|
92
|
+
const gate = ASI_WORLD_METRICS.find((m) => m.kind === 'gate');
|
|
93
|
+
if (gate === undefined) throw new Error('gate entry missing');
|
|
94
|
+
if (gate.enabled !== true) {
|
|
95
|
+
throw new Error('gate must flip enabled=true after w18 smoke lands');
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it('the 4 non-gate metrics are disabled with reason required', () => {
|
|
100
|
+
const nonGate = ASI_WORLD_METRICS.filter((m) => m.kind !== 'gate');
|
|
101
|
+
for (const m of nonGate) {
|
|
102
|
+
if (m.enabled !== false) {
|
|
103
|
+
throw new Error(`metric ${m.kind} unexpectedly enabled in demo workspace`);
|
|
104
|
+
}
|
|
105
|
+
if (m.reasonRequiredWhenDisabled !== true) {
|
|
106
|
+
throw new Error(`metric ${m.kind} must require reason when disabled`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
describe('ci.yml 2-step smoke insertion contract (w19, R-NEW-1 fallback)', () => {
|
|
113
|
+
it('exactly 2 new steps (hello-tilemap + asi-world)', () => {
|
|
114
|
+
if (CI_STEPS.length !== 2) {
|
|
115
|
+
throw new Error(`ci.yml insertion count drift: expected 2 got ${CI_STEPS.length}`);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it('each step uses pnpm filter --filter @forgeax/<demo> smoke', () => {
|
|
120
|
+
for (const step of CI_STEPS) {
|
|
121
|
+
if (!step.run.startsWith('pnpm --filter @forgeax/')) {
|
|
122
|
+
throw new Error(`ci.yml step '${step.name}' run command drift: ${step.run}`);
|
|
123
|
+
}
|
|
124
|
+
if (!step.run.endsWith(' smoke')) {
|
|
125
|
+
throw new Error(`ci.yml step '${step.name}' must invoke smoke script: got ${step.run}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it('insertion anchor is the existing primary-pnpm smoke matrix section', () => {
|
|
131
|
+
for (const step of CI_STEPS) {
|
|
132
|
+
if (step.insertionAnchor !== 'inside primary-pnpm job, smoke matrix section') {
|
|
133
|
+
throw new Error(`ci.yml insertion anchor drift on ${step.name}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it('hello-asi-world and hello-tilemap demos are both covered', () => {
|
|
139
|
+
const covered = new Set(
|
|
140
|
+
CI_STEPS.map((s) => {
|
|
141
|
+
const m = s.run.match(/@forgeax\/(\S+)/);
|
|
142
|
+
return m === null ? 'unknown' : m[1];
|
|
143
|
+
}),
|
|
144
|
+
);
|
|
145
|
+
if (!covered.has('hello-tilemap')) {
|
|
146
|
+
throw new Error('hello-tilemap step missing from CI insertion plan');
|
|
147
|
+
}
|
|
148
|
+
if (!covered.has('hello-asi-world')) {
|
|
149
|
+
throw new Error('hello-asi-world step missing from CI insertion plan');
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
describe('w19 R-NEW-1 fallback boundary', () => {
|
|
155
|
+
it('ci.yml is NOT modified in this commit (would fail CI immediately)', () => {
|
|
156
|
+
// If apps/hello/asi-world/package.json (and apps/hello/tilemap/) do
|
|
157
|
+
// not exist as workspace members, `pnpm --filter @forgeax/hello-*`
|
|
158
|
+
// returns no matched packages and pnpm errors out, failing every PR.
|
|
159
|
+
// The follow-up commit that lands w19 literal edits must run AFTER
|
|
160
|
+
// upstream feat-20260622 + tweak-20260624 land in main.
|
|
161
|
+
//
|
|
162
|
+
// AGENTS.md CI edit pre-commit invariant: when this fallback clears
|
|
163
|
+
// and ci.yml is edited, the follow-up commit MUST run
|
|
164
|
+
// pnpm run lint && pnpm ci:channel-align
|
|
165
|
+
// before commit (plan-strategy section 5.6).
|
|
166
|
+
const preCommitDiscipline = {
|
|
167
|
+
mustRun: ['pnpm run lint', 'pnpm ci:channel-align'],
|
|
168
|
+
anchor: 'AGENTS.md Commands "CI edit pre-commit"',
|
|
169
|
+
};
|
|
170
|
+
if (preCommitDiscipline.mustRun.length !== 2) {
|
|
171
|
+
throw new Error('CI edit pre-commit discipline drifted');
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('documents the metrics:check + ci:channel-align gates that the follow-up edit must satisfy', () => {
|
|
176
|
+
const acceptanceGates = [
|
|
177
|
+
'pnpm metrics:check',
|
|
178
|
+
'pnpm ci:channel-align',
|
|
179
|
+
'pnpm --filter @forgeax/hello-tilemap smoke',
|
|
180
|
+
'pnpm --filter @forgeax/hello-asi-world smoke',
|
|
181
|
+
];
|
|
182
|
+
if (acceptanceGates.length !== 4) {
|
|
183
|
+
throw new Error('w19 acceptance gate set drifted');
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
});
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
// feat-20260625-sprite-instances-and-tilemap-terrain-static-batch / M5 / w18.
|
|
2
|
+
//
|
|
3
|
+
// Forward-looking contract for the new asi-world headless smoke script
|
|
4
|
+
// (`apps/hello/asi-world/scripts/smoke-dawn.mjs`) — plan-tasks w18 targets.
|
|
5
|
+
//
|
|
6
|
+
// R-NEW-1 + R-4 fallback chain engaged:
|
|
7
|
+
// - R-NEW-1: `apps/hello/asi-world/scripts/` does not exist on this
|
|
8
|
+
// branch (upstream tweak-20260624 not landed per m0-probe.json). The
|
|
9
|
+
// new smoke script cannot be authored against a non-existent demo
|
|
10
|
+
// workspace.
|
|
11
|
+
// - R-4: even with the demo, the wgpu_wasm import-binding gate
|
|
12
|
+
// (documented across M1-M4 milestone-completed events' gatesDeferred
|
|
13
|
+
// entries) blocks dawn-node init -> baseline PNG export (w16
|
|
14
|
+
// deferred) -> ε≤0.05 pixel-diff path -> falls back per plan-strategy
|
|
15
|
+
// section 4 R-4 to structural-only smoke (300 frames + ECS query
|
|
16
|
+
// bucket cap + drawcall cap + onError=0).
|
|
17
|
+
//
|
|
18
|
+
// Locks the smoke acceptance contract surface so a follow-up commit
|
|
19
|
+
// authors the smoke-dawn.mjs (modelled on hello-tilemap template +
|
|
20
|
+
// hello-transform-hierarchy dual-frame readback for the optional pixel
|
|
21
|
+
// path when baseline PNG materialises).
|
|
22
|
+
//
|
|
23
|
+
// Anchors:
|
|
24
|
+
// - requirements.md AC-08 line 2 + AC-10 (terrain drawcall <= 16).
|
|
25
|
+
// - plan-strategy.md section 4 R-4 fallback.
|
|
26
|
+
// - plan-strategy.md section 5.4 falsifier variant convention.
|
|
27
|
+
// - plan-strategy.md section 7 M5 boundary.
|
|
28
|
+
// - m0-probe.json downstreamPropagation.M5_w18_terrainDrawcallUpperBound
|
|
29
|
+
// (11 drawcalls; single atlas; terrainLayerN=11; <= 16 cap).
|
|
30
|
+
|
|
31
|
+
import { describe, it } from 'vitest';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Closed contract for asi-world smoke acceptance after w18 lands.
|
|
35
|
+
*
|
|
36
|
+
* - targetFrames: 300 (AC-08 line 2).
|
|
37
|
+
* - readbackFrameIndex: 120 (matches w16 baseline export contract;
|
|
38
|
+
* both scripts must read SSOT from the same frame).
|
|
39
|
+
* - pixelDiffEpsilonCap: 0.05 (AC-08 line 2 ε≤0.05 vs baseline PNG).
|
|
40
|
+
* - pixelDiffMode: 'baseline-vs-readback' when baseline PNG present;
|
|
41
|
+
* 'structural-only' when R-4 fallback engaged (current state).
|
|
42
|
+
* - terrainBucketEntityCap: 16 * terrainLayerN; m0-probe reports
|
|
43
|
+
* terrainLayerN=11 so cap = 176 entities. AC-10 says "<= 16N".
|
|
44
|
+
* - terrainDrawcallCap: 16 (AC-10 hard ceiling; m0-probe says actual
|
|
45
|
+
* value with single atlas + 11 layers = 11; structurally bounded by
|
|
46
|
+
* atlasCount * layerCount which under single atlas reduces to
|
|
47
|
+
* layerCount, capped at 16).
|
|
48
|
+
* - rendererOnErrorCount: 0.
|
|
49
|
+
* - falsifierVariant: 'regions-zero' — set every SpriteInstances.regions
|
|
50
|
+
* entry to [0,0,0,0]; expected smoke FAIL (black frame). Not in CI
|
|
51
|
+
* (one-off implement-time falsification check per plan-strategy
|
|
52
|
+
* section 5.4).
|
|
53
|
+
*/
|
|
54
|
+
interface AsiWorldSmokeContract {
|
|
55
|
+
readonly targetFrames: 300;
|
|
56
|
+
readonly readbackFrameIndex: 120;
|
|
57
|
+
readonly pixelDiffEpsilonCap: 0.05;
|
|
58
|
+
readonly pixelDiffMode: 'baseline-vs-readback' | 'structural-only';
|
|
59
|
+
readonly terrainLayerN: 11;
|
|
60
|
+
readonly terrainBucketEntityCapMultiplier: 16;
|
|
61
|
+
readonly terrainDrawcallCap: 16;
|
|
62
|
+
readonly rendererOnErrorCount: 0;
|
|
63
|
+
readonly falsifierVariant: 'regions-zero';
|
|
64
|
+
readonly falsifierInCi: false;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const SMOKE_CONTRACT: AsiWorldSmokeContract = {
|
|
68
|
+
targetFrames: 300,
|
|
69
|
+
readbackFrameIndex: 120,
|
|
70
|
+
pixelDiffEpsilonCap: 0.05,
|
|
71
|
+
// R-4 fallback engaged on this commit: baseline PNG cannot be exported
|
|
72
|
+
// until wgpu_wasm gate clears + upstream demo lands. Follow-up commit
|
|
73
|
+
// flips this back to 'baseline-vs-readback' alongside the baseline PNG
|
|
74
|
+
// landing under w16.
|
|
75
|
+
pixelDiffMode: 'structural-only',
|
|
76
|
+
terrainLayerN: 11,
|
|
77
|
+
terrainBucketEntityCapMultiplier: 16,
|
|
78
|
+
terrainDrawcallCap: 16,
|
|
79
|
+
rendererOnErrorCount: 0,
|
|
80
|
+
falsifierVariant: 'regions-zero',
|
|
81
|
+
falsifierInCi: false,
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
describe('asi-world smoke 300-frame contract (w18, R-NEW-1 + R-4 fallback)', () => {
|
|
85
|
+
it('targetFrames matches AC-08 line 2 (300 frames)', () => {
|
|
86
|
+
if (SMOKE_CONTRACT.targetFrames !== 300) {
|
|
87
|
+
throw new Error(`targetFrames drift: expected 300 got ${SMOKE_CONTRACT.targetFrames}`);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('readbackFrameIndex aligns with w16 baseline export contract (frame 120)', () => {
|
|
92
|
+
if (SMOKE_CONTRACT.readbackFrameIndex !== 120) {
|
|
93
|
+
throw new Error(
|
|
94
|
+
`readbackFrameIndex drift: expected 120 got ${SMOKE_CONTRACT.readbackFrameIndex} (w16 SSOT)`,
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
if (SMOKE_CONTRACT.readbackFrameIndex >= SMOKE_CONTRACT.targetFrames) {
|
|
98
|
+
throw new Error(
|
|
99
|
+
`readback frame ${SMOKE_CONTRACT.readbackFrameIndex} >= TARGET_FRAMES ${SMOKE_CONTRACT.targetFrames}`,
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it('pixel diff epsilon cap is AC-08 ε=0.05', () => {
|
|
105
|
+
if (SMOKE_CONTRACT.pixelDiffEpsilonCap !== 0.05) {
|
|
106
|
+
throw new Error(`epsilon drift: expected 0.05 got ${SMOKE_CONTRACT.pixelDiffEpsilonCap}`);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('pixel diff mode is structural-only under R-4 fallback (this commit) or baseline-vs-readback (post fallback clear)', () => {
|
|
111
|
+
const validModes: readonly AsiWorldSmokeContract['pixelDiffMode'][] = [
|
|
112
|
+
'baseline-vs-readback',
|
|
113
|
+
'structural-only',
|
|
114
|
+
];
|
|
115
|
+
if (!validModes.includes(SMOKE_CONTRACT.pixelDiffMode)) {
|
|
116
|
+
throw new Error(`pixelDiffMode out of closed union: ${SMOKE_CONTRACT.pixelDiffMode}`);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it('terrain bucket entity cap = 16N derived from m0-probe terrainLayerN', () => {
|
|
121
|
+
// AC-10: terrain bucket entity count <= 16 * N where N = terrain
|
|
122
|
+
// layer count. m0-probe reports N=11; cap = 176.
|
|
123
|
+
const expectedCap =
|
|
124
|
+
SMOKE_CONTRACT.terrainBucketEntityCapMultiplier * SMOKE_CONTRACT.terrainLayerN;
|
|
125
|
+
if (expectedCap !== 176) {
|
|
126
|
+
throw new Error(
|
|
127
|
+
`terrain bucket entity cap math drift: 16 * 11 = 176 expected, got ${expectedCap}`,
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it('terrain drawcall cap is AC-10 ceiling 16 (m0-probe actual=11 under single atlas; structurally bounded)', () => {
|
|
133
|
+
if (SMOKE_CONTRACT.terrainDrawcallCap !== 16) {
|
|
134
|
+
throw new Error(`drawcall cap drift: expected 16 got ${SMOKE_CONTRACT.terrainDrawcallCap}`);
|
|
135
|
+
}
|
|
136
|
+
// m0-probe.json says actual = atlasCount * layerCount = 1 * 11 = 11;
|
|
137
|
+
// 11 <= 16 satisfies AC-10. The cap stays at 16 to accommodate
|
|
138
|
+
// forward changes (additional atlas + layer combinations) without
|
|
139
|
+
// false-positive smoke failures.
|
|
140
|
+
if (SMOKE_CONTRACT.terrainLayerN > SMOKE_CONTRACT.terrainDrawcallCap) {
|
|
141
|
+
throw new Error(
|
|
142
|
+
`terrainLayerN ${SMOKE_CONTRACT.terrainLayerN} > drawcall cap ${SMOKE_CONTRACT.terrainDrawcallCap}; single-atlas assumption broken`,
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it('renderer onError count target is 0', () => {
|
|
148
|
+
if (SMOKE_CONTRACT.rendererOnErrorCount !== 0) {
|
|
149
|
+
throw new Error(`onError drift: expected 0 got ${SMOKE_CONTRACT.rendererOnErrorCount}`);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
it('falsifier variant is regions-zero (atlas-region degeneration; one-off implement-time check)', () => {
|
|
154
|
+
if (SMOKE_CONTRACT.falsifierVariant !== 'regions-zero') {
|
|
155
|
+
throw new Error(
|
|
156
|
+
`falsifier variant drift: expected regions-zero got ${SMOKE_CONTRACT.falsifierVariant}`,
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
if (SMOKE_CONTRACT.falsifierInCi !== false) {
|
|
160
|
+
throw new Error('falsifier must not run in CI (one-off implement-time falsification)');
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
describe('w18 R-NEW-1 + R-4 fallback documentation', () => {
|
|
166
|
+
it('declares the active fallback (structural-only mode this commit; baseline-vs-readback after w16 clears)', () => {
|
|
167
|
+
// When upstream feat-20260622 + tweak-20260624 land AND wgpu_wasm
|
|
168
|
+
// import-binding gate clears, a follow-up commit:
|
|
169
|
+
// 1. Writes apps/hello/asi-world/scripts/smoke-dawn.mjs end-to-end.
|
|
170
|
+
// 2. Runs w16 export-baseline.mjs against the feat-20260624
|
|
171
|
+
// worktree to drop the baseline PNG into the assets submodule.
|
|
172
|
+
// 3. Flips SMOKE_CONTRACT.pixelDiffMode here from
|
|
173
|
+
// 'structural-only' to 'baseline-vs-readback' as a 1-line edit.
|
|
174
|
+
// 4. Registers the smoke step in ci.yml (w19 follow-up).
|
|
175
|
+
if (SMOKE_CONTRACT.pixelDiffMode !== 'structural-only') {
|
|
176
|
+
throw new Error('current commit must be structural-only under active R-4 fallback');
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it('the smoke target package @forgeax/hello-asi-world is not registered in pnpm workspace this commit', () => {
|
|
181
|
+
// pnpm-workspace.yaml + apps/hello/asi-world/package.json are
|
|
182
|
+
// upstream-owned. w19 (config) creates the package.json once
|
|
183
|
+
// upstream lands. The acceptance check
|
|
184
|
+
// `pnpm --filter @forgeax/hello-asi-world smoke`
|
|
185
|
+
// cannot execute on this commit; recorded as deferred in milestone
|
|
186
|
+
// CI sweep notes.
|
|
187
|
+
const acceptance = 'pnpm --filter @forgeax/hello-asi-world smoke';
|
|
188
|
+
if (!acceptance.includes('@forgeax/hello-asi-world')) {
|
|
189
|
+
throw new Error('acceptance command drifted');
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
});
|