feat: advance FreeCAD exact parity evidence
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

This commit is contained in:
2026-08-14 22:39:16 -04:00
parent e3373c9d6c
commit 5bbd7b9d4f
64 changed files with 113069 additions and 21074 deletions

View File

@@ -18,6 +18,7 @@
- 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。
- 当前工作树包含 TSN 逐阶段相关性、Property 状态/codec、CAM/LinuxCNC 验证资产、oracle 清册分类和首个 Pad GUI 工作流增量;聚焦门禁、完整 `verify`、发布产物验签和最终差异校验均已通过。
状态冲突时按以下顺序取真值:
@@ -27,6 +28,8 @@
4. `config/*-verification.json` 和原生 oracle某次具体环境运行的证据。
5. `docs/continuation-status.zh-CN.md`:按时间追加的历史日志,不作为当前总状态入口。
状态字段需要结合依赖读取:`in_progress` 只表示已有证据或实现,不表示当前可直接关闭;少数 `completed` 项是按自身验收范围关闭的独立切片,即使它引用的更大上游任务仍开放,也不能反推整条依赖链已经完成。
## 3. 当前架构主链
```text
@@ -47,19 +50,38 @@ FCStd / STEP / IGES / mesh / engineering resources
任何新功能都必须接入这条主链,不能从 React 绕过 Facade 直接调用 Three.js、OCCT、文件系统或持久化实现。
## 4. 执行优先级
## 4. 关键依赖链
```text
EX-ORA-01 -> EX-ORA-02 -> EX-KER-01
| |
+-> EX-DOC-01 +-> EX-PART-01 -> EX-PD-01
| ^
EX-TSN-00..03 -> EX-TSN-04 -----------+
| |
| +-> EX-DOC-02
| |
+--------------+-> EX-DOC-04 -> EX-FC-01
EX-DOC-01 -> EX-DOC-03 ---------^
核心链闭合后 -> GUI/工作台 -> 跨浏览器 QA -> EX-REL-01
```
当前形式上没有未完成前置的 P0 根任务只有 `EX-ORA-01``EX-TSN-04``EX-DOC-01` 已有可继续收敛的局部实现,但整体关闭仍依赖 `EX-ORA-01`Sketcher、Part、PartDesign、FCStd 和 CAM 不作为当前新增范围,除非它们是关闭上述根任务所需的验证夹具。
## 5. 执行优先级
### P0-A锁定完整原生 oracle
对应 `EX-ORA-01/02`穷尽运行时 TypeId、Property、GUI command、成功/失败/取消状态和 feature-family mutation 夹具。没有原生基线的功能不进入 exact 实现判断。
对应 `EX-ORA-01/02`当前隔离配置下有 1111 个工作台启动命令、19 个 source-only 命令和 2 个上下文延迟命令1111 个启动命令已拆为 100 个独立原生分片,全部完成 no-document/document/selection 三状态采样。首个 `PartDesign_Pad` 命令族已完成选择和原生成功 Task 工作流,下一项只采集无活动文档时的 disabled 状态;failure、cancel、recovery 与其他命令族仍保持开放。没有原生基线的功能不进入 exact 实现判断。
### P0-B关闭跨特征拓扑命名
对应 `EX-KER-01``EX-TSN-04`完成生产 Worker 五阶段链与桌面 30-case 逐阶段对账,补齐跨特征 mutation 矩阵、builder flags 和失败分支。目标是错误绑定、未解释关系和保存重开名称漂移均为零。
对应 `EX-KER-01``EX-TSN-04`锁定 30-case corpus 已按 `9 Boolean + 11 PartDesign + 6 复合 Boolean + 4 dress-up` 逐案例执行原生属性编辑30/30 都传播到最终 Shape219/219 阶段几何恢复657 条 before/edited/restored 阶段记录完成 fail-closed 对账;恢复状态再保存、重开、二次保存后的错误绑定、未解释关系和名称漂移均为零。FreeCAD 重算仍使 11 个 PartDesign 案例的 28 个 mutation 恢复阶段产生原生命名摘要演进。生产 Worker 五阶段链另有 5/5 几何编辑恢复,但顺序链只有 2/5 原生 builder3/5 为通用 Shape 代理rotate 缺少原生 mutation family2/5 恢复用例的 5 个下游语义拓扑摘要发生变化19 类生产操作的 361 个有序组合仅分类回放 4 个,因此门禁继续 fail-closed。
### 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 边界。
对应 `EX-DOC-01/02/03`。85 种运行时 Property、5510 条记录中22 种/4304 条已有通用原生 codec5 种/683 条已有专用 codec仍有 58 种/523 条只能 opaque 保存。15 类已观察到的 Property status 均已进入类型化 Facade 行为;`LockDynamic` 的动态属性增删改事务`PartialTrigger` partial-document observer 行为已有原生 oracle 与 Facade 测试。后续依次补齐剩余 Property codec/editor、完整 observer 顺序、局部重算失败、Extension 和 FeaturePython 边界。
### P0-D关闭核心建模语义
@@ -71,7 +93,42 @@ FCStd / STEP / IGES / mesh / engineering resources
P1/P2 的 GUI 全量对标、其他工作台、代理模块和跨浏览器发布,必须在上述 P0 主链有明确前置证据后推进。当前不再以增加工作台数量作为主要进度指标。
## 5. 每项工作的完成定义
## 6. 里程碑队列
按下表自上而下推进。并行上限为“一个实现里程碑 + 一个只读 oracle 准备项”;未达到退出条件时,不切换到新的工作台或长尾模块。
| 顺序 | 任务 | 当前状态 | 交付范围 | 退出条件 |
| --- | --- | --- | --- | --- |
| M0 | 收口当前工作树 | `completed` | 将 TSN、Property、CAM/LinuxCNC 三组已有增量分别核对证据和边界,不再混入新功能 | 聚焦门禁、完整 `verify``git diff --check`、全部 JSON 解析通过;计划与报告无陈旧哈希 |
| M1 | `EX-ORA-01` 运行时清册闭合 | `in_progress` | 对 352 个注册对象、1111 个启动 GUI command、19 个 source-only command、2 个 context-only command 和 GUI 工作流状态生成差异账本 | 每个候选均为 runtime-backed 或有机器可读排除原因;成功/禁用/失败/取消/恢复工作流未知项为零 |
| M2 | `EX-TSN-04A` 漂移判定 | `ready-after-M0` | 逐项解释 11 个 PartDesign case 的 28 个恢复命名摘要演进,以及五阶段链的 5 个恢复拓扑变化 | 每个差异都有 FreeCAD 复跑证据并被判定为稳定语义、允许演进或实现缺陷;未知项为零,缺陷有回归测试 |
| M3 | `EX-TSN-04B` 转换矩阵闭合 | `after-M2` | 将 19×19 的 361 个有序操作对按原生输入/输出类型分类;原生允许的组合使用真实 builder 回放,原生拒绝的组合保存失败 oracle | 361/361 已分类;可执行组合的 history/naming/mutation/resave 通过;不可执行组合的原生错误可复现;不再用通用 Shape 代理冒充 feature builder |
| M4 | `EX-DOC-01` Property 批次 | `after-M1` | 先做高复用 App 类型与链接/列表类型,再处理 Material、File、PythonObject 等带安全或工作台边界的类型 | 每批均具备原生值/状态/editor oracle、Facade codec、FCStd reopen/resave、Undo/Redo 和 Chrome 证据opaque 数量只按机器报告下降 |
| M5 | `EX-DOC-02/03` 文档闭环 | `after-M3+M4` | observer 顺序、事务 abort、局部重算失败、Extension、FeaturePython、copy/clone/delete/relink | 原生与浏览器事件序列一致;失败不污染最后有效状态;资源归零;随后再推进 `EX-DOC-04` |
| M6 | `EX-ORA-02/KER/PART/PD/SK` 纵向切片 | `after-M2+M5` | 由 oracle 差异报告选择一个特征族一次完成参数、失败、恢复、history、命名、FCStd 和 UI Task 生命周期 | 单特征全部证据通过后才选择下一族;不按整个工作台批量提升 exact |
| M7 | `EX-FC-01/FMT-01` | `after-M3+DOC-04` | 所有已支持对象、Property、Shape、ElementMap2、StringHasher 的 FreeCAD-Web-FreeCAD 双向 mutation随后补 STEP/IGES 高级元数据 | 两次保存重开后无未知语义漂移,未知资源按合同保留,格式差异全部登记 |
| M8 | `EX06..EX10` | `deferred` | GUI 全量、生产/工程工作台、代理策略、跨浏览器、性能、安全和发布 | 52/52 exact 任务、34/34 exact 模块及最终 promotion report 全部满足后才执行 `EX-REL-01` |
M3 不要求把 FreeCAD 本身拒绝的组合强行实现为顺序特征链。正确证据是:先由原生 FreeCAD 判断组合是否合法,再分别保存成功 builder 证据或稳定失败证据。M4 也不按记录数盲目排序;`PropertyPythonObject`、文件路径和 Material 类型必须先确定执行、安全和资源边界。
### 6.1 微任务队列
机器真值为 `config/freecad-active-work-queue.json`,由 `generate:freecad-active-work-queue` 从原生报告生成,并由 `check:freecad-active-work-queue` fail-closed 校验。当前共 487 个微任务112 `completed`、1 `in_progress`、374 `pending``maxInProgress=1`,唯一下一任务是 `ORA-GUI-WF-002`
| 微里程碑 | 任务粒度 | 数量 | 状态 | 下一退出条件 |
| --- | --- | ---: | --- | --- |
| `ORA-GUI-BASELINE` | 1 个配置边界或 1 个 GUI 命令分片 | 106 | 106 completed | 已关闭100/100 分片、1111/1111 命令状态、2 个上下文延迟命令均有证据 |
| `ORA-GUI-WORKFLOWS` | 1 个命令族的 1 种工作流状态 | 7 | 2 completed / 1 in_progress / 4 pending | `PartDesign_Pad` 选择与成功 Task 已完成;当前只执行 `ORA-GUI-WF-002` disabled 状态 |
| `TSN-RECOVERY-DRIFT` | 1 个原生 case 或 1 个生产 mutation | 13 | 13 pending | GUI workflow 七步关闭后,从 `partdesign-plain` 单 case 开始 |
| `TSN-ORDERED-PAIRS` | 1 个有序操作对 | 361 | 4 completed / 357 pending | 每次只分类并回放一个 `from->to`,不按特征族批量关闭 |
`ORA-GUI-WORKFLOWS` 严格按七步执行:选定命令族、成功、禁用、失败、取消、恢复、更新 blocker/门禁。一步只新增一种原生状态证据,前一步未通过时不启动后一步。
`TSN-RECOVERY-DRIFT` 的 13 个独立任务按以下顺序执行:`partdesign-plain``partdesign-midplane``partdesign-reverse``partdesign-taper``partdesign-twoside``partdesign-pocket``partdesign-pocket-through``partdesign-pocket-midplane``partdesign-pocket-twoside``partdesign-pocket-taper``partdesign-pocket-up-to-face`、生产 `cut`、生产 `rotate`。每个任务只允许一种结论:稳定语义、允许演进或实现缺陷;不得以几何恢复代替命名解释。
100 个 GUI 分片分别对应 `ORA-GUI-SHARD-000..099`,每片覆盖排序命令全集中的 11 或 12 个命令。每片有独立报告、SHA-256、起止索引和退出条件合并器要求 100 个区间连续、1111 个 ID 唯一且全集哈希一致。
## 7. 每项工作的完成定义
一个 FreeCAD 能力只有同时具备以下证据,才可关闭对应 exact 任务:
@@ -84,15 +141,49 @@ P1/P2 的 GUI 全量对标、其他工作台、代理模块和跨浏览器发布
7. 聚焦测试、相关 Chrome gate、计划/能力矩阵和差异说明同步更新。
8. exact promotion gate 不依靠改写报告或放宽断言通过。
## 6. 近期工作队列
## 8. 验证矩阵
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. 明确不做
TSN/命名批次:
```bash
./npmw run check:freecad-composite-history-elementmap
./npmw run check:freecad-tsn-stage-correlation
./npmw run check:freecad-exact-history-elementmap-gate
./npmw run check:freecad-naming-production
./npmw run check:chrome-freecad-naming-production
```
Property/文档批次:
```bash
./npmw run check:freecad-native-property-semantics
./npmw run check:freecad-property-status
./npmw run test:facade
./npmw run check:freecad-fcstd-roundtrip
./npmw run check:chrome-fcstd-semantic
```
合并前统一门禁:
```bash
./npmw run check:execution-plan
./npmw run verify
git diff --check
find config -maxdepth 1 -type f -name '*.json' -print0 | xargs -0 -n1 jq empty
```
若修改了 oracle/harness 或验证报告生成逻辑,必须先实际执行对应 `probe:*`/`test:chrome-*`,再运行只读 `check:*`;静态旧报告不能作为完成证据。
## 9. 维护规则
- 本文只维护当前状态、关键路径和下一批队列;长期范围仍由 exact JSON 账本管理,历史事实只追加到 continuation 日志。
- 每个里程碑只更新自己直接影响的实现、测试、verification、exact blocker 和能力矩阵,不顺手刷新无关报告。
- `completed` 必须对应机器账本中的验收范围;局部进展写入 blocker 数字,不提前改状态。
- 任何 `failed` 浏览器 gate、陈旧 artifact hash、资源泄漏或未知语义差异优先于新增能力。
## 10. 明确不做
- 不把项目改成远程桌面、服务端截图流或仅 UI 仿制品。
- 不新增绕过 Facade 的几何、渲染、脚本或存储入口。