4.2 KiB
TechDraw 浏览器业务解阻
2026-09-09。本轮直接使用已有 OCCT/FreeCAD WASM,没有修改或编译 C++、OCCT、WASM,也没有改换几何算法。完整几何入口统一是持续约束,本报告只确认下列实际业务链已经贯通。
根因与修复
- 原生 TechDraw 页面已经能绘图、导出 SVG 和通过像素检查;超时停在加载模块 manifest 后的路由调用,而非 OCCT 运算。
- 路由器的 TechDraw 特例将创建/保存转到
techdraw.desktopCommand的 Worker,但生成表缺少该命令映射,回退到techdraw-native.worker.ts。该 Worker 负责另一种导入导出契约,返回requestId=invalid;原路由器忽略无法关联的错误,导致请求等待至 45 秒超时。 - 生成表现在将创建、保存、桌面任务映射到已有
techdraw-python.worker.ts,复用其中已完成的处理器和同一原生文档。删除路由器内重复的 TechDraw 特例;启动错误及 invalid/initialization 错误立即拒绝并释放会话,不丢弃正常关联的业务错误。 - 本机
TechDrawDesktopCommands.cpp的图像取消合法返回cancelled,Facade 状态集合此前遗漏它;已补齐,同时保留身份、源码版本、资源状态和错误信息校验。实际浏览器验证取消不新增/删除图像。 - 旧保存展示页面仍读取新持久化契约不再提供的 objectType/drawPageRestored,阻断项目类型检查;现展示实际 documentId/objectCount。未用虚构字段或固定保存样例补洞。
实测结果
| 检查 | 结果 |
|---|---|
| 修复前 manifest 路由调用 | 45 秒超时;正式组约 49.5 秒失败 |
| 修复后相同绘图路由 | 735.5 ms 返回真实体积 70 的绘图 |
| 创建后经路由保存 | 同一 Worker、同一 RouterDrawing,4 个对象,3711 字节 FCStd |
| 桌面/手机绘图 | 1440x900、390x844 均无横向溢出,像素检查通过 |
| 上传/取消/文档切换 | 红/绿图像分别保留在对应原生文档,取消不改变图像数 |
| TechDraw 正式三项组 | 9.071 秒,3/3 通过 |
| TypeScript 项目检查 | tsc --noEmit -p tsconfig.json 通过 |
| 路由/预加载/产物测试 | 18 项通过 |
| 业务恢复与上下文等 Python 回归 | 74 项通过,13.069 秒 |
正式证据:docs/current/business-evidence/c4912b07138f49213cf41bc5-20260908T222954046754.json。截图及像素检查见 docs/current/techdraw-browser/。诊断可设置 FREECAD_TECHDRAW_TRACE=1,仅输出浏览器调用阶段及耗时,默认关闭。
复用策略
已修复 run_business_acceptance.py --reuse 要求所有记录来自单一证据文件的限制。多份证据分别通过当前指纹、文件哈希、用例依赖、失败/问题观察检查后可直接组合复用;返回 evidencePaths,不伪造合并证据,不刷新原时间戳。测试确认无子进程执行和账本重写;任一证据被改动仍拒绝复用。
真实复用检查:Mesh 四项报告 861a62e7909a5ae10a4e8918-20260908T223134871846.json 与三项报告 95ecd0b951ea80cb9b9a8524-20260908T223314981130.json 合并选择 7 项后,--reuse 返回 passed=7、reused=true、耗时 0.050 秒,没有重新执行 WASM。两份报告均在 docs/current/business-evidence/。新增规则后的上下文/证据复用 23 项补充回归也通过。
之前账本 53 项通过但只有 30 项当前有效,核对发现其中 23 项指纹不匹配,记录本身未删除。共享路由或相关源文件改变后,不能直接恢复旧通过数字。继续由本地流水线按受影响模块确认,未变的有效结果复用;验收比例不是全部源码移植进度。
后续边界
- OCCT WASM 已提供:
web/public/kernel/FreeCADWebKernel.{js,wasm},现有入口kernel.worker.ts→FreeCADWebBridge.cpp使用 OCCT STEP/BRep/网格化。继续将几何请求统一到已有内核执行链,Three.js 不承担 CAD 算法。 - 本次 TechDraw 复用现有 FreeCAD 原生模块及 OCCT 依赖,未将所有独立模块合并为一个 WASM 或证明全项目入口均已统一;不得跨实例传递原生指针。
- 本次三项通过不代表全部 TechDraw 命令已完成。其它模块的业务错误由原无人值守队列继续处理,历史失败与完整范围保留。