Skip to content

[business-logic] phantom_verify resets armed verification categories every run with no cross-turn exemption (the backoff word list the first pass described does not exist), so answering the user's follow-up 'did the build pass?' with 'the tests passed' gets flagged as a phantom claim even though the tests really ran last turn (default-off mitigates); permission_deny_streak counts all three denial flavors - policy block, explicit User rejected, and no approval handler - under one prefix, then attributes the streak to the permission mode and suggests switch_mode, steering the agent toward overriding the user's explicit refusals #1478

Description

@topcheer

文件行号

internal/agent/phantom_verify.go L446-454(reset 清空 categoriesRun——agent.go:1281 每轮 run 入口)+ L510-546(detectPhantomClaims 唯一豁免 = categoriesRun 本轮武装,无任何回指前轮的语言豁免)+ L77(tests?\s+pass(ed|es)? 正则)+ L391-411(类别武装);config.go L392-398 + verify.go:514(ClaimsSupervision 默认 false——opt-in);internal/agent/permission_deny_streak.go L54-59(isPermissionDeniedResult 前缀匹配)+ L51-53(注释自认涵盖 "user-rejection / no-handler variants")+ L82/L87("[mode-guard] ... denied by the permission policy. Current permission mode" + "call switch_mode..." 建议);agent_tool.go 三处文案:L38(policy blocked)/L100(User rejected the request)/L111(No approval handler)——三者共用 Permission denied for tool 前缀全计数

问题

案 A(Low·默认关闭,跨轮误报):phantom_verify 把跨轮合法回指真实验证判为幻影

  • 轮 1 跑 go test ./... 全绿 → 轮 2 入口 reset → 用户问"刚才构建没问题吧?" → agent 答 "Yes — the tests passed." → categoriesRun[test]=false → 注入幻影验证警告——同一 session 早前真实执行过的合法引用被干扰
  • 复核加重一项 + 降级一项:初审所述 "earlier/already/previously 退避词表" 根本不存在(grep 零匹配——初审虚构的缓解项,实际比描述更糟);但复核降级 Low——ClaimsSupervision 默认关闭(opt-in)、advisory max 2/run、"重跑验证"建议本身无害仅浪费一次迭代
    :跨轮豁免(session 级而非 run 级类别武装)或加真实回指词表。

案 B(Low-Med,归因混淆·方向性建议错误):permission_deny_streak 把用户主动拒绝归因为权限模式策略——建议 switch_mode 接近诱导绕过用户意愿

  • 三种拒绝(策略拦截/用户拒绝/无审批句柄)共用前缀全计数 streak=3 → 注入 "denied by the permission policy. Current permission mode" + "If this mode is not what you intend, call switch_mode"——用户明确说"不"后被归因为模式问题,switch_mode 不会改变用户拒绝、反而可能诱导 agent 切更宽松模式绕过用户判断
  • 正确方向:用户拒绝应询问意图/换方案(:87 兜底句部分正确:"stop repeating the denied operation and choose an allowed alternative");策略拦截才该建议换模式
  • 触发:auto 模式下用户连续 3 次点拒绝(Ask→Deny)——训练/纠偏 agent 的正常交互
    :按文案区分拒绝来源(User rejected 不计入 streak 或注入不同 guidance)。

干净项与附注

plan_abandon_detect 无立案疑点(触发守卫完备:完成声明+≥3 步+类别级零证据三重门;#490 保守语义为文档化取舍;FilesEdited 覆盖 edit/write/multi_edit)。plan_drift:接线/阈值/一次性消费/与 goal_drift 分工全对(workCorpus 含 textBuf 的文本启发式为 charter 允许的漏报方向;rename 旧名误报孤例发生率低——均记录不立案)。phantom_verify:isError 不 arm/分类动词表/#572/#1150 在位;类别整轮有效不因后续编辑失效(P3)为设计边界。placeholder_check:delta/moved/注释豁免/接口 stub/接线全对;文档扩展名无豁免(README 裸 "TODO"/"XXX" 误报,Low 附注)。

严重程度

Low + Low-Med


独立复核确认:reset 点/正则/武装机制原文、退避词表不存在(grep 零匹配——推翻初审缓解项)、ClaimsSupervision 三处默认关闭核证、三处拒绝文案前缀匹配矩阵、switch_mode 建议方向性推演。初审幻觉记录(第十三轮):虚构退避词表——复核以 grep 零匹配实证推翻。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions