/** * Lane E selftests — asset sanity. * Lane E owns this file. Other lanes: yours is js/tests/.test.js. * * Why this exists when build_yard_assets.py already verifies: the Blender side * re-imports every GLB and asserts dims, tri budget and node names, but it * CANNOT catch an axis error. Blender exports Z-up→Y-up and imports Y-up→Z-up, * so a broken `export_yup` flips back on the way in and round-trips green. Only * a native glTF reader can prove the file is right, and this is the only one in * the repo. So this suite targets the failures that silently break other lanes: * 1. the GLB loads at all through the vendored loader; * 2. it's in metres with its height on +Y — a model exported in centimetres * looks fine alone and absurd next to a person; * 3. the nodes other lanes query by name survived the export. glTF has no * "empty" type, so anchors arrive as bare Object3D and are exactly what an * exporter prunes. * * Standalone version with a fuller report: tools/assetcheck/. */ import * as THREE from '../../vendor/three.module.js'; import { assert } from '../testkit.js'; // GLTFLoader is imported DYNAMICALLY, below, and that is deliberate. // // Every three.js addon imports the bare specifier `three`, which only resolves // via an