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

@@ -5,14 +5,14 @@
## 当前结论
- 产品工作流:16/16 模块、34/34 产品任务已实现。
- 源码路由:3745/3745 单元已分类,`UNAVAILABLE=0`。
- 路由分布:WEB_MAIN=1698、SERVER_NATIVE=1613、BROWSER_EQUIVALENT=434。
- 行为证据:1025 已验证、2720 未逐项验证。未验证不等于缺少入口,但不能宣称逐单元完成。
- 源码路由:3802/3802 单元已分类,`UNAVAILABLE=0`。
- 路由分布:WEB_MAIN=1755、SERVER_NATIVE=1613、BROWSER_EQUIVALENT=434。
- 行为证据:1025 已验证、2777 未逐项验证。未验证不等于缺少入口,但不能宣称逐单元完成。
- 一次性烟测:34/34 已执行且没有重试;31 个初始通过,3 个定点修复通过,IO 构件阻断已关闭。
## 真正缺失或阻断
1. **行为证据缺口**:1987 个 operator、673 个 RNA struct、58 个 operator macro、2 个 modifier source 尚无精确行为 receipt。它们已有明确 WEB_MAIN、SERVER_NATIVE 或 BROWSER_EQUIVALENT 路由,不应伪造为已逐项验证。
1. **行为证据缺口**:1987 个 operator、673 个 RNA struct、58 个 operator macro、57 个 WebEngine command、2 个 modifier source 尚无精确行为 receipt。它们已有明确 WEB_MAIN、SERVER_NATIVE 或 BROWSER_EQUIVALENT 路由,不应伪造为已逐项验证。
2. **已关闭的 IO 构件缺口**:`importScene/exportScene` 已进入 source-matched WASM;真实 `.blend` 打开、OBJ unified JSON ABI、基础引擎和 Chromium IO focused smoke 均通过。
源码与构件绑定收据见 [`web-engine-source-sync.json`](../tests/golden/WBV2/web-engine-source-sync.json):生产 JS、WASM、构建目录副本和模块 manifest 已绑定到同一 SHA-256。

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 已绑定,才允许声明“按源程序全量对标验证完成”。

View File

@@ -0,0 +1,8 @@
# WBV2-P1128-000 status
- task: `WBV2-P1128-000`; module: `SEQUENCER_MOVIE_CODEC`; status: `done`
- source hashes stable: `true`; commands passed: `3`
- positive Main mutation, negative no-mutation, recovery and Chromium gates are recorded in the module receipt
- full-family parity: `false`; inventory remains: `6900` total, effective `290/6609`
- module receipt terminal result: `NONE` at original completion
- authorized continuation root: `WBV2-P1129-000` (recorded in the parent manifest without rerunning P1128)

View File

@@ -2,7 +2,7 @@
"schemaVersion": 4,
"source": "docs/status/parity-ledger.json",
"sourceSha256": "c8d73374c338f46c2016f6089d99efdd7b3331fc0100d64dad0f416fe66e3eb6",
"generatedAt": "2026-08-17T15:09:53.894Z",
"generatedAt": "2026-09-07T08:07:07.435Z",
"families": [
{
"id": "N-015",
@@ -924,12 +924,12 @@
"fields": [],
"command": "npm --prefix web run test:v1-user-loop && npm --prefix web run test:v1-acceptance-evidence",
"exitCode": 0,
"durationMs": 5516,
"output": "> blender-web-editor@0.1.0 test:v1-user-loop\n> playwright test --config playwright.config.ts tests/e2e/v1-user-loop.spec.ts\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/v1-user-loop.spec.ts:6:1 › completes the V1 import-edit-save-restart-reopen-GLB loop (2.8s)\n\n 1 passed (4.4s)\n\n> blender-web-editor@0.1.0 test:v1-acceptance-evidence\n> node ../tools/web/check-v1-acceptance-evidence.mjs\n\nv1-acceptance-evidence-ok families=12 declarations=50 unique=49 sha256=d5fb0a7b2df92b076f8b05ccd68903d60e3352b9423b0c1404065f6cbcbdd45c\n\n[WebServer] (node:2396656) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n[WebServer] (Use `node --trace-warnings ...` to show where the warning was created)\n[WebServer] (node:2396668) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n[WebServer] (Use `node --trace-warnings ...` to show where the warning was created)",
"durationMs": 3474,
"output": "> blender-web-editor@0.1.0-rc.1 test:v1-user-loop\n> playwright test --config playwright.config.ts tests/e2e/v1-user-loop.spec.ts\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/v1-user-loop.spec.ts:6:1 › completes the V1 import-edit-save-restart-reopen-GLB loop (2.3s)\n\n 1 passed (3.1s)\n\n> blender-web-editor@0.1.0-rc.1 test:v1-acceptance-evidence\n> node ../tools/web/check-v1-acceptance-evidence.mjs\n\nv1-acceptance-evidence-ok families=12 declarations=50 unique=49 sha256=c89622a11581d44123f4fb29ef7969de22e77c0efbad0d0761456e2bf7a7f10d\n\n[WebServer] (node:1161549) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n[WebServer] (Use `node --trace-warnings ...` to show where the warning was created)\n(node:1161603) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)",
"artifactSha256": [
"3defbaa426195254fcaefaddabf9b128002a94def03aa255513c33eaf4ac0926",
"5d87a9ea57bd7a1888f16a5f4306e1c6d3a1bdfcf832c9485fe8518aac528fd8",
"d5fb0a7b2df92b076f8b05ccd68903d60e3352b9423b0c1404065f6cbcbdd45c"
"1c89a1fd0e00e30330d151cb9a42d9d54aabd5ed2c9ae45dd3b1961d9a0c75d5",
"c89622a11581d44123f4fb29ef7969de22e77c0efbad0d0761456e2bf7a7f10d"
]
}
]

View File

