feat(harness): complete protocol repair stop and archive ISS-016
Add repairable INVALID_PROGRESS_PROTOCOL observations, independent PROGRESS_PROTOCOL_VIOLATED saturation, and controlled release paths. Archive the OpenSpec change after syncing main specs and devflow.
This commit is contained in:
@@ -581,7 +581,7 @@ Usage 不可用时不写 Token 字段,不把未知值记成零;Run 结束以
|
||||
|
||||
Tool 请求进入 `HarnessToolInterceptor` 后若被进展协议、重复 scope、信息饱和或观察合同门禁拒绝,写入 `TOOL_REQUEST_REJECTED`。事件只含安全 Tool Call ID、Tool name 和稳定错误码,不含业务参数、normalized scope 正文、原始响应或内部异常。实际执行仍只由 `TOOL_INVOCATION` 表达,因此两类数量不能混用。
|
||||
|
||||
真实审计发现:`INVALID_PROGRESS_PROTOCOL` 已可完整观察,但当前不会增加 `NO_GAIN` 或触发信息饱和。连续协议拒绝可能产生高 Token 空转,这属于待确认的停止行为改造,不属于 Token 审计本身。
|
||||
协议拒绝与信息增益相互独立:`INVALID_PROGRESS_PROTOCOL` 不累计 `NO_GAIN`,而是维护连续协议错误计数。未达阈值时返回可修正 observation(`repair_required`、`violation_type`、期望上一轮 Tool Call ID、允许的 `information_gain`);达到 `stop-after-consecutive-progress-protocol-violations`(默认 2)后交付一次 `STOP_REQUIRED/PROGRESS_PROTOCOL_VIOLATED`,继续请求 Tool 走受控停止。`TOOL_REQUEST_REJECTED` 额外记录安全 `violation_type`、`repair_prompt_delivered`、连续协议错误次数和 stop reason。
|
||||
|
||||
## 14. 验收标准
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ Fallback 必须在不暴露 Prompt、原始 Draft、原始 Tool 载荷和内部
|
||||
|
||||
| 阶段 | 状态 | 已完成 | 剩余缺口 |
|
||||
|---|---|---|---|
|
||||
| 阶段 1:Diagnosis Agent 硬停止策略 | 部分完成 | ISS-016 已实现 Tool Scope 归一化与去重、`GAINED/NO_GAIN` 信息增益、连续 `NO_GAIN` 饱和停止、受控 Fallback、回归测试和真实 E2E | 连续 `INVALID_PROGRESS_PROTOCOL` 拒绝不会进入 `NO_GAIN`,仍可能在硬模型/Token 预算前空转 |
|
||||
| 阶段 1:Diagnosis Agent 硬停止策略 | 已完成 | ISS-016 已实现 Tool Scope 归一化与去重、`GAINED/NO_GAIN` 信息增益、连续 `NO_GAIN` 饱和停止、连续协议错误 `PROGRESS_PROTOCOL_VIOLATED` 受控停止、可修正协议 observation、受控 Fallback、回归测试和真实 E2E | 无;阶段 1 停止策略已收口 |
|
||||
| 阶段 2:Evidence Repair Schema | 未完成 | Repair 仍保持无 Tool、有限重试、失败后安全降级;Diagnosis Agent 最终输出已使用真实 `DiagnosisDraft` Schema | Evidence Repair 自身尚未注入真实 `DiagnosisDraft` JSON Schema,仍主要依赖 Prompt 文本约束和严格解析 |
|
||||
| 阶段 3:Reasoning 审计验证与治理 | 部分完成 | V015、独立 `agent_reasoning_audit`、审计 Hook、`reasoning_available=false`、受限查询接口和 `sessionId + runId` 归属校验已实现 | 真实 Provider reasoning metadata 行为、V015 真实迁移验收、访问控制、保留期限和加密要求尚未收敛 |
|
||||
| 阶段 4:Fallback 信息质量与最终 E2E | 大部分完成 | 已实现有界 `observed_facts`、`validation_issues`、证据范围/缺口和差异化 Fallback;已完成 Diagnosis SUCCESS、信息不足 FALLBACK、Trace/Tool/Token 对账 E2E | reasoning unavailable 场景及 Reasoning Audit 跨表精确核验尚未完成;全部失败路径仍需最终综合验收 |
|
||||
@@ -56,12 +56,13 @@ Fallback 必须在不暴露 Prompt、原始 Draft、原始 Tool 载荷和内部
|
||||
|
||||
## 5. 实施阶段
|
||||
|
||||
### 阶段 1:Diagnosis Agent 硬停止策略(部分完成)
|
||||
### 阶段 1:Diagnosis Agent 硬停止策略(已完成)
|
||||
|
||||
- 限制证据收集轮次和重复 `lookup_knowledge`。
|
||||
- 在预算耗尽前向 Agent 注入停止信号并要求输出最终 Draft。
|
||||
- 区分正常 ReAct 轮次、新 Tool Action 和真正的预算耗尽。
|
||||
- 增加重复检索、临界预算和无足够证据时的回归测试。
|
||||
- 连续 `INVALID_PROGRESS_PROTOCOL` 独立计数,达到阈值后以 `PROGRESS_PROTOCOL_VIOLATED` 受控停止。
|
||||
- 增加重复检索、临界预算、协议错误修复/停止和无足够证据时的回归测试。
|
||||
|
||||
### 阶段 2:Evidence Repair Schema(未完成)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# ISS-016 诊断 Agent 缺少基于信息增益的停止契约
|
||||
|
||||
**状态**:已实施;审计发现协议拒绝空转,暂不归档
|
||||
**状态**:已完成(含协议修复反馈与连续协议错误兜底停止);OpenSpec 待用户确认归档
|
||||
**严重程度**:高
|
||||
**发现时间**:2026-07-26
|
||||
**来源**:知识库无直接答案场景的真实 E2E 与停止策略复盘
|
||||
@@ -337,7 +337,7 @@ Prompt 不要求模型输出 `next_action`。模型发起 Tool Call 或输出 Dr
|
||||
- [x] exact `sessionId + runId` Trace 能解释每轮继续或停止的原因,但不泄露 Prompt、内部 thought、原始 Tool 载荷或凭据。
|
||||
- [x] 每个 Provider Usage 可按模型组件和组件轮次审计,Diagnosis Agent Usage 回填 AgentStep,Run 结束显式记录 Token 是否对账。
|
||||
- [x] Harness 拒绝的 Tool 请求与实际 `TOOL_INVOCATION` 分开记录,拒绝 Trace 不包含 Tool 参数或原始响应。
|
||||
- [ ] 连续 `INVALID_PROGRESS_PROTOCOL` 拒绝应在硬模型/Token 预算前确定性停止;当前真实 E2E 仍出现 9 次拒绝和 13 个 Agent 轮次。
|
||||
- [x] 连续 `INVALID_PROGRESS_PROTOCOL` 拒绝在硬模型/Token 预算前确定性停止:未达阈值返回可修正 observation,达到阈值交付一次 `STOP_REQUIRED/PROGRESS_PROTOCOL_VIOLATED`,继续请求 Tool 走受控停止。
|
||||
|
||||
## 9. 已确认的首版边界
|
||||
|
||||
|
||||
Reference in New Issue
Block a user