Files
Web_FreeCAD_Bitbybit/docs/freecad-web-execution-master-plan.zh-CN.md
wangdequan d11566403d
Some checks failed
real-verification / chrome (push) Has been cancelled
real-verification / freecad-oracle (push) Has been cancelled
real-verification / wasm (push) Has been cancelled
feat: close ordered pairs and property codec batches
2026-08-17 04:58:46 -04:00

28 KiB
Raw Blame History

FreeCAD Web 转换执行总计划

更新时间2026-08-15

1. 目标、口径与真值

项目唯一目标是把锁定的 FreeCAD 1.1.1 能力迁移到浏览器,并保留 FreeCAD 的文档、属性、重算、拓扑命名、文件和交互语义。项目不是远程桌面、截图流,也不是只复刻界面的通用 Web CAD。

进度必须同时区分两种口径:

  1. 兼容实现口径:config/freecad-execution-plan.json 的 P01-P10 共 83 项均已完成,证明当前 Web 应用有可运行实现、门禁和明确能力边界。
  2. exact 对标口径:config/freecad-web-exact-parity-plan.json 共 52 项,当前为 5 completed、36 in_progress、11 pending34 个模块为 0 exact、26 compatible、5 proxy、3 development。

因此当前结论是“可运行的 FreeCAD 风格 Web CAD 兼容基线已形成”不是“FreeCAD 已完整 Web 化”。只有 EX-REL-01 关闭、52/52 exact 任务完成、34/34 模块为 exact 且未知差异为零,才能改变系统级 exact claim。

