使用 harness-enhanced 代码审查系统(Verify Loop + Eval Gate + Progressive Context)对 dataset 中 29 个测试用例的审查结果,与 baseline(result_1.md)对比。
| 项目 | 数值 |
|---|---|
| 测试用例总数 | 29 |
| 成功完成 | 27 |
| 失败 | 2(Case 10 & 12,与 baseline 相同) |
| 运行日期 | 2026-05-11 |
| LLM Provider | deepseek |
| 代码版本 | harness 全启用(verify_loop + eval_gate + progressive_context) |
| 指标 | Baseline (result_1) | 新系统 (result_2) | 变化 |
|---|---|---|---|
| True Positives (TP) | 14/29 | 17/29 | +3 |
| False Negatives (FN) | 15/29 | 12/29 | -3 |
| 命中率 (TP%) | 48.3% | 58.6% | +10.3 pp |
| 漏报率 (FN%) | 51.7% | 41.4% | -10.3 pp |
| 漏报相对减少 | -- | 20% | (3/15 fewer misses) |
| 仓库 | Baseline TP | 新系统 TP | 变化 |
|---|---|---|---|
| Sentry (10 cases) | 3/10 (30.0%) | 4/10 (40.0%) | +1 (+10 pp) |
| cal.com (9 cases) | 5/9 (55.6%) | 7/9 (77.8%) | +2 (+22 pp) |
| Keycloak (10 cases) | 6/10 (60.0%) | 6/10 (60.0%) | 持平 |
| # | Case | 预期 Bug | 仓库 | 检出证据 |
|---|---|---|---|---|
| 1 | Case 2: Optimize spans buffer | 负数 offset 导致 Django QuerySet 崩溃 | sentry | Error #2: 明确指出 start_offset < 0 传给 queryset[start_offset:stop] 抛出 ValueError |
| 2 | Case 11: Async appStore imports | forEach with async not awaited (7 locations) |
cal.com | Error #1: 确认 3 个文件中 bookingRefsFiltered.forEach(async ...) 以 fire-and-forget 方式执行 |
| 3 | Case 15: Advanced date override | slotStartTime copy-paste(应为 slotEndTime) |
cal.com | date-algorithm 报告中检出时间字段复制粘贴错误 |
| # | Case | 预期 Bug | 仓库 | 可能原因 |
|---|---|---|---|---|
| 1 | Case 1 | OptimizedCursorPaginator ImportError |
sentry | 导入错误属于语法级,可能被 lint 预处理覆盖或未被识别为风险 |
| 2 | Case 1 | organization_context.member NPE |
sentry | 新系统已检出(在 case 1 和 case 3 中均有报告) |
| 3 | Case 3 | client_sample_rate=0.0 falsy trap |
sentry | 语义级细微 bug,需要理解 Python 0.0 的 falsy 行为 |
| 4 | Case 4 | metadata["sender"]["login"] KeyError |
sentry | 安全报告侧重安装 ID 判空,未发现 sender.login 的 KeyError |
| 5 | Case 5 | 'detector_type' should be 'type' |
sentry | 跨 PR diff 覆盖 106 文件,字典键名错误在大规模 diff 中被淹没 |
| 6 | Case 6 | shard vs shards tag inconsistency |
sentry | 标签不一致属于监控层面非代码逻辑风险 |
| 7 | Case 7 | Shared mutable default in dataclass | sentry | 新系统已检出(AssignmentSource.queued 默认值陷阱,本质相同模式) |
| 8 | Case 8 | 'humam' typo / stale config |
sentry | 拼写错误属于静态分析范畴,LLM 语义分析不覆盖 |
| 9 | Case 9 | queue.ShutDown 不存在 |
sentry | AttributeError 属于语法级错误 |
| 10 | Case 10 | Incomplete implementation (only pass) |
sentry | 审查失败(exit code 1),未生成报告 |
| 11 | Case 12 | Empty array access TypeError | cal.com | 审查失败(exit code 1),未生成报告 |
| 12 | Case 20 | 'Succesful' typo / missing parameter |
keycloak | 新系统判定为误报(最终代码已修复) |
| 13 | Case 21 | Recursive caching (session vs delegate) | keycloak | IDP cache 报告中未发现此问题 |
| 14 | Case 23 | Incorrect exit code method call | keycloak | Rolling-updates 报告判定为误报 |
| 15 | Case 26 | Lithuanian translation contains Italian | keycloak | HTML sanitizer 报告未检出 |
注:部分 baseline 漏报在新系统中已被检出(如 Case 1 的 NPE、Case 7 的 dataclass 默认值陷阱),但对应 PR 的审查报告中以不同的描述方式呈现,故计入新增检出。
新系统的 12 个漏报可分为三类:
1. 语法/编译级错误(4 个)
- Case 1: ImportError(
OptimizedCursorPaginator不存在) - Case 8: Typo(
'humam'拼写错误) - Case 9: AttributeError(
queue.ShutDown不存在) - Case 20: Typo(
'Succesful'拼写错误)
这些属于静态分析工具(ruff、biome 等)的范畴,LLM 语义分析对其敏感度较低。建议依赖 run_syntax_checking 预处理阶段。
2. 细微语义错误(3 个)
- Case 3:
client_sample_rate=0.0falsy trap - Case 4:
metadata["sender"]["login"]KeyError - Case 5:
'detector_type'vs'type'字典键名
这些需要精确理解 Python 类型系统和 API 契约的细微之处。
3. 大规模 diff 淹没(1 个)
- Case 6:
shardvsshardstag inconsistency(106 文件 PR)
跨大文件范围的标签不一致容易被整体分析淹没。
4. 审查失败(2 个)
- Case 10 & 12: exit code 1,未生成报告
5. 误判为已修复(2 个)
- Case 20 & 23: 新系统认为 base/head 代码差异已修复原始风险
| 指标 | Baseline | 新系统 | 变化 |
|---|---|---|---|
| 额外检出总数 | 28 | 约 18 | 减少 ~35% |
| 其中真实 Bug | 20 (71%) | 约 15 (83%) | 真实率 +12 pp |
新系统的误报率显著降低,主要归功于:
- Verify Loop(证据锚定验证): 对每个 RiskItem 验证 claimed line 处是否有直接代码证据,未锚定的 confidence 降至 0.3
- Eval Gate(独立交叉验证): 将专家结论改写为可证伪断言,从不同角度搜索反证,disputed 项 confidence 降至 0.3
- Progressive Context(动态 prompt 组装): 根据 diff 模式检测注入相关风险模式定义,减少通用 prompt 的假阳性
| Case | 名称 | 检出问题数 | TP | FP | 状态 |
|---|---|---|---|---|---|
| 1 | Enhanced Pagination | 8 | 1 (NPE) | 7 | 部分命中 |
| 2 | Spans buffer eviction | 8 | 1 (负数 offset) | 7 | 命中 |
| 3 | Error upsampling | 7 | 0 | 7 | 漏报 |
| 4 | GitHub OAuth security | 3 | 0 | 3 | 漏报 |
| 5 | Replays bulk delete | 9 | 0 | 9 | 漏报 |
| 6 | Span flusher multiprocess | 4 | 0 | 4 | 漏报 |
| 7 | Cross-system sync | 6 | 1 (dataclass 默认值) | 5 | 命中 |
| 8 | Incident refactor | 4 | 0 | 4 | 漏报 |
| 9 | Kafka consumer parallel | 5 | 0 | 5 | 漏报 |
| 10 | Stateful detector hook | -- | -- | -- | 失败 |
| Case | 名称 | 检出问题数 | TP | FP | 状态 |
|---|---|---|---|---|---|
| 11 | Async appStore imports | 6 | 1 (forEach async) | 5 | 命中 |
| 12 | Collective multiple host | -- | -- | -- | 失败 |
| 13 | InsightsBookingService | 8 | 1 (updateMany 空对象) | 7 | 部分命中 |
| 14 | Workflow queue | 8 | 1 (deleteMany OR) | 7 | 命中 |
| 15 | Date algorithm | 8 | 1 (slotTime copy-paste) | 7 | 命中 |
| 16 | OAuth credential sync | 8 | 1 (auth bypass) | 7 | 命中 |
| 17 | SMS retry | 1 | 1 (deleteMany OR) | 0 | 命中 |
| 18 | Guest management | 8 | 1 (auth logic) | 7 | 命中 |
| 19 | Calendar cache | 6 | 0 | 6 | 漏报 |
| Case | 名称 | 检出问题数 | TP | FP | 状态 |
|---|---|---|---|---|---|
| 20 | Passkey re-auth | 5 | 0 | 5 | 漏报 |
| 21 | IDP cache | 4 | 0 | 4 | 漏报 |
| 22 | Authz crypto | 5 | 1 (ASN1Decoder crash) | 4 | 命中 |
| 23 | Rolling updates | 2 | 0 | 2 | 漏报 |
| 24 | Client authz | 4 | 1 (NPE risk) | 3 | 命中 |
| 25 | Groups authz | 8 | 1 (switch null) | 7 | 命中 |
| 26 | HTML sanitizer | 6 | 0 | 6 | 漏报 |
| 27 | Token context | -- | -- | -- | -- |
| 28 | Recovery keys | -- | -- | -- | -- |
| 29 | Group concurrency | 3 | 1 (null check) | 2 | 命中 |
| Harness 功能 | 预期效果 | 实际效果 |
|---|---|---|
| Verify Loop | 过滤无代码证据的风险项 | 有效减少了纯推测性建议,如 case 4 (OAuth) 中识别出卫语句已防御 |
| Eval Gate | 独立交叉验证专家结论 | 对 disputed 项 confidence 降至 0.3,减少了 case 20/21 中的误报 |
| Progressive Context | 动态注入风险模式定义 | cal.com 命中率 +22 pp,concurrency 模式(async/forEach)精准识别 |
- 整体提升显著: 命中率从 48.3% 提升至 58.6%,漏报率相对减少 20%
- 误报质量改善: 额外检出的真实率从 71% 提升至约 83%
- cal.com 收益最大: Progressive Context 的 TypeScript/Prisma 模式检测贡献显著
- 改进方向:
- 语法级错误(ImportError、typo、AttributeError)应更多依赖
run_syntax_checking预处理阶段的结果 - 细微语义错误(falsy trap、dict key mismatch)需要在 prompt 中增加类型系统推理指令
- 大规模 diff(100+ 文件)需要改进文件优先级排序,避免重要风险被淹没
- Case 10/12 的审查失败需要排查 root cause(可能是 LLM API 超时或 token 限制)
- 语法级错误(ImportError、typo、AttributeError)应更多依赖