# Diagnosis 信息增益停止契约 Brief ## 背景 - 用户目标:未知问题、空证据或缺少查询条件时,Diagnosis 能以正常业务 Fallback 结束,而不是空转到预算耗尽或 `INTERNAL_FAILURE`。 - 当前问题:停止主要依赖模型自觉结束或硬预算;缺少信息增益回传、确定性饱和停止、协议修复反馈和统一 Release。 - 关联 OpenSpec:`openspec/changes/diagnosis-information-gain-stop-contract/`(归档后见 `openspec/changes/archive/2026-07-27-diagnosis-information-gain-stop-contract/`) - 关联 Issue:ISS-016(承接 ISS-015 阶段 1 硬停止) - devflow 分档:complex - 接口影响:L3(模型可见 Tool Envelope 有意变更;公开 HTTP/SSE 与业务 Tool backend 不变) ## 范围 ### 本次要做 - Run 内二值信息增益 `GAINED / NO_GAIN`、连续无增益阈值与 `COLLECTING / SATURATED`。 - 服务端注册的 Tool Call Envelope:`previous_observation + input`。 - 确定性 `NO_GAIN`(`NO_EVIDENCE`、重复 `tool_name + normalized_scope`)。 - 一次 `STOP_REQUIRED` 收尾机会与受控停止异常。 - Canonical 控制视图 / 模型白名单观察双视图;RAG 保留 `relevance_level`。 - Tool loop 结束时一次性投影 `ProgressSnapshot`。 - `DiagnosisReleaseUseCase` 统一有结论、无结论、信息饱和、预算终止、协议违规停止的发布。 - 可修正 `INVALID_PROGRESS_PROTOCOL` observation,以及独立 `PROGRESS_PROTOCOL_VIOLATED` 兜底停止。 - 模型 Token 组件/轮次审计与 `TOOL_REQUEST_REJECTED` 安全 Trace。 - Prompt、配置、focused/回归测试与真实 named SSE E2E。 ### 本次不做 - `new_count`、`next_action`、多级质量分数、独立 Judge。 - 自然语言语义去重。 - 第二套诊断生命周期状态。 - 公开 HTTP/SSE 字段或前端进度协议新增。 - ISS-015 Reasoning 原文审计治理与 Evidence Repair Schema 注入。 ### 影响区域 - `harness.progress`、`HarnessToolInterceptor`、`HarnessEvidenceTools` - `DiagnosisAgentUseCase` / Prompt / Release / Application 预算兜底迁移 - Trace 审计、配置绑定、ISS-015/016 与架构文档 ## OpenSpec 对齐 - proposal 覆盖状态:已覆盖 - specs 覆盖状态:已覆盖(6 个 capability delta,已同步 main specs) - tasks 覆盖状态:已覆盖(37/37 完成)