Advance N-023 through N-026 audited parity

This commit is contained in:
mes123456
2026-08-12 15:23:35 -04:00
parent b3cefaeec5
commit 86136139e2
30 changed files with 5573 additions and 66 deletions

View File

@@ -1,7 +1,7 @@
# N-023 Asset、Library 与 IO
状态:`BLOCKED`asset catalog、来源/许可证元数据、库依赖与 IO 安全门已落地;真实
Append/Link/Override Main、非 GLB 本地导入和跨桌面重导入未实现)
状态:`BLOCKED`asset catalog、来源/许可证元数据、真实 Main library inventory、库依赖与
IO 安全门已落地;Append/Link/Override Main、非 GLB 本地导入和跨桌面重导入未实现)
## 已验证切片
@@ -13,10 +13,15 @@ Append/Link/Override Main、非 GLB 本地导入和跨桌面重导入未实现
3. N-023-C现有 GLB 导出与 USD semantic analysis 可放行GLTF/OBJ/PLY/STL、
USD/Alembic 实际导入保持 `IO_FORMAT_UNSUPPORTED`,库 mutation 需要真实 Main。
4. N-023-E项目路径、外部 URI、archive entry 数量/单项/总量、压缩展开比率均有边界。
5. N-023-B部分Blender 5.2 Main reader 输出 linked Library stable ID、项目相对路径、
packed/external 状态、只读标志和 archive-parent dependency1024 library/每库 1024 dependency、
重复 ID、缺依赖、依赖环与项目外路径由 SceneIR 再校验。缺外部库字节时返回
`LINKED_LIBRARY_RESOURCE_REQUIRED`,不从路径伪造 SHA-256 或声称已加载。
## 仍然阻断
- N-023-BAppend/Link/Library Override、reload/relocate 和真实 Main transaction
- N-023-BAppend/Link/Library Override、reload/relocate 和真实 Main transaction;只读 library
inventory 已完成。
- N-023-C/DGLTF/OBJ/PLY/STL、USD/Alembic import/export/save/reopen/desktop reimport。
- N-023-Ezip fuzz、OPFS quota/recovery、license/source offer 发布审计和大文件流式性能。
@@ -24,4 +29,5 @@ Append/Link/Override Main、非 GLB 本地导入和跨桌面重导入未实现
```bash
WEB_TEST_PORT=5323 npm --prefix web run test:e2e -- --grep "N-023 asset"
npm --prefix web run test:library-main-reader
```

View File

@@ -1,7 +1,7 @@
# N-024 Editors 与工作流
状态:`BLOCKED`(统一 context、只读 editor manifest、selection sync、keymap 和布局预算
已落地;完整 Blender editor writer、gizmo/触控和跨设备 golden 未实现)
状态:`BLOCKED`(统一 context、真实 Main 只读布局清单、selection sync、keymap 和布局预算
已落地;完整 Blender editor writer、运行时焦点、gizmo/触控和跨设备 golden 未实现)
## 已验证切片
@@ -12,16 +12,21 @@
3. N-024-C部分selection sync 以 revision 事务更新 active object 与 selected IDs
active object 必须属于 selection过期 revision 会拒绝。
4. N-024-Dkeymap 绑定和预算可验证writer、gizmo 与 touch drag 保持能力阻断。
5. N-024-BMain reader从 Blender `WorkSpace``WorkSpaceLayout``bScreen``ScrArea`
`ARegion` 读取有界 workspace/area/region 清单、编辑器类型、可见性与归一化布局;
不完整或包含未知 editor 的 workspace 被跳过,首个完整 workspace/area 只作为确定性只读 context
不声称恢复 Blender 运行时焦点。
## 仍然阻断
- N-024-B/CProperties、UV/Image、Node、Graph、Dope Sheet、NLA、Spreadsheet 等真实
Blender 数据读取/写回、selection history、operator search 和 context menu。
- N-024-B/CProperties、UV/Image、Node、Graph、Dope Sheet、NLA、Spreadsheet 等 editor
专属数据读取/写回、真实运行时焦点、selection history、operator search 和 context menu。
- N-024-D/EBlender-compatible keymap 执行、gizmo/drag preview/commit、桌面/mobile/笔
触控布局、无重叠截图和 accessibility golden。
## 验收
```bash
npm --prefix web run test:editor-main-reader
WEB_TEST_PORT=5324 npm --prefix web run test:e2e -- --grep "N-024 editor"
```

View File

