Files
workinf_Blender_Wasm/后续工作.txt
mes123456 0fe8d2bb56
Some checks are pending
M6 deployable RC / quick (push) Waiting to run
M6 deployable RC / chromium (push) Blocked by required conditions
M6 deployable RC / release (push) Blocked by required conditions
Advance M8-M11 parity workflows
2026-08-17 04:37:07 -04:00

2332 lines
188 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Web Blender M6/M7/M8/M9/M10/M11 接续执行记录
更新时间2026-08-17America/New_York
执行规则
1. 本文件是当前接续入口;每轮先读本文件,再直接领取机器队列返回的最新 `nextTask`。
2. 严格按当前里程碑原子任务顺序推进,前一项未通过时不把后一项标为完成。
3. 每完成一段写回实际命令、结果、hash 和当前计数;后续任务名只从机器队列的最新
`nextTask` 获取,不在本文手工维护或推导。
4. 不覆盖用户已有改动,不提交或改写 git 历史。
当前状态
- M6 正式完成71/71剩余0。
- M7 正式完成18/18剩余0。
- M8 当前完成20/20剩余0。
- M9 当前完成14/14剩余0。
- M10 正式完成15/15剩余0。
- M11 当前完成13/14剩余1。
- 已完成到M11-13。
- 下一领取点:机器队列的最新 `nextTask`(本文不缓存任务名称)。
- quick laneREADY7/7 命令通过,总命令耗时 11,455 ms报告
release/ci-reports/quick.json。
- Chromium laneREADY9/9 命令通过;每个 browser server 使用独立动态端口,报告
release/ci-reports/chromium.json总命令耗时 41,003 ms。
- release laneREADY25/25 命令通过,总命令耗时 1,334,766 ms报告
release/ci-reports/release.json。
当前执行中2026-08-16 America/New_York
- M10-07 已完成:新增有界 `WEBGL2_THREE_PHYSICAL` material compile reportWorker 在
`setShaderGraph` Main transaction 前编译并失败关闭,主线程/Offscreen 共用同一
`createPBRMaterial` 结果。`docs/status/M10-07.md`、`tests/golden/M10-07/` 和
`npm --prefix web run test:shader-compile` 证据已补齐。
- M10-08 已完成:`ShaderCompileReport.compileKey` 对 graph hash、排序后的纹理 image/usage/
asset/SHA-256、解析色彩空间和 renderer backend 做 SHA-256 绑定Engine Worker 和 PBR
adapter 传递同一纹理身份。M10-09 已完成:`PBRMaterialPipeline` 在失败编译时保留旧材质,
成功编译才原子替换并释放旧材质。
- M10-10 已完成:`ARBITRARY_SHADER` capability query 接受任意字符串节点类型,未知类型去重并
排序后返回稳定 `PBR-012/ARBITRARY_SHADER`、`SHADER_NODE_UNSUPPORTED`、recoverable block
ShaderGraph/Worker 仍在 Main transaction 前保留原图并阻断。
- M10-11 已完成:桌面 Blender 5.2 fixture 的 1 个 Track、2 个 Action Clip 以 scale=2、
reverse 和 repeat=2 覆盖 12 个边界/周期帧Node WASM 与生产 Chromium Worker 的
world matrix 最大误差均为 0逐帧求值前后 NLA/Action identity 不变。本任务未调用
`setNLAStack`NLA operator、Physics solver 和 cache fault 门不提前计入完成。
- M10-12 已完成有限单个 NLA operator`moveNLAStrip` 要求 `baseRevision`Worker 纯函数
保持 source stack 不变并保留 strip durationnative 以一次 Main transaction 提交;
stale revision 返回 `REVISION_CONFLICT`,成功后 revision/delta 单调undo/redo 和 save/reopen
均恢复/保留移动结果。create/remove/resize/active 与多轨混合不在本项声明内。
- M10-13 已完成逐 family Physics solver probe 门:七类分别检查 export、初始化、线程和内存
任一失败均保持 `DESKTOP_SERVER_BAKE` 路由;当前生产 inventory 没有 solver adapter七类都不
声明本地 solver。desktop family decoder、浏览器 bake 和 server job 仍保持阻断。
- M10-14 已完成逐 family Physics cache 门schema/family/desktop-server source/Blender 5.2、
source/settings/input/cache SHA-256、frame range、总/逐帧 byte range/hash 全部版本化;消费前对
实际 source/payload/frame bytes 复算 hash。family decoder/playback 仍不误报 READY。
- M10-15 已完成四域隔离 Chromium Worker 门GN/Shader/NLA/Simulation 分别通过代表性性能、
超预算/OOM-prevention、恶意输入和同会话小输入恢复。NLA 新增显式 topology/text 预算,
Simulation cache 超限使用专用 budget code。M10 15/15 已收口并进入持续回归。
- M11-01 已完成 Camera/Light/World/Scene color-management 字段级 parity 表TypeScript AST
自动核对 60 个叶字段零漏项/重复24 COMPLETE、17 PARTIAL、19 BLOCKED表分别记录 reader、
writer、主线程 viewport 和 Offscreen viewport不把 metadata-only/近似映射计为完整 parity。
- M11-02 已完成支持字段闭环Camera/Light/World 通过 Blender Main edit、逐域 undo/redo、保存、
新 Worker 重开与共享 PBR 映射;水平/垂直 sensor fit、色温线性 RGB、shadow、spot/area 和
World 背景均有 Chromium 字段断言。
- M11-03 已完成显式渲染资源预算:主线程/Offscreen 共用 light/shadow/texture planner超限
只保留确定性前缀并公开稳定 code纹理 aggregate 预算在 decode 前原子阻断且保留旧资源。
WebGPU 档只冻结 product/device-limit 合同,不误报未安装 renderer。
- M11-04 已完成有界实时渲染 reference 指标Blender 5.2 Eevee 256×256 fixture 固定相机、
黑色 rough material、World、单样本 TAA 和零 ditherschema 1 固定 SRGB8/STRAIGHT RGBA
输出 MAE、RMS、P95 channel、max channel、坏像素比例、前景 IoU 和 alpha 覆盖率。主线程与
Offscreen 生产 viewport 使用同一 reference 和阈值,错误构图稳定返回
`RENDER_REFERENCE_MISMATCH`,不把“非空像素”当作通过。
- M11-05 已完成最终渲染 fail-closed 路由:只有 bounded Eevee WebGL2/通过双门的 WebGPU 可走
`WEB_LOCAL_BOUNDED`Cycles、complex Eevee、Workbench 和 CUDA/OptiX/HIP/Metal/oneAPI
固定走 `SERVER_JOB`。默认 endpoint 缺失返回 `SERVER_JOB_UNAVAILABLE`,不伪造本地等价。
- M11-06 已完成 server render job provenanceschema 1 请求绑定 source `.blend` bytes/hash/
revision、Blender 5.2 build hash、严格白名单 settings hash 和 request hash成功结果绑定同一
identity、output MIME/bytes/hash 和 result hash。loopback server 用真实 Blender 5.2 headless
执行 fixture still rendersource/build/settings/output 四类篡改均 fail-closed。
- M11-07 已完成有限 Compositor WebGPU allowlist golden真实 Blender 5.2 Main fixture 覆盖
Constant Color、Exposure、Invert、Composite生产 CPU 与 Chromium WebGPU compute 的
`LINEAR_SRGB` Float32 输出逐字节 hash 相同;资源输入、分支和其他节点继续阻断。
- M11-08 已完成 Unsupported Compositor 全图执行门CPU 与 cached 入口在求值/cache hit 前
阻断任意 Unsupported 节点,包括未连接节点;真实 Main graph、Blender type metadata 和
revision 保持不变。
- M11-09 已完成 Sequencer runtime codec probeIMAGE/SOUND/MOVIE receipt 绑定 family、MIME、
byte length 和 source hashChromium 分别实际解码 PNG/WAV/H.264 MP4请求不接受扩展名
损坏内容、identity drift 和伪造 receipt 均阻断。
- M11-10 已完成 long-media proxy/cache identityMOVIE source identity、M11-09 READY receipt、
SRGB8/STRAIGHT RGBA8 profile 和 source frame 共同生成 SHA-256 cache identitypayload 独立
绑定长度/hash。Chromium 真实生成首帧 proxy并通过一帧预算 LRU、Storage Worker 重开和
source/capability/payload 漂移阻断。
- M11-11 已完成 media revision gateSEEK/SCRUB/DECODE 共享 timeline/request revision
request、timeline 换代期间完成的真实 decode 和伪造 result 均在 publish/cache callback 前
返回 `STALE/REVISION_CONFLICT`,只有最新且匹配当前 timeline 的结果可以发布。
- M11-12 已完成最终编码 fail-closed 路由:请求绑定 Main timeline/source/settings identity
server endpoint 缺失时稳定阻断,存在时只返回 `SERVER_EXPORT_REQUIRED`。实际或注入的
`VideoEncoder` 都只记录探测事实,`localEncoding` 始终保持 `BLOCKED`。
- M11-13 已完成实时音频恢复门schema 1 区分 context/output/mute 状态;真实 Chromium
`AudioContext` 通过 suspend/resume、muted resume、unmute gain 恢复和 close。缺 API/
构造失败与 resume failure 均保持结构化静音阻断。
本轮新增并已验证
- M6-09A-Cbinary archive 解包到 mktemp 后由包内 deployment contract 启动;新浏览器
context 阻断所有非 loopback 请求manifest、WASM、CSS、3 个 Worker、字体和基础 UI 冷启动通过。
- M6-10A-D真实归档环境完成 OPFS open/edit/save、Worker 重建、离线恢复、继续 edit、
undo/redo、revision 单调保存和 GLB 严格回读stable object/data IDs 与 blend SHA-256 已核对。
- M6-11A-Cbinary archive 在独立目录校验 SHA256SUMS、合同、许可证、SBOM、manifest
23 个 manifest 文件通过archive browser smoke 通过并清理 server/profile。
- M6-12A-Dsource archive 在另一个独立目录校验 18,173 个文件,无 pycache/dist/build 输出;
npm ci、typecheck、build 通过14 个 production build 文件与 binary app 逐项一致。
- M6-13A-C确认 Gitea Actions、自托管 Debian 13 runner、Node 20.19.2、Playwright 1.62.1、
Chromium 149/Chrome 150、Blender 5.2.0、Emscripten 3.1.69quick cache 只绑定 lockfile/toolchain。
- M6-14A-CP0、main/Offscreen、network、device-loss、OOM、OPFS quota、malicious blend/archive
共 9 个 Chromium lane 子命令通过,端口均动态分配并由 Playwright 清理。
- M6-15Afull E2E 126/126、100k/1M/10M geometry、4K/8K texture、600 帧 simulation、
1M 帧 media、VDB native/server/OPFS/WebGPU/双视口/故障、49/49 acceptance、
offline reproducibility 和 archive 复验共 19/19 通过。
- full E2E 首次发现开发服务器错收集 archive-only spec已将该 spec 限制到
playwright.archive.config.ts定向 M6-09 通过后完整 release lane 从头重跑通过。
- M6-15B/Crelease 仅由 main push 或 workflow_dispatch 触发exit code 17 失败注入
只生成新 FAILED 报告,不复用旧 READY。
- M6-16A-Cquick/Chromium/release 三报告联合校验通过,绑定同一 commit、
lockfile、ledger、engine、archive 和每条日志 SHA-256retention 固定为 7/14/30 天。
- M6-17ADEPLOYMENT.md 已补齐空目录安装和 transport preflight自动门在 mktemp
中校验交付 SHA-256、拒绝危险 tar 条目、安装到内容 hash 目录、原子建立 current
验证 HTTPS/127.0.0.1 READY 与 public HTTP/file BLOCKED并从安装后目录验证合同头/range。
- M6-17Bbinary archive 新增 release-metadata.json绑定 product/engine、IDB schema 6、
OPFS schema 1、3 个 Worker 和缓存策略;双版本门验证 5->6 前向迁移、Worker 换代、
失败前置不改 current、成功原子切换、旧 release 保留和项目 SHA-256 不变。
- M6-17C回滚合同只原子切换 current 的整套 app/engine release相同 IDB/OPFS schema
旧版 READYIDB 降级和 OPFS 逆迁移稳定 BLOCKED新版目录、项目 bytes、revision 17 和
blend SHA-256 全部保留。
- M6-17Doperations-diagnostics.json 与 DEPLOYMENT.md 表格覆盖 MIME、range、isolation、
hash、quota、Worker、GPU 七域21 个信号唯一;检查、预期、恢复和数据安全边界
与 deployment contract 联合校验,诊断 JSON 已进入 binary archive。
- M6-17Eoperations rehearsal 在同一个全新 mktemp 根内连续执行 8/8 步骤:
delivery hash/path、空目录安装、deploy HTTP、项目写入、upgrade 切换/HTTP、rollback 切换/HTTP
revision 23 与 blend SHA-256 不变,临时根已清理。
- M6-18A冻结 `0.1.0-rc.1`、engine `blender-wasm-0.1.0-rc.1` 和 HEAD
`17ab961485fe2ea1574c5f0b7d3ef9608a2bf424`RC 生成器先稳定拒绝旧 `0.1.0`
metadata再重建并两次复验确定性 binary/source archive。`RC_MANIFEST.json` 与 sidecar
已绑定 package/package-lock、engine manifest、binary 内 release metadata/SBOM、ledger、
`SHA256SUMS.txt`、3 个主要构件和 5 个 operations reportbinary 25 文件、source 18,185
文件及 14 个重建产物独立复验通过。
- M6-18B新增 RC 发布说明,只列已通过的 P0、双 viewport、single/pthread、OPFS、
性能/故障、离线交付和 CI/运维能力;自动核对 12 个 V1 family `READY` 与 12 个
Blender 全域 `BLOCKED`7 个本地链接全部可解析。`V1_SCOPE.md` 和机器 ledger 已进入
离线包binary manifest 复验 28 个文件通过。
- M6-18C已知限制明确 Chromium-only、HTTPS/loopback、AUTO/SINGLE/PTHREAD 选择、
初始化失败单次 fallback、hash fatal 和 release 刷新边界;记录 WASM 16 MiB 初始/2 GiB
ceiling、origin-bound storage/无最低 quota 保证、纹理 64 MiB/16,384 px/256 项,以及
VDB/NanoVDB 512 MiB/1 GiB/512 MiB 上限与 adapter 可能更低。限制自动检查与 binary
29 文件复验通过。
- M6-18D发布恢复手册覆盖 SHA256SUMS/RC manifest/归档/三 lane 证据校验、生产
Save Project 的 OPFS commit + 外部 `.blend` 备份、revision/hash/origin 记录、切换前失败、
切换后兼容回滚、IDB/OPFS schema 稳定阻断及独立恢复 origin文档检查、binary 30 文件
复验和全新临时根 operations rehearsal 8/8 再次通过。
- M6-18Equick 从首次 unit hardcoded version 的新 `FAILED` 报告定位并修正后完整重跑
`READY 7/7`Chromium `READY 9/9`release 扩充 RC 文档、5 项 operations 和 manifest
门后 `READY 25/25`。full E2E 126/126、49/49 acceptance、归档重建/浏览器/独立 source
rebuild 全部通过;三报告与 RC manifest 联合绑定同一 HEAD、package/lockfile、ledger、
engine、SBOM、3 份发布文档和最终 archive hashexit code 17 仍只生成新 `FAILED`。
- M7-01新增纯 `user-action-state` 合同,覆盖 IMPORT/OPEN/SAVE/SAVE_AS/EXPORT 和
IDLE/RUNNING/SUCCEEDED/FAILED/CANCELLEDaction identity、允许转换、身份/复用/错误码
拒绝均为确定性结果。生产 App 已在图片 Main transaction、blend open、OPFS commit、blend
download 和 GLB export 的真实边界记录状态保存仍保持先原子提交再下载。unit 4/4、
Chromium 正负例 2/2、typecheck 和 production build 全部通过。
- M7-02新增纯项目动作互斥合同OPEN/SAVE/CLOSE 冲突矩阵完全对称且独占,冲突统一返回
`USER_ACTION_CONFLICT`,并细分 REPEATED_OPEN、CONCURRENT_SAVE、CLOSE_DURING_SAVE。
App 的 open、manual save、autosave 和 close 使用同一 owner lock同一浏览器任务竞争验证第二次
open 不替换首个 projectId、双 save 只提交/下载一次、save 中 close 不清空 scene 或终止 Worker
提交后继续 edit/save/close 正常。互斥 unit 4/4联合 unit 8/8、新 Chromium 5/5、既有
save/autosave 2/2、typecheck 和 build 全部通过。
- M7-03新增 `File.stream()` 分块 reader每个实际 stream chunk 最多按 1 MiB 有界复制,
进度来自累计真实字节/文件声明大小,每 4 MiB 让出一次 UI 并同步提交紧凑进度状态,不使用
时间插值。每次 open 有独立 AbortController读入阶段提供取消按钮取消稳定进入
`CANCELLED/OPEN_CANCELLED`,不调用 WebEngine、不替换旧 scene/projectId。621,323-byte 有效
blend 精确完成40 MiB 合成输入在中间字节取消reader unit 3/3联合 unit 11/11、
新 Chromium 7/7、既有 save/autosave 2/2、typecheck 和 build 全部通过。
- M7-04reader 资源 ledger 在取消返回前执行 stream cancel/release、清零未完成 output并证明
live reader/input bytes/staging 全为 0。WebEngine open 改为隔离候选 WASM module/Main handle
AbortSignal 通过 cancelOpen request 在 NATIVE_INITIALIZE/NATIVE_OPENED 阶段取消;只有构建
SceneIR 成功才原子替换当前 Main取消则释放 native input、销毁候选 handle当前架构无 OPFS
import staging计数恒为 0。native 取消后旧 Basic Main 继续 edit/save联合 unit 11/11、
新 Chromium 8/8、既有 open/save/autosave/concurrent-open/isolated-preview 5/5、build 全部通过。
- M7-05新增纯 save transaction 合同,冻结 base committed revision/hashSERIALIZE、OPFS_STAGE、
SCENE_COMMIT、METADATA_COMMIT 任一失败均只更新 attempt只有 Storage 返回的 revision/hash 与
candidate 完全一致才推进 committed。已有基线项目在 after-stage、after-scene-commit、
before-metadata-commit 故障中用同一原子 writer 回写旧 bytes 后抛错Worker 重启后旧
revision/hash/bytes 逐项不变;无基线 M6 journal 前滚仍通过。unit 14/14、新 Chromium 9/9、
旧 recovery/save/autosave/quota 4/4、build 全部通过。
- M7-06新增纯 dirty stateopen/recover 建立 current/committed Main revision只有成功 Main
transaction 推进 current匹配 candidate 的成功 save 才对齐 committedpreview、workspace、
失败 import/open 保持原状态。删除手动 dirty toggle旧 autosave 测试改用真实 Add Cube。
unit 17/17、新 Chromium 10/10、真实 Main/save/autosave 3/3、build 全部通过。
- M7-07undo/redo 成功后序列化当前 Main 并与最近成功 save 的 blend SHA-256 比较;逻辑
revision 始终单调增加,内容 hash 相同即 clean、不同即 dirty。save -> edit -> undo clean ->
redo dirty -> undo clean 的 Chromium 路径通过。联合 unit 18/18、Chromium 10/10、build 通过。
- M7-08Engine/Storage Worker 的 `error`/`messageerror` 统一映射为可恢复
`WORKER_TERMINATED` faultpending request 只结算一次客户端支持重启。App 在 fault 后保留
当前 snapshot、项目 ID、dirty/committed identity 和项目列表,显示显式“重启并恢复”入口;恢复
先重建两个 Worker再从当前项目 OPFS commit 与 operation log 重建 SceneIR。Engine/Storage
crash 注入和 retry 均不清空当前场景,恢复后 operation log 变更仍在。unit 19/19、Chromium
12/12、typecheck、production build 全部通过。
- M7-09新增 recent projects schema v1 纯合同,记录只接受可验证的 project ID、revision、
bytes、SHA-256、canonical timestamp 和 backend排序/去重在输入顺序变化时仍确定,最多保留
50 项。索引存入 IndexedDB `setting`,同 Worker 队列与 `navigator.locks` 共同避免并发丢更新;
Worker 重启、页面刷新和新 StorageClient 均可恢复列表。打开但未提交的文件不进入索引;恢复
成功前不切换 project identity。损坏索引被清洗隔离时保留当前 recent 条目和 quarantine 计数,
OPFS buffer transfer 前冻结 bytes索引写回完成后才报告恢复成功。Worker 重启后 selection、
frame、workspace 和逻辑 project revision 均保持;联合 unit 22/22、Chromium 14/14、typecheck
和 production build 全部通过。
- M7-10recent project 启动列举和选择恢复前核对 IndexedDB project metadata 与 OPFS commit 的
revision、bytes、SHA-256`MISSING`、`HASH_MISMATCH`、`METADATA_MISMATCH` 失效项只从可打开
列表隔离并保留在索引中,`unknown` backend 记录兼容存储不可用场景。UI 显示稳定的缺失/校验失败/
元数据不一致提示,并按 projectId 提供只移除失效引用的操作;移除不会删除其他项目或当前场景。
完成 missing、hash mismatch、修复和当前项目保留的 unit/Chromium 正负例,完整用户动作回归、
typecheck、production build 全部通过。
- M7-11新增 `StorageBudgetBreakdown` v1 和 Storage Worker `getBudget`,按当前 project 精确汇总
committed blend、snapshots、LOD manifest/cache、普通媒体 asset 及 Simulation/NanoVDB VDB
payload计算稳定 total界面新增五项存储预算面板和分项 bytes data attributes保存、刷新、
Worker 重启后重新读取同一结果。unit/Chromium budget 正例、完整用户动作回归、typecheck 和
production build 全部通过。
- M7-12新增 project-scoped orphan content asset cleanup扫描 `assets/sha256/<prefix>` 只移除
没有该 project IndexedDB asset metadata 引用的 OPFS 文件,保留已引用文件和其他 project 的
同名/孤儿文件;预算面板提供“清理孤儿资源”入口并报告 removed count/bytes。跨项目正例验证
A 项清理不影响 B 项完整用户动作回归、typecheck、production build 全部通过。
- M7-13统一键盘焦点、菜单和 modal 上下文:菜单与 Operator Search 互斥,打开 overlay 后焦点
进入首个可操作控件Escape 关闭并恢复触发器焦点;菜单支持 Arrow/Home/End、Tab 关闭,点击
外部关闭;全局快捷键不再劫持交互控件的 Tab/输入,打开文件期间 Escape 复用真实取消路径。
追加 focus-visible 样式和稳定 ARIA roleui-schema unit 5/5、Chromium ui-context 1/1、
大文件 Escape 取消、完整用户动作回归 unit 26/26 + Chromium 19/19、typecheck、lint、
production build 全部通过。
- M7-14新增响应式布局验收覆盖 1440x900、1280x720、360x640 和 320x568检查各布局带的
垂直边界、可见控件文本宽度和页面根 scrollWidth移动端 topbar/workspace/storage/status
横向内容使用局部滚动而不扩大页面或产生重叠。`test:user-actions` 已纳入该 spec4/4
Chromium 尺寸通过,完整用户动作回归 26/26 unit + 23/23 Chromium、typecheck、lint、build
全部通过。
- M7-15新增共享 `viewport-camera` orbit 合同,统一主线程与 Offscreen 的 yaw/pitch/distance、
target、旋转/缩放灵敏度、距离边界和场景相机投影;主线程 OrbitControls 关闭阻尼/平移并按
共享灵敏度配置Offscreen frame 回传相机状态,两个 backend 的选择回调和 gizmo 投影沿同一
SceneIR/相机合同运行。unit 1/1、双 backend camera/selection/orbit Chromium 3/3、既有
Curve/Gizmo 2/2、完整用户动作回归 27/27 unit + 26/26 Chromium、typecheck、lint、build
全部通过。
- M7-16P0 用户闭环增加无鼠标键盘路径和 Axe WCAG A/AA 门,关键流程、焦点可见性和
空项目/恢复项目均通过;完整用户动作回归 27/27 unit + 27/27 Chromium 通过。
- M7-17用户可见故障统一为稳定短消息原始 Worker/文件异常只进入 200 条有界诊断 ledger
和可导出 schema v1 报告;完整用户动作回归 30/30 unit + 29/29 Chromium 通过。
- M7-1830 分钟正式 editing soak 完成 352 个自动保存周期和 30 次整页重开revision 从 1
单调推进到 705首次正式运行发现 IndexedDB 快照写删导致 33,761,087 bytes 物理增长,改为
OPFS payload + IndexedDB metadata 并保留旧内联快照兼容后,正式报告 `FORMAL/READY`,堆增长
-310,276 bytes、存储增长 1,044,121 bytes、页面错误 0、快照保持 5 个。
- M8-01新增 `NanoVDBPageFeedback` v1 GPU feedback buffer 合同,固定 4-word header、默认
1,024/最大 8,192 个 page ID 容量、u32 原子 count/overflow、`NANOVDB_PAGE_FEEDBACK_OVERFLOW`
稳定错误码和 `0xffffffff` 空页哨兵创建、解析、overflow 一致性、页 ID 范围、schema/容量/长度
漂移拒绝以及 reset 清理均为确定性结果。M8-01 unit 4/4、typecheck、lint、production build
64 modules全部通过。
- M8-02实际 NanoVDB paged word/Float32 sampling shader 已接入 feedback storage binding未驻留页
通过 `atomic<u32>` 槽、`atomicCompareExchangeWeak` 和同槽重试并发去重,物理扫描上界固定为
`min(header capacity, arrayLength(page_ids))`,容量耗尽只设置 overflow 并递增尝试计数。真实 active
voxel 缺失 leaf page 的 256 个并发采样只记录 1 个 page ID容量 2 下三种缺页稳定 overflow两个
guard word 不变。全量 unit 83/83、专项/既有 WebGPU 3/3、typecheck、lint、build 全部通过。
- M8-03新增 CPU feedback readback 和 schema v1 revision-bound batch只复制声明容量对应的 GPU
buffer 前缀,解析后按数值升序排序并再次去重,保留 attempted/gpuStored/unique 三项计数、overflow
状态和错误码,并拒绝负数/小数 render revision。真实 WebGPU leaf/overflow 两批分别绑定 revision
17/18page IDs 均升序且 guard 不变;全量 unit 84/84、专项 Chromium 1/1、typecheck、lint、build
全部通过。
- M8-04新增唯一 feedback dispatch revision gatebatch revision 与当前 render revision 不同
时在页请求适配器前返回 `STALE/REVISION_CONFLICT`,请求列表和计数均为零;相同 revision 才按
已排序 page ID 调用适配器。真实 WebGPU revision 17 readback 在 frame 推进到 18 后触发零次页 I/O
切回匹配 revision 的正例只调用一次;全量 unit 85/85、专项及既有 VDB Chromium 3/3、typecheck、
lint、build 全部通过。
- M8-05新增 `loadNanoVDBFeedbackPages`,只组合 revision gate 与现有
`loadNanoVDBGridPage`page ID 使用 manifest 的 `gpu.pageByteLength`,底层仍请求 manifest 原始
chunk `index/start/end/hash` 并调用 `verifyNanoVDBChunk`,未新增 offset/hash 表。真实 GPU 生成
manifest 页 0 feedback 后stale 路径 range I/O 为 0匹配路径加载页与原 density payload
逐字节一致;全量 unit 85/85、专项及既有 fault Chromium 2/2、typecheck、lint、build 全部通过。
- M8-06新增 manifest/grid/source-scoped `NanoVDBGridPageRequestCoordinator`;同页并发订阅共享
一个 loader 与内部 AbortController成功数据按订阅者复制独立 ArrayBuffer。取消一个订阅者只
结算自身,最后订阅者取消才从 pending 表移除并 abort 底层 rangedispose 同样有界清理。真实
Chromium 两组并发门均只调用一次 source单取消底层 abort=0、最后取消 abort=1所有 pending/
subscriber 最终归零;全量 unit 85/85、专项/fault 2/2、typecheck、lint、build 全部通过。
- M8-07复用 M8-05 已有的 manifest chunk SHA-256 验证先于 coordinator resolve/consumer 的
顺序;真实 chunk 保持声明长度但翻转 1 byte 后稳定返回 `NANOVDB_HASH_MISMATCH`GPU
`uploadPage` consumer 调用为 0resident page/bytes/virtual IDs 与 page table 均保持空pending
也归零。专项/fault Chromium 2/2、全量 unit 85/85、typecheck、lint、build 全部通过。
- M8-08`NanoVDBWebGPUGrid` 新增显式 `beginFrame/pinPage/endFrame`paged LRU 只从非 pin
resident page 选择最旧项,全槽被当前 frame pin 时稳定返回预算错误且不改 resident/page table
下一 frame 自动清除旧 pin。真实 GPU 容量 2/虚拟页 4 门验证 pin 页 0 后先淘汰页 1、全 pin
阻断、下一 frame 淘汰页 0最终 page table `[unmapped,unmapped,slot1,slot0]`;专项/fault/OOM
Chromium 3/3、全量 unit 85/85、typecheck、lint、build 全部通过。
- M8-09共享 renderer 新增 `NanoVDBProgressiveRedrawScheduler` 和
`NanoVDBProgressivePageUploader`;只有 `grid.uploadPage` 成功后才安排 frame同一待执行 frame
内多个成功页合并为一次 redraw失败页不安排回调执行后才允许下一轮。真实 WebGPU 验证
三个成功页分两批只产生 2 次 frame/redraw越界失败页不增加计数专项/fault/OOM Chromium
3/3、全量 unit 85/85、typecheck、lint、build 全部通过。
- M8-14两个独立 Worker 验证 OPFS restart旧 Worker 的 resident `[0]` 即使作为声明传入,
新建 GPU grid 初始仍为空。新 Worker 只从 OPFS 恢复并校验 manifest页 0 经声明长度和
chunk SHA-256 复验后才写入 resident翻转 OPFS chunk 首字节后稳定返回
`NANOVDB_HASH_MISMATCH`,第二个新 grid 的 resident/page table 保持空。专项、既有 OPFS、
VDB fault、87/87 unit、typecheck、lint 和 build 全部通过。
- M8-15新增 device-loss replay schema v1 和生产恢复入口;可见页先数值排序、去重并按新 grid
resident capacity 截断,新 page table 从全 unmapped 开始,页经 manifest chunk 复验后才上传。
真实 device loss 后 generation 增加 1可见 `[2,1,0,2]` 只回放 `[0,1]`,旧非可见末页和
超限页均不驻留page table 为 `[0,1,unmapped...]`。专项/分页/OPFS restart/OOM Chromium、
89/89 unit、typecheck、lint 和 build 全部通过。
- M8-16paged/direct grid dispose 与三资源组改为幂等feedback 初始化写入失败会就地销毁已创建
buffer。OOM 门保留 page-table 失败证据,并新增 feedback 初始化失败resident/page table/
feedback 峰值 3、三者 destroy 次数各 1、released bytes 131,112、live resources 0同 device
重新创建资源组、LRU 和重复 dispose 通过。专项/分页/device-loss/双视口 Chromium、89/89 unit、
typecheck、lint 和 build 全部通过。
后续任务领取
- 任务名称、顺序和完成状态以机器队列返回的最新 `nextTask` 为唯一依据。
- 本文不手工维护待办任务名;领取后只追加已完成事实、验证证据和当前计数。
M6-15/M6-16 实际验证命令
- BLENDER_BIN=<official-usd-enabled-blender> BLENDER_ARCHIVE_SHA256=96f6c181...1c48
CHROME_PATH=<chrome-150> VDB_RESOURCE_ROOT=<vdb-root> npm --prefix web run ci:release
- node tools/web/check-ci-report.mjs release/ci-reports/quick.json
release/ci-reports/chromium.json release/ci-reports/release.json
- npm --prefix web run test:ci-failure-report
M7-01 实际验证
- `npm --prefix web run typecheck`:通过。
- `WEB_TEST_PORT=5194 npm --prefix web run test:user-actions`unit 4/4、Chromium 2/2 通过。
- `npm --prefix web run build`通过55 modules transformed。
- `git diff --check -- web/protocol/user-action-state.ts web/tests/unit/user-action-state.test.mjs
web/tests/e2e/user-action-state.spec.ts web/app/src/app/App.tsx web/package.json`:通过。
- `user-action-state.ts` SHA-256232257fb0e85a6827d71a1acbbf82477ba8c441c224cf994049bde96943c518e。
- unit/Chromium spec SHA-25688ace5b65a5bee44d4ab417ea2144391d461117e848b1446da86b1cf0b21e237 /
9ecb1e63f58c25dc64e0f8738b272b45529212469c9ea2ca660b68d4f0e7b566。
M7-02 实际验证
- `npm --prefix web run typecheck`:通过。
- `WEB_TEST_PORT=5196 npm --prefix web run test:user-actions`:联合 unit 8/8、Chromium 5/5 通过。
- `WEB_TEST_PORT=5197 npx --prefix web playwright test --config web/playwright.config.ts
web/tests/e2e/smoke.spec.ts -g "saves the opened blend|autosaves a dirty project"`2/2 通过。
- `npm --prefix web run build`通过56 modules transformed。
- `project-action-mutex.ts` SHA-256330da0a7253f9bda9f7b43f5df4a252596fe43723c489308b1e0cbb6311aefd4。
- unit/Chromium spec SHA-25692af891ddbb54c54c2717a8e8d4466678de2cb7117f413f431a2e32fa2446f0c /
0eb8f7c40dab623762d04e485348fbdaa68e9782010199e5d1b888f9475d6896。
M7-03 实际验证
- `npm --prefix web run typecheck`:通过。
- `WEB_TEST_PORT=5206 npm --prefix web run test:user-actions`:联合 unit 11/11、Chromium 7/7 通过。
- `WEB_TEST_PORT=5207 npx playwright test --config web/playwright.config.ts web/tests/e2e/smoke.spec.ts
-g "saves the opened blend|autosaves a dirty project"`2/2 通过。
- `npm --prefix web run build`通过57 modules transformed。
- `file-byte-reader.ts` SHA-2563472e2a8cc01b6a78dda85d90a0a6f106ee3c0ad0e3c598bd3f6a7cbca14b536。
- unit/Chromium spec SHA-2561e86e6f553cafcd2a890eab76f090ba2eb249c21fced88b6f82db80162254bc8 /
78608c721e5bd66570ae73b13c9c4531fc7d555b226c194188e73cddcde6b370。
M7-04 实际验证
- `npm --prefix web run typecheck`:通过。
- `WEB_TEST_PORT=5210 npm --prefix web run test:user-actions`:联合 unit 11/11、Chromium 8/8 通过。
- `WEB_TEST_PORT=5211 npx playwright test --config web/playwright.config.ts web/tests/e2e/smoke.spec.ts
-g "opens a local .blend|serializes concurrent WebEngine init|previews Decimate|saves the opened blend|autosaves"`5/5 通过。
- `npm --prefix web run build`通过57 modules transformed。
- WebEngineClient/Worker SHA-2561e2cac9f9a9ebfb068cb8a7cfeab5100d9534600dcdd703a12d68614940a28e5 /
331c7854ea75e2def1bf503118c670908d39ce9ede9c5deb5a4432812172582b。
- Chromium spec SHA-256467d50dadce0f2b1d8da090fcc9383c642d3fd9fa19d19b53833340d418490a6。
M7-05 实际验证
- `npm --prefix web run typecheck`:通过。
- `WEB_TEST_PORT=5214 npm --prefix web run test:user-actions`:联合 unit 14/14、Chromium 9/9 通过。
- `WEB_TEST_PORT=5215 npx playwright test --config web/playwright.config.ts web/tests/e2e/smoke.spec.ts
-g "recovers verified atomic saves|quota exhaustion|saves the opened blend|autosaves"`4/4 通过。
- `npm --prefix web run build`通过58 modules transformed。
- save transaction/StorageWorker SHA-2569c6d932d6d2ce308ae8fbc56ee56296f1b67bd22e76b90a69751813f174bc766 /
bfde02b78850beb510c7a92fcefb6b3b9f5d2ef4bef09027a7fdc6f737181789。
- unit/Chromium spec SHA-25699fde5eb7152e1fe0df8702660724f8457a6423fb1d731f92758670b531cfd96 /
e453f817b3bae19ddf18c57c4429743e7157d083ab9ebf2e8e523bc6301d226d。
M7-06 实际验证
- `npm --prefix web run typecheck`:通过。
- `WEB_TEST_PORT=5217 npm --prefix web run test:user-actions`:联合 unit 17/17、Chromium 10/10 通过。
- `WEB_TEST_PORT=5218 npx playwright test --config web/playwright.config.ts web/tests/e2e/smoke.spec.ts
-g "Main-authoritative|saves the opened blend|autosaves a dirty project"`3/3 通过。
- `npm --prefix web run build`通过59 modules transformed。
- dirty contract/unit/Chromium SHA-256283d08dd92e7f7afc13ba004982160d23369a42ea487c77c7fc6de803f4c00e7 /
ab71114adb58fec8387ff8b8ca0a1729681a57e370a995c0ee7e71eeabc3baf2 /
9980065a202b97975d299ef93312c442f4bc69b8840e899e89b1f802d13967e7。
M7-07 实际验证
- `npm --prefix web run typecheck`:通过。
- `WEB_TEST_PORT=5220 npm --prefix web run test:user-actions`:联合 unit 18/18、Chromium 10/10 通过。
- `npm --prefix web run build`通过59 modules transformed。
- dirty contract/unit/Chromium SHA-256ee1a04a6f43a4c5504657f318249c9c2e27abe47647cef64237b94ba2e56f1ea /
1e5c6ddeb29ca110b90a01f40a8ceca26e18d7787455dd13aeb8a0da76adb602 /
9b884c1e975b4ae4b55f6bc80ed191444790d75eccb09718863f24a54fd4aa18。
M7-08 实际验证
- `npm --prefix web run typecheck`:通过。
- `node --test web/tests/unit/worker-fault.test.mjs`fault contract 1/1 通过;完整 unit
回归 19/19 通过。
- `WEB_TEST_PORT=5230 npx playwright test --config playwright.config.ts
tests/e2e/worker-crash-recovery.spec.ts`Engine/Storage crash recovery 2/2 通过。
- `WEB_TEST_PORT=5233 npx playwright test --config playwright.config.ts --workers=1
tests/e2e/user-action-state.spec.ts tests/e2e/project-action-mutex.spec.ts
tests/e2e/file-import-progress.spec.ts tests/e2e/save-interruption.spec.ts
tests/e2e/dirty-state.spec.ts tests/e2e/worker-crash-recovery.spec.ts`:既有 M7 与新用例
12/12 通过;并行首轮曾出现 M7-04 时序抖动,单 worker 重跑通过。
- `npm --prefix web run build`通过60 modules transformed。
- `git diff --check -- <M7-08 files>`:通过。
- Worker fault/client/unit/e2e SHA-256
`e95c5a64811abc237b601974ac6fd88bccd6ca51160f9eb4e0a2e1a563d46764` /
`0dae0d958398b3e1363a13a0694b1b4785bc49af09124e157b8df72b24ce455b` /
`839b3e52b69dd9a5fee7e1c604945c1cb0bde44bf9dea2221d13fc77ef417b68` /
`85853dc439e61618f7fb2f2ccfb1619f44909808f535784ddb7aeed5d4b102ba` /
`01bfe9221500e10d0abf75dac6149c174627a540c210eb54c041242de7f3805d`。
M7-09 实际验证
- `npm --prefix web run typecheck`:通过。
- `WEB_TEST_PORT=5242 npm --prefix web run test:user-actions`:联合 unit 22/22、单 Worker
Chromium 14/14 通过;并行首轮仅复现已知 autosave 时序抖动,已把单 Worker 约束固化到脚本。
- `npm --prefix web run build`通过61 modules transformed。
- `git diff --check -- <M7-09 files>`:通过。
- recent contract/unit/Chromium SHA-256
`bc5cdbc52815f2f4540ff18e1f4f90ec731b1c2a9ccc81cd9a8132f9d9e8d1cc` /
`34df83e9a9b27aea6e65667427cda2c5a9216284abb2766b5fe43899df5c712e` /
`35c5d54cd13796b7d126313be625bc360a8d1e90c77c78e090a37e4854bcb595`。
- App/StorageWorker SHA-256
`7eddccde9402cb08e03da7412c98b9df868ea3a91ff9fb0524c6cf1bfc2a114a` /
`d730a87c4d73d0b844228d1d25a981a30ed2781250f2d125a3b9fb3a116a45f8`。
M7-10 立即执行
- 已完成:启动列举和选择恢复均验证 IndexedDB metadata/OPFS commit 的 revision、bytes、SHA-256
`unknown` backend 保留兼容语义,真实 `opfs/indexeddb` 缺失或损坏项返回稳定 issue code 并从
可打开列表隔离,当前场景和其他 recent 项目不变。
- 已完成:修复提示显示稳定中文短消息和对应 projectId 的“移除引用”按钮;移除只更新
`recent-projects:v1` 索引,不删除项目 metadata、OPFS commit、snapshot 或当前场景。
- `npm --prefix web run typecheck`:通过。
- `node --test web/tests/unit/recent-projects.test.mjs`unit 4/4 通过。
- `WEB_TEST_PORT=5253 npx --prefix web playwright test --config web/playwright.config.ts
tests/e2e/recent-projects-recovery.spec.ts -g "M7-10"`Chromium 2/2 通过。
- `WEB_TEST_PORT=5252 npx --prefix web playwright test --config web/playwright.config.ts
tests/e2e/recent-projects-recovery.spec.ts`M7-09/M7-10 Chromium 4/4 通过。
- `WEB_TEST_PORT=5254 npm --prefix web run test:user-actions`:联合 unit 23/23、单 Worker
Chromium 16/16 通过。
- `npm --prefix web run build`通过61 modules transformed。
- `git diff --check -- web/protocol/recent-projects.ts web/protocol/storage.ts
web/app/src/workers/storage.worker.ts web/app/src/app/App.tsx web/app/src/app/app-shell.css
web/tests/unit/recent-projects.test.mjs web/tests/e2e/recent-projects-recovery.spec.ts`:通过。
- M7-10 文件 SHA-256
`6a5fb9b080c648e0d1673afd4363db705355d57bd685ac718a875ef1d18e0e29` /
`8ed45a45abcf21afda9d8871219f238f54dfeceba3414b92cd9a1d5205516489` /
`6e3e5584114523cc49bb970f360c832f4acd3ab34994ab102730f344f288e108` /
`375fa0a992b1d7f53641b18e4ed48e7aabe56c70b4c875b0acdc0f58ad0714ce` /
`b04947d4825a8338854dccd012cef16d7e7d058955a9b5cb3f1b0f58a5b08b0e` /
`6ac5ec70528ea95b06f729f4b11e0a225d37af22467eba2b7c46c6fd8ff6074d` /
`4234833a8b6cfba5606dfde24772ff688822334abbaf558945a912947bf954e2`。
M7-11 实际验证
- `node --test web/tests/unit/storage-budget.test.mjs`unit 2/2 通过。
- `WEB_TEST_PORT=5255 npx --prefix web playwright test --config web/playwright.config.ts
tests/e2e/storage-budget.spec.ts`Chromium 1/1 通过真实项目保存、snapshot、LOD、媒体
asset、simulation/VDB asset 的五项 bytes 与 reload 后面板一致。
- `WEB_TEST_PORT=5261 npm --prefix web run test:user-actions`:联合 unit 25/25、单 Worker
Chromium 18/18 通过;其中 M7-04 首轮竞态已由可取消 native 阶段事件窗口修正并通过。
- `npm --prefix web run build`通过62 modules transformed。
- `git diff --check -- web/protocol/storage-budget.ts web/protocol/storage.ts
web/app/src/storage/opfs-files.ts web/app/src/storage/StorageClient.ts
web/app/src/workers/storage.worker.ts web/app/src/app/App.tsx web/app/src/app/app-shell.css
web/tests/unit/storage-budget.test.mjs web/tests/e2e/storage-budget.spec.ts web/package.json`:通过。
- M7-11 文件 SHA-256
`151ed8fc658322351c73c48c0d524c154789bba2e8dd7dce4000fe6fcd488efb` /
`225cbcde7696d2481a2db6ba8700fe55c011898478dac648f28d95a58aed79e7` /
`2eeeb11c543c3fdf0bdbadcfee4ff96893946679d1227b9314110246e4def5ee` /
`7be78fa594e218471af165e95ff0a4640d4879a840f1fe2a891c64d4f37d8de9` /
`a35082c8443089c92400ed0ee6e36e30638bfe657f3cd2126f0cfd29a8717167` /
`1b6feb627a82b8fb5e513bc7d0dd34883e1f3d7d9a6e5c9a03e365315c723392` /
`c754d5f384fdf5081b556c1ba87ddc3e4bf5e7e52fb7342f55119b1ef4993f51` /
`339b57f9453ea766e6e34144742c91217d45691192e20ee106adaf5d55d6c162` /
`d05cdb7b7d7afd13d42330885604a310005eb2c544806d598911e081ec105ebf`。
M7-12 实际验证
- `WEB_TEST_PORT=5260 npx --prefix web playwright test --config web/playwright.config.ts
tests/e2e/storage-cleanup.spec.ts`Chromium 1/1 通过A 项 removed=1、bytes=19A 已引用
asset 保留B 项 orphan 保留。
- cleanup API 通过 project transaction 扫描 `assets/sha256/<prefix>`,只删除没有该 project
asset metadata 引用的文件,并返回 paths/count/bytes预算面板“清理孤儿资源”入口报告结果。
- M7-12 与 M7-11 联合回归、typecheck、production build 全部通过StorageClient/Worker、OPFS
cleanup 和跨项目 spec 已包含在上方 SHA-256 与 `test:user-actions` 证据中。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M7-13 实际验证
- `npm --prefix web run typecheck`:通过。
- `npm --prefix web run lint`:通过;同时修复 storage Worker catch 链的 preserve-caught-error
诊断,保留 rollback 原始 cause。
- `node --test web/tests/unit/ui-schema.test.mjs`5/5 断言通过菜单切换、overlay 互斥、关闭)。
- `WEB_TEST_PORT=5271 npx --prefix web playwright test --config web/playwright.config.ts
web/tests/e2e/ui-context.spec.ts`Chromium 1/1 通过;覆盖普通 Tab、modal Tab 环、菜单
Arrow/Home/End/Tab、Escape 和触发器焦点恢复。
- `WEB_TEST_PORT=5274 npx --prefix web playwright test --config web/playwright.config.ts
web/tests/e2e/file-import-progress.spec.ts -g "cancels a large streamed open"`:真实 40 MiB
输入在中途同步派发 Escape 后进入 `CANCELLED/OPEN_CANCELLED`,旧 scene/project 保留。
- `WEB_TEST_PORT=5275 npm --prefix web run test:user-actions`unit 26/26、Chromium 19/19
通过(单 worker期间 Worker crash 注入日志为预期测试输出。
- `npm --prefix web run build`通过62 modules transformed。
- `git diff --check -- web/protocol/ui-schema.ts web/app/src/app/App.tsx web/app/src/app/app-shell.css
web/tests/unit/ui-schema.test.mjs web/tests/e2e/ui-context.spec.ts web/tests/e2e/file-import-progress.spec.ts
web/app/src/workers/storage.worker.ts`:通过。
- M7-13 文件 SHA-256`8aa564cf8141ee42cb1f85a1e42ffaf2f4ae19e6f269c98a4b2e8e3362e224ad` /
`3a246c3ae6efcac4fa2ce11aa6f8f6af453a48482963754bd43eb4d7d5894e6b` /
`4933febb29004ae75f4a04e38f0a37ef1624cd412ccae89c727c8d7f7527f62e` /
`ce39f1d44db40f721869b2509a957277d775435b69b6ff8729df8723d9babc90` /
`0adc81a3f6d88565085c426fe220cfc7c826814d6b1c54de9c74292f5f100433` /
`4463430b07572d130b5b531fe3e46e443a282204bb91550d91ad5e0508c15860` /
`012cbb97df5a9e983e38721d8c167e7abb5beca9cbd98690343f0872c1ce64e6`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M7-14 实际验证
- `WEB_TEST_PORT=5281 npx --prefix web playwright test --config web/playwright.config.ts
tests/e2e/responsive-layout.spec.ts`Chromium 4/4 通过1440x900、1280x720、360x640、
320x568各带垂直边界无越界文本无未处理 overflowdocument 根宽度不超过 viewport。
- 移动端 status bar 改为局部 `overflow-x: auto`,保留 Engine/Storage 完整诊断文本,不让页面
根节点横向扩张topbar、workspace toolbar 和 storage budget 继续使用已有局部滚动约束。
- `WEB_TEST_PORT=5282 npm --prefix web run test:user-actions`unit 26/26、Chromium 23/23
通过(单 worker含 M7-13 ui-context 和 M7-14 四尺寸回归)。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`:均通过,
production build 62 modules transformed。
- `git diff --check -- web/app/src/app/app-shell.css web/tests/e2e/responsive-layout.spec.ts
web/package.json`:通过。
- M7-14 文件 SHA-256`e3919944825d88e6de367c6704ff120f0a8beb4dd10f68d21b226e728f07f5ff` /
`f5de57f570880f823224ebdcddb2be4d59ec414a32641effdaa68dc1f4102f28` /
`81480960eb36c7e22217e6b13c164a814de6552ab3935c6e369b47a35bc14a6d`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M7-15 实际验证
- `node --test web/tests/unit/viewport-camera.test.mjs`orbit 默认状态、反算、delta 和相机
position 确定性通过1/1
- `WEB_TEST_PORT=5284 npx --prefix web playwright test --config web/playwright.config.ts
web/tests/e2e/viewport-consistency.spec.ts`Chromium 3/3 通过;主线程/Offscreen 均核对
默认位置 `4.219781,-4.219781,3.658811`、target、yaw/pitch/distance、中心选择和滚轮距离
同一 zoom 输入的两 backend 状态完全一致。
- `WEB_TEST_PORT=5287 npx --prefix web playwright test --config web/playwright.config.ts
web/tests/e2e/smoke.spec.ts -g "previews an N-015 Curve handle drag"`:主线程/Offscreen 2/2
通过;`WEB_TEST_PORT=5286 ... -g "previews N-016 Grease Pencil points"`2/2 通过。
- `WEB_TEST_PORT=5288 npm --prefix web run test:user-actions`unit 27/27、Chromium 26/26
通过(单 worker含 M7-13、M7-14、M7-15 新增回归)。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`:均通过,
production build 63 modules transformed。
- `git diff --check -- web/protocol/viewport-camera.ts web/app/src/three-adapter/viewport.ts
web/app/src/three-adapter/offscreen-viewport.ts web/app/src/three-adapter/offscreen-viewport-protocol.ts
web/app/src/workers/viewport-render.worker.ts web/tests/unit/viewport-camera.test.mjs
web/tests/e2e/viewport-consistency.spec.ts web/tests/e2e/smoke.spec.ts web/package.json`:通过。
- M7-15 文件 SHA-256`b6369fc1145acd14f6099b7a014f39c0611799102ef299296d9cdd3e29d16ae6` /
`dec5f6ea8372360c290f9e288edf2cc0ea20e7eb1b1514ad98bf7ca7ed1b93af` /
`be910d83a4c3e1042aee708d99eaf04ed0e28e7c859786d4ad23acde7c7c66ad` /
`06bc9576081633ad42e5b3a68ec85086aa68afee0359b0c9981c98775b683c55` /
`bfadb23ceb943bcdb3aba4c525e19f4f99099b5a976d538003f99a75d0a31f42` /
`7c811a9b31a4196d53d80c25b26015a904aa5fe9c19c0b12eff2acce95fd77ae` /
`e591e8217b0ed3ea4399918b1ec56ca7160a22bf41f15e67b09c803426e50f4f`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M7-16 实际验证
- 新增无指针 P0 Chromium 路径:全部用户操作只通过 Tab/Shift+Tab、Enter、F3、方向键和
Ctrl+S 完成打开 `.blend`、Add Cube、保存下载、关闭、刷新后从最近项目重开和 GLB 导出;
FileChooser 只用于向键盘触发的原生文件选择器提供测试文件。
- 空项目和恢复后的 4-object 项目各运行一次 Axe WCAG 2/2.1/2.2 A/AA 门,`critical` / `serious`
违规均为 0首轮发现并修正 timeline 刻度对比度、Outliner `treeitem` 父角色和 22px 显隐按钮。
- Outliner 现使用 `tree -> treeitem/group` 语义搜索框、Operator Search 和隐藏文件控件均有
可见键盘焦点轮廓,关键路径逐点断言焦点可见。
- `WEB_TEST_PORT=5292 npx playwright test --config playwright.config.ts
tests/e2e/keyboard-accessibility.spec.ts`1/1 通过。
- `WEB_TEST_PORT=5293 npm --prefix web run test:user-actions`unit 27/27、单 Worker
Chromium 27/27 通过Worker crash 注入日志为预期测试输出。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`
均通过production build 63 modules transformed。
- `git diff --check -- web/app/src/app/App.tsx web/app/src/app/app-shell.css
web/tests/e2e/keyboard-accessibility.spec.ts web/package.json web/package-lock.json`:通过。
- M7-16 文件 SHA-256`e74a53a1f9e9bfea73be8da1de486938d0dcc4718e7585b57bee27a5ce78a978` /
`643831089f0ea60eaf36b725bfa18c2dedb83b06441002ed6626cc5b9359d8a0` /
`21758543408469e4fee9ecc1fdc1f5d9fa2922bc981bacb9bb947c41adb02315` /
`6788477e4336cce78ec6c04f3fc8d93c88a995e20f7cf3b73641317a329b8b56` /
`61f6d13e0148321d3c625a5baa212b5444296d111193c4d62a692685faebff1f`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M7-17 实际验证
- 新增 schema v1 应用诊断合同和 200 条有界 ledger每条记录包含稳定 area/code/summary、
canonical timestamp、sequence、项目上下文以及只在报告中出现的 detail/sourceCode/stack/cause。
- App 的可见 action、engine、storage、viewport、manifest、PBR、open/save/recovery/autosave/GLB
失败统一显示固定短消息;源码门禁止 status setter 插入 `error.message` 或 Worker 原始消息。
- 顶栏新增“导出诊断报告”JSON 绑定无查询参数页面 URL、userAgent、language、
crossOriginIsolated、当前 projectId/revision 和按 sequence 排序的诊断条目。
- 真实 Engine Worker crash 正例确认页面不出现 `WORKER_CRASH_INJECTED`,导出 JSON 保留该细节和
`WORKER_TERMINATED`;无效 blend/image 正例确认固定短消息与报告 detail 同时成立。
- 首轮浏览器门发现 React 开发模式重挂载会把已淘汰 StorageClient 的终止误记为 recent-project
故障catch 现复核当前 client identity报告不再混入旧 Worker 噪声。
- `node --test web/tests/unit/diagnostic-report.test.mjs`3/3 通过。
- `WEB_TEST_PORT=5299 npx playwright test --config playwright.config.ts
tests/e2e/diagnostic-report.spec.ts`2/2 通过M7-16 accessibility 1/1、M7-08 Worker recovery
2/2 定向回归通过。
- `WEB_TEST_PORT=5300 npm --prefix web run test:user-actions`unit 30/30、单 Worker
Chromium 29/29 通过Worker crash 注入日志为预期测试输出。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`
均通过production build 64 modules transformed。
- `git diff --check -- web/protocol/diagnostic-report.ts web/tests/unit/diagnostic-report.test.mjs
web/tests/e2e/diagnostic-report.spec.ts web/app/src/app/App.tsx web/app/src/app/app-shell.css
web/package.json web/package-lock.json`:通过。
- M7-17 文件 SHA-256`e18b6e8c375cb0842d7fb521462fe7af5b63257affeea4a34d02dec74afd660f` /
`571f3c1d9df6ed905ed60da00efbdcc311c27147bb183db0d3e9d2e47293f28f` /
`245fc99bb18986a4e09fc2a66f56f5602dc2519f32a7ec8931741439c03aa5bf` /
`413fc12baeb247377825c53235d1198b5f628e23a8fb35c4ca68ebf34f65378a` /
`c183861009cdfcd3ac4b0c5a632bc3af2256c68b4ff22cc6ffbc10f16947f8b4` /
`61f6d13e0148321d3c625a5baa212b5444296d111193c4d62a692685faebff1f`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M7-18 实际验证
- 新增正式/调试 soak 命令和 schema v1 报告校验器;正式门固定要求 1,800,000 ms、超过 100 个
edit/autosave 周期、至少 20 次整页重开、revision/hash/dirty 一致、单次显式下载、快照上限、
页面错误为空以及 64 MiB heap / 16 MiB origin storage 增长上限。
- 首次 `WEB_TEST_PORT=5318 npm --prefix web run test:editing-soak` 实跑 1,801,443 ms350 个周期、
30 次重开、final revision 701除存储外均通过但 origin 增长 33,761,087 bytes报告稳定为
`FAILED`,未作为完成证据。根因是完整 `.blend` 快照在 IndexedDB 中反复写入并按 5 个保留数删除,
逻辑字节有界但 Chromium backing store 产生线性写放大。
- OPFS 可用时快照 payload 现写入 `projects/<projectId>/snapshots/<revision>.blend`,写后校验并按
retention 删除IndexedDB 只保留 revision/bytes/SHA-256/backend/path 元数据。旧的 IndexedDB
inline `buffer` 行仍可读取StorageClient 协议、预算计数和恢复语义不变。
- `WEB_TEST_PORT=5319 npx playwright test --config playwright.config.ts tests/e2e/smoke.spec.ts
tests/e2e/editing-soak.spec.ts -g "retains bounded snapshots|high-frequency retained snapshots"`
2/2 通过128 次 256 KiB 快照压力保持最后 5 个 OPFS 文件且 origin 增长不超过 4 MiB。
- `WEB_TEST_PORT=5321 npm --prefix web run test:editing-soak`2/2 通过;正式长跑 1,804,650 ms
cycles/autosaves 352/352、reopens 30、revision 1 -> 705、final bytes 201,631、snapshot 5、
download 1、pageErrors 0、heap growth -310,276、storage growth 1,044,121随后机器报告校验通过。
- `WEB_TEST_PORT=5322 npm --prefix web run test:user-actions`unit 30/30、单 Worker Chromium
29/29 通过;`WEB_TEST_PORT=5323 npm --prefix web run test:v1-user-loop`1/1 通过。
- `WEB_TEST_PORT=5324 npx playwright test --config playwright.config.ts tests/e2e/smoke.spec.ts
-g "retains bounded snapshots|saves the opened blend|autosaves a dirty project|recovers verified atomic saves"`
4/4 通过;`typecheck`、`lint`、production build64 modules和 `git diff --check` 均通过。
- OPFS/StorageWorker/soak spec/checker/report SHA-256
`74c63f14bef3ddbf60d1106519b3c9cdf370702cb1427e13e59670175d16b840` /
`1cdfaf3f07a35276e5d169cafc6b153736c4e9ade20876e2a69bff81e92649dc` /
`cb6d49f4be14f65482ca376aaf02b8220b5f26ad8435c83e2966f85c48c3d447` /
`8ce82a135a5e857fabf0da87ea1b1609678d9e1738b5bccfd494622808893c41` /
`dde16899f21d22dc9b3d0cc41e113b0b8d56a05fd388391ee301bbdcfdc67e4c`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-01 实际验证
- `npm --prefix web run test:nanovdb-page-feedback`unit 4/4 通过。
- `npm --prefix web run typecheck`:通过。
- `npm --prefix web run lint`:通过。
- `npm --prefix web run build`通过production build 64 modules transformed。
- `git diff --check -- web/protocol/nanovdb-page-feedback.ts
web/tests/unit/nanovdb-page-feedback.test.mjs web/package.json web/protocol/error.ts`:通过。
- `nanovdb-page-feedback.ts` SHA-256`43027ff4114b895cd7730529023665d85024308641cc272c35f26ca496db6378`。
- unit spec SHA-256`9a7358902117eabae81a1438b7ab6fea1ca8bd6fe05348a8d89614cc78829cd6`。
- `package.json` / `error.ts` SHA-256
`aba2cfc12a97fb515122927f1a8de879ab0a50539d26d0d3bc42957bb69d9a4b` /
`8d6d1a3f49c5709f63b57ff01094002510665ddfff2a5a4a0f9df009d70aff42`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-02 实际验证
- `npm --prefix web run test:nanovdb-page-feedback`:合同 unit 5/5 通过。
- `WEB_TEST_PORT=5332 npm --prefix web run test:nanovdb-page-feedback-webgpu`:真实 WebGPU 1/1
通过256 个并发 active-voxel 采样只记录一个未驻留 leaf pageoverflow guard 未被改写。
- `npm --prefix web test`:全量 unit 83/83 通过。
- `WEB_TEST_PORT=5333 npm --prefix web run test:vdb-faults`:既有 network/Worker/device-loss/
demand-paging 1/1 通过。
- `WEB_TEST_PORT=5334 npm --prefix web run test:vdb-webgpu`:真实 Float32 native/CPU/GPU 数值与
确定性像素 1/1 通过。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`:均通过,
production build 65 modules transformed。
- 首轮 typecheck 发现仓库 WebGPU 声明不暴露 `GPUBuffer.size`,已移除该非合同属性读取并由 WGSL
`arrayLength` 执行物理边界;首轮浏览器断言错误假定缺页 sample 必须 invalid已按既有零/非 active
fallback 语义修正,缺页事实只由 feedback 证明,随后完整重跑通过。
- `git diff --check -- <M8-02 files>`:通过。
- protocol/renderer/sampler/Worker SHA-256
`d7c3f443d046f0c203c9041e44317830f6cb09f3738e5d34c188191bc044c4f2` /
`307a1693d5ffd87662cbf1cccfec8630d999ca2b9d6c845db16975b5ee9224fc` /
`141a32fc9866485f48b64c85fa7c905b367e48ec2e9e6869f90fbbf0f491864a` /
`b98e740225c752a129aaa3fa0203295150fadf5d043da4d9cef220532f15b8d3`。
- unit/e2e/package SHA-256
`0d76b6ffd0f6e994c6ba97498a44c0c8dc5d41db0e65ba5b9f80ed740fccbe48` /
`a740df22a86945df601fe87d0867bb5c2589d6bbfa7ff8ccfc00416f9f7a0d63` /
`b96f8434d152643411eb3b0ad70a8c25688b49ff051484a76828659efd5d0ea4`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-03 实际验证
- `npm --prefix web run test:nanovdb-page-feedback`:合同 unit 6/6 通过;重复 GPU 槽输入规范化为
`[2, 5, 7]`,并绑定指定 render revision非法 revision 稳定拒绝。
- `WEB_TEST_PORT=5336 npm --prefix web run test:nanovdb-page-feedback-webgpu`:真实 WebGPU 1/1
通过leaf/overflow readback 分别绑定 revision 17/18输出排序、去重和 guard 均通过。
- `npm --prefix web test`:全量 unit 84/84 通过。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`:均通过,
production build 65 modules transformed。
- `git diff --check -- <M8-03 files>`:通过。
- protocol/renderer/Worker SHA-256
`358e70fc6aa3a1c36c191e04f8588c9829d54f4e6a2a4b00d54da2c54165bcd0` /
`653680a018d088d18cf978e061ddf649d2d7048de24c79d607cbc8ea3e363d26` /
`c81d19d20af0fab00111eb9f578fdf26cb757743a28bc4404aa53cfa0c2854bc`。
- unit/e2e SHA-256
`35aecc597acf4d40dde231f80b9aaacb8afe4e05be13b0d3373ae7837d6d0ef9` /
`b83422a61decee352e45779acd31e7decaede51cdb8b9ae1c99c40b796252eb9`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-04 实际验证
- 新增 `dispatchNanoVDBPageFeedbackBatch` 作为 page request 的唯一 revision gate旧/未来 frame
都返回 `STALE/REVISION_CONFLICT`、`requestedCount=0` 和空 page ID 列表,且不调用 I/O 适配器;
当前 frame 才按 CPU batch 的数值升序调用适配器。
- `npm --prefix web run test:nanovdb-page-feedback`:合同 unit 7/7 通过;覆盖旧 revision、未来
revision、匹配 revision 和非法当前 revision两个 mismatch 正例合计 I/O 调用为 0。
- `WEB_TEST_PORT=5325 npm --prefix web run test:nanovdb-page-feedback-webgpu`:真实 WebGPU 1/1
通过revision 17 leaf readback 对当前 revision 18 返回 stale 且页 I/O 为 0匹配正例只请求
唯一 leaf page 一次。
- `WEB_TEST_PORT=5326 npm --prefix web run test:vdb-webgpu` 与
`WEB_TEST_PORT=5327 npm --prefix web run test:vdb-faults`:既有 Float32 数值/像素及
network/Worker/device-loss/demand-paging Chromium 回归各 1/1 通过。
- `npm --prefix web test`:全量 unit 85/85 通过;`npm --prefix web run typecheck`、
`npm --prefix web run lint`、`npm --prefix web run build` 均通过production build
65 modules transformedM8-04 文件 `git diff --check` 通过。
- protocol/unit/Worker/e2e SHA-256
`0d0cd81175147a5a8dcc1eb272aeb13f44b5c694097a4c8926b12b4668fc918e` /
`d72db3d7b352a68327592306a4b5cea49bfa0513f52f006b8e8c3f6433554814` /
`baedb58bc84d9374701f2aecfa82da64c1caf95a51190757e1c6761c756ac638` /
`e622a913ef66186fc2fe0f095c7dc8c16671cbe1c001628732ca4be978afe9ce`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-05 实际验证
- 新增 `loadNanoVDBFeedbackPages` 薄组合层:先执行 M8-04 revision gate再复用既有
`loadNanoVDBGridPage`;后者从已校验 manifest 计算页/chunk 交集,请求完整声明 chunk 并执行
`verifyNanoVDBChunk`,没有第二份 page range 或 hash 地址模型。
- 首轮 `WEB_TEST_PORT=5328` 失败为 `requested GPU page is outside the grid`M8-02 合成 shader
使用 256 KiB 页,而 fixture manifest 声明 4 MiB证明两套 page ID 不可混用;统一 leaf 测试到
4 MiB 后 `WEB_TEST_PORT=5329` 又稳定暴露 root page 也缺失导致 sampler invalid。最终将 M8-02
leaf-only/overflow 压力网格与 M8-05 manifest I/O 网格明确分离,两个失败均未作为完成证据。
- `WEB_TEST_PORT=5337 npm --prefix web run test:nanovdb-page-feedback-webgpu`:真实 WebGPU 1/1
通过manifest 4 MiB 页 0 feedback 绑定 revision 19current=20 时 source 调用为 0匹配时
请求 range 逐项等于 manifest chunk 的 `index/start/end/hash`,加载页与原 payload 逐字节一致。
- `WEB_TEST_PORT=5338 npm --prefix web run test:vdb-faults`:既有 network/Worker/device-loss/
demand-paging 1/1 通过;`npm --prefix web test` 全量 unit 85/85 通过。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`
均通过production build 65 modules transformedM8-05 文件 `git diff --check` 通过。
- viewport loader/Worker/e2e/protocol SHA-256
`46847ee46ecce4483dc378e6c1f4daa474994d38cc0b30bbde9cf43fd4a78c91` /
`c342976575e45d14a798d4865fde673317d2054592779c87501db7f3e2037a97` /
`5ceaacb2c97d9e4dc3db86c6ecae7a0e3bf8620c5454d61f2cb478dd6b29222e` /
`0d0cd81175147a5a8dcc1eb272aeb13f44b5c694097a4c8926b12b4668fc918e`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-06 实际验证
- 新增 `NanoVDBGridPageRequestCoordinator`,以绑定的 manifest/grid/source 和 page ID 为请求域;
首个订阅者创建唯一 loader/内部 AbortController后续同页订阅加入同一 pending entry。成功时
每个存活订阅者获得 `slice(0)` 独立 buffer完成、失败、取消和 dispose 均移除 abort listener。
- 真实并发正例让 source 在实际 HTTP range 前暂停:两个 `loadNanoVDBFeedbackPages` 同时请求页 0
观测 `pendingPages=1/subscribers=2/rangeCalls=1`;取消第一个后为 1/1 且底层 abort=0释放 range
后只有第二个 consumer 成功,完成统计归零。
- 最后订阅者取消负例使用阻塞 range两个调用者仍只产生一次 source首次取消保持底层存活
第二次取消使底层 signal abort 恰好一次,两个调用者各自只结算一次 `AbortError`pending 归零。
- `WEB_TEST_PORT=5340 npm --prefix web run test:nanovdb-page-feedback-webgpu`:专项 Chromium
1/1 通过;`WEB_TEST_PORT=5341 npm --prefix web run test:vdb-faults`:既有 fault/demand paging
1/1 通过;`npm --prefix web test`:全量 unit 85/85 通过。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`
均通过production build 65 modules transformedM8-06 文件 `git diff --check` 通过。
- coordinator/Worker/e2e SHA-256
`f7f2d02d7b946116b726e58051fafbb745f2eea110fa58409190c5af6e002a58` /
`ca459878899f7328406e8e3f571c432eba99fdc96a73cd58f929aee64ba458cf` /
`95b7fb8b59d45e7b5dd567675fbd7dc622c1baf1f9fba4fac5ccdcd0a2eac976`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-07 实际验证
- 生产顺序保持 `source -> verifyNanoVDBChunk -> coordinator resolve -> feedback consumer`
resident cache 写入只发生在 consumer因此 hash 未通过时没有未验证 bytes 可进入 GPU page slot。
- Chromium 负例从真实 HTTP source 读取声明 chunk 后翻转首字节,长度和 range 均保持不变;
`loadNanoVDBFeedbackPages` 稳定抛出 code/message `NANOVDB_HASH_MISMATCH`rangeCalls=1、
residentWrites=0、residentPageCount/residentBytes=0、residentVirtualPages=[]coordinator 统计归零。
- `WEB_TEST_PORT=5342 npm --prefix web run test:nanovdb-page-feedback-webgpu`:专项 1/1 通过;
`WEB_TEST_PORT=5343 npm --prefix web run test:vdb-faults`:既有 fault/demand paging 1/1 通过;
`npm --prefix web test`:全量 unit 85/85 通过。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`
均通过production build 65 modules transformedM8-07 文件 `git diff --check` 通过。
- Worker/e2e/coordinator SHA-256
`2e12112a8c855d578be70e869ea6cdc5575f410c11307ced9edd6f9bca1a03a6` /
`b84a2502d65a02e6d0d9c2c2adf919abdfc151dc1228492b230e13492bc25244` /
`f7f2d02d7b946116b726e58051fafbb745f2eea110fa58409190c5af6e002a58`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-08 实际验证
- `NanoVDBWebGPUGrid` 增加 frame-scoped pin 合同;`beginFrame` 清理上一 frame pins
`pinPage` 只接受当前 resident pageLRU replacement 过滤 pins`endFrame` 和 dispose 清理集合;
全槽 pin 时返回 `NANOVDB_GPU_BUDGET_EXCEEDED: all resident NanoVDB pages are pinned`。
- 真实 GPU 容量 2/虚拟页 4 正例:页 0/1 resident 后 begin/pin(0),上传页 2 跳过更旧的页 0 并
淘汰页 1随后 pin 0/2 时上传页 3 稳定失败resident `[0,2]` 和 evictionCount=1 不变;下一
frame 只 pin 2 后上传页 3页 0 才被淘汰,最终 resident `[2,3]`、evictionCount=2。
- 首轮 `WEB_TEST_PORT=5344` 仅 page-table readback 断言失败:原 buffer 没有 `COPY_SRC` usage
逻辑 resident 断言均已通过。direct/paged page table 增加诊断 readback usage 后,
`WEB_TEST_PORT=5345 npm --prefix web run test:nanovdb-page-feedback-webgpu` 1/1 通过,真实表为
`[0xffffffff,0xffffffff,1,0]`。
- `WEB_TEST_PORT=5346 npm --prefix web run test:vdb-faults`、`WEB_TEST_PORT=5347 npm --prefix web run
test:oom-recovery`:既有 demand-paging 与四域 OOM 各 1/1 通过;全量 unit 85/85 通过。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`
均通过production build 65 modules transformedM8-08 文件 `git diff --check` 通过。
- renderer/Worker/e2e SHA-256
`8668e5ff81963c08d1064d32aebbd715d283892a71d2137514d8c87a2ae37747` /
`3b5fea1fd890057d63651a7ca5b78c3af612b800444cd78f19ace4698323976c` /
`3e4de849534edd6c6cb230dd62ae797c42be9295e8cf3163b1ec73b8a8e840b2`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-09 实际验证
- `NanoVDBProgressivePageUploader.upload` 先调用真实 grid upload成功后再交给共享 redraw
schedulerpending frame 存在时后续成功 upload 返回 `redrawScheduled=false`,不会加入第二个
frame。非法 page upload 先抛 `NANOVDB_STREAM_INCOMPLETE`scheduler 计数保持不变。
- 真实 WebGPU 容量 3/虚拟页 3页 0/1 连续成功上传后只有 1 个 queued frame执行回调后
`scheduledCount/redrawCount=1/1`,页 2 再上传才安排第二个 frame最终计数严格为 2/2。
- `WEB_TEST_PORT=5350 npm --prefix web run test:nanovdb-page-feedback-webgpu`M8-02 至 M8-09
专项 Chromium 1/1 通过;`WEB_TEST_PORT=5351 npm --prefix web run test:vdb-faults`、
`WEB_TEST_PORT=5352 npm --prefix web run test:oom-recovery`:既有 demand-paging 与四域 OOM
各 1/1 通过。
- `npm --prefix web test`:全量 unit 85/85 通过;`npm --prefix web run typecheck`、
`npm --prefix web run lint`、`npm --prefix web run build` 均通过production build
65 modules transformed全工作树 `git diff --check` 通过。
- renderer/Worker/e2e SHA-256
`07225e5a7f07bc7af0e9bceeae77dd4f267ae6c56e08eb71120eec52f3e4acae` /
`8beed26a5bea315d412427b80c64e1071809104ae89aaea5e1d122919f3cd1ba` /
`61f26e7d86f741074c74496f256d15c4ec6804754e1f5d230cbb48d2bf15699f`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-10 实际验证
- 新增纯 `nanovdb-progressive-redraw` 预算合同:默认每个 render epoch 最多 32 次重绘,调用方
可配置 1..1024 的整数上限;预算耗尽后稳定返回 `NANOVDB_PROGRESSIVE_REDRAW_LIMIT`,并保留
`capped`/`errorCode` 可观测状态。`beginRender()` 清零当前 epoch 计数并使旧回调 generation
失效,避免陈旧回调在新渲染周期重新触发循环;非法上限和计数返回 `NANOVDB_INVALID_ARGUMENT`。
- 真实 WebGPU worker 用上限 2 重复成功上传同一页 4 次:只排入并执行 2 个 frame后两次
`redrawScheduled=false`,统计为 `scheduledCount/redrawCount=2/2`、`capped=true` 和稳定错误码;
reset 后统计清零且 errorCode 为 null。非法页仍在调度器之前失败不消耗预算。
- `WEB_TEST_PORT=5353 npm --prefix web run test:nanovdb-page-feedback-webgpu`M8-02 至 M8-10
专项 Chromium 1/1 通过;`WEB_TEST_PORT=5354 npm --prefix web run test:vdb-faults`:既有
network/Worker/WebGPU fault 1/1 通过;`WEB_TEST_PORT=5355 npm --prefix web run test:oom-recovery`
WASM/OPFS/GPU/NanoVDB 四域 OOM 1/1 通过。
- `npm --prefix web test`:全量 unit 87/87 通过(新增 M8-10 unit 2/2
`npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build` 均通过,
production build 66 modules transformed`git diff --check` 通过。
- M8-10 文件 SHA-256renderer
`8b229173986fcca8c6d02ae1a0a15280c0f4e381de6eccb53c3b5e583d4d4116`、progressive protocol
`7f02e51cb47758b02bb1ea5d8d0fe6e0e8aebeceac5a6b3603f22647cf8ec913`、error contract
`f33540bbcc71add8784adb666d0bcc4f0a6141651a446a641573a98448debd77`、Worker
`e5f8d6e66387be61410431e12be31df587075dd2408305ba883ff5b624c06274`、e2e
`7fc1a630e921def8a216a9d16a196414fcb64523f5d6c908942ac1611664260b`、unit
`bf5c3836c4e6f02eea333d21dc315c8cc1b4706ae15921e24e0cc8d787dbe253`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-11 实际验证
- 新增主线程 WebGPU 专项:直接在页面主线程创建真实 paged NanoVDB grid按 256 KiB 页大小故意
不驻留 leaf pageFloat32 sampler 读取缺页 feedback 后,从 fixture HTTP 精确 range 加载该页,
通过 `NanoVDBProgressivePageUploader` 上传并排入一次 redraw。加载后采样恢复 valid未使用
CPU proxy 或 worker 结果代替主线程 GPU 路径。
- 使用同一驻留表连续执行两次 64x64 `renderNanoVDBFloat32WebGPU`;两次输出均为 16,384 bytes
可见像素 4,096SHA-256 完全一致证明缺页加载后的像素结果确定且非空scheduler 统计为
pending=false、scheduledCount/redrawCount=1/1、capped=false。
- `WEB_TEST_PORT=5359 npm --prefix web run test:nanovdb-main-thread-webgpu`:主线程 Chromium
1/1 通过;此前 M8-10 专项、VDB fault 和四域 OOM 回归仍保持通过。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`git diff --check`:均通过;
M8-11 e2e SHA-256 `47fd18f653090398ba8d03a2663627f7c091f4fa4ad1a69d5b708f9db975af26`
package script SHA-256 `b83be017b5dd1bb0b3b50d55057a47eb938ec4dcfe30b9818c4dc772702b42ad`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-12 实际验证
- 新增 Offscreen Worker WebGPU 专项,使用与主线程相同的 256 KiB page layout、leaf 缺页反馈、
精确 HTTP range、page upload 和 progressive redraw 序列Worker 端不是只验证状态,而是实际
执行 `sampleNanoVDBFloat32WebGPU` 与 64x64 `renderNanoVDBFloat32WebGPU`。
- 主线程和 Offscreen Worker 均观察到同一 leaf page ID、唯一 page request、queued frame=1、
redraws=1最终像素 16,384 bytes 的 golden SHA-256 均为
`87d08a77a644f37ed59609ebdd18555ab1924f9a3b30d8d084db35e7776cfb9c`,各路径重复渲染 hash 相同。
- `WEB_TEST_PORT=5363 npm --prefix web run test:nanovdb-offscreen-page-feedback-webgpu`Offscreen
Worker Chromium 1/1 通过;`WEB_TEST_PORT=5364 npm --prefix web run test:nanovdb-main-thread-webgpu`
主线程 golden 1/1 通过。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`、
`git diff --check`均通过production build 66 modules transformed。
- M8-12 文件 SHA-256Worker
`d8805ef02a44f086bbbab8c5206d22d8b525c650a052c50d60386e30f451b4bc`、Offscreen e2e
`e7ce2248933afd307b744282c8c91e29dab6a833be6a050eae2d6c327c359d54`、主线程 e2e
`dd16d8a491ae57725b2e9e9ce63839104ebb970febfff3747613e01e7bedf40b`、package scripts
`de6c1cc18a8792fc589da9f0c8d2937a5a78114cd2fa417fc3fe1d65ad635b81`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-13 实际验证
- 新增 page feedback resume Worker以 256 KiB page manifest 通过
`loadNanoVDBFeedbackPages -> NanoVDBGridPageRequestCoordinator -> loadNanoVDBGridPage` 请求页 0
首个 chunk response body 在已交付 4096 bytes 后注入中断resumable range source 的第二次请求
精确从 `Range.start + 4096` 续传,并发送首个响应的 `If-Range` ETag。
- 恢复后的 page `consumedBytes == expectedBytes`、SHA-256 与直接 page range 完全一致dispatch
为 `ACCEPTED/renderRevision=17/requestedPageIds=[0]`coordinator 最终
`pendingPages/subscribers=0/0`。这验证的是缺页反馈消费链的 page-level resume不仅是独立 chunk smoke。
- 首轮 `WEB_TEST_PORT=5365` 仅断言固定 fixture page 跨 chunk 数量过严(实际 page 0 只跨一个
chunk仍发生两次请求且已从 +4096 续传);修正为 `>=2` 后,
`WEB_TEST_PORT=5366 npm --prefix web run test:nanovdb-page-resume` 1/1 通过。
- `npm --prefix web run lint`、`npm --prefix web run build`、`git diff --check`均通过production
build 66 modules transformed。
- M8-13 文件 SHA-256Worker
`7095f447f92b79260d4a80d667e219845d74331ddbcc15fe2c915bd7c120efcb`、e2e
`d94b5f78f01fdde488a880c2c16cd896d71ed9098e1fdb9fdcef2547ba2959cc`、package scripts
`e18b887712585b19910332d3d7ffc7e3d012f5bd1d5e9d09d6911f0defeb4557`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-14 实际验证
- 新增 Worker restart 专项:`prepare` Worker 将 128 KiB/两 chunk NanoVDB bundle 原子提交到
OPFS并在旧 GPU grid 驻留页 0Worker 终止后由全新 `reopen` Worker 读取同一 manifest。
旧 Worker 传入的 `claimedResidentPages=[0]` 不参与恢复,新 grid 的初始 resident 严格为空。
- 正例通过 `openNanoVDBFromOPFS -> loadNanoVDBGridPage` 重新读取声明 chunk长度和 SHA-256
通过后才上传页 0resident 变为 `[0]`。负例翻转 `00000.chunk` 首字节且保持长度不变,页加载
稳定返回 `NANOVDB_HASH_MISMATCH`,独立 verification grid 的 resident 保持 `[]`;随后恢复并
清理 OPFS fixture。
- 首轮 `WEB_TEST_PORT=5368 npm --prefix web run test:nanovdb-opfs-restart` 暴露测试 manifest
将源路径误写为 `.nvdb`,生产合同以 `NON_MESH_BINARY_INVALID` 正确拒绝;改为原始 `.vdb`
source 与 `.nvdb` bundle 后,`WEB_TEST_PORT=5369` 专项 Chromium 1/1 通过。
- `WEB_TEST_PORT=5370 npm --prefix web run test:vdb-opfs`、`WEB_TEST_PORT=5371 npm --prefix web run
test:vdb-faults`:既有 OPFS hash-bound reopen 与 network/Worker/WebGPU fault 各 1/1 通过。
- `npm --prefix web test`:全量 unit 87/87 通过;`npm --prefix web run typecheck`、
`npm --prefix web run lint`、`npm --prefix web run build` 和全工作树 `git diff --check` 均通过,
production build 66 modules transformed。
- M8-14 文件 SHA-256Worker
`0c8eda762a9c7051b09bdb0feb8c30222775ac8e469bd9dfc98211f92ec63c50`、e2e
`4c8c5d27fc81b1f5c2bad8adb4947ee1865ef5ae395e7282282615c2341bb5fe`、package scripts
`c60ca8c69a459faef187b742a3b1c14152f2134ce1792d4987ae26aed8a448f9`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-15 实际验证
- 新增纯 `nanovdb-device-recovery` schema v1可见页 ID 数值排序、去重并验证在虚拟 grid
范围内,`replayedPageIds` 最多等于 `residentPageCapacity`,其余明确进入 `skippedPageIds`
page count、容量和页 ID 漂移统一返回 `NANOVDB_INVALID_ARGUMENT`。
- 新增生产 `rebuildNanoVDBGridAfterDeviceLoss`:每次只在恢复后的新 device 上创建 page table
初始 resident 严格为空;仅对计划中的可见页调用现有 `loadNanoVDBGridPage` 复验 manifest chunk
后上传。任何加载/校验失败都会 dispose 整个新 grid不保留部分可信状态。
- 真实 WebGPU device destroy/recover 后 generation 增加 1输入可见集合 `[2,1,0,2]` 规范化为
`[0,1,2]`,容量 2 只回放 `[0,1]`、跳过 `[2]`。旧 resident 的末页没有自动恢复,真实 page
table 前两项为 `[0,1]`、其余全为 `0xffffffff`,回放页的 GPU words 与已验证源页一致。
- `node --test web/tests/unit/nanovdb-device-recovery.test.mjs`2/2 通过;
`WEB_TEST_PORT=5372 npm --prefix web run test:vdb-faults`:专项 Chromium 1/1 通过。
- `WEB_TEST_PORT=5373 npm --prefix web run test:nanovdb-page-feedback-webgpu`、
`WEB_TEST_PORT=5374 npm --prefix web run test:nanovdb-opfs-restart`、
`WEB_TEST_PORT=5375 npm --prefix web run test:oom-recovery`分页、Worker restart、四域 OOM
各 1/1 通过;全量 unit 89/89、typecheck、lint、production build67 modules
`git diff --check` 均通过。
- M8-15 文件 SHA-256recovery protocol/unit
`4eb9685efbf8a4cf7c47892ce2613a7377f3e24e07ffb8ac3056fc19959f6513` /
`271789b875c9d0f5c7ac3f8e283fb717c9846d913a37581a5d3f11a59bd68f91`viewport/Worker/e2e
`97da1edd026bd522750182227031fa67f013397037bc2d417b69f832fa0d3b5c` /
`79ca3e0f53736d39b2a1f925012183a321e7fe4189eaa8c165cb923fa21af91a` /
`3e1b7900fbc4af7efe943311052f6f6abedd02810e39ddd79d15428c3ebe9347`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-16 实际验证
- `NanoVDBWebGPUGrid` 的 direct/paged dispose 与新增 `NanoVDBPagedRenderResources` 统一为幂等;
三资源组原子创建 resident buffer、page table 和 feedback buffer。feedback 初始化
`queue.writeBuffer` 抛错时先由 feedback 创建器释放自身,再由资源组释放 grid 的另外两个
buffer重复 dispose 不再调用底层 destroy。
- OOM suite 保留 `NANOVDB_PAGE_TABLE` 故障,证明 page table 未发布且已分配 resident 只释放一次;
新增 `NANOVDB_FEEDBACK_BUFFER` 故障,在三个 buffer 均已创建后于 feedback 初始化注入。
受控真实 WebGPU proxy 观测三个 label 的 destroy count 各为 1峰值资源 3、最终资源 0、总释放
`131112 = 2*65536 + 8 + 32` bytes随后同 device 上资源组、页上传、LRU 与双 dispose 均通过。
- `WEB_TEST_PORT=5376 npm --prefix web run test:oom-recovery`WASM/OPFS/GPU/NanoVDB 四域
Chromium 1/1 通过NanoVDB 报告包含两个稳定故障点且 schema 校验通过。
- `WEB_TEST_PORT=5377 npm --prefix web run test:nanovdb-page-feedback-webgpu`、
`WEB_TEST_PORT=5378 npm --prefix web run test:vdb-faults`、`WEB_TEST_PORT=5379 npm --prefix web run
test:nanovdb-main-thread-webgpu`、`WEB_TEST_PORT=5380 npm --prefix web run
test:nanovdb-offscreen-page-feedback-webgpu`分页、device loss、主线程和 Offscreen 各 1/1 通过。
- 全量 unit 89/89、typecheck、lint、production build67 modules和 `git diff --check` 均通过。
- M8-16 文件 SHA-256OOM protocol/renderer/scenario/e2e
`e93f4549dfb0e368fce41ed3c68461c1dbd6791601e37f832edfe4620fcd437e` /
`fa228b46dae1a1b9c6f04bb41b370b7f08d7e2c0b83a5174035e429861b36486` /
`616b25a6cbb3d03f599d9bb709c18f73d5df7c169fe33458fa4425ded4d26aa9` /
`714eee1d60c037c22c253caa78ead945eb4b0492f5f9418536015e5463531827`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-17 实际验证
- 新增 Vite `__vdb_sparse_64m__` HTTP fixture逻辑 bundle 严格 67,108,864 bytes16 个
连续 4 MiB chunk声明 SHA-256 与实际零填充响应一致range 响应按 64 KiB 流式写出,支持
稳定 ETag/Content-Range 和可控 body 延迟,不把 64 MiB fixture 写入仓库。
- 新增 sparse-performance Worker使用生产 `validateNanoVDBBundleManifest`、
`createResumableHttpNanoVDBRangeSource`、`NanoVDBGridPageRequestCoordinator` 和
`loadNanoVDBFeedbackPages`。成功读取 page `[0,16,128,192]` 实际发起 4 次 range传输
16,777,216 bytes4 MiB 峰值 range 工作集,首 page 83--89 ms、成功阶段 339--345 ms
coordinator 结束为 `pendingPages/subscribers/pageIds=0/0/[]`。
- 同一 HTTP range 路径注入 2 ms body delay 后中途 Abort实际收到 327,680--393,216 bytes
consumer 调用 0底层 request abort 1取消延迟 12--13 ms最终 coordinator 仍为
`0/0/[]`,错误稳定为 `AbortError/CANCELLED`。该门只证明传输、分页和取消预算;真实
NanoVDB traversal/pixel 仍由 M8-11/M8-12 专项覆盖。
- `WEB_TEST_PORT=5381 npm --prefix web run test:nanovdb-sparse-performance`:专项 Chromium
1/1 通过;独立复跑 `WEB_TEST_PORT=5386` 仍 1/1。回归 `WEB_TEST_PORT=5382` page feedback、
`5383` page resume、`5384` VDB faults、`5385` OOM 各 1/1 通过。
- `npm --prefix web test`:全量 unit 89/89 通过;`npm --prefix web run typecheck`、
`npm --prefix web run lint`、`npm --prefix web run build` 均通过production build 67
modules transformed相关 `git diff --check` 通过。
- M8-17 文件 SHA-256Vite sparse fixture
`fd160c685ed780738e2b37ce9a32e5d4718e11a2875e12d86ddad310213abaf3`、Worker
`56b5b10c0b138484b621822fca766f3dffad19692964f018e0d21d9a6df126de`、e2e
`de7230678f084bd51c7f2a845d22e3709435131e317c8504491c5a2c5a4d79ab`、package scripts
`7aecb80c67a7568b07f890be2d751a150532f0ae0f8ab66e92bce64419e73a7b`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M8-18 实际验证
- Volume Main、NanoVDB asset binding 与双生产视口保存/重开已完成;主线程和 Offscreen
均从同一 OPFS commit 恢复 Volume 数据、source path、density grid 与 asset hash未把
viewport 临时状态当作 Main 数据写回。
- `WEB_TEST_PORT=5387 npm --prefix web run test:nanovdb-volume-roundtrip`Chromium
1/1 通过;既有 OPFS/hash-bound、VDB fault、分页、OOM 回归保持通过。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`、
`git diff --check`均通过production build 67 modules transformed。
M8-19 实际验证
- `tests/golden/M8-19/manifest.json` 固定 generated-smoke-vdb source SHA-256
`586f7cdf4b3329fcb7ef00fc57b12a268baafdbaac0a2b3d1bfa142a22ccda33`、OpenVDB 13.0.0、
`volume-wgsl-v1`、64x64 RGBA8 和三轴误差阈值X/Y/Z 三份 desktop reference 均为
16,384 bytesalpha coverage 3,552 pixelsSHA-256 均为
`87d08a77a644f37ed59609ebdd18555ab1924f9a3b30d8d084db35e7776cfb9c`。
- `node --test web/tests/unit/nanovdb-render-golden.test.mjs`unit 2/2 通过;
`WEB_TEST_PORT=5390 npm --prefix web run test:nanovdb-render-golden`Chromium 1/1 通过。
主线程、Offscreen 与 desktop 三轴比较均 `READY`max/mean/RMS channel error 和 alpha
coverage delta 均为 0backend 比较字节级一致。
- M8-19 protocol/Worker/unit/e2e/manifest SHA-256
`c4375cecc8c2ab4d0c2fd2081a92a8d1265a345f429353a0d92a9456df56f6a0` /
`9f3e2e31cfa4c4a0ca2ae7ef8175f37fbbe50aada628c7d0e40a338c4b0eba21` /
`5b4d64afa788cf97ee1978f05defc242c3e65de5a10e09abc1a067e4321d526a` /
`c23a2e2bb88ff3807b6fcac5cf7be526d08cf4b475f9ef7d8f720186af94397b` /
`2fb535d981820fff90bcb9fa353b237e513d0b52ffafaa6b63dc4c7c677e57da`。
M8-20 实际验证
- 仅在 M8-01 至 M8-19 全部专项通过后更新 N-015 对应 VDB sliceslice 台账从
177/60 调整为 181/58N-015 全域仍保持 `parity BLOCKED`,没有把有限 Volume/VDB
能力推断成完整 Blender parity。
- `docs/CURRENT_EXECUTION_PLAN.md`、`docs/PROJECT_STATUS_AND_NEXT_WORK.md`、
`docs/status/N-015.md`、`docs/status/parity-ledger.json` 与 `docs/status/release-evidence.json`
的 M8/ledger/evidence 联合校验通过M8 正式计数为 20/20。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-01 实际验证
- 新增纯 `external-vfont` schema v1 校验器:仅接受项目内 `//fonts/` 路径、TTF/OTF/PFB
扩展名与 MIME 对、对应字体 magic bytes、32 MiB 大小上限和声明 SHA-256验证成功前
只复制 ArrayBuffer不调用 StorageClient、WebEngineClient 或任何 Main 写回。
- 真实 Blender `bfont.pfb`25,181 bytesSHA-256
`a33954fdab9fb09b9d308cb7f970518293128922ffc523c0a22b3b314a9a56c6`)通过;路径逃逸、
类型伪装、大小超限、长度漂移和 hash 漂移分别返回稳定错误码。
- `node --test web/tests/unit/external-vfont.test.mjs`unit 2/2
`WEB_TEST_PORT=5391 npm --prefix web run test:external-vfont`Chromium 1/1
`npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`、
`git diff --check`均通过production build 67 modules transformed。
- M9-01 protocol/Worker/unit/e2e SHA-256
`f313e344b7708196c323f1ab25f1aff4bdaf8cbc277bc7ff25166e0015f29114` /
`f8ea3d199b996970da437cac5c1727d2b1f4d2b73ff346dee7ba20568768ed09` /
`cc4ed4fb724563e6df8692e8777e4a241ee41712605c6154d6fca238f52b138e` /
`d0bbdc47b71e0442b4744ccfebddb2a687d3520f13a49dfdbac98f1b10a70d13`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-02 实际验证
- 新增外部字体导入事务:复用 M9-01 校验后,先调用 Storage Worker `putAsset`;只有 receipt
的 project、hash、bytes、MIME、source path 和
`projects/<project>/assets/sha256/<prefix>/<sha256>` OPFS 路径全部一致,才构造 Main 命令。
- WebEngine Worker 在进入 WASM 前重新验证 receipt、32 MiB 预算、base64 bytes、字体 magic 和
SHA-256Blender Main writer 从同一 bytes 创建 packed VFont并以原 `//fonts/` 路径发布到
SceneIR。存储失败注入确认 Main 调用为 0Main 失败时已验证 OPFS 资产保留为可清理孤儿。
- 首次 native 增量编译发现本分支 allocator 不暴露 `MEM_mallocN/MEM_freeN`;改用仓库既有
`MEM_new_array_uninitialized/MEM_delete` 所有权后,`cmake --build build_web_blender6 --target
web_engine -- -j8` 通过,新 WASM 已安装到生产 Worker 的 src/public vendor 位置。
- `node --test web/tests/unit/external-vfont.test.mjs`M9-01/M9-02 unit 3/3
`WEB_TEST_PORT=5395 npm --prefix web run test:external-vfont`Chromium 2/2真实 PFB 的事件顺序为
`storage:start -> storage:committed -> main:start -> main:committed`,新增 VFont 为 packed。
- `npm --prefix web run test:nonmesh-roundtrip`:既有 Font links、undo/redo、save/reopen 通过;
content-addressed asset Worker restart 定向 Chromium 1/1全量 unit 94/94、typecheck、lint、
production build67 modules、local-dependencies 和 `git diff --check` 全部通过。
- M9-02 protocol/orchestrator/Worker/Main/API/unit/e2e/WASM SHA-256
`44dea6d944f9ed891dd30f00bc4e03fdaf9e528ea97c911ea87036d131c6e0c8` /
`0f3801549dcffcf592e6f579cecf3fb97b78ccb1fc0b272a862ab11d062f77d8` /
`90dd37e3c94ec62b8f6dfc67acc3aa9c5fbe9a3114f0c553984e628419c3aaa4` /
`30f6d7edc394162fbdf9f8b404cc16f309fb2ad5cad9dada769b38221607d8ea` /
`6bfec5d5aca321c9c9694263648c763a295137cbfb03d7e13d4ad05907e3606e` /
`9ebd6f4628d59e919425ec4ddee8d3ca75445a69c5499402a3d3d3fd817e6e4a` /
`020b99560b4328f8593c2bc064867903b80229f2c36e7d7fa65d4f6a621e51e3` /
`a2e1f8bf1cd02c288538230bcc891d0208694fe97e0ea5dc32192580d671299e`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-03 实际验证
- SceneIR VFont 资源新增真实 packed byte length 与 SHA-256native reader 从保存后的 PackedFile
bytes 计算身份,协议对 packed/unpacked 字段组合失败关闭。外部字体导入只有在 Main 发布的
length/hash 与 OPFS receipt 完全一致时才成功。
- 新增生产字体样式替换协调器:先由 Storage Worker `readAsset` 复验 project、content-addressed
path、source path、MIME、长度和 SHA-256再以单次 `setFontLinks` 修改 regular/bold/italic/
boldItalic。missing metadata/bytes 稳定映射为 `NON_MESH_RESOURCE_MISSING`Worker 等其他故障不被
错报为资源缺失;缺失路径确认 Main 调用为 0。
- 真实 Chromium 完成 import -> regular replace -> undo -> redo -> save Project删除 OPFS font
payload 后,新的替换请求稳定阻断,但新 WebEngine 从已提交 `.blend` 重开仍恢复同一 packed
VFont、length/hash 与四项 links证明保存文件不依赖已删除源资产。
- `source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8`
通过;新 stable WASM 已安装到生产 Worker 的 src/public vendor 位置。
- `node --test web/tests/unit/external-vfont.test.mjs`M9-01 至 M9-03 unit 5/5
`WEB_TEST_PORT=5399 npm --prefix web run test:external-vfont`Chromium 3/3全量 unit 96/96。
- `npm --prefix web run test:nonmesh-roundtrip`Font links、undo/redo、save/reopen 通过content-addressed
asset Worker restart 与跨项目 orphan cleanup Chromium 各 1/1typecheck、lint、production
build67 modules、local-deps 和 `git diff --check` 全部通过。
- M9-03 protocol/orchestrator/SceneIR/Storage/native-reader/unit/e2e/WASM SHA-256
`2a2f8a3c5a86227ca294c03c032de48b6e539ccc798aad2f56bdc642711b5748` /
`d6e35eb562fd577c54d554c53e9be0c658e382742ee4d6129180fa908691b7ef` /
`8bb885fa49717e7c6d30f61b2fd130833e491afba9a7ff8d0904d9485c08070a` /
`09e307d619081329a0fbdc9c2af6698c62ead409c99d045c4cf96a9d06ec236c` /
`d81907dc5084bc9e033059e94aa47632a3d192ed3f9e1fbe3f7ae853928f0095` /
`8e1594d6e9b2aa6b33576f4c750e5899c6902a4725c5fba962a0bd99108ba536` /
`f15863e38b0da66be0d59d6afabdf6cab407159adb34f691c65de4b8035c04a4` /
`f8e89fbb8aef657798d557afe987d461025c8b19d6bd193365500400ae063a37`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-04 实际验证
- 新增纯 `curve-topology-editor` schema v1以 Blender 5.2
`source/blender/editors/curve/curve_ops.cc` 为算子来源,冻结 14 项 topology allowlist、selection
domain、参数名和每次 Main transaction 最多 1 个操作;未完成 Main/undo/save/golden 的算子全部
返回 `BLOCKED/CURVE_TOPOLOGY_OPERATOR_NOT_VERIFIED`,没有提前暴露到生产 UI 或 Main。
- 冻结 65,536 splines、1,000,000 points、100,000 selected elements、单次新增 4,096 splines/
100,000 points、64 MiB payload 和 subdivide 64 cuts 预算claim 绑定 base revision未知算子、
stale revision、重复/跨域 selection、未声明输出增长、非法额外字段和预算超限均稳定失败关闭。
- 审计草稿时修正稳定 ID 合同Curve Main/SceneIR 数据 ID 只接受 `curve:*`,拒绝误写的 `data:*`
空输入域不再把索引 0 当成有效选择。浏览器 Worker 明确报告 `CONTRACT_ONLY_NO_MAIN_OR_UI`。
- `node --test web/tests/unit/curve-topology-editor.test.mjs`3/3 通过;
`WEB_TEST_PORT=5400 npm --prefix web run test:curve-topology-contract`Chromium 1/1 通过;
`npm --prefix web test`:全量 99/99 通过。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build` 和相关
`git diff --check` 均通过production build 67 modules transformed。
- M9-04 protocol/Worker/unit/e2e/Blender source SHA-256
`2bf5bbda49ac96af55c5d9b4267773c7c7657c74bd6d23586b4d9fb1d8d5028c` /
`7b57c159788a660f2e3ae6b83b5332de325f8c857e2c1489f061463f49e43189` /
`ae8385cf698f899639b0037b0d9a529d4c9e9a01d3a91c4b4dca8c8a4dc7b420` /
`5f511706f18fa294fe385bbad6b24dab4e4376709a5d19f8ad54e52acc3b2d65` /
`b355f035482ce4e667bb08222cfc2d0967205b7e6a3b0fb5a63be81ff0c8cb8e`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-05 实际验证
- 仅将 `TOGGLE_CYCLIC` 从 M9-04 的 BLOCKED gate 提升为唯一 READY operator生产 helper 先生成
revision-bound claim再生成只含 `cyclicU` 的单一 `setCurveTopology` Main 命令,所有其他 13 项
算子仍没有 UI 或 Main writer 暴露。
- 新增官方 Blender 5.2.0 golden 生成器 `tools/web/generate-curve-toggle-golden.py`:对真实
`tests/files/web/nonmesh_scene.blend` 的 `WebCurveData` 第 0 条 POLY spline 翻转 cyclic U另存
临时 `.blend` 后重开golden 固定 fixture SHA-256 `ae8ef85d606aa120ce6b7611fc03407fd80bb60311e94a6ef73f6384d0b6c8b4`、类型 `[POLY, BEZIER]`、点数 `[4, 3]`、
`false,false -> true,false`,生成器复跑与提交 golden 逐字节一致。
- App Properties 只在 gate READY 时显示 `Cyclic U` checkbox真实 UI 操作通过 WebEngine Worker/Main
执行一次 revision 递增,随后 undo/redo 各自产生新 revision保存到 OPFS 后关闭/恢复仍为 golden
的 `true,false`。修复了 topology/undo/redo 返回时错误覆盖用户 active Curve 的 UI 状态;权威几何和
revision 仍来自 Main snapshot。
- `node --test web/tests/unit/curve-topology-editor.test.mjs`5/5
`WEB_TEST_PORT=5403 npm --prefix web run test:curve-topology-operator`Chromium 2/2contract +
Main/UI/undo/redo/save/reopen`npm --prefix web run test:nonmesh-roundtrip`:既有非 Mesh 原生
Curve/Surface/Font/MetaBall/Volume roundtrip、undo/redo/save/reopen 通过。
- `npm --prefix web test`:全量 101/101`npm --prefix web run typecheck`、`npm --prefix web run lint`、
`npm --prefix web run build`、`git diff --check` 均退出 0production build 68 modules transformed。
- M9-05 protocol/App/Worker/unit/contract-e2e/operator-e2e/generator/golden/package SHA-256
`41791ff197406b6b4b7579e55639b9770ec5fa3dc874d2401f1bf7c008f48978` /
`c04ebb59ec8092258e5df5832d6650d04f54d68ac7c72fa66c03827de7c4f070` /
`2c3cddc78339001d082333a9c7d8514fbe4ea15fb1d495402cf3e4f6837b1f16` /
`097590221adb362058de55efae4f2ea3af4855f20a581ecba92df85fb1e4a412` /
`ccde87fad3025c3e7525b80a59796403df38b6d9cbee88a3b464b3982c4597d5` /
`71677b2b59c5c1639f2c0fa4db66883b872b225eb77c43c7a70efabd522ad17a` /
`193b87f42977b6e0bc1c46f47d882c073070d797183777eafe123f24af1da6ec` /
`0a487bd73c40afdc969f5a90d3289e14f116b10b3bfeb0655fa312f7d2848655` /
`c90a759788b98adc5011cf68dd510838b0fe6bea4fc12f862af950851783eac6`。
- 首次 Chromium 失败证据不计入 READY第一次 toggle 后 Main 返回的 active object 覆盖了 UI Curve
第二次确认 toggle 成功后 undo 同样触发 active 丢失;修复后从 `WEB_TEST_PORT=5403` 全量 2/2
重跑通过,没有保留失败报告作为成功证据。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-06 实际验证
- 新增 `grease-pencil-marquee` schema v1请求绑定 Main `baseRevision`、当前 data/layer/frame/drawing、
归一化 viewport box 和最多 1,000,000 个候选;候选必须携带稳定 drawing/stroke/point ID
drawing、重复 point ID、同 stroke ID 映射多索引、伪造前缀、非法 box、stale revision 和超预算
分别返回稳定结构化错误,框外候选不会进入结果。
- Blender Main reader 现发布 `activeLayerId`、必需 stroke ID 与 point IDpoint ID 由
data/drawing index/stroke index/point-local index 构成。文件未保存 active layer 时SceneIR 只读
快照确定性使用首个实际 layer不修改 Main真实 fixture 的四个 point ID 经保存重开保持一致。
- Three.js Grease Pencil proxy 同时保存 drawing/stroke/point stable ID点击、高亮和多选去重改用
stable ID几何索引只保留给当前帧 writer 定位。marquee 只遍历活动、可见、未锁定 drawing 的
point proxy拒绝 onion、其他 layer/frame/drawing 候选。
- App 新增真实框选工具和可见 drag rectangle主线程直接投影候选OffscreenCanvas 通过 Worker
使用相同投影/helper/合同并回传相同 result。两条路径均选中真实
`modifier_grease_pencil_scene.blend` 的 4 个 point ID 和 1 个 stroke ID选择前后 Main revision
不变。
- `source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8`
增量 C++/WASM 构建通过;生成 JS/WASM 已同步到 `web/app/src` 与 `web/app/public` stable vendor
两处逐字节一致。
- `npm --prefix web run test:grease-pencil`native layer/frame/stroke transaction、undo/redo、
save/reopen 及 stable ID 通过。
- `WEB_TEST_PORT=5404 npm --prefix web run test:grease-pencil-marquee`unit 3/3真实 Chromium
主线程/OffscreenCanvas 2/2。
- `WEB_TEST_PORT=5406 npm --prefix web run test:e2e -- --workers=1 --grep "N-016 Grease Pencil"`
既有 schema/onion/双视口/点击/gizmo/layer/frame/point/Worker restart 12/12。
- `npm --prefix web test`:全量 104/104`npm --prefix web run typecheck`、`npm --prefix web run
lint`、`npm --prefix web run build`、`npm --prefix web run check:local-deps` 和 `git diff --check`
均退出 0production build 69 modules transformed。
- `npm --prefix web run test:status-consistency` 与 `npm --prefix web run test:release-evidence`
12 parity BLOCKED、0 release blocked、17 evidence records、0 missing、release `READY`。release
evidence 首跑发现前序 M8-20 将 `C3-volume-combined-asset-viewport-reopen` 与
`E2-vdb-large-stream-device-loss-oom` 移入 completed 后仍残留于 N-015 `v1ExcludedSlices`;只移除
两个过期 excluded 引用并同步 evidence family/hash不改变 completed/blocked、evidence record 或
release claim随后两项检查均重跑通过。ledger/evidence SHA-256
`4d0c3cd7b53103f37a5cc604b507307618d591338620c2beff972d556654cf58` /
`f65a7e43ccb2b71ba6309d6b44d0f0e5deb01e12f85cd2bb8de7bf787e710107`。
- 未计入完成的首跑失败marquee unit 初次因候选复用 drawing-only 精确字段解析为 1/3投影
drawing 字段后 3/3 重跑native roundtrip 初次发现 fixture 无 active-layer 标记,增加只读有效
layer fallback 后重编译通过N-016 聚合初次 11/12 是 blocked 摘要夹具清空 layers 后仍继承
activeLayerId修正负例并从头重跑 12/12。
- M9-06 native/SceneIR/marquee/App/GP-adapter/main-viewport/Offscreen/protocol/Worker/unit/e2e/
native-check/package/WASM SHA-256
`45e54e9f2d4a6157d8298f3432fbbe4281e44d6c8190712edca5e22c5a4ca831` /
`d2885203b6c138067b94b13c6f03c68769c2853317d32b6d7d9718ab5d1e6c28` /
`1e97396358b09a380c149ff5ed75b7b2dbfbd2beae49376e0b0ff3024e9a53a6` /
`c0860527a27e568432f618bb0a69b57e2ec03e77e3c231272763deedb4fe7b2f` /
`83a03a9626fd4434be1c18099aea29eba070bba9ae45ff109d47feace274ad99` /
`de061f817f722a5850393f5d1903ed13fa7cf43a8bbbb8f809aca2ccafc583f0` /
`955ba945e0155b2ef2ade573ac32bf9e2ad2153ec690efd18cb10a8d34cfc495` /
`4874e9bbebe35feeab73b8cfcc3b0259738b86fad21a180cb9d3a1ccde7a7e0b` /
`fb6f03491fa5421dc99555bb7db23f9ed69bd01bcc273ec169e8b8e75dee7d79` /
`460fe70ceaca4ffae11d99abe0b47c97d80fffb2b47182a0899a4f7d05c8db46` /
`abcd92e29eb08debb64f5a90e153d12348fc370f15a86b808412c5297fa4d83e` /
`55ba74a1544b946c7a5ed6f931649928bdabdd32a299866dc34a7cbe9649590a` /
`a2cf86a99737a92088eb9085f1673746c64bcc8091712a68110610c522426528` /
`d65c4680359b35300ea148ddd5e11f765eab241e7fe40d1d5f30d9bd2e3f1b23`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-07 实际验证
- 新增纯 `grease-pencil-selection` schema v1当前 data/layer/frame/drawing、稳定 point/stroke ID、
selection source 和独立 revision 构成唯一状态REPLACE/ADD/TOGGLE/CLEAR 均绑定
`baseSelectionRevision`。stale revision、跨 drawing、重复 point ID、同索引多身份、同 stroke ID
多索引、伪造前缀和 1M point 超预算均在 UI 状态发布前失败关闭。
- Properties 新增真实 2D point canvas按当前 drawing 的 XY 坐标绘制 stroke/pointpointer 与键盘
点选进入同一 selection transaction。App 不再让 2D/3D 各维护一份 point selectionSelect All、
重选同一对象、工具模式和关闭项目也与中心 store 保持一致selection revision 与 Main revision
明确分离。
- 主线程 ViewportRenderer、Offscreen wrapper/Worker 的 point pick 和 marquee 都携带发起时的
base selection revisionOffscreen 仅在实际应用 point 高亮后回执 revision/point IDs。迟到结果
由中心 store 返回 `REVISION_CONFLICT`,不会覆盖更新后的 2D/3D selection。
- 真实 `modifier_grease_pencil_scene.blend` 在 2D canvas 先选 1 点,再由 3D current-drawing marquee
选择全部 4 点selection revision 为 `0 -> 1 -> 2`source 为 `CANVAS_2D -> VIEWPORT_3D`
2D canvas 与主线程/Offscreen 3D 高亮回执一致Main revision 全程不变。
- `WEB_TEST_PORT=5411 npm --prefix web run test:grease-pencil-selection`unit 2/2真实 Chromium
主线程/OffscreenCanvas 2/2。`WEB_TEST_PORT=5410 npm --prefix web run test:grease-pencil-marquee`
M9-06 unit 3/3、双后端 2/2`WEB_TEST_PORT=5412 npm --prefix web run test:e2e -- --workers=1
--grep "N-016 Grease Pencil"`:既有 N-016 聚合 12/12。
- `npm --prefix web run test:grease-pencil`native layer/frame/stroke、undo/redo、save/reopen 通过;
全量 unit 106/106、typecheck、lint、production build70 modules、local-dependencies 和
`git diff --check` 全部退出 0。
- 未计入完成的首跑失败:`WEB_TEST_PORT=5407` 的测试坐标未先滚动 Properties canvas 到可见区,
pointer 未触发;补 `scrollIntoViewIfNeeded` 后 `WEB_TEST_PORT=5408` 暴露 UI 将含 point/stroke
额外字段的引用直接传给 drawing-only 精确解析器。协调器显式投影四个 drawing 字段后,
`WEB_TEST_PORT=5409` 2/2完成 Select All/重选/关闭状态收口后从 `5411` 再次全量 2/2。
- M9-07 selection/marquee/App/CSS/main-viewport/Offscreen/protocol/Worker/unit/e2e/package SHA-256
`7e19b049581edaa984abe7c0f5e6432d4aaca9514afce1060f3136544788aa50` /
`cef77a20b0dc05595adcb160fd4cdb4d9b426d717c714a94f2af7b23b35593ab` /
`bb5c38ad0ed4c1088e205fee2f75b4b14b96b8d337724e1e5d9e2762c56737be` /
`c88c6484e3cad1c86e2deaa0536a20bc3c46dffdb64f6af744e904fa355da506` /
`d1328dc803557b7c42e52d03394a01d79a9ace1aecbf7af28ee08813c975f028` /
`18985f06b83d6ad71cae2e3535e01d45644114b8d12b00d8d547eb77d047bdb1` /
`a69d98e602a0141517dac78fdac2c605d8a032301be104450d84ed502040889b` /
`a822ab87dd69849614a34eca015666284145a1c9d5782ccf7a18c4ab0ec64abd` /
`104785b5e5af27a43e5178a26e6ba130ff35cf6bf082b5816a0528a6e0ce3f07` /
`b83862a4c23d89a279c99f186d43af62a80905d368b46b0a2d5cd7a0ecdb1912` /
`a9e293a04c7aaa3ebdf04958deba60cf5317d4f850d96659cfe5b24cac282310`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-08 实际验证
- 新增纯 `grease-pencil-reorder` schema v1layer move 绑定 data/layer stable ID、方向和 Main
`baseRevision`frame move 额外绑定 source frame、target frame 与 drawing stable ID。stale
revision、边界 no-op、伪造 drawing、已占用 target、相同 source/target、非法额外字段和超出
正负 1,000,000 的帧号均在 Main 前稳定失败关闭。
- Blender Main 新增 drawing-preserving frame moveWorker 进入 WASM 前以当前 SceneIR/revision
二次校验。Properties 的 layer 上下移动和 target frame 移动均只提交一次 Main transaction
undo/redo 后 revision 单调推进;保存到 OPFS、关闭并恢复后 layer 顺序、frame 12 与原 drawing ID
保持一致。
- 官方 Blender 5.2.0 golden 生成器以真实 `modifier_grease_pencil_scene.blend` 新建 `Web Drafts`
layer/frame执行 layer DOWN 与 frame `1 -> 12`,另存并重开;重新生成结果与提交 golden 逐字节
一致fixture SHA-256 为
`3a8525077807f9178dac3a5ba84b524e5f8e80874b15c54e2a6658ecb80315a3`。
- `source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8`
返回 `ninja: no work to do``bash tools/web/install-web-engine-assets.sh` 校验 single/pthread
manifest 4 项资源通过。
- `WEB_TEST_PORT=5416 npm --prefix web run test:grease-pencil-reorder`unit 2/2真实 Chromium
Main/UI/undo/redo/save/reopen 1/1`npm --prefix web run test:grease-pencil`native
layer/frame/stroke、undo/redo、save/reopen 通过。
- M9-06/M9-07 回归marquee unit 3/3 + 主线程/Offscreen 2/2selection unit 2/2 +
主线程/Offscreen 2/2`WEB_TEST_PORT=5417 npm --prefix web run test:e2e -- --workers=1
--grep "N-016 Grease Pencil"`:既有聚合 12/12。
- `npm --prefix web test`:全量 unit 108/108typecheck、lint、production build71 modules
local-dependencies 和 `git diff --check` 均退出 0。N-016 仍保持 parity `BLOCKED`,完整 group
hierarchy、frame duplicate、2D stroke/segment/lasso、完整 Dope Sheet、modifier 和 desktop
drawing golden 未被本任务扩大声明。
- M9-08 protocol/App/Worker/Main/API/header/stub/unit/e2e/generator/golden/package/WASM SHA-256
`630286c6243295d55ce7ff99125518086321e8fde6cbc6481b4775f1081cee19` /
`c80d082e8d2e26efe440d6e9dae994b20458003cbb27f5172581068d7a477320` /
`3c692df2bf13df4214c498f5a9b1ceb2a687e24104c18e5d5bba8fc2be913784` /
`8b0e607b94507c0cae4e973a42f223a56fef1d8cd4fcf6773c5bdca065bedfee` /
`feed5740701794914fbd1f8a93113d0913ebc4feb187adc858746c888fcab4ab` /
`078836b7c19d5c90e74909c93c4d0b73d5eaa2010a3394517bbe40db358f84d5` /
`8575b407b4b1bcd119d3d9d02d0344cdcfdb527542a6c1000786183fb8e7e6b7` /
`7e28bb4292b1d81f4b04f7eaca25a759f98a809eac3f3cb3c566dd49cfaee70a` /
`60824eff69e49883954df4b01f49642666eeb97cc48477f418d3239f1c69180f` /
`b19c3c2cdb94e026b888ca9c659cc9981735053fe3d74c037850e81bfa68cea4` /
`922ce1bcacd788983ad6e3d855b8477653c0f0acda45b49e11e46925a8afb7c4` /
`dd7ee25e51cef9fbf9ff226fc26b349c1f883774bfd944b890d13c83e47cabaa` /
`e9c285a35dffd17f577087df5dfa08719575850d37b01a6c70523b79084ab8eb`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-09 实际验证
- 新增纯 `paint-depth-visibility` schema v1请求绑定 object/mesh stable ID、Main revision
和最多 100,000 个顶点索引返回绑定后端、RGBA depth readback 尺寸/字节数、
遮挡像素数和可见顶点。stale revision、伪造 ID、重复/越界顶点、未声明字段、
非 GPU source 与 64 MiB readback 超预算均在发布结果前失败关闭。
- 主线程 `ViewportRenderer` 和 Offscreen Worker 都使用同一生产 helper在真实
WebGL2 `WebGLRenderTarget` 中以 `MeshDepthMaterial/RGBADepthPacking` 渲染当前场景,
再读回 GPU RGBA depth 与候选顶点的投影深度比较;没有使用 CPU raycast/proxy
冒充可见性。资源、scene override、clear state 和原 render target 在成功/失败路径均恢复。
- 真实 Chromium fixture 在相机前方构造大遮挡面和后方三角形;主线程与
OffscreenCanvas 均只返回前方 `[0,1,2,3]`,后方 `[4,5,6]` 被 GPU depth 排除,
两后端结果一致stale Offscreen 请求返回 `REVISION_CONFLICT`。
- `WEB_TEST_PORT=5418 npm --prefix web run test:paint-depth-visibility`unit 3/3真实
Chromium 主线程/Offscreen 1/1`npm --prefix web test`:全量 unit 111/111。
`npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`
和 `git diff --check` 均退出 0production build 73 modules transformed。
- M9-09 protocol/GPU-helper/main-viewport/Offscreen/protocol-worker/Worker/unit/e2e/package SHA-256
`def08629f9957bf2f31b58c6426ed0dd736fdf947fd40d0875a20d516f1fbe16` /
`b8b9c3960a06af9571323b273589848bdd0033d0dbba351994fcc08c97058830` /
`bef752dd255ffe0a0119cd51f9f9efcbd503692094fcb6fe7ecebe0d1fc33c69` /
`8a236d979d8f25f420e84919c0812f057dbc4cfd32d9914292abc3625be458af` /
`ff397e06638bef71e0435222dbc1e6d0550699f3208429937a7a4c73bc8027d8` /
`3e1540a1e931ebf56544202ae2c8febc1a9a5c34408a4b33f2f154db682c5129` /
`a781cd40c3e773e8cf8991af5e16c70e3c4aa82a8b0847ab381d7fe36eab66a4` /
`20afebca07bc5ac89525690b40372386f7d78b9bf579b77316f5143e9f7a6d1f` /
`d6acbd199bd0b33405c1d96a6a05ce4b4724d0502101ae8f214b0d6830f251b2`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-10 实际验证
- 新增 `paint-stroke-session` schema v1 与 Worker 内有界事务:`BEGIN` 绑定
`paint-pointer:*` session ID、Main base revision 和 vertex-color/weight 目标;最多 4,096
个连续序号 chunk、单 chunk 16,384 项、整笔 1,000,000 项/64 MiB最多同时
8 个会话。跳号、重复索引、非法数值、声明 chunk 数漂移和 stale revision
均在 Main 前失败关闭。
- 每个 chunk 只进入 WebEngine Worker 缓冲,不调用 WASM同一顶点跨 chunk 重复时
确定性 last-write-wins`COMMIT` 按顶点索引排序后生成唯一
`setVertexColors`/`setVertexWeights` Main 命令。`CANCEL` 直接释放缓冲,打开新
`.blend`、Worker restart 或 shutdown 也不会保留未提交会话。
- 真实 `attribute_scene.blend` 在 Chromium 中提交 2 个 chunk/5 个输入/4 个唯一
顶点chunk 期间 Main revision 不变commit 仅 `r -> r+1`。一次 undo 移除整个
`M9StrokeColor` 属性,第二次 undo 稳定返回空历史redo 恢复整笔cancel
会话前后 revision 不变。
- `WEB_TEST_PORT=5420 npm --prefix web run test:paint-stroke-session`unit 4/4、真实
Chromium Main/undo/cancel 1/1`WEB_TEST_PORT=5421` 的 M9-09 双后端深度回归 1/1。
`npm --prefix web run test:paint-roundtrip` 的 color/weight normalize/mirror gate/undo/save/reopen
全通过;全量 unit 115/115、typecheck、lint、production build73 modules
`git diff --check` 均退出 0。
- M9-10 session-protocol/WebEngine-protocol/client/Worker/unit/e2e/package SHA-256
`7c33e1f9df475a741cb78f69b044d4ddc3797b08bc7467f5bd1e16d85cea7808` /
`aeeaba3bfef4d2b1924b15f6bd9fc3028c1144b9202f29a0b9aa04576cf9fcd7` /
`71d0c9e25da3f478f18f34f3f5131526d566f0365aa88ec8078d6a32d5879dc2` /
`714347cc7b448067742ddb36d0dc1ace26fd9520c9d3112310e67bf331e17ce8` /
`3ee03cd9cb8082d7b1330df9c4d6fcb310f01a696d1aa43ca885652cea3b5796` /
`ab9077bc4f7efc574f49388b2e1e4fe1342ea1ff7a110f4695e3476ce78df3f5` /
`1b5e7aa17c54240d992a5fb61bfac109656bb438f4cdfa736cc3caf1c223be1b`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-11 实际验证
- 新增 `texture-paint-asset` schema v1target 绑定 project/image/texture asset、
packed 或 UDIM tile 1001--1999、Main revision、尺寸、PNG MIME、SRGB/LINEAR、
project-relative source path 和 base asset SHA-256dirty patch 必须与同一 tile/revision/
dimensions/color space 完全一致。
- Storage Worker 从已验证的 content-addressed packed PNG 解码真实 RGBA8复用
`applyUdimTilePatch` 复验 base/result pixel SHA-256 后重新编码 PNG。新字节先通过
OPFS 临时文件、content-addressed 命名和回读 hash然后才在 IndexedDB
`setting` 单事务把 tile binding 从旧 hash 切换到新 hash。
- 注入 `after-asset-write` 故障时,新 asset 可成为后续可清理孤儿,但已发布
binding 的 generation、asset/pixel hash、path 和 updatedAt 逐字段不变;旧资产仍
可读。成功重试才从 generation 1 切换到 2每个 tile 独立序列化。
- 真实 Chromium 对 2x2 packed tile 1001 先写红色 dirty pixel、故障注入写绿色、
成功重试;同时对 UDIM tile 1002 写蓝色。新 Storage Worker 重建后两份
binding 与解码像素逐字节恢复。
- `WEB_TEST_PORT=5422 npm --prefix web run test:texture-paint-asset`unit 2/2、真实
Chromium packed/UDIM/OPFS/binding fault/restart 1/1全量 unit 117/117。既有 paint
Main round-trip 通过;`WEB_TEST_PORT=5423` 的 content-addressed restart/quota/
cross-project cleanup 4/4 通过typecheck、lint、production build73 modules
local-dependencies 和 `git diff --check` 均退出 0。
- M9-11 texture-protocol/paint/storage/error/client/Storage-Worker/OPFS/unit/e2e/package SHA-256
`f85bcc0e1a8445d6e83846a841d8e201c41de8e7e307132565bfec3d7a3f5ab9` /
`76db7c4ff146d929571d7b58f66faf4e2a2f3c8d6cc2d3fca937a17be8b5f827` /
`77482c74d71bcca9aaf57d96ec0c201698fe9c887d85c5681edcea354417e23c` /
`36868e5278ab11509fc744719bd8e058934ff922675a6901f4a52587a709fa2f` /
`67b228bd0e5e81fa34ab198feefa1430454807e85460dea70ecb5a9ef09dbb66` /
`b6bcce466257fef0ea2d53ef894f2cc455e03834302576ab1230ff38da0241da` /
`74c63f14bef3ddbf60d1106519b3c9cdf370702cb1427e13e59670175d16b840` /
`c3796e4bbfab3ed70f897e2682eec5c9e6a5ba166dc2fea24da553ebf411f47b` /
`3b4299d5319dbbf0839a04ee55962d30f448202c88747ebdabb9bbe1c07031cd` /
`8d71d52be5b32b54a45b2c6dab6ed46c8edecf8dac7d600b8d1a64f3e32a4ea8`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-12 实际验证
- 新增 `WeightPaintOptionsIR`/bounded helper`normalize`、`limit`1--32、`mirror`、
`mirrorAxis`X/Y/Z和 `mirrorTolerance`(0,1])进入 schema重复顶点、越界值、
非法组合和超预算输入在 Worker/纯协议层结构化拒绝。已有 pointer-session 目标可选携带
同一策略commit 仍只产生一个 `setVertexWeights` Main 命令。
- Blender Main `setVertexWeights` 的固定顺序为写入/移除目标组 -> verified local-coordinate
reciprocal mirror -> limit lowest influences -> normalize all remaining influences。镜像先
建立空间桶并验证每个顶点的反射 counterpart 和 reciprocal identity无法验证或超过 100k
顶点稳定返回 `CAPABILITY_MISSING`/`PAINT_BUDGET_EXCEEDED`,不修改 Main。limit 与 mirror
的 affected vertices 一起进入同一 undo/save transaction。
- 新增 `tools/web/generate-weight-paint-golden.py` 和 `tests/golden/M9-12/weight-paint.json`
使用官方 Blender 5.2.0 LTS 在 `rigged_shape_scene.blend` 上生成 initial、normalize、
limit-normalize、mirror 四个逐顶点 group weight 快照;`check-weight-paint-golden.mjs`
对 WASM snapshot 和 save/reopen 逐项比较,误差门 `1e-6`。
- Properties Paint 面板新增 normalize、influence limit、mirror 和轴选择Apply Weight
将这些选项直接提交到 Main未引入 UI 副本或绕过 revision/undo 协议。
- 验证命令与结果:
`source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8`
通过Blender 头文件既有 4 条 char conversion warningstable `web_engine.js/.wasm`
与构建产物同步后,`npm --prefix web run typecheck`、`npm --prefix web run lint`、
`npm --prefix web test`120/120、`npm --prefix web run build`73 modules
`git diff --check` 均退出 0。
- `npm --prefix web run test:paint-roundtrip`normalize/limit/mirror/undo/save/reopen 全通过;
`npm --prefix web run test:weight-paint-golden`Blender 5.2 golden 四步、WASM 与重开全通过;
`node --test web/tests/unit/weight-paint.test.mjs web/tests/unit/paint-stroke-session.test.mjs`7/7。
- 未计入完成的首跑失败golden 首次使用旧 stable WASM 导致 limit 结果未更新,定位为构建
产物未同步到 `web/app/src/vendor/blender`;同步后从头重跑通过,未保留失败结果为 READY 证据。
- M9-12 protocol/native/UI/worker/golden/unit/package/WASM SHA-256按上述文件顺序
`edbf8e9ef9270c6ca36b88d3ebccbe138c37c52e717556aaf35ef0e0d24677cc` /
`915be99077af68e456d799a786476cd7ed92628089713327df36f56e31b92791` /
`6ade55f27ea68bbe68c4ceb3a1cd728376b537fe023271a7c962b65883074b3b` /
`d7f8a6c9aae526f9cc744b584aa99b716eb1a3ebe57b3a87141dde65cb813b89` /
`0a34ba598336b87e82dc14e284050be77e2ee92bd32ec266c35fad443387009d` /
`d54dcf6a2403152579e22f60353f07907e422317f9778fa4c9fdd1a5927e9883` /
`3b9d1805ee80ad1efa0f483c3dab4faabffb834fe6f7b596a0f6f565f48c906a` /
`e97b9ef38064cce235d179fd8c547305a2c1195a5cffdfe4b5fde1135bf71b14` /
`76d9cf460e4d9571464951036fe7dd9fa7abc9937fc1cfca6da0acf8ebb6e5a5` /
`15edc2b3849efa6b7ee7940ba479d009e0a6c354337f7feabc00994fd16b5c8b` /
`0418284f19eb94ecc3d76f00dedbbab9a332d60a32f25f452f1dedfcc694aca3` /
`6ec17c56d361216128e982bb2de622435b7927680efddba8107445841a17901b` /
`4ce0c45d59f64c8838e3ee0e8f16039b7652212b2b80ac9a2ea77070e1f9dbaa` /
`966c5b20af5e5c66fc161a56d2dc27b431a35c993f0dbc09a089359d1a076fea` /
`9b6d30050d199f7aa9cd6ea4b6a0079808cb39652144b6ac4c3dbf5b9c39210e` /
`94602f0ee8f0b954f1d6d3dd07c955880a4cc32b731ebfb14349251517de066e`。
- 生产双 variant 重新构建并安装成功single WASM `6e096facf58911f01bff0fa2a649b3b77bdc98cbb8b06533d067583f2902ae21`、
pthread WASM `6463dc2afb84a64c7d1f4159acc93440e02be83f8a8f246fc96c92b238962553`manifest
`938619cee619d578165eb33dcd445f22e34d5d3c8fa521d42697eabc98cf646c`stable full-Main
检查入口继续绑定 `build_web_blender6`,避免把 native smoke stub 误当作 Main 写回证据。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M9-13 实际验证
- 新增 `paint-pbvh-capability` schema v1以 Blender 5.2 `DNA_brush_enums.h` 冻结 46 个活跃
brushSculpt 32、Vertex Color 4、Weight 4、Texture 6。请求严格绑定 operation、domain、
brush、object/mesh stable ID 和 Main base revision未知字段、伪造 ID、跨域 brush 和 stale
revision 在能力结果发布前失败关闭。
- WebEngine Worker 直接检查生产模块是否导出 `_web_engine_apply_pbvh_stroke`stable、single、
pthread 三个 JS glue 均确认未导出,因此全部 46 项稳定返回
`N-017/BLOCKED/PAINT_PBVH_UNAVAILABLE`。没有把 uniform-grid、GPU depth 或 bounded patch
冒充 PBVH即使未来出现同名入口session context 和逐 brush desktop/WASM golden 未就绪时
仍分别返回 `PAINT_PBVH_CONTEXT_UNAVAILABLE` 和 `PAINT_PBVH_BRUSH_UNVERIFIED`。
- 真实 `attribute_scene.blend` Chromium 逐项查询 46 个 brush查询前后 Main revision、live
handles 和 WASM allocated bytes 完全不变。stale 请求优先返回 `REVISION_CONFLICT`;绕过
TypeScript 注入 `proxySuccess` 的请求返回包含 code/severity/message/recoverable 的标准
`PAINT_SCHEMA_INVALID`,未进入 Main。
- `WEB_TEST_PORT=5427 npm --prefix web run test:paint-pbvh-capability`unit 4/4、真实 Chromium
1/1`npm --prefix web test`:全量 unit 124/124。`npm --prefix web run test:paint-roundtrip`、
`npm --prefix web run test:weight-paint-golden` 和 `WEB_TEST_PORT=5425 npm --prefix web run
test:paint-stroke-session` 均通过,确认既有 bounded Paint Main/undo/save 路径未回归。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`、
`npm --prefix web run check:local-deps` 和 `git diff --check` 均退出 0production build 73
modules transformed。M9 进度更新为 13/14N-017 仍为 parity `BLOCKED`、V1 release `READY`。
- 未计入完成的重跑失败:`WEB_TEST_PORT=5426` 功能结果全部正确,但 E2E 对标准错误对象做整对象
比较时漏写预期 `message`;补齐稳定消息断言后改用新端口 5427 从 unit 到 Chromium 全量重跑通过。
- M9-13 protocol/capability-gates/error/WebEngine protocol/client/Worker/unit/e2e/package/Blender
inventory/WASM SHA-256按上述文件顺序
`749eb772f0cdeb0fe79c058391a47fdf680dc331db300a91a22d324e535f32c5` /
`8702afe367fd62d39868156b74e69eb46bbf0c522e30d847dae02459fcb25c45` /
`a15d9e2d3e84884245505d18226f9e1484469d8313aa6534aff480fa4746264d` /
`8bcbe72bc02ebd2af73e92657093697ef513f8e0fc31ea17f5967d3fd2c8ed6b` /
`7627509efe48ff377e72d0cc8c144b7858e784a23733e07b26438a5c4975166b` /
`4a65547e6b1fea16a120b4e72eb37d4d9f7c7ced4342f535796535262ff65fcc` /
`a2efa988f50a3e4ea9363021130798d6bf7b8ed1669a980b879197f9c3fb5bff` /
`03d13687f78995fe6ae4c683ece3783be77217daf8ec85df66e77451717a7729` /
`38a9a0ba0c7ee6b6435209965af4498377c245c4f197f2c3534358103047009e` /
`c56dfd81a52096c32a9f3c7756f8b86599906763fad33d26f5a9bf52e4fbfa39` /
`94602f0ee8f0b954f1d6d3dd07c955880a4cc32b731ebfb14349251517de066e`。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
关键当前构件
- binary archive SHA-2568af6c782b8e4b31020219597b821160b7634439749c455fd31d9d919676e2e2e
- source archive SHA-256ee09b3e43e715b3d5497573bbf63a449cbea146150d56c08c6506afd5fce2871
- SBOM SHA-2567d0fb22790c44bada5f01e5ebc12f6050e1c0436a53f58dceb2e979c17bb593a
- RC manifest SHA-256862d332b3c931cb5c0898bb7f66e02f0dd4562053b18d0c87a7cea390ebaacdf
- M6-17E rehearsal report SHA-256b953dd89165b5dd9260d75c7ec6e982a69cfeea358fbc2ce35c75e99544cac2c
- quick/Chromium/release report SHA-256dcaa32be911fa7ed36127b5cb1458bb07dcca19d562cabc64e022f13b094f911 /
90b19d057957f1edce264c7137f89d6701643e46feb88001054eea1bf0a18eb5 /
7d28a5018b78ba45935f832388d6b4e632c6198476a2fdcb4a0abef3066c5ec6
- HEAD commit7c16b279d52899d2494e64d58ba9897a9b69dabc
M9-14 实际验证
- 新增 `web/protocol/editing-domain-recovery.ts` schema v1固定 `CURVE`、
`GREASE_PENCIL`、`PAINT` 三个编辑域的 baseline identity、Worker restart、OOM、GPU
release 和 small-scene evidence。解析器严格校验 SHA-256、稳定 data/object ID、
revision/hash 关系、`GPU_GEOMETRY_UPLOAD -> GPU_GEOMETRY_BUDGET_EXCEEDED` 映射、
token 资源清理、一次 release/一次 reinit 和非空像素;重复域、身份漂移、释放次数漂移均
稳定拒绝。`summarizeEditingDomain` 只收集当前可见且属于目标编辑域的对象。
- 新增 `web/app/src/testing/editing-domain-recovery.ts` 真实 runner。Curve 使用真实
`setCurveControlPoints`/`setCurveTopology` Main writerGrease Pencil 使用真实整帧
`setGreasePencilStrokes`Paint 使用真实 `setVertexColors`;每域保存后由全新
`WebEngineClient`/Worker 重开并以 identity hash 复核。由于新序列化 `.blend` 的 Main
logical revision 从基线重新开始,恢复门以内容 identity hash 为权威并记录 revision reset。
- OOM 阶段使用 token-isolated `OOMFaultSession`:先保留一个可释放 GPU lease再在
`GPU_GEOMETRY_UPLOAD` 注入失败,关闭 session 后 live resources 为 0、released bytes
大于 0未授权 token 不能消费 fault session。GPU 阶段分别创建 Curve line、Grease Pencil
points 和 Paint mesh 的 WebGL2 小场景,释放 geometry/material/renderer 恰好一次,再创建
新 renderer两次读回均有非零像素。
- 新增 `tests/golden/M9-14/manifest.json`、`web/tests/unit/editing-domain-recovery.test.mjs`
和 `web/tests/e2e/editing-domain-recovery.spec.ts`package script 为
`npm --prefix web run test:editing-domain-recovery`。
- fixture SHA-256Curve
`ae8ef85d606aa120ce6b7611fc03407fd80bb60311e94a6ef73f6384d0b6c8b4`Grease Pencil
`3a8525077807f9178dac3a5ba84b524e5f8e80874b15c54e2a6658ecb80315a3`Paint
`12fa75bb79f8c38e660d3d2a8fc9cc16dd3df4fc9208b0e2ad94fb1f8aa68f71`。
- `WEB_TEST_PORT=5435 npm --prefix web run test:editing-domain-recovery`unit 3/3、真实
Chromium 三域 1/1每域四阶段均 `RECOVERED`identity hash、data IDs、对象计数和非空
像素门通过。
- `npm --prefix web test`:全量 unit 127/127`npm --prefix web run typecheck`、
`npm --prefix web run lint`、`npm --prefix web run build`73 modules
`git diff --check` 均退出 0。
- M9-14 文件 SHA-256protocol
`42ab53dde3161ec31ca7de420046a2c06f58408b3ac4919c9904e02d875af258`runner
`2bb9805795fc2104e5443207a08951ac7684e67913064d6795c9d165b0c54c7e`unit
`ca565149e7769b40f59e865e42d2dfb0f4ecb2a4655371004678c14536ec9ef6`e2e
`7ab3421d1b44eb78d13525f67a26f1f6ed20816ae9b43c010c9ed3ebdf32c09a`golden
`f548052f39f6259f30b0569528160512aad955e61e8e8559e0d553c30d5619f9`。
- `docs/status/M9-14.md`、`docs/CURRENT_EXECUTION_PLAN.md` 和
`docs/PROJECT_STATUS_AND_NEXT_WORK.md` 已同步为 M9 `14/14`N-015/N-016/N-017
全域 parity 仍保持 `BLOCKED`,仅新增有界故障恢复切片证据。
- 未计入完成的失败:前三次 E2E 发现 Curve fixture 的控制点只在 binary geometry 中、
以及 save/reopen 后 logical revision 重置runner 已改用已发布 Curve topology fallback
与内容 hash 恢复门,换用端口 5435 从 unit 到 Chromium 全量重跑通过。
- 后续领取点:机器队列的最新 `nextTask`;本文不手工维护任务名称。
M10-01 实际验证2026-08-16 America/New_York
- 按主计划领取 M10-01。现有实现新增 `GeometryNodeGraphIR` 的 Main/WASM reader
Blender 5.2 `bNodeTree` 读取图接口、节点、socket 数据类型/有限默认值和 link稳定 ID
使用 node identifier、socket identifier 和 typed ID reference不使用显示名称`__extend__`
UI 扩展 socket 被明确排除。每图预算固定为 4096 graphs、4096 nodes、16384 links、65536
sockets、4096 interface sockets异常和超预算输入 fail-closed。
- `geometryNodeGraphs` 作为 SceneIR schema 1 的可选字段发布;现有
`web/protocol/schema-version` 仍为 `1`,因为本任务只增加可选字段,不改变已有字段含义或
持久化 schema。未支持节点保留原始 metadata未宣称 Geometry Nodes 求值能力,交由 M10-02
allowlist gate 处理。
- 真实 fixture `tests/files/web/modifier_geometry_nodes_scene.blend` SHA-256
`f3820511f791769837d75be092934130c397cf46ee0acf79db28efca9a7948c9`desktop golden
`tests/golden/W-075/modifier_geometry_nodes_scene.json` SHA-256
`93c21e5158daefce10f2d4df674e636bf3f6ed3dd43e1576c45a02a8592f5886`M10-01 manifest
`tests/golden/M10-01/geometry-node-main-reader.json` SHA-256
`ca4f0a1c23466f4a70612c7bbb78d888f7300988b74820b174bad42968d300cd`。
- `source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8`
通过,`ninja: no work to do`;稳定 WASM reader 运行通过。
- `node --test web/tests/unit/geometry-nodes.test.mjs`3/3
`node tools/web/check-geometry-node-main-reader.mjs`3 graphs、10 nodes、7 links、9 defaults
stable ID、graph hash、desktop golden、save/reopen、unsupported Simulation preservation 全通过。
- `WEB_TEST_PORT=5440 npm --prefix web run test:geometry-node-main-reader`unit 3/3、reader 1/1、
Chromium Worker 1/1 通过。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、`npm --prefix web run build`
73 modules和 `git diff --check` 均退出 0。
- M10-01 文件 SHA-256protocol `667c07b3561c35c9ce75c0034ecafc407d6a7435b4b5535354168c16b7ee0925`
SceneIR `0d6c74bb39bd8ffdf748f369aee7f11e553b022a61bf6e557a21b948ebe35aee`Main reader
`510b4017c540fc4d1ac135c1ce7251cc5d7143f31d8604e1d545de36716da9a2`API
`b1050443141f664322fa2e9f11209f5b2b7dfe4e4927ed9af177bce0f8d74549`unit
`922d9435b5f8b0ef648784957feba8f8716f6407f099eaad8d62e99db4f4f908`E2E
`aa8e79f5ddc40bb78afea4587aa80fde21eba5b00838b5d0c5f3be2c48f41953`WASM
`2875acccbb8d262526c3522c635ab5cf0aa0e7e2ac9b1e3c54cce00151460793`。
- `docs/status/M10-01.md` 已新增M10 计数更新为 1/15N-012 全域仍为 `in_progress`
不支持节点 evaluator/Simulation 等后续项未提前关闭。后续领取点:机器队列的最新
`nextTask`,本文不缓存任务名称。
M10-02 实际验证2026-08-16 America/New_York
- 导出并冻结 `GEOMETRY_NODE_ALLOWLIST_SCHEMA=1` 和 16 项
`GEOMETRY_NODE_ALLOWLIST`Group Input/Output、Transform/Set Position、Join/Separate、
Realize Instances、Store Named Attribute、Int/Vector Input、Value、Compare、Math 以及
Object/Collection/Image Info。外部资源节点继续受 stable ID、缺失/linked/corrupt 和 owner
cycle 门约束。
- 新增 `tests/golden/M10-02/geometry-node-allowlist.json`、M10-02 unit 断言和独立真实
Chromium Worker spec。真实 Main `WebGeometryNodesSimulation` 中的
`GeometryNodeSimulationInput/Output` 保持原数据;提交该图稳定返回
`GN_NODE_UNSUPPORTED`,失败前后 graph JSON、graph SHA-256 和 Main revision 完全不变。
- allowlist 内 `WebGeometryNodes` 通过协议门后仍由生产 Worker 返回 `CAPABILITY_MISSING`
因为 M10-03 的逐节点 evaluator desktop/WASM golden 尚未完成;同样不改变 Main 或图数据。
本任务只关闭 allowlist/无损阻断,不扩大 N-012 全域求值声明。
- `WEB_TEST_PORT=5441 npm --prefix web run test:geometry-node-allowlist`unit 4/4、真实
Chromium 1/1`WEB_TEST_PORT=5442 npm --prefix web run test:geometry-node-main-reader`
M10-01 unit 4/4、reader 1/1、Chromium 1/1 回归通过。
- `npm --prefix web test`:全量 131/131`npm --prefix web run typecheck`、
`npm --prefix web run lint`、`npm --prefix web run build`73 modules
`git diff --check` 均退出 0。
- M10-02 文件 SHA-256protocol
`23c2289ec2acbdce0beba47c0b6539bc3f14f5a71ce29927df86cf6c705d6ec3`unit
`e60933ed0f946bdaa96f5322ba8d80b26c8425c623dd6e87da33016a1592c299`E2E
`ff2c838b5c16d86eff13699586a0cd1121ee1a86d5ea52d7b89c01d35632bb77`golden
`471fec9c5382ab7522b6c18ab580a6926eaa59eb5a8b72d23968670b9b9ab37a`production Worker
`4a65547e6b1fea16a120b4e72eb37d4d9f7c7ced4342f535796535262ff65fcc`package
`b86395d256e46ac4e8298e18e1d594861a5ca757fdae2193120e7b38182c28fb`。
- `docs/status/M10-02.md` 和 N-012 状态已同步M10 计数更新为 2/15。后续领取点
机器队列最新 `nextTask`,本文不缓存任务名称。
M10-03 实际验证2026-08-16 America/New_York
- 新增有界 `WebGeometryNodeEvaluator`,从 active Group Output 按需执行 schema 1 的 16 项
allowlist。Geometry 使用 Blender `GeometrySet`、join/realize/transform 与 mesh attribute
APIObject/Collection 只读取同一 Main 的 evaluated depsgraph 资源Image Info 读取真实
image dimensions。求值次数最多 4096未支持 socket/operation/resource/cycle 继续稳定返回
`GEOMETRY_NODES_EVALUATOR_UNSUPPORTED`Simulation Zone 不放行。
- 新增官方 Blender 5.2.0 LTS 生成器、`geometry_node_allowlist_evaluator.blend` 和
`M10-03/geometry-node-evaluator.json`。11 个最小场景让 Group I/O、Transform/Set Position、
Join/Separate/Realize、Store Named Attribute、Int/Vector/Value/Compare/Math 以及
Object/Collection/Image Info 全部进入可观测输出golden 固定 topology、positions、bounds、
point Float attribute 与误差门position max `1e-5`、RMS `1e-6`、attribute `1e-6`、
bounds `1e-5`)。
- `build_blender_5.2.0/bin/blender -b --factory-startup --python
tools/web/generate-geometry-node-evaluator-golden.py -- <temp-fixture> <temp-golden>`:生成 11 cases
排除输出路径导致的 fixture path/hash 字段后,与仓库 golden 逐字段一致。Blender 自动备份
`geometry_node_allowlist_evaluator.blend1` 已移除,不作为交付输入。
- `source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8`
通过,`ninja: no work to do`,当前 full-Main 构件已由该 evaluator 源生成且与稳定 runtime 同步。
- `WEB_TEST_PORT=5443 npm --prefix web run test:geometry-node-evaluator-golden`unit 4/4Node
full-Main WASM 16 nodes/11 casesmaximum/RMS position error 均为 0、attribute 通过;真实
Chromium Worker 打开/求值/保存/重开 1/1 通过。
- M10-01/M10-02 回归分别使用端口 5444/5445Main reader 4/4 + reader 1/1 + Chromium 1/1
allowlist unit 4/4 + unsupported graph 无损阻断 Chromium 1/1均通过。
- `npm --prefix web test`:全量 unit 131/131`npm --prefix web run typecheck`、lint、production
build73 modules、`check:local-deps` 和 `git diff --check` 均退出 0。
- M10-03 native/generator/checker/fixture/golden/Chromium/package/WASM SHA-256
`b896c5c52a611e7a309f80ca4bf8323ccded458584f65ab8f6841df24d70cc42` /
`f42ba309e4935a4534eabcb8ab1978abc08d863e2d18d80a70607f31dd3a3066` /
`76a02d4aae70a597f0c26c12de3104d56e3f1cc9fded1d4824a05d7ddc59c1b5` /
`0cb3e33df570b436e32d783eef0a6c2daad04ca5bb4ccb4f0286b3d723ff7978` /
`363ae47cfb50b8c95d0a55116e8663e41d27c7aa332cffe9b702bbe9b8cbfe1c` /
`83b1c96518eb64bef2c8830c778a84eb13d8da0ea62c2488471ed5fefea975c8` /
`f9130696e8f53ab5aa0ab9d8d27b45dd0cd868fe2eb2741e41a05b70b81b2584` /
`432c5c9efb03b23a506c1b8f57f0d06ee683274bbdfe415f894f0d3c29db0b77`。
- `docs/status/M10-03.md`、主计划、项目状态和 N-012 状态已同步为 M10 `3/15`。M10-03
只关闭保存图的有界常量/实例求值;任意 field/domain、完整 lazy-function、图写回、linked
resource 与 Simulation Zone 均未扩大声明。后续领取点:机器队列最新 `nextTask`,本文不缓存任务名称。
M10-04 实际验证2026-08-16 America/New_York
- 新增 field materialization schema 1绑定 graph ID/hash、Main revision、source/target domain、
data type、transport 和完整七域 cardinality。POINT/EDGE/FACE/CORNER/CURVE/INSTANCE/LAYER
元素上限分别为 1M/2M/2M/4M/100k/100k/4096单批最多 64 fields、32 次真实 domain
conversion、4M 目标元素和 64 MiB。Boolean/Int/Float/Vector/Color 的 scalar/byte 数均由
parser 安全乘法推导,不接受调用方伪造计数。
- JSON 单 field 上限固定为 65,536 scalar更大 field 只允许 `BINARY`,原生 Depsgraph 当前
point Float 回执若越界则只报告 `BINARY_REQUIRED/GN_FIELD_JSON_BUDGET_EXCEEDED`,不展开
attribute JSON。协议拒绝内嵌 `values/jsonValues`、未知字段、未知/缺失 domain、伪造数据类型、
重复 field、批次聚合溢出和非数组 batch。
- full-Main Depsgraph 现从 evaluated Mesh 发布 POINT/EDGE/FACE/CORNER 真实基数,并让
`m10_value` 回执携带 schema、元素/scalar/byte 数。parser 交叉核对 vertex count、domain
cardinality、Float32 byte layout、JSON 阈值和实际 attribute payload回执与 payload 不能漂移。
- `source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8`
通过;仅保留 Blender 头文件既有 5 条 warning。full-Main 构件已同步到 src/public stable
runtime三处 WASM SHA-256 一致为
`1bb4a947da4332471f3d7bab8f3f628c83d1703244093a554a188668ddafafd7`。
- `WEB_TEST_PORT=5448 npm --prefix web run test:geometry-node-field-budget`unit 6/6、真实
Chromium Worker 1/1。`M10GN_StoreAttribute` 返回七域 `8/12/6/24/0/0/0`、schema 1、
8 个 Float scalar、32 bytes 和 8 个 `0.375`POINT 基数漂移、byte-length 漂移和隐藏
`values` 数组三种负例全部阻断。
- 未计入完成的首次重跑:端口 5447 的原生正例已经运行,但负例在浏览器内用相对动态 import
被解析成不存在的 `/protocol/depsgraph.ts`。负例改为 Playwright Node 侧静态协议 import 后,
换端口 5448 从 unit 到 Chromium 完整重跑通过。
- M10-01/M10-02/M10-03 回归分别使用端口 5449/5450/5451Main reader、allowlist 无损阻断和
16 nodes/11 cases desktop/full-Main WASM/Chromium golden 全部通过M10-03 maximum/RMS
position error 仍为 0。
- `npm --prefix web test`:全量 133/133typecheck、lint、production build73 modules
`check:local-deps`、`git diff --check` 全部退出 0`npm --prefix web run test:depsgraph` 的
empty/basic/rigged 三 fixture 连续 100 次通过。
- M10-04 Geometry Nodes protocol/Depsgraph protocol/native/unit/E2E/package/error/WASM SHA-256
`8d04291c29e9ce30e3f2f6d4141bc4101d49529bf7f7edf109d67d059efa58b1` /
`df7e0e29422f5b605f20fd5ab939d170d35048020968d2f6aea86603d0633cd6` /
`5bcc17416fd4d45985bc1529288127b9eeed4a30b47836e687dc5321182c0b11` /
`1aa4df021731d7ba4c4191d56f88c663b223443f78c9fdc1b88c2a43423239c7` /
`95d8380d6a17a5b85df695a3cb850dffa8705f574ae0b9c97422bb802899eb8e` /
`26fc36cc7fde0beb14dc70430cba7ddd748f5e488d58962266a42f85d6e5912a` /
`b98391bd0007d23391a9c0c884350aa433406d4c9a56097e6c02b40c49c95937` /
`1bb4a947da4332471f3d7bab8f3f628c83d1703244093a554a188668ddafafd7`。
- `docs/status/M10-04.md`、主计划、项目状态、N-012 和专项细分已同步为 M10 `4/15`。
本任务只关闭预算/transport/回执一致性,不宣称任意 domain 实际求值、完整 Blender
lazy-function、图写回或 Simulation Zone。后续领取点机器队列最新 `nextTask`,本文不缓存任务名称。
M10-05 实际验证2026-08-16 America/New_York
- 将 `SimulationCacheManifestIR` 升为 schema 2增加 committed `sourceRevision` 与可复算
的完整 `revisionHash`。hash 使用带 v2 domain marker 的 JSON-array canonical encoding绑定
graph ID/hash、source blend SHA-256、source revision、input hash、Blender version 和 frame
rangecache key 从三个 hash 前 16 位改为 `sim2-` 加完整 64 位 revision hash避免截断碰撞。
- manifest/frame 使用 exact-key 校验legacy schema、未知字段、invalid frame/revision、graph/
source/input/range 漂移在 payload 处理前稳定阻断。`verifySimulationCache` 先验 revision
identity再复验总 payload SHA-256 与逐帧 SHA-256。
- Storage Worker put/full read/frame read/list 全部进入 per-project lock。put 先核对当前 committed
revision/hash再计算和写入 payloadread/frame 再验证 manifest identity 与当前项目list
校验所有 manifest仅返回当前 revision/hash旧 revision 保留在存储但不进入当前列表,显式
读取返回 `SIMULATION_CACHE_REVISION_MISMATCH`。
- `WEB_TEST_PORT=5455 npm --prefix web run test:simulation-cache-identity`unit 3/3、真实
Chromium 1/1。revision 7 cache Worker 重启后精确恢复;保存到 revision 8 后旧 key 读取被拒绝、
列表为空,新 revision key 可写入并列出。负例覆盖 forged graph/source、stale read/put、input/
revision/frame range drift、legacy schema、未知字段和 frame payload drift。
- `WEB_TEST_PORT=5456 npm --prefix web run test:simulation-cache`identity + 既有 Worker restart
smoke 2/2`WEB_TEST_PORT=5457 npm --prefix web run test:simulation-cache-performance`600/600
frame、OPFS、600 published、pending=0、总耗时 5,072 ms低于 30,000 ms。
- 首次全量静态门唯一失败是 read-path 重构后遗留未使用 `parseSimulationCacheManifest` import
删除后 lint、typecheck、production build73 modules、local deps、git diff --check 均通过。
- `npm --prefix web test`:全量 unit 136/136M10-04、M10-01/02/03 既有回归未受影响。
- M10-05 simulation protocol/worker/unit/identity E2E/smoke/performance/package/error SHA-256
`974b006f1ad4cd1d3d294122fc777c89c3a7da04fdaa7aebedea12b545bc65e5` /
`a7b31eeb601e9e71c74eaceda95704f1d120653e9ade6bfbee6d262a42edaa74` /
`591582a4ce77b699a4462e30d587eb89034f29ec0a22a94c81f8ab7306f2524f` /
`2446060a9c3955ef466adb479966bf424fd9e9c351b65cd8525e90a1a1032e4d` /
`0c8c001290c8c6b3482eeebc105b2f217c55b2eded0c62b4fee4595ec277a11d` /
`f6c465b7afa012030dd8516d676e2663f4dd8298aa156defb905b3fa0229a84b` /
`f9e28fb23af28720f56f97b249cb636599ebd92955ab2ff6d234b821e6d5ea44` /
`4c6045b1cab8348f0acf180a1e618a0d691ddc5092822ca288f974904e5e13a5`。
- `docs/status/M10-05.md`、主计划、项目状态、N-012 和专项细分已同步为 M10 `5/15`。
该任务只关闭 graph/source/revision identityM10-06 的取消/LRU/重启损坏隔离与播放能力仍未领取。
后续领取点:机器队列最新 `nextTask`,本文不缓存任务名称。
M10-06 实际验证2026-08-16 America/New_York
- 新增 Worker 生命周期级播放准入:新 Storage Worker 必须先通过
`prepareSimulationCachePlayback` 完整复验 manifest revision binding、总 payload SHA-256 和
每帧 SHA-256逐帧读取才从 `SIMULATION_CACHE_NOT_READY` 切换为可用;`release` 同时撤销
readiness 和 active playback 保护。完整 cache read 也会建立 verified readiness以兼容既有调用方。
- StorageClient 的 cache put/full read/frame read/prepare 接受 `AbortSignal`;取消会立即移除 pending、
向 Worker 发送 `cancelRequest`Worker 在总 hash 和逐帧 hash 间检查取消。真实
`BrowserTransformCachePlaybackSession.cancel()` 返回 `CANCELLED`、应用/发布 0 帧、pending=0
取消 cache 写入不发布 manifest已写 content asset 在无引用时清理。
- 新增确定性 `planSimulationCacheLRU` 与 `pruneSimulationCaches`:排序键固定为
`lastAccessAt -> createdAt -> cacheKey`active playback 和显式 protected key 不可淘汰;若保护项
自身超过预算返回 `budgetSatisfied=false`,不破坏活动播放。被淘汰 manifest 的无引用 Simulation
asset metadata 与 OPFS bytes 同步删除。
- IndexedDB 升为 schema 7新增 `simulation_quarantine`。manifest/key 或 payload 缺失、截断、
hash 漂移时,坏 row 原子移出 `simulation_manifest` 进入 quarantine保留诊断证据且不阻断其他
cache list/playback专项使用独立临时数据库实测 v6 -> v7 migration record/store。
- `WEB_TEST_PORT=5464 npm --prefix web run test:simulation-cache-lifecycle`unit 5/5、真实 Chromium
1/1覆盖重启前 NOT_READY、full verify、播放/写入取消、active LRU、release、OPFS 篡改、隔离、
schema migration 和 0 pending。
- `WEB_TEST_PORT=5460 npm --prefix web run test:simulation-cache-identity`unit 5/5、Chromium 1/1
`WEB_TEST_PORT=5461 npm --prefix web run test:simulation-cache`identity + 既有重启 smoke 2/2
`WEB_TEST_PORT=5462 npm --prefix web run test:simulation-cache-performance`600/600 帧、OPFS、
完成/发布 600 帧、6,639 ms、0 pending、Worker 重启恢复,通过 30,000 ms 门。
- schema/snapshot 定向 smoke 2/2、recent-project recovery 4/4全量 unit 138/138typecheck、lint、
production build73 modules、local-dependencies、status-consistency12 parity BLOCKED、0 release
BLOCKED、17 evidence、0 missing和 `git diff --check` 全部通过。
- 未计入完成的首次 Chromium 失败:端口 5458 的所有功能流程已执行,但测试 helper 把
`DOMException.code=20` 当成业务码,导致预期 `AbortError` 的断言失败;只接受字符串业务码后在
5459 全量重跑通过,增加播放取消/migration 断言后又在 5464 从头通过。另两次 `npm --prefix web
exec` 定向命令在测试前因从仓库根解析不到 `playwright.config.ts` 退出;改用 `web/` 工作目录后
schema/snapshot 2/2 和 recent recovery 4/4 通过,这两次命令错误不计为测试失败证据。
- M10-06 protocol/storage/error/Worker/client/migration/OPFS/unit/lifecycle/identity/performance/package
SHA-256`3025db84bd4e0151b8894a457c51da630d628afb1760e2f0caeec003f0efce3f` /
`2711dbab0c52a566679b83d5e4d793ec0ffd3f991e744dce765b6bdc54d25c13` /
`7ebff554dd6346b539215a6545c67806bca2ead33953700b79c0910fd0cfb408` /
`e31d7dcf93c5dcefb7e6c4cfd7874c748f972849ee7d93adb6294f82aafcf236` /
`aaa3a03e3b91452e90a661566407c261c7a16b1671ed55ec948de7626d49bfa4` /
`8de1fcbbda9d7a4e7496995306c4e9fc83224211a516cf7241496b6a145953b5` /
`2e8ef9d72194bf803a7e823fb2b7de30b9f10ae6dd4b031b81b97ff82eee9cc6` /
`4ece0f5051667b04fab78c81a847def7a0c77d9267bd9e4fa2bbe4b9308125bf` /
`861d370f72896987cef65d2e4d78ab3edcc1d4828d4a0fa0b5301b72a4a2932a` /
`aa305871e8651018342b123112beab10a43dab3313e2c9765e450dc91c08b6e1` /
`d7083c24789fc5877a7841bf611aee0ff471cc191621de1b30720d637635b44c` /
`fe90c0bd741a7840f6184726737a1a93c606841b8408dd7fd6dec823a8352cf6`。
- `docs/status/M10-06.md`、主计划、项目状态、N-012、专项切片和 storage migration 状态已同步为
M10 `6/15`。Simulation Zone evaluator、浏览器 bake 和 GN modifier seek 仍未声明。后续领取点:
机器队列最新 `nextTask`,本文不缓存任务名称。
M10-07 至 M10-09 实际验证2026-08-16 America/New_York
- M10-07 新增 schema 1 有界 Shader compiler固定 RGB/Value、六项 Math、Image Texture、
Normal Map、Principled 和 Output allowlist以及 nodes/links/depth/textures/identifier 预算。
Engine Worker 在 `setShaderGraph` Main transaction 前失败关闭;主线程与 Offscreen 共用
`createPBRMaterial` 和同一纹理 binding report。
- `WEB_TEST_PORT=5521 npm --prefix web run test:shader-compile`M10-07 unit 5/5、Chromium
3/3。默认 5173 端口首次被既有进程占用,测试未启动且未计入功能失败;改用独立端口完整通过。
- M10-08 新增 64 字节十六进制 `compileKey`:对 report schema、graph hash、renderer backend
和按 usage/image 排序后的 imageId/assetId/asset SHA-256/colorSpace 做确定性 SHA-256。ImageIR
增加可选 SRGB/NON_COLOR/LINEAR未知 backend 和非法纹理 digest 结构化阻断。
- `WEB_TEST_PORT=5523 npm --prefix web run test:shader-compile-key`unit 7/7、Chromium 1/1
纹理 hash 和 color-space 任一变化都会改变 key。端口 5522 首次因测试从 Vite 未暴露的仓库根
`/protocol` 导入而在编译器执行前失败;改由应用 PBR 入口后完整重跑通过。
- M10-09 新增 `PBRMaterialPipeline`:失败候选只记录 `shaderCompileFailure` 并释放自身,不替换/
释放上一份可用材质;后续成功候选才替换旧材质。`WEB_TEST_PORT=5525 npm --prefix web run
test:shader-pipeline`Chromium 1/1验证对象身份、稳定错误码和下一次成功替换。
- M10-07 回归 `WEB_TEST_PORT=5524 npm --prefix web run test:shader-compile`unit 7/7、Chromium
3/3typecheck、lint、production build74 modules、status-consistency12 parity BLOCKED、
0 release BLOCKED、17 evidence、0 missing和 `git diff --check` 通过。
- M10-08 compiler/SceneIR/render-assets/Engine Worker/PBR/unit/E2E/golden SHA-256
`acd5f8deb2912f6823533df12baba8049c5e64d440c17a6dc3f90741f71774b2` /
`a65ef3b4be5303b1b86b3ee6829c795870dcc2490ba58d3a66b8bed8172d6442` /
`840c09a6c2ec56cc75a9ca72bcbdde6957612a7c61b19ab83be47c571eca8b67` /
`668728f7e5b6edf9e1cee3e6152238d16ac19f43f030e94e77bfe24e7ff50489` /
`8a9cb52c8e7b1481096017cc659d93541c21724c1203d22755e37e1e3c365250` /
`9ae9bb4c778d9e31a607d0c7d678ecf3448ed4e5b57c88ab4ba767a2f0850cc7` /
`a09ebfa451e76c33f421bc8402fac4c77faedee88020431a505602f317b4eb65` /
`187666d9dfb9d9cdd5bd6195cc2f7ee57bb78fa0d05d6020762c06a4ab015984`。
- M10-09 pipeline E2E/golden SHA-256
`e6771f672e885250db199cbf97a0a3866084ab9bb3f2ad25d17f5c53edaa99af` /
`5dbb916e512935a76dacde37242b123707897f54ab10d7b99e246f57afbc94ac`。
- `docs/status/M10-07.md` 至 `M10-09.md`、主计划、项目状态、N-013 和专项切片已同步为
M10 `9/15`。global protocol schema 保持 1当前领取 M10-10任意 Shader 节点仍未声明。
M10-10 实际验证2026-08-16 America/New_York
- `RenderCapabilityRequest.ARBITRARY_SHADER.nodeTypes` 放宽为任意字符串gate 对未知类型去重、
排序并返回稳定 `PBR-012/ARBITRARY_SHADER` block错误码 `SHADER_NODE_UNSUPPORTED`、
recoverable=true。既有 ShaderGraph validator/Worker gate 保留原图并在 Main 前阻断。
- `WEB_TEST_PORT=5526 npm --prefix web run test:shader-capability`Chromium 1/1`VORONOI`、
`CUSTOM_OSL` 以及反向输入顺序返回完全相同的 task/capability/status/code/message。
- typecheck、lint 和 `git diff --check` 通过。
- M10-10 gate/spec/golden/package SHA-256
`322929e9c7b627a9e79b8a6f11d5e9b0c7c05a5754f82d41c45c1134bbaaf385` /
`6337801f10b9115ba7b53a43152ae69a324b5baa61c8e455cc61505437228cbf` /
`b7182bb57e10d0b302b4c7dc9bc43160721a2c9414b056c86173c3b5c2501739` /
`d6d4dcaf4f5c852f884ba2064da96a8c30519c661bf4a16c59e115742aa37e8a`。
- `docs/status/M10-10.md`、主计划、项目状态、N-013 和专项切片已同步为 M10 `10/15`
当前领取 M10-11仍不开放任意 Shader、NLA operator 或 Physics solver。
M10-11 实际验证2026-08-16 America/New_York
- 新增桌面 Blender 5.2 layered Action fixture `tests/files/web/nla_time_mapping_scene.blend`
`M10_NLA_TimeMapping` 的 `M10 Time Mapping` Track 含 `M10 Scaled Clip`scene 20..40、
action 1..11、scale=2和 `M10 Reverse Repeat Clip`scene 45..65、action 1..11、
reverse、repeat=2均为 `REPLACE`/`NOTHING`。
- `node tools/web/check-nla-evaluation-golden.mjs`WASM Main reader/Depsgraph 1 Track、
2 Strip、12 帧通过desktop matrix 最大误差 `0`;每帧读取前后的 NLA/Action JSON 相同。
- `WEB_TEST_PORT=5527 npm --prefix web run test:nla-evaluation-golden`Node/WASM checker
和 Chromium Worker `1/1` 通过。
- `npm --prefix web run typecheck`、`npm --prefix web run lint`、
`npm --prefix web run check:local-deps`、`python3 -m py_compile` 和 `git diff --check`:通过。
- M10-11 文件 SHA-256fixture generator
`a941ecb850ddd165ede117f6411615c6daed4d6bdaffaeac8228a308b7fbe745`golden generator
`941a63cc9edbaa0d8dd25025872e3fc44bf64df54d5a9232ad4128e6ac0cd5c5`checker
`2ce9db0fcbceaf30e398e8feb5c002a60395ac34e61382d9414e980e51e6fdd5`fixture
`b32f783debe213a1345ec4528e5ed27f0f4de00d7896b626df39756289119855`golden
`2d148ac0cbc2ac9281d430da20dba8373ad1bb0de6ec5fa578adf36296455fbe`Chromium spec
`c12f105d206a03dae5b73b076cc3b0a758d597cea7532b6720f4653568df0245`。
- `docs/status/M10-11.md`、`docs/status/N-014.md`、N-014 专项计划、主计划和项目状态已
同步为 M10 `11/15`;当前领取点继续只读取机器队列最新 `nextTask`,不把 M10-12 operator
transaction 提前标为完成。
M10-12 实际验证2026-08-16 America/New_York
- `moveNLAStrip` 要求精确 `baseRevision`,仅移动一个已有 Action Clip保留原 duration 和
time mapping纯 helper 对 source stack 做 structured clone拒绝空身份、未知 track/strip、
overlap、非有限值和超过 +/-1e6 frame budget 的输入。
- Engine Worker 校验 owner/revision 后把候选栈转换为 native `setNLAStack`,由现有 Main
transaction 统一完成 revision、history、undo/redo、save/reopenstale command 在 Main
mutation 前返回 `REVISION_CONFLICT`。
- `node --test web/tests/unit/nla.test.mjs`2/2`WEB_TEST_PORT=5528 npm --prefix web run
test:nla-operator`unit 2/2、Chromium 1/1。浏览器覆盖 stale revision、20..40 -> 5..25、
revision/delta、undo/redo、save/reopen 和 frame-10 native evaluation X=2.5。
- `npm --prefix web run test:authoring-roundtrip`、`npm --prefix web run typecheck`、
`npm --prefix web run lint`、`npm --prefix web run test:status-consistency` 和
`git diff --check`:通过。
- M10-12 文件 SHA-256`web/protocol/nla.ts`
`03d5abce5cb2f0a3a38e42eedbced7f4de6e2052d18e53a3dcde3b3ca1e6020d`
`web/protocol/web-engine.ts`
`48f2290ead27aeda1f17b279f01ae278776b50b4cb4de065d94b0e1d44717dbb`
`web/app/src/workers/web-engine.worker.ts`
`4ccad87c1619db8e39d2855ebca9918883484ce3e5dfc8a325ccee9a8220397c`
`web/tests/unit/nla.test.mjs`
`d8bac2dd3e4ec1a1342de7c7401a51beb9879ea5ba2b34df7d615ae0449081a7`
`web/tests/e2e/nla-operator.spec.ts`
`1658d52eb0b8cf329f73be552e9b2649ed6dc96b21edb48ade9dd4a725a37ae0`
`web/package.json`
`e9d5c6e4f7132921faac8ecbee40215098497fe374d56309f2c76fab152c33d6`。
- `docs/status/M10-12.md`、主计划、项目状态、N-014/N-014-B2 和交接文档已同步为
M10 `12/15`M10-13 继续按机器队列领取,本文不缓存任务名。
M10-13 实际验证2026-08-16 America/New_York
- `probePhysicsSolverCapabilities` 按固定七 family 顺序检查 runtime export、初始化结果、
SINGLE/PTHREAD 要求和 2 GiB 内的可用内存异常、非法环境、NaN/越界结果均 fail-closed。
- 只有四门全过的单个 family 才得到 `LOCAL_SOLVER/READY`;其余 family 独立返回明确 probe
原因并路由 `DESKTOP_SERVER_BAKE`。生产 inventory 未安装 solver adapter因此七类默认均为
`EXPORT_UNAVAILABLE`,合成 RIGID_BODY 正例只验证门,不计作真实 solver。
- `node --test web/tests/unit/physics-solver-probe.test.mjs`3/3`WEB_TEST_PORT=5530 npm
--prefix web run test:physics-solver-probe`unit 3/3、Chromium Worker 1/1。
- `WEB_TEST_PORT=5531 npm --prefix web run test:e2e -- --grep "N-018 physics"`Chromium 1/1
`npm --prefix web run test:physics-main-reader`CLOTH/SOFT_BODY Main reader、save/reopen 通过,
playback/solver 继续 BLOCKED。
- typecheck、lint、production build74 modules和 `git diff --check` 通过。
- M10-13 文件 SHA-256protocol
`adc57a12c7f57c6b1d5f99590d3c36cefa83636aca86c780c2520f3f41148981`unit
`e499d55770d2024c75803ce1acc1c234814c027279f2b40f42195fd480977653`Worker
`fbad383de186a659440da42dcad988310ca2e483db27e30d74342c8f57a0f49a`Chromium spec
`1419b98d68da9b0ab0bf41b37843442741593655e2693159d84e069f1dec3f09`golden
`bcc8f9094e2b0d8f41ef01fda0daa2a29693d188e602447d6d06358aaa751df4`package
`875162709315e2a8116c5d28023576a4b95fb076b79453de8b21acdbff2df9dc`。
- `docs/status/M10-13.md`、`docs/status/N-018.md`、主计划、项目状态和交接文档已同步为
M10 `13/15`;下一领取点继续只读取机器队列最新 `nextTask`。
M10-14 实际验证2026-08-16 America/New_York
- Physics cache schema 1 对七 family 分别绑定 cache family、desktop/server bake 来源、Blender
5.2、source blend/settings/input/cache SHA-256、frameStart/frameEnd、总 byteLength以及每帧
byteOffset/byteLength/SHA-256`COMPLETE` 强制全帧,`PARTIAL` 仍要求 frame 有序且 bytes 连续。
- `verifyPhysicsCachePayload` 在消费前复算当前 source blend、完整 payload 和逐帧 SHA-256
source drift 返回 `PHYSICS_CACHE_SOURCE_MISMATCH`payload/frame drift 返回
`PHYSICS_CACHE_HASH_MISMATCH`version/budget/range/unknown field 均稳定失败关闭。
- `node --test web/tests/unit/physics-cache-family.test.mjs`3/3`WEB_TEST_PORT=5533 npm
--prefix web run test:physics-cache-family`unit 3/3、Chromium Worker 1/1。
- M10-13 probe 回归 unit 3/3 + Chromium 1/1Physics Main reader 通过M10-05 Simulation cache
identity 回归 unit 5/5 + Chromium 1/1typecheck、lint、production build74 modules
`git diff --check` 通过。
- M10-14 文件 SHA-256error protocol
`6972a144bdc61c2a4270c88df2d86c75640bb5f24b5ac3b7f9a02d69d3c500fd`Physics protocol
`b02b820503d79cd26b0323a4d2033e79d0eeb3032befd26fafe5eab55634584c`existing test Worker
`453c6e9e683b9da0ef7ce4bd0e4e430b97102d80ddb9b14cc9d075319b37d818`unit
`e1c6f07ec58ce4c4c987bd8a36f270497ae3a0f521d6ed27d7f199debeeaccb2`cache Worker
`8af676506cc0ff1501816431d92d82ca15316b40095d617ecb664b9608e209e0`Chromium spec
`6a2788587f6692bf5bf19d76400810fa277a6985d1a6ecc1b8d1adb85c609249`golden
`b220d1fd73f307213078ce3cbd6212544f97ade84a45d54847f107cef69d302d`package
`9baeb319d8c740f67f3e7615942c78f920e7a56b0d654a5a8f47d68de7243eb4`。
- `docs/status/M10-14.md`、`docs/status/N-018.md`、主计划、项目状态和交接文档已同步为
M10 `14/15`;下一领取点继续只读取机器队列最新 `nextTask`。
M10-15 实际验证2026-08-16 America/New_York
- 新增四个隔离 Chromium Worker 会话的联合门;每域依次执行有界性能负载、超预算输入、恶意
graph/manifest再以同会话小输入证明恢复。OOM 项是 evaluator/payload 分配前的确定性
budget gate不扩大为任意浏览器 heap exhaustion 声明。
- 实测GN 10 x 512 nodes 为 54 ms门 5,000 msShader 100 compile 为 17 ms
5,000 msNLA 20 x 256 strips 为 62 ms门 5,000 msSimulation 64 frame hashes 为
2 ms门 10,000 ms
- 超预算/恶意输入稳定码GN `GN_GRAPH_BUDGET_EXCEEDED`/`GN_DEPENDENCY_CYCLE`Shader
`SHADER_NODE_UNSUPPORTED`/`SHADER_GRAPH_CYCLE`NLA `NLA_BUDGET_EXCEEDED`/
`NLA_INVALID_STACK`Simulation `SIMULATION_CACHE_BUDGET_EXCEEDED`/
`SIMULATION_CACHE_INVALID`。四域失败后小输入均成功。
- `WEB_TEST_PORT=5536 npm --prefix web run test:m10-domain-gates`Node 23/23、Chromium 1/1。
首次未带独立端口时 23/23 Node 已通过,但浏览器因既有 5173 进程未启动;修正为 5536 后从头
完整重跑通过,未把端口失败计为功能证据。
- 回归GN field budget unit 6/6 + Chromium 1/1Shader compile 7/7 + 3/3NLA operator
4/4 + 1/1Simulation lifecycle 6/6 + 1/1typecheck、lint、production build74 modules
和 `git diff --check` 通过。
- M10-15 文件 SHA-256error protocol
`88119782307cb9a61e131f2d5e2e25127256c1e68a333fc7fc3206158b8a1019`NLA protocol
`96ae7cf9ca3fadbaf98ca15a38937329f203b0bc4a9c39ef685987e7f55353dd`Simulation protocol
`a1302e42129420a96416e363cbc857d082d4646655685520c9e81f877ce3d9b8`NLA unit
`e11aa1f395970613cee5d37a9eb21c3fac3422f0080c75c78eb8777effb77adc`Simulation unit
`2be82cdda991b47fbf8955cfbf2f92cb1fdc7b7c0debb0c8102d4f35e8fce8e3`Worker
`bc508e1c81ca6efefd67b5c572f93c27dd71bd602319ae887c50e27f8a309a31`Chromium spec
`2973a596df8613a9cfdb0bd4d300d95b71a8e818e615278a39fb777db6c5cf03`golden
`580051434ec6673251bac755cc189939de1f887aad088497e16a7657f3a83963`package
`092931cebf9cb14814951703af26e2d0e4c5e0295c1ba4cb748bfe4ee49448c2`。
- `docs/status/M10-15.md`、N-012/N-013/N-014 状态、主计划、项目状态和交接文档已同步为
M10 `15/15`;下一领取点继续只读取机器队列最新 `nextTask`。
M11-01 实际验证2026-08-16 America/New_York
- `tests/golden/M11-01/lighting-field-parity.json` 覆盖 CameraIR 20、LightIR 17、WorldIR 14、
Scene render/color-management 9 个叶字段;每项分别记录 reader/writer/main/Offscreen 状态和
aggregate parity。Orthographic/Panoramic/Custom、DOF 视觉、radius/area spread/sun angle、World
rotation/visual Mist、AgX/look/gamma/white balance 等缺口保持 PARTIAL/BLOCKED。
- `tools/web/check-lighting-field-parity.mjs` 使用 TypeScript AST 从 `scene-ir.ts` 实时枚举字段,
拒绝漏项、重复、非法状态、缺失 evidence 路径、COMPLETE 过度声明和关键阻断项漂移。
- `npm --prefix web run test:lighting-field-parity`:字段 60/6024 COMPLETE、17 PARTIAL、
19 BLOCKED真实 Main `lighting-roundtrip` 同命令通过 Camera/DOF、Light、World/Mist、拒绝门、
undo/redo、save/reopen 和 white-balance integrity gate。
- `WEB_TEST_PORT=5541 npm --prefix web run test:e2e -- --grep "N-019"`Chromium 2/2
typecheck、lint、production build74 modules、status-consistency 和 `git diff --check` 通过。
- M11-01 SHA-256parity table
`b7fee80b4f2469cf119902c939f9091e640a6f0e1307e97ba29f0afa8942c4ed`checker
`cf910a087f9af72e0782d62e67341f90fd4af1c6c8eddf54169ee6275e24bd9c`package
`cd7174b04b19e61a280e03e6c61e2ffd20fd507c0716c820b8faa31ea2438ebf`。
- `docs/status/M11-01.md`、`docs/status/N-019.md`、主计划、项目状态和交接文档已同步为
M11 `1/14`;下一领取点继续只读取机器队列最新 `nextTask`。
M11-02 实际验证2026-08-16 America/New_York
- 复用生产 `setCameraProperties`/`setLightProperties`/`setWorldProperties` Main transaction
一个 Chromium 流程逐域执行 edit、undo、redo保存为 `.blend` 后用全新 Engine Worker 重开。
- 字段断言覆盖 Camera lens、双 sensor dimension/fit、shift、clip、ortho/DOFLight color、
energy/exposure、temperature、shadow、spot/areaWorld color/exposure/Mist。共享 PBR 映射另核对
水平/垂直 FOV、film gauge/offset、温度线性 RGB、强度、shadow、spot/area 和背景色。
- `WEB_TEST_PORT=5545 npm --prefix web run test:lighting-field-roundtrip`:原生 Main roundtrip
通过Chromium 1/1revision 从打开开始每个 edit/undo/redo 均严格 +1。
- 未计入完成的前两次专项运行:端口 5542 在 World Float32 color 严格相等处失败;改为递归
`1e-5` 数值容差后,端口 5543 又在 camera near 的剩余严格标量断言失败。统一所有 Blender
Float32 字段的容差、同时保持结构/字符串/布尔严格比较后,端口 5544 通过;补齐 horizontal
sensor-fit 与 temperature color 视口断言后,端口 5545 从原生到 Chromium 再次完整通过。
- 全量 unit `156/156`typecheck、lint、production build74 modules和 `git diff --check`
全部退出 0。
- M11-02 golden/Chromium/native checker/protocol/Main writer/PBR/package SHA-256
`ac6d84c0099b12cf6c96df2dbbb4281e3308c36f0bda49c92d7548e58ccc286e` /
`9f75c7b88c70ab42c6c418b0056dcffcab3b8851003258891902db9615fcfe67` /
`023e3e43bc37fb38c3063d33c20e59043308013874fce20bc3a49d508b850e6c` /
`48f2290ead27aeda1f17b279f01ae278776b50b4cb4de065d94b0e1d44717dbb` /
`510b4017c540fc4d1ac135c1ce7251cc5d7143f31d8604e1d545de36716da9a2` /
`78352e46c62d0c8d9bf25408ea1d725a843a42068ea3eb304bb3d78f8d612e0b` /
`8074d80265a1378fb3f284206c343ff1e388a5ea43e57946a1d4092076d72ea8`。
- `docs/status/M11-02.md`、`docs/status/N-019.md`、主计划、项目状态和交接文档已同步为
M11 `2/14`;下一领取点继续只读取机器队列最新 `nextTask`。
M11-03 实际验证2026-08-16 America/New_York
- 新增 schema 1 `PBRRenderBudget`。THREE_WEBGL2 固定总 16 lights、4 x 1024 shadow maps
其中内置 viewport lights/shadow 也占 2/1 保留槽THREE_WEBGPU 固定 64 lights、8 x 2048
runtime adapter limit 只能向下收紧。纹理上限同时覆盖 256 assets、16K 单边、512 MiB
aggregate payloadWebGL2/WebGPU decoded RGBA 上限分别为 512 MiB/1 GiB。
- planner 按 SceneIR node 顺序保留确定性 light/shadow 前缀,返回 dropped/blocked stable IDs 和
`GPU_LIGHT_BUDGET_EXCEEDED`/`GPU_SHADOW_BUDGET_EXCEEDED`。主线程与生产 Offscreen Worker
都在 canvas 发布同一 reportWebGL2 实际 Three scene 复核为总 16 lights/4 shadows。
- `GPUTextureStore` 在 hash/decode/GPU allocation 前按现有资源+候选批次计算 aggregate budget
257 个候选在两条 viewport 路径均 loaded=0/bytes=0。先加载真实 8x8 PNG 后再提交超限批次,
原 Texture asset identity/hash 保持不变。
- `WEB_TEST_PORT=5548 npm --prefix web run test:render-resource-budget`unit 3/3、Chromium 3/3。
20 个 scene lights 中渲染 14、丢弃 614 个 scene shadow 请求中渲染 3、阻断 11。
- 未计入完成的一次重跑:端口 5547 的主线程/Offscreen 预算 2/2 已通过,新增纹理保留 case
在业务代码前因 Vite 不暴露仓库根 `/protocol/render-assets.ts` 动态导入失败;改为浏览器
`crypto.subtle` 生成 hash、只导入生产 TextureStore 后在 5548 从 unit 到 Chromium 全量通过。
- 回归M11-02 原生+Chromium 1/14K texture 64 MiB decoded、8K texture 256 MiB decoded
均通过packed texture 主线程/Offscreen 2/2。全量 unit 159/159typecheck、lint、production
build75 modules、local-dependencies 和 `git diff --check` 全部通过。
- M11-03 protocol/PBR/texture store/main viewport/Offscreen Worker/unit/E2E/golden/package SHA-256
`d7784690358e38b71c6ad3ccc5baf82869d897714d5257f219bbd00dc7e7b0f7` /
`934874434afa6778eaf783c78650ad221a428352741f3ff7173cb3c17a0c3c14` /
`0f18f3bcf04c5c99175d4cac8bbf1bc028fc54d635701fb6a92791e06c335fb6` /
`dcb502ca892fd5431cbf1a13823aec5d83a2aa0a1b40487cb66fa630c6e461b3` /
`c95bce10f0bd73591f002c21415bfbc6f709ecbe61e97a3b5b05bcec2b0e0bef` /
`4bde90788bbf9a94317d83bd398acd321bbcf4e53e26bf40165a889bacff03a2` /
`90834dfff09e61a2d32732d3a8f0db4b9c71414ac4991412d93d322119ef2de7` /
`c312bf5ed8415ad51e5cccb3a2653f65cd9fee46488be2f860e6a5a8d5a7901d` /
`c718983c3f3a552f4c68d9390376777e45a3f23e6999afd5cb4ddc786a12a278`。
- `docs/status/M11-03.md`、`docs/status/N-019.md`、主计划、项目状态和交接文档已同步为
M11 `3/14`;下一领取点继续只读取机器队列最新 `nextTask`。
M11-04 实际验证2026-08-17 America/New_York
- 新增 `web/protocol/render-image-comparison.ts` schema 1 和 app wrapper。输入固定为等尺寸、
有界 RGBA8颜色空间为 `SRGB8`、alpha 为 `STRAIGHT`。每个报告保留实际值、阈值、比较方向
和通过状态,检查 MAE、RMS、P95 channel、max channel、坏像素比例、以 reference corner
median 为背景的前景 IoU以及 alpha coverage delta尺寸/字节/阈值/4,194,304 pixel budget
在计算前拒绝,失败返回 `RENDER_REFERENCE_MISMATCH`。
- `tools/web/generate-m11-render-reference.py` 由 Blender 5.2 `BLENDER_EEVEE` 生成
`tests/files/web/m11_render_reference.blend` 和 `tests/golden/M11-04/blender-eevee-reference.png`。
固定 256×256、camera orbit 对应位置、黑色 rough/specular=0 material、World color、
`taa_render_samples=1` 和 `dither_intensity=0`。PNG container bytes 可能因路径元数据变化,
`check-render-reference.mjs` 以 committed PNG SHA-256 锁构件完整性,并让 Blender 逐像素解码
复验重渲染像素 max=0。
- `WEB_TEST_PORT=5552 npm --prefix web run test:render-reference`unit 3/3、Blender reference
复验通过、Chromium 3/3main 1/1、Offscreen 1/1、错误构图负例 1/1。两条生产路径报告
完全一致MAE `2.0433349609375`、RMS `5.448994264342599`、P95 `4`、max channel `110`、
bad-pixel ratio `0.0047760009765625`、foreground IoU `0.9853400565736072`、alpha delta `0`。
收紧后阈值为 MAE 4、RMS 12、P95 12、坏像素比 0.02、IoU 0.97、alpha delta 0。
- 回归:`npm --prefix web run typecheck`、`npm --prefix web run lint`、production build75
modules、`npm --prefix web run test:status-consistency`、`npm --prefix web run release:evidence-sync`
和 `git diff --check` 通过。status consistency 为 12 parity BLOCKED、0 release BLOCKED、
17 evidence、0 missingM11 更新为 `4/14`完整色彩管理、Cycles/复杂 Eevee、高级 shadow、
Volume 深度合成和全场景 pixel parity 仍保持 BLOCKED。
- M11-04 hashesprotocol `4345cc0d02b4482201de34292cbf5198009bf615e69c80cc00bc3e76116efec2`
app wrapper `ad97fd594d0d964e05d4da2bffc84a64ef737fef700045c252b5222250f1ffc7`error protocol
`e8ea483466b16debaf803ff1640ade07a858a802781e3040d3547028ecb5d19f`generator
`118c98c77d98922e72660898bfb65842e11743fc77f4124c9f5088a76cb6a94a`reference checker
`ead3500f054e98c2db4cd6596c983586a622e929bc8a587e9fbd38d94a7df7d1`unit
`f9800745760b85700e80abc5e389f44d7f7ea3b9e41e1002f4e5449bcb620f67`Chromium spec
`349c7da0dfd60baec80139cced52079312bd5e892a42f000ba0b4f55c6a4a61d`fixture
`d2bea55fe4de0b00e73a9241b4d1b0c802c2eb0e6159c0cd48e007b97b9d3963`PNG
`f5c22636a232bcbb0ed0f772418cb12fced18ff72f4999804197e42caa61480a`golden manifest
`e9551f86f0b9704d7be35c03f07321bec5d2481ffee4208ae766156d9c9a0135`package
`38ba6a722a2e0bc2c91d6edbd2b7df5e3609342e3b7ef2ec9646b9c6ce0d25a6`。
- `docs/status/M11-04.md`、`docs/status/N-019.md`、`docs/CURRENT_EXECUTION_PLAN.md`、
`docs/PROJECT_STATUS_AND_NEXT_WORK.md`、parity ledger/release evidence 和本文件均已同步。
后续领取点继续只读取机器队列最新 `nextTask`,本文不缓存任务名称。
- M11-04 台账回归补充:首次全量 unit 为 `161/162`,唯一失败是把 post-V1 的
`web:test:render-reference` 误加入冻结 V1 acceptance导致计数从 50 declarations/49 unique
漂到 51/50从 ledger 的 V1 acceptance 删除该项、保留 M11/N-019 专项记录并重新同步 evidence
后,全量 unit `162/162`、status consistency 和 `git diff --check` 全部通过。
M11-05 实际验证2026-08-17 America/New_York
- 新增 schema 1 `RenderRoutingRequestIR/RenderRoutingResultIR`。`target` 与 endpoint availability
分离bounded Eevee + WebGL2 返回 `WEB_LOCAL_BOUNDED/READY`WebGPU 只有 browser capability
与 renderer bundle 同时存在才可 READY否则保持 `WEBGPU_RENDERER_UNAVAILABLE`。
- `BLENDER_CYCLES`/`CYCLES`、complex Eevee、Workbench final render以及 CUDA、OptiX、HIP、
Metal、oneAPI 一律返回 `SERVER_JOB`。生产默认 `serverRenderAvailable=false` 时状态为 BLOCKED、
code=`SERVER_JOB_UNAVAILABLE`;合成 endpoint context 只把同一 server target 变为 READY未调用
submit也未提前声明 M11-06 的 source/build/settings/output hash。
- SceneIR `renderEngine` 按有界大写身份串处理;未知但合法的 engine 返回
`SERVER_JOB/BLOCKED/UNSUPPORTED_RENDER_ENGINE/PLATFORM_CAPABILITY_UNAVAILABLE`,非法 identity
与 backend 在路由前以 `INVALID_ARGUMENT` 拒绝。
- `WEB_TEST_PORT=5556 npm --prefix web run test:render-routing`unit 3/3、Chromium 1/1。浏览器
先由生产 WebEngine Worker 打开 `m11_render_reference.blend` 并读取真实
`renderEngine=BLENDER_EEVEE`,再验证 bounded/Cycles/complex/OptiX/configured-server/WebGPU/
unknown-engine 全矩阵;机器 golden 为 `tests/golden/M11-05/render-routing.json`。
- 回归typecheck、lint、production build75 modules、release evidence ledger sync 和
`git diff --check` 通过。M11 更新为 `5/14`;真实 server job、hash/progress/cancel 和结果消费
仍保持 M11-06 阻断。
- M11-05 hashesprotocol `2d41d48609635c810572aaae95979df2fe9e49bbd130c60d70f64042c5d0f097`
app wrapper `f360c05fa62aa830a486c5be4747488fcbb5ba9b68d82b4f7187e1267da46fa6`unit
`4ac2e7a6c2265f948d971f72effb4ff9ad1c51839ab6c06d496fc2b0768c4fa8`Chromium spec
`e5572d9ad9426f1dcc1856fe426261910093fa2f5460117e4ffdcfc7b23b10a1`golden
`53c5d3a2e51f251d14953594567081597be4250be5b1236832370e74805bd35d`package
`716a5331990618892bca97f48c7eef589a5af6c5131b8cf3ae52a1b9d923644c`parity ledger
`4ce36890f5772c2a22338dd4fda1c33d3241a5b328b25c5455c28f4f74f1964c`release evidence
`8887db65eeab9777c9313b001e70c5cd4f65e8b6d36411ece8bb6fd2ccf062d2`。
- `docs/status/M11-05.md`、N-019、主计划、项目状态、parity ledger/release evidence 和本文件
已同步;下一领取点继续只读取机器队列最新 `nextTask`,本文不缓存任务名称。
M11-06 实际验证2026-08-17 America/New_York
- 新增 schema 1 `ServerRenderJobRequestIR/ServerRenderJobResultIR`source `.blend` SHA-256、
byte length、Main revision、Blender 5.2 version/build SHA-256、严格 settings allowlist/hash 和
request hash 构成提交 identity成功结果必须回显同一 identity并增加 output MIME/bytes/
SHA-256 和 result hash。schema 1 每份输出只允许一个 still framesettings 只接受 engine、
frame、resolution、percentage、samples、PNG/OpenEXR 和 transparent不接受“哈希但不执行”的
未声明字段。
- `npm --prefix web run test:server-render-job`unit `3/3`loopback HTTP server 用真实
`build_blender_5.2.0/bin/blender` 5.2.0 headless 打开上传的 M11 fixture并显式应用上述
settings 后渲染 PNG。成功报告 source
`d2bea55fe4de0b00e73a9241b4d1b0c802c2eb0e6159c0cd48e007b97b9d3963`、settings
`97bb832618bd27e8763722afa0d250ef74383fb355f0ff38763930f57ba1590b`、本轮 output
`564b95cd501da2636085aeada88814c4a3b7af7b1f0188543a1863fe34dd091e`、3915 bytessource、
build、settings、output 四类篡改均返回对应稳定 code。
- M11-06 hashesprotocol `e2b5b95032b0dbcb346aa35d1a10a3b55d6c006603f16b9e72c3de45763906c5`
errors `747ea52fd96b3ec7ede9ce72c15f56fdc454836ba5bf924cc60198096d4986de`unit
`c84f86365006360f146601839d7e1394f3f7bc7fa71dcbf62d8d4e4321cdd16d`server checker
`6dd49fbd1be202a88fa714b2fb81305018da6df5f9d73c95e048e3697742764e`Blender driver
`48950b0884a52a40ae234f8bbe590a0cb89e58c4d2a2de40ea638f491d111aff`golden
`36f083f8da7585f850e748e6ac78fc57cd6e8d59bce03d77eee3acd2fa042ae7`package
`628191a76c7614393a74969bd000faa8a6302d887265d13a1ad49dcfc401c2fc`parity ledger
`08a2db12253a06d7c9e188032ef4f5eeaad671698cd8244f3050d13377a3939e`release evidence
`7f514fee95de3d38634c54c7abf342ad44686a9ed5fabe658d04a538cf136c1b`。
- 回归typecheck、lint、全量 Node `168/168`、status consistency12 parity blocked、0 release
blocked、release evidence17 records、0 missing、production build75 modules
`git diff --check` 全部通过V1 acceptance 未加入 post-V1 M11 专项,冻结计数保持不变。
- `docs/status/M11-06.md`、N-019、主计划、项目状态、parity ledger/release evidence 和本文件
已同步M11 更新为 `6/14`。真实远程队列、进度、取消、Freestyle/denoise 以及 M11-07
compositor allowlist 均未提前声明。下一领取点继续只读取机器队列最新 `nextTask`。
M11-07 实际验证2026-08-17 America/New_York
- 领取 M11-07Compositor allowlist 每新增一个 node 单独增加 CPU/WebGPU golden。生产
`web/protocol/compositor.ts` 新增 schema 1 WebGPU plan只允许
`CONSTANT_COLOR`、`EXPOSURE`、`INVERT`、`COMPOSITE` 的无资源、单输入线性 sRGB Float32
链;`CompositorWebGPU.ts` 使用真实 Chromium WebGPU compute 执行同一 plan其他节点、
资源输入、断链和错误 socket 在 shader 编译前返回 `COMPOSITOR_NODE_UNSUPPORTED` 或
`COMPOSITOR_GRAPH_INVALID`。
- Blender 5.2 生成的 `m11_compositor_allowlist.blend` 含 Constant、Exposure、Invert、Chain
四个独立场景。Main/WASM reader 读取真实 graph 后CPU executor 与 Chromium WebGPU
对 2x2 `LINEAR_SRGB` RGBA 输出逐字节一致;四例最大绝对误差 `0`CPU/WebGPU golden
hash 均匹配 committed manifest。
- `WEB_TEST_PORT=5562 npm --prefix web run test:compositor-node-golden`Node `3/3`、
Blender 5.2/native golden `1/1`、Chromium WebGPU `1/1`。首次未设置独立端口的运行只在
5173 占用处停止Node/native 已通过但未计入;端口 5562 从头重跑通过。
- 回归:`npm --prefix web test` 全量 Node `171/171`typecheck、lint、production build
75 modules、`test:status-consistency`12 parity blocked、0 release blocked、17
evidence、0 missing、`test:release-evidence`READY和 `git diff --check` 全部通过。
- M11-07 hashescompositor protocol
`e35fbfafd67e3026c0dba1ffa1d5ca27c5c659e7baa8a577059d23b2779e2dca`CPU adapter
`dfa5be2b01f964ec39c939928aa7b29d30fd88cb3f3705508166983f50442950`WebGPU adapter
`8db2ea4764941c7ab08eca1ab0027d267bb085f4820beb424468506d9ddd1332`unit
`3e5ea2ed500a002fa7acd656ef902d190368f7972d97dffcbecfda1a6864d093`Chromium spec
`ee16413f049e55cd3de3b4f4bb7c133f401ca600eeef8f01ed2a0ccf47740daf`native checker
`668d8ef946df787a2c3d3eee814c71655c8cc6e35976f2e21c6750d5abdaf32`fixture generator
`1389998aac849065311c85ef559a7d381274c0ebe1987afc3b6783c66a9a678e`fixture golden
`fcdd0e875ff799d3c8b7ee34a63b5c88694ef6af3a19fed5d1c51b5330c60c95`M11-07 status
`103291f56e3623825f83de8813348dc437b400eb743b3644715d29f35a7851c4`package
`5529339c7d876c6ed01cc89e2d2d19449a69f6b96e987e4368474d1903cc6189`N-020
`8c5364401ec33ed25b335773e73e35174ebdd3c0d2af5d8f60006eec490406bc`parity ledger
`06b7b1daccdf55989e580fc1f97867a1c7e66142084d1f659db6ccf4927c183d`release evidence
`fe80fada4b0fb6e4d507750ba866c0a8d76b522bcc6c830bf97b834c2913a2b4`。
- `docs/status/M11-07.md`、N-020、主计划、项目状态、parity ledger/release evidence 和本文件
已同步M11 更新为 `7/14`。不把 M11-08 unsupported graph preservation、通用 WebGPU、HDR、
资源/分支 compositor 或服务端执行提前声明。下一领取点继续只读取机器队列最新 `nextTask`。
M11-08 实际验证2026-08-17 America/New_York
- 领取 M11-08 后复核发现Main reader 已保留 Unsupported Glarecapability gate 也返回
`COMPOSITOR_NODE_UNSUPPORTED`,但 CPU executor 会忽略未连接到 Composite 的 Unsupported
节点继续出图cached 入口还可能在执行 gate 前命中旧结果。现已将排序/去重的完整 graph
Unsupported 预检放到 CPU 求值和 cache lookup 之前,两条入口都 fail-closed。
- 专项 unit 证明 Unsupported 失败发生在 cancellation callback/像素分配之前,并预置同 key
cache 后确认仍被阻断;输入 graph 深比较不变。真实 Blender 5.2 `compositor_scene.blend`
经 Main/WASM reader 后Glare name、`UNSUPPORTED` type、`CompositorNodeGlare`、完整 graph
JSON 和 Main revision 在 gate/CPU/cached 三次阻断前后均不变。
- `WEB_TEST_PORT=5565 npm --prefix web run test:compositor-unsupported-gate`unit `2/2`、
native Main reader 通过、Chromium `1/1`。`WEB_TEST_PORT=5566 npm --prefix web run test:e2e
-- --grep "N-020"`:支持图 CPU 执行与真实 Unsupported Main graph 阻断 `2/2`。
- 第一次新增 unit 全量为 `172/173`cached API 是 async但测试误用同步 `assert.throws`,实际
rejection code 已是预期值但落在测试结束后。改为 `await assert.rejects` 后专项与全量从头
重跑,最终 Node `173/173`;该首次失败不计完成证据。
- 回归typecheck、lint、production build75 modules、status consistency12 parity
blocked、0 release blocked、17 evidence、0 missing、release evidenceREADY
`git diff --check` 全部通过;冻结 V1 acceptance 未加入 post-V1 M11-08 专项。
- M11-08 hashescompositor protocol
`4a977cf9e39be1aa75ff14244660589a556039a05550a029ff2c0628a9357b6f`unit
`ab87a04f15f408a2f605b35bc72e67537f2954bee3543ea767f9b2ac04ffdf84`Chromium spec
`c5e4097afb010235f6a245fd8fbe92b5d50eed5ff752ac802fd031f3ffc3adbd`N-020 smoke
`c525c50eb09e3307675d92c59b76b466fba1d736ea2f2ec486ca5467e2777bc6`golden
`6a29952726ff883933d42f069be9591bce7499029ffd1abde17dac21adce831b`package
`fddbbf2158b39cafae0bc5fdec02e5b43737278dce52a5a04e25082802926051`M11-08 status
`60f5b83aecff41cc1d54e5e8e9089a2ec1dac96ef9a0f47d1f65d0a148e0dfa7`N-020
`ff0d330abda09f83993ad4669c89ca62cd83eab6170a2778390f552f58b0978e`parity ledger
`5ea3e379b1ff48659e487ccd65980929cd673c7efa0cae96a2cccc2d44351d17`release evidence
`c43b4d2779956494eb0ebc0b68f91b8b60c5265c977de4c0b85d239f1520819b`。
- `docs/status/M11-08.md`、N-020、主计划、项目状态、parity ledger/release evidence 和本文件
已同步M11 更新为 `8/14`。通用 WebGPU、资源/分支节点、HDR/色彩管理、服务端 Compositor
与 M11-09 media codec probe 均未提前声明。下一领取点继续只读取机器队列最新 `nextTask`。
M11-10 实际验证2026-08-17 America/New_York
- 领取 M11-10新增 schema 1 `SequencerMediaCacheManifestIR`。cache identity 对完整 MOVIE
source family/MIME/byte length/SHA-256、source-bound READY decode receipt、规范化 RGBA8
profile 和 source frame 做确定性 SHA-256`decoded` 字段按 family 显式排序JSON 属性顺序
不影响 identity。proxy payload 另绑定 byte length/SHA-256。
- 生产 `SequencerMediaProxyCache` 在任何 HTMLMedia decode 前复算 source bytes hash 并检查
receipt/source gate只生成初始 decoded frame 的 SRGB8/STRAIGHT RGBA8 proxy不提前声明
M11-11 精确 seek/revision gate。profile 不得超过实际 decoded dimensions单帧和总 LRU budget
上限均为 64 MiB。
- `WEB_TEST_PORT=5573 npm --prefix web run test:sequencer-media-cache`unit `3/3`、Chromium
`1/1`。真实 16x16 H.264 fixture 生成 8x8/256-byte proxyidentity 固定为
`68a3af14865841e81f69bd75f2605461de4819fe025d158ac3723fa0cdf31525`;一帧预算下 frame 1
确定性淘汰 frame 0`clear()` 释放 256 bytes 后 entries/bytes 均为 0。
- Chromium 将 proxy payload 与 manifest 分别通过 Storage Worker 写入 content-addressed
OPFS/IndexedDB asset终止 writer 后由新 Storage Worker 读取并按当前 runtime receipt 复验。
source drift、READY receipt metadata drift、payload mutation 和 bad source bytes 分别返回
`SEQUENCER_CACHE_SOURCE_MISMATCH`、`SEQUENCER_CACHE_CAPABILITY_MISMATCH` 或
`SEQUENCER_CACHE_HASH_MISMATCH`。
- 两次未计入完成的首轮问题均只在测试unit 首轮错误地把恰好 64 MiB 当作超限,修正为
64 MiB 加一行后通过Chromium 首轮在调用 `clear()` 后才采集 `statsBeforeClear`,调整采样
顺序后端口 5572/5573 均从头通过。
- 回归M11-09 codec probe unit `3/3` + Chromium `1/1`100 万帧 long-media `1/1`
10,001 strips/11,914 references、71 次 LRU 淘汰、双 Worker 重开和固定 session hash 通过;
Sequencer Main reader 通过;全量 Node `179/179`typecheck、lint、production build75
modules、status consistency12 parity blocked、0 release blocked、17 evidence、0 missing
release evidenceREADY和 `git diff --check` 全部通过。
- M11-10 hashesprotocol
`1dd5ee8cade2642723bac6f0c8e34d09cf178d000beba6eb63626284ee35fd5e`browser adapter
`57070b1a42129afdfb8121ec11a48b0792b3de9d84f7e8a78017c7d6e12343aa`app exports
`8ca82257c758580f5fe91a3a5cd21f8ae9e9ce10f9fa71fcd7cf1f30e0b6367b`unit
`f4cc1171dd6875bf079e242beed846409a1d1f53b9497882aa475bd2773b43c7`Chromium spec
`6d9d26e3639a74b173f77ec5d67e53e5ec42b88dd6e34bda54c8168b8251423e`golden
`39a71f8d97f0045da6ec913b6a0231ac3363f67a420eea5ab3fabaa8f1d47c33`package
`2c7fb9f8657155088e4a080443b8a0ba9c13aae9f46f1807ff3b8820640c44c4`M11-10 status
`0569c1881a74522ae7fd83e8d9e6b2f21e6e8b0b507ca1569c7b1a9a2245a02d`parity ledger
`b41f56a687bb95ca584a263ac7fc42111930fc63bc6ee780ef11c2bf3056aeb1`release evidence
`8cb240e06078e5ce49a345b4ea68b1d9eb543040acd2da5caef0fe4bc6a56fca`。
- `docs/status/M11-10.md`、N-021、主计划、项目状态、parity ledger/release evidence 和本文件
已同步M11 更新为 `10/14`machine slice 计数为 188 completed/58 blocked。精确 seek/scrub
revision gate、多帧 proxy、waveform、A/V sync、设备恢复和最终编码均未提前声明。下一领取点
继续只读取机器队列最新 `nextTask`,本文不缓存任务名称。
M11-11 实际验证2026-08-17 America/New_York
- 领取 M11-11新增 schema 1 `SequencerMediaRevisionRequestIR/ResultIR/StateIR`SEEK、SCRUB、
DECODE 三类操作共享 timeline ID/revision 与单调 request revisioncompleted result 必须逐字段
回显 request identity并增加有界 source frame 与 payload SHA-256。未知字段、非法 operation、
小数 revision 和非法 hash 在 revision gate 前拒绝。
- 生产 `SequencerMediaRevisionGate` 的每次 `begin` 先推进 request revisiontimeline replacement
再推进一次 revision token 以使全部 pending request 失效,同 timeline revision 不允许倒退或
重复。`resolve` 只有在纯 gate 返回 `PUBLISH` 后才调用 callback因此 stale result 不会更新
visible frame 或写 decode cache。
- `WEB_TEST_PORT=5576 npm --prefix web run test:sequencer-media-revision` 首次完整运行即通过:
unit `4/4`、Chromium `1/1`。浏览器让 SEEK@1 晚于 SCRUB@2 返回,只有 SCRUB 发布;真实 H.264
DECODE@3 在 timeline 7->8 换代后完成并被阻断;当前 DECODE@5 发布并成为唯一 cache write
requestId 伪造的 SEEK@6 同样为 `STALE/REVISION_CONFLICT`。
- machine golden 固定五项决策和副作用:`SCRUB@2 PUBLISH`、`SEEK@1 STALE`、
`DECODE@3 STALE`、`DECODE@5 PUBLISH`、`SEEK@6 STALE`published 仅
`[SCRUB@2,DECODE@5]`cacheWrites 仅 `[DECODE@5]`。该任务关闭的是结果发布竞态门,不把
synthetic SEEK/SCRUB completion 扩写为帧精确 WebCodecs seek。
- 回归M11-10 unit `3/3` + Chromium `1/1`M11-09 unit `3/3` + Chromium `1/1`100 万帧
long-media `1/1`;全量 Node `183/183`typecheck、lint、production build75 modules
status consistency12 parity blocked、0 release blocked、17 evidence、0 missing、release
evidenceREADY和 `git diff --check` 全部通过。
- M11-11 hashesprotocol
`326f1525f50af3b2c4132ff58508ed6174ba3aa4a5075b2a6660e549c280826a`production controller
`29a44404bb28e46d67439eec0622a69ce4cd7264ce45da77a3f320c8687b7006`app exports
`be2eca8482a60e437878b99f69d3178f47fee61618886d141760320e3a3ed1e1`unit
`2099f738120897dfdfbb8662741831774b5f9150d51924dfa7832907177de5e7`Chromium spec
`e47f105360ce0e2d4d561d3cf790ceec9f41dd6bac7361965914ada307db843c`golden
`672b4fde6e27f8b15cd51d839cacb5efb128c0d0f4c7f6aa4e184c713f9b45e5`package
`5d17b17d67ee587191552c3dfe226cd8f2e5a872791224d8e6c22aafa1177ebe`M11-11 status
`bc246287b4a97735c9e19642029257ff83498c262490c289ea6791bdec0c038b`parity ledger
`e5d5078364184def026573cb0645b566770dc03412246de27fc493971ddcdba0`release evidence
`81ac36f001f09567fe3f837ed31f9b0c601939962162fbdfb192494a1ac89d77`。
- `docs/status/M11-11.md`、N-021、主计划、项目状态、parity ledger/release evidence 和本文件
已同步M11 更新为 `11/14`machine slice 计数为 189 completed/58 blocked。帧精确
WebCodecs seek、多帧 proxy、最终编码、音频设备恢复和跨域 fault lifecycle 均未提前声明。
下一领取点继续只读取机器队列最新 `nextTask`,本文不缓存任务名称。
M11-12 实际验证2026-08-17 America/New_York
- 领取 M11-12新增 schema 1 `SequencerFinalExportRequestIR/RouteIR`,将 Main timeline
ID/revision、source `.blend` SHA-256、帧范围/有理帧率、分辨率和声明的 container/video/audio
codec 绑定为 settings/request 两级 SHA-256。帧范围与 Blender/server render 合同一致支持
-1,000,000..1,000,000但总帧数最多 1,000,000非法组合、未知字段和超预算输入在路由前拒绝。
- 生产路由唯一结果为 `SERVER_EXPORT`。endpoint 缺失返回
`BLOCKED/SEQUENCER_EXPORT_SERVER_UNAVAILABLE`endpoint 存在只返回
`SERVER_EXPORT_REQUIRED`。浏览器 `VideoEncoder` 仅记录探测事实,存在与否都不能改变 route
`localEncoding` 始终为 `BLOCKED`;真实 server encode、上传/进度/取消、混音和输出验证未提前声明。
- `WEB_TEST_PORT=5579 npm --prefix web run test:sequencer-final-export` 首次完整运行通过unit
`4/4`、Chromium `1/1`。浏览器通过 WebEngine Main 打开真实 Blender 5.2
`sequencer_scene.blend`,使用 timeline `sequencer:scene:SequencerScene` revision 1、frames
1..250、24000/1001 FPS 建立请求;无 server、有 server/无 encoder、有 server/注入 encoder
和实际 Chromium scope 四种路径均保持本地编码阻断。
- machine golden 固定 source blend
`5f5212487bb6b5df62b5ca915c75133f1ca45678614712ea4c7d902d823cd90c`、settings
`01e39d1fdd88c75aecad7bc48a2b756bbcd645929963528b42ceb180b51e5566` 和 request
`20d3a9e333804e014a993a9892a557842293fc44902229dd6eb65661f0691cfc`。
- 回归M11-09 unit `3/3` + Chromium `1/1`M11-10 unit `3/3` + Chromium `1/1`M11-11
unit `4/4` + Chromium `1/1`100 万帧 long-media `1/1`Sequencer Main reader全量 Node
`187/187`typecheck、lint、production build75 modules、status consistency12 parity
blocked、0 release blocked、17 evidence、0 missing、release evidenceREADY
`git diff --check` 全部通过。
- M11-12 hashesprotocol
`559516163ce9a9c60917033455c71a1ae6be2f34666371f12723a056ddfdb3dd`browser adapter
`f9f193eb71afa48a23b4eb618cd98b5c0064c59943b3652fb6a601b545ac175c`app exports
`d30783528fabaaefe8835998e11d75da357d265ee06db67713e57e4b85b58d7d`error contract
`747894b216db59c753b24ce85eb946925e64340f63684311e5d9628c9a6a9c8e`unit
`6f5030852e89160fd898b2aff4dc9911963342bd6c2301a2c0e8a3d518ddbcbd`Chromium spec
`d8cba79c9a330c1e5c777c8f0ed08362b29f50702c31d8229fd65f4304bce363`golden
`c0061f82ef156e53ad4dfc6aedf7c6a8f53e616d8d9fa1435fd9491ba3d07e01`package
`83ee5bfa50a0e5b742048d4563ae815171232a121cf3df4a1e813f21313a6509`M11-12 status
`fc849c33261969db9ea32e7c55ffc713e0e715c62a19532a8c9f42dc12c1fb96`N-021
`5acf3e554512ae715dd887deb039637179b51b6ee64442d74a1f7c8e0ce5a04f`parity ledger
`7f548c66ca871bca059deb9553ee50ac9bd9d3909f1e9be9cce004c7b938154e`release evidence
`9cb2a4b8f315c0e1d2baa5ed5899ea2241d4f03d43188709b2e9d904e96dfdf0`。
- `docs/status/M11-12.md`、N-021、主计划、项目状态、parity ledger/release evidence 和本文件
已同步M11 更新为 `12/14`machine slice 计数为 190 completed/58 blocked。M11-13 音频
context/device 恢复和 M11-14 跨域 fault lifecycle 均未提前声明。下一领取点继续只读取机器
队列最新 `nextTask`,本文不缓存任务名称。
M11-13 实际验证2026-08-17 America/New_York
- 领取 M11-13新增 schema 1 `SequencerAudioSessionReportIR`,将 context 的
`UNAVAILABLE/SUSPENDED/RUNNING/CLOSED` 与 output 的 `BLOCKED/SILENT/ENABLED` 分离;每个
initialize/resume/suspend/mute/recover/close 操作推进单调 revision并绑定 muted、有效 gain
和稳定 issue code。矛盾状态例如 suspended/muted 却 ENABLED在协议层拒绝。
- 生产 `SequencerAudioSession` 独占一个 `AudioContext` 和 master `GainNode`。mute 将 gain 设为
0unmute 恢复配置的 0.75resume/suspend 必须观察到真实目标 state 才返回成功。close 先归零、
disconnect再关闭 context 并丢弃引用。缺 API/构造失败、resume failure 和 suspend failure
分别保持静音并返回稳定结构化 code不把 API 存在当作设备 READY。
- `WEB_TEST_PORT=5586 npm --prefix web run test:sequencer-audio-recovery` 首次完整运行通过unit
`3/3`、Chromium `1/1`。浏览器在真实 click handler 内创建原生 `AudioContext`,依次通过
suspend、mute、muted resume、unmute、二次 suspend/resume 和 closemachine golden 序列中
muted resume 为 `RUNNING/SILENT/gain=0`unmute 为 `RUNNING/ENABLED/gain=0.75`close 为
`CLOSED/SILENT/gain=0`。显式缺设备 scope 返回
`UNAVAILABLE/BLOCKED/SEQUENCER_AUDIO_DEVICE_UNAVAILABLE`。
- 回归M11-09 unit `3/3` + Chromium `1/1`M11-10 unit `3/3` + Chromium `1/1`M11-11
unit `4/4` + Chromium `1/1`M11-12 unit `4/4` + Chromium `1/1`100 万帧 long-media
`1/1`Sequencer Main reader全量 Node `190/190`typecheck、lint、production build75
modules、status consistency12 parity blocked、0 release blocked、17 evidence、0 missing
release evidenceREADY和 `git diff --check` 全部通过。
- M11-13 hashesprotocol
`0b1b75c7630b599723914bbced9ee0a107bd8c0ac4382ced1f1c5114dac8fd01`production controller
`c09914d2581ee454e042ed6a9ef5b8c0f6f7b0688eadb1deff45163263742109`app exports
`e630f647ddd3680a04e07ce7388cf03f54268d4e2d839aa5991cb9ceb6a53bda`error contract
`6589f712058a39a2177cb174cc355c01777a549d254c4b9eac2301a344c619f2`unit
`1a888d1b19a3d12091e6edd05287a5bcc19912415cf7f2ed73a028d12846a298`Chromium spec
`1b94ea07ab5fafb0b06fbd73742c77d6b69d745a546fc60def85857844afc719`golden
`584aea46687fd5cec8d89e8fac51314acc9a8d05af2a8d762e8d6a74483e0940`package
`8d87390f9b1b7382bf9c0ba189f7a9d95daa3ee15d1d422a8d856fa4eb6d3cca`M11-13 status
`51b28251b41468450553699c1d6766343c6ea286b97cab078f27eeb7936ef500`N-021
`e9b9b64cc9521acf51c59b3051996c12644fe47a80c4b89a24e1e68dfed6f66c`parity ledger
`0a9b4c1026c42b5f77869f222b1531601ed229184a1d1737e74047c7b3406730`release evidence
`c6da09f4c7c584d7f0139c324fd3e80f33a33a28d866d6c7f8dadf9f7507076c`。
- `docs/status/M11-13.md`、N-021、主计划、项目状态、parity ledger/release evidence 和本文件
已同步M11 更新为 `13/14`machine slice 计数为 191 completed/58 blocked。waveform、A/V
sync、实际多 strip 混音/设备选择和 M11-14 跨域 fault lifecycle 均未提前声明。下一领取点
继续只读取机器队列最新 `nextTask`,本文不缓存任务名称。