Codex
Codex 审查总回 CHANGES REQUIRED?先给发现分类,再让 Claude Code 动手
用 Codex 审查 Claude Code 的提交时,最常见的问题是每改一轮就冒出新意见,循环永远到不了 ACCEPT。作者的做法是:在让 Claude Code 改代码之前,先把每条审查发现归入五类并给出对应处理方式,blocker 必须附可复现的失败证据,后期轮次收窄审查范围,并提前设好硬性轮次上限。
今天就能做
- 下次审查循环卡住时,先别让 Claude Code 改代码,把每条发现按五类归档,blocker 必须附上触发步骤、预期行为和实际行为
- 在第一轮之前写下轮次上限,并让后期轮次的审查包只包含未解决发现、增量变更和当前 commit 的 diff
- 遇到需求理解分歧,直接问变更负责人,不要指望多跑几轮审查能自己收敛
先把发现分成五类,再谈修改
- 作者让 Codex 对 brief 的每一行和每条团队规则回答 met / not met / not checkable,清单之外的发现必须给出具体失败才能成立
- 五类及处理:违反 brief 或团队规则就修(有争议则问人);brief 之外的失败需附复现细节才能 block;审查者偏好移入 follow-ups;无法验证的说法先要证据;verdict 缺失、重复或格式错误算运维故障,故意重跑且不计入轮次
- 每条发现都要先分类、先回应,然后才轮到 Claude Code 收到下一次修改请求
blocker 必须有可复现的失败
- 要求 Codex 对 blocker 给出三样东西:触发它的输入或步骤、预期行为、实际行为
- 没有这三样,Claude Code 只是在朝一个越改越大的审查目标打补丁
- 测试同样适用:文中例子 add(2,3) 返回 6 而被削弱的断言照样通过,新测试应当在旧行为上失败;没有说明理由就放宽断言,审查也可能漏掉
区分 brief 违反与审查者偏好
- brief 违反是必须改的;偏好只是对已满足 brief 的代码提出的另一种技术上说得通的写法
- 逐行核对让 Codex 锚定这个区别:brief 全部满足后,剩余意见必须有可复现失败才能 block
- 例:Codex 建议把 get_rows 改名 fetch_rows,brief 全满足、无失败、无命名规则,就进 follow-ups;若团队规则规定了命名模式,同一意见就是 not met,本轮就修
后期轮次收窄审查包
- 早期轮次可以提任何相关问题;后期只提 merge blocker,小问题进 follow-ups
- verdict 按被审的确切 commit 保存,新 commit 必须重新审查,旧 commit 的 ACCEPT 不能覆盖改过的代码
- 后期审查包只含:未解决的发现、上次审查以来的变更、当前 commit 及其 diff;新 blocker 任何轮次都有效,只要能识别并复现失败
第一轮之前就定好硬性上限
- 把轮次上限写下来,并告诉 Codex 当前是第几轮,让它知道后期规则何时生效
- 最后一轮仍是 CHANGES REQUIRED 就停止发修改,verdict 保持不变、merge 保持阻塞,由人来决定换方案、拆分变更或主动加轮
- 只计实质性轮次:运维故障后的重跑不计,同一变更的新 commit 也不重置计数
审查本身坏了怎么办,以及官方插件现状
- review.sh 约定:0 为已保存的 ACCEPT,2 为已保存的 CHANGES REQUIRED,1 为什么都没保存;exit 1 不代表代码有问题,gate 不会自动重试,要读日志后故意重跑
- OpenAI 官方的 Codex plugin for Claude Code 提供 review gate(Stop hook),其提示词已要求 blocker 基于仓库上下文或工具输出,/codex:adversarial-review 明确排除风格、命名和无证据的猜测性意见
- 官方 README 警告 gate 可能造成长时间循环并快速耗尽用量额度,建议只在有人盯会话时开启;停止策略、争议需求处理、轮次收窄都留给你自己定
原文:Codex keeps returning CHANGES REQUIRED: sort the finding before Claude Code edits again
来源:DEV Community · 2026-11-09
查看原文本文由 AI 阅读原文后整理,未经人工逐字核对,内容以原文为准。
登录后可以点赞、查看和发表评论