Files
FreeCADWasmDev/docs/KNOWN_FAILURE_PREVENTION.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

32 lines
3.4 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.
# Known Failure Prevention
本项目把历史失败分成“执行前可判定”和“只能运行后判定”两类。前者必须在
scheduler/CMake/WASM gate 之前拦截,后者只允许一次受控重试并保留原始 evidence。
| 失败模式 | 提前防线 | 结果 |
| --- | --- | --- |
| stale context / batch mismatch | `preflight_current_module_batch.py`、continuation checker、context fingerprint | 不启动代理,先重规划 |
| 旧 gate 硬编码 batch | 当前 manifest 驱动、`batchId`/记录集合校验 | 不重复旧批次 |
| `method_evidence_pending` 被误认为完成 | evidence index v4 仅把 module-batch 记录加入 pending;支持顶层和 `result.records` | 历史 family evidence 不再阻塞新批次 |
| `passed_boundary` 漏记 | 统一终态集合 | 边界记录只处理一次 |
| ESM/CJS worker 错误或旧 `.worker.cjs` 被复用 | `tools/wasm-probe-runtime.mjs` 统一 build/bin 归一、按 size/mtime 刷新 CJS staging,并通过 `locateFile` 指向 staging | 避免 Node loader 失败和陈旧 pthread bootstrap |
| 缺失 OCCT archive | `check_web_link_closure.py` 检查 `-lTK*` 归档 | 链接前失败,不浪费 wasm-ld |
| `FreeCADCoreProbe` 别名错误 | 闭包预检按当前模块解析到主 probe,并记录 requested/resolved target | 不再因通用别名退出 1 |
| `configure`/`configure/bin` 混用 | link preflight 自动归一到含 `build.ninja` 的 build tree | gate/预检不再因目录层级误报 |
| 重复解析大型 build.ninja | `web-link-preflight-cache.json` 按 inode/mtime/size 缓存 | 预检命中缓存 |
| 无关模块长链接 | `build_web_module_artifacts.py` 当前模块主 probe 选择 | 避免跨模块失败 |
| Part WASM heap 越界 | Part generic-object 批次上限 12 | 降低批量 fixture 内存峰值 |
| 搜索参数/无匹配退出 | `fast_source_search.py` 支持 intermixed/额外路径;无匹配按成功探索处理 | 通配路径和空结果不再误判 |
| 仓库级 `rg` 或无 pathspec 的 `git diff/status` | 子回合 PATH 使用 `tools/scheduler-bin/{rg,git}`,目录级搜索退出 64;git 检查必须使用 `-- <current-files>` | 在数十万字符输出进入模型前阻断,避免百万级 input token |
| dry-run JSON 参数不兼容 | `build_web_module_artifacts.py` 兼容 `--dry-run --json` | 预览命令不会因输出格式参数退出 2 |
| continuation checker 参数不兼容 | `check_continuation_state.py` 兼容 `--json`,输出稳定 machine-readable 状态 | 状态检查不会因参数退出 2 |
| 同一命令反复失败 | canonical command 回合计数与重复失败收口 | 下一回合从 checkpoint 恢复 |
| `apply_patch` 校验失败/多操作目标冲突 | scheduler 将 `apply_patch verification failed`、`invalid patch` 和 `multiple operations target` 单独归类;编辑前重新读取当前文件并拆分 patch | 不再把补丁冲突误归为普通失败或重复提交同一补丁 |
| 无 stderr 的 gate/build/orchestration 失败 | scheduler 按命令形态兜底分类到 `failure-patterns.json` | 后续预防动作仍可命中,不再全部落入 `other` |
所有防线都保留真实失败状态;它们只减少重复工作,不把边界改写成通过。
调度器每次落盘失败账本时都会同步更新
`docs/current/failure-patterns.json`。新错误会按已知类别归档;无法匹配的错误进入
`other`,保留代表命令和首错,后续可直接据此新增预检规则。