@@ -1,20 +1,20 @@
{
"schemaVersion": 1,
"source": "docs/status/parity-ledger.json",
"sourceSha256": "1e16518a25c6b6bed4ab7f605ea1ad5babe529f2842c858b20ae6daae30bd478",
"sourceSha256": "c8d73374c338f46c2016f6089d99efdd7b3331fc0100d64dad0f416fe66e3eb6",
"package": "web/package.json",
"packageSha256": "a7ee993997c8d62effcdd3bb994f16656424e6a5e976c3d3b4e2951bd4109710",
"packageSha256": "b334ff7ab822bd9a9c6ad1302fdb6432648f26d1cf1dbfe86825c2cf1947387e",
"toolSourceSha256": {
"tools/web/v1-acceptance-lib.mjs": "48005c8fc9d97955513e104ee1b8950cab2c3520c166eff4358e10bd7318f535",
"tools/web/check-v1-acceptance-coverage.mjs": "42b713f9b622851328266584e3a8ba2231e0393141ba4a8ae091a97337d9e03e",
"tools/web/run-v1-acceptance.mjs": "7e87893e42c6c848c2bc487340712ba4ec151e63e49b2bbc76e6a0c51d839da3",
"tools/web/check-v1-acceptance-evidence.mjs": "af1a3029a1148e8e5d346d66f3a58f7063b73fee8dd95e6e41ed0504ed56dfea"
},
"generatedAt": "2026-08-15T13:31:45.207Z",
"generatedAt": "2026-09-07T08:06:23.145Z",
"environment": {
"node": "v20.19.2",
"npm": "9.2.0",
"chromium": "Google Chrome 150.0.7871.128",
"node": "v24.19.0",
"npm": "11.17.0",
"chromium": "Google Chrome 151.0.7922.137",
"blenderBin": "BLENDER_BIN",
"blenderExecutableSha256": "83e8261eace07a5337f71b52d156c1eece1a6ba913403cc6406182ae58bacf27",
"blenderArchiveSha256": "96f6c181a30f4950607839dc84d42a354b250d8a0231b098b59b7bc69c351c48",
@@ -35,9 +35,9 @@
],
"command": "npm --prefix web run test:nonmesh-roundtrip",
"exitCode": 0,
"durationMs": 1996,
"outputSha256": "828a1171ff5444aba7bddaa0f2f47e1004881e0595b856b23b1e4eb46aa09c01",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-roundtrip\n> node ../tools/web/check-nonmesh-roundtrip.mjs\n\nnonmesh-roundtrip-ok types=CURVE,SURFACE,FONT,METABALL,VOLUME multispline-create-delete-bulk-handle-cyclic-surface-2d-topology-font-links-volume-properties=passed undo-redo=passed save-reopen=passed\n\nweb-depsgraph-stage=runtime-init-begin\nweb-depsgraph-stage=runtime-init-end\nweb-depsgraph-stage=blend-read-end\nweb-depsgraph-stage=view-layer-sync-end\nweb-depsgraph-data scene=0xaf0538 master=0xa18618 nodetree=0 world=0 collections=0\nweb-depsgraph-stage=global-main-swap-end\nweb-depsgraph-stage=graph-new-end\nweb-depsgraph-stage=graph-build-end\nweb-depsgraph-stage=frame-change-end\nweb-depsgraph-stage=graph-free-end\nweb-depsgraph-stage=global-main-restore-end\nweb-depsgraph-stage=blend-free-end"
"durationMs": 1508,
"outputSha256": "e5409ea16d719828a34803082c23c364e1421aa213e7ae94d0ff26d57c9fcf53",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-roundtrip\n> node ../tools/web/check-nonmesh-roundtrip.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\nnonmesh-roundtrip-ok types=CURVE,SURFACE,FONT,METABALL,VOLUME multispline-create-delete-bulk-handle-cyclic-surface-2d-topology-font-links-volume-properties=passed undo-redo=passed save-reopen=passed\n\nweb-depsgraph-stage=runtime-init-begin\nweb-depsgraph-stage=runtime-init-end\nweb-depsgraph-stage=blend-read-end\nweb-depsgraph-stage=view-layer-sync-end\nweb-depsgraph-data scene=0xa12148 master=0xa3c570 nodetree=0 world=0 collections=0\nweb-depsgraph-stage=global-main-swap-end\nweb-depsgraph-stage=graph-new-end\nweb-depsgraph-stage=graph-build-end\nweb-depsgraph-stage=frame-change-end\nweb-depsgraph-stage=graph-free-end\nweb-depsgraph-stage=global-main-restore-end\nweb-depsgraph-stage=blend-free-end"
},
{
"token": "web:test:nonmesh-desktop-golden",
@@ -46,9 +46,9 @@
],
"command": "npm --prefix web run test:nonmesh-desktop-golden",
"exitCode": 0,
"durationMs": 920,
"outputSha256": "54cfd9cdec5a7885b22768bce6652410fc3709da1f4c943bcfa6655637435215",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-desktop-golden\n> node ../tools/web/check-nonmesh-desktop-golden.mjs\n\nnonmesh-desktop-golden-ok fixture=nonmesh_scene.blend geometries=4\n\nweb-depsgraph-stage=runtime-init-begin\nweb-depsgraph-stage=runtime-init-end\nweb-depsgraph-stage=blend-read-end\nweb-depsgraph-stage=view-layer-sync-end\nweb-depsgraph-data scene=0xa71220 master=0xacb470 nodetree=0 world=0 collections=0\nweb-depsgraph-stage=global-main-swap-end\nweb-depsgraph-stage=graph-new-end\nweb-depsgraph-stage=graph-build-end\nweb-depsgraph-stage=frame-change-end\nweb-depsgraph-stage=graph-free-end\nweb-depsgraph-stage=global-main-restore-end\nweb-depsgraph-stage=blend-free-end"
"durationMs": 861,
"outputSha256": "d901f44b03cd9bee1cc4d06bd3de1196a569f3d9b22dc9c6ae264a23224d8cd4",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-desktop-golden\n> node ../tools/web/check-nonmesh-desktop-golden.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\nnonmesh-desktop-golden-ok fixture=nonmesh_scene.blend geometries=4\n\nweb-depsgraph-stage=runtime-init-begin\nweb-depsgraph-stage=runtime-init-end\nweb-depsgraph-stage=blend-read-end\nweb-depsgraph-stage=view-layer-sync-end\nweb-depsgraph-data scene=0xa86b30 master=0xae5bc0 nodetree=0 world=0 collections=0\nweb-depsgraph-stage=global-main-swap-end\nweb-depsgraph-stage=graph-new-end\nweb-depsgraph-stage=graph-build-end\nweb-depsgraph-stage=frame-change-end\nweb-depsgraph-stage=graph-free-end\nweb-depsgraph-stage=global-main-restore-end\nweb-depsgraph-stage=blend-free-end"
},
{
"token": "web:test:nonmesh-glb-blender-roundtrip",
@@ -57,9 +57,9 @@
],
"command": "npm --prefix web run test:nonmesh-glb-blender-roundtrip",
"exitCode": 0,
"durationMs": 2200,
"outputSha256": "c9ba8f68095690f4235b19da1645416f912fc0a7716f11f75c2ee8a63f300319",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-glb-blender-roundtrip\n> node ../tools/web/check-nonmesh-glb-blender-roundtrip.mjs\n\nnonmesh-glb-blender-roundtrip-ok bytes=53172 objects=7 points=1 lines=3 triangles=3\n\nweb-depsgraph-stage=runtime-init-begin\nweb-depsgraph-stage=runtime-init-end\nweb-depsgraph-stage=blend-read-end\nweb-depsgraph-stage=view-layer-sync-end\nweb-depsgraph-data scene=0xa71260 master=0xacb460 nodetree=0 world=0 collections=0\nweb-depsgraph-stage=global-main-swap-end\nweb-depsgraph-stage=graph-new-end\nweb-depsgraph-stage=graph-build-end\nweb-depsgraph-stage=frame-change-end\nweb-depsgraph-stage=graph-free-end\nweb-depsgraph-stage=global-main-restore-end\nweb-depsgraph-stage=blend-free-end"
"durationMs": 1581,
"outputSha256": "25c1898d0aceff41f574e630facab4fcea4426d5fb5abd2dfd5f9f6166fa35f3",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-glb-blender-roundtrip\n> node ../tools/web/check-nonmesh-glb-blender-roundtrip.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\nnonmesh-glb-blender-roundtrip-ok bytes=53172 objects=7 points=1 lines=3 triangles=3\n\nweb-depsgraph-stage=runtime-init-begin\nweb-depsgraph-stage=runtime-init-end\nweb-depsgraph-stage=blend-read-end\nweb-depsgraph-stage=view-layer-sync-end\nweb-depsgraph-data scene=0xa86a08 master=0xae5b50 nodetree=0 world=0 collections=0\nweb-depsgraph-stage=global-main-swap-end\nweb-depsgraph-stage=graph-new-end\nweb-depsgraph-stage=graph-build-end\nweb-depsgraph-stage=frame-change-end\nweb-depsgraph-stage=graph-free-end\nweb-depsgraph-stage=global-main-restore-end\nweb-depsgraph-stage=blend-free-end"
},
{
"token": "web:test:nonmesh-usd-serialization",
@@ -68,9 +68,9 @@
],
"command": "npm --prefix web run test:nonmesh-usd-serialization",
"exitCode": 0,
"durationMs": 2532,
"outputSha256": "7a76fabed285b2fbd3b528fae02dd5696327b5068fd6909e504666d5022b80c2",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-usd-serialization\n> USD_DESKTOP_REQUIRED=0 node ../tools/web/check-nonmesh-usd-blender-roundtrip.mjs\n\nnonmesh-usd-blender-roundtrip-ok bytes=65405 objects=7 points=1 basisCurves=3 meshes=3\n\nweb-depsgraph-stage=runtime-init-begin\nweb-depsgraph-stage=runtime-init-end\nweb-depsgraph-stage=blend-read-end\nweb-depsgraph-stage=view-layer-sync-end\nweb-depsgraph-data scene=0xa71260 master=0xacb460 nodetree=0 world=0 collections=0\nweb-depsgraph-stage=global-main-swap-end\nweb-depsgraph-stage=graph-new-end\nweb-depsgraph-stage=graph-build-end\nweb-depsgraph-stage=frame-change-end\nweb-depsgraph-stage=graph-free-end\nweb-depsgraph-stage=global-main-restore-end\nweb-depsgraph-stage=blend-free-end"
"durationMs": 1562,
"outputSha256": "fd27c37131e2c75b6a64d9a0b2f0791225be917e112a1d0842acc5e2aec5b1b3",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-usd-serialization\n> USD_DESKTOP_REQUIRED=0 node ../tools/web/check-nonmesh-usd-blender-roundtrip.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\nnonmesh-usd-blender-roundtrip-ok bytes=65405 objects=7 points=1 basisCurves=3 meshes=3\n\nweb-depsgraph-stage=runtime-init-begin\nweb-depsgraph-stage=runtime-init-end\nweb-depsgraph-stage=blend-read-end\nweb-depsgraph-stage=view-layer-sync-end\nweb-depsgraph-data scene=0xa86a08 master=0xae5b50 nodetree=0 world=0 collections=0\nweb-depsgraph-stage=global-main-swap-end\nweb-depsgraph-stage=graph-new-end\nweb-depsgraph-stage=graph-build-end\nweb-depsgraph-stage=frame-change-end\nweb-depsgraph-stage=graph-free-end\nweb-depsgraph-stage=global-main-restore-end\nweb-depsgraph-stage=blend-free-end"
},
{
"token": "web:test:nonmesh-usd-blender-roundtrip",
@@ -79,9 +79,9 @@
],
"command": "npm --prefix web run test:nonmesh-usd-blender-roundtrip",
"exitCode": 0,
"durationMs": 2526,
"outputSha256": "0d4e89b5d022962e4effc43c53385b825c21217dd14850e36f6db7e20bd3511a",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-usd-blender-roundtrip\n> USD_DESKTOP_REQUIRED=1 node ../tools/web/check-nonmesh-usd-blender-roundtrip.mjs\n\nnonmesh-usd-blender-roundtrip-ok bytes=65405 objects=7 points=1 basisCurves=3 meshes=3\n\nweb-depsgraph-stage=runtime-init-begin\nweb-depsgraph-stage=runtime-init-end\nweb-depsgraph-stage=blend-read-end\nweb-depsgraph-stage=view-layer-sync-end\nweb-depsgraph-data scene=0xa71260 master=0xacb460 nodetree=0 world=0 collections=0\nweb-depsgraph-stage=global-main-swap-end\nweb-depsgraph-stage=graph-new-end\nweb-depsgraph-stage=graph-build-end\nweb-depsgraph-stage=frame-change-end\nweb-depsgraph-stage=graph-free-end\nweb-depsgraph-stage=global-main-restore-end\nweb-depsgraph-stage=blend-free-end"
"durationMs": 1628,
"outputSha256": "18d5c10e047c3dddfa9e9070a730af488ef94a683e962a1c2bae523d773ee665",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-usd-blender-roundtrip\n> USD_DESKTOP_REQUIRED=1 node ../tools/web/check-nonmesh-usd-blender-roundtrip.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\nnonmesh-usd-blender-roundtrip-ok bytes=65405 objects=7 points=1 basisCurves=3 meshes=3\n\nweb-depsgraph-stage=runtime-init-begin\nweb-depsgraph-stage=runtime-init-end\nweb-depsgraph-stage=blend-read-end\nweb-depsgraph-stage=view-layer-sync-end\nweb-depsgraph-data scene=0xa86a08 master=0xae5b50 nodetree=0 world=0 collections=0\nweb-depsgraph-stage=global-main-swap-end\nweb-depsgraph-stage=graph-new-end\nweb-depsgraph-stage=graph-build-end\nweb-depsgraph-stage=frame-change-end\nweb-depsgraph-stage=graph-free-end\nweb-depsgraph-stage=global-main-restore-end\nweb-depsgraph-stage=blend-free-end"
},
{
"token": "web:test:nonmesh-binary",
@@ -90,9 +90,9 @@
],
"command": "npm --prefix web run test:nonmesh-binary",
"exitCode": 0,
"durationMs": 4623,
"outputSha256": "53f1182423f3cdcb5d0ba00f5827ba1d5ed5f880151ef5d746ae3893020ed771",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-binary\n> playwright test --config playwright.config.ts -g \"one-million-point binary transfer gate\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:402:1 › enforces the N-015 one-million-point binary transfer gate (1.6s)\n\n 1 passed (3.7s)"
"durationMs": 3533,
"outputSha256": "44ca10382ec68525e38e5c906e108d5bd77efe3d52ef3cc7ba910044a4a7e5dc",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-binary\n> playwright test --config playwright.config.ts -g \"one-million-point binary transfer gate\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:402:1 › enforces the N-015 one-million-point binary transfer gate (1.2s)\n\n 1 passed (3.1s)\n\n(node:1081063) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:selection-history",
@@ -101,9 +101,9 @@
],
"command": "npm --prefix web run test:selection-history",
"exitCode": 0,
"durationMs": 4642,
"outputSha256": "9b8035591b1b4f7f665688d9190d7191d12a5cd6d204fcb271d46375817cb3a2",
"output": "> blender-web-editor@0.1.0-rc.1 test:selection-history\n> playwright test --config playwright.config.ts -g \"N-015 selection history\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1060:1 › keeps N-015 selection history bounded and rejects stale raycast hits (1.7s)\n\n 1 passed (3.7s)"
"durationMs": 3007,
"outputSha256": "1feba856da940f770abd30a1fcdd31c8372aab09e59249bfe74d1795bf11ea0d",
"output": "> blender-web-editor@0.1.0-rc.1 test:selection-history\n> playwright test --config playwright.config.ts -g \"N-015 selection history\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1066:1 › keeps N-015 selection history bounded and rejects stale raycast hits (1.1s)\n\n 1 passed (2.6s)\n\n(node:1081378) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:nonmesh-interaction",
@@ -112,9 +112,9 @@
],
"command": "npm --prefix web run test:nonmesh-interaction",
"exitCode": 0,
"durationMs": 4538,
"outputSha256": "0794b7d8acb9c24a8de963a9a76fbbf2919228cc637d79c2b101a8280698df63",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-interaction\n> playwright test --config playwright.config.ts -g \"N-015 curve gizmo interaction\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1081:1 › validates the N-015 curve gizmo interaction transaction boundary (1.8s)\n\n 1 passed (3.7s)"
"durationMs": 3310,
"outputSha256": "28975e955f6b7a3f96448a225d8c2d8c3d667872cb1a823a299d0b50be951f10",
"output": "> blender-web-editor@0.1.0-rc.1 test:nonmesh-interaction\n> playwright test --config playwright.config.ts -g \"N-015 curve gizmo interaction\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1087:1 › validates the N-015 curve gizmo interaction transaction boundary (1.3s)\n\n 1 passed (2.9s)\n\n(node:1081690) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:vdb",
@@ -123,9 +123,9 @@
],
"command": "npm --prefix web run test:vdb",
"exitCode": 0,
"durationMs": 4103,
"outputSha256": "974bedb7c4fa970d79b6140d1527b39de4c99f063c9c848684d064efcdc8723b",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb\n> playwright test --config playwright.config.ts -g \"VDB conversion boundary\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1156:1 › validates the VDB conversion boundary and NanoVDB streaming contract (1.4s)\n\n 1 passed (3.3s)"
"durationMs": 3089,
"outputSha256": "b2bd28bfb8bc3cee97682c453b57ce09c2898fcd885893ee288734771e93009f",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb\n> playwright test --config playwright.config.ts -g \"VDB conversion boundary\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1161:1 › validates the VDB conversion boundary and NanoVDB streaming contract (1.1s)\n\n 1 passed (2.7s)\n\n(node:1082006) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:vdb-availability",
@@ -134,9 +134,9 @@
],
"command": "npm --prefix web run test:vdb-availability",
"exitCode": 0,
"durationMs": 370,
"outputSha256": "3d1fce4839232bd9c5c7dc42ea2e462be9ade0866d1296cfc5897afadd6b39fc",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-availability\n> node ../tools/web/check-vdb-availability.mjs\n\nvdb-availability-ok core=READY release=BLOCKED browser-openvdb=disabled desktop=ready server=ready opfs=ready webgpu-core=ready main-roundtrip=ready viewport=blocked advanced-material=blocked resources=9"
"durationMs": 173,
"outputSha256": "16da5f2313558a3020b733b1ddc4ed438cdcea94c662916eb0dec6ec449f2f5e",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-availability\n> node ../tools/web/check-vdb-availability.mjs\n\nvdb-availability-ok core=READY release=BLOCKED browser-openvdb=disabled desktop=ready server=ready opfs=ready webgpu-core=ready main-roundtrip=ready viewport=blocked advanced-material=blocked resources=18"
},
{
"token": "web:test:vdb-native",
@@ -145,7 +145,7 @@
],
"command": "npm --prefix web run test:vdb-native",
"exitCode": 0,
"durationMs": 1341,
"durationMs": 715,
"outputSha256": "52abc08ddc600e3c00842cb2619b3c4b66b113e8bd83d96db910ac1b95d5d012",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-native\n> node ../tools/web/check-vdb-native-pipeline.mjs\n\nvdb-native-pipeline-ok resources=14 converter=openvdb13-nanovdb32 conversion-deterministic=1 semantic-deterministic=1 official-deterministic=1 malformed=blocked browser-openvdb=off"
},
@@ -156,9 +156,9 @@
],
"command": "npm --prefix web run test:vdb-server",
"exitCode": 0,
"durationMs": 691,
"outputSha256": "d958e3ed39b5660b5e8d66d7171b651e97f0e87c1c7b9769709478925a91907f",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-server\n> node ../tools/web/check-vdb-server-job.mjs\n\nvdb-server-job-ok job=vdb-b59105490496a2fee0dda646 bytes=2563944 idempotent=1 signed=1 isolated=1 cancelled=1 atomic=1 desktop-server-hash=equal"
"durationMs": 399,
"outputSha256": "5a051540c9d58481a610f86fc871912c12e5be682e19517456248da1445c735a",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-server\n> node ../tools/web/check-vdb-server-job.mjs\n\nvdb-server-job-ok job=vdb-c75abdb7dac29fa6e36abe6b bytes=2563944 idempotent=1 signed=1 isolated=1 cancelled=1 atomic=1 desktop-server-hash=equal"
},
{
"token": "web:test:vdb-opfs",
@@ -167,9 +167,9 @@
],
"command": "npm --prefix web run test:vdb-opfs",
"exitCode": 0,
"durationMs": 5672,
"outputSha256": "976954270c006f573cd70022ab4cd5c500ff9d4ff895aabde4d1eb8cc1895430",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-opfs\n> playwright test --config playwright.config.ts -g \"hash-bound NanoVDB project through OPFS\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1206:1 › commits and reopens a hash-bound NanoVDB project through OPFS (2.9s)\n\n 1 passed (4.8s)"
"durationMs": 4164,
"outputSha256": "81356f0fb7b4f84803663f2402b48f4cb2094d6295ec0fcd472953a2ee488b70",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-opfs\n> playwright test --config playwright.config.ts -g \"hash-bound NanoVDB project through OPFS\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1211:1 › commits and reopens a hash-bound NanoVDB project through OPFS (2.2s)\n\n 1 passed (3.7s)\n\n(node:1083551) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:vdb-webgpu",
@@ -178,9 +178,9 @@
],
"command": "npm --prefix web run test:vdb-webgpu",
"exitCode": 0,
"durationMs": 64026,
"outputSha256": "d7d13bf8104f9fef4a92836d37b839fc4ec24135ad6424e7d36eddcf7b45c070",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-webgpu\n> playwright test --config playwright.config.ts -g \"real NanoVDB Float32 tree with WebGPU\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1232:1 › samples and integrates a real NanoVDB Float32 tree with WebGPU (1.0m)\n\n 1 passed (1.1m)"
"durationMs": 53466,
"outputSha256": "9017107b62f187b4e5dcd7c494491a853292f43f4287dbb002ff25cb325e3be1",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-webgpu\n> playwright test --config playwright.config.ts -g \"real NanoVDB Float32 tree with WebGPU\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1237:1 › samples and integrates a real NanoVDB Float32 tree with WebGPU (51.5s)\n\n 1 passed (53.0s)\n\n(node:1083868) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:vdb-viewport",
@@ -189,9 +189,9 @@
],
"command": "npm --prefix web run test:vdb-viewport",
"exitCode": 0,
"durationMs": 122887,
"outputSha256": "215608ae74264a438f7e93caa25758eff946f429de284021b40d202ba78756a5",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-viewport\n> playwright test --config playwright.config.ts -g \"both production viewport backends\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1264:1 › renders a real NanoVDB volume through both production viewport backends (2.0m)\n\n 1 passed (2.0m)"
"durationMs": 100409,
"outputSha256": "bd6e040555c7b26b155d011d19bebaf42190aeb0ac13d37cc6a28009d5c3d6f9",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-viewport\n> playwright test --config playwright.config.ts -g \"both production viewport backends\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1269:1 › renders a real NanoVDB volume through both production viewport backends (1.6m)\n\n 1 passed (1.7m)\n\n(node:1084669) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:vdb-faults",
@@ -201,9 +201,9 @@
],
"command": "npm --prefix web run test:vdb-faults",
"exitCode": 0,
"durationMs": 6038,
"outputSha256": "6ab0e4445b5c80adb967c1e573f12339ee9e5bae3b5585ff42218a266df6d28c",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-faults\n> playwright test --config playwright.config.ts -g \"NanoVDB paging from network, Worker and WebGPU device faults\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1344:1 › recovers NanoVDB paging from network, Worker and WebGPU device faults (3.4s)\n\n 1 passed (5.2s)"
"durationMs": 5471,
"outputSha256": "9b607f025f26da75af26867585a417941f11ef1d03c0a20234b91b9f31717a0c",
"output": "> blender-web-editor@0.1.0-rc.1 test:vdb-faults\n> playwright test --config playwright.config.ts -g \"NanoVDB paging from network, Worker and WebGPU device faults\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1349:1 › recovers NanoVDB paging from network, Worker and WebGPU device faults (3.5s)\n\n 1 passed (5.0s)\n\n(node:1086217) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:e2e:N-015|non-mesh",
@@ -212,9 +212,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"N-015|non-mesh\"",
"exitCode": 0,
"durationMs": 20310,
"outputSha256": "4c6c6c6b742c24240b0ea458175e2054ef5cc0357c02f06310cea664fa7d57dc",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-015|non-mesh\n\n\nRunning 10 tests using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:295:1 › reads bounded non-mesh data blocks and previews supported geometry (2.6s)\n ✓ 2 tests/e2e/smoke.spec.ts:341:1 › reports structured N-015 gates for previewable and resource-backed data (1.3s)\n ✓ 3 tests/e2e/smoke.spec.ts:402:1 › enforces the N-015 one-million-point binary transfer gate (1.1s)\n ✓ 4 tests/e2e/smoke.spec.ts:417:1 › rejects malformed N-015 binary chunks, integer overflow and budget overflow (947ms)\n ✓ 5 tests/e2e/smoke.spec.ts:1060:1 › keeps N-015 selection history bounded and rejects stale raycast hits (974ms)\n ✓ 6 tests/e2e/smoke.spec.ts:1081:1 › validates the N-015 curve gizmo interaction transaction boundary (1.4s)\n ✓ 7 tests/e2e/smoke.spec.ts:1098:40 › previews an N-015 Curve handle drag and commits Main once in main-thread Chromium (3.4s)\n ✓ 8 tests/e2e/smoke.spec.ts:1098:40 › previews an N-015 Curve handle drag and commits Main once in OffscreenCanvas Chromium (2.5s)\n ✓ 9 tests/e2e/smoke.spec.ts:1435:1 › returns real Blender evaluations for legacy non-mesh geometry (1.6s)\n ✓ 10 tests/e2e/smoke.spec.ts:1467:1 › keeps N-015 non-mesh previews in the OffscreenCanvas renderer (1.6s)\n\n 10 passed (19.5s)"
"durationMs": 26454,
"outputSha256": "4f060e5ef7ccfeafc1ee54b0602e34819cf4b0ddd727834b40ada7d9755fadf1",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-015|non-mesh\n\n\nRunning 12 tests using 1 worker\n\n ✓ 1 tests/e2e/nonmesh-main-reader-production.spec.ts:11:1 › WBV2 reads non-mesh geometry and attributes from Blender Main without JS simulation (2.3s)\n ✓ 2 tests/e2e/smoke.spec.ts:295:1 › reads bounded non-mesh data blocks and previews supported geometry (2.4s)\n ✓ 3 tests/e2e/smoke.spec.ts:341:1 › reports structured N-015 gates for previewable and resource-backed data (1.5s)\n ✓ 4 tests/e2e/smoke.spec.ts:402:1 › enforces the N-015 one-million-point binary transfer gate (1.0s)\n ✓ 5 tests/e2e/smoke.spec.ts:417:1 › rejects malformed N-015 binary chunks, integer overflow and budget overflow (1.0s)\n ✓ 6 tests/e2e/smoke.spec.ts:1066:1 › keeps N-015 selection history bounded and rejects stale raycast hits (1.0s)\n ✓ 7 tests/e2e/smoke.spec.ts:1087:1 › validates the N-015 curve gizmo interaction transaction boundary (1.3s)\n ✓ 8 tests/e2e/smoke.spec.ts:1104:40 › previews an N-015 Curve handle drag and commits Main once in main-thread Chromium (4.1s)\n ✓ 9 tests/e2e/smoke.spec.ts:1104:40 › previews an N-015 Curve handle drag and commits Main once in OffscreenCanvas Chromium (3.1s)\n ✓ 10 tests/e2e/smoke.spec.ts:1448:1 › returns real Blender evaluations for legacy non-mesh geometry (1.8s)\n ✓ 11 tests/e2e/smoke.spec.ts:1480:1 › keeps N-015 non-mesh previews in the OffscreenCanvas renderer (1.9s)\n ✓ 12 tests/e2e/wbv2-viewport-nonmesh-production.spec.ts:12:1 › WBV2-P12-004 binds viewport pixels and non-mesh boundaries to compiled WASM Main (2.9s)\n\n 12 passed (26.0s)\n\n(node:1086555) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:e2e:real OPFS quota",
@@ -223,9 +223,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"real OPFS quota\"",
"exitCode": 0,
"durationMs": 4212,
"outputSha256": "9ca11848c3935b40798325d6e54d68ec0e7c0d8eb880bb16ecba04a7ca85d3cc",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g real OPFS quota\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1595:1 › enforces a real OPFS quota without replacing the committed project (1.5s)\n\n 1 passed (3.4s)"
"durationMs": 3209,
"outputSha256": "e9c11286aba0ff76a92a35f97181ccf7e123c55291348057653446b04db4e268",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g real OPFS quota\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1640:1 › enforces a real OPFS quota without replacing the committed project (1.2s)\n\n 1 passed (2.8s)\n\n(node:1087947) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:grease-pencil",
@@ -234,9 +234,9 @@
],
"command": "npm --prefix web run test:grease-pencil",
"exitCode": 0,
"durationMs": 776,
"outputSha256": "c5419926826128e17eed9837fd237b2467eee712143f7f3f1c7eecc243fe6775",
"output": "> blender-web-editor@0.1.0-rc.1 test:grease-pencil\n> node ../tools/web/check-grease-pencil-roundtrip.mjs\n\ngrease-pencil-roundtrip-ok layer-frame-stroke=passed undo-redo=passed save-reopen=passed"
"durationMs": 946,
"outputSha256": "52e20bdf36fcc5807b66fd7377c20332a7b1c93e5d50e2ec9c86c182e5fe5ea0",
"output": "> blender-web-editor@0.1.0-rc.1 test:grease-pencil\n> node ../tools/web/check-grease-pencil-roundtrip.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\ngrease-pencil-roundtrip-ok layer-frame-stroke=passed undo-redo=passed save-reopen=passed"
},
{
"token": "web:test:grease-pencil-editor",
@@ -245,9 +245,9 @@
],
"command": "npm --prefix web run test:grease-pencil-editor",
"exitCode": 0,
"durationMs": 4194,
"outputSha256": "71cfe010c8140d96ece7bddc359805a6dbcb54213224e78d40db436b9aef6605",
"output": "> blender-web-editor@0.1.0-rc.1 test:grease-pencil-editor\n> playwright test --config playwright.config.ts -g \"N-016 Grease Pencil editor context\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:510:1 › validates the N-016 Grease Pencil editor context transaction boundary (1.5s)\n\n 1 passed (3.3s)"
"durationMs": 3069,
"outputSha256": "511ab5694bf1a2f20f1a963615c27774734d50061509c861025b5ca53beaf683",
"output": "> blender-web-editor@0.1.0-rc.1 test:grease-pencil-editor\n> playwright test --config playwright.config.ts -g \"N-016 Grease Pencil editor context\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:511:1 › validates the N-016 Grease Pencil editor context transaction boundary (1.1s)\n\n 1 passed (2.7s)\n\n(node:1088288) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:e2e:N-016 Grease Pencil",
@@ -256,9 +256,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"N-016 Grease Pencil\"",
"exitCode": 0,
"durationMs": 21136,
"outputSha256": "feeb4c14236ca3766be2bcefb3bd7567074bc91940935c2731cdcd3e4a8b8f03",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-016 Grease Pencil\n\n\nRunning 12 tests using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:437:1 › enforces the N-016 Grease Pencil layer/frame/drawing/stroke/point schema budget (1.5s)\n ✓ 2 tests/e2e/smoke.spec.ts:453:1 › renders a bounded previous/next N-016 Grease Pencil onion-skin preview (914ms)\n ✓ 3 tests/e2e/smoke.spec.ts:485:3 › renders the N-016 Grease Pencil current-frame strokes in main-thread Chromium (1.4s)\n ✓ 4 tests/e2e/smoke.spec.ts:485:3 › renders the N-016 Grease Pencil current-frame strokes in OffscreenCanvas Chromium (1.4s)\n ✓ 5 tests/e2e/smoke.spec.ts:510:1 › validates the N-016 Grease Pencil editor context transaction boundary (974ms)\n ✓ 6 tests/e2e/smoke.spec.ts:526:1 › raycasts and highlights N-016 Grease Pencil points with stable drawing identity (1.4s)\n ✓ 7 tests/e2e/smoke.spec.ts:541:40 › previews N-016 Grease Pencil points and commits Main once in main-thread Chromium (2.0s)\n ✓ 8 tests/e2e/smoke.spec.ts:541:40 › previews N-016 Grease Pencil points and commits Main once in OffscreenCanvas Chromium (1.7s)\n ✓ 9 tests/e2e/smoke.spec.ts:565:1 › edits N-016 Grease Pencil layers and frames from the bounded editor panel (1.7s)\n ✓ 10 tests/e2e/smoke.spec.ts:580:1 › navigates real N-016 Grease Pencil drawing frames in the bounded Dope Sheet (1.8s)\n ✓ 11 tests/e2e/smoke.spec.ts:595:1 › moves an N-016 Grease Pencil point through one revision-bound Main transaction (1.6s)\n ✓ 12 tests/e2e/smoke.spec.ts:606:1 › reopens an edited N-016 Grease Pencil drawing after WebEngine Worker restart (1.5s)\n\n 12 passed (20.1s)"
"durationMs": 25829,
"outputSha256": "3201c07b58ea9c887a0c276efcf099e27fec12d9057557d7887cc330a0c26e02",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-016 Grease Pencil\n\n\nRunning 12 tests using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:437:1 › enforces the N-016 Grease Pencil layer/frame/drawing/stroke/point schema budget (1.1s)\n ✓ 2 tests/e2e/smoke.spec.ts:453:1 › renders a bounded previous/next N-016 Grease Pencil onion-skin preview (981ms)\n ✓ 3 tests/e2e/smoke.spec.ts:486:3 › renders the N-016 Grease Pencil current-frame strokes in main-thread Chromium (2.0s)\n ✓ 4 tests/e2e/smoke.spec.ts:486:3 › renders the N-016 Grease Pencil current-frame strokes in OffscreenCanvas Chromium (1.7s)\n ✓ 5 tests/e2e/smoke.spec.ts:511:1 › validates the N-016 Grease Pencil editor context transaction boundary (1.0s)\n ✓ 6 tests/e2e/smoke.spec.ts:527:1 › raycasts and highlights N-016 Grease Pencil points with stable drawing identity (1.3s)\n ✓ 7 tests/e2e/smoke.spec.ts:542:40 › previews N-016 Grease Pencil points and commits Main once in main-thread Chromium (3.2s)\n ✓ 8 tests/e2e/smoke.spec.ts:542:40 › previews N-016 Grease Pencil points and commits Main once in OffscreenCanvas Chromium (2.7s)\n ✓ 9 tests/e2e/smoke.spec.ts:566:1 › edits N-016 Grease Pencil layers and frames from the bounded editor panel (2.8s)\n ✓ 10 tests/e2e/smoke.spec.ts:581:1 › navigates real N-016 Grease Pencil drawing frames in the bounded Dope Sheet (2.8s)\n ✓ 11 tests/e2e/smoke.spec.ts:596:1 › moves an N-016 Grease Pencil point through one revision-bound Main transaction (2.4s)\n ✓ 12 tests/e2e/smoke.spec.ts:607:1 › reopens an edited N-016 Grease Pencil drawing after WebEngine Worker restart (1.8s)\n\n 12 passed (25.4s)\n\n(node:1088763) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:paint-roundtrip",
@@ -267,9 +267,9 @@
],
"command": "npm --prefix web run test:paint-roundtrip",
"exitCode": 0,
"durationMs": 785,
"outputSha256": "d43258df5975ef194ba7c45c3758c8cac3e2ef89256510e4c1fedbc27f2b5b25",
"output": "> blender-web-editor@0.1.0-rc.1 test:paint-roundtrip\n> node ../tools/web/check-paint-roundtrip.mjs\n\npaint-roundtrip-ok vertex-color=passed vertex-weight-normalize=passed mirror-gate=passed undo-redo=passed save-reopen=passed"
"durationMs": 934,
"outputSha256": "89ab44739d00a2ef7e740eeb3df7395493721f6964ca02b527b2a4a2756339b6",
"output": "> blender-web-editor@0.1.0-rc.1 test:paint-roundtrip\n> node ../tools/web/check-paint-roundtrip.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\npaint-roundtrip-ok vertex-color=passed vertex-weight-normalize=passed vertex-weight-limit=passed vertex-weight-mirror=passed mirror-gate=passed undo-redo=passed save-reopen=passed"
},
{
"token": "web:e2e:N-017 paint",
@@ -278,9 +278,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"N-017 paint\"",
"exitCode": 0,
"durationMs": 4154,
"outputSha256": "204d84caabd73ba9be657483115ed1c2f681acf34ece9500ed5c0d5861c8fb7a",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-017 paint\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:648:1 › enforces the N-017 paint stroke, bounded brush and UDIM patch budgets (1.4s)\n\n 1 passed (3.3s)"
"durationMs": 3101,
"outputSha256": "accf89dd6307942e4c20b66086dafd311a407a0c314a4d3df1866b0ec419c877",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-017 paint\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:649:1 › enforces the N-017 paint stroke, bounded brush and UDIM patch budgets (1.1s)\n\n 1 passed (2.7s)\n\n(node:1090029) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:e2e:N-018 physics",
@@ -289,9 +289,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"N-018 physics\"",
"exitCode": 0,
"durationMs": 4129,
"outputSha256": "cfc04a1e75861cfd87fd3b58ed016a9d2a85c854866fcfc314e97fbfe591d2fa",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-018 physics\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:746:1 › validates the N-018 physics capability and cache manifests without claiming solvers (1.4s)\n\n 1 passed (3.3s)"
"durationMs": 3072,
"outputSha256": "845b3762fd6d85dfe6dfddac79d5240c20cdca61529ab1e4441e3102c24fc045",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-018 physics\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:747:1 › validates the N-018 physics capability and cache manifests without claiming solvers (1.1s)\n\n 1 passed (2.7s)\n\n(node:1090500) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:simulation-cache",
@@ -300,9 +300,9 @@
],
"command": "npm --prefix web run test:simulation-cache",
"exitCode": 0,
"durationMs": 4312,
"outputSha256": "62ebe648848c8feb9f768825b87175e9c6ba374ee93fa43e9e089525e2d62a87",
"output": "> blender-web-editor@0.1.0-rc.1 test:simulation-cache\n> playwright test --config playwright.config.ts -g \"Simulation caches\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1631:1 › persists and revalidates content-addressed Simulation caches across Worker restarts (1.6s)\n\n 1 passed (3.4s)"
"durationMs": 3381,
"outputSha256": "adf0cbe5f474512ef07ae8d1e6c8bf929d6608f1f2a1efc43809a80d59b627c6",
"output": "> blender-web-editor@0.1.0-rc.1 test:simulation-cache\n> playwright test --config playwright.config.ts -g \"Simulation caches\"\n\n\nRunning 2 tests using 2 workers\n\n ✓ 1 tests/e2e/simulation-cache-identity.spec.ts:3:1 › M10-05 isolates Simulation caches by committed graph/source/revision identity (1.4s)\n ✓ 2 tests/e2e/smoke.spec.ts:1676:1 › persists and revalidates content-addressed Simulation caches across Worker restarts (1.4s)\n\n 2 passed (3.0s)\n\n(node:1090812) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:1090813) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:physics-main-reader",
@@ -311,9 +311,9 @@
],
"command": "npm --prefix web run test:physics-main-reader",
"exitCode": 0,
"durationMs": 771,
"outputSha256": "db1e7ed03da623f091a436357d0fdc025fa358e13040aa98c8658b7b307c080c",
"output": "> blender-web-editor@0.1.0-rc.1 test:physics-main-reader\n> node ../tools/web/check-physics-main-reader.mjs\n\nphysics-main-reader-ok families=CLOTH,SOFT_BODY dependencies=COLLISION settings-sha256=passed save-reopen=passed playback=BLOCKED solver=BLOCKED"
"durationMs": 956,
"outputSha256": "c6877e3c785a9527a87ba3a142369f02e5968cbaa600f6707067469c433b704d",
"output": "> blender-web-editor@0.1.0-rc.1 test:physics-main-reader\n> node ../tools/web/check-physics-main-reader.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\nphysics-main-reader-ok families=CLOTH,SOFT_BODY dependencies=COLLISION settings-sha256=passed save-reopen=passed playback=BLOCKED solver=BLOCKED"
},
{
"token": "web:test:lighting-roundtrip",
@@ -322,9 +322,9 @@
],
"command": "npm --prefix web run test:lighting-roundtrip",
"exitCode": 0,
"durationMs": 775,
"outputSha256": "c9ddac34f9376983f0c67309583d0cb4a946d94f87421ffe1c9d6c3b39dbaba0",
"output": "> blender-web-editor@0.1.0-rc.1 test:lighting-roundtrip\n> node ../tools/web/check-lighting-roundtrip.mjs\n\nlighting-roundtrip-ok camera-writer-dof=passed light-shadow-exposure=passed world-mist=passed color-management-reader=passed white-balance-gate=passed undo-redo=passed save-reopen=passed"
"durationMs": 874,
"outputSha256": "a563ab6f1acc7f96cd841a40b4f25b8df4e514bc9d96257474ac02a4141ab2a1",
"output": "> blender-web-editor@0.1.0-rc.1 test:lighting-roundtrip\n> node ../tools/web/check-lighting-roundtrip.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\nlighting-roundtrip-ok camera-writer-dof=passed light-shadow-exposure=passed world-mist=passed color-management-reader=passed white-balance-gate=passed undo-redo=passed save-reopen=passed"
},
{
"token": "web:e2e:N-019 Scene exposure",
@@ -333,9 +333,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"N-019 Scene exposure\"",
"exitCode": 0,
"durationMs": 4815,
"outputSha256": "282a7bd253cb7748b37e69df903c4d6c0b3420222a0228b1aad4f2af863ae9da",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-019 Scene exposure\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:772:1 › maps N-019 Scene exposure and light shadow metadata without using legacy World exposure (2.1s)\n\n 1 passed (3.9s)"
"durationMs": 4126,
"outputSha256": "b7ee75921d06286a87503160289e0f2d0ea90fd9d775937335ebb4f71e05fe6a",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-019 Scene exposure\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:773:1 › maps N-019 Scene exposure and light shadow metadata without using legacy World exposure (2.2s)\n\n 1 passed (3.7s)\n\n(node:1091396) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:compositor-main-reader",
@@ -344,9 +344,9 @@
],
"command": "npm --prefix web run test:compositor-main-reader",
"exitCode": 0,
"durationMs": 772,
"outputSha256": "8a4e76fcac535266cf3d4ac3166a2465334ed066c30a6bad5821c10f488e1e3b",
"output": "> blender-web-editor@0.1.0-rc.1 test:compositor-main-reader\n> node ../tools/web/check-compositor-main-reader.mjs\n\ncompositor-main-reader-ok graph-structure=passed exposure-invert-parameters=passed socket-links=passed unsupported-preserved=passed"
"durationMs": 888,
"outputSha256": "f15461ead50ab03a4007e89f3f7063443e0dbcb20fa674046cbf93fb6dba3a56",
"output": "> blender-web-editor@0.1.0-rc.1 test:compositor-main-reader\n> node ../tools/web/check-compositor-main-reader.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\ncompositor-main-reader-ok graph-structure=passed exposure-invert-parameters=passed socket-links=passed unsupported-preserved=passed"
},
{
"token": "web:e2e:N-020 CPU compositor",
@@ -355,9 +355,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"N-020 CPU compositor\"",
"exitCode": 0,
"durationMs": 4109,
"outputSha256": "dc95f8f62abd9d6662f2a919d6aa82ce8154e4f014d2fd2290db78aec5987381",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-020 CPU compositor\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:834:1 › executes the bounded N-020 CPU compositor and preserves unsupported nodes as gates (1.4s)\n\n 1 passed (3.3s)"
"durationMs": 3135,
"outputSha256": "f489565bb44637852148ccdbc6427c3f1dd64858c2f7dc872c8d48a28b1e689f",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-020 CPU compositor\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:835:1 › executes the bounded N-020 CPU compositor and preserves unsupported nodes as gates (1.1s)\n\n 1 passed (2.7s)\n\n(node:1091733) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:sequencer-main-reader",
@@ -366,9 +366,9 @@
],
"command": "npm --prefix web run test:sequencer-main-reader",
"exitCode": 0,
"durationMs": 730,
"outputSha256": "3cfbd29640e5da4df0505732f2d6f963663cb67414d5ee97eebe8a7ffbbbeea8",
"output": "> blender-web-editor@0.1.0-rc.1 test:sequencer-main-reader\n> node ../tools/web/check-sequencer-main-reader.mjs\n\nsequencer-main-reader-ok media-paths=passed still-image-range=passed fps=passed effect-dependencies=passed"
"durationMs": 883,
"outputSha256": "879f1b65f633ad3a4fab7e8cc54d2ca6d8e8580ebc9be33d83eaa22769a7c0cd",
"output": "> blender-web-editor@0.1.0-rc.1 test:sequencer-main-reader\n> node ../tools/web/check-sequencer-main-reader.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\nsequencer-main-reader-ok media-paths=passed still-image-range=passed fps=passed effect-dependencies=passed"
},
{
"token": "web:e2e:N-021 sequencer",
@@ -377,9 +377,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"N-021 sequencer\"",
"exitCode": 0,
"durationMs": 4157,
"outputSha256": "4f9551827b9a72bc512d7ceba8ca569e4a8623ff767da93bc79c901451c94233",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-021 sequencer\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:879:1 › validates N-021 sequencer strips, deterministic edits, sandbox paths and codec gates (1.4s)\n\n 1 passed (3.3s)"
"durationMs": 3072,
"outputSha256": "7307e762b795e244aa637ac4409cb79d5fcafbda723be19866c48b035a2c56e5",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-021 sequencer\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:885:1 › validates N-021 sequencer strips, deterministic edits, sandbox paths and codec gates (1.1s)\n\n 1 passed (2.6s)\n\n(node:1092228) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:mask-main-reader",
@@ -388,9 +388,9 @@
],
"command": "npm --prefix web run test:mask-main-reader",
"exitCode": 0,
"durationMs": 743,
"outputSha256": "5fab1e2b7cdae27caa97ebbaf2b9c0f72a84cb44897b856ecbfd4d5162712027",
"output": "> blender-web-editor@0.1.0-rc.1 test:mask-main-reader\n> node ../tools/web/check-mask-main-reader.mjs\n\nmask-main-reader-ok layers-splines=passed handles-feather=passed locked-editable-selection=passed"
"durationMs": 942,
"outputSha256": "4b4d0f9caf9104db3d9c0566b745ece563f06e51f66fd3ac415fb64f033365ac",
"output": "> blender-web-editor@0.1.0-rc.1 test:mask-main-reader\n> node ../tools/web/check-mask-main-reader.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\nmask-main-reader-ok layers-splines=passed handles-feather=passed locked-editable-selection=passed"
},
{
"token": "web:e2e:N-022 tracking",
@@ -399,9 +399,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"N-022 tracking\"",
"exitCode": 0,
"durationMs": 4096,
"outputSha256": "67420ec6e4a28f27f2346a7e6db835d2ca8bd281cd789371458b3d17a5693e2d",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-022 tracking\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:922:1 › validates N-022 tracking markers, masks, resource bindings and solve gates (1.4s)\n\n 1 passed (3.3s)"
"durationMs": 3086,
"outputSha256": "29bf85aa581ecc5af398360228b10e20fea7a18559c6df1b5f71344e94954fc1",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-022 tracking\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:928:1 › validates N-022 tracking markers, masks, resource bindings and solve gates (1.1s)\n\n 1 passed (2.6s)\n\n(node:1092558) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:library-main-reader",
@@ -410,9 +410,9 @@
],
"command": "npm --prefix web run test:library-main-reader",
"exitCode": 0,
"durationMs": 753,
"outputSha256": "30d5e1d42dd164832e6dea514753d5e72251927249c5019e87dd79b6c8eaf392",
"output": "> blender-web-editor@0.1.0-rc.1 test:library-main-reader\n> node ../tools/web/check-library-main-reader.mjs\n\nreports | Read library: 'resources/image_resource_library.blend', '//resources/image_resource_library.blend', parent '<direct>'\n | \u001b[2;37msource/blender/blenkernel/intern/report.cc:51 BKE_report_log\u001b[0m\nreports | \u001b[1;33mWARNING\u001b[0m Unable to open 'resources/image_resource_library.blend': No such file or directory\n | \u001b[2;37msource/blender/blenkernel/intern/report.cc:54 BKE_report_log\u001b[0m\nreports | Cannot find lib 'resources/image_resource_library.blend'\n | \u001b[2;37msource/blender/blenkernel/intern/report.cc:51 BKE_report_log\u001b[0m\nlibrary-main-reader-ok relative-path=passed readonly=passed dependency-inventory=passed"
"durationMs": 914,
"outputSha256": "d6075ce987f507840a3f0e205f081dfe94878c1dcb6e30219cf04a05b57fd75f",
"output": "> blender-web-editor@0.1.0-rc.1 test:library-main-reader\n> node ../tools/web/check-library-main-reader.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\nreports | Read library: 'resources/image_resource_library.blend', '//resources/image_resource_library.blend', parent '<direct>'\n | \u001b[2;37msource/blender/blenkernel/intern/report.cc:51 BKE_report_log\u001b[0m\nreports | \u001b[1;33mWARNING\u001b[0m Unable to open 'resources/image_resource_library.blend': No such file or directory\n | \u001b[2;37msource/blender/blenkernel/intern/report.cc:54 BKE_report_log\u001b[0m\nreports | Cannot find lib 'resources/image_resource_library.blend'\n | \u001b[2;37msource/blender/blenkernel/intern/report.cc:51 BKE_report_log\u001b[0m\nlibrary-main-reader-ok relative-path=passed readonly=passed dependency-inventory=passed"
},
{
"token": "web:e2e:N-023 asset",
@@ -421,9 +421,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"N-023 asset\"",
"exitCode": 0,
"durationMs": 4191,
"outputSha256": "eb7f5ba2385cdf3279dab8ede7a792d238a01f3155e8d0e08e69d4e5e606cf94",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-023 asset\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:969:1 › validates N-023 asset catalogs, library graphs, archive budgets and IO gates (1.5s)\n\n 1 passed (3.3s)"
"durationMs": 2861,
"outputSha256": "6d609515906d1e8f8888372f9eedfebf7820dceaa84c06aa44d9d2cc21b7e1e2",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-023 asset\n\n\nRunning 2 tests using 1 worker\n\n ✓ 1 tests/e2e/archive-security-fixtures.spec.ts:8:1 › N-023 asset malicious ZIP/TAR fixtures remain in the archive security regression (235ms)\n ✓ 2 tests/e2e/smoke.spec.ts:975:1 › validates N-023 asset catalogs, library graphs, archive budgets and IO gates (895ms)\n\n 2 passed (2.5s)\n\n(node:1160207) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:1160220) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:editor-main-reader",
@@ -432,9 +432,9 @@
],
"command": "npm --prefix web run test:editor-main-reader",
"exitCode": 0,
"durationMs": 750,
"outputSha256": "534c21e20c5abe806079a385cacc0136c73a12f95600a66d52deef019509b8ba",
"output": "> blender-web-editor@0.1.0-rc.1 test:editor-main-reader\n> node ../tools/web/check-editor-main-reader.mjs\n\neditor-main-reader-ok workspaces=9 areas=36 regions=167"
"durationMs": 947,
"outputSha256": "d3375f5c8d073641f0269436e9e1f8f1fb2991fa42ac2cd1c0de7f3b473bb35e",
"output": "> blender-web-editor@0.1.0-rc.1 test:editor-main-reader\n> node ../tools/web/check-editor-main-reader.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\neditor-main-reader-ok workspaces=9 areas=36 regions=167"
},
{
"token": "web:e2e:N-024 editor",
@@ -443,9 +443,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"N-024 editor\"",
"exitCode": 0,
"durationMs": 4193,
"outputSha256": "79f7ba8129518e6d2819cc2e4dde8348b108ad61b5eaeb93e751cb0568bd522a",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-024 editor\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:997:1 › validates N-024 editor context, selection sync, layout budgets and workflow gates (1.5s)\n\n 1 passed (3.4s)"
"durationMs": 3128,
"outputSha256": "91eff86165a16cf067dec0428b26d659681b52048dc27f3e32ae8a96d177766f",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-024 editor\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1003:1 › validates N-024 editor context, selection sync, layout budgets and workflow gates (1.1s)\n\n 1 passed (2.7s)\n\n(node:1093458) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:script-main-reader",
@@ -454,9 +454,9 @@
],
"command": "npm --prefix web run test:script-main-reader",
"exitCode": 0,
"durationMs": 779,
"outputSha256": "e73ad4daab4992a2e86e5e91a81d5e830c7d4604122e021da8fac36f90b37316",
"output": "> blender-web-editor@0.1.0-rc.1 test:script-main-reader\n> node ../tools/web/check-script-main-reader.mjs\n\nscript-main-reader-ok full-source=passed sha256=passed autorun-default-deny=passed"
"durationMs": 861,
"outputSha256": "0d1296083130a156a96bb507117663db9c418735a90e1cfee7d1c405653a8486",
"output": "> blender-web-editor@0.1.0-rc.1 test:script-main-reader\n> node ../tools/web/check-script-main-reader.mjs\n\ncolor_management | Using fallback mode for management\n | \u001b[2;37msource/blender/imbuf/intern/colormanagement.cc:342 colormanagement_init\u001b[0m\nscript-main-reader-ok full-source=passed sha256=passed autorun-default-deny=passed"
},
{
"token": "web:test:scripting-isolation",
@@ -465,7 +465,7 @@
],
"command": "npm --prefix web run test:scripting-isolation",
"exitCode": 0,
"durationMs": 894,
"durationMs": 331,
"outputSha256": "6469327e0bb1c241dc7b0c0d184ca45cbe258f56638a245663c215eaa2ab91bf",
"output": "> blender-web-editor@0.1.0-rc.1 test:scripting-isolation\n> node ../tools/web/check-scripting-isolation.mjs\n\nscripting-isolation-ok status=BLOCKED audit=DENY approved-key=sandbox-unavailable server=unavailable execution=disabled"
},
@@ -476,9 +476,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"N-025 script\"",
"exitCode": 0,
"durationMs": 4125,
"outputSha256": "dc5463f44e788eed8372e05f0c9cfcaff9ffa31b0badb3f881c768f2dd6c6805",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-025 script\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1017:1 › validates N-025 script policy, signatures, budgets and platform gates (1.4s)\n\n 1 passed (3.3s)"
"durationMs": 3087,
"outputSha256": "a8f634e7622af2eada3a7a5696f68b15beb062061f2467850d0a31c4167a85f7",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-025 script\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1023:1 › validates N-025 script policy, signatures, budgets and platform gates (1.1s)\n\n 1 passed (2.7s)\n\n(node:1093824) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:e2e:N-026 release",
@@ -487,9 +487,9 @@
],
"command": "npm --prefix web run test:e2e -- --workers=1 -g \"N-026 release\"",
"exitCode": 0,
"durationMs": 4146,
"outputSha256": "b9262c32aa2e913165d94cce4611a9422bcb3d66f5626317a7403c7972963e2a",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-026 release\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1040:1 › keeps N-026 release manifest deterministic and blocks missing evidence (1.4s)\n\n 1 passed (3.3s)"
"durationMs": 3123,
"outputSha256": "1862b05c842dac159a9e7ca7053316d20eef63c91d9c461761ff06913889cb65",
"output": "> blender-web-editor@0.1.0-rc.1 test:e2e\n> playwright test --config playwright.config.ts --workers=1 -g N-026 release\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:1046:1 › keeps N-026 release manifest deterministic and blocks missing evidence (1.1s)\n\n 1 passed (2.7s)\n\n(node:1094142) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:v1-user-loop",
@@ -498,9 +498,9 @@
],
"command": "npm --prefix web run test:v1-user-loop",
"exitCode": 0,
"durationMs": 5555,
"outputSha256": "82cbcac6791c98fa4f0effa80ab5de4f170cfc65b0883c06bf447ea45008146a",
"output": "> blender-web-editor@0.1.0-rc.1 test:v1-user-loop\n> playwright test --config playwright.config.ts tests/e2e/v1-user-loop.spec.ts\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/v1-user-loop.spec.ts:6:1 › completes the V1 import-edit-save-restart-reopen-GLB loop (3.0s)\n\n 1 passed (4.7s)"
"durationMs": 4043,
"outputSha256": "0bce8a552de6d0d2fb3850cc79b3591a0049542870a93ba7cb5a1fabdbc5bc54",
"output": "> blender-web-editor@0.1.0-rc.1 test:v1-user-loop\n> playwright test --config playwright.config.ts tests/e2e/v1-user-loop.spec.ts\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/v1-user-loop.spec.ts:6:1 › completes the V1 import-edit-save-restart-reopen-GLB loop (2.8s)\n\n 1 passed (3.6s)\n\n(node:1094455) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:release-evidence",
@@ -509,7 +509,7 @@
],
"command": "npm --prefix web run test:release-evidence",
"exitCode": 0,
"durationMs": 1184,
"durationMs": 321,
"outputSha256": "fd4d31581227c482d4f7e165cbf83a313a667a6551a069c982c086d1b90fbaec",
"output": "> blender-web-editor@0.1.0-rc.1 test:release-evidence\n> node ../tools/web/check-release-evidence.mjs\n\nrelease-evidence-check-ok records=17 missing=0 status=READY"
},
@@ -520,9 +520,9 @@
],
"command": "npm --prefix web run test:browser",
"exitCode": 0,
"durationMs": 9223,
"outputSha256": "c31e3eb770f85aff43c5da17b2cb819b5a4d4bb69dfc85a9cb2319a24f7bfc12",
"output": "> blender-web-editor@0.1.0-rc.1 test:browser\n> playwright test --config playwright.release.config.ts\n\n\nRunning 3 tests using 1 worker\n\n ✓ 1 [chromium] › tests/e2e/cross-browser.spec.ts:6:1 › boots the offline engine, renders SceneIR and performs a Main edit (3.4s)\n ✓ 2 [chromium] › tests/e2e/cross-browser.spec.ts:32:1 › keeps content-addressed asset recovery available in Chromium (1.6s)\n ✓ 3 [chromium] › tests/e2e/cross-browser.spec.ts:51:1 › keeps the committed project after quota failure and Worker restart in Chromium (1.3s)\n\n 3 passed (8.1s)"
"durationMs": 6391,
"outputSha256": "c33c82c05124749c8136b1a2bc4ae1f07a3a6d7896b74c9e6390601a23e25593",
"output": "> blender-web-editor@0.1.0-rc.1 test:browser\n> playwright test --config playwright.release.config.ts\n\n\nRunning 3 tests using 1 worker\n\n ✓ 1 [chromium] › tests/e2e/cross-browser.spec.ts:6:1 › boots the offline engine, renders SceneIR and performs a Main edit (2.9s)\n ✓ 2 [chromium] › tests/e2e/cross-browser.spec.ts:32:1 › keeps content-addressed asset recovery available in Chromium (1.1s)\n ✓ 3 [chromium] › tests/e2e/cross-browser.spec.ts:51:1 › keeps the committed project after quota failure and Worker restart in Chromium (1.1s)\n\n 3 passed (5.9s)\n\n(node:1094801) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.\n(Use `node --trace-warnings ...` to show where the warning was created)"
},
{
"token": "web:test:release-package",
@@ -531,9 +531,9 @@
],
"command": "npm --prefix web run test:release-package",
"exitCode": 0,
"durationMs": 7028,
"outputSha256": "d087f0a9f20a7027eccb94c7a9cc6b0b67924377510582a91755629debc8de0e",
"output": "> blender-web-editor@0.1.0-rc.1 test:release-package\n> npm run build && npm run release:sbom && node ../tools/web/check-release-package.mjs\n\n\n> blender-web-editor@0.1.0-rc.1 build\n> tsc -p tsconfig.json && vite build --config app/vite.config.ts\n\nvite v8.2.0 building client environment for production...\n\u001b[2K\rtransforming...✓ 54 modules transformed.\nrendering chunks...\ncomputing gzip size...\ndist/index.html 0.46 kB │ gzip: 0.30 kB\ndist/assets/storage.worker-COUVNftM.js 36.81 kB\ndist/assets/web-engine.worker-CWkf48pG.js 245.76 kB\ndist/assets/viewport-render.worker-DZmZ4IRD.js 601.32 kB\ndist/assets/web_engine-CvVHxFlQ.wasm 15,048.04 kB │ gzip: 3,562.32 kB\ndist/assets/index-QI0bg0OR.css 11.41 kB │ gzip: 3.18 kB\ndist/assets/index-YnUA2xia.js 978.22 kB │ gzip: 264.63 kB\n\n✓ built in 877ms\n\n> blender-web-editor@0.1.0-rc.1 release:sbom\n> node ../tools/web/generate-sbom.mjs\n\nsbom-ok packages=150 sha256=7d0fb22790c44bada5f01e5ebc12f6050e1c0436a53f58dceb2e979c17bb593a\nrelease-package-ok files=14 bytes=32896131\n\n[plugin rolldown:vite-resolve] Module \"module\" has been externalized for browser compatibility, imported by \"/home/mes123456/workinf_Blender_Wasm/web/app/src/vendor/blender/web_engine.js\". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\n[plugin builtin:vite-reporter] \n(!) Some chunks are larger than 500 kB after minification. Consider:\n- Using dynamic import() to code-split the application\n- Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting\n- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit."
"durationMs": 5777,
"outputSha256": "7126843d221ea41d711d7513e70d0e79970969e55b0b1ee39f9584523f3adebc",
"output": "> blender-web-editor@0.1.0-rc.1 test:release-package\n> npm run build && npm run release:sbom && node ../tools/web/check-release-package.mjs\n\n\n> blender-web-editor@0.1.0-rc.1 build\n> node ../tools/web/incremental-web-build.mjs\n\nvite v8.2.0 building client environment for production...\n\u001b[2K\rtransforming...✓ 109 modules transformed.\nrendering chunks...\ncomputing gzip size...\ndist/index.html 0.64 kB │ gzip: 0.38 kB\ndist/assets/storage.worker-D9TqXsGS.js 66.59 kB\ndist/assets/web-engine.worker-IDZvv9-Y.js 403.96 kB\ndist/assets/viewport-render.worker-BKnJyAEz.js 634.08 kB\ndist/assets/web_engine-BOCKIewt.wasm 16,919.36 kB │ gzip: 4,002.99 kB\ndist/assets/index-BgTbQCE2.css 15.35 kB │ gzip: 3.91 kB\ndist/assets/index-BSYFcsRz.js 2,654.26 kB │ gzip: 409.51 kB\n\n✓ built in 642ms\n\n> blender-web-editor@0.1.0-rc.1 release:sbom\n> node ../tools/web/generate-sbom.mjs\n\nsbom-ok packages=156 sha256=76a99d0db459c7c9354dadb7d4c4bda534dd86dfe8a4f9c05efa55799561cbb5\nrelease-package-ok files=22 bytes=83030739\n\n[plugin rolldown:vite-resolve] Module \"module\" has been externalized for browser compatibility, imported by \"/home/mes123456/workinf_Blender_Wasm/web/app/src/vendor/blender/web_engine.js\". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\n[plugin builtin:vite-reporter] \n(!) Some chunks are larger than 500 kB after minification. Consider:\n- Using dynamic import() to code-split the application\n- Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting\n- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit."
},
{
"token": "web:release:offline",
@@ -542,9 +542,9 @@
],
"command": "npm --prefix web run release:offline",
"exitCode": 0,
"durationMs": 45192,
"outputSha256": "0b59a36f3df2b4450493bfa7770e30b853cd97abdd761bef494e35ee738607e1",
"output": "> blender-web-editor@0.1.0-rc.1 release:offline\n> npm run build && node ../tools/web/check-offline-reproducibility.mjs\n\n\n> blender-web-editor@0.1.0-rc.1 build\n> tsc -p tsconfig.json && vite build --config app/vite.config.ts\n\nvite v8.2.0 building client environment for production...\n\u001b[2K\rtransforming...✓ 54 modules transformed.\nrendering chunks...\ncomputing gzip size...\ndist/index.html 0.46 kB │ gzip: 0.30 kB\ndist/assets/storage.worker-COUVNftM.js 36.81 kB\ndist/assets/web-engine.worker-CWkf48pG.js 245.76 kB\ndist/assets/viewport-render.worker-DZmZ4IRD.js 601.32 kB\ndist/assets/web_engine-CvVHxFlQ.wasm 15,048.04 kB │ gzip: 3,562.32 kB\ndist/assets/index-QI0bg0OR.css 11.41 kB │ gzip: 3.18 kB\ndist/assets/index-YnUA2xia.js 978.22 kB │ gzip: 264.63 kB\n\n✓ built in 880ms\nsbom-ok packages=150 sha256=7d0fb22790c44bada5f01e5ebc12f6050e1c0436a53f58dceb2e979c17bb593a\noffline-release-ok binary=7841801 source=206996277 sha256=8af6c782b8e4b31020219597b821160b7634439749c455fd31d9d919676e2e2e\nsbom-ok packages=150 sha256=7d0fb22790c44bada5f01e5ebc12f6050e1c0436a53f58dceb2e979c17bb593a\noffline-release-ok binary=7841801 source=206996277 sha256=8af6c782b8e4b31020219597b821160b7634439749c455fd31d9d919676e2e2e\noffline-reproducibility-ok binary=8af6c782b8e4b31020219597b821160b7634439749c455fd31d9d919676e2e2e source=ee09b3e43e715b3d5497573bbf63a449cbea146150d56c08c6506afd5fce2871\n\n[plugin rolldown:vite-resolve] Module \"module\" has been externalized for browser compatibility, imported by \"/home/mes123456/workinf_Blender_Wasm/web/app/src/vendor/blender/web_engine.js\". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\n[plugin builtin:vite-reporter] \n(!) Some chunks are larger than 500 kB after minification. Consider:\n- Using dynamic import() to code-split the application\n- Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting\n- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit."
"durationMs": 34050,
"outputSha256": "8305d53ffe6dfa593a28880b1cb74340203c19ec4d9669553de865cb4feb9d14",
"output": "> blender-web-editor@0.1.0-rc.1 release:offline\n> npm run build && node ../tools/web/check-offline-reproducibility.mjs\n\n\n> blender-web-editor@0.1.0-rc.1 build\n> node ../tools/web/incremental-web-build.mjs\n\nweb-typecheck-reused fingerprint=df5ec09329c091c261edca0636146aaa60aaf5b4c4ba181ee662a79dd889c81e\nvite v8.2.0 building client environment for production...\n\u001b[2K\rtransforming...✓ 109 modules transformed.\nrendering chunks...\ncomputing gzip size...\ndist/index.html 0.64 kB │ gzip: 0.38 kB\ndist/assets/storage.worker-D9TqXsGS.js 66.59 kB\ndist/assets/web-engine.worker-IDZvv9-Y.js 403.96 kB\ndist/assets/viewport-render.worker-BKnJyAEz.js 634.08 kB\ndist/assets/web_engine-BOCKIewt.wasm 16,919.36 kB │ gzip: 4,002.99 kB\ndist/assets/index-D90HOVQt.css 15.57 kB │ gzip: 3.97 kB\ndist/assets/index-CHJZvH-x.js 2,654.34 kB │ gzip: 409.53 kB\n\n✓ built in 504ms\nsbom-ok packages=156 sha256=76a99d0db459c7c9354dadb7d4c4bda534dd86dfe8a4f9c05efa55799561cbb5\noffline-release-ok binary=22875262 source=234728024 sha256=0f47b9e0db8f92c113483debdd0667ef3d81f8c58bee0b9065f66e8821f3bc7e\nsbom-ok packages=156 sha256=76a99d0db459c7c9354dadb7d4c4bda534dd86dfe8a4f9c05efa55799561cbb5\noffline-release-ok binary=22875262 source=234728024 sha256=0f47b9e0db8f92c113483debdd0667ef3d81f8c58bee0b9065f66e8821f3bc7e\noffline-reproducibility-ok binary=0f47b9e0db8f92c113483debdd0667ef3d81f8c58bee0b9065f66e8821f3bc7e source=c88076593761ddf2da799503a4d4ec9bed02ecee8e2c5e1219c9eca671b9df8d\n\n[plugin rolldown:vite-resolve] Module \"module\" has been externalized for browser compatibility, imported by \"/home/mes123456/workinf_Blender_Wasm/web/app/src/vendor/blender/web_engine.js\". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\n[plugin builtin:vite-reporter] \n(!) Some chunks are larger than 500 kB after minification. Consider:\n- Using dynamic import() to code-split the application\n- Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting\n- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit."
},
{
"token": "web:test:release-performance",
@@ -553,9 +553,9 @@
],
"command": "npm --prefix web run test:release-performance",
"exitCode": 0,
"durationMs": 89284,
"outputSha256": "e76cf7de997e507dbab0242f1cde2e6b291a9f99d63ef2ca2450332da16d9ea3",
"output": "> blender-web-editor@0.1.0-rc.1 test:release-performance\n> node ../tools/web/check-release-performance.mjs\n\nrelease-performance-ok [{\"target\":100000,\"ratio\":0.9,\"inputTriangles\":100000,\"outputTriangles\":89999,\"elapsedMs\":88241,\"peakHeapBytes\":67108864,\"releasedPointerCount\":10,\"recoveryAllocation\":true},{\"target\":1000000,\"ratio\":1,\"inputTriangles\":1000000,\"outputTriangles\":1000000,\"elapsedMs\":535,\"peakHeapBytes\":346554368,\"releasedPointerCount\":10,\"recoveryAllocation\":true}]\n\nHeap resize call from 67108864 to 80543744 took 0.2181620000046678 msecs. Success: true\nHeap resize call from 80543744 to 96665600 took 0.09495199999946635 msecs. Success: true\nHeap resize call from 96665600 to 115998720 took 0.04383199999574572 msecs. Success: true\nHeap resize call from 115998720 to 139198464 took 0.05545200000051409 msecs. Success: true\nHeap resize call from 139198464 to 167051264 took 1.4360670000023674 msecs. Success: true\nHeap resize call from 167051264 to 200474624 took 1.4820880000042962 msecs. Success: true\nHeap resize call from 200474624 to 240582656 took 1.6095040000072913 msecs. Success: true\nHeap resize call from 240582656 to 288751616 took 1.3340389999939362 msecs. Success: true\nHeap resize call from 288751616 to 346554368 took 1.456514999998035 msecs. Success: true"
"durationMs": 79207,
"outputSha256": "f6964df18f14d37853678d29e0c745c7f6c24c21f19e2acba84bd32c35b85a30",
"output": "> blender-web-editor@0.1.0-rc.1 test:release-performance\n> node ../tools/web/check-release-performance.mjs\n\nrelease-performance-ok [{\"target\":100000,\"ratio\":0.9,\"inputTriangles\":100000,\"outputTriangles\":89999,\"elapsedMs\":78421,\"peakHeapBytes\":67108864,\"releasedPointerCount\":10,\"recoveryAllocation\":true},{\"target\":1000000,\"ratio\":1,\"inputTriangles\":1000000,\"outputTriangles\":1000000,\"elapsedMs\":530,\"peakHeapBytes\":346554368,\"releasedPointerCount\":10,\"recoveryAllocation\":true}]\n\nHeap resize call from 67108864 to 80543744 took 0.29015199998684693 msecs. Success: true\nHeap resize call from 80543744 to 96665600 took 0.3964049999922281 msecs. Success: true\nHeap resize call from 96665600 to 115998720 took 1.036682000005385 msecs. Success: true\nHeap resize call from 115998720 to 139198464 took 0.2289630000013858 msecs. Success: true\nHeap resize call from 139198464 to 167051264 took 1.073355000000447 msecs. Success: true\nHeap resize call from 167051264 to 200474624 took 0.19993700001214165 msecs. Success: true\nHeap resize call from 200474624 to 240582656 took 1.196728000009898 msecs. Success: true\nHeap resize call from 240582656 to 288751616 took 0.23349400000006426 msecs. Success: true\nHeap resize call from 288751616 to 346554368 took 0.03510999999707565 msecs. Success: true"
},
{
"token": "web:test:malicious-blends",
@@ -564,7 +564,7 @@
],
"command": "npm --prefix web run test:malicious-blends",
"exitCode": 0,
"durationMs": 507,
"durationMs": 283,
"outputSha256": "acd3b170723a0b560590b327a3eea3a119df2c246e46c6d849a5ccb3e8766d74",
"output": "> blender-web-editor@0.1.0-rc.1 test:malicious-blends\n> node ../tools/web/check-malicious-blends.mjs\n\nmalicious-blends-ok rejected=5"
}

