Files
Web_FreeCAD_Bitbybit/docs/freecad-full-parity-execution-wbs.zh-CN.md

63 KiB
Raw Blame History

FreeCAD 1.1.1 全功能对标执行 WBS

1. 文档职责

本文负责执行组织和任务分配;全功能主任务账本负责范围,执行路线图负责阶段顺序,config/freecad-execution-plan.json 是任务、依赖、状态、交付物和验收条件的机器可读真值,config/compatibility-matrix.json 是能力等级真值。

基线固定为 FreeCAD 1.1.1、提交 0108fd4b4850cc46e625b60e53cea7a7bbe69f8d。所有项目 Node/npm 命令使用 ./npmw

2. 责任分配

这里的 owner 是责任域,不绑定具体人员。给团队分配人员时,每个 lane 必须有一个最终负责人;跨 lane 评审不能替代 owner 的交付责任。

Lane Owner 职责 主 program 必需评审方
ORACLE FreeCAD 构建、运行时探针、命令/对象/格式清册、黄金 fixture P01 QUALITY、相关工作台 owner
KERNEL Bitbybit/OCCT 源码构建、WASM、Worker、Shape 生命周期、三方几何差分 P02 TOPO、QUALITY
TOPO TopoRef、原生历史、签名、迁移、3D 选择和变异回放 P03 KERNEL、CORE、QUALITY
SKETCH planegcs、草图模型、约束、诊断、编辑器和压力套件 P04 TOPO、CORE、QUALITY
CORE App/Document/DAG、Part、PartDesign、Body/Tip、Support/Attachment P05 TOPO、SKETCH、IO
IO SQLite/OPFS、FCStd、BRep/Shape、格式和双向 round-trip P06 CORE、QUALITY
DOC TechDraw、Spreadsheet、Draft、Plot P07 CORE、IO、QUALITY
ENGINEERING Assembly、BIM、Mesh/MeshPart、Surface P08 CORE、IO、PLATFORM
PLATFORM FEM、CAM、Robot、Inspection、数据模块、Addon、脚本 P09 ENGINEERING、QUALITY
QUALITY 自动化、浏览器、性能、安全、迁移、SBOM 和发布 P10且持续横切 P01-P09 所有 lane

3. 依赖与并行安排

关键路径为:P01 → P02 → P03 → P04 → P05 → P06 → P07/P08 → P09 → P10。P10 的日常 QA 任务从 P01 开始横切执行,但发布门 G9 仍等待全部上游产物。

允许的并行工作:

  1. P01 建立完整 oracle 时P02 可继续已有原生 Worker 加固,但 G1 必须等待 G0 的比较器和 fixture。
  2. P03 的 schema/迁移基础与 P02 的浏览器实例化可并行;原生历史覆盖和三方黄金必须等待 P02。
  3. P04 的 planegcs 构建可在 P03 前启动外部几何、Support 和完整压力回放必须等待稳定 TopoRef。
  4. P06 的 ZIP 安全、Document/GuiDocument 映射和未知字段保留可与 P05 并行;可编辑 Shape 和完整 round-trip 必须等待 P05。
  5. P07 与 P08 在 G4/G5 后并行BIM 依赖 Draft/Spreadsheet 的共享对象和表达式合同。
  6. P10 的单测、安全预检和基线持续执行;最终发布任务必须等待 P01-P09 全部阶段门。

禁止的并行捷径:用 UI prototype 替代领域实现、用 Node smoke 替代浏览器证据、用网格索引替代 TopoRef、在 FCStd 未保留未知字段时写回用户文件、在 solver/post/addon 未隔离时启用执行入口。

3.1 连续执行编排与任务交接

以下编排是 P01-P10 的连续执行顺序;任务 ID 与状态仍以 config/freecad-execution-plan.json 为唯一真值。每个切片完成后立即领取同一关键路径上的下一个未完成切片,不等待人工确认。

  1. TSN-03 先扩展 native OCCT Generated/Modified/Deleted 合同:从 fuse/cut/common 扩展到已实现的 Pad、Pocket、Loft、Pipe、Revolution、Groove、Fillet、Chamfer、Draft、Thickness、Pattern、Hole每个操作必须有 STEP/Worker 请求、源子形状关系、Chrome 回放和释放证据。随后把关系交给稳定 TopoRef 迁移和 Body/Tip 生命周期。
  2. P04 按 SK-06 → SK-07 → SK-11 → SK-09 → SK-10 → SK-12 执行:先补 planegcs 几何约束图,再补尺寸/参考诊断和 profile fixture之后完成交互编辑、B-spline 编辑、500 模型黄金与压力回放。
  3. P05 按 PART-ALL → PD-BASE → PD-LOFT → PD-DRESSUP → PD-TRANSFORM → PD-CLOSURE 执行;每个特征都必须同时覆盖参数编辑、失败保留上一 Shape、TopoRef/Support/Tip、撤销、保存/加载和 Chrome Worker 证据。
  4. P06 与 P05 可交错推进:FC-04 → FC-05 → FC-06 → FC-08 → FC-09 → FC-10 → FC-11。STEP/IGES/BREP 的已实现子集不得替代完整 100 模型格式黄金;未知 XML、BRep、Expression、Link、TopoRef 和 GuiDocument 都必须分类记录。
  5. P07 按 TD-ALLSS-ALLDRAFT-BASE → DRAFT-OPSPLOT-ALLDOC-CLOSURE 执行P08 可在 P07 共享对象合同完成后并行,顺序为 ASM-CORE → ASM-TOOLSBIM-CORE → BIM-IFCMESH-CORESURF-COREENG-CLOSURE
  6. P09 在 P08 收口后按 FEM-ALLCAM-ALLROBOT-ALLINSP-ALLDATA-ALLADDON-ALLSCRIPT-ALLPLATFORM-CLOSURE 执行;插件和脚本默认隔离,不能绕过 Facade、OPFS 权限或安全策略。
  7. P10 横切持续执行:QA-01..QA-08 按依赖逐项收口,之后 REL-01 → REL-02 → REL-03 → REL-04。发布前必须重新生成 Chrome 证据、FreeCAD oracle、round-trip、fuzz、性能、故障注入、SBOM 和差异矩阵。

所有任务的完成条件统一为实现已落地FreeCAD 1.1.1 oracle 或明确 proxy/unsupported 证据存在Chrome 真实 Worker/OPFS 证据存在Shape/Worker/资源释放回到零Facade、构建和 ./npmw run verify 通过;文档、兼容矩阵和计划状态同步。未满足任一条件只能保持 in_progress,不得提前标记 completed

4. Program 任务包

P01 完整桌面 oracle 与 34 模块清册

OwnerORACLE。GateG0。当前 headless oracle 只覆盖 Part/Material/Measure

任务 分配与交付 验收重点
ORA-01 ORACLE完整 GUI/工作台 CMake profile、构建清单、依赖和 hash 锁定提交可干净重建GUI/工作台可探针
ORA-02 ORACLEGUI-aware 探针和 compiled/import/gui-only 状态模型 输出确定性 JSON失败类型不可混淆
INV-01 ORACLE34 模块、工作台、命令及源码位置清册 无未登记目录或命令
INV-02 ORACLETypeId、Property、默认值、状态和最小对象 fixture先由 generate:freecad-type-properties 生成源码候选,再由 O1/O2 探针确认 只读/隐藏/输出/表达式能力可追溯;静态候选不能替代运行时证据
INV-03 ORACLE菜单、工具栏、上下文、快捷键、选择和 Task 前置 每个 GUI 命令有启用和禁用 oracle
INV-04 ORACLE+IO+PLATFORM格式、偏好、Python、宏、Addon 和可选库 每个入口有 Web 策略和能力等级
BASE-03 ORACLE+QUALITY100 成功、50 失败 fixture 覆盖单位、拓扑变化、核心对象和错误
BASE-04 ORACLE+QUALITY树/属性/Shape/拓扑/诊断比较器 未登记差异直接失败

P02 原生 OCCT Worker、三方 Boolean 黄金与内存门禁

OwnerKERNEL。GateG1。现有原生历史 provider 为可配置、非默认状态。

任务 分配与交付 验收重点
BYB-03 KERNELBitbybit/OCCT 可复现源码构建、补丁、ABI、hash、许可证 干净构建导出一致
BYB-05 KERNEL能力握手、取消、超时、崩溃、stale-result 协议 错误消息安全失败;重启不接受旧结果
BYB-06 KERNELShape 所有权、引用计数、释放账本和指标 无 use-after-release保留内存受控
BROWSER-OCCT-01 KERNEL+QUALITYChrome 真实 Worker/WASM harness COOP/COEP、OPFS、加载、取消、崩溃恢复通过
BYB-07 KERNEL+ORACLE+TOPOFuse/Cut/Common 三方报告 几何、历史、公差和错误差异均可解释
MEM-OCCT-01 KERNEL+QUALITY1000 次 Boolean 压力和堆/WASM/GPU 报告 临时 Shape 全部对账;峰值/保留量达预算
BYB-08 KERNEL+QUALITY依赖升级 API/ABI/黄金漂移门禁 上游变化不能静默进入主线

