Codex Review 真能发现问题吗?我用一个测试全绿的 diff 实测

代码提交前测试已经全绿,还需要 Review 吗?这次我用一个 4 文件的 Node.js 项目实测:第一次改动 4 项测试全部通过,git diff --check 也正常,Codex Review 仍找到一个可以复现的优惠码匹配回归。修复并补反例后,6 项测试通过,第二次 Review 没有再报告问题。

1. 先确认本机 Review 参数

本次实际使用 codex-cli 0.148.0

codex review --help

当前帮助中的主要范围:

参数 范围
--uncommitted staged、unstaged 和 untracked 改动
--base <BRANCH> 相对指定基线分支的改动
--commit <SHA> 指定提交引入的改动

本文检查提交前改动,使用:

codex review --uncommitted

本机帮助虽显示可以带 [PROMPT],但 codex review --uncommitted "..." 实际返回参数冲突,退出码 1。因此本文不把组合命令写成成功用法,参数以本机真实结果为准。

2. 示例项目与明确规则

项目名:codex-review-shipping-demo

codes/codex-review-shipping-demo/
├── README.md
├── package.json
├── src/shipping.js
└── test/shipping.test.js

规则很短:会员免运费;订单不低于 99 元免运费;优惠码精确等于 FREESHIP 时免运费;其他订单收 12 元。

“精确等于”是 Review 结论能否成立的依据。没有 README 或需求,只看实现,无法判断宽松匹配是不是产品设计。

3. 第一次 diff:4 项测试全部通过

第一次加入优惠码时,我写成:

if (isMember || subtotal >= 99 || couponCode.includes("FREESHIP")) {
  return 0;
}

测试只覆盖合法优惠码:

assert.equal(calculateShipping(50, false, "FREESHIP"), 0);

真实结果:4 项测试通过、0 失败、退出码 0,git diff --check 也通过。

测试全绿并不代表未覆盖输入没有问题

图 1:测试全绿并不代表未覆盖输入没有问题。

4. Review 前先检查发送范围

--uncommitted 会覆盖 staged、unstaged 和 untracked 改动。运行前先看:

git status --short
git diff --stat
git diff
git diff --cached

本次只有两个文件变化:

M src/shipping.js
M test/shipping.test.js
2 files changed, 6 insertions(+), 2 deletions(-)

如果状态里混有真实 API Key、Authorization、Cookie、客户代码或不准备发送的文件,应先停止并清理,不能等截图时再打码。

5. 第一次 Review 找到一个问题

codex review --uncommitted
$LASTEXITCODE

退出码为 0,核心问题如下:

[P1] Require exact coupon-code equality - src/shipping.js:6

NOTFREESHIP 或 FREESHIP-EXPIRED 也会命中 includes("FREESHIP"),
从而错误免除运费。README 要求精确匹配,应使用严格相等判断。

保留相对文件、行号、触发输入和影响;私人路径、Provider、模型、会话 ID 与认证信息已隐藏

图 2:保留相对文件、行号、触发输入和影响;私人路径、Provider、模型、会话 ID 与认证信息已隐藏。

这条问题是否一定属于 P1 可以讨论,但问题本身可以直接复现,不依赖相信模型。

6. 用反例人工复核

我输入两个包含目标字符串、但不应生效的优惠码:

NOTFREESHIP
FREESHIP-EXPIRED

修复前,两者都返回运费 0;订单金额只有 50 元,也不是会员,正确结果应为 12。

反例证明这不是代码风格建议,而是会错误免邮的行为回归

图 3:反例证明这不是代码风格建议,而是会错误免邮的行为回归。

如果 Review 只写“建议用 ===”,却不给触发输入和影响,我不会直接接受。

7. 修复并补回归测试

实现改为严格相等:

if (isMember || subtotal >= 99 || couponCode === "FREESHIP") {
  return 0;
}

同时把两个反例加入测试:

for (const couponCode of ["NOTFREESHIP", "FREESHIP-EXPIRED"]) {
  test(`does not accept ${couponCode}`, () => {
    assert.equal(calculateShipping(50, false, couponCode), 12);
  });
}

修复后 6 项测试全部通过,两个反例均返回 12,git diff --check 通过。

8. 第二次 Review 闭环

我对最终 diff 再运行一次:

codex review --uncommitted

第二次退出码为 0,没有报告新问题,核心结果是精确匹配保留原行为,正向和反向测试均已覆盖。

6 项测试通过,第二次 Review 未报告新问题

图 4:6 项测试通过,第二次 Review 未报告新问题。

这不等于代码被证明完全正确。最终仍要人工查看 git diff,确认没有临时日志、配置和无关文件。

提交前清单

[ ] codex review --help 与本机版本一致
[ ] git status --short 没有意外文件
[ ] git diff 与 git diff --cached 已人工查看
[ ] 测试通过并记录退出码
[ ] Review 问题包含文件、输入和影响
[ ] 每条问题都已用规则、源码或反例复核
[ ] 修复后补了回归测试
[ ] 最终 diff 已二次 Review 和人工检查

Codex Review 不是批准按钮。它负责从测试已通过的 diff 里再找遗漏;反例负责证明,测试负责防止同一问题回来。

llapi.org 配置提醒

Codex Review 会使用本机配置的模型服务。若使用 llapi.org,请到 https://llapi.org 查看当前申请入口、Base URL 和服务规则;本文不承诺模型效果、价格、额度或稳定性。

只使用 <YOUR_LLAPI_API_KEY> 占位符。真实 Key、Authorization、Cookie、完整配置和用户私密数据不能进入 Review 输入、文章、截图或 Git。

示例代码地址:https://gitee.com/heihei_66/codex-demo

Logo

葡萄城是专业的软件开发技术和低代码平台提供商,聚焦软件开发技术,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。

更多推荐