V1 验证指标把失败会话按 acc=0 计入
值得精读。这是一个“小 diff、大语义”的指标修正:104 行改动里的核心只有三处(期望计数采集、源级 opt-in 补齐、None/has_pred 安全化),但直接改变了 Trainer V1 验证主指标的语义,阅读时建议重点看 `metric_utils.py` 的 `expected_acc_counts` 块与 `has_pred` 的判定条件,以及 `trainer_base.py` 中 `(str(data_source), str(uid))` 键的构造是否与指标侧分组严格对齐。建议配套动作:在监控中同时画 `acc` 与 `acc_success_only`,把两者差值作为失败率诊断;为 `_validate → _val_metrics_update` 补一个 CPU 级端到端单测(覆盖 `__rollout_n__` 缺省回退与键一致性);明确 `pred` 是否也应随 `acc` 补齐,避免 `maj` 指标与 `mean` 基数不一致。