P03 稳定 TopoRef、邻接/曲率签名和变异回放

OwnerTOPO。GateG2。

任务 分配与交付 验收重点
TSN-03 TOPO+KERNELBoolean/PartDesign Generated/Modified/Deleted 每个源子形状关系可解释
TSN-04 TOPO解析曲线/曲面参数、方向、容差和曲率签名 不依赖三角网格精度和瞬时索引
TSN-05 TOPO邻接图、一对一/一对多评分和置信度 刚体变换和参数修改保持安全引用
TSN-06 TOPO对称、重复、分裂、合并歧义策略 低置信度不强绑
TSN-07 TOPO+CORE多输入 Boolean、Pattern、跨 Body lineage 结果可追溯到源对象和实例
TSN-08 TOPO+IOLinkSub、外部几何、数据库、FCStd 迁移 stable/ambiguous/deleted 可跨版本往返
TSN-09 TOPO+CORE3D pick/preselect/highlight/candidate repair Facade UI 不保存网格索引
TSN-10 TOPO+QUALITY100 模型、1000 参数变异和随机回放 无静默错绑;歧义全部可诊断

P04 planegcs WASM 与完整 Sketcher

OwnerSKETCH。GateG3。

任务 分配与交付 验收重点
SK-03 SKETCH+KERNEL最小 planegcs 源图、Emscripten 构建和 hash 独立 Worker 确定性求解
SK-04 SKETCHprovider 能力、诊断、取消、stale、崩溃恢复 替换 solver 不改变 Facade 合同
SK-05 SKETCH椭圆、B-spline、周期和构造几何模型 稳定 ID 完整往返
SK-06 SKETCH完整几何约束 每种约束有成功/失败 FreeCAD fixture
SK-07 SKETCH尺寸/参考约束、DOF、冗余、冲突分类 分类与 FreeCAD oracle 一致
SK-08 SKETCH+TOPO平面/面 Support、投影、CarbonCopy 上游拓扑变化安全迁移
SK-09 SKETCHtrim/extend/split/drag/autoconstraint 和回放 Task、键鼠和编辑行为与 oracle 对齐
SK-10 SKETCHB-spline poles/knots/weights/degree/periodic 编辑和约束 round-trip 通过
SK-11 SKETCH+CORE开放/闭合/多环/自交 profile 分类 PartDesign 获得兼容错误
SK-12 SKETCH+QUALITY500 模型确定性与性能套件 成功、冲突、冗余、拖拽均达预算

SK-10 收口证据:public/chrome-sketcher-bspline-harness.html 在 Chrome 150 中回放 poles/knots/weights/degree/periodic 编辑和非法输入,并将带两个 Weight、一个 control-point InternalAlignment 的三次有理 B-spline 经 FCStd 导出/导入后逐字段比较。./npmw run test:chrome-sketcher-bspline./npmw run check:chrome-sketcher-bspline 还会交叉检查 planegcs Worker/Provider 和 FreeCAD 1.1.1 Weight oracle几何、约束、残差、DOF 与归档往返均通过。

SK-12 收口证据:固定种子 500 模型/1000 次求解覆盖 constraints、conflict、redundant、reference、drag 各 100 项Node 与 Chrome 150 摘要均为 edac8aed,确定性差异和意外结果为 0,最大迭代 64、最大残差约 4.58e-16Chrome 耗时低于 2000 ms 预算。./npmw run test:chrome-sketcher-stress./npmw run check:chrome-sketcher-stress 记录 OPFS 生命周期FreeCAD 约束分类和 editor oracle 单独锁定分类与拖拽语义。

SK-06/SK-07 增量证据:public/chrome-sketcher-diagnostics-harness.html 在 Chrome 150 + OPFS 中回放 Coincident指定端点零残差与 Block0 DOF、坐标保持并同时验证参考尺寸、冗余和冲突诊断./npmw run test:chrome-sketcher-diagnostics./npmw run check:chrome-sketcher-diagnostics 通过OPFS marker 创建/读取/删除完成。该证据仍不代表 planegcs 原生已覆盖完整 FreeCAD 约束集。

SK-06 原生子集增量:锁定 FreeCAD GCS::System::addConstraintP2PCoincidentsolveCoincidentLines Embind/WASM 函数Facade 仅接受 first.end -> second.start 的两线 driving Coincident。./npmw run test:chrome-planegcs./npmw run check:chrome-planegcs 在 Chrome 150 Dedicated Worker 中验证状态 0、零残差、Provider 生命周期和 coincident capability完整约束图仍待继续扩展。

SK-07 原生尺寸增量:锁定 FreeCAD ConstraintDifferencesolveDistanceX Embind/WASM 函数Facade 仅接受单线正值 DistanceX 与 Horizontal 组合。Chrome 150 Dedicated Worker 验证 X 差值、零残差和 capability完整 DistanceY/角度/半径/参考尺寸图仍待继续扩展。

SK-07 原生尺寸增量:solveDistanceY 将相同的 FreeCAD ConstraintDifference 合同扩展到单线 Vertical 投影距离。Chrome 150 Dedicated Worker 验证 Y 差值、零残差和 distanceY capability任意端点、角度、半径和参考尺寸图仍待继续扩展。

SK-07 原生角度增量:solveAngle 锁定 FreeCAD GCS::System::addConstraintP2PAngle,以固定首点、正值端点 Distance 和弧度 Angle 求解单线。Chrome 150 Dedicated Worker 验证 45 度、长度 5、零量级残差、angle capability 与 Provider 生命周期;任意端点、两线夹角、半径/直径和完整尺寸图仍待继续扩展。

SK-07 原生圆半径增量:solveCircleRadius 锁定 FreeCAD GCS::System::addConstraintCircleRadius,固定圆心并接受一个正值 Radius。Chrome 150 Dedicated Worker 验证圆心 (2,3)、半径 4、零残差、radius capability 与 Provider 生命周期Arc、Diameter、圆与其他几何的关系及完整尺寸图仍待继续扩展。

SK-07 原生圆直径增量:solveCircleDiameter 锁定 FreeCAD GCS::System::addConstraintCircleDiameter,固定圆心并接受一个正值 Diameter。Chrome 150 Dedicated Worker 验证圆心 (2,3)、直径 8diameter capability 与 Provider 生命周期Arc、圆与其他几何的关系及完整尺寸图仍待继续扩展。

SK-06/SK-07 原生 Equal 增量:solveEqualLines 使用 FreeCAD GCS::System::addConstraintEqualLength,固定第一条线和第二条线起点,求解两线等长;solveEqualCircles 使用 addConstraintEqualRadius固定两个圆心和第一圆半径求解第二圆半径。Facade 仅接受两线或两圆的单个 driving Equal混合几何、圆弧、椭圆和完整约束图继续显式拒绝。Chrome 150 Dedicated Worker 验证两类零残差、能力声明、资源释放及取消/恢复/过期生命周期;计划计数仍为 30 completed、21 in_progress、32 pending、0 blocked。

SK-06 原生 Tangent 增量:solveTangentCircles 锁定 FreeCAD GCS::System::addConstraintTangent(Circle, Circle)固定两个圆心和第一半径求解外切第二半径。Facade 仅接受两个 Circle 的单个 driving Tangent线-圆、圆弧、内切模式和多约束图显式拒绝。Chrome 150 Dedicated Worker 验证圆心 (2,3)/(10,3)、两半径 4、切线残差约 8.9e-16tangent capability 与生命周期;计划计数保持 30 completed、21 in_progress、32 pending、0 blocked。

SK-11 收口证据:锁定 FreeCAD 1.1.1 的真实 Body/Sketch/Pad oracle。闭合、带孔、自交 bow-tie、分离双环分别得到体积 360/320/80/370 和实体数 1/1/2/2,开放线框返回 Wire is not closed. 且 Shape 为空。Web sketchProfile 在交点处分割线段并提取有界面,以 additionalRegions 表达 FreeCAD 多实体结果Chrome 150 的生产 parser 与 Bitbybit OCCT Pad 得到相同体积和实体数,开放线框在调用运行时前返回 PROFILE_OPEN。FreeCAD/Chrome 检查器、Facade 166/166 与 TypeScript 通过SK-11 完成。

SK-09 收口证据:真实 FreeCAD 1.1.1 editor oracle 覆盖 drag、split、extend、trim、construction、事务 Undo/Redo 和 Coincident+Horizontal 自动约束。Web 对齐拖动优先点、Split Coincident 与 Trim PointOnObject并以 SketchEditorInteractionSession 提供工具、指针、选择、历史、取消和删除事务。Chrome 150 真实 PointerEvent/KeyboardEvent 回放与七项 FreeCAD 几何/约束结果一致SK-09 完成。

