Skip to content

chore(deps): @babylonjs 9.16.0 + manifold-3d 3.5.1#375

Draft
RaananW wants to merge 6 commits into
masterfrom
raananw-deps-babylon-9-15-manifold-3-5
Draft

chore(deps): @babylonjs 9.16.0 + manifold-3d 3.5.1#375
RaananW wants to merge 6 commits into
masterfrom
raananw-deps-babylon-9-15-manifold-3-5

Conversation

@RaananW

@RaananW RaananW commented Jul 7, 2026

Copy link
Copy Markdown
Member

🛑 BLOCKED / PARKED — do not merge, do not recapture goldens

Decision: HOLD the entire bump. Kept as a draft until upstream Babylon.js fixes the reference-engine regressions below. No goldens were recaptured and no ceilings were changed. Bundle-size is green and Lite's own engine code is unchanged — the only thing blocking is the reference engine (what Lite is diffed against) changing behavior.

Update — bumped 9.15.0 → 9.16.0 and re-tested. 9.16 (plus the harness stopgap side-effect imports committed here) resolved the original 10 render-blocked scenes (WebGPU shadow sampler scene4/18/22/66/72/140, .babylon activeCamera scene24/145, GS-depth scene127/128 — all now pass in isolation). However, a full isolated 9.16 parity run reveals the pure-split blast radius is much wider than the originally-identified 12: 24 reference-engine scenes still fail, all on the same root cause (the 9.15/9.16 pure/non-pure tree-shaking split dropping transitive side-effect registrations). Each was re-run in its own fresh browser to rule out REUSE_BROWSER cascade — 24 genuinely fail, only scene221 passes.

Blocking scenes — 24 failures under 9.16, grouped by root cause:

  • glTF file-loader plugin not registered ×7 — reference glTF scene never renders (canvas never ready, 60s capture timeout): scene30, scene33, scene176, scene212, scene241, scene244, scene253
  • Shadow registrations dropped ×5 — scene65, scene116 (MAD 0.29), scene141, scene214, scene215
  • Frame-graph post-process blocks not registered ×3 — scene142, scene143, scene144
  • Thin instances ×2 — scene17, scene165 (MAD 27.8)
  • .babylon Sponza (activeCamera-null family) ×1 — scene9 (MAD 73.7)
  • Character controller / moving platform ×2 — scene104, scene105
  • Composite gizmos ×1 — scene222 (MAD 11.2)
  • RTT override ×1 — scene110
  • GS GPU picking ×1 — scene129
  • PBR clearcoat (known intended 9.16 change) ×1 — scene19

Revive criteria: upstream Babylon.js restores the dropped side-effect registrations in its non-pure entry points (glTF glTFFileLoader, shadow, frame-graph post-process, gizmo) so format/feature entry points transitively trigger them again. Making 9.16 green from the Lite side alone would require adding fragile stopgap side-effect imports across all ~24 scenes — not a durable fix. Once upstream lands the fix: recapture the golden-less scenes & re-run the full parity suite under the isolated lock on LAB_TEST_PORT=5379.


Summary

High-risk runtime / reference dependency bumps (Group 3 of 3 parallel dep updates).

Package From To Where
@babylonjs/core 9.5.0 9.16.0 lab
@babylonjs/loaders 9.5.0 9.16.0 lab
@babylonjs/materials 9.10.1 9.16.0 lab
@babylonjs/addons 9.8.0 9.16.0 lab
babylonjs-gltf2interface 9.5.0 9.16.0 lab
@babylonjs/havok 1.3.12 1.3.13 lab
manifold-3d 3.4.0 3.5.1 babylon-lite runtime + lab devDep