@@ -1,7 +1,7 @@
# N-025 Scripting 与平台
状态:`BLOCKED`(默认拒绝策略、签名 manifest、权限/资源预算、平台报告和服务端 hash
门已落地;本地隔离执行、真实 server job 与发布审计未实现)
状态:`BLOCKED`(默认拒绝策略、真实 Main Text 来源清单、签名 manifest、权限/资源预算、
平台报告和服务端 hash 门已落地;本地隔离执行、真实 server job 与发布审计未实现)
## 已验证切片
@@ -13,6 +13,9 @@
hash 一致,但当前 endpoint 未配置,返回 `SERVER_JOB_UNAVAILABLE`
4. N-025-DWorker/WebGPU/OffscreenCanvas/OPFS 与 native/CUDA/Metal/HIP/OptiX capability
报告只反映 API 存在或显式 `BLOCKED`
5. N-025-AMain reader从 Blender `Text`/`TextLine` 重建最多 1 MiB、65,536 行的完整
UTF-8 内嵌来源,记录项目相对外部路径、`use_module` autorun 请求和 SHA-256所有来源均为
只读且 `executionStatus=BLOCKED`autorun 请求按默认拒绝处理,不引入 Python 执行入口。
## 仍然阻断
@@ -24,5 +27,6 @@
## 验收
```bash
npm --prefix web run test:script-main-reader
WEB_TEST_PORT=5325 npm --prefix web run test:e2e -- --grep "N-025 script"
```

View File

@@ -1,18 +1,20 @@
# N-026 全域发布门
状态:`BLOCKED`machine-readable parity manifest、依赖/状态检查、证据聚合和确定性
序列化已落地;Chromium 完整套件、离线包OPFS、性能/故障、SBOM 与发布审计证据未齐)
状态:`BLOCKED`machine-readable parity manifest、依赖/状态检查、命令/hash 证据绑定、
Chromium 完整套件、离线包/OPFS、SPDX SBOM 和部分性能/故障证据已落地10M/大纹理/
长媒体、simulation cache 性能、OOM/device loss/network interruption 与上游能力仍未齐)
## 已验证切片
1. N-026-A版本化 `ReleaseManifestIR` 为每个 family 记录 `LOCAL_EXACT`
1. N-026-A版本化 schema 3 `ReleaseManifestIR` 为每个 family 记录 `LOCAL_EXACT`
`LOCAL_BOUNDED``SERVER``BLOCKED`、roadmap 状态、完成/阻断切片、验收命令和
依赖;缺失 family、非法非阻断状态或依赖环会拒绝。
2. N-026-B/CChromium 主线程/OffscreenCanvas、offline/Worker restart/OPFS recovery、
1M/10M geometry、4K/8K texture、长媒体、simulation cache、OOM/device loss/网络
中断/损坏 blend/zip bomb 等证据字段必须逐项为 true 才能放行。
3. N-026-D/Elicense、SBOM、source offer、deterministic package 为发布必需证据;
manifest family 排序可确定性序列化,当前缺证据聚合为 `BLOCKED`,没有虚报发布通过。
3. N-026-D/Elicense、SBOM、source offer、deterministic package 为发布必需证据;每个 true
字段必须绑定实际成功命令、耗时、输出与构件 SHA-256manifest family 排序可确定性序列化,
当前缺证据聚合为 `BLOCKED`,没有虚报发布通过。
4. 当前 Chromium smoke 已通过引擎启动/Main 编辑与内容寻址资产恢复,并通过真实 64 KiB
OPFS quota 下的失败保持旧 revision、Worker 重启恢复门。这只计为 partial evidence不等于
完整 suite 或其余 family 的桌面 golden。发布门 schema 2 仅接受 Chromium 浏览器证据。
@@ -20,18 +22,23 @@
PointCloud/Curves/Hair 共 7 对象已通过 GLB/USDA desktop round-trip。Volume/VDB 仍无 renderer
与 loss fixture这些证据也不替代其余 family 的 desktop golden。
6. 当前发布包已通过本地 third-party notices、Blender/Three license 文件、无远程运行时依赖、
非空 SHA-256 manifest、离线二进制/源码包确定性复建和 100k/1M decimate + 5 类损坏 blend
拒绝门;这些是 partial evidence不等于完整 SBOM/source offer、10M/长媒体或 OPFS quota
非空 SHA-256 manifest、SPDX 2.3 lockfile/vendored SBOM、对应源码提供和离线二进制/源码包
确定性复建100k/1M decimate、5 类损坏 blend 和 archive 高压缩比拒绝有实际命令记录
7. `docs/status/release-evidence.json` 记录 Chromium 完整 E2E + release suite 以及上述发布命令;
`docs/web/sbom.spdx.json` 确定性覆盖 npm lockfile 与 notices 中显式 vendored/native 组件。
## 仍然阻断
- Chromium 完整套件、跨 family 桌面 golden、离线/OPFS quota、1M/10M/长媒体基准和 fault fuzz
尚未有真实证据;本项目当前配置 Firefox/WebKit,上游 N-015 至 N-025 的阻断能力会传递到发布门。
- 完整 release package 审计、许可证/source offer/SBOM、10M/长媒体性能和 OPFS quota 发布流程仍未完成;
当前离线包确定性检查只覆盖已有二进制/源码归档门。
- 跨 family 桌面 golden、10M、4K/8K texture、长媒体、simulation cache 性能和 OOM/device loss/
network interruption fault 仍无真实证据;本项目当前配置 Chromium,上游 N-015 至 N-025
的阻断能力会传递到发布门。
- 完整 native dependency/license 审计仍需发行审核;当前 SBOM 覆盖 lockfile 和显式 notices
不声称替代 Blender 全部传递依赖的发布级法律审计。
## 验收
```bash
WEB_TEST_PORT=5326 npm --prefix web run test:e2e -- --grep "N-026 release"
npm --prefix web run test:release-evidence
npm --prefix web run release:evidence
```

