一条评测门禁怎样接住失败:来源、异常和回滚证据的分工 候选模型更新后最危险的门禁不是“测得太严格”而是把没有结果解释成没有问题。容器启动失败、来源缺失与模型答错需要不同处理。如果它们全变成一个空值再被平均函数忽略门禁就会悄悄放行。SWE-bench评测指南提供了运行报告与缓存语义的具体参照Anthropic十月调查则说明评测行动边界也应留下证据。本文不部署门禁而是用一个候选版本检查状态迁移。证据缺失时停在阻断态假设候选C的来源身份完整但测试日志未上传。它应停在blocked等待补证不能因为“暂无失败记录”变成accepted。补齐日志后仍要检查阈值与失败类型再进入人工复核或拒绝。def gate(evidence, outcome): required {input_hash, model_id, test_log, environment} if not required evidence: return blocked if outcome infra_error: return review_infrastructure if outcome task_failed: return rejected if outcome passed: return review_candidate return blocked full {input_hash, model_id, test_log, environment} assert gate(full-{test_log}, passed) blocked assert gate(full, infra_error) review_infrastructure assert gate(full, task_failed) rejected assert gate(full, passed) review_candidate print(missing evidence never becomes automatic acceptance)示例刻意没有自动发布分支。实际批准应绑定确切输入、版本与结果不能把对候选C的批准用在后来替换的D上。回滚也需要明确目标版本与触发条件并保存回滚后的验证记录而不是只把状态字段改回绿色。统计告警负责提示不负责替所有人决策KS检验文档定义的是分布比较。分布显著变化可能是输入业务构成变了也可能是模型输出退化需要进一步调查不显著也不能保证没有重要小群体受损。门禁应保留效应量、切片质量和缺失率而不是单看一个p值。来源核对负责身份与时效数值检查负责实现不变量任务评测负责目标质量权限检查负责可执行范围。把各层角色写清失败后才知道补日志、修环境还是更换模型。重复运行也要新尝试号保留前一次错误避免把重试成功覆盖成“首次通过”。本文状态机是内存夹具没有访问CI、模型服务或生产环境。后续实施还需要并发一致性、持久化、审计与回滚演练不能把四个条件判断称为完整MLOps平台。本地验证上方各 Python 代码块独立保存后在 Python 3.9.6 的临时目录以python3 example.py执行退出码均为 0输出分别为missing evidence never becomes automatic acceptance。数据为文中教学夹具不是模型、GPU或线上性能测量。调查发布10月9日、更正12日其余为持续维护文档。没有生产部署与回滚实测。