# M16-GAP-00010:Lattice data-block LOCAL_EXACT slice - `task`: `M16-GAP-00010` - `parent`: `M16-GAP-00009` - `status`: `done` - `gap`: `datablock:Lattice` - `ownerFamily`: `RNA_DATABLOCK` - `targetImplementationClass`: `LOCAL_EXACT` ## 目标 让同一个 Lattice fixture 在 Blender desktop 和 WASM/Main 中得到一致的点阵/形变数据,并在 save/reopen 后保持一致。 ## 输入与范围 - Fixture:`tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend` - 生产入口:`blender-5.2.0/source/blender/web_engine/`、`web/app/src/vendor/blender/` - 检查器:`tools/web/check-generated-gap.mjs`、`tools/web/generated/M16-GAP-00010.py` - 做:Lattice 数据读取、desktop/WASM 对标、save/reopen 和结构化报告。 - 不做:其他 data-block、UI 编辑器、Firefox/WebKit 或完整 Lattice 编辑工具。 ## 子任务门 | 门 | 唯一交付 | 通过条件 | | --- | --- | --- | | L-C | Lattice 字段/稳定 ID/错误码契约 | schema 和 malformed/unsupported 负例固定 | | L-D | Blender desktop fixture/report | 同一 fixture 生成可重跑 report 和 hash | | L-W | WASM/Main reader | 生产入口读取同一 fixture,输出字段与 desktop 对齐 | | L-R | save/reopen | 新 Main 重开后点阵/形变和 revision 不变 | | L-E | 证据交接 | comparator、manifest、status 和 rollback 全部可复验 | 每次只推进一扇门;失败门保持 `in_progress`,不得用后续报告代替前置证据。 ## 验收 ```bash build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00010.py -- tests/files/web/generated/M16-GAP-00010-datablock-Lattice.blend npm --prefix web run test:generated-gap -- --task M16-GAP-00010 node tools/web/check-generated-gap.mjs --task M16-GAP-00010 ``` 必须覆盖 malformed/unsupported 输入或取消路径;失败不得改变 Main revision 或推进 `nextTask`。 ## 交付与回滚 - 报告:`tests/golden/M16-GAP-00010/` - 状态:`docs/status/M16-GAP-00010.md` - manifest:`tests/golden/M16-GAP-00010/manifest.json` - 完成后运行 `node tools/web/check-task-context.mjs --task M16-GAP-00010 --write`。 - 回滚:删除本任务新增的生产入口、测试、报告、manifest、status 和 context,恢复 parent manifest 为队列尾;不得改写 parent 成功证据。