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.
2.7 KiB
2.7 KiB
Diagnosis 信息增益停止契约 Evidence
证据
| 来源 | 证据 | 结论 | 是否已汇报 |
|---|---|---|---|
HarnessEvidenceTools / request records |
Agent-facing Tool 直接使用业务 request 生成 Schema | 要增加 previous_observation + input 必须显式演进 Tool Schema |
是 |
HarnessToolInterceptor |
曾把完整 agentResult 放入 Tool Response |
必须拆分控制视图与模型观察 | 是 |
RunContext / DiagnosisHarnessCore.startRun |
结构不可变 + 线程安全 handle | 进展 tracker 放 RunContext,不扩 Redis 枚举 | 是 |
CanonicalInvocationStore |
仅 begin/find/markReady/markError | tracker 只存 identity,结束时投影 | 是 |
RagResultProjector |
只按 evidence 空否生成状态 | 需兼容 relevanceLevel/relevance_level |
是 |
DiagnosisReleaseUseCase / EvidenceGuard |
强制 draft 非空且空 analysis=ANALYSIS_MISSING |
与合法无结论冲突,需统一 Release | 是 |
ChatApplicationUseCase.recoverBudgetExhaustion |
未提交预算 Fallback 绕过 Release | 迁移意图到 Diagnosis Release | 是 |
前端 app.js |
已渲染 observed_facts/sources/limitations/next_steps | 不新增公开 SSE 字段 | 是 |
| 真实 E2E(实施前) | 多轮空转后 BUDGET_EXHAUSTED/INTERNAL_FAILURE |
需要信息增益停止契约 | 是 |
| 真实 E2E(实施后) | iss016-final-20260726-a → MISSING_REQUIRED_CONTEXT FALLBACK |
未知 Query 可正常业务结束 | 是 |
| Token/拒绝审计 E2E | 9 次 INVALID_PROGRESS_PROTOCOL 拒绝不累计 NO_GAIN |
需独立协议错误阈值与 STOP | 是 |
Evidence-driven 结论
-
结论:Tool Envelope 是 L3 模型侧协议变更,业务 request 在 interceptor 解包后保持不变。
- 证据:三个 FunctionToolCallback inputType、adapter bridge 只收业务 JSON。
- 风险:框架 Schema/拦截器假设不匹配。
- 用户确认:不需要(技术事实)
-
结论:协议错误不得累计为
NO_GAIN,必须独立PROGRESS_PROTOCOL_VIOLATED。- 证据:真实审计 9 次协议拒绝 + 13 Agent 轮次;OpenSpec design 6.1。
- 风险:只返回通用错误码不足以自修复。
- 用户确认:已通过 Task 8 OpenSpec 与实现收口
-
结论:Release 是业务 Fallback 唯一决策入口;Application 不重建业务内容。
- 证据:
DiagnosisReleaseUseCase统一路径 + Application 窄化预算终态持久化。 - 用户确认:已确认
- 证据:
实现期补充证据
- Draft 合同失败窄化降级:非法 Draft 丢弃;仅当 ProgressSnapshot 有已验真 facts 时发
INSUFFICIENT_EVIDENCE。 - Task 8 focused tests:tracker / interceptor / release / agent-loop / config 全部通过。