3.4 KiB
3.4 KiB
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,保留代表命令和首错,后续可直接据此新增预检规则。