56 lines
3.1 KiB
Markdown
56 lines
3.1 KiB
Markdown
# 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.mjs` passed 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.ts` passed 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 two `OBJ_TEXTURE_ORIGIN_UNRESOLVED` warnings.
|
|
- 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.mjs` passed 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, and `git diff --check` passed. 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.
|