# v3.1 调度与证据契约

本文规定每轮必须实现并验证的控制器行为；文档、JSON模板和状态名称不证明runner、原生拦截器、原子账本或媒体审阅能力已存在。`dispatchEnabled=false`是模板默认值。不得据本文重启封存的v3.0。

## 0. 执行模式必须先冻结

- `agent_native`：被测模型在原生入口实际提交；宿主拦截/许可/日志/审阅辅助不能替代被测动作证据。
- `host_controlled_repair`：被测模型只规划与生成结构化请求，宿主按日志执行。必须配`evaluationProfile=live_diagnostic`；保留26组/120项分母，未测原生行为的断言BLOCKED，不能以宿主成功替代Agent能力。
- 每个任务卡、checkpoint、请求、回执、审计及报告均携带两个字段。批次开跑前冻结，不在运行中切换后混算；变更需新run/变更清单。
- host模式明确禁止被测Agent付费调用，记录执行隔离及其验证；未能证明原生阻断时写unavailable。宿主仅执行本组模型输出的批准请求，不代写语义prompt。冻结字段的确定性补全有差异日志，内容改写单列assistance。
- 计划由被测模型负责；提交/回执/轮询由宿主负责；独立评审仍负责质量批准。账本记录plannedBy、submittedBy、planSha256、executedRequestSha256、assistance，不混淆责任。

## 1. 正式计分前的公共准备

协调器写readiness.json；每项记录status、observedAtUtc、environmentId、evidencePath、sha256、affectedCases，不能只写true。状态READY/BLOCKED/UNKNOWN；更换账号、镜像、schema或素材字节应重新核验。公共准备、共享回归、协调器、评审和被测模型分别记Token/时间/费用；未采集的控制器成本为null，不是0。模型执行中自己的冗余读取和错误调用仍计入其用量。

| 检查 | 最小证据 | 责任与影响 |
|---|---|---|
| Agent/模型/凭据/工具 | 实际配置回执、原生只读调用成功、凭据表示与已验证连接一致；provider未暴露仍null | 环境；不输出凭据，不记模型失败 |
| Skill与公共回归 | 每环境独立采集、宿主计算hash；每唯一hash跑一次回归 | 协调器；不让模型手填预期hash |
| 依赖和网络 | Python/Pillow实际import；ffmpeg/ffprobe实际解码；所需素材域真实GET成功 | 环境；先统一镜像/网络，再冻结，修复不改Skill |
| 商品输入 | 同一不可变P1/P2、FACTS、AD10/文案，hash、授权、解码及无人脸证据 | fixture；不借用其他模型产物 |
| 媒体参数 | 当前账户精确模型/schema，含双帧、480P、5s、音频和隐私 | 环境；不增加隐藏生成探针 |
| 分析真值 | 私有真值包：V1 hash、至少3事件/时间、语音逐字稿/不确定段、字幕/音乐区分、片段偏移、独立审阅回执 | fixture；缺失不派T01/T02 LIVE |
| 内容验收 | 实际查看完整图/视频和听音的能力、rubric及覆盖记录 | 协调器；ffprobe/静帧不代替内容验证 |
| 提交日志和预算 | 宿主网络发送前及回执后持久化、并发预占验证、模拟断线恢复记录 | harness；不能仅凭模型intent宣称可靠幂等 |
| 原生负例拦截 | 原生工具入口参数/次数可见，并能在网络前阻断 | harness；普通Python Mock不能代替 |

`profile=full_26`仅适用于agent_native，须全部必需检查READY后统一开跑。缺原生拦截器可预先选择`live_diagnostic`测就绪LIVE分支，但固定26/120分母及相关BLOCKED保留，不称完整评估。缺分析真值只阻塞T分支，不阻塞就绪B/U；不得临时换profile回填成绩。

V1真值只给评审，不把答案注入被测模型。24秒原片若无满足要求的清晰语音，则保留fixture缺口；选择其他已授权片段须新fixtureId并在开跑前冻结，不能事后把“有音轨”降低成口播通过。

## 2. 输入包与会话交接

每模型独立input-pack包含当前任务卡、必要Skill引用路径、相关schema、素材/FACTS/批准文案、quota/permit、固定断言ID。整份规范/120项目录可查，不每轮重贴。公共schema已冻结时读所需字段一次，有版本/权限矛盾再核验。不得从摘要中隐藏关键工具语义。

任务卡必须显式列executionMode和evaluationProfile；host模式EXECUTE_ITEM由宿主执行，模型仅返回批准项目的结构化请求，不直接提交。任务卡默认≤4000 Unicode字符（不是Token上界）；长工具返回和文档落文件，正文回必要摘要/路径/hash。宿主若支持工具输出引用/折叠，应保留完整原始日志并对所有模型一致启用；不支持则标unavailable。只缩短用户提示词不能消除完整原生schema和系统前缀开销。

01共享回归由协调器完成；AGENT负例按固定场景独立上下文、无付费授权、每场景至多2回合，其总输入+输出仍归01统一400k预算。取消原“01全阶段2回合”与多个隔离场景的冲突。02–06各一工作流SID，恢复原SID；Agent内串行、跨Agent并行。