View File

@@ -0,0 +1,38 @@
# WBV2-P1128-000: ffmpeg.wasm movie codec module
- task: `WBV2-P1128-000`
- parent: `WBV2-P1127-000`
- status: `done`
- gap: `workflow:sequencer_movie_codec`
- ownerFamily: `MEDIA`
- targetImplementationClass: `LOCAL_BOUNDED`
## 目标
使用本地 ffmpeg.wasm Worker 作为 Chromium HTML media 解码失败时的 MOVIE probe/proxy fallback;核心 JS/WASM 同源懒加载,输入和输出均 hash-bound。
## 输入与范围
- Dependencies: `web/package.json`, `web/package-lock.json`
- Protocol: `web/protocol/sequencer.ts`
- Runtime: `web/app/src/sequencer/SequencerCodecProbe.ts`, `web/app/src/sequencer/FFmpegMovieProbe.ts`, `web/app/src/sequencer/ffmpeg-movie-probe.worker.ts`, `web/app/src/sequencer/SequencerMediaProxyCache.ts`
- Local core: `web/app/src/vendor/ffmpeg/ffmpeg-core.js`, `web/app/src/vendor/ffmpeg/ffmpeg-core.wasm`, `web/app/public/vendor/ffmpeg/ffmpeg-core.js`, `web/app/public/vendor/ffmpeg/ffmpeg-core.wasm`
- Upstream source: `third_party/ffmpeg.wasm-source-f876f907c7e9b9bf51d4ed0b913a855a63ae63fc.tar.gz`
- Production test: `web/tests/e2e/ffmpeg-movie-probe-production.spec.ts`
## 验收
```bash
npm --prefix web run typecheck
npm --prefix web run build
WEB_TEST_PORT=5342 npm --prefix web run test:e2e -- --workers=1 tests/e2e/ffmpeg-movie-probe-production.spec.ts
```
必须记录原生 HTML media 失败后的 ffmpeg.wasm 正例、metadata/frame 输出、损坏/identity/runtime 负例、AbortSignal cancellation、Worker termination、cache manifest identity 和 Chromium。历史 M11 MOVIE golden 不重写;H.264/浏览器解码差异留在新 capability receipt。
## 交付与回滚
- Receipt: `tests/golden/WBV2-P1128-000/module-receipt.json`
- Manifest: `tests/golden/WBV2-P1128-000/manifest.json`
- Status: `docs/status/WBV2-P1128-000.md`
- 回滚:恢复 P1127 manifest 为 queue parent,保留 ffmpeg 源码下载和依赖变更供后续复用。

