feat: establish reproducible FreeCAD web compatibility baseline

This commit is contained in:
2026-08-10 16:11:38 -04:00
parent e5a5d74dbc
commit b962a5c3b5
733 changed files with 349081 additions and 647 deletions

View File

@@ -18,28 +18,38 @@
| 批次 | 任务范围 | 主要交付物 | 退出门禁 |
|---|---|---|---|
| R0 参考环境 | `BASE-01..04``INV-01..06` | 完整桌面 oracle 构建清单34 模块、命令、TypeId、Property、格式和错误清册 | 锁定提交可重建;清册无未登记入口 |
| R1 几何内核 | `BYB-03..08``TSN-03..10` | 可复现 Bitbybit/OCCT 构建浏览器原生历史Shape 生命周期;三方黄金差分 | Boolean/PartDesign 历史无静默错绑;长会话无泄漏 |
| R0 参考环境 | `ORA-01..02``INV-01..04``BASE-03..04` | 完整桌面 oracle 构建清单34 模块、命令、TypeId、Property、格式和错误清册 | 锁定提交可重建;清册无未登记入口 |
| R1 几何内核 | `BYB-03``BYB-05..08``BROWSER-OCCT-01``MEM-OCCT-01``TSN-03..10` | 可复现 Bitbybit/OCCT 构建浏览器原生历史Shape 生命周期;三方黄金差分 | Boolean/PartDesign 历史无静默错绑;长会话无泄漏 |
| R2 Sketcher | `SK-03..12` | planegcs WASM完整几何/约束/DOF/冲突;外部几何;编辑回放 | FreeCAD 草图成功/失败/冗余行为黄金通过 |
| R3 参数化核心 | `CORE-01..12``PART-*``PD-*` | Document/Property/DAG/Body/Tip/SupportPart 与 PartDesign 全特征 | 编辑→重算→Undo→保存→加载闭环通过 |
| R4 文件互操作 | `FC-04..11``PKG-*` | Document/GuiDocument、BRep/Shape、Expression/Link/TopoRef、未知字段保留 | FreeCAD→Web→FreeCAD 双向差异可解释且无静默丢失 |
| R5 核心工作台 | `TD-*``SS-*``DRAFT-*``PLOT-*` | TechDraw、Spreadsheet、Draft、Plot 的对象、命令、任务和格式 | 每命令至少成功/失败/round-trip fixture |
| R6 工程工作台 | `ASM-*``BIM-*``MESH-*``SURF-*` | 装配、BIM、网格、曲面全链路 | 求解/几何/IFC/网格黄金和大模型预算通过 |
| R7 分析制造 | `FEM-*``CAM-*``ROBOT-*``INSP-*` | 求解器/后处理/刀路/仿真/检测报告 | 求解或明确远端能力G-code/结果文件黄金通过 |
| R8 平台长尾 | `PTS-*``RE-*``OSC-*``IDF-*``JT-*``MAT-*``APP-*``SCRIPT-*` | 数据模块、插件、宏/API、桌面通用能力的实现或显式代理 | 无未分类入口;安全和权限模型通过 |
| R9 发布 | `QA-*``REL-*`、F0-F9/G0-G9 | 跨浏览器、性能、故障注入、安全、SBOM、迁移和发布 runbook | 所有阻断项关闭后才允许声明完整对标 |
| R3 参数化核心 | `CORE-09..11``PART-ALL``PD-BASE``PD-LOFT``PD-DRESSUP``PD-TRANSFORM``PD-CLOSURE` | Document/Property/DAG/Body/Tip/SupportPart 与 PartDesign 全特征 | 编辑→重算→Undo→保存→加载闭环通过 |
| R4 文件互操作 | `FC-04..11` | Document/GuiDocument、BRep/Shape、Expression/Link/TopoRef、未知字段保留 | FreeCAD→Web→FreeCAD 双向差异可解释且无静默丢失 |
| R5 核心工作台 | `TD-ALL``SS-ALL``DRAFT-BASE``DRAFT-OPS``PLOT-ALL``DOC-CLOSURE` | TechDraw、Spreadsheet、Draft、Plot 的对象、命令、任务和格式 | 每命令至少成功/失败/round-trip fixture |
| R6 工程工作台 | `ASM-CORE``ASM-TOOLS``BIM-CORE``BIM-IFC``MESH-CORE``SURF-CORE``ENG-CLOSURE` | 装配、BIM、网格、曲面全链路 | 求解/几何/IFC/网格黄金和大模型预算通过 |
| R7 分析制造 | `FEM-ALL``CAM-ALL``ROBOT-ALL``INSP-ALL` | 求解器/后处理/刀路/仿真/检测报告 | 求解或明确远端能力G-code/结果文件黄金通过 |
| R8 平台长尾 | `DATA-ALL``ADDON-ALL``SCRIPT-ALL``PLATFORM-CLOSURE` | 数据模块、插件、宏/API、桌面通用能力的实现或显式代理 | 无未分类入口;安全和权限模型通过 |
| R9 发布 | `QA-01..08``REL-01..04` | 跨浏览器、性能、故障注入、安全、SBOM、迁移和发布 runbook | G0-G9 和所有阻断项关闭后才允许声明完整对标 |
## 3. 当前立即执行队列
## 3. 当前执行波次
1. `ORA-01`:建立完整 FreeCAD 1.1.1 桌面/工作台 oracle 构建配置;探针必须区分编译缺失、导入失败和 GUI-only
2. `INV-02`:从 O1/O2 生成模块→命令→对象→属性→格式清册,并与 Web manifest 做机器差分。
3. `BYB-06/07`:在真实浏览器实例化原生历史 Worker执行 Bitbybit STEP→原生 OCCT→FreeCAD 三方 Boolean 黄金和内存释放测试。
4. `TSN-04/07/10`:补曲面/曲线/邻接签名,扩展 Boolean、Pattern 和 PartDesign 的逐输入历史,建立参数变异套件。
5. `SK-03/06/07`:编译 planegcs WASM按 FreeCAD 草图约束分类逐组替换基础 TypeScript solver。
6. `CORE-09..12``PD-*`:完成 Support/AttachmentOffset、Body 单实体、Tip 重定向、局部特征和编辑历史。
7. `FC-04..10`:在现有安全 ZIP 和属性投影上增加 GuiDocument、BRep/Shape、Expression/Link/TopoRef 与未知 XML/资源保留。
8. 按 R5→R8 顺序逐工作台交付,禁止只启用 UI 或把未实现命令标记为成功。
9. 每个增量持续执行 R9 门禁;能力等级只能依据本机 FreeCAD 黄金证据提升。
当前只将下表的 Wave A 作为立即开工集。Wave B/C 可先准备 fixture 和合同,但不能在前置门未通过时声称验收
| 波次 | 任务 | 可并行工作 | 退出条件 |
|---|---|---|---|
| Wave A解锁参考与浏览器内核 | `ORA-01``ORA-02``BYB-03``BYB-05``BROWSER-OCCT-01``BYB-06``BYB-05` 后并行 | 源码清册生成器、Worker 故障注入 harness、内存 telemetry 合同 | O2 可探针Chrome 能加载原生 Worker取消与崩溃可恢复 |
| Wave B建立可比较证据 | `INV-01..04``BASE-03``BASE-04``BROWSER-OCCT-01``BYB-07``MEM-OCCT-01/BYB-08` | 成功/失败 fixture 生产可按工作台分片 | 34 模块入口无漏项Fuse/Cut/Common 三方差异可解释1000 次压测达到内存预算 |
| Wave C关闭稳定拓扑 | `BYB-07``TSN-03/04``TSN-05/06``TSN-07/08/09``TSN-10` | `SK-03` planegcs 最小源图和 WASM POC | 100 模型/1000 参数变异无静默错绑;歧义和删除均可诊断 |
| Wave DSketcher 与参数化核心 | `SK-03..12``CORE-09..11``PART-ALL/PD-*` | `FC-04/07` 的未知数据保留可与核心对象映射并行 | 草图诊断与 FreeCAD 一致Part/PartDesign 七步闭环通过 |
| Wave E文件与工作台 | `FC-04..11`→P07→P08→P09 | P07/P08 在 G4/G5 后并行BIM 共享合同等待 Draft/Spreadsheet | FCStd 双向无静默丢失;每工作台创建、编辑、重算、撤销、保存、加载、导出通过 |
P10 不是最后才启动的波次:`QA-01/02/07` 从 Wave A 开始横切执行,其余 QA/REL 项在对应产物可用后立即纳入持续门禁。
### Wave A 首批交付顺序
1. 完成 GUI/34 工作台 CMake profile锁定依赖、构建参数、产物 hash 和重建命令。
2. 用 O2 实测模块导入、Gui 命令注册、选择前置和 Task 创建,不将静态候选提升为运行时能力。
3. 完成 Bitbybit/OCCT 绑定的可复现构建和 Worker 版本握手对请求实施取消、超时、stale generation 隔离和崩溃后重建。
4. 在 Chrome 中实例化 JS/WASM Worker记录 COOP/COEP、OPFS、CSP、产物 hash、启动时间和失败诊断。
5. 将 Worker 句柄账本与 JS heap、WASM memory 和 GPU 资源指标对齐,为 Wave B 的 1000 次 Boolean 门禁准备可量化基线。
## 4. 单项完成定义
@@ -49,7 +59,7 @@
2. Facade 合同、取消、过期结果、Undo/Redo 和诊断均有测试。
3. 几何/求解结果在声明公差内,拓扑引用不使用瞬时索引。
4. 保存、加载、版本迁移和相关格式 round-trip 无静默丢失。
5. Chrome、Firefox、Safari 目标版本的 Worker/OPFS/交互证据通过。
5. Chrome 目标版本的 Worker/OPFS/交互证据通过;其他浏览器测试延期至全部任务完成并收到明确通知
6. 内存、性能、安全、许可证和能力矩阵已更新。
`compatible` 允许已记录且可解释的浏览器差异;`exact` 要求锁定版本的声明语义无差异。无法在浏览器安全实现的桌面能力必须标为受限代理,不能隐藏。
@@ -66,3 +76,5 @@ jq empty config/compatibility-matrix.json
```
O2 完整桌面 oracle 建立后,所有相关探针和黄金命令必须显式设置 `FREECAD_CMD`,防止回退到仅含 Part 的缓存构建。
详细责任 lane、83 个任务、交付物、验收和交接合同见 [FreeCAD 1.1.1 全功能对标执行 WBS](freecad-full-parity-execution-wbs.zh-CN.md);机器可读任务真值为 `config/freecad-execution-plan.json`