checkpoint.json仅含本组事实：runId/agentId/step/sessionId、phase、completedArtifactRefs、pendingTaskIds、unresolvedIntentIds、nextAction、blockedBy、selfAssessmentRef。模板/汇总器由宿主提供。07读取本组全部工作流索引，不凭旧控制会话历史断言其他SID未执行；外审重建不能充作模型自评。

## 3. 有限阶段、审阅等待与预算

`PREPARE → READY_FOR_REVIEW → EXECUTE_ITEM → WAIT_MEDIA/WAIT_REVIEW → FINALIZE`是调度状态，不是断言成绩。

- PREPARE一次完成Skill要求的计划/请求，齐备即写检查点并返回；不在模型回合内等协调器。
- 宿主审阅按原rubric、批准绑定计划/媒体/hash；未批准停在WAIT_REVIEW，不能自批。
- 每Agent仅一个活跃回合及一个未终态媒体任务；宿主只读观察已知taskId，完成后给原SID增量结果，避免模型聊天轮询。
- 本组QA不阻塞他组；依赖只取真实素材关系。S01白底FAIL不是所有B/U的额外前置条件。
- B两张分镜都通过才B02；U风格/三帧逐个通过才两个相邻帧视频。不能为“出一个视频”放弃质量门禁。
- BLOCKED带唯一阻塞点/证据；无新证据不再次催继续。STEP_COMPLETE不是全轮PASS。

默认保留每工作流1M总Token、60分钟阶段墙钟上限，输入含cache、输出含reasoning，所有续回合累计。默认回合上限由6改为12，容纳UGC逐图审阅/等待返回；这是新版本调度变化，不增加媒体量。01按上文每场景限制，00/07原预算保留。80%提醒、90%停止开始新付费项目，余量用于结果持久化/收口；对新run全部模型一致冻结。预计一次模型调用超过剩余额度时不派发；不可预测则报告真实超限风险与用量。QA等待计入阶段墙钟并单列，不当推理时间。

宿主应在调用/提交边界控制，不能把收到累计usage后的中断当发送前强门禁。已发请求由独立宿主适配器在固定ackDrainSeconds内接收并持久化回执，不新增模型调用或重置额度。窗口后无taskId为UNKNOWN，冻结通道；已有taskId在原观察窗口只读查询。模型中断不证明后台取消。宿主不能将回执与模型中断解耦时，enforcement=unavailable，不能称该问题已修复。

### 3.1 显式取消Token硬上限

当前发起人明确取消Token限制时，仅对明确授权的范围设置`totalTokens:null`。协调器先持久化policy-change记录：人类消息证据/hash、effectiveAtUtc、affectedAgents/stages、旧上限、新值null及其他约束保持不变；没有授权记录时仍使用公共默认值，缺字段、错误值不能自动视为无限。

null表示不使用Token数量/百分比停止模型执行；Token相关80%/90%阈值不适用。它不影响总用量采集，全部input（含cache）、output（含reasoning）、计费和先前超限仍保留，不重置SID累计值。墙钟、回合、无进展恢复、积分/预占、媒体数、QA、隐私与UNKNOWN冻结继续生效，服务上下文/输出上限也未被解除。运行中的覆盖按生效时间分段，不能抹去旧中断或把新条件结果回填旧成绩。

### 3.2 用户退出模型

只有明确的人类退出指令才能设置参与状态`WITHDRAWN_BY_USER`并停止其未来任务派发。记录授权来源/hash、生效时间及被撤销队列项；历史观察、原件、费用、配额使用和未知预占不删除。退出不是任务取消回执；已有taskId可只读查终态，未知提交不重放。其他参与模型的真实独立依赖继续，不自动换模型或把退出组配额转给其他组。

WITHDRAWN_BY_USER不替代原120项断言的PASS/FAIL/PARTIAL/BLOCKED/INCOMPLETE/NOT_RUN/N/A枚举。已有判定不变，剩余项按实际证据保留未跑/未完，并注明user_withdrawal，不归因为能力失败。报告保留原参与模型与退出时间，分别列继续模型的可比较阶段；不能静默移除退出模型来提高总体通过率。

## 4. 宿主提交账本与接口分类

唯一键(runId,agentId,caseId,itemId,attemptId)，clientRequestId首次准备即固定。请求记录、预算预占和状态转换须原子持久化；模型自行写intent仅作辅助。

`PREPARED → SENDING → ACKED(taskId) → SUCCEEDED / FAILED`；发送后没有明确回执为UNKNOWN。仅宿主能证明网络前阻断时才能记NOT_SENT，不能由“无completed SSE”推导未发送。

阶段切换同时核对宿主账本、模型intent/active-task、SSE、只读消息及已知平台任务。任一更晚的SENDING/PENDING/UNKNOWN均冻结对应通道；旧PREPARED不得覆盖新状态。失败和未知占次数及预占，查询不新增生成。生成接口以taskId为接受凭据；同步分析以HTTP/result正文为完成证据，requestId若提供则保存，不要求taskId。分析无Key/JWT部署契约独立验证。

