Files
FreeCADWasmDev/docs/current/techdraw-route-unblock.md
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

4.2 KiB
Raw Blame History

TechDraw 浏览器业务解阻

2026-09-09。本轮直接使用已有 OCCT/FreeCAD WASM,没有修改或编译 C++、OCCT、WASM,也没有改换几何算法。完整几何入口统一是持续约束,本报告只确认下列实际业务链已经贯通。

根因与修复

  1. 原生 TechDraw 页面已经能绘图、导出 SVG 和通过像素检查;超时停在加载模块 manifest 后的路由调用,而非 OCCT 运算。
  2. 路由器的 TechDraw 特例将创建/保存转到 techdraw.desktopCommand 的 Worker,但生成表缺少该命令映射,回退到 techdraw-native.worker.ts。该 Worker 负责另一种导入导出契约,返回 requestId=invalid;原路由器忽略无法关联的错误,导致请求等待至 45 秒超时。
  3. 生成表现在将创建、保存、桌面任务映射到已有 techdraw-python.worker.ts,复用其中已完成的处理器和同一原生文档。删除路由器内重复的 TechDraw 特例;启动错误及 invalid/initialization 错误立即拒绝并释放会话,不丢弃正常关联的业务错误。
  4. 本机 TechDrawDesktopCommands.cpp 的图像取消合法返回 cancelled,Facade 状态集合此前遗漏它;已补齐,同时保留身份、源码版本、资源状态和错误信息校验。实际浏览器验证取消不新增/删除图像。
  5. 旧保存展示页面仍读取新持久化契约不再提供的 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 命令已完成。其它模块的业务错误由原无人值守队列继续处理,历史失败与完整范围保留。