文件行号
internal/agent/verification_debt.go L131-140(isVerificationCommand——tokens[0]=="#" 不含 = 循环停 i=0 → first 不在 runner 列表 → false)+ verify_coverage_gap.go L414-445(coverageIsVerifyCommand 同盲)+ L312-324(coverageExtractCommand 只 TrimSpace 不调 stripLeadingShellComment)+ L140(checkCoverage len(scopes)==0 return "")+ edit_abandon.go L101/L82-88(eaIsVerifyTool/eaExtractCommand 同根因)——对照 verify_hint.go L797-800(注释自认 "#471: the run_command tool schema mandates a leading '# ' comment line")+ L812/820(stripLeadingShellComment 仅 2 处使用——#471/#950 只修了 postEditVerify 路径);verify.go L364-379(llmDecideVerifyCommand 仅 TrimSpace 不剥 fence——prompt L245 仅口头要求)+ 后果链:verifyCommandAvailable parts[0]=```go LookPath 必失败 → Passed=true "verification skipped" 静默假绿;verify.go L388-399+verify_hint.go L415-440(verifyCommandAvailable 只查 parts[0]——go test ./... || npm run build npm 未装:go test 失败退 1 → || 右侧 127 → isNonFailureExit(127) → Passed=true "tool not available" 真实失败吞成通过);verify_hint.go L474-512(extractFilePathFromArgs files 只按 []map 解析——batch_replace []string 裸数组 unmarshal 必败、file_ops operations 无分支)对照同文件 L521-562(sfExtractMutationPaths #737 已正确处理两形态)+ verify_coverage_gap.go L264-293(coverageExtractFilePaths #738 已修)——三套提取器独此漏修+ agent.go:3997-4005 连坐喂 searchInvalidation/stalledConvergence
问题
案 A(High·静默漏报三连):# 活动标签前缀使三检测器对守约 agent 全盲
案 B(Med·假绿):exit 127 一律判 Passed 吞 || 链真实失败
go test ./... || npm run build(npm 未装):失败退 1 → 127 → isNonFailureExit → 真实测试失败静默成"验证通过";测试套件内部缺失二进制 127 同判绿
修:isNonFailureExit 排除 ||/; 复合命令末段 127(或只对 parts[0] 缺失时豁免)。
案 C(Low-Med·静默假绿):LLM oracle 输出不剥 markdown 围栏
- 复核修正后果链:围栏命令进 executeVerifyCommand → 预检 LookPath 失败 → Passed=true "verification skipped"——验证形同虚设但不注入错误(初审"错误注入+auto-repair 循环"被推翻)
修:executeVerifyCommand 前剥围栏(复用 chat 层 fence 剥离)。
案 D(Low-Med·漏报):postEditVerify 路径提取三套失同步——独 extractFilePathFromArgs 漏 batch_replace/file_ops
干净项
verification_debt:分类 map/阈值/reset 接线(agent.go:1503)非死码(初审死码误判已纠正——字段名 verifDebt vs 类型名 verificationDebtState)。verify_debt:与 verification_debt 职责正交(任意 build 重置 vs 仅绿 build 清零)/recordVerifyCommand 用 extractCommandFromArgs 不受案 A 影响/once-per-run/reset 接线全对。verify.go 其余:#941 脚本分支/变量赋值排除/exit-1 守卫全对。verify_coverage_gap 其余:#416/#417/#550/#738 全对(致命点仅案 A 入口)。verify_hint 其余:sourceMutatingTools 9 成员逐一对照无遗漏写工具(assertEditToolMapsInSync+测试锁同步)/复合命令拆分/三级 hint 全对。
排除
#1516/#1520(sourceMutatingTools 失同步/batch_replace 门控——已案不重);#1521 案 D(claimsSupervision);isVerifyCommand vs isVerificationCommand 两函数有意区分非重复。
严重程度
High + Med + Low-Med×2
独立复核确认:三入口原文+stripLeadingShellComment 仅 2 处使用 grep 穷尽、三后果链、"schema 强制"修正为"prompt 强制"、案 2 后果链被预检拦截修正(错误注入→静默假绿降级)、127 ||推演、三套提取器失同步对照(#737/#738 已修独此漏)。
文件行号
internal/agent/verification_debt.goL131-140(isVerificationCommand——tokens[0]=="#"不含 = 循环停 i=0 → first 不在 runner 列表 → false)+ verify_coverage_gap.go L414-445(coverageIsVerifyCommand 同盲)+ L312-324(coverageExtractCommand 只 TrimSpace 不调 stripLeadingShellComment)+ L140(checkCoveragelen(scopes)==0return "")+ edit_abandon.go L101/L82-88(eaIsVerifyTool/eaExtractCommand 同根因)——对照 verify_hint.go L797-800(注释自认 "#471: the run_command tool schema mandates a leading '# ' comment line")+ L812/820(stripLeadingShellComment 仅 2 处使用——#471/#950 只修了 postEditVerify 路径);verify.go L364-379(llmDecideVerifyCommand 仅 TrimSpace 不剥 fence——prompt L245 仅口头要求)+ 后果链:verifyCommandAvailable parts[0]=```go LookPath 必失败 → Passed=true "verification skipped" 静默假绿;verify.go L388-399+verify_hint.go L415-440(verifyCommandAvailable 只查 parts[0]——go test ./... || npm run buildnpm 未装:go test 失败退 1 → || 右侧 127 → isNonFailureExit(127) → Passed=true "tool not available" 真实失败吞成通过);verify_hint.go L474-512(extractFilePathFromArgs files 只按 []map 解析——batch_replace []string 裸数组 unmarshal 必败、file_ops operations 无分支)对照同文件 L521-562(sfExtractMutationPaths #737 已正确处理两形态)+ verify_coverage_gap.go L264-293(coverageExtractFilePaths #738 已修)——三套提取器独此漏修+ agent.go:3997-4005 连坐喂 searchInvalidation/stalledConvergence问题
案 A(High·静默漏报三连):
#活动标签前缀使三检测器对守约 agent 全盲修:三入口复用 stripLeadingShellComment(一处修复三检测器复活)。
案 B(Med·假绿):exit 127 一律判 Passed 吞
||链真实失败go test ./... || npm run build(npm 未装):失败退 1 → 127 → isNonFailureExit → 真实测试失败静默成"验证通过";测试套件内部缺失二进制 127 同判绿修:isNonFailureExit 排除
||/;复合命令末段 127(或只对 parts[0] 缺失时豁免)。案 C(Low-Med·静默假绿):LLM oracle 输出不剥 markdown 围栏
修:executeVerifyCommand 前剥围栏(复用 chat 层 fence 剥离)。
案 D(Low-Med·漏报):postEditVerify 路径提取三套失同步——独 extractFilePathFromArgs 漏 batch_replace/file_ops
修:复用 sfExtractMutationPaths 或补两分支。
干净项
verification_debt:分类 map/阈值/reset 接线(agent.go:1503)非死码(初审死码误判已纠正——字段名 verifDebt vs 类型名 verificationDebtState)。verify_debt:与 verification_debt 职责正交(任意 build 重置 vs 仅绿 build 清零)/recordVerifyCommand 用 extractCommandFromArgs 不受案 A 影响/once-per-run/reset 接线全对。verify.go 其余:#941 脚本分支/变量赋值排除/exit-1 守卫全对。verify_coverage_gap 其余:#416/#417/#550/#738 全对(致命点仅案 A 入口)。verify_hint 其余:sourceMutatingTools 9 成员逐一对照无遗漏写工具(assertEditToolMapsInSync+测试锁同步)/复合命令拆分/三级 hint 全对。
排除
#1516/#1520(sourceMutatingTools 失同步/batch_replace 门控——已案不重);#1521 案 D(claimsSupervision);isVerifyCommand vs isVerificationCommand 两函数有意区分非重复。
严重程度
High + Med + Low-Med×2
独立复核确认:三入口原文+stripLeadingShellComment 仅 2 处使用 grep 穷尽、三后果链、"schema 强制"修正为"prompt 强制"、案 2 后果链被预检拦截修正(错误注入→静默假绿降级)、127 ||推演、三套提取器失同步对照(#737/#738 已修独此漏)。