# FreeCAD 后续工作细粒度执行计划

## 1. 机器真值

- `config/freecad-active-work-queue.json`：全部微任务、依赖、阶段、证据要求、退出条件和唯一活动任务。
- `docs/freecad-active-work-status.generated.zh-CN.md`：由同一生成器产生的实时摘要；禁止手工编辑或在其他计划中复制动态数字。
- `config/freecad-follow-up-task-progress.json`：A-I 后续任务的完成证据账本；只能追加连续前缀。
- `config/freecad-ordered-operation-pair-classification.json`：19×19 操作对的原生接受/拒绝事实。

`./npmw run generate:freecad-active-work-queue` 同时生成队列和状态页；`./npmw run check:freecad-active-work-queue` 对两个产物 fail-closed。任何时刻必须恰好有一个 `in_progress` 任务。

## 2. 里程碑顺序

1. `ORA-GUI-BASELINE`：原生 GUI 命令清册和隔离探针。
2. `ORA-GUI-WORKFLOWS`：命令族成功、禁用、失败、取消和恢复。
3. `TSN-RECOVERY-DRIFT`：恢复命名与生产拓扑漂移分类。
4. `TSN-ORDERED-PAIRS`：19×19 操作对逐对接受/拒绝、变异、命名和往返。
5. `PROPERTY-CODECS`：从原生语义报告自动枚举所有 opaque Property 类型。
6. `DOCUMENT-SEMANTICS`：observer、事务、DAG、失败恢复、Extension、FeaturePython 和多文档。
7. `CORE-MODELING`：19 个生产建模操作的纵向闭环。
8. `FCSTD-AND-FORMATS`：FCStd 资源、对抗输入和 STEP/IGES/BREP 双向往返。
9. `GUI-CLOSURE`：应用壳、MDI、树、Task、属性编辑器、对话框、焦点、选择和响应式无障碍。
10. `DOCUMENT-ENGINEERING-WORKBENCHES`：Draft、Spreadsheet、TechDraw、Plot、Assembly、BIM、Surface、Mesh 和 Material。
11. `PLATFORM-SCRIPT-PROXY`：FEM、CAM、Robot、数据模块、Python/Macro、Addon 及正式代理边界。
12. `QA-RELEASE`：浏览器/OS/GPU、无障碍/locale、fuzz/长稳、资源、签名发布和 exact promotion。

前一里程碑未完成时，后一里程碑全部保持 `pending`。只读 oracle 可以准备，但不能写入第二个活动任务或提前提升能力。

## 3. 每个能力的九个最小任务

| 阶段 | 单一交付物 | 退出条件 |
| --- | --- | --- |
| A | 原生清册与前置 | TypeId、输入、默认值、依赖和适用性机器可读 |
| B | 原生成功证据 | 名义值和边界值的值、Shape、拓扑、状态与诊断齐全 |
| C | 原生失败/取消证据 | 无效输入、禁用、取消和文档未污染可复现 |
| D | 参数变异/恢复 | 编辑、重算、恢复后的几何与语义完成分类 |
| E | Facade 实现 | 生产路径无隐藏 fallback，UI 不直连内核 |
| F | 事务恢复 | abort/undo/redo/stale/失败和资源所有权闭合 |
| G | FCStd 往返 | FreeCAD-Web-FreeCAD 无未知语义漂移 |
| H | 真实浏览器 | Chrome Worker、OPFS、UI 状态和资源释放通过 |
| I | 能力提升 | A-H 全过，聚焦门禁与 exact blocker 由机器报告同步 |

每个阶段只允许一个主要产物和一个聚焦检查。缺少任一阶段时，能力最多保持 `compatible` 或既有的显式 proxy 等级。

## 4. 单轮执行协议

1. 读取队列的 `nextTask`，确认依赖和输入 artifact 哈希。
2. 只修改该任务直接需要的 oracle、实现、检查器和报告。
3. 先运行原生 probe 或真实浏览器 test，再运行对应只读 check。
4. 验证 Shape/Worker/OPFS 等资源回到基线，失败不污染文档。
5. 运行相关 Facade、FCStd、TSN/执行计划门禁。
6. 仅在退出条件全部满足后记录完成证据并重新生成队列。
7. 运行 `git diff --check`、全部 JSON 解析和与风险相称的回归；发布点运行完整 `./npmw run verify`。

原生拒绝是有效分类，不应被强行实现为接受；但必须固定失败阶段、诊断、事务回滚和干净往返。原生接受则必须使用真实 builder，不能用通用 Shape 代理冒充。