发生状态冲突时按以下顺序取真值:

  1. config/freecad-web-exact-parity-plan.jsonexact 任务、依赖、阻断项。
  2. config/release-capability-matrix.json34 模块可对外声明的等级。
  3. config/freecad-active-work-queue.json:当前唯一在执行的微任务。
  4. config/freecad-execution-plan.json:兼容实现 P01-P10 的完成情况。
  5. config/*-verification.json、原生报告和 Chrome 报告:某个环境中的实际证据。
  6. 本文与 docs/current-work.zh-CN.md:解释、顺序和交接入口。

2. 当前完成情况重审

2.1 已形成闭环的兼容基线

  • React/Vite FreeCAD 风格应用壳、菜单、工作台、Combo View、Task、视口、Report/Jobs/Diagnostics 和状态栏可以运行。
  • React 只通过 BitBybitWebCadFacade 进入 CAD 领域Three.js、OCCT、SQLite/OPFS 和 Worker 没有成为 UI 业务旁路。
  • Bitbybit OCCT Worker、原生 history provider、FreeCAD 私有命名 ABI、planegcs WASM 和 SQLite OPFS 均已有构建或运行门禁。
  • Part、PartDesign、Sketcher、FCStd 和 26 个 compatible 模块已有代表性实现与 Chrome 证据。
  • CAM 已有 CAD -> OpenCAMLib -> CAMotics -> G-code -> LinuxCNC WASM 的真实浏览器验证链。
  • P01-P10 的 83/83 项兼容任务已完成,发布门 G0-G9 在该口径下通过。

2.2 已完成的 exact 独立切片

  • EX-TSN-00:缺失原生命名或 builder 证据时 fail-closed。
  • EX-TSN-01:已支持 builder 的逐阶段 Shape 与 Generated/Modified/Deleted 证据。
  • EX-TSN-02:生产 FreeCAD 私有 MappedNameRef/StringHasher 命名来源。
  • EX-TSN-03:同构拓扑只从唯一原生 provenance 稳定化,多来源保持 ambiguous。
  • EX-PD-02Attachment、Datum、ShapeBinder/SubShapeBinder、多 Body 与 XLink 重连生命周期的独立验收范围。

这些任务按自身验收范围关闭,不表示它们依赖的整个 PartDesign、文档或内核任务已经 exact。

2.3 已量化但尚未关闭的 P0 阻断

  • Oracle352 个注册对象、348 个可实例化对象、4 个不可实例化对象、1111 个启动 GUI command、19 个 source-only command 和 2 个 context-only command 已分类;命令族的成功、禁用、失败、取消、恢复流程仍未穷尽。
  • Property85 种运行时类型、5510 条记录中30 种/4361 条为通用原生 codec5 种/683 条为专用 codec50 种/466 条仍为 opaque proxy。
  • Property status15 类已观察状态均已进入类型化 Facade 行为;LockDynamicPartialTrigger 已有原生事务证据,但完整 observer 与局部重算序列未关闭。
  • TSN30/30 原生 mutation、219/219 几何阶段恢复通过11 个 PartDesign case/28 个恢复命名阶段均已通过第二次独立原生复跑分类为允许演进。
  • 生产命名链:五阶段 5/5 几何恢复2 个恢复拓扑 case/5 个下游阶段已分类为允许演进;仍有 3/5 通用 Shape 代理并缺注册 rotate mutation family。
  • 有序操作19×19 的逐对分类持续执行;实时已完成数、未知数和唯一活动项只从生成状态读取。
  • FCStd支持的原生 codec 与未知资源保留已有证据,但所有对象/属性/Extension/Shape/ElementMap2/StringHasher 的 FreeCAD-Web-FreeCAD 双向变异未穷尽。
  • GUI应用壳和代表性工作流已有浏览器证据但动态命令、Task、对话框、焦点、上下文和逐工作台流程没有完整原生对照。
  • 发布:系统级 exact 为 falseEX-REL-01 为 pending跨浏览器、长期运行和全模块 exact promotion 尚未开始。

2.4 可机器核对的完成度仪表盘

实时仪表盘为 docs/freecad-active-work-status.generated.zh-CN.md,由 generate:freecad-active-work-queue 同活动队列一起生成,并由 check:freecad-active-work-queue 逐字校验。此处不再复制任务数、完成数、操作对覆盖数、Property 覆盖数或下一任务;任何手工状态摘要均不具备治理效力。

3. 目标架构和不可破坏边界

React / FreeCAD Web UI
        |
BitBybitWebCadFacade + Command/Task contracts
        |
Document + Property + Transaction + DAG/Recompute
        |
Geometry / Sketch / Naming / Project / CAM facades
        |
Dedicated Workers
        |
Bitbybit OCCT + FreeCAD naming + planegcs + SQLite OPFS
        |
FCStd / STEP / IGES / mesh / CAM / engineering resources

任何后续任务都必须满足以下边界:

  • UI 不直接调用 Three.js、OCCT、OPFS、SQLite 或脚本执行器。
  • 最终 Shape 相似不能替代逐阶段 history、命名、文档状态和 FCStd 证据。
  • mock 和 Node 单测不能替代真实 Chrome Worker/WASM 回放。
  • 未知属性和资源必须无损保留或拒绝编辑,不能猜测性改写。
  • 原生来源不唯一时保持 ambiguous不能按数组顺序或网格索引稳定化。
  • FreeCAD 本身拒绝的组合保存原生失败 oracle不强行实现为成功链。
  • 每次只允许一个机器队列任务为 in_progress,避免同时扩展多个工作台。

4. 最小任务和完成定义

一个“最小实现任务”只处理一个命令、属性类型、特征参数分支、原生 case 或有序操作对。每项按以下九个独立检查点推进:

  1. A-inventory锁定源码位置、TypeId/command id、依赖和适用对象。
  2. B-native-success:采集 FreeCAD 1.1.1 成功结果、状态、事件和资源。
  3. C-native-negative:分别采集 disabled、failure、cancel不适用时保存可验证原因。
  4. D-native-mutation:编辑输入、重算、恢复,并记录逐阶段 Shape/history/naming。
  5. E-facade:在 Facade/Worker 边界内实现结构化合同和失败诊断。
  6. F-transaction:覆盖 Undo/Redo、abort、stale generation 和最后有效状态保留。
  7. G-roundtripFreeCAD 保存 -> Web 读取/修改/保存 -> FreeCAD 重开/再保存。
  8. H-browser:真实 Chrome Worker/WASM/OPFS 回放,结束后 Shape/Worker/资源归零。
  9. I-promotion:聚焦 check、计划 blocker、能力矩阵和差异账本同步。

只有 A-I 全部完成,最小能力才能提升 exact。若任务仅为 oracle 准备,则只关闭它明确声明的证据范围,不提前关闭实现任务。

5. 当前串行微任务队列

当前机器队列由 scripts/generate-freecad-active-work-queue.mjs 生成。每个条目只允许一个产物、一个聚焦检查和一个退出条件。

5.1 ORA GUI 基线106 项,已完成

  • ORA-GUI-SETUP-000..002:拆分 GUI 探针、诊断 BIM 首启弹窗、隔离用户配置。
  • ORA-GUI-SHARD-000..099100 个连续分片,覆盖 1111 个命令的 no-document/document/selection 三态。
  • ORA-GUI-MERGE-000:合并分片并校验 ID 全集、连续区间和 SHA-256。
  • ORA-GUI-CONTEXT-000..001:分类 Import_ReadBREPNaviCubeDraggableCmd 的延迟注册边界。

5.2 ORA GUI 工作流7 项,已完成

  • ORA-GUI-WF-000:选择首个命令族。已选 PartDesign_Pad,映射主任务 EX-UI-03,关联 EX-ORA-01/EX-PD-01
  • ORA-GUI-WF-001Pad 原生成功工作流和聚焦断言已完成Task 打开/接受、Body Tip、体积、拓扑和 Undo 证据通过。
  • ORA-GUI-WF-002:无活动文档时的 disabled 工作流已完成QAction 与命令管理器入口均被阻止文档、Task 和事务保持为空。
  • ORA-GUI-WF-003open-wire profile 的 failure 工作流已完成原生诊断、Task 可修正状态和失败清理回滚均已锁定。
  • ORA-GUI-WF-004:有效预览后的 Cancel 工作流已完成;回滚、活动 Body 及原生选择/焦点轨迹均已锁定。
  • ORA-GUI-WF-005:失败后在同一 Task 内修复 profile、提交、Undo/Redo、保存重开和二次保存已完成。
  • ORA-GUI-WF-006exact blocker、聚焦门禁和后继 TSN 队列已更新,已完成。

5.3 TSN 恢复漂移13 项,已完成

按以下顺序一次解释一个 case

队列 ID case 唯一 mutation 轨迹 漂移 ordinal 阶段数 状态
TSN-DRIFT-000 partdesign-plain Pad10.Length: 7 -> 7.75 -> 7 0,9 2 completed / allowed_evolution
TSN-DRIFT-001 partdesign-midplane Pad11.Length: 8 -> 8.75 -> 8 0,9 2 completed / allowed_evolution
TSN-DRIFT-002 partdesign-reverse Pad12.Length: 5 -> 5.75 -> 5 0,9 2 completed / allowed_evolution
TSN-DRIFT-003 partdesign-taper Pad13.Length: 6 -> 6.75 -> 6 0,9 2 completed / allowed_evolution
TSN-DRIFT-004 partdesign-twoside Pad14.Length: 7 -> 7.75 -> 7 0,9 2 completed / allowed_evolution
TSN-DRIFT-005 partdesign-pocket Pad15.Length: 8 -> 8.75 -> 8 0,9,11 3 completed / allowed_evolution
TSN-DRIFT-006 partdesign-pocket-through Pad16.Length: 5 -> 5.75 -> 5 0,9,11 3 completed / allowed_evolution
TSN-DRIFT-007 partdesign-pocket-midplane Pad17.Length: 6 -> 6.75 -> 6 0,9,11 3 completed / allowed_evolution
TSN-DRIFT-008 partdesign-pocket-twoside Pad18.Length: 7 -> 7.75 -> 7 0,9,11 3 completed / allowed_evolution
TSN-DRIFT-009 partdesign-pocket-taper Pad19.Length: 8 -> 8.75 -> 8 0,9,11 3 completed / allowed_evolution
TSN-DRIFT-010 partdesign-pocket-up-to-face Pad20.Length: 5 -> 5.75 -> 5 0,9,11 3 completed / allowed_evolution
TSN-PROD-DRIFT-000 生产 cut 五阶段链 cut 参数编辑/恢复 由生产报告锁定 - completed / allowed_evolution
TSN-PROD-DRIFT-001 生产 rotate 五阶段链 rotate 参数编辑/恢复 由生产报告锁定 - completed / allowed_evolution

每项必须得到且只能得到一种结论FreeCAD 稳定语义、允许的命名演进、实现缺陷。实现缺陷必须增加回归测试;未知不能作为结论。

每个 case 再拆成六个必须依次完成的最小检查点;后续能力的 A-I 检查点已经全部进入生成队列:

检查点 唯一产物 fail-closed 验收
-A-contract case id、target object/type、property path/type、before/edited/restored、drift ordinal 与锁定 30-case oracle 一致,属性确实可编辑
-B-replay 第二个独立 FreeCAD 1.1.1 进程报告 版本、commit、harness SHA-256 和运行状态锁定
-C-fingerprint 每个漂移阶段的 geometry/relation/semantic-name 三相摘要 参考与复跑的 before/edited/restored 逐字段一致
-D-restore property 恢复、geometry 恢复、restored-to-nominal 结论 任一阶段几何未恢复即停止并调查缺陷
-E-persistence initial/reopened/resaved 命名摘要 roundtrip/resave drift 为 0且三态与 restored 一致
-F-decision stable_semantics / allowed_evolution / implementation_defect 唯一分类 决策进入连续前缀账本checker 通过,只推进直接后继

任一检查点失败时,当前任务保持 in_progress,不得领取下一 case。如果分类为 implementation_defect,还必须在同一队列项内完成最小修复、回归测试、原生/Web 对照和资源释放,不另行跳过。

5.4 TSN 有序操作对

操作全集为 Fuse、Cut、Common、Rotate、Pad、Pocket、Loft、Pipe、Revolution、Groove、Fillet、Chamfer、Hole、Draft、Thickness、LinearPattern、PolarPattern、Mirrored、MultiTransform。

每个 from -> to 是一个独立任务:

  1. 确定 from 输出类型与 to 输入前置。
  2. 在原生 FreeCAD 执行并记录接受或拒绝。
  3. 接受时使用真实 builder采集 history/naming。
  4. 编辑 from 参数并重算 to
  5. 恢复参数并分类命名/拓扑变化。
  6. 保存、重开、再保存并比较。
  7. 在生产 Worker 回放并检查释放。
  8. 拒绝时固定原生错误类型和文档未污染证据。

初始五阶段转换和 fuse->* 连续前缀均已进入机器分类账本;实时覆盖集合与当前操作对严格从生成状态和 config/freecad-ordered-operation-pair-classification.json 读取,其余逐对领取。

6. 后续关键路径微里程碑

M00 当前工作树收口

状态completed聚焦门禁、完整 verify、发布产物验签、JSON 和 diff 校验均通过。

  • M00.1 TSN 原生报告、resave 和 stage correlation 对账。
  • M00.2 Property codec/status、Facade 行为和 FCStd 证据对账。
  • M00.3 CAM/LinuxCNC artifact hash、浏览器报告和 parser authority 对账。
  • M00.4 GUI 分片、source/context-only 分类和 oracle coverage 对账。
  • M00.5 git diff --check、全部 JSON 解析、完整 verify

退出条件:所有生成文件未陈旧,全部门禁通过,没有以报告改写替代真实执行。

M01 EX-ORA-01 GUI 工作流闭合

状态:首个 Pad 命令族 7/7 已完成;EX-ORA-01 因其他命令族和运行时对象/Property 未穷尽而继续 in_progress

先完成 Pad 七步,再按风险选择下一族。每个后续命令族仍拆成 success/disabled/failure/cancel/recovery/update 六个状态任务。选择顺序:核心文档命令 -> Sketcher 创建/编辑 -> PartDesign 参数 Task -> Part builder -> FCStd import/export -> 其他工作台。

退出条件:每个运行时命令归入一个工作流族;每族五态都有原生证据或机器可读不适用原因;未知 GUI 状态为零。

M02 EX-TSN-04A 恢复漂移闭合

状态13/13 已完成11 个 PartDesign case/28 个阶段及 2 个生产 case/5 个阶段均完成独立复跑分类。

  • M02.1-M02.1111 个 PartDesign case/28 个命名摘要演进已全部分类为允许演进。
  • M02.12:生产 Cut 恢复拓扑漂移已分类为允许演进。
  • M02.13:生产 Rotate 恢复拓扑漂移已分类为允许演进。
  • M02.14:若发现实现缺陷,只修改一个 operation/case 并补回归。
  • M02.15:汇总 zero-unknown drift gate不直接提升系统 exact。

退出条件13/13 case 有分类,未知为零,缺陷修复均有原生与浏览器证据。

M03 EX-TSN-04B builder 与 19×19 转换矩阵

状态:in_progress;实时覆盖数和当前操作对见生成状态。

  • M03.1:用真实 builder 替换五阶段链中 Cut 之后的通用 Shape 代理,一次替换一个 stage。
  • M03.2:增加 Rotate 原生 mutation family。
  • M03.3:按 361 个独立任务完成有序组合分类。
  • M03.4:每个允许组合完成 mutation、restore、naming、resave、浏览器释放。
  • M03.5:每个拒绝组合固定错误和无文档污染证据。

退出条件361/361 分类;所有原生允许组合为真实 builder所有拒绝组合可稳定复现0 generic Shape proxy、0 未解释恢复漂移。

M04 EX-DOC-01 Property codec 批次

状态:等待 M01可在不改变单任务并行上限的前提下准备只读 oracle。

每个类型严格执行第 4 节 A-I。批次内一次只领取一个 Property 类型,按复用度和安全风险排序:

  • M04.A 量纲标量Acceleration、Area、Force、HeatFlux、Moment、Power、Pressure、Speed、Stiffness、StiffnessDensity、Temperature、ThermalTransferCoefficient、VectorDistance、Quantity。
  • M04.B 数学与集合BoolList、Color、ColorList、Direction、Font、IntegerSet、Map、Matrix、PlacementList、Position、Rotation、UUID、VectorList。
  • M04.C 链接族LinkListHidden、LinkSubHidden、LinkSubListGlobal、XLink、XLinkList、XLinkSub、XLinkSubList。
  • M04.D MaterialApp PropertyMaterial/PropertyMaterialList 与 Materials::PropertyMaterial先固定 schema、继承和资源边界。
  • M04.E 文件资源PropertyFile、PropertyFileIncluded、PropertyPath禁止把宿主绝对路径写入浏览器项目。
  • M04.F PythonObject先定义禁止执行、可信序列化、代理编辑和迁移边界再决定 codec不得反序列化执行任意 Python。
  • M04.G 几何/求解内核Part ShapeHistory/TopoShapeList/FilletEdgesMesh MeshKernel/CurvatureListFem FemMesh/PostDataObjectPoints PointKernelRobot Trajectory。
  • M04.H 工作台专用Spreadsheet Sheet/RowHeights/ColumnWidthsTechDraw CenterLine/CosmeticEdge/CosmeticVertex/GeomFormat listsInspection DistanceList。

每个类型的退出条件:原生默认/非默认/边界值、所有观察 status、Data/View editor、动态增删、Undo/Redo、FCStd reopen/resave、Chrome 回放和资源释放全部通过。只有运行时报告变为 native codec 后opaque 计数才允许下降。

M05 EX-DOC-02/03 文档语义

状态:等待 M03+M04。

  • M05.1 对象 add/remove/rename 的 observer 前后事件顺序。
  • M05.2 Property add/remove/rename/change 的事务顺序。
  • M05.3 nested transaction、commit、abort、undo、redo。
  • M05.4 DAG 脏标记、局部重算和跨分支顺序。
  • M05.5 recompute 失败时保留最后有效 Shape 与诊断树。
  • M05.6 partial document load、PartialTrigger、完整加载后重算。
  • M05.7 copy/clone/delete/relink/group/extension 生命周期。
  • M05.8 Extension 动态属性、版本迁移和未知 Extension 保留。
  • M05.9 FeaturePython 默认禁执行、代理、签名能力和显式授权边界。
  • M05.10 外链关闭、缺失、重开、路径恢复与多文档事务。

退出条件:原生和 Web 事件序列一致;失败不污染有效状态;重开后 DAG/链接/事务语义稳定;资源归零。

M06 EX-KER-01/ORA-02 内核纵向切片

状态M02 证据已可消费,等待 M05 文档闭环。

按一个 builder/参数分支执行 A-IBox、Cylinder、Cone、Sphere、Torus、Prism、Wedge、Helix、EllipsoidExtrusion、Revolution、Loft、SweepFuse、Cut、CommonFillet、Chamfer随后是 tolerance、healing、validation 和失败诊断。

退出条件参数、单位、placement、公差、有效性、质量属性、逐阶段 history、错误和 Worker 所有权均与原生 fixture 一致。

M07 EX-SK-01/02 Sketcher 纵向切片

状态:等待 KER/DOC 前置。

  • M07.1 直线/圆/圆弧/椭圆/椭圆弧/双曲线/抛物线/B-spline 的创建与编辑。
  • M07.2 几何约束每个 overload 的成功、冗余、冲突和退化。
  • M07.3 尺寸、参考、Driving/Driven、单位和表达式。
  • M07.4 外部几何 Projection/Intersection/Both 与 TopoRef 漂移。
  • M07.5 InternalAlignment、SnellsLaw、B-spline Weight 辅助几何。
  • M07.6 autoconstraint、trim/extend/split、construction、virtual space。
  • M07.7 任务焦点、选择、键盘、cancel 和 solver stale/crash 恢复。

退出条件:每个 geometry/constraint overload 经过 A-I求解分类、自由度和诊断与原生一致。

M08 EX-PART-01 Part 纵向切片

状态:等待 M03+M06。

每个 primitive 和 builder 单独闭环;随后逐项完成 Boolean 参数、Refine、placement、multi-solid、healing、inspection、失败与恢复。不能用一个成功 Box 或最终体积代表整个 Part 工作台。

退出条件:所有注册 Part command/TypeId/参数分支均有原生与浏览器证据,未知选项为零。

M09 EX-PD-01 PartDesign 纵向切片

状态:等待 M03+M08。

顺序为 Pad -> Pocket -> Revolution -> Groove -> Additive/Subtractive Loft -> Additive/Subtractive Pipe -> Fillet -> Chamfer -> Hole -> Draft -> Thickness -> Linear/Polar Pattern -> Mirrored -> MultiTransform。每个特征再按模式拆分例如 Length/ThroughAll/UpToFace、Midplane/Reverse/TwoLengths/Taper、成功/无效 profile/失效 support/取消/恢复。

退出条件:每个模式完成 A-IBody Group/Tip、Support/Attachment、跨特征命名和 FCStd 保持一致。

M10 EX-FC-01/FMT-01 FCStd 与核心格式

状态:等待 M03+DOC-04。

  • M10.1 每种已支持对象/Property 的 FreeCAD -> Web 无修改往返。
  • M10.2 Web 修改 -> FreeCAD 重开 -> FreeCAD 再保存 -> Web 重开。
  • M10.3 Shape、ElementMap2、StringHasher、Expression、GuiDocument 资源逐项变异。
  • M10.4 未知 XML、BRep、脚本和 Extension 的字节保留或只读拒绝。
  • M10.5 损坏 ZIP、路径穿越、压缩炸弹、超限和取消。
  • M10.6 STEP/IGES/BREP 的单位、颜色、层、名称、装配关系和高级元数据。

退出条件:两次保存重开后未知语义漂移为零;不支持资源有明确只读/代理策略。

M11 EX-UI-01..05 GUI 全量对标

状态:先执行 M01完整阶段等待文档与核心特征稳定。

按应用壳、菜单、工具栏、工作台切换、MDI、Combo View、模型树、Task、Data/View 属性、对话框、快捷键、上下文菜单、状态栏、Report/Jobs、3D 选择逐域拆分。每域分别采集空文档、活动文档、单选、多选、Task、错误、取消和恢复状态随后按工作台完成端到端流程。

退出条件:命令可见/启用、事务、焦点、选择、树、属性、视图和诊断均与 oracle 对齐;桌面和 390px 视口无重叠、溢出和无名控件。

M12 文档与工程工作台

状态deferred。

顺序为 Draft -> Spreadsheet -> TechDraw -> Plot -> 跨工作台文档闭环Assembly -> BIM/IFC -> Surface -> Mesh/MeshPart -> Material。每个对象/命令仍按 A-I不按整个工作台一次性提升 exact。

退出条件:相关 exact 任务逐项完成,跨工作台链接、表达式、导出和保存重开无未知差异。

M13 平台工作台、脚本与代理

状态deferred。

顺序为 FEM、CAM、Robot、Points/ReverseEngineering、Inspection/Measure、Python/Macro、Addon最后处理 Cloud/Help/IDF/JT/OpenSCAD 的 browser implementation、sidecar、proxy 或正式排除。安全边界先于功能数量。

退出条件:每项均有可执行策略、依赖/许可证/SBOM、能力限制和失败策略代理不得被标记 exact。

M14 QA、跨浏览器与发布

状态deferred日常门禁持续运行。

  • M14.1 Chrome 当前基线重跑。
  • M14.2 Firefox/Safari 或明确不支持的可复核边界。
  • M14.3 Windows/macOS/Linux 与 GPU/软件渲染矩阵。
  • M14.4 键盘、屏幕阅读器、locale、长文本和窄屏。
  • M14.5 fuzz、1000 次重算、长会话、崩溃、迁移和回滚。
  • M14.6 性能、WASM/JS/GPU/OPFS 保留量与资源归零。
  • M14.7 SBOM、许可证、签名、离线安装和发布回滚。
  • M14.8 52/52 exact、34/34 exact、零未知差异的 promotion report。

退出条件:EX-REL-01 的所有前置完成promotion gate 从 fail-closed 报告自然变为通过,不能通过放宽断言或改写静态报告达成。

7. 执行顺序

当前只允许以下主顺序:

M00
 -> M01 ORA GUI workflows
 -> M02 TSN drift
 -> M03 TSN ordered pairs / real builders
 -> M04 Property codecs
 -> M05 Document semantics
 -> M06 Kernel oracle slices
 -> M07 Sketcher
 -> M08 Part
 -> M09 PartDesign
 -> M10 FCStd/core formats
 -> M11 GUI full replay
 -> M12 document/engineering workbenches
 -> M13 platform/script/proxy
 -> M14 QA/release

只读 oracle 准备可以与当前实现任务交错,但不能让机器队列出现第二个 in_progress,也不能绕过依赖提前提升 exact 状态。

8. 每轮执行模板

  1. config/freecad-active-work-queue.json 读取唯一 nextTask
  2. 验证依赖与输入报告哈希,确认没有陈旧 artifact。
  3. 只修改该任务直接影响的 oracle、实现、测试、报告和 blocker。
  4. 先运行该域聚焦 probe/test再运行只读 check。
  5. 运行 test:facade、相关 Chrome gate、check:execution-plan
  6. 运行完整 ./npmw run verifygit diff --check 和全部 JSON 解析。
  7. 将当前任务改为 completed并只把直接后继改为 in_progress。
  8. 更新 docs/current-work.zh-CN.md 的数字和下一任务;历史事实追加到 continuation 日志。

任何失败报告、资源泄漏、哈希陈旧、未知语义差异都优先于新增功能。

9. 本轮实际启动点

ORA-GUI-WF-000 已完成:首个命令族为 partdesign-pad-task,代表命令 PartDesign_Pad,主 exact 映射为 EX-UI-03,关联 EX-ORA-01/EX-PD-01。选择依据和五态配方保存在 config/freecad-gui-workflow-plan.json,由 check:freecad-gui-workflow-plan 校验。

ORA-GUI-WF-001 也已完成:锁定 FreeCAD 1.1.1 的 Pad 成功 GUI 工作流通过原生命令打开 Task点击 Done 后清理 edit 状态,得到 PartDesign::Pad、Body Tip=Pad、体积 120、6 面/12 边/8 点和 UndoCount=1。

ORA-GUI-WF-002 已完成:在独立原生进程中,PartDesign_PadisActive() 与 QAction 均为 falseQAction trigger 和 Gui.runCommand() 两条入口都未创建文档、Task 或事务。

ORA-GUI-WF-003 已完成open-wire profile 打开无效 Pad 预览,接受时原生报告 Wire is not closed.Task 保持打开;失败清理 reject 后临时 Pad 与事务被回滚,原有 Body/Sketch 状态保持不变。

ORA-GUI-WF-004 已完成17.5 mm Pad 预览为 210 体积的有效单实体reject 后临时 Pad、Tip 变化与事务全部回滚,活动 Body 保持不变。原生选择从 Sketch 被消费为空并保持为空;焦点从 3D View 进入 lengthEdit,取消后落到 TaskView而非恢复原 3D View。

ORA-GUI-WF-005 已完成open-wire Pad 首次接受产生 Wire is not closed.Task 保持可修正;同一 Task 内补齐闭合矩形并通过 lengthEdit.rawValue 输入 12 mm 后,预览和提交均为 6 面/12 边/8 点、体积 144 的有效单实体。Undo 回到两段 open-wire 且 Pad 不存在Redo 恢复 12 mm Pad保存、关闭重开、再次保存和再次重开均保持相同语义。

ORA-GUI-WF-006 已完成工作流计划、exact blocker、聚焦 checker 和活动队列同步Pad 命令族 7/7 关闭,但没有据此提升 EX-ORA-01EX-UI-03 或系统 exact。

TSN-DRIFT-000 已完成:partdesign-plainLength 7 -> 7.75 -> 7 在 Body 和 Pad 两个阶段恢复相同几何,但从首次创建命名演进为新的稳定历史。锁定报告与第二次独立 FreeCAD 1.1.1 复跑的逐阶段摘要一致,演进值又在 save/reopen/resave 中保持,因此分类为 allowed_evolution,不是 Web 实现缺陷。

TSN-DRIFT-001 已完成:partdesign-midplaneLength 8 -> 8.75 -> 8 在 Body11 和 Pad11 两个阶段恢复相同几何,关系与语义命名摘要演进为新的稳定历史。锁定报告与第二次独立 FreeCAD 1.1.1 复跑的逐阶段摘要一致,演进值在 save/reopen/resave 中保持,因此同样分类为 allowed_evolution,不是 Web 实现缺陷。

TSN-DRIFT-002 已完成:partdesign-reverseLength 5 -> 5.75 -> 5 在 Body12 和 Pad12 两个阶段恢复相同几何,关系与语义命名摘要演进为新的稳定历史。锁定报告与第二次独立 FreeCAD 1.1.1 复跑的逐阶段摘要一致,演进值在 save/reopen/resave 中保持,因此同样分类为 allowed_evolution,不是 Web 实现缺陷。

TSN-DRIFT-003 已完成:partdesign-taperLength 6 -> 6.75 -> 6 在 Body13 和 Pad13 两个阶段恢复相同几何,关系与语义命名摘要演进为新的稳定历史。锁定报告与第二次独立 FreeCAD 1.1.1 复跑的逐阶段摘要一致,演进值在 save/reopen/resave 中保持,因此同样分类为 allowed_evolution,不是 Web 实现缺陷。

TSN-DRIFT-004..010 与生产 cut/rotate 漂移均已完成独立复跑,并唯一分类为 allowed_evolution;恢复漂移队列因此关闭。

fuse->pad 已由原生 OCCT builder 和 FreeCAD PartDesign::Pad 文档路径稳定拒绝,事务 abort 后对象集与源 Shape 恢复,干净 FCStd save/reopen/resave 不受污染。fuse->pocket 已由真实 BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut 接受长度变异与恢复、history/naming 和 FCStd 三阶段均通过。唯一下一任务不在此手工记录,只读取生成状态。