已知局限(诚实边界)
ReviewGate 是静态 LLM 质量闸口,不执行代码。以下边界来自真实评测(见 docs/evals/),
明示局限是为了可信——宁可说清楚做不到什么,也不夸大。
1. 细微算法 off-by-one / 进位 / 需"真正执行"才暴露的 bug
- DST(#1003)/parseISO 24:00(#1229)/负零差值(#739) 经「执行推演」提示改进后已能 BLOCK。
- 进展(2026-06-26):revert
addBusinessDays周末修复后,当前版本 2/2 稳定 BLOCK, 命中周末分支的 off-by-one——此前记录的"addBusinessDays 周末漏报"已不再静默放行。 - run_check 修复(2026-07-01,见
docs/evals/2026-07-01__exec-verify-runcheck-fix.md):--exec-verify的run_check此前有严重 bug——子进程 stdout 未捕获,既泄漏到 ReviewGate 自身 stdout(破坏--format json,CI 直接挂),执行结果又从未回传给模型(一律收到(no output))。 即"exec-verify 开着也没用上"的真实原因是工具坏了,而非模型不调用。修复后 run_check 才真正提供 执行信号,--format json在 exec-verify 下也不再损坏。 - 勘误(2026-07-01):此前把 big.js #125 记为"进位漏报"是误标——该 issue 是作者问能否简化,
两种写法(
(c[j]+b)%10vsc[j]=b)在该位置c[j]恒 0、可证等价(20 万随机 + 全 9 对抗,0 差异)。 ReviewGate 的 ai_smell 判其"等价/冗余"是正确的,不是漏报。 - 诚实边界(仍未根除):
- 大仓库上有维度撞超时(已标 incomplete、未静默放行,但该维度未审完)。
- 最细微的单步 off-by-one / 逐位进位仍可能误推演,属理论硬尾——瓶颈仍是"模型是否主动怀疑并验证"; run_check 修好后模型可可靠执行核验,但仍需模型主动发起。
- 可靠防线仍是单元测试:纯"读+推理"难稳定模拟多次迭代的边界算法,关键算法逻辑不要仅依赖静态审查。
1b. 大 diff 上的跨文件状态表征漂移(无局部坏味道)
- 标本:syncthing #10170(revert 法,见
docs/evals/2026-07-02__frontier-10170-state-drift.md)。bool 字段与位掩码双事实源、聚合掩码删位后计数消费方漂移——19 文件、每个 hunk 各自看都自洽, bug 是三跳跨文件不变量。logic 维度基线与加「状态表征迁移」检查项后均 2/2 零命中(改动已撤,不留无效复杂度)。 - 定性:这类 bug 需要「本该做什么」的意图上下文,属
--intent意图评审的领地(PR 标题一句话即含验收标准); 缺陷向静态审查补不了意图缺失。该用例留在dataset-recall.tsv作 frontier 标本,预期长期先红。
2. 无上下文信号的"裸"危险调用
- 例:3 行
requests.get(url)且无任何"url 来自用户"的线索——模型不一定判定为 SSRF。 - 缓解:真实代码通常带 handler/请求参数上下文(带上下文时召回良好);高危类型可用
--samples N提升稳定性。
3. run-to-run 方差
- LLM 固有:同一改动多次运行命中的发现集合会有波动;borderline 置信度会在 WARN/BLOCK 间抖动。
- 缓解:dedup + 证伪 judge 收敛;
--samples N取并集 + 保留最高置信度,稳定 flaky 闸口判定。
4. 未支持语言的精确工具降级
- tree-sitter 仅覆盖 rust/cpp/python/go/js/ts/java;其它语言(含仓颉等)LLM 审查照常可用,但
find_definition/callers/references走 grep 词法兜底、find_duplicate_functions不可用、<lang>.mdper-language 规则不路由。补一种语言=加 tree-sitter grammar + 扩展名映射。
5. 仅审查 diff(改动)
- 默认只评审本次改动;不主动审计仓库既有代码。删除安全防护这类「负向改动」已专门覆盖 (prompt 例外规则 + cJSON 删除式漏洞验证通过)。
6. 意图评审(--intent)的验收清单
- 结构化强制:意图被解析成 N 条验收标准(C1..CN),评审跑完后未被逐条 verdict 的标准兜底标
? not assessed—— 所以清单一定覆盖每条标准,不再出现"空清单/静默漏掉"。未核对的标准会让结果降级 WARN(绝不伪装成 PASS)。 - 仍有的模型层面局限:模型可能把预算花在深挖某条标准上,导致其余标准只是"未核对"而非真正打勾;
此时清单诚实显示"未核对",提示放宽
--timeout或拆分意图后重跑,而不是假装审过。 - 意图质量决定上限:一行提交信息只能拆出 1~几条粗标准;写清楚验收标准(编号/分条)才能得到细粒度清单。
这些局限均有评测留痕。随版本演进会持续缩小(每条都标注了已做/可做的缓解)。