FC-06 Chrome 增量:src/chromeFcstdSemanticHarness.ts 增加两项稳定 TopoRef 的 App::PropertyLinkSubListChrome 150 + OPFS 验证 topo-ref-list 依赖、归档往返、GuiDocument 和 BRep/ElementMap 保持不丢失;完整 FCStd 全类型双向 round-trip 仍未闭环。

P05 Part/PartDesign 参数化闭环

OwnerCORE。GateG4。

任务 分配与交付 验收重点
CORE-09 COREBody、Origin、Feature 顺序、Tip 重定向和单实体 抑制/删除/重排与 FreeCAD 一致
CORE-10 CORE+TOPOSupport、MapMode 和 Attachment engine 面/平面支撑可跨拓扑变化
CORE-11 COREAttachmentOffset、Placement 组合和局部坐标链 结果位置在声明公差内一致
PART-ALL CORE+KERNELPart 基本体、Boolean、Builder、修改、检查和格式 全 Part 命令及交换格式黄金通过
PD-BASE CORE+SKETCHPad/Pocket/Revolution/Groove 全模式 参数编辑使用原生历史重算
PD-LOFT COREAdditive/Subtractive Loft/Pipe 失败保留最近有效 Shape
PD-DRESSUP CORE+TOPOFillet/Chamfer/Draft/Thickness 稳定选择 边面变化迁移或报告歧义
PD-TRANSFORM CORE特征列表变换、完整 Hole 和标准 单实体、轴面、螺纹语义有证据
PD-CLOSURE CORE+QUALITY创建→编辑→重算→Undo→保存→加载 无 stale Shape、断 Tip 或 Support

PART-ALL 收口证据Chrome 150 锁定 100 个 Part 场景,对 STEP、IGES、BREP 各执行 100 次导出/导入和结构、质量属性、容差比较,未知差异为 0 且释放后 ShapeHandle/kernel reference 为 0/0./npmw run test:chrome-fcstd-golden./npmw run check:chrome-fcstd-golden、Part primitive/geometry feature 门禁与 FreeCAD 100 成功/50 失败 fixtures 共同覆盖原语、Boolean、Builder、Modification、检查和三格式验收。

PD-BASE 收口证据FreeCAD 1.1.1 实际 PartDesign 对照锁定锥度 Pad、锥度 Pocket、Through all Pocket、Up to face Pocket 和 Midplane Pad 5/5Chrome 150/WASM 得到相同体积(误差不超过 1e-7)并释放到 0/0。Facade 覆盖 To-face 稳定 TopoRef、双向与两角度模式、失败保留上一 ShapeChrome 参数编辑 42→31、重算、Undo 31→42、保存/加载通过Pad/Pocket/Revolution/Groove 原生 OCCT history 分别记录 25/42/23/2 条关系。

PD-LOFT 收口证据Chrome 150 通过 Facade 顺序创建 AdditiveLoft、AdditivePipe、SubtractiveLoft、SubtractivePipe四个结果均为正体积有效 ShapeTransformed transition、section/path 链、Body.Tip、OPFS 保存/加载和 0/0 释放通过。重复 section 与分叉 path 分别返回稳定诊断Loft/Pipe 失败期间 Shape ID 不变且修复后恢复FreeCAD 1.1.1 原生四对象 oracle 4/4Loft/Pipe 原生 OCCT history 为 24/28 条。

PD-DRESSUP 收口证据Chrome 150 Facade 生命周期在 Hole 基体上顺序创建 Fillet、Chamfer、Draft、Thickness随后继续 Mirrored、LinearPattern、PolarPattern、MultiTransform 与 Hole10 个结果均为正体积Body.Tip、sqlite-opfs 保存/加载和 0/0 释放通过。Pad 参数编辑后一个面引用稳定迁移,三个边/面引用保守报告歧义且没有错误绑定;歧义 Fillet 保留上一有效 Shape并可修复恢复。FreeCAD 1.1.1 原生 Fillet/Chamfer/Draft/Thickness oracle 4/4通过真实选边/选面、Reversed Thickness 和质量/拓扑断言;四类原生 OCCT history 分别记录 150/150/5/38 条。

P06 FCStd 双向 round-trip

OwnerIO。GateG5。

任务 分配与交付 验收重点
FC-04 IODocument/GuiDocument 对象、Property、Extension、视图映射 已知元数据双向无语义丢失
FC-05 IO+KERNELBRep/Shape/缩略图资源解析和写出 拓扑、质量属性、颜色、精度对齐
FC-06 IO+TOPO+SKETCHExpression/Unit/Link/TopoRef/Sketch codec FreeCAD 可重算支持对象
FC-07 IO+QUALITY未知 XML/对象/资源透明保留和脚本隔离 proxy 字节在读写后不变
FC-08 IO+KERNELSTEP/IGES/BREP 完整适配 100 模型单位/颜色/公差黄金通过
FC-09 IO+相关 workbenchMesh/2D/BIM/数据格式 每格式有成功、失败和 round-trip
FC-10 IO+ORACLEFreeCAD→Web→FreeCAD 核心/代理报告 无静默丢失;差异全部分类
FC-11 IO+QUALITY大文件、损坏、取消、中断和恢复 能力内不崩溃;超限明确拒绝

P06 已由 check:fcstd-closure 聚合关闭FreeCAD 1.1.1 原生双向 22 场景没有未知差异,未知 proxy 归档逐字节保持Chrome 锁定 Expression/Link/LinkSubList/TopoRef/Sketcher/GuiDocument/BRep/ElementMap 语义。100 模型 FCStd+BRep 以及 STEP/IGES/BREP 三格式质量、毫米单位和容差矩阵全部通过DXF/SVG/PDF、OBJ/PLY/STL、IFC、CSV 八种次级格式分别具有成功、错误签名拒绝和字节精确回环。FCStd ZIP/XML/stream 限额、损坏、取消与 checkpoint 恢复由 check:fcstd-hardening 锁定。

P07 TechDraw、Spreadsheet、Draft、Plot

OwnerDOC。GateG6。

任务 分配与交付 验收重点
TD-ALL DOC+TOPOPage/View/Section/Dimension/GD&T/Annotation、SVG/PDF 投影、比例、TopoRef 更新通过
SS-ALL DOC+CORECell/Formula/Alias/Style/Merge/Binding/CSV DAG 循环和对象绑定与 FreeCAD 一致
DRAFT-BASE DOC+SKETCHWorking Plane/Snap/Grid 和参数化二维对象 创建编辑 fixture 通过
DRAFT-OPS DOC+CORE变换、Offset、Trim、Array、Clone、Layer 保存后仍参数化
PLOT-ALL DOCSeries/Axis/Legend/Style/Binding、图片/SVG/CSV 绑定数据确定性更新
DOC-CLOSURE DOC+IO+QUALITY四工作台混合文档 创建、编辑、保存、加载、导出全通过

P08 Assembly、BIM、Mesh、Surface

OwnerENGINEERING。GateG7。

任务 分配与交付 验收重点
ASM-CORE ENGINEERINGComponent/Link/LCS/Joint、solver Worker 固定/距离/角度/运动 fixture 通过
ASM-TOOLS ENGINEERING碰撞、爆炸、BOM、变体 大装配和 FCStd 门禁通过
BIM-CORE ENGINEERING+DOC空间层级、建筑元素、材料、属性集、清单 参数编辑和数量表通过
BIM-IFC ENGINEERING+IOIFC2x3/IFC4、分类和 proxy 几何、层级、Property 往返
MESH-CORE ENGINEERING+KERNEL导入、转换、分析、修复、Worker/LOD 非流形、自交、孔和大网格通过
SURF-CORE ENGINEERING+TOPOBSpline/Bezier/Fill/Offset/Trim/Join 连续性、容差和 TopoRef 通过
ENG-CLOSURE ENGINEERING+QUALITY大型混合工程项目 跨工作台保存加载和性能达预算

P09 分析、制造、数据、插件和脚本

OwnerPLATFORM。GateG8。

任务 分配与交付 验收重点
FEM-ALL PLATFORMAnalysis/Material/Sets/Loads/Mesh/Solver/Results 本地或远端策略明确;参考求解通过
CAM-ALL PLATFORMJob/Stock/Tools/Operations/Simulation/Post 碰撞、仿真和 G-code 黄金通过
ROBOT-ALL PLATFORMRobot/Axes/Pose/Trajectory/Kinematics/Collision 运动和工作空间 fixture 通过
INSP-ALL PLATFORM+TOPO测量、剖切、偏差、检查和报告 单位、精度、TopoRef 和导出通过
DATA-ALL PLATFORM+IOPoints/RE/OpenSCAD/IDF/JT/Material/Import 每模块有适配器或显式 proxy
ADDON-ALL PLATFORM+QUALITY签名目录、安装/更新/删除、权限、隔离、回滚 不可信插件不能越过 Facade/权限
SCRIPT-ALL PLATFORM+QUALITYAPI 映射、受限解释器、宏回放 文件/网络/时间/资源权限强制执行
PLATFORM-CLOSURE PLATFORM+ORACLE34 模块最终覆盖报告 无 scope-only 或未解释 unsupported

