# 2026-09-27：评分启动故障后的训练恢复约定

在正式模型终评之前修订。原 `EVALUATION_PROTOCOL_20260927.md` 的任务/种子/80步终点/比较/评测分母不变，原readiness和所有原始记录不改。

## 触发与旧run状态

原O42第40次调用已消费18条有reward0但无native report的轨迹；消费键在归档中均唯一。此前第5次也消费过1条同类记录，其保存外层测试日志显示目标4测试通过。采样版本37/38共36条缺报告零奖励，主要是评分器依赖下载失败。不能以累计约0.7%替代按批次检查，也不能把外层日志回放冒充原报告。

22:41以精确driver身份发出TERM，保留ckpt30/40和HF10/20/30/40；40次训练调用完成，第41次未记录完成。原O42仅保留为故障/诊断记录，不能作为本轮严格匹配主比较的O终点。不从这些检查点恢复主比较；修复后的O42从同一原始基座重新开始，仍固定80次调用。

## 统一的新训练口径

1. 所有后继O/B/M/E共用同一149题、2384别名、dev39及原超参数/14卡布局。改变只限于评分启动可靠性和不可验证奖励的准入。
2. 原生解析/评分仍为固定SWE-bench4.0.3源码闭包；保留官方标签和原生ERROR/XFAIL/缺测试语义。离线评分器先保存测试输出，报告/观测/完成记录齐全后才写奖励。
3. 声称来自verifier的数值奖励必须有匹配的native report、观测、完成记录和来源。缺失/不一致作为未判分，沿用有限重试与现有屏蔽逻辑，不能凭stdout存在补0。
4. **语义变化明确列出**：移除旧“RewardFileNotFoundError且有stdout就判0”的推断。没有完整判分的项目安装/构建失败也不自动判为模型0，可能减少训练中的负反馈、改变重试/屏蔽率；各臂须报告这些比例和实际生成/verifier成本。正式评测中的无效模型产物/具名模型失败规则仍按原协议单独执行。
5. 既有明确的模型上下文/格式规则保留。agent超时但有完整有效判分仍照判；超时且判分无效保持原不重采样、屏蔽行为。有效native0不能因其他I/O问题被重采样成更好的结局。
6. 新run、新profile、新隔离runtime及新release分别留证据。旧O、原CPU队列、运行中batch13及原终评消费者不热改。不自动重启被外部停止的任务。

## 放行前必备

- 离线原生闭包的保存日志等价、实容器gold/empty、失败无伪奖励检查与假设审查；训练149全部profile/别名成员、官方config/patch/测试命令、镜像/资源保持。
- 新奖励准入单测覆盖真实有效0/1、真实缺报告0、损坏/不匹配产物、重试状态隔离及agent超时分支。
- 两机源/数据与实际模块导入预检，旧driver/沙箱退出与14卡资源检查，新的证据绑定release；不得复用旧ready=true。
- 启动后首3次调用检查真实判分准入/屏蔽/梯度/实际参数改变，保留持续监督与SwanLab。训练/主比较效果仍未测。

控制工具另有已观察到的运行时问题：训练venv没有os.pidfd_open；容器系统Python3.10具备pidfd API。后继的标准库inspect/signal控制操作使用系统Python，执行训练/Harbor仍用原venv。原监控/队列脚本不原地改写。
