3.1 KiB
M12-07C Status
status: done task: Web-to-desktop OBJ round-trip and loss report updated: 2026-08-18 America/New_York enablingTask: false parityStateChange: false
Scope
The bounded TypeScript OBJ protocol parses positive and negative indices, position/UV/normal streams,
objects/groups/faces, MTL map_Kd, and stable budgets; it serializes a deterministic Web OBJ/MTL pair
and emits a machine loss report for unbound texture origins. A Chromium Worker consumes the M12-07B
double-object fixture, then a new pinned Blender 5.2 process imports the Web output with split groups.
Evidence
node --test web/tests/unit/obj-import.test.mjspassed 3/3 for negative-index resolution, deterministic serialization, bound/unbound texture loss, malformed face arity, and index range.CHROME_PATH=/usr/bin/google-chrome-stable WEB_TEST_PORT=5460 node_modules/.bin/playwright test --config playwright.config.ts --workers=1 tests/e2e/obj-web-roundtrip.spec.tspassed 1/1 in Chrome 150. Browser output has 2 objects, 6 positions/UVs, 2 normals, 2 faces, 2 materials; bound texture loss is zero and missing texture loss contains twoOBJ_TEXTURE_ORIGIN_UNRESOLVEDwarnings.- The test writes the browser OBJ/MTL and texture to an isolated directory, invokes pinned Blender
wm.obj_import, and compares 2 objects, 2 triangles, UVMap presence, and one material per object. node tools/web/check-obj-web-roundtrip.mjspassed the exact golden and artifact hash gate:obj-web-roundtrip-ok objects=2 triangles=2 lossWarnings=2 desktopExact=true next=M12-07D.npm --prefix web run typecheck, Python compile, andgit diff --checkpassed. Package hash remains frozen; OBJ Web capability is still bounded and does not change N-023 parity.
Artifact Hashes
- parent manifest:
785f593271058098704498cb0a7c948305087f1a83bf8f29b6e6fb9fe9341926 - protocol:
e7240af65e0d90f3ee690a4e3f391416fe4744ac6c46edc8ac0d72386857cab9 - Worker:
bf1fcc60ec318cf6c2747d44f4af741b46f284cf5f5307e142f0ab6d50b14302 - desktop importer:
9f1eb4ab679255a0f1f596696e8befc33a4e30c0cbe6ea423e2aaa0314cec22d - checker:
9d53014f4b89f786c516ebe8d300030c2728e4a36a86a5ef136b2769a12ac96b - unit/Chromium:
485a669be5de8e370e9b5a3239357b028ba61ca5c4076819cd46aed52a5c210a/93785b4017ba14b007926b0f82442f8ae5968f242a2a762e5f5dc77d36110f5b - report:
45eaffc9c2e50c84b557d13ebbe9f4f53b63e19e00bc69b272491ef6366dff81 - fixture OBJ/MTL/PNG:
4ed3dced8445b03754cd3916ae2e8cf0dff85e6a5882f1c6f0a4a4e4c5251f6a/80338f569c67a8b1616515ba878ffc72b26e93ef2e8c361131023fb14f132f5f/44e4fd08bdda8403908349e2a62dcf103ce2d0851099fc61cd868d65ddbef78c - package:
cfb232baa494ff59f6c8d65514a08c86332ee9354350b2a0392b6f932a7ee42c - manifest:
0c639954900b1fcc3b8285d0f4c0ecfa5807df6cde6d1f2cd3b59c4636d71674
Next Task
M12-07D: split STL binary and ASCII capability declarations.
Rollback
Remove the OBJ protocol, Worker, desktop importer, unit/E2E tests, checker, report, manifest, and this status entry. Restore M12-07B as the queue tail and move the machine queue back to M12-07C. No parity ledger rollback is required.