Advance M7 workflows and release operations
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-15 17:43:53 -04:00
parent 17ab961485
commit 7c16b279ae
103 changed files with 8064 additions and 429 deletions

View File

@@ -0,0 +1,61 @@
# Engine Manifest Schema v2
`M6-04A` 冻结双 variant 的数据合同和纯校验器。`M6-04B` 已将生产
`web/app/public/engine-manifest.json` 切换到 schema v2并从两个独立构建目录把资产安装到
`/vendor/blender/single/``/vendor/blender/pthread/`。纯策略选择和双环境实机加载已由
`M6-04C-G` 完成;旧 single Worker 入口继续作为 `M6-05` fallback 接线前的完整 Main 兼容路径。
## 顶层合同
- `schemaVersion` 固定为 `2``protocolVersion` 固定为 `1``engine` 固定为
`blender-wasm`
- `releaseId` 是整个 manifest 的原子发布身份single/pthread 及其 JS、WASM、worker 摘要
必须作为同一份 manifest 一起切换,调用方不得从另一 release 补资源。
- `variants` 必须恰好包含一个 `single` 和一个 `pthread`,不能有第三种或重复 variant。
- single 与 pthread 的 JS URL 必须不同WASM URL 也必须不同,避免通过通用路径隐含构建类型。
## 资源合同
每项资源都必须声明 `fileName`、同源根路径 `url` 和小写 64 位十六进制 SHA-256
| variant | 必需资源 | 禁止资源 |
| --- | --- | --- |
| `single` | `resources.js``resources.wasm` | `resources.pthreadWorker` |
| `pthread` | `resources.js``resources.wasm``resources.pthreadWorker` | 无 |
JS 与 pthread worker 文件名必须以 `.js` 结尾WASM 文件名必须以 `.wasm` 结尾URL 的最后一段
必须与 `fileName` 完全一致。资源 URL 不允许远程 origin、query、fragment、反斜线或路径穿越。
`pthreadWorker` 表示 worker 加载角色,不强制是第四个物理文件:当前 Emscripten pthread 输出会
让 worker 重新加载同一个 pthread ES module因此该角色可以与 `resources.js` 使用相同的
`fileName``url` 和 SHA-256同一 URL 不允许声明不同摘要。worker 不得引用 single 的 JS。
若后续工具链产生独立 worker 文件,则三个字段必须描述该文件。
## 内存合同
WASM page 固定为 65,536 bytes。每个 variant 都独立声明 `initialPages``maximumPages`
`shared`
- `initialPages` 范围为 256 至 32,768 pages即 16 MiB 至 2 GiB。
- `maximumPages` 不得小于 `initialPages`,且不得超过 32,768 pages2 GiB
- single 必须为 `shared=false`pthread 必须为 `shared=true`
权威 TypeScript 类型和无 I/O 校验器位于 `web/protocol/manifest.ts`;结构化正例位于
`tests/golden/M6-04A/engine-manifest-v2.json`。校验器只接收输入并返回深层新对象或抛出带稳定
`code`/`path``WebEngineManifestValidationError`,不读取文件、不请求网络,也不选择运行时
variant。
安装命令为 `bash tools/web/install-web-engine-assets.sh`。默认读取 `build_web-single`
`build_web-pthread`,先在临时目录生成并复核 manifest再安装四个物理文件。专项命令
`npm --prefix web run test:engine-variant-install` 同时覆盖正常复制、同一构建目录拒绝、缺失资产
拒绝和失败不改写目标 manifest。
纯选择器位于 `web/protocol/engine-variant.ts`,策略为 `AUTO``SINGLE_REQUIRED`
`PTHREAD_REQUIRED`。它不读取 DOM、网络、存储或 Worker调用方必须显式传入已校验 manifest
和三项线程能力。`PTHREAD_REQUIRED` 被阻断时不返回 variant。专项命令为
`npm --prefix web run test:engine-variant-selection``npm --prefix web run test:pthread-engine`
`npm --prefix web run test:single-thread-unisolated`
升级入口为 `bootstrapWebEngineRelease`。旧 HTML 绑定的 expected release 与重新验证后的 manifest
不一致时只返回 `REFRESH_REQUIRED`,不会选择或初始化 variant也不会打开待处理项目。资源
SHA-256 不一致统一返回 `ENGINE_VARIANT_INTEGRITY_FAILED`;该错误不可进入 pthread -> single
fallback。`npm --prefix web run test:engine-upgrade-safety` 同时覆盖纯策略和真实 Chromium 篡改响应。