P10 QA、浏览器、性能、安全、迁移与发布

OwnerQUALITY。GateG9。P10 从第一天持续执行,最终关闭依赖 P01-P09。

任务 分配与交付 验收重点
QA-01/02 QUALITY+ORACLE单元/属性覆盖、CLI/GUI 每命令成功失败 fixture 核心不变量和兼容声明有证据
QA-03 QUALITYChrome E2E 与视觉矩阵 核心桌面/移动工作流无阻断差异
QA-04 QUALITY+TOPO+SKETCH几何/solver/parser seeded fuzz 无崩溃、静默损坏和错绑
QA-05 QUALITY1000 对象、百万三角形、大装配、大表和长会话 P95、峰值和保留内存达预算
QA-06 QUALITY+IO+KERNELWorker/WASM/OPFS 崩溃、配额、断电、stale 恢复确定,数据损失明确报告
QA-07 QUALITY+PLATFORM文件、消息、脚本、Addon、CSP 和权限安全 无未处置 critical
QA-08 QUALITY+DOC键盘、读屏、locale、长文本和移动 核心流程达到目标 a11y 标准
REL-01 QUALITYPWA、离线、cache、COOP/COEP、CSP runbook 首装、升级、离线、缓存恢复通过
REL-02 QUALITY+IO版本迁移、回滚或无损导出演练 每个支持版本有恢复路径
REL-03 QUALITYSBOM、许可证、漏洞和签名产物 无未知二进制或未处置 critical
REL-04 QUALITY+全体 owner最终能力/差异矩阵和发布 runbook G0-G9 通过,无未解释 unsupported

5. 任务状态与交接合同

状态只允许 pendingin_progresscompletedblockedcompleted 必须同时满足:代码/文档已落地、配置中的 deliverables 全存在、acceptance 全有自动证据、兼容矩阵已更新、下游 owner 已完成接口验收。

每次跨 lane 交接必须包含:

  1. 版本化 Facade/Worker/schema 合同。
  2. 能力探测和 unsupported 原因。
  3. 成功、失败、取消、超时、stale 和资源释放测试。
  4. FreeCAD oracle fixture 与差异报告。
  5. 持久化/迁移影响和安全说明。
  6. 下游不得依赖的内部句柄、瞬时索引或实现细节。

阻塞条件必须记录具体缺失依赖、复现命令和解除条件;“任务很大”或“以后支持”不是有效阻塞原因。

6. 统一门禁

日常增量:

./npmw run check:execution-plan
./npmw run verify
git diff --check
jq empty config/freecad-execution-plan.json
jq empty config/compatibility-matrix.json

14. ADDON-ALL 与 SCRIPT-ALL 增量证据

src/facade/addonGovernance.ts 已落地插件目录治理合同:包内容摘要、可信签名者、权限白名单、依赖检查、安装/更新/回滚/删除和清单导出。插件包只登记 Facade 命令入口,不执行桌面 Python、网络或任意文件系统代码默认仅允许 geometry.readproject.read。篡改摘要、未知签名者、越权权限和未满足依赖都会在进入目录前拒绝。

src/facade/scriptSandbox.ts 已落地脚本宏合同:仅允许登记的 Facade 命令 ID限制命令数和参数字节数支持确定性录制、JSON 导入和回放诊断,不调用 eval、网络、文件系统或桌面 Python 解释器。

./npmw run test:addon./npmw run test:chrome-addon./npmw run test:script./npmw run test:chrome-script 使用 Chrome 150、隔离上下文和 OPFS 资源 round-trip 证明两个合同及资源释放;对应 check:chrome-* 是机器门禁。此增量仍不是完整 FreeCAD AddonManager/Python API没有在线仓库协议、桌面 Python 执行或第三方插件运行时,兼容等级保持 experimental

SURF-CORE 已完成受控曲面合同Bezier/BSpline/Loft/Fill/Offset、参数域 Trim、C0 连续性、Sew 容差、稳定边界 TopoRef、质量分析和确定性 OBJ。Chrome 150 验证 5 个 patch、20 个 poles、1 个 trim、1 个 sew、1.5 offset 和 4 个稳定 TopoRef并完成 sqlite-opfs 往返及资源归零。

QA-08 增量由 src/facade/locale.ts 提供:en-USzh-CNde-DE 消息和单位格式化、长文本样例,以及可访问名称/重复 ID/可聚焦控件语义检查。./npmw run test:locale./npmw run test:chrome-qa08 在 Chrome 150 + OPFS 下通过,./npmw run check:chrome-qa08 记录 4 个控件、0 个缺名/重复/未命名焦点控件。该证据不等于完整 WCAG/读屏认证,仍需最终 QA-08 人工与自动矩阵。

FC-09 增量由 src/facade/secondaryFormats.ts 提供DXF、SVG、OBJ、PLY、STL、PDF 的签名探测、大小限制、确定性导出和显式 proxy/native 能力矩阵。./npmw run test:secondary-formats./npmw run test:chrome-secondary-formats./npmw run check:chrome-secondary-formats 使用 Chrome 150 + OPFS 验证 6 个格式记录及资源释放;这不是完整 FreeCAD 原生格式解析,二级格式仍按 proxy 边界管理。

QA-05 的通用基准保持 1000 个文档对象、1,000,000 个三角形索引计算和 100,000 个表格单元ENG-CLOSURE 另增加真实 1000 组件 Assembly/BOM 构建预算Chrome 150 实测约 5.04 ms,低于 1000 ms 门槛。百万三角形索引基准与工程工作台真实对象预算分别记录,不混写为同一种模型。

PLOT-ALL 已完成:src/facade/plot.ts 支持线性/对数轴、Series/Legend/Style/Spreadsheet Binding 和确定性 SVG/CSVChrome 150 使用真实 SVG 解码与 Canvas PNG 编码生成 640x36019408 byte 的 PNG两次导出 SHA-256 一致且签名、OPFS round-trip/release 均通过。聚合门禁同时验证绑定值由 Spreadsheet 确定性更新到 16

DOC-CLOSURE 已完成Chrome 150 内真实创建 Spreadsheet、Draft、TechDraw、Plot 实例并分别编辑一次,公式值为 6、Draft 起点 X 为 1、TechDraw 尺寸为 5、Plot 末值为 6;实际导出 Spreadsheet CSV、Draft JSON、TechDraw SVG/PDF、Plot SVG/CSV。四个 artifact 均从版本 1 更新到 2,文档版本 8,保存到 sqlite-opfs 后字节精确读取、释放并重开,依赖闭包无缺失或环。check:document-closure 已纳入 verify,统一要求 TD-ALL、SS-ALL、DRAFT-BASE、DRAFT-OPS、PLOT-ALL、DOC-CLOSURE 的浏览器报告和资源归零。

ENG-CLOSURE 已完成真实混合工程闭包Assembly、BIM、Mesh、Surface 实例各创建并编辑一次JSON/IFC/OBJ 导出均为非空;四个 artifact 版本为 2、工程版本为 8sourceRef 完整sqlite-opfs 保存、字节读取、释放和重开通过。check:engineering-closure 聚合 Assembly Worker/FCStd、BIM IFC2X3/IFC4、Mesh Worker LOD/修复、Surface TopoRef 和混合工程预算,并通过 check:chrome-engineering 纳入 verify

REL-03 增量增加 scripts/release-signature.mjs 及受控入口:本地使用权限为 600.secrets/release-signing-private.pemCI/发布机使用 RELEASE_SIGNING_PRIVATE_KEYRELEASE_SIGNING_KEY_ID;两条路径都强制 Ed25519、公钥匹配和 payload SHA-256缺少密钥时 fail-closed不会生成 unsigned-development 发布清单。./npmw run check:release-signing-key./npmw run test:release-signaturecheck:release-artifactscheck:release-closure 共同验证签名、验签、篡改拒绝与清单闭包。

QA-07 增量由 src/facade/securityPreflight.ts 统一执行资源路径、归档条目/压缩比、XML 禁止声明和插件权限白名单预检。./npmw run test:security-preflight./npmw run test:chrome-security./npmw run check:chrome-security 在 Chrome 150 + OPFS 下验证 4 类恶意输入拒绝、资源 round-trip 和释放;这不是完整安全审计,仍需持续 fuzz 与发布环境扫描。

14. ADDON-ALL 增量证据

src/facade/addonGovernance.ts 已落地插件目录治理合同:包内容摘要、可信签名者、权限白名单、依赖检查、安装/更新/回滚/删除和清单导出。插件包只登记 Facade 命令入口,不执行桌面 Python、网络或任意文件系统代码默认仅允许 geometry.readproject.read。篡改摘要、未知签名者、越权权限和未满足依赖都会在进入目录前拒绝。