View File

@@ -89,9 +89,9 @@
"name": "Assets, libraries and IO",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": ["A-catalog-asset-license-source-schema", "A-content-addressed-opfs-capability", "B-library-dependency-order-partial", "C-glb-export-usd-analysis-gates", "E-archive-path-ratio-budget"],
"completedSlices": ["A-catalog-asset-license-source-schema", "A-content-addressed-opfs-capability", "B-library-dependency-order-partial", "B-main-library-inventory-reader", "C-glb-export-usd-analysis-gates", "E-archive-path-ratio-budget"],
"blockedSlices": ["A", "B", "C", "D", "E"],
"acceptance": ["web:e2e:N-023 asset"],
"acceptance": ["web:test:library-main-reader", "web:e2e:N-023 asset"],
"dependencies": ["N-022"]
},
{
@@ -99,9 +99,9 @@
"name": "Editors and workflow",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": ["A-unified-area-region-context", "B-read-only-editor-manifest-partial", "C-selection-sync-revision-partial", "D-keymap-layout-budget-gates"],
"completedSlices": ["A-unified-area-region-context", "B-read-only-editor-manifest-partial", "B-main-workspace-area-region-reader", "C-selection-sync-revision-partial", "D-keymap-layout-budget-gates"],
"blockedSlices": ["A", "B", "C", "D", "E"],
"acceptance": ["web:e2e:N-024 editor"],
"acceptance": ["web:test:editor-main-reader", "web:e2e:N-024 editor"],
"dependencies": ["N-023"]
},
{
@@ -109,9 +109,9 @@
"name": "Scripting and platform",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": ["A-default-deny-script-policy", "B-signed-manifest-permission-budget", "C-server-source-hash-job-gate", "D-platform-capability-report"],
"completedSlices": ["A-default-deny-script-policy", "A-main-text-source-inventory-reader", "B-signed-manifest-permission-budget", "C-server-source-hash-job-gate", "D-platform-capability-report"],
"blockedSlices": ["A", "B", "C", "D", "E"],
"acceptance": ["web:e2e:N-025 script"],
"acceptance": ["web:test:script-main-reader", "web:e2e:N-025 script"],
"dependencies": ["N-024"]
},
{
@@ -119,9 +119,9 @@
"name": "Release gate",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": ["A-machine-readable-parity-manifest", "A-dependency-status-validation", "B-chromium-runtime-evidence-gate", "B-chromium-smoke-partial", "C-performance-fault-provenance-gate", "C-performance-1M-malicious-input-partial", "C-release-package-notices-partial", "D-deterministic-manifest-serialization", "D-offline-reproducible-source-archive-partial"],
"completedSlices": ["A-machine-readable-parity-manifest", "A-dependency-status-validation", "A-command-hash-evidence-binding", "B-chromium-runtime-evidence-gate", "B-chromium-full-suite-evidence", "C-performance-fault-provenance-gate", "C-performance-1M-malicious-input-partial", "C-zip-bomb-ratio-rejection", "C-release-package-notices-partial", "C-spdx-2.3-lockfile-sbom", "D-deterministic-manifest-serialization", "D-offline-reproducible-source-archive-partial"],
"blockedSlices": ["A", "B", "C", "D", "E"],
"acceptance": ["web:e2e:N-026 release", "web:test:browser-smoke", "web:test:release-package", "web:release:offline", "web:test:release-performance", "web:test:malicious-blends"],
"acceptance": ["web:e2e:N-026 release", "web:test:release-evidence", "web:test:browser", "web:test:release-package", "web:release:offline", "web:test:release-performance", "web:test:malicious-blends"],
"dependencies": ["N-015", "N-016", "N-017", "N-018", "N-019", "N-020", "N-021", "N-022", "N-023", "N-024", "N-025"]
}
]