View File

@@ -3,7 +3,7 @@
"dataLicense": "CC0-1.0",
"SPDXID": "SPDXRef-DOCUMENT",
"name": "blender-web-editor-sbom",
"documentNamespace": "https://blender-web.local/spdx/dc8374f47ec1483e74b09821f6d444c9785c19ba02d6d79f617ae50d71caf246",
"documentNamespace": "https://blender-web.local/spdx/5a2256c6a1d20a2a771eeca379c81a0dbad314d941de452b7e301e7daaae36e9",
"creationInfo": {
"created": "1970-01-01T00:00:00Z",
"creators": [
@@ -267,6 +267,98 @@
}
]
},
{
"SPDXID": "SPDXRef-npm-node-modules--ffmpeg-core-de94d02bfd69",
"name": "@ffmpeg/core",
"versionInfo": "0.12.10",
"downloadLocation": "https://registry.npmjs.org/@ffmpeg/core/-/core-0.12.10.tgz",
"filesAnalyzed": false,
"licenseConcluded": "NOASSERTION",
"licenseDeclared": "NOASSERTION",
"copyrightText": "NOASSERTION",
"externalRefs": [
{
"referenceCategory": "PACKAGE-MANAGER",
"referenceType": "purl",
"referenceLocator": "pkg:npm/%40ffmpeg%2Fcore@0.12.10"
}
],
"checksums": [
{
"algorithm": "SHA512",
"checksumValue": "7733699679f637195ed9cda2dabac386a701d7dabd7209429169e83130cdf50f65dcfbdd8d959dd477d23e308d59cfe9f10dc24fe12cf5f58e47452101e61064"
}
]
},
{
"SPDXID": "SPDXRef-npm-node-modules--ffmpeg-ffmpeg-c3769f532981",
"name": "@ffmpeg/ffmpeg",
"versionInfo": "0.12.15",
"downloadLocation": "https://registry.npmjs.org/@ffmpeg/ffmpeg/-/ffmpeg-0.12.15.tgz",
"filesAnalyzed": false,
"licenseConcluded": "NOASSERTION",
"licenseDeclared": "NOASSERTION",
"copyrightText": "NOASSERTION",
"externalRefs": [
{
"referenceCategory": "PACKAGE-MANAGER",
"referenceType": "purl",
"referenceLocator": "pkg:npm/%40ffmpeg%2Fffmpeg@0.12.15"
}
],
"checksums": [
{
"algorithm": "SHA512",
"checksumValue": "d42f0e6ebe06b0ddf1c3eff55b0e8f14cf38c124001ac7684ee4d63ce8f63a2cec4432d3e025d36958cf864c3a011c83bacd41f57fcbd8b8971ea618b069d117"
}
]
},
{
"SPDXID": "SPDXRef-npm-node-modules--ffmpeg-types-fe585de37885",
"name": "@ffmpeg/types",
"versionInfo": "0.12.4",
"downloadLocation": "https://registry.npmjs.org/@ffmpeg/types/-/types-0.12.4.tgz",
"filesAnalyzed": false,
"licenseConcluded": "NOASSERTION",
"licenseDeclared": "NOASSERTION",
"copyrightText": "NOASSERTION",
"externalRefs": [
{
"referenceCategory": "PACKAGE-MANAGER",
"referenceType": "purl",
"referenceLocator": "pkg:npm/%40ffmpeg%2Ftypes@0.12.4"
}
],
"checksums": [
{
"algorithm": "SHA512",
"checksumValue": "93dbc940d0464f1139021603b4e611e6b3b97cab2ca5b839d606dcc2d6e4c369427682082f3925ba572325f203c2bb67ed7843785d8cf931f0276146acb795e8"
}
]
},
{
"SPDXID": "SPDXRef-npm-node-modules--ffmpeg-util-734ab5c7710f",
"name": "@ffmpeg/util",
"versionInfo": "0.12.2",
"downloadLocation": "https://registry.npmjs.org/@ffmpeg/util/-/util-0.12.2.tgz",
"filesAnalyzed": false,
"licenseConcluded": "NOASSERTION",
"licenseDeclared": "NOASSERTION",
"copyrightText": "NOASSERTION",
"externalRefs": [
{
"referenceCategory": "PACKAGE-MANAGER",
"referenceType": "purl",
"referenceLocator": "pkg:npm/%40ffmpeg%2Futil@0.12.2"
}
],
"checksums": [
{
"algorithm": "SHA512",
"checksumValue": "a2eca85bee0907b5b18de676cba2a946f07e74ba7b0a9e2ba3ccf41c856965508cec0c059476b473847c63f6b8337c0ca804e960a842ee54851d0d13d753040f"
}
]
},
{
"SPDXID": "SPDXRef-npm-node-modules--humanfs-core-759f1c70d27f",
"name": "@humanfs/core",
@@ -3338,7 +3430,7 @@
"checksums": [
{
"algorithm": "SHA256",
"checksumValue": "61f6d13e0148321d3c625a5baa212b5444296d111193c4d62a692685faebff1f"
"checksumValue": "0f7efd3052b12d495a5dfd514e701b2ea48db1e0b8f1b651ae63ed94786f0cf4"
}
]
},
@@ -3476,6 +3568,26 @@
"relationshipType": "DEPENDS_ON",
"relatedSpdxElement": "SPDXRef-npm-node-modules--eslint-plugin-kit-c40cd95c3549"
},
{
"spdxElementId": "SPDXRef-Package-blender-web-editor",
"relationshipType": "DEPENDS_ON",
"relatedSpdxElement": "SPDXRef-npm-node-modules--ffmpeg-core-de94d02bfd69"
},
{
"spdxElementId": "SPDXRef-Package-blender-web-editor",
"relationshipType": "DEPENDS_ON",
"relatedSpdxElement": "SPDXRef-npm-node-modules--ffmpeg-ffmpeg-c3769f532981"
},
{
"spdxElementId": "SPDXRef-Package-blender-web-editor",
"relationshipType": "DEPENDS_ON",
"relatedSpdxElement": "SPDXRef-npm-node-modules--ffmpeg-types-fe585de37885"
},
{
"spdxElementId": "SPDXRef-Package-blender-web-editor",
"relationshipType": "DEPENDS_ON",
"relatedSpdxElement": "SPDXRef-npm-node-modules--ffmpeg-util-734ab5c7710f"
},
{
"spdxElementId": "SPDXRef-Package-blender-web-editor",
"relationshipType": "DEPENDS_ON",