./npmw run test:addon./npmw run test:chrome-addon 使用 Chrome 150、隔离上下文和 OPFS 资源 round-trip 证明该合同及资源释放;./npmw run check:chrome-addon 是 ADDON-ALL 的机器门禁。此增量仍不是完整 FreeCAD AddonManager没有执行桌面 Python、在线仓库协议或第三方插件运行时兼容等级保持 experimental

ASM-CORE/ASM-TOOLS 已完成受控装配合同:固定/重合、距离、角度和运动帧均有 fixture浏览器通过独立 module Worker 求解碰撞、爆炸、BOM、变体、1000 组件预算和真实 FCStd App::Link 归档/重开通过。BIM-CORE/BIM-IFC 同时覆盖 Site/Building/Level/Space、材料、属性、分类、数量表及 IFC2X3/IFC4 双 schema 摘要往返。MESH-CORE 覆盖焊接、退化移除、OBJ/PLY/STL、Worker LOD以及自交、非流形和孔 fixture。

REL-01 增量增加 public/sw.js 的真实 Chrome 生命周期门禁:src/chromeOfflineHarness.ts 注册并取得 Service Worker 控制权,验证 shell 预缓存、旧 cache 版本清理和断连后的缓存回退;vite.config.ts 在生产构建后注入 dist/assets/*(含 WASMprecachescripts/check-built-pwa-assets.mjs 防止哈希资源遗漏。同一回放通过 OPFS marker、SQLite-OPFS 资源 round-trip 与 Shape 释放检查。./npmw run test:chrome-offline./npmw run check:chrome-offline./npmw run check:built-pwa 只使用 Chrome 150证明 PWA 首装/升级/离线恢复的可执行子集;完整发布仍需部署环境的 CSP、缓存 CDN 和断电矩阵。

QA-06/REL-02 专项回放复核:./npmw run test:chrome-fault-injection 验证 planegcs Worker 的完成、取消、注入崩溃、不可用态、重建恢复和 stale 结果,且 OPFS marker 删除;./npmw run test:chrome-opfs-migration 验证 schema 1→6 迁移、重开、checkpoint、资源 round-trip、注入失败回滚和 SQLite 文件清理。两个 check:chrome-* 均只接受 Chrome 150 + crossOriginIsolated + OPFS 证据;它们不替代真实配额耗尽和操作系统断电演练。

FC-10 增量增加 src/facade/fcstdRoundTrip.ts 的稳定指纹和未知差异分类合同;src/chromeFcstdRoundTripHarness.ts 在 Chrome 150 + OPFS 回放 freecad-web-freecadweb-freecad-web 两个方向,验证对象/属性/GUI/Shape 语义、SQLite-OPFS 资源释放和 FC-10 marker。./npmw run test:fcstd-roundtrip./npmw run test:chrome-fcstd-roundtrip./npmw run check:chrome-fcstd-roundtrip 已纳入机器门禁;它覆盖当前可编辑/proxy 子集,不宣称完整 FreeCAD 全模块 round-trip。

PD-CLOSURE 增量扩展 BitBybitWebCadFacade.app.documentreorderBodyFeature 保持依赖拓扑顺序,非法重排原子拒绝;removeObject 默认拒绝有依赖对象,显式 cascade 才删除依赖闭包,并自动重定向 Body.Tip。Chrome PartDesign lifecycle 现验证结构删除、Undo/Redo、Tip 回退/恢复、参数编辑、抑制、保存加载和 Shape 释放;报告写入 config/chrome-partdesign-lifecycle-verification.json,完整多 Body/跨文档重排仍未宣称完成。

PD-TRANSFORM 已完成 Feature-list 与 Whole shape 两类变换LinearPattern、PolarPattern、Mirrored 和有序 MultiTransform 支持显式方向/轴/平面,局部模式按 additive/subtractive 原始特征工具应用并强制 PartDesign 单实体。Hole 已覆盖标准/规格、左右旋、线程深度和实际螺旋模型线程Chrome 150 的 14 步链、FreeCAD 1.1.1 的 Feature-list/ISO M6 oracle、四类原生 OCCT history、OPFS 重开与 Shape 释放均由 check:chrome-partdesign-transformcheck:freecad-partdesign-transform 锁定。

PD-CLOSURE 已由 check:partdesign-closure 聚合关闭。Chrome lifecycle 在初始、参数编辑、Undo 和 OPFS 重开后分别生成不同 ShapeHandlePad 体积为 504→372→504→504,各阶段 Body.Tip=pad、Sketch.Support=XY_Plane、solid=1Loft/Pipe 与 dress-up 的三类失败均保留上一有效 Shape 并在修复后生成新 Shape。基础模式、四类 Loft/Pipe、14 步 dress-up/transform/Hole 创建链、三套保存加载、15 类原生历史及全部资源归零同时通过。

15. P09 平台工作台闭包证据

FEM 以本地轴向参考求解策略覆盖材料、节点集、约束、载荷、位移/应力结果场CAM 覆盖 Job/Stock/Tool/Operation、碰撞负例、仿真、GRBL/LinuxCNC 白名单后处理和确定性 G-codeRobot 覆盖三轴正运动学、工作空间、轨迹、碰撞及控制器导出Inspection 覆盖距离、角度、面积、体积、偏差、截面和稳定/歧义 TopoRef 报告。四套 Chrome 150 报告均通过隔离、sqlite-opfs 往返和 Shape 资源归零。

Points、ReverseEngineering、OpenSCAD、IDF、JT、Material、Import 七个专业模块逐项登记为受支持适配器或显式 proxy。AddonManager 通过摘要/签名者/权限/依赖、安装、更新、回滚和删除门禁Script 仅回放白名单 Facade 命令,并显式拒绝 file/network/time/resource 四类环境能力。

config/platform-module-coverage.json 与锁定 FreeCAD 1.1.1 源清单逐项对齐 34 个模块,结果为 24 compatible、7 proxy、3 development、0 unexplained。check:platform-closure 聚合七份浏览器实跑报告、模块边界和 16 个可执行证据脚本FEM-ALL、CAM-ALL、ROBOT-ALL、INSP-ALL、DATA-ALL、ADDON-ALL、SCRIPT-ALL、PLATFORM-CLOSURE 已关闭。

16. P10 QA 与发布闭包证据

QA-01/02 由 24 个测试套件、217 个 Node 用例、100 个成功/50 个失败 FreeCAD golden、19 类 Sketcher 成功/失败 oracle、17 个 PartDesign oracle 和 22 个 FCStd 双向 round-trip 场景关闭。QA-03 的 Chrome 150 生产构建回放 8 个核心流程,桌面/移动截图均为有效 PNG初始几何预览来自 Bitbybit OCCT任务态 canvas 仍通过像素和 WebGL 检查。

QA-04 三套固定种子 fuzz 覆盖 1000 个 FCStd parser、2000 个 geometry input、2000 个 Sketch solver 模型,均有正/负分类、输入不变性、确定性和 P95。QA-05 覆盖 1000 对象、1000000 三角形、100000 表格单元Chrome 堆约 35 MBQA-06 覆盖 Worker/WASM 取消、崩溃、恢复、stale、OPFS 迁移和事务回滚QA-07 覆盖路径/归档/XML/权限、Addon 和 Script、CSP/依赖审计。

QA-08 同时检查 en-US/zh-CN/de-DE、单位与长文本、4 个 Facade 语义控件、真实应用 8 步键盘焦点、165 个 Accessibility Tree 节点、390px 移动布局和两张截图。REL-01 验证 PWA 安装、cache 升级清理、离线回退和 WASM precacheREL-02 验证 schema 1→6、6 个正向迁移、6 个回滚和 OPFS 清理REL-03 生成 172 组件 CycloneDX SBOM、无 critical audit并用 Ed25519 签名 74 个 dist 文件清单。

REL-04 的 release-capability-matrix.json 引用 34 模块覆盖G0-G9 全部 passexact=0/compatible=24/proxy=7/development=3/unsupported=0,无 scope-only 或 unexplained 条目;docs/release-runbook.zh-CN.md 定义签名、部署、缓存、迁移、回滚和诊断步骤。QA-01..QA-08、REL-01..REL-04 全部完成。

涉及 FreeCAD、OCCT 或浏览器时追加:

./npmw run probe:freecad-reference
./npmw run test:golden:freecad
./npmw run test:occt-history

浏览器 E2E、内存、FCStd round-trip、solver、FEM/CAM 或安全任务必须执行各自配置中声明的专项证据,不能只用 ./npmw run verify 关闭任务。

17. 后续对标波次DATA-PTS/RE-FIT2026-08-07

P01-P10 收口后,按 FreeCAD 1.1.1 的 Points 命令表Import、Export、Convert、Merge、PolyCut、StructureReverseEngineering 命令表Plane、Sphere、Cylinder直接领取下一批可移植功能。网页 Facade 现在提供:

  • ASCII ASC/PTS/XYZ/CSV/PCD/PLY 点云解析和确定性导出UTF-8、点数、字节、PTS 计数、ASCII-only PCD/PLY 和非有限数值均有拒绝诊断。
  • 点云平移、合并、AABB/XY 多边形裁剪、体素降采样、XY 结构化网格和统计边界/质心;派生云不修改源云。
  • 基于协方差特征分解和最小二乘的平面、球体、圆柱、二次多项式曲面拟合以及半径邻域区域分割返回稳定方向、尺寸、系数、RMS、簇标签和源 ID共线/退化点集拒绝。
  • Chrome 150 + crossOriginIsolated + sqlite-OPFS 实跑CSV 主点云 6 点、PTS/PCD/PLY 解析、合并 12、AABB/多边形裁剪各 4、降采样 1、结构网格 3×2、六种格式导出和 0/0 资源释放;拟合结果为平面 RMS 1.73e-16、球半径 2、圆柱半径 3/高度 8、多项式 RMS 0,区域分割为两个各 2 点的簇。

因此 PointsReverseEngineeringproxy 提升为 compatible 子集E57/二进制点云、Poisson 重建、法向驱动区域生长、完整 B-spline 曲面拟合和桌面 Python/Qt 交互仍明确保留为差异。平台矩阵现为 exact=0/compatible=26/proxy=5/development=3,无 unexplained 项;check:chrome-datacheck:platform-closure 和完整 verify 均必须继续通过。

18. FreeCAD UI/交互对标执行波次UI-19..UI-30

P01-P10 的 83/83 完成只表示既定功能和发布门已收口,不表示网页界面已经与 FreeCAD 桌面端完全一致。已有 Chrome E2E、键盘、移动布局和截图证据只能作为本波次的输入不能直接关闭 UI 任务。UI 对标基线固定为 FreeCAD 1.1.1、提交 0108fd4b4850cc46e625b60e53cea7a7bbe69f8dUI-01..UI-18 的现有应用壳和组件合同继续有效,UI-19..UI-30 负责逐界面、逐状态和逐流程完成桌面行为对照。

18.1 对标合同

对标不以“看起来类似”为验收。每个界面必须同时记录 FreeCAD 来源、默认布局、尺寸/停靠关系、菜单和控件顺序、可见/启用条件、焦点与键盘行为、命令调用、事务边界、成功/失败/取消结果和浏览器差异。语义顺序、命令状态和使用流程按 exact 验收;字体栅格化、操作系统窗口装饰和浏览器原生文件选择器按 compatible 验收,并在差异清单中逐项说明。

界面范围 FreeCAD 对标要求 Web 验收要求
菜单 保持 File/Edit/View/Tools/Macro/Windows/Help 和工作台菜单的顺序、分组、分隔符、图标、助记键、快捷键提示及动态启用条件 同一文档、工作台和选择状态下,命令可见性、顺序、启用/禁用及原因与 oracle 一致;未实现命令显式禁用,不得静默成功
工具栏 保持标准、视图、工作台及领域工具栏的分组、图标、tooltip、切换态和工作台切换后的显隐 桌面宽度优先复现 FreeCAD 工具栏行;窄屏只允许确定性 overflow不得改变命令语义或遮挡视口
工作台 工作台选择器位置、名称、切换后的菜单/工具栏/任务状态和活动文档关系一致 切换必须通过命令注册表原子更新;进行中的 Task 按 FreeCAD 规则阻止、确认或结束,不能留下旧工作台命令
Combo View 左侧停靠区、Model/Tasks 标签、模型树、选择同步、展开状态、搜索/过滤和可调整分隔条一致 树与 3D 选择双向同步对象状态、Body/Tip、可见性和活动对象可辨识布局保存/恢复确定
Task panel 任务标题、参数分组、选择提示、预览、错误、Apply/OK/Cancel 和任务锁定顺序一致 打开命令自动进入 Tasks预览不提交文档Apply/OK 建立正确事务Cancel/Esc 回滚草稿并恢复 Model/选择/焦点
Data/View 属性 Data/View 标签、分组、名称、只读/隐藏/输出状态、单位、枚举、Placement、Link/LinkSub、表达式和 mixed 值一致 Enter/失焦/Cancel 提交语义明确;编辑走 Facade/Command Bus非法值保持原值并定位错误多选不覆盖 mixed 值
对话框 标题、字段、标签页、按钮顺序、默认按钮、校验、焦点、Enter/Esc、尺寸和打开位置与对应 FreeCAD 对话框一致 偏好、导入/导出、保存/关闭、颜色/线型、表达式、单位及命令参数逐类回放;浏览器文件选择器差异单独登记
快捷键 FreeCAD 默认快捷键、菜单 accelerator、命令序列和作用域一致 命令搜索与 tooltip 展示同一绑定;输入框/视口/Task 作用域无冲突;浏览器保留键必须提供等价入口和明确差异
上下文菜单 根据树、视口、对象类型、子元素、多选、空白区和工作台生成相同的命令组与状态 右键前选择规则、菜单位置、分隔组、启用谓词和执行后的选择/焦点均有 oracle不得以通用菜单替代领域菜单
状态栏 显示当前命令提示、预选对象/子元素、坐标/单位、进度、取消和错误入口 鼠标移动、预选、长任务、保存和失败状态实时更新;完成/取消后清理,不覆盖持久错误和未保存状态
使用流程 保持“新建/打开文档 -> 选择工作台 -> 创建或选择对象 -> Task 参数/预览 -> Apply/OK/Cancel -> Data/View 编辑 -> 重算 -> 保存/导出”的动作、选择和事务语义 Part、PartDesign、Sketcher、Draft、TechDraw、Spreadsheet、Assembly、BIM、Mesh、FEM/CAM 各有成功、失败、取消、Undo/Redo、保存重开回放

18.2 任务分配

本波次沿用第 2 节责任 lane共享 React Presentation 壳由 CORE 主责,领域工作台 owner 负责本工作台菜单、Task 和上下文贡献,ORACLE 提供 FreeCAD 证据,QUALITY 拥有最终门禁。状态仅允许 pending/in_progress/completed/blocked。任务建立后已立即领取 UI-19..UI-28已有 Web 实现和 Chrome 证据只能使任务进入 in_progress,完整 FreeCAD GUI oracle 缺失时不得标记 completed

任务 Owner 依赖 交付与验收 状态
UI-19 FreeCAD GUI oracle 与 UI manifest ORACLE+QUALITY INV-03、ORA-02 采集锁定版本的菜单、工具栏、工作台、Combo/Task、属性、对话框、快捷键、上下文和状态栏至少覆盖空文档、活动文档、单选、多选、Task、错误六类状态产出可追溯 manifest、截图和焦点/命令回放 in_progress
UI-20 应用壳、菜单和文档区 CORE UI-19、UI-01 顶部菜单、菜单分组/状态、MDI 文档标签、活动文档、关闭确认和中心视口布局与 oracle 对齐;桌面基准下关键边界在声明的像素容差内,命令状态无未知差异 in_progress
UI-21 工具栏与工作台切换器 CORE+各工作台 owner UI-19、UI-20、UI-09 标准/视图/领域工具栏、图标/tooltip/切换态、工作台选择及动态贡献对齐;切换后旧命令清理,窄屏 overflow 可键盘访问且不改变命令顺序 in_progress
UI-22 Combo View 与模型树 CORE+TOPO UI-20、UI-03、UI-04、TSN-09 Model/Tasks、分隔条、树层级、展开/选择/可见性/活动 Body/Tip、拖放和上下文前置对齐树/3D 双向选择、保存恢复、万级节点回放通过 in_progress
UI-23 Task panel 与命令生命周期 CORE+SKETCH+各工作台 owner UI-21、UI-22、UI-08 通用 Task 容器和 Sketcher/PartDesign/领域 Task 模板对齐标题、参数组、选择提示、预览、Apply/OK/Cancel成功、校验失败、Esc、命令切换、Undo/Redo 的事务和焦点回放一致 in_progress
UI-24 Data/View 属性编辑器 CORE+DOC+TOPO UI-22、UI-05..UI-07、INV-02 Data/View 分类、属性顺序、编辑器、单位、表达式、LinkSub、只读状态和 mixed 值与对象元数据一致;单选/多选、非法输入、提交/取消、重算和 FCStd 重开通过 in_progress
UI-25 对话框系统与浏览器替代策略 CORE+IO+PLATFORM UI-19、UI-20、FC-04 对偏好、导入/导出、保存/关闭、颜色/线型、表达式、单位和领域参数建立逐对话框合同按钮顺序、默认动作、Tab 顺序、Enter/Esc、校验和恢复一致文件/权限差异可追溯 in_progress
UI-26 快捷键、accelerator 与命令路由 CORE+QUALITY UI-20、UI-21、UI-14 FreeCAD 默认绑定、菜单提示、命令搜索、chord/作用域和输入焦点冲突矩阵完成;同一命令只走一个注册表,浏览器保留键有等价路径,真实键盘回放无误触 in_progress
UI-27 上下文菜单与选择语义 TOPO+CORE+各工作台 owner UI-22、UI-24、TSN-09 树/视口/空白、对象/子元素、单选/多选上下文命令、分组和状态与 oracle 一致;右键选择、预选、执行后选择及歧义修复全流程通过 in_progress
UI-28 状态栏、Report 与长任务反馈 CORE+QUALITY+KERNEL UI-20、UI-22、UI-12、BYB-05 预选/坐标/单位/命令提示、进度/取消、未保存状态、错误和 Report 入口对齐Worker 保存/导入/重算的完成、失败、取消和 stale 都能确定清理 in_progress
UI-29 FreeCAD 使用流程逐工作台回放 各工作台 owner+IO+QUALITY UI-23..UI-28 对核心与已声明 compatible 工作台执行新建/打开、切换、创建、选择、Task、属性编辑、重算、Undo/Redo、保存重开、导出每步比较命令状态、活动标签、选择、树、属性、视图和诊断 pending
UI-30 UI/交互闭包与差异矩阵 QUALITY+ORACLE+全体 owner UI-19..UI-29、QA-03、QA-08 Chrome 桌面/窄屏视觉、Pointer/Keyboard、Accessibility Tree、locale/长文本和跨工作台录制全部通过;生成 UI 能力/差异矩阵,零未登记差异、零遮挡、零无名控件、零阻断流程后才可标记完成 pending

18.3 连续执行与门禁

执行顺序为 UI-19 -> UI-20/UI-21 -> UI-22 -> UI-23/UI-24 -> UI-25/UI-26/UI-27/UI-28 -> UI-29 -> UI-30。同一阶段允许按 owner 并行,但每个上游交付后立即领取下一项,不等待另行确认。工作台任务只消费版本化 Facade 命令、对象 schema 和选择合同;页面不得直接访问 OCCT、Three.js、SQLite 或 OPFS 业务 API。

每项至少需要 FreeCAD 1.1.1 GUI oracle、Chrome 真实交互回放、桌面与 390px 窄屏截图、成功/失败/取消状态、键盘与焦点证据、无遮挡/溢出检查和无障碍名称检查。UI-30 还必须确认任务结束后 TaskSession、Worker 请求、ShapeHandle、临时资源和对话框焦点陷阱全部释放。未取得完整 GUI oracle 前,只能标记 in_progress,不能用静态源码、当前页面截图或 headless FreeCADCmd 证据标记 completed

18.4 本轮已落地证据2026-08-07

  • 工作区改为 FreeCAD 桌面式紧凑层级应用菜单、标准工具栏、按命令组生成的工作台工具栏、MDI 文档标签、左侧 Combo ViewModel/Tasks、中央 OCCT/Three.js 视口、右侧 Selection View、Report/Jobs/Diagnostics 和状态栏;左右 Dock 可显式折叠。
  • File/Edit/View/Tools/Macro/Windows/Help 菜单具备 menu/menuitem 语义、外部点击和 Escape 关闭;命令搜索统一展示菜单/工作台命令Preferences、About、Macro、关闭/删除确认使用 aria-modal 对话框和桌面式按钮区。
  • 模型树支持对象选择驱动的右键菜单,包含可见性、重命名、重算和带依赖提示的删除确认;任务命令自动切换 Combo View 的 Tasks保留 Apply/OK/Cancel 和已有 Facade 事务。
  • Chrome 150 生产 E2E 新增 freecad-menuscommand-search-dialogpreferences-about-dialogsmodel-tree-context-menuFile 7 项、命令搜索 18 个结果、Preferences 3 select + 2 checkbox、模型树 4 项上下文命令、Part Design 5 个工具栏组;桌面 1440x1000 无横向溢出OCCT canvas 892x679、27 色、WebGL error 0390px 启动页无溢出162 个 AX 节点中的 16 个控件全部具名。
  • build、167 项 Facade 测试、230 项单元测试、13 条 Chrome 工作流、3 张有效 PNG、质量闭环、现有 10 项 release closure 和 git diff --check 均通过。新增 CAM 工作流验证 60 个菜单/工具栏命令、4 个工具栏组、5 个菜单组、Job/Fixture/Tool/Operation/ToolBit Load/Drilling/Drag Knife/Post 5 轴 Task、7 行 Job 树及三维刀路;此前 verify 曾在发布产物生成处因缺少签名环境而 fail-closed现已通过受控本地 Ed25519 密钥重新生成清单并由公钥验签,禁止复用旧签名宣称新构建已签名。

当前 UI 波次为 0 completed / 10 in_progress / 2 pending / 0 blocked。未关闭项不是样式返工UI-19 仍需可自动化的完整 FreeCAD GUI oracleUI-20..UI-28 仍需按该 oracle 补齐动态禁用、全部对话框、视口/多选上下文、坐标预选和焦点陷阱UI-29/UI-30 等待逐工作台回放和零未登记差异闭包。

19. CAM 完整对标执行波次CAM-21..CAM-32

P09 的 CAM-ALL=completed 表示原 WBS 定义的 Job/Stock/Tool/Operation、碰撞负例、仿真和确定性 G-code 兼容门已经通过,不表示网页端已经等价实现 FreeCAD CAM/Path 的全部算法、对象模型、界面和机床验证。本波次继续锁定 FreeCAD 1.1.1、提交 0108fd4b4850cc46e625b60e53cea7a7bbe69f8d;能力口径由 config/freecad-cam-parity.json 管理,check:cam-parity 同时校验 FreeCAD GUI 清册、浏览器 CAM 报告和真实应用 E2E。FreeCAD 清册含 56 个 runtime CAM 命令和 5 个 source-only 注册,除 CAM_%s 动态模板外,当前 Web 已暴露全部 60 个可操作命令。除静态命令 ID/分组清册外,当前能力统一标记为 compatible/development,不得宣称 exact。

19.1 已落地的浏览器 CAM 合同

  • CAM 工作台提供 FreeCAD 命名的 60 个可操作命令、4 个工具栏组和 5 个菜单组Combo View 中显示 Job、Model、Stock、SetupSheet、Tools/Controllers、Operations命令进入对应的 Job/Tool/Operation Task保留 Apply/OK/Cancel。
  • Job 支持从模型包围盒、创建方盒、创建圆柱和选择现有实体 4 种 StockSetupSheet 提供快速进给、安全/间隙高度、深度表达式和 coolantToolBit 覆盖 End Mill、Ball End、Bull Nose、Drill、V-Bit、Thread Mill、Probe 7 种形状及控制器进给/主轴参数。
  • Facade 登记 Profile、Pocket、Contour、Mill Face、Helix、Adaptive、Slot、Drilling、Tapping、Engrave、Deburr、V-Carve、Pocket 3D、Surface、Waterline、Thread Milling、Probe、Area、Area Workplane、Custom、Shape、Path Shape Tool Controller 共 22 种工序,以及 Array、Axis Map、Boundary、Dogbone、Drag Knife、Lead In/Out、Ramp Entry、Holding Tags、Z Correct 共 9 种 dress-up。
  • 三维视口渲染按工序着色的刀路Chrome CAM harness 实际生成 2 把刀、2 个控制器、3 个工序、23 个路径点和 1 个 dress-up通过 Sanity、无碰撞正例和 1 个碰撞负例。GRBL、LinuxCNC、Mach3/Mach4、Centroid、Marlin、MASSO G3、Snapmaker 7 个 allowlisted post 均生成稳定 SHA-256未知 post 显式拒绝。
  • Chrome 150 应用回放覆盖 13 条流程CAM 流程验证 60 个 CAM 菜单项、Job/Fixture/Tool/Operation/ToolBit Load/Drilling/Drag Knife Task、7 行 Job 树、5 个三维刀路点、图例、零横向溢出和零页面错误。独立 CAM 报告还验证 23 点材料去除时间线、夹具碰撞、sqlite-opfs 往返、marker 删除及释放后 ShapeHandle/kernel reference=0/0

19.2 任务分配与连续执行

任务 Owner 依赖 交付与验收 状态
CAM-21 FreeCAD CAM 命令与分组清册 ORACLE+PLATFORM UI-19、INV-03 锁定 InitGui/命令注册来源60 个可操作 Web 命令均映射 FreeCAD 清册,其中 56 个 runtime-probed、4 个 source-onlyCAM_%s 动态模板单独排除,基线漂移自动失败 completed
CAM-22 CAM 工作台、菜单、工具栏与 Job 树 CORE+PLATFORM CAM-21、UI-20..UI-23 4 工具栏组、5 菜单组、60 个可操作命令、Combo/Task/Property/视口刀路已落地;仍需完成动态可见/启用和完整 Qt 截图/焦点 oracle in_progress
CAM-23 Job、Stock 与 SetupSheet 浏览器合同 PLATFORM CAM-21、CAM-22 4 Stock mode、尺寸/边界、快速进给、安全/间隙高度、深度和 coolant 有成功/失败/持久化证据 completed
CAM-24 ToolBit、Library 与 Tool Controller PLATFORM+IO CAM-23 7 种刀具、控制器、刀号、feed/rapid/spindle/coolant、holder 尺寸字段、版本化 JSON ToolBit Load/Save仍须补齐 FreeCAD ToolBit asset schema、库迁移、holder 原生几何和全量编辑 oracle in_progress
CAM-25 全工序 Path 算法对标 PLATFORM+KERNEL CAM-23、CAM-24、TSN-09 22 种浏览器工序已有确定性兼容实现;须逐工序与 FreeCAD 原生 Path 几何、进退刀、深度、方向、失败诊断及拓扑引用比较 in_progress
CAM-26 Dress-up 与路径修改对标 PLATFORM+TOPO CAM-25 9 种 dress-up、Copy/Array/Toggle 生命周期已有合同;须补齐原生 Path dress-up 参数、组合顺序和 TopoRef oracle in_progress
CAM-27 仿真、材料去除与碰撞 PLATFORM+KERNEL CAM-25、CAM-26 已有去重扣料的 browser-raster 时间线、feed 时间、holder-stock/cutter-fixture/holder-fixture swept envelope、侵入量/间隙和 Fixture Task仍须以原生实体布尔去料、OCL/Path 与刀柄/夹具几何 oracle 对照 in_progress
CAM-28 后处理与 G-code 安全 PLATFORM+QUALITY CAM-24、CAM-25 7 个 allowlisted post、稳定哈希和非法 post 拒绝;须补齐 FreeCAD post 参数/单位/机床差异、控制器 golden 与生产 dry-run in_progress
CAM-29 CAM 文档、Undo/Redo 与 FCStd IO+DOC+PLATFORM CAM-23..CAM-28、FC-10 版本化 Job JSON 已覆盖 Stock、SetupSheet、ToolBit/Controller、Operation/Dress-up、路径、Fixture 和材料设置,具备受限导入、同身份重开及 Undo/RedoFreeCAD 原生 Path::Feature/FeaturePython save/open/mutate/save/open 与 Web Path::PropertyPath 原生 Path::Feature 命令资源编辑已由 oracle 通过FeaturePython/full operation-object 语义仍有边界 in_progress
CAM-30 Task、选择、键盘与对话框 CORE+TOPO+QUALITY CAM-22、CAM-24..CAM-28、UI-23..UI-28 原生 Qt 已验证 Job/Profile Task 的 setEdit、OK/Cancel、14 个字段和关闭生命周期;完整 selection provider、base geometry、键盘/焦点、错误/警告和全部工序对话框仍需对照 in_progress
CAM-31 OpenCamLib/CAMotics 与 4/5 轴 PLATFORM+KERNEL CAM-25、CAM-27 OCL WASM、CAMotics source-stage G-code、CAMotics 1.3 原生 Qt/TPL 与 CLI sidecar、standalone sweep WASM、OCCT 实体去除(含 continuous-segment sweep和 LinuxCNC XYZBC RTCP post/bridge 已接入;完整浏览器程序/同输入差分、FreeCAD 全工序算法和连续工具轴完整 oracle 仍须关闭 in_progress
CAM-32 exact 闭包与机床认证 QUALITY+ORACLE+全体 owner CAM-21..CAM-31 XYZBC 数字机型已按 CAD→OCL→CAMotics→G-code→LinuxCNC WASM 顺序完成 dry-run/run 接受6 个 LinuxCNC INI 的生产安全矩阵保持 fail-closedproductionOpen=false。FeaturePython/full Path 语义、CAMotics GUI/浏览器同输入差分、泛化工具轴/奇异点、机型专属生产认证仍阻止 exact 声明 in_progress

连续依赖链为 CAM-21 -> CAM-22/CAM-23 -> CAM-24 -> CAM-25 -> CAM-26/CAM-28 -> CAM-27 -> CAM-29/CAM-30 -> CAM-31 -> CAM-32。当前 CAM 波次状态为 8 completed / 4 in_progress / 0 pending / 0 blocked;本轮增加的 FreeCAD Path oracle、OCL/CAMotics source-stage、OCCT、LinuxCNC bridge 和 XYZBC 数字机床证书均已登记,剩余差异保持显式。

19.3 明确未关闭的 exact 差异

当前还缺少六类关键证据FreeCAD 全工序 Path 算法及几何语义、完整 CAM Qt Task 的选择/焦点/键盘/校验 oracle、CAMotics 完整浏览器程序及同输入三轴差分、解析任意曲线的无弦误差扫掠及刀柄/夹具碰撞 oracle、连续工具轴全姿态/奇异点 golden、FeaturePython/完整 operation-object 的 Web Path::PropertyPath 语义往返。LinuxCNC WASM G-code bridge 已成为唯一解析/控制器入口;安全矩阵只证明 fail-closed不打开生产授权也不替代实体执行器/计量认证。

20. 系统级 FreeCAD exact 执行波次EX01..EX10

既有 P01..P10 的 83/83 completed 是已声明浏览器兼容范围的发布闭包,不是 FreeCAD 全系统 exact。系统 exact 的唯一机器计划改由 config/freecad-web-exact-parity-plan.json 管理,锁定 FreeCAD 1.1.1 与提交 0108fd4b4850cc46e625b60e53cea7a7bbe69f8d。该计划逐项覆盖 34 个模块、15 种格式、6 类入口,任何遗漏、未知依赖、循环依赖、缺失阻断原因或提前 exact 都由 check:freecad-web-exact-parity-plan 拒绝。

Program 范围 任务状态 首要交付
EX01 全量 runtime/GUI oracle 与可选依赖 0 completed / 2 in progress / 1 pending 每个 TypeId、Property、Command 和失败状态都有原生证据
EX02 OCCT、逐阶段历史、MappedNameRef/StringHasher、同构消歧 1 / 3 / 2 每个 builder 有原生 stage Shape/history/naming无证据继续 fail-closed
EX03 App 文档、属性、事务、表达式、跨文档与参数 0 / 4 / 1 原生对象图、observer 顺序、失败恢复和多文档生命周期一致
EX04 Sketcher、Part、PartDesign 0 / 4 / 1 全几何/约束/特征/参数组合及 native naming 差异为零
EX05 FCStd 与全部 15 种格式 0 / 4 / 1 支持对象可编辑双向往返;代理格式显式排除出 exact claim
EX06 完整 GUI、Task、属性、选择、快捷键与工作流 0 / 4 / 1 动态 enable/visible/focus/validation 与 FreeCAD GUI oracle 一致
EX07 Draft、TechDraw、Spreadsheet、Plot 0 / 4 / 1 对象、命令、跨工作台引用和导出完整往返
EX08 Assembly、BIM、Surface、Mesh、Material 0 / 4 / 1 求解、IFC、曲面/网格算法和材料语义原生对照闭合
EX09 FEM、CAM、Robot、Points/RE、Inspection、脚本、插件、proxy 模块 0 / 6 / 3 全 Path/FEM/数据算法与安全 Python/addon 策略;五个 proxy 被实现或排除
EX10 跨浏览器、A11y、locale、可靠性和 exact 发布 0 / 2 / 2 34 exact 模块、所有零差异指标和签名发布同时满足

详细的 52 项任务均包含 priority/status/dependencies/deliverables/acceptance/evidence/exactBlockedBy。执行关键路径为:

  1. EX-ORA-01 -> EX-ORA-02 -> EX-KER-01,先扩展原生证据,禁止用 Web 当前行为自证。
  2. EX-TSN-00 -> EX-TSN-01 -> EX-TSN-02/03 -> EX-TSN-04,闭合逐阶段历史、私有 token 证据和同构来源。
  3. EX-DOC-01..05 -> EX-SK/PART/PD -> EX-FC/FMT,完成对象、特征和文件语义。
  4. EX-UI-01..05 与 EX07..EX09 按依赖推进,逐工作台比较成功、失败、取消、保存重开和资源释放。
  5. EX-QA-01..03 -> EX-REL-01 最后执行;不得通过修改 capability 文本绕过任何上游任务。

当前总状态为 1 completed / 37 in_progress / 14 pending / 0 blocked。唯一 completed 的 exact 子任务是 EX-TSN-00:缺少原生 MappedNameRef/StringHasher、逐阶段 builder 或唯一同构来源时硬失败或保持 ambiguous。系统 exact=false,直到 EX-REL-01 同时确认 52/52 completed、34/34 exact、错误绑定/未解释关系/名称漂移/未知语义差异/证据缺失/发布阻断全部为零。

Promotion 还必须经过 check:freecad-web-exact-promotion:它要求结构化 config/freecad-web-exact-promotion-report.json,并拒绝仅修改 compatibility-matrix.jsonclaim.exact 的人工提升。当前报告不存在是正常状态,因为 EX-REL-01 尚未完成;门禁必须输出 freecad-web-exact-promotion-fail-closed

七阶段执行细节、命令顺序、退出条件和报告示例见 docs/freecad-exact-promotion-runbook.zh-CN.md;机器字段契约见 config/freecad-web-exact-promotion-report.schema.json