⚠️ This touches the parity REFERENCE engine (@babylonjs/core is what Babylon-Lite is diffed against) and a Lite runtime dep (manifold-3d, bundle-size sensitive). All @babylonjs/* kept on a single 9.16.0 version to avoid mismatches. Touches pnpm-lock.yamlexpect conflicts with the sibling tooling / TS6-Vite8 dep PRs.

Root cause — Babylon.js pure/non-pure tree-shaking split

9.15/9.16 split each module into a side-effect-free .pure.js plus a thin non-pure .js that applies the Register*() side effect. Aggregate barrels / format entry points now resolve the .pure variant, so legacy static registrations no longer arrive transitively. Example (proven by diffing 9.5.0 vs 9.16.0 loaders): loading a .gltf needs two registrations — the 2.0 parser factory (still triggered by glTF/2.0) and the SceneLoader .gltf/.glb file-loader plugin (moved into non-pure glTF/glTFFileLoader.js, no longer pulled by glTF/2.0). In 9.5.0 glTF/2.0/glTFLoader.js statically imported ../glTFFileLoader.js, which registered the plugin at module load; 9.16 decouples them.

Harness fixes included in this branch (behavior-preserving)

  • acquireBjsPage() REUSE_BROWSER data-capture reuse — the 20 physics/picking/gizmo specs now reuse the worker-owned context/page under REUSE_BROWSER instead of popping a window per spec.
  • 10 stopgap side-effect imports restoring the originally-blocked scenes under 9.16: scene4/18/22/66/72/140 (shadow texture), scene24/145 (parser), scene127/128 (WGSL depth shaders). Temporary until upstream restores registrations.

Bundle size — ✅ GREEN

pnpm build:bundle-scenes regenerated the per-scene manifests (committed; aggregate manifest.json stays gitignored). Counted rawKB/gzipKB unchanged; manifold 3.5.1 wasm growth lands in ignoredRawKB, so no ceiling is affected. bundle-size.spec.ts passes. No ceilings changed.

Guardrails honored

  • ❌ No golden reference screenshots edited (6 committed goldens that got regenerated during runs were reverted; working tree clean).
  • ❌ No bundle-size ceilings raised.
  • ✅ Per-scene manifests committed; aggregate manifest.json left gitignored.
  • 🚫 pnpm test:perf not run (agent-forbidden).

Decision

The failures are upstream reference-engine changes on golden-less scenes (pure-split registration drops), not Lite regressions. User decision: HOLD — wait for upstream Babylon.js to restore the dropped registrations in its non-pure entry points, then recapture goldens and re-run parity. Parked as draft.

…d-3d to 3.5.1

Bumps the high-risk runtime/reference dependencies:
- @babylonjs/core/loaders/materials/addons 9.5.0/9.10.1/9.8.0 -> 9.15.0
- babylonjs-gltf2interface 9.5.0 -> 9.15.0
- @babylonjs/havok 1.3.12 -> 1.3.13
- manifold-3d 3.4.0 -> 3.5.1 (runtime dep of babylon-lite + devDep of lab)

@babylonjs/core is the parity REFERENCE engine; manifold-3d is a Lite
runtime dep. Refreshes pnpm-lock.yaml and the per-scene bundle manifests
(manifold wasm grew ~223KB but lands in ignoredRawKB, so counted rawKB/
gzipKB and all bundle-size ceilings stay green).

BJS reference-harness fixes for 9.15's pure/non-pure tree-shaking split
(side-effect registrations no longer come in transitively): add specific
non-pure side-effect imports so the reference scenes still self-register
their features. Restores 19 golden-less reference scenes:
- MeshBuilder (Builders/sphereBuilder, boxBuilder): scene6/8/10/19/23/66/140
- glTF file loader (@babylonjs/loaders/glTF): scene41/47/146/147/148/149/171/174/175
- InstancedMesh: scene34/39
- StandardMaterial: scene127/128/129
- UniversalCamera + StandardMaterial for .babylon deserialization: scene24

Known-unresolved 9.15 reference-engine regressions (golden-less scenes,
NOT worked around; goldens/ceilings untouched) — see PR body.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@bjsplat

bjsplat commented Jul 7, 2026

Copy link
Copy Markdown

Lab - Static Site

Open deployed site

Build 20260707.8 - merge @ f312de1

@bjsplat

bjsplat commented Jul 7, 2026

Copy link
Copy Markdown

📋 parity — Test Report

View full Playwright report

Build 20260707.8 · merge @ f312de1

RaananW and others added 3 commits July 9, 2026 14:28
9.16.0 ships BabylonJS PR #18671, which restores the side-effect
registrations dropped by the 9.15 pure/non-pure tree-shaking split:
- ShadowGenerator now calls RegisterRenderTargetTexture() in its
  constructor, fixing the WebGPU PCF/PCSS "Sampler shadowTexture0Sampler
  not found in the material context" error (scene4/18/22/66/72/140).
- The .babylon file loader now calls RegisterCamera() + falls back to
  scene.cameras[0], fixing scene.activeCamera being null after
  AppendAsync (scene24/145).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…n-9-15-manifold-3-5

# Conflicts:
#	lab/public/bundle/manifest/scene113.json
#	lab/public/bundle/manifest/scene114.json
#	lab/public/bundle/manifest/scene115.json
#	lab/public/bundle/manifest/scene142.json
#	lab/public/bundle/manifest/scene155.json
#	lab/public/bundle/manifest/scene36.json
#	lab/public/bundle/manifest/scene49.json
#	lab/public/bundle/manifest/scene91.json
…ffect imports

Harness robustness + partial 9.16 pure-split mitigation for the parked
@BabylonJS 9.16 bump (PR #375, still BLOCKED/PARKED).

- Add acquireBjsPage(browser) helper mirroring captureGolden's REUSE_BROWSER
  reuse logic, and refactor the 20 physics/picking/gizmo data-capture specs to
  use it so headed local runs reuse one window per worker instead of popping a
  window per spec.
- Add stopgap side-effect imports to 10 reference scenes whose transitive
  registrations were dropped by the Babylon.js 9.15/9.16 pure/non-pure
  tree-shaking split (scene4/18/22/66/72/140 shadow texture, scene24/145
  parser, scene127/128 WGSL depth shaders). These are temporary until upstream
  BJS restores the registrations in its non-pure entry points.
- Commit regenerated per-scene bundle manifests (no ceiling changes).

Note: a full isolated 9.16 parity run still shows 24 reference-engine scenes
failing on the same pure-split root cause (glTF file-loader, shadow,
frame-graph post-process, gizmo registrations). Bump remains parked pending
upstream fixes; no goldens or ceilings were modified.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@RaananW RaananW changed the title chore(deps): @babylonjs 9.15.0 + manifold-3d 3.5.1 chore(deps): @babylonjs 9.16.0 + manifold-3d 3.5.1 Jul 9, 2026
Resolve lab/package.json: keep our @BabylonJS 9.16.0 / manifold-3d 3.5.1 /
gltf2interface 9.16.0 bumps; take master's typescript ^6.0.3 (sibling TS6 PR #376).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@bjsplat

bjsplat commented Jul 9, 2026

Copy link
Copy Markdown

📋 parity — Test Report

View full Playwright report

Build 20260709.8 · merge @ 2e0de5f

scene147/scene41 gzip sizes drifted sub-0.1KB from the TypeScript 6 merge
(TS6 emit); rawKB unchanged, no ceiling impact. Fixes bundle manifest
validation on CI.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@bjsplat

bjsplat commented Jul 9, 2026

Copy link
Copy Markdown

Lab - Static Site

Open deployed site

Build 20260709.11 - merge @ 24ff2c2

@bjsplat

bjsplat commented Jul 9, 2026

Copy link
Copy Markdown

📋 parity — Test Report

View full Playwright report

Build 20260709.11 · merge @ 24ff2c2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants