Add full source parity validation workflow
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-09-07 16:45:07 +08:00
parent a3588d41a3
commit f68c6c9678
59 changed files with 4556 additions and 842 deletions

View File

@@ -0,0 +1,164 @@
# Web Blender 对标 Blender 5.2 的完整验证流程
## 1. 目的与结论口径
本流程验证 Web 项目是否按 Blender 5.2 源程序的声明路由、原生 WebEngine/WASM、Main/SceneIR、Worker、前端和 Chromium 生产入口工作。它不把“有一个按钮”“路由已分类”或“代表性烟测通过”误报为 Blender 全量等价。
最终报告必须同时给出两个数字:
| 口径 | 当前基线 | 通过条件 |
| --- | ---: | --- |
| Web 产品工作流 | 16 模块、34 功能、101 内部子模块 | 既有一次性烟测和定点修复全部通过 |
| Blender 源程序对标单元 | 3802 单元 | 每个单元有 source-backed 行为 receipt;只有路由分类不能通过 |
当前基线来自 `dynamic-inventory.json` 和 `blender-feature-route-catalog.json`:3802/3802 已分类,1025 项已有精确行为证据,2777 项仍为 `UNVERIFIED`。因此在 2777 项补齐前,报告的 `sourceParityStatus` 必须是 `PARTIAL`,不得写成全量 parity complete。
## 2. 强制规则
1. 只使用 Chromium;不运行 Firefox/WebKit 作为本项目发布结论。
2. 所有编辑必须通过 Blender 5.2 原生 WebEngine/WASM 和权威 Main;JS/Three.js 只能是 UI、视图和协议适配层。
3. 复用已有 SHA-256 证据;一次性功能烟测和内部子模块烟测不得重跑。新增修复只重跑对应失败层。
4. 源码检索只允许批次入口:`node tools/web/search-wbv2-batch-source.mjs --pattern <text> [--runtime <allowlisted-path>]`;全量清单只在明确审计命令中读取。
5. 每个正例必须配套负例、无突变检查、undo/redo、save/reopen 或明确的 reader-only 证明。
6. 任何环境缺失、构件 hash 漂移、Blender 版本/编译能力不匹配、测试失败都保持 `BLOCKED`,不得用跳过或假结果替代。
## 3. 验证阶段
### A. 上下文和仓库一致性
```bash
node tools/web/print-task-context.mjs
node tools/web/check-task-context.mjs
node tools/web/check-context-governance.mjs
git diff --check
```
验证当前任务、parent manifest、输入预算和工作树证据没有漂移。
### B. 源程序清单与路由对标
```bash
npm --prefix web run test:wbv2-inventory
node tools/web/check-source-dynamic-inventory.mjs
npm --prefix web run test:blender-rna-inventory
npm --prefix web run test:blender-operator-inventory
npm --prefix web run test:blender-family-inventory
npm --prefix web run test:blender-format-inventory
npm --prefix web run test:blender-editor-inventory
npm --prefix web run test:blender-core-inventory
npm --prefix web run test:blender-parity-map
npm --prefix web run test:blender-gap-audit
node tools/web/audit-wbv2-feature-completeness.mjs
node tools/web/check-wbv2-feature-smoke-plan.mjs
node tools/web/check-wbv2-submodule-smoke-plan.mjs
```
记录 `unitCount`、`classifiedCount`、`unavailableUnits`、`verifiedUnits`、`unverifiedUnits`、`sourceTreeSha256`。`UNAVAILABLE=0` 只表示入口分类完整,不表示逐单元行为通过。
### C. 协议、静态质量、单元和原生构件
```bash
npm --prefix web run typecheck
npm --prefix web run lint
node tools/web/run-unit-tests.mjs
npm --prefix web run test:local-deps
node tools/web/check-web-engine-source-sync.mjs
node tools/web/check-deployment-contract.mjs
node tools/web/check-deployment-http.mjs
node tools/web/check-deployment-cache.mjs
source tools/web/emscripten-env.sh
cmake --build build_web_blender6 --target web_engine --parallel "$(nproc)"
```
构件必须绑定同一源码指纹,开发/公开/WASM 构件的 SHA-256 必须一致。使用 Blender 对标时记录:
```bash
BLENDER_BIN=build_blender_native/bin/blender \
npm --prefix web run release:v1-acceptance
```
若该 Blender 构建的能力与声明不符(例如 `USD=False`),必须取得具有对应能力的官方/可复现构件;在此之前 USD 对标项为 `BLOCKED`,不能伪造通过。
### D. V1 声明功能逐项验收
```bash
npm --prefix web run release:v1-acceptance
npm --prefix web run test:v1-acceptance-coverage
npm --prefix web run test:v1-acceptance-evidence
npm --prefix web run test:v1-acceptance-release-binding
```
该阶段按 `docs/status/parity-ledger.json` 的 N-015 至 N-026 家族去重后执行 49 个唯一入口、50 个声明,覆盖非 Mesh、Grease Pencil、Paint、Physics、Lighting、Compositor、Sequencer、Tracking、Asset、Editor、Scripting、Release。
### E. 全量 Chromium 功能验证
```bash
npm --prefix web run test:e2e -- --workers=1
npm --prefix web run test:browser
npm --prefix web run test:v1-user-loop
npm --prefix web run test:network-interruption
npm --prefix web run test:device-loss
npm --prefix web run test:oom-recovery
npm --prefix web run test:storage-quota
npm --prefix web run test:malicious-blends
npm --prefix web run test:asset-library
```
使用 `google-chrome`,当前实际收集 350 个测试;单元层当前实际收集 429 个测试。数量随源码演进,以运行器实际收集数为准。关注:主线程/Worker、WASM、OPFS、undo/redo、保存重开、取消、恢复、恶意输入和移动/桌面布局。
### F. 性能、资源、发布和恢复
```bash
npm --prefix web run test:release-performance
npm --prefix web run test:geometry-10m-performance
npm --prefix web run test:texture-4k-performance
npm --prefix web run test:texture-8k-performance
npm --prefix web run test:simulation-cache-performance
npm --prefix web run test:long-media-performance
npm --prefix web run test:release-package
npm --prefix web run release:offline
npm --prefix web run test:binary-archive
npm --prefix web run test:source-archive
npm --prefix web run test:deployment-runbook
npm --prefix web run test:upgrade-runbook
npm --prefix web run test:rollback-runbook
npm --prefix web run test:operations-diagnostics
npm --prefix web run test:operations-rehearsal
npm --prefix web run test:rc-docs
npm --prefix web run release:rc-manifest
```
### G. 发布站点验证
```bash
WEB_ORIGIN=https://49.232.250.35:58014 \
node tools/web/check-deployed-web-blender.mjs
```
至少验证:HTTPS 证书、三项 COOP/COEP/CORP、CSP、HTML/manifest/WASM/SVG MIME、强 ETag、WASM `206` Range、完整 WASM SHA-256、Chromium `isSecureContext`、`crossOriginIsolated`、WASM ready、打开真实 `.blend`、执行一次原生 `Add CUBE` Main mutation、保存/重开和无控制台/网络错误。
## 4. 失败处理
- `sourceParityStatus=PARTIAL`:保留 2777 个未验证单元清单,生成下一批 source-backed evidence 任务。
- 单个功能失败:只重跑其 family 和直接依赖,不重跑已通过的一次性烟测。
- 构件 hash 漂移:停止浏览器验证,重新 build、同步 receipt、再继续。
- Blender 对标环境缺能力:记录 `BLOCKED` 及可执行文件/归档 SHA-256,禁止降级为“通过”。
- 线上部署失败:保留当前 release,检查回滚目录,不删除浏览器数据或旧 release。
## 5. 机器报告
执行器:`tools/web/run-web-source-parity-validation.mjs`。
```bash
node tools/web/run-web-source-parity-validation.mjs
```
报告:`tests/golden/WBV2/full-source-parity-validation-report.json`,每个阶段记录命令、退出码、耗时、日志路径和 SHA-256,并写出:
```text
sourceParityStatus: READY | PARTIAL | BLOCKED
webProductStatus: READY | BLOCKED
releaseStatus: READY | BLOCKED
```
只有 `sourceParityStatus=READY`、`webProductStatus=READY`、`releaseStatus=READY` 且报告自身 hash 已绑定,才允许声明“按源程序全量对标验证完成”。