# M12-06B Status status: done task: compare desktop GLB topology, attributes, materials, nodes, and animations in Web updated: 2026-08-18 America/New_York enablingTask: true parityStateChange: false ## Scope The production TypeScript GLB parser now exposes a canonical bounded semantic surface for the five M12-06A desktop fixtures. It validates referenced accessors, nodes, materials, textures, skins, and animation samplers before returning primitive topology, sorted attributes, PBR material fields, node hierarchy/TRS, skin bindings, and animation channels. A field-level comparator checks that Web semantics exactly match the pinned Blender 5.2 desktop report. Both Node and a real Chromium Worker consume the exact committed GLB bytes and verify each source SHA-256 before comparing all five domains. The existing summary import API remains compatible. This task does not create Blender Main data or expose GLB in the file picker; the runtime route remains `BLOCKED_UNTIL_MAIN_PERSISTENCE` until M12-06C proves save/reopen and stable IDs. ## Evidence - `node --test web/tests/unit/glb-desktop-import.test.mjs` passed 3/3: five exact fixture imports, separate domain assertions, and a stable field-level PBR mismatch. - `node tools/web/check-glb-desktop-import.mjs` passed: 5 fixtures, 5 compared domains, exact desktop/Web canonical hashes, deterministic report regeneration, and the blocked route state. - `CHROME_PATH=/usr/bin/google-chrome-stable WEB_TEST_PORT=5425 node_modules/.bin/playwright test --config playwright.config.ts --workers=1 tests/e2e/glb-desktop-import.spec.ts` passed 1/1 from the `web/` directory using Chrome 150. The Worker verified source SHA-256 and all five semantic comparisons. - `npm --prefix web run typecheck`, `npm --prefix web run test:status-consistency`, and `git diff --check` passed. The package hash remains `cfb232baa494ff59f6c8d65514a08c86332ee9354350b2a0392b6f932a7ee42c`. ## Artifact Hashes - parent manifest: `e3554a1e739cbe3f217f6169130532365538b0c0eafbb97afc58d4d56c4287cb` - protocol: `45d9a7912c4a59a552789a8ea0dfaff5f1849f8d213f14d238de024b77acdb0d` - generator: `6f97527b7da04c7b4f9b09c48b9f367d1270db9f7820498d33832a80754436c2` - checker: `804a4b5545d95d7ab1ba265469a981d0a10b71dab36f0c96283eb73b401443d2` - unit: `6bf2a96b3e43e5fae93589ea5dcf98e7a69b10266378e442988198925286a8d8` - Chromium Worker: `eb32049631113270fb62acb7ae9379e8ff9a03e38086db2fa309c6891cd707bf` - Chromium test: `fa3e06419c918406f24b5a4260523bd94cfe729a84786e9434517fdfed624d45` - Web import report: `79933888cc5aa2d1e3639ec349ca4c31d028fe89f751ebb8d4342f06d15ecfc2` - manifest: `5275310394b34726a05b30ab67658e1381662dddf9163a97cb02f47f646a8fa4` ## Next Task `M12-06C`: create authoritative Main data from the imported GLB, save `.blend`, reopen it, and compare stable IDs. ## Rollback Remove the canonical Web import surface, report generator/checker, Node/Chromium tests, report, manifest, and this status entry. Restore M12-06A as the queue tail and move the machine queue back to `M12-06B`. No parity ledger rollback is required.