Files
FreeCADWasmDev/docs/current/FREECAD_WEB_EXECUTION_PLAN.md
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

96 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FreeCAD 1.2 Web 执行索引
> 本文件只回答“现在做什么、依赖是什么、完成后去哪”。技术背景见
> [`FREECAD_WEB_MIGRATION_ANALYSIS.md`](FREECAD_WEB_MIGRATION_ANALYSIS.md),当前现场见
> [`FREECAD_WEB_PROGRESS.md`](FREECAD_WEB_PROGRESS.md),单任务上下文见
> [`../tasks/`](../tasks/)。
> 上下文预算、状态账本和恢复协议见 [`FREECAD_WEB_CONTEXT_PROTOCOL.md`](FREECAD_WEB_CONTEXT_PROTOCOL.md)。
## 执行规则
- 当前采用 `feature-first-deferred-validation`:实现队列以用户功能 command 和 runtime issue 为单位,13,385/13,386 Python 源符号仅作追踪索引,不再逐条 gate。完整说明见 [`../WEB_IMPLEMENTATION_FIRST_STRATEGY.md`](../WEB_IMPLEMENTATION_FIRST_STRATEGY.md)。
- Web 工作台统一提供可编辑 `{cmd,args}` JSON 参数入口;已注册 Web command 通过独立 Worker/WASM 动态路由,源码盘点的 640 条桌面 Qt/Gui 命令按生成 registry 的剩余集合批量迁移为 React/Worker capability。具体数字不写死,使用中错误只重新打开受影响 capability。
- 实现阶段只保留必要的增量构建和资源同步,不自动运行 focused/full/Chrome/性能验证;实现回执不得写成 validation pass。
- 同时只能有一个 `in_progress` 任务;该任务内部按 `module+tier+family` 批量关闭多个 Full Parity unresolved records。
- **铁律:浏览器测试只执行 Google Chrome;Firefox、WebKit、Safari 不执行、不纳入当前矩阵、不作为验收或阻断判定。历史记录仅供追溯。**
- 任务只关闭一个可观察合同,目标时长 15-90 分钟;合同内部以 4-32 条同 family 记录为一个功能批次,共享 native/Worker/Facade/证据链。
- 前置列中的 `+` 表示所有列出的直接前置都必须完成;不得用里程碑名称替代证据。
- 任务详情、命令、产物和恢复点写在独立任务卡,不在本索引重复。
- 状态唯一事实源是 [`task-state.json`](task-state.json);本索引只做导航投影。
- 失败只新增针对首个错误的恢复任务;不跳过前置。
- 只有 `gate` 可以把里程碑改为 `completed`。
- 验证分层:实现批次只验证真实源码接线、native dispatcher schema、资源释放、重复/取消和最小 fixture;完整 API/对象/格式/Chrome/性能/安全 gate 在功能族或模块收口时集中执行,禁止每条记录重复全量验证。
## 里程碑
| 里程碑 | 出口 | 状态 | 任务入口 |
|---|---|---|---|
| P0 基础闭包 | 依赖、核心归档、WASM 对象可复跑 | completed | 历史归档 |
| P1 查看器 | STEP、Worker、Three.js、OPFS、缓存回放 | completed | 历史归档 |
| P2 参数化核心 | Document、FCStd、事务、Sketcher 最小切片 | completed | [`P2`](../tasks/INDEX.md#p2-参数化核心) |
| P3 功能对标 | 源码驱动的工作台/对象/格式矩阵 | completed | [`P3`](../tasks/INDEX.md#p3-功能对标) |
| P4 Python 生态 | 受限 Python Worker、Facade、插件合同 | completed | [`P4`](../tasks/INDEX.md#p4-python-生态) |
| P5 发布质量 | 性能、兼容、恢复、许可证、发布包 | completed | [`P5`](../tasks/INDEX.md#p5-发布质量) |
| P6 功能扩展 | 32 个工作台按模块、动作和边界逐步 Web 化 | planned | [`P6`](../tasks/p6/INDEX.md) |
## 队列
共享任务状态在这里维护;P6 模块和动作原子卡状态在分层索引中维护,避免把数百行复制进总计划。每行链接到只包含该任务上下文的任务卡。
| 顺序 | 编号 | 类型 | 前置 | 状态 | 任务卡 |
|---:|---|---|---|---|---|
| 1 | FW-P2-003A-I | probe | FW-P2-002C | completed | [Sketcher 类型注册](../tasks/FW-P2-003A-I.md) |
| 2 | FW-P2-003A-G | contract | FW-P2-003A-I | completed | [创建草图几何](../tasks/FW-P2-003A-G.md) |
| 3 | FW-P2-003A-C | contract | FW-P2-003A-G | completed | [添加一个约束](../tasks/FW-P2-003A-C.md) |
| 4 | FW-P2-003A-X | gate | FW-P2-003A-C | completed | [P2.4 出口](../tasks/FW-P2-003A-X.md) |
| 5 | FW-P3-001A-W | probe | FW-P2-003A-X | completed | [枚举工作台](../tasks/FW-P3-001A-W.md) |
| 6 | FW-P3-001A-O | probe | FW-P3-001A-W | completed | [枚举对象类型](../tasks/FW-P3-001A-O.md) |
| 7 | FW-P3-001A-F | probe | FW-P3-001A-O | completed | [枚举格式与 API](../tasks/FW-P3-001A-F.md) |
| 8 | FW-P3-001B | contract | FW-P3-001A-W + FW-P3-001A-O + FW-P3-001A-F | completed | [生成对标矩阵](../tasks/FW-P3-001B.md) |
| 9 | FW-P3-001G | gate | FW-P3-001B | completed | [P3 出口](../tasks/FW-P3-001G.md) |
| 10 | FW-P4-001-R | contract | FW-P3-001G | completed | [Python runtime 启动](../tasks/FW-P4-001-R.md) |
| 11 | FW-P4-002-F | contract | FW-P4-001-R | completed | [Python Facade API](../tasks/FW-P4-002-F.md) |
| 12 | FW-P4-003-S | contract | FW-P4-002-F | completed | [脚本隔离](../tasks/FW-P4-003-S.md) |
| 13 | FW-P4-004-W | contract | FW-P4-003-S | completed | [工作台静态注册](../tasks/FW-P4-004-W.md) |
| 14 | FW-P4-005-P | contract | FW-P4-004-W | completed | [插件包格式](../tasks/FW-P4-005-P.md) |
| 15 | FW-P4-006-G | gate | FW-P4-005-P | completed | [P4 出口](../tasks/FW-P4-006-G.md) |
| 16 | FW-P5-001A-F | contract | FW-P4-006-G | completed | [锁定性能样例与测量环境](../tasks/FW-P5-001A-F.md) |
| 17 | FW-P5-001A-D | contract | FW-P5-001A-F | completed | [桌面性能回放](../tasks/FW-P5-001A-D.md) |
| 18 | FW-P5-001A-M | contract | FW-P5-001A-D | completed | [移动性能回放](../tasks/FW-P5-001A-M.md) |
| 19 | FW-P5-001A-R | contract | FW-P5-001A-M | completed | [性能预算报告](../tasks/FW-P5-001A-R.md) |
| 20 | FW-P5-002A-M | contract | FW-P5-001A-R | completed | [锁定浏览器支持矩阵](../tasks/FW-P5-002A-M.md) |
| 21 | FW-P5-002A-D | contract | FW-P5-002A-M | completed | [桌面浏览器回放](../tasks/FW-P5-002A-D.md) |
| 22 | FW-P5-002A-MO | contract | FW-P5-002A-D | completed | [移动浏览器回放](../tasks/FW-P5-002A-MO.md) |
| 23 | FW-P5-002A-R | contract | FW-P5-002A-MO | completed | [浏览器兼容报告](../tasks/FW-P5-002A-R.md) |
| 24 | FW-P5-003A-I | contract | FW-P5-002A-R | completed | [建立可注入中断点](../tasks/FW-P5-003A-I.md) |
| 25 | FW-P5-003A-B | contract | FW-P5-003A-I | completed | [覆盖保存边界中断](../tasks/FW-P5-003A-B.md) |
| 26 | FW-P5-003A-V | contract | FW-P5-003A-B | completed | [验证恢复与文件完整性](../tasks/FW-P5-003A-V.md) |
| 27 | FW-P5-003A-R | contract | FW-P5-003A-V | completed | [断电恢复报告](../tasks/FW-P5-003A-R.md) |
| 28 | FW-P5-004A-E | probe | FW-P5-003A-R | completed | [收集依赖许可证证据](../tasks/FW-P5-004A-E.md) |
| 29 | FW-P5-004A-C | probe | FW-P5-004A-E | completed | [建立产物到依赖映射](../tasks/FW-P5-004A-C.md) |
| 30 | FW-P5-004A-N | contract | FW-P5-004A-C | completed | [生成许可证通知](../tasks/FW-P5-004A-N.md) |
| 31 | FW-P5-005A-P | contract | FW-P5-004A-N | completed | [组装离线发布目录](../tasks/FW-P5-005A-P.md) |
| 32 | FW-P5-005A-S | contract | FW-P5-005A-P | completed | [校验离线静态完整性](../tasks/FW-P5-005A-S.md) |
| 33 | FW-P5-005A-F | contract | FW-P5-005A-S | completed | [执行离线功能回放](../tasks/FW-P5-005A-F.md) |
| 34 | FW-P5-005A-R | contract | FW-P5-005A-F | completed | [离线包可重建报告](../tasks/FW-P5-005A-R.md) |
| 35 | FW-P5-006A-S | contract | FW-P5-005A-R | completed | [验证成功升级路径](../tasks/FW-P5-006A-S.md) |
| 36 | FW-P5-006A-I | contract | FW-P5-006A-S | completed | [验证版本不兼容回滚](../tasks/FW-P5-006A-I.md) |
| 37 | FW-P5-006A-C | contract | FW-P5-006A-I | completed | [验证损坏包回滚](../tasks/FW-P5-006A-C.md) |
| 38 | FW-P5-006A-R | contract | FW-P5-006A-C | completed | [升级回滚报告](../tasks/FW-P5-006A-R.md) |
| 39 | FW-P5-007-G | gate | FW-P5-006A-R | completed | [P5 发布出口](../tasks/FW-P5-007-G.md) |
| 40 | FW-P6-000 | probe | FW-P5-007-G | completed | [锁定 P6 基线](../tasks/FW-P6-000.md) |
| 41 | FW-P6-001 | contract | FW-P6-000 | completed | [模块加载与类型注册](../tasks/FW-P6-001.md) |
| 42 | FW-P6-002 | contract | FW-P6-001 | completed | [Worker/Facade envelope](../tasks/FW-P6-002.md) |
| 43 | FW-P6-003 | contract | FW-P6-002 | completed | [Chrome 回放 harness](../tasks/FW-P6-003.md) |
## 领取方式
1. 读取当前任务卡和它列出的直接前置证据。
2. 只执行该卡中的命令;需要新命令时先写回任务卡。
3. 通过后更新任务卡、队列状态和进度文件,再领取下一行。
4. 中断时只需保存任务卡中的恢复点,不重读历史归档。
历史执行计划:`../archive/FREECAD_WEB_EXECUTION_PLAN.md`;已拆分旧卡:`../archive/tasks/`。
P6 领取规则:先顺序完成 `FW-P6-000` 至 `FW-P6-003`,再领取一个工作台包的活动卡;活动卡通过 `prepare_full_parity_module_batch.py` 按功能模块批量处理多个记录,不按单 API 停顿。纯函数/只读批次默认 24 条,对象契约默认 16 条,最多 32 条;工作台子队列和动作级卡按 `p6/INDEX.md` 维护。