Advance Blender 5.2 web parity through M12-03D
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

This commit is contained in:
mes123456
2026-08-17 17:30:27 -04:00
parent 0fe8d2bb56
commit 5a11045ca5
148 changed files with 11683 additions and 66 deletions

View File

@@ -14,9 +14,11 @@ Web Blender M6/M7/M8/M9/M10/M11 接续执行记录
- M8 当前完成20/20剩余0。
- M9 当前完成14/14剩余0。
- M10 正式完成15/15剩余0。
- M11 当前完成13/14剩余1
- 已完成到M11-13
- 下一领取点:机器队列的最新 `nextTask`(本文不缓存任务名称)
- M11 正式完成14/14剩余0
- 已完成到M11-14
- M12 当前完成M12-01A-I、M12-02A-H 与 M12-03A-D
- 已完成到M12-03D。
- 下一领取点:机器队列的最新 `nextTask` 为 `M12-03E`。
- quick laneREADY7/7 命令通过,总命令耗时 11,455 ms报告
release/ci-reports/quick.json。
- Chromium laneREADY9/9 命令通过;每个 browser server 使用独立动态端口,报告
@@ -96,6 +98,9 @@ Web Blender M6/M7/M8/M9/M10/M11 接续执行记录
- M11-13 已完成实时音频恢复门schema 1 区分 context/output/mute 状态;真实 Chromium
`AudioContext` 通过 suspend/resume、muted resume、unmute gain 恢复和 close。缺 API/
构造失败与 resume failure 均保持结构化静音阻断。
- M11-14 已完成 Render/Compositor/Media 三域故障生命周期门:真实 `.blend`、H.264 和 WebGL
输出通过取消不发布、generation 2 重开、预算失败不改已提交状态、显式 clear/dispose 回执、
owned resource 归零和恢复后 identity/output SHA-256 一致性验证。
本轮新增并已验证
- M6-09A-Cbinary archive 解包到 mktemp 后由包内 deployment contract 启动;新浏览器
@@ -2329,3 +2334,456 @@ M11-13 实际验证2026-08-17 America/New_York
已同步M11 更新为 `13/14`machine slice 计数为 191 completed/58 blocked。waveform、A/V
sync、实际多 strip 混音/设备选择和 M11-14 跨域 fault lifecycle 均未提前声明。下一领取点
继续只读取机器队列最新 `nextTask`,本文不缓存任务名称。
M11-14 实际验证2026-08-17 America/New_York
- 领取 M11-14新增 schema 1 `RenderCompositorMediaRecoveryEvidenceIR`,固定 RENDER、
COMPOSITOR、MEDIA 三域 source、cancellation、restart、budget、release、recovery 字段;逐域
cancellation/budget code 固定,协议拒绝缺失/重复域、取消后发布、restart hash drift、预算
改变 committed identity、非正释放回执和资源未归零。
- Render 生产路径打开真实 `m11_render_reference.blend`,以 `ViewportRenderer` 读取非空 WebGL
RGBA8预取消 open 返回 `OPEN_CANCELLED` 且旧 Main identity 不变WebEngine generation 2
重开后 scene/output SHA-256 一致。纹理 aggregate 超限返回
`GPU_TEXTURE_BUDGET_EXCEEDED` 且已加载 texture stats 不变dispose 返回正数 byte/resource
并归零。Compositor 从真实 Main 读取 allowlist GraphIR周期取消和 8193 宽超预算分别返回
`COMPOSITOR_CANCELLED`/`COMPOSITOR_BUDGET_EXCEEDED`,重开后 Float32 output hash 一致,
LRU clear 返回释放字节并归零。
- Media 通过真实 H.264 HTMLMedia probe/decode 生成 8x8 RGBA8 proxy预取消返回
`SEQUENCER_CANCELLED`,低于一帧预算返回 `SEQUENCER_BUDGET_EXCEEDED` 且 cache 仍为空。
首会话 clear 后重新 probe/decode H.264 并重建 cachesource/decode/profile identity 与
payload SHA-256 保持一致。
- `WEB_TEST_PORT=5592 npm --prefix web run test:render-compositor-media-recovery` 首次完整运行通过:
protocol unit `3/3`、Eevee reference checker、Compositor desktop golden checker、Chromium
`1/1`。全量 Node `193/193`、typecheck、lint 和 production build75 modules通过受影响
回归中的 render resource budget unit `3/3` + Chromium 主线程/Offscreen `3/3`、Compositor
golden unit `3/3` + Chromium `1/1`、media proxy cache unit `3/3` + Chromium `1/1` 全部通过。
status consistency 为 12 parity blocked、0 release blocked、17 evidence、0 missingrelease
evidence 为 `READY``git diff --check` 通过。
- M11-14 hashesprotocol
`a1b0b36cf93173347d55a955ff2e02f3666f7c28ef7f06442b86f0ee2b272286`production suite
`ef9cd58ce3bbd522c72075e82d6423387b61039509996851d8d5ebf3a0d86789`media proxy cache
`7a1dbf8e838c47e2b99bc8932997e79d3c3cf2636b6285ace083800d833e2e64`texture store
`a87adefa67b243cfd0cfcad0573a1b646f1e8be8abd0a187e1dc29cab2954d44`compositor cache
`3ce4819dadb2d6de7305c3676b2708689cd8be95e6fa7894651d6a02c4658b31`unit
`3cec4a33f28a76423a9678bcb61244cc463f5f2f5939c3f0b6865d34063e1f55`Chromium spec
`1578848eda7cb26cdf1584fa13f4cc2e252e782959d489dc4454e45c8d06595a`golden manifest
`87f17b0437d819e00c4a0902146d6549cf713482667ead627a45ba2b46050247`package
`0e731a5c826a999eef372f875c6c5ce9d697fd369a929025370a74cf18a93582`parity ledger
`abf91dd37de5fe1b5ce43912f87672b1346994500da27090fabce6cff66c6786`release evidence
`7cc927bf068500e0dfabd5dbb76082292c0eef92969850ba11a3ee533601daca`。
- `docs/status/M11-14.md`、N-019/020/021、当前/完整对标计划、项目状态、parity ledger、release
evidence 和本文件已同步M11 更新为 `14/14`machine slice 计数为 194 completed/58
blocked。12 个 family 的全域 `parityStatus` 仍保持 `BLOCKED`;机器队列唯一下一任务切换为
`M12-01A`,未提前实现 catalog inventory。
M12-01A 实际验证2026-08-17 America/New_York
- 领取 M12-01A新增 machine inventory逐项绑定 Blender 5.2 `DNA_asset_types.h`、
`rna_asset.cc`、Blend IO、AssetCatalog/CDF/path 源码和当前 Web v1 protocol 共 8 个 source
SHA-256。清单覆盖 `AssetMetaData` 14 个 DNA 字段、10 个真实 RNA 属性、`AssetTag` 3 个
存储字段、catalog 3 个持久语义字段、3 个 runtime flag、CDF v1 格式和 path hierarchy。
- 实际 Blender 5.2 background runtime 返回 author/description/copyright/license/tags/active_tag/
catalog_id/catalog_simple_name/use_preferred_import_method/preferred_import_method 共 10 个 RNA
属性;类型和 readonly/runtime 标志与源码 inventory 完全一致。
- Web v1 snapshot 通过 TypeScript AST 固定 `AssetCatalogIR` 3 字段和 `AssetEntryIR` 10 字段。
当前缺 properties、description、copyright、catalog recovery name、active tag 和 preferred import
两字段共 7 项;同时记录 Blender optional author/license、path hierarchy 与 Web parentId graph、
64-byte tag 和 custom ID properties 的语义差异,未在本任务直接改 schema。
- `npm --prefix web run test:asset-catalog-inventory` 首次完整通过:
`dna=14 rna=10 tag=3 catalog=3 gaps=7 next=M12-01B`。inventory hash
`194d5fd0fef5044f5e82a51931a061e226445f0f53410af9dc0594c70a79e936`checker hash
`38839f47dbe82ad7931e5e444e124e87b64a604d9358be6d71cce7769439e57b`package hash
`4b234613a016a43ef918876b69bfdd65db0a57aae0c37324d1f58c4dd8acb736`。
- `docs/status/M12-01A.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
release evidence 无需伪造新功能记录;机器队列唯一下一任务切换为 `M12-01B`。
M12-01B 实际验证2026-08-17 America/New_York
- 领取 M12-01B锁定 Blender 5.2 generator 在临时目录生成 CDF v1 和 `.blend`,覆盖 3 条
catalog、嵌套 path、Object/Material/World 三类资产、assigned/nil UUID、可空文本、ordered
tags、active tag、preferred import method 和 custom ID properties。Object `asset_mark()` 自动
生成的 dimensions metadata 也进入 canonical不手写删除真实字段。
- 独立 exporter 由新的 Blender 进程重开 fixture 后读取 AssetMetaData 和 CDF稳定排序并输出
schema 1 canonical JSON。`catalog_simple_name` 如实保持 RNA setter 在无 Asset Browser context
下产生的空恢复名,不伪造只读字段。
- `npm --prefix web run test:asset-catalog-v1-fixture` 完整通过:从新临时目录重新生成 fixture/CDF
新进程重开生成物和 checked-in fixture两次 canonical 均与 golden 精确一致;输出
`catalogs=3 assets=3 metadata=complete next=M12-01C`。
- hashesgenerator `4156ec6293562d44f87ad5a268de52fbfa31a65da8263a67a2bc45bf22999307`
exporter `3dbccd8df54d8686aa526f7967f58fd1008336c4c5b1deed01a136ba15aa3e41`checker
`c2813aa36482eff0b23ca0209f488cfe70ea11e4f39cc6c6036d6c47bbc8e17b`fixture
`8facfe82e3ca0a0605c139ef5bdcbb82d27a6953a6add4e008b68af90bc1211f`CDF
`a72f542acb2d2239951a2b20cda0f92305e1d6d8222f84072ad1aab52e3e4c98`canonical
`6fc6def0b9d0e4f51ef40c1d87a1f17074f6340c126a01aee49e5e53271c961e`manifest
`1ee0abf961b82195e5fb586eb9e59302e4f7f839615f1ebbdf5cdcba8b60accd`。
- `docs/status/M12-01B.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
release evidence 无需修改;机器队列唯一下一任务切换为 `M12-01C`。
M12-01C 实际验证2026-08-17 America/New_York
- 领取 M12-01C新增独立 schema v2。catalog 以 canonical RFC4122 UUID 和 cleaned slash path
为权威,`parentPath` 必须从 path 精确导出,不延续 Web v1 `parentId` 图asset 以 Blender
AssetWeakReference 的 library identifier + relative asset identifier 生成 SHA-256 stable Web ID。
- schema 覆盖 M12-01B 全部 metadatanil UUID 映射为 null同时保留空 author/license 等合法
Blender 状态。catalog/tag simple text 固定 63-byte payload所有 name/path/dynamic metadata/
custom property 和 aggregate text 预算均按 UTF-8 字节计算catalog/assets/tags/properties/array
元素均有显式上限。
- 生产 converter 从 M12-01B desktop canonical 生成 M12-01C golden不复制测试实现。
`npm --prefix web run test:asset-catalog-v2` 4/4 通过,覆盖 Blender source/hash 绑定、desktop
转换、local/external stable ID、预算常量和 golden parsetypecheck、lint、diff-check 通过。
- hashesprotocol `0949838efb2f69466368185b80bb1d2e851672d78311fcd5270eb0814576e5d7`
generator `b20e7dbd8508ca8ecf17d7da507b45b1225315bac7759c55c7b324683d660881`unit
`73038022124ddc7e683602b47a4804297b3a64ecd4819160c7ec086d2f6190ae`golden
`2abe279cebbffd1341dc61b1fdc5366dd1f6f42769ba36171782019ca61fb929`manifest
`612892b03a689ebe19804e495bd29744634ab43a3b29fff41adc2d7a5d0b67b9`Blender source
`ace3d6468bcdb2f6190431e967495794b7afa35758fd82fc3941b1ce7d374635`。
- `docs/status/M12-01C.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-01D`。
M12-01D 实际验证2026-08-17 America/New_York
- 领取 M12-01D迁移先走现有 v1 production parser再对所有层级做 exact-key 审计,任何未知
字段在转换前阻断避免静默丢失。canonical UUID 原样保留;其他 legacy catalog ID 用固定
namespace 的 RFC4122 UUIDv5 映射parent graph 转为 Blender cleaned slash path。
- asset 按 Blender weak reference identity 生成 v2 ID。logical revision 保持不变author/license/
tags/source hash/path/preview receipt/library dependency graph 全量保留v1 缺少的 dynamic metadata、
preferred method 和 custom collection 使用显式默认并计入 report。
- migration report 绑定 canonical source/target SHA-256、逐 catalog/asset mapping 和 preserved/default
计数。`npm --prefix web run test:asset-catalog-migration` 3/3 通过3 catalog、2 asset、1 preview、
2 source、2 library 正例与重复执行完全一致M12-01C、typecheck、lint、diff-check 回归通过。
- hashesmigration protocol `6d74bc5605f94e05208eda82830192d38f88066dfc409058555a8876c785f226`
generator `954d15c02d68e3f644b57c8c4c136ce09bd037a0af2012bf74b97f681c77dd60`unit
`6b927e7a8238e4e0a77cc0fdf783b099d8add22c5f875df2299012eb32730186`v1
`1cc43d181afefd63b53cb9c3626bb58195fad20187d6e534adc1ecbe65f75da5`v2
`38e5d1771b3d2d63ce5e10268eac4513f2043b0cbf71ab1799c1868bc2aa97fb`report
`57b972c1bbb9ae326c3f264c225c21546682442ff3194fbc343e1c46a2cd410a`manifest
`fea9e01b51f64a7e9c15dcfc521b3e84636525ffbe0a849f7a6f1b0be2b02e9d`。
- `docs/status/M12-01D.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-01E`。
M12-01E 实际验证2026-08-17 America/New_York
- 领取 M12-01E新增 compatibility contract。原生 v1 文档保持 READY合法 v2 对 v1 reader
只返回有界 catalog/asset/library metadata snapshot 和 canonical source hash状态为 READ_ONLY
CATALOG_WRITE、ASSET_WRITE、SAVE 都返回 `ASSET_SCHEMA_DOWNGRADE_BLOCKED`。
- 未知未来 schema 返回不可恢复 `PROTOCOL_MISMATCH` 且不产生 snapshot非法 v1/v2 返回
`ASSET_MANIFEST_INVALID`。所有检查只读,不能把 lossy projection 序列化回 source。
- generator 固定 read、3 类 write/save 和 future 共 5 份报告。`npm --prefix web run
test:asset-catalog-legacy-reader` 4/4 通过,验证 snapshot、全写入阻断、native v1、future reject、
source hash 一致和输入对象不变M12-01C/D、typecheck、lint、diff-check 回归通过。
- hashesprotocol `5d51029b232e03f08fc0778d4933910b2a54818b4d653fbcc185c8d764641349`
error contract `309ab84d5c755a69466ddb73e4b54e87caf62cbcac0f10f34d904e9f6f4a5f34`generator
`208f568db092e1712095d77ab28db92d5a1eb11fe62813b237ce466f9268fd4e`unit
`f6477222412044e6784b64c1be83dc9bd6050fe6a955ba5430a4ea963b20dbb4`report
`3c2f9241b56ad5bd742dc4152dec703bdc56eef4e6d8d60e6edf163c4571ad54`manifest
`cf55ea1f9430df04fb55bf07c68c1b2099b044b0da0fdb07a7251b13c459724b`。
- `docs/status/M12-01E.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-01F`。
M12-01F 实际验证2026-08-17 America/New_York
- 领取 M12-01F直接对 production v2 parser 和 v1→v2 migrator 注入 duplicate catalog ID、
duplicate asset ID、legacy parent cycle、v2 parentPath mismatch、64-byte UTF-8 simple-name/tag、
v2 top/nested unknown field 和 v1 nested unknown field 共 9 类负例。
- duplicate/cycle/parent/unknown 均稳定返回 `ASSET_MANIFEST_INVALID`;多字节文本用 32 个双字节
code point 证明 63-byte 上限按 UTF-8 byte 而非 JS length稳定返回 `ASSET_BUDGET_EXCEEDED`。
每个负例后立即重新 parse 原始 v2 golden9/9 均通过,失败不污染 parser 状态。
- `npm --prefix web run test:asset-catalog-negatives` 2/2 通过typecheck、lint、diff-check 通过。
unit hash `3a11605ac8666c8c4e1e2e85ccfd423115915820d0de6f92bdf72dff1f01ce41`cases
`74672fa0aec248fd5d9a265743ef4dfe4d417fce8a24622b8b3d6be2f95c8874`manifest
`127b2b605ac79a891cd6ab516ee031c02624a512e1043b111bfac2ebf1d8278d`。
- `docs/status/M12-01F.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-01G`。
M12-01G 实际验证2026-08-17 America/New_York
- 领取 M12-01G新增 production IndexedDB catalog migration。v2 manifest 先由现有 v1 parser/
migrator 完整准备readwrite transaction 内再次核对 source row再共同写入 v2 index、migration
receipt 并删除 v1 indexsource 并发变化返回 `REVISION_CONFLICT`。
- Chromium 分别在 target put 后和 source delete 后注入 `STORAGE_TRANSACTION`。每次都关闭并重开
数据库database version、完整 v1 index、无关 legacy migration 行、缺失 v2/receipt 与基线精确
相同;随后无故障重试才原子提交 v2 index/receipt 并保留 revision 7 和 M12-01D 双 hash。
- `WEB_TEST_PORT=5593 npm --prefix web run test:asset-catalog-indexeddb-migration` 通过M12-01D
production migration unit `3/3`、M12-01G artifact unit `1/1`、Chromium `1/1`typecheck 和
diff-check 通过。
- hashesM12-01H 扩展同一生产 reader 后重绑production migration `283a08bccb5ea301bd2aef8f01d4496972e3962f75e340479336c50e3539ba57`
browser `82c40f38898277b4053a9654537ec9c21bc01a784d1091831e139361575a81e9`unit
`a4366a16f28b91b3ff213e0232308eaecd392731f27972cfa49a11568eb0feca`manifest
`2596067956211698f1b7a07d9423411e2db830b72e6b78593354953a568738e7`。
- `docs/status/M12-01G.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-01H`。
M12-01H 实际验证2026-08-17 America/New_York
- 领取 M12-01Hproduction loader 对 stored v2 index 重新 parse、计算 canonical SHA-256 并与
transaction receipt 校验,再发布 revision、catalog order、asset order 和完整 AssetWeakReference
identity snapshotreceipt revision/hash drift 在发布前返回 `ASSET_MANIFEST_INVALID`。
- 初始页面从 v1 原子迁移后读取 snapshot真实 page reload 后重开相同 IndexedDB随后两个独立
module Worker 顺序启动generation 1 terminate 后 generation 2 再打开数据库。四个 context 的
3 个 catalog、2 个 asset、revision 7 和 manifest hash 逐字段完全相同。
- `WEB_TEST_PORT=5594 npm --prefix web run test:asset-catalog-restart` 从同步 G hash 后完整通过:
Node `5/5`、Chromium `2/2`;首次运行由 G manifest 旧 module hash 正确阻断,重绑后从头通过。
- hashesreader `283a08bccb5ea301bd2aef8f01d4496972e3962f75e340479336c50e3539ba57`Worker
`e6007d352555be046b89d0becd719692652ee0418cc97087bf7599155f2a538e`browser
`7945ff38dd474a74c265594b66534a280eb69407509137e60d41f1bea3b3c19b`unit
`eb22b5cc852fa47d9bdd30afec2977facfca0dfa554e7ce738dc1bf8c4bf2122`manifest
`59138eb83d63ae0d397b152e587fbe005d02bc2d229ee484c279b452ea3f2eae`。
- `docs/status/M12-01H.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-01I`。
M12-01I 实际验证2026-08-17 America/New_York
- 领取 M12-01I新增 M12-01 aggregate evidence按精确队列顺序绑定 A-H 八份 manifest并递归
核对每份声明的 Blender/Web source 与 artifact SHA-256单独绑定 desktop canonical、Web v2
golden/protocol、migration v1/v2 fixture/report/protocol、IndexedDB runtime 和 restart Worker。
- checker 对 v1/v2 manifest 重新做 stable JSON SHA-256结果与 migration report 的 source/target
hash、revision 7、preserved catalog/assets count 一致H 的 catalog/asset order 与 target fixture
一致G 的两个 fault point 与 evidence 一致。
- `WEB_TEST_PORT=5595 npm --prefix web run test:asset-catalog-m12-evidence` 完整通过Blender 5.2
inventory/fixture、schema v2 `4/4`、migration `3/3`、legacy `4/4`、negatives `2/2`、runtime Node
`5/5`、Chromium `2/2`aggregate 输出 `subtasks=8 catalogs=3 assets=2 next=M12-02A`。
- hashesevidence `2b99f64a207c2ffb966963be8a2150feef67d5bf78946939d3a49a6335b55bc3`checker
`7d0d9f5390648d4af79a8da6226627edb1bf99945bae1a7b1acfb2c5e2419a8b`package
`a810fec6a9a24cad94cb01475f9529ac2f85da827d391a70ab7ddb57421003f8`。
- `docs/status/M12-01I.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
M12.1 收口,机器队列唯一下一任务切换为 `M12-02A`。
M12-02A 实际验证2026-08-17 America/New_York
- 领取 M12-02Amachine inventory 绑定 Blender 5.2 PreviewImage DNA、slot enum、BKE/RNA、
Blend reader、asset generator、尺寸常量和当前 Web v1/v2 共 11 个 source hash以及 PNG/no-preview
两个 fixture hash。原生有 ICON/PREVIEW 两槽,持久字段为 w/h/flag/timestamp/rectruntime pointer
不持久化rect 每像素一个 packed RGBA32。
- 延迟加载路径显式 premultiply alphaRNA packed pixels 长度为 w*hfloat components 为 w*h*4
只执行 byte/255。PreviewImage DNA/RNA 均无 color-space 字段,因此 inventory 固定 colorSpace=null
不伪造 sRGB 声明。
- 锁定 asset fixture 重开后 Object/Material/World 三项 preview 都是真实 null真实 8x8 PNG 经
Blender preview API 加载得到 image 8x8、icon 32x32、packed/float count 64/256 和 icon count 1024。
- `npm --prefix web run test:asset-preview-inventory` 通过,输出
`slots=2 rna=9 absent=3 loaded=8x8 next=M12-02B`。inventory hash
`a4427426d94afdf1a2ccf5379d76d1797f8604a742a3f0d15bdca629272864bd`checker
`c9cc83d21bac5f34c6d68cb1225dffcd92a5ec76c158ddce909b620cbbcb245c`package
`04f832a3c5773c8cc5294ecdcf175478eed9710496e48c63698d79043384e328`。
- `docs/status/M12-02A.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-02B`。
M12-02B 实际验证2026-08-17 America/New_York
- 领取 M12-02B新增 schema 1 preview identity。source 与 encoded content 分别绑定 MIME、bytes、
SHA-256content 额外绑定 width/height、RGBA8、SRGB 和 alpha modegenerator 绑定 name/version、
Blender executable、script 与 canonical settings SHA-256。完整 record 再生成 canonical identity hash。
- 锁定 Blender 5.2 用明确 PNG RGBA8/compression 0/Standard-sRGB/零 exposure/gamma 1 设置重编码
8x8 PNG。source 261 bytes 与 content 513 bytes 的 hash 不同,第二进程解码 pixel max error=0
两次临时重生成 content SHA-256 完全一致。
- `npm --prefix web run test:asset-preview-identity` 通过unit `3/3` 及 Blender generator checker。
source/content bytes、generator、dimensions、identity 和 unknown field 漂移均 fail-closed。
- hashesprotocol `2a1d877af42424014097c669e9d44c21b27e3171be185320554693cbefcd7438`generator
`753a26be90f7d97828737ebc3a4ab88275a7c655b4f9992406c7c35fba6535ce`checker
`4d8ece1a5440d202f4e79a48f1f26bc75b3fb11a02d821b8ebc5aee14b11e41a`unit
`5b7b3ccaf410d627365579fa82bf2b48fed9ef17144aad963cdbd4bb7fbd4b5a`identity
`1b1eb8416ce4aa4d83b0dc42b9cb375f1da965e3f0cb9650991289fc619a0a7b`content
`ff139c4a1c5d388c78c5168dfd3272e80ea0d1b15b3743e29a38cd908e8c70e7`manifest
`096f125461b963ee2c414f98f6bb00f02034a380a0cc9c43e0d84754324adb17`。
- `docs/status/M12-02B.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-02C`。
M12-02C 实际验证2026-08-17 America/New_York
- 领取 M12-02C新增 schema 1 pre-decode planner。production 入口先 parse M12-02B identity
在 content hash 前限制 encoded payload 为 16 MiB随后核对 SHA-256、PNG/WebP header、header
dimensions 与 identity并计算 pixel count、RGBA8 decoded bytes 和 compression ratio。
- 所有门均在 browser decoder 与 decoded allocation 前执行。预算固定为 width/height 各 4096、
16,777,216 pixels、64 MiB decoded RGBA8 和 100:1 ratioPNG 只接受 signature + first IHDR
WebP 只接受 size-bound RIFF/WEBP VP8X、VP8L 或 VP8 header。
- `npm --prefix web run test:asset-preview-decode-budget` 5/5 通过。8 类负例覆盖 payload hash/length、
MIME、dimensions、pixel/decoded bytes、compression ratio、encoded bytes 和 corrupt signature
每次失败后 513-byte/8x8 小正例立即再次通过。typecheck、lint、diff-check 通过。
- hashesdecode protocol `3d1c491af2503a7a6012541ed43400d680f8e666cc12a54db284aeb6ac18ff63`
unit `1a65df86d568ae8defd7cd9242f426ac900d92637eb3bed2cbb4a0fae2e86c20`package
`8563916637fc3cb29b53432ae9b80d1dcf6269f2f5c092b595e72c6b0ada55ab`manifest
`934b3ca29d905ad2f5c46f35acff4cf4b9ea291c423fb3aad4afe7e9f10e6244`。
- `docs/status/M12-02C.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-02D`。
M12-02D 实际验证2026-08-17 America/New_York
- 领取 M12-02Dproduction coordinator 先执行 M12-02C gate将 content SHA-256 写入项目 OPFS
再回读并重复 identity/hash/header/budget 验证;只有这些步骤全部通过才构造 catalog revision+1。
- IndexedDB transaction 重新读取并比较完整 source row随后共同写 v2 catalog preview reference
和 M12-02D head receipt。receipt 绑定 project/asset、base/committed revision、双 manifest hash、
preview identity、payload bytes/hash 和 OPFS path并发变化返回 `REVISION_CONFLICT`。
- `BEFORE_OPFS_WRITE`、`AFTER_OPFS_WRITE`、`AFTER_CATALOG_PUT` 三处 Chromium fault 均保持完整
revision 7 catalog 且无 receipt后两处只留下未引用 payload。成功路径先持久化 513-byte PNG
再提交 revision 8关闭/重开数据库后 receipt/reference 相同OPFS bytes 再次复算 hash。
- `WEB_TEST_PORT=5596 npm --prefix web run test:asset-preview-opfs-commit` 通过 Node `1/1`、Chromium
`1/1`typecheck、lint、diff-check 通过。
- hashescoordinator `36418e480b108eb885b5d8da6633174ed1face1fa62742a64372a45280e727a2`browser
`043b9b06d4c0275938cc1d4f9837df95f58f281130f3c0f2b90c10540244592e`unit
`f489a1d9a4c5fb24a99bce6d31841534c7cf3981b53076a0d9e19d106e9d0d74`manifest
`34fe6c6ab097e58f7b648dd84cb919ecb407a5742e387c513bb3ed53db50eed6`package
`7363a8a03cb5f6b1d6bf40d8eabc90b9d48e91aeb4787b175deb4f242c676243`。
- `docs/status/M12-02D.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-02E`。
M12-02E 实际验证2026-08-17 America/New_York
- 领取 M12-02E使用同一 production M12-02D coordinator让 catalog 中 Action/Object 两个不同
Blender weak-reference asset 依次绑定同一 content SHA-256。两个 preview identity 因 assetId
不同而不同catalog author/license/type/path/tags 等 metadata 也保持各自原值。
- 首次 commit 在 revision 8 写入 513-byte payload 并报告 `deduplicated=false`;第二次在 revision 9
先读取同一 SHA-256 path完整长度/hash 复验后报告 `deduplicated=true`。真实 OPFS prefix 目录
最终只含一个以 content hash 命名的文件,无临时文件或 metadata sidecar 覆盖 payload。
- 关闭/重开 IndexedDB 后 revision 9、第二 asset head receipt 和 preview reference 一致;两条 asset
都引用相同 content去除 preview 后的完整 catalog metadata 与初始两条分别精确相同。
- `WEB_TEST_PORT=5597 npm --prefix web run test:asset-preview-dedup` 通过 Node `1/1`、Chromium `1/1`
typecheck、diff-check 通过。
- hashesbrowser `4e53b7a35eb109b152bd6dc0c3348dcb08879d17619968d37fc761c67aa38b40`unit
`e023fdd33e0f40c1331dfdd73cd287dc684256b9d134971ab17db8cfe2a83835`manifest
`7d25f1d8335481795257c643c8589d1607a865634b27a7e5d145a57ce2a92a62`package
`5a83676e821bb768f6d3e282ea4728413cf84c5f3d57672fc664fac3883873e5`。
- `docs/status/M12-02E.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-02F`。
M12-02F 实际验证2026-08-17 America/New_York
- 领取 M12-02F新增 production preview inspector/quarantine。它先独立核对 catalog reference 的
expected bytes/hash健康数据返回 READY。缺失或 hash/length 漂移返回稳定
`ASSET_SOURCE_HASH_MISMATCH`,不让 optional preview 阻断 asset metadata 读取。
- 对存在的损坏 bytes先复制到项目 `assets/quarantine`、复算实际 SHA-256/长度,再删除原
content-addressed path最后在 catalog full-row guard 下提交隔离 receipt。catalog v2 row 不改写,
receipt 绑定 project/asset/revision、完整 expected preview、actual bytes/hash 和 quarantine path。
- Chromium 先确认 513-byte PNG READY再翻转末字节制造同长度 hash drift。隔离后 SHA-256 path
不存在、quarantine 文件 513 bytestarget asset、另一 asset 和 revision 8 全部不变。关闭/重开
IndexedDB 后直接从相同 receipt 返回 QUARANTINED、preview/data null 和完整 asset metadata。
- `WEB_TEST_PORT=5598 npm --prefix web run test:asset-preview-quarantine` 通过 Node `1/1`、Chromium
`1/1`typecheck、diff-check 通过。
- hashesprotocol `a5f3330dbd16d9f578d85d9504c980fffea85b834b77340a307ce21ce9b1cb04`browser
`d8e1d0741765e8f8bfd47b45cf03213d8629efdbbf77dfd33846785a3ec80c27`unit
`79c836c7a3be4e9f305a962775444c766577cca87fa6d1698811e75eb21f2d9a`manifest
`d1a9feeb98c5332b1a14a14c5b813d75a29f172601590e1b5cde254c5059a7c5`package
`77b5cd3d3af68ac390d8fbdb9b2f64764fb4521a1d2bf22cd8a89e40d69424f6`。
- `docs/status/M12-02F.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-02G`。
M12-02G 实际验证2026-08-17 America/New_York
- 领取 M12-02G新增 production reference GC。它先 parse v2 catalog、核对 expected revision
只清空目标 asset.preview 并推进 revisionIndexedDB transaction 对完整 source row 再校验,
提交新 catalog/hash receipt 后才允许触及 payload。
- committed manifest 中仍有同 SHA-256 reference 时返回 RETAINED计数为零时才删除
`projects/<projectId>/assets/sha256` 下该文件并把 receipt 更新为 COLLECTED。OPFS project namespace
是跨项目 ownership 边界,回收函数无法定位或删除另一 projectId 的 payload。
- Chromium 中项目 A 两个不同 asset 先共享同一 payload项目 B 另持同 hash payload。A 的首次
removal revision 9->10 保留文件;末次 10->11 回收 A 文件。B 文件始终存在inspector 返回
READY/513 bytes重开 A 后两 preview 都为 null完整 metadata 与初始一致。
- `WEB_TEST_PORT=5599 npm --prefix web run test:asset-preview-reference-gc` 通过 Node `1/1`、Chromium
`1/1`typecheck、diff-check 通过。
- hashesGC protocol `76b9d8ccd3e7992356f33adc694001f9b0ff364788234389eacdb09198d1415e`browser
`2e9e9b47883997092c5afb0fb7859a484754764de19006e24a8ff2bdeb24f35a`unit
`c5de3122b5d8aab17daf0179cb4f5bb0b5d299408818849cbe7b18e40a47706e`manifest
`3449f2ea9488f66ea5e3f5f2423413e8e290d8ffed3b3d941bdeee3f76addd0a`package
`7d1db0932fbe7405ffdbd44b770ce7bf9815b9dfb829c1906a06bfff635ae702`。
- `docs/status/M12-02G.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步。
本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 194 completed/58 blocked
机器队列唯一下一任务切换为 `M12-02H`。
M12-02H 实际验证2026-08-17 America/New_York
- 领取 M12-02H新增共享的 production preview display。它复用 M12-02C pre-decode 门,随后以
`colorSpaceConversion/premultiplyAlpha/imageOrientation=none` 创建 ImageBitmap禁用 smoothing
用 copy composition 绘制并读取 RGBA8receipt 绑定 identity/content/backend/dimensions/pixel hash
bitmap 在成功和失败路径均关闭。
- Blender 5.2 重新生成 8x8 `SRGB/RGBA8/STRAIGHT` PNGImageMagick 读取的 desktop reference
为 256 bytesSHA-256 `c2ff81750b41193ce1a06d47d0ff18168a756136dbf0f2586cd0638d4bf0ef00`。
主线程 HTMLCanvasElement 与独立 Worker OffscreenCanvas 共用同一实现并逐字节匹配 reference
MAE/RMS/P95/max/bad-pixel/alpha delta 全为 0foreground IoU=1单通道错误负例被阻断。
- `WEB_TEST_PORT=5600 npm --prefix web run test:asset-preview-display` 通过 Node `1/1`、desktop
checker 与 Chromium `1/1`。manifest 分类纠正为 `LOCAL_EXACT`,未把渲染结果误标为平台等价。
- hashesruntime `e4a46a40291427afc185caf016b02120ea71639ab4ab4ac250a5c3de28ee8d28`Worker
`6322562f54b608b7eaac4ca3bc0f8d861f47bb8e9b37b3c2ae3d61163108724f`desktop checker/report
`d03d766e69ea0547be2c247b5d7ef8fd5ceab6b399dc996eba711fa0cac0ca54` /
`cdf841f5d27362f6df380772ada8b7b1427d051a8b46b5c2c20aab0b597c25d0`browser
`340d386c6a854c44cd6f6207e3699f870b8ded2aada4747afd6ff1103c719520`unit
`f10a05900c4d1282251f7a76e7c413a18602910f55fe8400f1713f548eba3873`manifest
`30e6e4b6f53e07768d2ae8d853fe08a5c0782f8608320a72e41db77f6d87f2c4`package
`2510242fbc0c2da787f558365733a4db6faf9f490e2594f69dc978920ed09f21`。
- `docs/status/M12-02H.md`、N-023、当前/完整对标计划、项目状态、WBS、ledger 和本文件已同步。
本项增加 `A-preview-desktop-browser-main-offscreen-display`ledger 更新为 195 completed/58
blocked机器队列唯一下一任务切换为 `M12-03A`。
M12-03A 实际验证2026-08-17 America/New_York
- 领取 M12-03A新增 Append/Link/Library Override machine inventory绑定 link/append context、
closure、operator、Python load、Blend reader、override DNA/API/implementation 与当前 Web gate
共 9 个 source hash并绑定真实 nested-library `.blend` fixture。
- Blender runtime 公开 36 类 selectable collectionsScreen/WorkSpace 为 append-onlyLibrary 为
source/transitive metadataKey 为 embedded owner dependency。Append 盘点 direct/indirect、跨库、
override-only、reuse-local 和 instantiate 角色Link 盘点 EXTERN/INDIRECT、ID.lib 和 parent library
Override 盘点 linked reference/local owner/hierarchy root/system dependency/property operation。
- `npm --prefix web run test:library-operation-inventory` 通过,报告
`roots=36 appendOnly=2 operations=3 overrideFields=17 gaps=8 next=M12-03B`。首轮源码 token 与
第二轮单行 Python 语法问题均已纠正后完整重跑通过。
- hashesinventory `0dcb16233b52b3c0be2373f489d6bf3c771c9d6564993ff98b5d63dcd322fef7`
checker `1581490d1923578293202d27a1c379eb2a8c5e13be418547d148cf09c6a783fd`package
`a7cf339b0cf6fab17ef63e9394b2e540af60327f7bf1f7fe95823d182e0d3e63`。
- 本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 195 completed/58 blocked
机器队列唯一下一任务切换为 `M12-03B`。
M12-03B 实际验证2026-08-17 America/New_York
- 领取 M12-03B新增 schema 1 library operation identity。sourceLibraryId 由 canonical locator 与
`.blend` SHA-256 生成binding 再绑定 operation、source root、owner、read-only、generation、
revision、dependency closure 与 invalidation token。
- APPEND 强制 `LOCAL_MAIN/readOnly=false/referenceReadOnly=false`LINK 强制匹配 source 的
`SOURCE_LIBRARY/true/true`LIBRARY_OVERRIDE 强制 `LOCAL_OVERRIDE/false/true` 并保留 linked
reference/hierarchy root。三种 operation 对相同 source 生成三个不同 token。
- generation/revision/source ID/source hash/dependency closure 任一 current state 漂移均返回
`REVISION_CONFLICT`owner 互换、只读漂移、reference 替换、未知字段和伪造 token 均 fail-closed。
- `npm --prefix web run test:library-operation-identity` 完整通过 `6/6`typecheck 通过。
- hashesprotocol `5371133bd98e05935cd75bab582abedec32a36559af8d212f0bc8a534ef19451`
golden `b39c0f26697ac688c1203ae4e3e27d8a02686c7c9da9afc438c89a0b4d69370f`unit
`0e5b2c82d481180eb8eb22de16ad8cdef5e58fa7423c26011faaffbac788e547`manifest
`f388aedb9c0901932cf90c058f2f2b83259d9797cd6b144566a25e37a348c64b`package
`48cf41f0d0041bf4f497bc2a454cfa9469874eded1775cea50fe3249d4e0b59e`。
- 本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 195 completed/58 blocked
机器队列唯一下一任务切换为 `M12-03C`。
M12-03C 实际验证2026-08-17 America/New_York
- 领取 M12-03C新增 Blender 5.2 desktop 单 Object append generatorsource library 中的
Object 通过 Mesh material slot 和 Material Image Texture node 形成 Mesh/Material/packed Image
依赖闭包。干净 Main 只选择 append ObjectBlender 自动带入全部依赖。
- target 中 Object/Mesh/Material/Image 四个 ID 的 library pointer 均为 null无 library
override全部映射为可写 `LOCAL_MAIN`。保存并重开后 3 条依赖边、4/4/1 geometry、
UVMap、material slot、2x2 sRGB RGBA packed image 及 Float32 pixel hash 不变。
- `npm --prefix web run test:library-append-desktop` 通过,输出
`roots=1 mapping=4 edges=3 pixels=6f0f8c231d65149e69e6ed12d370bcfa095ef90adc202065492ea8c8ef17e45a next=M12-03D`。
- hashesgenerator `b9d8e3bd24966b0d7d419382d7ef0b35ae8def9ee2c2236dfd3ad1a90aebe66f`
checker `6f8cc0d51be19423cf6fb7203c3c16f8d27e0fbb3b5b357bad5dec6c5ceb432d`source/target
`.blend` `5b60d02926efd588a6ca300ba31414cdf37dbc48786c17b383a70319057c0606` /
`5cde4927f47e33f0338de38184ce5ba971825fcefd1d8dc6feb48d41a6cdb60c`report
`b1d7b8b9e832d18d69081f63981062800e0f00f0c9aec025b18274510ed76e2a`manifest
`cbfbd8c919125108334dd24925b9ef8e69880983515e56841e6ead4a2b182aed`。
- 本项保持 `enablingTask=true/parityStateChange=false`ledger 仍为 195 completed/58 blocked
机器队列唯一下一任务切换为 `M12-03D`。
M12-03D 实际验证2026-08-17 America/New_York
- 领取 M12-03DWorker 对 source `.blend` 做 SHA-256、closure、owner/read-only 和 base revision
校验后,调用新导出的 `_web_engine_append_library_object`。Native Blender Main 用递归
link/append context 在一次 transaction 中导入 Object/Mesh/Material/packed Image并在发布前
检查四个 ID 均无 `ID.lib`/override、均为可写 `LOCAL_MAIN`。
- `source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8`
通过(当前构件无待重编译);`bash tools/web/install-web-engine-assets.sh` 通过并完成双 variant
manifest 资产校验。`npm --prefix web run test:library-append-desktop`、
`npm --prefix web run test:library-operation-identity`、`npm --prefix web run typecheck` 和
`WEB_TEST_PORT=5601 npm --prefix web run test:library-main-append` 均通过Chromium 为 1/1。
- 浏览器结果确认 `transactionCount=1`、四条 source/local mapping 均为 `LOCAL_MAIN`、revision
只增加 1Object→Mesh→Material→Image 依赖闭包完整stale revision 返回 `REVISION_CONFLICT`
local ID collision 返回 `ASSET_MANIFEST_INVALID` 且 revision 不变。失败前后 history、undo/redo
和保存 buffer 均保持可恢复,完整 desktop canonical 对标仍留给 M12-03E。
- hashestest `7130453cbc81f22eb1bcf598ff3745672ac8177dccb11cef667f5b68b43e87c6`worker
`e3bb430e401144bf17cdcbd0de13cde0a4f904f1f9ff9d5b10a73d90f0d4c648`protocol
`bfd98561cbe797d7b8f07c92c53a25460c839a64ab7222b7795cf58d54dff8d7`source/target `.blend`
`5b60d02926efd588a6ca300ba31414cdf37dbc48786c17b383a70319057c0606` /
`9b1ecbcc3d7f8079ee5469de64193ffcaa0a7b01e0f2ac340bbb18aa88734a63`WASM JS/binary
`9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed` /
`7821f408687e455c6f4e185fc3741c199c1c60d409836a2fe1b32f521d81e0ea`Main append API/implementation
`5a71260c542fa559f73c6b82e23e72d39bd2844f5ebe12c6edc809a49d79791b` /
`d0c484ab62e6ec051c8c2f67c49d750a456578aaccc2aa4f461026307af0db95`。
- `docs/status/M12-03D.md`、N-023、当前/完整对标计划、项目状态、WBS 和本文件已同步;本项
保持 `parityStatus=BLOCKED`ledger 仍为 195 completed/58 blocked。机器队列唯一下一任务切换为
`M12-03E`。