Complete V1 RC deployment capability gates
This commit is contained in:
@@ -95,12 +95,46 @@ React 工作区和编辑器
|
||||
| `npm --prefix web run test:status-consistency` | 通过;12 parity blocked、0 release blocked |
|
||||
| `npm --prefix web run test:release-evidence` | 通过;17 records、0 missing、`READY` |
|
||||
|
||||
### 4.3 真实发布缺口
|
||||
### 4.3 2026-08-15 重新盘点结论
|
||||
|
||||
当前 V1 release gate 已无 evidence 字段缺失,`faults.oom` 由独立 Chromium 四场景命令和
|
||||
构件 hash 绑定。`geometry1M`、4K/8K texture、600 帧 simulation cache、断网、device loss、
|
||||
恶意 blend、zip bomb、离线包和 V1 用户闭环仍须在 M5 全矩阵中持续回归。Blender 全域
|
||||
`parityStatus=BLOCKED` 的长期差距不因 V1 gate `READY` 而关闭。
|
||||
这次盘点把“V1 发布切片”和“完整 Blender Web 对标”分开统计,禁止用一个百分比混合两种
|
||||
完成定义:
|
||||
|
||||
| 观察轴 | 已完成 | 未完成/阻断 | 当前判断 |
|
||||
| --- | --- | --- | --- |
|
||||
| V1 family release | 12/12 `releaseStatus=READY` | 0 family release blocked | V1 功能切片已实现 |
|
||||
| Blender 5.2 全域 parity | 0/12 `parityStatus=COMPLETE` | 12/12 `BLOCKED` | 不是完整 Web Blender |
|
||||
| 发布证据字段 | 17 条成功 record、0 missing;49/49 唯一 acceptance 通过 | 无 V1 证据缺口 | release gate 与 acceptance 审计链已闭环 |
|
||||
| 浏览器 | Chromium 主线程/Offscreen 两条路径 | Firefox、WebKit 未纳入 | Chromium-only |
|
||||
| Blender runtime | Main/Depsgraph/WebEngine 有界 WASM 子集 | 完整窗口系统、GPU 后端、Python/add-on、全量 operator 未移植 | 子集架构,不是桌面二进制直编 |
|
||||
| 交付 | 离线 binary/source archive、SBOM、SHA-256 可复现 | 正式部署模板、持续发布流水线、跨机器复验待做 | 本地 V1 RC 已收口 |
|
||||
|
||||
2026-08-15 重新执行 `typecheck`、`lint`、14 个 Node tests、status consistency、release
|
||||
evidence checker 和 `git diff --check`,均退出 0。acceptance runner 解析 12 个 family 的
|
||||
50 条声明,去重为 49 条命令并全部通过,命令总耗时 454,106 ms;清单 SHA-256 为
|
||||
`74c01764987c3dce0601a20cdf494f8076102f6d54262a1d13df953abee96160`。官方 Blender 5.2.0
|
||||
Linux archive SHA-256 为 `96f6c181a30f4950607839dc84d42a354b250d8a0231b098b59b7bc69c351c48`,
|
||||
运行时 `USD=True`,desktop USD roundtrip 已通过。
|
||||
|
||||
最终 release evidence 生成时间为 `2026-08-15T04:43:09.832Z`,17 条 record 均为 exit code 0、
|
||||
非空输出和非空构件 hash,总命令耗时 553,427 ms。`v1-user-loop` record 已绑定上述 acceptance
|
||||
清单 hash。
|
||||
|
||||
### 4.4 当前阻断与决策顺序
|
||||
|
||||
1. `P0`:V1 本地 RC 已无阻断;下一领取点为 `M6-01` 部署响应头合同。
|
||||
2. `P1`:当前离线包已在本机连续两次可复现,还缺独立目录/独立机器复验和真实 HTTP 部署门。
|
||||
3. `P1`:pthread/single-thread 的生产选择、隔离头、fallback 和缓存升级合同尚未形成发布证据。
|
||||
4. `P2`:完整 Blender 功能域继续受 VDB demand paging、PBVH、Geometry Nodes evaluator、
|
||||
通用 Shader、完整编辑器/渲染/媒体和安全脚本边界阻断。
|
||||
|
||||
### 4.5 真实发布缺口
|
||||
|
||||
当前 V1 release gate 已无 evidence 或 acceptance 缺口,`faults.oom` 由独立 Chromium 四场景
|
||||
命令和构件 hash 绑定。`geometry1M`、4K/8K texture、600 帧 simulation cache、断网、device
|
||||
loss、恶意 blend、zip bomb、离线包和 V1 用户闭环均已在最终 M5 全矩阵回归。后续代码变化
|
||||
必须使 source/tool/package hash 过期并重跑对应证据。Blender 全域 `parityStatus=BLOCKED` 的
|
||||
长期差距不因 V1 gate `READY` 而关闭。
|
||||
|
||||
## 5. 里程碑总览
|
||||
|
||||
@@ -111,7 +145,7 @@ React 工作区和编辑器
|
||||
| M2 10M geometry | 大几何浏览器性能与恢复证据 | 已完成,持续回归 | `performance.geometry10M=true` |
|
||||
| M3 long media | 长时间线索引、seek、取消与重启证据 | 已完成,持续回归 | `performance.longMedia=true` |
|
||||
| M4 OOM | 四类确定性内存故障与恢复证据 | 已完成,持续回归 | `faults.oom=true` |
|
||||
| M5 V1 RC | 可复现离线候选包、SBOM、校验和 | 未开始 | release gate `READY` |
|
||||
| M5 V1 RC | 可复现离线候选包、SBOM、校验和 | 已完成,持续回归 | release gate `READY`、49/49 acceptance |
|
||||
|
||||
任务严格按 M1 -> M2 -> M3 -> M4 -> M5 领取。里程碑内部允许先写纯校验任务,但不得在
|
||||
前一里程碑失败时把后一里程碑标为完成。
|
||||
@@ -347,44 +381,354 @@ WebGL GPU 资源组和 NanoVDB WebGPU resident/page-table 四类确定性失败
|
||||
|
||||
## 11. M5 V1 发布候选
|
||||
|
||||
### M5.1 全矩阵
|
||||
M5 按 `PREP -> STATIC -> ACCEPT -> LOOP -> PERF -> FAULT -> VDB -> PACKAGE -> AUDIT`
|
||||
串行推进。每个编号只对应一条命令或一个可独立判断的断言;失败项标为 `[!]` 并附退出码、
|
||||
错误摘要和重跑命令。浏览器任务统一使用空闲的 `WEB_TEST_PORT`,同一任务的 Web server 退出后
|
||||
才领取下一任务,避免端口复用掩盖真实启动失败。
|
||||
|
||||
- [ ] `M5-RC-01` clean install 后通过 typecheck、lint、unit。
|
||||
- [ ] `M5-RC-02` 运行所有 V1 required slice acceptance commands。
|
||||
- [ ] `M5-RC-03` 运行 P0 用户闭环和 Chromium 全套 E2E。
|
||||
- [ ] `M5-RC-04` 运行 geometry/media/texture/simulation 性能矩阵。
|
||||
- [ ] `M5-RC-05` 运行 OOM/device-loss/network/malformed/zip-bomb 故障矩阵。
|
||||
- [ ] `M5-RC-06` 运行 VDB 全矩阵和双生产视口。
|
||||
### M5.0 环境和输入冻结
|
||||
|
||||
### M5.2 构件和可复现性
|
||||
- [x] `M5-PREP-01` 开始执行前运行 `git status --short --branch`,确认基线为
|
||||
`main...origin/main` 且无用户未提交改动。
|
||||
- [x] `M5-PREP-02` 记录 Node、npm、CMake、Ninja、Emscripten、Chromium 和 desktop Blender
|
||||
的实际版本或明确缺失项。
|
||||
- [x] `M5-PREP-03` 运行 `tools/web/check-emscripten.sh`,确认 Web toolchain 可用。
|
||||
- [x] `M5-PREP-04` 运行 `tools/web/check-local-deps.sh`,确认运行时不依赖 CDN。
|
||||
- [x] `M5-PREP-05` 检查 `build_web_blender6/bin/web_engine.{js,wasm}` 和安装到 Web app 的
|
||||
engine manifest/hash 一致。
|
||||
- [x] `M5-PREP-06` 检查发布所需 fixture、VDB native tools、Chrome 可执行文件和本地
|
||||
Blender 可执行文件均存在。
|
||||
- [x] `M5-PREP-07` 记录磁盘空间、内存和 CPU 数;资源不足时在运行长矩阵前停止并记录。
|
||||
- [x] `M5-PREP-08` 运行 `npm --prefix web ci`,只使用 lockfile 完成 clean install。
|
||||
- [x] `M5-PREP-09` 运行 `npm audit`;将构建链间接依赖 `nanoid` 从 3.3.17 更新到
|
||||
3.3.18 后重新 clean install,确认 high/critical/total 均为 0。
|
||||
|
||||
- [ ] `M5-RC-07` 重新生成 SBOM 和 third-party notices。
|
||||
- [ ] `M5-RC-08` 生成离线二进制包和 corresponding source 包。
|
||||
- [ ] `M5-RC-09` 连续生成两次并比较规范化摘要。
|
||||
- [ ] `M5-RC-10` 生成 `SHA256SUMS.txt`,每个引用文件存在且 hash 匹配。
|
||||
- [ ] `M5-RC-11` 检查包内无 CDN、绝对开发路径、测试 secret 或未声明运行时依赖。
|
||||
### M5.1 静态和单元门
|
||||
|
||||
### M5.3 声明和最终状态
|
||||
- [x] `M5-STATIC-01` 运行 `npm --prefix web run typecheck`。
|
||||
- [x] `M5-STATIC-02` 运行 `npm --prefix web run lint`。
|
||||
- [x] `M5-STATIC-03` 运行 `npm --prefix web test`,记录通过/失败/跳过计数:14/0/0。
|
||||
- [x] `M5-STATIC-04` 运行 `npm --prefix web run build`,确认生产构建可生成。
|
||||
- [x] `M5-STATIC-05` 运行 `npm --prefix web run test:status-consistency`。
|
||||
- [x] `M5-STATIC-06` 运行 `npm --prefix web run test:release-evidence`,只作为旧证据可解析性
|
||||
检查,不据此刷新 M5 证据。
|
||||
- [x] `M5-STATIC-07` 运行 `bash tools/web/check-dual-engine.sh`,确认 native 与 WASM 引擎契约。
|
||||
- [x] `M5-STATIC-08` 运行 `node tools/web/run-web-engine-smoke.mjs`,确认安装后的生产 WASM
|
||||
可实际启动。
|
||||
- [x] `M5-STATIC-09` 重建 standalone single-thread 与 pthread Emscripten 变体;两者均使用
|
||||
Blender 5.2 的 C++20 标准并成功生成 JS/WASM。
|
||||
|
||||
- [ ] `M5-RC-12` UI、README、scope 和 capability report 只声明 V1 白名单。
|
||||
- [ ] `M5-RC-13` 长期 parity 差距继续保持,不因发布 V1 被改成全域 COMPLETE。
|
||||
- [ ] `M5-RC-14` 重新收集 release evidence,不复用与当前构件 hash 不一致的旧 record。
|
||||
- [ ] `M5-RC-15` release gate 输出 `READY` 且 missing 为空。
|
||||
- [ ] `M5-RC-16` `git diff --check`、状态一致性和 release evidence checker 全部通过。
|
||||
- [ ] `M5-RC-17` 工作区生成物均被忽略、纳入构件或有文档解释。
|
||||
### M5.2 V1 required slice 验收
|
||||
|
||||
本节命令来源必须是 `status/parity-ledger.json` 的 `families[].acceptance`。重复命令只执行一次;
|
||||
带 `web:e2e:<pattern>` 的项转换成 Playwright `-g` 过滤器,不能把协议单测替代为浏览器测试。
|
||||
|
||||
- [x] `M5-ACCEPT-01` N-015 non-mesh native roundtrip 与 desktop golden。
|
||||
- [x] `M5-ACCEPT-02` N-015 non-mesh GLB/USD serialization 和 desktop USD roundtrip 通过;
|
||||
官方 Blender 5.2.0 LTS runtime `USD=True`。
|
||||
- [x] `M5-ACCEPT-03` N-015 1M binary、selection history 和 curve interaction 浏览器门。
|
||||
- [x] `M5-ACCEPT-04` N-015 `N-015|non-mesh` 聚合 E2E 与真实 OPFS quota。
|
||||
- [x] `M5-ACCEPT-05` N-016 Grease Pencil native roundtrip、editor 和聚合 E2E。
|
||||
- [x] `M5-ACCEPT-06` N-017 Paint/weight native roundtrip 和聚合 E2E。
|
||||
- [x] `M5-ACCEPT-07` N-018 Physics Main reader、simulation cache 和聚合 E2E。
|
||||
- [x] `M5-ACCEPT-08` N-019 Lighting Main roundtrip 和 Scene exposure E2E。
|
||||
- [x] `M5-ACCEPT-09` N-020 Compositor Main reader 和有界 CPU compositor E2E。
|
||||
- [x] `M5-ACCEPT-10` N-021 Sequencer Main reader 和 timeline/codec gate E2E。
|
||||
- [x] `M5-ACCEPT-11` N-022 Mask Main reader 和 tracking/mask E2E。
|
||||
- [x] `M5-ACCEPT-12` N-023 Library Main reader、asset/zip 安全 E2E 和共享 VDB fault 门。
|
||||
- [x] `M5-ACCEPT-13` N-024 Editor Main reader 和 context/keymap E2E。
|
||||
- [x] `M5-ACCEPT-14` N-025 Script Main reader、isolation 和默认拒绝 E2E。
|
||||
- [x] `M5-ACCEPT-15` N-026 release gate E2E;断言 Chromium-only 声明和 V1 release 状态。
|
||||
- [x] `M5-ACCEPT-16` 实现 acceptance coverage checker:解析 12 个 family、校验命名空间、
|
||||
npm script 存在、E2E pattern 非空并去重。
|
||||
- [x] `M5-ACCEPT-17` 实现 acceptance runner:顺序执行去重后的命令,浏览器命令使用独立端口,
|
||||
写入 ledger SHA-256、环境版本、退出码、耗时和输出摘要。
|
||||
- [x] `M5-ACCEPT-18` 对未知命名空间、缺失 script、空 pattern、重复声明、stale source/tool/package、
|
||||
漏项、失败退出码、空输出和 hash 漂移建立负例/断言。
|
||||
- [x] `M5-ACCEPT-19` 使用 SHA-256 校验的官方 USD-enabled Blender 5.2 重跑 desktop USD
|
||||
roundtrip;归档 hash 和 executable hash 均写入 acceptance evidence。
|
||||
- [x] `M5-ACCEPT-20` 运行完整 acceptance runner:50 declarations、49 unique、49 passed、
|
||||
0 failed,总命令耗时 454,106 ms。
|
||||
- [x] `M5-ACCEPT-21` 将 acceptance evidence SHA-256
|
||||
`74c01764987c3dce0601a20cdf494f8076102f6d54262a1d13df953abee96160` 绑定到最终
|
||||
`v1-user-loop` release record。
|
||||
|
||||
### M5.3 P0 用户闭环和 Chromium 回归
|
||||
|
||||
- [x] `M5-LOOP-01` 独立运行 `test:v1-user-loop`,覆盖 import/edit/undo/redo/save。
|
||||
- [x] `M5-LOOP-02` 在同一 P0 测试中确认 StorageWorker 与 WebEngineWorker 均终止后重建。
|
||||
- [x] `M5-LOOP-03` 确认重开后 object/mesh/material stable ID 和 geometry hash 不变。
|
||||
- [x] `M5-LOOP-04` 确认主线程与 OffscreenCanvas 两个生产视口均产生非空像素。
|
||||
- [x] `M5-LOOP-05` 确认 GLB 严格回读通过且未支持 Shader 返回稳定阻断。
|
||||
- [x] `M5-LOOP-06` 运行 `test:e2e -- --workers=1` 全套 Chromium E2E:122/122 通过,
|
||||
0 失败、0 跳过,总耗时 6.4 分钟。
|
||||
- [x] `M5-LOOP-07` 运行 `test:browser` 离线引擎发布配置 smoke:3/3 通过。
|
||||
|
||||
### M5.4 性能和容量矩阵
|
||||
|
||||
- [x] `M5-PERF-01` 运行 100k/1M geometry `test:release-performance`。
|
||||
- [x] `M5-PERF-02` 运行 10M geometry 分块、双视口、取消、释放和恢复门。
|
||||
- [x] `M5-PERF-03` 校验 10M report 精确为 `triangleCount=10_000_000` 且没有缩小 fixture 的开关。
|
||||
- [x] `M5-PERF-04` 运行 4K texture decode/upload/budget/release 门。
|
||||
- [x] `M5-PERF-05` 运行 8K texture decode/upload/budget/release 门。
|
||||
- [x] `M5-PERF-06` 运行 600 帧 simulation cache 性能、LRU 和 Worker restart 门。
|
||||
- [x] `M5-PERF-07` 运行 long media index/seek/cancel/LRU/restart 门。
|
||||
- [x] `M5-PERF-08` 每份性能报告均输出 fixture 规模、耗时、峰值/预算、释放后值和恢复状态。
|
||||
|
||||
### M5.5 故障和恶意输入矩阵
|
||||
|
||||
- [x] `M5-FAULT-01` 运行 WASM/Main、OPFS、GPU、VDB 四场景 OOM recovery。
|
||||
- [x] `M5-FAULT-02` 运行主线程 WebGL device-loss 恢复门。
|
||||
- [x] `M5-FAULT-03` 运行网络 range 中断、续传、hash 和 rollback 门。
|
||||
- [x] `M5-FAULT-04` 运行 malicious `.blend` 截断、长度溢出和预算门,拒绝 5 类输入。
|
||||
- [x] `M5-FAULT-05` 运行 asset archive zip-bomb、路径穿越和膨胀预算门。
|
||||
- [x] `M5-FAULT-06` 运行 OPFS quota/staging/journal rollback 浏览器门。
|
||||
- [x] `M5-FAULT-07` 核对每个失败均返回稳定 error code/stage,旧 revision/hash 不变。
|
||||
- [x] `M5-FAULT-08` 核对每个故障后同会话或 Worker 重启的小场景恢复成功且临时资源归零。
|
||||
|
||||
### M5.6 VDB/WebGPU 发布矩阵
|
||||
|
||||
- [x] `M5-VDB-01` 校验 VDB resource catalog、license、固定 SHA-256 和 availability。
|
||||
- [x] `M5-VDB-02` 运行 desktop OpenVDB -> NanoVDB native converter 正例与畸形输入。
|
||||
- [x] `M5-VDB-03` 运行 server job isolation/cancel/timeout 和 desktop/server hash 等价。
|
||||
- [x] `M5-VDB-04` 运行浏览器 conversion boundary 和稳定 capability block。
|
||||
- [x] `M5-VDB-05` 运行 HTTP range -> OPFS 原子绑定、tamper 和 Worker restart。
|
||||
- [x] `M5-VDB-06` 运行真实 Float32/Vec3 NanoVDB CPU/WGSL sampling。
|
||||
- [x] `M5-VDB-07` 运行主线程 WebGL 与 OffscreenCanvas Worker 生产视口非空像素。
|
||||
- [x] `M5-VDB-08` 运行多 grid 材质、resident LRU、网络/Worker/device-loss fault 恢复。
|
||||
- [x] `M5-VDB-09` 核对自动 page fault、深度合成、大 bundle 和发布三视角 golden 仍明确排除。
|
||||
|
||||
### M5.7 构件、许可证和可复现性
|
||||
|
||||
- [x] `M5-PACKAGE-01` 从 lockfile 重新生成 SPDX 2.3 SBOM,共 150 个 package。
|
||||
- [x] `M5-PACKAGE-02` 检查 third-party notices 覆盖 React、Three、Vite、TypeScript、Playwright、
|
||||
Blender 和本地 native/WASM 依赖。
|
||||
- [x] `M5-PACKAGE-03` 重新执行生产 build,检查 engine JS/WASM 和 manifest 均进入 dist。
|
||||
- [x] `M5-PACKAGE-04` 检查 dist 的 HTML/JS/CSS/JSON 不引用 HTTP(S) CDN。
|
||||
- [x] `M5-PACKAGE-05` 生成离线 binary archive,大小 7,585,557 bytes。
|
||||
- [x] `M5-PACKAGE-06` 生成 corresponding source archive 和 `SOURCE_OFFER.txt`,大小
|
||||
205,827,673 bytes。
|
||||
- [x] `M5-PACKAGE-07` 第一次记录 binary/source archive SHA-256。
|
||||
- [x] `M5-PACKAGE-08` 从相同输入再次生成两个 archive。
|
||||
- [x] `M5-PACKAGE-09` 断言第二次 binary/source SHA-256 分别与第一次完全相同。
|
||||
- [x] `M5-PACKAGE-10` 生成顶层 `release/SHA256SUMS.txt`。
|
||||
- [x] `M5-PACKAGE-11` 逐行校验 `SHA256SUMS.txt` 引用文件存在且 `sha256sum -c` 通过。
|
||||
- [x] `M5-PACKAGE-12` 扫描构件中的 CDN、绝对工作区路径、token/password/private key 特征。
|
||||
- [x] `M5-PACKAGE-13` binary archive 与 manifest 完全一致;source archive 无缓存、trace、
|
||||
build、dist、测试报告或日志。
|
||||
|
||||
### M5.8 声明、证据和最终审计
|
||||
|
||||
- [x] `M5-AUDIT-01` UI、README 和 scope 统一使用 `Web Blender Modeler V1`,浏览器范围为
|
||||
Chromium-only。
|
||||
- [x] `M5-AUDIT-02` UI 不把 `SERVER/EXCLUDED/BLOCKED` 能力呈现为可本地成功。
|
||||
- [x] `M5-AUDIT-03` 确认 12 个 family 仍为 `parityStatus=BLOCKED`。
|
||||
- [x] `M5-AUDIT-04` 确认 12 个 V1 required slice 均为 `releaseStatus=READY`。
|
||||
- [x] `M5-AUDIT-05` 运行完整 `release:evidence`,用本轮命令输出和构件 hash 替换旧 records;
|
||||
当前生成时间 `2026-08-15T04:43:09.832Z`,17 条 record,总命令耗时 553,427 ms。
|
||||
- [x] `M5-AUDIT-06` 检查 17 条 evidence record 均为 exit code 0、非空输出和非空构件 hash。
|
||||
- [x] `M5-AUDIT-07` 检查 evidence 的 ledger SHA-256 与当前文件完全一致。
|
||||
- [x] `M5-AUDIT-08` 运行 `test:release-evidence`,结果 `READY`、`missing=[]`。
|
||||
- [x] `M5-AUDIT-09` 运行 `test:status-consistency`,结果 12 parity blocked、0 release blocked。
|
||||
- [x] `M5-AUDIT-10` 运行 `git diff --check`。
|
||||
- [x] `M5-AUDIT-11` 运行 `git status --short --ignored`;源码/证据为 tracked 工作项,build、dist、
|
||||
release、node_modules、测试结果和工具链 cache 均为预期 ignored 生成物。
|
||||
- [x] `M5-AUDIT-12` 将实际命令、计数、耗时、失败重跑和最终 archive hash 写回本计划与
|
||||
`PROJECT_STATUS_AND_NEXT_WORK.md`,不得把未运行项标完成。
|
||||
|
||||
M5 退出条件:所有必需命令退出码 0;release gate `READY`;离线包可复现;当前构件、源码、
|
||||
SBOM、状态和 evidence SHA-256 相互一致。
|
||||
|
||||
## 12. V1 后任务
|
||||
M5 最终 archive SHA-256:binary
|
||||
`f2903a75026a0a28615aeb5f4834a3859af83022c82bc50e28437dcbed68e549`;source
|
||||
`9a9c1b505c68a618de842be7c248f628b104b11b80e8a40d111f62540fcba327`。下一任务:`M6-01`。
|
||||
|
||||
V1 RC 完成前不领取以下任务:
|
||||
## 12. V1 后原子里程碑
|
||||
|
||||
1. VDB 自动 page-fault feedback、渐进重绘和生产 Offscreen device-loss 联合恢复。
|
||||
2. Volume Main + asset binding + 生产视口联合重开,以及三视角 desktop/Chromium golden。
|
||||
3. 64 MiB/512 MiB/1 GiB sparse bundle、深度合成和完整 VDB 大包/取消矩阵。
|
||||
4. 新外部字体、PBVH、完整 paint、Geometry Nodes/Simulation evaluator、任意 Shader、完整
|
||||
NLA、Compositor、Sequencer、Tracking、Asset Browser、Editor 和 Scripting 对标。
|
||||
5. Firefox/WebKit 支持和跨浏览器发布门。
|
||||
本节是 V1 RC 之后的领取顺序。每个里程碑控制在一个可独立回归的行为闭环;同一功能域不再
|
||||
一次领取 reader、writer、UI、GPU 和发布门。前一里程碑未达到退出条件时,后一里程碑只能做
|
||||
不会改变产品声明的测试准备。
|
||||
|
||||
V1 后按产品需求和风险重新排序,不再仅按 N-015 至 N-026 编号顺序扩大范围。
|
||||
### M6 可部署 RC
|
||||
|
||||
- [x] `M6-01` 新建机器可读部署合同,固定 MIME、缓存、COOP、COEP、CORP 和 Range 响应头;
|
||||
`node tools/web/check-deployment-contract.mjs`、typecheck、lint 和 production build 通过。
|
||||
- [x] `M6-02` 复用 `CapabilityGateResult` 新增纯函数 `gateWasmThreadingCapability`;仅当
|
||||
`crossOriginIsolated`、`SharedArrayBuffer` 和 `Worker` 同时可用时放行 pthread 引擎,
|
||||
缺失项逐条返回稳定结构,single-thread 初始化路径不调用该门。
|
||||
- [ ] `M6-03` 验证 single-thread 引擎在无隔离环境启动。
|
||||
- [ ] `M6-04` 验证 pthread 引擎只在隔离和 SharedArrayBuffer 可用时启动。
|
||||
- [ ] `M6-05` 验证 pthread 初始化失败回退 single-thread,且不重复打开项目。
|
||||
- [ ] `M6-06` 为 engine JS/WASM、Worker、CSS 和 fixture 固定正确 MIME。
|
||||
- [ ] `M6-07` 为 WASM 与大资产验证 byte-range 206、`Content-Range` 和稳定 ETag。
|
||||
- [ ] `M6-08` 验证版本更新后旧 HTML 不加载新旧混合 hash 资源。
|
||||
- [ ] `M6-09` 验证完全断网冷启动离线包,不访问 CDN 或外部字体。
|
||||
- [ ] `M6-10` 验证断网重开 OPFS 项目、编辑、保存和 GLB 导出。
|
||||
- [ ] `M6-11` 在全新临时目录解包 binary archive 并运行 browser smoke。
|
||||
- [ ] `M6-12` 在全新临时目录解包 source archive 并核对 source offer/SBOM。
|
||||
- [ ] `M6-13` 建立 CI quick lane:typecheck、lint、unit、status、evidence schema。
|
||||
- [ ] `M6-14` 建立 CI Chromium lane:P0 用户闭环、双视口和 fault smoke。
|
||||
- [ ] `M6-15` 建立 CI release lane:全 E2E、性能、离线复现和 acceptance evidence。
|
||||
- [ ] `M6-16` 所有 CI lane 输出机器可读 JSON 和构件 SHA-256。
|
||||
- [ ] `M6-17` 写部署/升级/回滚 runbook,命令在空目录实测。
|
||||
- [ ] `M6-18` 生成 RC 版本号、变更说明、已知限制和恢复说明。
|
||||
|
||||
M6 退出条件:离线包和一个真实 HTTP 部署均通过同一 P0 流程;single/pthread 选择可解释;
|
||||
CI 可从 lockfile 和对应源码重现当前 binary/source hash。
|
||||
|
||||
### M7 核心项目体验硬化
|
||||
|
||||
- [ ] `M7-01` 记录 import/open/save/save-as/export 五个用户动作的状态机。
|
||||
- [ ] `M7-02` 对重复 open、并发 save 和 close-during-save 建立互斥规则。
|
||||
- [ ] `M7-03` 大文件导入显示真实字节进度并支持取消。
|
||||
- [ ] `M7-04` 取消 import 后释放 input buffer、native handle 和 staging 文件。
|
||||
- [ ] `M7-05` save 中断时旧 revision 和旧 hash 保持不变。
|
||||
- [ ] `M7-06` dirty state 只由成功 Main transaction 改变。
|
||||
- [ ] `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 测试。
|
||||
|
||||
### 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 对应 slice,N-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 和小场景恢复。
|
||||
|
||||
### M10 Geometry Nodes、Shader、NLA 与 Simulation
|
||||
|
||||
- [ ] `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 和恶意图输入门。
|
||||
|
||||
### M11 Lighting、Render、Compositor 与 Sequencer
|
||||
|
||||
- [ ] `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、设备缺失和静音恢复有专项测试。
|
||||
- [ ] `M11-14` render/compositor/media 全部覆盖取消、重启、预算释放和恢复。
|
||||
|
||||
### M12 Asset、IO、Editor 与工作流
|
||||
|
||||
- [ ] `M12-01` asset catalog schema migration 有向前/向后兼容 fixture。
|
||||
- [ ] `M12-02` append/link/override 分别定义 stable ID、所有权和失效语义。
|
||||
- [ ] `M12-03` library source 只允许声明 origin,路径穿越和符号链接逃逸被拒绝。
|
||||
- [ ] `M12-04` archive 每个 entry 在解压前检查数量、压缩比、总字节和目标路径。
|
||||
- [ ] `M12-05` GLB、OBJ、STL、PLY 每种格式建立独立导入/导出能力矩阵。
|
||||
- [ ] `M12-06` 每种支持格式至少一个 desktop roundtrip 和一个 loss report。
|
||||
- [ ] `M12-07` USD/Alembic 依赖固定 desktop runtime identity,不由本机偶然能力决定 gate。
|
||||
- [ ] `M12-08` View3D/Outliner/Properties 的 selection/context/revision 使用同一 store。
|
||||
- [ ] `M12-09` UV/Node/Graph/Dope/NLA editor 每次只开放有 Main writer 的操作。
|
||||
- [ ] `M12-10` operator search 从 capability registry 生成,不维护第二份成功列表。
|
||||
- [ ] `M12-11` keymap resolution 按 editor/modal/tool 上下文确定性排序。
|
||||
- [ ] `M12-12` workspace/layout 保存重开不修改 Blender 场景 revision。
|
||||
- [ ] `M12-13` editor dispose 后无 DOM listener、Worker request 或 GPU resource 泄漏。
|
||||
- [ ] `M12-14` 典型建模、动画、资产复用流程建立任务级 E2E,不只做控件 smoke。
|
||||
|
||||
### M13 Scripting、安全与平台边界
|
||||
|
||||
- [ ] `M13-01` Python/Text autorun/add-on 默认拒绝保持产品级不可绕过。
|
||||
- [ ] `M13-02` script manifest 只读解析限制文本、模块、路径和依赖数量。
|
||||
- [ ] `M13-03` 若引入签名脚本,先定义签名者、权限、撤销和审计模型。
|
||||
- [ ] `M13-04` 浏览器 sandbox 不提供 DOM、网络、OPFS、Worker 的隐式全权限。
|
||||
- [ ] `M13-05` server Blender job 使用一次性目录、只读源、资源限制和网络策略。
|
||||
- [ ] `M13-06` 所有 server result 验证 source/settings/build/output hash 后才绑定项目。
|
||||
- [ ] `M13-07` CSP 禁止 inline script、eval 和未声明 origin。
|
||||
- [ ] `M13-08` fixture 覆盖恶意 blend、图片、字体、媒体、archive、node graph 和 manifest。
|
||||
- [ ] `M13-09` fuzz crash 不写入 release evidence,修复后必须加入最小回归样本。
|
||||
- [ ] `M13-10` capability report 明确 native window/CUDA/Metal/HIP/OptiX 不等价。
|
||||
- [ ] `M13-11` 依赖审计区分生产、构建、测试依赖并设置严重级别门。
|
||||
- [ ] `M13-12` SBOM、license、source offer 与每个 release archive hash 绑定。
|
||||
|
||||
### M14 跨浏览器与设备扩展
|
||||
|
||||
- [ ] `M14-01` 先冻结 Chromium RC,不在同一变更中同时追三个浏览器差异。
|
||||
- [ ] `M14-02` Firefox capability probe 覆盖 OPFS、WebGL2、WebGPU、Worker 和 isolation。
|
||||
- [ ] `M14-03` Firefox P0 流程逐项记录 PASS/BLOCKED,不启用静默 fallback。
|
||||
- [ ] `M14-04` Firefox 主线程视口先通过,再领取 Offscreen 路径。
|
||||
- [ ] `M14-05` WebKit capability probe 和 P0 流程采用相同规则。
|
||||
- [ ] `M14-06` WebKit 主线程视口先通过,再领取 Offscreen 路径。
|
||||
- [ ] `M14-07` 浏览器不支持 WebGPU 时只隐藏明确依赖 WebGPU 的能力。
|
||||
- [ ] `M14-08` 内存上限按浏览器/设备档位选择已声明预算,不自动扩大。
|
||||
- [ ] `M14-09` 触控、笔、HiDPI、IME 和非 US 键盘分别建立输入 fixture。
|
||||
- [ ] `M14-10` 每个新增浏览器加入 quick/P0/full 三层 CI 后才进入发布声明。
|
||||
|
||||
### M15 全域对标和下一发布
|
||||
|
||||
- [ ] `M15-01` 每季度从 Blender 5.2 operator/data-block 清单重新生成 parity 差距。
|
||||
- [ ] `M15-02` 每个 family 的 `COMPLETE` 必须没有 summary-only、proxy-success 或隐式 loss。
|
||||
- [ ] `M15-03` LOCAL_EXACT 必须有相同 fixture 的 desktop/WASM 语义或像素 golden。
|
||||
- [ ] `M15-04` LOCAL_BOUNDED 必须同时验证白名单正例和非白名单稳定阻断。
|
||||
- [ ] `M15-05` SERVER 必须验证提交、取消、隔离、预算、hash 和结果绑定。
|
||||
- [ ] `M15-06` EXCLUDED 必须验证 UI 不开放、文件数据不丢失、保存不破坏原项目。
|
||||
- [ ] `M15-07` 12 个 family 分别达到自身退出条件,禁止由 N-026 聚合状态反推完成。
|
||||
- [ ] `M15-08` 全域发布候选重新跑 clean build、acceptance、性能、fault 和安全矩阵。
|
||||
- [ ] `M15-09` 在独立机器复验 binary/source archive 和所有 hash。
|
||||
- [ ] `M15-10` 发布说明逐项列出支持、受限、server 和 excluded 能力。
|
||||
|
||||
实际领取顺序固定为:先完成 M5;随后 M6、M7;再按产品需求在 M8 至 M13 中一次选择一个
|
||||
最小闭环;M14 只在 Chromium RC 稳定后开始;M15 是状态审计,不是把剩余功能一次性打包。
|
||||
|
||||
Reference in New Issue
Block a user