Files
FreeCADWasmDev/docs/current/FREECAD_WEB_PORT_STATUS.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

3.3 KiB
Raw Blame History

FreeCAD Web 移植状态与完成边界

更新时间:2026-08-23

这份报告说明当前项目已经由真实 FreeCAD C++/Python 源码移植到 WASM 的能力、证据位置,以及仍然阻断完整对标的外部条件。它是交接文档,不替代 docs/current/task-state.json、任务卡或 JSON 证据。

已完成

以下模块已经完成对应 Y gate,并有独立的 native WASM、Facade/Worker、Chrome 或持久化证据:

Assembly, BIM, CAM, Cloud, Draft, Fem, Help, Import, Inspection, JtReader, Material, Measure, Mesh, MeshPart, OpenSCAD, Part, Points, Sandbox。

本轮新增的可复核动作包括:

  • PartDesign inspect/source-inventory:8 个 native 注册类型、错误恢复、Facade/Worker、Chrome 151 回放。
  • PartDesign python-api:真实 makeFilletArc Python 导出和 2 个生成 binding 单元、Facade/Worker、Chrome 回放。
  • Points save/reopen:真实 Points::Feature 三点 FCStd 保存、关闭、重开、对象/边界校验、Facade/Worker、Chrome 回放。

对应证据位于 docs/p6/partdesign-action-02-*、docs/p6/partdesign-action-03-* 和 docs/p6/points-action-04-*。

当前阻断

Sketcher / PartDesign restore

真实 FCStd 保存成功,但 GUI-free WASM 的 Document::restore 稳定返回:

map::at: key not found

已验证的恢复尝试包括:移除 Sketcher constraint、关闭 UseHasher、使用 restore(delaySignal=false),均未改变结果。证据:

  • docs/p6/sketcher-action-04-kernel.json
  • docs/p6/sketcher-action-04-kernel-r2.json
  • docs/p6/sketcher-action-04-kernel-r3.json
  • docs/p6/partdesign-action-04-kernel-r1.json

在共享 Document::restore/ElementMap 修复前,不得把这两个模块的 save/reopen 或 Y gate 写成通过。

缺失 Web probe 或 GUI 依赖

以下模块已有源码边界,但当前配置没有可链接的 GUI-free Web runtime probe,或依赖 Qt/PySide/FreeCADGui:

Plot, ReverseEngineering, Robot, Show, Spreadsheet, Start, Surface, TechDraw, TemplatePyMod, Test, Tux, Web。

每个模块的首个阻断、复现命令和恢复动作均保存在对应 docs/p6/*-runtime.json 与 docs/tasks/p6/*/*-R1.md。

架构合同

  • 内核、计算、文件格式、Python module 和持久化必须由 FreeCAD 原生源码执行。
  • TypeScript 只负责 Worker、Facade、消息 envelope、取消/重复请求和 UI 适配。
  • Chrome 证据固定为 Google Chrome、headless-new、1440x900、DPR 1,并要求外部请求与运行时异常为 0。
  • docs/current/task-state.json 是唯一任务状态源;nextTask.md 只是续接入口。

复现与恢复顺序

  1. 运行 python3 tools/validate_web_context.py 和 python3 tools/prepare_web_task_context.py。
  2. 只读取当前 manifest 的 mode=read 文件。
  3. 优先修复共享 Document::restore/ElementMap,再重跑 Sketcher 与 PartDesign 原始 fixture。
  4. 为缺失 probe 的模块补充真实 C ABI/WASM target;GUI-only 模块需要明确 GUI/PySide 依赖闭包,不能用静态 JS 替代。
  5. 每个动作完成 C-G 后再关闭动作卡,最后由 Y gate 改变模块状态。

当前账本在 FW-P6-SKT-ACT-04-C-R1 恢复卡停留,校验器通过但没有依赖满足的 planned 叶子。任何继续工作都必须先解决上述 native 或外部依赖阻断。