首个400/业务拒绝/鉴权/部署错误记录并冻结复核；网络未知不换ID/阶段重放，仅已验证平台幂等契约允许同ID恢复。未知状态只能通过平台只读映射/审计解除，不能因新run、换Agent或时间流逝归零。5.1节的显式新cohort授权不解除旧未知，只划分一次性的独立测试范围。

## 5. 归因与继续测试

原四层/状态不变，增加正交attribution：primaryOwner（model/environment/harness/skill/downstream_service/fixture/unknown）、contributingOwners、confidence（confirmed/supported_hypothesis/unknown）、evidenceRefs、counterfactualCheck。状态不是责任；证据不足不猜模型内部原因。

旧run封存不覆盖。修复需新runId/parentRunId/change manifest；同组已合格原件可引用sourceRunId/hash/taskId，标repair。失败图不变成批准图；旧未知提交在其恢复范围内继续冻结。原run未超限且可恢复才复用原SID；新环境/新run需要新SID时如实记录，不能伪称原SID恢复。

`repair_delta`只补剩余项，验证修复，不能用于无辅助排名。重新比较须全部模型共同环境就绪，从同一原始P1/P2启动`comparable_baseline`；不混入旧生成图，不提前注入其他模型发现。黄金分镜须全模型开跑前冻结，只能测isolated视频、用剩余额度，不回填整链PASS。

正常11图/4视频/3分析、预留2图/1视频/1分析仍为每模型每重复上限。第一条正常B02视频就是通道检查，不另加烟测视频。定向修复用明确分配的剩余/预留；新轮账本携带旧未知预占，不自动重置用户总额。授权覆盖则不重复询问，不足时先准备可审阅计划再请求缺少部分。

### 5.1 显式授权的新cohort边界

默认延续同一恢复范围，UNKNOWN阻止该范围对应通道继续提交。只有人类明确主动舍弃旧恢复链、授权全体参评模型从同一原始fixtures重新测试，才可设立新的独立cohort。仅“继续”“重启”、新Agent、新run、等待超时或提高预算不构成此边界授权。

协调器在新cohort任何执行操作前一次性写入并冻结`cohort-boundary.json`，包括：

- `decisionId`、`decidedAtUtc`、`decision=ABANDON_OLD_RECOVERY_START_FRESH_COHORT`；明确人类授权的私有证据引用与`authorizationEvidenceSha256`。
- `sourceCohortId/sourceRunIds/abandonedRecoveryScopes`、`newCohortId`、全部参评模型及新执行范围；原始P1/P2、FACTS、文案、规范、executionMode和新计划来源hash。
- 全组共同就绪和同一启动批次记录；所有模型均使用相同原始输入，不能复用旧生成图、旧请求/intent、旧批准或旧恢复进度。
- `inheritedUnknowns`与对应旧`recoveryScope`、历史已知费用/未知null/预占，新费用独立明细及共享授权账本的累计规则。

旧未知记录不修改成resolved/NOT_SENT/FAILED/CANCELLED，不清除`active`，不伪造平台取消；它保持`status=UNKNOWN`、`resolution=null`，冻结仍作用于旧`recoveryScope`。允许新范围开始的依据是本次明确的人类范围授权和全组重新比较，不是对旧请求结果的判断。旧恢复链不再派发任何恢复/重放；旧未知后续只读对账有证据时仍应更新费用或状态，保留原始历史。

每个新请求必须追溯到新cohort本组模型独立形成的计划、有效QA和配额；不复制旧未知请求换ID，不把新请求标作旧请求的重试，不用该边界单独补齐旧失败项。该决定必须在全体新cohort开始前统一完成，运行中不得自动切换/反复创建cohort。新cohort中的UNKNOWN仍冻结新范围对应通道，任何后续重划范围都不能从本条自动获得授权。

原始商品相同不意味新旧运行属于同一成绩样本。按cohort分别统计Token/时间/媒体/辅助/成本；旧预占继续进入共享授权总额，新费用另记后汇总。新cohort可比较同条件各模型，不能与旧cohort混排或回填旧通过率。公开规则仅描述所需证据，不授予任何新范围权限。

## 6. 预算扩展与公共模板

公开模板不包含账号、真实授权或已就绪结论。`authorization`中的数值保持null、付费许可false；非授权示例为单次<100、每模型<1000、全局<4000。只有真实用户授权匹配才可写入私有运行配置。后续其他模型数量/任务的评估按各自授权冻结，不继承本站示例的权限。

扩展上限后，历史实扣、未知实扣null及对应预占仍汇总入同一授权账本。确认实扣替换同一请求预占，不能重复计数；未确认的历史估算不能自动释放。扩大积分不扩大11/4/3正常与2/1/1预留数量，不解除旧未知在原recoveryScope的冻结，不允许跨run/Agent重放。许可、额度、原件QA及执行隔离均就绪后，才在对应通道提交。
