gitlink-cli/skills/gitlink-review/examples/review-workflow.md

3.8 KiB
Raw Permalink Blame History

示例:对植入缺陷 PR 的智能审查(真实数据)

基于 chroe/gitlink-cli 测试 PR #3test/review-fixture 分支)于 2026-06-23 实际执行。 该 PR 故意植入 4 个问题用于验证 gitlink-review skill空指针、硬编码 Token、缺测试、伪阳性。


Step 1取上下文

gitlink-cli pr +view  --owner chroe --repo gitlink-cli --id 3 --format json
gitlink-cli pr +files --owner chroe --repo gitlink-cli --id 3 --format json
gitlink-cli pr +diff  --owner chroe --repo gitlink-cli --id 3 --format json

范围1 文件 review_fixture.go+47/-0head sha 00dee19,无噪音文件需跳过。

Step 26 视角扫描 + 对抗式自检

候选发现 视角 自检结果
Greetu.Name 解引用可能为 nil 的 u correctness 成立(CurrentUser 对空 token 返回 nil无外层判空→ 保留 🔴
AdminToken 硬编码 glpat-... security 成立(硬编码凭据)→ 保留 🔴
Welcome/Greet/Divide 等新函数无 _test.go tests 成立(本 PR 无测试文件)→ 保留 🟡
Divide(a,b) 除零风险 correctness 被反驳DoMath 已保证调用时 x≠0,真实路径除数非 0 → 丢弃

自检丢弃1 条refuted=1

Step 3发布报告卡真实输出

gitlink-cli pr +comment --owner chroe --repo gitlink-cli --id 3 \
  --body "<报告卡全文>"

真实结果ok: true,评论 id 477757PR 评论数 0→1。

报告卡全文(实际发布内容):

🤖 **gitlink-review 报告**

**结论**:⚠️ 建议修改2 🔴阻塞 / 1 🟡建议 / 0 🔵nit
**范围**1 文件,+47/-0跳过 0 噪音文件视角6自检丢弃1

| 严重度 | 视角 | 位置 | 问题 |
|:---:|---|---|---|
| 🔴 | correctness | review_fixture.go:18 | 空指针解引用 |
| 🔴 | security | review_fixture.go:23 | 硬编码 Token |
| 🟡 | tests | review_fixture.go:26 | 新函数无测试 |

### 🔴 阻塞(合并前需处理)
1. **[correctness] review_fixture.go:18** — `Greet``u := CurrentUser(token)` 后直接 `u.Name``token==""` 时 `CurrentUser` 返回 nil解引用 panic。
   - **建议**`if u := CurrentUser(token); u != nil { return "hello " + u.Name }; return ""`
2. **[security] review_fixture.go:23** — `var AdminToken = "glpat-FAKEFAKEFAKE0000000000"` 硬编码凭据。
   - **建议**:改 `os.Getenv("ADMIN_TOKEN")`,移除占位串。

### 🟡 建议
1. **[tests] review_fixture.go:26** — 新函数无 `_test.go`,建议补表驱动测试。

### ✅ 未发现问题的方面
- 性能:无热点循环 / N+1
- 生产风险:本文件带 `//go:build ignore`,不参与构建

### 🗑 对抗式自检丢弃1
- ~~[correctness] review_fixture.go:30 `Divide` 除零~~`DoMath` 调用前已 `if x==0 {return 0}`,真实路径不除零 → 伪阳性丢弃。

---
<!-- gitlink-review v1 | pr:3 | lenses:6 | refuted:1 | sha:00dee19 -->

Step 4幂等与过期

报告卡内嵌哨兵 <!-- gitlink-review v1 | pr:3 | lenses:6 | refuted:1 | sha:00dee19 -->

  • 重跑(不带 --refresh)时检测到哨兵 → 提示"已存在审查,使用 --refresh 更新",不重复发布。
  • sha 字段记录审查所基于的 head commitPR 有新提交sha 不匹配)时提示"审查已过期,建议重审"。

关键结论

  • 3 个真实缺陷被对应视角命中correctness / security / tests1 个伪阳性被对抗式自检丢弃refuted=1——验证了"质量门"有效降低误报。
  • 行内评论不可用api POST /pulls/:id/reviews → 404api GET → HTML自动降级为 pr +comment 总结评论,实测发布成功(评论 id 477757
  • 报告卡带哨兵,支持幂等与"过期重审"提示。