102 lines
5.8 KiB
Markdown
102 lines
5.8 KiB
Markdown
# Web FreeCAD 当前工作主线
|
||
|
||
更新时间:2026-08-14
|
||
|
||
## 1. 唯一目标
|
||
|
||
本项目的目标是把锁定的 FreeCAD `1.1.1` 能力准确迁移到浏览器,而不是另做一套外观相似的通用 Web CAD。
|
||
|
||
浏览器端必须继续遵守现有边界:React 只负责交互,所有 CAD 业务通过 `BitBybitWebCadFacade`;几何、求解、命名和持久化分别在受控 Worker/WASM 边界内执行;最终几何相似不能替代 FreeCAD 文档语义、原生历史、拓扑命名和 FCStd 往返证据。
|
||
|
||
## 2. 当前真实状态
|
||
|
||
截至 2026-08-14:
|
||
|
||
- 系统级 FreeCAD exact claim 为 `false`。
|
||
- 34 个模块中 `0 exact`、`26 compatible`、`5 proxy`、`3 development`。
|
||
- 兼容实现账本 P01-P10 已全部标记为 `completed`,表示已有实现和对应门禁,不表示与 FreeCAD 完全等价。
|
||
- exact 计划共 52 项:`5 completed`、`36 in_progress`、`11 pending`。
|
||
- 已完成的 exact 项只有 `EX-TSN-00..03` 和 `EX-PD-02`:原生命名证据边界、逐阶段历史、生产私有命名、同构来源处理,以及 Attachment/XLink 生命周期。
|
||
- exact 发布任务 `EX-REL-01` 仍为 `pending`,34 个模块都不得提升为 exact。
|
||
|
||
状态冲突时按以下顺序取真值:
|
||
|
||
1. `config/freecad-web-exact-parity-plan.json`:是否达到 FreeCAD exact 及具体阻断项。
|
||
2. `config/release-capability-matrix.json`:对用户可声明的模块能力等级。
|
||
3. `config/freecad-execution-plan.json`:兼容实现工作包是否已有执行闭环。
|
||
4. `config/*-verification.json` 和原生 oracle:某次具体环境运行的证据。
|
||
5. `docs/continuation-status.zh-CN.md`:按时间追加的历史日志,不作为当前总状态入口。
|
||
|
||
## 3. 当前架构主链
|
||
|
||
```text
|
||
React / FreeCAD Web UI
|
||
|
|
||
BitBybitWebCadFacade
|
||
|
|
||
Document + Property + Transaction + DAG/Recompute
|
||
|
|
||
Geometry / Sketch / Naming / Project Facades
|
||
|
|
||
Dedicated Workers
|
||
|
|
||
Bitbybit OCCT + FreeCAD naming + planegcs + SQLite OPFS
|
||
|
|
||
FCStd / STEP / IGES / mesh / engineering resources
|
||
```
|
||
|
||
任何新功能都必须接入这条主链,不能从 React 绕过 Facade 直接调用 Three.js、OCCT、文件系统或持久化实现。
|
||
|
||
## 4. 执行优先级
|
||
|
||
### P0-A:锁定完整原生 oracle
|
||
|
||
对应 `EX-ORA-01/02`。穷尽运行时 TypeId、Property、GUI command、成功/失败/取消状态和 feature-family mutation 夹具。没有原生基线的功能不进入 exact 实现判断。
|
||
|
||
### P0-B:关闭跨特征拓扑命名
|
||
|
||
对应 `EX-KER-01`、`EX-TSN-04`。完成生产 Worker 五阶段链与桌面 30-case 逐阶段对账,补齐跨特征 mutation 矩阵、builder flags 和失败分支。目标是错误绑定、未解释关系和保存重开名称漂移均为零。
|
||
|
||
### P0-C:关闭 App 文档语义
|
||
|
||
对应 `EX-DOC-01/02/03`。当前 85 种运行时 Property 中仍有 62 种只能 opaque 保存。15 类已观察到的 Property status 均已进入类型化位掩码和 FCStd 无损读写,其中 13 类已由锁定的 FreeCAD 1.1.1 探针和 Facade 行为覆盖:`Output/PropOutput` 不 touch,`PropNoRecompute` 只传播依赖对象,`Transient/PropTransient` 保留定义但跳过值,`PropNoPersist` 完全省略。`LockDynamic` 和 `PartialTrigger` 仍是保存与原生 oracle 记录,尚未进入动态属性结构变更和 partial document observer 行为。后续依次补齐剩余 Property codec/editor、事务与 observer 顺序、局部重算失败、Extension 和 FeaturePython 边界。
|
||
|
||
### P0-D:关闭核心建模语义
|
||
|
||
对应 `EX-SK-01/02`、`EX-PART-01`、`EX-PD-01`。按原生 oracle 逐特征补齐参数组合、失败诊断、编辑恢复、原生 history 和 FCStd 往返;不能按整个工作台批量提升等级。
|
||
|
||
### P0-E:关闭 FCStd 和核心格式
|
||
|
||
对应 `EX-FC-01`、`EX-FMT-01`。先完成所有原生 Property/Shape/ElementMap/StringHasher 的保存、重开、再保存,再处理 STEP/IGES 的高级元数据和装配语义。
|
||
|
||
P1/P2 的 GUI 全量对标、其他工作台、代理模块和跨浏览器发布,必须在上述 P0 主链有明确前置证据后推进。当前不再以增加工作台数量作为主要进度指标。
|
||
|
||
## 5. 每项工作的完成定义
|
||
|
||
一个 FreeCAD 能力只有同时具备以下证据,才可关闭对应 exact 任务:
|
||
|
||
1. 锁定 FreeCAD 1.1.1 的原生成功、失败、取消和编辑 oracle。
|
||
2. Facade 内的结构化实现,无 UI 直连内核旁路。
|
||
3. 真实浏览器 Worker/WASM 回放,不以 Node mock 代替。
|
||
4. FCStd 保存、关闭、重开、再次保存后语义稳定。
|
||
5. Undo/Redo、局部失败、崩溃或 stale generation 不破坏最后有效状态。
|
||
6. ShapeHandle、Worker、OPFS 等资源在结束后正确释放。
|
||
7. 聚焦测试、相关 Chrome gate、计划/能力矩阵和差异说明同步更新。
|
||
8. exact promotion gate 不依靠改写报告或放宽断言通过。
|
||
|
||
## 6. 近期工作队列
|
||
|
||
1. 保持现有验证资产可复现,先处理任何 `failed` 浏览器 gate,再开始新里程碑。
|
||
2. 完成 `EX-TSN-04` 的生产五阶段链与桌面 resave 逐阶段相关性对账。
|
||
3. 从 `EX-ORA-02` 输出的 feature-family 缺口中选择一个 P0 特征族,补齐 mutation、失败、恢复、round-trip 全证据。
|
||
4. 以原生 Property 缺口报告为输入推进 `EX-DOC-01`,每批只提升有 codec 和状态语义证据的类型。
|
||
5. 每个里程碑运行聚焦检查;准备合并时再运行 `./npmw run verify`、`git diff --check` 和 JSON 校验。
|
||
|
||
## 7. 明确不做
|
||
|
||
- 不把项目改成远程桌面、服务端截图流或仅 UI 仿制品。
|
||
- 不新增绕过 Facade 的几何、渲染、脚本或存储入口。
|
||
- 不以 mock、静态截图、最终 Shape 相似或单次成功回放声明 exact。
|
||
- 不为追求模块数量继续铺开低优先级工作台,优先关闭 P0 核心语义。
|
||
- 不在 `EX-REL-01` 全部条件满足前宣传“完整 FreeCAD Web 版”。
|