64 lines
3.3 KiB
Markdown
64 lines
3.3 KiB
Markdown
# 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` 稳定返回:
|
||
|
||
```text
|
||
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 或外部依赖阻断。
|