62 lines
4.6 KiB
Markdown
62 lines
4.6 KiB
Markdown
# FreeCAD Web 完整对标路线
|
||
|
||
## 目标
|
||
|
||
目标是让 React + Worker + WASM 版本在用户可观察行为上对标当前 checkout 的 FreeCAD:文档、对象、重算、文件格式、Python、工作台、命令、选择、视图、属性、事务、恢复、扩展和质量边界都必须由源码证据驱动。现有 P6 `completed` 只表示各模块声明动作的切片 gate 通过,不能解释为完整软件已经 1:1 完成。
|
||
|
||
## 当前基线
|
||
|
||
详细数字由 `docs/p6/full-parity-audit.json` 生成:
|
||
|
||
- 32 个源码模块;24 个带 App;22 个带 GUI;1 个 GUI-only;7 个无 App/GUI。
|
||
- 403 个已盘点 DocumentObject 类型,分布在 18 个模块。
|
||
- 236 条格式记录,21 个唯一扩展名。
|
||
- 13,385 条 Python API 记录,分布在 29 个模块。
|
||
- Web 当前 70 个 HTML 入口、65 个 Worker、101 个 Facade、44 个 native probe 源文件。
|
||
- 当前 P6 ledger 为 32 个模块 `completed`,但各 gate 保留了代表 fixture、GUI、任意图、跨版本、完整格式/API 等边界。
|
||
|
||
## 连续执行队列
|
||
|
||
### 高吞吐批次策略
|
||
|
||
原子卡仍是账本和依赖边界,但实现不再按单 API 停顿。每个活动卡先由
|
||
`tools/prepare_full_parity_module_batch.py` 选择同一 `module+tier+family` 的
|
||
4-32 条 unresolved records,生成紧凑批次清单;一个 native adapter、一个
|
||
`fc_web_dispatch_json` command、一个 Facade/Worker 分支和一个主证据 JSON
|
||
贯通整批。批次内共享模块初始化、Document fixture、参数/返回 schema、错误/取消、
|
||
资源释放和构建;逐条记录仍独立保存结果与 hash。批次完成后统一更新 disposition
|
||
并重新聚合 Full Parity,任何未实现记录继续使 Y 保持 `pending`。
|
||
|
||
| 顺序 | 任务 | 交付物 | 前置 |
|
||
|---|---|---|---|
|
||
| 1 | `FW-P6-FPA-A` 全面对标审计 | 审计 JSON/Markdown,冻结差距清单 | P6 baseline |
|
||
| 2 | `FW-P6-FPA-B` 核心应用壳层 | React 工作区、Document actor、命令/错误/取消合同 | A |
|
||
| 3 | `FW-P6-FPA-C` Document/FCStd/事务 | 多对象文档、属性、树、FCStd、Undo/Redo、恢复 | B |
|
||
| 4 | `FW-P6-FPA-D1..D5` 403 对象类型扩展 | 按 5 个 adapter family 完成每个适用对象的 native contract matrix | C |
|
||
| 5 | `FW-P6-FPA-E` 236 格式记录扩展 | 每个适用格式的 import/export/recovery matrix | C |
|
||
| 6 | `FW-P6-FPA-F` 13,385 Python API 扩展 | 按 module+tier+family 批量分类、binding、权限和可回放测试 | C |
|
||
| 7 | `FW-P6-FPA-G` 工作台/GUI 命令对标 | 32 模块、22 GUI 模块的命令/任务面板/资源映射 | B,C,D |
|
||
| 8 | `FW-P6-FPA-H` 视图与用户交互 | Three.js 选择、相机、属性编辑、导航、快捷键、响应式布局 | B,C,G |
|
||
| 9 | `FW-P6-FPA-I` 质量与发布 | Chrome 固定 gate、性能、内存、无障碍、安全、兼容性 | D,E,F,G,H |
|
||
| 10 | `FW-P6-FPA-Y` 完整对标出口 | 只有所有差距关闭或显式批准边界后才可通过 | D,E,F,G,H,I |
|
||
|
||
每张卡只关闭一个可验收合同,但合同内部允许一次关闭多个同 family unresolved records。D 是编排父卡,D1..D5 是五个 family 叶子卡。若卡内发现范围过大,先缩小批次或拆成同目录叶子卡;不得用静态 JSON、JavaScript 几何或“有源码”替代 native 行为。完成后严格执行 `rotate_web_task_context.py`、`sync_web_task_state.py`、`validate_web_context.py`、`prepare_web_task_context.py`,再生成下一批并继续。
|
||
|
||
## 完成判据
|
||
|
||
Full Parity Y 不能只检查模块状态。它必须同时证明:
|
||
|
||
1. 403/403 对象类型都有源码入口、适用动作、属性/依赖和结果证据;不适用项有可复核原因。
|
||
2. 236/236 格式记录都有 native handler、错误/恢复和浏览器可回放结论;格式限制不得隐藏在前端。
|
||
3. 13,385 API 都被分类为已暴露、受限、不可移植或明确未实现,并有生成来源和权限策略。
|
||
4. Document actor 支持多对象图、属性/链接、重算、事务、Undo/Redo、取消、错误恢复和 FCStd 语义 round-trip。
|
||
5. GUI 工作台的命令、任务面板、树/属性/选择/相机/视图状态在 React/Three.js 中有对应合同;GUI-only 依赖必须显示为正式边界。
|
||
6. Chrome 质量 gate 记录网络、异常、截图、性能、内存释放、响应式布局和可访问性结果。
|
||
|
||
## 上下文纪律
|
||
|
||
- 每张卡独立 manifest;只加载 handoff、当前卡、直接前置和小型证据 JSON。
|
||
- inventory、源码树、原始日志和大截图永不进入启动上下文,只保存路径、摘要和 hash。
|
||
- 任何超时先保存首个错误摘要,轮换上下文后只重试一次。
|
||
- 队列只保持一个 `in_progress`;没有证据的能力保持 `planned` 或 `blocked`。
|