Skip to content

[business-logic] overcorrection_cascade 小编辑处理自相矛盾:stepsSinceError 清零使陈旧错误永不过期(A)+ overcorrected:false 条目打断级联计数致系统性漏报(B) #1170

Description

@topcheer

独立复核确认(两个问题均经临时测试实证复现,已清理)

严重程度: A=medium, B=medium

位置

internal/agent/overcorrection_cascade.go

  • 问题A: L182-183(recordEdit 小编辑分支 s.stepsSinceError = 0
  • 问题B: L184-189(小编辑追加 overcorrected:false 条目)+ L212-219(consecutiveOver 逆序 break)

问题A:小编辑清零过期计数器,陈旧错误永不过期

  • stepsSinceError 唯一递增点 recordNonEditStep(L416-422),唯一消费点 L170(>=10 过期清除 pendingErr)。
  • 注释声称 "Only reset the step counter so the error can still expire via the stale-error path"——但小编辑不碰这行代码时计数器保持不变;清零反而把过期进度归零 = 延长错误寿命,与注释目的正好相反。
  • 实证:trivial error → 每轮 9 非编辑步 + 1 小编辑(<500B),循环 20 轮(~200 步)后 pending error 仍未过期 → 6000B 合法编辑被归因到远古 trivial error,误报 "Fix for trivial error was 6000 bytes - too large"。破坏了 [business-logic] overcorrection detector stale pendingErr - errors from 20 steps ago misattributed to unrelated edits #27 的陈旧错误保护。
  • 修复:删掉 s.stepsSinceError = 0(保持不变)。

问题B:小编辑条目打断级联链,常见级联场景零警告

  • 小编辑以 overcorrected:false 无条件追加进窗口;consecutiveOver 逆序扫描遇任何非 overcorrected 条目立即 break。
  • 实证:两次真实 moderate 过校正(7000B vs 400B,ratio 17.5 > 15)中间夹一次 50B 小修正 → 零警告(consecutive=1,moderate 不走单次警告路径);无小编辑则正常触发级联警告。
  • 文件内部逻辑自相矛盾:recordEdit 注释把小编辑定性为"不可评估、不得破坏归因锚点的非事件",consecutiveOver 却把它当正式事件断链。真实级联中夹 1 行小修正是常态 → 系统性漏报。
  • 修复:consecutiveOver 跳过(continue 而非 break)低于 overcorrectionMinEditBytes 的条目,或小编辑不追加进 entries。

来源:深度业务逻辑审查,初审 sa-2 + 独立复核 sa-18(双重实证)确认。

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