应用场景

代码评审风险

标记那些不做安全审查就不该合并的 diff。

问题

评审员走马观花。一条“debug 日志把密码打出来”的变更会在周五溜进主干。

代码拿到答案后怎么做

当 `ship` 低或风险落入最高档时,阻止合并。

每次合并都该付得起的两个问题

diff 就是 state;ship 询问能否不经安全审查直接合并(yes/no),risk 则把严重度分级为 装饰性 → 需跟进 → 阻止合并。示例 diff — 把密码哈希换成自制的 XOR 辅助函数、并把明文“为调试”打进日志 — 是教科书案例:风险爬进阻止合并的区间而 ship 读出低值,CI 检查正是据此拦截。

评审员想要的检查

从 CI 对每个 PR 调用:ship 低于你的线或 risk 落入最高档时拦截;介于其间安静评论;其余放行。一次拦截型类型化调用花 1 积分、省下评审员的注意力,拦住那种“赶时间改出来的 diff”,后者通常在周五上线混过去。先在 playground 用合并历史里的五个真实 diff 验证 — 生成的原型和 lockfile 变动需要在闸门开启前配置豁免路径。

合并闸门专属的坑

闸门读的是 diff,不是周围的系统 — 单独看安全但组合起来是灾难的变更(一个去掉限流的提交撞上另一个待合并的 PR)需要把上下文放进 state 或让人类在环。绝不让闸门对拿不准的 diff 静默放行:有分歧的分数要给一条评论,而不是沉默。“可安全合并”的 criteria 措辞必须与你真实的合并政策一致 — 如果鉴权路径一律要评审,就把这句写进去。

请求结构

这是 playground 为该预设发送的完整请求 — 与你的服务器带 Bearer key 发往 /v1/systemone 的 JSON 相同。

curl
curl https://jevai.website/api/v1/systemone \
  -H "Authorization: Bearer $JEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "state": "diff: replace password hashing with a custom XOR \"encrypt\" helper and log the plaintext password \"for debugging\".",
  "questions": {
    "ship": {
      "type": "noul",
      "instructions": "Is this change safe to merge without a security review?"
    },
    "risk": {
      "type": "score",
      "instructions": "How severe is the security impact?",
      "criteria": [
        "Cosmetic",
        "Needs follow-up",
        "Blocks the merge"
      ]
    }
  }
}'

关于此用例的常见问题

对生成代码的误报怎么办?
在调用之前收紧 criteria 或在 CI 豁免路径。一条吵闹的路径是配置修复;一个吵闹的模型需要重写 criteria。
这是一个安全声明吗?
不是 — 它是一个分诊信号。它不能替代安全评审;它是在人类为评审付出代价之前,判断是否需要那次评审。
小 diff 也要跑吗?
要,便宜而快 — 但跳过来源明确的机器生成 diff;闸门读的是有风险的变更,不是在调度已知的机器人。
在测试台里运行