View File

@@ -0,0 +1,524 @@
{
"schemaVersion": 3,
"source": "docs/status/parity-ledger.json",
"sourceSha256": "fbaba7086a985176b2100f066326d48b203776ea0706783fa0fd0e61712d0795",
"generatedAt": "2026-08-12T19:18:35.501Z",
"families": [
{
"id": "N-015",
"name": "Non-mesh geometry",
"status": "LOCAL_BOUNDED",
"roadmapStatus": "in_progress",
"completedSlices": [
"A1",
"A2-malformed-binary-partial",
"A2-integer-overflow-fixtures",
"A2-multichunk-attribute-completeness",
"B2",
"B3-metadata",
"C1-topology-partial",
"C1-handle-points-partial",
"C1-handle-preview-raycast-partial",
"C1-handle-identity-gizmo-main-roundtrip",
"C1-multi-handle-selection-highlight-bounded-commit",
"C1-rename-partial",
"C1-create-delete-poly-partial",
"C1-poly-bezier-nurbs-1d-conversion",
"C1-multispline-create-delete-bulk-handle-cyclic-transaction",
"C1-surface-2d-topology-transaction",
"C2-font-geometry-partial",
"C2-font-layout-partial",
"C2-font-character-style-textbox-roundtrip",
"C2-existing-packed-vfont-style-links",
"C2-builtin-font-evaluation-exact",
"C3-roundtrip",
"D1-raycast-partial",
"D1-offscreen-vert-edge-partial",
"D1-selection-history-partial",
"D1-cross-object-history-range-patch",
"D1-handle-identity-axis-gizmo",
"D2-partial",
"E1-partial",
"E1-desktop-geometry-golden",
"E1-true-2d-surface-desktop-golden",
"E1-glb-evaluated-nonmesh-roundtrip-partial",
"E1-glb-curve-line-surface-mesh-evaluated",
"E1-usda-four-object-desktop-roundtrip",
"E1-pointcloud-curves-hair-glb-usd-loss-fixture",
"E2-1M-chromium",
"E2-chromium-worker-recovery",
"E2-opfs-quota-chromium"
],
"blockedSlices": [
"B3-vdb-renderer",
"C1-continuous-handle-gizmo-preview",
"C2-new-external-font-import",
"E1-volume-loss-fixture"
],
"acceptance": [
"web:test:nonmesh-roundtrip",
"web:test:nonmesh-desktop-golden",
"web:test:nonmesh-glb-blender-roundtrip",
"web:test:nonmesh-usd-serialization",
"web:test:nonmesh-usd-blender-roundtrip",
"web:test:nonmesh-binary",
"web:test:vdb",
"web:test:selection-history",
"web:e2e:N-015|non-mesh",
"web:e2e:real OPFS quota"
],
"dependencies": []
},
{
"id": "N-016",
"name": "Grease Pencil",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": [
"A-schema-budget",
"A-main-reader",
"B-layer-frame-stroke-transaction-partial",
"C-point-radius-opacity-color-cyclic-material-partial",
"C-bounded-previous-next-onion-preview",
"D-current-frame-stroke-preview-main-offscreen-chromium"
],
"blockedSlices": [
"A",
"B",
"C",
"D",
"E"
],
"acceptance": [
"web:test:grease-pencil",
"web:e2e:N-016 Grease Pencil"
],
"dependencies": [
"N-015"
]
},
{
"id": "N-017",
"name": "Paint and weights",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": [
"A-stroke-hit-weight-schema-budget-partial",
"A-three-raycast-source-face-barycentric-uv",
"B-main-vertex-color-partial",
"B-main-vertex-weight-normalize-partial"
],
"blockedSlices": [
"A",
"B",
"C",
"D",
"E"
],
"acceptance": [
"web:test:paint-roundtrip",
"web:e2e:N-017 paint"
],
"dependencies": [
"N-016"
]
},
{
"id": "N-018",
"name": "Physics and simulation",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": [
"A-family-capability-inventory",
"B-settings-dependency-cache-manifest-partial",
"C-exact-frame-selection-gate",
"C-content-addressed-frame-range-read-hash-gate"
],
"blockedSlices": [
"A",
"B",
"C",
"D",
"E"
],
"acceptance": [
"web:e2e:N-018 physics",
"web:test:simulation-cache"
],
"dependencies": [
"N-017"
]
},
{
"id": "N-019",
"name": "Lighting and render",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": [
"A-camera-light-world-scene-reader-partial",
"A-main-camera-dof-properties-partial",
"A-main-light-world-properties-partial",
"B-three-exposure-shadow-mapping-partial",
"A-white-balance-integrity-gate"
],
"blockedSlices": [
"A",
"B",
"C",
"D",
"E"
],
"acceptance": [
"web:test:lighting-roundtrip",
"web:e2e:N-019 Scene exposure"
],
"dependencies": [
"N-018"
]
},
{
"id": "N-020",
"name": "Compositor",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": [
"A-graph-resource-cycle-schema",
"A-main-graph-structure-reader-partial",
"B-bounded-cpu-executor-partial",
"C-image-operation-budget-cancel-partial",
"D-unsupported-node-preservation-gate"
],
"blockedSlices": [
"A",
"B",
"C",
"D",
"E"
],
"acceptance": [
"web:test:compositor-main-reader",
"web:e2e:N-020 CPU compositor"
],
"dependencies": [
"N-019"
]
},
{
"id": "N-021",
"name": "Sequencer and audio",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": [
"A-strip-resource-schema",
"A-main-strip-timeline-reader-partial",
"B-deterministic-move-trim-split-partial",
"B-source-frame-seek",
"C-runtime-codec-probe-gate"
],
"blockedSlices": [
"A",
"B",
"C",
"D",
"E"
],
"acceptance": [
"web:test:sequencer-main-reader",
"web:e2e:N-021 sequencer"
],
"dependencies": [
"N-020"
]
},
{
"id": "N-022",
"name": "Tracking and masks",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": [
"A-clip-track-plane-mask-schema",
"A-main-mask-layer-spline-point-reader",
"B-revision-marker-mask-edit-partial",
"B-source-hash-binding-validation",
"C-browser-probe-solve-gate"
],
"blockedSlices": [
"A",
"B",
"C",
"D",
"E"
],
"acceptance": [
"web:test:mask-main-reader",
"web:e2e:N-022 tracking"
],
"dependencies": [
"N-021"
]
},
{
"id": "N-023",
"name": "Assets, libraries and IO",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": [
"A-catalog-asset-license-source-schema",
"A-content-addressed-opfs-capability",
"B-library-dependency-order-partial",
"B-main-library-inventory-reader",
"C-glb-export-usd-analysis-gates",
"E-archive-path-ratio-budget"
],
"blockedSlices": [
"A",
"B",
"C",
"D",
"E"
],
"acceptance": [
"web:test:library-main-reader",
"web:e2e:N-023 asset"
],
"dependencies": [
"N-022"
]
},
{
"id": "N-024",
"name": "Editors and workflow",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": [
"A-unified-area-region-context",
"B-read-only-editor-manifest-partial",
"B-main-workspace-area-region-reader",
"C-selection-sync-revision-partial",
"D-keymap-layout-budget-gates"
],
"blockedSlices": [
"A",
"B",
"C",
"D",
"E"
],
"acceptance": [
"web:test:editor-main-reader",
"web:e2e:N-024 editor"
],
"dependencies": [
"N-023"
]
},
{
"id": "N-025",
"name": "Scripting and platform",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": [
"A-default-deny-script-policy",
"A-main-text-source-inventory-reader",
"B-signed-manifest-permission-budget",
"C-server-source-hash-job-gate",
"D-platform-capability-report"
],
"blockedSlices": [
"A",
"B",
"C",
"D",
"E"
],
"acceptance": [
"web:test:script-main-reader",
"web:e2e:N-025 script"
],
"dependencies": [
"N-024"
]
},
{
"id": "N-026",
"name": "Release gate",
"status": "BLOCKED",
"roadmapStatus": "planned",
"completedSlices": [
"A-machine-readable-parity-manifest",
"A-dependency-status-validation",
"A-command-hash-evidence-binding",
"B-chromium-runtime-evidence-gate",
"B-chromium-full-suite-evidence",
"C-performance-fault-provenance-gate",
"C-performance-1M-malicious-input-partial",
"C-zip-bomb-ratio-rejection",
"C-release-package-notices-partial",
"C-spdx-2.3-lockfile-sbom",
"D-deterministic-manifest-serialization",
"D-offline-reproducible-source-archive-partial"
],
"blockedSlices": [
"A",
"B",
"C",
"D",
"E"
],
"acceptance": [
"web:e2e:N-026 release",
"web:test:release-evidence",
"web:test:browser",
"web:test:release-package",
"web:release:offline",
"web:test:release-performance",
"web:test:malicious-blends"
],
"dependencies": [
"N-015",
"N-016",
"N-017",
"N-018",
"N-019",
"N-020",
"N-021",
"N-022",
"N-023",
"N-024",
"N-025"
]
}
],
"evidence": {
"browser": {
"chromium": true
},
"runtime": {
"offline": true,
"workerRestart": true,
"opfsRecovery": true
},
"performance": {
"geometry1M": true,
"geometry10M": false,
"texture4K": false,
"texture8K": false,
"longMedia": false,
"simulationCache": false
},
"faults": {
"oom": false,
"deviceLoss": false,
"networkInterrupt": false,
"malformedBlend": true,
"zipBomb": true
},
"provenance": {
"license": true,
"sbom": true,
"sourceOffer": true,
"deterministicPackage": true
},
"records": [
{
"id": "sbom",
"fields": [
"provenance.license",
"provenance.sbom"
],
"command": "npm --prefix web run release:sbom",
"exitCode": 0,
"durationMs": 364,
"output": "> blender-web-editor@0.1.0 release:sbom\n> node ../tools/web/generate-sbom.mjs\n\nsbom-ok packages=150 sha256=8b04215a993f62ba64e0adcb1ba36ac830191f8215bf8cf2681fdf7bbb63da30",
"artifactSha256": [
"8b04215a993f62ba64e0adcb1ba36ac830191f8215bf8cf2681fdf7bbb63da30",
"d5ec6e6ec9e1e0a50fe4455513a2938838609d3809224eaf26a2ebfac474f0ae",
"3c65ff96cc15c9072d2517555484ccfd0009a2814d96faadcc5bd7b2e3458503"
]
},
{
"id": "chromium",
"fields": [
"browser.chromium",
"runtime.offline",
"runtime.workerRestart",
"runtime.opfsRecovery"
],
"command": "npm --prefix web run test:e2e -- --workers=1 && npm --prefix web run test:browser",
"exitCode": 0,
"durationMs": 135891,
"output": "d LOD profiles at the protocol boundary (1.0s)\n ✓ 67 tests/e2e/smoke.spec.ts:1765:1 normalizes skin influences and rejects shape-key loss explicitly (1.0s)\n ✓ 68 tests/e2e/smoke.spec.ts:1790:1 remaps skin weights and shape keys through the native Collapse worker path (1.3s)\n ✓ 69 tests/e2e/smoke.spec.ts:1846:1 reports GLB export blockers before any binary export (1.1s)\n ✓ 70 tests/e2e/smoke.spec.ts:1858:1 blocks Shader graphs that cannot be mapped to glTF PBR (1.0s)\n ✓ 71 tests/e2e/smoke.spec.ts:1885:1 maps bounded RGB and Value Shader constants to glTF PBR factors (1.0s)\n ✓ 72 tests/e2e/smoke.spec.ts:1918:1 exports a local SceneIR mesh as a standards-shaped GLB (1.0s)\n ✓ 73 tests/e2e/smoke.spec.ts:1951:1 keeps per-vertex UV and color attributes in GLB output (995ms)\n ✓ 74 tests/e2e/smoke.spec.ts:1978:1 evaluates modifier dependency order and blocks unevaluated or cyclic stacks (1.0s)\n ✓ 75 tests/e2e/smoke.spec.ts:1993:1 embeds local textures and exports glTF skin and animation records (1.0s)\n ✓ 76 tests/e2e/smoke.spec.ts:2043:1 reports lightweight budget violations without altering usage (1.0s)\n ✓ 77 tests/e2e/smoke.spec.ts:2061:1 aggregates project, collection, object and LOD budgets without double counting LOD (991ms)\n ✓ 78 tests/e2e/smoke.spec.ts:2087:1 round-trips LOD geometry through the local binary mesh cache container (1.0s)\n ✓ 79 tests/e2e/smoke.spec.ts:2111:1 blocks ImageIR paths outside the project asset sandbox (1.3s)\n ✓ 80 tests/e2e/smoke.spec.ts:2154:1 extracts Blender packed image bytes through the local asset request API (1.4s)\n ✓ 81 tests/e2e/smoke.spec.ts:2199:1 matches Blender Depsgraph deformation golden within the declared error budget (1.3s)\n ✓ 82 tests/e2e/smoke.spec.ts:2238:1 evaluates the full Blender Depsgraph or reports its safe capability gate (1.3s)\n ✓ 83 tests/e2e/smoke.spec.ts:2298:1 exports layered Action keyframes through SceneIR (1.3s)\n ✓ 84 tests/e2e/smoke.spec.ts:2339:1 patches changed mesh buffer ranges without replacing stable topology (1.0s)\n ✓ 85 tests/e2e/smoke.spec.ts:2363:1 renders through the capability-gated OffscreenCanvas worker (1.2s)\n ✓ 86 tests/e2e/smoke.spec.ts:2376:1 coalesces linked mesh objects into a raycastable instance group (2.0s)\n ✓ 87 tests/e2e/smoke.spec.ts:2384:1 returns structured gates for the undeclared capability protocols (1.1s)\n ✓ 88 tests/e2e/smoke.spec.ts:2443:1 exposes PBR-007 to PBR-012 renderer security gates (1.0s)\n ✓ 89 tests/e2e/smoke.spec.ts:2477:1 transfers packed raster assets into the PBR viewport with an explicit status (2.0s)\n ✓ 90 tests/e2e/smoke.spec.ts:2486:1 uses the same packed texture payload in the OffscreenCanvas renderer (1.8s)\n\n 90 passed (2.1m)\n\n> blender-web-editor@0.1.0 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.8s)\n ✓ 2 [chromium] tests/e2e/cross-browser.spec.ts:32:1 keeps content-addressed asset recovery available in Chromium (1.2s)\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 (6.8s)\n\n[WebServer] (node:1250790) 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:1250802) 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:1255027) 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:1255039) 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)",
"artifactSha256": [
"7176272d381a53d559d9b6ebe7ca8653ed32199ef6ddd4e2779637954f2c9ac3"
]
},
{
"id": "geometry-1m",
"fields": [
"performance.geometry1M"
],
"command": "npm --prefix web run test:release-performance",
"exitCode": 0,
"durationMs": 90534,
"output": "> blender-web-editor@0.1.0 test:release-performance\n> node ../tools/web/check-release-performance.mjs\n\nrelease-performance-ok [{\"target\":100000,\"ratio\":0.9,\"outputTriangles\":89999,\"elapsedMs\":89462,\"heapBytes\":67108864},{\"target\":1000000,\"ratio\":1,\"outputTriangles\":1000000,\"elapsedMs\":531,\"heapBytes\":346554368}]\n\nHeap resize call from 67108864 to 80543744 took 0.22819400001026224 msecs. Success: true\nHeap resize call from 80543744 to 96665600 took 0.10745999999926426 msecs. Success: true\nHeap resize call from 96665600 to 115998720 took 0.06875900000159163 msecs. Success: true\nHeap resize call from 115998720 to 139198464 took 1.2809850000048755 msecs. Success: true\nHeap resize call from 139198464 to 167051264 took 1.4198880000039935 msecs. Success: true\nHeap resize call from 167051264 to 200474624 took 1.4606950000015786 msecs. Success: true\nHeap resize call from 200474624 to 240582656 took 1.2892889999930048 msecs. Success: true\nHeap resize call from 240582656 to 288751616 took 1.3983549999975367 msecs. Success: true\nHeap resize call from 288751616 to 346554368 took 1.341115000002901 msecs. Success: true",
"artifactSha256": [
"7176272d381a53d559d9b6ebe7ca8653ed32199ef6ddd4e2779637954f2c9ac3"
]
},
{
"id": "malformed-blend",
"fields": [
"faults.malformedBlend"
],
"command": "npm --prefix web run test:malicious-blends",
"exitCode": 0,
"durationMs": 533,
"output": "> blender-web-editor@0.1.0 test:malicious-blends\n> node ../tools/web/check-malicious-blends.mjs\n\nmalicious-blends-ok rejected=5",
"artifactSha256": [
"6fcc55bda74da8c95da96ba068b60339bf60ca44147ff8000fbb95d296db2a73"
]
},
{
"id": "zip-bomb",
"fields": [
"faults.zipBomb"
],
"command": "WEB_TEST_PORT=5323 npm --prefix web run test:asset-library",
"exitCode": 0,
"durationMs": 4077,
"output": "> blender-web-editor@0.1.0 test:asset-library\n> playwright test --config playwright.config.ts -g \"N-023 asset\"\n\n\nRunning 1 test using 1 worker\n\n ✓ 1 tests/e2e/smoke.spec.ts:625:1 validates N-023 asset catalogs, library graphs, archive budgets and IO gates (1.5s)\n\n 1 passed (3.2s)\n\n[WebServer] (node:1255677) 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:1255689) 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)",
"artifactSha256": [
"6169748c5bf78a8e101196e964db67b8a65c2ba95bb3b4a54e052721be01a7bf"
]
},
{
"id": "release-package",
"fields": [],
"command": "npm --prefix web run test:release-package",
"exitCode": 0,
"durationMs": 4783,
"output": "> blender-web-editor@0.1.0 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 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...✓ 43 modules transformed.\nrendering chunks...\ncomputing gzip size...\ndist/index.html 0.45 kB │ gzip: 0.29 kB\ndist/assets/storage.worker-CnSyBTao.js 35.90 kB\ndist/assets/web-engine.worker-DR5p4R2R.js 238.07 kB\ndist/assets/viewport-render.worker-B2Y56q7a.js 555.34 kB\ndist/assets/web_engine-CFVvLQ_x.wasm 15,003.09 kB │ gzip: 3,546.97 kB\ndist/assets/index-C4cauSFG.css 11.20 kB │ gzip: 3.14 kB\ndist/assets/index-CPm-S3KG.js 879.04 kB │ gzip: 236.82 kB\n\n✓ built in 549ms\n\n> blender-web-editor@0.1.0 release:sbom\n> node ../tools/web/generate-sbom.mjs\n\nsbom-ok packages=150 sha256=8b04215a993f62ba64e0adcb1ba36ac830191f8215bf8cf2681fdf7bbb63da30\nrelease-package-ok files=10 bytes=31858159\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.",
"artifactSha256": [
"8b04215a993f62ba64e0adcb1ba36ac830191f8215bf8cf2681fdf7bbb63da30",
"7176272d381a53d559d9b6ebe7ca8653ed32199ef6ddd4e2779637954f2c9ac3"
]
},
{
"id": "offline-reproducibility",
"fields": [
"provenance.sourceOffer",
"provenance.deterministicPackage"
],
"command": "npm --prefix web run release:offline",
"exitCode": 0,
"durationMs": 36219,
"output": "> blender-web-editor@0.1.0 release:offline\n> npm run build && node ../tools/web/check-offline-reproducibility.mjs\n\n\n> blender-web-editor@0.1.0 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...✓ 43 modules transformed.\nrendering chunks...\ncomputing gzip size...\ndist/index.html 0.45 kB │ gzip: 0.29 kB\ndist/assets/storage.worker-CnSyBTao.js 35.90 kB\ndist/assets/web-engine.worker-DR5p4R2R.js 238.07 kB\ndist/assets/viewport-render.worker-B2Y56q7a.js 555.34 kB\ndist/assets/web_engine-CFVvLQ_x.wasm 15,003.09 kB │ gzip: 3,546.97 kB\ndist/assets/index-C4cauSFG.css 11.20 kB │ gzip: 3.14 kB\ndist/assets/index-CPm-S3KG.js 879.04 kB │ gzip: 236.82 kB\n\n✓ built in 548ms\nsbom-ok packages=150 sha256=8b04215a993f62ba64e0adcb1ba36ac830191f8215bf8cf2681fdf7bbb63da30\noffline-release-ok binary=7521936 source=205665275 sha256=7f8bb6316d83f4a61c9357b5ab04ae996f83a4f2ff66312eb5263aef745c19e7\nsbom-ok packages=150 sha256=8b04215a993f62ba64e0adcb1ba36ac830191f8215bf8cf2681fdf7bbb63da30\noffline-release-ok binary=7521936 source=205665275 sha256=7f8bb6316d83f4a61c9357b5ab04ae996f83a4f2ff66312eb5263aef745c19e7\noffline-reproducibility-ok binary=7f8bb6316d83f4a61c9357b5ab04ae996f83a4f2ff66312eb5263aef745c19e7 source=ca6d3fc1df2d7885a3602beddd427a8a2ac05440a11d250f323cfe33e4fddcff\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.",
"artifactSha256": [
"7f8bb6316d83f4a61c9357b5ab04ae996f83a4f2ff66312eb5263aef745c19e7",
"ca6d3fc1df2d7885a3602beddd427a8a2ac05440a11d250f323cfe33e4fddcff",
"c8f6b3287a67760855c145ef239fa8cc696cfb7a7d558d3284982df897caf4ed"
]
}
]
}
}