核心引擎 · 难度:进阶

ce-code-review 与 ce-resolve-pr-feedback

两个拥有 PR 评审循环的技能:一个评审新代码,一个处理评审反馈。严格的运行原则;ce-code-review 绝不使用阻塞提问工具。

ce-code-review

代码评审技能对一个指定的 diff 或 PR 评审 bug、回归、测试与规范。执行骨架包含六个阶段。

ce-code-review 阶段 — 模式与输出 → 范围门 → 意图 → Persona → 派发 → 结论
ce-code-review 执行骨架。

评审深度门

三条路径:Lite / Focused / Full。只要任一底线触发就强制走 Full:

任何底线都不可被谈下来。Lite 与 focused 是门选出的路径;full 由底线强制。

评审政策(REVIEW.md)

评审政策是一份 REVIEW.md:告诉评审在这个仓库里怎么评——各级别在这里意味着什么、要跳过的路径或类别、minor 数量上限、某类发现需要什么证据、每次变更要跑什么检查。Claude Code Review 读同一个文件。

3d — 跨模型 peer

当变更足够有风险时,通过 scripts/cross-model-adversarial-review.sh(1,090 行)在 peer 模型上运行对抗评审。每条路由都走同一个被钉死的 acpx 传输(Agent Client Protocol 客户端,acpx@0.19.5,需 Node ≥ 22.13),不再各自接 peer CLI。路由令牌:codex | claude | grok-cli | grok-cursor | cursor | composer | opencode。peer 模型与推理档位由脚本内一张映射钉死:Codex 走 gpt-6-luna(xhigh,基准评测选出的档位;Sol 引脚用 gpt-6.1-sol),Claude 走 claude-opus-5-5(high),Grok 走 grok-4.7(xhigh;grok-cursor 用 Cursor 的 high/fast 预设),composer 走其 fast 档。peer 写入 <run-dir>/adversarial-<provider>.json。已启动的 peer 会替换本地对抗 persona;只有真正失败于范围、白名单、连通、鉴权或启动时,才会回退到本地。

运行原则

快速评审短路

如果调用参数表明用户想要"quick / fast / light",且未启用 mode:agent,则路由到宿主内置评审(一次工具调用)并停止。mode:agent 绕过此短路。

JSON 输出结构

  {
    status: "complete" | "failed" | "degraded" | "skipped",
    verdict: "Ready to merge" | "Ready with fixes" | "Not ready",
    scope: { base, branch, head_sha, pr_url, files_changed },
    intent, intent_confidence, reviewers, findings,
    actionable_findings, triage_groups,
    pre_existing_findings, requirements_completeness,
    learnings, agent_native_gaps, deployment_notes,
    residual_risks, testing_gaps,
    review_policy: { path: "<run-dir>/review-policy.md or null", sources: ["<读到的每条 REVIEW.md 路径>"] },
    coverage: { depth: "lite|focused|full" },
    artifact_path, run_id
  }

锚定的置信度(0 / 25 / 50 / 75 / 100),不使用连续的浮点数。每条 finding 在至少两位 reviewer 独立触达时带 independence_verified: true。

ce-resolve-pr-feedback

处理 PR 上留下的反馈——内联评审线程、评审提交正文、顶层 PR 评论。编排器(本技能)判断合法性;子代理只实现已被批准的修复。

模式检测

参数模式
无参数Full — 当前分支 PR 上所有未解决的反馈
PR 编号(如 123)Full
PR URL(.../pull/N)Full;解析 HOST、OWNER/REPO、N
#discussion_r... 片段Targeted — 仅那一条评审线程
#issuecomment-... 片段Full(无线程可解决;顶层评论)

只有 #discussion_r... 走 Targeted。把 #issuecomment-... 发到 Targeted 端点会 404。

Full 模式:9 步

  1. 拉取未解决线程,通过 scripts/get-pr-comments(GraphQL 分页;GHE 需要内联 GH_HOST=)。
  2. 分流——把新的与 pending / resolution-pending / 非可执行的分开。pending_review 非空 → 停止(在草稿提交前回复将不可见)。
  3. 整合与决策——编排器在同一个上下文中带着所有线程判断合法性。应用评估量表。把每项归入 fix-list / reply-list / human-list。human-list 中「判断型」的项先由编排器自身裁决(见下方评估量表的「先裁决,再升级」):裁决出立场且动作在授权范围内的,按其裁定的 verdict 归类落地;只有裁不动或越权的才真正升级。
  4. 修复——并行派发 fixer(仅针对 fix-list 项)。把 references/agents/pr-comment-resolver.md 作为 fixer prompt 给每个 fixer 注入。1–4 个 fixer 并行;多于 4 个则分批,每批 4 个。触碰同一文件的两个 fixer 不得并行。
  5. 校验合并后状态——对所有 fixer 改动运行一次项目的完整校验。触红则针对触及文件内联重跑;未触红则视为预先存在(在 commit message 中注明)。
  6. 提交与发布归属——只提交 change set(git add <files>; git commit -m "Address PR review feedback (#PR)")。普通与 pipeline 模式在进入远端尾部前先 git push 发布;mode:return-to-caller 不推送——把修复 commit SHA 与整条远端尾部(回复、解决、checklist 勾选)存进交接记录,交由调用方发布;mode:resume 在调用方已发布后接管收尾——经 scripts/pending-feedback.py inspect-publication 对照记录的 fix SHA 与远端实际 head(fork PR 与 Enterprise 主机同样适用),只有 publication.verified: true 才进入远端尾部,且不再重跑判断、编辑或修复。resolver 从不替人撰写或提交评审草稿。
  7. 回复并解决——对每一条已处理项,发布回复(带引用的上下文)并通过 GraphQL 解决线程。同 class 项的回复要发到每一条被覆盖的线程,不能只发第一条。
  8. 验证——重新拉取;检查是否清空(减去 needs-human)。第 3 轮 = 停止并展示模式。
  9. 汇总——按 verdict 计数、校验结果;如有则附 ## Needs Needs your decision 段。Declined 行要分别点名因越界而拒的项,方便用户把它们带走;没有代码提交时省略校验行与 Diff change 行,有提交时 Diff change 用 git diff --shortstat 给出本次首个 fix commit 之前的 head 到最后一个之后的 head 的增删行数。

评估量表(编排器的判断)

在任何 fix 派发之前应用:

SKILL.md 正文按 Codex 8000 字节预算瘦身(当前约 7.9 KB),判断规则全部下沉到 references/evaluation-rubric.md 与各模式参考文件。

Pipeline 模式

当以 mode:pipeline 调用(来自 ce-babysit-pr)时:

Targeted 模式(2 步)

  1. 从 URL 抽取线程上下文(scripts/get-thread-for-comment)。
  2. 通过同一流水线进行判断 / 修复 / 回复 / 解决。不要拉取其他线程。

Pending review 陷阱

若步骤 1 时 pending_review 非空,停止。在你持有一份未提交评审期间,线程回复会被吞进那份草稿:回复调用会像成功一样返回一个 comment ID 与 URL,但在评审者提交草稿前什么也看不到。告诉用户有一份未提交评审;不要自行提交或丢弃。