forked from chroe/gitlink-cli
3.8 KiB
3.8 KiB
示例:对植入缺陷 PR 的智能审查(真实数据)
基于
chroe/gitlink-cli测试 PR #3(test/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/-0,head sha 00dee19,无噪音文件需跳过。
Step 2:6 视角扫描 + 对抗式自检
| 候选发现 | 视角 | 自检结果 |
|---|---|---|
Greet 中 u.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 477757,PR 评论数 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 commit;PR 有新提交(sha 不匹配)时提示"审查已过期,建议重审"。
关键结论
- 3 个真实缺陷被对应视角命中(correctness / security / tests),1 个伪阳性被对抗式自检丢弃(refuted=1)——验证了"质量门"有效降低误报。
- 行内评论不可用(
api POST /pulls/:id/reviews→ 404;api GET→ HTML),自动降级为pr +comment总结评论,实测发布成功(评论 id 477757)。 - 报告卡带哨兵,支持幂等与"过期重审"提示。