Advance M8-M11 parity workflows
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 04:37:07 -04:00
parent 7c16b279ae
commit 0fe8d2bb56
324 changed files with 31920 additions and 863 deletions

View File

@@ -1,6 +1,6 @@
# Web Blender V1 当前执行计划
更新时间2026-08-15
更新时间2026-08-17
## 1. 交付目标
@@ -124,12 +124,13 @@ Linux archive SHA-256 为 `96f6c181a30f4950607839dc84d42a354b250d8a0231b098b59b7
### 4.4 当前阻断与决策顺序
1. `P0`V1 可部署 RC 已完成 M6 71/71M7 已完成 7/18下一领取点`M7-08` Worker 崩溃恢复。
1. `P0`V1 可部署 RC 已完成 M6 71/71M7 核心体验硬化已完成 18/18后续领取点
`后续工作.txt` 的机器队列记录为准。
2. `P1`binary/source archive 已在独立目录复验quick/Chromium/release 三条
CI lane 与 RC manifest 已联合校验;发布/限制/恢复和运维合同均已进入离线包。
3. `P1`pthread/single-thread、真实 HTTP、缓存升级、归档离线、OPFS 断网和空目录
deploy/upgrade/rollback 均已有可复验证据M7 开始核心项目体验硬化。
4. `P2`:完整 Blender 功能域继续受 VDB demand paging、PBVH、Geometry Nodes evaluator、
deploy/upgrade/rollback 均已有可复验证据M7 项目体验硬化已完成并进入持续回归
4. `P2`:完整 Blender 功能域继续受 VDB depth composition/完整 Volume IO、PBVH、Geometry Nodes evaluator、
通用 Shader、完整编辑器/渲染/媒体和安全脚本边界阻断。
### 4.5 真实发布缺口
@@ -151,18 +152,19 @@ loss、恶意 blend、zip bomb、离线包和 V1 用户闭环均已在最终 M5
| M4 OOM | 四类确定性内存故障与恢复证据 | 已完成,持续回归 | `faults.oom=true` |
| M5 V1 RC | 可复现离线候选包、SBOM、校验和 | 已完成,持续回归 | release gate `READY`、49/49 acceptance |
| M6 可部署 RC | 双 WASM 运行时选择、真实 HTTP、离线包、CI、运维合同 | 已完成71/71 | single/pthread 可解释,真实部署与归档 P0 通过 |
| M7 核心体验硬化 | 项目状态机、恢复、存储、输入和可访问性 | 进行中7/18 | 30 分钟编辑/保存/重开 soak 通过 |
| M8 VDB 自动分页 | GPU 缺页反馈、range/OPFS、LRU、双视口恢复 | 未开始 | 64 MiB sparse bundle 与三视角 golden 通过 |
| M9 非 Mesh/GP/Paint | 字体、Curve、Grease Pencil、Paint 增量闭环 | 未开始 | 每个新增 writer 独立通过 Main/undo/save/golden |
| M10 GN/Shader/NLA/Simulation | 白名单求值、cache、编译与阻断 | 未开始 | 四域分别通过 desktop/WASM/fault 门 |
| M11 Render/Compositor/Media | 灯光、渲染、合成、媒体执行边界 | 未开始 | 本地白名单与 server 边界均可审计 |
| M7 核心体验硬化 | 项目状态机、恢复、存储、输入和可访问性 | 已完成18/18 | 30 分钟编辑/保存/重开 soak 通过 |
| M8 VDB 自动分页 | GPU 缺页反馈、range/OPFS、LRU、双视口恢复 | 已完成20/20 | 联合重开与 desktop/main/Offscreen 三轴 golden 通过 |
| M9 非 Mesh/GP/Paint | 字体、Curve、Grease Pencil、Paint 增量闭环 | 已完成14/14 | 每个新增 writer 独立通过 Main/undo/save/golden;三域故障恢复闭环通过 |
| M10 GN/Shader/NLA/Simulation | 白名单求值、cache、编译与阻断 | 已完成15/15 | 四域分别通过 desktop/WASM/fault 门 |
| M11 Render/Compositor/Media | 灯光、渲染、合成、媒体执行边界 | 进行中13/14 | 本地白名单与 server 边界均可审计 |
| M12 Asset/IO/Editors | 资产、格式、编辑器和上下文工作流 | 未开始 | 每个格式/editor 有独立 round-trip 或稳定阻断 |
| M13 Scripting/Security | 脚本默认拒绝、服务端隔离、CSP、供应链 | 未开始 | 恶意输入矩阵和 release 安全门通过 |
| M14 跨浏览器/设备 | Firefox、WebKit、触控、笔、HiDPI、IME | 未开始 | 新浏览器进入 quick/P0/full CI 后才声明支持 |
| M15 全域审计 | Blender 5.2 全域差距和下一发布 | 未开始 | 逐 family 审计,不由聚合 release gate 反推完成 |
M0 至 M5 已完成并转入持续回归;当前严格领取 M6。里程碑内部允许先写纯校验任务但不得在
前一小里程碑失败时把后一小里程碑标为完成M7 至 M15 不得绕过 M6 发布合同扩功能。
M0 至 M7 已完成并转入持续回归;后续严格读取机器队列最新 `nextTask`。里程碑内部允许先写
纯校验任务,但不得在前一小里程碑失败时把后一小里程碑标为完成M8 至 M15 不得绕过 M6/M7
发布与体验合同扩功能。
## 6. M0 范围、状态和 P0 闭环
@@ -555,7 +557,8 @@ SBOM、状态和 evidence SHA-256 相互一致。
M5 最终 archive SHA-256binary
`f2903a75026a0a28615aeb5f4834a3859af83022c82bc50e28437dcbed68e549`source
`9a9c1b505c68a618de842be7c248f628b104b11b80e8a40d111f62540fcba327`当前下一任务:`M7-08`
`9a9c1b505c68a618de842be7c248f628b104b11b80e8a40d111f62540fcba327`后续领取点只读取机器队列
最新 `nextTask`,本段不缓存任务名称。
## 12. V1 后原子里程碑
@@ -716,91 +719,107 @@ CI 可从 lockfile 和对应源码重现当前 binary/source hash。
- [x] `M7-05` save 中断时旧 revision 和旧 hash 保持不变。
- [x] `M7-06` dirty state 只由成功 Main transaction 改变。
- [x] `M7-07` undo 回到保存 revision 时 dirty state 清除。
- [ ] `M7-08` Worker 崩溃时展示可恢复错误,不清空当前项目列表。
- [ ] `M7-09` 重启 Worker 后恢复 selection、frame、workspace 和项目 revision。
- [ ] `M7-10` recent projects 对缺失/损坏 OPFS 条目执行隔离和修复提示。
- [ ] `M7-11` 存储预算面板报告项目、快照、LOD、媒体、VDB 分项字节。
- [ ] `M7-12` 清理单个项目时只删除该项目 content-addressed 引用的孤儿资源。
- [ ] `M7-13` 键盘焦点、菜单、modal、Escape 取消形成一致上下文规则。
- [ ] `M7-14` 1440x900、1280x720、移动窄屏下无控制重叠和文本溢出。
- [ ] `M7-15` 主线程与 Offscreen 视口的选择、相机和 gizmo 行为一致。
- [ ] `M7-16` P0 用户流程增加无鼠标键盘路径和基础可访问性检查。
- [ ] `M7-17` 用户可见错误只显示稳定短消息,详细诊断进入可导出报告。
- [ ] `M7-18` 完成 30 分钟持续编辑、自动保存、重开 soak 测试。
- [x] `M7-08` Worker 崩溃时展示可恢复错误,不清空当前项目列表。
- [x] `M7-09` 重启 Worker 后恢复 selection、frame、workspace 和项目 revision。
- [x] `M7-10` recent projects 对缺失/损坏 OPFS 条目执行隔离和修复提示。
- [x] `M7-11` 存储预算面板报告项目、快照、LOD、媒体、VDB 分项字节。
- [x] `M7-12` 清理单个项目时只删除该项目 content-addressed 引用的孤儿资源。
- [x] `M7-13` 键盘焦点、菜单、modal、Escape 取消形成一致上下文规则。
- [x] `M7-14` 1440x900、1280x720、移动窄屏下无控制重叠和文本溢出。
- [x] `M7-15` 主线程与 Offscreen 视口的选择、相机和 gizmo 行为一致。
- [x] `M7-16` P0 用户流程增加无鼠标键盘路径和基础可访问性检查。
- [x] `M7-17` 用户可见错误只显示稳定短消息,详细诊断进入可导出报告。
- [x] `M7-18` 完成 30 分钟持续编辑、自动保存、重开 soak 测试。
### M8 VDB 自动分页最小闭环
- [ ] `M8-01` 定义 GPU page-fault feedback buffer schema、容量和 overflow code。
- [ ] `M8-02` shader 对未驻留 leaf 记录唯一 page ID不越界写 feedback。
- [ ] `M8-03` CPU 读取 feedback 后排序、去重并绑定 render revision。
- [ ] `M8-04` stale frame feedback 不触发 I/O。
- [ ] `M8-05` page request 使用现有 manifest range/hash不建立第二套地址模型。
- [ ] `M8-06` 同页并发请求合并,取消最后一个订阅者时中止 range。
- [ ] `M8-07` page hash 错误不写 resident cache并返回稳定错误。
- [ ] `M8-08` LRU 淘汰跳过当前 frame pin 的 page。
- [ ] `M8-09` page upload 成功后只安排一次渐进重绘。
- [ ] `M8-10` 重绘上限防止坏数据造成无限 render loop。
- [ ] `M8-11` 主线程 WebGPU 验证缺页、加载、重绘到确定性像素。
- [ ] `M8-12` Offscreen Worker 验证相同页序列和最终像素。
- [ ] `M8-13` page fetch 中 network interruption 可从精确 byte offset 续传。
- [ ] `M8-14` Worker restart 从 OPFS 恢复 manifest但不信任未复验 resident 状态。
- [ ] `M8-15` device loss 重建 page table并按可见集合有界回放。
- [ ] `M8-16` OOM 释放 page table/resident/feedback buffer 各一次。
- [ ] `M8-17` 64 MiB sparse bundle 性能与取消门。
- [ ] `M8-18` Volume Main、asset binding、双视口联合保存重开。
- [ ] `M8-19` desktop/主线程/Offscreen 三视角 golden 和误差阈值。
- [ ] `M8-20` 只有 M8 全部通过后更新 N-015 对应 sliceN-015 全域仍不自动 COMPLETE。
- [x] `M8-01` 定义 GPU page-fault feedback buffer schema、容量和 overflow code。
- [x] `M8-02` shader 对未驻留 leaf 记录唯一 page ID不越界写 feedback。
- [x] `M8-03` CPU 读取 feedback 后排序、去重并绑定 render revision。
- [x] `M8-04` stale frame feedback 不触发 I/O。
- [x] `M8-05` page request 使用现有 manifest range/hash不建立第二套地址模型。
- [x] `M8-06` 同页并发请求合并,取消最后一个订阅者时中止 range。
- [x] `M8-07` page hash 错误不写 resident cache并返回稳定错误。
- [x] `M8-08` LRU 淘汰跳过当前 frame pin 的 page。
- [x] `M8-09` page upload 成功后只安排一次渐进重绘。
- [x] `M8-10` 重绘上限防止坏数据造成无限 render loop。
- [x] `M8-11` 主线程 WebGPU 验证缺页、加载、重绘到确定性像素。
- [x] `M8-12` Offscreen Worker 验证相同页序列和最终像素。
- [x] `M8-13` page fetch 中 network interruption 可从精确 byte offset 续传。
- [x] `M8-14` Worker restart 从 OPFS 恢复 manifest但不信任未复验 resident 状态。
- [x] `M8-15` device loss 重建 page table并按可见集合有界回放。
- [x] `M8-16` OOM 释放 page table/resident/feedback buffer 各一次。
- [x] `M8-17` 64 MiB sparse bundle 性能与取消门。
- [x] `M8-18` Volume Main、asset binding、双视口联合保存重开。
- [x] `M8-19` desktop/主线程/Offscreen 三视角 golden 和误差阈值。
- [x] `M8-20` 只有 M8 全部通过后更新 N-015 对应 sliceN-015 全域仍不自动 COMPLETE。
### M9 非 Mesh、Grease Pencil 与 Paint 增量
- [ ] `M9-01` 外部字体导入先做路径、类型、大小和 hash 校验。
- [ ] `M9-02` 字体进入 OPFS content-addressed asset 后才写 Main VFont。
- [ ] `M9-03` 字体替换/撤销/保存/重开/缺失资产形成闭环。
- [ ] `M9-04` Curve 完整 topology editor 先冻结 operator 白名单和预算。
- [ ] `M9-05` 每个新增 Curve operator 单独完成 Main/undo/save/golden 后再开放 UI。
- [ ] `M9-06` Grease Pencil marquee 只操作当前 drawing 的稳定 point/stroke ID。
- [ ] `M9-07` Grease Pencil 2D canvas 与 3D viewport 使用同一 selection revision。
- [ ] `M9-08` Grease Pencil layer/frame reorder 完成 undo/save/reopen。
- [ ] `M9-09` Paint 建立真实深度可见性采样,不用 CPU proxy 冒充。
- [ ] `M9-10` Paint stroke 分块提交且一次 pointer session 只产生一个 undo step。
- [ ] `M9-11` Texture paint dirty tile 原子写入 packed/UDIM 资产。
- [ ] `M9-12` Weight paint normalize/limit/mirror 与 Blender desktop golden 对比
- [ ] `M9-13` PBVH 若不进入 WASM则相关笔刷保持明确 capability block
- [ ] `M9-14` 三个编辑域分别通过 Worker restart、OOM、GPU release 和小场景恢复
- [x] `M9-01` 外部字体导入先做路径、类型、大小和 hash 校验。
- [x] `M9-02` 字体进入 OPFS content-addressed asset 后才写 Main VFont。
- [x] `M9-03` 字体替换/撤销/保存/重开/缺失资产形成闭环。
- [x] `M9-04` Curve 完整 topology editor 先冻结 operator 白名单和预算。
- [x] `M9-05` 每个新增 Curve operator 单独完成 Main/undo/save/golden 后再开放 UI。
- [x] `M9-06` Grease Pencil marquee 只操作当前 drawing 的稳定 point/stroke ID。
- [x] `M9-07` Grease Pencil 2D canvas 与 3D viewport 使用同一 selection revision。
- [x] `M9-08` Grease Pencil layer/frame reorder 完成 undo/save/reopen。
- [x] `M9-09` Paint 建立真实深度可见性采样,不用 CPU proxy 冒充。
- [x] `M9-10` Paint stroke 分块提交且一次 pointer session 只产生一个 undo step。
- [x] `M9-11` Texture paint dirty tile 原子写入 packed/UDIM 资产。
- [x] `M9-12` Weight paint normalize/limit/mirror 与 Blender 5.2 desktop golden 对比;镜像仅对
复核后的局部坐标对称映射放行,限权后按 Blender 语义归一化
- [x] `M9-13` PBVH 若不进入 WASM则相关笔刷保持明确 capability block
- [x] `M9-14` 三个编辑域分别通过 Worker restart、OOM、GPU release 和小场景恢复。
### M10 Geometry Nodes、Shader、NLA 与 Simulation
### M10 Geometry Nodes、Shader、NLA 与 Simulation15/15
- [ ] `M10-01` 从 Blender Main 读取图拓扑、socket 默认值、link 和稳定 node ID。
- [ ] `M10-02` 为 Geometry Nodes 建立 allowlist不支持节点保留原数据并阻断求值。
- [ ] `M10-03` 每个 allowlist 节点增加 desktop fixture、WASM 输出和误差阈值。
- [ ] `M10-04` field/domain 转换显式预算,禁止按无限域展开 JSON。
- [ ] `M10-05` Simulation Zone cache 绑定 graph/source/revision hash。
- [ ] `M10-06` cache 取消、LRU、重启和损坏隔离通过后才允许播放。
- [ ] `M10-07` Shader 图只编译声明的 Principled/Image/Normal/Math 子集。
- [ ] `M10-08` shader compile key 包含 graph、texture、color space 和 renderer backend。
- [ ] `M10-09` compile failure 不替换上一份可用 material pipeline。
- [ ] `M10-10` 任意未支持 Shader 节点返回 stable capability block不静默降级。
- [ ] `M10-11` NLA track/strip/action/time mapping 先完成只读精确求值。
- [ ] `M10-12` NLA 单个编辑 operator 分别完成 Main transaction、undo 和保存重开。
- [ ] `M10-13` Physics 本地 solver 按 family 探测;不支持项只消费 desktop/server bake。
- [ ] `M10-14` 每类 cache 验证 source hash、frame range、字节预算和版本。
- [ ] `M10-15` GN/Shader/NLA/Simulation 分别建立浏览器性能、OOM 和恶意图输入门。
- [x] `M10-01` 从 Blender Main 读取图拓扑、socket 默认值、link 和稳定 node ID。
- [x] `M10-02` 为 Geometry Nodes 建立 allowlist不支持节点保留原数据并阻断求值。
- [x] `M10-03` 每个 allowlist 节点增加 desktop fixture、WASM 输出和误差阈值。
- [x] `M10-04` field/domain 转换显式预算,禁止按无限域展开 JSON。
- [x] `M10-05` Simulation Zone cache 绑定 graph/source/revision hash。
- [x] `M10-06` cache 取消、LRU、重启和损坏隔离通过后才允许播放。
- [x] `M10-07` Shader 图只编译声明的 Principled/Image/Normal/Math 子集。
- [x] `M10-08` shader compile key 包含 graph、texture、color space 和 renderer backend。
- [x] `M10-09` compile failure 不替换上一份可用 material pipeline。
- [x] `M10-10` 任意未支持 Shader 节点返回 stable capability block不静默降级。
- [x] `M10-11` NLA track/strip/action/time mapping 先完成只读精确求值。
- [x] `M10-12` NLA 单个编辑 operator 分别完成 Main transaction、undo 和保存重开。
- [x] `M10-13` Physics 本地 solver 按 family 探测;不支持项只消费 desktop/server bake。
- [x] `M10-14` 每类 cache 验证 source hash、frame range、字节预算和版本。
- [x] `M10-15` GN/Shader/NLA/Simulation 分别建立浏览器性能、OOM 和恶意图输入门。
### M11 Lighting、Render、Compositor 与 Sequencer
### M11 Lighting、Render、Compositor 与 Sequencer13/14
- [ ] `M11-01` Camera/Light/World/Scene color management 建立字段级 parity 表。
- [ ] `M11-02` 每个支持字段通过 Main edit、undo、save/reopen 和 viewport 映射。
- [ ] `M11-03` Three/WebGPU 灯光数量、shadow map 和纹理预算显式化。
- [ ] `M11-04` Web 实时渲染结果与 Blender reference 采用可解释图像误差指标。
- [ ] `M11-05` Cycles/复杂 Eevee/硬件后端固定为 server job不在浏览器伪造等价。
- [ ] `M11-06` server render job 绑定 source hash、Blender build、设置和输出 hash
- [ ] `M11-07` Compositor allowlist 每新增一个 node 单独增加 CPU/WebGPU golden
- [ ] `M11-08` unsupported compositor graph 保留原图并阻断执行。
- [ ] `M11-09` Sequencer IMAGE/SOUND/MOVIE codec 由运行时 probe 决定,不按扩展名猜测
- [ ] `M11-10` long media proxy/cache 绑定源 hash 和 decode capability。
- [ ] `M11-11` seek/scrub/decode 迟到结果全部受 revision gate 控制。
- [ ] `M11-12` 最终视频编码固定 server/export capability不误报本地完成
- [ ] `M11-13` audio context suspend/resume、设备缺失和静音恢复有专项测试。
- [x] `M11-01` Camera/Light/World/Scene color management 建立字段级 parity 表。
- [x] `M11-02` 每个支持字段通过 Main edit、undo、save/reopen 和 viewport 映射。
- [x] `M11-03` Three/WebGPU 灯光数量、shadow map 和纹理预算显式化。
- [x] `M11-04` Web 实时渲染结果与 Blender reference 采用可解释图像误差指标;固定 SRGB8/STRAIGHT RGBA、MAE/RMS/P95/坏像素/前景 IoU/alpha 覆盖率,主线程与 Offscreen 共享同一 256×256 Blender 5.2 Eevee fixture golden
- [x] `M11-05` Cycles/复杂 Eevee/硬件后端固定为 server job不在浏览器伪造等价schema 1 将 bounded Eevee/WebGL2 与 server target 分离endpoint 未配置时稳定 fail-closed
- [x] `M11-06` server render job 绑定 source `.blend` hash、Blender 5.2 build hash、规范化设置 hash 和实际输出 hash本地 loopback server 由 Blender 5.2 headless 执行 fixture rendersource/settings/build/output 篡改均 fail-closed
- [x] `M11-07` Compositor allowlist 每新增一个 node 单独增加 CPU/WebGPU golden;当前仅冻结
Constant Color、Exposure、Invert、Composite 的线性 sRGB Float32 有界链,真实 Blender 5.2
Main fixture 在 CPU 与 Chromium WebGPU compute 上逐节点 hash 等价,其余节点仍阻断
- [x] `M11-08` unsupported compositor graph 保留原图并阻断执行CPU 与 cached 入口都在
求值/缓存命中前扫描完整图,未连接到输出的 Unsupported 节点也稳定阻断,真实 Main graph、
Blender type metadata 和 revision 保持不变
- [x] `M11-09` Sequencer IMAGE/SOUND/MOVIE codec 由运行时 probe 决定,不按扩展名猜测;
receipt 绑定 strip family、MIME、字节长度和 source SHA-256Chromium 分别以 ImageBitmap、
固定采样率 Web Audio 和 HTMLMedia 实际解码 PNG/WAV/H.264 MP4。
- [x] `M11-10` long media proxy/cache 绑定源 hash 和 decode capabilityschema 1 将 source
family/MIME/bytes/SHA-256、M11-09 READY receipt、RGBA8 profile 和 source frame 共同绑定为
cache identitypayload 独立验 hashChromium 实际生成首帧 proxy 并通过 LRU/Storage Worker
重开门。
- [x] `M11-11` seek/scrub/decode 迟到结果全部受 revision gate 控制;三类请求共享单调
request revision结果必须回显 timeline/request identitytimeline 换代、旧请求和伪造结果
均在 publish/cache callback 前返回 `STALE/REVISION_CONFLICT`
- [x] `M11-12` 最终视频编码固定 server/export capability不误报本地完成schema 1 绑定
timeline/source revision、`.blend` SHA-256、帧率/范围、分辨率和 codec settings hash
endpoint 缺失时 fail-closed即使检测到 `VideoEncoder` 也保持 `localEncoding=BLOCKED`
- [x] `M11-13` audio context suspend/resume、设备缺失和静音恢复有专项测试schema 1
区分 context/output 状态,真实 Chromium `AudioContext` 通过用户手势、挂起、静音恢复、
二次挂起/恢复和 close缺设备与 resume failure 保持结构化静音阻断。
- [ ] `M11-14` render/compositor/media 全部覆盖取消、重启、预算释放和恢复。
### M12 Asset、IO、Editor 与工作流