# CS10:取消、上下文销毁与设备恢复 - queueTask: WBV2-P1424-001 - parentTask: WBV2-P1424-000 - packageStatus: planned - dependsOn: CS03, CS08, CS09 - validation: NOT_RUN;acceptance: NOT_CLAIMED ## 业务与交付 主应用停止任务/替换文件/销毁区域/重启 Worker/丢失 GPU → 安全回收 → 下一轮原生业务 跨层生命周期实现和结构化失败事件;可继续下一次操作,晚结果不污染新 Main/新 context。 ## 最小输入与源码依据 - `web/app/src/engine-client/gpu-compute-host.ts` - `web/app/src/workers/gpu-compute.worker.ts` - `web/protocol/gpu-compute.ts` - `web/app/src/workers/web-engine.worker.ts` - `blender-5.2.0/source/blender/gpu/webgl/webgl_shader.cc` - `blender-5.2.0/source/blender/gpu/webgl/webgl_backend.cc` - host 已有 Atomics.wait、超时、取消和 broker terminate;worker 已有 device.lost 与 owner release。 - 需将 native owner 提交、device 缓存及主应用模块销毁作为同一生命周期处理,已有 handler 不等于整链已完成。 ## 实现步骤 1. 统一 request/session/context/device generation;对每次结果发布及 owner commit 检查当前代数。 2. 销毁/取消先使请求不可提交,再回收 pipeline、staging、buffers/textures 和 broker;保证 serial 队列等待者被唤醒。 3. device loss 后保留最后 coherent 原生数据,创建新 device 时从原生版本重建资源;未发布的 GPU-only 数据标记需要重新生产。 4. 为原生 C++/Python/Worker/main UI 设置一致错误边界,防止异常越过未处理的 ABI 边界或静默吞掉业务失败。 ## 失败边界 取消成功不得更新资源版本或 Main;不自动重放有副作用的业务操作。 发生阻塞时记录具体业务、原生函数/create-info、producer/consumer 和下一修复动作;保留既有产物,继续无此依赖的实现卡,不用缺失证据作为实现阻塞。 ## 延后的用户场景(当前不执行) - 编译/dispatch/readback/commit 各阶段取消 - 文件替换后晚结果 - 设备丢失、释放次序、Worker 重启 - 超时后重试 没有在本次拆解中创建或运行测试 fixture。原生 shader、现有模板和真实业务数据是实现输入;需要新增用户使用 fixture 时在全项目实现完成后安排。 ## 交接 每次报告填写:实际 workflow/route、源码函数与修改、仍未实现接口、产物元数据(仅生成时)、失败/no-mutation 策略、implementation 状态、validation=NOT_RUN、acceptance=NOT_CLAIMED、下一实现动作。记录 unitCount/verifiedUnits/unverifiedUnits/sourceTreeSha256 的来源;未绑定/未验证不增记覆盖。 执行约束:本卡属于 WBV2-P1424-001 / parent WBV2-P1424-000,nextTask=null 保持不变。全部功能实现前不执行测试、回归、冒烟、浏览器验收、类型/语法/上下文检查或证据审计。仅为产物生成进行必要增量编译。源码检索使用 tools/web/search-wbv2-batch-source.mjs 的精确 --source/--unit;GLSL fixture 只读取本卡列出的原文件。不加载完整专项规划、历史日志或源码 inventory。JS 仅承担浏览器 API/传输;几何算法仍使用 OCCT 出口,Three.js 仅显示。