# ADR-012:逐条结果状态与仲裁结论分离 ## 状态 已接受 ## 决策 - `TestResult.execution_status` 只取 `completed` 或 `error`,表示模型与裁判调用是否正常完成。 - `TestResult.verdict` 可为空;自动仲裁时取 `pass`、`fail`、`needs_human_review` 或 `judge_format_error`,未仲裁和执行错误时为空。 - Run 使用 `completed_count` 与 `error_count` 统计执行进度;`verdict=fail` 不是执行错误。 - `(run_id, execution_id)` 使用数据库唯一约束,禁止同一运行的同一执行实例出现多条当前状态。 - 报告和按交互模式统计分别展示执行状态与仲裁结论,不再使用一个 `status` 字段混合两个维度。 ## 迁移 - 历史 `status=error` 映射为 `execution_status=error, verdict=NULL`。 - 历史 `status=completed` 映射为 `execution_status=completed, verdict=NULL`。 - 历史 `pass`、`fail`、`needs_human_review`、`judge_format_error` 映射为 `execution_status=completed` 与同名 `verdict`。 - 历史 Run 的 `failed_count` 原样迁移为语义明确的 `error_count`。 ## 边界 本模型保存每个执行实例的当前结果,不保存状态变更历史;需要逐次重跑审计时再增加独立 attempt 表,当前不为未提出的历史查询引入该结构。