类型
- 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,进入多轮重复拦截。
根因分析
todo_write 在权限映射中属于 ActionTypeWrite。
- facts 补齐逻辑把
ActionTypeWrite 默认都视为 workspace_write=true。
- 因此即便验证已成功,后续
todo_write 也会再次把“未验证写入”置回 true。
- completion gate 于是持续阻塞,形成空转。
影响范围
- 所有“先验证、后 todo_write 更新状态”的常见执行链路。
- 与模型厂商无关,属于 runtime/facts 层逻辑问题。
解决方案
- 收紧默认
workspace_write 判定:
- 仅对真实文件写工具标记
workspace_write=true(filesystem_write_file、filesystem_edit)。
- 不再对所有
ActionTypeWrite 一刀切。
- 增加回归测试:
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 判定与测试。
- 回滚:可回滚上述两个文件变更(不涉及数据迁移)。
类型
背景
在任务已完成、并且已经执行验证命令成功的场景下,系统没有收敛结束,而是反复进入:
Completion is blocked by unverified writes...问题现象
final acceptance未能按预期收口,用户体验表现为“被憋回去但仍一直输出”。期望行为
unverified_write。复现线索(来自实际会话)
bash,参数带verification=true,测试命令成功(exit code = 0)。todo_write complete。unverified_write,进入多轮重复拦截。根因分析
todo_write在权限映射中属于ActionTypeWrite。ActionTypeWrite默认都视为workspace_write=true。todo_write也会再次把“未验证写入”置回 true。影响范围
解决方案
workspace_write判定:workspace_write=true(filesystem_write_file、filesystem_edit)。ActionTypeWrite一刀切。todo_write不应触发workspace_write。workspace_write。unverified_write。变更文件
internal/tools/facts.gointernal/tools/facts_test.go验收标准
todo_write状态更新不再污染写入验证状态。测试建议
go test ./internal/tools -run "TestEnrichToolResultFactsDefaultsFromAction|TestEnrichToolResultFactsIgnoresUntrustedMetadata|TestEnrichToolResultFactsRespectsTrustedFacts"go test ./internal/runtime -run "TestApplyToolExecutionCompletionTracksWriteAndVerification|TestApplyToolExecutionCompletionClearsWhenVerifyAfterWrite"风险与回滚
workspace_write。