Skip to content

[Bug] verification 已成功仍被 completion gate 判定 unverified_write,导致 final interception 空转 #467

@Cai-Tang-www

Description

@Cai-Tang-www

类型

  • Bug
  • Runtime / Completion Gate / Facts Enrichment

背景

在任务已完成、并且已经执行验证命令成功的场景下,系统没有收敛结束,而是反复进入:

  • assistant 输出“任务完成”
  • system 注入 Completion is blocked by unverified writes...
  • 再次循环输出

问题现象

  • 会话在“完成后”继续空转多轮(无实质工具执行推进)。
  • final acceptance 未能按预期收口,用户体验表现为“被憋回去但仍一直输出”。

期望行为

  • 一旦“写入已被验证成功”,completion gate 不应再命中 unverified_write
  • final interception 在无新增未验证写入时应允许收敛,不应空转。

复现线索(来自实际会话)

  • assistant 调用 bash,参数带 verification=true,测试命令成功(exit code = 0)。
  • 随后调用 todo_write complete
  • completion gate 仍持续给出 unverified_write,进入多轮重复拦截。

根因分析

  1. todo_write 在权限映射中属于 ActionTypeWrite
  2. facts 补齐逻辑把 ActionTypeWrite 默认都视为 workspace_write=true
  3. 因此即便验证已成功,后续 todo_write 也会再次把“未验证写入”置回 true。
  4. completion gate 于是持续阻塞,形成空转。

影响范围

  • 所有“先验证、后 todo_write 更新状态”的常见执行链路。
  • 与模型厂商无关,属于 runtime/facts 层逻辑问题。

解决方案

  1. 收紧默认 workspace_write 判定:
    • 仅对真实文件写工具标记 workspace_write=truefilesystem_write_filefilesystem_edit)。
    • 不再对所有 ActionTypeWrite 一刀切。
  2. 增加回归测试:
    • todo_write 不应触发 workspace_write
    • 文件写工具仍应触发 workspace_write
    • 验证成功后 completion 状态应可清除 unverified_write

变更文件

  • internal/tools/facts.go
  • internal/tools/facts_test.go

验收标准

  • 同类任务场景下,不再出现“完成后多轮空转”。
  • 存在真实未验证文件写入时仍会正确拦截。
  • todo_write 状态更新不再污染写入验证状态。
  • 相关单测全部通过。

测试建议

  • go test ./internal/tools -run "TestEnrichToolResultFactsDefaultsFromAction|TestEnrichToolResultFactsIgnoresUntrustedMetadata|TestEnrichToolResultFactsRespectsTrustedFacts"
  • go test ./internal/runtime -run "TestApplyToolExecutionCompletionTracksWriteAndVerification|TestApplyToolExecutionCompletionClearsWhenVerifyAfterWrite"

风险与回滚

  • 风险:若未来新增文件写工具但未纳入白名单,可能漏标 workspace_write
  • 缓解:新增写工具时同步补 facts 判定与测试。
  • 回滚:可回滚上述两个文件变更(不涉及数据迁移)。

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions