# M12-03D Status status: done task: append one dependency closure through WASM Main in one transaction updated: 2026-08-17 America/New_York enablingTask: false parityStateChange: false ## Scope The browser Worker validates a source-hash-bound APPEND binding and sends one Object closure to the authoritative Blender Main. Blender's native link/append context recursively imports the Object, Mesh, Material, and packed Image, verifies that every resulting ID is local and writable, and publishes one SceneIR revision. The existing Main history transaction is used for rollback and undo/redo; the source is never treated as a linked read-only snapshot. ## Evidence - `EM_CACHE=/home/mes123456/workinf_Blender_Wasm/.emcache cmake --build build_web_blender6 --target web_engine -- -j2` passed; the generated module exports `_web_engine_append_library_object`. - `npm --prefix web run typecheck` passed. - `WEB_TEST_PORT=5194 npm --prefix web run test:library-main-append` passed in Chromium. - The test opens a clean `.blend`, appends the desktop fixture closure through `WebEngineClient`, verifies `transactionCount=1`, four `LOCAL_MAIN` mappings, stable Object/Mesh/Material/Image IDs, the material-to-image dependency, and a single revision increment. - A stale base revision returns `REVISION_CONFLICT`; a second append colliding with the local IDs returns `ASSET_MANIFEST_INVALID` without changing the revision. Undo removes the closure, redo restores it, and a saved buffer reopens with the same local image and Object dependency. - The Worker closure check accepts both the reader's `material.imageIds` representation and the Blender node-level `imageId` representation; it does not infer ownership from a preview. ## Artifact hashes - test: `7130453cbc81f22eb1bcf598ff3745672ac8177dccb11cef667f5b68b43e87c6` - worker: `e3bb430e401144bf17cdcbd0de13cde0a4f904f1f9ff9d5b10a73d90f0d4c648` - protocol: `bfd98561cbe797d7b8f07c92c53a25460c839a64ab7222b7795cf58d54dff8d7` - source `.blend`: `5b60d02926efd588a6ca300ba31414cdf37dbc48786c17b383a70319057c0606` - clean target `.blend`: `9b1ecbcc3d7f8079ee5469de64193ffcaa0a7b01e0f2ac340bbb18aa88734a63` - WASM JS: `9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed` - WASM binary: `7821f408687e455c6f4e185fc3741c199c1c60d409836a2fe1b32f521d81e0ea` - Main append API: `5a71260c542fa559f73c6b82e23e72d39bd2844f5ebe12c6edc809a49d79791b` - Main append implementation: `d0c484ab62e6ec051c8c2f67c49d750a456578aaccc2aa4f461026307af0db95` ## Next task `M12-03E`: append undo/redo/save/reopen and the desktop canonical report must agree. ## Rollback Remove the M12-03D Worker/e2e test, package command, WASM append export and Main append entrypoint, restore the material closure check, and move the machine queue back to `M12-03D`. No V1 release ledger rollback is required.